PageSourceSearch

https://www.joseph-woman.jp/js/pages/room-components-detection.js?id=487107b65cd0ba44

js joseph-woman.jp collected 2026-10-04 03:05:40 UTC 1,352,648 bytes, 2 lines download raw bytes

vendor: 4,517 bytes, lines 1-2
1/*! For license information please see room-components-detection.js.LICENSE.txt */
2(self.webpackChunk=self.webpackChunk||[]).push([[1675],{26741:e=>{function t(e){var t=new Error("Cannot find module '"+e+"'");throw t.code="MODULE_NOT_FOUND",t}t.keys=()=>[],t.resolve=t,t.id=26741,e.exports=t},31913:(e,t,n)=>{"use strict";n.d(t,{Z:()=>u});var r=n(16532);function a(e){return a="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},a(e)}function s(){s=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,i=Object.defineProperty||function(e,t,n){e[t]=n.value},o="function"==typeof Symbol?Symbol:{},l=o.iterator||"@@iterator",u=o.asyncIterator||"@@asyncIterator",d=o.toStringTag||"@@toStringTag";function p(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{p({},"")}catch(e){p=function(e,t,n){return e[t]=n}}function h(e,t,n,r){var a=t&&t.prototype instanceof x?t:x,s=Object.create(a.prototype),o=new R(r||[]);return i(s,"_invoke",{value:C(e,n,o)}),s}function c(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=h;var f="suspendedStart",m="suspendedYield",g="executing",y="completed",b={};function x(){}function w(){}function v(){}var k={};p(k,l,(function(){return this}));var I=Object.getPrototypeOf,S=I&&I(I(F([])));S&&S!==n&&r.call(S,l)&&(k=S);var N=v.prototype=x.prototype=Object.create(k);function T(e){["next","throw","return"].forEach((function(t){p(e,t,(function(e){return this._invoke(t,e)}))}))}function _(e,t){function n(s,i,o,l){var u=c(e[s],e,i);if("throw"!==u.type){var d=u.arg,p=d.value;return p&&"object"==a(p)&&r.call(p,"__await")?t.resolve(p.__await).then((function(e){n("next",e,o,l)}),(function(e){n("throw",e,o,l)})):t.resolve(p).then((function(e){d.value=e,o(d)}),(function(e){return n("throw",e,o,l)}))}l(u.arg)}var s;i(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return s=s?s.then(a,a):a()}})}function C(t,n,r){var a=f;return function(s,i){if(a===g)throw new Error("Generator is already running");if(a===y){if("throw"===s)throw i;return{value:e,done:!0}}for(r.method=s,r.arg=i;;){var o=r.delegate;if(o){var l=E(o,r);if(l){if(l===b)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===f)throw a=y,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=g;var u=c(t,n,r);if("normal"===u.type){if(a=r.done?y:m,u.arg===b)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(a=y,r.method="throw",r.arg=u.arg)}}}function E(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,E(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),b;var s=c(a,t.iterator,n.arg);if("throw"===s.type)return n.method="throw",n.arg=s.arg,n.delegate=null,b;var i=s.arg;return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,b):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,b)}function $(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function A(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function R(e){this.tryEntries=[{tryLoc:"root"}],e.forEach($,this),this.reset(!0)}function F(t){if(t||""===t){var n=t[l];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var s=-1,i=function n(){for(;++s<t.length;)if(r.call(t,s))return n.value=t[s],n.done=!1,n;return n.value=e,n.done=!0,n};return i.next=i}}throw new TypeError(a(t)+" is not iterable")}return w.prototype=v,i(N,"constructor",{value:v,configurable:!0}),i(v,"constructor",{value:w,configurable:!0}),w.displayName=p(v,d,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===w||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,v):(e.__proto__=v,p(e,d,"GeneratorFunction")),e.prototype=Object.create(N),e},t.awrap=function(e){return{__await:e}},T(_.prototype),p(_.prototype,u,(function(){return this})),t.AsyncIterator=_,t.async=function(e,n,r,a,s){void 0===s&&(s=Prom
vendor: 4,665 bytes, line 2
2ise);var i=new _(h(e,n,r,a),s);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},T(N),p(N,d,"Generator"),p(N,l,(function(){return this})),p(N,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=F,R.prototype={constructor:R,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(A),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return o.type="throw",o.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var s=this.tryEntries.length-1;s>=0;--s){var i=this.tryEntries[s],o=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(l&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var s=a;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var i=s?s.completion:{};return i.type=e,i.arg=t,s?(this.method="next",this.next=s.finallyLoc,b):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),b},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),A(n),b}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;A(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:F(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),b}},t}function i(e,t,n,r,a,s,i){try{var o=e[s](i),l=o.value}catch(e){return void n(e)}o.done?t(l):Promise.resolve(l).then(r,a)}function o(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var s=e.apply(t,n);function o(e){i(s,r,a,o,l,"next",e)}function l(e){i(s,r,a,o,l,"throw",e)}o(void 0)}))}}var l="room";const u={exit:function(){return o(s().mark((function e(){return s().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return e.abrupt("return",r.x.post("".concat(l,"/exit")));case 1:case"end":return e.stop()}}),e)})))()},conversation:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.get("".concat(l,"/conversation/").concat(e)));case 1:case"end":return t.stop()}}),t)})))()},send_message:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.post("".concat(l,"/message"),e));case 1:case"end":return t.stop()}}),t)})))()},seen_message:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.post("".concat(l,"/message/seen"),e));case 1:case"end":return t.stop()}}),t)})))()},verifyFace:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.post("".concat(l,"/verify/face"),e));case 1:case"end":return t.stop()}}),t)})))()},livenessSession:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.post("".concat(l,"/verify/liveness/session"),e));case 1:case"end":return t.stop()}}),t)})))()},livenessResult:function(e){return o(s().mark((function t(){return s().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return t.abrupt("return",r.x.post("".concat(l,"/verify/liveness/result"),e));case 1:case"end":return t.stop()}}),t)})))()}}},56587:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(23645),a=n.n(r)()((function(e){return e[1]}));
2a.push([e.id,":root{--wizard-stepper--active:rgba(101,113,255,.2);--wizard-stepper--active-font-color:#6571ff;--wizard-circle-border-color:#6571ff;--wizard-stepper--btn-bg:rgba(101,113,255,.2);--wizard-stepper--btn-color:#6571ff;--wizard-stepper--btn-border-color:transparent;--wizard-stepper--prev-btn-bg:rgba(101,113,255,.2);--wizard-stepper--prev-btn-color:#6571ff;--wizard-stepper--prev-btn-border-color:transparent;--wizard-line-color:#dee2e6;--wizard-circle-color:#dee2e6;--wizard-stepper--disabled:#dee2e6;--wizard-stepper--disabled-font:#dee2e6}",""]);const s=a},91718:(e,t,n)=>{"use strict";n.d(t,{Z:()=>s});var r=n(23645),a=n.n(r)()((function(e){return e[1]}));a.push([e.id,'.w-stepper[data-v-8fe763dc]{--circle-size:clamp(1rem,1vw,2rem);--spacing:clamp(0.25rem,1vw,0.5rem);display:flex;margin:1rem;padding:0}.w-stepper__item.active[data-v-8fe763dc],.w-stepper__item.completed[data-v-8fe763dc]{color:var(--wizard-stepper--active-font-color)!important}.w-stepper__item[data-v-8fe763dc],.w_stepper__item_content[data-v-8fe763dc]{align-items:center;display:flex;gap:var(--spacing)}.w_stepper__item_content[data-v-8fe763dc]:before{--size:3rem;background-color:var(--wizard-circle-color);border-radius:50%;content:"";display:block;height:var(--circle-size);width:var(--circle-size)}.w-stepper__item.active .w_stepper__item_content[data-v-8fe763dc]:before,.w-stepper__item.completed .w_stepper__item_content[data-v-8fe763dc]:before{background-color:var(--wizard-stepper--active);border-color:var(--wizard-circle-border-color)}.w-stepper__item[data-v-8fe763dc]:not(:first-child):before{background-color:var(--wizard-line-color);content:"";flex:1;height:2px;margin-right:.5rem;position:relative;z-index:0!important;z-index:-1}.w-stepper__item[data-v-8fe763dc]:not(:first-child){flex:1;margin-inline-start:.5rem}.step-view[data-v-8fe763dc]{padding:1rem}.vr-wizard--footer[data-v-8fe763dc]{display:grid;grid-template-columns:repeat(2,auto)}.vr-wizard--footer-left[data-v-8fe763dc]{text-align:start}.vr-wizard--footer-right[data-v-8fe763dc]{text-align:end}.vr-wizard--btn[data-v-8fe763dc]{background:var(--wizard-stepper--btn-bg);border:1px solid var(--wizard-stepper--btn-border-color);color:var(--wizard-stepper--btn-color);cursor:pointer;font-weight:600;margin:0 .5rem;padding:.5rem 1rem;text-transform:uppercase}.vr-wizard--prev-btn[data-v-8fe763dc]{background:var(--wizard-stepper--prev-btn-bg);border:1px solid var(--wizard-stepper--prev-btn-border-color);color:var(--wizard-stepper--prev-btn-color)}.vr-wizard--prev-btn[disabled][data-v-8fe763dc]{opacity:.6}@media(max-width:768px){.w-stepper__item[data-v-8fe763dc]:not(.active),.wrapper[data-v-8fe763dc]{display:none}.step-view[data-v-8fe763dc]{background:#f5f7f8;margin-block:1.25rem;padding:.725rem}}.clickable_step[data-v-8fe763dc]{cursor:pointer}.face-detection-container[data-v-8fe763dc]{align-items:center;display:flex;flex-direction:column;justify-content:center;overflow:hidden;padding:0 0 5px;position:relative}.face-detection-container .title-container[data-v-8fe763dc]{padding:10px 10px 0}.face-detection-container .title-container p[data-v-8fe763dc]{color:var(--muted-color);font-size:13px;line-height:1.3;margin:0 auto;max-width:80%}.face-detection[data-v-8fe763dc]{border:5px solid #e2eafc;border-radius:50%;margin:20px auto;max-height:310px;max-width:310px;position:relative}.face-detection canvas[data-v-8fe763dc]{border-radius:50%;height:calc(100% - 10px);left:5px;position:absolute;top:5px;transform:scaleX(-1);width:calc(100% - 10px)}.face-detection video[data-v-8fe763dc]{border:3px solid #fff;border-radius:50%;height:300px;-o-object-fit:fill;object-fit:fill;transform:scaleX(-1);width:300px}.loading-circle-overlay[data-v-8fe763dc]{stroke-width:1;stroke:#3263e9;stroke-miterlimit:10;border-radius:50%;display:block;height:calc(100% + 10px);left:-5px;margin:0 auto;position:absolute;top:-5px;transform:rotate(-90deg);transition:stroke .35s;width:calc(100% + 10px)}.loading-circle[data-v-8fe763dc]{stroke-dashoffset:154;transition:stroke-dashoffset .35s}.loading-circle-overlay.success[data-v-8fe763dc]{stroke:#2ecc71}.loading-circle-overlay.success .loading-circle[data-v-8fe763dc]{animation:stroke .5s cubic-bezier(.65,0,.45,1) forwards}.loading-circle-overlay.verifying[data-v-8fe763dc]{animation:rotate 2s linear infinite;transform:unset;transform-origin:center center}.loading-circle-overlay.verifying .loading-circle[data-v-8fe763dc]{stroke-dasharray:147,315;stroke-dashoffset:-10;stroke-linecap:round;animation:dash 1.5s ease-in-out infinite,color 6s ease-in-out infinite}.spinner-container[data-v-8fe763dc]{align-items:center;background-color:#f5f8ff;border:5px solid #fff;border-radius:50%;color:#8e8e93;display:flex;height:100%;justify-content:center;left:0;position:absolute;top:0;width:100%}
2.camera-loading[data-v-8fe763dc]{text-align:center}.camera-loading .detect-face[data-v-8fe763dc]{max-width:50px}.camera-loading .loading-message[data-v-8fe763dc]{font-size:18px;font-weight:400;margin-top:10px}.camera-loading h2.loading-message[data-v-8fe763dc]{animation:fadeOut 1s ease-in-out forwards;font-size:64px;font-weight:500}.face-verifying[data-v-8fe763dc]{height:310px;margin-top:30px}.dialog-photo[data-v-8fe763dc]{height:150px;margin-bottom:1.5rem;width:150px}',""]);const s=a},89575:(e,t,n)=>{"use strict";n.r(t),n.d(t,{default:()=>O1});var r=n(70821),a=function(e){return(0,r.pushScopeId)("data-v-8fe763dc"),e=e(),(0,r.popScopeId)(),e},s={class:"face-detection-container"},i={class:"text-center"},o={ref:"error_message",class:"error-message"},l={src:"images/face.gif",class:"face-verifying"},u={class:"web-camera-container face-detection",id:"div-detection"},d={ref:"loading_circle_overlay",class:"loading-circle-overlay",xmlns:"http://www.w3.org/2000/svg",viewBox:"25 25 50 50"},p={ref:"loading_circle",class:"loading-circle",cx:"50",cy:"50",r:"24.5",fill:"none","stroke-dasharray":"154"},h={ref:"camera_body",class:"camera-body"},c=[a((function(){return(0,r.createElementVNode)("h3",{class:"text-white"},"Verifying face...",-1)}))],f={ref:"canvas",id:"captured",width:"300",height:"300",style:{"z-index":"-1"}},m={ref:"camera",id:"camera",autoplay:"",width:640,height:480},g={class:"spinner-container",ref:"spinner",id:"spinner"},y=[a((function(){return(0,r.createElementVNode)("div",{class:"camera-loading"},[(0,r.createElementVNode)("img",{src:"/images/time_log/face-id.png",alt:"Face ID",class:"detect-face"}),(0,r.createElementVNode)("div",{class:"loading-message line-height-1"},"Initializing AI ...")],-1)}))],b={class:"d-flex align-items-center"},x=a((function(){return(0,r.createElementVNode)("span",{class:"header-icon"},[(0,r.createElementVNode)("span",{class:"ti ti-user"})],-1)})),w=["textContent"],v={class:"text-center pt-4"},k={class:"img-container"},I=["src"],S=["textContent"],N={key:0,class:"text-danger text-uppercase"},T=["textContent"];var _="/index.js",C=n(34155),E=n(48764).Buffer,$=Object.defineProperty,A=n(26741),R=(e,t)=>{for(var n in t)$(e,n,{get:t[n],enumerable:!0})};R({},{Abs:()=>ft,Acos:()=>mt,Acosh:()=>gt,AdadeltaOptimizer:()=>lf,AdagradOptimizer:()=>uf,AdamOptimizer:()=>df,AdamaxOptimizer:()=>pf,Add:()=>yt,AddN:()=>bt,All:()=>xt,Any:()=>wt,ArgMax:()=>vt,ArgMin:()=>kt,Asin:()=>It,Asinh:()=>St,Atan:()=>Nt,Atan2:()=>_t,Atanh:()=>Tt,AvgPool:()=>Ct,AvgPool3D:()=>$t,AvgPool3DGrad:()=>At,AvgPoolGrad:()=>Et,BackendWasm:()=>tJ,BatchMatMul:()=>Rt,BatchToSpaceND:()=>Ft,Bincount:()=>Dt,BitwiseAnd:()=>Mt,BroadcastArgs:()=>Lt,BroadcastTo:()=>Ot,Callback:()=>VT,CallbackList:()=>Iv,Cast:()=>zt,Ceil:()=>Pt,ClipByValue:()=>Bt,Complex:()=>Wt,ComplexAbs:()=>Vt,Concat:()=>Ut,Conv2D:()=>Gt,Conv2DBackpropFilter:()=>Ht,Conv2DBackpropInput:()=>jt,Conv3D:()=>qt,Conv3DBackpropFilterV2:()=>Kt,Conv3DBackpropInputV2:()=>Xt,Cos:()=>Yt,Cosh:()=>Zt,CropAndResize:()=>en,Cumprod:()=>Jt,Cumsum:()=>Qt,CustomCallback:()=>Tv,DataStorage:()=>ue,DenseBincount:()=>tn,DepthToSpace:()=>nn,DepthwiseConv2dNative:()=>rn,DepthwiseConv2dNativeBackpropFilter:()=>an,DepthwiseConv2dNativeBackpropInput:()=>sn,Diag:()=>on,Dilation2D:()=>ln,Dilation2DBackpropFilter:()=>dn,Dilation2DBackpropInput:()=>un,Draw:()=>pn,ENV:()=>pt,EarlyStopping:()=>HT,Einsum:()=>cn,Elu:()=>fn,EluGrad:()=>mn,Environment:()=>ot,Equal:()=>yn,Erf:()=>gn,Exp:()=>bn,ExpandDims:()=>xn,Expm1:()=>wn,FFT:()=>vn,Fill:()=>kn,FlipLeftRight:()=>In,Floor:()=>Sn,FloorDiv:()=>Nn,FromPixels:()=>Ca,FusedBatchNorm:()=>Tn,FusedConv2D:()=>Aa,FusedDepthwiseConv2D:()=>Ra,GPGPUContext:()=>Gz,GatherNd:()=>Cn,GatherV2:()=>_n,GraphModel:()=>FC,Greater:()=>En,GreaterEqual:()=>$n,History:()=>Nv,IFFT:()=>Rn,Identity:()=>An,Imag:()=>Fn,InputSpec:()=>Nw,IsFinite:()=>Dn,IsInf:()=>Mn,IsNan:()=>On,KernelBackend:()=>de,LRN:()=>Xn,LRNGrad:()=>Yn,LayerVariable:()=>kw,LayersModel:()=>_k,LeakyRelu:()=>Ln,Less:()=>zn,LessEqual:()=>Pn,LinSpace:()=>Bn,Log:()=>Wn,Log1p:()=>Vn,LogSoftmax:()=>qn,LogicalAnd:()=>Un,LogicalNot:()=>Gn,LogicalOr:()=>Hn,LogicalXor:()=>jn,LowerBound:()=>
2Kn,MathBackendCPU:()=>JE,MathBackendWebGL:()=>cB,MatrixBandPart:()=>Zn,Max:()=>Jn,MaxPool:()=>er,MaxPool3D:()=>nr,MaxPool3DGrad:()=>rr,MaxPoolGrad:()=>tr,MaxPoolWithArgmax:()=>ar,Maximum:()=>Qn,Mean:()=>sr,Min:()=>ir,Minimum:()=>or,MirrorPad:()=>lr,Mod:()=>ur,MomentumOptimizer:()=>cf,Multinomial:()=>dr,Multiply:()=>pr,Neg:()=>hr,NonMaxSuppressionV3:()=>fr,NonMaxSuppressionV4:()=>mr,NonMaxSuppressionV5:()=>gr,NotEqual:()=>cr,OP_SCOPE_SUFFIX:()=>ci,OneHot:()=>br,OnesLike:()=>yr,Optimizer:()=>of,OptimizerConstructors:()=>bm,Pack:()=>xr,PadV2:()=>wr,Pool:()=>vr,Pow:()=>kr,Prelu:()=>Ir,Prod:()=>Sr,RMSPropOptimizer:()=>ff,RNN:()=>MI,RaggedGather:()=>Nr,RaggedRange:()=>Tr,RaggedTensorToTensor:()=>_r,Range:()=>Cr,Rank:()=>Fs,Real:()=>Er,RealDiv:()=>hn,Reciprocal:()=>$r,Reduction:()=>_c,Relu:()=>Ar,Relu6:()=>Lr,Reshape:()=>Rr,ResizeBilinear:()=>Mr,ResizeBilinearGrad:()=>Or,ResizeNearestNeighbor:()=>Fr,ResizeNearestNeighborGrad:()=>Dr,Reverse:()=>zr,RotateWithOffset:()=>Ea,Round:()=>Pr,Rsqrt:()=>Br,SGDOptimizer:()=>hf,ScatterNd:()=>Wr,SearchSorted:()=>Ur,Select:()=>Gr,Selu:()=>Hr,Sequential:()=>Ak,Sigmoid:()=>Yr,Sign:()=>Xr,Sin:()=>qr,Sinh:()=>Kr,Slice:()=>jr,Softmax:()=>na,Softplus:()=>Zr,SpaceToBatchND:()=>ea,SparseFillEmptyRows:()=>ra,SparseReshape:()=>aa,SparseSegmentMean:()=>sa,SparseSegmentSum:()=>ia,SparseToDense:()=>oa,SplitV:()=>ta,Sqrt:()=>Jr,Square:()=>ua,SquaredDifference:()=>la,StaticRegexReplace:()=>da,Step:()=>_a,StridedSlice:()=>pa,StringNGrams:()=>ha,StringSplit:()=>ca,StringToHashBucketFast:()=>fa,Sub:()=>ma,Sum:()=>Qr,SymbolicTensor:()=>Tw,Tan:()=>ga,Tanh:()=>ya,Tensor:()=>$s,TensorBuffer:()=>_s,TensorScatterUpdate:()=>Vr,Tile:()=>ba,TopK:()=>xa,Transform:()=>wa,Transpose:()=>va,Unique:()=>ka,Unpack:()=>Ia,UnsortedSegmentSum:()=>Sa,UpperBound:()=>Na,Variable:()=>Rs,ZerosLike:()=>Ta,_FusedMatMul:()=>$a,abs:()=>Ko,acos:()=>Xo,acosh:()=>Yo,add:()=>Go,addN:()=>Zo,all:()=>Jo,any:()=>Qo,argMax:()=>el,argMin:()=>tl,asin:()=>nl,asinh:()=>rl,atan:()=>al,atan2:()=>sl,atanh:()=>il,avgPool:()=>Il,avgPool3d:()=>Sl,backend:()=>Pi,backend_util:()=>Im,basicLSTMCell:()=>$l,batchNorm:()=>Fl,batchNorm2d:()=>Dl,batchNorm3d:()=>Ml,batchNorm4d:()=>Ol,batchToSpaceND:()=>Al,bincount:()=>Ll,bitwiseAnd:()=>zl,booleanMaskAsync:()=>Ch,broadcastArgs:()=>Pl,broadcastTo:()=>Bl,broadcast_util:()=>du,browser:()=>Pf,buffer:()=>Bo,callbacks:()=>KT,cast:()=>Wo,ceil:()=>Wl,clipByValue:()=>Ul,clone:()=>Vo,complex:()=>mi,concat:()=>Nl,concat1d:()=>Gl,concat2d:()=>Hl,concat3d:()=>jl,concat4d:()=>ql,constraints:()=>Ww,conv1d:()=>Xl,conv2d:()=>Kl,conv2dTranspose:()=>Zl,conv3d:()=>Jl,conv3dTranspose:()=>eu,copyRegisteredKernels:()=>Ga,cos:()=>tu,cosh:()=>nu,cosineWindow:()=>Oh,cumprod:()=>ru,cumsum:()=>au,customGrad:()=>hd,data:()=>LC,denseBincount:()=>su,deprecationWarn:()=>Ii,depthToSpace:()=>iu,depthwiseConv2d:()=>ou,deregisterOp:()=>JT,device_util:()=>ri,diag:()=>lu,dilation2d:()=>uu,disableDeprecationWarnings:()=>ki,dispose:()=>Ei,disposeVariables:()=>Si,div:()=>jo,divNoNan:()=>yu,dot:()=>bu,dropout:()=>Dh,einsum:()=>xu,elu:()=>wu,enableDebugMode:()=>vi,enableProdMode:()=>wi,enclosingPowerOfTwo:()=>Mh,engine:()=>Ni,ensureShape:()=>vu,env:()=>ut,equal:()=>fu,erf:()=>ku,euclideanNorm:()=>Bu,exp:()=>Wu,expandDims:()=>Vu,expm1:()=>Uu,eye:()=>Hu,fft:()=>Zp,fill:()=>Vl,findBackend:()=>Oi,findBackendFactory:()=>Li,floor:()=>ju,floorDiv:()=>Ho,forceHalfFloat:()=>mB,fused:()=>zh,gather:()=>qu,gatherND:()=>Fh,gather_util:()=>Xf,getBackend:()=>Di,getGradient:()=>za,getKernel:()=>La,getKernelsForBackend:()=>Pa,getThreadsCount:()=>mJ,gpgpu_util:()=>vz,grad:()=>od,grads:()=>ld,greater:()=>Ku,greaterEqual:()=>Xu,ifft:()=>Jp,imag:()=>Yu,image:()=>Kc,inTopKAsync:()=>Lh,initializers:()=>nv,input:()=>Dk,io:()=>gf,irfft:()=>Qp,isFinite:()=>Zu,isInf:()=>Ju,isNaN:()=>Qu,keep:()=>$i,kernel_impls:()=>Eg,layers:()=>xv,leakyRelu:()=>ed,less:()=>td,lessEqual:()=>nd,linalg:()=>Xc,linspace:()=>rd,loadGraphModel:()=>DC,loadGraphModelSync:()=>MC,loadLayersModel:()=>$k,localResponseNormalization:()=>ad,log:()=>sd,log1p:()=>id,logSigmoid:()=>gd,logSoftmax:()=>bd,logSumExp:()=>xd,logicalAnd:()=>wd,logicalNot:()=>vd,logicalOr:()=>kd,logicalXor:()=>Id,losses:()=>Yc,lowerBound:()=>Td,matMul:()=>Tl,math:()=>Lf,max:()=>Au,maxPool:()=>_d,maxPool3d:()=>Cd,maxPoolWithArgmax:()=>Ed,maximum:()=>$d,mean:()=>Ad,memory:()=>Ti,meshgrid:()=>Dd,metrics:()=>wT,min:()=>Ru,minimum:()=>Md,mirrorPad:()=>Od,mod:()=>Ld,model:()=>Rk,models:()=>LT,moments:()=>zd,movingAverage:()=>$h,mul:()=>qo,multiRNNCell:()=>Pd,multinomial:()=>Bd,neg:()=>fd,nextFrame:()=>vm,norm:()=>Pu,notEqual:()=>Wd,oneHot:()=>Vd,ones:()=>Fd,onesLike:()=>Ud,op:()=>fi,outerProduct:()=>Gd,pad:()=>Hd,pad1d:()=>jd,pad2d:()=>qd,pad3d:()=>Kd,pad4d:()=>Xd,pool:()=>Zd,pow:()=>Fu,prelu:()=>Jd,print:()=>Uo,prod:()=>Qd,profile:()=>_i,raggedGather:()=>ep,raggedRange:()=>tp,raggedTensorToTensor:()=>np,rand:()=>rp,randomGamma:()=>Ip,randomNormal:()=>Sp,randomStandardNormal:()=>Np,randomUniform:()=>Tp,randomUniformInt:()=>_p,range:()=>Cp,ready:()=>Fi,real:()=>Ep,reciprocal:()=>$p,registerBackend:()=>zi,registerCallbackConstructor:()=>Mk,registerGradient:()=>Wa,registerKernel:()=>Ba,registerOp:()=>YT,regularizers:()=>zT,relu:()=>Ap,relu6:()=>Rp,removeBackend:()=>Mi,reshape:()=>kl,reverse:()=>Fp,reverse1d:()=>Dp,reverse2d:()=>Mp,reverse3d:()=>Op,reverse4d:()=>Lp,rfft:()=>th,round:()=>zp,rsqrt:()=>Pp,scalar:()=>Du,scatterND:()=>Ah,scatter_util:()=>fh,searchSorted:()=>Nd,selu:()=>Bp,separableConv2d:()=>Wp,sequential:()=>Fk,serialization:()=>Qc,setBackend:()=>Ri,setPlatform:()=>Bi,setThreadsCount:()=>fJ,setWasmPath:()=>dJ,setWasmPaths:()=>pJ,setWebGLContext:()=>PO,setdiff1dAsync:()=>Vp,shared:()=>QE,sigmoid:()=>_l,sign:()=>Up,signal:()=>qc,sin:()=>Gp,sinh:()=>Hp,slice:()=>Cl,slice1d:()=>jp,slice2d:()=>qp,slice3d:()=>Kp,slice4d:()=>Xp,slice_util:()=>Zf,softmax:()=>Yp,softplus:()=>md,spaceToBatchND:()=>Yd,sparse:()=>Zc,sparseToDense:()=>Rh,spectral:()=>jc,split:()=>eh,sqrt:()=>Mu,square:()=>Ou,squaredDifference:()=>nh,squeeze:()=>rh,stack:()=>ah,step:()=>sh,stridedSlice:()=>ih,string:()=>Jc,sub:()=>yd,sum:()=>Lu,sumOutType:()=>Vs,tan:()=>oh,tanh:()=>El,tensor:()=>yi,tensor1d:()=>lh,tensor2d:()=>uh,tensor3d:()=>dh,tensor4d:()=>ph,tensor5d:()=>hh,tensor6d:()=>
vendor: 5,333 bytes, line 2
2ch,tensorScatterUpdate:()=>bh,tensor_util:()=>Ps,test_util:()=>sp,tidy:()=>Ci,tile:()=>Gu,time:()=>Ai,topk:()=>xh,train:()=>xm,transpose:()=>Eh,truncatedNormal:()=>wh,unique:()=>vh,unregisterGradient:()=>Ua,unregisterKernel:()=>Va,unsortedSegmentSum:()=>kh,unstack:()=>Ih,upcastType:()=>Ws,upperBound:()=>Sh,util:()=>ja,valueAndGrad:()=>ud,valueAndGrads:()=>dd,variable:()=>Nh,variableGrads:()=>pd,version:()=>bJ,version_converter:()=>OC,version_core:()=>ym,version_cpu:()=>TR,version_layers:()=>lk,version_wasm:()=>gJ,version_webgl:()=>fB,webgl:()=>gB,webgl_util:()=>FO,where:()=>mu,whereAsync:()=>_h,zeros:()=>Rd,zerosLike:()=>gu});var F=Object.create,D=Object.defineProperty,M=Object.getOwnPropertyDescriptor,O=Object.getOwnPropertyNames,L=Object.getPrototypeOf,z=Object.prototype.hasOwnProperty,P=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),B=(e,t)=>{for(var n in t)D(e,n,{get:t[n],enumerable:!0})},W=(e,t,n)=>(n=null!=e?F(L(e)):{},((e,t,n,r)=>{if(t&&"object"==typeof t||"function"==typeof t)for(let a of O(t))!z.call(e,a)&&a!==n&&D(e,a,{get:()=>t[a],enumerable:!(r=M(t,a))||r.enumerable});return e})(!t&&e&&e.__esModule?n:D(n,"default",{value:e,enumerable:!0}),e)),V=P(((e,t)=>{t.exports=r;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function r(e,t,n){this.low=0|e,this.high=0|t,this.unsigned=!!n}function a(e){return!0===(e&&e.__isLong__)}r.prototype.__isLong__,Object.defineProperty(r.prototype,"__isLong__",{value:!0}),r.isLong=a;var s={},i={};function o(e,t){var n,r,a;return t?(a=0<=(e>>>=0)&&e<256)&&(r=i[e])?r:(n=u(e,(0|e)<0?-1:0,!0),a&&(i[e]=n),n):(a=-128<=(e|=0)&&e<128)&&(r=s[e])?r:(n=u(e,e<0?-1:0,!1),a&&(s[e]=n),n)}function l(e,t){if(isNaN(e))return t?b:y;if(t){if(e<0)return b;if(e>=f)return I}else{if(e<=-m)return S;if(e+1>=m)return k}return e<0?l(-e,t).neg():u(e%c|0,e/c|0,t)}function u(e,t,n){return new r(e,t,n)}r.fromInt=o,r.fromNumber=l,r.fromBits=u;var d=Math.pow;function p(e,t,n){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return y;if("number"==typeof t?(n=t,t=!1):t=!!t,(n=n||10)<2||36<n)throw RangeError("radix");var r;if((r=e.indexOf("-"))>0)throw Error("interior hyphen");if(0===r)return p(e.substring(1),t,n).neg();for(var a=l(d(n,8)),s=y,i=0;i<e.length;i+=8){var o=Math.min(8,e.length-i),u=parseInt(e.substring(i,i+o),n);if(o<8){var h=l(d(n,o));s=s.mul(h).add(l(u))}else s=(s=s.mul(a)).add(l(u))}return s.unsigned=t,s}function h(e,t){return"number"==typeof e?l(e,t):"string"==typeof e?p(e,t):u(e.low,e.high,"boolean"==typeof t?t:e.unsigned)}r.fromString=p,r.fromValue=h;var c=4294967296,f=c*c,m=f/2,g=o(1<<24),y=o(0);r.ZERO=y;var b=o(0,!0);r.UZERO=b;var x=o(1);r.ONE=x;var w=o(1,!0);r.UONE=w;var v=o(-1);r.NEG_ONE=v;var k=u(-1,2147483647,!1);r.MAX_VALUE=k;var I=u(-1,-1,!0);r.MAX_UNSIGNED_VALUE=I;var S=u(0,-2147483648,!1);r.MIN_VALUE=S;var N=r.prototype;N.toInt=function(){return this.unsigned?this.low>>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*c+(this.low>>>0):this.high*c+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36<e)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative()){if(this.eq(S)){var t=l(e),n=this.div(t),r=n.mul(t).sub(this);return n.toString(e)+r.toInt().toString(e)}return"-"+this.neg().toString(e)}for(var a=l(d(e,6),this.unsigned),s=this,i="";;){var o=s.div(a),u=(s.sub(o.mul(a)).toInt()>>>0).toString(e);if((s=o).isZero())return u+i;for(;u.length<6;)u="0"+u;i=""+u+i}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(S)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&!(e&1<<t);t--);return 0!=this.high?t+33:t+1},N.isZero=function(){return 0===this.high&&0===this.low},N.eqz=N.isZero,N.isNegative=function(){return!this.unsigned&&this.high<0},N.isPositive=function(){return this.unsigned||this.high>=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return a(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0}
vendor: 6,063 bytes, line 2
2,N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(a(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),n=e.isNegative();return t&&!n?-1:!t&&n?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(S)?S:this.not().add(x)},N.neg=N.negate,N.add=function(e){a(e)||(e=h(e));var t=this.high>>>16,n=65535&this.high,r=this.low>>>16,s=65535&this.low,i=e.high>>>16,o=65535&e.high,l=e.low>>>16,d=0,p=0,c=0,f=0;return c+=(f+=s+(65535&e.low))>>>16,p+=(c+=r+l)>>>16,d+=(p+=n+o)>>>16,d+=t+i,u((c&=65535)<<16|(f&=65535),(d&=65535)<<16|(p&=65535),this.unsigned)},N.subtract=function(e){return a(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return y;if(a(e)||(e=h(e)),n)return u(n.mul(this.low,this.high,e.low,e.high),n.get_high(),this.unsigned);if(e.isZero())return y;if(this.eq(S))return e.isOdd()?S:y;if(e.eq(S))return this.isOdd()?S:y;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(g)&&e.lt(g))return l(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,r=65535&this.high,s=this.low>>>16,i=65535&this.low,o=e.high>>>16,d=65535&e.high,p=e.low>>>16,c=65535&e.low,f=0,m=0,b=0,x=0;return b+=(x+=i*c)>>>16,m+=(b+=s*c)>>>16,b&=65535,m+=(b+=i*p)>>>16,f+=(m+=r*c)>>>16,m&=65535,f+=(m+=s*p)>>>16,m&=65535,f+=(m+=i*d)>>>16,f+=t*c+r*p+s*d+i*o,u((b&=65535)<<16|(x&=65535),(f&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(a(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,r,s;if(n)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?u((this.unsigned?n.div_u:n.div_s)(this.low,this.high,e.low,e.high),n.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?b:y;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return b;if(e.gt(this.shru(1)))return w;s=b}else{if(this.eq(S))return e.eq(x)||e.eq(v)?S:e.eq(S)?x:(t=this.shr(1).div(e).shl(1)).eq(y)?e.isNegative()?x:v:(r=this.sub(e.mul(t)),s=t.add(r.div(e)));if(e.eq(S))return this.unsigned?b:y;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();s=y}for(r=this;r.gte(e);){t=Math.max(1,Math.floor(r.toNumber()/e.toNumber()));for(var i=Math.ceil(Math.log(t)/Math.LN2),o=i<=48?1:d(2,i-48),p=l(t),c=p.mul(e);c.isNegative()||c.gt(r);)c=(p=l(t-=o,this.unsigned)).mul(e);p.isZero()&&(p=x),s=s.add(p),r=r.sub(c)}return s},N.div=N.divide,N.modulo=function(e){return a(e)||(e=h(e)),n?u((this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,e.low,e.high),n.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return u(~this.low,~this.high,this.unsigned)},N.and=function(e){return a(e)||(e=h(e)),u(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return a(e)||(e=h(e)),u(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return a(e)||(e=h(e)),u(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return a(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?u(this.low<<e,this.high<<e|this.low>>>32-e,this.unsigned):u(0,this.low<<e-32,this.unsigned)},N.shl=N.shiftLeft,N.shiftRight=function(e){return a(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?u(this.low>>>e|this.high<<32-e,this.high>>e,this.unsigned):u(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(a(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?u(this.low>>>e|t<<32-e,t>>>e,this.unsigned):u(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},r.fromBytes=function(e,t,n){return n?r.fromBytesLE(e,t):r.fromBytesBE(e,t)},r.fromBytesLE=function(e,t){return new r(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},r.fromBytesBE=function(e,t){return new r(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}})),U=P((()=>{})),G=P((()=>{})),H=P(((e,t)=>{!function(e,t,n){function r(e){var t=this,n=function(){var e=4022871197,t=function(t){t=String(t);for(var n=0;n<t.length;n++){var r=.02519603282416938*(e+=t.charCodeAt(n));r-=e=r>>>0,e=(r*=e)>>>0,e+=4294967296*(r-=e)}return 2.3283064365386963e-10*(e>>>0)};return t}();t.next=function(){var e=2091639*t.s0+2.3283064365386963e-10*t.c;return t.s0=t.s1,t.s1=t.s2,t.s2=e-(t.c=0|e)},t.c=1,t.s0=n(" "),t.s1=n(" "),t.s2=n(" "),t.s0-=n(e),t.s0<0&&(t.s0+=1),t.s1-=n(e),t.s1<0&&(t.s1+=1),t.s2-=n(e),t.s2<0&&(t.s2+=1),n=null}function a(e,t){return t.c=e.c,t.s0=e.s0,t.s1=e.s1,t.s2=e.s2,t}function s(e,t){var n=new r(e),s=t&&t.state,i=n.next;return i.int32=function(){return 4294967296*n.next()|0},i.double=function(){return i()+11102230246251565e-32*(2097152*i()|0)},i.quick=i,s&&("object"==typeof s&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.alea=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),j=P(((e,t)=>{!function(e,t,n){function r(e){var t=this,n="";t.x=0,t.y=0,t.z=0,t.w=0,t.next=function(){var e=t.x^t.x<<11;return t.x=t.y,t.y=t.z,t.z=t.w,t.w^=t.w>>>19^e^e>>>8},e===(0|e)?t.x=e:n+=e;for(var r=0;r<n.length+64;
2r++)t.x^=0|n.charCodeAt(r),t.next()}function a(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t}function s(e,t){var n=new r(e),s=t&&t.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=n.next,i.quick=i,s&&("object"==typeof s&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.xor128=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),q=P(((e,t)=>{!function(e,t,n){function r(e){var t=this,n="";t.next=function(){var e=t.x^t.x>>>2;return t.x=t.y,t.y=t.z,t.z=t.w,t.w=t.v,(t.d=t.d+362437|0)+(t.v=t.v^t.v<<4^e^e<<1)|0},t.x=0,t.y=0,t.z=0,t.w=0,t.v=0,e===(0|e)?t.x=e:n+=e;for(var r=0;r<n.length+64;r++)t.x^=0|n.charCodeAt(r),r==n.length&&(t.d=t.x<<10^t.x>>>4),t.next()}function a(e,t){return t.x=e.x,t.y=e.y,t.z=e.z,t.w=e.w,t.v=e.v,t.d=e.d,t}function s(e,t){var n=new r(e),s=t&&t.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=n.next,i.quick=i,s&&("object"==typeof s&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.xorwow=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),K=P(((e,t)=>{!function(e,t,n){function r(e){var t=this;t.next=function(){var e,n,r=t.x,a=t.i;return e=r[a],n=(e^=e>>>7)^e<<24,n^=(e=r[a+1&7])^e>>>10,n^=(e=r[a+3&7])^e>>>3,n^=(e=r[a+4&7])^e<<7,e=r[a+7&7],n^=(e^=e<<13)^e<<9,r[a]=n,t.i=a+1&7,n},function(e,t){var n,r=[];if(t===(0|t))r[0]=t;else for(t=""+t,n=0;n<t.length;++n)r[7&n]=r[7&n]<<15^t.charCodeAt(n)+r[n+1&7]<<13;for(;r.length<8;)r.push(0);for(n=0;n<8&&0===r[n];++n);for(8==n?r[7]=-1:r[n],e.x=r,e.i=0,n=256;n>0;--n)e.next()}(t,e)}function a(e,t){return t.x=e.x.slice(),t.i=e.i,t}function s(e,t){null==e&&(e=+new Date);var n=new r(e),s=t&&t.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=n.next,i.quick=i,s&&(s.x&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.xorshift7=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),X=P(((e,t)=>{!function(e,t,n){function r(e){var t=this;t.next=function(){var e,n,r=t.w,a=t.X,s=t.i;return t.w=r=r+1640531527|0,n=a[s+34&127],e=a[s=s+1&127],n^=n<<13,e^=e<<17,n^=n>>>15,e^=e>>>12,n=a[s]=n^e,t.i=s,n+(r^r>>>16)|0},function(e,t){var n,r,a,s,i,o=[],l=128;for(t===(0|t)?(r=t,t=null):(t+="\0",r=0,l=Math.max(l,t.length)),a=0,s=-32;s<l;++s)t&&(r^=t.charCodeAt((s+32)%t.length)),0===s&&(i=r),r^=r<<10,r^=r>>>15,r^=r<<4,r^=r>>>13,s>=0&&(i=i+1640531527|0,a=0==(n=o[127&s]^=r+i)?a+1:0);for(a>=128&&(o[127&(t&&t.length||0)]=-1),a=127,s=512;s>0;--s)r=o[a+34&127],n=o[a=a+1&127],r^=r<<13,n^=n<<17,r^=r>>>15,n^=n>>>12,o[a]=r^n;e.w=i,e.X=o,e.i=a}(t,e)}function a(e,t){return t.i=e.i,t.w=e.w,t.X=e.X.slice(),t}function s(e,t){null==e&&(e=+new Date);var n=new r(e),s=t&&t.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=n.next,i.quick=i,s&&(s.X&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.xor4096=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),Y=P(((e,t)=>{!function(e,t,n){function r(e){var t=this,n="";t.next=function(){var e=t.b,n=t.c,r=t.d,a=t.a;return e=e<<25^e>>>7^n,n=n-r|0,r=r<<24^r>>>8^a,a=a-e|0,t.b=e=e<<20^e>>>12^n,t.c=n=n-r|0,t.d=r<<16^n>>>16^a,t.a=a-e|0},t.a=0,t.b=0,t.c=-1640531527,t.d=1367130551,e===Math.floor(e)?(t.a=e/4294967296|0,t.b=0|e):n+=e;for(var r=0;r<n.length+20;r++)t.b^=0|n.charCodeAt(r),t.next()}function a(e,t){return t.a=e.a,t.b=e.b,t.c=e.c,t.d=e.d,t}function s(e,t){var n=new r(e),s=t&&t.state,i=function(){return(n.next()>>>0)/4294967296};return i.double=function(){do{var e=((n.next()>>>11)+(n.next()>>>0)/4294967296)/(1<<21)}while(0===e);return e},i.int32=n.next,i.quick=i,s&&("object"==typeof s&&a(s,n),i.state=function(){return a(n,{})}),i}t&&t.exports?t.exports=s:n&&n.amd?n((function(){return s})):this.tychei=s}(0,"object"==typeof t&&t,"function"==typeof define&&define)})),Z=P((()=>{})),J=P(((e,t)=>{!function(e,r,a){var s,i=256,o="random",l=a.pow(i,6),u=a.pow(2,52),d=2*u,p=i-1;function h(t,n,p){var h=[],b=g(m((n=1==n?{entropy:!0}:n||{}).entropy?[t,y(r)]:null==t?function(){try{var t;return s&&(t=s.randomBytes)?t=t(i):(t=new Uint8Array(i),(e.crypto||e.msCrypto).getRandomValues(t)),y(t)}catch(t){var n=e.navigator,a=n&&n.plugins;return[+new Date,e,a,e.screen,y(r)]}}():t,3),h),x=new c(h),w=function(){for(var e=x.g(6),t=l,n=0;e<u;)e=(e+n)*i,t*=i,n=x.g(1);for(;e>=d;)e/=2,t/=2,n>>>=1;return(e+n)/t};return w.int32=function(){return 0|x.g(4)},w.quick=function(){return x.g(4)/4294967296},w.double=w,g(y(x.S),r),(n.pass||p||function(e,t,n,r){return r&&(r.S&&f(r,x),e.state=function(){return f(x,{})}),n?(a[o]=e,t):e})(w,b,"global"in n?n.global:this==a,n.state)}function c(e){var t,n=e.length,r=this,a=0,s=r.i=r.j=0,o=r.S=[];for(n||(e=[n++]);a<i;)o[a]=a++;for(a=0;a<i;a++)o[a]=o[s=p&s+e[a%n]+(t=o[a])],o[s]=t;(r.g=function(e){for(var t,n=0,a=r.i,s=r.j,o=r.S;e--;)t=o[a=p&a+1],n=n*i+o[p&(o[a]=o[s=p&s+t])+(o[s]=t)];return r.i=a,r.j=s,n})(i)}function f(e,t){return t.i=e.i,t.j=e.j,t.S=e.S.slice(),t}function m(e,t){var n,r=[],a=typeof e;if(t&&"object"==a)for(n in e)try{r.push(m(e[n],t-1))}catch(e){}return r.length?r:"string"==a?e:e+"\0"}function g(e,t){for(var n,r=e+"",a=0;a<r.length;)t[p&a]=p&(n^=19*t[p&a])+r.charCodeAt(a++);return y(t)}function y(e){return String.fromCharCode.apply(0,e)}if(g(a.random(),r),"object"==typeof t&&t.exports){t.exports=h;try{s=Z()}catch(e){}}else"function"==typeof define&&n.amdO?define((function(){return h})):a["seed"+o]=h}("undefined"!=typeof self?self:e,[],Math)})),Q=P(((e,t)=>{var n=H(),r=j(),a=q(),s=K(),i=X(),o=Y(),l=J();l.alea=n,l.xor128=r,l.xorwow=a,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l})),ee=P((()=>{})),te=P((()=>{})),ne=P((()=>{})),re=P((()=>{})),ae=P((()=>{})),se=P((()=>{})),ie=P(((e,t)=>{var r,a=(r=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||_,function(e){function t(){return R.buffer!=M&&H(R.buffer),L}function a(){return R.buffer!=M&&H(R.buffer),z}function s(){return R.buffer!=M&&H(R.buffer),P}function i(){return R.buffer!=M&&H(R.buffer),B}var o,l,u,d=void 0!==(e=e||{})?e:{};d.ready=new Promise((function(e,t){o=e,l=t})),void 0!==C&&C.listeners&&(u={uncaughtException:C.listeners("uncaughtException"),unhandledRejection:C.listeners("unhandledRejection")});var p,h,c,f=Object.assign({},d),m=[],g=(e,t)=>{throw t},y="object"==typeof window,b="function"==typeof importScripts,x="object"==typeof C&&"object"==typeof C.versions&&"string"==typeof C.versions.node,w=d.ENVIRONMENT_IS_PTHREAD||!1,v="";function k(e){return d.locateFile?d.locateFile(e,v):v+e}if(x){var I=te(),S=ne();let e;v=b?S.dirname(v)+"/":"//",p=(e,t)=>
2(e=pe(e)?new URL(e):S.normalize(e),I.readFileSync(e,t?void 0:"utf8")),c=e=>{var t=p(e,!0);return t.buffer||(t=new Uint8Array(t)),t},h=(e,t,n)=>{e=pe(e)?new URL(e):S.normalize(e),I.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},C.argv.length>1&&C.argv[1].replace(/\\/g,"/"),m=C.argv.slice(2),C.on("uncaughtException",(function(e){if(!(e instanceof fe))throw e})),C.on("unhandledRejection",(function(e){throw e})),g=(e,t)=>{if(Z())throw C.exitCode=e,t;(function(e){e instanceof fe||$("exiting due to exception: "+e)})(t),C.exit(e)},d.inspect=function(){return"[Emscripten Module object]"};try{e=re()}catch(e){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),e}n.g.Worker=e.Worker}else(y||b)&&(b?v=self.location.href:"undefined"!=typeof document&&document.currentScript&&(v=document.currentScript.src),void 0!==r&&r&&(v=r),v=0!==v.indexOf("blob:")?v.substr(0,v.replace(/[?#].*/,"").lastIndexOf("/")+1):"",x||(p=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},b&&(c=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),h=(e,t,n)=>{var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)}));x&&"undefined"==typeof performance&&(n.g.performance=ae().performance);var N=console.log.bind(console),T=console.warn.bind(console);x&&(N=e=>I.writeSync(1,e+"\n"),T=e=>I.writeSync(2,e+"\n"));var _,E=d.print||N,$=d.printErr||T;Object.assign(d,f),f=null,d.arguments&&(m=d.arguments),d.thisProgram&&d.thisProgram,d.quit&&(g=d.quit),Atomics.load,Atomics.store,Atomics.compareExchange,d.wasmBinary&&(_=d.wasmBinary);var A=d.noExitRuntime||!0;"object"!=typeof WebAssembly&&oe("no native wasm support detected");var R,F,D,M,O,L,z,P,B,W=!1,V="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function U(e,t,n){for(var r=(t>>>=0)+n,a=t;e[a]&&!(a>=r);)++a;if(a-t>16&&e.buffer&&V)return V.decode(e.buffer instanceof SharedArrayBuffer?e.slice(t,a):e.subarray(t,a));for(var s="";t<a;){var i=e[t++];if(128&i){var o=63&e[t++];if(192!=(224&i)){var l=63&e[t++];if((i=224==(240&i)?(15&i)<<12|o<<6|l:(7&i)<<18|o<<12|l<<6|63&e[t++])<65536)s+=String.fromCharCode(i);else{var u=i-65536;s+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else s+=String.fromCharCode((31&i)<<6|o)}else s+=String.fromCharCode(i)}return s}function G(e,n){return(e>>>=0)?U(t(),e,n):""}function H(e){M=e,d.HEAP8=O=new Int8Array(e),d.HEAP16=new Int16Array(e),d.HEAP32=z=new Int32Array(e),d.HEAPU8=L=new Uint8Array(e),d.HEAPU16=new Uint16Array(e),d.HEAPU32=P=new Uint32Array(e),d.HEAPF32=new Float32Array(e),d.HEAPF64=B=new Float64Array(e)}w&&(M=d.buffer);var j=d.INITIAL_MEMORY||16777216;if(w)R=d.wasmMemory,M=d.buffer;else if(d.wasmMemory)R=d.wasmMemory;else if(!((R=new WebAssembly.Memory({initial:j/65536,maximum:65536,shared:!0})).buffer instanceof SharedArrayBuffer))throw $("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may 
2need to set a flag"),x&&$("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");R&&(M=R.buffer),j=M.byteLength,H(M);var q,K=[],X=[],Y=[];function Z(){return A}function J(){!w&&we(X)}var Q=0,ee=null,ie=null;function oe(e){d.onAbort&&d.onAbort(e),$(e="Aborted("+e+")"),W=!0,D=1,e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);throw l(t),t}var le,ue="data:application/octet-stream;base64,";function de(e){return e.startsWith(ue)}function pe(e){return e.startsWith("file://")}function he(e){try{if(e==le&&_)return new Uint8Array(_);if(c)return c(e);throw"both async and sync fetching of the wasm failed"}catch(e){oe(e)}}de(le="tfjs-backend-wasm-threaded-simd.wasm")||(le=k(le));var ce={};function fe(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function me(e){var t=xe.pthreads[e];(function(e,t){e||oe(t)})(t),xe.returnWorkerToPool(t)}function ge(e){var t=xe.getNewWorker();if(!t)return 6;xe.runningWorkers.push(t),xe.pthreads[e.pthread_ptr]=t,t.pthread_ptr=e.pthread_ptr;var n={cmd:"run",start_routine:e.startRoutine,arg:e.arg,pthread_ptr:e.pthread_ptr};return t.runPthread=()=>{x&&t.ref(),t.postMessage(n,e.transferList),delete t.runPthread},t.loaded&&t.runPthread(),0}function ye(e){if(w)return Ce(1,1,e);D=e,Z()||(xe.terminateAllThreads(),d.onExit&&d.onExit(e),W=!0),g(e,new fe(e))}var be=function(e,t){if(D=e,!t&&w)throw ve(e),"unwind";ye(e)},xe={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){w?xe.initWorker():xe.initMainThread()},initMainThread:function(){for(var e=8;e--;)xe.allocateUnusedWorker()},initWorker:function(){A=!1},setExitStatus:function(e){D=e},terminateAllThreads:function(){for(var e of Object.values(xe.pthreads))xe.returnWorkerToPool(e);for(var e of xe.unusedWorkers)e.terminate();xe.unusedWorkers=[]},returnWorkerToPool:function(e){var t=e.pthread_ptr;delete xe.pthreads[t],xe.unusedWorkers.push(e),xe.runningWorkers.splice(xe.runningWorkers.indexOf(e),1),e.pthread_ptr=0,x&&e.unref(),Ke(t)},receiveObjectTransfer:function(e){},threadInitTLS:function(){xe.tlsInitFunctions.forEach((e=>e()))},loadWasmModuleToWorker:function(e,t){e.onmessage=n=>{var r=n.data,a=r.cmd;if(e.pthread_ptr&&(xe.currentProxiedOperationCallerThread=e.pthread_ptr),r.targetThread&&r.targetThread!=Ge()){var s=xe.pthreads[r.targetThread];return s?s.postMessage(r,r.transferList):$('Internal error! Worker sent a message "'+a+'" to target pthread '+r.targetThread+", but that thread no longer exists!"),void(xe.currentProxiedOperationCallerThread=void 0)}"processProxyingQueue"===a?Te(r.queue):"spawnThread"===a?ge(r):"cleanupThread"===a?me(r.thread):"killThread"===a?function(e){var t=xe.pthreads[e];delete xe.pthreads[e],t.terminate(),Ke(e),xe.runningWorkers.splice(xe.runningWorkers.indexOf(t),1),t.pthread_ptr=0}(r.thread):"cancelThread"===a?function(e){xe.pthreads[e].postMessage({cmd:"cancel"})}(r.thread):"loaded"===a?(e.loaded=!0,x&&e.unref(),t&&t(e),e.runPthread&&e.runPthread()):"print"===a?E("Thread "+r.threadId+": "+r.text):"printErr"===a?$("Thread "+r.threadId+": "+r.text):"alert"===a?alert("Thread "+r.threadId+": "+r.text):"setimmediate"===r.target?e.postMessage(r):"callHandler"===a?d[r.handler](...r.args):a&&$("worker sent an unknown command "+a),xe.currentProxiedOperationCallerThread=void 0},e.onerror=e=>{throw $("worker sent an error! "+e.filename+":"+e.lineno+": "+e.message),e},x&&(e.on("message",(function(t){e.onmessage({data:t})})),e.on("error",(function(t){e.onerror(t)})),e.on("detachedExit",(function(){})));var n=[];for(var a of["onExit","onAbort","print","printErr"])d.hasOwnProperty(a)&&n.push(a);e.postMessage({cmd:"load",handlers:n,urlOrBlob:d.mainScriptUrlOrBlob||r,wasmMemory:R,wasmModule:F})},allocateUnusedWorker:function(){var e,t=k("tfjs-backend-wasm-threaded-simd.worker.js");e=new Worker(t),xe.unusedWorkers.push(e)},getNewWorker:function(){return 0==xe.unusedWorkers.length&&(xe.allocateUnusedWorker(),xe.loadWasmModuleToWorker(xe.unusedWorkers[0])),xe.unusedWorkers.pop()}};function we(e){for(;e.length>0;)e.shift()(d)}function ve(e){if(w)return Ce(2,0,e);try{be(e)}catch(e){!function(e){if(e instanceof fe||"unwind"==e)return D;g(1,e)}(e)}}d.PThread=xe,d.establishStackSpace=function(){var e=Ge(),t=a()[e+52>>>2],n=a()[e+56>>>2];Ye(t,t-n),Je(t)};var ke,Ie=[];function Se(e,t,n,r){return w?Ce(3,1,e,t,n,r):Ne(e,t,n,r)}function Ne(e,t,n,r){if("undefined"==typeof SharedArrayBuffer)return $("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var a=[];if(w&&0===a.length)return Se(e,t,n,r);var s={startRoutine:n,pthread_ptr:e,arg:r,transferList:a};return w?(s.cmd="spawnThread",postMessage(s,a),0):ge(s)}function Te(e){Atomics.store(a(),e>>2,1),Ge()&&qe(e),Atomics.compareExchange(a(),e>>2,1,0)}function _e(e){_e.shown||(_e.shown={}),_e.shown[e]||(_e.shown[e]=1,x&&(e="warning: "+e),$(e))}function Ce(e,t){var n=arguments.length-2,r=arguments;return function(e){var t=Ze(),n=e();return Je(t),n}((()=>{for(var a=n,s=Qe(8*a),o=s>>3,l=0;l<n;l++){var u=r[2+l];i()[o+l>>>0]=u}return je(e,a,s,t)}))}d.invokeEntryPoint=function(e,t){var n=function(e){var t=Ie[e];return t||(e>=Ie.length&&(Ie.length=e+1),Ie[e]=t=q.get(e)),t}(e)(t);Z()?xe.setExitStatus(n):Xe(n)},d.executeNotifiedProxyingQueue=Te,ke=x?()=>{var e=C.hrtime();return 1e3*e[0]+e[1]/1e6}:()=>performance.timeOrigin+performance.now();var Ee=[];
2function $e(e){try{return R.grow(e-M.byteLength+65535>>>16),H(R.buffer),1}catch(e){}}function Ae(e){return w?Ce(4,1,e):52}function Re(e,t,n,r,a){return w?Ce(5,1,e,t,n,r,a):70}var Fe=[null,[],[]];function De(e,t){var n=Fe[e];0===t||10===t?((1===e?E:$)(U(n,0)),n.length=0):n.push(t)}function Me(e,n,r,a){if(w)return Ce(6,1,e,n,r,a);for(var i=0,o=0;o<r;o++){var l=s()[n>>>2],u=s()[n+4>>>2];n+=8;for(var d=0;d<u;d++)De(e,t()[l+d>>>0]);i+=u}return s()[a>>>2]=i,0}function Oe(e){return d["_"+e]}function Le(e,t){(R.buffer!=M&&H(R.buffer),O).set(e,t>>>0)}function ze(e,n,r,a,s){var i={string:e=>{var n=0;if(null!=e&&0!==e){var r=1+(e.length<<2);!function(e,n,r){!function(e,t,n,r){if(!(r>0))return 0;n>>>=0;for(var a=n+r-1,s=0;s<e.length;++s){var i=e.charCodeAt(s);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++s)),i<=127){if(n>=a)break;t[n++>>>0]=i}else if(i<=2047){if(n+1>=a)break;t[n++>>>0]=192|i>>6,t[n++>>>0]=128|63&i}else if(i<=65535){if(n+2>=a)break;t[n++>>>0]=224|i>>12,t[n++>>>0]=128|i>>6&63,t[n++>>>0]=128|63&i}else{if(n+3>=a)break;t[n++>>>0]=240|i>>18,t[n++>>>0]=128|i>>12&63,t[n++>>>0]=128|i>>6&63,t[n++>>>0]=128|63&i}}t[n>>>0]=0}(e,t(),n,r)}(e,n=Qe(r),r)}return n},array:e=>{var t=Qe(e.length);return Le(e,t),t}},o=Oe(e),l=[],u=0;if(a)for(var d=0;d<a.length;d++){var p=i[r[d]];p?(0===u&&(u=Ze()),l[d]=p(a[d])):l[d]=a[d]}var h,c=o.apply(null,l);return h=c,0!==u&&Je(u),c=function(e){return"string"===n?G(e):"boolean"===n?!!e:e}(h),c}xe.init();var Pe,Be,We,Ve=[null,ye,ve,Se,Ae,Re,Me],Ue={__emscripten_init_main_thread_js:function(e){He(e,!b,1,!y),xe.threadInitTLS()},__emscripten_thread_cleanup:function(e){w?postMessage({cmd:"cleanupThread",thread:e}):me(e)},__pthread_create_js:Ne,_emscripten_default_pthread_stack_size:function(){return 65536},_emscripten_get_now_is_monotonic:function(){return!0},_emscripten_notify_task_queue:function(e,t,n,r){if(e==t)setTimeout((()=>Te(r)));else if(w)postMessage({targetThread:e,cmd:"processProxyingQueue",queue:r});else{var a=xe.pthreads[e];if(!a)return;a.postMessage({cmd:"processProxyingQueue",queue:r})}return 1},_emscripten_set_offscreencanvas_size:function(e,t,n){return-1},abort:function(){oe("")},emscripten_check_blocking_allowed:function(){x||b||_e("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")},emscripten_date_now:function(){return Date.now()},emscripten_get_heap_max:function(){return 4294901760},emscripten_get_now:ke,emscripten_memcpy_big:function(e,n,r){t().copyWithin(e>>>0,n>>>0,n+r>>>0)},emscripten_num_logical_cores:function(){return x?se().cpus().length:navigator.hardwareConcurrency},emscripten_receive_on_main_thread_js:function(e,t,n){Ee.length=t;for(var r=n>>3,a=0;a<t;a++)Ee[a]=i()[r+a>>>0];return(e<0?ce[-e-1]:Ve[e]).apply(null,Ee)},emscripten_resize_heap:function(e){var n=t().length;if((e>>>=0)<=n)return!1;var r,a,s=4294901760;if(e>s)return!1;for(var i=1;i<=4;i*=2){var o=n*(1+.2/i);if(o=Math.min(o,e+100663296),$e(Math.min(s,(r=Math.max(e,o))+((a=65536)-r%a)%a)))return!0}return!1},emscripten_unwind_to_js_event_loop:function(){throw"unwind"},exit:be,fd_close:Ae,fd_seek:Re,fd_write:Me,memory:R||d.wasmMemory},Ge=(function(){var e={env:Ue,wasi_snapshot_preview1:Ue};function t(e,t){var n=e.exports;if(d.asm=n,function(e){xe.tlsInitFunctions.push(e)}(d.asm._emscripten_tls_init),q=d.asm.__indirect_function_table,function(e){X.unshift(e)}(d.asm.__wasm_call_ctors),F=t,!w){var r=xe.unusedWorkers.length;xe.unusedWorkers.forEach((function(e){xe.loadWasmModuleToWorker(e,(function(){--r||function(e){if(Q--,d.monitorRunDependencies&&d.monitorRunDependencies(Q),0==Q&&(null!==ee&&(clearInterval(ee),ee=null),ie)){var t=ie;ie=null,t()}}()}))}))}}function n(e){t(e.instance,e.module)}function r(t){return function(){if(!_&&(y||b)){if("function"==typeof fetch&&!pe(le))return fetch(le,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+le+"'";return e.arrayBuffer()})).catch((function(){return he(le)}));if(h)return new Promise((function(e,t){h(le,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return he(le)}))}().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){$("failed to asynchronously prepare wasm: "+e),oe(e)}))}if(w||(Q++,d.monitorRunDependencies&&d.monitorRunDependencies(Q)),d.instantiateWasm)try{return d.instantiateWasm(e,t)}catch(e){$("Module.instantiateWasm callback failed with error: "+e),l(e)}(_||"function"!=typeof WebAssembly.instantiateStreaming||de(le)||pe(le)||x||"function"!=typeof fetch?r(n):fetch(le,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(n,(function(e){return $("wasm streaming compile failed: "+e),$("falling back to ArrayBuffer instantiation"),r(n)}))}))).catch(l)}(),d.___wasm_call_ctors=function(){return(d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},d._init=function(){return(d._init=d.asm.init).apply(null,arguments)},d._init_with_threads_count=function(){return(d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},d._get_threads_count=function(){return(d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},d._register_tensor=function(){return(d._register_tensor=d.asm.register_tensor).apply(null,arguments)},d._dispose_data=function(){return(d._dispose_data=d.asm.dispose_data).apply(null,arguments)},d._dispose=function(){return(d._dispose=d.asm.dispose).apply(null,arguments)},d._Abs=function(){return(d._Abs=d.asm.Abs).apply(null,arguments)},d._Acos=function(){return(d._Acos=d.asm.Acos).apply(null,arguments)},d._Acosh=function(){return(d._Acosh=d.asm.Acosh).apply(null,arguments)},d._Add=function(){return(d._Add=d.asm.Add).apply(null,arguments)},d._AddN=function(){return(d._AddN=d.asm.AddN).apply(null,arguments)},d._All=function(){return(d._All=d.asm.All).apply(null,arguments)},d._Any=function(){return(d._Any=d.asm.Any).apply(null,arguments)}
2,d._ArgMax=function(){return(d._ArgMax=d.asm.ArgMax).apply(null,arguments)},d._ArgMin=function(){return(d._ArgMin=d.asm.ArgMin).apply(null,arguments)},d._Asin=function(){return(d._Asin=d.asm.Asin).apply(null,arguments)},d._Asinh=function(){return(d._Asinh=d.asm.Asinh).apply(null,arguments)},d._Atan=function(){return(d._Atan=d.asm.Atan).apply(null,arguments)},d._Atan2=function(){return(d._Atan2=d.asm.Atan2).apply(null,arguments)},d._Atanh=function(){return(d._Atanh=d.asm.Atanh).apply(null,arguments)},d._AvgPool=function(){return(d._AvgPool=d.asm.AvgPool).apply(null,arguments)},d._AvgPool3D=function(){return(d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},d._AvgPool3DGrad=function(){return(d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},d._AvgPoolGrad=function(){return(d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},d._BatchMatMul=function(){return(d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},d._Bincount=function(){return(d._Bincount=d.asm.Bincount).apply(null,arguments)},d._BitwiseAnd=function(){return(d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},d._Ceil=function(){return(d._Ceil=d.asm.Ceil).apply(null,arguments)},d._ClipByValue=function(){return(d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},d._Conv2D=function(){return(d._Conv2D=d.asm.Conv2D).apply(null,arguments)},d._Conv2DBackpropInput=function(){return(d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},d._Conv3D=function(){return(d._Conv3D=d.asm.Conv3D).apply(null,arguments)},d._Conv3DBackpropFilterV2=function(){return(d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},d._Conv3DBackpropInputV2=function(){return(d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},d._Cos=function(){return(d._Cos=d.asm.Cos).apply(null,arguments)},d._Cosh=function(){return(d._Cosh=d.asm.Cosh).apply(null,arguments)},d._CropAndResize=function(){return(d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},d._Cumprod=function(){return(d._Cumprod=d.asm.Cumprod).apply(null,arguments)},d._Cumsum=function(){return(d._Cumsum=d.asm.Cumsum).apply(null,arguments)},d._DenseBincount=function(){return(d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},d._DepthToSpace=function(){return(d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},d._DepthwiseConv2dNative=function(){return(d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},d._Diag=function(){return(d._Diag=d.asm.Diag).apply(null,arguments)},d._Dilation2D=function(){return(d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},d._Dilation2DBackpropFilter=function(){return(d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},d._Dilation2DBackpropInput=function(){return(d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},d._Elu=function(){return(d._Elu=d.asm.Elu).apply(null,arguments)},d._EluGrad=function(){return(d._EluGrad=d.asm.EluGrad).apply(null,arguments)},d._Equal=function(){return(d._Equal=d.asm.Equal).apply(null,arguments)},d._Erf=function(){return(d._Erf=d.asm.Erf).apply(null,arguments)},d._Exp=function(){return(d._Exp=d.asm.Exp).apply(null,arguments)},d._Expm1=function(){return(d._Expm1=d.asm.Expm1).apply(null,arguments)},d._FlipLeftRight=function(){return(d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},d._Floor=function(){return(d._Floor=d.asm.Floor).apply(null,arguments)},d._FloorDiv=function(){return(d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},d._FusedBatchNorm=function(){return(d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},d._FusedConv2D=function(){return(d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},d._FusedDepthwiseConv2D=function(){return(d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},d._Gather=function(){return(d._Gather=d.asm.Gather).apply(null,arguments)},d._GatherNd=function(){return(d._GatherNd=d.asm.GatherNd).apply(null,arguments)},d._Greater=function(){return(d._Greater=d.asm.Greater).apply(null,arguments)},d._GreaterEqual=function(){return(d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},d._IsFinite=function(){return(d._IsFinite=d.asm.IsFinite).apply(null,arguments)},d._IsInf=function(){return(d._IsInf=d.asm.IsInf).apply(null,arguments)},d._IsNan=function(){return(d._IsNan=d.asm.IsNan).apply(null,arguments)},d._LRN=function(){return(d._LRN=d.asm.LRN).apply(null,arguments)},d._LRNGrad=function(){return(d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},d._LeakyRelu=function(){return(d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},d._Less=function(){return(d._Less=d.asm.Less).apply(null,arguments)},d._LessEqual=function(){return(d._LessEqual=d.asm.LessEqual).apply(null,arguments)},d._LinSpace=function(){return(d._LinSpace=d.asm.LinSpace).apply(null,arguments)},d._Log=function(){return(d._Log=d.asm.Log).apply(null,arguments)},d._Log1p=function(){return(d._Log1p=d.asm.Log1p).apply(null,arguments)},d._LogicalAnd=function(){return(d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},d._LogicalNot=function(){return(d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},d._LogicalOr=function(){return(d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},d._LogicalXor=function(){return(d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},d._Max=function(){return(d._Max=d.asm.Max).apply(null,arguments)},d._MaxPool=function(){return(d._MaxPool=d.asm.MaxPool).apply(null,arguments)},d._MaxPool3D=function(){return(d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},d._MaxPool3DGrad=function(){return(d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},d._MaxPoolGrad=function(){return(d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},d._MaxPoolWithArgmax=function(){return(d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},d._Maximum=function(){return(d._Maximum=d.asm.Maximum).apply(null,arguments)},d._Mean=function(){return(d._Mean=d.asm.Mean).apply(null,arguments)},d._Min=function(){return(d._Min=d.asm.Min).apply(null,arguments)},d._Minimum=function(){return(d._Minimum=d.asm.Minimum).apply(null,arguments)},d._MirrorPad=function(){return(d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},d._Mod=function(){return(d._Mod=d.asm.Mod).apply(null,arguments)},d._Multinomial=function(){return(d._Multinomial=d.asm.Multinomial).apply(null,arguments)},d._Multiply=function(){return(d._Multiply=d.asm.Multiply).apply(null,arguments)},d._Neg=function(){return(d._Neg=d.asm.Neg).apply(null,arguments)},d._NonMaxSuppressionV3=function(){return(d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},d._NonMaxSuppressionV4=function(){return(d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},d._NonMaxSuppressionV5=function(){return(d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)}
2,d._NotEqual=function(){return(d._NotEqual=d.asm.NotEqual).apply(null,arguments)},d._OneHot=function(){return(d._OneHot=d.asm.OneHot).apply(null,arguments)},d._PadV2=function(){return(d._PadV2=d.asm.PadV2).apply(null,arguments)},d._Pow=function(){return(d._Pow=d.asm.Pow).apply(null,arguments)},d._Prelu=function(){return(d._Prelu=d.asm.Prelu).apply(null,arguments)},d._Prod=function(){return(d._Prod=d.asm.Prod).apply(null,arguments)},d._RealDiv=function(){return(d._RealDiv=d.asm.RealDiv).apply(null,arguments)},d._Reciprocal=function(){return(d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},d._Relu=function(){return(d._Relu=d.asm.Relu).apply(null,arguments)},d._Relu6=function(){return(d._Relu6=d.asm.Relu6).apply(null,arguments)},d._ResizeBilinear=function(){return(d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},d._ResizeBilinearGrad=function(){return(d._ResizeBilinearGrad=d.asm.ResizeBilinearGrad).apply(null,arguments)},d._ResizeNearestNeighbor=function(){return(d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},d._ResizeNearestNeighborGrad=function(){return(d._ResizeNearestNeighborGrad=d.asm.ResizeNearestNeighborGrad).apply(null,arguments)},d._Reverse=function(){return(d._Reverse=d.asm.Reverse).apply(null,arguments)},d._RotateWithOffset=function(){return(d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},d._Round=function(){return(d._Round=d.asm.Round).apply(null,arguments)},d._Rsqrt=function(){return(d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},d._ScatterNd=function(){return(d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},d._SearchSorted=function(){return(d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},d._SelectV2=function(){return(d._SelectV2=d.asm.SelectV2).apply(null,arguments)},d._Selu=function(){return(d._Selu=d.asm.Selu).apply(null,arguments)},d._Sigmoid=function(){return(d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},d._Sign=function(){return(d._Sign=d.asm.Sign).apply(null,arguments)},d._Sin=function(){return(d._Sin=d.asm.Sin).apply(null,arguments)},d._Sinh=function(){return(d._Sinh=d.asm.Sinh).apply(null,arguments)},d._Softmax=function(){return(d._Softmax=d.asm.Softmax).apply(null,arguments)},d._Softplus=function(){return(d._Softplus=d.asm.Softplus).apply(null,arguments)},d._SparseFillEmptyRows=function(){return(d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},d._SparseReshape=function(){return(d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},d._SparseSegmentReduction=function(){return(d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},d._SparseToDense=function(){return(d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},d._Sqrt=function(){return(d._Sqrt=d.asm.Sqrt).apply(null,arguments)},d._Square=function(){return(d._Square=d.asm.Square).apply(null,arguments)},d._SquaredDifference=function(){return(d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},d._Step=function(){return(d._Step=d.asm.Step).apply(null,arguments)},d._StridedSlice=function(){return(d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},d._Sub=function(){return(d._Sub=d.asm.Sub).apply(null,arguments)},d._Sum=function(){return(d._Sum=d.asm.Sum).apply(null,arguments)},d._Tan=function(){return(d._Tan=d.asm.Tan).apply(null,arguments)},d._Tanh=function(){return(d._Tanh=d.asm.Tanh).apply(null,arguments)},d._TensorScatterUpdate=function(){return(d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},d._Tile=function(){return(d._Tile=d.asm.Tile).apply(null,arguments)},d._TopK=function(){return(d._TopK=d.asm.TopK).apply(null,arguments)},d._Transform=function(){return(d._Transform=d.asm.Transform).apply(null,arguments)},d._Transpose=function(){return(d._Transpose=d.asm.Transpose).apply(null,arguments)},d.__FusedMatMul=function(){return(d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},d._malloc=function(){return(d._malloc=d.asm.malloc).apply(null,arguments)},d._free=function(){return(d._free=d.asm.free).apply(null,arguments)},d.__emscripten_tls_init=function(){return(d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},d._pthread_self=function(){return(Ge=d._pthread_self=d.asm.pthread_self).apply(null,arguments)}),He=(d.___errno_location=function(){return(d.___errno_location=d.asm.__errno_location).apply(null,arguments)},d.__emscripten_thread_init=function(){return(He=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)}),je=(d.__emscripten_thread_crashed=function(){return(d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},d._emscripten_main_thread_process_queued_calls=function(){return(d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},d._emscripten_main_browser_thread_id=function(){return(d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},d._emscripten_run_in_main_runtime_thread_js=function(){return(je=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)}),qe=(d._emscripten_dispatch_to_thread_=function(){return(d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},d.__emscripten_proxy_execute_task_queue=function(){return(qe=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)}),Ke=d.__emscripten_thread_free_data=function(){return(Ke=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},Xe=d.__emscripten_thread_exit=function(){return(Xe=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},Ye=d._emscripten_stack_set_limits=function(){return(Ye=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},Ze=d.stackSave=function(){return(Ze=d.stackSave=d.asm.stackSave).apply(null,arguments)},Je=d.stackRestore=function(){return(Je=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},Qe=d.stackAlloc=function(){return(Qe=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)};function et(e){if(e=e||m,!(Q>0)){if(w)return o(d),J(),void startWorker(d);(function(){if(d.preRun)for("function"==typeof d.preRun&&(d.preRun=[d.preRun]);d.preRun.length;)e=d.preRun.shift(),K.unshift(e);var e;we(K)})(),Q>0||(d.setStatus?(d.setStatus("Running..."),setTimeout((function(){setTimeout((function(){d.setStatus("")}),1),t()}),1)):t())}function t(){Pe||(Pe=!0,d.calledRun=!0,!W&&(J(),o(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),function(){if(!w){if(d.postRu
2n)for("function"==typeof d.postRun&&(d.postRun=[d.postRun]);d.postRun.length;)e=d.postRun.shift(),Y.unshift(e);we(Y)}var e}()))}}if(d.dynCall_iijjiiii=function(){return(d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},d.dynCall_jiji=function(){return(d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)},d.keepRuntimeAlive=Z,d.wasmMemory=R,d.cwrap=function(e,t,n,r){var a=(n=n||[]).every((e=>"number"===e||"boolean"===e));return"string"!==t&&a&&!r?Oe(e):function(){return ze(e,t,n,arguments)}},d.ExitStatus=fe,d.PThread=xe,ie=function e(){Pe||et(),Pe||(ie=e)},d.preInit)for("function"==typeof d.preInit&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();if(et(),u&&(Be={uncaughtException:C.listeners("uncaughtException").filter((function(e){return!u.uncaughtException.indexOf(e)>-1})),unhandledRejection:C.listeners("unhandledRejection").filter((function(e){return!u.unhandledRejection.indexOf(e)>-1}))}),"undefined"!=typeof WasmBackendModule)We=WasmBackendModule;else{if(void 0===e)throw new Error("Could not find wasm module in post.js");We=e}if(Be){var tt=We._dispose;We._dispose=function(){tt(),Be.uncaughtException.forEach((function(e){C.removeListener("uncaughtException",e)})),Be.unhandledRejection.forEach((function(e){C.removeListener("unhandledRejection",e)}))}}return e.ready});"object"==typeof e&&"object"==typeof t?t.exports=a:"function"==typeof define&&n.amdO?define([],(function(){return a})):"object"==typeof e&&(e.WasmBackendModuleThreadedSimd=a)})),oe=P(((e,t)=>{t.exports.wasmWorkerContents='"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"\n");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};'})),le=P(((e,t)=>{var r,a=(r=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0)||_,function(e){var t,n,a,s=void 0!==(e=e||{})?e:{};s.ready=new Promise((function(e,r){t=e,n=r})),void 0!==C&&C.listeners&&(a={uncaughtException:C.listeners("uncaughtException"),unhandledRejection:C.listeners("unhandledRejection")});var i,o,l,u=Object.assign({},s),d=[],p="object"==typeof window,h="function"==typeof importScripts,c="object"==typeof C&&"object"==typeof C.versions&&"string"==typeof C.versions.node,f="";if(c){var m=te(),g=ne();f=h?g.dirname(f)+"/":"//",i=(e,t)=>
vendor: 4,434 bytes, line 2
2(e=V(e)?new URL(e):g.normalize(e),m.readFileSync(e,t?void 0:"utf8")),l=e=>{var t=i(e,!0);return t.buffer||(t=new Uint8Array(t)),t},o=(e,t,n)=>{e=V(e)?new URL(e):g.normalize(e),m.readFile(e,(function(e,r){e?n(e):t(r.buffer)}))},C.argv.length>1&&C.argv[1].replace(/\\/g,"/"),d=C.argv.slice(2),C.on("uncaughtException",(function(e){if(!(e instanceof G))throw e})),C.on("unhandledRejection",(function(e){throw e})),s.inspect=function(){return"[Emscripten Module object]"}}else(p||h)&&(h?f=self.location.href:"undefined"!=typeof document&&document.currentScript&&(f=document.currentScript.src),r&&(f=r),f=0!==f.indexOf("blob:")?f.substr(0,f.replace(/[?#].*/,"").lastIndexOf("/")+1):"",i=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.send(null),t.responseText},h&&(l=e=>{var t=new XMLHttpRequest;return t.open("GET",e,!1),t.responseType="arraybuffer",t.send(null),new Uint8Array(t.response)}),o=(e,t,n)=>{var r=new XMLHttpRequest;r.open("GET",e,!0),r.responseType="arraybuffer",r.onload=()=>{200==r.status||0==r.status&&r.response?t(r.response):n()},r.onerror=n,r.send(null)});var y,b=s.print||console.log.bind(console),x=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(d=s.arguments),s.thisProgram&&s.thisProgram,s.quit&&s.quit,s.wasmBinary&&(y=s.wasmBinary);s.noExitRuntime;"object"!=typeof WebAssembly&&L("no native wasm support detected");var w,v,k,I,S,N=!1,T="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function _(e,t,n){for(var r=(t>>>=0)+n,a=t;e[a]&&!(a>=r);)++a;if(a-t>16&&e.buffer&&T)return T.decode(e.subarray(t,a));for(var s="";t<a;){var i=e[t++];if(128&i){var o=63&e[t++];if(192!=(224&i)){var l=63&e[t++];if((i=224==(240&i)?(15&i)<<12|o<<6|l:(7&i)<<18|o<<12|l<<6|63&e[t++])<65536)s+=String.fromCharCode(i);else{var u=i-65536;s+=String.fromCharCode(55296|u>>10,56320|1023&u)}}else s+=String.fromCharCode((31&i)<<6|o)}else s+=String.fromCharCode(i)}return s}function E(e,t){return(e>>>=0)?_(I,e,t):""}function $(e){v=e,s.HEAP8=k=new Int8Array(e),s.HEAP16=new Int16Array(e),s.HEAP32=new Int32Array(e),s.HEAPU8=I=new Uint8Array(e),s.HEAPU16=new Uint16Array(e),s.HEAPU32=S=new Uint32Array(e),s.HEAPF32=new Float32Array(e),s.HEAPF64=new Float64Array(e)}s.INITIAL_MEMORY;var A=[],R=[],F=[],D=0,M=null,O=null;function L(e){s.onAbort&&s.onAbort(e),x(e="Aborted("+e+")"),N=!0,e+=". Build with -sASSERTIONS for more info.";var t=new WebAssembly.RuntimeError(e);throw n(t),t}var z,P,B="data:application/octet-stream;base64,";function W(e){return e.startsWith(B)}function V(e){return e.startsWith("file://")}function U(e){try{if(e==z&&y)return new Uint8Array(y);if(l)return l(e);throw"both async and sync fetching of the wasm failed"}catch(e){L(e)}}function G(e){this.name="ExitStatus",this.message="Program terminated with exit("+e+")",this.status=e}function H(e){for(;e.length>0;)e.shift()(s)}function j(e){try{return w.grow(e-v.byteLength+65535>>>16),$(w.buffer),1}catch(e){}}W(z="tfjs-backend-wasm.wasm")||(P=z,z=s.locateFile?s.locateFile(P,f):f+P);var q=[null,[],[]];function K(e,t){var n=q[e];0===t||10===t?((1===e?b:x)(_(n,0)),n.length=0):n.push(t)}function X(e){return s["_"+e]}function Y(e,t,n,r,a){var s={string:e=>{var t=0;if(null!=e&&0!==e){var n=1+(e.length<<2);!function(e,t,n){!function(e,t,n,r){if(!(r>0))return 0;n>>>=0;for(var a=n+r-1,s=0;s<e.length;++s){var i=e.charCodeAt(s);if(i>=55296&&i<=57343&&(i=65536+((1023&i)<<10)|1023&e.charCodeAt(++s)),i<=127){if(n>=a)break;t[n++>>>0]=i}else if(i<=2047){if(n+1>=a)break;t[n++>>>0]=192|i>>6,t[n++>>>0]=128|63&i}else if(i<=65535){if(n+2>=a)break;t[n++>>>0]=224|i>>12,t[n++>>>0]=128|i>>6&63,t[n++>>>0]=128|63&i}else{if(n+3>=a)break;t[n++>>>0]=240|i>>18,t[n++>>>0]=128|i>>12&63,t[n++>>>0]=128|i>>6&63,t[n++>>>0]=128|63&i}}t[n>>>0]=0}(e,I,t,n)}(e,t=se(n),n)}return t},array:e=>{var t=se(e.length);return function(e,t){k.set(e,t>>>0)}(e,t),t}},i=X(e),o=[],l=0;if(r)for(var u=0;u<r.length;u++){var d=s[n[u]];d?(0===l&&(l=re()),o[u]=d(r[u])):o[u]=r[u]}var p,h=i.apply(null,o);return p=h,0!==l&&ae(l),h=function(e){return"string"===t?E(e):"boolean"===t?!!e:e}(p),h}var Z,J,Q,ee={abort:function(){L("")},emscripten_get_heap_max:function(){return 4294901760},emscripten_memcpy_big:function(e,t,n){I.copyWithin(e>>>0,t>>>0,t+n>>>0)},emscripten_resize_heap:function(e){var t,n,r=I.length,a=4294901760;if((e>>>=0)>a)return!1;for(var s=1;s<=4;s*=2){var i=r*(1+.2/s);if(i=Math.min(i,e+100663296),j(Math.min(a,(t=Math.max(e,i))+((n=6
25536)-t%n)%n)))return!0}return!1},fd_close:function(e){return 52},fd_seek:function(e,t,n,r,a){return 70},fd_write:function(e,t,n,r){for(var a=0,s=0;s<n;s++){var i=S[t>>>2],o=S[t+4>>>2];t+=8;for(var l=0;l<o;l++)K(e,I[i+l>>>0]);a+=o}return S[r>>>2]=a,0}},re=(function(){var e={env:ee,wasi_snapshot_preview1:ee};function t(e,t){var n=e.exports;s.asm=n,$((w=s.asm.memory).buffer),s.asm.__indirect_function_table,function(e){R.unshift(e)}(s.asm.__wasm_call_ctors),function(e){if(D--,s.monitorRunDependencies&&s.monitorRunDependencies(D),0==D&&(null!==M&&(clearInterval(M),M=null),O)){var t=O;O=null,t()}}()}function r(e){t(e.instance)}function a(t){return function(){if(!y&&(p||h)){if("function"==typeof fetch&&!V(z))return fetch(z,{credentials:"same-origin"}).then((function(e){if(!e.ok)throw"failed to load wasm binary file at '"+z+"'";return e.arrayBuffer()})).catch((function(){return U(z)}));if(o)return new Promise((function(e,t){o(z,(function(t){e(new Uint8Array(t))}),t)}))}return Promise.resolve().then((function(){return U(z)}))}().then((function(t){return WebAssembly.instantiate(t,e)})).then((function(e){return e})).then(t,(function(e){x("failed to asynchronously prepare wasm: "+e),L(e)}))}if(D++,s.monitorRunDependencies&&s.monitorRunDependencies(D),s.instantiateWasm)try{return s.instantiateWasm(e,t)}catch(e){x("Module.instantiateWasm callback failed with error: "+e),n(e)}(y||"function"!=typeof WebAssembly.instantiateStreaming||W(z)||V(z)||c||"function"!=typeof fetch?a(r):fetch(z,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,e).then(r,(function(e){return x("wasm streaming compile failed: "+e),x("falling back to ArrayBuffer instantiation"),a(r)}))}))).catch(n
vendor: 12,226 bytes, line 2
2)}(),s.___wasm_call_ctors=function(){return(s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},s._init=function(){return(s._init=s.asm.init).apply(null,arguments)},s._init_with_threads_count=function(){return(s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},s._get_threads_count=function(){return(s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},s._register_tensor=function(){return(s._register_tensor=s.asm.register_tensor).apply(null,arguments)},s._dispose_data=function(){return(s._dispose_data=s.asm.dispose_data).apply(null,arguments)},s._dispose=function(){return(s._dispose=s.asm.dispose).apply(null,arguments)},s._Abs=function(){return(s._Abs=s.asm.Abs).apply(null,arguments)},s._Acos=function(){return(s._Acos=s.asm.Acos).apply(null,arguments)},s._Acosh=function(){return(s._Acosh=s.asm.Acosh).apply(null,arguments)},s._Add=function(){return(s._Add=s.asm.Add).apply(null,arguments)},s._AddN=function(){return(s._AddN=s.asm.AddN).apply(null,arguments)},s._All=function(){return(s._All=s.asm.All).apply(null,arguments)},s._Any=function(){return(s._Any=s.asm.Any).apply(null,arguments)},s._ArgMax=function(){return(s._ArgMax=s.asm.ArgMax).apply(null,arguments)},s._ArgMin=function(){return(s._ArgMin=s.asm.ArgMin).apply(null,arguments)},s._Asin=function(){return(s._Asin=s.asm.Asin).apply(null,arguments)},s._Asinh=function(){return(s._Asinh=s.asm.Asinh).apply(null,arguments)},s._Atan=function(){return(s._Atan=s.asm.Atan).apply(null,arguments)},s._Atan2=function(){return(s._Atan2=s.asm.Atan2).apply(null,arguments)},s._Atanh=function(){return(s._Atanh=s.asm.Atanh).apply(null,arguments)},s._AvgPool=function(){return(s._AvgPool=s.asm.AvgPool).apply(null,arguments)},s._AvgPool3D=function(){return(s._AvgPool3D=s.asm.AvgPool3D).apply(null,arguments)},s._AvgPool3DGrad=function(){return(s._AvgPool3DGrad=s.asm.AvgPool3DGrad).apply(null,arguments)},s._AvgPoolGrad=function(){return(s._AvgPoolGrad=s.asm.AvgPoolGrad).apply(null,arguments)},s._BatchMatMul=function(){return(s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},s._Bincount=function(){return(s._Bincount=s.asm.Bincount).apply(null,arguments)},s._BitwiseAnd=function(){return(s._BitwiseAnd=s.asm.BitwiseAnd).apply(null,arguments)},s._Ceil=function(){return(s._Ceil=s.asm.Ceil).apply(null,arguments)},s._ClipByValue=function(){return(s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},s._Conv2D=function(){return(s._Conv2D=s.asm.Conv2D).apply(null,arguments)},s._Conv2DBackpropInput=function(){return(s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},s._Conv3D=function(){return(s._Conv3D=s.asm.Conv3D).apply(null,arguments)},s._Conv3DBackpropFilterV2=function(){return(s._Conv3DBackpropFilterV2=s.asm.Conv3DBackpropFilterV2).apply(null,arguments)},s._Conv3DBackpropInputV2=function(){return(s._Conv3DBackpropInputV2=s.asm.Conv3DBackpropInputV2).apply(null,arguments)},s._Cos=function(){return(s._Cos=s.asm.Cos).apply(null,arguments)},s._Cosh=function(){return(s._Cosh=s.asm.Cosh).apply(null,arguments)},s._CropAndResize=function(){return(s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},s._Cumprod=function(){return(s._Cumprod=s.asm.Cumprod).apply(null,arguments)},s._Cumsum=function(){return(s._Cumsum=s.asm.Cumsum).apply(null,arguments)},s._DenseBincount=function(){return(s._DenseBincount=s.asm.DenseBincount).apply(null,arguments)},s._DepthToSpace=function(){return(s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},s._DepthwiseConv2dNative=function(){return(s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},s._Diag=function(){return(s._Diag=s.asm.Diag).apply(null,arguments)},s._Dilation2D=function(){return(s._Dilation2D=s.asm.Dilation2D).apply(null,arguments)},s._Dilation2DBackpropFilter=function(){return(s._Dilation2DBackpropFilter=s.asm.Dilation2DBackpropFilter).apply(null,arguments)},s._Dilation2DBackpropInput=function(){return(s._Dilation2DBackpropInput=s.asm.Dilation2DBackpropInput).apply(null,arguments)},s._Elu=function(){return(s._Elu=s.asm.Elu).apply(null,arguments)},s._EluGrad=function(){return(s._EluGrad=s.asm.EluGrad).apply(null,arguments)},s._Equal=function(){return(s._Equal=s.asm.Equal).apply(null,arguments)},s._Erf=function(){return(s._Erf=s.asm.Erf).apply(null,arguments)},s._Exp=function(){return(s._Exp=s.asm.Exp).apply(null,arguments)},s._Expm1=function(){return(s._Expm1=s.asm.Expm1).apply(null,arguments)},s._FlipLeftRight=function(){return(s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},s._Floor=function(){return(s._Floor=s.asm.Floor).apply(null,arguments)},s._FloorDiv=function(){return(s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},s._FusedBatchNorm=function(){return(s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},s._FusedConv2D=function(){return(s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},s._FusedDepthwiseConv2D=function(){return(s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},s._Gather=function(){return(s._Gather=s.asm.Gather).apply(null,arguments)},s._GatherNd=function(){return(s._GatherNd=s.asm.GatherNd).apply(null,arguments)},s._Greater=function(){return(s._Greater=s.asm.Greater).apply(null,arguments)},s._GreaterEqual=function(){return(s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},s._IsFinite=function(){return(s._IsFinite=s.asm.IsFinite).apply(null,arguments)},s._IsInf=function(){return(s._IsInf=s.asm.IsInf).apply(null,arguments)},s._IsNan=function(){return(s._IsNan=s.asm.IsNan).apply(null,arguments)},s._LRN=function(){return(s._LRN=s.asm.LRN).apply(null,arguments)},s._LRNGrad=function(){return(s._LRNGrad=s.asm.LRNGrad).apply(null,arguments)},s._LeakyRelu=function(){return(s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},s._Less=function(){return(s._Less=s.asm.Less).apply(null,arguments)},s._LessEqual=function(){return(s._LessEqual=s.asm.LessEqual).apply(null,arguments)},s._LinSpace=function(){return(s._LinSpace=s.asm.LinSpace).apply(null,arguments)},s._Log=function(){return(s._Log=s.asm.Log).apply(null,arguments)},s._Log1p=function(){return(s._Log1p=s.asm.Log1p).apply(null,arguments)},s._LogicalAnd=function(){return(s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},s._LogicalNot=function(){return(s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},s._LogicalOr=function(){return(s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},s._LogicalXor=function(){return(s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},s._Max=function(){return(s._Max=s.asm.Max).apply(null,arguments)},s._MaxPool=function(){return(s._MaxPool=s.asm.MaxPool).apply(null,arguments)},s._MaxPool3D=function(){return(s._MaxPool3D=s.asm.MaxPool3D).apply(null,arguments)},s._MaxPool3DGrad=function(){return(s._MaxPool3DGrad=s.asm.MaxPool3DGrad).apply(null,arguments)},s._MaxPoolGrad=function(){return(s._MaxPoolGrad=s.asm.MaxPoolGrad).apply(null,arguments)},s._MaxPoolWithArgmax=function(){return(s._MaxPoolWithArgmax=s.asm.MaxPoolWithArgmax).apply(null,arguments)},s._Maximum=function(){return(s._Maximum=s.asm.Maximum).apply(null,arguments)},s._Mean=function(){return(s._Mean=s.asm.Mean).apply(null,arguments)},s._Min=function(){return(s._Min=s.asm.Min).apply(null,arguments)},s._Minimum=function(){return(s._Minimum=s.asm.Minimum).apply(null,arguments)},s._MirrorPad=function(){return(s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},s._Mod=function(){return(s._Mod=s.asm.Mod).apply(null,arguments)},s._Multinomial=function(){return(s._Multinomial=s.asm.Multinomial).apply(null,arguments)},s._Multiply=function(){return(s._Multiply=s.asm.Multiply).apply(null,arguments)},s._Neg=function(){return(s._Neg=s.asm.Neg).apply(null,arguments)},s._NonMaxSuppressionV3=function(){return(s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},s._NonMaxSuppressionV4=function(){return(s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},s._NonMaxSuppressionV5=function(){return(s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},s._NotEqual=function(){return(s._NotEqual=s.asm.NotEqual).apply(null,arguments)},s._OneHot=function(){return(s._OneHot=s.asm.OneHot).apply(null,arguments)},s._PadV2=function(){return(s._PadV2=s.asm.PadV2).apply(null,arguments)},s._Pow=function(){return(s._Pow=s.asm.Pow).apply(null,arguments)},s._Prelu=function(){return(s._Prelu=s.asm.Prelu).apply(null,arguments)},s._Prod=function(){return(s._Prod=s.asm.Prod).apply(null,arguments)},s._RealDiv=function(){return(s._RealDiv=s.asm.RealDiv).apply(null,arguments)},s._Reciprocal=function(){return(s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},s._Relu=function(){return(s._Relu=s.asm.Relu).apply(null,arguments)},s._Relu6=function(){return(s._Relu6=s.asm.Relu6).apply(null,arguments)},s._ResizeBilinear=function(){return(s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},s._ResizeBilinearGrad=function(){return(s._ResizeBilinearGrad=s.asm.ResizeBilinearGrad).apply(null,arguments)},s._ResizeNearestNeighbor=function(){return(s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},s._ResizeNearestNeighborGrad=function(){return(s._ResizeNearestNeighborGrad=s.asm.ResizeNearestNeighborGrad).apply(null,arguments)},s._Reverse=function(){return(s._Reverse=s.asm.Reverse).apply(null,arguments)},s._RotateWithOffset=function(){return(s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},s._Round=function(){return(s._Round=s.asm.Round).apply(null,arguments)},s._Rsqrt=function(){return(s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},s._ScatterNd=function(){return(s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},s._SearchSorted=function(){return(s._SearchSorted=s.asm.SearchSorted).apply(null,arguments)},s._SelectV2=function(){return(s._SelectV2=s.asm.SelectV2).apply(null,arguments)},s._Selu=function(){return(s._Selu=s.asm.Selu).apply(null,arguments)},s._Sigmoid=function(){return(s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},s._Sign=function(){return(s._Sign=s.asm.Sign).apply(null,arguments)},s._Sin=function(){return(s._Sin=s.asm.Sin).apply(null,arguments)},s._Sinh=function(){return(s._Sinh=s.asm.Sinh).apply(null,arguments)},s._Softmax=function(){return(s._Softmax=s.asm.Softmax).apply(null,arguments)},s._Softplus=function(){return(s._Softplus=s.asm.Softplus).apply(null,arguments)},s._SparseFillEmptyRows=function(){return(s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},s._SparseReshape=function(){return(s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},s._SparseSegmentReduction=function(){return(s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},s._SparseToDense=function(){return(s._SparseToDense=s.asm.SparseToDense).apply(null,arguments)},s._Sqrt=function(){return(s._Sqrt=s.asm.Sqrt).apply(null,arguments)},s._Square=function(){return(s._Square=s.asm.Square).apply(null,arguments)},s._SquaredDifference=function(){return(s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},s._Step=function(){return(s._Step=s.asm.Step).apply(null,arguments)},s._StridedSlice=function(){return(s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},s._Sub=function(){return(s._Sub=s.asm.Sub).apply(null,arguments)},s._Sum=function(){return(s._Sum=s.asm.Sum).apply(null,arguments)},s._Tan=function(){return(s._Tan=s.asm.Tan).apply(null,arguments)},s._Tanh=function(){return(s._Tanh=s.asm.Tanh).apply(null,arguments)},s._TensorScatterUpdate=function(){return(s._TensorScatterUpdate=s.asm.TensorScatterUpdate).apply(null,arguments)},s._Tile=function(){return(s._Tile=s.asm.Tile).apply(null,arguments)},s._TopK=function(){return(s._TopK=s.asm.TopK).apply(null,arguments)},s._Transform=function(){return(s._Transform=s.asm.Transform).apply(null,arguments)},s._Transpose=function(){return(s._Transpose=s.asm.Transpose).apply(null,arguments)},s.__FusedMatMul=function(){return(s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},s._malloc=function(){return(s._malloc=s.asm.malloc).apply(null,arguments)},s._free=function(){return(s._free=s.asm.free).apply(null,arguments)},s.___errno_location=function(){return(s.___errno_location=s.asm.__errno_location).apply(null,arguments)}
2,s.stackSave=function(){return(re=s.stackSave=s.asm.stackSave).apply(null,arguments)}),ae=s.stackRestore=function(){return(ae=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},se=s.stackAlloc=function(){return(se=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)};function ie(e){function n(){Z||(Z=!0,s.calledRun=!0,!N&&(H(R),t(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),function(){if(s.postRun)for("function"==typeof s.postRun&&(s.postRun=[s.postRun]);s.postRun.length;)e=s.postRun.shift(),F.unshift(e);var e;H(F)}()))}e=e||d,D>0||(function(){if(s.preRun)for("function"==typeof s.preRun&&(s.preRun=[s.preRun]);s.preRun.length;)e=s.preRun.shift(),A.unshift(e);var e;H(A)}(),D>0)||(s.setStatus?(s.setStatus("Running..."),setTimeout((function(){setTimeout((function(){s.setStatus("")}),1),n()}),1)):n())}if(s.dynCall_iijjiiii=function(){return(s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},s.dynCall_jiji=function(){return(s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)},s.cwrap=function(e,t,n,r){var a=(n=n||[]).every((e=>"number"===e||"boolean"===e));return"string"!==t&&a&&!r?X(e):function(){return Y(e,t,n,arguments)}}
2,O=function e(){Z||ie(),Z||(O=e)},s.preInit)for("function"==typeof s.preInit&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();if(ie(),a&&(J={uncaughtException:C.listeners("uncaughtException").filter((function(e){return!a.uncaughtException.indexOf(e)>-1})),unhandledRejection:C.listeners("unhandledRejection").filter((function(e){return!a.unhandledRejection.indexOf(e)>-1}))}),void 0!==e)Q=e;else{if("undefined"==typeof WasmBackendModuleThreadedSimd)throw new Error("Could not find wasm module in post.js");Q=WasmBackendModuleThreadedSimd}if(J){var oe=Q._dispose;Q._dispose=function(){oe(),J.uncaughtException.forEach((function(e){C.removeListener("uncaughtException",e)})),J.unhandledRejection.forEach((function(e){C.removeListener("unhandledRejection",e)}))}}return e.ready});"object"==typeof e&&"object"==typeof t?t.exports=a:"function"==typeof define&&n.amdO?define([],(function(){return a})):"object"==typeof e&&(e.WasmBackendModule=a)})),ue=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},de=class{refCount(e){return pe("refCount")}incRef(e){return pe("incRef")}timerAvailable(){return!0}time(e){return pe("time")}read(e){return pe("read")}readSync(e){return pe("readSync")}readToGPU(e,t){return pe("readToGPU")}numDataIds(){return pe("numDataIds")}disposeData(e,t){return pe("disposeData")}write(e,t,n){return pe("write")}move(e,t,n,r,a){return pe("move")}createTensorFromGPUData(e,t,n){return pe("createTensorFromGPUData")}memory(){return pe("memory")}floatPrecision(){return pe("floatPrecision")}epsilon(){return 32===this.floatPrecision()?1e-7:1e-4}dispose(){return pe("dispose")}};function pe(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function he(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,ge(e,t,n)}function ce(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r=0;for(;n>0;)r=Math.random()*n|0,n--,ge(e,n,r),ge(t,n,r)}function fe(e,t,n){return Math.max(e,Math.min(t,n))}function me(e){return e%2==0?e:e+1}function ge(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function ye(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function be(e,t){let n=Math.random();return t*n+(1-n)*e}function xe(e,t){let n=0;for(let r=0;r<e.length;r++){let a=Number(e[r])-Number(t[r]);n+=a*a}return n}function we(e,t){if(!e)throw new Error("string"==typeof t?t:t())}function ve(e,t,n=""){we(Te(e,t),(()=>n+` Shapes ${e} and ${t} must match`))}function ke(e){we(null!=e,(()=>"The input to the tensor constructor must be a non-null value."))}function Ie(e){if(0===e.length)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function Se(e){return 0===e.length}function Ne(e,t){if(e===t)return!0;if(null==e||null==t||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(null!==e[n]&&null!==t[n]&&e[n]!==t[n])return!1;return!0}function Te(e,t){if(e===t)return!0;if(null==e||null==t||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function _e(e){return e%1==0}function Ce(e){if(null!=Math.tanh)return Math.tanh(e);if(e===1/0)return 1;if(e===-1/0)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function Ee(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function $e(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return he(t),t}function Ae(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function Re(e,t=(e=>0),n,r){return new Promise(((a,s)=>{let i=0,o=()=>{if(e())return void a();i++;let l=t(i);null!=n&&i>=n?s():null!=r?r(o,l):setTimeout(o,l)};o()}))}function Fe(e,t){let n=1,r=-1;for(let t=0;t<e.length;++t)if(e[t]>=0)n*=e[t];else if(-1===e[t]){if(-1!==r)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${t}`);r=t}else if(e[t]<0)throw Error(`Shapes can not be < 0. Found ${e[t]} at dim ${t}`);if(-1===r){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(0===n)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!=0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let a=e.slice();return a[r]=t/n,a}function De(e,t){let n=t.length;return we((e=null==e?t.map(((e,t)=>t)):[].concat(e)).every((e=>e>=-n&&e<n)),(()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`)),we(e.every((e=>_e(e))),(()=>`All values in axis param must be integers but got axis ${e}`)),e.map((e=>e<0?n+e:e))}function Me(e,t){let n=[],r=[],a=null!=t&&Array.isArray(t)&&0===t.length,s=null==t||a?null:De(t,e).sort(),i=0;for(let t=0;t<e.length;++t){if(null!=s){if(s[i]===t&&1!==e[t])throw new Error(`Can't squeeze axis ${t} since its dim '${e[t]}' is not 1`);(null==s[i]||s[i]>t)&&1===e[t]&&(n.push(e[t]),r.push(t)),s[i]<=t&&i++}1!==e[t]&&(n.push(e[t]),r.push(t))}return{newShape:n,keptDims:r}}function Oe(e,t){return Le(e,t)}function Le(e,t){let n=null;if(null==e||"float32"===e)n=new Float32Array(t);else if("int32"===e)n=new Int32Array(t);else if("bool"===e)n=new Uint8Array(t);else{if("string"!==e)throw new Error(`Unknown data type ${e}`);n=new Array(t)}return n}function ze(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(isNaN(r)||!isFinite(r))throw Error(`A tensor of type ${t} being uploaded contains ${r}.`)}}function Pe(e){return"bool"===e||"complex64"===e||"float32"===e||"int32"===e||"string"===e}function Be(e,t){return!("complex64"===t||"float32"===t&&"complex64"!==e||"int32"===t&&"float32"!==e&&"complex64"!==e||"bool"===t&&"bool"===e)}function We(e){if("float32"===e||"int32"===e)return 4;if("complex64"===e)return 8;if("bool"===e)return 1;throw new Error(`Unknown dtype ${e}`)}function Ve(e){if(null==e)return 0;let t=0;return e.forEach((e=>t+=e.length)),t}function Ue(e){return"string"==typeof e||e instanceof String}function Ge(e){return"boolean"==typeof e}function He(e){return"number"==typeof e}function je(e){return Array.isArray(e)?je(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":He(e)?"float32":Ue(e)?"string":Ge(e)?"bool":"float32"}function qe(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Ke(e,t){for(let n=t;n<e;++n)if(e%n==0)return n;return e}function Xe(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let r=t-3;r>=0;--r)n[r]=n[r+1]*e[r+1];return n}function Ye(e,t,n,r=!1){let a=new Array;
2if(1===t.length){let s=t[0]*(r?2:1);for(let t=0;t<s;t++)a[t]=n[e+t]}else{let s=t[0],i=t.slice(1),o=i.reduce(((e,t)=>e*t))*(r?2:1);for(let t=0;t<s;t++)a[t]=Ye(e+t*o,i,n,r)}return a}function Ze(e,t,n=!1){if(0===e.length)return t[0];let r=e.reduce(((e,t)=>e*t))*(n?2:1);if(0===r)return[];if(r!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return Ye(0,e,t,n)}function Je(e,t){if(Array.isArray(e))return e;if("float32"===t)return e instanceof Float32Array?e:new Float32Array(e);if("int32"===t)return e instanceof Int32Array?e:new Int32Array(e);if("bool"===t||"string"===t)return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function Qe(e,t){let n=et(e,t);for(let e=0;e<n.length;e++)n[e]=1;return n}function et(e,t){if(null==t||"float32"===t||"complex64"===t)return new Float32Array(e);if("int32"===t)return new Int32Array(e);if("bool"===t)return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function tt(e,t){let n=e.reduce(((e,t)=>e*t),1);if(null==t||"float32"===t)return Ze(e,new Float32Array(n));if("int32"===t)return Ze(e,new Int32Array(n));if("bool"===t)return Ze(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function nt(e){e.forEach((t=>{we(Number.isInteger(t)&&t>=0,(()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`))}))}function rt(e,t,n){if(0===t)return 0;if(1===t)return e[0];let r=e[e.length-1];for(let t=0;t<e.length-1;++t)r+=n[t]*e[t];return r}function at(e,t,n){if(0===t)return[];if(1===t)return[e];let r=new Array(t);for(let t=0;t<r.length-1;++t)r[t]=Math.floor(e/n[t]),e-=r[t]*n[t];return r[r.length-1]=e,r}function st(e){return e&&e.then&&"function"==typeof e.then}var it="tfjsflags",ot=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.getQueryParams=lt,this.populateURLFlags()}setPlatform(e,t){null!=this.platform&&(ut().getBool("IS_TEST")||ut().getBool("PROD")||console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},null!=this.urlFlags[e]){let t=this.urlFlags[e];ut().getBool("IS_TEST")||ut().getBool("PROD")||console.warn(`Setting feature override from URL ${e}: ${t}.`),this.set(e,t)}}async getAsync(e){return e in this.flags||(this.flags[e]=await this.evaluateFlag(e)),this.flags[e]}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(st(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getString(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(null==this.flagRegistry[e])throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,null!=this.flagRegistry[e].setHook&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(null==this.flagRegistry[e])throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(void 0===this.global||void 0===this.global.location||void 0===this.global.location.search)return;let e=this.getQueryParams(this.global.location.search);it in e&&e[it].split(",").forEach((e=>{let[t,n]=e.split(":");this.urlFlags[t]=function(e,t){let n=t.toLowerCase();return"true"===n||"false"===n?"true"===n:""+ +n===n?+n:t}(0,n)}))}};function lt(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,((e,...n)=>(function(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}(t,n[0],n[1]),n.join("=")))),t}function ut(){return pt}var dt,pt=null;function ht(){if(null==dt){let e;if("undefined"!=typeof window)e=window;else if(void 0!==n.g)e=n.g;else if(void 0!==C)e=C;else{if("undefined"==typeof self)throw new Error("Could not find a global object");C=self}dt=e}return dt}
2function ct(e,t){let n=function(){let e=ht();return null==e._tfGlobals&&(e._tfGlobals=new Map),e._tfGlobals}();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var ft="Abs",mt="Acos",gt="Acosh",yt="Add",bt="AddN",xt="All",wt="Any",vt="ArgMax",kt="ArgMin",It="Asin",St="Asinh",Nt="Atan",Tt="Atanh",_t="Atan2",Ct="AvgPool",Et="AvgPoolGrad",$t="AvgPool3D",At="AvgPool3DGrad",Rt="BatchMatMul",Ft="BatchToSpaceND",Dt="Bincount",Mt="BitwiseAnd",Ot="BroadcastTo",Lt="BroadcastArgs",zt="Cast",Pt="Ceil",Bt="ClipByValue",Wt="Complex",Vt="ComplexAbs",Ut="Concat",Gt="Conv2D",Ht="Conv2DBackpropFilter",jt="Conv2DBackpropInput",qt="Conv3D",Kt="Conv3DBackpropFilterV2",Xt="Conv3DBackpropInputV2",Yt="Cos",Zt="Cosh",Jt="Cumprod",Qt="Cumsum",en="CropAndResize",tn="DenseBincount",nn="DepthToSpace",rn="DepthwiseConv2dNative",an="DepthwiseConv2dNativeBackpropFilter",sn="DepthwiseConv2dNativeBackpropInput",on="Diag",ln="Dilation2D",un="Dilation2DBackpropInput",dn="Dilation2DBackpropFilter",pn="Draw",hn="RealDiv",cn="Einsum",fn="Elu",mn="EluGrad",gn="Erf",yn="Equal",bn="Exp",xn="ExpandDims",wn="Expm1",vn="FFT",kn="Fill",In="FlipLeftRight",Sn="Floor",Nn="FloorDiv",Tn="FusedBatchNorm",_n="GatherV2",Cn="GatherNd",En="Greater",$n="GreaterEqual",An="Identity",Rn="IFFT",Fn="Imag",Dn="IsFinite",Mn="IsInf",On="IsNan",Ln="LeakyRelu",zn="Less",Pn="LessEqual",Bn="LinSpace",Wn="Log",Vn="Log1p",Un="LogicalAnd",Gn="LogicalNot",Hn="LogicalOr",jn="LogicalXor",qn="LogSoftmax",Kn="LowerBound",Xn="LRN",Yn="LRNGrad",Zn="MatrixBandPart",Jn="Max",Qn="Maximum",er="MaxPool",tr="MaxPoolGrad",nr="MaxPool3D",rr="MaxPool3DGrad",ar="MaxPoolWithArgmax",sr="Mean",ir="Min",or="Minimum",lr="MirrorPad",ur="Mod",dr="Multinomial",pr="Multiply",hr="Neg",cr="NotEqual",fr="NonMaxSuppressionV3",mr="NonMaxSuppressionV4",gr="NonMaxSuppressionV5",yr="OnesLike",br="OneHot",xr="Pack",wr="PadV2",vr="Pool",kr="Pow",Ir="Prelu",Sr="Prod",Nr="RaggedGather",Tr="RaggedRange",_r="RaggedTensorToTensor",Cr="Range",Er="Real",$r="Reciprocal",Ar="Relu",Rr="Reshape",Fr="ResizeNearestNeighbor",Dr="ResizeNearestNeighborGrad",Mr="ResizeBilinear",Or="ResizeBilinearGrad",Lr="Relu6",zr="Reverse",Pr="Round",Br="Rsqrt",Wr="ScatterNd",Vr="TensorScatterUpdate",Ur="SearchSorted",Gr="Select",Hr="Selu",jr="Slice",qr="Sin",Kr="Sinh",Xr="Sign",Yr="Sigmoid",Zr="Softplus",Jr="Sqrt",Qr="Sum",ea="SpaceToBatchND",ta="SplitV",na="Softmax",ra="SparseFillEmptyRows",aa="SparseReshape",sa="SparseSegmentMean",ia="SparseSegmentSum",oa="SparseToDense",la="SquaredDifference",ua="Square",da="StaticRegexReplace",pa="StridedSlice",ha="StringNGrams",ca="StringSplit",fa="StringToHashBucketFast",ma="Sub",ga="Tan",ya="Tanh",ba="Tile",xa="TopK",wa="Transform",va="Transpose",ka="Unique",Ia="Unpack",Sa="UnsortedSegmentSum",Na="UpperBound",Ta="ZerosLike",_a="Step",Ca="FromPixels",Ea="RotateWithOffset",$a="_FusedMatMul",Aa="FusedConv2D",Ra="FusedDepthwiseConv2D";function Fa(...e){ut().getBool("IS_TEST")||ut().getBool("PROD")||console.warn(...e)}function Da(...e){ut().getBool("IS_TEST")||ut().getBool("PROD")||console.log(...e)}var Ma=ct("kernelRegistry",(()=>new Map)),Oa=ct("gradRegistry",(()=>new Map));function La(e,t){let n=Ha(e,t);return Ma.get(n)}function za(e){return Oa.get(e)}function Pa(e){let t=Ma.entries(),n=[];for(;;){let{done:r,value:a}=t.next();if(r)break;let[s,i]=a,[o]=s.split("_");o===e&&n.push(i)}return n}function Ba(e){let{kernelName:t,backendName:n}=e,r=Ha(t,n);Ma.has(r)&&Fa(`The kernel '${t}' for backend '${n}' is already registered`),Ma.set(r,e)}function Wa(e){let{kernelName:t}=e;Oa.has(t)&&ut().getBool("DEBUG")&&Fa(`Overriding the gradient for '${t}'`),Oa.set(t,e)}function Va(e,t){let n=Ha(e,t);if(!Ma.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Ma.delete(n)}function Ua(e){if(!Oa.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Oa.delete(e)}function Ga(e,t){Pa(e).forEach((e=>{Ba(Object.assign({},e,{backendName:t}))}))}function Ha(e,t){return`${t}_${e}`}var ja={};function qa(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}B(ja,{arraysEqual:()=>Te,arraysEqualWithNull:()=>Ne,assert:()=>we,assertNonNegativeIntegerDimensions:()=>nt,assertNonNull:()=>ke,assertShapesMatch:()=>ve,bytesFromStringArray:()=>Ve,bytesPerElement:()=>We,checkConversionForErrors:()=>ze,clamp:()=>fe,computeStrides:()=>Xe,convertBackendValuesAndArrayBuffer:()=>Je,createScalarValue:()=>ls,createShuffledIndices:()=>$e,decodeString:()=>cs,distSquared:()=>xe,encodeString:()=>hs,fetch:()=>ps,fingerPrint64:()=>os,flatten:()=>ms,getArrayFromDType:()=>Le,getTypedArrayFromDType:()=>Oe,hasEncodingLoss:()=>Be,hexToLong:()=>Ya,indexToLoc:()=>at,inferDtype:()=>je,inferFromImplicitShape:()=>Fe,isBoolean:()=>Ge,isFunction:()=>qe,isInt:()=>_e,isNumber:()=>He,isPromise:()=>st,isScalarShape:()=>Se,isString:()=>Ue,isTypedArray:()=>fs,isValidDtype:()=>Pe,locToIndex:()=>rt,makeOnesTypedArray:()=>Qe,makeZerosNestedTypedArray:()=>tt,makeZerosTypedArray:()=>et,nearestDivisor:()=>Ke,nearestLargerEven:()=>me,now:()=>ds,parseAxisParam:()=>De,randUniform:()=>be,repeatedTry:()=>Re,rightPad:()=>Ae,shuffle:()=>he,shuffleCombo:()=>ce,sizeFromShape:()=>Ie,sizeToSquarishShape:()=>Ee,squeezeShape:()=>Me,sum:()=>ye,swap:()=>ge,tanh:()=>Ce,toNestedArray:()=>Ze,toTypedArray:()=>us});var Ka=W(V()),Xa=Ka.default||Ka;function Ya(e){return Xa.fromString(e,!0,16)}var Za=Ya("c3a5c85c97cb3127"),Ja=Ya("b492b66fbe98f273"),Qa=Ya("9ae16a3b2f90404f");function es(e){return e.xor(e.shru(47))}function ts(e,t,n){let r=e.slice(t,t+n);return Xa.fromBytes(Array.from(r),!0,!0)}function ns(e,t){return ts(e,t,8)}function rs(e,t){return ts(e,t,4)}function as(e,t){return 0===t?e:e.shru(t).or(e.shl(64-t))}function ss(e,t,n=Ya("9ddfea08eb382d69")){let r=e.xor(t).mul(n);r=r.xor(r.shru(47));let a=t.xor(r).mul(n);return a=a.xor(a.shru(47)),a=a.mul(n),a}function is(e,t,n,r){return function(e,t,n,r,a,s){a=a.add(e),s=as(s.add(a).add(r),21);let i=a;return a=(a=a.add(t)).add(n),s=s.add(as(a,44)),[a.add(r),s.add(i)]}(ns(e,t),ns(e,t+8),ns(e,t+16),ns(e,t+24),n,r)}function os(e,t=e.length){let n=Xa.fromNumber(81,!0);if(t<=32)return t<=16?function(e,t=e.length){if(t>=8){let n=Qa.add(2*t),r=ns(e,0).add(Qa),a=ns(e,t-8);return ss(as(a,37).mul(n).add(r),as(r,25).add(a).mul(n),n)}if(t>=4){let n=Qa.add(2*t);return ss(rs(e,0).shl(3).add(t),rs(e,t-4),n)}if(t>0){let n=e[0]+(e[t>>1]<<8),r=t+(e[t-1]<<2);return es(Qa.mul(n).xor(Za.mul(r))).mul(Qa)}return Qa}(e,t):function(e,t=e.length){let n=Qa.add(2*t),r=ns(e,0).mul(Ja),a=ns(e,8),s=ns(e,t-8).mul(n),i=ns(e,t-16).mul(Qa);return ss(as(r.add(a),43).add(as(s,30)).add(i),r.add(as(a.add(Qa),18)).add(s),n)}(e,t);if(t<=64)return function(e,t=e.length){let n=Qa.add(2*t),r=ns(e,0).mul(Qa),a=ns(e,8),s=ns(e,t-8).mul(n),i=ns(e,t-16).mul(Qa),o=as(r.add(a),43).add(as(s,30)).add(i),l=ss(o,r.add(as(a.add(Qa),18)).add(s),n),u=ns(e,16).mul(n),d=ns(e,24),p=o.add(ns(e,t-32)).mul(n),h=l.add(ns(e,t-24)).mul(n);return ss(as(u.add(d),43).add(as(p,30)).add(h),u.add(as(d.add(r),18)).add(p),n)}(e,t);let r=n,a=n.mul(Ja).add(113),s=es(a.mul(Qa).add(113)).mul(Qa),i=[Xa.UZERO,Xa.UZERO],o=[Xa.UZERO,Xa.UZERO];r=r.mul(Qa).add(ns(e,0));let l=0,u=64*(t-1>>6),d=u+(t-1&63)-63;do{r=as(r.add(a).add(i[0]).add(ns(e,l+8)),37).mul(Ja),a=as(a.add(i[1]).add(ns(e,l+48)),42).mul(Ja),r=r.xor(o[1]),a=a.add(i[0]).add(ns(e,l+40)),s=as(s.add(o[0]),33).mul(Ja),i=is(e,l,i[1].mul(Ja),r.add(o[0])),o=is(e,l+32,s.add(o[1]),a.add(ns(e,l+16))),[s,r]=[r,s],l+=64}while(l!==u);let p=Ja.add(s.and(255).shl(1));return l=d,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),r=as(r.add(a).add(i[0]).add(ns(e,l+8)),37).mul(p),a=as(a.add(i[1]).add(ns(e,l+48)),42).mul(p),r=r.xor(o[1].mul(9)),a=a.add(i[0].mul(9).add(ns(e,l+40))),s=as(s.add(o[0]),33).mul(p),i=is(e,l,i[1].mul(p),r.add(o[0])),o=is(e,l+32,s.add(o[1]),a.add(ns(e,l+16))),[s,r]=[r,s],ss(ss(i[0],o[0],p).add(es(a).mul(Za)).add(s),ss(i[1],o[1],p).add(r),p)}function ls(e,t){return"string"===t?hs(e):us([e],t)}function us(e,t){if("string"===t)throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=ms(e)),ut().getBool("DEBUG")&&ze(e,t),function(e,t){return e instanceof Float32Array&&"float32"===t||e instanceof Int32Array&&"int32"===t||e instanceof Uint8Array&&"bool"===t}(e,t))return e;if(null==t||"float32"===t||"complex64"===t)return new Float32Array(e);if("int32"===t)return new Int32Array(e);if("bool"===t){let t=new Uint8Array(e.length);for(let n=0;n<t.length;++n)0!==Math.round(e[n])&&(t[n]=1);return t}throw new Error(`Unknown data type ${t}`)}function ds(){return ut().platform.now()}function ps(e,t){return ut().platform.fetch(e,t)}function hs(e,t="utf-8"){return t=t||"utf-8",ut().platform.encode(e,t)}function cs(e,t="utf-8"){return t=t||"utf-8",ut().platform.decode(e,t)}function fs(e){return null!=ut().platform.isTypedArray?ut().platform.isTypedArray(e):qa(e)}function ms(e,t=[],n=!1){if(null==t&&(t=[]),"boolean"==typeof e||"number"==typeof e||"string"==typeof e||st(e)||null==e||fs(e)&&n)t.push(e);else if(Array.isArray(e)||fs(e))for(let r=0;r<e.length;++r)ms(e[r],t,n);else{let r=-1;for(let t of Object.keys(e))/^([1-9]+[0-9]*|0)$/.test(t)&&(r=Math.max(r,Number(t)));for(let a=0;a<=r;a++)ms(e[a],t,n)}return t}var gs=class{constructor(e,t){this.backendTimer=e,this.logger=t,null==t&&(this.logger=new bs)}profileKernel(e,t,n){let r,a,s=()=>{r=n()},i=ds();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let e of r)e.dataSync();a=Promise.resolve({kernelMs:ds()-i}
2)}if(ut().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let t=0;t<r.length;t++){let n=r[t];n.data().then((t=>{ys(t,n.dtype,e)}))}return{kernelName:e,outputs:r,inputs:t,timeMs:a.then((e=>e.kernelMs)),extraInfo:a.then((e=>null!=e.getExtraProfileInfo?e.getExtraProfileInfo():""))}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:a,extraInfo:s}=e;n.forEach((e=>{Promise.all([e.data(),r,s]).then((n=>{this.logger.logKernelProfile(t,e,n[0],n[1],a,n[2])}))}))}};function ys(e,t,n){if("float32"!==t)return!1;for(let t=0;t<e.length;t++){let r=e[t];if(isNaN(r)||!isFinite(r))return console.warn(`Found ${r} in the result of '${n}'`),!0}return!1}var bs=class{logKernelProfile(e,t,n,r,a,s){let i="number"==typeof r?Ae(`${r}ms`,9):r.error,o=Ae(e,25),l=t.rank,u=t.size,d=Ae(t.shape.toString(),14),p="";for(let e in a){let n=a[e];if(null!=n){let r=n.shape||t.shape,a=r.length;p+=`${e}: ${a}D ${a>0?r:""} `}}console.log(`%c${o}\t%c${i}\t%c${l}D ${d}\t%c${u}\t%c${p}\t%c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};var xs=20,ws=3,vs=7;function ks(e,t,n,r){let a=Xe(t),s=function(e,t,n,r){let a=Ie(t),s=r[r.length-1],i=new Array(s).fill(0),o=t.length,l="complex64"===n?Ts(e):e;if(o>1)for(let e=0;e<a/s;e++){let t=e*s;for(let e=0;e<s;e++)i[e]=Math.max(i[e],Is(l[t+e],0,n).length)}return i}(e,t,n,a),i=t.length,o=Ns(e,t,n,a,s),l=["Tensor"];return r&&(l.push(`  dtype: ${n}`),l.push(`  rank: ${i}`),l.push(`  shape: [${t}]`),l.push("  values:")),l.push(o.map((e=>"    "+e)).join("\n")),l.join("\n")}function Is(e,t,n){let r;return r=Array.isArray(e)?`${parseFloat(e[0].toFixed(vs))} + ${parseFloat(e[1].toFixed(vs))}j`:Ue(e)?`'${e}'`:"bool"===n?Ss(e):parseFloat(e.toFixed(vs)).toString(),Ae(r,t)}function Ss(e){return 0===e?"false":"true"}function Ns(e,t,n,r,a,s=!0){let i="complex64"===n?2:1,o=t[0],l=t.length;if(0===l){if("complex64"===n){return[Is(Ts(e)[0],0,n)]}return"bool"===n?[Ss(e[0])]:[e[0].toString()]}if(1===l){if(o>xs){let t=ws*i,r=Array.from(e.slice(0,t)),s=Array.from(e.slice((o-ws)*i,o*i));return"complex64"===n&&(r=Ts(r),s=Ts(s)),["["+r.map(((e,t)=>Is(e,a[t],n))).join(", ")+", ..., "+s.map(((e,t)=>Is(e,a[o-ws+t],n))).join(", ")+"]"]}return["["+("complex64"===n?Ts(e):Array.from(e)).map(((e,t)=>Is(e,a[t],n))).join(", ")+"]"]}let u=t.slice(1),d=r.slice(1),p=r[0]*i,h=[];if(o>xs){for(let t=0;t<ws;t++){let r=t*p,s=r+p;h.push(...Ns(e.slice(r,s),u,n,d,a,!1))}h.push("...");for(let t=o-ws;t<o;t++){let r=t*p,s=r+p;h.push(...Ns(e.slice(r,s),u,n,d,a,t===o-1))}}else for(let t=0;t<o;t++){let r=t*p,s=r+p;h.push(...Ns(e.slice(r,s),u,n,d,a,t===o-1))}let c=2===l?",":"";h[0]="["+(o>0?h[0]+c:"");for(let e=1;e<h.length-1;e++)h[e]=" "+h[e]+c;let f=",\n";for(let e=2;e<l;e++)f+="\n";return h[h.length-1]=" "+h[h.length-1]+"]"+(s?"":f),h}function Ts(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var _s=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=Ie(e),null!=n){let e=n.length;we(e===this.size,(()=>`Length of values '${e}' does not match the size inferred by the shape '${this.size}'.`))}if("complex64"===t)throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||Le(t,this.size),this.strides=Xe(e)}set(e,...t){0===t.length&&(t=[0]),we(t.length===this.rank,(()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`));let n=this.locToIndex(t);this.values[n]=e}get(...e){0===e.length&&(e=[0]);let t=0;for(let n of e){if(n<0||n>=this.shape[t]){let t=`Requested out of range element at ${e}.   Buffer shape=${this.shape}`;throw new Error(t)}t++}let n=e[e.length-1];for(let t=0;t<e.length-1;++t)n+=this.strides[t]*e[t];return this.values[n]}locToIndex(e){if(0===this.rank)return 0;if(1===this.rank)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(0===this.rank)return[];if(1===this.rank)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Cs().makeTensor(this.values,this.shape,this.dtype)}},Cs=null,Es=null;var $s=class{constructor(e,t,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=Ie(e),this.strides=Xe(e),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return Es.buffer(this.shape,this.dtype,e)}bufferSync(){return Es.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return Ze(this.shape,e,"complex64"===this.dtype)}arraySync(){return Ze(this.shape,this.dataSync(),"complex64"===this.dtype)}async data(){this.throwIfDisposed();let e=Cs().read(this.dataId);if("string"===this.dtype){let t=await e;
2try{return t.map((e=>cs(e)))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Cs().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Cs().readSync(this.dataId);if("string"===this.dtype)try{return e.map((e=>cs(e)))}catch(e){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Cs().read(this.dataId);return"string"===this.dtype?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),Cs().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Es.print(this,e)}clone(){return this.throwIfDisposed(),Es.clone(this)}toString(e=!1){return ks(this.dataSync(),this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Es.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Cs().makeVariable(this,e,t,n)}};function As(){return ct("Tensor",(()=>$s))}Object.defineProperty($s,Symbol.hasInstance,{value:e=>!!e&&null!=e.data&&null!=e.dataSync&&null!=e.throwIfDisposed}),As();var Rs=class extends $s{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r),this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!Te(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Cs().disposeTensor(this),this.dataId=e.dataId,Cs().incRef(this,null)}dispose(){Cs().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(Rs,Symbol.hasInstance,{value:e=>e instanceof $s&&null!=e.assign&&e.assign instanceof Function});var Fs,Ds,Ms,Os,Ls,zs,Ps={};B(Ps,{assertTypesMatch:()=>js,getTensorsInContainer:()=>Ks,isTensorInList:()=>qs,makeTypesMatch:()=>Hs}),(Ds=Fs||(Fs={})).R0="R0",Ds.R1="R1",Ds.R2="R2",Ds.R3="R3",Ds.R4="R4",Ds.R5="R5",Ds.R6="R6",function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"}(Ms||(Ms={})),function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"}(Os||(Os={})),function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"}(Ls||(Ls={})),function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"}(zs||(zs={}));var Bs={float32:Ls,int32:Ms,bool:Os,complex64:zs};function Ws(e,t){if("string"===e||"string"===t){if("string"===e&&"string"===t)return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return Bs[e][t]}function Vs(e){return Ws(e,"int32")}function Us(e){return null!=e&&"object"==typeof e&&"texture"in e&&e.texture instanceof WebGLTexture}function Gs(e){return"undefined"!=typeof GPUBuffer&&null!=e&&"object"==typeof e&&"buffer"in e&&e.buffer instanceof GPUBuffer}function Hs(e,t){if(e.dtype===t.dtype)return[e,t];let n=Ws(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function js(e,t){we(e.dtype===t.dtype,(()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`))}function qs(e,t){return t.some((t=>t.id===e.id))}function Ks(e){let t=[];return Xs(e,t,new Set),t}function Xs(e,t,n){if(null==e)return;if(e instanceof $s)return void t.push(e);if(!function(e){return Array.isArray(e)||"object"==typeof e}(e))return;let r=e;for(let e in r){let a=r[e];n.has(a)||(n.add(a),Xs(a,t,n))}}function Ys(e){return null!=e.kernelName}var Zs=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map((e=>e.name))))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},Js=class e{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Zs}async ready(){if(null!=this.pendingBackendInit)return this.pendingBackendInit.then((()=>{}));if(null!=this.backendInstance)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success)return void await this.setBackend(n)}throw new Error("Could not initialize any backends, all backend initializations failed.")}
vendor: 1,150 bytes, line 2
2get backend(){if(null!=this.pendingBackendInit)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(null==this.backendInstance){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry)){if(!(e in this.registryFactory))return null;{let{asyncInit:t}=this.initializeBackend(e);if(t)return null}}return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(Fa(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(null==this.registryFactory[e])throw new Error(`Backend name '${e}' not found in registry`);
2if(this.backendName=e,null==this.registry[e]){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new gs(this.backendInstance),!0}setupRegisteredKernels(){Pa(this.backendName).forEach((e=>{null!=e.setupFunc&&e.setupFunc(this.backendInstance)}))}disposeRegisteredKernels(e){Pa(e).forEach((t=>{null!=t.disposeFunc&&t.disposeFunc(this.registry[e])}))}initializeBackend(e){let t=this.registryFactory[e];if(null==t)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(!n||n instanceof de||"function"!=typeof n.then)return this.registry[e]=n,{success:!0,asyncInit:!1};{let t=++this.pendingBackendInitId,r=n.then((n=>!(t<this.pendingBackendInitId)&&(this.registry[e]=n,this.pendingBackendInit=null,!0))).catch((n=>(t<this.pendingBackendInitId||(this.pendingBackendInit=null,Fa(`Initialization of backend ${e} failed`),Fa(n.stack||n.message)),!1)));return this.pendingBackendInit=r,{success:r,asyncInit:!0}}}catch(t){return Fa(`Initialization of backend ${e} failed`),Fa(t.stack||t.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&null!=this.pendingBackendInit&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(0===Object.keys(this.registryFactory).length)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort(((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority))}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:r,asyncInit:a}=this.initializeBackend(n);if(a||r)return{name:n,asyncInit:a}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),r=n.backend,a=this.readSync(t),s=r.refCount(t);r.disposeData(t,!0),n.backend=e,e.move(t,a,n.shape,n.dtype,s),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n,r=null;if(null==t){if("function"!=typeof e)throw new Error("Please provide a function to tidy()");t=e}else{if("string"!=typeof e&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if("function"!=typeof t)throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");r=e}return this.scopedRun((()=>this.startScope(r)),(()=>this.endScope(n)),(()=>(n=t(),n instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),n)))}scopedRun(e,t,n){e();try{let e=n();return t(),e}catch(e){throw t(),e}}nextTensorId(){return e.nextTensorId++}nextVariableId(){return e.nextVariableId++}clone(e){let t=ei.runKernel(An,{x:e}),n={x:e};return this.addTapeNode(this.state.activeScope.name,n,[t],(e=>({x:()=>{let t={x:e},n={dtype:"float32"};return ei.runKernel(zt,t,n)}})),[],{}),t}runKernel(e,t,n){if(null==this.backendName&&this.backend,null==La(e,this.backendName))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),a=0;n.forEach((e=>{a+="complex64"===e.dtype?3:1}));let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=r-t-a-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n,r=[],a=this.isTapeOn(),s=this.state.numBytes,i=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0),null==this.backendName&&this.backend;let o,l=Ys(e)?e.kernelName:null!=this.state.activeScope?this.state.activeScope.name:"";if(Ys(e)){let{kernelName:t,inputs:s,attrs:i}=e;null==this.backendName&&this.backend;let l=La(t,this.backendName);we(null!=l,(()=>`Cannot find registered kernel '${t}' for backend '${this.backendName}'`)),n=()=>{let e=this.backend.numDataIds();
2o=l.kernelFunc({inputs:s,attrs:i,backend:this.backend});let n=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(t,e,n);let u=n.map((e=>null!=e.rank?e:this.makeTensorFromTensorInfo(e)));if(a){let e=this.getTensorsForGradient(t,s,u);r=this.saveTensorsForBackwardMode(e)}return u}}else{let{forwardFunc:t}=e,s=e=>{a&&(r=e.map((e=>this.keep(this.clone(e)))))};n=()=>{let e=this.backend.numDataIds();o=this.tidy((()=>t(this.backend,s)));let n=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,e,n),n}}let u,{inputs:d,attrs:p}=e,h=Ys(e)?null:e.backwardsFunc;return this.scopedRun((()=>this.state.kernelDepth++),(()=>this.state.kernelDepth--),(()=>{this.ENV.getBool("DEBUG")||this.state.profiling?(u=this.profiler.profileKernel(l,d,(()=>n())),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(u),t=u.outputs):t=n()})),a&&this.addTapeNode(l,d,t,h,r,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-i,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(d).map((e=>null!=d[e]?d[e].shape:null)),outputShapes:t.map((e=>e.shape)),kernelTimeMs:u.timeMs,extraInfo:u.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map((e=>this.keep(this.clone(e))))}getTensorsForGradient(e,t,n){let r=za(e);if(null!=r){let e,a=r.inputsToSave||[],s=r.outputsToSave||[];r.saveAllInputs?(we(Array.isArray(t),(()=>"saveAllInputs is true, expected inputs to be an array.")),e=Object.keys(t).map((e=>t[e]))):e=a.map((e=>t[e]));let i=n.filter(((e,t)=>s[t]));return e.concat(i)}return[]}makeTensor(e,t,n,r){if(null==e)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let a=e;"string"===n&&Ue(e[0])&&(a=e.map((e=>hs(e))));let s=r.write(a,t,n),i=new $s(t,n,s,this.nextTensorId());if(this.trackTensor(i,r),"string"===n){let e=this.state.tensorInfo.get(s),t=Ve(a);this.state.numBytes+=t-e.bytes,e.bytes=t}return i}makeTensorFromDataId(e,t,n,r){let a={dataId:e,shape:t,dtype:n=n||"float32"};return this.makeTensorFromTensorInfo(a,r)}makeTensorFromTensorInfo(e,t){let{dataId:n,shape:r,dtype:a}=e,s=new $s(r,a,n,this.nextTensorId());return this.trackTensor(s,t),s}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),null!=r&&r!==e.dtype&&(e=e.cast(r));let a=new Rs(e,t,n,this.nextTensorId());if(null!=this.state.registeredVariables[a.name])throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}trackTensor(e,t){this.state.numTensors++,"string"===e.dtype&&this.state.numStringTensors++;let n=0;"complex64"!==e.dtype&&"string"!==e.dtype&&(n=e.size*We(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof Rs||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,"string"===e.dtype&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),"complex64"!==e.dtype&&"string"!==e.dtype){let t=e.size*We(e.dtype);this.state.numBytes-=t}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),null!=this.state.registeredVariables[e.name]&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,null==e.reasons&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map((e=>e.totalBytesSnapshot))),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let e of this.state.activeProfile.kernels)e.kernelTimeMs=await e.kernelTimeMs,e.extraInfo=await e.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>
20&&0===this.state.kernelDepth}addTapeNode(e,t,n,r,a,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:a},o=za(e);null!=o&&(r=o.gradFunc),null!=r&&(i.gradient=e=>(e=e.map(((e,t)=>{if(null==e){let e=n[t],r=et(e.size,e.dtype);return this.makeTensor(r,e.shape,e.dtype)}return e})),r(e.length>1?e:e[0],a,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){0===this.state.gradientDepth&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Ks(e),n=new Set(t.map((e=>e.id)));for(let e=0;e<this.state.activeScope.track.length;e++){let t=this.state.activeScope.track[e];!t.kept&&!n.has(t.id)&&t.dispose()}let r=this.state.scopeStack.pop();this.state.activeScope=0===this.state.scopeStack.length?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach((e=>{!e.kept&&e.scopeId===r.id&&this.track(e)}))}gradients(e,t,n,r=!1){if(we(t.length>0,(()=>"gradients() received an empty list of xs.")),null!=n&&"float32"!==n.dtype)throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let a=this.scopedRun((()=>this.startTape()),(()=>this.endTape()),(()=>this.tidy("forward",e)));we(a instanceof $s,(()=>"The result y returned by f() must be a tensor."));let s=function(e,t,n){let r={},a={};for(let e=0;e<t.length;e++)r[t[e].id]=!0;for(let n=0;n<e.length;n++){let s=e[n],i=s.inputs;for(let e in i){let n=i[e],o=!1;for(let e=0;e<t.length;e++)if(r[n.id]){s.outputs.forEach((e=>r[e.id]=!0)),o=!0,a[s.id]=!0;break}if(o)break}}let s={};s[n.id]=!0;let i={};for(let t=e.length-1;t>=0;t--){let n=e[t],r=n.inputs;for(let e=0;e<n.outputs.length;e++)if(s[n.outputs[e].id]){for(let e in r)s[r[e].id]=!0,i[n.id]=!0;break}}let o=[];for(let t=0;t<e.length;t++){let n=e[t];if(a[n.id]&&i[n.id]){let e={};for(let t in n.inputs){let a=n.inputs[t];r[a.id]&&(e[t]=a)}let t=Object.assign({},n);t.inputs=e,t.outputs=n.outputs,o.push(t)}}return o}(this.state.activeTape,t,a);if(!r&&0===s.length&&t.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",(()=>{let e={};e[a.id]=null==n?function(e){let t=Qe(Ie(e),"float32");return ei.makeTensor(t,e,"float32")}(a.shape):n,function(e,t,n,r){for(let a=t.length-1;a>=0;a--){let s=t[a],i=[];if(s.outputs.forEach((t=>{let n=e[t.id];null!=n?i.push(n):i.push(null)})),null==s.gradient)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let t in s.inputs){if(!(t in o))throw new Error(`Cannot backprop through input ${t}. Available gradients found: ${Object.keys(o)}.`);let a=n((()=>o[t]()));if("float32"!==a.dtype)throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${t} must have 'float32' dtype, but has '${a.dtype}'`);let i=s.inputs[t];if(!Te(a.shape,i.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${t}' has shape '${a.shape}', which does not match the shape of the input '${i.shape}'`);if(null==e[i.id])e[i.id]=a;else{let t=e[i.id];e[i.id]=r(t,a),t.dispose()}}}}(e,s,(e=>this.tidy(e)),ti);let r=t.map((t=>e[t.id]));return 0===this.state.gradientDepth&&(this.state.activeTape.forEach((e=>{for(let t of e.saved)t.dispose()})),this.state.activeTape=null),{value:a,grads:r}}))}customGrad(e){return we(qe(e),(()=>"The f passed in customGrad(f) must be a function.")),(...t)=>{we(t.every((e=>e instanceof $s)),(()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors"));let n,r={};t.forEach(((e,t)=>{r[t]=e}));return this.runKernelFunc({forwardFunc:(r,a)=>(n=e(...t,a),we(n.value instanceof $s,(()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor")),we(qe(n.gradFunc),(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function.")),n.value),backwardsFunc:(e,r)=>{let a=n.gradFunc(e,r),s=Array.isArray(a)?a:[a];we(s.length===t.length,(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...).")),we(s.every((e=>e instanceof $s)),(()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors."));let i={};
2return s.forEach(((e,t)=>{i[t]=()=>e})),i},inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=ds(),n=await this.backend.time(e);return n.wallMs=ds()-t,n}track(e){return null!=this.state.activeScope&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new Zs;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};function Qs(){let e=ht();if(null==e._tfengine){let t=new ot(e);e._tfengine=new Js(t)}return function(e){pt=e}(e._tfengine.ENV),function(e){Cs=e}((()=>e._tfengine)),e._tfengine}Js.nextTensorId=0,Js.nextVariableId=0;var ei=Qs();function ti(e,t){let n={a:e,b:t};return ei.runKernel(yt,n)}var ni,ri={};function ai(e){ni=e}function si(e){if(void 0!==ni)return ni;if(e||"undefined"!=typeof navigator&&null!=navigator){if(e||(e=navigator),"ReactNative"===e.product)return!0;let t=e.userAgent||e.vendor||("undefined"!=typeof window?window.opera:"");if(!t){let t=e;return t.userAgentData&&t.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function ii(){return"undefined"!=typeof window&&null!=window.document||"undefined"!=typeof WorkerGlobalScope}B(ri,{isBrowser:()=>ii,isMobile:()=>si,mockIsMobile:()=>ai});var oi=ut();function li(e,t){let n=e;if(fs(e))return"string"===t?[]:[e.length];if(Us(e)){let t=e.channels||"RGBA";return[e.height,e.width*t.length]}if(Gs(e))return[e.buffer.size/(null==t?4:We(t))];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||fs(n)&&"string"!==t;)r.push(n.length),n=n[0];return Array.isArray(e)&&ut().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&ui(e,r,[]),r}function ui(e,t,n){if(n=n||[],!Array.isArray(e)&&!fs(e))return void we(0===t.length,(()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`));we(t.length>0,(()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`)),we(e.length===t[0],(()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`));let r=t.slice(1);for(let t=0;t<e.length;++t)ui(e[t],r,n.concat(t))}function di(e,t,n,r){if("string_or_numeric"!==e){if(null==e)throw new Error("Expected dtype cannot be null.");if("numeric"!==e&&e!==t||"numeric"===e&&"string"===t)throw new Error(`Argument '${n}' passed to '${r}' must be ${e} tensor, but got ${t} tensor`)}}function pi(e,t,n,r="numeric"){if(e instanceof As())return di(r,e.dtype,t,n),e;let a=je(e);if("string"!==a&&["bool","int32","float32"].indexOf(r)>=0&&(a=r),di(r,a,t,n),null==e||!fs(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e&&"string"!=typeof e){let r=null==e?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${r}'`)}let s=li(e,a);!fs(e)&&!Array.isArray(e)&&(e=[e]);let i="string"!==a?us(e,a):ms(e,[],!0);return ei.makeTensor(i,s,a)}function hi(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map(((e,a)=>pi(e,`${t}[${a}]`,n,r)))}oi.registerFlag("DEBUG",(()=>!1),(e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")}
2)),oi.registerFlag("IS_BROWSER",(()=>ii())),oi.registerFlag("IS_NODE",(()=>void 0!==C&&void 0!==C.versions&&void 0!==C.versions.node)),oi.registerFlag("IS_CHROME",(()=>"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor))),oi.registerFlag("IS_SAFARI",(()=>"undefined"!=typeof navigator&&null!=navigator&&null!=navigator.userAgent&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor))),oi.registerFlag("PROD",(()=>!1)),oi.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",(()=>oi.getBool("DEBUG"))),oi.registerFlag("DEPRECATION_WARNINGS_ENABLED",(()=>!0)),oi.registerFlag("IS_TEST",(()=>!1)),oi.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",(()=>oi.getBool("DEBUG"))),oi.registerFlag("WRAP_TO_IMAGEBITMAP",(()=>!1)),oi.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",(()=>!1)),oi.registerFlag("USE_SETTIMEOUTCUSTOM",(()=>!1));var ci="__op";function fi(e){let t=Object.keys(e);if(1!==t.length)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n+=ci;let a=(...e)=>{ei.startScope(n);try{let t=r(...e);return st(t)&&console.error("Cannot return a Promise inside of tidy."),ei.endScope(t),t}catch(e){throw ei.endScope(null),e}};return Object.defineProperty(a,"name",{value:n,configurable:!0}),a}var mi=fi({complex_:function(e,t){let n=pi(e,"real","complex"),r=pi(t,"imag","complex");ve(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let a={real:n,imag:r};return ei.runKernel(Wt,a)}});function gi(e,t,n,r){if(null==r)r=je(e);else if("complex64"===r)throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(Gs(e)||Us(e)){if("float32"!==r&&"int32"!==r)throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${r}.`);return ei.backend.createTensorFromGPUData(e,t||n,r)}if(!fs(e)&&!Array.isArray(e)&&"number"!=typeof e&&"boolean"!=typeof e&&"string"!=typeof e)throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(null!=t){nt(t);let e=Ie(t),r=Ie(n);we(e===r,(()=>`Based on the provided shape, [${t}], the tensor should have ${e} values but has ${r}`));for(let e=0;e<n.length;++e){let r=n[e],a=e!==n.length-1||r!==Ie(t.slice(e));we(n[e]===t[e]||!a,(()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `))}}return!fs(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e="string"!==r?us(e,r):ms(e,[],!0),ei.makeTensor(e,t,r)}function yi(e,t,n){return gi(e,t,li(e,n),n)}var bi={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},xi=class e{static join(t){return new e(t).slice()}constructor(e){if(this.shards=[],this.previousShardIndex=0,null==e||(e instanceof Array||(e=[e]),0===(e=e.map((e=>fs(e)?e.buffer:e))).length))return;this.bufferUniformSize=e[0].byteLength;let t=0;for(let n=0;n<e.length;n++){let r=e[n];n!==e.length-1&&r.byteLength!==this.bufferUniformSize&&(this.bufferUniformSize=void 0);let a=t+r.byteLength;this.shards.push({buffer:r,start:t,end:a}),t=a}0===this.shards.length&&(this.byteLength=0),this.byteLength=this.shards[this.shards.length-1].end}slice(e=0,t=this.byteLength){if(0===this.shards.length)return new ArrayBuffer(0);if(e=isNaN(Number(e))?0:e,t=isNaN(Number(t))?0:t,e=Math.max(0,e),(t=Math.min(this.byteLength,t))<=e)return new ArrayBuffer(0);let n=this.findShardForByte(e);if(-1===n)throw new Error(`Could not find start shard for byte ${e}`);let r=new ArrayBuffer(t-e),a=new Uint8Array(r),s=0;for(let r=n;r<this.shards.length;r++){let n=this.shards[r],i=e+s-n.start,o=s,l=Math.min(t,n.end)-n.start,u=new Uint8Array(n.buffer,i,l-i);if(a.set(u,o),s+=u.length,t<n.end)break}return r}findShardForByte(e){if(0===this.shards.length||e<0||e>=this.byteLength)return-1;if(null!=this.bufferUniformSize)return this.previousShardIndex=Math.floor(e/this.bufferUniformSize),this.previousShardIndex;function t(t){return e<t.start?-1:e>=t.end?1:0}if(0===t(this.shards[this.previousShardIndex]))return this.previousShardIndex;let n=function(e,t){let n=0,r=e.length;for(;n<=r;){let a=Math.floor((r-n)/2)+n,s=t(e[a]);if(0===s)return a;s<0?r=a:n=a+1}return-1}(this.shards,t);return-1===n?-1:(this.previousShardIndex=n,this.previousShardIndex)}};function wi(){ut().set("PROD",!0)}function vi(){ut().set("DEBUG",!0)}function ki(){ut().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Ii(e){ut().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function Si(){ei.disposeVariables()}function Ni(){return ei}function Ti(){return ei.memory()}function _i(e){return ei.profile(e)}function Ci(e,t){return ei.tidy(e,t)}function Ei(e){Ks(e).forEach((e=>e.dispose()))}function $i(e){return ei.keep(e)}function Ai(e){return ei.time(e)}function Ri(e){return ei.setBackend(e)}function Fi(){return ei.ready()}function Di(){return ei.backendName}function Mi(e){ei.removeBackend(e)}function Oi(e){return ei.findBackend(e)}function Li(e){return ei.findBackendFactory(e)}function zi(e,t,n=1){return ei.registerBackend(e,t,n)}function Pi(){return ei.backend}function Bi(e,t){ut().setPlatform(e,t)}!function(e){e}(Ii);var Wi=4;async function Vi(e,t){let n=[],r=[],a=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);for(let s=0;s<a.length;++s){let i=a[s],o=Array.isArray(e)?e[s].tensor:e[i];if("float32"!==o.dtype&&"int32"!==o.dtype&&"bool"!==o.dtype&&"string"!==o.dtype&&"complex64"!==o.dtype)throw new Error(`Unsupported dtype in weight '${i}': ${o.dtype}`);
2let l={name:i,shape:o.shape,dtype:o.dtype};if("string"===o.dtype){let e=new Promise((async e=>{let t=await o.bytes(),n=t.reduce(((e,t)=>e+t.length),0)+Wi*t.length,r=new Uint8Array(n),a=0;for(let e=0;e<t.length;e++){let n=t[e],s=new Uint8Array(new Uint32Array([n.length]).buffer);r.set(s,a),a+=Wi,r.set(n,a),a+=n.length}e(r)}));r.push(e)}else r.push(o.data());null!=t&&(l.group=t),n.push(l)}return{data:Xi(await Promise.all(r)),specs:n}}function Ui(e,t){let n=new xi(e),r={},a=0;for(let e of t){let t=Gi(e,((e,t)=>n.slice(a+e,a+t)));r[e.name]=ji(e,n.slice(a,a+t)),a+=t}return r}function Gi(e,t){let n,r=Ie(e.shape);if("quantization"in e){let t=e.quantization;n=bi[t.dtype]}else{if("string"===e.dtype){let e=0;for(let n=0;n<r;n++)e+=Wi+new Uint32Array(t(e,e+Wi))[0];return e}n=bi[e.dtype]}return r*n}async function Hi(e,t){let n,r=Ie(e.shape);if("quantization"in e){let t=e.quantization;n=bi[t.dtype]}else{if("string"===e.dtype){let e=0;for(let n=0;n<r;n++)e+=Wi+new Uint32Array(await t(e,e+Wi))[0];return e}n=bi[e.dtype]}return r*n}function ji(e,t){let n,r=e.name,a=e.dtype,s=e.shape,i=Ie(s),o=0;if("quantization"in e){let s=e.quantization;if("uint8"===s.dtype||"uint16"===s.dtype){if(!("min"in s)||!("scale"in s))throw new Error(`Weight ${e.name} with quantization ${s.dtype} doesn't have corresponding metadata min and scale.`)}else{if("float16"!==s.dtype)throw new Error(`Weight ${e.name} has unknown quantization dtype ${s.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);if("float32"!==a)throw new Error(`Weight ${e.name} is quantized with ${s.dtype} which only supports weights of type float32 not ${a}.`)}let l=bi[s.dtype],u="uint8"===s.dtype?new Uint8Array(t):new Uint16Array(t);if("float32"===a)if("uint8"===s.dtype||"uint16"===s.dtype){n=new Float32Array(u.length);for(let e=0;e<u.length;e++){let t=u[e];n[e]=t*s.scale+s.min}}else{if("float16"!==s.dtype)throw new Error(`Unsupported quantization type ${s.dtype} for weight type float32.`);n=function(){let e=function(){let e=e=>{let t=e<<13,n=0;for(;!(8388608&t);)n-=8388608,t<<=1;return t&=-8388609,n+=947912704,t|n},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let e=1024;e<2048;e++)t[e]=939524096+(e-1024<<13);return t}(),t=function(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}(),n=function(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}();return r=>{let a=new ArrayBuffer(4*r.length),s=new Uint32Array(a);for(let a=0;a<r.length;a++){let i=r[a],o=e[n[i>>10]+(1023&i)]+t[i>>10];s[a]=o}return new Float32Array(a)}}()(u)}else{if("int32"!==a)throw new Error(`Unsupported dtype in weight '${r}': ${a}`);if("uint8"!==s.dtype&&"uint16"!==s.dtype)throw new Error(`Unsupported quantization type ${s.dtype} for weight type int32.`);n=new Int32Array(u.length);for(let e=0;e<u.length;e++){let t=u[e];n[e]=Math.round(t*s.scale+s.min)}}o+=i*l}else if("string"===a){let r=Ie(e.shape);n=[];for(let e=0;e<r;e++){let e=new Uint32Array(t.slice(o,o+Wi))[0];o+=Wi;let r=new Uint8Array(t.slice(o,o+e));n.push(r),o+=e}}else{let e=bi[a];if("float32"===a)n=new Float32Array(t);else if("int32"===a)n=new Int32Array(t);else{if("bool"!==a){if("complex64"===a){n=new Float32Array(t);let e=new Float32Array(n.length/2),r=new Float32Array(n.length/2);for(let t=0;t<e.length;t++)e[t]=n[2*t],r[t]=n[2*t+1];let a=yi(e,s,"float32"),i=yi(r,s,"float32"),o=mi(a,i);return a.dispose(),i.dispose(),o}throw new Error(`Unsupported dtype in weight '${r}': ${a}`)}n=new Uint8Array(t)}o+=i*e}return yi(n,s,a)}async function qi(e,t,n){let r=new Uint8Array(t);for(;r.byteLength<n;){let{done:t,value:a}=await e.read();if(t&&null==a){let e=n-r.byteLength;throw new Error(`Reader is done but ${e} bytes are still expected`)}let s=new Uint8Array(r.length+a.byteLength);s.set(r,0),s.set(new Uint8Array(a),r.length),r=s}return r.buffer}async function Ki(e,t){let n={},r=e.getReader(),a=new ArrayBuffer(0);for(let e of t){let t=await Hi(e,(async(e,t)=>(a=await qi(r,a,t),a.slice(e,t))));a=await qi(r,a,t);let s=a.slice(0,t);a=a.slice(t);let i=ji(e,s);if(n[e.name]=i,"webgpu"===Di()){let e=Pi();"uploadToGPU"in e&&Ie(i.shape)>=ut().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&e.uploadToGPU(i.dataId)}}return n}function Xi(e){if(null===e)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach((e=>{if(t+=e.byteLength,n.push(e.byteLength===e.buffer.byteLength?e:ne
2w e.constructor(e)),!(e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${e.constructor.name}`)}));let r=new Uint8Array(t),a=0;return n.forEach((e=>{r.set(new Uint8Array(e.buffer),a),a+=e.byteLength})),r.buffer}var Yi=void 0!==E&&("undefined"==typeof Blob||"undefined"==typeof atob||"undefined"==typeof btoa);function Zi(e){return Yi?E.byteLength(e,"utf8"):new Blob([e]).size}function Ji(e){return xi.join(e)}function Qi(e){for(e=e.trim();e.endsWith("/");)e=e.slice(0,e.length-1);let t=e.split("/");return t[t.length-1]}function eo(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return null!=e.signature&&(n.signature=e.signature),null!=e.userDefinedMetadata&&(n.userDefinedMetadata=e.userDefinedMetadata),null!=e.modelInitializer&&(n.modelInitializer=e.modelInitializer),null!=e.initializerSignature&&(n.initializerSignature=e.initializerSignature),null!=e.trainingConfig&&(n.trainingConfig=e.trainingConfig),n}function to(e,t,n){let r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(null!=e.trainingConfig&&(r.trainingConfig=e.trainingConfig),null!=e.weightsManifest){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!n)throw new Error("modelJSON has weightsManifest but weightData is null");r.weightSpecs=t,r.weightData=n}return null!=e.signature&&(r.signature=e.signature),null!=e.userDefinedMetadata&&(r.userDefinedMetadata=e.userDefinedMetadata),null!=e.modelInitializer&&(r.modelInitializer=e.modelInitializer),null!=e.initializerSignature&&(r.initializerSignature=e.initializerSignature),r}async function no(e,t){let n,r;return null!=e.weightsManifest&&([n,r]=await t(e.weightsManifest)),to(e,n,r)}function ro(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:null==e.modelTopology?0:Zi(JSON.stringify(e.modelTopology)),weightSpecsBytes:null==e.weightSpecs?0:Zi(JSON.stringify(e.weightSpecs)),weightDataBytes:null==e.weightData?0:new xi(e.weightData).byteLength}}function ao(e){let t=[];for(let n of e)t.push(...n.weights);return t}var so=class e{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return null==e.instance&&(e.instance=new e),e.instance}static registerSaveRouter(t){e.getInstance().saveRouters.push(t)}static registerLoadRouter(t){e.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return e.getHandlers(t,"save")}static getLoadHandlers(t,n){return e.getHandlers(t,"load",n)}static getHandlers(t,n,r){let a=[];return("load"===n?e.getInstance().loadRouters:e.getInstance().saveRouters).forEach((e=>{let n=e(t,r);null!==n&&a.push(n)})),a}},io=e=>so.registerSaveRouter(e),oo=e=>so.registerLoadRouter(e),lo=e=>so.getSaveHandlers(e),uo=(e,t)=>so.getLoadHandlers(e,t),po="tensorflowjs",ho="models_store",co="model_info_store";function fo(){if(!ut().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e="undefined"==typeof window?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(null==t)throw new Error("The current browser does not appear to support IndexedDB.");return t}function mo(e){let t=e.result;t.createObjectStore(ho,{keyPath:"modelPath"}),t.createObjectStore(co,{keyPath:"modelPath"})}var go=class{constructor(e){if(this.indexedDB=fo(),null==e||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise(((e,n)=>{let r=this.indexedDB.open(po,1);r.onupgradeneeded=()=>mo(r),r.onsuccess=()=>{let a=r.result;if(null==t){let t=a.transaction(ho,"readonly"),r=t.objectStore(ho).get(this.modelPath);r.onsuccess=()=>
2{if(null==r.result)return a.close(),n(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));e(r.result.modelArtifacts)},r.onerror=e=>(a.close(),n(r.error)),t.oncomplete=()=>a.close()}else{t.weightData=xi.join(t.weightData);let r,s,i=ro(t),o=a.transaction(co,"readwrite"),l=o.objectStore(co);try{r=l.put({modelPath:this.modelPath,modelArtifactsInfo:i})}catch(e){return n(e)}r.onsuccess=()=>{s=a.transaction(ho,"readwrite");let r,u=s.objectStore(ho);try{r=u.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i})}catch(e){return n(e)}r.onsuccess=()=>e({modelArtifactsInfo:i}),r.onerror=e=>{l=o.objectStore(co);let t=l.delete(this.modelPath);t.onsuccess=()=>(a.close(),n(r.error)),t.onerror=e=>(a.close(),n(r.error))}},r.onerror=e=>(a.close(),n(r.error)),o.oncomplete=()=>{null==s?a.close():s.oncomplete=()=>a.close()}}},r.onerror=e=>n(r.error)}))}};go.URL_SCHEME="indexeddb://";var yo=e=>ut().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(go.URL_SCHEME)?function(e){return new go(e)}(e.slice(go.URL_SCHEME.length)):null;so.registerSaveRouter(yo),so.registerLoadRouter(yo);var bo="/",xo="tensorflowjs_models",wo="info",vo="model_topology",ko="weight_specs",Io="weight_data",So="model_metadata";function No(e){return{info:[xo,e,wo].join(bo),topology:[xo,e,vo].join(bo),weightSpecs:[xo,e,ko].join(bo),weightData:[xo,e,Io].join(bo),modelMetadata:[xo,e,So].join(bo)}}function To(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function _o(e){let t=e.split(bo);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(bo)}var Co=class{constructor(e){if(!ut().getBool("IS_BROWSER")||"undefined"==typeof window||void 0===window.localStorage)throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,null==e||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=No(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=ro(e),a=xi.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,function(e){if(Yi)return E.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let e=0,r=t.length;e<r;e++)n+=String.fromCharCode(t[e]);return btoa(n)}(a));let s={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:null!=e.signature?e.signature:void 0,userDefinedMetadata:null!=e.userDefinedMetadata?e.userDefinedMetadata:void 0,modelInitializer:null!=e.modelInitializer?e.modelInitializer:void 0,initializerSignature:null!=e.initializerSignature?e.initializerSignature:void 0,trainingConfig:null!=e.trainingConfig?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(s)),{modelArtifactsInfo:r}}catch(e){throw To(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${r.modelTopologyBytes}, weightSpecsBytes=${r.weightSpecsBytes}, weightDataBytes=${r.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(null==e)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if("JSON"!==e.modelTopologyType)throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(null==n)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let r=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(null==r)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=r;let a=this.LS.getItem(this.keys.modelMetadata);if(null!=a){let e=JSON.parse(a);t.format=e.format,t.generatedBy=e.generatedBy,t.convertedBy=e.convertedBy,null!=e.signature&&(t.signature=e.signature),null!=e.userDefinedMetadata&&(t.userDefinedMetadata=e.userDefinedMetadata),null!=e.modelInitializer&&(t.modelInitializer=e.modelInitializer),null!=e.initializerSignature&&(t.initializerSignature=e.initializerSignature),null!=e.trainingConfig&&(t.trainingConfig=e.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(null==s)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=function(e){if(Yi){let t=E.from(e,"base64");return t.buffer.slice(t.byteOffset,t.byteOffset+t.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let e=0;e<t.length;++e)n.set([t.charCodeAt(e)],e);return n.buffer}(s),t}};Co.URL_SCHEME="localstorage://";var Eo=e=>
2ut().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Co.URL_SCHEME)?function(e){return new Co(e)}(e.slice(Co.URL_SCHEME.length)):null;so.registerSaveRouter(Eo),so.registerLoadRouter(Eo);var $o="://",Ao=class e{constructor(){this.managers={}}static getInstance(){return null==e.instance&&(e.instance=new e),e.instance}static registerManager(t,n){we(null!=t,(()=>"scheme must not be undefined or null.")),t.endsWith($o)&&(t=t.slice(0,t.indexOf($o))),we(t.length>0,(()=>"scheme must not be an empty string."));let r=e.getInstance();we(null==r.managers[t],(()=>`A model store manager is already registered for scheme '${t}'.`)),r.managers[t]=n}static getManager(t){let n=e.getInstance().managers[t];if(null==n)throw new Error(`Cannot find model manager for scheme '${t}'`);return n}static getSchemes(){return Object.keys(e.getInstance().managers)}};function Ro(e){if(-1===e.indexOf($o))throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Ao.getSchemes().join(",")}`);return{scheme:e.split($o)[0],path:e.split($o)[1]}}async function Fo(e,t,n=!1){we(e!==t,(()=>`Old path and new path are the same: '${e}'`));let r=so.getLoadHandlers(e);we(r.length>0,(()=>`Copying failed because no load handler is found for source URL ${e}.`)),we(r.length<2,(()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`));let a=r[0],s=so.getSaveHandlers(t);we(s.length>0,(()=>`Copying failed because no save handler is found for destination URL ${t}.`)),we(s.length<2,(()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`));let i=s[0],o=Ro(e).scheme,l=Ro(e).path,u=o===Ro(e).scheme,d=await a.load();n&&u&&await Ao.getManager(o).removeModel(l);let p=await i.save(d);return n&&!u&&await Ao.getManager(o).removeModel(l),p.modelArtifactsInfo}async function Do(){let e=Ao.getSchemes(),t={};for(let n of e){let e=await Ao.getManager(n).listModels();for(let r in e){t[n+$o+r]=e[r]}}return t}async function Mo(e){let t=Ro(e);return Ao.getManager(t.scheme).removeModel(t.path)}async function Oo(e,t){return Fo(e,t,!1)}async function Lo(e,t){return Fo(e,t,!0)}if(ut().get("IS_BROWSER")){ut().setPlatform("browser",new class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if("utf-8"!==t&&"utf8"!==t)throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return null==this.textEncoder&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){"undefined"!=typeof window&&ut().getBool("USE_SETTIMEOUTCUSTOM")?(this.functionRefs.push(e),setTimeout((()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")}),t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",(e=>{e.source===window&&e.data.name===this.messageName&&(e.stopPropagation(),(0,this.functionRefs[e.data.index])(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0))}),!0))):setTimeout(e,t)}isTypedArray(e){return qa(e)}});try{Ao.registerManager(Co.URL_SCHEME,new class{constructor(){we(ut().getBool("IS_BROWSER"),(()=>"Current environment is not a web browser")),we("undefined"==typeof window||void 0!==window.localStorage,(()=>"Current browser does not appear to support localStorage")),this.LS=window.localStorage}async listModels(){let e={},t=xo+bo,n=bo+wo;for(let r=0;r<this.LS.length;++r){let a=this.LS.key(r);a.startsWith(t)&&a.endsWith(n)&&(e[_o(a)]=JSON.parse(this.LS.getItem(a)))}return e}async removeModel(e){let t=No(e=function(e){return e.startsWith(Co.URL_SCHEME)?e.slice(Co.URL_SCHEME.length):e}(e));if(null==this.LS.getItem(t.info))throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return To(t),n}})}catch(Ds){}try{Ao.registerManager(go.URL_SCHEME,new class{constructor(){this.indexedDB=fo()}async listModels(){return new Promise(((e,t)=>{let n=this.indexedDB.open(po,1);n.onupgradeneeded=()=>mo(n),n.onsuccess=()=>{let r=n.result,a=r.transaction(co,"readonly"),s=a.objectStore(co).getAll();s.onsuccess=()=>{let t={};for(let e of s.result)t[e.modelPath]=e.modelArtifactsInfo;e(t)},s.onerror=e=>(r.close(),t(s.error)),a.oncomplete=()=>r.close()},n.onerror=e=>t(n.error)}))}async removeModel(e){return e=function(e){return e.startsWith(go.URL_SCHEME)?e.slice(go.URL_SCHEME.length):e}(e),new Promise(((t,n)=>{let r=this.indexedDB.open(po,1);r.onupgradeneeded=()=>mo(r),r.onsuccess=()=>{let a,s=r.result,i=s.transaction(co,"readwrite"),o=i.objectStore(co),l=o.get(e);l.onsuccess=()=>
2{if(null==l.result)return s.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let r=o.delete(e),i=()=>{a=s.transaction(ho,"readwrite");let r=a.objectStore(ho).delete(e);r.onsuccess=()=>t(l.result.modelArtifactsInfo),r.onerror=e=>n(l.error)};r.onsuccess=i,r.onerror=e=>(i(),s.close(),n(l.error))}},l.onerror=e=>(s.close(),n(l.error)),i.oncomplete=()=>{null==a?s.close():a.oncomplete=()=>s.close()}},r.onerror=e=>n(r.error)}))}})}catch(Ds){}}var zo,Po=()=>U();function Bo(e,t="float32",n){return t=t||"float32",nt(e),new _s(e,t,n)}ut().get("IS_NODE")&&!ut().get("IS_BROWSER")&&ut().setPlatform("node",new class{constructor(){this.util=G(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return null!=ut().global.fetch?ut().global.fetch(e,t):(null==zo&&(zo=Po()),zo(e,t))}now(){let e=C.hrtime();return 1e3*e[0]+e[1]/1e6}encode(e,t){if("utf-8"!==t&&"utf8"!==t)throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return 0===e.length?"":new this.util.TextDecoder(t).decode(e)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}});var Wo=fi({cast_:function(e,t){let n=pi(e,"x","cast");if(!Pe(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if("string"===t&&"string"!==n.dtype||"string"!==t&&"string"===n.dtype)throw new Error("Only strings can be casted to strings");let r={x:n},a={dtype:t};return ei.runKernel(zt,r,a)}});var Vo=fi({clone_:function(e){let t={x:pi(e,"x","clone","string_or_numeric")};return ei.runKernel(An,t)}});function Uo(e,t=!1){console.log(e.toString(t))}Qs(),function(e){Es=e}({buffer:Bo,cast:Wo,clone:Vo,print:Uo});var Go=fi({add_:function(e,t){let n=pi(e,"a","add"),r=pi(t,"b","add");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(yt,a)}});var Ho=fi({floorDiv_:function(e,t){let n=pi(e,"a","floorDiv"),r=pi(t,"b","floorDiv");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(Nn,a)}});var jo=fi({div_:function(e,t){let n=pi(e,"a","div"),r=pi(t,"b","div");if([n,r]=Hs(n,r),"int32"===n.dtype&&"int32"===r.dtype)return Ho(n,r);let a={a:n,b:r};return ei.runKernel(hn,a,{})}});var qo=fi({mul_:function(e,t){let n=pi(e,"a","mul"),r=pi(t,"b","mul");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(pr,a)}});var Ko=fi({abs_:function(e){let t=pi(e,"x","abs");if("complex64"===t.dtype){let e={x:t};return ei.runKernel(Vt,e)}{let e={x:t};return ei.runKernel(ft,e)}}});var Xo=fi({acos_:function(e){let t={x:pi(e,"x","acos")};return ei.runKernel(mt,t)}});var Yo=fi({acosh_:function(e){let t={x:pi(e,"x","acosh")};return ei.runKernel(gt,t)}});var Zo=fi({addN_:function(e){we(Array.isArray(e),(()=>"The argument passed to tf.addN() must be a list of tensors")),we(e.length>=1,(()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`));let t=e.map(((e,t)=>pi(e,`tensors${t}`,"addN"))),n=t[0];t.forEach((e=>{if(e.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")})),t.forEach((e=>{if(!Te(e.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")}));let r=t;return ei.runKernel(bt,r)}});var Jo=fi({all_:function(e,t=null,n=!1){let r={x:pi(e,"x","all","bool")},a={axis:t,keepDims:n};return ei.runKernel(xt,r,a)}});var Qo=fi({any_:function(e,t=null,n=!1){let r={x:pi(e,"x","any","bool")},a={axis:t,keepDims:n};return ei.runKernel(wt,r,a)}});var el=fi({argMax_:function(e,t=0){let n={x:pi(e,"x","argMax")},r={axis:t};return ei.runKernel(vt,n,r)}});var tl=fi({argMin_:function(e,t=0){let n={x:pi(e,"x","argMin")},r={axis:t};return ei.runKernel(kt,n,r)}});var nl=fi({asin_:function(e){let t={x:pi(e,"x","asin")};return ei.runKernel(It,t)}});var rl=fi({asinh_:function(e){let t={x:pi(e,"x","asinh")};return ei.runKernel(St,t)}});var al=fi({atan_:function(e){let t={x:pi(e,"x","atan")};return ei.runKernel(Nt,t)}});var sl=fi({atan2_:function(e,t){let n=pi(e,"a","atan2"),r=pi(t,"b","atan2");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(_t,a)}});var il=fi({atanh_:function(e){let t={x:pi(e,"x","atanh")};return ei.runKernel(Tt,t)}});function ol(e,t,n,r,a="NHWC",s){return dl(e,[...t,e[3]],n,s,r,null,null,wl(a))}function ll(e,t,n,r,a,s,i="channelsLast"){let o,[l,u]=cl(t);if("channelsLast"===i)o=[l,u,e[3],e[3]];else{if("channelsFirst"!==i)throw new Error(`Unknown dataFormat ${i}`);o=[l,u,e[1],e[1]]}return dl(e,o,n,r,a,s,!1,i)}function ul(e,t,n,r,a,s,i="NDHWC"){let o,l,[u,d,p]=fl(t);if("NDHWC"===i)l="channelsLast",o=[u,d,p,e[4],e[4]];else{if("NCDHW"!==i)throw new Error(`Unknown dataFormat ${i}`);l="channelsFirst",o=[u,d,p,e[1],e[1]]}return pl(e,o,n,r,a,!1,l,s)}function dl(e,t,n,r,a,s,i=!1,o="channelsLast"){let[l,u,d,p]=[-1,-1,-1,-1];if("channelsLast"===o)[l,u,d,p]=e;else{if("channelsFirst"!==o)throw new Error(`Unknown dataFormat ${o}`);[l,p,u,d]=e}let h,[c,f,,m]=t,[g,y]=cl(n),[b,x]=cl(r),w=ml(c,b),v=ml(f,x),{padInfo:k,outHeight:I,outWidth:S}=function(e,t,n,r,a,s,i,o,l){let u,d,p;if("number"==typeof e){u={top:e,bottom:e,left:e,right:e,type:0===e?"VALID":"NUMBER"};let a=function(e,t,n,r,a){null==r&&(r=hl(e,t,n));let s=e[0],i=e[1],o=gl((s-t+2*r)/n+1,a),l=gl((i-t+2*r)/n+1,a);return[o,l]}([t,n],s,r,e,o);d=a[0],p=a[1]}else if("same"===e){d=Math.ceil(t/r),p=Math.ceil(n/a);let e=Math.max(0,(d-1)*r+s-t),o=Math.max(0,(p-1)*a+i-n),l=Math.floor(e/2),h=e-l,c=Math.floor(o/2);
2u={top:l,bottom:h,left:c,right:o-c,type:"SAME"}}else if("valid"===e)u={top:0,bottom:0,left:0,right:0,type:"VALID"},d=Math.ceil((t-s+1)/r),p=Math.ceil((n-i+1)/a);else{if("object"!=typeof e)throw Error(`Unknown padding parameter: ${e}`);{let h="channelsLast"===l?e[1][0]:e[2][0],c="channelsLast"===l?e[1][1]:e[2][1],f="channelsLast"===l?e[2][0]:e[3][0],m="channelsLast"===l?e[2][1]:e[3][1];u={top:h,bottom:c,left:f,right:m,type:0===h&&0===c&&0===f&&0===m?"VALID":"EXPLICIT"},d=gl((t-s+h+c)/r+1,o),p=gl((n-i+f+m)/a+1,o)}}return{padInfo:u,outHeight:d,outWidth:p}}(a,u,d,g,y,w,v,s,o),N=i?m*p:m;return"channelsFirst"===o?h=[l,N,I,S]:"channelsLast"===o&&(h=[l,I,S,N]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:d,inChannels:p,outHeight:I,outWidth:S,outChannels:N,padInfo:k,strideHeight:g,strideWidth:y,filterHeight:c,filterWidth:f,effectiveFilterHeight:w,effectiveFilterWidth:v,dilationHeight:b,dilationWidth:x,inShape:e,outShape:h,filterShape:t}}function pl(e,t,n,r,a,s=!1,i="channelsLast",o){let[l,u,d,p,h]=[-1,-1,-1,-1,-1];if("channelsLast"===i)[l,u,d,p,h]=e;else{if("channelsFirst"!==i)throw new Error(`Unknown dataFormat ${i}`);[l,h,u,d,p]=e}let c,[f,m,g,,y]=t,[b,x,w]=fl(n),[v,k,I]=fl(r),S=ml(f,v),N=ml(m,k),T=ml(g,I),{padInfo:_,outDepth:C,outHeight:E,outWidth:$}=function(e,t,n,r,a,s,i,o,l,u,d){let p,h,c,f;if("valid"===e&&(e=0),"number"==typeof e){p={top:e,bottom:e,left:e,right:e,front:e,back:e,type:0===e?"VALID":"NUMBER"};let m=function(e,t,n,r,a,s){null==a&&(a=hl(e,t[0],r[0]));let i=[0,0,0,n];for(let n=0;n<3;n++)e[n]+2*a>=t[n]&&(i[n]=gl((e[n]-t[n]+2*a)/r[n]+1,s));return i}([t,n,r,1],[o,l,u],1,[a,s,i],e,d);h=m[0],c=m[1],f=m[2]}else{if("same"!==e)throw Error(`Unknown padding parameter: ${e}`);{h=Math.ceil(t/a),c=Math.ceil(n/s),f=Math.ceil(r/i);let e=(h-1)*a+o-t,d=(c-1)*s+l-n,m=(f-1)*i+u-r,g=Math.floor(e/2),y=e-g,b=Math.floor(d/2),x=d-b,w=Math.floor(m/2);p={top:b,bottom:x,left:w,right:m-w,front:g,back:y,type:"SAME"}}}return{padInfo:p,outDepth:h,outHeight:c,outWidth:f}}(a,u,d,p,b,x,w,S,N,T,o),A=s?y*h:y;return"channelsFirst"===i?c=[l,A,C,E,$]:"channelsLast"===i&&(c=[l,C,E,$,A]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:d,inWidth:p,inChannels:h,outDepth:C,outHeight:E,outWidth:$,outChannels:A,padInfo:_,strideDepth:b,strideHeight:x,strideWidth:w,filterDepth:f,filterHeight:m,filterWidth:g,effectiveFilterDepth:S,effectiveFilterHeight:N,effectiveFilterWidth:T,dilationDepth:v,dilationHeight:k,dilationWidth:I,inShape:e,outShape:c,filterShape:t}}function hl(e,t,n,r=1){let a=ml(t,r);return Math.floor((e[0]*(n-1)-n+a)/2)}function cl(e){return"number"==typeof e?[e,e,e]:2===e.length?[e[0],e[1],1]:e}function fl(e){return"number"==typeof e?[e,e,e]:e}function ml(e,t){return t<=1?e:e+(e-1)*(t-1)}function gl(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function yl(e){let[t,n,r]=cl(e);return 1===t&&1===n&&1===r}function bl(e,t){return yl(e)||yl(t)}function xl(e){return cl(e).every((e=>e>0))}function wl(e){if("NHWC"===e)return"channelsLast";if("NCHW"===e)return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function vl(e,t,n){if(null!=n){if("string"==typeof t)throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);if("number"==typeof t)we(_e(t),(()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`));else{if("object"!=typeof t)throw Error(`Error in ${e}: Unknown padding parameter: ${t}`);t.forEach((t=>{t.forEach((t=>{we(_e(t),(()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`))}))}))}}}var kl=fi({reshape_:function(e,t){let n={x:pi(e,"x","reshape","string_or_numeric")},r={shape:t};return ei.runKernel(Rr,n,r)}});var Il=fi({avgPool_:function(e,t,n,r,a){let s=pi(e,"x","avgPool","float32");we(bl(n,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '1'`));let i=s,o=!1;3===s.rank&&(o=!0,i=kl(s,[1,s.shape[0],s.shape[1],s.shape[2]])),we(4===i.rank,(()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}
2.`)),vl("avgPool",r,a);let l={x:i},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},d=ei.runKernel(Ct,l,u);return d=Wo(d,s.dtype),o?kl(d,[d.shape[1],d.shape[2],d.shape[3]]):d}});var Sl=fi({avgPool3d_:function(e,t,n,r,a,s="NDHWC"){let i=pi(e,"x","avgPool3d","float32"),o=i,l=!1;4===i.rank&&(l=!0,o=kl(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),we(5===o.rank,(()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`)),we("NDHWC"===s,(()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`)),we("number"==typeof n&&n>0||Array.isArray(n)&&n[0]>0&&n[1]>0&&n[2]>0,(()=>`Error in avgPool3d: Stride must be > 0, but got '${n}'`)),vl("avgPool3d",r,a);let u={x:o},d={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},p=ei.runKernel($t,u,d);return p=Wo(p,o.dtype),l?kl(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}});var Nl=fi({concat_:function(e,t=0){we(e.length>=1,(()=>"Pass at least one tensor to concat"));let n=hi(e,"tensors","concat","string_or_numeric");if("complex64"===n[0].dtype&&n.forEac
2h((e=>{if("complex64"!==e.dtype)throw new Error(`Cannot concatenate complex64 tensors with a tensor\n          with dtype ${e.dtype}. `)})),1===n.length)return Vo(n[0]);let r=n,a={axis:t};return ei.runKernel(Ut,r,a)}});var Tl=fi({matMul_:function(e,t,n=!1,r=!1){let a=pi(e,"a","matMul"),s=pi(t,"b","matMul");[a,s]=Hs(a,s);let i={a,b:s},o={transposeA:n,transposeB:r};return ei.runKernel(Rt,i,o)}});var _l=fi({sigmoid_:function(e){let t={x:pi(e,"x","sigmoid","float32")};return ei.runKernel(Yr,t)}});var Cl=fi({slice_:function(e,t,n){let r=pi(e,"x","slice","string_or_numeric");if(0===r.rank)throw new Error("Slicing scalar is not possible");let a={x:r},s={begin:t,size:n};return ei.runKernel(jr,a,s)}});var El=fi({tanh_:function(e){let t={x:pi(e,"x","tanh","float32")};return ei.runKernel(ya,t)}});var $l=fi({basicLSTMCell_:function(e,t,n,r,a,s){let i=pi(e,"forgetBias","basicLSTMCell"),o=pi(t,"lstmKernel","basicLSTMCell"),l=pi(n,"lstmBias","basicLSTMCell"),u=pi(r,"data","basicLSTMCell"),d=pi(a,"c","basicLSTMCell"),p=pi(s,"h","basicLSTMCell"),h=Nl([u,p],1),c=Tl(h,o),f=Go(c,l),m=f.shape[0],g=f.shape[1]/4,y=[m,g],b=Cl(f,[0,0],y),x=Cl(f,[0,g],y),w=Cl(f,[0,2*g],y),v=Cl(f,[0,3*g],y),k=Go(qo(_l(b),El(x)),qo(d,_l(Go(i,w))));return[k,qo(El(k),_l(v))]}});var Al=fi({batchToSpaceND_:function(e,t,n){let r=pi(e,"x","batchToSpaceND"),a=t.reduce(((e,t)=>e*t));we(r.rank>=1+t.length,(()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`)),we(n.length===t.length,(()=>`crops.length is ${n.length} but should be equal to blockShape.length  ${t.length}`)),we(r.shape[0]%a==0,(()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${a}`));let s={x:r},i={blockShape:t,crops:n};return ei.runKernel(Ft,s,i)}});function Rl(e){let t;return t=0===e.rank||1===e.rank?kl(e,[1,1,1,e.size]):2===e.rank?kl(e,[1,1,e.shape[0],e.shape[1]]):3===e.rank?kl(e,[1,e.shape[0],e.shape[1],e.shape[2]]):e,t}var Fl=fi({batchNorm_:function(e,t,n,r,a,s){null==s&&(s=.001);let i,o,l=pi(e,"x","batchNorm"),u=pi(t,"mean","batchNorm"),d=pi(n,"variance","batchNorm");null!=a&&(i=pi(a,"scale","batchNorm")),null!=r&&(o=pi(r,"offset","batchNorm")),we(u.rank===d.rank,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),we(null==o||u.rank===o.rank,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),we(null==i||u.rank===i.rank,(()=>"Batch normalization gradient requires mean and scale to have equal ranks."));let p={x:Rl(l),scale:i,offset:o,mean:u,variance:d},h={varianceEpsilon:s},c=ei.runKernel(Tn,p,h);return kl(c,l.shape)}});var Dl=fi({batchNorm2d_:function(e,t,n,r,a,s){let i,o,l=pi(e,"x","batchNorm"),u=pi(t,"mean","batchNorm"),d=pi(n,"variance","batchNorm");return null!=a&&(i=pi(a,"scale","batchNorm")),null!=r&&(o=pi(r,"offset","batchNorm")),we(2===l.rank,(()=>`Error in batchNorm2D: x must be rank 2 but got rank ${l.rank}.`)),we(2===u.rank||1===u.rank,(()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${u.rank}.`)),we(2===d.rank||1===d.rank,(()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${d.rank}.`)),null!=i&&we(2===i.rank||1===i.rank,(()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${i.rank}.`)),null!=o&&we(2===o.rank||1===o.rank,(()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${o.rank}.`)),Fl(l,u,d,o,i,s)}});var Ml=fi({batchNorm3d_:function(e,t,n,r,a,s){let i,o,l=pi(e,"x","batchNorm"),u=pi(t,"mean","batchNorm"),d=pi(n,"variance","batchNorm");return null!=a&&(i=pi(a,"scale","batchNorm")),null!=r&&(o=pi(r,"offset","batchNorm")),we(3===l.rank,(()=>`Error in batchNorm3D: x must be rank 3 but got rank ${l.rank}.`)),we(3===u.rank||1===u.rank,(()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${u.rank}.`)),we(3===d.rank||1===d.rank,(()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${d.rank}.`)),null!=i&&we(3===i.rank||1===i.rank,(()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${i.rank}
2.`)),null!=o&&we(3===o.rank||1===o.rank,(()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${o.rank}.`)),Fl(l,u,d,o,i,s)}});var Ol=fi({batchNorm4d_:function(e,t,n,r,a,s){let i,o,l=pi(e,"x","batchNorm"),u=pi(t,"mean","batchNorm"),d=pi(n,"variance","batchNorm");return null!=a&&(i=pi(a,"scale","batchNorm")),null!=r&&(o=pi(r,"offset","batchNorm")),we(4===l.rank,(()=>`Error in batchNorm4D: x must be rank 4 but got rank ${l.rank}.`)),we(4===u.rank||1===u.rank,(()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${u.rank}.`)),we(4===d.rank||1===d.rank,(()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${d.rank}.`)),null!=i&&we(4===i.rank||1===i.rank,(()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${i.rank}.`)),null!=o&&we(4===o.rank||1===o.rank,(()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${o.rank}.`)),Fl(l,u,d,o,i,s)}});var Ll=fi({bincount_:function(e,t,n){let r=pi(e,"x","bincount"),a=pi(t,"weights","bincount");we("int32"===r.dtype,(()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`)),we(n>=0,(()=>`size must be non-negative, but got ${n}.`)),we(a.size===r.size||0===a.size,(()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${a.shape}.`));let s={x:r,weights:a},i={size:n};return ei.runKernel(Dt,s,i)}});var zl=fi({bitwiseAnd_:function(e,t){let n=pi(e,"x","bitwiseAnd"),r=pi(t,"y","bitwiseAnd");if(!Te(n.shape,r.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${n.shape}, y: ${r.shape}`);if("int32"!==n.dtype||"int32"!==r.dtype)throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${n.dtype} and type of y: ${r.dtype}`);let a={a:n,b:r};return ei.runKernel(Mt,a)}});var Pl=fi({broadcastArgs_:function(e,t){let n=pi(e,"s0","broadcastArgs","int32"),r=pi(t,"s1","broadcastArgs","int32");if(1!==n.rank)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${n.rank}`);if(1!==r.rank)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${r.rank}`);let a={s0:n,s1:r};return ei.runKernel(Lt,a)}});var Bl=fi({broadcastTo_:function(e,t){let n=pi(e,"broadcastTo","x"),r=n.shape;if(nt(t),t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let e=n.shape.slice();for(;e.length<t.length;)e.unshift(1);n=kl(n,e)}let a=n.shape,s=Array.from(t);for(let e=t.length-1;e>=0;e--)if(a[e]===t[e])s[e]=1;else if(1!==n.shape[e])throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(0===s.map(((e,t)=>e>1?t:-1)).filter((e=>e>=0)).length)return Vo(n);let i={x:n},o={reps:s};return ei.runKernel(ba,i,o)}});var Wl=fi({ceil_:function(e){let t={x:pi(e,"x","ceil","float32")};return ei.runKernel(Pt,t)}});function Vl(e,t,n){nt(e);let r={shape:e,value:t,dtype:n=n||je(t)};return ei.runKernel(kn,{},r)}var Ul=fi({clipByValue_:function(e,t,n){let r=pi(e,"x","clipByValue");if(we(t<=n,(()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`)),t===n)return Vl(r.shape,t,r.dtype);let a={x:r},s={clipValueMin:t,clipValueMax:n};return ei.runKernel(Bt,a,s)}});var Gl=fi({concat1d_:function(e){return Nl(e,0)}});var Hl=fi({concat2d_:function(e,t){return Nl(e,t)}});var jl=fi({concat3d_:function(e,t){return Nl(e,t)}});var ql=fi({concat4d_:function(e,t){return Nl(e,t)}});var Kl=fi({conv2d_:function(e,t,n,r,a="NHWC",s=[1,1],i){let o=pi(e,"x","conv2d","float32"),l=pi(t,"filter","conv2d","float32"),u=o,d=!1;3===o.rank&&(d=!0,u=kl(o,[1,o.shape[0],o.shape[1],o.shape[2]])),we(4===u.rank,(()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`)),we(4===l.rank,(()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`)),vl("conv2d",r,i);let p="NHWC"===a?u.shape[3]:u.shape[1];we(p===l.shape[2],(()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${l.shape[2]}.`)),we(bl(n,s),(()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),we(xl(s),(()=>"Error in conv2D: Dilated rates should be larger than 0.")),we(xl(n),(()=>"Error in conv2D: Strides should be larger than 0."));let h={x:u,filter:l},c={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i}
2,f=ei.runKernel(Gt,h,c);return d?kl(f,[f.shape[1],f.shape[2],f.shape[3]]):f}});var Xl=fi({conv1d_:function(e,t,n,r,a="NWC",s=1,i){let o=pi(e,"x","conv1d"),l=pi(t,"filter","conv1d"),u=o,d=!1;2===o.rank&&(d=!0,u=kl(o,[1,o.shape[0],o.shape[1]])),we(3===u.rank,(()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`)),we(3===l.rank,(()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`)),vl("conv1d",r,i),we(u.shape[2]===l.shape[1],(()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`)),we(bl(n,s),(()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`)),we(xl(s),(()=>"Error in conv1D: Dilated rates should be larger than 0.")),we(xl(n),(()=>"Error in conv1D: Stride should be larger than 0.")),we("NWC"===a,(()=>`Error in conv1d: got dataFormat of ${a} but only NWC is currently supported.`));let p=kl(l,[1,l.shape[0],l.shape[1],l.shape[2]]),h=kl(u,[u.shape[0],1,u.shape[1],u.shape[2]]),c=Kl(h,p,[1,n],r,"NHWC",[1,s],i);return kl(c,d?[c.shape[2],c.shape[3]]:[c.shape[0],c.shape[2],c.shape[3]])}});var Yl=fi({conv2DBackpropInput_:function(e,t,n,r,a,s="NHWC",i){we(e.length===t.rank,(()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`));let o=e,l=t,u=!1;3===t.rank&&(u=!0,l=kl(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),we(4===o.length,(()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`)),we(4===l.rank,(()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`)),we(4===n.rank,(()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`));let d="NHWC"===s?o[3]:o[1],p="NHWC"===s?l.shape[3]:l.shape[1];we(d===n.shape[2],(()=>`Error in conv2dDerInput: depth of input (${d}) must match input depth for filter ${n.shape[2]}.`)),we(p===n.shape[3],(()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${n.shape[3]}.`)),vl("conv2dDerInput",a,i);let h={dy:l,filter:n},c={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,inputShape:o},f=ei.runKernel(jt,h,c);return u?kl(f,[f.shape[1],f.shape[2],f.shape[3]]):f}});var Zl=fi({conv2dTranspose_:function(e,t,n,r,a,s){let i=pi(e,"x","conv2dTranspose"),o=pi(t,"filter","conv2dTranspose");return Yl(n,i,o,r,a,"NHWC",s)}});var Jl=fi({conv3d_:function(e,t,n,r,a="NDHWC",s=[1,1,1]){let i=pi(e,"x","conv3d"),o=pi(t,"filter","conv3d"),l=i,u=!1;4===i.rank&&(u=!0,l=kl(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),we(5===l.rank,(()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`)),we(5===o.rank,(()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`)),we(l.shape[4]===o.shape[3],(()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`)),we(bl(n,s),(()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),we("NDHWC"===a,(()=>`Error in conv3d: got dataFormat of ${a} but only NDHWC is currently supported.`)),we(xl(s),(()=>"Error in conv3D: Dilated rates should be larger than 0.")),we(xl(n),(()=>"Error in conv3D: Strides should be larger than 0."));let d={x:l,filter:o},p={strides:n,pad:r,dataFormat:a,dilations:s},h=ei.runKernel(qt,d,p);return u?kl(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}});var Ql=fi({conv3DBackpropInput_:function(e,t,n,r,a){we(e.length===t.rank,(()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`));let s=e,i=t,o=!1;4===t.rank&&(o=!0,i=kl(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];we(5===s.length,(()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`)),we(5===i.rank,(()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`)),we(5===n.rank,(()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`)),we(l===n.shape[3],(()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`)),we(u===n.shape[4],(()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`));let d={dy:i,filter:n}
2,p={pad:a,strides:r,inputShape:s},h=ei.runKernel(Xt,d,p);return o?kl(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}});var eu=fi({conv3dTranspose_:function(e,t,n,r,a){let s=pi(e,"x","conv3dTranspose"),i=pi(t,"filter","conv3dTranspose");return Ql(n,s,i,r,a)}});var tu=fi({cos_:function(e){let t={x:pi(e,"x","cos","float32")};return ei.runKernel(Yt,t)}});var nu=fi({cosh_:function(e){let t={x:pi(e,"x","cosh","float32")};return ei.runKernel(Zt,t)}});var ru=fi({cumprod_:function(e,t=0,n=!1,r=!1){let a={x:pi(e,"x","cumprod")},s={axis:t,exclusive:n,reverse:r};return ei.runKernel(Jt,a,s)}});var au=fi({cumsum_:function(e,t=0,n=!1,r=!1){let a={x:pi(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:r};return ei.runKernel(Qt,a,s)}});var su=fi({denseBincount_:function(e,t,n,r=!1){let a=pi(e,"x","denseBincount"),s=pi(t,"weights","denseBincount");we("int32"===a.dtype,(()=>`Error in denseBincount: input dtype must be int32, but got ${a.dtype}`)),we(a.rank<=2,(()=>`Error in denseBincount: input must be at most rank 2, but got rank ${a.rank}.`)),we(n>=0,(()=>`size must be non-negative, but got ${n}.`)),we(s.size===a.size||0===s.size,(()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${a.shape}, weights shape: ${s.shape}.`));let i={x:a,weights:s},o={size:n,binaryOutput:r};return ei.runKernel(tn,i,o)}});var iu=fi({depthToSpace_:function(e,t,n="NHWC"){let r=pi(e,"x","depthToSpace","float32"),a="NHWC"===n?r.shape[1]:r.shape[2],s="NHWC"===n?r.shape[2]:r.shape[3],i="NHWC"===n?r.shape[3]:r.shape[1];we(t>1,(()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`)),we(a*t>=0,(()=>`Negative dimension size caused by overflow when multiplying\n    ${a} and ${t}  for depthToSpace with input shape\n    ${r.shape}`)),we(s*t>=0,(()=>`Negative dimension size caused by overflow when multiplying\n    ${s} and ${t} for depthToSpace with input shape\n        ${r.shape}`)),we(i%(t*t)==0,(()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${r.shape}`));let o={x:r},l={blockSize:t,dataFormat:n};return ei.runKernel(nn,o,l)}});var ou=fi({depthwiseConv2d_:function(e,t,n,r,a="NHWC",s=[1,1],i){let o=pi(e,"x","depthwiseConv2d","float32"),l=pi(t,"filter","depthwiseConv2d","float32"),u=o,d=!1;3===o.rank&&(d=!0,u=kl(o,[1,o.shape[0],o.shape[1],o.shape[2]])),we(4===u.rank,(()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`)),we(4===l.rank,(()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`));let p="NHWC"===a?u.shape[3]:u.shape[1];we(p===l.shape[2],(()=>`Error in depthwiseConv2d: number of input channels (${p}) must match the inChannels dimension in filter ${l.shape[2]}.`)),vl("depthwiseConv2d",r,i);let h={x:u,filter:l},c={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i},f=ei.runKernel(rn,h,c);return d?kl(f,[f.shape[1],f.shape[2],f.shape[3]]):f}});var lu=fi({diag_:function(e){let t={x:pi(e,"x","diag")};return ei.runKernel(on,t)}});var uu=fi({dilation2d_:function(e,t,n,r,a=[1,1],s="NHWC"){let i=pi(e,"x","dilation2d"),o=pi(t,"filter","dilation2d");we(3===i.rank||4===i.rank,(()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`)),we(3===o.rank,(()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`)),we("NHWC"===s,(()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`));let l=i,u=!1;3===i.rank&&(l=kl(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),we(l.shape[3]===o.shape[2],(()=>`Error in dilation2d:  input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`));let d={x:l,filter:o},p={strides:n,pad:r,dilations:a},h=ei.runKernel(ln,d,p);return u?kl(h,[h.shape[1],h.shape[2],h.shape[3]]):h}}),du={};function pu(e,t){let n=e.length,r=[];for(let a=0;a<n;a++){let s=n-1-a,i=e[s]||1;(t[t.length-1-a]||1)>1&&1===i&&r.unshift(s)}return r}function hu(e,t){let n=[];for(let r=0;r<t.length;r++){let a=e[e.length-r-1],s=t.length-r-1,i=t[s];(null==a||1===a&&i>1)&&n.unshift(s)}return n}function cu(e,t){let n=Math.max(e.length,t.length),r=new Array(n);for(let a=0;a<n;a++){let s=e[e.length-a-1];null==s&&(s=1);let i=t[t.length-a-1];if(null==i&&(i=1),1===s)r[n-a-1]=i;else if(1===i)r[n-a-1]=s;else{if(s!==i){throw Error(`Operands could not be broadcast together with shapes ${e} and ${t}.`)}r[n-a-1]=s}}return r}B(du,{assertAndGetBroadcastShape:()=>cu,getBroadcastDims:()=>pu,getReductionAxes:()=>hu});var fu=fi({equal_:function(e,t){let n=pi(e,"a","equal","string_or_numeric"),r=pi(t,"b","equal","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(yn,a)}});var mu=fi({where_:function(e,t,n){let r=pi(t,"a","where"),a=pi(n,"b","where"),s=pi(e,"condition","where","bool"),i=cu(cu(s.shape,r.shape),a.shape),o={condition:Bl(s,i),t:Bl(r,i),e:Bl(a,i)};return ei.runKernel(Gr,o)}});var gu=fi({zerosLike_:function(e){let t={x:pi(e,"x","zerosLike")};return ei.runKernel(Ta,t)}});var yu=fi({divNoNan_:function(e,t){let n=pi(e,"a","div"),r=pi(t,"b","div");[n,r]=Hs(n,r);let a=jo(n,r),s=gu(a),i=fu(r,s);return mu(i,s,a)}});var bu=fi({dot_:function(e,t){let n=pi(e,"t1","dot"),r=pi(t,"t2","dot");we(!(1!==n.rank&&2!==n.rank||1!==r.rank&&2!==r.rank),(()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank}
2 and ${r.rank}.`));let a=1===n.rank?n.size:n.shape[1],s=1===r.rank?r.size:r.shape[0];if(we(a===s,(()=>`Error in dot: inner dimensions of inputs must match, but got ${a} and ${s}.`)),1===n.rank&&1===r.rank){let e=kl(n,[1,-1]),t=kl(r,[-1,1]),a=Tl(e,t);return kl(a,[])}if(1===n.rank&&2===r.rank){let e=kl(n,[1,-1]),t=kl(r,[r.shape[0],r.shape[1]]),a=Tl(e,t);return kl(a,[a.size])}if(2===n.rank&&1===r.rank){let e=kl(r,[-1,1]),t=Tl(n,e);return kl(t,[t.size])}{let e=kl(r,[r.shape[0],r.shape[1]]);return Tl(n,e)}}});var xu=fi({einsum_:function(e,...t){let n=t.map(((e,t)=>pi(e,`tensors${t}`,"einsum"))),r={equation:e};return ei.runKernel(cn,n,r)}});var wu=fi({elu_:function(e){let t={x:pi(e,"x","elu","float32")};return ei.runKernel(fn,t)}});var vu=fi({ensureShape_:function(e,t){let n=pi(e,"x","ensureShape","string_or_numeric");if(!Ne(n.shape,t))throw new Error(`EnsureShape: Shape of tensor ${n.shape} is not compatible with expected shape ${t}`);return e}});var ku=fi({erf_:function(e){let t=pi(e,"x","erf");we("int32"===t.dtype||"float32"===t.dtype,(()=>"Input dtype must be `int32` or `float32`.")),"int32"===t.dtype&&(t=Wo(t,"float32"));let n={x:t};return ei.runKernel(gn,n)}});function Iu(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function Su(e,t,n){let r=e.length+t.length,a=[],s=0,i=0;for(let o=0;o<r;o++)-1===n.indexOf(o)?a.push(e[s++]):a.push(t[i++]);return a}function Nu(e,t){let n=[],r=e.length;for(let a=0;a<r;a++)-1===t.indexOf(a)&&n.push(e[a]);return[n,t.map((t=>e[t]))]}function Tu(e,t){return Su(e,t.map((e=>1)),t)}function _u(e,t,n){we(Iu(t,n),(()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`))}function Cu(e,t){if(Iu(e,t))return null;let n=[];for(let r=0;r<t;++r)-1===e.indexOf(r)&&n.push(r);return e.forEach((e=>n.push(e))),n}function Eu(e){return e.map(((e,t)=>[t,e])).sort(((e,t)=>e[1]-t[1])).map((e=>e[0]))}function $u(e,t){let n=[];for(let r=t-e;r<t;++r)n.push(r);return n}var Au=fi({max_:function(e,t=null,n=!1){let r={x:pi(e,"x","max")},a={reductionIndices:t,keepDims:n};return ei.runKernel(Jn,r,a)}});var Ru=fi({min_:function(e,t=null,n=!1){let r={x:pi(e,"x","min")},a={axis:t,keepDims:n};return ei.runKernel(ir,r,a)}});var Fu=fi({pow_:function(e,t){let n=pi(e,"base","pow"),r=pi(t,"exp","pow");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(kr,a)}});function Du(e,t){if((fs(e)&&"string"!==t||Array.isArray(e))&&"complex64"!==t)throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if("string"===t&&fs(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return gi(e,[],[],t)}var Mu=fi({sqrt_:function(e){let t={x:pi(e,"x","sqrt","float32")};return ei.runKernel(Jr,t)}});var Ou=fi({square_:function(e){let t=pi(e,"x","square");return ei.runKernel("Square",{x:t},{})}});var Lu=fi({sum_:function(e,t=null,n=!1){let r=pi(e,"x","sum");"bool"===r.dtype&&(r=Wo(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return ei.runKernel(Qr,a,s)}});function zu(e,t,n=null){if(0===e.rank)return Ko(e);if(1!==e.rank&&null===n)return zu(kl(e,[-1]),t,n);if(1===e.rank||"number"==typeof n||Array.isArray(n)&&1===n.length){if(1===t)return Lu(Ko(e),n);if(t===1/0)return Au(Ko(e),n);if(t===-1/0)return Ru(Ko(e),n);if("euclidean"===t||2===t)return Mu(Lu(Fu(Ko(e),Du(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&2===n.length){if(1===t)return Au(Lu(Ko(e),n[0]),n[1]-1);if(t===1/0)return Au(Lu(Ko(e),n[1]),n[0]);if(t===-1/0)return Ru(Lu(Ko(e),n[1]),n[0]);if("fro"===t||"euclidean"===t)return Mu(Lu(Ou(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var Pu=fi({norm_:function(e,t="euclidean",n=null,r=!1){let a=zu(e=pi(e,"x","norm"),t,n),s=a.shape;if(r){let t=De(n,e.shape);s=Tu(a.shape,t)}return kl(a,s)}});var Bu=fi({euclideanNorm_:function(e,t=null,n=!1){return Pu(e,"euclidean",t,n)}});var Wu=fi({exp_:function(e){let t={x:pi(e,"x","exp")};return ei.runKernel(bn,t)}});var Vu=fi({expandDims_:function(e,t=0){let n=pi(e,"x","expandDims","string_or_numeric");we(t<=n.rank,(()=>"Axis must be <= rank of the tensor"));let r={input:n},a={dim:t};return ei.runKernel(xn,r,a)}});var Uu=fi({expm1_:function(e){let t={x:pi(e,"x","expm1")};return ei.runKernel(wn,t)}});var Gu=fi({tile_:function(e,t){let n=pi(e,"x","tile","string_or_numeric");we(n.rank===t.length,(()=>`Error in transpose: rank of input ${n.rank}
2 must match length of reps ${t}.`));let r={x:n},a={reps:t};return ei.runKernel(ba,r,a)}});var Hu=fi({eye_:function(e,t,n,r="float32"){null==t&&(t=e);let a=Bo([e,t],r),s=e<=t?e:t;for(let e=0;e<s;++e)a.set(1,e,e);let i=kl(a.toTensor(),[e,t]);if(null==n)return i;if(1===n.length)return Gu(Vu(i,0),[n[0],1,1]);if(2===n.length)return Gu(Vu(Vu(i,0),0),[n[0],n[1],1,1]);if(3===n.length)return Gu(Vu(Vu(Vu(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}});var ju=fi({floor_:function(e){let t={x:pi(e,"x","floor","float32")};return ei.runKernel(Sn,t)}});var qu=fi({gather_:function(e,t,n=0,r=0){let a={x:pi(e,"x","gather"),indices:pi(t,"indices","gather","int32")},s={axis:n,batchDims:r};return ei.runKernel(_n,a,s)}});var Ku=fi({greater_:function(e,t){let n=pi(e,"a","greater","string_or_numeric"),r=pi(t,"b","greater","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(En,a)}});var Xu=fi({greaterEqual_:function(e,t){let n=pi(e,"a","greaterEqual","string_or_numeric"),r=pi(t,"b","greaterEqual","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel($n,a)}});var Yu=fi({imag_:function(e){let t={input:pi(e,"input","imag")};return ei.runKernel(Fn,t)}});var Zu=fi({isFinite_:function(e){let t={x:pi(e,"x","isFinite")};return ei.runKernel(Dn,t)}});var Ju=fi({isInf_:function(e){let t={x:pi(e,"x","isInf")};return ei.runKernel(Mn,t)}});var Qu=fi({isNaN_:function(e){let t={x:pi(e,"x","isNaN")};return ei.runKernel(On,t)}});var ed=fi({leakyRelu_:function(e,t=.2){let n={x:pi(e,"x","leakyRelu")},r={alpha:t};return ei.runKernel(Ln,n,r)}});var td=fi({less_:function(e,t){let n=pi(e,"a","less","string_or_numeric"),r=pi(t,"b","less","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(zn,a)}});var nd=fi({lessEqual_:function(e,t){let n=pi(e,"a","lessEqual","string_or_numeric"),r=pi(t,"b","lessEqual","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(Pn,a)}});function rd(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let r={start:e,stop:t,num:n};return ei.runKernel(Bn,{},r)}var ad=fi({localResponseNormalization_:function(e,t=5,n=1,r=1,a=.5){let s=pi(e,"x","localResponseNormalization");we(4===s.rank||3===s.rank,(()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got\n               rank ${s.rank}.`)),we(_e(t),(()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`));let i=s,o=!1;3===s.rank&&(o=!0,i=kl(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:n,alpha:r,beta:a},d=ei.runKernel(Xn,l,u);return o?kl(d,[d.shape[1],d.shape[2],d.shape[3]]):d}});var sd=fi({log_:function(e){let t={x:pi(e,"x","log","float32")};return ei.runKernel(Wn,t)}});var id=fi({log1p_:function(e){let t={x:pi(e,"x","log1p")};return ei.runKernel(Vn,t)}});function od(e){return we(qe(e),(()=>"The f passed in grad(f) must be a function")),(t,n)=>{let r=pi(t,"x","tf.grad","string_or_numeric"),a=null!=n?pi(n,"dy","tf.grad"):null;return ei.tidy((()=>{let{value:t,grads:n}=ei.gradients((()=>e(r)),[r],a);return null!=a&&ve(t.shape,a.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),cd(n),n[0]}))}}function ld(e){return we(qe(e),(()=>"The f passed in grads(f) must be a function")),(t,n)=>{we(Array.isArray(t),(()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s"));let r=hi(t,"args","tf.grads","string_or_numeric"),a=null!=n?pi(n,"dy","tf.grads"):null;return ei.tidy((()=>{let{value:t,grads:n}=ei.gradients((()=>e(...r)),r,a);return null!=a&&ve(t.shape,a.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),cd(n),n}))}}function ud(e){return we(qe(e),(()=>"The f passed in valueAndGrad(f) must be a function")),(t,n)=>{we(t instanceof $s,(()=>"The x passed in valueAndGrad(f)(x) must be a tensor")),we(null==n||n instanceof $s,(()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor"));let{grads:r,value:a}=ei.gradients((()=>e(t)),[t],n);return cd(r),{grad:r[0],value:a}}}function dd(e){return we(qe(e),(()=>"The f passed in valueAndGrads(f) must be a function")),(t,n)=>{we(Array.isArray(t)&&t.every((e=>e instanceof $s)),(()=>"The args passed in valueAndGrads(f)(args) must be array of tensors")),we(null==n||n instanceof $s,(()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor"));let r=ei.gradients((()=>e(...t)),t,n);return null!=n&&ve(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),cd(r.grads),r}}function pd(e,t){we(qe(e),(()=>"The f passed in variableGrads(f) must be a function")),we(null==t||Array.isArray(t)&&t.every((e=>e instanceof Rs)),(()=>"The varList passed in variableGrads(f, varList) must be an array of variables"));let n=null!=t;if(!n){t=[];for(let e in ei.registeredVariables)t.push(ei.registeredVariables[e])}let r=n?t.filter((e=>!e.trainable)):null,a=t.length;we((t=t.filter((e=>e.trainable))).length>0,(()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${a} variables is trainable.`));let{value:s,grads:i}=ei.gradients(e,t,null,!0);we(i.some((e=>null!=e)),(()=>"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().")),we(0===s.rank,(()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${s.rank} tensor`));let o={};return t.forEach(((e,t)=>{null!=i[t]&&(o[e.name]=i[t])})),null!=r&&r.forEach((e=>o[e.name]=null)),{value:s,grads:o}}function hd(e){return ei.customGrad(e)}function cd(e){if(e.filter((e=>null==e)).length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that\n    the f you passed encloses all operations that lead from x to y.")}var fd=fi({neg_:function(e){let t={x:pi(e,"x","neg")};return ei.runKernel(hr,t)}});var md=fi({softplus_:function(e){let t={x:pi(e,"x","softplus")};return ei.runKernel(Zr,t)}});var gd=fi({logSigmoid_:function(e){let t=pi(e,"x","logSigmoid");return hd((e=>({value:fd(md(fd(e))),gradFunc:t=>qo(t,_l(fd(e)))})))(t)}});var yd=fi({sub_:function(e,t){let n=pi(e,"a","sub"),r=pi(t,"b","sub");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(ma,a)}});var bd=fi({logSoftmax_:function(e,t=-1){let n=pi(e,"logits","logSoftmax");if(-1===t&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank}
2 and axis was ${t}`);return hd(((e,n)=>{let r=Au(e,t,!0),a=yd(e,r),s=yd(Wo(a,"float32"),sd(Lu(Wu(a),t,!0)));return n([s]),{value:s,gradFunc:(e,n)=>{let[r]=n,a=Wu(r);return yd(e,qo(Lu(e,t,!0),a))}}}))(n)}});var xd=fi({logSumExp_:function(e,t=null,n=!1){let r=pi(e,"x","logSumExp"),a=De(t,r.shape),s=Au(r,a,!0),i=yd(r,s),o=Wu(i),l=Lu(o,a),u=sd(l),d=Go(kl(s,u.shape),u);if(n){let e=Tu(d.shape,a);return kl(d,e)}return d}});var wd=fi({logicalAnd_:function(e,t){let n=pi(e,"a","logicalAnd","bool"),r=pi(t,"b","logicalAnd","bool");cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(Un,a)}});var vd=fi({logicalNot_:function(e){let t={x:pi(e,"x","logicalNot","bool")};return ei.runKernel(Gn,t)}});var kd=fi({logicalOr_:function(e,t){let n=pi(e,"a","logicalOr","bool"),r=pi(t,"b","logicalOr","bool");cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(Hn,a)}});var Id=fi({logicalXor_:function(e,t){let n=pi(e,"a","logicalXor","bool"),r=pi(t,"b","logicalXor","bool");return cu(n.shape,r.shape),wd(kd(e,t),vd(wd(e,t)))}}),Sd=2147483648;var Nd=fi({searchSorted_:function(e,t,n="left"){let r=pi(e,"sortedSequence","searchSorted"),a=pi(t,"values","searchSorted"),s=r.shape[r.shape.length-1],i=a.shape[a.shape.length-1],o=kl(r,[-1,s]),l=kl(a,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(Ie(l.shape)>=Sd)throw new Error(`values tensor size must less than ${Sd}`);if(o.shape[1]>=Sd)throw new Error(`trailing dim_size must less than ${Sd} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},d={side:n};return ei.runKernel(Ur,u,d)}});function Td(e,t){return Nd(e,t,"left")}var _d=fi({maxPool_:function(e,t,n,r,a){let s=pi(e,"x","maxPool"),i=s,o=!1;3===s.rank&&(o=!0,i=kl(s,[1,s.shape[0],s.shape[1],s.shape[2]])),we(4===i.rank,(()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`)),we(bl(n,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '1'`)),vl("maxPool",r,a);let l={x:i},u={filterSize:t,strides:n,pad:r,dimRoundingMode:a},d=ei.runKernel(er,l,u);return o?kl(d,[d.shape[1],d.shape[2],d.shape[3]]):d}});var Cd=fi({maxPool3d_:function(e,t=[1,1,1],n,r,a,s="NDHWC"){let i=pi(e,"x","maxPool3d"),o=i,l=!1;4===i.rank&&(l=!0,o=kl(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),we(5===o.rank,(()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`)),we("NDHWC"===s,(()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`)),vl("maxPool3d",r,a);let u={x:o},d={filterSize:t,strides:n,pad:r,dimRoundingMode:a,dataFormat:s},p=ei.runKernel(nr,u,d);return l?kl(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}});var Ed=fi({maxPoolWithArgmax_:function(e,t,n,r,a=!1){let s={x:pi(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:a},o=ei.runKernel(ar,s,i);return{result:o[0],indexes:o[1]}}});var $d=fi({maximum_:function(e,t){let n=pi(e,"a","maximum"),r=pi(t,"b","maximum");[n,r]=Hs(n,r),"bool"===n.dtype&&(n=Wo(n,"int32"),r=Wo(r,"int32")),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(Qn,a)}});var Ad=fi({mean_:function(e,t=null,n=!1){let r={x:pi(e,"x","mean")},a={axis:t,keepDims:n};return ei.runKernel(sr,r,a)}});function Rd(e,t="float32"){if(nt(e),"complex64"===t){let t=Rd(e,"float32"),n=Rd(e,"float32");return mi(t,n)}let n=et(Ie(e),t);return ei.makeTensor(n,e,t)}function Fd(e,t="float32"){if(nt(e),"complex64"===t){let t=Fd(e,"float32"),n=Rd(e,"float32");return mi(t,n)}let n=Qe(Ie(e),t);return ei.makeTensor(n,e,t)}function Dd(e,t,{indexing:n="xy"}={}){if("xy"!==n&&"ij"!==n)throw new TypeError(`${n} is not a valid third argument to meshgrid`);if(void 0===e)return[];let r=pi(e,"x","meshgrid",e instanceof $s?e.dtype:"float32");if(void 0===t)return[r];let a=pi(t,"y","meshgrid",t instanceof $s?t.dtype:"float32"),s=Ie(r.shape),i=Ie(a.shape);return"xy"===n?(r=kl(r,[1,-1]),a=kl(a,[-1,1]),[Tl(Fd([i,1],r.dtype),r),Tl(a,Fd([1,s],a.dtype))]):(r=kl(r,[-1,1]),a=kl(a,[1,-1]),[Tl(r,Fd([1,i],r.dtype)),Tl(Fd([s,1],a.dtype),a)])}var Md=fi({minimum_:function(e,t){let n=pi(e,"a","minimum"),r=pi(t,"b","minimum");[n,r]=Hs(n,r),"bool"===n.dtype&&(n=Wo(n,"int32"),r=Wo(r,"int32")),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(or,a)}});var Od=fi({mirrorPad_:function(e,t,n){we("reflect"===n||"symmetric"===n,(()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`));let r=pi(e,"x","mirrorPad");if(0===r.rank)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");we(t.length===r.rank,(()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`));let a="reflect"===n?1:0;for(let e=0;e<r.rank;e++)we(2===t[e].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),we(t[e][0]>=0&&t[e][0]<=r.shape[e]-a&&t[e][1]>=0&&t[e][1]<=r.shape[e]-a,(()=>`Padding in dimension ${e} cannot be greater than or equal to ${r.shape[e]-a} or less than 0 for input of shape ${r.shape}`));let s={paddings:t,mode:n},i={x:r};return ei.runKernel(lr,i,s)}});var Ld=fi({mod_:function(e,t){let n=pi(e,"a","mod"),r=pi(t,"b","mod");[n,r]=Hs(n,r);let a={a:n,b:r};return ei.runKernel(ur,a)}});var zd=fi({moments_:function(e,t=null,n=!1){let r=De(t,(e=pi(e,"x","moments")).shape),a=Ad(e,r,n),s=a.shape;n||(s=Tu(a.shape,r));let i=Ou(yd(Wo(e,"float32"),kl(a,s)));return{mean:a,variance:Ad(i,r,n)}}});var Pd=fi({multiRNNCell_:function(e,t,n,r){let a=pi(t,"data","multiRNNCell"),s=hi(n,"c","multiRNNCell"),i=hi(r,"h","multiRNNCell"),o=a,l=[];for(let t=0;t<e.length;t++){let n=e[t](o,s[t],i[t]);l.push(n[0]),l.push(n[1]),o=n[1]}let u=[],d=[];for(let e=0;e<l.length;e+=2)u.push(l[e]),d.push(l[e+1]);return[u,d]}});var Bd=fi({multinomial_:function(e,t,n,r=!1){let a=pi(e,"logits","multinomial"),s=a.size,i=a.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:1===i?kl(a,[1,-1]):a},l={numSamples:t,seed:n,normalized:r},u=ei.runKernel(dr,o,l);return 1===i?kl(u,[u.size]):u}});
2var Wd=fi({notEqual_:function(e,t){let n=pi(e,"a","notEqual","string_or_numeric"),r=pi(t,"b","notEqual","string_or_numeric");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(cr,a)}});var Vd=fi({oneHot_:function(e,t,n=1,r=0,a="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:pi(e,"indices","oneHot","int32")},i={dtype:a,depth:t,onValue:n,offValue:r};return ei.runKernel(br,s,i)}});var Ud=fi({onesLike_:function(e){let t={x:pi(e,"x","onesLike")};return ei.runKernel(yr,t)}});var Gd=fi({outerProduct_:function(e,t){let n=pi(e,"v1","outerProduct"),r=pi(t,"v2","outerProduct");we(1===n.rank&&1===r.rank,(()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`));let a=kl(n,[-1,1]),s=kl(r,[1,-1]);return Tl(a,s)}});var Hd=fi({pad_:function(e,t,n=0){let r=pi(e,"x","pad");if(0===r.rank)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let a={paddings:t,constantValue:n},s={x:r};return ei.runKernel(wr,s,a)}});var jd=fi({pad1d_:function(e,t,n=0){return we(2===t.length,(()=>"Invalid number of paddings. Must be length of 2.")),Hd(e,[t],n)}});var qd=fi({pad2d_:function(e,t,n=0){return we(2===t.length&&2===t[0].length&&2===t[1].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),Hd(e,t,n)}});var Kd=fi({pad3d_:function(e,t,n=0){return we(3===t.length&&2===t[0].length&&2===t[1].length&&2===t[2].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),Hd(e,t,n)}});var Xd=fi({pad4d_:function(e,t,n=0){return we(4===t.length&&2===t[0].length&&2===t[1].length&&2===t[2].length&&2===t[3].length,(()=>"Invalid number of paddings. Must be length of 2 each.")),Hd(e,t,n)}});var Yd=fi({spaceToBatchND_:function(e,t,n){let r=pi(e,"x","spaceToBatchND");we(r.rank>=1+t.length,(()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`)),we(n.length===t.length,(()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`)),we(r.shape.reduce(((e,r,a)=>a>0&&a<=t.length?e&&(r+n[a-1][0]+n[a-1][1])%t[a-1]==0:e),!0),(()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`));let a={x:r},s={blockShape:t,paddings:n};return ei.runKernel(ea,a,s)}});var Zd=fi({pool_:function(e,t,n,r,a,s,i){null==a&&(a=[1,1]),null==s&&(s=1),0===r&&(r="valid");let o=pi(e,"x","maxPool"),l=o,u=!1;3===o.rank&&(u=!0,l=kl(o,[1,o.shape[0],o.shape[1],o.shape[2]])),we(bl(s,a),(()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${a}'`));let d,p=ll(l.shape,t,s,a,r),h=[p.dilationHeight,p.dilationWidth];d="same"===r?function(e,t){let n=e.map(((e,n)=>e+(e-1)*(t[n]-1))).map((e=>e-1)),r=n.map((e=>Math.floor(e/2))),a=n.map(((e,t)=>e-r[t]));return n.map(((e,t)=>[r[t],a[t]]))}([p.filterHeight,p.filterWidth],h):[[0,0],[0,0]];let c=1===h[0]&&1===h[1],[f,m]=function(e,t,n){let r=n.map((e=>e[0])),a=n.map((e=>e[1])),s=e.concat(r,a),i=t.map(((e,t)=>(e-s[t]%e)%e)),o=a.map(((e,t)=>e+i[t])),l=t.map(((e,t)=>[r[t],o[t]])),u=t.map(((e,t)=>[0,i[t]]));return[l,u]}([p.inHeight,p.inWidth],h,d),g=c?r:"valid",y=c?l:Yd(l,h,f),b=("avg"===n?()=>Il(y,t,s,g,i):()=>_d(y,t,s,g,i))(),x=c?b:Al(b,h,m);return u?kl(x,[x.shape[1],x.shape[2],x.shape[3]]):x}});var Jd=fi({prelu_:function(e,t){let n={x:pi(e,"x","prelu"),alpha:pi(t,"alpha","prelu")};return ei.runKernel(Ir,n)}});var Qd=fi({prod_:function(e,t=null,n=!1){let r=pi(e,"x","prod");"bool"===r.dtype&&(r=Wo(r,"int32"));let a={x:r},s={axis:t,keepDims:n};return ei.runKernel(Sr,a,s)}});var ep=fi({raggedGather_:function(e,t,n,r){let a={paramsNestedSplits:e.map(((e,t)=>pi(e,`tensors${t}`,"raggedGather","int32"))),paramsDenseValues:pi(t,"paramsDenseValues","raggedGather"),indices:pi(n,"indices","raggedGather","int32")},s={outputRaggedRank:r},i=ei.runKernel(Nr,a,s);return{outputNestedSplits:i.slice(0,i.length-1),outputDenseValues:i[i.length-1]}}});var tp=fi({raggedRange_:function(e,t,n){let r=pi(e,"starts","raggedRange"),a={starts:r,limits:pi(t,"limits","raggedRange",r.dtype),deltas:pi(n,"deltas","raggedRange",r.dtype)},s=ei.runKernel(Tr,a);return{rtNestedSplits:s[0],rtDenseValues:s[1]}}});var np=fi({raggedTensorToTensor_:function(e,t,n,r,a){let s=pi(e,"shape","raggedTensorToTensor","int32"),i=pi(t,"values","raggedTensorToTensor"),o={shape:s,values:i,defaultValue:pi(n,"defaultValue","raggedTensorToTensor",i.dtype),rowPartitionTensors:r.map(((e,t)=>pi(e,`tensors${t}`,"raggedTensorToTensor","int32")))},l={rowPartitionTypes:a};return ei.runKernel(_r,o,l)}});var rp=fi({rand_:function(e,t,n){nt(e);let r=Ie(e),a=null;if(null==n||"float32"===n)a=new Float32Array(r);else if("int32"===n)a=new Int32Array(r);else{if("bool"!==n)throw new Error(`Unknown data type ${n}`);a=new Uint8Array(r)}for(let e=0;e<r;e++)a[e]=t();return ei.makeTensor(a,e,n)}}),ap=W(Q()),sp={};B(sp,{TEST_EPSILON_FLOAT16:()=>op,createVideoElement:()=>bp,encodeStrings:()=>yp,expectArrayBuffersEqual:()=>gp,expectArraysClose:()=>lp,expectArraysEqual:()=>hp,expectNumbersClose:()=>cp,expectPromiseToFail:()=>pp,expectValuesInRange:()=>mp,play:()=>xp,testEpsilon:()=>up});var ip=.001,op=.1;function lp(e,t,n){return null==n&&(n=up()),dp(e,t,((e,t)=>
2fp(e,t,n)))}function up(){return 32===ei.backend.floatPrecision()?ip:op}function dp(e,t,n){let r=!0;if((fs(e)||fs(t))&&(r=!1),fs(e)&&fs(t)&&(r=!0),r){let n=e.constructor.name,r=t.constructor.name;if(n!==r)throw new Error(`Arrays are of different type. Actual: ${n}. Expected: ${r}`)}if(Array.isArray(e)&&Array.isArray(t)){let n=li(e),r=li(t);if(!Te(n,r))throw new Error(`Arrays have different shapes. Actual: [${n}]. Expected: [${r}]`)}let a=fs(e)?e:ms(e),s=fs(t)?t:ms(t);if(a.length!==s.length)throw new Error(`Arrays have different lengths actual: ${a.length} vs expected: ${s.length}.\nActual:   ${a}.\nExpected: ${s}.`);for(let e=0;e<s.length;++e){let t=a[e],r=s[e];if(!n(t,r))throw new Error(`Arrays differ: actual[${e}] = ${t}, expected[${e}] = ${r}.\nActual:   ${a}.\nExpected: ${s}.`)}"undefined"!=typeof expect&&expect().nothing()}function pp(e,t){e().then((()=>t.fail()),(()=>t())),"undefined"!=typeof expect&&expect().nothing()}function hp(e,t){let n="string"==typeof t||"number"==typeof t||"boolean"==typeof t?[t]:t;return Ue(e)||Ue(e[0])||Ue(t)||Ue(t[0])?dp(e,n,((e,t)=>e==t)):dp(e,t,((e,t)=>fp(e,t,0)))}function cp(e,t,n){if(null==n&&(n=up()),!fp(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);"undefined"!=typeof expect&&expect().nothing()}function fp(e,t,n){return!isFinite(e)&&!isFinite(t)||!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function mp(e,t,n){for(let r=0;r<e.length;r++)if(e[r]<t||e[r]>n)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function gp(e,t){let n=new Float32Array(e),r=new Float32Array(t);if(n.length!==r.length)throw new Error(`Expected ArrayBuffer to be of length ${r.length}, but it was ${n.length}`);for(let e=0;e<r.length;e++)if(n[e]!==r[e])throw new Error(`Expected ArrayBuffer value at ${e} to be ${r[e]} but got ${n[e]} instead`)}function yp(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?yp(n):e[t]=hs(n)}return e}function bp(e){let t=document.createElement("video");return"playsInline"in t&&(t.playsInline=!0),t.muted=!0,t.loop=!0,t.style.position="fixed",t.style.left="0px",t.style.top="0px",t.preload="auto",t.appendChild(e),new Promise((e=>{t.addEventListener("loadeddata",(n=>e(t))),t.load()}))}async function xp(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise((t=>{e.requestVideoFrameCallback(t)}))}var wp=class{constructor(e,t,n,r,a){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+2*this.stdDev,this.lower=this.mean-2*this.stdDev);let s=a||Math.random();this.random=ap.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let e=this.nextVal;return this.nextVal=NaN,e}let e,t,n=!1;for(;!n;){let r,a,s;do{r=2*this.random()-1,a=2*this.random()-1,s=r*r+a*a}while(s>=1||0===s);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*r*i,t=this.mean+this.stdDev*a*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return null==this.dtype||"float32"===this.dtype?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},vp=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let a=r||Math.random();this.randu=ap.alea(a.toString()),this.randn=new wp(0,1,n,!1,this.randu()),this.d=e<1?e+2/3:e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,a,s;for(;;){do{r=this.randn.nextValue(),s=1+this.c*r}while(s<=0);if(s*=s*s,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),a=this.randu(),a<t||Math.log(a)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return"float32"===this.dtype?e:Math.round(e)}},kp=class{constructor(e=0,t=1,n,r){if(this.canReturnFloat=()=>null==this.dtype||"float32"===this.dtype,this.min=e,this.range=t-e,this.dtype=n,null==r&&(r=Math.random()),"number"==typeof r&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=ap.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}
2nextValue(){return this.convertValue(this.min+this.range*this.random())}};var Ip=fi({randomGamma_:function(e,t,n=1,r="float32",a){if(nt(e),null==n&&(n=1),null==r&&(r="float32"),"float32"!==r&&"int32"!==r)throw new Error(`Unsupported data type ${r}`);let s=new vp(t,n,r,a),i=Bo(e,r);for(let e=0;e<i.values.length;e++)i.values[e]=s.nextValue();return i.toTensor()}});var Sp=fi({randomNormal_:function(e,t=0,n=1,r,a){if(nt(e),null!=r&&"bool"===r)throw new Error(`Unsupported data type ${r}`);let s=new wp(t,n,r,!1,a),i=Bo(e,r);for(let e=0;e<i.values.length;e++)i.values[e]=s.nextValue();return i.toTensor()}});var Np=fi({randomStandardNormal_:function(e,t,n){if(null!=t&&"bool"===t)throw new Error(`Unsupported data type ${t}`);return Sp(e,0,1,t,n)}});var Tp=fi({randomUniform_:function(e,t=0,n=1,r="float32",a){nt(e);let s=Bo(e,r),i=new kp(t,n,null,a);for(let e=0;e<s.values.length;e++)s.values[e]=i.nextValue();return s.toTensor()}});var _p=fi({randomUniformInt_:function(e,t,n,r){return Tp(e,t,n,"int32",r)}});function Cp(e,t,n=1,r="float32"){if(0===n)throw new Error("Cannot have a step of zero");let a={start:e,stop:t,step:n,dtype:r};return ei.runKernel(Cr,{},a)}var Ep=fi({real_:function(e){let t={input:pi(e,"input","real")};return ei.runKernel(Er,t)}});var $p=fi({reciprocal_:function(e){let t={x:pi(e,"x","reciprocal")};return ei.runKernel($r,t)}});var Ap=fi({relu_:function(e){let t={x:pi(e,"x","relu")};return ei.runKernel(Ar,t)}});var Rp=fi({relu6_:function(e){let t={x:pi(e,"x","relu6")};return ei.runKernel(Lr,t)}});var Fp=fi({reverse_:function(e,t){let n={x:pi(e,"x","reverse")},r={dims:t};return ei.runKernel(zr,n,r)}});var Dp=fi({reverse1d_:function(e){let t=pi(e,"x","reverse");return we(1===t.rank,(()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`)),Fp(t,0)}});var Mp=fi({reverse2d_:function(e,t){let n=pi(e,"x","reverse");return we(2===n.rank,(()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`)),Fp(n,t)}});var Op=fi({reverse3d_:function(e,t){let n=pi(e,"x","reverse");return we(3===n.rank,(()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`)),Fp(n,t)}});var Lp=fi({reverse4d_:function(e,t){let n=pi(e,"x","reverse");return we(4===n.rank,(()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`)),Fp(n,t)}});var zp=fi({round_:function(e){let t={x:pi(e,"x","round")};return ei.runKernel(Pr,t)}});var Pp=fi({rsqrt_:function(e){let t={x:pi(e,"x","rsqrt","float32")};return ei.runKernel(Br,t)}});var Bp=fi({selu_:function(e){let t={x:pi(e,"x","selu")};return ei.runKernel(Hr,t)}});var Wp=fi({separableConv2d_:function(e,t,n,r,a,s=[1,1],i="NHWC"){let o=pi(e,"x","separableConv2d"),l=pi(t,"depthwiseFilter","separableConv2d"),u=pi(n,"pointwiseFilter","separableConv2d"),d=o,p=!1;if(3===o.rank&&(p=!0,d=kl(o,[1,o.shape[0],o.shape[1],o.shape[2]])),"NCHW"===i)throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");we(4===d.rank,(()=>`Error in separableConv2d: input must be rank 4, but got rank ${d.rank}.`)),we(4===l.rank,(()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`)),we(4===u.rank,(()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`)),we(1===u.shape[0],(()=>`Error in separableConv2d: the first dimension of pointwise filter  must be 1, but got ${u.shape[0]}.`)),we(1===u.shape[1],(()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`));let h=l.shape[2],c=l.shape[3];we(u.shape[2]===h*c,(()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${h*c}, but got ${u.shape[2]}.`));let f=ou(d,l,r,a,i,s),m=Kl(f,u,1,"valid",i);return p?kl(m,[m.shape[1],m.shape[2],m.shape[3]]):m}});var Vp=async function(e,t){let n=pi(e,"x","setdiff1d"),r=pi(t,"y","setdiff1d");we(n.dtype===r.dtype,(()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`)),we(1===n.rank,(()=>`x should be 1D tensor, but got x (${n.shape}).`)),we(1===r.rank,(()=>`y should be 1D tensor, but got y (${r.shape}).`));let a=await n.data(),s=await r.data(),i=new Set(s),o=0;for(let e=0;e<a.length;e++)i.has(a[e])||o++;let l=new _s([o],n.dtype),u=new _s([o],"int32");for(let e=0,t=0;e<a.length;e++)i.has(a[e])||(l.values[t]=a[e],u.values[t]=e,t++);return[l.toTensor(),u.toTensor()]};var Up=fi({sign_:function(e){let t={x:pi(e,"x","sign")};return ei.runKernel(Xr,t)}});var Gp=fi({sin_:function(e){let t={x:pi(e,"x","sin","float32")};return ei.runKernel(qr,t)}});var Hp=fi({sinh_:function(e){let t={x:pi(e,"x","sinh")};return ei.runKernel(Kr,t)}});var jp=fi({slice1d_:function(e,t,n){let r=pi(e,"x","slice1d");return we(1===r.rank,(()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`)),Cl(r,[t],[n])}});var qp=fi({slice2d_:function(e,t,n){let r=pi(e,"x","slice2d");return we(2===r.rank,(()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`)),Cl(r,t,n)}});var Kp=fi({slice3d_:function(e,t,n){let r=pi(e,"x","slice3d");return we(3===r.rank,(()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`)),Cl(r,t,n)}});var Xp=fi({slice4d_:function(e,t,n){let r=pi(e,"x","slice4d");return we(4===r.rank,(()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`)),Cl(r,t,n)}});var Yp=fi({softmax_:function(e,t=-1){let n=pi(e,"logits","softmax","float32");if(-1===t&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank}
2 and dim was ${t}`);let r={logits:n},a={dim:t};return ei.runKernel(na,r,a)}});var Zp=fi({fft_:function(e){we("complex64"===e.dtype,(()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`));let t={input:e};return ei.runKernel(vn,t)}});var Jp=fi({ifft_:function(e){we("complex64"===e.dtype,(()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`));let t={input:e};return ei.runKernel(Rn,t)}});var Qp=fi({irfft_:function(e){let t,n=e.shape[e.shape.length-1],r=e.size/n;if(n<=2){let a=kl(e,[r,n]);t=Jp(a)}else{let a=[r,2*(n-1)],s=kl(Ep(e),[r,n]),i=kl(Yu(e),[r,n]),o=Fp(Cl(s,[0,1],[r,n-2]),1),l=qo(Fp(Cl(i,[0,1],[r,n-2]),1),Du(-1)),u=Nl([s,o],1),d=Nl([i,l],1),p=kl(mi(u,d),[a[0],a[1]]);t=Jp(p)}if(t=Ep(t),3===e.rank&&0!==e.shape[0]){let n=t,r=e.shape[0];t=kl(t,[r,t.shape[0]/r,t.shape[1]]),n.dispose()}return t}});var eh=fi({split_:function(e,t,n=0){let r={x:pi(e,"x","split")},a={numOrSizeSplits:t,axis:n};return ei.runKernel(ta,r,a)}});var th=fi({rfft_:function(e,t){we("float32"===e.dtype,(()=>`The dtype for rfft() must be real value but got ${e.dtype}`));let n,r=e.shape[e.shape.length-1],a=e.size/r;if(null!=t&&t<r){let a=e.shape.map((e=>0)),s=e.shape.map((e=>e));s[e.shape.length-1]=t,n=Cl(e,a,s),r=t}else if(null!=t&&t>r){let a=e.shape.map((e=>e));a[e.shape.length-1]=t-r,n=Nl([e,Rd(a)],e.shape.length-1),r=t}else n=e;let s=gu(n),i=kl(mi(n,s),[a,r]),o=Zp(i),l=Math.floor(r/2)+1,u=Ep(o),d=Yu(o),p=eh(u,[l,r-l],u.shape.length-1),h=eh(d,[l,r-l],d.shape.length-1),c=n.shape.slice();return c[n.shape.length-1]=l,kl(mi(p[0],h[0]),c)}});var nh=fi({squaredDifference_:function(e,t){let n=pi(e,"a","squaredDifference"),r=pi(t,"b","squaredDifference");[n,r]=Hs(n,r),cu(n.shape,r.shape);let a={a:n,b:r};return ei.runKernel(la,a,{})}});var rh=fi({squeeze_:function(e,t){let n=pi(e,"x","squeeze","string_or_numeric");return kl(n,Me(n.shape,t).newShape)}});var ah=fi({stack_:function(e,t=0){let n=hi(e,"tensors","stack","string_or_numeric");we(n.length>=1,(()=>"Pass at least one tensor to tf.stack")),n.length>0&&we(t<=n[0].rank,(()=>"Axis must be <= rank of the tensor"));let r=n,a={axis:t};return ei.runKernel(xr,r,a)}});var sh=fi({step_:function(e,t=0){let n={x:pi(e,"x","step")},r={alpha:t};return ei.runKernel(_a,n,r)}});var ih=fi({stridedSlice_:function(e,t,n,r,a=0,s=0,i=0,o=0,l=0){let u={x:pi(e,"x","stridedSlice","string_or_numeric")},d={begin:t,end:n,strides:r,beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return ei.runKernel(pa,u,d)}});var oh=fi({tan_:function(e){let t={x:pi(e,"x","tan","float32")};return ei.runKernel(ga,t)}});function lh(e,t){ke(e);let n=li(e,t);if(1!==n.length)throw new Error("tensor1d() requires values to be a flat/TypedArray");return gi(e,null,n,t)}function uh(e,t,n){if(ke(e),null!=t&&2!==t.length)throw new Error("tensor2d() requires shape to have two numbers");let r=li(e,n);if(2!==r.length&&1!==r.length)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return gi(e,t,r,n)}function dh(e,t,n){if(ke(e),null!=t&&3!==t.length)throw new Error("tensor3d() requires shape to have three numbers");let r=li(e,n);if(3!==r.length&&1!==r.length)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return gi(e,t,r,n)}function ph(e,t,n){if(ke(e),null!=t&&4!==t.length)throw new Error("tensor4d() requires shape to have four numbers");let r=li(e,n);if(4!==r.length&&1!==r.length)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return gi(e,t,r,n)}function hh(e,t,n){if(ke(e),null!=t&&5!==t.length)throw new Error("tensor5d() requires shape to have five numbers");let r=li(e,n);if(5!==r.length&&1!==r.length)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return gi(e,t,r,n)}
2function ch(e,t,n){if(ke(e),null!=t&&6!==t.length)throw new Error("tensor6d() requires shape to have six numbers");let r=li(e,n);if(6!==r.length&&1!==r.length)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(1===r.length&&null==t)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return gi(e,t=t||r,r,n)}var fh={};function mh(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,a=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${a}.`;if(n.rank<a)throw new Error(s+` update.rank < ${a}. `);if(e.length<r+(n.rank-a))throw new Error(s+` Output shape length < ${r+(n.rank-a)}`);if(n.rank!==a+e.length-r)throw new Error(s+" update.rank != "+(a+e.length-r));for(let e=0;e<a;++e)if(n.shape[e]!==t.shape[e])throw new Error(s+` updates.shape[${e}] (${n.shape[e]}) != indices.shape[${e}] (${t.shape[e]}).`);for(let t=0;t<n.rank-a;++t)if(n.shape[t+a]!==e[t+r])throw new Error(s+` updates.shape[${t+a}] (${n.shape[t+a]}) != shape[${t+a}] (${e[t+a]})`)}function gh(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if("int32"!==t.dtype)throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(0===n.length){if(0===t.size)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(0===e.size)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}mh(n,t,e)}function yh(e,t,n){let r=t.shape.length,a=r>1?t.shape[r-1]:1,s=n.length,i=1;for(let e=a;e<s;++e)i*=n[e];let o=a<1?1:a;return{sliceRank:a,numUpdates:Ie(t.shape)/o,sliceSize:i,strides:[...Xe(n.slice(0,a)),1],outputSize:Ie(n)}}B(fh,{calculateShapes:()=>yh,validateInput:()=>gh,validateUpdateShape:()=>mh});var bh=fi({tensorScatterUpdate_:function(e,t,n){let r=pi(e,"tensor","tensorScatterupdate"),a=pi(t,"indices","tensorScatterupdate","int32"),s=pi(n,"updates","tensorScatterupdate");if(gh(s,a,r.shape),r.dtype!==s.dtype)throw new Error(`tensor and updates must have the same dtype, instead they are ${r.dtype} and ${s.dtype}.`);let i={tensor:r,indices:a,updates:s};return ei.runKernel(Vr,i,{})}});var xh=fi({topk_:function(e,t=1,n=!0){let r=pi(e,"x","topk");
2if(0===r.rank)throw new Error("topk() expects the input to be of rank 1 or higher");let a=r.shape[r.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>a)throw new Error(`'k' passed to topk() must be <= the last dimension (${a}) but got ${t}`);let s={x:r},i={k:t,sorted:n},[o,l]=ei.runKernel(xa,s,i);return{values:o,indices:l}}});var wh=fi({truncatedNormal_:function(e,t=0,n=1,r,a){if(nt(e),null!=r&&"bool"===r)throw new Error("Unsupported data type $ { dtype }");let s=new wp(t,n,r,!0,a),i=Bo(e,r);for(let e=0;e<i.values.length;e++)i.values[e]=s.nextValue();return i.toTensor()}});var vh=fi({unique_:function(e,t=0){let n=pi(e,"x","unique","string_or_numeric");we(n.rank>0,(()=>"The input tensor must be at least 1D"));let r={x:n},a={axis:t},[s,i]=ei.runKernel(ka,r,a);return{values:s,indices:i}}});var kh=fi({unsortedSegmentSum_:function(e,t,n){let r=pi(e,"x","unsortedSegmentSum"),a=pi(t,"segmentIds","unsortedSegmentSum","int32");we(_e(n),(()=>"numSegments must be of dtype int"));let s={x:r,segmentIds:a},i={numSegments:n};return ei.runKernel(Sa,s,i)}});var Ih=fi({unstack_:function(e,t=0){let n=pi(e,"x","unstack","string_or_numeric");we(t>=-n.shape.length&&t<n.shape.length,(()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`));let r={value:n},a={axis:t};return ei.runKernel(Ia,r,a)}});function Sh(e,t){return Nd(e,t,"right")}function Nh(e,t=!0,n,r){return ei.makeVariable(e,t,n,r)}function Th(e,t){let n=[];for(let e=0;e<t.length;e++)t[e]&&n.push(e);let r=Bo(e,"int32"),a=Bo([n.length,e.length],"int32");for(let t=0;t<n.length;t++){let s=r.indexToLoc(n[t]),i=t*e.length;a.values.set(s,i)}return a.toTensor()}var _h=async function(e){let t=pi(e,"condition","whereAsync","bool"),n=await t.data(),r=Th(t.shape,n);
2return e!==t&&t.dispose(),r};var Ch=async function(e,t,n){let r=pi(e,"tensor","boolMask"),a=pi(t,"mask","boolMask","bool"),s=null==n?0:n,i=a.rank,o=r.shape;we(i>0,(()=>"mask cannot be scalar")),ve(o.slice(s,s+i),a.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let e=s;e<s+i;e++)l*=o[e];let u=o.slice(0,s).concat([l],o.slice(s+i)),d=kl(r,u),p=kl(a,[-1]),h=await _h(p),c=rh(h,[1]),f=qu(d,c,s);return e!==r&&r.dispose(),t!==a&&a.dispose(),c.dispose(),d.dispose(),p.dispose(),h.dispose(),f};var Eh=fi({transpose_:function(e,t,n){let r=pi(e,"x","transpose");if(null==t&&(t=r.shape.map(((e,t)=>t)).reverse()),we(r.rank===t.length,(()=>`Error in transpose: rank of input ${r.rank} must match length of perm ${t}.`)),t.forEach((e=>{we(e>=0&&e<r.rank,(()=>`All entries in 'perm' must be between 0 and ${r.rank-1} but got ${t}`))})),r.rank<=1)return r.clone();let a={x:r},s={perm:t};return"complex64"===r.dtype?Ci((()=>{let e=Ep(r),t=Yu(r);return e=ei.runKernel(va,{x:e},s),t=ei.runKernel(va,{x:t},s),n&&(t=fd(t)),mi(e,t)})):ei.runKernel(va,a,s)}});var $h=fi({movingAverage_:function(e,t,n,r,a=!0){let s=pi(e,"v","movingAverage"),i=pi(t,"x","movingAverage"),o=pi(n,"decay","movingAverage");js(s,i),we(Te(s.shape,i.shape),(()=>"Shape mismatch in v and x"));let l=Du(1),u=yd(l,o),d=qo(yd(i,s),u);if(a){we(null!=r,(()=>"When using zeroDebias: true, step is required."));let e=pi(r,"step","movingAverage");d=jo(d,yd(l,Fu(o,e)))}return Go(s,d)}});var Ah=fi({scatterND_:function(e,t,n){nt(n);let r=pi(e,"indices","scatterND","int32"),a=pi(t,"updates","scatterND");gh(a,r,n);let s={indices:r,updates:a},i={shape:n};return ei.runKernel(Wr,s,i)}});var Rh=fi({sparseToDense_:function(e,t,n,r=0){nt(n);let a=pi(e,"sparseIndices","sparseToDense","int32"),s=pi(t,"sparseValues","sparseToDense","string_or_numeric"),i=pi(r,"defaultValue","sparseToDense",s.dtype);!function(e,t,n,r){if("int32"!==e.dtype)throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let a=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(0!==t.rank&&(1!==t.rank||i!==a))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${a}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(a,s,n,i);let o={sparseIndices:a,sparseValues:s,defaultValue:i},l={outputShape:n};return ei.runKernel(oa,o,l)}});var Fh=fi({gatherND_:function(e,t){let n=pi(t,"indices","gatherND","int32"),r={params:pi(e,"x","gatherND","string_or_numeric"),indices:n};return ei.runKernel(Cn,r)}});var Dh=fi({dropout_:function(e,t,n,r){let a=pi(e,"x","dropout");if(we("float32"===a.dtype,(()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${a.dtype} tensor instead.`)),we(t>=0&&t<1,(()=>`rate must be a float in the range [0, 1), but got ${t}.`)),0===t)return e instanceof $s?a.clone():a;let s=function(e,t){if(null==t)return e.shape.slice();if(Te(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r<e.shape.length;r++)null==t[r]&&null!=e.shape[r]?n.push(e.shape[r]):n.push(t[r]);return n}return t}(a,n),i=1-t,o=jo(ju(Go(Tp(s,0,1,"float32",r),i)),i);return qo(a,o)}});function Mh(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Oh(e,t,n){let r=1-e%2,a=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+r-1);a[s]=t-n*Math.cos(i)}return lh(a,"float32")}var Lh=async function(e,t,n=1){let r=pi(e,"predictions","inTopK"),a=pi(t,"targets","inTopK");we(r.rank>1,(()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`)),we(r.rank-1===a.rank,(()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${a.rank}`)),ve(r.shape.slice(0,r.shape.length-1),a.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=r.shape[r.shape.length-1];we(n>0&&n<=s,(()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`));let i=await r.data(),o=await a.data(),[l,u]=[i.length/s,s],d=Oe("bool",l);for(let e=0;e<l;e++){let t=e*u,r=i.subarray(t,t+u),a=[];for(let e=0;e<r.length;e++)a.push({value:r[e],index:e});a.sort(((e,t)=>t.value-e.value)),d[e]=0;for(let t=0;t<n;t++)if(a[t].index===o[e]){d[e]=1;break}}return e!==r&&r.dispose(),t!==a&&a.dispose(),yi(d,a.shape,"bool")},zh={};B(zh,{conv2d:()=>Gh,depthwiseConv2d:()=>qh,matMul:()=>Kh});var Ph=fi({conv2DBackpropFilter_:function(e,t,n,r,a,s="NHWC",i){let o=e;3===e.rank&&(o=kl(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;3===l.rank&&(l=kl(t,[1,t.shape[0],t.shape[1],t.shape[2]])),we(4===o.rank,(()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`)),we(4===l.rank,(()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`)),we(4===n.length,(()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`));let u="NHWC"===s?o.shape[3]:o.shape[1],d="NHWC"===s?l.shape[3]:l.shape[1];we(u===n[2],(()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`)),we(d===n[3],(()=>`Error in conv2dDerFilter: depth of dy (${d}) must match output depth for filter (${n[3]}).`)),vl("conv2dDerFilter",a,i);let p={x:o,dy:l},h={strides:r,pad:a,dataFormat:s,dimRoundingMode:i,filterShape:n};return ei.runKernel(Ht,p,h)}});function Bh(e,t,n){if(null==n||"linear"===n)return e;if("relu"===n)return qo(e,sh(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Wh(e,t){let n=t,r=hu(e.shape,t.shape);return r.length>
20&&(n=Lu(n,r)),kl(n,e.shape)}function Vh(e,t,n,r){if("linear"===t)return e;if("relu"===t)return Ap(e);if("elu"===t)return wu(e);if("relu6"===t)return Rp(e);if("prelu"===t)return Jd(e,n);if("leakyrelu"===t)return ed(e,r);if("sigmoid"===t)return _l(e);throw new Error(`Unknown fused activation ${t}.`)}var Uh=(e,t)=>!(e>0)||"linear"===t;var Gh=fi({fusedConv2d_:function({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(l=l||"linear",!1===Uh(ei.state.gradientDepth,l)){we("NHWC"===a,(()=>`Error in fused conv2d: got dataFormat of ${a} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`));let p=Kl(e,t,n,r,a,s,i);return null!=o&&(p=Go(p,o)),Vh(p,l,u,d)}let p=pi(e,"x","conv2d","float32"),h=pi(t,"filter","conv2d","float32"),c=p,f=!1;3===p.rank&&(f=!0,c=kl(p,[1,p.shape[0],p.shape[1],p.shape[2]])),we(4===c.rank,(()=>`Error in fused conv2d: input must be rank 4, but got rank ${c.rank}.`)),we(4===h.rank,(()=>`Error in fused conv2d: filter must be rank 4, but got rank ${h.rank}.`)),vl("fused conv2d",r,i);let m="NHWC"===a?c.shape[3]:c.shape[1];we(h.shape[2]===m,(()=>`Error in conv2d: depth of input (${m}) must match input depth for filter ${h.shape[2]}.`)),we(bl(n,s),(()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`));let g,y,b=dl(c.shape,h.shape,n,s,r,i);if(null!=o&&(g=pi(o,"bias","fused conv2d"),[g]=Hs(g,p),"NHWC"===a?cu(b.outShape,g.shape):(we(g.shape.length<=1,(()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${g.shape.length}.`)),we(0===g.shape.length||g.shape[0]===b.outChannels||1===g.shape[0],(()=>`Error in fused conv2d: bias shape (${g.shape}) is not compatible with the number of output channels (${b.outChannels})`)))),null!=u){let e=u.shape;if(we(e.length<=1||3===e.length,(()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${e.length}.`)),1===e.length)we(1===e[0]||e[0]===b.outChannels,(()=>`Error in fused conv2d: PReLU activation weights (${e}) is not compatible with the number of output channels (${b.outChannels}).`));else if(3===e.length)try{cu(e,b.outShape)}catch(t){let n=`Error in fused conv2d: PReLU activation weights (${e}) is not compatible with the output shape of the conv2d (${b.outShape}).`;throw Error(n)}y=pi(u,"prelu weights","fused conv2d")}let x=(e,t)=>{we("NHWC"===a,(()=>`Error in gradient of fused conv2D: got dataFormat of ${a} but only NHWC is currently supported.`));let[i,o,u,d]=t,p=Bh(e,u,l);we(yl(s),(()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`));let h=[Yl(o.shape,p,i,n,r),Ph(o,p,i.shape,n,r)];if(null!=d){let e=Wh(d,p);h.push(e)}return h},w={x:c,filter:h,bias:g,preluActivationWeights:y},v={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return null==o?hd(((e,t,n)=>{let r=ei.runKernel(Aa,w,v);return n([t,e,r]),f&&(r=kl(r,[r.shape[1],r.shape[2],r.shape[3]])),{value:r,gradFunc:x}}))(c,h):hd(((e,t,n,r)=>{let a=ei.runKernel(Aa,w,v);return r([t,e,a,n]),f&&(a=kl(a,[a.shape[1],a.shape[2],a.shape[3]])),{value:a,gradFunc:x}}))(c,h,g)}});var Hh=fi({depthwiseConv2dNativeBackpropFilter_:function(e,t,n,r,a,s=[1,1],i){let o=e;3===e.rank&&(o=kl(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;3===l.rank&&(l=kl(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},d={strides:r,pad:a,dimRoundingMode:i,dilations:s,filterShape:n};return ei.runKernel(an,u,d)}});var jh=fi({depthwiseConv2dNativeBackpropInput_:function(e,t,n,r,a,s=[1,1],i){let o=t,l=!1;3===t.rank&&(l=!0,o=kl(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:n},d={strides:r,pad:a,dimRoundingMode:i,dilations:s,inputShape:e},p=ei.runKernel(sn,u,d);return l?kl(p,[p.shape[1],p.shape[2],p.shape[3]]):p}});var qh=fi({fusedDepthwiseConv2d_:function({x:e,filter:t,strides:n,pad:r,dataFormat:a="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:d}){if(!1===Uh(ei.state.gradientDepth,l)){let p=ou(e,t,n,r,a,s,i);return null!=o&&(p=Go(p,o)),Vh(p,l,u,d)}let p=pi(e,"x","depthwiseConv2d","float32"),h=pi(t,"filter","depthwiseConv2d","float32"),c=p,f=!1;3===p.rank&&(f=!0,c=kl(p,[1,p.shape[0],p.shape[1],p.shape[2]])),we(4===c.rank,(()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${c.rank}.`)),we(4===h.rank,(()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${h.rank}.`)),we(c.shape[3]===h.shape[2],(()=>`Error in fused depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${h.shape[2]}.`)),null==s&&(s=[1,1]),we(bl(n,s),(()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`)),vl("fused depthwiseConv2d",r,i);let m,g,y=dl(c.shape,h.shape,n,s,r,i,!0);null!=o&&(m=pi(o,"bias","fused conv2d"),[m]=Hs(m,p),cu(y.outShape,m.shape)),null!=u&&(g=pi(u,"prelu weights","fused depthwiseConv2d"));let b=(e,t)=>{we(yl(s),(()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`));let[a,o,u,d]=t,p=Bh(e,u,l),h=jh(o.shape,p,a,n,r,s,i),c=Hh(o,p,a.shape,n,r,s,i);if(null!=d){return[h,c,Wh(m,p)]}return[h,c]},x={x:c,filter:h,bias:m,preluActivationWeights:g},w={strides:n,pad:r,dataFormat:a,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:d};return null==o?hd(((e,t,n)=>{let r=ei.runKernel(Ra,x,w);return n([t,e,r]),f&&(r=kl(r,[r.shape[1],r.shape[2],r.shape[3]])),{value:r,gradFunc:b}}))(c,h):hd(((e,t,n,r)=>{let a=ei.runKernel(Ra,x,w);return r([t,e,a,n]),f&&(a=kl(a,[a.shape[1],a.shape[2],a.shape[3]])),{value:a,gradFunc:b}}))(c,h,m)}});var Kh=fi({fusedMatMul_:function({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:a,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(!1===Uh(ei.state.gradientDepth,s)){let l=Tl(e,t,n,r);return null!=a&&(l=Go(l,a)),Vh(l,s,i,o)}let l=pi(e,"a","fused matMul"),u=pi(t,"b","fused matMul");[l,u]=Hs(l,u);let d=n?l.shape[l.rank-2]:l.shape[l.rank-1],p=r?u.shape[u.rank-1]:u.shape[u.rank-2],h=n?l.shape[l.rank-1]:l.shape[l.rank-2],c=r?u.shape[u.rank-2]:u.shape[u.rank-1],f=l.shape.slice(0,-2),m=u.shape.slice(0,-2),g=Ie(f),y=Ie(m);we(d===p,(()=>`Error in fused matMul: inner shapes (${d}) and (${p}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`));
2let b,x,w=cu(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([h,c]),v=kl(l,n?[g,d,h]:[g,h,d]),k=kl(u,r?[y,c,p]:[y,p,c]);null!=a&&(b=pi(a,"bias","fused matMul"),[b]=Hs(b,l),cu(w,b.shape)),null!=i&&(x=pi(i,"prelu weights","fused matMul"));let I=(e,t)=>{let i,o,[l,u,d,p]=t,h=Bh(kl(e,d.shape),d,s);if(n||r?!n&&r?(i=Tl(h,u,!1,!1),o=Tl(h,l,!0,!1)):n&&!r?(i=Tl(u,h,!1,!0),o=Tl(l,h,!1,!1)):(i=Tl(u,h,!0,!0),o=Tl(h,l,!0,!0)):(i=Tl(h,u,!1,!0),o=Tl(l,h,!0,!1)),null!=a){return[i,o,Wh(p,h)]}return[i,o]},S={a:v,b:k,bias:b,preluActivationWeights:x},N={transposeA:n,transposeB:r,activation:s,leakyreluAlpha:o};return null==a?hd(((e,t,n)=>{let r=ei.runKernel($a,S,N);return n([e,t,r]),{value:kl(r,w),gradFunc:I}}))(v,k):hd(((e,t,n,r)=>{let a=ei.runKernel($a,S,N);return r([e,t,a,n]),{value:kl(a,w),gradFunc:I}}))(v,k,b)}});var Xh=fi({hammingWindow_:function(e){return Oh(e,.54,.46)}});var Yh=fi({hannWindow_:function(e){return Oh(e,.5,.5)}});var Zh=fi({frame_:function(e,t,n,r=!1,a=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Cl(e,s,t)),s+=n;if(r)for(;s<e.size;){let r=s+t-e.size,o=Nl([Cl(e,s,t-r),Vl([r],a)]);i.push(o),s+=n}return 0===i.length?uh([],[0,t]):kl(Nl(i),[i.length,t])}});var Jh=fi({stft_:function(e,t,n,r,a=Yh){null==r&&(r=Mh(t));let s=Zh(e,t,n),i=qo(s,a(t));return th(i,r)}});var Qh=fi({cropAndResize_:function(e,t,n,r,a="bilinear",s=0){let i=pi(e,"image","cropAndResize"),o=pi(t,"boxes","cropAndResize","float32"),l=pi(n,"boxInd","cropAndResize","int32"),u=o.shape[0];we(4===i.rank,(()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`)),we(2===o.rank&&4===o.shape[1],(()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`)),we(1===l.rank&&l.shape[0]===u,(()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`)),we(2===r.length,(()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`)),we(r[0]>=1&&r[1]>=1,(()=>`cropSize must be atleast [1,1], but was ${r}`)),we("bilinear"===a||"nearest"===a,(()=>`method must be bilinear or nearest, but was ${a}`));let d={image:i,boxes:o,boxInd:l},p={method:a,extrapolationValue:s,cropSize:r};return ei.runKernel(en,d,p)}});var ec=fi({flipLeftRight_:function(e){let t=pi(e,"image","flipLeftRight","float32");we(4===t.rank,(()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`));let n={image:t};return ei.runKernel(In,n,{})}});var tc=fi({grayscaleToRGB_:function(e){let t=pi(e,"image","grayscaleToRGB"),n=t.rank-1,r=t.shape[n];we(t.rank>=2,(()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`)),we(1===r,(()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${r}.`));let a=new Array(t.rank);return a.fill(1,0,n),a[n]=3,Gu(t,a)}});var nc=fi({rgbToGrayscale_:function(e){let t=pi(e,"image","RGBToGrayscale"),n=t.rank-1,r=t.shape[n];we(t.rank>=2,(()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`)),we(3===r,(()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${r}.`));let a,s=t.dtype,i=Wo(t,"float32"),o=lh([.2989,.587,.114]);switch(t.rank){case 2:a=xu("ij,j->i",i,o);break;case 3:a=xu("ijk,k->ij",i,o);break;case 4:a=xu("ijkl,l->ijk",i,o);break;case 5:a=xu("ijklm,m->ijkl",i,o);break;case 6:a=xu("ijklmn,n->ijklm",i,o);break;default:throw new Error("Not a valid tensor rank.")}return a=Vu(a,-1),Wo(a,s)}});var rc=fi({rotateWithOffset_:function(e,t,n=0,r=.5){let a=pi(e,"image","rotateWithOffset","float32");we(4===a.rank,(()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${a.rank}.`));let s={image:a},i={radians:t,fillValue:n,center:r};return ei.runKernel(Ea,s,i)}});function ac(e,t,n,r,a,s){null==r&&(r=.5),null==a&&(a=Number.NEGATIVE_INFINITY),null==s&&(s=0);let i=e.shape[0];return n=Math.min(n,i),we(0<=r&&r<=1,(()=>`iouThreshold must be in [0, 1], but was '${r}'`)),we(2===e.rank,(()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`)),we(4===e.shape[1],(()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`)),we(1===t.rank,(()=>"scores must be a 1D tensor")),we(t.shape[0]===i,(()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`)),we(0<=s&&s<=1,(()=>`softNmsSigma must be in [0, 1], but was '${s}'`)),{maxOutputSize:n,iouThreshold:r,scoreThreshold:a,softNmsSigma:s}}var sc=fi({nonMaxSuppression_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=pi(e,"boxes","nonMaxSuppression","float32"),i=pi(t,"scores","nonMaxSuppression","float32"),o=ac(s,i,n,r,a),l={maxOutputSize:n=o.maxOutputSize,iouThreshold:r=o.iouThreshold,scoreThreshold:a=o.scoreThreshold};return ei.runKernel(fr,{boxes:s,scores:i},l)}});function ic(e,t,n){let r=function(e,t,n){return function(e,t,n){let r=0,a=e.length,s=0,i=!1;for(;r<a;){s=r+(a-r>>>1);let o=n(t,e[s]);o>0?r=s+1:(a=s,i=!o)}return i?r:-r-1}(e,t,n||oc)}
2(e,t,n),a=r<0?-(r+1):r;e.splice(a,0,t)}function oc(e,t){return e>t?1:e<t?-1:0}function lc(e,t,n,r,a){return pc(e,t,n,r,a,0)}function uc(e,t,n,r,a,s){return pc(e,t,n,r,a,0,!1,s,!0)}function dc(e,t,n,r,a,s){return pc(e,t,n,r,a,s,!0)}function pc(e,t,n,r,a,s,i=!1,o=!1,l=!1){let u=[];for(let e=0;e<t.length;e++)t[e]>a&&u.push({score:t[e],boxIndex:e,suppressBeginIndex:0});u.sort(fc);let d=s>0?-.5/s:0,p=[],h=[];for(;p.length<n&&u.length>0;){let t=u.pop(),{score:n,boxIndex:s,suppressBeginIndex:i}=t;if(n<a)break;let o=!1;for(let n=p.length-1;n>=i;--n){let i=hc(e,s,p[n]);if(i>=r){o=!0;break}if(t.score=t.score*cc(r,d,i),t.score<=a)break}t.suppressBeginIndex=p.length,o||(t.score===n?(p.push(s),h.push(t.score)):t.score>a&&ic(u,t,fc))}let c=p.length,f=n-c;o&&f>0&&(p.push(...new Array(f).fill(0)),h.push(...new Array(f).fill(0)));let m={selectedIndices:p};return i&&(m.selectedScores=h),l&&(m.validOutputs=c),m}function hc(e,t,n){let r=e.subarray(4*t,4*t+4),a=e.subarray(4*n,4*n+4),s=Math.min(r[0],r[2]),i=Math.min(r[1],r[3]),o=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),u=Math.min(a[0],a[2]),d=Math.min(a[1],a[3]),p=Math.max(a[0],a[2]),h=Math.max(a[1],a[3]),c=(o-s)*(l-i),f=(p-u)*(h-d);if(c<=0||f<=0)return 0;let m=Math.max(s,u),g=Math.max(i,d),y=Math.min(o,p),b=Math.min(l,h),x=Math.max(y-m,0)*Math.max(b-g,0);return x/(c+f-x)}function cc(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function fc(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}var mc=async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY){let s=pi(e,"boxes","nonMaxSuppressionAsync"),i=pi(t,"scores","nonMaxSuppressionAsync"),o=ac(s,i,n,r,a);n=o.maxOutputSize,r=o.iouThreshold,a=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],d=l[1],{selectedIndices:p}=lc(u,d,n,r,a);return s!==e&&s.dispose(),i!==t&&i.dispose(),lh(p,"int32")};var gc=fi({nonMaxSuppressionWithScore_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=pi(e,"boxes","nonMaxSuppression"),o=pi(t,"scores","nonMaxSuppression"),l=ac(i,o,n,r,a,s),u={boxes:i,scores:o},d={maxOutputSize:n=l.maxOutputSize,iouThreshold:r=l.iouThreshold,scoreThreshold:a=l.scoreThreshold,softNmsSigma:s=l.softNmsSigma},p=ei.runKernel(gr,u,d);return{selectedIndices:p[0],selectedScores:p[1]}}});var yc=async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=0){let i=pi(e,"boxes","nonMaxSuppressionAsync"),o=pi(t,"scores","nonMaxSuppressionAsync"),l=ac(i,o,n,r,a,s);n=l.maxOutputSize,r=l.iouThreshold,a=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),d=u[0],p=u[1],{selectedIndices:h,selectedScores:c}=dc(d,p,n,r,a,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:lh(h,"int32"),selectedScores:lh(c)}};var bc=fi({nonMaxSuppressionPadded_:function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=pi(e,"boxes","nonMaxSuppression"),o=pi(t,"scores","nonMaxSuppression"),l=ac(i,o,n,r,a,null),u={boxes:i,scores:o},d={maxOutputSize:l.maxOutputSize,iouThreshold:l.iouThreshold,scoreThreshold:l.scoreThreshold,padToMaxOutputSize:s},p=ei.runKernel(mr,u,d);return{selectedIndices:p[0],validOutputs:p[1]}}});var xc=async function(e,t,n,r=.5,a=Number.NEGATIVE_INFINITY,s=!1){let i=pi(e,"boxes","nonMaxSuppressionAsync"),o=pi(t,"scores","nonMaxSuppressionAsync"),l=ac(i,o,n,r,a,null),u=l.maxOutputSize,d=l.iouThreshold,p=l.scoreThreshold,[h,c]=await Promise.all([i.data(),o.data()]),{selectedIndices:f,validOutputs:m}=uc(h,c,u,d,p,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:lh(f,"int32"),validOutputs:Du(m,"int32")}};var wc=fi({resizeBilinear_:function(e,t,n=!1,r=!1){let a=pi(e,"images","resizeBilinear");we(3===a.rank||4===a.rank,(()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${a.rank}.`)),we(2===t.length,(()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`)),we(!1===r||!1===n,(()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false."));let s=a,i=!1;3===a.rank&&(i=!0,s=kl(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=ei.runKernel(Mr,o,l);return i?kl(u,[u.shape[1],u.shape[2],u.shape[3]]):u}});var vc=fi({resizeNearestNeighbor_:function(e,t,n=!1,r=!1){let a=pi(e,"images","resizeNearestNeighbor");we(3===a.rank||4===a.rank,(()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${a.rank}.`)),we(2===t.length,(()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`)),we("float32"===a.dtype||"int32"===a.dtype,(()=>"`images` must have `int32` or `float32` as dtype")),we(!1===r||!1===n,(()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false."));let s=a,i=!1;3===a.rank&&(i=!0,s=kl(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:r,size:t},u=ei.runKernel(Fr,o,l);return i?kl(u,[u.shape[1],u.shape[2],u.shape[3]]):u}});var kc=fi({threshold_:function(e,t="binary",n=!1,r=.5){let a,s,i,o,l=pi(e,"image","threshold"),u=l.shape[0]*l.shape[1],d=qo(lh([r]),255);if(we(3===l.rank,(()=>`Error in threshold: image must be rank 3,but got rank ${l.rank}.`)),we(3===l.shape[2]||1===l.shape[2],(()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${l.shape[2]}.`)),we("int32"===l.dtype||"float32"===l.dtype,(()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${l.dtype}.`)),we("otsu"===t||"binary"===t,(()=>`Method must be binary or otsu, but was ${t}`)),3===l.shape[2]){[a,s,i]=eh(l,[1,1,1],-1);let e=qo(a,.2989),t=qo(s,.587),n=qo(i,.114);o=Go(Go(e,t),n)}else o=e;if("otsu"===t){d=function(e,t){let n,r,a,s,i,o,l=lh([-1]),u=lh([0]),d=lh([0]);for(let p=0;p<e.size-1;p++){n=Cl(e,0,p+1),r=Cl(e,p+1),i=jo(Lu(n),t),o=jo(Lu(r),t);let h=Lu(qo(n,Cp(0,n.size)));a=jo(h,Lu(n));let c=Vl(r.shape,n.size),f=Go(Cp(0,r.size),c),m=qo(r,f);s=jo(Lu(m),Lu(r));let g=yd(a,s),y=yd(a,s),b=qo(i,o);d=qo(qo(b,g),y);let x=Ku(d,u);u=mu(x,d,u),l=mu(x,lh([p]),l)}return l}(Ll(Wo(zp(o),"int32"),yi([]),256),u)}let p=n?nd(o,d):Ku(o,d);return Wo(qo(p,255),"int32")}});var Ic=fi({transform_:function(e,t,n="nearest",r="constant",a=0,s){let i=pi(e,"image","transform","float32"),o=pi(t,"transforms","transform","float32");we(4===i.rank,(()=>`Error in transform: image must be rank 4,but got rank ${i.rank}
2.`)),we(2===o.rank&&(o.shape[0]===i.shape[0]||1===o.shape[0])&&8===o.shape[1],(()=>"Error in transform: Input transform should be batch x 8 or 1 x 8")),we(null==s||2===s.length,(()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`));let l={image:i,transforms:o},u={interpolation:n,fillMode:r,fillValue:a,outputShape:s};return ei.runKernel(wa,l,u)}});var Sc=fi({bandPart_:function(e,t,n){let r=pi(e,"a","bandPart");we(r.rank>=2,(()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`));let a,s,i=r.shape,[o,l]=r.shape.slice(-2);"number"==typeof t?(we(t%1==0,(()=>`bandPart(): numLower must be an integer, got ${t}.`)),we(t<=o,(()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${o}).`)),a=pi(t<0?o:t,"numLower","bandPart")):(we("int32"===t.dtype,(()=>"bandPart(): numLower's dtype must be an int32.")),a=mu(td(t,0),o,Md(t,o))),"number"==typeof n?(we(n%1==0,(()=>`bandPart(): numUpper must be an integer, got ${n}.`)),we(n<=l,(()=>`bandPart(): numUpper (${n}) must not be greater than the number of columns (${l}).`)),s=pi(n<0?l:n,"numUpper","bandPart")):(we("int32"===n.dtype,(()=>"bandPart(): numUpper's dtype must be an int32.")),s=mu(td(n,0),l,Md(n,l)));let u=kl(Cp(0,o,1,"int32"),[-1,1]),d=Cp(0,l,1,"int32"),p=yd(u,d),h=wd(nd(p,a),Xu(p,fd(s))),c=Rd([o,l],r.dtype);return kl(ah(Ih(kl(r,[-1,o,l])).map((e=>mu(h,e,c)))),i)}});var Nc=fi({gramSchmidt_:function(e){let t;if(Array.isArray(e)){t=!1,we(null!=e&&e.length>0,(()=>"Gram-Schmidt process: input must not be null, undefined, or empty"));let n=e[0].shape[0];for(let t=1;t<e.length;++t)we(e[t].shape[0]===n,(()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[t].shape[0]} vs. ${n})`))}else t=!0,e=eh(e,e.shape[0],0).map((e=>rh(e,[0])));we(e.length<=e[0].shape[0],(()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`));let n=[],r=e;for(let t=0;t<e.length;++t)n.push(ei.tidy((()=>{let e=r[t];if(t>0)for(let r=0;r<t;++r){let t=qo(Lu(qo(n[r],e)),n[r]);e=yd(e,t)}return jo(e,Pu(e,"euclidean"))})));return t?ah(n,0):n}});function Tc(e,t=!1){return ei.tidy((()=>{we(2===e.shape.length,(()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`));let n=e.shape[0],r=e.shape[1],a=Hu(n),s=Vo(e),i=uh([[1]],[1,1]),o=Vo(i),l=n>=r?r:n;for(let e=0;e<l;++e){let t=s,l=o,u=a;[o,s,a]=ei.tidy((()=>{let t=Cl(s,[e,e],[n-e,1]),l=Pu(t),u=Cl(s,[e,e],[1,1]),d=mu(Ku(u,0),uh([[-1]]),uh([[1]])),p=yd(u,qo(d,l)),h=jo(t,p);o=1===h.shape[0]?Vo(i):Nl([i,Cl(h,[1,0],[h.shape[0]-1,h.shape[1]])],0);let c=fd(jo(Tl(d,p),l)),f=Cl(s,[e,0],[n-e,r]),m=qo(c,o),g=Eh(o);if(0===e)s=yd(f,Tl(m,Tl(g,f)));else{let t=yd(f,Tl(m,Tl(g,f)));s=Nl([Cl(s,[0,0],[e,r]),t],0)}let y=Eh(m),b=Cl(a,[0,e],[n,a.shape[1]-e]);if(0===e)a=yd(b,Tl(Tl(b,o),y));else{let t=yd(b,Tl(Tl(b,o),y));a=Nl([Cl(a,[0,0],[n,e]),t],1)}return[o,s,a]})),Ei([t,l,u])}return!t&&n>r&&(a=Cl(a,[0,0],[n,r]),s=Cl(s,[0,0],[r,r])),[a,s]}))}var _c,Cc=fi({qr_:function(e,t=!1){if(we(e.rank>=2,(()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`)),2===e.rank)return Tc(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce(((e,t)=>e*t)),r=Ih(kl(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),a=[],s=[];return r.forEach((e=>{let[n,r]=Tc(e,t);a.push(n),s.push(r)})),[kl(ah(a,0),e.shape),kl(ah(s,0),e.shape)]}}});!function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"}(_c||(_c={}));var Ec=fi({computeWeightedLoss_:function(e,t,n=_c.SUM_BY_NONZERO_WEIGHTS){let r=pi(e,"losses","computeWeightedLoss"),a=null;null!=t&&(a=pi(t,"weights","computeWeightedLoss"));let s=null==a?r:qo(r,a);if(n===_c.NONE)return s;if(n===_c.SUM)return Lu(s);if(n===_c.MEAN){if(null==a)return Ad(s);{let e=r.size/a.size,t=jo(Lu(s),Lu(a));return e>1?jo(t,Du(e)):t}}if(n===_c.SUM_BY_NONZERO_WEIGHTS){if(null==a)return jo(Lu(s),Du(r.size));{let e=qo(a,Fd(r.shape)),t=Wo(Lu(Wd(e,Du(0))),"float32");return jo(Lu(s),t)}}throw Error(`Unknown reduction: ${n}`)}});var $c=fi({absoluteDifference_:function(e,t,n,r=_c.SUM_BY_NONZERO_WEIGHTS){let a=pi(e,"labels","absoluteDifference"),s=pi(t,"predictions","absoluteDifference"),i=null;null!=n&&(i=pi(n,"weights","absoluteDifference")),ve(a.shape,s.shape,"Error in absoluteDifference: ");let o=Ko(yd(a,s));return Ec(o,i,r)}});var Ac=fi({cosineDistance_:function(e,t,n,r,a=_c.SUM_BY_NONZERO_WEIGHTS){let s=pi(e,"labels","cosineDistance"),i=pi(t,"predictions","cosineDistance"),o=null;null!=r&&(o=pi(r,"weights","cosineDistance")),ve(s.shape,i.shape,"Error in cosineDistance: ");let l=Du(1),u=yd(l,Lu(qo(s,i),n,!0));return Ec(u,o,a)}});var Rc=fi({hingeLoss_:function(e,t,n,r=_c.SUM_BY_NONZERO_WEIGHTS){let a=pi(e,"labels","hingeLoss"),s=pi(t,"predictions","hingeLoss"),i=null;null!=n&&(i=pi(n,"weights","hingeLoss")),ve(a.shape,s.shape,"Error in hingeLoss: ");let o=Du(1);a=yd(qo(Du(2),a),o);let l=Ap(yd(o,qo(a,s)));return Ec(l,i,r)}});var Fc=fi({huberLoss_:function(e,t,n,r=1,a=_c.SUM_BY_NONZERO_WEIGHTS){let s=pi(e,"labels","huberLoss"),i=pi(t,"predictions","huberLoss"),o=null;null!=n&&(o=pi(n,"weights","huberLoss")),ve(s.shape,i.shape,"Error in huberLoss: ");let l=Du(r),u=Ko(yd(i,s)),d=Md(u,l),p=yd(u,d),h=Go(qo(Du(.5),Ou(d)),qo(l,p));return Ec(h,o,a)}});var Dc=fi({logLoss_:function(e,t,n,r=1e-7,a=_c.SUM_BY_NONZERO_WEIGHTS){let s=pi(e,"labels","logLoss"),i=pi(t,"predictions","logLoss"),o=null;null!=n&&(o=pi(n,"weights","logLoss")),ve(s.shape,i.shape,"Error in logLoss: ");let l=Du(1),u=Du(r),d=fd(qo(s,sd(Go(i,u)))),p=qo(yd(l,s),sd(Go(yd(l,i),u))),h=yd(d,p);return Ec(h,o,a)}});var Mc=fi({meanSquaredError_:function(e,t,n,r=_c.SUM_BY_NONZERO_WEIGHTS){let a=pi(e,"labels","meanSquaredError"),s=pi(t,"predictions","meanSquaredError"),i=null;null!=n&&(i=pi(n,"weights","meanSquaredError")),ve(a.shape,s.shape,"Error in meanSquaredError: ");let o=nh(a,s);return Ec(o,i,r)}});var Oc=fi({sigmoidCrossEntropy_:function(e,t,n,r=0,a=_c.SUM_BY_NONZERO_WEIGHTS){let s=pi(e,"multiClassLabels","sigmoidCrossEntropy"),i=pi(t,"logits","sigmoidCrossEntropy"),o=null;if(null!=n&&(o=pi(n,"weights","sigmoidCrossEntropy")),ve(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),r>0){let e=Du(r),t=Du(1),n=Du(.5);s=Go(qo(s,yd(t,e)),qo(n,e))}let l=function(e,t){let n=pi(e,"labels","sigmoidCrossEntropyWithLogits"),r=pi(t,"logits","sigmoidCrossEntropyWithLogits");ve(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let a=Ap(r),s=qo(r,n),i=id(Wu(fd(Ko(r))));return Go(yd(a,s),i)}(s,i);return Ec(l,o,a)}});var Lc=fi({softmaxCrossEntropy_:function(e,t,n,r=0,a=_c.SUM_BY_NONZERO_WEIGHTS){let s=pi(e,"onehotLabels","softmaxCrossEntropy"),i=pi(t,"logits","softmaxCrossEntropy"),o=null;if(null!=n&&(o=pi(n,"weights","softmaxCrossEntropy")),ve(s.shape,i.shape,"Error in softmaxCrossEntropy: "),r>0){let e=Du(r),t=Du(1),n=Du(s.shape[1]);s=Go(qo(s,yd(t,e)),jo(e,n))}let l=function(e,t,n=-1){if(-1===n&&(n=t.rank-1),n!==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 ${n}`);return hd(((e,t,r)=>{let a=xd(t,[n],!0),s=yd(Wo(t,"float32"),a);r([e,s]);let i=fd(qo(s,e));return{value:Lu(i,[n]),gradFunc:(e,t)=>{let[r,a]=t,s=Tu(e.shape,[n]);return[qo(kl(e,s),yd(Wo(r,"float32"),Wu(a))),qo(kl(e,s),yd(Wu(a),Wo(r,"float32")))]}}}))(e,t)}(s,i);return Ec(l,o,a)}});var zc=fi({sparseFillEmptyRows_:function(e,t,n,r){let a=pi(e,"indices","sparseFillEmptyRows","int32"),s=pi(t,"values","sparseFillEmptyRows"),i=pi(n,"denseShape","sparseFillEmptyRows","int32"),o=pi(r,"defaultValue","sparseFillEmptyRows",s.dtype);if(2!==a.rank)throw new Error(`Indices should be Tensor2D but received shape\n        ${a.shape}`);if(1!==s.rank)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(1!==i.rank)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(0!==o.rank)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:a,values:s,denseShape:i,defaultValue:o},u=ei.runKernel(ra,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}});var Pc=fi({sparseReshape_:function(e,t,n){let r=pi(e,"inputIndices","sparseReshape","int32"),a=pi(t,"inputShape","sparseReshape","int32"),s=pi(n,"newShape","sparseReshape","int32");if(2!==r.rank)throw new Error(`Input indices should be Tensor2D but received shape\n        ${r.shape}`);if(1!==a.rank)throw new Error(`Input shape should be Tensor1D but received shape ${a.shape}`);if(1!==s.rank)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:r,inputShape:a,newShape:s},o=ei.runKernel(aa,i);return{outputIndices:o[0],outputShape:o[1]}}});var Bc=fi({sparseSegmentMean_:function(e,t,n){let r=pi(e,"data","sparseSegmentMean"),a=pi(t,"indices","sparseSegmentMean","int32"),s=pi(n,"segmentIds","sparseSegmentMean","int32");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");
2if(1!==a.rank)throw new Error(`Indices should be Tensor1D but received shape\n          ${a.shape}`);if(1!==s.rank)throw new Error(`Segment ids should be Tensor1D but received shape\n          ${s.shape}`);let i={data:r,indices:a,segmentIds:s};return ei.runKernel(sa,i)}});var Wc=fi({sparseSegmentSum_:function(e,t,n){let r=pi(e,"data","sparseSegmentSum"),a=pi(t,"indices","sparseSegmentSum","int32"),s=pi(n,"segmentIds","sparseSegmentSum","int32");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(1!==a.rank)throw new Error(`Indices should be Tensor1D but received shape\n         ${a.shape}`);if(1!==s.rank)throw new Error(`Segment ids should be Tensor1D but received shape\n         ${s.shape}`);let i={data:r,indices:a,segmentIds:s};return ei.runKernel(ia,i)}});var Vc=fi({stringNGrams_:function(e,t,n,r,a,s,i,o){let l=pi(e,"data","stringNGrams","string");if("string"!==l.dtype)throw new Error("Data must be of datatype string");if(1!==l.shape.length)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=pi(t,"dataSplits","stringNGrams");if("int32"!==u.dtype)throw new Error("Data splits must be of datatype int32");let d={separator:n,nGramWidths:r,leftPad:a,rightPad:s,padWidth:i,preserveShortSequences:o},p={data:l,dataSplits:u},h=ei.runKernel(ha,p,d);return{nGrams:h[0],nGramsSplits:h[1]}}});var Uc=fi({stringSplit_:function(e,t,n=!0){let r=pi(e,"input","stringSplit","string"),a=pi(t,"delimiter","stringSplit","string");if(1!==r.rank)throw new Error(`Input should be Tensor1D but received shape ${r.shape}`);if(0!==a.rank)throw new Error(`Delimiter should be a scalar but received shape ${a.shape}`);let s={skipEmpty:n},i={input:r,delimiter:a},o=ei.runKernel(ca,i,s);return{indices:o[0],values:o[1],shape:o[2]}}});var Gc=fi({stringToHashBucketFast_:function(e,t){let n=pi(e,"input","stringToHashBucketFast","string"),r={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let a={input:n};return ei.runKernel(fa,a,r)}});var Hc=fi({staticRegexReplace_:function(e,t,n,r=!0){let a=pi(e,"input","staticRegexReplace","string"),s={pattern:t,rewrite:n,replaceGlobal:r};return ei.runKernel(da,{x:a},s)}}),jc={fft:Zp,ifft:Jp,rfft:th,irfft:Qp},qc={hammingWindow:Xh,hannWindow:Yh,frame:Zh,stft:Jh},Kc={flipLeftRight:ec,grayscaleToRGB:tc,resizeNearestNeighbor:vc,resizeBilinear:wc,rgbToGrayscale:nc,rotateWithOffset:rc,cropAndResize:Qh,nonMaxSuppression:sc,nonMaxSuppressionAsync:mc,nonMaxSuppressionWithScore:gc,nonMaxSuppressionWithScoreAsync:yc,nonMaxSuppressionPadded:bc,nonMaxSuppressionPaddedAsync:xc,threshold:kc,transform:Ic},Xc={bandPart:Sc,gramSchmidt:Nc,qr:Cc},Yc={absoluteDifference:$c,computeWeightedLoss:Ec,cosineDistance:Ac,hingeLoss:Rc,huberLoss:Fc,logLoss:Dc,meanSquaredError:Mc,sigmoidCrossEntropy:Oc,softmaxCrossEntropy:Lc},Zc={sparseFillEmptyRows:zc,sparseReshape:Pc,sparseSegmentMean:Bc,sparseSegmentSum:Wc},Jc={stringNGrams:Vc,stringSplit:Uc,stringToHashBucketFast:Gc,staticRegexReplace:Hc},Qc={};B(Qc,{Serializable:()=>nf,SerializationMap:()=>rf,getRegisteredName:()=>sf,registerClass:()=>af});var ef=new Map,tf=new Map,nf=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},rf=class e{constructor(){this.classNameMap={}}static getMap(){return null==e.instance&&(e.instance=new e),e.instance}static register(t){e.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function af(e,t,n){we(null!=e.className,(()=>"Class being registered does not have the static className property defined.")),we("string"==typeof e.className,(()=>"className is required to be a string, but got type "+typeof e.className)),we(e.className.length>0,(()=>"Class being registered has an empty-string as its className, which is disallowed.")),void 0===t&&(t="Custom"),void 0===n&&(n=e.className);let r=t+">"+n;return rf.register(e),ef.set(r,e),tf.set(e,r),e}function sf(e){return tf.has(e)?tf.get(e):e.className}var of=class extends nf{minimize(e,t=!1,n){let{value:r,grads:a}=this.computeGradients(e,n);if(null!=n){let e=n.map((e=>({name:e.name,tensor:a[e.name]})));this.applyGradients(e)}else this.applyGradients(a);return Ei(a),t?r:(r.dispose(),null)}get iterations(){return null==this.iterations_&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return pd(e,t)}dispose(){null!=this.iterations_&&Ei(this.iterations_)}async saveIterations(){return null==this.iterations_&&(this.iterations_=0),{name:"iter",tensor:Du(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(of,Symbol.hasInstance,{value:e=>null!=e.minimize&&null!=e.computeGradients&&null!=e.applyGradients});var lf=class extends of{static get className(){return"Adadelta"}constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],null==n&&(this.epsilon=ei.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map((e=>
2e.name)):Object.keys(e)).forEach(((t,n)=>{let r=ei.registeredVariables[t];null==this.accumulatedGrads[n]&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:Ci((()=>gu(r).variable(false)))}),null==this.accumulatedUpdates[n]&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:Ci((()=>gu(r).variable(false)))});let a=Array.isArray(e)?e[n].tensor:e[t];if(null==a)return;let s=this.accumulatedGrads[n].variable,i=this.accumulatedUpdates[n].variable;Ci((()=>{let e=Go(qo(s,this.rho),qo(Ou(a),1-this.rho)),t=qo(jo(Mu(Go(i,this.epsilon)),Mu(Go(s,this.epsilon))),a),n=Go(qo(i,this.rho),qo(Ou(t),1-this.rho));s.assign(e),i.assign(n);let o=Go(qo(t,-this.learningRate),r);r.assign(o)}))})),this.incrementIterations()}dispose(){null!=this.accumulatedUpdates&&(Ei(this.accumulatedGrads.map((e=>e.variable))),Ei(this.accumulatedUpdates.map((e=>e.variable))))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){let t=(e=await this.extractIterations(e)).length/2;this.accumulatedGrads=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(false)}))),this.accumulatedUpdates=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(false)})))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}},uf=class extends of{static get className(){return"Adagrad"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{let r=ei.registeredVariables[t];null==this.accumulatedGrads[n]&&(this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:Ci((()=>Vl(r.shape,this.initialAccumulatorValue).variable(!1)))});let a=Array.isArray(e)?e[n].tensor:e[t];if(null==a)return;let s=this.accumulatedGrads[n].variable;Ci((()=>{let e=Go(s,Ou(a));s.assign(e);let t=Go(qo(jo(a,Mu(Go(e,ei.backend.epsilon()))),-this.learningRate),r);r.assign(t)}))})),this.incrementIterations()}dispose(){null!=this.accumulatedGrads&&Ei(this.accumulatedGrads.map((e=>e.variable)))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e);this.accumulatedGrads=e.map((e=>({originalName:e.name,variable:e.tensor.variable(false)})))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}},df=class extends of{static get className(){return"Adam"}constructor(e,t,n,r=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],Ci((()=>{this.accBeta1=Du(t).variable(),this.accBeta2=Du(n).variable()})),null==r&&(this.epsilon=ei.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);Ci((()=>{let n=yd(1,this.accBeta1),r=yd(1,this.accBeta2);t.forEach(((t,a)=>{let s=ei.registeredVariables[t];null==this.accumulatedFirstMoment[a]&&(this.accumulatedFirstMoment[a]={originalName:`${t}/m`,variable:Ci((()=>gu(s).variable(false)))}),null==this.accumulatedSecondMoment[a]&&(this.accumulatedSecondMoment[a]={originalName:`${t}/v`,variable:Ci((()=>gu(s).variable(false)))});let i=Array.isArray(e)?e[a].tensor:e[t];if(null==i)return;let o=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,u=Go(qo(o,this.beta1),qo(i,1-this.beta1)),d=Go(qo(l,this.beta2),qo(Ou(i),1-this.beta2)),p=jo(u,n),h=jo(d,r);o.assign(u),l.assign(d);let c=Go(qo(jo(p,Go(Mu(h),this.epsilon)),-this.learningRate),s);s.assign(c)})),this.accBeta1.assign(qo(this.accBeta1,this.beta1)),this.accBeta2.assign(qo(this.accBeta2,this.beta2))})),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),null!=this.accumulatedFirstMoment&&Ei(this.accumulatedFirstMoment.map((e=>e.variable))),null!=this.accumulatedSecondMoment&&Ei(this.accumulatedSecondMoment.map((e=>e.variable)))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}
2))))}async setWeights(e){e=await this.extractIterations(e),Ci((()=>{this.accBeta1.assign(Fu(this.beta1,this.iterations_+1)),this.accBeta2.assign(Fu(this.beta2,this.iterations_+1))}));let t=e.length/2;this.accumulatedFirstMoment=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(false)}))),this.accumulatedSecondMoment=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(false)})))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}},pf=class extends of{static get className(){return"Adamax"}constructor(e,t,n,r=null,a=0){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=a,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],Ci((()=>{this.iteration=Du(0).variable(),this.accBeta1=Du(t).variable()})),null==r&&(this.epsilon=ei.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map((e=>e.name)):Object.keys(e);Ci((()=>{let n=yd(1,this.accBeta1),r=jo(-this.learningRate,Go(qo(this.iteration,this.decay),1));t.forEach(((t,a)=>{let s=ei.registeredVariables[t];null==this.accumulatedFirstMoment[a]&&(this.accumulatedFirstMoment[a]={originalName:`${t}/m`,variable:gu(s).variable(false)}),null==this.accumulatedWeightedInfNorm[a]&&(this.accumulatedWeightedInfNorm[a]={originalName:`${t}/v`,variable:gu(s).variable(false)});let i=Array.isArray(e)?e[a].tensor:e[t];if(null==i)return;let o=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,u=Go(qo(o,this.beta1),qo(i,1-this.beta1)),d=qo(l,this.beta2),p=Ko(i),h=$d(d,p);o.assign(u),l.assign(h);let c=Go(qo(jo(r,n),jo(u,Go(h,this.epsilon))),s);s.assign(c)})),this.iteration.assign(Go(this.iteration,1)),this.accBeta1.assign(qo(this.accBeta1,this.beta1))})),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),null!=this.accumulatedFirstMoment&&Ei(this.accumulatedFirstMoment.map((e=>e.variable))),null!=this.accumulatedWeightedInfNorm&&Ei(this.accumulatedWeightedInfNorm.map((e=>e.variable)))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}},hf=class extends of{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{let r=Array.isArray(e)?e[n].tensor:e[t];if(null==r)return;let a=ei.registeredVariables[t];Ci((()=>{let e=Go(qo(this.c,r),a);a.assign(e)}))})),this.incrementIterations()}setLearningRate(e){this.learningRate=e,null!=this.c&&this.c.dispose(),this.c=$i(Du(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(0!==(e=await this.extractIterations(e)).length)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}},cf=class extends hf{static get className(){return"Momentum"}constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=Du(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{let r=ei.registeredVariables[t];null==this.accumulations[n]&&(this.accumulations[n]={originalName:`${t}/momentum`,variable:Ci((()=>gu(r).variable(!1)))});let a=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];null!=s&&Ci((()=>{let e,t=Go(qo(this.m,a),s);e=this.useNesterov?Go(qo(this.c,Go(s,qo(t,this.m))),r):Go(qo(this.c,t),r),a.assign(t),r.assign(e)}))})),this.incrementIterations()}dispose(){this.m.dispose(),null!=this.accumulations&&Ei(this.accumulations.map((e=>e.variable)))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map((e=>({name:e.originalName,tensor:e.variable}
2))))}async setWeights(e){e=await this.extractIterations(e);this.accumulations=e.map((e=>({originalName:e.name,variable:e.tensor.variable(false)})))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}},ff=class extends of{static get className(){return"RMSProp"}constructor(e,t=.9,n=0,r=null,a=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=a,null==r&&(this.epsilon=ei.backend.epsilon()),null==e)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map((e=>e.name)):Object.keys(e)).forEach(((t,n)=>{let r=ei.registeredVariables[t],a=!1;null==this.accumulatedMeanSquares[n]&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:Ci((()=>gu(r).variable(a)))}),null==this.accumulatedMoments[n]&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:Ci((()=>gu(r).variable(a)))}),null==this.accumulatedMeanGrads[n]&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:Ci((()=>gu(r).variable(a)))});let s=Array.isArray(e)?e[n].tensor:e[t];if(null==s)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;Ci((()=>{let e=Go(qo(i,this.decay),qo(Ou(s),1-this.decay));if(this.centered){let t=this.accumulatedMeanGrads[n].variable,a=Go(qo(t,this.decay),qo(s,1-this.decay)),l=jo(qo(s,this.learningRate),Mu(yd(e,Go(Ou(a),this.epsilon)))),u=Go(qo(o,this.momentum),l);i.assign(e),t.assign(a),o.assign(u);let d=yd(r,u);r.assign(d)}else{let e=Go(qo(i,this.decay),qo(Ou(s),1-this.decay)),t=Go(qo(o,this.momentum),jo(qo(s,this.learningRate),Mu(Go(e,this.epsilon))));i.assign(e),o.assign(t);let n=yd(r,t);r.assign(n)}}))})),this.incrementIterations()}dispose(){null!=this.accumulatedMeanSquares&&Ei(this.accumulatedMeanSquares.map((e=>e.variable))),null!=this.accumulatedMeanGrads&&this.centered&&Ei(this.accumulatedMeanGrads.map((e=>e.variable))),null!=this.accumulatedMoments&&Ei(this.accumulatedMoments.map((e=>e.variable)))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map((e=>({name:e.originalName,tensor:e.variable}))))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))),this.accumulatedMoments=e.slice(t,2*t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))),this.centered&&(this.accumulatedMeanGrads=e.slice(2*t,3*t).map((e=>({originalName:e.name,variable:e.tensor.variable(n)}))))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}},mf=[lf,uf,df,pf,cf,ff,hf];var gf={};B(gf,{CompositeArrayBuffer:()=>xi,browserFiles:()=>wf,browserHTTPRequest:()=>Ef,concatenateArrayBuffers:()=>Ji,copyModel:()=>Oo,decodeWeights:()=>Ui,decodeWeightsStream:()=>Ki,encodeWeights:()=>Vi,fromMemory:()=>Ff,fromMemorySync:()=>Df,getLoadHandlers:()=>uo,getModelArtifactsForJSON:()=>no,getModelArtifactsForJSONSync:()=>to,getModelArtifactsInfoForJSON:()=>ro,getSaveHandlers:()=>lo,getWeightSpecs:()=>ao,http:()=>Cf,isHTTPScheme:()=>Tf,listModels:()=>Do,loadWeights:()=>If,moveModel:()=>Lo,registerLoadRouter:()=>oo,registerSaveRouter:()=>io,removeModel:()=>Mo,weightsLoaderFactory:()=>Sf,withSaveHandler:()=>Mf,withSaveHandlerSync:()=>Of});function yf(e){return new Promise((e=>setTimeout(e))).then(e)}var bf=class e{constructor(t){if(!ut().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(e.URL_SCHEME)&&(t=t.slice(e.URL_SCHEME.length)),(null==t||0===t.length)&&(t="model"),this.modelJsonFileName=t+".json",this.weightDataFileName=t+".weights.bin"}async save(e){if("undefined"==typeof document)throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=xi.join(e.weightData),n=window.URL.createObjectURL(new Blob([t],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let t=eo(e,[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}]),r=window.URL.createObjectURL(new Blob([JSON.stringify(t)],{type:"application/json"})),a=null==this.modelJsonAnchor?document.createElement("a"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=r,await yf((()=>a.dispatchEvent(new MouseEvent("click")))),null!=e.weightData){let e=null==this.weightDataAnchor?document.createElement("a"):this.weightDataAnchor;e.download=this.weightDataFileName,e.href=n,await yf((()=>
2e.dispatchEvent(new MouseEvent("click"))))}return{modelArtifactsInfo:ro(e)}}}};bf.URL_SCHEME="downloads://";var xf=class{constructor(e){if(null==e||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise(((e,t)=>{let n=new FileReader;n.onload=n=>{let r=JSON.parse(n.target.result),a=r.modelTopology;if(null==a)return void t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));if(null==r.weightsManifest)return void t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));if(0===this.weightsFiles.length)return void e({modelTopology:a});let s=no(r,(e=>this.loadWeights(e)));e(s)},n.onerror=e=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)}))}loadWeights(e){let t=[],n=[];for(let r of e)t.push(...r.weights),n.push(...r.paths);let r=this.checkManifestAndWeightFiles(e),a=n.map((e=>this.loadWeightsFile(e,r[e])));return Promise.all(a).then((e=>[t,e]))}loadWeightsFile(e,t){return new Promise(((n,r)=>{let a=new FileReader;a.onload=e=>{let t=e.target.result;n(t)},a.onerror=t=>r(`Failed to weights data from file of path '${e}'.`),a.readAsArrayBuffer(t)}))}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map((e=>Qi(e.name))),r={};for(let a of e)a.paths.forEach((e=>{let a=Qi(e);if(-1!==t.indexOf(a))throw new Error(`Duplicate file basename found in weights manifest: '${a}'`);if(t.push(a),-1===n.indexOf(a))throw new Error(`Weight file with basename '${a}' is not provided.`);r[e]=this.weightsFiles[n.indexOf(a)]}));if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return r}};function wf(e){return new xf(e)}function vf(e,t,n,r){var a;we(null!=(a=e)&&Array.isArray(a)&&a.length>0,(()=>"promises must be a none empty array")),function(e,t){we(e>=0&&e<=1,(()=>`Progress fraction must be in range [0, 1], but got startFraction ${e}`)),we(t>=0&&t<=1,(()=>`Progress fraction must be in range [0, 1], but got endFraction ${t}`)),we(t>=e,(()=>`startFraction must be no more than endFraction, but got startFraction ${e} and endFraction ${t}`))}(n=null==n?0:n,r=null==r?1:r);let s=0;return Promise.all(e.map((a=>(a.then((a=>{let i=n+ ++s/e.length*(r-n);return t(i),a})),a))))}async function kf(e,t){null==t&&(t={});let n=null==t.fetchFunc?ut().platform.fetch:t.fetchFunc,r=e.map((e=>n(e,t.requestInit,{isBinary:!0}))),a=(null==t.onProgress?await Promise.all(r):await vf(r,t.onProgress,0,.5)).map((e=>e.arrayBuffer()));return null==t.onProgress?await Promise.all(a):await vf(a,t.onProgress,.5,1)}async function If(e,t="",n,r){return Sf((e=>kf(e,{requestInit:r})))(e,t,n)}function Sf(e){return async(t,n="",r)=>{let a=t.map((()=>!1)),s={},i=null!=r?r.map((()=>!1)):[],o=[];if(t.forEach(((e,t)=>{let n=0;e.weights.forEach((e=>{let l="quantization"in e?e.quantization.dtype:e.dtype,u=bi[l]*Ie(e.shape),d=()=>{a[t]=!0,null==s[t]&&(s[t]=[]),s[t].push({manifestEntry:e,groupOffset:n,sizeBytes:u})};null!=r?r.forEach(((t,n)=>{t===e.name&&(d(),i[n]=!0)})):d(),o.push(e.name),n+=u}))})),!i.every((e=>e))){let e=r.filter(((e,t)=>!i[t]));throw new Error(`Could not find weights in manifest with names: ${e.join(", ")}. \nManifest JSON has weights with names: ${o.join(", ")}.`)}let l=a.reduce(((e,t,n)=>(t&&e.push(n),e)),[]),u=[];l.forEach((e=>{t[e].paths.forEach((e=>{let t=n+(n.endsWith("/")?"":"/")+e;u.push(t)}))}));let d=await e(u),p={},h=0;return l.forEach((e=>{let n=t[e].paths.length,r=new xi(d.slice(h,h+n));s[e].forEach((e=>{let t=Ui(r.slice(e.groupOffset,e.groupOffset+e.sizeBytes),[e.manifestEntry]);for(let e in t)p[e]=t[e]})),h+=n})),p}}so.registerSaveRouter((e=>ut().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(bf.URL_SCHEME)?function(e="model"){return new bf(e)}(e.slice(bf.URL_SCHEME.length)):null));var Nf=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",null==t&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,null!=t.fetchFunc?(we("function"==typeof t.fetchFunc,(()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)")),this.fetch=t.fetchFunc):this.fetch=ut().platform.fetch,we(null!=e&&e.length>0,(()=>"URL path for http must not be null, undefined or empty.")),Array.isArray(e)&&we(2===e.length,(()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`)),this.path=e,null!=t.requestInit&&null!=t.requestInit.body)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{},this.loadOptions=t}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=eo(e,[{paths:["./model.weights.bin"],weights:e.weightSpecs}]);if(t.body.append("model.json",new Blob([JSON.stringify(n)],{type:"application/json"}),"model.json"),null!=e.weightData){let n=xi.join(e.weightData);t.body.append("model.weights.bin",new Blob([n],{type:"application/octet-stream"}),"model.weights.bin")}let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:ro(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async loadModelJSON(){let e,t=await this.fetch(this.path,this.requestInit);if(!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.`);try{e=await t.json()}catch(e){let t=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?t+=" 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.":t+=" Please make sure the server is serving valid JSON for this request.",new Error(t)}let n=e.modelTopology,r=e.weightsManifest;if(null==n&&null==r)throw new Error(`The JSON from HTTP path ${this.path}
2 contains neither model topology or manifest for weights.`);return e}async load(){if(this.loadOptions.streamWeights)return this.loadStream();return no(await this.loadModelJSON(),(e=>this.loadWeights(e)))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),n=ao(e.weightsManifest);return Object.assign(Object.assign({},e),{weightSpecs:n,getWeightStream:()=>function(e,t){var n;let r,a=null==t.fetchFunc?ut().platform.fetch:t.fetchFunc,s=0;return null===(n=t.onProgress)||void 0===n||n.call(t,0),new ReadableStream({pull:async n=>{for(var i;s<e.length;){r||(r=(await a(e[s],t.requestInit,{isBinary:!0})).body.getReader());let{done:o,value:l}=await r.read();if(!o)return void n.enqueue(l);s++,r=void 0,null===(i=t.onProgress)||void 0===i||i.call(t,s/e.length)}n.close()}})}(t,this.loadOptions)})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=function(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),a=n>t?e.substring(n):"";return[r+"/",a]}(t),a=this.weightPathPrefix||n,s=[],i=[];for(let t of e)for(let e of t.paths)null!=this.weightUrlConverter?i.push(this.weightUrlConverter(e)):s.push(a+e+r);return this.weightUrlConverter&&s.push(...await Promise.all(i)),s}async loadWeights(e){let t=await this.getWeightUrls(e);return[ao(e),await kf(t,this.loadOptions)]}};function Tf(e){return null!=e.match(Nf.URL_SCHEME_REGEX)}Nf.URL_SCHEME_REGEX=/^https?:\/\//;var _f=(e,t)=>{if("undefined"==typeof fetch&&(null==t||null==t.fetchFunc))return null;{let n=!0;if(n=Array.isArray(e)?e.every((e=>Tf(e))):Tf(e),n)return Cf(e,t)}return null};function Cf(e,t){return new Nf(e,t)}function Ef(e,t){return Cf(e,t)}so.registerSaveRouter(_f),so.registerLoadRouter(_f);var $f=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},Af=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},Rf=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function Ff(e,t,n,r){return new Rf(Df(...arguments))}function Df(e,t,n,r){return 1===arguments.length?null!=e.modelTopology||null!=e.weightSpecs?new $f(e):(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 $f({modelTopology:e})):(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 $f({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function Mf(e){return new Af(e)}function Of(e){return new Af(e)}var Lf={};B(Lf,{confusionMatrix:()=>zf});var zf=fi({confusionMatrix_:function(e,t,n){let r=pi(e,"labels","confusionMatrix"),a=pi(t,"predictions","confusionMatrix");we(null==n||n>0&&Number.isInteger(n),(()=>`If provided, numClasses must be a positive integer, but got ${n}`)),we(1===r.rank,(()=>`Expected the rank of labels to be 1, but got ${r.rank}`)),we(1===a.rank,(()=>`Expected the rank of predictions to be 1, but got ${a.rank}`)),we(r.shape[0]===a.shape[0],(()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${a.shape[0]}. Labels and predictions should have the same number of elements.`)),we(n>0&&Number.isInteger(n),(()=>`numClasses is required to be a positive integer, but got ${n}`));let s=Vd(Wo(r,"int32"),n),i=Vd(Wo(a,"int32"),n),o=Eh(s),l=Tl(o,i);return Wo(l,"int32")}}),Pf={};B(Pf,{draw:()=>qf,fromPixels:()=>Kf,fromPixelsAsync:()=>Gf,toPixels:()=>jf});var Bf,Wf=!1;function Vf(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(null==e)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,r=!1,a=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if("undefined"!=typeof ImageData&&e instanceof ImageData)r=!0;else if("undefined"!=typeof HTMLVideoElement&&e instanceof HTMLVideoElement)a=!0;else if("undefined"!=typeof HTMLImageElement&&e instanceof HTMLImageElement)s=!0;else if(null!=e.getContext)i=!0;else{if(!("undefined"!=typeof ImageBitmap&&e instanceof ImageBitmap))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 ${e.constructor.name}`);o=!0}if(null!=La(Ca,ei.backendName)){let n={pixels:e},r={numChannels:t};return ei.runKernel(Ca,n,r)}let l,u,[d,p]=a?[e.videoWidth,e.videoHeight]:[e.width,e.height];if(i)l=e.getContext("2d").getImageData(0,0,d,p).data;else if(r||n)l=e.data;else if(s||a||o){if(null==Bf)if("undefined"==typeof document){if("undefined"==typeof OffscreenCanvas||"undefined"==typeof OffscreenCanvasRenderingContext2D)throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");Bf=new OffscreenCanvas(1,1).getContext("2d")}else Bf=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Bf.canvas.width=d,Bf.canvas.height=p,Bf.drawImage(e,0,0,d,p),l=Bf.getImageData(0,0,d,p).data}if(4===t)u=new Int32Array(l);else{let e=d*p;u=new Int32Array(e*t);for(let n=0;n<e;n++)for(let e=0;e<t;++e)u[n*t+e]=l[4*n+e]}
2return dh(u,[p,d,t],"int32")}function Uf(e){return"undefined"!=typeof window&&"undefined"!=typeof ImageBitmap&&window.hasOwnProperty("createImageBitmap")&&!(e instanceof ImageBitmap)&&function(e){return null!=e&&0!==e.width&&0!==e.height}(e)&&!function(e){return null!=e&&e.data instanceof Uint8Array}(e)}async function Gf(e,t=3){let n=null;if(ut().getBool("WRAP_TO_IMAGEBITMAP")&&Uf(e)){let t;try{t=await createImageBitmap(e,{premultiplyAlpha:"none"})}catch(e){t=null}n=null!=t&&t.width===e.width&&t.height===e.height?t:e}else n=e;return Vf(n,t)}function Hf(e){if(2!==e.rank&&3!==e.rank)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${e.rank}.`);let t=2===e.rank?1:e.shape[2];if(t>4||2===t)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if("float32"!==e.dtype&&"int32"!==e.dtype)throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}async function jf(e,t){let n=pi(e,"img","toPixels");if(!(e instanceof $s)){let e=n;n=Wo(e,"int32"),e.dispose()}Hf(n);let[r,a]=n.shape.slice(0,2),s=2===n.rank?1:n.shape[2],i=await n.data(),o="float32"===n.dtype?255:1,l=new Uint8ClampedArray(a*r*4);for(let e=0;e<r*a;++e){let t=[0,0,0,255];for(let r=0;r<s;r++){let a=i[e*s+r];if("float32"===n.dtype){if(a<0||a>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${a}.`)}else if("int32"===n.dtype&&(a<0||a>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${a}.`);1===s?(t[0]=a*o,t[1]=a*o,t[2]=a*o):t[r]=a*o}let r=4*e;l[r+0]=Math.round(t[0]),l[r+1]=Math.round(t[1]),l[r+2]=Math.round(t[2]),l[r+3]=Math.round(t[3])}if(null!=t){Wf||null!=La(pn,ei.backendName)&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),Wf=!0),t.width=a,t.height=r;let e=t.getContext("2d"),n=new ImageData(l,a,r);e.putImageData(n,0,0)}return n!==e&&n.dispose(),l}function qf(e,t,n){let r=pi(e,"img","draw");if(!(e instanceof $s)){let e=r;r=Wo(e,"int32"),e.dispose()}Hf(r),function(e){let t=(null==e?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}(null==n?void 0:n.imageOptions);let a={image:r},s={canvas:t,options:n};ei.runKernel(pn,a,s)}var Kf=fi({fromPixels_:Vf}),Xf={};function Yf(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if("int32"!==t.dtype)throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(0===Ie(e.shape))throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let a=t.shape,s=a[a.length-1],i=1;for(let e=0;e<a.length-1;++e)i*=a[e];let o=e.shape,l=a.slice();l.pop();let u=1;for(let e=s;e<n;++e)u*=o[e],l.push(o[e]);let d=[...Xe(e.shape).map((e=>e/u)),1].slice(0,s);return[l,i,u,d]}B(Xf,{prepareAndValidate:()=>Yf});var Zf={};B(Zf,{assertParamsValid:()=>em,computeFlatOffset:()=>cm,computeOutShape:()=>nm,getNormalizedAxes:()=>im,isSliceContinous:()=>hm,maskToAxes:()=>tm,parseSliceParams:()=>fm,sliceInfo:()=>mm,startForAxis:()=>dm,startIndicesWithElidedDims:()=>om,stopForAxis:()=>pm,stopIndicesWithElidedDims:()=>lm,stridesForAxis:()=>um,stridesWithElidedDims:()=>rm});var Jf=-2,Qf=-1;function em(e,t,n){let r=e.shape.length;we(r===t.length,(()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`)),we(r===n.length,(()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`));for(let a=0;a<r;++a)we(t[a]+n[a]<=e.shape[a],(()=>`Error in slice${r}D: begin[${a}] + size[${a}] (${t[a]+n[a]}) would overflow input.shape[${a}] (${e.shape[a]})`))}function tm(e){let t=[],n=0;for(;e>0;)1&e&&t.push(n),e/=2,n++;return t}function nm(e,t,n){let r=[];for(let a=0;a<e.length;a++)r[a]=Math.ceil((t[a]-e[a])/n[a]);return r}function rm(e,t,n,r){let a=[...e];for(let e=a.length;e<r.length;e++)a.push(1);for(let e=0;e<n;e++)0===e?a[t]=1:(a.splice(t,0,1),a.pop());return a}function am(e,t,n){return n<=e?n:n-(t-1)}function sm(e,t){let n=[];for(let r=0;r<e;r++)n.push(t+r);return n}function im(e,t,n,r,a,s,i,o,l){let u=e.length,d=new Array(u),p=new Array(u),h=new Array(u);if(t.length&&n>0){let l=t[0],u=n+1;d=om(i,l,u,r,e),p=lm(o,l,u,a,e),h=rm(s,l,u,e)}else for(let t=0;t<u;t++)d[t]=dm(i,r,s,e,t,l),p[t]=pm(o,a,s,e,t,l),h[t]=um(s,t,l);return{begin:d,end:p,strides:h}}function om(e,t,n,r,a){let s=[...a],i=sm(n,t);for(let a=0;a<s.length;a++)if(i.indexOf(a)>-1)s[a]=0;else{let i=am(t,n,a),o=r[i];e&1<<i&&(o=0),s[a]=o}return s}function lm(e,t,n,r,a){let s=[...a],i=sm(n,t);for(let a=0;a<s.length;a++)if(i.indexOf(a)>-1)s[a]=Number.MAX_SAFE_INTEGER;else{let i=am(t,n,a),o=r[i];e&1<<i&&(o=Number.MAX_SAFE_INTEGER),s[a]=o}for(let e=0;e<s.length;e++){let t=a[e];s[e]<0&&(s[e]+=t),s[e]=fe(0,s[e],a[e])}return s}function um(e,t,n){let r=e[t];return(n&1<<t||null==r)&&(r=1),r}function dm(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||null==i)&&(i=o>0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),i=fe(0,i,l-1),i}function pm(e,t,n,r,a,s){let i=t[a],o=n[a]||1;(e&1<<a||s&1<<a||null==i)&&(i=o>0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);let l=r[a];return i<0&&(i+=l),i=o>0?fe(0,i,l):fe(-1,i,l-1),i}function hm(e,t,n){let r=n.length;for(let e=0;e<n.length;e++)if(n[e]>1){r=e;break}for(let a=r+1;a<n.length;a++)if(t[a]>0||n[a]!==e[a])return!1;return!0}function cm(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r<e.length-1;r++)n+=e[r]*t[r];return n}function fm(e,t,n){let r,a,s=e.shape.length;return r="number"==typeof t?[t,...new Array(s-1).fill(0)]:t.length<s?t.concat(new Array(s-t.length).fill(0)):t.slice(),r.forEach((e=>{we(-1!==e,(()=>"slice() does not support negative begin indexing."))})),a=null==n?new Array(s).fill(-1):"number"==typeof n?[n,...new Array(s-1).fill(-1)]:n.length<s?n.concat(new Array(s-n.length).fill(-1)):n,a=a.map(((t,n)=>t>=0?t:(we(-1===t,(()=>`Negative size values should be exactly -1 but got ${t} for the slice() size at index ${n}.`)),e.shape[n]-r[n]))),[r,a]}function mm(e,t,n,r,a,s,i,o,l){let u;if(null==r?(u=new Array(t.length),u.fill(1)):u=r,null!=i&&i&i-1)throw new Error("Multiple ellipses in slice is not allowed.");let d=!1,p={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:n.slice(),strides:u.slice(),beginMask:a,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let e=0;e<p.dims;
2e++)d&&1<<e&o&&p.numAddAxisAfterEllipsis++,1<<e&i&&(d=!0);d||(p.ellipsisMask|=1<<p.dims,p.dims++);let h={dims:e.length,beginMask:0,endMask:0,beginValid:!1,endValid:!1};!function(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let n=0;t.beginValid=null!=e.begin,t.endValid=null!=e.end,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let r=0;r<e.dims;r++)if(1<<r&e.ellipsisMask){let a=Math.min(t.dims-(e.dims-r)+1+e.numAddAxisAfterEllipsis,t.dims);for(;n<a;n++)t.begin[n]=0,t.end[n]=0,t.strides[n]=1,t.beginMask|=1<<n,t.endMask|=1<<n,t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(-1),t.inputShapeGatherIndicesSparse[n]=r}else if(1<<r&e.newAxisMask)t.finalShapeGatherIndices.push(Jf),t.finalShapeGatherIndicesSparse.push(-1);else{if(n===t.begin.length)throw Error(`Index out of range using input dim ${n}; input has only ${t.dims} dims, ${t.begin.length}.`);null!=e.begin&&(t.begin[n]=e.begin[r]),null!=e.end&&(t.end[n]=e.end[r]),t.strides[n]=e.strides[r],e.beginMask&1<<r&&(t.beginMask|=1<<n),e.endMask&1<<r&&(t.endMask|=1<<n),e.shrinkAxisMask&1<<r?(t.finalShapeGatherIndices.push(Qf),t.finalShapeGatherIndicesSparse.push(-1),t.shrinkAxisMask|=1<<n):(t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(r)),t.inputShapeGatherIndicesSparse[n]=r,n++}}(p,h);let c=!0,f=!0,m=!0,g=[],y=[];for(let t=0;t<e.length;++t){if(0===h.strides[t])throw Error(`strides[${t}] must be non-zero`);let n=!!(h.shrinkAxisMask&1<<t),r=e[t];if(-1===r){g.push(n?1:-1);continue}let a=[h.beginMask&1<<t,h.endMask&1<<t],s=[h.strides[t]>0?0:-1,h.strides[t]>0?r:r-1];if(n&&h.strides[t]<=0)throw Error("only stride 1 allowed on non-range indexing.");m=m&&1===h.strides[t];let i=!!(h.beginMask&1<<t&&h.endMask&1<<t);if(h.beginValid&&h.endValid){if(n){let e=h.begin[t]<0?r+h.begin[t]:h.begin[t];if(h.begin[t]=e,h.end[t]=h.begin[t]+1,e<0||e>=r)throw Error(`slice index ${h.begin[t]} of dimension ${t} out of bounds.`)}else h.begin[t]=gm(h.begin[t],0,h.strides[t],r,a,s),h.end[t]=gm(h.end[t],1,h.strides[t],r,a,s);let e=1===h.strides[t]&&0===h.begin[t]&&h.end[t]===r;c=c&&e,f=f&&(0===t&&1===h.strides[t]||e)}else c=c&&1===h.strides[t]&&i,f=f&&(0===t&&1===h.strides[t]||i);let o,l=!1;if(h.beginValid&&h.endValid?(o=h.end[t]-h.begin[t],l=!0):n?(o=1,l=!0):i&&r>=0&&(o=h.strides[t]<0?-r:r,l=!0),l){let e;e=0===o||o<0!=h.strides[t]<0?0:Math.trunc(o/h.strides[t])+(o%h.strides[t]!=0?1:0),g.push(e)}else g.push(-1)}for(let e=0;e<h.finalShapeGatherIndices.length;++e){let t=h.finalShapeGatherIndices[e];t>=0?y.push(g[t]):t===Jf&&y.push(1)}return{finalShapeSparse:y.filter(((e,t)=>h.finalShapeGatherIndices[t]!==Jf)),finalShape:y,isIdentity:c,sliceDim0:f,isSimpleSlice:m,begin:h.begin,end:h.end,strides:h.strides}}function gm(e,t,n,r,a,s){if(a[t])return n>0?s[t]:s[t+1&1];{let t=e<0?r+e:e;return t<s[0]?s[0]:t>s[1]?s[1]:t}}var ym="4.21.0",bm=class{static sgd(e){return new hf(e)}static momentum(e,t,n=!1){return new cf(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,a=!1){return new ff(e,t,n,r,a)}static adam(e=.001,t=.9,n=.999,r=null){return new df(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new lf(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,a=0){return new pf(e,t,n,r,a)}static adagrad(e,t=.1){return new uf(e,t)}},xm=bm,wm="undefined"!=typeof requestAnimationFrame?requestAnimationFrame:"undefined"!=typeof setImmediate?setImmediate:e=>e();function vm(){return new Promise((e=>wm((()=>e()))))}var km,Im={};function Sm(e,t){let n=e[0].length;e.forEach(((e,t)=>{we(e.length===n,(()=>`Error in concat${n}D: rank of tensors[${t}] must be the same as the rank of the rest (${n})`))})),we(t>=0&&t<n,(()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`));let r=e[0];e.forEach(((e,a)=>{for(let s=0;s<n;s++)we(s===t||e[s]===r[s],(()=>`Error in concat${n}D: Shape of tensors[${a}] (${e}) does not match the shape of the rest (${r}) along the non-concatenated axis ${a}.`))}))}function Nm(e,t){let n=e[0].slice();for(let r=1;r<e.length;r++)n[t]+=e[r][t];return n}function Tm(e,t,n){let r=new Array;
2if(null==n&&null==t)return r;if(null==t)for(;r.length<e+n.length;)r.push(-1);else r=t.slice();if(null==n)return r;if(e+n.length!==r.length)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.rank = ${e+n.length}, but shape.rank = ${r.length}`);for(let a=1;a<n.length;++a){let s=n[a],i=r[r.length-n.length+a],o=r[i];if(s>=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${a+e}] = ${s} but shape[${a+e}] = ${o}`)}else r[i]=s}return r}function _m(e){let t={FIRST_DIM_SIZE:km.FIRST_DIM_SIZE,VALUE_ROWIDS:km.VALUE_ROWIDS,ROW_LENGTHS:km.ROW_LENGTHS,ROW_SPLITS:km.ROW_SPLITS,ROW_LIMITS:km.ROW_LIMITS,ROW_STARTS:km.ROW_STARTS},n=[];for(let r of e){if(!(r in t))break;n.push(t[r])}return n}function Cm(e){return 0===e.length?0:e[0]===km.FIRST_DIM_SIZE?e.length-1:e.length}function Em(e,t){if(null==e||null==t)return;let n=e.length,r=t.length;if(n>=r)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${n} must be less than ragged tensor input flatValues.rank = ${r})`);for(let a=0;a<Math.min(n,r-1);++a){let n=e[a],r=t[a+1];if(n>=0&&r>=0&&1!==n&&n!==r)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${a-e.length}] = ${n} but ragged tensor input.flatValues.shape[${a-e.length}] = ${r}`)}}B(Im,{ERF_A1:()=>Wm,ERF_A2:()=>Vm,ERF_A3:()=>Um,ERF_A4:()=>Gm,ERF_A5:()=>Hm,ERF_P:()=>Bm,PARALLELIZE_THRESHOLD:()=>$m,RowPartitionType:()=>km,SELU_SCALE:()=>Pm,SELU_SCALEALPHA:()=>zm,applyActivation:()=>Vh,assertAndGetBroadcastShape:()=>cu,assertAxesAreInnerMostDims:()=>_u,assertParamsConsistent:()=>Sm,assignToTypedArray:()=>Zm,axesAreInnerMostDims:()=>Iu,calculateShapes:()=>yh,checkEinsumDimSizes:()=>ig,checkPadOnDimRoundingMode:()=>vl,combineLocations:()=>Su,combineRaggedTensorToTensorShapes:()=>Tm,complexWithEvenIndex:()=>Km,complexWithOddIndex:()=>Xm,computeConv2DInfo:()=>dl,computeConv3DInfo:()=>pl,computeDefaultPad:()=>hl,computeDilation2DInfo:()=>ol,computeOptimalWindowSize:()=>Am,computeOutAndReduceShapes:()=>Nu,computeOutShape:()=>Nm,computePool2DInfo:()=>ll,computePool3DInfo:()=>ul,convertConv2DDataFormat:()=>wl,decodeEinsumEquation:()=>ag,eitherStridesOrDilationsAreOne:()=>bl,expandShapeToKeepDim:()=>Tu,exponent:()=>Qm,exponents:()=>Jm,fromStringArrayToUint8:()=>Cg,fromUint8ToStringArray:()=>_g,getAxesPermutation:()=>Cu,getBroadcastDims:()=>pu,getComplexWithIndex:()=>Ym,getEinsumComputePath:()=>og,getEinsumPermutation:()=>sg,getFusedBiasGradient:()=>Wh,getFusedDyActivation:()=>Bh,getImageCenter:()=>Rm,getInnerMostAxes:()=>$u,getPermuted:()=>Dm,getRaggedRank:()=>Cm,getReductionAxes:()=>hu,getReshaped:()=>Fm,getReshapedPermuted:()=>Mm,getRowPartitionTypesHelper:()=>_m,getSliceBeginCoords:()=>Om,getSliceSize:()=>Lm,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>pg,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>hg,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>cg,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>gg,getSparseReshapeInputOutputMismatchErrorMessage:()=>bg,getSparseReshapeInputOutputMultipleErrorMessage:()=>yg,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>fg,getSparseReshapeNegativeOutputDimErrorMessage:()=>mg,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>kg,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>xg,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>wg,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>vg,getUndoAxesPermutation:()=>Eu,isIdentityPermutation:()=>lg,log:()=>Da,mergeRealAndImagArrays:()=>jm,prepareAndValidate:()=>Yf,prepareSplitSize:()=>dg,segment_util:()=>Ig,shouldFuse:()=>Uh,slice_util:()=>Zf,splitRealAndImagArrays:()=>qm,stridesOrDilationsArePositive:()=>xl,tupleValuesAreOne:()=>yl,upcastType:()=>Ws,validateDefaultValueShape:()=>Em,validateInput:()=>gh,validateUpdateShape:()=>mh,warn:()=>Fa}),function(e){e[e.FIRST_DIM_SIZE=0]="FIRST_DIM_SIZE",e[e.VALUE_ROWIDS=1]="VALUE_ROWIDS",e[e.ROW_LENGTHS=2]="ROW_LENGTHS",e[e.ROW_SPLITS=3]="ROW_SPLITS",e[e.ROW_LIMITS=4]="ROW_LIMITS",e[e.ROW_STARTS=5]="ROW_STARTS"}(km||(km={}));var $m=30;function Am(e){return e<=$m?e:Ke(e,Math.floor(Math.sqrt(e)))}function Rm(e,t,n){return[n*("number"==typeof e?e:e[0]),t*("number"==typeof e?e:e[1])]}function Fm(e,t,n,r=!0){let a=[];if(r)a=a.concat(t.slice(0)),a.push(e[0]/n),a=a.concat(e.slice(1));else{a=a.concat(e[0]);let n=t.length;for(let r=0;r<n;++r)a=a.concat([e[r+1]/t[r],t[r]]);a=a.concat(e.slice(n+1))}return a}function Dm(e,t,n=!0){let r=[];if(n){r.push(t);
2for(let n=t+1;n<e;++n)n<=2*t?(r.push(n),r.push(n-(t+1))):r.push(n)}else{let n=[],a=[];for(let r=1;r<e;++r)r>=2*t+1||r%2==1?a.push(r):n.push(r);r.push(...n),r.push(0),r.push(...a)}return r}function Mm(e,t,n,r=!0){let a=[];r?a.push(e[0]/n):a.push(e[0]*n);for(let n=1;n<e.length;++n)n<=t.length?r?a.push(t[n-1]*e[n]):a.push(e[n]/t[n-1]):a.push(e[n]);return a}function Om(e,t){let n=[0];for(let r=0;r<t;++r)n.push(e[r][0]);return n}function Lm(e,t,n){let r=e.slice(0,1);for(let a=0;a<n;++a)r.push(e[a+1]-t[a][0]-t[a][1]);return r}var zm=1.7580993408473768,Pm=1.0507009873554805,Bm=.3275911,Wm=.254829592,Vm=-.284496736,Um=1.421413741,Gm=-1.453152027,Hm=1.061405429;function jm(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(2*e.length);for(let r=0;r<n.length;r+=2)n[r]=e[r/2],n[r+1]=t[r/2];return n}function qm(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=e[r],n[r/2]=e[r+1];return{real:t,imag:n}}function Km(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let t=0;t<e.length;t+=4)n[Math.floor(t/4)]=e[t],r[Math.floor(t/4)]=e[t+1];return{real:n,imag:r}}function Xm(e){let t=Math.floor(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let t=2;t<e.length;t+=4)n[Math.floor(t/4)]=e[t],r[Math.floor(t/4)]=e[t+1];return{real:n,imag:r}}function Ym(e,t){return{real:e[2*t],imag:e[2*t+1]}}function Zm(e,t,n,r){e[2*r]=t,e[2*r+1]=n}function Jm(e,t){let n=new Float32Array(e/2),r=new Float32Array(e/2);for(let a=0;a<Math.ceil(e/2);a++){let s=(t?2:-2)*Math.PI*(a/e);n[a]=Math.cos(s),r[a]=Math.sin(s)}return{real:n,imag:r}}function Qm(e,t,n){let r=(n?2:-2)*Math.PI*(e/t);return{real:Math.cos(r),imag:Math.sin(r)}}var eg="->",tg=/->/g,ng=",",rg="...";function ag(e,t){let n=((e=e.replace(/\s/g,"")).length-e.replace(tg,"").length)/eg.length;if(n<1)throw new Error("Equations without an arrow are not supported.");if(n>1)throw new Error(`Equation must contain exactly one arrow ("${eg}").`);let[r,a]=e.split(eg);we(-1===r.indexOf(rg),(()=>`The ellipsis notation ("${rg}") is not supported yet.`));let s=r.split(ng),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let e=0;e<a.length;++e){let t=a[e];if(!s.some((e=>-1!==e.indexOf(t))))throw new Error(`Output subscripts contain the label ${t} not present in the input subscripts.`);-1===o.indexOf(t)&&o.push(t)}for(let e=0;e<r.length;++e){let t=r[e];-1===o.indexOf(t)&&t!==ng&&o.push(t)}let l=new Array(s.length);for(let e=0;e<i;++e){if(new Set(s[e].split("")).size!==s[e].length)throw new Error(`Found duplicate axes in input component ${s[e]}. Support for duplicate axes in input is not implemented yet.`);l[e]=[];for(let t=0;t<s[e].length;++t)l[e].push(o.indexOf(s[e][t]))}let u=o.length,d=[];for(let e=a.length;e<u;++e)d.push(e);return{allDims:o,summedDims:d,idDims:l}}function sg(e,t){let n=new Array(e);n.fill(-1);for(let e=0;e<t.length;++e)n[t[e]]=e;let r=[];for(let t=0;t<e;++t)-1===n[t]&&r.push(t);return n=n.filter((e=>-1!==e)),{permutationIndices:n,expandDims:r}}function ig(e,t,n){let r=new Array(e);for(let e=0;e<n.length;++e){let a=n[e].shape;for(let n=0;n<t[e].length;++n)void 0===r[t[e][n]]?r[t[e][n]]=a[n]:we(r[t[e][n]]===a[n],(()=>`Expected dimension ${r[t[e][n]]} at axis ${n} of input shaped ${JSON.stringify(a)}, but got dimension ${a[n]}`))}}function og(e,t){let n=e,r=[],a=0;0===e.length&&n.push(-1),a=e.length+1;for(let e=0;e<a;++e)r.push([]);let s=[];for(let e=0;e<n.length;++e){let a=ug(t,n[e]);for(let t of a)-1===s.indexOf(t)&&(r[e].push(t),s.push(t))}return{path:n,steps:r}}function lg(e){return e.every(((e,t)=>e===t))}function ug(e,t){let n=[];for(let r=0;r<e.length;++r)(0===e[r].length||-1!==e[r].indexOf(t)||-1===t)&&n.push(r);return n}function dg(e,t,n=0){let r=[];if("number"==typeof t)we(e.shape[n]%t==0,(()=>"Number of splits must evenly divide the axis.")),r=new Array(t).fill(e.shape[n]/t);else{we(t.reduce(((e,t)=>(-1===t&&(e+=1),e)),0)<=1,(()=>"There should be only one negative value in split array."));let a=t.indexOf(-1);if(-1!==a){let r=t.reduce(((e,t)=>t>0?e+t:e));t[a]=e.shape[n]-r}we(e.shape[n]===t.reduce(((e,t)=>e+t)),(()=>"The sum of sizes must match the size of the axis dimension.")),r=t}return r}function pg(e){return`Received SparseTensor with denseShape[0] = 0 but\n  indices.shape[0] = ${e}`}function hg(e,t){return`indices(${e}
2, 0) is invalid: ${t} < 0`}function cg(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function fg(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function mg(e,t){return`size ${e} must be non-negative, not ${t}`}function gg(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function yg(e,t){return`Input to reshape is a SparseTensor with ${Ie(e)}\n  dense values, but the requested shape requires a multiple of ${Ie(t)}. inputShape=${e} outputShape= ${t}`}function bg(e,t){return`Input to reshape is a tensor with ${Ie(e)} dense values, but the requested shape has ${Ie(t)}. inputShape=${e} outputShape=${t}`}function xg(){return"segment ids must be >= 0"}function wg(){return"segment ids are not increasing"}function vg(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function kg(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var Ig={};function Sg(e,t){let n,r=!1;for(e<=$m?(n=e,r=!0):n=Ke(e,Math.floor(Math.sqrt(e)));!r;)n>t||n===e?r=!0:n=Ke(e,n+1);return n}function Ng(e,t,n){let r=[],a=e.length;for(let s=0;s<a;s++)s!==t?r.push(e[s]):r.push(n);return r}function Tg(e,t,n,r){let a=t.shape.length,s=e.shape.length;if(0!==r&&(r<-a||r>a))throw new Error(`Expect batchDims in the range of [-${a}, ${a}], but got ${r}`);if(r<0&&(r+=a),r>s)throw new Error(`batchDims (${r}) must be less than rank(x) (\n    ${s}).`);if(n<r)throw new Error(`batchDims (${r}) must be less than or equal to axis (${n}).`);for(let n=0;n<r;++n)if(e.shape[n]!==t.shape[n])throw new Error(`x.shape[${n}]: ${e.shape[n]} should be equal to indices.shape[${n}]: ${t.shape[n]}.`);let i=e.shape[n],o=[],l=1,u=1,d=1;for(let t=0;t<r;++t)o.push(e.shape[t]),l*=e.shape[t];for(let t=r;t<n;t++)o.push(e.shape[t]),u*=e.shape[t];for(let e=r;e<a;e++)o.push(t.shape[e]);for(let t=n+1;t<s;t++)o.push(e.shape[t]),d*=e.shape[t];return{batchSize:l,sliceSize:d,outerSize:u,dimSize:i,outputShape:o}}function _g(e){try{return e.map((e=>cs(e)))}catch(e){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${e}`)}}function Cg(e){return e.map((e=>hs(e)))}B(Ig,{collectGatherOpShapeInfo:()=>Tg,computeOutShape:()=>Ng,segOpComputeOptimalWindowSize:()=>Sg});var Eg={};B(Eg,{nonMaxSuppressionV3Impl:()=>lc,nonMaxSuppressionV4Impl:()=>uc,nonMaxSuppressionV5Impl:()=>dc,whereImpl:()=>Th}),function(){for(let e of mf)af(e)}();var $g={kernelName:ft,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,sh(Wo(n,"float32"),-1))}}},Ag={kernelName:mt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let t=Ou(Wo(n,"float32")),r=Mu(yd(Du(1),t));return fd(jo(e,r))}}}},Rg={kernelName:gt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let t=Mu(yd(Ou(Wo(n,"float32")),1));return jo(e,t)}}}},Fg={kernelName:yt,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=e,r=hu(n.shape,a);return r.length>0&&(t=Lu(t,r)),kl(t,n.shape)},b:()=>{let t=e,n=hu(r.shape,a);return n.length>0&&(t=Lu(t,n)),kl(t,r.shape)}}}},Dg={kernelName:bt,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach(((t,r)=>{n[r]=()=>e.clone()})),n}},Mg={kernelName:vt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>gu(n)}}},Og={kernelName:kt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>gu(n)}}},Lg={kernelName:It,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,Mu(yd(Du(1),Ou(Wo(n,"float32")))))}}},zg={kernelName:St,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let t=Mu(Go(Du(1),Ou(Wo(n,"float32"))));return jo(e,t)}}}},Pg={kernelName:_t,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=Go(Ou(n),Ou(r)),s=qo(e,jo(r,t)),i=hu(n.shape,a);return i.length>0&&(s=Lu(s,i)),kl(s,n.shape)},b:()=>{let t=Go(Ou(n),Ou(r)),s=fd(qo(e,jo(n,t))),i=hu(r.shape,a);return i.length>0&&(s=Lu(s,i)),kl(s,r.shape)}}}},Bg={kernelName:Nt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,Go(Ou(Wo(n,"float32")),1))}}}
2,Wg={kernelName:Tt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,yd(Du(1),Ou(Wo(n,"float32"))))}}};var Vg=fi({avgPool3dGrad_:function(e,t,n,r,a,s){let i=pi(e,"dy","avgPool3dGrad"),o=pi(t,"input","avgPool3dGrad"),l=i,u=o,d=!1;4===o.rank&&(d=!0,l=kl(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=kl(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),we(5===l.rank,(()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`)),we(5===u.rank,(()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`)),vl("avgPool3dGrad",a,s);let p={dy:l,input:u},h={filterSize:n,strides:r,pad:a,dimRoundingMode:s},c=ei.runKernel(At,p,h);return d?kl(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}}),Ug={kernelName:$t,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>Vg(e,r,a,s,i,o)}}};var Gg=fi({avgPoolGrad_:function(e,t,n,r,a){let s=pi(e,"dy","avgPoolGrad"),i=pi(t,"input","avgPoolGrad");we(i.rank===s.rank,(()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`));let o=i,l=s,u=!1;3===i.rank&&(u=!0,o=kl(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=kl(s,[1,s.shape[0],s.shape[1],s.shape[2]])),we(4===l.rank,(()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`)),we(4===o.rank,(()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`));let d={dy:l,input:o},p={filterSize:n,strides:r,pad:a},h=ei.runKernel(Et,d,p);return u?kl(h,[h.shape[1],h.shape[2],h.shape[3]]):h}}),Hg={kernelName:Ct,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:a,strides:s,pad:i}=n;return{x:()=>Gg(e,r,a,s,i)}}},jg={kernelName:Rt,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,a]=t,{transposeA:s,transposeB:i}=n;return s||i?!s&&i?{a:()=>Tl(e,a,!1,!1),b:()=>Tl(e,r,!0,!1)}:s&&!i?{a:()=>Tl(a,e,!1,!0),b:()=>Tl(r,e,!1,!1)}:{a:()=>Tl(a,e,!0,!0),b:()=>Tl(e,r,!0,!0)}:{a:()=>Tl(e,a,!1,!0),b:()=>Tl(r,e,!0,!1)}}},qg={kernelName:Ft,gradFunc:(e,t,n)=>{let{blockShape:r,crops:a}=n;return{x:()=>Yd(e,r,a)}}},Kg={kernelName:Ot,gradFunc:(e,t,n)=>{let r=n,a=r.inputShape,s=r.shape,i=Array.from(s);for(let e=a.length-1;e>=0;e--)if(a[e]===s[e])i[e]=1;else if(1!==a[e])throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${s}].`);let o=[];for(let e=0;e<i.length;e++)i[e]>1&&o.push(e);return{x:()=>Lu(e,o,!0)}}},Xg={kernelName:zt,gradFunc:e=>({x:()=>e.clone()})},Yg={kernelName:Pt,gradFunc:e=>({x:()=>gu(e)})},Zg={kernelName:Bt,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:a,clipValueMax:s}=n;return{x:()=>mu(wd(Xu(r,a),nd(r,s)),e,gu(e))}}},Jg={kernelName:Vt,inputsToSave:["x"],gradFunc:$g.gradFunc},Qg={kernelName:Ut,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map((e=>e.shape)),{axis:a}=n,s=De(a,t[0].shape)[0],i=r.map((e=>e[s]));return eh(e,i,s).map((e=>()=>e))}},ey={kernelName:Gt,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return we(yl(s),(()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`)),{x:()=>Yl(r.shape,e,a,i,o,l),filter:()=>Ph(r,e,a.shape,i,o,l)}}},ty={kernelName:jt,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Kl(e,a,s,i,o,1,l),filter:()=>Ph(e,r,a.shape,s,i,o,l)}}};var ny=fi({conv3DBackpropFilter_:function(e,t,n,r,a){let s=e;4===e.rank&&(s=kl(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;4===i.rank&&(i=kl(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),we(5===s.rank,(()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`)),we(5===i.rank,(()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`)),we(5===n.length,(()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`)),we(s.shape[4]===n[3],(()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`)),we(i.shape[4]===n[4],(()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`));let o={x:s,dy:i},l={strides:r,pad:a,filterShape:n};return ei.runKernel(Kt,o,l)}}
2),ry={kernelName:qt,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s}=n;we(yl(r),(()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`));let[i,o]=t;return{x:()=>Ql(i.shape,e,o,a,s),filter:()=>ny(i,e,o.shape,a,s)}}},ay={kernelName:Yt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(fd(Gp(Wo(n,"float32"))),e)}}},sy={kernelName:Zt,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(Hp(Wo(n,"float32")),e)}}},iy={kernelName:Qt,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a,exclusive:s,reverse:i}=n;return{x:()=>{let t=Cu([a],r.rank),n=au(e,a,s,!i);return null!=t&&(n=Eh(n,t)),n}}}},oy={kernelName:rn,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:a,pad:s,dimRoundingMode:i}=n,o=null==r?[1,1]:r;we(yl(o),(()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`));let[l,u]=t;return we(4===l.rank,(()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`)),we(4===u.rank,(()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`)),we(l.shape[3]===u.shape[2],(()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`)),we(bl(a,o),(()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be  1. Got strides ${a} and dilations '${o}'.`)),vl("depthwiseConv2d",s,i),{x:()=>jh(l.shape,e,u,a,s,o,i),filter:()=>Hh(l,e,u.shape,a,s,o,i)}}},ly={kernelName:ln,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,a]=t,s={x:r,filter:a,dy:e},i={x:r,filter:a,dy:e};return{x:()=>ei.runKernel(un,s,n),filter:()=>ei.runKernel(dn,i,n)}}},uy={kernelName:fn,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>ei.runKernel(mn,r)}}},dy={kernelName:gn,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=qo(Wu(fd(Ou(n))),2/Math.sqrt(Math.PI));return{x:()=>qo(e,r)}}},py={kernelName:bn,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,n)}}},hy={kernelName:xn,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>kl(e,n.shape)}}},cy={kernelName:wn,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,Wu(n))}}},fy={kernelName:Sn,gradFunc:e=>({x:()=>gu(e)})},my={kernelName:Nn,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=jo(e,Wo(r,"float32")),s=hu(n.shape,a);return s.length>0?kl(Lu(t,s),n.shape):t},b:()=>{let t=qo(e,Wo(n,"float32")),s=hu(r.shape,a);s.length>0&&(t=kl(Lu(t,s),r.shape));let i=Ou(r);return fd(jo(t,Wo(i,"float32")))}}}},gy={kernelName:Tn,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[a,s,i,o]=t,l=null==o?Du(1):o,u=hu(s.shape,a.shape),d=[];if(1===s.rank){for(let e=0;e<a.shape.length-1;++e)d.push(a.shape[e]);d.push(1)}let p=yd(a,s),h=qo(e,l),c=Pp(Go(i,Du(r))),f=qo(qo(qo(c,c),c),Du(-.5));return{x:()=>1===s.rank?kl(qo(qo(e,Gu(kl(c,[1,1,1,s.shape[0]]),d)),l),a.shape):kl(qo(qo(e,c),l),a.shape),mean:()=>{let e=qo(qo(c,Du(-1)),h);return 1===s.rank&&(e=Lu(e,u)),kl(e,s.shape)},variance:()=>{let e=qo(qo(f,p),h);return 1===s.rank&&(e=Lu(e,u)),kl(e,s.shape)},scale:()=>{let t=qo(p,c),n=qo(e,t);return 1===s.rank&&(n=Lu(n,u)),kl(n,s.shape)},offset:()=>{let t=e;return 1===s.rank&&(t=Lu(t,u)),kl(t,s.shape)}}}},yy={kernelName:_n,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,a]=t,{axis:s,batchDims:i}=n,o=De(s,r.shape)[0],l=(e,t,n)=>()=>{let r=e.shape,a=t.size,i=r.slice(0,o),l=i.length,u=r.slice(s,r.length).slice(1),d=u.length,p=by(0,l),h=by(l+1,l+1+d),c=xy([i,[a],u]),f=kl(n,c),m=kl(t,[a]),g=xy([[l],p,h]),y=Eh(f,g),b=kh(y,m,e.shape[o]),x=Eu(g);return b=Eh(b,x),b};if(1===i){let t=r.shape[0],n=r.split(t,0);return{x:()=>ah(n.map(((t,n)=>l(t,a.slice(n,1),e.slice(n,1))()))).reshape(r.shape),indices:()=>a}}return{x:l(r,a,e),indices:()=>a}}};function by(e,t){let n=[];for(let r=e;r<t;++r)n.push(r);return n}function xy(e){let t=[];for(let n=0;n<e.length;++n)for(let r=0;r<e[n].length;++r)t.push(e[n][r]);return t}var wy={kernelName:$n,inputsToSave:["a","b"],gradFunc:(e,t)=>
2{let[n,r]=t;return{a:()=>gu(n),b:()=>gu(r)}}},vy={kernelName:An,gradFunc:e=>({x:()=>Wo(e,"float32")})},ky={kernelName:Dn,gradFunc:e=>({x:()=>gu(e)})},Iy={kernelName:Mn,gradFunc:e=>({x:()=>gu(e)})},Sy={kernelName:On,gradFunc:e=>({x:()=>gu(e)})},Ny={kernelName:Ln,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:a}=n,s=Ku(r,0);return{x:()=>mu(s,e,qo(e,a))}}},Ty={kernelName:Vn,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,Go(n,1))}}},_y={kernelName:Wn,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,Wo(n,"float32"))}}},Cy={kernelName:qn,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n;return{logits:()=>{let t=Wu(r);return yd(e,qo(Lu(e,a,!0),t))}}}};var Ey=fi({localResponseNormalizationBackprop_:function(e,t,n,r=5,a=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:r,bias:a,alpha:s,beta:i};return ei.runKernel(Yn,o,l)}}),$y={kernelName:Xn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>Ey(r,a,e,s,i,o,l)}}};function Ay(e,t,n,r){return t.rank<n.rank&&(t=kl(t,Tu(t.shape,r))),e.rank<n.rank&&(e=kl(e,Tu(e.shape,r))),{x:()=>qo(e,Wo(fu(n,t),e.dtype))}}var Ry={kernelName:Jn,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:a}=r,s=t[0],i=Ay(e,t[1],s,De(a,s.shape));return{x:()=>i.x()}}},Fy={kernelName:Qn,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>qo(e,Wo(Xu(n,r),"float32")),b:()=>qo(e,Wo(td(n,r),"float32"))}}};var Dy=fi({maxPool3dGrad_:function(e,t,n,r,a,s,i){let o=pi(e,"dy","maxPool3dGrad"),l=pi(t,"input","maxPool3dGrad"),u=pi(n,"output","maxPool3dGrad"),d=o,p=l,h=u,c=!1;4===l.rank&&(c=!0,d=kl(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),p=kl(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),h=kl(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),we(5===d.rank,(()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${d.rank}.`)),we(5===p.rank,(()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`)),we(5===h.rank,(()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${h.rank}.`)),vl("maxPool3dGrad",s,i);let f={dy:d,input:p,output:h},m={filterSize:r,strides:a,pad:s,dimRoundingMode:i},g=ei.runKernel(rr,f,m);return c?kl(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}}),My={kernelName:nr,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>Dy(e,r,a,s,i,o,l)}}};var Oy=fi({maxPoolGrad_:function(e,t,n,r,a,s,i){let o=pi(e,"dy","maxPoolGrad"),l=pi(t,"input","maxPoolGrad"),u=pi(n,"output","maxPoolGrad");we(l.rank===o.rank,(()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`)),we(4===o.rank,(()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`)),we(4===l.rank,(()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`)),vl("maxPoolGrad",s,i);let d={dy:o,input:l,output:u},p={filterSize:r,strides:a,pad:s,dimRoundingMode:i};return ei.runKernel(tr,d,p)}}),Ly={kernelName:er,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,a]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>Oy(e,r,a,s,i,o)}}},zy={kernelName:sr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n,s=De(a,r.shape),i=Ie(Nu(r.shape,s)[1]);return{x:()=>{let t=r.shape.slice();s.forEach((e=>{t[e]=1}));let n=kl(e,t);return jo(qo(n,Fd(r.shape,"float32")),i)}}}},Py={kernelName:ir,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:a}=r,[s,i]=t,o=Ay(e,i,s,De(a,s.shape));return{x:()=>o.x()}}},By={kernelName:or,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>qo(e,Wo(nd(n,r),"float32")),b:()=>qo(e,Wo(Ku(n,r),"float32"))}}},Wy={kernelName:lr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map((e=>e[0]));return{x:()=>Cl(e,s,r.shape)}}},Vy={kernelName:ur,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=hu(n.shape,a);return t.length>0?kl(Lu(e,t),n.shape):e},b:()=>{let t=qo(e,fd(ju(jo(n,r)))),s=hu(r.shape,a);return s.length>0?kl(Lu(t,s),r.shape):t}}}},Uy={kernelName:pr,inputsToSave:["a","b"],gradFunc:(e,t)=>
2{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=qo(e,Wo(r,"float32")),s=hu(n.shape,a);return s.length>0?kl(Lu(t,s),n.shape):t},b:()=>{let t=qo(e,Wo(n,"float32")),s=hu(r.shape,a);return s.length>0?kl(Lu(t,s),r.shape):t}}}},Gy={kernelName:hr,gradFunc:e=>({x:()=>fd(e)})},Hy={kernelName:br,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>Rd(n.shape,"float32")}}},jy={kernelName:yr,gradFunc:e=>({x:()=>gu(e)})},qy={kernelName:xr,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return Ih(e,r).map((e=>()=>e))}},Ky={kernelName:wr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:a}=n,s=a.map((e=>e[0]));return{x:()=>Cl(e,s,r.shape)}}},Xy={kernelName:kr,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,a]=t,s=n,i=r,o=cu(s.shape,i.shape);return{a:()=>{let t=Wo(i,"float32"),n=qo(e,qo(t,Fu(s,yd(t,Du(1))))),r=hu(s.shape,o);return r.length>0&&(n=Lu(n,r)),kl(n,s.shape)},b:()=>{let t=Ku(s,0),n=mu(t,sd(s),gu(s)),r=qo(e,qo(a,n)),l=hu(i.shape,o);return l.length>0&&(r=Lu(r,l)),kl(r,i.shape)}}}},Yy={kernelName:Ir,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,a=Ku(n,0);return{x:()=>mu(a,e,qo(e,r)),alpha:()=>{let t=mu(a,gu(e),qo(e,n)),s=hu(r.shape,e.shape);return s.length>0&&(t=Lu(t,s)),kl(t,r.shape)}}}};function Zy(e,t,n){let r=e.shape.length,a=r-n.length,s=Im.getAxesPermutation(n,r),i=e;null!=s&&(i=Eh(e,s));let o=i.shape.slice(),l=o.splice(r-n.length,n.length).reduce(((e,t)=>e*t),1);o.push(l);let u=function(e,t,n){let r=e.shape.slice();r[n]=1;let a=kl(t,r),s=ru(e,n,!0,!1),i=ru(e,n,!0,!0),o=qo(s,i);return qo(a,o)}(i.reshape(o),t,a);if(u=u.reshape(i.shape),null!=s){let e=Im.getUndoAxesPermutation(s);u=Eh(u,e)}return u}var Jy={kernelName:Sr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:a}=n,s=[];return s=null==a?r.shape.map(((e,t)=>t)):"number"==typeof a?[a]:a,{x:()=>Zy(r,e,s)}}},Qy={kernelName:hn,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=jo(e,Wo(r,"float32")),s=hu(n.shape,a);return s.length>0?kl(Lu(t,s),n.shape):t},b:()=>{let t=qo(e,Wo(n,"float32")),s=hu(r.shape,a);s.length>0&&(t=kl(Lu(t,s),r.shape));let i=Ou(r);return fd(jo(t,Wo(i,"float32")))}}}},eb={kernelName:$r,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,fd(Ou(n)))}}},tb={kernelName:Lr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=qo(nd(n,6),sh(n));return{x:()=>qo(e,Wo(r,"float32"))}}},nb={kernelName:Ar,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,Wo(sh(n),"float32"))}}},rb={kernelName:Rr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>kl(e,n.shape)}}},ab={kernelName:Mr,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>ei.runKernel(Or,a,n)}}},sb={kernelName:Fr,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,a={dy:e,images:r};return{images:()=>ei.runKernel(Dr,a,n)}}},ib={kernelName:zr,gradFunc:(e,t,n)=>{let{dims:r}=n,a=De(r,e.shape);return{x:()=>Fp(e,a)}}},ob={kernelName:Pr,gradFunc:e=>({x:()=>gu(e)})},lb={kernelName:Br,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fd(jo(e,qo(Fu(n,1.5),2)))}}},ub={kernelName:Gr,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>Wo(gu(n),"float32"),t:()=>qo(e,Wo(n,e.dtype)),e:()=>qo(e,Wo(vd(n),e.dtype))}}},db={kernelName:Hr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let t=Ku(n,Du(0)),r=Du(zm),a=Du(Pm),s=qo(e,a),i=qo(qo(e,r),Wu(Wo(n,"float32")));return mu(t,s,i)}}}},pb={kernelName:Yr,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,qo(n,yd(Du(1),n)))}}}
vendor: 14,504 bytes, line 2
2,hb={kernelName:Xr,gradFunc:e=>({x:()=>gu(e)})},cb={kernelName:qr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(tu(Wo(n,"float32")),e)}}},fb={kernelName:Kr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(nu(Wo(n,"float32")),e)}}},mb={kernelName:jr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:a,size:s}=n,i=r.shape,[o,l]=fm(r,a,s),u=[];for(let t=0;t<e.rank;t++)u.push([o[t],i[t]-o[t]-l[t]]);return{x:()=>Hd(e,u)}}},gb={kernelName:na,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:a}=n,s=qo(e,r);return{logits:()=>yd(s,qo(Lu(s,[a],true),r))}}},yb={kernelName:Zr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,_l(n))}}},bb={kernelName:ea,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:a}=n;return{x:()=>Al(e,r,a)}}},xb={kernelName:ta,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>Nl(e,r)}}},wb={kernelName:Jr,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,qo(Mu(Wo(n,"float32")),2))}}},vb={kernelName:ua,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(e,qo(Wo(n,"float32"),2))}}},kb={kernelName:la,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=Du(2);return{a:()=>qo(e,qo(a,yd(n,r))),b:()=>qo(e,qo(a,yd(r,n)))}}},Ib={kernelName:_a,gradFunc:e=>({x:()=>gu(e)})},Sb={kernelName:ma,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,a=cu(n.shape,r.shape);return{a:()=>{let t=e,r=hu(n.shape,a);return r.length>0&&(t=Lu(t,r)),kl(t,n.shape)},b:()=>{let t=e,n=hu(r.shape,a);return n.length>0&&(t=Lu(t,n)),kl(fd(t),r.shape)}}}},Nb={kernelName:Qr,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,a=r.shape.slice(),{axis:s}=n;De(s,r.shape).forEach((e=>{a[e]=1}));let i=kl(e,a),o=qo(i,Fd(r.shape,"float32"));return{x:()=>o}}},Tb={kernelName:ga,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>jo(e,Ou(tu(n)))}}},_b={kernelName:ya,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qo(yd(Du(1),Ou(n)),e)}}},Cb={kernelName:ba,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:a}=n;return{x:()=>{let t=gu(r);if(1===r.rank)for(let n=0;n<a[0];++n)t=Go(t,Cl(e,[n*r.shape[0]],[r.shape[0]]));else if(2===r.rank)for(let n=0;n<a[0];++n)for(let s=0;s<a[1];++s)t=Go(t,Cl(e,[n*r.shape[0],s*r.shape[1]],[r.shape[0],r.shape[1]]));else if(3===r.rank)for(let n=0;n<a[0];++n)for(let s=0;s<a[1];++s)for(let i=0;i<a[2];++i)t=Go(t,Cl(e,[n*r.shape[0],s*r.shape[1],i*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else{if(4!==r.rank)throw new Error(`Gradient for tile operation is not implemented for rank-${r.rank} tensors yet.`);for(let n=0;n<a[0];++n)for(let s=0;s<a[1];++s)for(let i=0;i<a[2];++i)for(let o=0;o<a[3];++o)t=Go(t,Cl(e,[n*r.shape[0],s*r.shape[1],i*r.shape[2],o*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]))}return t}}}},Eb={kernelName:va,gradFunc:(e,t,n)=>{let r=n,{perm:a}=r,s=Eu(a);return{x:()=>Eh(e,s)}}},$b={kernelName:Ia,gradFunc:(e,t,n)=>{let r=n,{axis:a}=r;return{value:()=>ah(e,a)}}},Ab={kernelName:Sa,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>function(e,t){let n=$d(t,gu(t)),r=qu(e,n),a=Xu(t,Du(0,"int32")),s=r.rank-a.rank;for(let e=0;e<s;++e)a=Vu(a,e+1);a=wd(a,Fd(r.shape,"bool"));let i=gu(r);return mu(a,r,i)}(e,n)}}};var Rb={kernelName:Ta,gradFunc:e=>({x:()=>gu(e)})},Fb=[$g,Ag,Rg,Fg,Dg,Mg,Og,Lg,zg,Pg,Bg,Wg,Ug,Hg,jg,qg,Kg,Xg,Yg,Zg,Jg,Qg,ty,ey,ry,ay,sy,iy,oy,ly,Qy,uy,dy,py,hy,cy,my,fy,gy,yy,wy,vy,ky,Iy,Sy,Ny,Ty,_y,Cy,$y,Ry,Ry,Fy,My,Ly,zy,Py,By,Wy,Vy,Uy,Gy,Hy,jy,qy,Ky,Ky,Xy,Yy,Jy,eb,tb,nb,rb,ab,sb,ib,ob,lb,ub,db,pb,hb,cb,fb,mb,gb,yb,bb,bb,xb,xb,wb,kb,vb,Ib,Sb,Nb,Tb,_b,Cb,Eb,$b,Ab,Rb];for(let e of Fb)Wa(e);As().prototype.abs=function(){return this.throwIfDisposed(),Ko(this)},As().prototype.acos=function(){return this.throwIfDisposed(),Xo(this)},As().prototype.acosh=function(){return this.throwIfDisposed(),Yo(this)},As().prototype.add=function(e){return this.throwIfDisposed(),Go(this,e)},As().prototype.all=function(e,t){return this.throwIfDisposed(),Jo(this,e,t)},As().prototype.any=function(e,t){return this.throwIfDisposed(),Qo(this,e,t)},As().prototype.argMax=function(e){return this.throwIfDisposed(),el(this,e)},As().prototype.argMin=function(e){return this.throwIfDisposed(),tl(this,e)},As().prototype.asScalar=function(){return this.throwIfDisposed(),we(1===this.size,(()=>"The array must have only 1 element.")),kl(this,[])},As().prototype.asType=function(e){return this.throwIfDisposed(),Wo(this,e)},As().prototype.as1D=function(){return this.throwIfDisposed(),kl(this,[this.size])},As().prototype.as2D=function(e,t){return this.throwIfDisposed(),kl(this,[e,t])},As().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),kl(this,[e,t,n])},As().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),kl(this,[e,t,n,r])},As().prototype.as5D=function(e,t,n,r,a){return this.throwIfDisposed(),kl(this,[e,t,n,r,a])},As().prototype.asin=function(){return this.throwIfDisposed(),nl(this)},As().prototype.asinh=function(){return this.throwIfDisposed(),rl(this)},As().prototype.atan=function(){return this.throwIfDisposed(),al(this)},As().prototype.atan2=function(e){return this.throwIfDisposed(),sl(this,e)},As().prototype.atanh=function(){return this.throwIfDisposed(),il(this)},As().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),Il(this,e,t,n,r)},As().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Al(this,e,t)},As().prototype.batchNorm=function(e,t,n,r,a){return this.throwIfDisposed(),Fl(this,e,t,n,r,a)},As().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Bl(this,e)},As().prototype.cast=function(e){return this.throwIfDisposed(),Wo(this,e)},As().prototype.ceil=function(){return this.throwIfDisposed(),Wl(this)},As().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),Ul(this,e,t)},As().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof $s&&(e=[e]),Nl([this,...e],t)},As().prototype.conv1d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Xl(this,e,t,n,r,a,s)},As().prototype.conv2dTranspose=function(e,t,n,r,a){return this.throwIfDisposed(),Zl(this,e,t,n,r,a)},As().prototype.conv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Kl(this,e,t,n,r,a,s)},As().prototype.cos=function(){return this.throwIfDisposed(),tu(this)},As().prototype.cosh=function(){return this.throwIfDisposed(),nu(this)},As().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),ru(this,e,t,n)},As().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),au(this,e,t,n)},As().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),iu(this,e,t)},As().prototype.depthwiseConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),ou(this,e,t,n,r,a,s)},As().prototype.dilation2d=function(e,t,n,r,a){return this.throwIfDisposed(),uu(this,e,t,n,r,a)},As().prototype.divNoNan=function(e){return this.throwIfDisposed(),yu(this,e)},As().prototype.div=function(e){return this.throwIfDisposed(),jo(this,e)},As().prototype.dot=function(e){return this.throwIfDisposed(),bu(this,e)},As().prototype.elu=function(){return this.throwIfDisposed(),wu(this)},As().prototype.equal=function(e){return this.throwIfDisposed(),fu(this,e)},As().prototype.erf=function(){return this.throwIfDisposed(),ku(this)},As().prototype.euclideanNorm=function(e,t){return this.throwIfDisposed(),Bu(this,e,t)},As().prototype.exp=function(){return this.throwIfDisposed(),Wu(this)},As().prototype.expandDims=function(e){return this.throwIfDisposed(),Vu(this,e)},As().prototype.expm1=function(){return this.throwIfDisposed(),Uu(this)},As().prototype.fft=function(){return this.throwIfDisposed(),Zp(this)},As().prototype.flatten=function(){return this.throwIfDisposed(),kl(this,[this.size])},As().prototype.floor=function(){return this.throwIfDisposed(),ju(this)},As().prototype.floorDiv=function(e){return this.throwIfDisposed(),Ho(this,e)},As().prototype.gather=function(e,t,n){return this.throwIfDisposed(),qu(this,e,t,n)},As().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Xu(this,e)},As().prototype.greater=function(e){return this.throwIfDisposed(),Ku(this,e)},As().prototype.ifft=function(){return this.throwIfDisposed(),Jp(this)},As().prototype.irfft=function(){return this.throwIfDisposed(),Qp(this)},As().prototype.isFinite=function(){return this.throwIfDisposed(),Zu(this)},As().prototype.isInf=function(){return this.throwIfDisposed(),Ju(this)},As().prototype.isNaN=function(){return this.throwIfDisposed(),Qu(this)},As().prototype.leakyRelu=function(e){return this.throwIfDisposed(),ed(this,e)},As().prototype.lessEqual=function(e){return this.throwIfDisposed(),nd(this,e)},As().prototype.less=function(e){return this.throwIfDisposed(),td(this,e)},As().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),ad(this,e,t,n,r)},As().prototype.logSigmoid=function(){return this.throwIfDisposed(),gd(this)},As().prototype.logSoftmax=function(e){return this.throwIfDisposed(),bd(this,e)},As().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),xd(this,e,t)},As().prototype.log=function(){return this.throwIfDisposed(),sd(this)},As().prototype.log1p=function(){return this.throwIfDisposed(),id(this)},As().prototype.logicalAnd=function(e){return this.throwIfDisposed(),wd(this,e)},As().prototype.logicalNot=function(){return this.throwIfDisposed(),vd(this)},As().prototype.logicalOr=function(e){return this.throwIfDisposed(),kd(this,e)},As().prototype.logicalXor=function(e){return this.throwIfDisposed(),Id(this,e)},As().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Tl(this,e,t,n)},As().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),_d(this,e,t,n,r)},As().prototype.max=function(e,t){return this.throwIfDisposed(),Au(this,e,t)},As().prototype.maximum=function(e){return this.throwIfDisposed(),$d(this,e)},As().prototype.mean=function(e,t){return this.throwIfDisposed(),Ad(this,e,t)},As().prototype.min=function(e,t){return this.throwIfDisposed(),Ru(this,e,t)},As().prototype.minimum=function(e){return this.throwIfDisposed(),Md(this,e)},As().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),Od(this,e,t)},As().prototype.mod=function(e){return this.throwIfDisposed(),Ld(this,e)},As().prototype.mul=function(e){return this.throwIfDisposed(),qo(this,e)},As().prototype.neg=function(){return this.throwIfDisposed(),fd(this)},As().prototype.norm=function(e,t,n){return this.throwIfDisposed(),Pu(this,e,t,n)},As().prototype.notEqual=function(e){return this.throwIfDisposed(),Wd(this,e)},As().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),Vd(this,e,t,n)},As().prototype.onesLike=function(){return this.throwIfDisposed(),Ud(this)},As().prototype.pad=function(e,t){return this.throwIfDisposed(),Hd(this,e,t)},As().prototype.pool=function(e,t,n,r,a,s){return this.throwIfDisposed(),Zd(this,e,t,n,r,a,s)},As().prototype.pow=function(e){return this.throwIfDisposed(),Fu(this,e)},As().prototype.prelu=function(e){return this.throwIfDisposed(),Jd(this,e)},As().prototype.prod=function(e,t){return this.throwIfDisposed(),Qd(this,e,t)},As().prototype.reciprocal=function(){return this.throwIfDisposed(),$p(this)},As().prototype.relu=function(){return this.throwIfDisposed(),Ap(this)},As().prototype.relu6=function(){return this.throwIfDisposed(),Rp(this)},As().prototype.reshapeAs=function(e){return this.throwIfDisposed(),kl(this,e.shape)},As().prototype.reshape=function(e){return this.throwIfDisposed(),kl(this,e)},As().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),wc(this,e,t,n)},As().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),vc(this,e,t,n)},As().prototype.reverse=function(e){return this.throwIfDisposed(),Fp(this,e)},As().prototype.rfft=function(){return this.throwIfDisposed(),th(this)},As().prototype.round=function(){return this.throwIfDisposed(),zp(this)},As().prototype.rsqrt=function(){return this.throwIfDisposed(),Pp(this)},As().prototype.selu=function(){return this.throwIfDisposed(),Bp(this)},As().prototype.separableConv2d=function(e,t,n,r,a,s){return this.throwIfDisposed(),Wp(this,e,t,n,r,a,s)},As().prototype.sigmoid=function(){return this.throwIfDisposed(),_l(this)},As().prototype.sign=function(){return this.throwIfDisposed(),Up(this)},As().prototype.sin=function(){return this.throwIfDisposed(),Gp(this)},As().prototype.sinh=function(){return this.throwIfDisposed(),Hp(this)},As().prototype.slice=function(e,t){return this.throwIfDisposed(),Cl(this,e,t)},As().prototype.softmax=function(e){return this.throwIfDisposed(),Yp(this,e)},As().prototype.softplus=function(){return this.throwIfDisposed(),md(this)},As().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Yd(this,e,t)},As().prototype.split=function(e,t){return this.throwIfDisposed(),eh(this,e,t)},As().prototype.sqrt=function(){return this.throwIfDisposed(),Mu(this)},As().prototype.square=function(){return this.throwIfDisposed(),Ou(this)},As().prototype.squaredDifference=function(e){return this.throwIfDisposed(),nh(this,e)},As().prototype.squeeze=function(e){return this.throwIfDisposed(),rh(this,e)},As().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof $s?[this,e]:[this,...e];return ah(n,t)},As().prototype.step=function(e){return this.throwIfDisposed(),sh(this,e)},As().prototype.stridedSlice=function(e,t,n,r,a,s,i,o){return this.throwIfDisposed(),ih(this,e,t,n,r,a,s,i,o)},As().prototype.sub=function(e){return this.throwIfDisposed(),yd(this,e)},As().prototype.sum=function(e,t){return this.throwIfDisposed(),Lu(this,e,t)},As().prototype.tan=function(){return this.throwIfDisposed(),oh(this)},As().prototype.tanh=function(){return this.throwIfDisposed(),El(this)},As().prototype.tile=function(e){return this.throwIfDisposed(),Gu(this,e)},As().prototype.toBool=function(){return this.throwIfDisposed(),Wo(this,"bool")},As().prototype.toFloat=function(){return this.throwIfDisposed(),Wo(this,"float32")},As().prototype.toInt=function(){return this.throwIfDisposed(),Wo(this,"int32")},As().prototype.topk=function(e,t){return this.throwIfDisposed(),xh(this,e,t)},As().prototype.transpose=function(e){return this.throwIfDisposed(),Eh(this,e)},As().prototype.unique=function(e){return this.throwIfDisposed(),vh(this,e)},As().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),kh(this,e,t)},As().prototype.unstack=function(e){return this.throwIfDisposed(),Ih(this,e)},As().prototype.where=function(e,t){return this.throwIfDisposed(),mu(e,this,t)},As().prototype.zerosLike=function(){return this.throwIfDisposed(),gu(this)};
2var Db=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Mb=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Ob=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Lb=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},zb=class e extends Error{constructor(t){super(t),Object.setPrototypeOf(this,e.prototype)}},Pb=class{constructor(e){this.maxEntries=e||100,this.cache=new Map}get(e){let t;return this.cache.has(e)&&(t=this.cache.get(e),this.cache.delete(e),this.cache.set(e,t)),t}put(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxEntries){let e=this.cache.keys().next().value;this.cache.delete(e)}this.cache.set(e,t)}getMaxEntries(){return this.maxEntries}setMaxEntries(e){if(e<0)throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${e}.`);if(this.maxEntries>e)for(let t=0;t<this.maxEntries-e;t++){let e=this.cache.keys().next().value;this.cache.delete(e)}this.maxEntries=e}};function Bb(e,t){if(Array.isArray(e)){let n=[];for(let r=0;r<t;r++)n=n.concat(e);return n}{let n=new Array(t);return n.fill(e),n}}function Wb(e,t){if(!e)throw new zb(t)}function Vb(e,t){let n=0;for(let r of e)r===t&&n++;return n}function Ub(e){return 1===e.length?e[0]:e}function Gb(e){return Array.isArray(e)?e:[e]}function Hb(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return"_"!==t[0]?t:"private"+t}function jb(e){return e.length<=1||-1===e.indexOf("_")?e:e.replace(/[_]+(\w|$)/g,((e,t)=>t.toUpperCase()))}var qb={};function Kb(e){if(null==e)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function Xb(e){if(null!=e&&"object"==typeof e)if(Array.isArray(e))e.forEach((e=>Xb(e)));else{let t=Object.keys(e);for(let n of t){let t=e[n];null!=t&&"object"==typeof t&&(Array.isArray(t)||"ndarray"!==t.type||"number"!=typeof t.value?Xb(t):e[n]=t.value)}}}function Yb(e,t={},n={},r="object",a=!1){if("string"==typeof e){let a,s=e;if(s in n)a=n[s];else if(s in qb)a=qb[s];else if(a=t[s],null==a)throw new Ob(`Unknown ${r}: ${e}. This may be due to one of the following reasons:\n1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.\n2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return a}{let s=e;if(null==s.className||null==s.config)throw new Ob(`${r}: Improper config format: ${JSON.stringify(s)}.\n'className' and 'config' must set.`);let i,o,l=s.className;if(l in n?[i,o]=n[l]:l in qb?[i,o]=qb.className:l in t&&([i,o]=t[l]),null==i)throw new Ob(`Unknown ${r}: ${l}. This may be due to one of the following reasons:\n1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.\n2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(null!=o){let e={};for(let t of Object.keys(qb))e[t]=qb[t];for(let t of Object.keys(n))e[t]=n[t];s.config.customObjects=e;let t=Object.assign({},qb);for(let e of Object.keys(n))qb[e]=n[e];Xb(s.config);let r=o(i,s.config,n,a);return qb=Object.assign({},t),r}{let e=Object.assign({},qb);for(let e of Object.keys(n))qb[e]=n[e];let t=new i(s.config);return qb=Object.assign({},e),t}}}function Zb(e,t){return-1*function(e,t){return e<t?-1:e>t?1:0}(e,t)}function Jb(e){if(null==e)return e;let t=[];for(let n of e)-1===t.indexOf(n)&&t.push(n);return t}function Qb(e){if(null==e)throw new Ob(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function ex(e,t,n){if(null!=n&&e.indexOf(n)<0)throw new Ob(`${n} is not a valid ${t}.  Valid values are ${e} or null/undefined.`)}function tx(e,t,n=0,r=1/0){return Wb(n>=0),Wb(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every((e=>typeof e===t))}function nx(e,t){Array.isArray(e)?(ja.assert(e.length>0,(()=>`${t} is unexpectedly an empty array.`)),e.forEach(((e,n)=>nx(e,`element ${n+1} of ${t}`)))):ja.assert(Number.isInteger(e)&&e>0,(()=>`Expected ${t} to be a positive integer, but got ${rx(e)}.`))}function rx(e){return null===e?"null":Array.isArray(e)?"["+e.map((e=>rx(e))).join(",")+"]":"string"==typeof e?`"${e}"`:`${e}`}function ax(e){return"relu"===e?"relu":"linear"===e?"linear":"elu"===e?"elu":null}var sx=0;function ix(){return sx++}var ox={};function lx(e=""){return e in ox||(ox[e]=0),ox[e]+=1,e+ox[e].toString()}var ux=["channelsFirst","channelsLast"],dx=["nearest","bilinear"],px=["valid","same","causal"],hx=["max","avg"],cx=["sum","mul","concat","ave"],fx=new Map;function mx(e){ex(ux,"DataFormat",e)}function gx(e){ex(px,"PaddingMode",e)}function yx(e){ex(hx,"PoolMode",e)}var bx=[],xx="/";function wx(e,t){bx.push(e);try{let e=t();return bx.pop(),e}catch(e){throw bx.pop(),e}}function vx(e){if(!Nx(e))throw new Error("Not a valid tensor name: '"+e+"'");return(0===bx.length?"":bx.join(xx)+xx)+e}function kx(e){if(!Nx(e))throw new Error("Not a valid tensor name: '"+e+"'");fx.has(e)||fx.set(e,0);let t=fx.get(e);if(fx.set(e,fx.get(e)+1),t>0){let n=`${e}_${t}`;return fx.set(n,1),n}return e}var Ix,Sx=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function Nx(e){return!!e.match(Sx)}function Tx(e){return e===parseInt(e.toString(),10)}function _x(e,t,n){null==t&&(t=0),null==n&&(n=e.length);let r=1;for(let a=t;a<n;++a)r*=e[a];return r}function Cx(e){if(0===e.length)return Number.NaN;let t=Number.POSITIVE_INFINITY;for(let n=0;n<e.length;n++){let r=e[n];r<t&&(t=r)}return t}function Ex(e){if(0===e.length)return Number.NaN;let t=Number.NEGATIVE_INFINITY;for(let n=0;n<e.length;n++){let r=e[n];r>t&&(t=r)}return t}function $x(e,t){if(t<e)throw new Ob(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let r=e;r<t;++r)n.push(r);return n}function Ax(){return null==Ix&&(Ix=Pi().epsilon()),Ix}function Rx(e,t){return Wo(e,t)}function Fx(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),kl(e,n)}
vendor: 6,241 bytes, line 2
2function Dx(e,t,n){return Ci((()=>{switch(e.rank){case 1:return jp(e,t,n);case 2:return qp(e,[t,0],[n,e.shape[1]]);case 3:return Kp(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return Xp(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Cl(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Cl(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new Ob(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function Mx(e,t,n){return Ci((()=>{switch(e.rank){case 1:return jp(e,t,n);case 2:return qp(e,[0,t],[e.shape[0],n]);case 3:return Kp(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return Xp(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new Ob(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function Ox(e,t,n,r){return Ci((()=>{switch(e.rank){case 1:return jp(e,t,n);case 2:switch(r){case 1:return Dx(e,t,n);case 2:return Mx(e,t,n);default:throw new Ob(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return Dx(e,t,n);case 2:return Kp(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return Mx(e,t,n);default:throw new Ob(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return Dx(e,t,n);case 2:return Xp(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return Xp(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return Mx(e,t,n);default:throw new Ob(`The axis is not within the rank of the tensor ${r}`)}default:throw new Ob(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}}))}function Lx(e,t=-1){let n;return t<0&&(n=e[0].rank,t=0!==n?n:0),t===e[0].rank&&(t=-1),Nl(e,t)}function zx(e,t){switch(e.rank){case 1:return Gl([e,t]);case 2:return Hl([e,t],0);case 3:return jl([e,t],0);case 4:return ql([e,t],0);default:throw new Ob(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function Px(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new Ob(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Gu(e,t)}function Bx(e,t=0,n=1,r,a){return Sp(e,t,n,r,a)}function Wx(e,t,n,r){if(e.rank<2||t.rank<2)throw new Lb(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){if(e.shape.slice(-1)[0]!==t.shape.slice(-2)[0])throw new Lb(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and  y shape = ${t.shape}`)}if(2===e.rank&&2===t.rank)return zh.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?Gx(e.rank,r,"channelsLast"):null,activation:n});{let a=e.shape.slice(),s=a.pop();e=kl(e,[-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),u=[...i,o],d=Array.from({length:t.rank},((e,n)=>0===n?t.rank-2:n<=t.rank-2?n-1:n));t=kl(Eh(t,d),[l,-1]);let p=[...a,...u];return kl(zh.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?Gx(e.rank,r,"channelsLast"):null,activation:n}),p)}}function Vx(e,t,n){return Ci((()=>(t=Array.isArray(t)?lh(t,"int32"):Wo(t,"int32"),qu(e,t,n))))}function Ux(e){return qo(e,e)}function Gx(e,t,n){let r=t.shape;if(1!==t.rank&&t.rank!==e)throw new Ob(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(5===e){if("channelsFirst"===n)return 1===r.length?kl(t,[1,r[0],1,1,1]):kl(t,[1,r[3],r[0],r[1],r[2]]);if("channelsLast"===n)return 1===r.length?kl(t,[1,1,1,1,r[0]]):kl(t,[1].concat(r))}else if(4===e){if("channelsFirst"===n)return 1===r.length?kl(t,[1,r[0],1,1]):kl(t,[1,r[2],r[0],r[1]]);if("channelsLast"===n)return 1===r.length?kl(t,[1,1,1,r[0]]):kl(t,[1].concat(r))}else if(3===e){if("channelsFirst"===n)return 1===r.length?kl(t,[1,r[0],1]):kl(t,[1,r[1],r[0]]);if("channelsLast"===n)return 1===r.length?kl(t,[1,1,r[0]]):kl(t,[1].concat(r))}else if(e<3)return t;throw new Ob(`Unsupported input rank by biasAdd: ${t.rank}`)}function Hx(e,t,n){return Ci((()=>(null==n&&(n="channelsLast"),mx(n),Go(e,Gx(e.rank,t,n)))))}function jx(e,t,n,r){return Ci((()=>Dh(e,t,n,r)))}function qx(e,t,n=!1){return n?e():t()}var Kx=["fanIn","fanOut","fanAvg"],Xx=["normal","uniform","truncatedNormal"];var Yx=class extends Qc.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},Zx=class extends Yx{apply(e,t){return Rd(e,t)}};Zx.className="Zeros",Qc.registerClass(Zx);var Jx=class extends Yx{apply(e,t){return Fd(e,t)}};Jx.className="Ones",Qc.registerClass(Jx);var Qx=class extends Yx{constructor(e){if(super(),"object"!=typeof e)throw new Ob(`Expected argument of type ConstantConfig but got ${e}`);if(void 0===e.value)throw new Ob(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return Ci((()=>qo(Du(this.value),Fd(e,t))))}getConfig(){return{value:this.value}}};Qx.className="Constant",Qc.registerClass(Qx);var ew=class extends Yx{constructor(e){super(),this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return Tp(e,this.minval,this.maxval,t,this.seed)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};ew.className="RandomUniform",Qc.registerClass(ew);var tw=class extends Yx{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Lb(`randomNormal does not support dType ${t}.`);return Bx(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};tw.className="RandomNormal",Qc.registerClass(tw);var nw=class extends Yx{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Lb(`truncatedNormal does not support dType ${t}.`);return wh(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};nw.className="TruncatedNormal",Qc.registerClass(nw);var rw=class extends Yx{constructor(e){super(),this.gain=null!=e.gain?e.gain:1}apply(e,t){return Ci((()=>
2{if(2!==e.length||e[0]!==e[1])throw new Ob("Identity matrix initializer can only be used for 2D square matrices.");return qo(this.gain,Hu(e[0]))}))}getConfig(){return{gain:this.gain}}};rw.className="Identity",Qc.registerClass(rw);var aw=class extends Yx{constructor(e){if(super(),e.scale<0)throw new Ob(`scale must be a positive float. Got: ${e.scale}`);this.scale=null==e.scale?1:e.scale,this.mode=null==e.mode?"fanIn":e.mode,function(e){ex(Kx,"FanMode",e)}(this.mode),this.distribution=null==e.distribution?"normal":e.distribution,function(e){ex(Xx,"Distribution",e)}(this.distribution),this.seed=e.seed}apply(e,t){let n=function(e,t="channelsLast"){let n,r;if(mx(t),2===e.length)n=e[0],r=e[1];else if(-1!==[3,4,5].indexOf(e.length)){if("channelsFirst"===t){let t=_x(e,2);n=e[1]*t,r=e[0]*t}else if("channelsLast"===t){let t=_x(e,0,e.length-2);n=e[e.length-2]*t,r=e[e.length-1]*t}}else{let t=_x(e);n=Math.sqrt(t),r=Math.sqrt(t)}return[n,r]}(e),r=n[0],a=n[1],s=this.scale;if("fanIn"===this.mode?s/=Math.max(1,r):"fanOut"===this.mode?s/=Math.max(1,a):s/=Math.max(1,(r+a)/2),"normal"===this.distribution){let n=Math.sqrt(s);if("float32"!==(t=t||"float32")&&"int32"!==t)throw new Lb(`${this.getClassName()} does not support dType ${t}.`);return wh(e,0,n,t,this.seed)}{let n=Math.sqrt(3*s);return Tp(e,-n,n,t,this.seed)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};aw.className="VarianceScaling",Qc.registerClass(aw);var sw=class extends aw{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return aw.className}};sw.className="GlorotUniform",Qc.registerClass(sw);var iw=class extends aw{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return aw.className}};iw.className="GlorotNormal",Qc.registerClass(iw);var ow=class extends aw{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return aw.className}};ow.className="HeNormal",Qc.registerClass(ow);var lw=class extends aw{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return aw.className}};lw.className="HeUniform",Qc.registerClass(lw);var uw=class extends aw{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:null==e?null:e.seed})}getClassName(){return aw.className}};uw.className="LeCunNormal",Qc.registerClass(uw);var dw=class extends aw{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:null==e?null:e.seed})}getClassName(){return aw.className}};dw.className="LeCunUniform",Qc.registerClass(dw);var pw=class extends Yx{constructor(e){super(),this.DEFAULT_GAIN=1,this.ELEMENTS_WARN_SLOW=2e3,this.gain=null==e.gain?this.DEFAULT_GAIN:e.gain,this.seed=e.seed}apply(e,t){return Ci((()=>{if(e.length<2)throw new Lb("Shape must be at least 2D.");if("int32"!==t&&"float32"!==t&&void 0!==t)throw new TypeError(`Unsupported data type ${t}.`);let n=ja.sizeFromShape(e.slice(0,-1)),r=e[e.length-1],a=n*r;a>this.ELEMENTS_WARN_SLOW&&console.warn(`Orthogonal initializer is being called on a matrix with more than ${this.ELEMENTS_WARN_SLOW} (${a}) elements: Slowness may result.`);let s=Bx([Math.max(r,n),Math.min(r,n)],0,1,t,this.seed),i=Xc.qr(s,!1),o=i[0],l=i[1].flatten().stridedSlice([0],[Math.min(r,n)*Math.min(r,n)],[Math.min(r,n)+1]);return o=qo(o,l.sign()),n<r&&(o=o.transpose()),qo(Du(this.gain),o.reshape(e))}))}getConfig(){return{gain:this.gain,seed:this.seed}}};pw.className="Orthogonal",Qc.registerClass(pw);var hw={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 cw(e,t={}){return Yb(e,Qc.SerializationMap.getMap().classNameMap,t,"initializer")}function fw(e){return Kb(e)}function mw(e){if("string"==typeof e){let t=e in hw?hw[e]:e;if("GlorotNormal"===t)return new iw;if("GlorotUniform"===t)return new sw;if("HeNormal"===t)return new ow;if("HeUniform"===t)return new lw;if("LeCunNormal"===t)return new uw;if("LeCunUniform"===t)return new dw;{let e={};return e.className=t,e.config={},cw(e)}}return e instanceof Yx?e:cw(e)}function gw(e){return Array.isArray(e)&&Array.isArray(e[0])}function yw(e){return 0===e.length?[]:Array.isArray(e[0])?e:[e]}function bw(e){let t;if(Array.isArray(e)){if(1!==e.length)throw new Ob(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function xw(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(1===e.length)return e[0];throw new Ob(`Expected exactly 1 Shape; got ${e.length}`)}return e}function ww(e){let t=0;for(let n of e)0===n.shape.length?t+=1:t+=n.shape.reduce(((e,t)=>e*t));return t}
2var vw="Variable",kw=class{constructor(e,t="float32",n=vw,r=!0,a=null){this.dtype=null==t?"float32":t,this.shape=e.shape,this.id=ix(),n=null==n?vw:n,this.originalName=vx(n),this.name=kx(this.originalName),this.trainable_=r,this.constraint=a,this.val=Nh(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),function(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}(this.val,e),this.val.id!==e.id&&(this.val.assign(e),null!=this.constraint&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function Iw(e){return e.map((e=>e.read()))}function Sw(e){e.forEach((e=>{e[0].write(e[1])}))}var Nw=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,null!=e.shape?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Tw=class{constructor(e,t,n,r,a,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=a,this.outputTensorIndex=i,this.id=ix(),null!=s&&(this.originalName=vx(s),this.name=kx(this.originalName)),this.rank=t.length}},_w=0,Cw=class{constructor(e,t){this.callArgs=t,this.id=_w++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let t of e.inboundLayers)null!=t&&t.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)null!=t?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},Ew=0,$w=class extends Qc.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=Ew++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let e=this.getClassName();t=Hb(e)+"_"+lx(e)}if(this.name=t,this.trainable_=null==e.trainable||e.trainable,null!=e.inputShape||null!=e.batchInputShape){let t;if(null!=e.batchInputShape)t=e.batchInputShape;else if(null!=e.inputShape){let n=null;null!=e.batchSize&&(n=e.batchSize),t=[n].concat(e.inputShape)}this.batchInputShape=t;let n=e.dtype;null==n&&(n=e.inputDType),null==n&&(n="float32"),this.dtype=n}null!=e.weights?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(0===this.inboundNodes.length)throw new Mb(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new Ob(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Ub(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Ub(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new Db(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(0===this.inboundNodes.length)throw new Db(`Layer ${this.name} is not connected, no input to return.`);return Ub(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(0===this.inboundNodes.length)throw new Db(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new Db(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Ub(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map((e=>e()))}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}
2set trainable(e){this._trainableWeights.forEach((t=>t.trainable=e)),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter((e=>e.trainable)):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter((e=>!e.trainable)).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){let t=Gb(e);if(null==this.inputSpec||0===this.inputSpec.length)return;let n=Gb(this.inputSpec);if(t.length!==n.length)throw new Ob(`Layer ${this.name} expects ${n.length} inputs, but it received ${t.length} input tensors. Input received: ${e}`);for(let e=0;e<t.length;e++){let r=t[e],a=n[e];if(null==a)continue;let s=r.rank;if(null!=a.ndim&&s!==a.ndim)throw new Ob(`Input ${e} is incompatible with layer ${this.name}: expected ndim=${a.ndim}, found ndim=${s}`);if(null!=a.maxNDim&&s>a.maxNDim)throw new Ob(`Input ${e} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${s}`);if(null!=a.minNDim&&s<a.minNDim)throw new Ob(`Input ${e} is incompatible with layer ${this.name}: expected min_ndim=${a.minNDim}, found ndim=${s}.`);if(null!=a.dtype&&r.dtype!==a.dtype)throw new Ob(`Input ${e} is incompatible with layer ${this.name} : expected dtype=${a.dtype}, found dtype=${r.dtype}.`);if(a.axes){let t=r.shape;for(let n in a.axes){let r=Number(n),s=a.axes[n],i=r>=0?t[r]:t[t.length+r];if(null!=s&&-1===[s,null].indexOf(i))throw new Ob(`Input ${e} is incompatible with layer ${this.name}: expected axis ${r} of input shape to have value ${s} but got shape ${t}.`)}}if(null!=a.shape)for(let t=0;t<a.shape.length;++t){let n=a.shape[t],s=r.shape[t];if(null!=n&&null!=s&&n!==s)throw new Ob(`Input ${e} is incompatible with layer ${this.name}: expected shape=${a.shape}, found shape=${r.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){null!=this._callHook&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=Gb(e),r=function(e){let t=!0;for(let n of Gb(e))if(!(n instanceof Tw)){t=!1;break}return t}(e),a=function(e){let t=!0;for(let n of Gb(e))if(n instanceof Tw){t=!1;break}return t}(e);if(r===a)throw new Ob("Arguments to apply() must be all SymbolicTensors or all Tensors");return wx(this.name,(()=>{if(!this.built){this.assertInputCompatibility(e);let t=[];for(let n of Gb(e))t.push(n.shape);this.build(Ub(t)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),null===this._refCount&&a&&(this._refCount=1)}if(this.assertInputCompatibility(e),a){let r=this.call(e,t);this.supportsMasking&&this.setMaskMetadata(e,r);let a=Gb(r),s=[];for(let e of a)-1!==n.indexOf(e)&&(e=e.clone()),s.push(e);if(r=Ub(s),null!=this.activityRegularizer)throw new Lb("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return r}{let n,r=function(e){e=Gb(e);let t=[];for(let n of e)t.push(n.shape);return Ub(t)}(e),a=this.computeOutputShape(r),s="float32";if(this.warnOnIncompatibleInputShape(Array.isArray(e)?r[0]:r),n=null!=a&&a.length>0&&Array.isArray(a[0])?a.map(((n,r)=>new Tw(s,n,this,Gb(e),t,this.name,r))):new Tw(s,a,this,Gb(e),t,this.name),this.addInboundNode(e,n,null,null,r,a,t),this._refCount++,null!=this.activityRegularizer)throw new Lb("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return n}}))}warnOnIncompatibleInputShape(e){if(null!=this.batchInputShape)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{let t=!1;this.batchInputShape.forEach(((n,r)=>{null!=n&&null!=e[r]&&e[r]!==n&&(t=!0)})),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}
2get outputShape(){if(null==this.inboundNodes||0===this.inboundNodes.length)throw new Db(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);-1===e.indexOf(n)&&e.push(n)}if(1===e.length){let e=this.inboundNodes[0].outputShapes;return Array.isArray(e)&&Array.isArray(e[0])&&1===e.length?e[0]:e}throw new Db(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new Mb(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return ww(this.weights)}build(e){this.built=!0}getWeights(e=!1){return Iw(e?this.trainableWeights:this.weights)}setWeights(e){Ci((()=>{let t=this.weights;if(t.length!==e.length)throw new Ob(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(0===t.length)return;let n=[],r=Iw(t);for(let a=0;a<r.length;++a){let s=r[a],i=t[a],o=e[a];if(!ja.arraysEqual(s.shape,o.shape))throw new Ob(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}Sw(n)}))}addWeight(e,t,n,r,a,s,i,o){if(-1!==this._addedWeightNames.indexOf(e))throw new Ob(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),null==n&&(n="float32"),this.fastWeightInitDuringBuild&&(r=null!=o?o():mw("zeros"));let l=r.apply(t,n),u=new kw(l,n,e,s,i);return l.dispose(),null!=a&&this.addLoss((()=>a.apply(u.read()))),null==s&&(s=!0),s?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){null==e||Array.isArray(e)&&0===e.length||(e=Gb(e),void 0!==this._losses&&null!==this._losses&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(null!=t){if(!Array.isArray(t))throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);t.forEach((e=>{if(null!=e)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)}))}return null}return t}setMaskMetadata(e,t,n){if(!this.supportsMasking)return;let r=this.computeMask(e,n),a=Gb(t),s=Gb(r);if(a.length!==s.length)throw new Error(`${this.name} outputs ${a.length} tensors but ${a.length} masks for those tensors`);for(let e=0;e<a.length;e++)a[e].kerasMask=s[e]}addInboundNode(e,t,n,r,a,s,i=null){let o=Gb(e);t=Gb(t),n=Gb(n),r=Gb(r),a=yw(a),s=yw(s);let l=[],u=[],d=[];for(let e of o)l.push(e.sourceLayer),u.push(e.nodeIndex),d.push(e.tensorIndex);new Cw({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:d,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:a,outputShapes:s},i);for(let e=0;e<t.length;e++)t[e].sourceLayer=this,t[e].nodeIndex=this.inboundNodes.length-1,t[e].tensorIndex=e}getConfig(){let e={name:this.name,trainable:this.trainable};return null!=this.batchInputShape&&(e.batchInputShape=this.batchInputShape),null!=this.dtype&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach((e=>e.dispose())),this.weights.length}assertNotDisposed(){if(0===this._refCount)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(null===this._refCount)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return 0==--this._refCount&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function Aw(e,t,n){if((null==t||null!=n&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),0===t.inboundNodes.length)return[e];{let e=t.inboundNodes[n];if(0===e.inboundLayers.length)return e.inputTensors;{let t=[];for(let n=0;n<e.inboundLayers.length;n++){let r=Aw(e.inputTensors[n],e.inboundLayers[n],e.nodeIndices[n]);for(let e of r)-1===t.indexOf(e)&&t.push(e)}return t}}}var Rw=class extends $w{constructor(e){if(super({dtype:e.dtype,name:null!=e.name?e.name:lx("input").toString()}),null==e.batchSize&&(e.batchSize=null),null==e.sparse&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,null!=e.inputShape&&null!=e.batchInputShape)throw new Ob("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(null==t){if(null==e.inputShape)throw new Ob("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(null!=e.batchSize)throw new Ob("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let r=new Tw(this.dtype,this.batchInputShape,this,[],{},this.name);r.nodeIndex=0,r.tensorIndex=0,new Cw({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[r],outputTensors:[r],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new Ob(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};function Fw(e){if(null==e.batchShape&&null==e.shape)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");
2if(null!=e.batchShape&&null!=e.shape)throw new Ob("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;null!=e.shape&&null==t&&(t=[null].concat(e.shape));let n=e.dtype;return null==n&&(n="float32"),new Rw({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}Rw.className="InputLayer",Qc.registerClass(Rw);var Dw=class e{constructor(t){if(this.id2Value={},this.id2Mask={},this.name2Id={},t instanceof e)for(let e in t.id2Value)this.id2Value[e]=t.id2Value[e],e in t.id2Mask&&(this.id2Mask[e]=t.id2Mask[e]);else{if(null==t)return;for(let e of t)this.add(e.key,e.value)}}add(e,t,n){if(null!=this.id2Value[e.id])throw new Ob(`Duplicate key: name=${e.name}, id=${e.id}`);return this.id2Value[e.id]=function(e,t){if(null==e.dtype||e.dtype===t.dtype)return t;try{return Wo(t,e.dtype)}catch(n){throw new Ob(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}(e,t),this.name2Id[e.name]=e.id,null!=n&&(this.id2Mask[e.id]=n),this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return null!=this.id2Value[e.id]}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof Tw){if(null==this.id2Value[e.id])throw new Ob(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}{let t=this.name2Id[e];if(null==t)throw new Ob(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof Tw){if(null==this.id2Value[e.id])throw new Ob(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}{let t=this.name2Id[e];if(null==t)throw new Ob(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){null!=this.id2Mask&&Ei(this.id2Mask)}},Mw=new Pb,Ow=new Pb;function Lw(e,t,n,r){let a=null!=n&&n.training,s=Array.isArray(e),i=s?e:[e],o=i.map((e=>e.name)),l=[],u=t.names();for(let e of o)-1!==u.indexOf(e)?l.push(t.getValue(e)):l.push(null);null!=r&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);let d,p=o.join(",")+"|"+t.names().sort().join(","),h=Mw.get(p);if(null==h){let e=function(e,t){ja.assert(null!=e&&e.length>0,(()=>"Expected at least one fetch, got none"));let n=[],r={};if(1===e.length){let a=Pw(e[0],t);n=a.sorted,r=a.recipientMap}else{let a=new Set;for(let s of e){let{sorted:e,recipientMap:i}=Pw(s,t);for(let t of e)a.has(t.name)||(n.push(t),a.add(t.name));for(let e in i)null==r[e]&&(r[e]=new Set),i[e].forEach((t=>r[e].add(t)))}}return{sorted:n,recipientCounts:zw(r)}}(i,t);h=e.sorted,d=e.recipientCounts,Mw.put(p,h),Ow.put(p,d)}d={},a||Object.assign(d,Ow.get(p));let c=new Dw(t);for(let e=0;e<h.length;++e){if(null!=r){let e=Ti().numTensors;e>r.maxNumTensors&&(r.maxNumTensors=e),e<r.minNumTensors&&(r.minNumTensors=e)}let s=h[e],i=s.sourceLayer;if(i instanceof Rw)continue;let u=[],p=[],f=[],m=!1;for(let e of s.inputs){let n=c.getValue(e),r=c.getMask(e);u.push(n),p.push(r),null!=r&&(m=!0),a||(d[e.name]--,0===d[e.name]&&!t.hasKey(e)&&-1===o.indexOf(e.name)&&!n.isDisposed&&!0!==e.sourceLayer.stateful&&f.push(n))}m&&((n=n||{}).mask=p[0]);let g=Gb(i.apply(u,n)),y=null;i.supportsMasking&&(y=i.computeMask(u,p));let b=Bw(s),x=Array.isArray(b)?b:[b];for(let e=0;e<x.length;++e){c.hasKey(x[e])||c.add(x[e],g[e],Array.isArray(y)?y[0]:y);let t=o.indexOf(x[e].name);-1!==t&&(l[t]=g[e])}a||Ei(f)}return c.disposeMasks(),s?l:l[0]}function zw(e){let t={};for(let n in e)t[n]=e[n].size;return t}function Pw(e,t){let n=new Set,r=[],a={};for(let e of t.names())n.add(e);let s=[],i=[];for(s.push(e);s.length>0;){let e=s[s.length-1];if(n.has(e.name)){s.pop();continue}let t=i[i.length-1]===s.length-1;if(0===e.inputs.length||t)s.pop(),r.push(e),n.add(e.name),t&&i.pop();else{i.push(s.length-1);for(let t of e.inputs)null==a[t.name]&&(a[t.name]=new Set),a[t.name].add(e.name),!n.has(t.name)&&s.push(t)}}return{sorted:r,recipientMap:a}}function Bw(e){let t;
2if(1===e.sourceLayer.inboundNodes.length)t=e.sourceLayer.output;else{let n=null;for(let t=0;t<e.sourceLayer.inboundNodes.length;++t)for(let r of e.sourceLayer.inboundNodes[t].outputTensors)if(r.id===e.id){n=t;break}t=e.sourceLayer.getOutputAt(n)}return t}ut().registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES",(()=>100),(function(e){null!=Mw&&Mw.setMaxEntries(e),null!=Ow&&Ow.setMaxEntries(e)}));var Ww={};function Vw(e,t){return Ci((()=>Mu(Lu(qo(e,e),t,!0))))}B(Ww,{maxNorm:()=>Jw,minMaxNorm:()=>tv,nonNeg:()=>ev,unitNorm:()=>Qw});var Uw=class extends Qc.Serializable{getConfig(){return{}}},Gw=class extends Uw{constructor(e){super(),this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=null!=e.maxValue?e.maxValue:this.defaultMaxValue,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return Ci((()=>{let t=Vw(e,this.axis),n=Ul(t,0,this.maxValue);return qo(e,jo(n,Go(Ax(),t)))}))}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};Gw.className="MaxNorm",Qc.registerClass(Gw);var Hw=class extends Uw{constructor(e){super(),this.defaultAxis=0,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return Ci((()=>jo(e,Go(Ax(),Vw(e,this.axis)))))}getConfig(){return{axis:this.axis}}};Hw.className="UnitNorm",Qc.registerClass(Hw);var jw=class extends Uw{apply(e){return Ap(e)}};jw.className="NonNeg",Qc.registerClass(jw);var qw=class extends Uw{constructor(e){super(),this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=null!=e.minValue?e.minValue:this.defaultMinValue,this.maxValue=null!=e.maxValue?e.maxValue:this.defaultMaxValue,this.rate=null!=e.rate?e.rate:this.defaultRate,this.axis=null!=e.axis?e.axis:this.defaultAxis}apply(e){return Ci((()=>{let t=Vw(e,this.axis),n=Go(qo(this.rate,Ul(t,this.minValue,this.maxValue)),qo(1-this.rate,t));return qo(e,jo(n,Go(Ax(),t)))}))}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};qw.className="MinMaxNorm",Qc.registerClass(qw);var Kw={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Xw(e){return Kb(e)}function Yw(e,t={}){return Yb(e,Qc.SerializationMap.getMap().classNameMap,t,"constraint")}function Zw(e){if(null==e)return null;if("string"==typeof e){return Yw({className:e in Kw?Kw[e]:e,config:{}})}return e instanceof Uw?e:Yw(e)}function Jw(e){return new Gw(e)}function Qw(e){return new Hw(e)}function ev(){return new jw}function tv(e){return new qw(e)}var nv={};function rv(){return new Zx}function av(){return new Jx}function sv(e){return new Qx(e)}function iv(e){return new ew(e)}function ov(e){return new tw(e)}function lv(e){return new nw(e)}function uv(e){return new rw(e)}function dv(e){return new aw(e)}function pv(e){return new sw(e)}function hv(e){return new iw(e)}function cv(e){return new ow(e)}function fv(e){return new lw(e)}function mv(e){return new uw(e)}function gv(e){return new dw(e)}function yv(e){return new pw(e)}B(nv,{constant:()=>sv,glorotNormal:()=>hv,glorotUniform:()=>pv,heNormal:()=>cv,heUniform:()=>fv,identity:()=>uv,leCunNormal:()=>mv,leCunUniform:()=>gv,ones:()=>av,orthogonal:()=>yv,randomNormal:()=>ov,randomUniform:()=>iv,truncatedNormal:()=>lv,varianceScaling:()=>dv,zeros:()=>rv});var bv,xv={};async function wv(e){if(null==e)return;let t=[],n=[],r=[];for(let a in e){let s=e[a];if("number"!=typeof s){let e=s;t.push(e.data()),n.push(a),r.push(e)}}if(t.length>0){let a=await Promise.all(t);for(let t=0;t<a.length;++t)e[n[t]]=a[t][0];Ei(r)}}function vv(e){if(null!=e)for(let t in e){let n=e[t];"number"!=typeof n&&n.dispose()}}B(xv,{Layer:()=>$w,RNN:()=>MI,RNNCell:()=>OI,activation:()=>fN,add:()=>IN,alphaDropout:()=>cT,average:()=>SN,averagePooling1d:()=>FN,averagePooling2d:()=>ON,averagePooling3d:()=>PN,avgPool1d:()=>DN,avgPool2d:()=>LN,avgPool3d:()=>BN,avgPooling1d:()=>MN,avgPooling2d:()=>zN,avgPooling3d:()=>WN,batchNormalization:()=>$N,bidirectional:()=>sT,categoryEncoding:()=>bT,centerCrop:()=>gT,concatenate:()=>NN,conv1d:()=>sN,conv2d:()=>iN,conv2dTranspose:()=>oN,conv3d:()=>lN,conv3dTranspose:()=>uN,convLstm2d:()=>tT,convLstm2dCell:()=>nT,cropping2D:()=>pN,dense:()=>mN,depthwiseConv2d:()=>cN,dot:()=>EN,dropout:()=>gN,elu:()=>QS,embedding:()=>kN,flatten:()=>bN,gaussianDropout:()=>hT,gaussianNoise:()=>pT,globalAveragePooling1d:()=>VN,globalAveragePooling2d:()=>UN,globalMaxPool1d:()=>oT,globalMaxPool2d:()=>lT,globalMaxPooling1d:()=>GN,globalMaxPooling2d:()=>HN,gru:()=>XN,gruCell:()=>
2YN,input:()=>Dk,inputLayer:()=>JS,layerNormalization:()=>AN,leakyReLU:()=>tN,lstm:()=>ZN,lstmCell:()=>JN,masking:()=>fT,maxPool1d:()=>uT,maxPool2d:()=>dT,maxPooling1d:()=>jN,maxPooling2d:()=>qN,maxPooling3d:()=>KN,maximum:()=>TN,minimum:()=>_N,multiply:()=>CN,permute:()=>vN,prelu:()=>nN,randomWidth:()=>xT,reLU:()=>eN,repeatVector:()=>xN,rescaling:()=>mT,reshape:()=>wN,resizing:()=>yT,rnn:()=>rT,separableConv2d:()=>dN,simpleRNN:()=>QN,simpleRNNCell:()=>eT,softmax:()=>rN,spatialDropout1d:()=>yN,stackedRNNCells:()=>aT,thresholdedReLU:()=>aN,timeDistributed:()=>iT,upSampling2d:()=>hN,zeroPadding2d:()=>RN}),function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"}(bv||(bv={}));var kv=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},Iv=class{constructor(e,t=10){null==e&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){null==t&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){null==t&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){null==t&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){null==t&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){null==e&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){null==e&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},Sv=class extends kv{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){null==t&&(t={});let n=null==t.size?0:t.size;this.seen+=n;for(let e in t){let r=t[e];if("number"==typeof r)this.totals.hasOwnProperty(e)||(this.totals[e]=0),this.totals[e]=this.totals[e]+r*n;else{let t;e in this.totals?t=this.totals[e]:this.totals[e]=0;let a=Ci((()=>Go(this.totals[e],qo(r,n))));this.totals[e]=a,null!=t&&t.dispose()}}}async onEpochEnd(e,t){if(null!=t)for(let e of this.params.metrics)null!=this.totals[e]&&("number"==typeof this.totals[e]?t[e]=this.totals[e]/this.seen:Ci((()=>{let n=qo(jo(1,this.seen),this.totals[e]);t[e]=n,this.totals[e].dispose(),$i(t[e])})))}},Nv=class extends kv{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){null==t&&(t={}),this.epoch.push(e);for(let e in t)null==this.history[e]&&(this.history[e]=[]),this.history[e].push(t[e])}async syncData(){let e=[],t=[],n=[];for(let r in this.history){let a=this.history[r];for(let s=0;s<a.length;++s)if("number"!=typeof a[s]){let i=a[s];e.push(i.data()),t.push(r),n.push(s)}}let r=await Promise.all(e);for(let e=0;e<r.length;++e)this.history[t[e]][n[e]].dispose(),this.history[t[e]][n[e]]=r[e][0]}},Tv=class extends kv{constructor(e,t){if(super(),this.currentEpoch=0,this.nowFunc=e.nowFunc,this.nextFrameFunc=e.nextFrameFunc||vm,this.yieldEvery=t||"auto","auto"===this.yieldEvery&&(this.yieldEvery=125),"never"===this.yieldEvery&&null!=e.onYield)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");ja.isNumber(this.yieldEvery)&&(this.maybeWait=function(e,t,n){let r,a=null!=n?n():ja.now();return(...s)=>{let i=null!=n?n():ja.now();return i-a<t||(a=i,r=e(...s)),r}}(this.maybeWait.bind(this),this.yieldEvery,this.nowFunc)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let r=[];null!=this.yield&&(await wv(n),r.push(this.yield(e,t,n))),r.push(this.nextFrameFunc()),await Promise.all(r)}async onEpochBegin(e,t){this.currentEpoch=e,null!=this.epochBegin&&(await wv(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];null!=this.epochEnd&&(await wv(t),n.push(this.epochEnd(e,t))),"epoch"===this.yieldEvery&&n.push(this.nextFrameFunc()),await Promise.all(n)}async onBatchBegin(e,t){null!=this.batchBegin&&(await wv(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];null!=this.batchEnd&&(await wv(t),n.push(this.batchEnd(e,t))),"batch"===this.yieldEvery?n.push(this.nextFrameFunc()):ja.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){null!=this.trainBegin&&(await wv(e),await this.trainBegin(e))}async onTrainEnd(e){null!=this.trainEnd&&(await wv(e),await this.trainEnd(e))}};function _v(e,t){return null==e&&(e={}),e instanceof kv?[e]:Array.isArray(e)&&e[0]instanceof kv?e:Gb(e).map((e=>new Tv(e,t)))}var Cv=class e{constructor(){}static registerCallbackConstructor(t,n){ja.assert(t>=0&&Number.isInteger(t),(()=>`Verbosity level is expected to be an integer >= 0, but got ${t}`)),e.checkForDuplicate(n),null==e.constructors[t]&&(e.constructors[t]=[]),e.constructors[t].push(n)}static checkForDuplicate(t){for(let n in e.constructors)e.constructors[+n].forEac
2h((e=>{if(e===t)throw new Ob("Duplicate callback constructor.")}))}static clear(){e.constructors={}}static createCallbacks(t){let n=[];for(let r in e.constructors){let a=+r;t>=a&&n.push(...e.constructors[a])}return n.map((e=>new e))}};function Ev(e,t,n,r,a,s,i,o,l){let u=new Nv,d=[new Sv,...Cv.createCallbacks(t)];null!=e&&d.push(...e),d.push(u);let p=new Iv(d);return p.setParams({epochs:n,initialEpoch:r,samples:a,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:p,history:u}}function $v(e,t={},n=!1){return Yb(e,Qc.SerializationMap.getMap().classNameMap,t,"layer",n)}function Av(e,t){return Ci((()=>{"float32"!==e.dtype&&(e=Wo(e,"float32"));let n=Lu(Ux(e),t,!0),r=Vl(n.shape,Ax()),a=Mu($d(n,r));return jo(e,a)}))}function Rv(e,t){return Ci((()=>Ad(Ux(yd(t,e)),-1)))}function Fv(e,t){return Ci((()=>Ad(Ko(yd(t,e)),-1)))}function Dv(e,t){return Ci((()=>{let n=yd(e,t),r=Ul(Ko(e),Ax(),Number.MAX_VALUE),a=Ko(jo(n,r));return qo(100,Ad(a,-1))}))}function Mv(e,t,n=!1){return Ci((()=>{if(n)t=Yp(t);else{let e=Lu(t,t.shape.length-1,!0);t=jo(t,e)}return t=Ul(t,Ax(),1-Ax()),fd(Lu(qo(Wo(e,"float32"),sd(t)),t.shape.length-1))}))}function Ov(e,t,n=!1){return Ci((()=>{let r=Wo(ju(function(e){let t=[_x(e.shape)];return kl(e,t)}(e)),"int32"),a=(t=Ul(t,Ax(),1-Ax())).shape;return Mv(kl(Vd(r,a[a.length-1]),a),t,n)}))}function Lv(e,t){return Ci((()=>{let n;return n=Ul(t,Ax(),1-Ax()),n=sd(jo(n,yd(1,n))),Ad(function(e,t){if(!ja.arraysEqual(e.shape,t.shape))throw new Ob(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return Ci((()=>{let n=Ap(t),r=fd(Ko(t));return Go(yd(n,qo(t,e)),id(Wu(r)))}))}(e,n),-1)}))}function zv(e,t){return Ci((()=>{let n=Av(e,-1),r=Av(t,-1),a=qo(n,r);return fd(Lu(a,-1))}))}Cv.constructors={};var Pv={meanSquaredError:Rv,meanAbsoluteError:Fv,meanAbsolutePercentageError:Dv,meanSquaredLogarithmicError:function(e,t){return Ci((()=>{let n=Ul(t,Ax(),Number.MAX_VALUE),r=sd(Go(1,n)),a=Ul(e,Ax(),Number.MAX_VALUE),s=sd(Go(1,a));return Ad(Ux(yd(r,s)),-1)}))},squaredHinge:function(e,t){return Ci((()=>{let n=$d(0,yd(1,qo(e,t)));return Ad(Ux(n),-1)}))},hinge:function(e,t){return Ci((()=>{let n=$d(0,yd(1,qo(e,t)));return Ad(n,-1)}))},categoricalHinge:function(e,t){return Ci((()=>{let n=Lu(qo(e,t),-1),r=Au(qo(yd(1,e),t),-1);return $d(0,Go(1,yd(r,n)))}))},logcosh:function(e,t){return Ci((()=>{let n=Math.log(2),r=yd(t,e),a=yd(Go(r,md(qo(-2,r))),n);return Ad(a,-1)}))},categoricalCrossentropy:Mv,sparseCategoricalCrossentropy:Ov,binaryCrossentropy:Lv,kullbackLeiblerDivergence:function(e,t){return Ci((()=>{let n=Ul(e,Ax(),1),r=Ul(t,Ax(),1);return Lu(qo(e,sd(jo(n,r))),-1)}))},poisson:function(e,t){return Ci((()=>{let n=sd(Go(Ax(),t));return Ad(yd(t,qo(e,n)),-1)}))},cosineProximity:zv};function Bv(e){if("string"==typeof e){if(e in Pv)return Pv[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new Ob(t)}return e}function Wv(e,t){return Ci((()=>{let n=qo(.5,Ud(t)),r=Rx(Ku(t,n),e.dtype);return Ad(fu(e,r),-1)}))}function Vv(e,t){return Ci((()=>Rx(fu(el(e,-1),el(t,-1)),"float32")))}function Uv(e,t){return Ci((()=>Wo(Lu(wd(fu(e,1),fu(t,1))),"float32")))}function Gv(e,t){return Ci((()=>{let n=Uv(e,t),r=function(e,t){return Ci((()=>Wo(Lu(wd(fu(e,0),fu(t,1))),"float32")))}(e,t),a=Go(n,r);return Wo(mu(Ku(a,0),jo(n,a),0),"float32")}))}function Hv(e,t){return Ci((()=>{let n=Uv(e,t),r=function(e,t){return Ci((()=>Wo(Lu(wd(fu(e,1),fu(t,0))),"float32")))}(e,t),a=Go(n,r);return Wo(mu(Ku(a,0),jo(n,a),0),"float32")}))}function jv(e,t){return Lv(e,t)}function qv(e,t){return e.rank===t.rank&&(e=rh(e,[e.rank-1])),(t=el(t,-1)).dtype!==e.dtype&&(t=Wo(t,e.dtype)),Wo(fu(e,t),"float32")}var Kv=Mv,Xv=Ov,Yv={binaryAccuracy:Wv,categoricalAccuracy:Vv,precision:Gv,categoricalCrossentropy:Kv,sparseCategoricalCrossentropy:Xv,mse:Rv,MSE:Rv,mae:Fv,MAE:Fv,mape:Dv,MAPE:Dv,cosine:zv};function Zv(e){if("string"==typeof e&&e in Yv)return Yv[e];if("string"!=typeof e&&null!=e)return e;throw new Ob(`Unknown metric ${e}`)}function Jv(e){if(Wb(null!==e,`Unknown LossOrMetricFn ${e}`),"string"==typeof e)return e;{let t;for(let n of Object.keys(Pv))if(Pv[n]===e){t=n;break}if(void 0!==t)return t;for(let n of Object.keys(Yv))if(Yv[n]===e){t=n;break}return void 0!==t?t:e.name}}function Qv(e,t,n=!1){if(null==e||"object"!=typeof e||Object.getPrototypeOf(e)!==Object.prototype||!ek(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let n=JSON.stringify(e);n.length>1048576&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${n.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= 1048576.`)}}function ek(e){if(null===e)return!0;
2if("object"==typeof e){if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if("string"!=typeof n||!ek(e[n]))return!1;return!0}if(Array.isArray(e)){for(let t of e)if(!ek(t))return!1;return!0}return!1}{let t=typeof e;return"string"===t||"number"===t||"boolean"===t}}function tk(e,t,n,r=console.log){let a,s=function(e){let t=!0,n=[],r=[];for(let t in e.nodesByDepth)n.push(e.nodesByDepth[t]);for(let e of n){if(e.length>1||1===e.length&&e[0].inboundLayers.length>1){t=!1;break}r.push(...e)}if(t)for(let n of e.layers){let e=!1;for(let a of n.inboundNodes)if(-1!==r.indexOf(a)){if(e){t=!1;break}e=!0}if(!t)break}return t}(e),i=["Layer (type)","Input Shape","Output shape","Param #"];if(s?(t=t||90,n=n||[.32,.61,.89,1]):(t=t||115,n=n||[.24,.48,.7,.8,1]),n[n.length-1]<=1&&(n=n.map((e=>Math.floor(t*e)))),!s){i.push("Receives inputs"),a=[];for(let t in e.nodesByDepth)a.push(...e.nodesByDepth[t])}r("_".repeat(t)),nk(i,n,r),r("=".repeat(t));let o=e.layers;for(let e=0;e<o.length;++e)s?rk(o[e],n,r):ak(o[e],n,a,r),r((e===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=function(e){let t;return t=null!=e.collectedTrainableWeights?ww(e.collectedTrainableWeights):ww(e.trainableWeights),t}(e),u=ww(e.nonTrainableWeights);r(`Total params: ${l+u}`),r(`Trainable params: ${l}`),r(`Non-trainable params: ${u}`),r("_".repeat(t))}function nk(e,t,n=console.log){let r="";for(let n=0;n<e.length;++n)n>0&&(r=r.slice(0,r.length-1)+" "),r+=e[n],r=r.slice(0,t[n]),r+=" ".repeat(t[n]-r.length);n(r)}function rk(e,t,n){let r,a;try{a=e.inboundNodes.map((e=>JSON.stringify(e.inputShapes))).join(",")}catch(e){a="multiple"}try{r=JSON.stringify(e.outputShape)}catch(e){r="multiple"}nk([`${e.name} (${e.getClassName()})`,a,r,e.countParams().toString()],t,n)}function ak(e,t,n,r){let a,s;try{s=e.inboundNodes.map((e=>JSON.stringify(e.inputShapes))).join(",")}catch(e){s="multiple"}try{a=JSON.stringify(e.outputShape)}catch(e){a="multiple"}let i=[];for(let t of e.inboundNodes)if(!(null!=n&&n.length>0&&-1===n.indexOf(t)))for(let e=0;e<t.inboundLayers.length;++e){let n=t.inboundLayers[e].name,r=t.nodeIndices[e],a=t.tensorIndices[e];i.push(`${n}[${r}][${a}]`)}let o=e.name,l=e.getClassName(),u=0===i.length?"":i[0];nk([`${o} (${l})`,s,a,e.countParams().toString(),u],t,r);for(let e=1;e<i.length;++e)nk(["","","","",i[e]],t,r)}function sk(e,t,n){return("inboundNodes"===e||"outputLayers"===e||"inputLayers"===e)&&0===t&&"string"==typeof n}function ik(e,t){if(null===e)return null;if("string"==typeof e)return jb(e);if("number"==typeof e||"boolean"==typeof e)return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let r=e[a];sk(t,a,r)?n.push(r):n.push(ik(r,t))}return n}{let t={};for(let n of Object.keys(e)){let r=e[n];if("name"===n&&"string"==typeof r)t[n]=r;else{let e=jb(n);t[e]=ik(r,e)}}return t}}function ok(e,t){if(null==e)return null;if("string"==typeof e)return Hb(e);if("number"==typeof e||"boolean"==typeof e)return e;if(e instanceof Array){let n=[],r=e.length;for(let a=0;a<r;++a){let r=e[a];sk(t,a,r)?n.push(r):n.push(ok(r,t))}return n}{let t={};for(let n of Object.keys(e)){let r=e[n],a=Hb(n);t[a]="name"!==n&&"className"!==n||"string"!=typeof r?ok(r,n):r}return t}}var lk="4.21.0",uk=class e extends $w{constructor(t){if(super({}),this.containerNodes=new Set,this.name=t.name,null==this.name){let e=this.getClassName().toLowerCase();this.name=lx(e)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(t.inputs)?this.inputs=t.inputs.slice():this.inputs=[t.inputs],Array.isArray(t.outputs)?this.outputs=t.outputs.slice():this.outputs=[t.outputs],Jb(this.inputs).length!==this.inputs.length)throw new Ob(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map((e=>e.name))}`);Jb(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map((e=>e.name))}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let e of this.outputs){let t=e.sourceLayer,n=e.nodeIndex,r=e.tensorIndex;this.outputLayers.push(t),this.outputLayersNodeIndices.push(n),this.outputLayersTensorIndices.push(r)}for(let e of this.inputs){let t=e.sourceLayer,n=e.nodeIndex,r=e.tensorIndex;Wb(0===n,"input layer has >1 nodes"),Wb(0===r,"input layer has >1 tensors"),this.inputLayers.push(t),this.inputLayersNodeIndices.push(n),this.inputLayersTensorIndices.push(r)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let e=0;e<this.inputLayers.length;e++){let n=this.inputLayers[e];if(!(n instanceof Rw))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${t.input
2s}. Input ${e} (0-based) originates from layer type ${n.getClassName()}.`);this.inputNames.push(n.name),this.feedInputShapes.push(n.batchInputShape),this.feedInputNames.push(n.name)}for(let e of this.outputLayers)this.outputNames.push(e.name);this.internalInputShapes=this.inputs.map((e=>e.shape)),this.internalOutputShapes=this.outputs.map((e=>e.shape));let n={},r={},a={},s={},i={},o=[],l=(t,n,r,a,s,u)=>{(null==a||null==s||null==u)&&(a=t.sourceLayer,s=t.nodeIndex,u=t.tensorIndex);let d=a.inboundNodes[s];if(-1!==r.indexOf(d))throw new Mb(`The tensor ${t.name} at layer "${a.name}" is part of a cycle.`);if(-1!==n.indexOf(d))return;this.containerNodes.add(e.nodeKey(a,s)),a.id in i||(i[a.id]=Object.keys(i).length),-1===r.indexOf(d)&&r.push(d);let p=d.inboundLayers.length;for(let e=0;e<p;e++){let t=d.inputTensors[e],a=d.inboundLayers[e],s=d.nodeIndices[e],i=d.tensorIndices[e];l(t,n,r,a,s,i)}for(n.push(d);r.indexOf(d)>=0;)r.splice(r.indexOf(d),1);o.push(d)},u=[],d=[];for(let e of this.outputs)l(e,u,d);let p=o.slice().reverse();for(let e of p){r[e.id]=e,e.id in n||(n[e.id]=0);let t=n[e.id],i=null==a[e.outboundLayer.id]?0:a[e.outboundLayer.id];t=Math.max(t,i),a[e.outboundLayer.id]=t,s[e.outboundLayer.id]=e.outboundLayer,n[e.id]=t;for(let a=0;a<e.inboundLayers.length;a++){let s=e.inboundLayers[a],i=e.nodeIndices[a],o=s.inboundNodes[i],l=null==n[o.id]?0:n[o.id];n[o.id]=Math.max(t+1,l),r[o.id]=o}}let h={};for(let e in n){let t=n[e];t in h||(h[t]=[]),h[t].push(r[e])}let c={};for(let e in a){let t=a[e];t in c||(c[t]=[]),c[t].push(s[e])}let f=Object.keys(c).map((e=>parseInt(e,10))).sort(Zb);this.layers=[];for(let t of f){let n=c[t];n.sort(((e,t)=>{let n=i[e.id],r=i[t.id];return n<r?-1:n>r?1:0}));for(let t of n)t instanceof e&&this.internalContainerRefs.push(t),this.layers.push(t)}this.layersByDepth=c,f=Object.keys(h).map((e=>parseInt(e,10))).sort(Zb);let m=this.inputs.slice(),g=[];for(let e of f)for(let t of h[e]){let e=t.outboundLayer;if(null!=e){for(let n of t.inputTensors)if(-1===m.indexOf(n))throw new Mb(`Graph disconnected: cannot obtain value for tensor ${n} at layer "${e.name}". The following previous layers were accessed without issue: ${g}`);for(let e of t.outputTensors)m.push(e);g.push(e.name)}}this.nodesByDepth=h;let y=this.layers.map((e=>e.name));for(let e of y){let t=y.filter((t=>t===e)).length;if(1!==t)throw new Mb(`The name "${e}" is used ${t} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(y))}this.outboundNodes=[],this.inboundNodes=[],new Cw({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map((e=>null)),outputMasks:this.outputs.map((e=>null)),inputShapes:this.inputs.map((e=>e.shape)),outputShapes:this.outputs.map((e=>e.shape))}),this.built=!0,this._refCount=1}assertNotDisposed(){if(0===this._refCount)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(0==--this._refCount){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach((t=>{t._trainableWeights.forEach((t=>t.trainable=e))})),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new Ob("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[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let e of this.layers)t.push(...e.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},r=0,a=(e=>{let t=Object.keys(e);if(0===t.length)return!1;let n=t[0].split("/");return!isNaN(parseInt(n[n.length-1],10))})(e);a&&this.parseWeights(e);for(let e of this.layers)for(let[t,s]of e.weights.entries()){let e=a?`${s.name.split("/").slice(0,-1).join("/")+"/"}${t}`:s.originalName;if(null!=n[e])throw new Ob(`Duplicate weight name: ${e}`);n[e]=s,r++}let s=[];for(let r in e){let a=r;if(null==n[r]){let e=r.split("/");a=e.slice(0,-2).concat([e[e.length-1]]).join("/")}if(null!=n[a])s.push([n[a],e[r]]);else if(t)throw new Ob(`Provided weight data has no target variable: ${r}`);delete n[a]}if(t){let e=[];for(let t in n)e.push(t);if(e.length>0)throw new Ob(`${e.length} of ${r}
2 weights are not set: ${e}`)}Sw(s)}parseWeights(e){for(let t in Object.keys(e)){let n=t.split("/"),r=["vars","layer_checkpoint_dependencies"],a=n.map((e=>e.startsWith("_")?e.slice(1):e)).filter((e=>!r.includes(e))).join("/");a!==t&&(e[a]=e[t],delete e[t])}}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${lk}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=ok(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return Ci((()=>{e=Gb(e);let n=new Dw;for(let t=0;t<this.inputs.length;++t)n.add(this.inputs[t],e[t]);return Lw(this.outputs,n,t)}))}computeMask(e,t){return Ci((()=>{let n;return e=Gb(e),n=null==t?Bb(null,e.length):Gb(t),this.runInternalGraph(e,n)[1]}))}computeOutputShape(e){let t=yw(e);if(t.length!==this.inputLayers.length)throw new Ob(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let e=0;e<t.length;e++){let r=this.inputLayers[e],a=t[e];n[r.name+"_0_0"]=a}let r=Object.keys(this.nodesByDepth).map((e=>parseInt(e,10))).sort(Zb);if(r.length>1)for(let e of r){let t=this.nodesByDepth[e];for(let e of t){let t=e.outboundLayer;if(-1!==this.inputLayers.map((e=>e.id)).indexOf(t.id))continue;let r=[];for(let t=0;t<e.inboundLayers.length;t++){let a=e.inboundLayers[t],s=e.nodeIndices[t],i=e.tensorIndices[t],o=n[`${a.name}_${s}_${i}`];r.push(o)}let a=yw(t.computeOutputShape(Ub(r))),s=t.inboundNodes.indexOf(e);for(let e=0;e<a.length;e++){n[`${t.name}_${s}_${e}`]=a[e]}}}let a=[],s=[];for(let e=0;e<this.outputLayers.length;e++){let t=this.outputLayers[e],n=this.outputLayersNodeIndices[e],r=this.outputLayersTensorIndices[e],a=`${t.name}_${n}_${r}`;s.push(a)}for(let e=0;e<s.length;e++){let t=s[e];Wb(t in n),a.push(n[t])}return Ub(a)}runInternalGraph(e,t){null==t&&(t=Bb(null,e.length));let n={};for(let r=0;r<this.inputs.length;++r){let a=this.inputs[r],s=e[r],i=t[r];n[a.id]=[s,i]}let r=Object.keys(this.nodesByDepth).map((e=>parseInt(e,10))).sort(Zb);for(let e of r){let t=this.nodesByDepth[e];for(let e of t){let t=e.outboundLayer,r=e.inputTensors,a=e.outputTensors,s=new Array;for(let e of r)e.id in n&&s.push(n[e.id]);if(s.length===r.length){let r,i,o,l,u={};if(null!=e.callArgs&&(u=e.callArgs),1===s.length){let[e,n]=s[0];null==u.mask&&(u.mask=n),o=Gb(t.call(e,u)),l=Gb(t.computeMask(e,n)),r=[e],i=[n]}else r=s.map((e=>e[0])),i=s.map((e=>e[1])),null==u.mask&&(u.mask=i),o=Gb(t.call(r,u)),l=Gb(t.computeMask(r,i));if(t.activityRegularizer)throw new Lb("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let e=0;e<a.length;++e){let t=a[e],r=o[e],s=l[e];n[t.id]=[r,s]}}}}let a=[],s=[],i=[];for(let e of this.outputs){Wb(e.id in n,`Could not compute output ${e.name} : ${e.id}`);let[t,r]=n[e.id];i.push(t.shape),a.push(t),s.push(r)}return[a,s,i]}buildNodeConversionMap(t){let n,r={};for(let t of this.layers){n=t instanceof e?1:0;for(let a=0;a<t.inboundNodes.length;a++){let s=e.nodeKey(t,a);this.containerNodes.has(s)&&(r[s]=n,n+=1)}}return r}getLayer(e,t){if(null!=t)return this.findLayer(t);if(null==e)throw new Ob("Provide either a layer name or layer index");if("number"==typeof e)return this.findLayer(e);for(let t of this.layers)if(t.name===e)return t;throw new Ob(`No such layer: ${e}`)}findLayer(e){if(this.layers.length<=e)throw new Ob(`Was asked to retrieve layer at index ${e}, but model only has ${this.layers.length} layer(s).`);return this.layers[e]}calculateLosses(){return Ci((()=>{let t=[];for(let n of this.layers)for(let r=0;r<n.inboundNodes.length;++r){let a=e.nodeKey(n,r);this.containerNodes.has(a)&&t.push(...n.calculateLosses())}return t}))}getConfig(){let t={name:this.name},n=this.buildNodeConversionMap(this.layers),r=[];for(let t of this.layers){let a=t.getClassName(),s=t.getConfig(),i=[];for(let r=0;r<t.inboundNodes.length;r++){let a=t.inboundNodes[r],s=e.nodeKey(t,r),o={};if(this.containerNodes.has(s)){if(a.callArgs)try{JSON.stringify(a.callArgs),o=a.callArgs}catch(e){console.warn(`Layer ${t.name} was passed non-serializable keyword arguments: ${a.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),o={}}if(a.inboundLayers.length>0){let t=[];for(let r=0;r<a.inboundLayers.length;r++){let s=a.inboundLayers[r],i=a.nodeIndices[r],l=a.tensorIndices[r],u=n[e.nodeKey(s,i)];null==u&&(u=0),t.push([s.name,u,l,o])}i.push(t)}}}let o={};o.name=t.name,o.className=a,o.config=s,o.inboundNodes=i,r.push(o)}t.layers=r;let a=[];for(let t=0;t<this.inputLayers.length;t++){let r=this.inputLayers[t],s=this.inputLayersNodeIndices[t],i=e.nodeKey(r,s);if(!this.containerNodes.has(i))continue;let o=n[i];null==o&&(o=0);let l=this.inputLayersTensorIndices[t];a.push([r.name,o,l])}t.inputLayers=a;let s=[];for(let t=0;t<this.outputLayers.length;t++){let r=this.outputLayers[t],a=this.outputLayersNodeIndices[t],i=e.nodeKey(r,a);if(!this.containerNodes.has(i))continue;let o=n[i];null==o&&(o=0);let l=this.outputLayersTensorIndices[t];s.push([r.name,o,l])}return t.outputLayers=s,t}static fromConfig(e,t,n={},r=!1){let a={},s={};function i(e,t){e.name in s?s[e.name].push(t):s[e.name]=[t]}function o(e,t){let n,r=[];for(let s of t){let o=s[0],l=s[1],u=s[2];if(n=null==s[3]?{}
2:s[3],!(o in a))return void i(e,t);let d=a[o];if(d.inboundNodes.length<=l)return void i(e,t);let p=d.inboundNodes[l];r.push(p.outputTensors[u])}r.length>0&&e.apply(Ub(r),n)}function l(e){let n=e.name,s=$v(e,null!=t.customObjects?t.customObjects:{});s.setFastWeightInitDuringBuild(r),a[n]=s,e.inboundNodes.forEach((e=>{if(!(e instanceof Array))throw new Ob(`Corrupted configuration, expected array for nodeData: ${e}`);i(s,e)}))}let u=t.name,d=t.layers;for(let e of d)l(e);for(;!Qb(s);)for(let e of d){let t=a[e.name];if(t.name in s){let e=s[t.name];delete s[t.name];for(let n of e)o(t,n)}}let p=[],h=[],c=t.inputLayers;for(let e of c){let t=e[0],n=e[1],r=e[2];Wb(t in a);let s=a[t].inboundNodes[n].outputTensors;p.push(s[r])}let f=t.outputLayers;for(let e of f){let t=e[0],n=e[1],r=e[2];Wb(t in a);let s=a[t].inboundNodes[n].outputTensors;h.push(s[r])}return new e({inputs:p,outputs:h,name:u})}get stateful(){if(this._stateful)throw new Ob("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){Ci((()=>{this.layers.forEach((e=>{e.stateful&&e.resetStates()}))}))}};function dk(e,t){return function(e,t,n){let r=t.length;if(null==e||Array.isArray(e)&&0===e.length)return t.map((e=>null));if(1===r)return Array.isArray(e)&&1===e.length?e:"object"==typeof e&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}if("object"==typeof e&&Object.keys(e).length>0&&"object"==typeof e[Object.keys(e)[0]]){let n=[];return t.forEach((t=>{t in e?n.push(e[t]):n.push(null)})),n}throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}(e,t,"classWeight")}async function pk(e,t,n,r){if(null!=t||null!=r)throw new Error("Support sampleWeight is not implemented yet");if(null!=n){let t=Ci((()=>{if(1===e.shape.length)return Vo(e);if(2===e.shape.length){if(e.shape[1]>1)return el(e,1);if(1===e.shape[1])return kl(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)})),r=Array.from(await t.data());Ei(t);let a=[];return r.forEach((e=>{if(null==n[e])throw new Error(`classWeight must contain all classes in the training data. The class ${e} exists in the data but not in classWeight`);a.push(n[e])})),lh(a,"float32")}return null}function hk(e,t){return qo(e,t)}function ck(e,t){let n,r,a=t;n=a.xs,r=a.ys,ja.assert(null!=n&&null!=r,(()=>`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}`));let s=fk("input",e.inputNames,n),i=fk("output",e.outputNames,r),o=s[0].shape[0];ja.assert(s.length===e.inputs.length,(()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs.  (Expected input keys: ${JSON.stringify(e.inputNames)})`)),ja.assert(i.length===e.outputs.length,(()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs.  (Expected output keys: ${JSON.stringify(e.outputNames)})`));for(let t=0;t<s.length;t++)ja.assert(s[t].shape[0]===o,(()=>`Batch size mismatch: input ${e.inputNames[t]} has ${s[t].shape[0]}; expected  ${o} based on input ${e.inputNames[0]}.`));for(let t=0;t<i.length;t++)ja.assert(i[t].shape[0]===o,(()=>`Batch size mismatch: output ${e.outputNames[t]} has ${i[t].shape[0]}; expected  ${o} based on input ${e.inputNames[0]}.`));return{xs:s,ys:i}}function fk(e,t,n){if(n instanceof $s)return[n];if(Array.isArray(n))return ja.assert(n.length===t.length,(()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`)),n;{let r=[];for(let a of t){if(null==n[a])throw new Ob(`The feature data generated by the dataset lacks the required ${e} key '${a}'.`);r.push(n[a])}return r}}async function mk(e,t,n){let r=null!=n.batchesPerEpoch;if(ja.assert(null!=e.optimizer,(()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig).")),ja.assert(null!=n,
2(()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call.")),ja.assert(null!=n.epochs&&n.epochs>0&&Number.isInteger(n.epochs),(()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`)),ja.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),(()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`)),ja.assert(null==n.validationSplit,(()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead.")),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let a,s,i=null!=n.validationData;if(i)if(gk(n.validationData))ja.assert(null==n.validationBatches||n.validationBatches>0&&Number.isInteger(n.validationBatches),(()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`));else{let e=function(e){if(3===e.length)throw new Lb("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}(n.validationData);a=e.xs,s=e.ys}let o,l=e.makeTrainFunction(),u=e.getDedupedMetricsNames();o=i?u.slice().concat(u.map((e=>"val_"+e))):u.slice();let d=_v(n.callbacks,n.yieldEvery),p=null==n.verbose?1:n.verbose,{callbackList:h,history:c}=Ev(d,p,n.epochs,null,null,function(e,t){let n=null;return null!=t.batchesPerEpoch?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}(t,n),null,i,o);h.setModel(e),e.history=c,await h.onTrainBegin(),e.stopTraining_=!1;let f=null==n.initialEpoch?0:n.initialEpoch,m=await t.iterator();for(;f<n.epochs;){let o={};await h.onEpochBegin(f);let d=0,p=0;for(r||(m=await t.iterator());!r||d<n.batchesPerEpoch;){let t=await m.next();if(r&&t.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${d} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(null!=t.value){let{xs:r,ys:a}=ck(e,t.value),s={};s.batch=p,s.size=r[0].shape[0],await h.onBatchBegin(p,s);let i=[];if(null!=n.classWeight){let t=dk(n.classWeight,e.outputNames);for(let e=0;e<t.length;++e)i.push(await pk(a[e],null,t[e]))}let o=r.concat(a).concat(i),c=l(o);Ei(o);for(let e=0;e<u.length;++e){let t=u[e],n=c[e];s[t]=n,$i(n)}await h.onBatchEnd(p,s),vv(s),p++,d++}if(r?d>=n.batchesPerEpoch:t.done){if(i){let t;t=gk(n.validationData)?Gb(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):Gb(e.evaluate(a,s,{batchSize:null==n.validationBatchSize?32:n.validationBatchSize,verbose:0}));for(let n=0;n<e.metricsNames.length;++n)o[`val_${e.metricsNames[n]}`]=t[n]}break}if(e.stopTraining_)break}if(await h.onEpochEnd(f,o),f++,e.stopTraining_)break}return await h.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function gk(e){return"function"==typeof e.iterator}function yk(e){ja.assert(e>0&&Number.isInteger(e),(()=>`batchSize is required to be a positive integer, but got ${e}`))}function bk(e,t,n){return null==e?[null]:Array.isArray(e)?e.map((e=>Dx(e,t,n-t))):Dx(e,t,n-t)}function xk(e,t){return Ci((()=>null==e?null:Array.isArray(e)?e.map((e=>xk(e,t))):Vx(e,"int32"===t.dtype?t:Wo(t,"int32"))))}function wk(e,t){let n=[],r=0,a=null;for(;r<e;)a=r+t,a>=e&&(a=e),n.push([r,a]),r=a;return n}function vk(e){let t=[];e instanceof $s&&(e=[e]);for(let n=0;n<e.length;++n){let r=e[n];if(1===r.rank)t.push(Fx(r,1));else{if(0===r.rank)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(r)}}return t}function kk(e,t){if(null==e)return;let n=[];if(t instanceof $s)n.push(t.id);else if(Array.isArray(t))t.forEach((e=>n.push(e.id)));else if(null!=t)for(let e in t){let r=t[e];n.push(r.id)}let r=[];if(e instanceof $s)-1===n.indexOf(e.id)&&r.push(e);else if(Array.isArray(e))e.forEach((e=>{-1===n.indexOf(e.id)&&r.push(e)}));else if(null!=e)for(let t in e){let a=e[t];-1===n.indexOf(a.id)&&r.push(a)}r.forEach((e=>{e.isDisposed||e.dispose()}))}function Ik(e){return Array.isArray(e)}function Sk(e){return!function(e){return e instanceof $s}(e)&&!Ik(e)}function Nk(e,t,n,r=!0,a=""){if(null==t||0===t.length){if(null!=e){let t=!1;if(Ik(e)&&e.length>0)t=!0;else if(Sk(e)){for(let n in e)if(e.hasOwnProperty(n)){t=!0;break}}else t=!0;if(t)throw new Ob(`Error when checking model ${a} expected no data, but got ${e}`)}return[]}if(null==e)return t.map((e=>null));let s;if(Sk(e)){s=[];for(let n of t){if(null==e[n])throw new Ob(`No data provided for "${n}". Need data for each key in: ${t}`);s.push(e[n])}}else if(Ik(e)){if(e.length!==t.length)throw new Ob(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);
2s=e}else{if(t.length>1)throw new Ob(`The model ${a} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=vk(s),null!=n)for(let e=0;e<t.length;++e){if(null==n[e])continue;let i=s[e];if(i.shape.length!==n[e].length)throw new Ob(`Error when checking ${a}: expected ${t[e]} to have ${n[e].length} dimension(s). but got array with shape ${i.shape}`);for(let t=0;t<n[e].length;++t){if(0===t&&!r)continue;let s=i.shape[t],o=n[e][t];if(null!=o&&o>=0&&s!==o)throw new Ob(`${a} expected a batch of elements where each example has shape [${n[e].slice(1,n[e].length)}] (i.e.,tensor shape [*,${n[e].slice(1,n[e].length)}]) but the ${a} received an input with ${i.shape[0]} examples, each with shape [${i.shape.slice(1,i.shape.length)}] (tensor shape [${i.shape}])`)}}return s}function Tk(e,t,n,r=!0,a=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new Ob(`Error when checking model ${a}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new Ob(`The model expects ${t.length} ${a} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(null!=n)for(let e=0;e<t.length;++e){if(null==n[e])continue;let i=s[e];if(i.shape.length!==n[e].length)throw new Ob(`Error when checking ${a}: expected ${t[e]} to have ${n[e].length} dimension(s), but got array with shape ${JSON.stringify(i.shape)}`);for(let s=0;s<n[e].length;++s){if(0===s&&!r)continue;let o=i.shape[s],l=n[e][s];if(null!=l&&l!==o)throw new Ob(`Error when checking ${a}: expected ${t[e]} to have shape ${JSON.stringify(n[e])} but got array with shape ${JSON.stringify(i.shape)}.`)}}}var _k=class extends uk{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new Ob("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");tk(this,e,t,n)}compile(e){if(null==e.loss&&(e.loss=[]),this.loss=e.loss,"string"==typeof e.optimizer)this.optimizer_=function(e){let t={Adagrad:()=>xm.adagrad(.01),Adadelta:()=>xm.adadelta(1,.95,Ax()),Adam:()=>xm.adam(.001,.9,.999,Ax()),Adamax:()=>xm.adamax(.002,.9,.999,Ax(),0),RMSProp:()=>xm.rmsprop(.001,.9,0,Ax()),SGD:()=>xm.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new Ob(`Unknown Optimizer ${e}`)}(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof of))throw new Ob("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(Array.isArray(e.loss)||"string"==typeof e.loss||"function"==typeof e.loss)if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new Ob(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map((e=>Bv(e)))}else{let n=Bv(e.loss);this.outputs.forEach((e=>{t.push(n)}))}else{e.loss=e.loss;for(let t in e.loss)if(-1===this.outputNames.indexOf(t))throw new Ob(`Unknown entry in loss dictionary: "${t}". Only expected the following keys: ${this.outputNames}`);for(let n of this.outputNames)null==e.loss[n]&&console.warn(`Output "${n}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${n} during training`),t.push(Bv(e.loss[n]))}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let e=0;e<this.outputs.length;++e){let t=this.internalOutputShapes[e],n=this.outputNames[e];this.feedOutputNames.push(n),this.feedOutputShapes.push(t),this.feedLossFns.push(this.lossFunctions[e])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],wx("loss",(()=>{for(let e=0;e<this.outputs.length;++e){if(-1!==n.indexOf(e))continue;let t=this.lossFunctions[e];this.outputs.length>1&&(this.metricsTensors.push([t,e]),this.metricsNames.push(this.outputNames[e]+"_loss"))}}));let r=function(e,t){if(null==e||Array.isArray(e)&&0===e.length)return t.map((e=>[]));let n;if("string"==typeof e||"function"==typeof e)n=[e];else{if(!Array.isArray(e)&&"object"!=typeof e)throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);n=e}if(Array.isArray(n))return t.map((e=>n));{let e=[];for(let r of t){let t=n.hasOwnProperty(r)?n[r]:[];Array.isArray(t)||(t=[t]),e.push(t)}return e}}(e.metrics,this.outputNames),a=(e,t,n)=>{this.outputNames.length>1&&(t=this.outputNames[e]+"_"+t),this.metricsNames.push(t),this.metricsTensors.push([n,e])};wx("metric",(()=>{for(let e=0;e<this.outputs.length;++e){if(-1!==n.indexOf(e))continue;(t=>{let n,r,s;for(let i of t){if("string"==typeof i&&-1!==["accuracy","acc","crossentropy","ce"].indexOf(i)){let t,a=this.internalOutputShapes[e];1===a[a.length-1]||this.lossFunctions[e]===Lv?-1!==["accuracy","acc"].indexOf(i)?r=Wv:-1!==["crossentropy","ce"].indexOf(i)&&(r=jv):this.lossFunctions[e]===Ov?-1!==["accuracy","acc"].indexOf(i)?r=qv:-1!==["crossentropy","ce"].indexOf(i)&&(r=Xv):-1!==["accuracy","acc"].indexOf(i)?r=Vv:-1!==["crossentropy","ce"].indexOf(i)&&(r=Kv),-1!==["accuracy","acc"].indexOf(i)?t="acc":-1!==["crossentropy","ce"].indexOf(i)&&(t="ce"),s=r,n=""+t}else s=Zv(i),n=""+Jv(i);let t;wx(n,(()=>{t=s}
2)),a(e,n,t)}})(r[e])}})),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){null!=this.collectedTrainableWeights&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let r=null==n.batchSize?32:n.batchSize;yk(r);let a=this.standardizeUserDataXY(e,t,!0,r);try{let e=a[0].concat(a[1]);this.makeTestFunction();let t=this.testFunction;return Ub(this.testLoop(t,e,r,n.verbose,n.steps))}finally{kk(a[0],e),kk(a[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),async function(e,t,n){let r=null!=(n=n||{}).batches,a=e.testFunction,s=[];if(n.verbose>0)throw new Lb("Verbose mode is not implemented yet.");ja.assert(!r||n.batches>0&&Number.isInteger(n.batches),(()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`));let i=function(e){return"function"==typeof e.next}(t)?t:await t.iterator(),o=0,l=0;for(;!r||l<n.batches;){let t=await i.next();if(s=Ci((()=>{if(t.value){let{xs:n,ys:r}=ck(e,t.value),i=n.concat(r),u=Ci((()=>a(i)));if(Ei(i),0===l)for(let e=0;e<u.length;++e)s.push(Du(0));let d=i[0].shape[0];for(let e=0;e<u.length;++e){let t=u[e],n=s[e];s[e]=Ci((()=>Go(s[e],qo(d,t)))),l>0&&Ei(n)}Ei(u),o+=d,++l}return s})),t.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let e=0;e<s.length;++e){let t=s[e];s[e]=jo(s[e],o),Ei(t)}return Ub(s)}(this,e,t)}checkNumSamples(e,t,n,r="steps"){let a;if(null!=n){if(a=null,null!=t)throw new Ob(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else{if(null==e)throw new Ob(`Either the input data should have a defined shape, or ${r} shoud be specified.`);a=Array.isArray(e)?e[0].shape[0]:e.shape[0]}return a}execute(e,t){if(Array.isArray(t)&&0===t.length)throw new Ob("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],a=this.retrieveSymbolicTensors(r),s=new Dw;if(e instanceof $s&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new Ob(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let t=0;t<this.inputs.length;++t)s.add(this.inputs[t],e[t])}else for(let t of this.inputs){let n=e[t.name];if(null==n)throw new Ob(`No value is provided for the model's input ${t.name}`);s.add(t,n)}let i=Lw(a,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=Bb(null,e.length),n=e.length;for(let r of this.layers){let a=Array.isArray(r.output)?r.output:[r.output],s=a.map((e=>e.name));for(let r=0;r<e.length;++r){let i=s.indexOf(e[r]);if(-1!==i&&(t[r]=a[i],n--),0===n)break}if(0===n)break}if(n>0){let n=[];throw t.forEach(((t,r)=>{null==t&&n.push(e[r])})),new Ob(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(n)}`)}return t}predictLoop(e,t=32,n=!1){return Ci((()=>{let r=this.checkNumSamples(e);if(n)throw new Lb("Verbose predictLoop() is not implemented yet.");let a=wk(r,t),s=this.outputs.map((e=>[]));for(let t=0;t<a.length;++t)Ci((()=>{let n=a[t][0],r=a[t][1],s=bk(e,n,r),i=[];if(Array.isArray(s))for(let e=0;e<s.length;++e)i.push({key:this.inputs[e],value:s[e]});else i.push({key:this.inputs[0],value:s});let o=new Dw(i);return Lw(this.outputs,o)})).forEach(((e,t)=>s[t].push(e)));return Ub(s.map((e=>Nl(e,0))))}))}predict(e,t={}){let n=vk(e);Tk(n,this.inputNames,this.feedInputShapes,!1);try{let e=null==t.batchSize?32:t.batchSize;return yk(e),this.predictLoop(n,e)}finally{kk(n,e)}}predictOnBatch(e){Tk(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(null==this.optimizer_)throw new Mb("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let a=[];for(let e=0;e<this.feedOutputShapes.length;++e){let t=this.feedOutputShapes[e];this.feedLossFns[e]===Ov?a.push(t.slice(0,t.length-1).concat([1])):a.push(t)}if(function(e,t,n){let r=Jb(e.map((e=>e.shape[0])));r.sort();let a=Jb(t.map((e=>e.shape[0])));if(a.sort(),r.length>1)throw new Ob(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map((e=>e.shape)))}`);if(a.length>1)throw new Ob(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map((e=>e.shape)))}`);if(r.length>0&&a.length>0&&!ja.arraysEqual(r,a))throw new Ob(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${a[0]} target sample(s).`)}(e=Nk(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=Nk(t,this.feedOutputNames,a,!1,"target")),function(e,t,n){let r=[Rv,Lv,Mv];for(let a=0;a<e.length;++a){let s=e[a],i=t[a],o=n[a];if(null!=i){if(i===Mv&&1===s.shape[s.shape.length-1])throw new Ob(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(-1!==r.indexOf(i)){let e=s.shape.slice(1),t=o.slice(1);for(let n=0;n<e.length;++n){let r=e[n],a=t[n];if(null!=a&&r!==a)throw new Ob(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&null!=r&&r>0&&e[0].shape[0]%r!=0)throw new Ob(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,a=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,a,s);if(null!=n)throw new Error("sample weight is not supported yet.");let l=null;if(null!=r){let e=dk(r,this.outputNames);l=[];for(let t=0;t<e.length;++t)l.push(await pk(o[t],null,e[t]))}return[i,o,l]}testLoop(e,t,n,r=0,a){return Ci((()=>{let s=this.checkNumSamples(t,n,a,"steps"),i=[];if(r>0)throw new Lb("Verbose mode is not implemented yet.");if(null!=a)throw new Lb("steps mode in testLoop() is not implemented yet");{let r=wk(s,n),a=lh($x(0,s));for(let n=0;n<r.length;++n){let s=r[n][0],o=r[n][1],l=Dx(a,s,o-s),u=xk(t,l),d=e(u);
2if(0===n)for(let e=0;e<d.length;++e)i.push(Du(0));for(let e=0;e<d.length;++e){let t=d[e];i[e]=Go(i[e],qo(o-s,t))}}for(let e=0;e<i.length;++e)i[e]=jo(i[e],s)}return i}))}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let r=e[n],a=r;if(Vb(e,r)>1){a+=`_${Vb(e.slice(0,n),r)}`}t.push(a)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+2*this.outputs.length),s=[],i=this.collectedTrainableWeights.map((e=>e.read()));return[this.optimizer_.minimize((()=>{let e=[];for(let t=0;t<this.inputs.length;++t)e.push({key:this.inputs[t],value:n[t]});let i,o=new Dw(e),l=Lw(this.outputs,o,{training:!0});for(let e=0;e<this.lossFunctions.length;++e){let n=(0,this.lossFunctions[e])(r[e],l[e]);null!=a[e]&&(n=hk(n,a[e]));let s=Ad(n);t.push(s),i=0===e?n:Go(i,n)}for(let e=0;e<this.metricsTensors.length;++e){let n;if(this.outputs.length>1&&e<this.outputs.length)n=t[e];else{let t=this.metricsTensors[e][0],a=this.metricsTensors[e][1];n=Ad(t(r[a],l[a]))}$i(n),s.push(n)}return i=Ad(i),this.calculateLosses().forEach((e=>{i=Go(i,e)})),i}),!0,i)].concat(s)}}makeTestFunction(){this.testFunction=e=>Ci((()=>{let t,n=[],r=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let e=0;e<this.inputs.length;++e)s.push({key:this.inputs[e],value:r[e]});let i=new Dw(s),o=Lw(this.outputs,i);for(let e=0;e<this.lossFunctions.length;++e){let r=this.lossFunctions[e],s=Ad(r(a[e],o[e]));t=0===e?s:Go(t,s),n.push(t)}for(let e=0;e<this.metricsTensors.length;++e){let t=this.metricsTensors[e][0],r=this.metricsTensors[e][1],s=Ad(t(a[r],o[r]));n.push(s)}return n}))}async fit(e,t,n={}){if(this.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");let r,a,s,i,o,l,u,d,p;this.isTraining=!0;try{let h=null==n.batchSize?32:n.batchSize;yk(h);let c=await this.standardizeUserData(e,t,n.sampleWeight,n.classWeight,!1,h);r=c[0],a=c[1],p=c[2];let f,m=!1;if(null!=n.validationData&&n.validationData.length>0){if(m=!0,2!==n.validationData.length)throw 3===n.validationData.length?new Lb("validationData including sample weights is not supported yet."):new Ob(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${n.validationData} is invalid.`);o=n.validationData[0],l=n.validationData[1];let e=await this.standardizeUserData(o,l,null,null,!0,h);u=e[0],d=e[1],f=u.concat(d)}else if(null!=n.validationSplit&&n.validationSplit>0&&n.validationSplit<1){m=!0;let e=Math.floor(r[0].shape[0]*(1-n.validationSplit)),t=r[0].shape[0];
2u=bk(r,e,t),s=r,r=bk(r,0,e),d=bk(a,e,t),i=a,a=bk(a,0,e),f=u.concat(d)}else null!=n.validationSteps&&(m=!0);let g=r.concat(a).concat(p);this.checkTrainableWeightsConsistency();let y,b,x=this.makeTrainFunction(),w=this.getDedupedMetricsNames();m?(this.makeTestFunction(),y=this.testFunction,b=w.slice().concat(w.map((e=>"val_"+e)))):(y=null,f=[],b=w.slice());let v=_v(n.callbacks,n.yieldEvery);return await this.fitLoop(x,g,w,h,n.epochs,n.verbose,v,y,f,n.shuffle,b,n.initialEpoch,null,null)}finally{this.isTraining=!1,kk(r,e),kk(a,t),kk(s,e),kk(i,t),kk(u,o),kk(d,l),null!=p&&Ei(p)}}async fitLoop(e,t,n,r,a,s,i,o,l,u,d,p,h,c){null==r&&(r=32),null==a&&(a=1),null==u&&(u=!0),null==p&&(p=0);let f=!1;if(null!=o&&null!=l&&(f=!0),null!=c&&(f=!0,null==h))throw new Ob("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let m,g=this.checkNumSamples(t,r,h,"steps_per_epoch");null!=g&&(m=$x(0,g)),null==s&&(s=1);let{callbackList:y,history:b}=Ev(i,s,a,p,g,h,r,f,d);y.setModel(this),this.history=b,await y.onTrainBegin(),this.stopTraining_=!1;for(let s=p;s<a;++s){await y.onEpochBegin(s);let a={};if(null!=h)throw new Lb("stepsPerEpoch mode is not implemented yet.");{if("batch"===u)throw new Lb("batch shuffling is not implemneted yet");u&&ja.shuffle(m);let s=lh(m),i=wk(g,r);for(let u=0;u<i.length;++u){let d={};if(await y.onBatchBegin(u,d),Ci((()=>{let p=i[u][0],h=i[u][1],c=Dx(s,p,h-p);d.batch=u,d.size=h-p;let m=xk(t,c),g=e(m);for(let e=0;e<n.length;++e){let t=n[e],r=g[e];d[t]=r,$i(r)}if(u===i.length-1&&f){let e=this.testLoop(o,l,r);for(let t=0;t<n.length;++t){let r=n[t],s=e[t];$i(s),a["val_"+r]=s}}})),await y.onBatchEnd(u,d),vv(d),this.stopTraining_)break}s.dispose()}if(await y.onEpochEnd(s,a),this.stopTraining_)break}return await y.onTrainEnd(),await this.history.syncData(),this.history}async fitDataset(e,t){return mk(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),r=n[0],a=n[1],s=this.makeTrainFunction()(r.concat(a)),i=[];for(let e of s){let t=await e.data();i.push(t[0])}return Ei(s),kk(n[0],e),kk(n[1],t),Ub(i)}getNamedWeights(e){let t=[],n=null!=e&&e.trainableOnly,r=n?this.trainableWeights:this.weights,a=this.getWeights(n);for(let e=0;e<r.length;++e)n&&!r[e].trainable||t.push({name:r[e].originalName,tensor:a[e]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(0===e.refCountAfterDispose&&null!=this.optimizer&&this.isOptimizerOwned){let t=Ti().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-Ti().numTensors}return e}getLossIdentifiers(){let e;if("string"==typeof this.loss)e=Hb(this.loss);else if(Array.isArray(this.loss)){for(let e of this.loss)if("string"!=typeof e)throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map((e=>Hb(e)))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let r of t){if("string"!=typeof n[r])throw new Error("Serialization of non-string loss is not supported.");e[r]=Hb(n[r])}}return e}getMetricIdentifiers(){if("string"==typeof this.metrics||"function"==typeof this.metrics)return[Hb(Jv(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map((e=>Hb(Jv(e))));{let e={};for(let t in this.metrics)e[t]=Hb(Jv(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(null!=e.weighted_metrics)throw new Error("Loading weight_metrics is not supported yet.");if(null!=e.loss_weights)throw new Error("Loading loss_weights is not supported yet.");if(null!=e.sample_weight_mode)throw new Error("Loading sample_weight_mode is not supported yet.");let t,n,r=$v(ik(e.optimizer_config));if("string"==typeof e.loss)t=jb(e.loss);else if(Array.isArray(e.loss))t=e.loss.map((e=>jb(e)));else if(null!=e.loss){t={};for(let n in e.loss)t[n]=jb(e.loss[n])}if(Array.isArray(e.metrics))n=e.metrics.map((e=>jb(e)));else if(null!=e.metrics){n={};for(let t in e.metrics)n[t]=jb(e.metrics[t])}this.compile({loss:t,metrics:n,optimizer:r})}async save(e,t){if("string"==typeof e){let t=gf.getSaveHandlers(e);if(0===t.length)throw new Ob(`Cannot find any save handlers for URL '${e}'`);if(t.length>1)throw new Ob(`Found more than one (${t.length}) save handlers for URL '${e}'`);e=t[0]}if(null==e.save)throw new Ob("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await gf.encodeWeights(this.getNamedWeights(t)),r={modelTopology:this.toJSON(null,!1),format:"layers-model",generatedBy:`TensorFlow.js tfjs-layers v${lk}`,convertedBy:null};if(null!=t&&t.includeOptimizer&&null!=this.optimizer){r.trainingConfig=this.getTrainingConfig();let e="optimizer",{data:t,specs:a}=await gf.encodeWeights(await this.optimizer.getWeights(),e);n.specs.push(...a),n.data=gf.concatenateArrayBuffers([n.data,t])}return null!=this.userDefinedMetadata&&(Qv(this.userDefinedMetadata,this.name,!0),r.userDefinedMetadata=this.userDefinedMetadata),r.weightData=n.data,r.weightSpecs=n.specs,e.save(r)}setUserDefinedMetadata(e){Qv(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};_k.className="Model",Qc.registerClass(_k);var Ck=class extends _k{};async function Ek(e,t){"modelTopology"in e||(e={modelTopology:e});let n=e.modelTopology;null!=n.model_config&&(n=n.model_config);let r=$v(ik(n),t);
2if(null!=e.weightsManifest){let t=await gf.loadWeights(e.weightsManifest,e.pathPrefix,r.weights.map((e=>e.originalName))),n={};for(let e of r.weights)n[e.originalName]=t[e.originalName];r.loadWeights(n),Ei(t)}return r}async function $k(e,t){if(null==t&&(t={}),"string"==typeof e){let n=gf.getLoadHandlers(e,t);if(0===n.length)n.push(gf.browserHTTPRequest(e,t));else if(n.length>1)throw new Ob(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return async function(e,t,n){if(null==n&&(n={}),null==e.load)throw new Ob("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),a=r.modelTopology;null!=a.model_config&&(a=a.model_config);let s=null==n.strict||n.strict,i=null!=r.weightData&&null!=r.weightSpecs&&s,o=$v(ik(a),t,i),l=r.trainingConfig;if(null!=l&&o.loadTrainingConfig(l),null!=r.userDefinedMetadata&&o.setUserDefinedMetadata(r.userDefinedMetadata),null!=r.weightData){if(null==r.weightSpecs)throw new Ob("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:e,optimizerWeights:t}=function(e,t){let n=gf.decodeWeights(e,t),r={},a=[];return t.forEach((e=>{"optimizer"===e.group?a.push({name:e.name,tensor:n[e.name]}):r[e.name]=n[e.name]})),{modelWeights:r,optimizerWeights:a}}(r.weightData,r.weightSpecs);o.loadWeights(e,s),null!=o.optimizer&&t.length>0&&await o.optimizer.setWeights(t),Ei(e),Ei(t.map((e=>e.tensor)))}return o}(e,void 0,t)}Ck.className="Functional",Qc.registerClass(Ck);var Ak=class e extends _k{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=null!=e.name?e.name:lx("sequential_"),null!=e.layers)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some((e=>e<0)))throw new Ob(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(t){let n,r=t instanceof e||t instanceof _k;if(r){if(n=t,1!==n.outputs.length)throw new Ob("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(1!==n.inputs.length)throw new Ob("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(0===this.outputs.length){if(0===t.inboundNodes.length){if(null==t.batchInputShape)throw new Ob("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let e=Fw({batchShape:t.batchInputShape,dtype:t.dtype,name:t.name+"_input"});t.apply(e)}if(r)this.outputs=n.outputs,this.inputs=n.inputs;else{if(1!==t.inboundNodes.length)throw new Ob(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${t.name} which has ${t.inboundNodes.length} pre-existing inbound connections.`);if(1!==t.inboundNodes[0].outputTensors.length)throw new Ob("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[t.inboundNodes[0].outputTensors[0]],this.inputs=Aw(this.outputs[0])}this.inboundNodes=[],new Cw({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:Bb(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map((e=>e.shape)),outputShapes:this.outputs[0].shape})}else{let e=t.apply(this.outputs[0]);if(Array.isArray(e))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[e],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(t),this.built=!1}pop(){if(0===this.layers.length)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),0===this.layers.length)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return null==this.model&&this.build(),this.model.call(e,t)}build(e){if(xw(e),0===this.inputs.length||0===this.outputs.length)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new _k({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supp
2ortsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){null==this.model&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new Mb("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new Mb("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return null==this.model&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return null==this.model&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return null==this.model?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new Mb("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new Mb("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(t,n,r={},a=!1){let s,i={};if(n instanceof Array){if(null==n[0].className||"Merge"===n[0].className)throw new Ob("Legacy serialization format not supported yet.");s=n}else ja.assert(null!=n.layers,(()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field.")),s=n.layers,delete n.layers,i=n;let o=new t(i);if(!(o instanceof e))throw new Lb(`Sequential.fromConfig called on non-Sequential input: ${o}`);for(let e of s){let t=$v(e,void 0,a);a&&t.setFastWeightInitDuringBuild(!0),o.add(t)}return o}set stopTraining(e){if(null==this.model)throw new Ob("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(null==this.model)throw new Ob("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};function Rk(e){return new _k(e)}function Fk(e){return new Ak(e)}function Dk(e){return Fw(e)}function Mk(e,t){Cv.registerCallbackConstructor(e,t)}Ak.className="Sequential",Qc.registerClass(Ak);var Ok=class extends Qc.Serializable{getConfig(){return{}}},Lk=class extends Ok{apply(e,t=1){return function(e,t=1){if(1!==t)throw new Lb(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return wu(e)}(e,t)}};Lk.className="elu",Qc.registerClass(Lk);var zk=class extends Ok{apply(e){return Bp(e)}};zk.className="selu",Qc.registerClass(zk);var Pk=class extends Ok{apply(e){return Ap(e)}};Pk.className="relu",Qc.registerClass(Pk);var Bk=class extends Ok{apply(e){return Ci((()=>Md(6,Ap(e))))}};Bk.className="relu6",Qc.registerClass(Bk);var Wk=class extends Ok{apply(e){return e}};Wk.className="linear",Qc.registerClass(Wk);var Vk=class extends Ok{apply(e){return _l(e)}};Vk.className="sigmoid",Qc.registerClass(Vk);var Uk=class extends Ok{apply(e){return function(e){return Ci((()=>{let t=Go(.5,qo(.2,e));return Ul(t,0,1)}))}(e)}};Uk.className="hardSigmoid",Qc.registerClass(Uk);var Gk=class extends Ok{apply(e){return md(e)}};Gk.className="softplus",Qc.registerClass(Gk);var Hk=class extends Ok{apply(e){return function(e){return Ci((()=>jo(e,Go(Ko(e),1))))}(e)}};Hk.className="softsign",Qc.registerClass(Hk);var jk=class extends Ok{apply(e){return El(e)}};jk.className="tanh",Qc.registerClass(jk);var qk=class extends Ok{apply(e,t=-1){return Yp(e,t)}};qk.className="softmax",Qc.registerClass(qk);var Kk=class extends Ok{apply(e,t=-1){return bd(e,t)}};Kk.className="logSoftmax",Qc.registerClass(Kk);var Xk=class extends Ok{apply(e){return Ci((()=>Ci((()=>{let t=Math.sqrt(2),n=qo(.5,Go(1,ku(jo(e,t))));return qo(e,n)}))))}};Xk.className="gelu",Qc.registerClass(Xk);var Yk=class extends Ok{apply(e){return Ci((()=>qo(.5,qo(e,Go(1,El(qo(Mu(jo(2,Math.PI)),Go(e,qo(.044715,Fu(e,3))))))))))}};
2Yk.className="gelu_new",Qc.registerClass(Yk);var Zk=class extends Ok{apply(e){return Ci((()=>qo(e,El(md(e)))))}};Zk.className="mish",Qc.registerClass(Zk);var Jk=class extends Ok{apply(e,t=1){return Ci((()=>qo(_l(qo(e,t)),e)))}};function Qk(e){return e.getClassName()}function eI(e,t={}){return Yb(e,Qc.SerializationMap.getMap().classNameMap,t,"activation")}function tI(e){if(null==e){let e={className:"linear",config:{}};return eI(e)}if("string"==typeof e){let t={};return t.className=e,t.config={},eI(t)}return e instanceof Ok?e:eI(e)}function nI(e){if(null!=e&&"object"!=typeof e)throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}Jk.className="swish",Qc.registerClass(Jk);var rI=class extends Qc.Serializable{},aI=class extends rI{constructor(e){super(),nI(e),this.l1=null==e||null==e.l1?.01:e.l1,this.l2=null==e||null==e.l2?.01:e.l2,this.hasL1=0!==this.l1,this.hasL2=0!==this.l2}apply(e){return Ci((()=>{let t=Rd([1]);return this.hasL1&&(t=Go(t,Lu(qo(this.l1,Ko(e))))),this.hasL2&&(t=Go(t,Lu(qo(this.l2,Ux(e))))),kl(t,[])}))}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};aI.className="L1L2",Qc.registerClass(aI);var sI={l1l2:"L1L2"};function iI(e){return Kb(e)}function oI(e,t={}){return Yb(e,Qc.SerializationMap.getMap().classNameMap,t,"regularizer")}function lI(e){if(null==e)return null;if("string"==typeof e){return oI({className:e in sI?sI[e]:e,config:{}})}return e instanceof rI?e:oI(e)}var uI=class extends $w{constructor(e){super(null==e?{}:e),this.supportsMasking=!0,null!=e&&(this.maxValue=e.maxValue)}call(e,t){e=bw(e);let n=Ap(e);return null!=this.maxValue&&(n=Ul(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};uI.className="ReLU",Qc.registerClass(uI);var dI=class extends $w{constructor(e){super(null==e?{}:e),this.DEFAULT_ALPHA=.3,null==e&&(e={}),this.alpha=null==e.alpha?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=bw(e);return ed(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};dI.className="LeakyReLU",Qc.registerClass(dI);var pI=class extends $w{constructor(e){if(super(null==e?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",null==e&&(e={}),this.supportsMasking=!0,this.alphaInitializer=mw(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=lI(e.alphaRegularizer),this.alphaConstraint=Zw(e.alphaConstraint),null==e.sharedAxes)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else{if("number"!=typeof e.sharedAxes)throw new Ob(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`);this.sharedAxes=[e.sharedAxes]}}build(e){let t=(e=xw(e)).slice(1);if(null!=this.sharedAxes)for(let e of this.sharedAxes)t[e-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(null!=this.sharedAxes)for(let t=1;t<e.length;++t)n[t]=e[t];this.inputSpec=[new Nw({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=bw(e),Jd(e,this.alpha.read())}getConfig(){let e={alphaInitializer:fw(this.alphaInitializer),alphaRegularizer:iI(this.alphaRegularizer),alphaConstraint:Xw(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};pI.className="PReLU",Qc.registerClass(pI);var hI=class extends $w{constructor(e){if(super(null==e?{}:e),this.DEFAULT_ALPHA=1,null==e&&(e={}),null!=e.alpha&&e.alpha!==this.DEFAULT_ALPHA)throw new Lb(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=null==e.alpha?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=bw(e);return wu(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};hI.className="ELU",Qc.registerClass(hI);var cI=class extends $w{constructor(e){super(null==e?{}:e),this.DEFAULT_THETA=1,null==e&&(e={}),this.theta=null==e.theta?this.DEFAULT_THETA:e.theta}call(e,t){let n=bw(e);return qo(n,Wo(Ku(n,this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};cI.className="ThresholdedReLU",Qc.registerClass(cI);var fI=class extends $w{constructor(e){super(null==e?{}:e),this.DEFAULT_AXIS=1,null==e&&(e={}),this.softmax=(new qk).apply,this.axis=null==e.axis?this.DEFAULT_AXIS:e.axis}call(e,t){return Ci((()=>{let n=bw(e),r=t.mask;if(null!=r){let e=qo(yd(Fd(n.shape),Wo(r,n.dtype)),Du(-1e9));n=Go(n,e)}return this.axis instanceof Array?this.axis.length>1?Wu(yd(n,xd(n,this.axis,!0))):this.softmax(n,this.axis[0]):this.softmax(n,this.axis)}))}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};function mI(e,t,n){if("number"==typeof e)return Bb(e,t);if(e.length!==t)throw new Ob(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r<t;++r){let a=e[r];if(!Tx(a))throw new Ob(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${a}`)}return e}function gI(e,t,n,r,a=1){if(null==e)return e;let s;return s="same"===n?e:e-(t+(t-1)*(a-1))+1,Math.floor((s+r-1)/r)}function yI(e,t,n,r){if(null==e)return null;if("valid"===r)e=e*t+Ex([n-t,0]);else{if("same"!==r)throw new Ob(`Unsupport padding mode: ${r}.`);e*=t}return e}function bI(e,t){return Ci((()=>(mx(t),"channelsFirst"===t?Eh(e,[0,2,3,1]):e)))}function xI(e,t){return Ci((()=>(mx(t),"channelsFirst"===t?Eh(e,[0,2,3,4,1]):e)))}function wI(e,t,n,r=[1,1],a="valid",s,i,o=null){return Ci((()=>
vendor: 4,284 bytes, line 2
2{if(null==s&&(s="channelsLast"),mx(s),3!==e.rank&&4!==e.rank)throw new Ob(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(3!==t.rank&&4!==t.rank)throw new Ob(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=bI(e,s);if("causal"===a)throw new Lb("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=zh.conv2d({x:l,filter:t,strides:r,pad:"same"===a?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),"channelsFirst"===s&&(l=Eh(l,[0,3,1,2])),l}))}fI.className="Softmax",Qc.registerClass(fI);var vI=class e extends $w{constructor(t,n){if(super(n),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.verifyArgs(n),this.rank=t,nx(this.rank,"rank"),1!==this.rank&&2!==this.rank&&3!==this.rank)throw new Lb(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=mI(n.kernelSize,t,"kernelSize"),this.strides=mI(null==n.strides?1:n.strides,t,"strides"),this.padding=null==n.padding?"valid":n.padding,gx(this.padding),this.dataFormat=null==n.dataFormat?"channelsLast":n.dataFormat,mx(this.dataFormat),this.activation=tI(n.activation),this.useBias=null==n.useBias||n.useBias,this.biasInitializer=mw(n.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Zw(n.biasConstraint),this.biasRegularizer=lI(n.biasRegularizer),this.activityRegularizer=lI(n.activityRegularizer),this.dilationRate=mI(null==n.dilationRate?1:n.dilationRate,t,"dilationRate"),1===this.rank&&Array.isArray(this.dilationRate)&&1!==this.dilationRate.length)throw new Ob(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(2===this.rank){if("number"==typeof this.dilationRate)this.dilationRate=[this.dilationRate,this.dilationRate];else if(2!==this.dilationRate.length)throw new Ob(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(3===this.rank)if("number"==typeof this.dilationRate)this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(3!==this.dilationRate.length)throw new Ob(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}static verifyArgs(e){if(Wb("kernelSize"in e,"required key 'kernelSize' not in config"),"number"!=typeof e.kernelSize&&!tx(e.kernelSize,"number",1,3))throw new Ob(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:Qk(this.activation),useBias:this.useBias,biasInitializer:fw(this.biasInitializer),biasRegularizer:iI(this.biasRegularizer),activityRegularizer:iI(this.activityRegularizer),biasConstraint:Xw(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},kI=class e extends vI{constructor(t,n){super(t,n),this.kernel=null,e.verifyArgs(n),this.filters=n.filters,nx(this.filters,"filters"),this.kernelInitializer=mw(n.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Zw(n.kernelConstraint),this.kernelRegularizer=lI(n.kernelRegularizer)}build(e){e=xw(e);let t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Ob(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return Ci((()=>{e=bw(e);let t,n=null==this.bias?null:this.bias.read(),r=ax(this.activation.getClassName());if(null!=r&&2===this.rank)t=wI(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate,r);else{if(1===this.rank)t=function(e,t,n,r=1,a="valid",s,i=1){return Ci((()=>
2{if(null==s&&(s="channelsLast"),mx(s),3!==e.shape.length)throw new Ob(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(3!==t.shape.length)throw new Ob(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(null!=n&&1!==n.shape.length)throw new Ob(`The bias for a conv1dWithBias operation should be 1, but is ${n.shape.length} instead`);if("channelsFirst"===s&&(e=Eh(e,[0,2,1])),"causal"===a)throw new Lb("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Xl(e,t,r,"same"===a?"same":"valid","NWC",i);return null!=n&&(o=Hx(o,n)),o}))}(e,this.kernel.read(),n,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(2===this.rank)t=wI(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate);else{if(3!==this.rank)throw new Lb("convolutions greater than 3D are not implemented yet.");t=function(e,t,n,r=[1,1,1],a="valid",s,i){return Ci((()=>{if(null==s&&(s="channelsLast"),mx(s),4!==e.rank&&5!==e.rank)throw new Ob(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(4!==t.rank&&5!==t.rank)throw new Ob(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=xI(e,s);if("causal"===a)throw new Lb("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=Jl(o,t,r,"same"===a?"same":"valid","NDHWC",i),null!=n&&(o=Hx(o,n)),"channelsFirst"===s&&(o=Eh(o,[0,4,1,2,3])),o}))}(e,this.kernel.read(),n,this.strides,this.padding,this.dataFormat,this.dilationRate)}null!=this.activation&&(t=this.activation.apply(t))}return t}))}computeOutputShape(e){e=xw(e);let t=[],n="channelsLast"===this.dataFormat?e.slice(1,e.length-1):e.slice(2);for(let e=0;e<n.length;++e){let r=gI(n[e],this.kernelSize[e],this.padding,this.strides[e],"number"==typeof this.dilationRate?this.dilationRate:this.dilationRate[e]);t.push(r)}let r=[e[0]];return"channelsLast"===this.dataFormat?(r=r.concat(t),r.push(this.filters)):(r.push(this.filters),r=r.concat(t)),r}getConfig(){let e={filters:this.filters,kernelInitializer:fw(this.kernelInitializer),kernelRegularizer:iI(this.kernelRegularizer),kernelConstraint:Xw(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||"number"!=typeof e.filters||e.filters<1)throw new Ob(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},II=class e extends kI{constructor(t){super(2,t),e.verifyArgs(t)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&!tx(e.kernelSize,"number",1,2))throw new Ob(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};II.className="Conv2D",Qc.registerClass(II);var SI=class e extends kI{constructor(t){super(3,t),e.verifyArgs(t)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&(!Array.isArray(e.kernelSize)||1!==e.kernelSize.length&&3!==e.kernelSize.length))throw new Ob(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};SI.className="Conv3D",Qc.registerClass(SI);var NI=class extends II{constructor(e){if(super(e),this.inputSpec=[new Nw({ndim:4})],"same"!==this.padding&&"valid"!==this.padding)throw new Ob(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(4!==(e=xw(e)).length)throw new Ob("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Ob("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"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 Nw({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return Ci((()=>{let t=bw(e);if(4!==t.shape.length)throw new Ob(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${t.shape.length}`);let n,r,a=t.shape,s=a[0];"channelsFirst"===this.dataFormat?(n=2,r=3):(n=1,r=2);let i=a[n],o=a[r],l=this.kernelSize[0],u=this.kernelSize[1],d=this.strides[0],p=this.strides[1],h=[s,yI(i,d,l,this.padding),yI(o,p,u,this.padding),this.filters];"channelsLast"!==this.dataFormat&&(t=Eh(t,[0,2,3,1]));let c=Zl(t,this.kernel.read(),h,this.strides,this.padding);return"channelsLast"!==this.dataFormat&&(c=Eh(c,[0,3,1,2])),null!=this.bias&&(c=Hx(c,this.bias.read(),this.dataFormat)),null!=this.activation&&(c=this.activation.apply(c)),c}))}computeOutputShape(e){let t,n,r,a=(e=xw(e)).slice();"channelsFirst"===this.dataFormat?(t=1,n=2,r=3):(t=3,n=1,r=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return a[t]=this.filters,a[n]=yI(a[n],o,s,this.padding),a[r]=yI(a[r],l,i,this.padding),a}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};NI.className="Conv2DTranspose",Qc.registerClass(NI);var TI=class extends SI{constructor(e){if(super(e),this.inputSpec=[new Nw({ndim:5})],"same"!==this.padding&&"valid"!==this.padding)throw new Ob(`Conv3DTranspose currently supports only padding modes '
2same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(5!==(e=xw(e)).length)throw new Ob("Input should have rank 5; Received input shape: "+JSON.stringify(e));let t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t])throw new Ob("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"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 Nw({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return Ci((()=>{let t=bw(e);if(5!==t.shape.length)throw new Ob(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${t.shape.length}`);let n,r,a,s=t.shape,i=s[0];"channelsFirst"===this.dataFormat?(a=2,n=3,r=4):(a=1,n=2,r=3);let o=s[a],l=s[n],u=s[r],d=this.kernelSize[0],p=this.kernelSize[1],h=this.kernelSize[2],c=this.strides[0],f=this.strides[1],m=this.strides[2],g=[i,yI(o,c,d,this.padding),yI(l,f,p,this.padding),yI(u,m,h,this.padding),this.filters];"channelsLast"!==this.dataFormat&&(t=Eh(t,[0,2,3,4,1]));let y=eu(t,this.kernel.read(),g,this.strides,this.padding);return"channelsLast"!==this.dataFormat&&(y=Eh(y,[0,4,1,2,3])),null!==this.bias&&(y=Hx(y,this.bias.read(),this.dataFormat)),null!==this.activation&&(y=this.activation.apply(y)),y}))}computeOutputShape(e){let t,n,r,a,s=(e=xw(e)).slice();"channelsFirst"===this.dataFormat?(t=1,n=2,r=3,a=4):(t=4,n=1,r=2,a=3);let i=this.kernelSize[0],o=this.kernelSize[1],l=this.kernelSize[2],u=this.strides[0],d=this.strides[1],p=this.strides[2];return s[t]=this.filters,s[n]=yI(s[n],u,i,this.padding),s[r]=yI(s[r],d,o,this.padding),s[a]=yI(s[a],p,l,this.padding),s}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};TI.className="Conv3DTranspose",Qc.registerClass(TI);var _I=class extends kI{constructor(e,t){if(super(e,t),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,null==t.filters)throw new Ob("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(null!=t.kernelInitializer||null!=t.kernelRegularizer||null!=t.kernelConstraint)throw new Ob("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(null!=t.padding&&"same"!==t.padding&&"valid"!==t.padding)throw new Ob(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=null==t.depthMultiplier?1:t.depthMultiplier,this.depthwiseInitializer=mw(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=lI(t.depthwiseRegularizer),this.depthwiseConstraint=Zw(t.depthwiseConstraint),this.pointwiseInitializer=mw(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=lI(t.pointwiseRegularizer),this.pointwiseConstraint=Zw(t.pointwiseConstraint)}build(e){if((e=xw(e)).length<this.rank+2)throw new Ob(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[t]||e[t]<0)throw new Ob(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],r=this.kernelSize.concat([n,this.depthMultiplier]),a=[];for(let e=0;e<this.rank;++e)a.push(1);a.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",r,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",a,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new Nw({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return Ci((()=>{let t;if(e=bw(e),1===this.rank)throw new Lb("1D separable convolution is not implemented yet.");return 2===this.rank&&("channelsFirst"===this.dataFormat&&(e=Eh(e,[0,2,3,1])),t=Wp(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(t=Hx(t,this.bias.read(),this.dataFormat)),null!=this.activation&&(t=this.activation.apply(t)),"channelsFirst"===this.dataFormat&&(t=Eh(t,[0,3,1,2])),t}))}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=fw(this.depthwiseInitializer),e.pointwiseInitializer=fw(this.pointwiseInitializer),e.depthwiseRegularizer=iI(this.depthwiseRegularizer),e.pointwiseRegularizer=iI(this.pointwiseRegularizer),e.depthwiseConstraint=Xw(this.depthwiseConstraint),e.pointwiseConstraint=Xw(this.pointwiseConstraint),e}};_I.className="SeparableConv";var CI=class extends _I{constructor(e){super(2,e)}};CI.className="SeparableConv2D",Qc.registerClass(CI);var EI=class e extends kI{constructor(t){super(1,t),e.verifyArgs(t),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if("number"!=typeof e.kernelSize&&!tx(e.kernelSize,"number",1,1))throw new Ob(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};EI.className="Conv1D",Qc.registerClass(EI);var $I=class extends $w{constructor(e){super(e),"number"==typeof e.cropping?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:"number"==typeof e.cropping[0]?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=void 0===e.dataFormat?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return"channelsFirst"===this.dataFormat?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return Ci((()=>
2{if(e=bw(e),"channelsLast"===this.dataFormat){let t=Ox(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return Ox(t,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}{let t=Ox(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return Ox(t,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}}))}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};$I.className="Cropping2D",Qc.registerClass($I);var AI=class extends $w{constructor(e){super(e),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=null==e.size?this.DEFAULT_SIZE:e.size,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,mx(this.dataFormat),this.interpolation=null==e.interpolation?"nearest":e.interpolation,function(e){ex(dx,"InterpolationFormat",e)}(this.interpolation)}computeOutputShape(e){if("channelsFirst"===this.dataFormat){let t=null==e[2]?null:this.size[0]*e[2],n=null==e[3]?null:this.size[1]*e[3];return[e[0],e[1],t,n]}{let t=null==e[1]?null:this.size[0]*e[1],n=null==e[2]?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return Ci((()=>{let t=bw(e),n=t.shape;if("channelsFirst"===this.dataFormat){t=Eh(t,[0,2,3,1]);let e=this.size[0]*n[2],r=this.size[1]*n[3],a="nearest"===this.interpolation?Kc.resizeNearestNeighbor(t,[e,r]):Kc.resizeBilinear(t,[e,r]);return Eh(a,[0,3,1,2])}{let e=this.size[0]*n[1],r=this.size[1]*n[2];return"nearest"===this.interpolation?Kc.resizeNearestNeighbor(t,[e,r]):Kc.resizeBilinear(t,[e,r])}}))}getConfig(){let e={size:this.size,dataFormat:this.dataFormat,interpolation:this.interpolation},t=super.getConfig();return Object.assign(e,t),e}};AI.className="UpSampling2D",Qc.registerClass(AI);var RI=class extends vI{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=null==e.depthMultiplier?1:e.depthMultiplier,this.depthwiseInitializer=mw(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Zw(e.depthwiseConstraint),this.depthwiseRegularizer=lI(e.depthwiseRegularizer)}build(e){if((e=xw(e)).length<4)throw new Ob(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t="channelsFirst"===this.dataFormat?1:3;if(null==e[t]||e[t]<0)throw new Ob(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return Ci((()=>{let t=function(e,t,n=[1,1],r="valid",a,s){return Ci((()=>{null==a&&(a="channelsLast"),mx(a);let i=bI(e,a);if(4!==e.rank)throw new Ob(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(4!==t.rank)throw new Ob(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=ou(i,t,n,"same"===r?"same":"valid","NHWC",s),"channelsFirst"===a&&(i=Eh(i,[0,3,1,2])),i}))}(e=bw(e),this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(t=Hx(t,this.bias.read(),this.dataFormat)),null!=this.activation&&(t=this.activation.apply(t)),t}))}computeOutputShape(e){e=xw(e);let t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2],r="channelsFirst"===this.dataFormat?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,a=gI(t,this.kernelSize[0],this.padding,this.strides[0]),s=gI(n,this.kernelSize[1],this.padding,this.strides[1]);return"channelsFirst"===this.dataFormat?[e[0],r,a,s]:[e[0],a,s,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=fw(this.depthwiseInitializer),e.depthwiseRegularizer=iI(this.depthwiseRegularizer),e.depthwiseConstraint=Xw(this.depthwiseRegularizer),e}};function FI(e,t,n,r){if(Array.isArray(e)){if(null!=t||null!=n)throw new Ob("When input
2s is an array, neither initialState or constants should be provided");null!=r&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function a(e){return null==e||Array.isArray(e)?e:[e]}return{inputs:e,initialState:t=a(t),constants:n=a(n)}}function DI(e,t,n,r=!1,a,s,i=!1,o=!1){return Ci((()=>{let l=t.shape.length;if(l<3)throw new Ob(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat($x(2,l));if(t=Eh(t,u),null!=s)throw new Lb("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),null!=a&&((a=Wo(Wo(a,"bool"),"float32")).rank===l-1&&(a=Vu(a,-1)),a=Eh(a,u)),r&&(t=Fp(t,0),null!=a&&(a=Fp(a,0)));let d,p,h,c=[],f=n,m=t.shape[0],g=Ih(t);null!=a&&(p=Ih(a));for(let t=0;t<m;++t){let n=g[t],r=Ci((()=>e(n,f)));if(null==a)d=r[0],f=r[1];else{let e=Ci((()=>{let e=p[t],n=yd(Ud(e),e);return{output:Go(qo(r[0],e),qo(f[0],n)),newStates:f.map(((t,a)=>Go(qo(r[1][a],e),qo(t,n))))}}));d=e.output,f=e.newStates}o&&c.push(d)}return o&&(h=ah(c,1)),[d,h,f]}))}RI.className="DepthwiseConv2D",Qc.registerClass(RI);var MI=class e extends $w{constructor(e){let t;if(super(e),null==e.cell)throw new Ob("cell property is missing for the constructor of RNN.");if(t=Array.isArray(e.cell)?new UI({cells:e.cell}):e.cell,null==t.stateSize)throw new Ob("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=null!=e.returnSequences&&e.returnSequences,this.returnState=null!=e.returnState&&e.returnState,this.goBackwards=null!=e.goBackwards&&e.goBackwards,this._stateful=null!=e.stateful&&e.stateful,this.unroll=null!=e.unroll&&e.unroll,this.supportsMasking=!0,this.inputSpec=[new Nw({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(null==this.states_){return $x(0,Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1).map((e=>null))}return this.states_}setStates(e){this.states_=e}computeOutputShape(e){gw(e)&&(e=e[0]);let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n,r=t[0];if(n=this.returnSequences?[e[0],e[1],r]:[e[0],r],this.returnState){let r=[];for(let n of t)r.push([e[0],n]);return[n].concat(r)}return n}computeMask(e,t){return Ci((()=>{Array.isArray(t)&&(t=t[0]);let e=this.returnSequences?t:null;if(this.returnState){let t=this.states.map((e=>null));return[e].concat(t)}return e}))}get states(){if(null==this.states_){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;n<e;++n)t.push(null);return t}return this.states_}set states(e){this.states_=e}build(e){if(null!=this.numConstants)throw new Lb("Constants support is not implemented in RNN yet.");gw(e)&&(e=e[0]);let t=this.stateful?e[0]:null,n=e.slice(2);this.inputSpec[0]=new Nw({shape:[t,null,...n]});let r,a=[e[0]].concat(e.slice(2));if(this.cell.build(a),r=Array.isArray(this.cell.stateSize)?this.cell.stateSize:[this.cell.stateSize],null!=this.stateSpec){if(!ja.arraysEqual(this.stateSpec.map((e=>e.shape[e.shape.length-1])),r))throw new Ob(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=r.map((e=>new Nw({shape:[null,e]})));this.stateful&&this.resetStates()}resetStates(e,t=!1){Ci((()=>{if(!this.stateful)throw new Db("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(null==n)throw new Ob("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(null==this.states_)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((e=>Rd([n,e]))):this.states_=[Rd([n,this.cell.stateSize])];else if(null==e)Ei(this.states_),null!=this.keptStates&&(Ei(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((e=>Rd([n,e]))):this.states_[0]=Rd([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new Ob(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);!0===t?this.keptStates.push(this.states_.slice()):Ei(this.states_);for(let t=0;t<this.states_.length;++t){let r=e[t],a=Array.isArray(this.cell.stateSize)?this.cell.stateSize[t]:this.cell.stateSize,s=[n,a];if(!ja.arraysEqual(r.shape,s))throw new Ob(`State ${t} is incompatible with layer ${this.name}: expected shape=${s}, received shape=${r.shape}`);this.states_[t]=r}}this.states_=this.states_.map((e=>$i(e.clone())))}
2))}apply(e,t){let n=null==t?null:t.initialState,r=null==t?null:t.constants;null==t&&(t={});let a=FI(e,n,r,this.numConstants);e=a.inputs,n=a.initialState,r=a.constants;let s=[],i=[];if(null!=n){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let e of n)this.stateSpec.push(new Nw({shape:e.shape}));i=i.concat(this.stateSpec)}if(null!=r&&(t.constants=r,s=s.concat(r),this.numConstants=r.length),s[0]instanceof Tw){let n=[e].concat(s),r=this.inputSpec.concat(i),a=this.inputSpec;this.inputSpec=r;let o=super.apply(n,t);return this.inputSpec=a,o}return super.apply(e,t)}call(e,t){return Ci((()=>{let n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;e=bw(e),null==a&&(a=this.stateful?this.states_:this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==s)throw new Ob(`RNN Layer has ${s} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:r},o=DI(((e,t)=>{let n=this.cell.call([e].concat(t),i);return[n[0],n.slice(1)]}),e,a,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],u=o[1],d=o[2];this.stateful&&this.resetStates(d,r);let p=this.returnSequences?u:l;return this.returnState?[p].concat(d):p}))}getInitialState(e){return Ci((()=>{let t=Rd(e.shape);return t=Lu(t,[1,2]),t=Fx(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map((e=>e>1?Px(t,[1,e]):t)):this.cell.stateSize>1?[Px(t,[1,this.cell.stateSize])]:[t]}))}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.cell&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let t=super.getConfig(),n={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};null!=this.numConstants&&(n.numConstants=this.numConstants);let r=this.cell.getConfig();return this.getClassName()===e.className&&(n.cell={className:this.cell.getClassName(),config:r}),Object.assign(Object.assign(Object.assign({},r),t),n)}static fromConfig(e,t,n={}){let r=$v(t.cell,n);return new e(Object.assign(t,{cell:r}))}};MI.className="RNN",Qc.registerClass(MI);var OI=class extends $w{},LI=class extends OI{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,nx(this.units,"units"),this.activation=tI(null==e.activation?this.DEFAULT_ACTIVATION:e.activation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=mw(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=mw(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=mw(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=lI(e.kernelRegularizer),this.recurrentRegularizer=lI(e.recurrentRegularizer),this.biasRegularizer=lI(e.biasRegularizer),this.kernelConstraint=Zw(e.kernelConstraint),this.recurrentConstraint=Zw(e.recurrentConstraint),this.biasConstraint=Zw(e.biasConstraint),this.dropout=Cx([1,Ex([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=Cx([1,Ex([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=xw(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}call(e,t){return Ci((()=>{if(2!==e.length)throw new Ob(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=null!=t.training&&t.training;0<this.dropout&&this.dropout<1&&null==this.dropoutMask&&(this.dropoutMask=GI({ones:()=>Ud(e),rate:this.dropout,training:r,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&null==this.recurrentDropoutMask&&(this.recurrentDropoutMask=GI({ones:()=>Ud(n),rate:this.recurrentDropout,training:r,dropoutFunc:this.dropoutFunc}));let a,s=this.dropoutMask,i=this.recurrentDropoutMask;a=Wx(null!=s?qo(e,s):e,this.kernel.read()),null!=this.bias&&(a=Hx(a,this.bias.read())),null!=i&&(n=qo(n,i));let o=Go(a,Wx(n,this.recurrentKernel.read()));return null!=this.activation&&(o=this.activation.apply(o)),[o,o]}))}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Qk(this.activation),useBias:this.useBias,kernelInitializer:fw(this.kernelInitializer),recurrentInitializer:fw(this.recurrentInitializer),biasInitializer:fw(this.biasInitializer),kernelRegularizer:iI(this.kernelRegularizer),recurrentRegularizer:iI(this.recurrentRegularizer),biasRegularizer:iI(this.biasRegularizer),activityRegularizer:iI(this.activityRegularizer),kernelConstraint:Xw(this.kernelConstraint),recurrentConstraint:Xw(this.recurrentConstraint),biasConstraint:Xw(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign(Object.assign({},e),t)}};LI.className="SimpleRNNCell",Qc.registerClass(LI);var zI=class extends MI{constructor(e){e.cell=new LI(e),super(e)}call(e,t){return Ci((()=>{null!=this.cell.dropoutMask&&(Ei(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(Ei(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return new e(t)}};zI.className="SimpleRNN",Qc.registerClass(zI);var PI=class extends OI{constructor(e){if(super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new Ob("GRUCell does not support reset_after parameter set to true.");this.units=e.units,nx(this.units,"units"),this.activation=tI(void 0===e.activation?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=tI(void 0===e.recurrentActivation?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=mw(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=mw(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=mw(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=lI(e.kernelRegularizer),this.recurrentRegularizer=lI(e.recurrentRegularizer),this.biasRegularizer=lI(e.biasRegularizer),this.kernelConstraint=Zw(e.kernelConstraint),this.recurrentConstraint=Zw(e.recurrentConstraint),this.biasConstraint=Zw(e.biasConstraint),this.dropout=Cx([1,Ex([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=Cx([1,Ex([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){let t=(e=xw(e))[e.length-1];this.kernel=this.addWeight("kernel",[t,3*this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,3*this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[3*this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return Ci((()=>
2{if(2!==e.length)throw new Ob(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=null!=t.training&&t.training,r=e[1];e=e[0],0<this.dropout&&this.dropout<1&&null==this.dropoutMask&&(this.dropoutMask=GI({ones:()=>Ud(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&null==this.recurrentDropoutMask&&(this.recurrentDropoutMask=GI({ones:()=>Ud(r),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let a,s,i,o=this.dropoutMask,l=this.recurrentDropoutMask;0<this.dropout&&this.dropout<1&&(e=qo(e,o[0]));let u=Wx(e,this.kernel.read());this.useBias&&(u=Hx(u,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(r=qo(r,l[0]));let d=this.recurrentKernel.read(),[p,h]=eh(d,[2*this.units,this.units],d.rank-1),c=Wx(r,p),[f,m,g]=eh(u,3,u.rank-1),[y,b]=eh(c,2,c.rank-1);a=this.recurrentActivation.apply(Go(f,y)),s=this.recurrentActivation.apply(Go(m,b));let x=Wx(qo(s,r),h);i=this.activation.apply(Go(g,x));let w=Go(qo(a,r),qo(Go(1,fd(a)),i));return[w,w]}))}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Qk(this.activation),recurrentActivation:Qk(this.recurrentActivation),useBias:this.useBias,kernelInitializer:fw(this.kernelInitializer),recurrentInitializer:fw(this.recurrentInitializer),biasInitializer:fw(this.biasInitializer),kernelRegularizer:iI(this.kernelRegularizer),recurrentRegularizer:iI(this.recurrentRegularizer),biasRegularizer:iI(this.biasRegularizer),activityRegularizer:iI(this.activityRegularizer),kernelConstraint:Xw(this.kernelConstraint),recurrentConstraint:Xw(this.recurrentConstraint),biasConstraint:Xw(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign(Object.assign({},e),t)}};PI.className="GRUCell",Qc.registerClass(PI);var BI=class extends MI{constructor(e){0===e.implementation&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new PI(e),super(e)}call(e,t){return Ci((()=>{null!=this.cell.dropoutMask&&(Ei(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(Ei(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return 0===t.implmentation&&(t.implementation=1),new e(t)}};BI.className="GRU",Qc.registerClass(BI);var WI=class extends OI{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,nx(this.units,"units"),this.activation=tI(void 0===e.activation?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=tI(void 0===e.recurrentActivation?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=null==e.useBias||e.useBias,this.kernelInitializer=mw(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=mw(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=mw(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=lI(e.kernelRegularizer),this.recurrentRegularizer=lI(e.recurrentRegularizer),this.biasRegularizer=lI(e.biasRegularizer),this.kernelConstraint=Zw(e.kernelConstraint),this.recurrentConstraint=Zw(e.recurrentConstraint),this.biasConstraint=Zw(e.biasConstraint),this.dropout=Cx([1,Ex([0,null==e.dropout?0:e.dropout])]),this.recurrentDropout=Cx([1,Ex([0,null==e.recurrentDropout?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;let n,r=(e=xw(e))[e.length-1];if(this.kernel=this.addWeight("kernel",[r,4*this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,4*this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){if(this.unitForgetBias){let e=this.biasInitializer,r=this.units;n=new((t=class extends Yx{apply(t,n){let a=e.apply([r]),s=(new Jx).apply([r]),i=e.apply([2*r]);return zx(zx(a,s),i)}}).className="CustomInit",t)}else n=this.biasInitializer;this.bias=this.addWeight("bias",[4*this.units],null,n,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return Ci((()=>{let n=null!=t.training&&t.training;if(3!==e.length)throw new Ob(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],a=e[2];e=e[0],0<this.dropout&&this.dropout<1&&null==this.dropoutMask&&(this.dropoutMask=GI({ones:()=>Ud(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&null==this.recurrentDropoutMask&&(this.recurrentDropoutMask=GI({ones:()=>Ud(r),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let s,i,o,l,u=this.dropoutMask,d=this.recurrentDropoutMask;0<this.dropout&&this.dropout<1&&(e=qo(e,u[0]));let p=Wx(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(r=qo(r,d[0])),p=Go(p,Wx(r,this.recurrentKernel.read())),this.useBias&&(p=Hx(p,this.bias.read()));let[h,c,f,m]=eh(p,4,p.rank-1);s=this.recurrentActivation.apply(h),i=this.recurrentActivation.apply(c),o=Go(qo(i,a),qo(s,this.activation.apply(f))),l=this.recurrentActivation.apply(m);let g=qo(l,this.activation.apply(o));return[g,g,o]}))}getConfig(){let e=super.getConfig(),t={units:this.units,activation:Qk(this.activation),recurrentActivation:Qk(this.recurrentActivation),useBias:this.useBias,kernelInitializer:fw(this.kernelInitializer),recurrentInitializer:fw(this.recurrentInitializer),biasInitializer:fw(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:iI(this.kernelRegularizer),recurrentRegularizer:iI(this.recurrentRegularizer),biasRegularizer:iI(this.biasRegularizer),activityRegularizer:iI(this.activityRegularizer),kernelConstraint:Xw(this.kernelConstraint),recurrentConstraint:Xw(this.recurrentConstraint),biasConstraint:Xw(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign(Object.assign({},e),t)}};WI.className="LSTMCell",Qc.registerClass(WI);var VI=class extends MI{constructor(e){0===e.implementation&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new WI(e),super(e)}call(e,t){return Ci((()=>{null!=this.cell.dropoutMask&&(Ei(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(Ei(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}static fromConfig(e,t){return 0===t.implmentation&&(t.implementation=1),new e(t)}};VI.className="LSTM",Qc.registerClass(VI);var UI=class extends OI{constructor(e){super(e),this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return Ci((()=>{let n=e.slice(1),r=[];for(let e of this.cells.slice().reverse())Array.isArray(e.stateSize)?r.push(n.splice(0,e.stateSize.length)):r.push(n.splice(0,1));r.reverse();let a,s=[];for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=r[i],a=0===i?[e[0]].concat(n):[a[0]].concat(n),a=o.call(a,t),s.push(a.slice(1))}n=[];for(let e of s.slice().reverse())n.push(...e);return[a[0]].concat(n)}))}build(e){let t;
2gw(e)&&(e=e[0]),this.cells.forEach(((n,r)=>{wx(`RNNCell_${r}`,(()=>{n.build(e),t=Array.isArray(n.stateSize)?n.stateSize[0]:n.stateSize,e=[e[0],t]}))})),this.built=!0}getConfig(){let e=super.getConfig(),t={cells:this.cells.map((e=>({className:e.getClassName(),config:e.getConfig()})))};return Object.assign(Object.assign({},e),t)}static fromConfig(e,t,n={}){let r=[];for(let e of t.cells)r.push($v(e,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let e of this.cells)t.push(...e.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return Iw(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,a=e.splice(r);for(let e=0;e<n.weights.length;++e)t.push([n.weights[e],a[e]])}Sw(t)}};function GI(e){let{ones:t,rate:n,training:r=!1,count:a=1,dropoutFunc:s}=e,i=()=>null!=s?s(t(),n):jx(t(),n),o=()=>qx(i,t,r);return!a||a<=1?$i(o().clone()):Array(a).fill(void 0).map(o).map((e=>$i(e.clone())))}UI.className="StackedRNNCells",Qc.registerClass(UI);var HI=class extends MI{constructor(e){if(e.unroll)throw new Lb("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new Lb("It is not possible at the moment to stack convolutional cells.");super(e),this.inputSpec=[new Nw({ndim:5})]}call(e,t){return Ci((()=>{if(null!=this.cell.dropoutMask&&(Ei(this.cell.dropoutMask),this.cell.dropoutMask=null),null!=this.cell.recurrentDropoutMask&&(Ei(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new Ob("ConvRNN2D cell does not support constants");let n=null==t?null:t.mask,r=null==t?null:t.training,a=null==t?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:a})}))}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return Ci((()=>{let{stateSize:t}=this.cell,n=e.shape,r=this.computeSingleOutputShape(n),a=Rd([r[0],...r.slice(2)]);return Array.isArray(t)?Array(t.length).fill(a):[a]}))}resetStates(e,t=!1){Ci((()=>{if(!this.stateful)throw new Db("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),a=[r[0],...r.slice(2)];if(null==n[0])throw new Ob("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(null==this.getStates())Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((()=>Rd(a))):this.states_=[Rd(a)];else if(null==e)Ei(this.states_),null!=this.keptStates&&(Ei(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map((()=>Rd(a))):this.states_[0]=Rd(a);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new Ob(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):Ei(this.states_);for(let t=0;t<this.states_.length;++t){let n=e[t],r=a;if(!ja.arraysEqual(n.shape,r))throw new Ob(`State ${t} is incompatible with layer ${this.name}: expected shape=${r}, received shape=${n.shape}`);this.states_[t]=n}}this.states_=this.states_.map((e=>$i(e.clone())))}))}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:a,strides:s,dilationRate:i}=this.cell,o="channelsFirst"===t,l=e[o?3:2],u=e[o?4:3],d=gI(l,r[0],a,s[0],i[0]),p=gI(u,r[1],a,s[1],i[1]);return[...e.slice(0,2),...o?[n,d,p]:[d,p,n]]}};HI.className="ConvRNN2D";var jI=class extends WI{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:a,dataFormat:s,dilationRate:i}=e;super(Object.assign(Object.assign({},e),{units:t})),this.filters=t,nx(this.filters,"filters"),this.kernelSize=mI(n,2,"kernelSize"),this.kernelSize.forEach((e=>nx(e,"kernelSize"))),this.strides=mI(r||1,2,"strides"),this.strides.forEac
2h((e=>nx(e,"strides"))),this.padding=a||"valid",gx(this.padding),this.dataFormat=s||"channelsLast",mx(this.dataFormat),this.dilationRate=mI(i||1,2,"dilationRate"),this.dilationRate.forEach((e=>nx(e,"dilationRate")))}build(e){var t;e=xw(e);let n="channelsFirst"===this.dataFormat?1:e.length-1;if(null==e[n])throw new Ob(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],a=this.kernelSize.concat([r,4*this.filters]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let s=this.kernelSize.concat([this.filters,4*this.filters]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",s,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let e;if(this.unitForgetBias){let n=this.biasInitializer,r=this.filters;e=new((t=class extends Yx{apply(e,t){return Lx([n.apply([r]),Fd([r]),n.apply([2*r])])}}).className="CustomInit",t)}else e=this.biasInitializer;this.bias=this.addWeight("bias",[4*this.filters],null,e,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return Ci((()=>{if(3!==e.length)throw new Ob(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],a=e[1],s=e[2];0<this.dropout&&this.dropout<1&&null==this.dropoutMask&&(this.dropoutMask=GI({ones:()=>Ud(r),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let i=this.dropoutMask,o=(e,t,n)=>t&&t[n]?qo(t[n],e):e,l=o(r,i,0),u=o(r,i,1),d=o(r,i,2),p=o(r,i,3);0<this.recurrentDropout&&this.recurrentDropout<1&&null==this.recurrentDropoutMask&&(this.recurrentDropoutMask=GI({ones:()=>Ud(a),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let h=this.recurrentDropoutMask,c=o(a,h,0),f=o(a,h,1),m=o(a,h,2),g=o(a,h,3),[y,b,x,w]=eh(this.kernel.read(),4,3),[v,k,I,S]=this.useBias?eh(this.bias.read(),4):[null,null,null,null];l=this.inputConv(l,y,v,this.padding),u=this.inputConv(u,b,k,this.padding),d=this.inputConv(d,x,I,this.padding),p=this.inputConv(p,w,S,this.padding);let[N,T,_,C]=eh(this.recurrentKernel.read(),4,3);c=this.recurrentConv(c,N),f=this.recurrentConv(f,T),m=this.recurrentConv(m,_),g=this.recurrentConv(g,C);let E=this.recurrentActivation.apply(Go(l,c)),$=this.recurrentActivation.apply(Go(u,f)),A=Go(qo($,s),qo(E,this.activation.apply(Go(d,m)))),R=qo(this.recurrentActivation.apply(Go(p,g)),this.activation.apply(A));return[R,R,A]}))}getConfig(){let e=super.getConfig(),{units:t}=e,n=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(null!=e&&"function"==typeof Object.getOwnPropertySymbols){var a=0;for(r=Object.getOwnPropertySymbols(e);a<r.length;a++)t.indexOf(r[a])<0&&Object.prototype.propertyIsEnumerable.call(e,r[a])&&(n[r[a]]=e[r[a]])}return n}(e,["units"]),r={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign(Object.assign({},n),r)}inputConv(e,t,n,r){let a=Kl(e,t,this.strides,r||"valid","channelsFirst"===this.dataFormat?"NCHW":"NHWC",this.dilationRate);return n?Hx(a,n,this.dataFormat):a}recurrentConv(e,t){return Kl(e,t,1,"same","channelsFirst"===this.dataFormat?"NCHW":"NHWC")}};jI.className="ConvLSTM2DCell",Qc.registerClass(jI);var qI=class extends HI{constructor(e){let t=new jI(e);super(Object.assign(Object.assign({},e),{cell:t}))}static fromConfig(e,t){return new e(t)}};qI.className="ConvLSTM2D",Qc.registerClass(qI);var KI=class extends $w{constructor(e){super(e),this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(null==this.noiseShape)return this.noiseShape;let t=e.shape,n=[];for(let e=0;e<this.noiseShape.length;++e)n.push(null==this.noiseShape[e]?t[e]:this.noiseShape[e]);return n}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);if(0<this.rate&&this.rate<1){let e=null!=t.training&&t.training,r=this.getNoiseShape(n);return qx((()=>jx(n,this.rate,r,this.seed)),(()=>n),e)}return e}))}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};KI.className="Dropout",Qc.registerClass(KI);var XI=class extends KI{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};XI.className="SpatialDropout1D",Qc.registerClass(XI);var YI=class extends $w{constructor(e){if(super(e),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",null==e.batchInputShape&&null==e.inputShape&&null!=e.inputDim){let t=null;null!=e.batchSize&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,nx(this.units,"units"),this.activation=tI(e.activation),null!=e.useBias&&(this.useBias=e.useBias),this.kernelInitializer=mw(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=mw(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Zw(e.kernelConstraint),this.biasConstraint=Zw(e.biasConstraint),this.kernelRegularizer=lI(e.kernelRegularizer),this.biasRegularizer=lI(e.biasRegularizer),this.activityRegularizer=lI(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){let t=(e=xw(e))[e.length-1];null==this.kernel&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){let t=(e=xw(e)).slice();return t[t.length-1]=this.units,t}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n,r=bw(e),a=ax(this.activation.getClassName());return null!=a?n=Wx(r,this.kernel.read(),a,this.bias?this.bias.read():null):(n=Wx(r,this.kernel.read()),null!=this.bias&&(n=Hx(n,this.bias.read())),null!=this.activation&&(n=this.activation.apply(n))),n}))}getConfig(){let e={units:this.units,activation:Qk(this.activation),useBias:this.useBias,kernelInitializer:fw(this.kernelInitializer),biasInitializer:fw(this.biasInitializer),kernelRegularizer:iI(this.kernelRegularizer),biasRegularizer:iI(this.biasRegularizer),activityRegularizer:iI(this.activityRegularizer),kernelConstraint:Xw(this.kernelConstraint),biasConstraint:Xw(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};YI.className="Dense",Qc.registerClass(YI);var ZI=class extends $w{constructor(e){super(e=e||{}),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=xw(e);for(let t of e.slice(1))if(null==t)throw new Ob(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],_x(e,1)]}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);if("channelsFirst"===this.dataFormat&&n.rank>1){let e=[0];for(let t=2;t<n.rank;++t)e.push(t);e.push(1),n=Eh(n,e)}return function(e){if(e.rank<=1)throw new Ob(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],_x(e.shape,1)];return kl(e,t)}(n)}))}getConfig(){let e={};null!=this.dataFormat&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};ZI.className="Flatten",Qc.registerClass(ZI);var JI=class extends $w{constructor(e){super(e),this.supportsMasking=!0,this.activation=tI(e.activation)}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);return this.activation.apply(n)}))}getConfig(){let e={activation:Qk(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};JI.className="Activation",Qc.registerClass(JI);var QI=class extends $w{constructor(e){super(e),this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return Ci((()=>function(e,t){return Ci((()=>
2{if(2!==e.shape.length)throw new Ob(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);return Px(Fx(e,1),[1,t,1])}))}(e=bw(e),this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};QI.className="RepeatVector",Qc.registerClass(QI);var eS=class extends $w{constructor(e){super(e),this.targetShape=e.targetShape;for(let e=0;e<this.targetShape.length;++e)this.isUnknown(this.targetShape[e])&&(this.targetShape[e]=null)}isUnknown(e){return e<0||null==e}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",r=t.slice(),a=1,s=null;for(let e=0;e<r.length;++e){let t=r[e];if(this.isUnknown(t)){if(null!==s)throw new Ob("Can only specifiy one unknown dimension.");s=e}else a*=t}let i=_x(e);if(null!==s){if(0===a||i%a!=0)throw new Ob(n);r[s]=i/a}else if(i!==a)throw new Ob(n);return r}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e),r=n.shape,a=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return kl(n,a)}))}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};eS.className="Reshape",Qc.registerClass(eS);var tS=class extends $w{constructor(e){if(super(e),null==e.dims)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=$x(1,e.dims.length+1);if(!ja.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new Nw({ndim:this.dims.length+1})]}computeOutputShape(e){let t=(e=xw(e)).slice();return this.dims.forEach(((n,r)=>{t[r+1]=e[n]})),t}call(e,t){return Eh(bw(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};tS.className="Permute",Qc.registerClass(tS);var nS=class extends $w{constructor(e){super(null==e?{}:e),this.supportsMasking=!0,this.maskValue=null!=e?null==e.maskValue?0:e.maskValue:0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=bw(e);return Qo(Wd(n,this.maskValue),-1)}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e),r=Qo(Wd(n,this.maskValue),-1,!0);return qo(n,Wo(r,n.dtype))}))}};nS.className="Masking",Qc.registerClass(nS);var rS=class extends $w{constructor(e){if(super(e),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",null==e.batchInputShape&&null==e.inputShape){let t=null;null!=e.batchSize&&(t=e.batchSize),null==e.inputLength?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(Gb(e.inputLength))}this.inputDim=e.inputDim,nx(this.inputDim,"inputDim"),this.outputDim=e.outputDim,nx(this.outputDim,"outputDim"),this.embeddingsInitializer=mw(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=lI(e.embeddingsRegularizer),this.activityRegularizer=lI(e.activityRegularizer),this.embeddingsConstraint=Zw(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return Ci((()=>this.maskZero?(e=bw(e),Wd(e,gu(e))):null))}computeOutputShape(e){if(e=xw(e),null==this.inputLength)return[...e,this.outputDim];let t=Gb(this.inputLength);if(t.length!==e.length-1)throw new Ob(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r<t.length;++r){let a=t[r],s=e[r+1];
2if(null!=a&&null!=s&&a!==s)throw new Ob(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);null==a&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);"int32"!==n.dtype&&(n=Rx(n,"int32"));let r=Vx(this.embeddings.read(),kl(n,[n.size]));return kl(r,xw(this.computeOutputShape(n.shape)))}))}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:fw(this.embeddingsInitializer),embeddingsRegularizer:iI(this.embeddingsRegularizer),activityRegularizer:iI(this.activityRegularizer),embeddingsConstraint:Xw(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};rS.className="Embedding",Qc.registerClass(rS);var aS=class extends $w{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Lb}computeElementwiseOpOutputShape(e,t){if(null==e||null==t)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(0===t.length)return e;let n=e.slice(0,e.length-t.length);for(let r=0;r<t.length;++r){let a=e[e.length-t.length+r],s=t[r];if(null==a||null==s||a<0||s<0)n.push(null);else if(1===a)n.push(s);else if(1===s)n.push(a);else{if(a!==s)throw new Ob("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(a)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[xw(e)]),e.length<2)throw new Ob(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let n of e)null!=n&&null!==n[0]&&t.push(n[0]);if(t=Jb(t),t.length>1)throw new Ob(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=null==e[0]?null:e[0].slice(1);for(let t=1;t<e.length;++t){let r=null==e[t]?null:e[t].slice(1);n=this.computeElementwiseOpOutputShape(n,r)}let r=e.map((e=>e.length));-1===e.indexOf(null)&&1===Jb(r).length?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return Ci((()=>{if(this.reshapeRequired){let t=[],n=e.map((e=>e.rank));if(-1===n.indexOf(null)){let r=Ex(n);for(let n of e){let e=n.rank;for(let t=0;t<r-e;++t)n=Fx(n,1);t.push(n)}return this.mergeFunction(t)}{let n=!1;for(let r of e){let e=r.rank;if(null==e){let e=r.shape,a=e[0],s=e.slice(1).concat([a]),i=kl(r,[a].concat(_x(e.slice(1))));i=Eh(i,[1,0]),i=kl(i,s),t.push(i),n=!0}else if(e>1){let a=$x(1,e).concat([0]);t.push(Eh(r,a)),n=!0}else t.push(r)}let r=this.mergeFunction(t),a=r.rank;if(n)if(null==a){let e=r.shape,t=e[e.length-1],n=[t].concat(e.slice(0,e.length-1));r=kl(Eh(kl(r,[-1,t]),[1,0]),n)}else if(a>1){let e=[a-1].concat($x(0,a-1));r=Eh(r,e)}return r}}return this.mergeFunction(e)}))}computeOutputShape(e){let t;t=null==e[0]?null:e[0].slice(1);for(let n=1;n<e.length;++n){let r=null==e[n]?null:e[n].slice(1);t=this.computeElementwiseOpOutputShape(t,r)}let n=[];for(let t of e)null!=t&&null!==t[0]&&n.push(t[0]);return n=Jb(n),t=1===n.length?n.concat(t):[null].concat(t),t}computeMask(e,t){return Ci((()=>{if(null==t)return null;if(!Array.isArray(t))throw new Ob("`mask` should be an Array");if(!Array.isArray(e))throw new Ob("`inputs` should be an Array");if(t.length!==e.length)throw new Ob(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every((e=>null==e)))return null;let n=(t=t.map((e=>null==e?e:Vu(e,0))))[0];for(let e=1;e<t.length-1;++e)n=wd(n,t[e]);return n}))}},sS=class extends aS{constructor(e){super(e)}mergeFunction(e){return Ci((()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=Go(t,e[n]);return t}))}};sS.className="Add",Qc.registerClass(sS);var iS=class extends aS{constructor(e){super(e)}mergeFunction(e){return Ci((()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=qo(t,e[n]);return t}))}};iS.className="Multiply",Qc.registerClass(iS);var oS=class extends aS{constructor(e){super(e)}mergeFunction(e){return Ci((()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=Go(t,e[n]);return qo(1/e.length,t)}))}};oS.className="Average",Qc.registerClass(oS);var lS=class extends aS{constructor(e){super(e)}mergeFunction(e){return Ci((()=>{let t=e[0];for(let n=1;n<e.length;++n)t=$d(t,e[n]);return t}))}};lS.className="Maximum",Qc.registerClass(lS);var uS=class extends aS{constructor(e){super(e)}mergeFunction(e){return Ci((()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Md(t,e[n]);return t}))}};uS.className="Minimum",Qc.registerClass(uS);var dS=class extends aS{constructor(e){super(e),this.DEFAULT_AXIS=-1,null==e&&(e={}),this.axis=null==e.axis?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!Array.isArray(e)||!Array.isArray(e[0])||1===e.length)throw new Ob("A `Concatenate` layer should be called on a list of at least 2 inputs");let t=!0;for(let n of e)if(null!=n){t=!1;break}if(t)return;let n=[];for(let t=0;t<e.length;++t){let r=e[t].slice();r.splice(this.axis,1);let a=!1;for(let e of n)if(ja.arraysEqual(e,r)){a=!0;break}a||n.push(r)}if(n.length>1)throw new Ob("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return Ci((()=>
2Lx(e,this.axis)))}computeOutputShape(e){if(!Array.isArray(e)||!Array.isArray(e[0]))throw new Ob("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(let e of t.slice(1)){if(null==n[r]||null==e[r]){n[r]=null;break}n[r]+=e[r]}return n}computeMask(e,t){if(null==t)return null;if(!Array.isArray(t))throw new Ob("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new Ob("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new Ob(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return Ci((()=>{let n=!0;if(t.forEach((e=>{null==e||(n=!1)})),n)return null;let r=[];for(let n=0;n<e.length;++n)null==t[n]?r.push(Wo(Ud(e[n]),"bool")):t[n].rank<e[n].rank?r.push(Vu(t[n],-1)):r.push(t[n]);let a=Nl(r,this.axis);return Jo(a,-1,!1)}))}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};function pS(e,t){for(;e<0;)e+=t;return e}dS.className="Concatenate",Qc.registerClass(dS);var hS=class extends aS{constructor(e){super(e),this.axes=e.axes,this.normalize=null!=e.normalize&&e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){ja.assert(Array.isArray(e)&&2===e.length&&Array.isArray(e[0])&&Array.isArray(e[1]),(()=>"A `Dot` layer should be called on a list of exactly 2 inputs."));let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new Lb("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new Ob(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(2!==e.length)throw new Ob(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t,n=e[0],r=e[1];return t=Array.isArray(this.axes)?this.axes.map(((t,n)=>pS(t,e[n].shape.length))):[pS(this.axes,n.shape.length),pS(this.axes,r.shape.length)],this.normalize&&(n=Av(n,t[0]),r=Av(r,t[1])),function(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new Lb("batchDot is not implemented for tensors of 4D or higher rank yet");if(ja.assert(e.shape.length>=2,(()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`)),ja.assert(e.shape.length>=2,(()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`)),"number"==typeof n&&(n=[n,n]),"complex64"===e.dtype||"complex64"===t.dtype)throw new Lb("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,a=t.shape.length;null==n&&(n=[r-1,a-2]);let s=n;return Ci((()=>{let n,i;if(r>a){n=r-a;let e=[];for(let t=0;t<n;++t)e.push(1);t=kl(t,t.shape.concat(e))}else if(a>r){n=a-r;let t=[];for(let e=0;e<n;++e)t.push(1);e=kl(e,e.shape.concat(t))}else n=0;if(2===e.shape.length&&2===t.shape.length)i=s[0]===s[1]?Lu(qo(e,t),s[0]):Lu(qo(Eh(e,[1,0]),t),s[1]);else{let n=s[0]!==e.shape.length-1,r=s[1]===t.shape.length-1;i=Tl(e,t,n,r)}if(n>0){let e;e=r>a?r+a-3:r-1;let t=[];for(let r=e;r<e+n;++r)t.push(r);i=rh(i,t)}return 1===i.shape.length&&(i=Vu(i,1)),i}))}(n,r,t)}interpretAxes(e,t){let n;return n=Array.isArray(this.axes)?this.axes:[pS(this.axes,e.length),pS(this.axes,t.length)],n}computeOutputShape(e){ja.assert(Array.isArray(e)&&2===e.length&&Array.isArray(e[0])&&Array.isArray(e[1]),(()=>"A `Dot` layer should be called on a list of exactly 2 inputs."));let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Lb("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);let a=t.concat(n);return 1===a.length&&a.push(1),a}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};hS.className="Dot",Qc.registerClass(hS);var cS=class extends $w{constructor(e){super(e),this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);return qx((()=>Go(Bx(n.shape,0,this.stddev),n)),(()=>n),t.training||!1)}))}};cS.className="GaussianNoise",Qc.registerClass(cS);var fS=class extends $w{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return Ci((()=>{this.invokeCallHook(e,t);let n=bw(e);return this.rate>0&&this.rate<1?qx((()=>{let e=Math.sqrt(this.rate/(1-this.rate));return qo(n,Bx(n.shape,1,e))}),(()=>n),t.training||!1):n}))}};fS.className="GaussianDropout",Qc.registerClass(fS);var mS=class extends $w{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||bw(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return Ci((()=>
2{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return qx((()=>{let t=bw(e),r=-1.7580993408473766,a=Xu(Tp(n),this.rate);a=Rx(a,"float32");let s=((1-this.rate)*(1+this.rate*r**2))**-.5,i=-s*r*this.rate,o=Go(qo(t,a),qo(Go(a,-1),r));return Go(qo(o,s),i)}),(()=>bw(e)),t.training||!1)}return e}))}};function gS(e,t,n,r,a,s=.001){let i;if(2===e.rank)i=Dl(e,t,n,r,a,s);else if(3===e.rank)i=Ml(e,t,n,r,a,s);else{if(4!==e.rank)throw new Lb(`batchNormalization is not implemented for array of rank ${e.rank} yet`);i=Ol(e,t,n,r,a,s)}return i}function yS(e,t,n,r,a=.001){return ja.arraysEqual(r.slice().sort(),$x(0,e.rank-1))?function(e,t,n,r,a=.001){return Ci((()=>{let s=zd(e,r),i=s.mean,o=s.variance;return[gS(e,i,o,n,t,a),i,o]}))}(e,t,n,r,a):function(e,t,n,r,a=.001){return Ci((()=>{let s=zd(e,r),i=s.mean,o=s.variance,l=[];for(let t of $x(0,e.rank))-1!==r.indexOf(t)?l.push(1):l.push(e.shape[t]);let u=kl(i,l),d=kl(o,l),p=null==t?null:kl(t,l),h=null==n?null:kl(n,l);return[gS(e,u,d,h,p,a),i,o]}))}(e,t,n,r,a)}mS.className="AlphaDropout",Qc.registerClass(mS);var bS=class extends $w{constructor(e){null==e&&(e={}),super(e),this.supportsMasking=!0,this.axis=null==e.axis?-1:e.axis,this.momentum=null==e.momentum?.99:e.momentum,this.epsilon=null==e.epsilon?.001:e.epsilon,this.center=null==e.center||e.center,this.scale=null==e.scale||e.scale,this.betaInitializer=mw(e.betaInitializer||"zeros"),this.gammaInitializer=mw(e.gammaInitializer||"ones"),this.movingMeanInitializer=mw(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=mw(e.movingVarianceInitializer||"ones"),this.betaConstraint=Zw(e.betaConstraint),this.gammaConstraint=Zw(e.gammaConstraint),this.betaRegularizer=lI(e.betaRegularizer),this.gammaRegularizer=lI(e.gammaRegularizer)}build(e){e=xw(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(null==n)throw new Ob(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Nw({ndim:e.length,axes:{[t]:n}})];let r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return Ci((()=>{let n=null!=t.training&&t.training,r=bw(e),a=r.shape,s=a.length,i=$x(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=Bb(1,s);l[o]=a[o];let u=i.slice();u.sort();let d=!ja.arraysEqual(u,$x(0,s).slice(0,s-1));if(!n)return(()=>{if(d){let e=kl(this.movingMean.read(),l),t=kl(this.movingVariance.read(),l),n=this.center?kl(this.beta.read(),l):null,a=this.scale?kl(this.gamma.read(),l):null;return gS(r,e,t,n,a,this.epsilon)}return gS(r,this.movingMean.read(),this.movingVariance.read(),null==this.beta?null:this.beta.read(),null==this.gamma?null:this.gamma.read(),this.epsilon)})();let[p,h,c]=yS(r,this.gamma.read(),this.beta.read(),i,this.epsilon),f=(e,t,n)=>{Ci((()=>{let r=1-n,a=e.read(),s=qo(yd(a,t),r);e.write(yd(a,s))}))};return f(this.movingMean,h,this.momentum),f(this.movingVariance,c,this.momentum),p}))}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:fw(this.betaInitializer),gammaInitializer:fw(this.gammaInitializer),movingMeanInitializer:fw(this.movingMeanInitializer),movingVarianceInitializer:fw(this.movingVarianceInitializer),betaRegularizer:iI(this.betaRegularizer),gammaRegularizer:iI(this.gammaRegularizer),betaConstraint:Xw(this.betaConstraint),gammaConstraint:Xw(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};bS.className="BatchNormalization",Qc.registerClass(bS);var xS=class extends $w{constructor(e){if(null==e&&(e={}),super(e),this.axis=null==e.axis?-1:e.axis,"number"==typeof this.axis){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else{if(!Array.isArray(this.axis))throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);for(let e of this.axis)if(!Number.isInteger(e))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}this.epsilon=null==e.epsilon?.001:e.epsilon,this.center=null==e.center||e.center,this.scale=null==e.scale||e.scale,this.betaInitializer=mw(e.betaInitializer||"zeros"),this.gammaInitializer=mw(e.gammaInitializer||"ones"),this.betaRegularizer=lI(e.betaRegularizer),this.gammaRegularizer=lI(e.gammaRegularizer),this.supportsMasking=!0}build(e){let t=(e=xw(e)).length;"number"==typeof this.axis&&(this.axis=[this.axis]);for(let e=0;e<this.axis.length;++e)this.axis[e]<0&&(this.axis[e]+=t);for(let e of this.axis)if(e<0||e>=t)throw new Error(`Invalid axis: ${e}`);if(this.axis.length!==Jb(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map((t=>e[t]));this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,true):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,true):this.beta=null,this.built=!0}call(e,t){let n=bw(e),r=n.shape,a=r.length;return Ci((()=>{let{mean:e,variance:t}=zd(n,this.axis,!0),s=Bb(1,a);for(let e of this.axis)s[e]=r[e];let i=e=>null!=e&&e.shape.length!==a?kl(e,s):e,o=this.scale?i(this.gamma.read()):null,l=this.center?i(this.beta.read()):null,u=[],d=[];for(let e=0;e<a;++e)-1!==this.axis.indexOf(e)?(u.push(r[e]),d.push(1)):(u.push(1),d.push(r[e]));return e=Gu(e,u),t=Gu(t,u),null!=o&&(o=Gu(o,d)),null!=l&&(l=Gu(l,d)),gS(n,e,t,l,o,this.epsilon)}))}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:fw(this.betaInitializer),gammaInitializer:fw(this.gammaInitializer),betaRegularizer:iI(this.betaRegularizer),gammaRegularizer:iI(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};xS.className="LayerNormalization",Qc.registerClass(xS);var wS=class extends $w{constructor(e){if(null==e&&(e={}),super(e),this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,null==e.padding)this.padding=[[1,1],[1,1]];else if("number"==typeof e.padding)this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,2!==e.padding.length)throw new Ob(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if("number"==typeof e.padding[0])t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,2!==e.padding[0].length)throw new Ob(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],2!==e.padding[1].length)throw new Ob(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Nw({ndim:4})]}computeOutputShape(e){let t,n;return e=xw(e),"channelsFirst"===this.dataFormat?(t=null!=e[2]&&e[2]>=0?e[2]+this.padding[0][0]+this.padding[0][1]:null,n=null!=e[3]&&e[3]>=0?e[3]+this.padding[1][0]+this.padding[1][1]:null,[e[0],e[1],t,n]):(t=null!=e[1]&&e[1]>=0?e[1]+this.padding[0][0]+this.padding[0][1]:null,n=null!=e[2]&&e[2]>=0?e[2]+this.padding[1][0]+this.padding[1][1]:null,[e[0],t,n,e[3]])}call(e,t){return Ci((()=>function(e,t,n){return Ci((()=>
vendor: 5,712 bytes, line 2
2{if(4!==e.rank)throw new Ob(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(null==t&&(t=[[1,1],[1,1]]),2!==t.length||2!==t[0].length||2!==t[1].length)throw new Ob("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(null==n&&(n="channelsLast"),"channelsLast"!==n&&"channelsFirst"!==n)throw new Ob(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return r="channelsFirst"===n?[[0,0],[0,0],t[0],t[1]]:[[0,0],t[0],t[1],[0,0]],Hd(e,r)}))}(bw(e),this.padding,this.dataFormat)))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};function vS(e,t,n,r,a,s){return Ci((()=>{mx(a),yx(s),gx(r),null==n&&(n=[1,1]),null==r&&(r="valid"),null==a&&(a="channelsLast"),null==s&&(s="max"),e=bI(e,a);let i,o="same"===r?"same":"valid";return i="max"===s?_d(e,t,n,o):Il(e,t,n,o),"channelsFirst"===a&&(i=Eh(i,[0,3,1,2])),i}))}function kS(e,t,n,r,a,s){return Ci((()=>{mx(a),yx(s),gx(r),null==n&&(n=[1,1,1]),null==r&&(r="valid"),null==a&&(a="channelsLast"),null==s&&(s="max"),e=xI(e,a);let i,o="same"===r?"same":"valid";return i="max"===s?Cd(e,t,n,o):Sl(e,t,n,o),"channelsFirst"===a&&(i=Eh(i,[0,4,1,2,3])),i}))}wS.className="ZeroPadding2D",Qc.registerClass(wS);var IS=class extends $w{constructor(e){if(null==e.poolSize&&(e.poolSize=2),super(e),"number"==typeof e.poolSize)this.poolSize=[e.poolSize];else{if(!Array.isArray(e.poolSize)||1!==e.poolSize.length||"number"!=typeof e.poolSize[0])throw new Ob(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);this.poolSize=e.poolSize}if(nx(this.poolSize,"poolSize"),null==e.strides)this.strides=this.poolSize;else if("number"==typeof e.strides)this.strides=[e.strides];else{if(!Array.isArray(e.strides)||1!==e.strides.length||"number"!=typeof e.strides[0])throw new Ob(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);this.strides=e.strides}nx(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,gx(this.padding),this.inputSpec=[new Nw({ndim:3})]}computeOutputShape(e){let t=gI((e=xw(e))[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return Ci((()=>{this.invokeCallHook(e,t),e=Fx(bw(e),2);let n=this.poolingFunction(bw(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return rh(n,[2])}))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},SS=class extends IS{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),vS(e,t,n,r,a,"max")}};SS.className="MaxPooling1D",Qc.registerClass(SS);var NS=class extends IS{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),vS(e,t,n,r,a,"avg")}};NS.className="AveragePooling1D",Qc.registerClass(NS);var TS=class extends $w{constructor(e){if(null==e.poolSize&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],null==e.strides)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(2!==e.strides.length)throw new Ob(`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}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];nx(this.poolSize,"poolSize"),nx(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,mx(this.dataFormat),gx(this.padding),this.inputSpec=[new Nw({ndim:4})]}computeOutputShape(e){e=xw(e);let t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2];return t=gI(t,this.poolSize[0],this.padding,this.strides[0]),n=gI(n,this.poolSize[1],this.padding,this.strides[1]),"channelsFirst"===this.dataFormat?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return Ci((()=>(this.invokeCallHook(e,t),this.poolingFunction(bw(e),this.poolSize,this.strides,this.padding,this.dataFormat))))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},_S=class extends TS{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),vS(e,t,n,r,a,"max")}};_S.className="MaxPooling2D",Qc.registerClass(_S);var CS=class extends TS{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),vS(e,t,n,r,a,"avg")}};CS.className="AveragePooling2D",Qc.registerClass(CS);var ES=class extends $w{constructor(e){if(null==e.poolSize&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],null==e.strides)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(3!==e.strides.length)throw new Ob(`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}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];nx(this.poolSize,"poolSize"),nx(this.strides,"strides"),this.padding=null==e.padding?"valid":e.padding,this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,mx(this.dataFormat),gx(this.padding),this.inputSpec=[new Nw({ndim:5})]}computeOutputShape(e){e=xw(e);let t="channelsFirst"===this.dataFormat?e[2]:e[1],n="channelsFirst"===this.dataFormat?e[3]:e[2],r="channelsFirst"===this.dataFormat?e[4]:e[3];return t=gI(t,this.poolSize[0],this.padding,this.strides[0]),n=gI(n,this.poolSize[1],this.padding,this.strides[1]),r
2=gI(r,this.poolSize[2],this.padding,this.strides[2]),"channelsFirst"===this.dataFormat?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return Ci((()=>(this.invokeCallHook(e,t),this.poolingFunction(bw(e),this.poolSize,this.strides,this.padding,this.dataFormat))))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},$S=class extends ES{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),kS(e,t,n,r,a,"max")}};$S.className="MaxPooling3D",Qc.registerClass($S);var AS=class extends ES{constructor(e){super(e)}poolingFunction(e,t,n,r,a){return mx(a),gx(r),kS(e,t,n,r,a,"avg")}};AS.className="AveragePooling3D",Qc.registerClass(AS);var RS=class extends $w{constructor(e){super(e),this.inputSpec=[new Nw({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Lb}},FS=class extends RS{constructor(e){super(e||{})}call(e,t){return Ci((()=>{let t=bw(e);return Ad(t,1)}))}};FS.className="GlobalAveragePooling1D",Qc.registerClass(FS);var DS=class extends RS{constructor(e){super(e||{})}call(e,t){return Ci((()=>{let t=bw(e);return Au(t,1)}))}};DS.className="GlobalMaxPooling1D",Qc.registerClass(DS);var MS=class extends $w{constructor(e){super(e),this.dataFormat=null==e.dataFormat?"channelsLast":e.dataFormat,mx(this.dataFormat),this.inputSpec=[new Nw({ndim:4})]}computeOutputShape(e){return"channelsLast"===this.dataFormat?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Lb}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},OS=class extends MS{call(e,t){return Ci((()=>{let t=bw(e);return"channelsLast"===this.dataFormat?Ad(t,[1,2]):Ad(t,[2,3])}))}};
2OS.className="GlobalAveragePooling2D",Qc.registerClass(OS);var LS=class extends MS{call(e,t){return Ci((()=>{let t=bw(e);return"channelsLast"===this.dataFormat?Au(t,[1,2]):Au(t,[2,3])}))}};LS.className="GlobalMaxPooling2D",Qc.registerClass(LS);var zS=class extends $w{constructor(e){super(e),this.layer=e.layer}build(e){this.built=!0}get trainable(){return null!=this.layer&&this.layer.trainable}set trainable(e){null!=this.layer&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.layer&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let r=$v(t.layer,n);delete t.layer;let a={layer:r};return Object.assign(a,t),new e(a)}},PS=class extends zS{constructor(e){super(e),this.supportsMasking=!0}build(e){if((e=xw(e)).length<3)throw new Ob(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){let t=[(e=xw(e))[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return Ci((()=>DI(((e,n)=>[bw(this.layer.call(e,t)),[]]),e=bw(e),[],!1,null,null,!1,!0)[1]))}};PS.className="TimeDistributed",Qc.registerClass(PS);var BS=class extends zS{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=$v(n),t.goBackwards=!0!==t.goBackwards;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=$v(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=void 0===e.mergeMode?"concat":e.mergeMode,function(e){ex(cx,"BidirectionalMergeMode",e)}(this.mergeMode),e.weights)throw new Lb("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,null!=this.forwardLayer&&(this.forwardLayer.trainable=e),null!=this.backwardLayer&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t,n,r,a=this.forwardLayer.computeOutputShape(e);return Array.isArray(a)&&Array.isArray(a[0])||(a=[a]),this.returnState&&(r=a.slice(1)),t=a[0],"concat"===this.mergeMode?(t[t.length-1]*=2,n=[t]):n=null==this.mergeMode?[t,t.slice()]:[t],this.returnState?null==this.mergeMode?n.concat(r).concat(r.slice()):[t].concat(r).concat(r.slice()):Ub(n)}apply(e,t){let n=null==t?null:t.initialState,r=null==t?null:t.constants;null==t&&(t={});let a=FI(e,n,r,this.numConstants);if(e=a.inputs,n=a.initialState,r=a.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(null==n||0===n.length)&&null==r)return super.apply(e,t);let s=[],i=[];if(null!=n){let e=n.length;if(e%2>0)throw new Ob("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let r=n.map((e=>new Nw({shape:e.shape})));this.forwardLayer.stateSpec=r.slice(0,e/2),this.backwardLayer.stateSpec=r.slice(e/2),i.push(...r)}if(null!=r)throw new Lb("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof Tw;for(let e of s)if(e instanceof Tw!==o)throw new Ob("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let n=[e].concat(s),r=this.inputSpec.concat(i),a=this.inputSpec;this.inputSpec=r;let o=super.apply(n,t);return this.inputSpec=a,o}return super.apply(e,t)}call(e,t){return Ci((()=>{let n,r,a,s,i=t.initialState;if(null==i)n=this.forwardLayer.call(e,t),r=this.backwardLayer.call(e,t);else{let a=i.slice(0,i.length/2),s=i.slice(i.length/2);n=this.forwardLayer.call(e,Object.assign(t,{initialState:a})),r=this.backwardLayer.call(e,Object.assign(t,{initialState:s}))}return this.returnState&&(Array.isArray(n)&&(a=n.slice(1).concat(r.slice(1))),n=n[0],r=r[0]),this.returnSequences&&(r=Fp(r,1)),"concat"===this.mergeMode?s=Lx([n,r]):"sum"===this.mergeMode?s=Go(n,r):"ave"===this.mergeMode?s=qo(.5,Go(n,r)):"mul"===this.mergeMode?s=qo(n,r):null==this.mergeMode&&(s=[n,r]),this.returnState?null==this.mergeMode?s.c
2oncat(a):[s].concat(a):s}))}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){wx(this.forwardLayer.name,(()=>{this.forwardLayer.build(e)})),wx(this.backwardLayer.name,(()=>{this.backwardLayer.build(e)})),this.built=!0}computeMask(e,t){let n;if(Array.isArray(t)&&(t=t[0]),n=this.returnSequences?null==this.mergeMode?[t,t]:t:null==this.mergeMode?[null,null]:null,this.returnState){let e=this.forwardLayer.states.map((e=>null));return Array.isArray(n)?n.concat(e).concat(e):[n].concat(e).concat(e)}return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),null!=this.forwardLayer&&this.forwardLayer.setFastWeightInitDuringBuild(e),null!=this.backwardLayer&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=$v(t.layer);if(delete t.layer,null!=t.numConstants)throw new Lb("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};BS.className="Bidirectional",Qc.registerClass(BS);var WS=class extends $w{constructor(e){super(e),this.scale=e.scale,e.offset?this.offset=e.offset:this.offset=0}getConfig(){let e={scale:this.scale,offset:this.offset},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return Ci((()=>("float32"!==(e=bw(e)).dtype&&(e=Rx(e,"float32")),Go(qo(e,this.scale),this.offset))))}};WS.className="Rescaling",Qc.registerClass(WS);var{resizeBilinear:VS,cropAndResize:US}=Kc,GS=class extends $w{constructor(e){super(e),this.height=e.height,this.width=e.width}centerCrop(e,t,n,r,a,s,i,o){return Ci((()=>{let l,u=!1,d=[t/s,n/i,(r+t)/s,(a+n)/i],p=[];3===e.rank?(u=!0,l=ah([e])):l=e;for(let e=0;e<l.shape[0];e++)p.push(d);let h=yi(p,[p.length,4]),c=Cp(0,p.length,1,"int32"),f=US(l,h,c,[r,a],"nearest");return Rx(u?bw(Ih(f)):f,o)}))}upsize(e,t,n,r){return Ci((()=>Rx(VS(e,[t,n]),r)))}call(e,t){return Ci((()=>{let t=bw(e),n=t.dtype,r=t.shape,a=r[r.length-3],s=r[r.length-2],i=0;a!==this.height&&(i=Math.floor((a-this.height)/2));let o=0;return s!==this.width&&(o=Math.floor((s-this.width)/2),0===o&&(o=1)),i>=0&&o>=0?this.centerCrop(t,i,o,this.height,this.width,a,s,n):this.upsize(e,this.height,this.width,n)}))}getConfig(){let e={height:this.height,width:this.width},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){let t=(e=xw(e)).length-3,n=e.length-2;return e[t]=this.height,e[n]=this.width,e}};GS.className="CenterCrop",Qc.registerClass(GS);var HS=class extends $w{constructor(e){super(e),this.numTokens=e.numTokens,e.outputMode?this.outputMode=e.outputMode:this.outputMode="multiHot"}getConfig(){let e={numTokens:this.numTokens,outputMode:this.outputMode},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){return null==(e=xw(e))?[this.numTokens]:"oneHot"===this.outputMode&&1!==e[e.length-1]?(e.push(this.numTokens),e):(e[e.length-1]=this.numTokens,e)}call(e,t){return Ci((()=>{let n;if("int32"!==(e=bw(e)).dtype&&(e=Rx(e,"int32")),void 0!==t.countWeights){if("count"!==this.outputMode)throw new Ob(`countWeights is not used when outputMode !== count.\n              Received countWeights=${t.countWeights}`);n=bw(t.countWeights)}let r=Au(e),a=Ru(e),s=Ku(this.numTokens,r).bufferSync().get(0),i=Xu(a,0).bufferSync().get(0);if(!s||!i)throw new Ob(`Input values must be between 0 < values <= numTokens with numTokens=${this.numTokens}`);return function(e,t,n,r){let a=bw(e);if("int32"!==a.dtype&&(a=Rx(a,"int32")),"int"===t)return a;let s=a.shape;if(0===a.rank&&(a=Vu(a,-1)),"oneHot"===t&&1!==a.shape[a.shape.length-1]&&(a=Vu(a,-1)),a.rank>2)throw new Ob(`When outputMode is not int, maximum output rank is 2 Received outputMode ${t} and input shape ${s} which would result in output rank ${a.rank}.`);let i,o=["multiHot","oneHot"].includes(t),l=a;if(i=su(l,void 0!==r&&"count"===t?r:[],n,o),"tfIdf"!==t)return i;if(r)return qo(i,r);throw new Ob("When outputMode is 'tfIdf', weights must be provided.")}(e,this.outputMode,this.numTokens,n)}))}};
2HS.className="CategoryEncoding",Qc.registerClass(HS);var jS=new Set(["bilinear","nearest"]),qS=class extends $w{constructor(e){if(super(e),this.height=e.height,this.width=e.width,e.interpolation){if(!jS.has(e.interpolation))throw new Ob(`Invalid interpolation parameter: ${e.interpolation} is not implemented`);this.interpolation=e.interpolation}else this.interpolation="bilinear";this.cropToAspectRatio=!!e.cropToAspectRatio}computeOutputShape(e){let t=(e=xw(e))[2];return[this.height,this.width,t]}getConfig(){let e={height:this.height,width:this.width,interpolation:this.interpolation,cropToAspectRatio:this.cropToAspectRatio},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return Ci((()=>{let t=[this.height,this.width];if("bilinear"===this.interpolation)return Kc.resizeBilinear(e,t,!this.cropToAspectRatio);if("nearest"===this.interpolation)return Kc.resizeNearestNeighbor(e,t,!this.cropToAspectRatio);throw new Error(`Interpolation is ${this.interpolation} but only ${[...jS]} are supported`)}))}};qS.className="Resizing",Qc.registerClass(qS);var KS=class{constructor(e){this.seed=e}next(){if(void 0!==this.seed)return this.seed++}};KS.className="RandomSeed";var XS=class extends $w{constructor(e){super(e),this.randomGenerator=new KS(e.seed)}getConfig(){let e={seed:this.randomGenerator.seed},t=super.getConfig();return Object.assign(e,t),e}};XS.className="BaseRandomLayer";var YS=new Set(["bilinear","nearest"]),ZS=class extends XS{constructor(e){super(e);let{factor:t,interpolation:n="bilinear"}=e;if(this.factor=t,Array.isArray(this.factor)&&2===this.factor.length)this.widthLower=this.factor[0],this.widthUpper=this.factor[1];else{if(Array.isArray(this.factor)||!(this.factor>0))throw new Ob(`Invalid factor: ${this.factor}. Must be positive number or tuple of 2 numbers`);this.widthLower=-this.factor,this.widthUpper=this.factor}if(this.widthLower<-1||this.widthUpper<-1)throw new Ob(`factor must have values larger than -1. Got: ${this.factor}`);if(this.widthUpper<this.widthLower)throw new Ob(`factor cannot have upper bound less than lower bound.\n        Got upper bound: ${this.widthUpper}.\n        Got lower bound: ${this.widthLower}\n      `);if(n){if(!YS.has(n))throw new Ob(`Invalid interpolation parameter: ${n} is not implemented`);this.interpolation=n}}getConfig(){let e={factor:this.factor,interpolation:this.interpolation},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){let t=(e=xw(e))[2];return[this.imgHeight,-1,t]}call(e,t){return Ci((()=>{let t=bw(e);this.imgHeight=t.shape[t.shape.length-3];let n=t.shape[t.shape.length-2];this.widthFactor=Tp([1],1+this.widthLower,1+this.widthUpper,"float32",this.randomGenerator.next());let r=this.widthFactor.dataSync()[0]*n;r=Math.round(r);let a=[this.imgHeight,r];switch(this.interpolation){case"bilinear":return Kc.resizeBilinear(e,a);case"nearest":return Kc.resizeNearestNeighbor(e,a);default:throw new Error(`Interpolation is ${this.interpolation}\n          but only ${[...YS]} are supported`)}}))}};function JS(e){return new Rw(e)}function QS(e){return new hI(e)}function eN(e){return new uI(e)}function tN(e){return new dI(e)}function nN(e){return new pI(e)}function rN(e){return new fI(e)}function aN(e){return new cI(e)}function sN(e){return new EI(e)}function iN(e){return new II(e)}function oN(e){return new NI(e)}function lN(e){return new SI(e)}function uN(e){return new TI(e)}function dN(e){return new CI(e)}function pN(e){return new $I(e)}function hN(e){return new AI(e)}function cN(e){return new RI(e)}function fN(e){return new JI(e)}function mN(e){return new YI(e)}function gN(e){return new KI(e)}function yN(e){return new XI(e)}function bN(e){return new ZI(e)}function xN(e){return new QI(e)}function wN(e){return new eS(e)}function vN(e){return new tS(e)}function kN(e){return new rS(e)}function IN(e){return new sS(e)}function SN(e){return new oS(e)}function NN(e){return new dS(e)}function TN(e){return new lS(e)}function _N(e){return new uS(e)}function CN(e){return new iS(e)}function EN(e){return new hS(e)}function $N(e){return new bS(e)}function AN(e){return new xS(e)}function RN(e){return new wS(e)}function FN(e){return new NS(e)}function DN(e){return FN(e)}function MN(e){return FN(e)}function ON(e){return new CS(e)}function LN(e){return ON(e)}function zN(e){return ON(e)}function PN(e){return new AS(e)}function BN(e){return PN(e)}function WN(e){return PN(e)}function VN(e){return new FS(e)}function UN(e){return new OS(e)}function GN(e){return new DS(e)}function HN(e){return new LS(e)}function jN(e){return new SS(e)}function qN(e){return new _S(e)}function KN(e){return new $S(e)}function XN(e){return new BI(e)}function YN(e){return new PI(e)}function ZN(e){return new VI(e)}function JN(e){return new WI(e)}function QN(e){return new zI(e)}function eT(e){return new LI(e)}function tT(e){return new qI(e)}function nT(e){return new jI(e)}function rT(e){return new MI(e)}function aT(e){return new UI(e)}function sT(e){return new BS(e)}function iT(e){return new PS(e)}
2ZS.className="RandomWidth",Qc.registerClass(ZS);var oT=GN,lT=HN,uT=jN,dT=qN;function pT(e){return new cS(e)}function hT(e){return new fS(e)}function cT(e){return new mS(e)}function fT(e){return new nS(e)}function mT(e){return new WS(e)}function gT(e){return new GS(e)}function yT(e){return new qS(e)}function bT(e){return new HS(e)}function xT(e){return new ZS(e)}var wT={};function vT(e,t){return Wv(e,t)}function kT(e,t){return jv(e,t)}function IT(e,t){return qv(e,t)}function ST(e,t){return Vv(e,t)}function NT(e,t){return Kv(e,t)}function TT(e,t){return Gv(e,t)}function _T(e,t){return Hv(e,t)}function CT(e,t){return zv(e,t)}function ET(e,t){return Fv(e,t)}function $T(e,t){return Dv(e,t)}function AT(e,t){return Dv(e,t)}function RT(e,t){return Dv(e,t)}function FT(e,t){return Rv(e,t)}function DT(e,t){return Rv(e,t)}function MT(e,t){return Rv(e,t)}function OT(e,t){return function(e,t){return Ci((()=>{let n=e.sub(t).square().sum(),r=e.sub(e.mean()).square().sum();return Du(1).sub(n.div(r))}))}(e,t)}B(wT,{MAPE:()=>AT,MSE:()=>DT,binaryAccuracy:()=>vT,binaryCrossentropy:()=>kT,categoricalAccuracy:()=>ST,categoricalCrossentropy:()=>NT,cosineProximity:()=>CT,mape:()=>RT,meanAbsoluteError:()=>ET,meanAbsolutePercentageError:()=>$T,meanSquaredError:()=>FT,mse:()=>MT,precision:()=>TT,r2Score:()=>OT,recall:()=>_T,sparseCategoricalAccuracy:()=>IT});var LT={};B(LT,{modelFromJSON:()=>Ek});var zT={};function PT(e){return new aI(e)}function BT(e){return function(e){return nI(e),new aI({l1:null!=e?e.l1:null,l2:0})}(e)}function WT(e){return function(e){return nI(e),new aI({l2:null!=e?e.l2:null,l1:0})}(e)}B(zT,{l1:()=>BT,l1l2:()=>PT,l2:()=>WT});var VT=class extends kv{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof _k))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function UT(e,t){return e<t}function GT(e,t){return e>t}var HT=class extends VT{constructor(e){if(super(),null==e&&(e={}),e.restoreBestWeights)throw new Lb("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,-1===["auto","min","max"].indexOf(this.mode)&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),"min"===this.mode?this.monitorFunc=UT:"max"===this.mode||-1!==this.monitor.indexOf("acc")?this.monitorFunc=GT:this.monitorFunc=UT,this.monitorFunc===UT&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,null!=this.baseline?this.best=this.baseline:this.best=this.monitorFunc===UT?1/0:-1/0}async onEpochEnd(e,t){await wv(t);let n=this.getMonitorValue(t);null!=n&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){null==e&&(e={});let t=e[this.monitor];return null==t&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};var jT,qT,KT={earlyStopping:function(e){return new HT(e)}};ut().registerFlag("KEEP_INTERMEDIATE_TENSORS",(()=>!1),(e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")})),function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=2
21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"}(jT||(jT={})),function(e){let t;var n;(n=t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"}(qT||(qT={}));var XT={};function YT(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};XT[e]=n}function ZT(e){return XT[e]}function JT(e){delete XT[e]}function QT(e,t,n,r,a){let s=t.inputParams[e];if(s&&void 0!==s.inputIndexStart){let e=s.inputIndexStart,i=0===s.inputIndexEnd?void 0:void 0===s.inputIndexEnd?e+1:s.inputIndexEnd,o=e<0?t.inputNames.length+e:e;if("tensor"===s.type)return e_(t.inputNames[o],n,r,a);if("tensors"===s.type){let s=t.inputs.slice(e,i);return t.inputNames.slice(e,i).filter(((e,t)=>{var n;return"NoOp"!==(null===(n=s[t])||void 0===n?void 0:n.op)})).map((e=>e_(e,n,r,a)))}let l=e_(t.inputNames[o],n,r,a),u=l.dataSync();return"number"===s.type?u[0]:ja.toNestedArray(l.shape,u)}let i=t.attrParams[e];return i&&i.value}function e_(e,t,n,r){let[a,s]=a_(e,n);if(null!=r){let e=r.getHashTableHandleByName(a);if(null!=e)return e}let i=n.currentContextIds.find((e=>!!t[r_(a,e)]));return void 0!==i?t[r_(a,i)][s]:void 0}function t_(e,t,n){return t[r_(e,n.currentContextId)]}function n_(e,t){let[n,r,a]=a_(e,t);return[r_(n,t&&t.currentContextId),r,a]}function r_(e,t){return t?`${e}-${t}`:e}function a_(e,t){if(""===e)return["",0,void 0];let n=null!=t&&null!=t.parseNodeNameCache;if(n){let n=t.parseNodeNameCache.get(e);if(null!=n)return n}let r,a=e.split(":");if(1===a.length)r=[e,0,void 0];else{let e=a[0],t=3===a.length?a[1]:void 0;r=[e,Number(a[a.length-1]),t]}return n&&t.parseNodeNameCache.set(e,r),r}function s_(e,t,n){let r=QT("pad",e,t,n);if("explicit"===r){r=QT("explicitPaddings",e,t,n);let a=[[0,0],[0,0],[0,0],[0,0]];for(let e=0;e<4;e++)a[e][0]=r[2*e],a[e][1]=r[2*e+1];return a}return r}function i_(e){return e.kept?e:Vo(e)}var o_={};B(o_,{json:()=>l_});var l_=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}
2]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],u_={};B(u_,{json:()=>d_});var d_=
vendor: 6,808 bytes, line 2
2[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}]
2,p_={};B(p_,{json:()=>h_});var h_=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]}
2,{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],c_={};B(c_,{json:()=>f_});var f_=
vendor: 6,566 bytes, line 2
2[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}]
vendor: 8,426 bytes, line 2
2,m_={};B(m_,{json:()=>g_});var g_=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],y_={};B(y_,{json:()=>b_});var b_=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],x_={};B(x_,{json:()=>w_});var w_=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],v_={};B(v_,{json:()=>k_});var k_=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],I_={};B(I_,{json:()=>S_});var S_=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}
2],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],N_={};B(N_,{json:()=>T_});var T_=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],__={};B(__,{json:()=>C_});var C_=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}
2,{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],E_={};B(E_,{json:()=>$_});var $_=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],A_={};B(A_,{json:()=>R_});var R_=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}
vendor: 5,153 bytes, line 2
2]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]}],F_={};B(F_,{json:()=>D_});var D_=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],M_={};B(M_,{json:()=>O_});var O_=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}
2]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],L_={};B(L_,{json:()=>z_});var z_=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],P_={};B(P_,{json:()=>B_});var B_=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],W_={};B(W_,{json:()=>V_});var V_=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],U_={};B(U_,{json:()=>G_});var G_=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"EnsureShape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],H_=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[].concat(...[o_,u_,p_,c_,m_,y_,x_,v_,I_,N_,__,E_,A_,F_,M_,L_,P_,W_,U_].map((e=>e.json)));this.opMappers=e.reduce(((e,t)=>(e[t.tfOpName]=t,e)),{})}transformGraph(e,t={}){let n=e.node,r=[],a=[],s=[],i=n.reduce(((e,t)=>(e[t.name]=this.mapNode(t),t.op.startsWith("Placeholder")?r.push(e[t.name]):"Const"===t.op?a.push(e[t.name]):(null==t.input||0===t.input.length)&&s.push(e[t.name]),e)),{}),o=[],l=[],u={},d={};null!=t&&(u=this.mapSignatureEntries(t.inputs),d=this.mapSignatureEntries(t.outputs));let p=Object.keys(i);p.forEach((e=>{let t=i[e];
2t.inputNames.forEach(((e,n)=>{let[r,,a]=n_(e),s=i[r];if(null!=s.outputs){let e=s.outputs.indexOf(a);if(-1!==e){let a=`${r}:${e}`;t.inputNames[n]=a}}t.inputs.push(s),s.children.push(t)}))})),0===Object.keys(d).length?p.forEach((e=>{let t=i[e];0===t.children.length&&l.push(t)})):Object.keys(d).forEach((e=>{let[t]=n_(e),n=i[t];null!=n&&(n.signatureKey=d[e],l.push(n))})),Object.keys(u).length>0?Object.keys(u).forEach((e=>{let[t]=n_(e),n=i[t];n&&(n.signatureKey=u[e],o.push(n))})):o=r;let h={};null!=e.library&&null!=e.library.function&&(h=e.library.function.reduce(((e,t)=>(e[t.signature.name]=this.mapFunction(t),e)),{}));let c={nodes:i,inputs:o,outputs:l,weights:a,placeholders:r,signature:t,functions:h};return s.length>0&&(c.initNodes=s),c}mapSignatureEntries(e){return Object.keys(e||{}).reduce(((t,n)=>(t[e[n].name]=n,t)),{})}mapNode(e){let t=ZT(e.op)||this.opMappers[e.op]||{};null==e.attr&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map((e=>e.startsWith("^")?e.slice(1):e)),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return null!=t.inputs&&(n.inputParams=t.inputs.reduce(((e,t)=>(e[t.name]={type:t.type,inputIndexStart:t.start,inputIndexEnd:t.end},e)),{})),null!=t.attrs&&(n.attrParams=t.attrs.reduce(((t,n)=>{let r,a=n.type;switch(n.type){case"string":r=q_(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=q_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"string[]":r=rC(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=rC(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"number":r=X_(e.attr,n.tfName,n.defaultValue||0),void 0===r&&n.tfDeprecatedName&&(r=X_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"number[]":r=nC(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=nC(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool":r=K_(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=K_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"bool[]":r=sC(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=sC(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape":r=tC(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=tC(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"shape[]":r=aC(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=aC(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype":r=J_(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=J_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"dtype[]":r=Q_(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=Q_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"func":r=Z_(e.attr,n.tfName,n.defaultValue),void 0===r&&n.tfDeprecatedName&&(r=Z_(e.attr,n.tfDeprecatedName,n.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${n.type} for op: ${e.op}`)}return t[n.name]={value:r,type:a},t}),{})),n}mapFunction(e){let t=e.nodeDef,n=[],r={};null!=t&&(r=t.reduce(((e,t)=>(e[t.name]=this.mapNode(t),"Const"===t.op&&n.push(e[t.name]),e)),{}));let a=[],s=[];e.signature.inputArg.forEach((e=>{let[t]=n_(e.name),n={name:t,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:Y_(e.type),type:"dtype"}},children:[]};n.signatureKey=e.name,a.push(n),r[t]=n})),Object.keys(r).forEach((e=>{let t=r[e];t.inputNames.forEach(((e,n)=>{let[a,,s]=n_(e),i=r[a];if(null!=i.outputs){let e=i.outputs.indexOf(s);if(-1!==e){let r=`${a}:${e}`;t.inputNames[n]=r}}t.inputs.push(i),i.children.push(t)}))}));let i=e.ret;e.signature.outputArg.forEach((e=>{let[t,n]=n_(i[e.name]),a=r[t];null!=a&&(a.defaultOutput=n,s.push(a))}));let o=this.mapArgsToSignature(e);return{nodes:r,inputs:a,outputs:s,weights:n,placeholders:[],signature:o}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce(((e,t)=>(e[t.name]=this.mapArgToTensorInfo(t),e)),{}),outputs:e.signature.outputArg.reduce(((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t)),{})}}mapArgToTensorInfo(e,t){let n=e.name;return null!=t&&(n=t[n]),{name:n,dtype:e.type}}};function j_(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):function(e){let t=ut().global;if(void 0!==t.atob)return t.atob(e);if(void 0!==E)return new E(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}(e);return t?n:n.toLowerCase()}function q_(e,t,n,r=!1){let a=e[t];return null!=a?j_(a.s,r):n}function K_(e,t,n){let r=e[t];return r?r.b:n}function X_(e,t,n){let r=e[t]||{},a=null!=r.i?r.i:null!=r.f?r.f:n;return"number"==typeof a?a:parseInt(a,10)}function Y_(e){switch("string"==typeof e&&(e=jT[e]),e){case jT.DT_FLOAT:case jT.DT_HALF:return"float32";case jT.DT_INT32:case jT.DT_INT64:case jT.DT_INT8:case jT.DT_UINT8:return"int32";case jT.DT_BOOL:return"bool";case jT.DT_DOUBLE:return"float32";case jT.DT_STRING:return"string";case jT.DT_COMPLEX64:case jT.DT_COMPLEX128:return"complex64";default:return null}}function Z_(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function J_(e,t,n){let r=e[t];return r&&r.type?Y_(r.type):n}function Q_(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map((e=>Y_(e))):n}function eC(e){if(!e.unknownRank)return null!=e.dim?e.dim.map((e=>"number"==typeof e.size?e.size:parseInt(e.size,10))):[]}
2function tC(e,t,n){let r=e[t];return r&&r.shape?eC(r.shape):n}function nC(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map((e=>"number"==typeof e?e:parseInt(e,10))):n}function rC(e,t,n,r=!1){let a=e[t];return a&&a.list&&a.list.s?a.list.s.map((e=>j_(e,r))):n}function aC(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map((e=>eC(e))):n}function sC(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var iC=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map((e=>this.getInput(e))),null!=e.rawAttrs&&(this.attrs=Object.keys(e.rawAttrs).reduce(((e,t)=>(e[t]=this.getAttr(t),e)),{}))}getInput(e){return e_(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(null!=n.tensor)return e_(e,this.tensorMap,this.context);if(null!=n.i||null!=n.f)return X_(this.node.rawAttrs,e,t);if(null!=n.s)return q_(this.node.rawAttrs,e,t);if(null!=n.b)return K_(this.node.rawAttrs,e,t);if(null!=n.shape)return tC(this.node.rawAttrs,e,t);if(null!=n.type)return J_(this.node.rawAttrs,e,t);if(null!=n.list){if(null!=n.list.i||null!=n.list.f)return nC(this.node.rawAttrs,e,t);if(null!=n.list.s)return rC(this.node.rawAttrs,e,t);if(null!=n.list.shape)return aC(this.node.rawAttrs,e,t);if(null!=n.list.b)return sC(this.node.rawAttrs,e,t);if(null!=n.list.type)return Q_(this.node.rawAttrs,e,t)}return t}},oC={};B(oC,{OP_SCOPE_SUFFIX:()=>ci,abs:()=>Ko,acos:()=>Xo,acosh:()=>Yo,add:()=>Go,addN:()=>Zo,all:()=>Jo,any:()=>Qo,argMax:()=>el,argMin:()=>tl,asin:()=>nl,asinh:()=>rl,atan:()=>al,atan2:()=>sl,atanh:()=>il,avgPool:()=>Il,avgPool3d:()=>Sl,basicLSTMCell:()=>$l,batchNorm:()=>Fl,batchNorm2d:()=>Dl,batchNorm3d:()=>Ml,batchNorm4d:()=>Ol,batchToSpaceND:()=>Al,bincount:()=>Ll,bitwiseAnd:()=>zl,booleanMaskAsync:()=>Ch,broadcastArgs:()=>Pl,broadcastTo:()=>Bl,buffer:()=>Bo,cast:()=>Wo,ceil:()=>Wl,clipByValue:()=>Ul,clone:()=>Vo,complex:()=>mi,concat:()=>Nl,concat1d:()=>Gl,concat2d:()=>Hl,concat3d:()=>jl,concat4d:()=>ql,conv1d:()=>Xl,conv2d:()=>Kl,conv2dTranspose:()=>Zl,conv3d:()=>Jl,conv3dTranspose:()=>eu,cos:()=>tu,cosh:()=>nu,cosineWindow:()=>Oh,cumprod:()=>ru,cumsum:()=>au,denseBincount:()=>su,depthToSpace:()=>iu,depthwiseConv2d:()=>ou,diag:()=>lu,dilation2d:()=>uu,div:()=>jo,divNoNan:()=>yu,dot:()=>bu,dropout:()=>Dh,einsum:()=>xu,elu:()=>wu,enclosingPowerOfTwo:()=>Mh,ensureShape:()=>vu,equal:()=>fu,erf:()=>ku,euclideanNorm:()=>Bu,exp:()=>Wu,expandDims:()=>Vu,expm1:()=>Uu,eye:()=>Hu,fft:()=>Zp,fill:()=>Vl,floor:()=>ju,floorDiv:()=>Ho,fused:()=>zh,gather:()=>qu,gatherND:()=>Fh,greater:()=>Ku,greaterEqual:()=>Xu,ifft:()=>Jp,imag:()=>Yu,image:()=>Kc,inTopKAsync:()=>Lh,irfft:()=>Qp,isFinite:()=>Zu,isInf:()=>Ju,isNaN:()=>Qu,leakyRelu:()=>ed,less:()=>td,lessEqual:()=>nd,linalg:()=>Xc,linspace:()=>rd,localResponseNormalization:()=>ad,log:()=>sd,log1p:()=>id,logSigmoid:()=>gd,logSoftmax:()=>bd,logSumExp:()=>xd,logicalAnd:()=>wd,logicalNot:()=>vd,logicalOr:()=>kd,logicalXor:()=>Id,losses:()=>Yc,lowerBound:()=>Td,matMul:()=>Tl,max:()=>Au,maxPool:()=>_d,maxPool3d:()=>Cd,maxPoolWithArgmax:()=>Ed,maximum:()=>$d,mean:()=>Ad,meshgrid:()=>Dd,min:()=>Ru,minimum:()=>Md,mirrorPad:()=>Od,mod:()=>Ld,moments:()=>zd,movingAverage:()=>$h,mul:()=>qo,multiRNNCell:()=>Pd,multinomial:()=>Bd,neg:()=>fd,norm:()=>Pu,notEqual:()=>Wd,oneHot:()=>Vd,ones:()=>Fd,onesLike:()=>Ud,op:()=>fi,outerProduct:()=>Gd,pad:()=>Hd,pad1d:()=>jd,pad2d:()=>qd,pad3d:()=>Kd,pad4d:()=>Xd,pool:()=>Zd,pow:()=>Fu,prelu:()=>Jd,print:()=>Uo,prod:()=>Qd,raggedGather:()=>ep,raggedRange:()=>tp,raggedTensorToTensor:()=>np,rand:()=>rp,randomGamma:()=>Ip,randomNormal:()=>Sp,randomStandardNormal:()=>Np,randomUniform:()=>Tp,randomUniformInt:()=>_p,range:()=>Cp,real:()=>Ep,reciprocal:()=>$p,relu:()=>Ap,relu6:()=>Rp,reshape:()=>kl,reverse:()=>Fp,reverse1d:()=>Dp,reverse2d:()=>Mp,reverse3d:()=>Op,reverse4d:()=>Lp,rfft:()=>th,round:()=>zp,rsqrt:()=>Pp,scalar:()=>Du,scatterND:()=>Ah,searchSorted:()=>Nd,selu:()=>Bp,separableConv2d:()=>Wp,setdiff1dAsync:()=>Vp,sigmoid:()=>_l,sign:()=>Up,signal:()=>qc,sin:()=>Gp,sinh:()=>Hp,slice:()=>Cl,slice1d:()=>jp,slice2d:()=>qp,slice3d:()=>Kp,slice4d:()=>Xp,softmax:()=>Yp,softplus:()=>md,spaceToBatchND:()=>Yd,sparse:()=>Zc,sparseToDense:()=>Rh,spectral:()=>jc,split:()=>eh,sqrt:()=>Mu,square:()=>Ou,squaredDifference:()=>nh,squeeze:()=>rh,stack:()=>ah,step:()=>sh,stridedSlice:()=>ih,string:()=>Jc,sub:()=>yd,sum:()=>Lu,tan:()=>oh,tanh:()=>El,tensor:()=>yi,tensor1d:()=>lh,tensor2d:()=>uh,tensor3d:()=>dh,tensor4d:()=>ph,tensor5d:()=>hh,tensor6d:()=>
2ch,tensorScatterUpdate:()=>bh,tile:()=>Gu,topk:()=>xh,transpose:()=>Eh,truncatedNormal:()=>wh,unique:()=>vh,unsortedSegmentSum:()=>kh,unstack:()=>Ih,upperBound:()=>Sh,variable:()=>Nh,where:()=>mu,whereAsync:()=>_h,zeros:()=>Rd,zerosLike:()=>gu});function lC(e,t,n=""){if("number"!=typeof e&&"number"!=typeof t){ja.assert(e.length===t.length,(()=>n+` Shapes ${e} and ${t} must match`));for(let r=0;r<e.length;r++){let a=e[r],s=t[r];ja.assert(a<0||s<0||a===s,(()=>n+` Shapes ${e} and ${t} must match`))}}}function uC(e){return!("number"==typeof e||e.some((e=>e<0)))}function dC(e,t,n){let r=pC(e,n),a=!uC(r);if(a&&0===t.length)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(a&&t.forEach((e=>{r=pC(e.shape,r)})),!uC(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function pC(e,t){if("number"==typeof e)return t;if("number"==typeof t)return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let r=0;r<e.length;++r){let a=e[r],s=t[r];if(a>=0&&s>=0&&a!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=a>=0?a:s}return n}var hC=class{constructor(e,t,n,r,a,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=a,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=Du(0),$i(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach((t=>{(null==e||!e.has(t.tensor.id))&&t.tensor.dispose()})),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map((e=>this.read(e)))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},\n          because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(0===this.size()&&(null==this.elementShape||0===this.elementShape.length)&&(this.elementShape=t.shape),lC(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,$i(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach(((e,n)=>this.write(e,t[n])))}gather(e,t){if(t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let t=0;t<this.size();t++)e.push(t)}if(0===e.length)return yi([],[0].concat(this.elementShape));let n=this.readMany(e);return lC(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),ah(n,0)}concat(e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(0===this.size())return yi([],[0].concat(this.elementShape));let t=[];for(let e=0;e<this.size();e++)t.push(e);let n=this.readMany(t);return lC(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),Nl(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n}  vs. ${this.maxSize})`);this.writeMany(e,Ih(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,r=e.map((e=>(n+=e,n)));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to\n          tensor.shape[0], but sum of lengths is\n        ${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let a=0===n?0:t.size/n,s=[];Ci((()=>{t=kl(t,[1,n,a]);for(let n=0;n<e.length;++n){let i=[0,0===n?0:r[n-1],0],o=[1,e[n],a];s[n]=kl(Cl(t,i,o),this.elementShape)}return s}));let i=[];for(let t=0;t<e.length;t++)i[t]=t;this.writeMany(i,s)}},cC=class e{get id(){return this.idTensor.id}constructor(e,t,n,r=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,null!=e&&e.forEach((e=>{if(n!==e.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${e.dtype}`);lC(t,e.shape,"TensorList shape mismatch: "),$i(e)})),this.idTensor=Du(0),this.maxNumElements=r,$i(this.idTensor)}copy(){return new e([...this.tensors],this.elementShape,this.elementDtype)}
2clearAndClose(e){this.tensors.forEach((t=>{(null==e||!e.has(t.id))&&t.dispose()})),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(-1!==n&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);lC(e,this.elementShape,"TensorList shape mismatch: ");let r=dC(this.elementShape,this.tensors,e);return Ci((()=>{let e=this.tensors.map((e=>kl(e,r)));return ah(e,0)}))}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(0===this.size())throw new Error("Trying to pop from an empty list.");let n=dC(this.elementShape,this.tensors,e),r=this.tensors.pop();return r.kept=!1,lC(r.shape,e,"TensorList shape mismatch: "),kl(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(lC(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");$i(e),this.tensors.push(e)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(-1!==this.maxNumElements&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let n=new e([],this.elementShape,this.elementDtype,this.maxNumElements);n.tensors.length=t;for(let e=0;e<Math.min(this.tensors.length,t);++e)n.tensors[e]=this.tensors[e];return n}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(null==this.tensors[e])throw new Error(`element at index ${e} is null.`);lC(this.tensors[e].shape,t,"TensorList shape mismatch: ");let r=dC(this.elementShape,this.tensors,t);return kl(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||-1!==this.maxNumElements&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);lC(this.elementShape,t.shape,"TensorList shape mismatch: "),$i(t),null!=this.tensors[e]&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);lC(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let r=dC(this.elementShape,this.tensors,n);return 0===e.length?yi([],[0].concat(r)):Ci((()=>{let t=e.map((e=>kl(this.tensors[e],r)));return ah(t,0)}))}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);lC(this.elementShape,t,"TensorList shape mismatch: ");let n=dC(this.elementShape,this.tensors,t);return 0===this.size()?yi([],[0].concat(n)):Ci((()=>{let e=this.tensors.map((e=>kl(e,n)));return Nl(e,0)}))}};var fC=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let r=QT("thenBranch",e,t,n),a=QT("elseBranch",e,t,n),s=QT("cond",e,t,n),i=QT("args",e,t,n);return(await s.data())[0]?n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=QT("body",e,t,n),a=QT("cond",e,t,n),s=QT("args",e,t,n),i=await n.functionMap[a].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map((e=>e.id)),l=await i[0].data();i.forEach((e=>{!e.kept&&-1===o.indexOf(e.id)&&e.dispose()}));let u=s;for(;l[0];){let e=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let t=u.map((e=>e.id));e.forEach((e=>{!e.kept&&-1===o.indexOf(e.id)&&-1===t.indexOf(e.id)&&e.dispose()}));let s=await n.functionMap[a].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);
2l=await s[0].data(),s.forEach((e=>{!e.kept&&-1===o.indexOf(e.id)&&-1===t.indexOf(e.id)&&e.dispose()}))}return u}case"LoopCond":return[i_(QT("pred",e,t,n))];case"Switch":{let r=QT("pred",e,t,n),a=QT("data",e,t,n);return a.kept||(a=i_(a)),(await r.data())[0]?[void 0,a]:[a,void 0]}case"Merge":{let r=e.inputNames.find((e=>void 0!==e_(e,t,n)));if(r){return[i_(e_(r,t,n))]}return}case"Enter":{let r=QT("frameName",e,t,n),a=QT("tensor",e,t,n);return n.enterFrame(r),[i_(a)]}case"Exit":{let r=QT("tensor",e,t,n);return n.exitFrame(),[i_(r)]}case"NextIteration":{let r=QT("tensor",e,t,n);return n.nextIteration(),[i_(r)]}case"TensorArrayV3":{let r=QT("size",e,t,n),a=QT("dtype",e,t,n),s=QT("elementShape",e,t,n),i=QT("dynamicSize",e,t,n),o=QT("clearAfterRead",e,t,n),l=QT("identicalElementShapes",e,t,n),u=QT("name",e,t,n),d=new hC(u,a,r,s,l,i,o);return n.addTensorArray(d),[d.idTensor,Du(1)]}case"TensorArrayWriteV3":{let r=QT("tensorArrayId",e,t,n),a=QT("index",e,t,n),s=QT("tensor",e,t,n),i=n.getTensorArray(r.id);return i.write(a,s),[i.idTensor]}case"TensorArrayReadV3":{let r=QT("tensorArrayId",e,t,n),a=QT("index",e,t,n);return[n.getTensorArray(r.id).read(a)]}case"TensorArrayGatherV3":{let r=QT("tensorArrayId",e,t,n),a=QT("indices",e,t,n),s=QT("dtype",e,t,n);return[n.getTensorArray(r.id).gather(a,s)]}case"TensorArrayScatterV3":{let r=QT("tensorArrayId",e,t,n),a=QT("indices",e,t,n),s=QT("tensor",e,t,n),i=n.getTensorArray(r.id);return i.scatter(a,s),[i.idTensor]}case"TensorArrayConcatV3":{let r=QT("tensorArrayId",e,t,n),a=n.getTensorArray(r.id),s=QT("dtype",e,t,n);return[a.concat(s)]}case"TensorArraySplitV3":{let r=QT("tensorArrayId",e,t,n),a=QT("tensor",e,t,n),s=QT("lengths",e,t,n),i=n.getTensorArray(r.id);return i.split(s,a),[i.idTensor]}case"TensorArraySizeV3":{let r=QT("tensorArrayId",e,t,n);return[Du(n.getTensorArray(r.id).size(),"int32")]}case"TensorArrayCloseV3":{let r=QT("tensorArrayId",e,t,n),a=n.getTensorArray(r.id);return a.clearAndClose(),[a.idTensor]}case"TensorListSetItem":{let r=QT("tensorListId",e,t,n),a=QT("index",e,t,n),s=QT("tensor",e,t,n),i=n.getTensorList(r.id);return i.setItem(a,s),[i.idTensor]}case"TensorListGetItem":{let r=QT("tensorListId",e,t,n),a=QT("index",e,t,n),s=QT("elementShape",e,t,n),i=QT("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(a,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let r=QT("indices",e,t,n),a=function(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let a=Math.max(...t);if(null!=r&&-1!==r&&a>=r)throw new Error(`Max index must be < array size (${a}  vs. ${r})`);let s=new cC([],n,e.dtype,r),i=Ih(e,0);return t.forEach(((e,t)=>{s.setItem(e,i[t])})),s}(QT("tensor",e,t,n),r,QT("elementShape",e,t,n),QT("numElements",e,t,n));return n.addTensorList(a),[a.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r,a=QT("elementShape",e,t,n),s=QT("elementDType",e,t,n);r="TensorListReserve"===e.op?"numElements":"maxNumElements";let i=QT(r,e,t,n),o=function(e,t,n,r){return new cC([],e,t,r)}(a,s,0,"TensorListReserve"===e.op?-1:i);return n.addTensorList(o),[o.idTensor]}case"TensorListGather":{let r=QT("tensorListId",e,t,n),a=QT("indices",e,t,n),s=QT("elementShape",e,t,n),i=QT("elementDType",e,t,n);return[n.getTensorList(r.id).gather(a,i,s)]}case"TensorListStack":{let r=QT("tensorListId",e,t,n),a=QT("elementShape",e,t,n),s=QT("elementDType",e,t,n),i=QT("numElements",e,t,n);return[n.getTensorList(r.id).stack(a,s,i)]}case"TensorListFromTensor":{let r=function(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);lC(e.shape.slice(1),t,"TensorList shape mismatch: ");let a=Ih(e);return new cC(a,t,r)}(QT("tensor",e,t,n),QT("elementShape",e,t,n),QT("elementDType",e,t,n));return n.addTensorList(r),[r.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let r=QT("tensorListId",e,t,n),a=n.getTensorList(r.id),s=QT("dtype",e,t,n),i=QT("elementShape",e,t,n);return[a.concat(s,i)]}case"TensorListPushBack":{let r=QT("tensorListId",e,t,n),a=QT("tensor",e,t,n),s=n.getTensorList(r.id);return s.pushBack(a),[s.idTensor]}case"TensorListPopBack":{let r=QT("tensorListId",e,t,n),a=QT("elementShape",e,t,n),s=QT("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(a,s)]}case"TensorListSplit":{let r=QT("tensor",e,t,n),a=QT("elementShape",e,t,n),s=function(e,t,n){let r=0,a=t.map((e=>(r+=e,r)));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to\n          tensor.shape[0], but sum of lengths is\n        ${r}, and tensor's shape is: ${e.shape}`);let s=pC(e.shape.slice(1),n),i=0===r?0:e.size/r,o=Ci((()=>{let n=[];e=kl(e,[1,r,i]);for(let r=0;r<t.length;++r){let o=[0,0===r?0:a[r-1],0],l=[1,t[r],i];n[r]=kl(Cl(e,o,l),s)}return e.dispose(),n})),l=new cC([],n,e.dtype,t.length);for(let e=0;e<o.length;e++)l.setItem(e,o[e]);return l}(r,QT("lengths",e,t,n),a);return n.addTensorList(s),[s.idTensor]}case"TensorListLength":{let r=QT("tensorListId",e,t,n);return[Du(n.getTensorList(r.id).size(),"int32")]}case"TensorListResize":{let r=QT("tensorListId",e,t,n),a=QT("size",e,t,n),s=n.getTensorList(r.id).resize(a);return n.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function mC(e,t,n){let[r,a]=QT("fusedOps",e,t,n),s="biasadd"===r,i=!s,o="prelu"===a,l="fusedbatchnorm"===r,u=QT("numArgs",e,t,n);if(s){if(o&&2!==u)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&1!==u)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let d=QT("strides",e,t,n),p=s_(e,t,n),h=QT("dataFormat",e,t,n).toUpperCase(),c=QT("dilations",e,t,n),[f,m]=QT("args",e,t,n);return i&&(m=f,f=void 0),{stride:d,pad:p,dataFormat:h,dilations:c,biasArg:f,preluArg:m,activationFunc:a,leakyreluAlpha:QT("leakyreluAlpha",e,t,n)}}
2function gC(e,t,n){return{boxes:QT("boxes",e,t,n),scores:QT("scores",e,t,n),maxOutputSize:QT("maxOutputSize",e,t,n),iouThreshold:QT("iouThreshold",e,t,n),scoreThreshold:QT("scoreThreshold",e,t,n),softNmsSigma:QT("softNmsSigma",e,t,n)}}var yC=class{get id(){return this.handle.id}constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=Du(0),this.tensorMap=new Map,$i(this.handle)}clearAndClose(){this.tensorMap.forEach((e=>e.dispose())),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return Du(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach((e=>e.dispose())),this.tensorMap.clear(),Ci((()=>{let e=Ih(t),r=n.length,a=e.length;ja.assert(r===a,(()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${a} elements.`));for(let t=0;t<r;t++){let r=n[t],a=e[t];$i(a),this.tensorMap.set(r,a)}return this.handle}))}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return Ci((()=>{let e=[];for(let r=0;r<n.length;r++){let a=n[r],s=this.findWithDefault(a,t);e.push(s)}return ah(e)}))}findWithDefault(e,t){let n=this.tensorMap.get(e);return null!=n?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}};function bC(e,t,n,r,a=Ci){let s=((e,t,n)=>{switch(e.category){case"arithmetic":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[r.add(QT("a",e,t,n),QT("b",e,t,n))];case"AddN":return[r.addN(QT("tensors",e,t,n))];case"FloorMod":case"Mod":return[r.mod(QT("a",e,t,n),QT("b",e,t,n))];case"Mul":return[r.mul(QT("a",e,t,n),QT("b",e,t,n))];case"RealDiv":case"Div":return[r.div(QT("a",e,t,n),QT("b",e,t,n))];case"DivNoNan":return[r.divNoNan(QT("a",e,t,n),QT("b",e,t,n))];case"FloorDiv":return[r.floorDiv(QT("a",e,t,n),QT("b",e,t,n))];case"Sub":return[r.sub(QT("a",e,t,n),QT("b",e,t,n))];case"Minimum":return[r.minimum(QT("a",e,t,n),QT("b",e,t,n))];case"Maximum":return[r.maximum(QT("a",e,t,n),QT("b",e,t,n))];case"Pow":return[r.pow(QT("a",e,t,n),QT("b",e,t,n))];case"SquaredDifference":return[r.squaredDifference(QT("a",e,t,n),QT("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"basic_math":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Abs":case"ComplexAbs":return[r.abs(QT("x",e,t,n))];case"Acos":return[r.acos(QT("x",e,t,n))];case"Acosh":return[r.acosh(QT("x",e,t,n))];case"Asin":return[r.asin(QT("x",e,t,n))];case"Asinh":return[r.asinh(QT("x",e,t,n))];case"Atan":return[r.atan(QT("x",e,t,n))];case"Atan2":return[r.atan2(QT("x",e,t,n),QT("y",e,t,n))];case"Atanh":return[r.atanh(QT("x",e,t,n))];case"Ceil":return[r.ceil(QT("x",e,t,n))];case"Complex":return[r.complex(QT("real",e,t,n),QT("imag",e,t,n))];case"Cos":return[r.cos(QT("x",e,t,n))];case"Cosh":return[r.cosh(QT("x",e,t,n))];case"Elu":return[r.elu(QT("x",e,t,n))];case"Erf":return[r.erf(QT("x",e,t,n))];case"Exp":return[r.exp(QT("x",e,t,n))];case"Expm1":return[r.expm1(QT("x",e,t,n))];case"Floor":return[r.floor(QT("x",e,t,n))];case"Log":return[r.log(QT("x",e,t,n))];case"Log1p":return[r.log1p(QT("x",e,t,n))];case"Imag":return[r.imag(QT("x",e,t,n))];case"Neg":return[r.neg(QT("x",e,t,n))];case"Reciprocal":return[r.reciprocal(QT("x",e,t,n))];case"Real":return[r.real(QT("x",e,t,n))];case"Relu":return[r.relu(QT("x",e,t,n))];case"Round":return[r.round(QT("x",e,t,n))];case"Selu":return[r.selu(QT("x",e,t,n))];case"Sigmoid":return[r.sigmoid(QT("x",e,t,n))];case"Sin":return[r.sin(QT("x",e,t,n))];case"Sign":return[r.sign(QT("x",e,t,n))];case"Sinh":return[r.sinh(QT("x",e,t,n))];case"Softplus":return[r.softplus(QT("x",e,t,n))];case"Sqrt":return[r.sqrt(QT("x",e,t,n))];case"Square":return[r.square(QT("x",e,t,n))];case"Tanh":return[r.tanh(QT("x",e,t,n))];case"Tan":return[r.tan(QT("x",e,t,n))];case"ClipByValue":return[r.clipByValue(QT("x",e,t,n),QT("clipValueMin",e,t,n),QT("clipValueMax",e,t,n))];case"Relu6":return[r.relu6(QT("x",e,t,n))];case"Rsqrt":return[r.rsqrt(e_(e.inputNames[0],t,n))];case"LeakyRelu":return[r.leakyRelu(QT("x",e,t,n),QT("alpha",e,t,n))];case"Prelu":return[r.prelu(QT("x",e,t,n),QT("alpha",e,t,n))];case"IsNan":return[r.isNaN(e_(e.inputNames[0],t,n))];case"IsInf":return[r.isInf(e_(e.inputNames[0],t,n))];case"IsFinite":return[r.isFinite(e_(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));
vendor: 18,633 bytes, line 2
2case"control":return fC(e,t,n);case"convolution":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Conv1D":{let a=QT("stride",e,t,n),s=QT("pad",e,t,n),i=QT("dataFormat",e,t,n).toUpperCase(),o=QT("dilation",e,t,n);return[r.conv1d(QT("x",e,t,n),QT("filter",e,t,n),a,s,i,o)]}case"Conv2D":{let a=QT("strides",e,t,n),s=s_(e,t,n),i=QT("dataFormat",e,t,n).toUpperCase(),o=QT("dilations",e,t,n);return[r.conv2d(QT("x",e,t,n),QT("filter",e,t,n),[a[1],a[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:a,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:p}=mC(e,t,n);return[r.fused.conv2d({x:QT("x",e,t,n),filter:QT("filter",e,t,n),strides:[a[1],a[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:p})]}case"FusedDepthwiseConv2dNative":{let{stride:a,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:d,leakyreluAlpha:p}=mC(e,t,n);return[r.fused.depthwiseConv2d({x:QT("x",e,t,n),filter:QT("filter",e,t,n),strides:[a[1],a[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:d,preluActivationWeights:u,leakyreluAlpha:p})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let a=QT("outputShape",e,t,n),s=QT("strides",e,t,n),i=s_(e,t,n);return[r.conv2dTranspose(QT("x",e,t,n),QT("filter",e,t,n),a,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let a=QT("strides",e,t,n),s=s_(e,t,n),i=QT("dilations",e,t,n),o=QT("dataFormat",e,t,n).toUpperCase();return[r.depthwiseConv2d(QT("input",e,t,n),QT("filter",e,t,n),[a[1],a[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("dataFormat",e,t,n).toUpperCase(),o=QT("dilations",e,t,n);return[r.conv3d(QT("x",e,t,n),QT("filter",e,t,n),[a[1],a[2],a[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("kernelSize",e,t,n);return[r.avgPool(QT("x",e,t,n),[i[1],i[2]],[a[1],a[2]],s)]}case"MaxPool":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("kernelSize",e,t,n);return[r.maxPool(QT("x",e,t,n),[i[1],i[2]],[a[1],a[2]],s)]}case"MaxPoolWithArgmax":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("kernelSize",e,t,n),o=QT("includeBatchInIndex",e,t,n),{result:l,indexes:u}=r.maxPoolWithArgmax(QT("x",e,t,n),[i[1],i[2]],[a[1],a[2]],s,o);return[l,u]}case"AvgPool3D":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("kernelSize",e,t,n);return[r.avgPool3d(QT("x",e,t,n),[i[1],i[2],i[3]],[a[1],a[2],a[3]],s)]}case"MaxPool3D":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("kernelSize",e,t,n);return[r.maxPool3d(QT("x",e,t,n),[i[1],i[2],i[3]],[a[1],a[2],a[3]],s)]}case"Dilation2D":{let a=QT("strides",e,t,n),s=QT("pad",e,t,n),i=QT("dilations",e,t,n),o=a[1],l=a[2],u=i[1],d=i[2];return[r.dilation2d(QT("x",e,t,n),QT("filter",e,t,n),[o,l],s,[u,d],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"creation":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Fill":{let a=QT("shape",e,t,n),s=QT("dtype",e,t,n),i=QT("value",e,t,n);return[r.fill(a,i,s)]}case"LinSpace":{let a=QT("start",e,t,n),s=QT("stop",e,t,n),i=QT("num",e,t,n);return[r.linspace(a,s,i)]}case"Multinomial":{let a=QT("logits",e,t,n),s=QT("numSamples",e,t,n),i=QT("seed",e,t,n);return[r.multinomial(a,s,i)]}case"OneHot":{let a=QT("indices",e,t,n),s=QT("depth",e,t,n),i=QT("onValue",e,t,n),o=QT("offValue",e,t,n),l=QT("dtype",e,t,n);return[r.oneHot(a,s,i,o,l)]}case"Ones":return[r.ones(QT("shape",e,t,n),QT("dtype",e,t,n))];case"OnesLike":return[r.onesLike(QT("x",e,t,n))];case"RandomStandardNormal":return[r.randomStandardNormal(QT("shape",e,t,n),QT("dtype",e,t,n),QT("seed",e,t,n))];case"RandomUniform":return[r.randomUniform(QT("shape",e,t,n),QT("minval",e,t,n),QT("maxval",e,t,n),QT("dtype",e,t,n))];case"RandomUniformInt":return[r.randomUniformInt(QT("shape",e,t,n),QT("minval",e,t,n),QT("maxval",e,t,n),QT("seed",e,t,n))];case"Range":{let a=QT("start",e,t,n),s=QT("stop",e,t,n),i=QT("step",e,t,n);return[r.range(a,s,i,QT("dtype",e,t,n))]}case"TruncatedNormal":{let a=QT("shape",e,t,n),s=QT("mean",e,t,n),i=QT("stdDev",e,t,n),o=QT("seed",e,t,n);return[r.truncatedNormal(a,s,i,QT("dtype",e,t,n),o)]}case"Zeros":return[r.zeros(QT("shape",e,t,n),QT("dtype",e,t,n))];case"ZerosLike":return[r.zerosLike(QT("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"dynamic":return(async(e,t,n,r,a=oC)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:r,scores:s,maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=gC(e,t,n),d=await a.image.nonMaxSuppressionWithScoreAsync(r,s,i,o,l,u);return[d.selectedIndices,d.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:r,scores:s,maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=gC(e,t,n),u=QT("padToMaxOutputSize",e,t,n),d=await a.image.nonMaxSuppressionPaddedAsync(r,s,i,o,l,u);return[d.selectedIndices,d.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:r,scores:s,maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=gC(e,t,n);return[await a.image.nonMaxSuppressionAsync(r,s,i,o,l)]}case"Where":{let r=a.cast(QT("condition",e,t,n),"bool"),s=[await a.whereAsync(r)];return r.dispose(),s}case"ListDiff":return a.setdiff1dAsync(QT("x",e,t,n),QT("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n);case"evaluation":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"LowerBound":{let a=QT("sortedSequence",e,t,n),s=QT("values",e,t,n);return[r.lowerBound(a,s)]}case"TopKV2":{let a=QT("x",e,t,n),s=QT("k",e,t,n),i=QT("sorted",e,t,n),o=r.topk(a,s,i);return[o.values,o.indices]}case"UpperBound":{let a=QT("sortedSequence",e,t,n),s=QT("values",e,t,n);return[r.upperBound(a,s)]}case"Unique":{let a=QT("x",e,t,n),s=r.unique(a);return[s.values,s.indices]}case"UniqueV2":{let a=QT("x",e,t,n),s=QT("axis",e,t,n),i=r.unique(a,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"image":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"ResizeBilinear":{let a=QT("images",e,t,n),s=QT("size",e,t,n),i=QT("alignCorners",e,t,n),o=QT("halfPixelCenters",e,t,n);return[r.image.resizeBilinear(a,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let a=QT("images",e,t,n),s=QT("size",e,t,n),i=QT("alignCorners",e,t,n),o=QT("halfPixelCenters",e,t,n);return[r.image.resizeNearestNeighbor(a,[s[0],s[1]],i,o)]}case"CropAndResize":{let a=QT("image",e,t,n),s=QT("boxes",e,t,n),i=QT("boxInd",e,t,n),o=QT("cropSize",e,t,n),l=QT("method",e,t,n),u=QT("extrapolationValue",e,t,n);return[r.image.cropAndResize(a,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let a=QT("images",e,t,n),s=QT("transforms",e,t,n),i=QT("outputShape",e,t,n),o=QT("fillValue",e,t,n),l=QT("interpolation",e,t,n),u=QT("fillMode",e,t,n);return[r.image.transform(a,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"graph":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let a=QT("default",e,t,n);return[e_(e.name,t,n)||a];case"Placeholder":return[e_(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":case"Snapshot":return[i_(QT("x",e,t,n))];case"IdentityN":return QT("x",e,t,n).map((e=>i_(e)));case"Shape":return[r.tensor1d(QT("x",e,t,n).shape,"int32")];case"ShapeN":return QT("x",e,t,n).map((e=>r.tensor1d(e.shape)));case"Size":return[r.scalar(QT("x",e,t,n).size,"int32")];case"Rank":return[r.scalar(QT("x",e,t,n).rank,"int32")];case"NoOp":return[r.scalar(1)];case"Print":let s=QT("x",e,t,n),i=QT("data",e,t,n),o=QT("message",e,t,n),l=QT("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(o);for(let e=0;e<i.length;e++)console.log(Array.prototype.slice.call(i[e].dataSync()).slice(0,l));return[s];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"logical":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Equal":return[r.equal(QT("a",e,t,n),QT("b",e,t,n))];case"NotEqual":return[r.notEqual(QT("a",e,t,n),QT("b",e,t,n))];case"Greater":return[r.greater(QT("a",e,t,n),QT("b",e,t,n))];case"GreaterEqual":return[r.greaterEqual(QT("a",e,t,n),QT("b",e,t,n))];case"Less":return[r.less(QT("a",e,t,n),QT("b",e,t,n))];case"LessEqual":return[r.lessEqual(QT("a",e,t,n),QT("b",e,t,n))];case"LogicalAnd":return[r.logicalAnd(QT("a",e,t,n),QT("b",e,t,n))];case"LogicalNot":return[r.logicalNot(QT("a",e,t,n))];case"LogicalOr":return[r.logicalOr(QT("a",e,t,n),QT("b",e,t,n))];case"Select":case"SelectV2":return[r.where(QT("condition",e,t,n),QT("a",e,t,n),QT("b",e,t,n))];case"BitwiseAnd":return[r.bitwiseAnd(QT("a",e,t,n),QT("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"matrices":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[r.matMul(QT("a",e,t,n),QT("b",e,t,n),QT("transposeA",e,t,n),QT("transposeB",e,t,n))];case"Einsum":return[r.einsum(QT("equation",e,t,n),...QT("tensors",e,t,n))];case"Transpose":return[r.transpose(QT("x",e,t,n),QT("perm",e,t,n))];case"_FusedMatMul":let[a,s]=QT("fusedOps",e,t,n),i="biasadd"===a,o="prelu"===s,l=QT("numArgs",e,t,n),u=QT("leakyreluAlpha",e,t,n);if(i){if(o&&2!==l)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&1!==l)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[d,p]=QT("args",e,t,n);return[r.fused.matMul({a:QT("a",e,t,n),b:QT("b",e,t,n),transposeA:QT("transposeA",e,t,n),transposeB:QT("transposeB",e,t,n),bias:d,activation:s,preluActivationWeights:p,leakyreluAlpha:u})];case"MatrixBandPart":return[r.linalg.bandPart(QT("a",e,t,n),QT("numLower",e,t,n),QT("numUpper",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"normalization":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"EuclideanNorm":return[r.euclideanNorm(QT("x",e,t,n),QT("axis",e,t,n),QT("keepDims",e,t,n))];case"FusedBatchNorm":case"FusedBatchNormV2":case"FusedBatchNormV3":return[r.batchNorm(QT("x",e,t,n),QT("mean",e,t,n),QT("variance",e,t,n),QT("offset",e,t,n),QT("scale",e,t,n),QT("epsilon",e,t,n))];case"LRN":return[r.localResponseNormalization(QT("x",e,t,n),QT("radius",e,t,n),QT("bias",e,t,n),QT("alpha",e,t,n),QT("beta",e,t,n))];case"Softmax":return[r.softmax(QT("x",e,t,n))];case"LogSoftmax":return[r.logSoftmax(QT("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"ragged":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:a,outputDenseValues:s}=r.raggedGather(QT("paramsNestedSplits",e,t,n),QT("paramsDenseValues",e,t,n),QT("indices",e,t,n),QT("outputRaggedRank",e,t,n));return a.concat(s)}case"RaggedRange":{let{rtNestedSplits:a,rtDenseValues:s}=r.raggedRange(QT("starts",e,t,n),QT("limits",e,t,n),QT("splits",e,t,n));return[a,s]}case"RaggedTensorToTensor":return[r.raggedTensorToTensor(QT("shape",e,t,n),QT("values",e,t,n),QT("defaultValue",e,t,n),QT("rowPartitionTensors",e,t,n),QT("rowPartitionTypes",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"reduction":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Max":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.max(QT("x",e,t,n),a,s)]}case"Mean":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.mean(QT("x",e,t,n),a,s)]}case"Min":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.min(QT("x",e,t,n),a,s)]}case"Sum":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.sum(QT("x",e,t,n),a,s)]}case"All":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.all(QT("x",e,t,n),a,s)]}case"Any":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.any(QT("x",e,t,n),a,s)]}case"ArgMax":{let a=QT("axis",e,t,n);return[r.argMax(QT("x",e,t,n),a)]}case"ArgMin":{let a=QT("axis",e,t,n);return[r.argMin(QT("x",e,t,n),a)]}case"Prod":{let a=QT("axis",e,t,n),s=QT("keepDims",e,t,n);return[r.prod(QT("x",e,t,n),a,s)]}case"Cumprod":{let a=QT("axis",e,t,n),s=QT("exclusive",e,t,n),i=QT("reverse",e,t,n);return[r.cumprod(QT("x",e,t,n),a,s,i)]}case"Cumsum":{let a=QT("axis",e,t,n),s=QT("exclusive",e,t,n),i=QT("reverse",e,t,n);return[r.cumsum(QT("x",e,t,n),a,s,i)]}case"Bincount":let a=QT("x",e,t,n),s=QT("weights",e,t,n),i=QT("size",e,t,n);return[r.bincount(a,s,i)];case"DenseBincount":{let a=QT("x",e,t,n),s=QT("weights",e,t,n),i=QT("size",e,t,n),o=QT("binaryOutput",e,t,n);return[r.denseBincount(a,s,i,o)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"slice_join":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"ConcatV2":case"Concat":{let a=QT("n",e,t,n),s=QT("axis",e,t,n),i=QT("tensors",e,t,n);return i=i.slice(0,a),[r.concat(i,s)]}case"Gather":{let a=QT("x",e,t,n),s=QT("indices",e,t,n);return[r.gather(a,r.cast(s,"int32"),0)]}case"GatherV2":{let a=QT("axis",e,t,n),s=QT("batchDims",e,t,n),i=QT("x",e,t,n),o=QT("indices",e,t,n);return[r.gather(i,r.cast(o,"int32"),a,s)]}case"Reverse":{let a=QT("dims",e,t,n),s=[];for(let e=0;e<a.length;e++)a[e]&&s.push(e);let i=QT("x",e,t,n);return[r.reverse(i,s)]}case"ReverseV2":{let a=QT("axis",e,t,n),s=QT("x",e,t,n);return[r.reverse(s,a)]}case"Slice":{let a=QT("begin",e,t,n),s=QT("size",e,t,n);return[r.slice(QT("x",e,t,n),a,s)]}case"StridedSlice":{let a=QT("begin",e,t,n),s=QT("end",e,t,n),i=QT("strides",e,t,n),o=QT("beginMask",e,t,n),l=QT("endMask",e,t,n),u=QT("ellipsisMask",e,t,n),d=QT("newAxisMask",e,t,n),p=QT("shrinkAxisMask",e,t,n),h=QT("x",e,t,n);return[r.stridedSlice(h,a,s,i,o,l,u,d,p)]}case"Pack":return Ci((()=>{let a=QT("axis",e,t,n),s=QT("tensors",e,t,n),i=s[0].shape,o=r.squeeze(s[0]).shape,l=s.map((e=>{let t=ja.arraysEqual(e.shape,i);if(!t&&!ja.arraysEqual(r.squeeze(e).shape,o))throw new Error("the input tensors shape does not match");return t?e:r.reshape(e,i)}));return[r.stack(l,a)]}));case"Unpack":{let a=QT("axis",e,t,n),s=QT("tensor",e,t,n);return r.unstack(s,a)}case"Tile":{let a=QT("reps",e,t,n);return[r.tile(QT("x",e,t,n),a)]}case"Split":case"SplitV":{let a=QT("axis",e,t,n),s=QT("numOrSizeSplits",e,t,n),i=QT("x",e,t,n);return r.split(i,s,a)}case"ScatterNd":{let a=QT("indices",e,t,n),s=QT("values",e,t,n),i=QT("shape",e,t,n);return[r.scatterND(a,s,i)]}case"GatherNd":{let a=QT("x",e,t,n),s=QT("indices",e,t,n);return[r.gatherND(a,s)]}case"SparseToDense":{let a=QT("sparseIndices",e,t,n),s=QT("outputShape",e,t,n),i=QT("sparseValues",e,t,n),o=QT("defaultValue",e,t,n);return[r.sparseToDense(a,i,s,i.dtype===o.dtype?o:r.cast(o,i.dtype))]}case"TensorScatterUpdate":{let a=QT("indices",e,t,n),s=QT("values",e,t,n),i=QT("tensor",e,t,n);return[r.tensorScatterUpdate(i,a,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"sparse":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:a,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=r.sparse.sparseFillEmptyRows(QT("indices",e,t,n),QT("values",e,t,n),QT("denseShape",e,t,n),QT("defaultValue",e,t,n));return[a,s,i,o]}case"SparseReshape":{let{outputIndices:a,outputShape:s}=r.sparse.sparseReshape(QT("inputIndices",e,t,n),QT("inputShape",e,t,n),QT("newShape",e,t,n));return[a,s]}case"SparseSegmentMean":return[r.sparse.sparseSegmentMean(QT("data",e,t,n),QT("indices",e,t,n),QT("segmentIds",e,t,n))];case"SparseSegmentSum":return[r.sparse.sparseSegmentSum(QT("data",e,t,n),QT("indices",e,t,n),QT("segmentIds",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"spectral":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"FFT":return[r.fft(QT("x",e,t,n))];case"IFFT":return[r.ifft(QT("x",e,t,n))];case"RFFT":return[r.rfft(QT("x",e,t,n))];case"IRFFT":return[r.irfft(QT("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"string":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"StaticRegexReplace":return[r.string.staticRegexReplace(QT("input",e,t,n),QT("pattern",e,t,n),QT("rewrite",e,t,n),QT("replaceGlobal",e,t,n))];case"StringNGrams":{let{nGrams:a,nGramsSplits:s}=r.string.stringNGrams(QT("data",e,t,n),QT("dataSplits",e,t,n),QT("separator",e,t,n),QT("nGramWidths",e,t,n),QT("leftPad",e,t,n),QT("rightPad",e,t,n),QT("padWidth",e,t,n),QT("preserveShortSequences",e,t,n));return[a,s]}case"StringSplit":{let{indices:a,values:s,shape:i}=r.string.stringSplit(QT("input",e,t,n),QT("delimiter",e,t,n),QT("skipEmpty",e,t,n));return[a,s,i]}case"StringToHashBucketFast":return[r.string.stringToHashBucketFast(QT("input",e,t,n),QT("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"transformation":return a((()=>((e,t,n,r=oC)=>{switch(e.op){case"Cast":return[r.cast(QT("x",e,t,n),QT("dtype",e,t,n))];case"ExpandDims":{let a=QT("axis",e,t,n);return[r.expandDims(QT("x",e,t,n),a)]}case"Squeeze":{let a=QT("axis",e,t,n);return[r.squeeze(QT("x",e,t,n),a)]}case"Reshape":return[r.reshape(QT("x",e,t,n),QT("shape",e,t,n))];case"EnsureShape":return[r.ensureShape(QT("x",e,t,n),QT("shape",e,t,n))];case"MirrorPad":return[r.mirrorPad(QT("x",e,t,n),QT("padding",e,t,n),QT("mode",e,t,n))];case"PadV2":case"Pad":return[r.pad(QT("x",e,t,n),QT("padding",e,t,n),QT("constantValue",e,t,n))];case"SpaceToBatchND":{let a=QT("blockShape",e,t,n),s=QT("paddings",e,t,n);return[r.spaceToBatchND(QT("x",e,t,n),a,s)]}case"BatchToSpaceND":{let a=QT("blockShape",e,t,n),s=QT("crops",e,t,n);return[r.batchToSpaceND(QT("x",e,t,n),a,s)]}case"DepthToSpace":{let a=QT("blockSize",e,t,n),s=QT("dataFormat",e,t,n).toUpperCase();return[r.depthToSpace(QT("x",e,t,n),a,s)]}case"BroadcastTo":return[r.broadcastTo(QT("x",e,t,n),QT("shape",e,t,n))];case"BroadcastArgs":return[r.broadcastArgs(QT("s0",e,t,n),QT("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n)));case"hash_table":return(async(e,t,n,r)=>{switch(e.op){case"HashTable":case"HashTableV2":{let a=r.getHashTableHandleByName(e.name);if(null!=a)return[a];{let a=QT("keyDType",e,t,n),s=QT("valueDType",e,t,n),i=new yC(a,s);return r.addHashTable(e.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let a=QT("tableHandle",e,t,n,r),s=QT("keys",e,t,n),i=QT("values",e,t,n);return[await r.getHashTableById(a.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let a=QT("tableHandle",e,t,n,r),s=QT("keys",e,t,n),i=QT("defaultValue",e,t,n);return[await r.getHashTableById(a.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let a=QT("tableHandle",e,t,n,r);return[r.getHashTableById(a.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}})(e,t,n,r);
2case"custom":let s=ZT(e.op);if(s&&s.customExecutor)return s.customExecutor(new iC(e,t,n));throw TypeError(`Custom op ${e.op} is not registered.`);default:throw TypeError(`Unknown op '${e.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return ja.isPromise(s)?s.then((e=>[].concat(e))):[].concat(s)}var xC=class{constructor(e={},t={},n={},r={},a){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.parseNodeNameCache=a,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map((e=>0===e.id&&0===e.iterationId?"":`${e.frameName}-${e.iterationId}`)).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(!(this.contexts&&this.contexts.length>1))throw new Error("Cannot exit frame, the context is empty");this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift()}nextIteration(){if(!(this.contexts&&this.contexts.length>0))throw new Error("Cannot increase frame iteration, the context is empty");{this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function wC(e,t,n,r){let a=new Set,s=[],i=null,o=null,l=new Set,u=new Set(Object.keys(e).map((e=>a_(e)[0])));r=r||[];let d=new Set(r.map((e=>a_(e.name)[0]))),p=[...t];for(;p.length>0;){let e=p.pop();if((TC(e)||_C(e)||CC(e))&&null==i&&(i=e,o=i.children.map((e=>e.name)).filter((e=>a.has(e)))),a.add(e.name),null==n[e.name]&&!u.has(e.name)&&!d.has(e.name)){if(0===e.inputs.length){s.push(e.name);continue}e.inputs.forEach((e=>{l.has(e.name)||(l.add(e.name),p.push(e))}))}}return{inputs:e,outputs:t,usedNodes:a,missingInputs:s,dynamicNode:i,syncInputs:o}}function vC(e,t){let{usedNodes:n,inputs:r}=t,a=Object.keys(r).map((e=>a_(e)[0])).map((t=>e.nodes[t])),s=e.initNodes||[],i=e=>n.has("string"==typeof e?e:e.name);function o(e){return[...new Map(e.map((e=>[e.name,e]))).values()]}let l=o([...a,...e.weights,...s]).filter(i),u=o([...l,...Object.values(e.nodes)]).filter(i),d=new Map(u.map((e=>[e.name,e]))),p={};for(let e of u){p[e.name]=p[e.name]||0;for(let t of e.children)i(t)||(p[t.name]=Number.POSITIVE_INFINITY),p[t.name]=(p[t.name]||0)+1}let h=Object.entries(p).filter((([,e])=>0===e)).map((([e])=>e)),c=[...h];for(;h.length>0;){let e=h.pop(),t=d.get(e);for(let e of t.children.filter(i))0==--p[e.name]&&(c.push(e.name),h.push(e.name))}let f=function(e,t){let n=new Map(e.map((e=>[e.name,e]))),r=t.map((e=>e.name)),a=new Set(r);for(;r.length>0;){let e=r.pop(),t=n.get(e);for(let e of t.children)!n.has(e.name)||a.has(e.name)||(a.add(e.name),r.push(e.name))}return e.filter((e=>a.has(e.name)))}(c.map((e=>d.get(e))),l);return function(e,t){let n=new Map(e.map(((e,t)=>[e.name,t]))),r=new Set(t.map((e=>e.name))),a=e=>r.has("string"==typeof e?e:e.name),s=new Set(e.map((e=>e.name))),i=e=>s.has("string"==typeof e?e:e.name);for(let t of e){for(let e of t.children.filter(i)){if(!n.has(e.name))throw new kC(`Child ${e.name} of node ${t.name} is unreachable.`);if(n.get(t.name)>n.get(e.name))throw new kC(`Node ${t.name} is scheduled to run after its child ${e.name}.`)}
2if(!a(t))for(let e of t.inputs){if(!n.has(e.name))throw new kC(`Input ${e.name} of node ${t.name} is unreachable.`);if(n.get(e.name)>n.get(t.name))throw new kC(`Node ${t.name} is scheduled to run before its input ${e.name}.`)}}}(f,l),f}var kC=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};var IC=new Set(["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"]),SC=new Set(["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"]),NC=new Set(["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"]);function TC(e){return IC.has(e.op)}function _C(e){return SC.has(e.op)}function CC(e){return NC.has(e.op)}var EC=class e{get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map((t=>e[t].map((e=>e.id))));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map((e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0})))}get outputs(){return this._outputs.map((e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0})))}get inputNodes(){return this._inputs.map((e=>e.signatureKey||e.name))}get outputNodes(){return this._outputs.map((e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t}))}get functions(){return Object.keys(this._functions).reduce(((e,t)=>(e[t]=this._functions[t].signature,e)),{})}constructor(t,n){this.graph=t,this.parent=n,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,null!=t.functions&&Object.keys(t.functions).forEach((n=>{this._functionExecutorMap[n]=new e(t.functions[n],this)}))}getCompilationKey(e,t){let n=e.map((e=>e.name)).sort(),r=t.map((e=>e.name)).sort();return n.join(this.SEPARATOR)+"--"+r.join(this.SEPARATOR)}compile(e,t){let n=wC(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:a,syncInputs:s}=n;if(null!=a)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){let n=t.map((e=>e.name)),a=Object.keys(e);throw new Error(`Cannot compute the outputs [${n}] from the provided inputs [${a}]. Missing the following inputs: [${r}]`)}let i=vC(this.graph,n),o=function(e){let t=new Map(e.map(((e,t)=>[e.name,t]))),n=Number.MAX_SAFE_INTEGER,r=e.map(((e,t)=>TC(e)?n:t)),a=e=>{let n=r[t.get(e.name)];return null==n?-1:n},s=e.map(((e,t)=>e.children.map(a).reduce(((e,t)=>Math.max(e,t)),r[t]))),i=new Map;for(let t=0;t<e.length;++t){let r=s[t];if(r===n)continue;let a=e[t],o=e[r];i.has(o.name)||i.set(o.name,[]),i.get(o.name).push(a)}return i}(i);return{orderedNodes:i,nodeLiveUntilMap:o}}cloneAndKeepTensor(e){if(null==e)return null;let t=e.clone();return $i(t),t}cloneTensorList(e){return e?e.map((e=>this.cloneAndKeepTensor(e))):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map((([e,t])=>[e,this.cloneTensorList(t)])))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let r=n.map((e=>this.graph.nodes[a_(e)[0]])),a=t.map((e=>a_(e)[0])),s=new Set(a),i=a.map((e=>this.graph.nodes[e]));0===i.length&&(i=this._outputs);let o=this.getCompilationKey(r,i),l=this.compiledMap.get(o);null==l&&(l=this.compile(e,i),this.compiledMap.set(o,l));try{this.keepIntermediateTensors=ut().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(e){this.keepIntermediateTensors=!1,console.warn(e.message)}let u={},d={};return Ci((()=>{let n=new xC(this.weightMap,u,d,this.functionExecutorMap,this.parseNodeNameCache),r=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach((t=>{let[a,s]=a_(t,n),i=[];i[s]=e[t],r[a]=i,this.keepIntermediateTensors&&(this.clonedTensorsMap[a]=this.cloneTensorList(i))}));let a=this.getFrozenTensorIds(r),{orderedNodes:i,nodeLiveUntilMap:o}=l;for(let e of i){if(r[e.name])continue;let t=bC(e,r,n,this._resourceManager);if(ja.isPromise(t))throw new Error(`The execution of the op '${e.op}' returned a promise. Please use model.executeAsync() instead.`);r[e.name]=t,this.keepIntermediateTensors&&(this.clonedTensorsMap[e.name]=this.cloneTensorList(t)),this.checkTensorForDisposalWithNodeLiveUntilInfo(e,r,n,a,s,o.get(e.name))}return null==this.parent&&n.dispose(a),t.map((e=>e_(e,r,n)))}
2))}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map((t=>e[t])).map((e=>e.map((e=>e.id)))));return new Set(t)}checkTensorForDisposal(e,t,n,r,a,s,i){if(!TC(t)&&!s.has(e)){for(let r of n[e])null!=r&&(i[r.id]=(i[r.id]||0)+t.children.length);for(let e of t.inputs){if(TC(e))continue;let t=t_(e.name,n,r);if(null!=t)for(let e of t){if(!e||e.kept||a.has(e.id))continue;let t=i[e.id];1===t?(e.dispose(),delete i[e.id]):null!=t&&i[e.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(e,t,n,r,a,s){function i(e){return TC(e)||a.has(e.name)}if(!TC(e)&&null!=s)for(let e of s){if(i(e))continue;let a=t_(e.name,t,n);for(let e of a)!e||e.kept||r.has(e.id)||e.dispose()}}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach((e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()})),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,n=!1,r={},a={}){this.disposeIntermediateTensors(),n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=ut().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(e){this.keepIntermediateTensors=!1,console.warn(e.message)}let s=new xC(this.weightMap,r,a,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,s,t,n),o=t.map((e=>e_(e,i,s))),l=o.map((e=>e.id)),u=Object.keys(e).map((t=>e[t].id)),d=new Set([...l,...u,...this.weightIds]);return Object.values(i).forEach((e=>{e.forEach((e=>{e&&!e.isDisposed&&!d.has(e.id)&&e.dispose()}))})),null==this.parent&&s.dispose(d),o}async executeFunctionAsync(e,t,n){let r=e.reduce(((e,t,n)=>(e[this.inputs[n].name]=t,e)),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let a=Object.keys(e),s=a.map((e=>this.graph.nodes[a_(e)[0]])),i=n.map((e=>a_(e)[0])),o=new Set(i),l=i.map((e=>this.graph.nodes[e]));0===l.length&&(l=this._outputs);let{usedNodes:u,missingInputs:d,dynamicNode:p,syncInputs:h}=wC(e,l,this.weightMap,this._initNodes),c=[...s,...this.graph.weights,...this._initNodes||[]].map((e=>({node:e,contexts:t.currentContext}))),f=Object.assign({},this.weightMap);Object.keys(e).forEach((t=>{let[n,r]=a_(t),a=[];a[r]=e[t],f[n]=a}));let m={},g=this.getFrozenTensorIds(f),y={};for(;c.length>0;){let e=this.processStack(s,c,t,f,y,g,o,m,u);await Promise.all(e)}null==p&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let b=l.filter((e=>!TC(e)&&!e_(e.name,f,t))).map((e=>e.name));if(b.length>0){let e="";throw null!=p&&(e=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${a}]. Consider providing the following inputs: [${d}]. ${e}`)}return f}processStack(e,t,n,r,a,s,i,o,l){let u=[];for(;t.length>0;){let e=t.pop();n.currentContext=e.contexts;let d="";if("Enter"===e.node.op&&QT("isConstant",e.node,r,n)&&([d]=n_(e.node.name,n)),null==r[e.node.name]){let p=bC(e.node,r,n,this._resourceManager);d||([d]=n_(e.node.name,n));let h=n.currentContext;ja.isPromise(p)?u.push(p.then((u=>(r[d]=u,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(u)),n.currentContext=h,this.checkTensorForDisposal(d,e.node,r,n,s,i,o),this.processChildNodes(e.node,t,n,r,a,l),u)))):(r[d]=p,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(p)),this.checkTensorForDisposal(d,e.node,r,n,s,i,o),this.processChildNodes(e.node,t,n,r,a,l))}else this.processChildNodes(e.node,t,n,r,a,l)}return u}processChildNodes(e,t,n,r,a,s){e.children.forEach((e=>{let[i]=n_(e.name,n);a[i]||!s.has(e.name)||("Merge"===e.op?e.inputNames.some((e=>!!e_(e,r,n)))&&(a[i]=!0,t.push({contexts:n.currentContext,node:e})):e.inputNames.every((e=>!!e_(e,r,n)))&&(a[i]=!0,t.push({contexts:n.currentContext,node:e})))}))}
2dispose(){Object.keys(this.weightMap).forEach((e=>this.weightMap[e].forEach((e=>e.dispose()))))}checkInputShapeAndType(e){Object.keys(e).forEach((t=>{let n=e[t],[r]=a_(t),a=this.graph.nodes[r];if(a.attrParams.shape&&a.attrParams.shape.value){let e=a.attrParams.shape.value,t=e.length===n.shape.length&&n.shape.every(((t,n)=>-1===e[n]||e[n]===t));ja.assert(t,(()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${e}], but was [${n.shape}]`))}a.attrParams.dtype&&a.attrParams.dtype.value&&ja.assert(n.dtype===a.attrParams.dtype.value,(()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.attrParams.dtype.value}, but was ${n.dtype}`))}))}mapInputs(e){var t,n;let r={};for(let a in e){let s=null===(n=null===(t=this._signature)||void 0===t?void 0:t.inputs)||void 0===n?void 0:n[a];null!=s?r[s.name]=e[a]:r[a]=e[a]}return r}checkInputs(e){let t=Object.keys(e).filter((e=>{let[t]=a_(e);return null==this.graph.nodes[t]}));if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map((e=>{var t,n;let r=null===(n=null===(t=this._signature)||void 0===t?void 0:t.outputs)||void 0===n?void 0:n[e];return null!=r?r.name:e}),{})}checkOutputs(e){e.forEach((e=>{let[t]=a_(e);if(!this.graph.nodes[t])throw new Error(`The output '${e}' is not found in the graph`)}))}},$C=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},AC="?tfjs-format=file",RC="model.json",FC=class{get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},n=gf){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=n,null==t&&(this.loadOptions={}),this.resourceManager=new $C}findIOHandler(){let e=this.modelUrl;if(null!=e.load)this.handler=e;else if(null!=this.loadOptions.requestInit)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(0===t.length)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),null==this.handler.load)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return ja.isPromise(e)?e.then((e=>null==e.getWeightStream?this.loadSync(e):this.loadStreaming(e))):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(null==e.getWeightStream)throw new Error("Model artifacts missing streamWeights function");let t=await Ki(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let n=this.artifacts.modelTopology,r=this.artifacts.signature;if(null!=this.artifacts.userDefinedMetadata){let e=this.artifacts.userDefinedMetadata;null!=e.signature&&(r=e.signature),null!=e.structuredOutputKeys&&(this.structuredOutputKeys=e.structuredOutputKeys)}if(this.signature=r,this.version=`${n.versions.producer}.${n.versions.minConsumer}`,this.executor=new EC(H_.Instance.transformGraph(n,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,null!=e.modelInitializer&&null!=e.modelInitializer.node){let t=H_.Instance.transformGraph(e.modelInitializer);this.initializer=new EC(t),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if("string"==typeof e){let t=this.io.getSaveHandlers(e);if(0===t.length)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(t.length>1)throw new Error(`Found more than one (${t.length}) save handlers for URL '${e}'`);e=t[0]}if(null==e.save)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t={};return(e instanceof $s?[e]:e).forEach(((e,n)=>t[this.structuredOutputKeys[n]]=e)),t}return e}predict(e,t){let n=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(n)}async predictAsync(e,t){let n=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(n)}normalizeInputs(e){var t;if(!(e instanceof $s||Array.isArray(e))){let n=null===(t=this.signature)||void 0===t?void 0:t.inputs;if(null!=n)for(let t in n){let r=n[t];null!=r.resourceId&&(e[t]=this.resourceIdToCapturedInput[r.resourceId])}return e}e=Array.isArray(e)?e:[e];let n=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+n!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-n} non-resource placeholders, while there are ${e.length} input tensors provided.`);let r=0;return this.inputNodes.reduce(((t,n)=>{var a,s,i;let o=null===(i=null===(s=null===(a=this.signature)||void 0===a?void 0:a.inputs)||void 0===s?void 0:s[n])||void 0===i?void 0:i.resourceId;return t[n]=null!=o?this.resourceIdToCapturedInput[o]:e[r++],t}),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return null==this.initializer?[]:null==this.initializerSignature?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return null==this.initializer?[]:null==this.initializerSignature?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,n=Object.keys(t);for(let r=0;r<n.length;r++){let a=t[n[r]];this.resourceIdToCapturedInput[a.resourceId]=e[r]}}}execute(e,t){null==this.resourceIdToCapturedInput&&this.setResourceIdToCapturedInput(this.executeInitializerGraph()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){null==this.resourceIdToCapturedInput&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce(((t,n)=>(t[n]=[e[n]],t)),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&Ei(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function DC(e,t={},n=gf){if(null==e)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");null==t&&(t={}),t.fromTFHub&&"string"==typeof e&&(e=function(e){return e.endsWith("/")||(e+="/"),`${e}${RC}${AC}`}(e));let r=new FC(e,t,n);return await r.load(),r}function MC(e){if(null==e)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[n,r]=e;if(!n)throw new Error("modelJSON must be the first element of the array");if(!(r&&r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in n))throw new Error("Model JSON is missing 'modelTopology'");
2if(!("weightsManifest"in n))throw new Error("Model JSON is missing 'weightsManifest'");let a=gf.getWeightSpecs(n.weightsManifest),s=gf.getModelArtifactsForJSONSync(n,a,r);t=gf.fromMemorySync(s)}else if("load"in e)t=e;else{if(!("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e))throw new Error("Unknown model format");t=gf.fromMemorySync(e)}let n=new FC(t);return n.load(),n}var OC="4.21.0",LC={};B(LC,{CSVDataset:()=>EE,Dataset:()=>gE,FileDataSource:()=>VE,TextLineDataset:()=>kE,URLDataSource:()=>UE,array:()=>bE,csv:()=>GE,func:()=>HE,generator:()=>jE,microphone:()=>KE,version_data:()=>XE,webcam:()=>qE,zip:()=>xE});var zC=W(Q()),PC=W(Q());function BC(e,t,n=new Map,r=new Set){if(null==e)return null;if("function"==typeof Blob&&e instanceof Blob)return e.slice();if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let a=t(e);if(a.recurse&&null!==a.value)throw new Error("A deep map function may not return both a value and recurse=true.");if(a.recurse){if(HC(e)){let a=Array.isArray(e)?[]:{};r.add(e);for(let s in e){let i=BC(e[s],t,n,r);a[s]=i}return r.delete(e),e.__proto__&&(a.__proto__=e.__proto__),a}throw new Error(`Can't recurse into non-iterable type: ${e}`)}return n.set(e,a.value),a.value}function WC(e,t=UC){return VC(e,t)}function VC(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let a=t(e);if(a.recurse&&null!==a.value)throw new Error("A deep zip function may not return both a value and recurse=true.");if(a.recurse){if(HC(r)){let a=Array.isArray(r)?[]:{};n.add(r);for(let s in r){let r=VC(e.map((e=>e[s])),t,n);a[s]=r}return n.delete(r),a}throw new Error(`Can't recurse into non-iterable type: ${r}`)}return a.value}function UC(e){return null===e?null:HC(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function GC(e,t){let n=new Map;BC(e,t,n);for(let e of Array.from(n.keys())){let t=n.get(e);if(ja.isPromise(t)){let r=await t;n.set(e,r)}}return BC(e,t,n)}function HC(e){let t=!1;if(ut().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=ee();t=e instanceof n}return null!=e&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||"object"==typeof e&&!(e instanceof $s)&&!(e instanceof Promise)&&!t)}function jC(e){return function(e,t){return BC(e,t)}(e,qC)}function qC(e){return e instanceof $s?{value:e.clone(),recurse:!1}:HC(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var KC=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,null==e)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return 0===this.length()}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}},XC=class e extends KC{constructor(){super(e.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=2*this.capacity,t=new Array(e),n=this.length();for(let e=0;e<n;e++)t[e]=this.get(this.wrap(this.begin+e));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};function YC(e){return new eE(e)}function ZC(e){return new tE(e)}XC.INITIAL_CAPACITY=32;var JC,QC=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new lE(this,e)}filter(e){return new iE(this,e)}map(e){return new oE(this,e)}mapAsync(e){return new uE(this,e)}serialMapAsync(e){return new uE(this,e).serial()}flatmap(e){return new pE(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile((e=>!0===e))}rowMajorBatch(e,t=!0){return new sE(this,e,t)}columnMajorBatch(e,t=!0,n=UC){return this.rowMajorBatch(e,t).map((e=>WC(e,n)))}concatenate(e,t){return new hE(YC([this,e]),t)}take(e){return e<0||null==e?this:new aE(this,e)}skip(e){return e<0||null==e?this:new rE(this,e)}prefetch(e){return new fE(this,e)}shuffle(e,t){return new mE(this,e,t)}serial(){return new nE(this)}},eE=class extends QC{constructor(e){super(),this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:jC(e),done:!1}}},tE=class extends QC{constructor(e){super(),this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},nE=class extends QC{constructor(e){super(),this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){return this.upstream.next()}},rE=class extends QC{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;Ei(e.value)}return this.upstream.next()}},aE=class extends QC{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},sE=class extends QC{constructor(e,t,n=!0){super(),this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){let e=[];for(;e.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},iE=class extends QC{constructor(e,t){super(),this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;Ei(e.value)}}},oE=class extends QC{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Ps.getTensorsInContainer(e.value),n=this.transform(e.value),r=Ps.getTensorsInContainer(n);for(let e of t)Ps.isTensorInList(e,r)||e.dispose();return{value:n,done:!1}}},lE=class extends QC{constructor(e,t){super(),this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},uE=class extends QC{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Ps.getTensorsInContainer(e.value),n=await this.transform(e.value),r=Ps.getTensorsInContainer(n);for(let e of t)Ps.isTensorInList(e,r)||e.dispose();return{value:n,done:!1}}},dE=class extends QC{constructor(){super(),this.outputQueue=new XC,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}async serialNext(){for(;0===this.outputQueue.length();)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},pE=class extends dE{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=Ps.getTensorsInContainer(e.value),n=this.transform(e.value),r=Ps.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let e of t)Ps.isTensorInList(e,r)||e.dispose();return!0}},hE=class extends QC{constructor(e,t){super(),this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,null==this.iterator){let e=await this.moreIterators.next();if(e.done)return{value:null,done:!0};this.iterator=e.value,null!=this.baseErrorHandler&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}};
2!function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"}(JC||(JC={}));var cE=class extends QC{constructor(e,t=JC.FAIL){super(),this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;let r=await GC(this.iterators,(function(e){return e instanceof QC?{value:e.next().then((e=>(t++,e.done&&n++,e.value))),recurse:!1}:{value:null,recurse:!0}}));if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case JC.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case JC.SHORTEST:return{value:null,done:!0};case JC.LONGEST:}return this.count++,{value:r,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},fE=class extends QC{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new KC(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},mE=class extends fE{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=PC.alea(n||ja.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then((()=>this.serialNext())),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(!t.done)return this.refill(),t;this.upstreamExhausted=!0}return{value:null,done:!0}}},gE=class{constructor(){this.size=null}batch(e,t=!0){let n,r=this;return ja.assert(e>0,(()=>`batchSize needs to be positive, but it is\n      ${e}`)),n=this.size===1/0||null==this.size?this.size:t?Math.ceil(this.size/e):Math.floor(this.size/e),yE((async()=>(await r.iterator()).columnMajorBatch(e,t,wE)),n)}concatenate(e){let t,n=this;return t=this.size===1/0||e.size===1/0?1/0:null!=this.size&&null!=e.size?this.size+e.size:null,yE((async()=>(await n.iterator()).concatenate(await e.iterator())),t)}filter(e){let t,n=this;return t=this.size===1/0?1/0:null,yE((async()=>(await n.iterator()).filter((t=>Ci((()=>e(t)))))),t)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return yE((async()=>(await t.iterator()).map((t=>Ci((()=>e(t)))))),this.size)}mapAsync(e){let t=this;return yE((async()=>(await t.iterator()).mapAsync(e)),this.size)}prefetch(e){if(null==e)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return yE((async()=>(await t.iterator()).prefetch(e)),this.size)}repeat(e){let t,n=this;return t=null!=this.size&&e>0?this.size*e:0===e?0:null!=this.size&&(void 0===e||e<0)?1/0:null,yE((async()=>function(e,t){return new hE(e,t)}(ZC((async()=>({value:await n.iterator(),done:!1}))).take(e))),t)}skip(e){let t,n=this;return t=null!=this.size&&e>=0&&this.size>=e?this.size-e:null!=this.size&&(this.size<e||void 0===e||e<0)?0:null,yE((async()=>(await n.iterator()).skip(e)),t)}shuffle(e,t,n=!0){if(null==e||e<0)throw null==this.size?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified.  If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let r=this,a=zC.alea(t||ja.now().toString());return yE((async()=>{let t=a.int32();return n&&(t+=a.int32()),(await r.iterator()).shuffle(e,t.toString())}),this.size)}take(e){let t,n=this;return t=null!=this.size&&this.size>e?e:null!=this.size&&this.size<=e?this.size:null,yE((async()=>(await n.iterator()).take(e)),t)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};function yE(e,t=null){return new class extends gE{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function bE(e){return yE((async()=>YC(e)),e.length)}function xE(e){if(!HC(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n<e.length;n++)t=null==t?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=null==t?e[n].size:Math.min(t,e[n].size);return yE((async()=>function(e,t=JC.FAIL){return new cE(e,t)}(await GC(e,(e=>{if(e instanceof gE)return{value:e.iterator(),recurse:!1};if(HC(e))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")})),JC.SHORTEST)),t)}function wE(e){if(null===e)return null;return function(e){return null==e||function(e){return null===e||"object"!=typeof e&&"function"!=typeof e}(e)||Array.isArray(e)||"object"==typeof e&&e instanceof $s||ja.isTypedArray(e)}(e[0])?{value:vE(e),recurse:!1}:{value:null,recurse:!0}}function vE(e){if(0===e.length)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof $s?ah(e):yi(e)}gE.MAX_BUFFER_SIZE=1e4;var kE=class extends gE{constructor(e){super(),this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split("\n").map((e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e)))}},IE='"',SE=Symbol("out"),NE=Symbol("field"),TE=Symbol("quote"),_E=Symbol("quoteafterquote"),CE=Symbol("quoteinquote"),EE=class extends gE{async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&ja.assert(e.length===this.fullColumnNames.length,(()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+").")),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce(((e,t)=>(e[t]=e[t]+1||1,e)),{}),n=Object.keys(t).filter((e=>t[e]>1));if(ja.assert(0===n.length,(()=>"Duplicate column names found: "+n.toString())),this.columnConfigs)for(let e of Object.keys(this.columnConfigs))if(-1===this.fullColumnNames.indexOf(e))throw new Error('The key "'+e+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").");this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!1)}return null}constructor(e,t){super(),this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new kE(e),t||(t={}),this.hasHeader=!1!==t.hasHeader,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(ja.assert(null==t.delimiter,(()=>"Delimiter should not be provided when delimWhitespace is true.")),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map((e=>this.makeDataElement(e)))}makeDataElement(e){let t=this.parseRow(e),n={},r={};for(let a=0;a<this.fullColumnNames.length;a++){let s=this.fullColumnNames[a],i=this.columnConfigs?this.columnConfigs[s]:null;if(!this.configuredColumnsOnly||i){let o=t[a],l=null;if(""===o)if(i&&void 0!==i.default)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let e=Number(o);if(isNaN(e))l=i&&"bool"===i.dtype?this.getBoolean(o):o;else if(i&&i.dtype)switch(i.dtype){case"float32":default:l=e;break;case"int32":l=Math.floor(e);break;case"bool":l=this.getBoolean(o)}else l=e}i&&i.isLabel?r[s]=l:n[s]=l}}return 0===Object.keys(r).length?n:{xs:n,ys:r}}getBoolean(e){return"1"===e||"true"===e.toLowerCase()?1:0}parseRow(e,t=!0){let n=[],r=0,a=e.length,s=SE;for(let t=0;t<a;t++)switch(s){case SE:switch(e.charAt(t)){case IE:r=t+1,s=TE;break;case this.delimiter:if(r=t+1," "===this.delimiter&&this.delimWhitespace)break;n.push(""),s=SE;break;default:s=NE,r=t}break;case NE:if(e.charAt(t)===this.delimiter)n.push(e.substring(r,t)),s=SE,r=t+1;break;case TE:if(e.charAt(t)===IE)s=_E;break;case _E:switch(e.charAt(t)){case this.delimiter:n.push(e.substring(r,t-1)),s=SE,r=t+1;break;case IE:s=TE;break;default:s=CE}break;case CE:if(e.charAt(t)===IE)s=TE}if(s===_E?n.push(e.substring(r,a-1)):n.push(e.substring(r)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},$E=class e extends QC{constructor(e){super(),this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);
2if(this.fftSize<0||t<4||t>14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=!1!==e.includeSpectrogram,this.includeWaveform=!0===e.includeWaveform,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(t={}){if(!ut().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let n=new e(t);return await n.start(),n}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:null==this.audioTrackConstraints||this.audioTrackConstraints,video:!1})}catch(e){throw new Error(`Error thrown while initializing video stream: ${e.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,this.sampleRateHz){if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`)}else this.sampleRateHz=this.audioContext.sampleRate;let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=2*this.fftSize,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let t=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(t,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let e=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(e,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise((r=>{let a=setInterval((()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(a),r({freqDataQueue:e,timeDataQueue:t}))}),this.fftSize/this.sampleRateHz*1e3)}))}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),null!=this.stream&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach(((e,r)=>n.set(e,r*t))),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(ja.sizeFromShape(t));return n.set(e,n.length-e.length),yi(n,t)}},AE=class e extends QC{constructor(e,t){if(super(),this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=lh([0],"int32"),this.webcamConfig.centerCrop){let e=1*this.webcamConfig.resizeWidth/this.webcamVideoElement.width,t=1*this.webcamConfig.resizeHeight/this.webcamVideoElement.height,n=(1-e)/2,r=(1-t)/2,a=n+e,s=t+r;this.cropBox=uh([r,n,s,a],[1,4])}else this.cropBox=uh([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(t,n={}){if(!ut().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!t){if(t=document.createElement("video"),!n.resizeWidth||!n.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");t.width=n.resizeWidth,t.height=n.resizeHeight}let r=new e(t,n);return await r.start(),r}async start(){this.webcamConfig.facingMode&&ja.assert("user"===this.webcamConfig.facingMode||"environment"===this.webcamConfig.facingMode,(()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`));try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream
2: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise((e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}}))}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=Pf.fromPixels(this.webcamVideoElement)}catch(e){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(e)}`)}if(!this.resize)return{value:e,done:!1};try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(e){throw new Error(`Error thrown cropping the video: ${e.message}`)}finally{e.dispose()}}needToResize(){return!(!this.webcamConfig.resizeWidth||!this.webcamConfig.resizeHeight||this.webcamVideoElement.width===this.webcamConfig.resizeWidth&&this.webcamVideoElement.height===this.webcamConfig.resizeHeight)}cropAndResizeFrame(e){return Ci((()=>{let t,n=Vu(Wo(e,"float32"),0);t=Kc.cropAndResize(n,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=t.shape;return kl(t,r.slice(1))}))}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach((e=>e.stop()));try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},RE=class{},FE=class extends QC{split(e){return new DE(this,e)}},DE=class extends FE{constructor(e,t){super(),this.upstream=e,this.impl=new ME(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},ME=class extends dE{constructor(e,t){super(),this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return""!==this.carryover&&(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let e of t.slice(0,-1))this.outputQueue.push(e);return this.carryover=t[t.length-1],!0}},OE=class extends QC{decodeUTF8(){return new LE(this)}},LE=class extends FE{constructor(e){super(),this.upstream=e,this.impl=new zE(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},zE=class extends dE{constructor(e){if(super(),this.upstream=e,ut().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:e}=ee();this.decoder=new e("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e,t,n=await this.upstream.next();return!n.done&&(e=n.value,t=ut().get("IS_BROWSER")?this.decoder.decode(e,{stream:!0}):this.decoder.write(E.from(e.buffer)),this.outputQueue.push(t),!0)}},PE=class extends OE{constructor(e,t={}){super(),this.file=e,this.options=t,ja.assert(e instanceof Uint8Array||!!ut().get("IS_BROWSER")&&(e instanceof File||e instanceof Blob),(()=>"FileChunkIterator only supports File, Blob and Uint8Array right now.")),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1048576}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise(((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let r=new FileReader;r.onload=n=>{let a=r.result;if(a instanceof ArrayBuffer&&(a=new Uint8Array(a)),!(a instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(a)},r.onabort=e=>t(new Error("Aborted")),r.onerror=e=>t(new Error(e.type));let a=this.file.slice(this.offset,n);r.readAsArrayBuffer(a)}this.offset=n})),done:!1}}};var BE=e=>({method:e.method,headers:e.headers,body:e.body,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity});function WE(e){return"string"==typeof e&&"file://"===e.slice(0,7)}var VE=class extends RE{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(WE(this.input)&&ut().get("IS_NODE")){let e=te();this.input=e.readFileSync(this.input.slice(7))}return new PE(this.input,this.options)}},UE=class extends RE{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return WE(this.url)?new VE(this.url,this.fileOptions).iterator():async function(e,t={},n){let r,a;"string"==typeof e?r=e:(r=e.url,a=BE(e));let s=await(n||ja.fetch)(r,a);if(s.ok){let e=new Uint8Array(await s.arrayBuffer());return new PE(e,t)}throw new Error(s.statusText)}(this.url,this.fileOptions)}};function GE(e,t={}){return new EE(new UE(e),t)}function HE(e){let t=ZC(e);return yE((async()=>t))}function jE(e){return yE((async()=>{let t=await e();return ZC((()=>t.next()))}
2))}async function qE(e,t){return AE.create(e,t)}async function KE(e){return $E.create(e)}var XE="4.21.0";function YE(e,t){Array.isArray(e)||(e=[e]),e.forEach((e=>{null!=e&&ja.assert("complex64"!==e.dtype,(()=>`${t} does not support complex64 tensors in the CPU backend.`))}))}var ZE=Eg.whereImpl,JE=class e extends de{nextDataId(){return e.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new ue(this,Ni())}write(e,t,n){this.firstUse&&(this.firstUse=!1,ut().get("IS_NODE")&&Im.warn("\n============================\nHi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details. \n============================"));let r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if("string"===t&&null!=n&&n.length>0&&ja.isString(n[0])){let a=n.map((e=>ja.encodeString(e)));r=this.write(a,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){this.data.get(e).refCount++}decRef(e){if(this.data.has(e)){this.data.get(e).refCount--}}move(e,t,n,r,a){this.data.set(e,{values:t,dtype:r,refCount:a})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if("complex64"===t){let e=this.readSync(n.real.dataId),t=this.readSync(n.imag.dataId);return Im.mergeRealAndImagArrays(e,t)}return ja.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if("string"===e.dtype)try{let n=t.map((e=>ja.decodeString(e)));return Bo(e.shape,e.dtype,n)}catch(e){throw new Error("Failed to decode encoded string bytes into utf-8")}return Bo(e.shape,e.dtype,t)}makeOutput(e,t,n){return Ni().makeTensorFromTensorInfo(this.makeTensorInfo(t,n,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);null!=n&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=ja.now();return e(),{kernelMs:ja.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){YE([e],"where");let t=this.readSync(e.dataId);return ZE(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};JE.nextDataId=0;var QE={};function e$(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}B(QE,{addImpl:()=>m$,bincountImpl:()=>x$,bincountReduceImpl:()=>w$,bitwiseAndImpl:()=>v$,castImpl:()=>d$,ceilImpl:()=>_$,concatImpl:()=>$$,equalImpl:()=>A$,expImpl:()=>D$,expm1Impl:()=>L$,floorDivImpl:()=>U$,floorImpl:()=>B$,gatherNdImpl:()=>j$,gatherV2Impl:()=>q$,greaterEqualImpl:()=>Z$,greaterImpl:()=>K$,lessEqualImpl:()=>rA,lessImpl:()=>eA,linSpaceImpl:()=>iA,logImpl:()=>oA,maxImpl:()=>dA,maximumImpl:()=>pA,minimumImpl:()=>fA,multiplyImpl:()=>yA,negImpl:()=>vA,notEqualImpl:()=>IA,prodImpl:()=>EA,raggedGatherImpl:()=>DA,raggedRangeImpl:()=>OA,raggedTensorToTensorImpl:()=>WA,rangeImpl:()=>VA,rsqrtImpl:()=>UA,scatterImpl:()=>jA,sigmoidImpl:()=>qA,simpleAbsImpl:()=>e$,sliceImpl:()=>YA,sparseFillEmptyRowsImpl:()=>QA,sparseReshapeImpl:()=>eR,sparseSegmentReductionImpl:()=>tR,sqrtImpl:()=>nR,squaredDifferenceImpl:()=>sR,staticRegexReplaceImpl:()=>lR,stridedSliceImpl:()=>pR,stringNGramsImpl:()=>cR,stringSplitImpl:()=>mR,stringToHashBucketFastImpl:()=>gR,subImpl:()=>yR,tileImpl:()=>vR,topKImpl:()=>SR,transposeImpl:()=>TA,uniqueImpl:()=>NR});var t$={kernelName:ft,backendName:"cpu",kernelFunc:e=>{let{x:t}=e.inputs,n=e.backend;YE(t,"abs");let r=new Float32Array(ja.sizeFromShape(t.shape));return r=e$(n.data.get(t.dataId).values),n.makeOutput(r,t.shape,t.dtype)}};function n$(e){return(t,n,r,a,s)=>{let i=Im.assertAndGetBroadcastShape(t,n),o=i.length,l=ja.computeStrides(i),u=ja.sizeFromShape(i),d=ja.getTypedArrayFromDType(s,u),p=t.length,h=n.length,c=ja.computeStrides(t),f=ja.c
2omputeStrides(n),m=Im.getBroadcastDims(t,i),g=Im.getBroadcastDims(n,i);if(m.length+g.length===0)for(let t=0;t<d.length;++t)d[t]=e(r[t%r.length],a[t%a.length]);else for(let t=0;t<d.length;++t){let n=ja.indexToLoc(t,o,l),s=n.slice(-p);m.forEach((e=>s[e]=0));let i=ja.locToIndex(s,p,c),u=n.slice(-h);g.forEach((e=>u[e]=0));let y=ja.locToIndex(u,h,f);d[t]=e(r[i],a[y])}return[d,i]}}function r$(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=n.makeTensorInfo(r.shape,"complex64");return n.data.get(o.dataId).complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",s),imag:n.makeTensorInfo(a.shape,"float32",i)},o}var a$={kernelName:Wt,backendName:"cpu",kernelFunc:r$};function s$(e,t,n="float32"){if("complex64"===n){return r$({inputs:{real:s$(e,t,"float32"),imag:s$(e,t,"float32")},backend:e})}let r=ja.makeZerosTypedArray(ja.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function i$(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var o$={kernelName:An,backendName:"cpu",kernelFunc:i$};function l$(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.real,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var u$={kernelName:Er,backendName:"cpu",kernelFunc:l$};function d$(e,t,n,r){if("int32"===r){return[t,"int32",Int32Array.from(e)]}if("bool"===r){let r=ja.toTypedArray([0],n),[a,s]=n$(((e,t)=>e!==t?1:0))(t,[],e,r,"bool");return[s,"bool",a]}throw new Error(`Error in Cast: failed to cast ${n} to ${r}`)}function p$(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dtype:s}=r;if("complex64"===s){if("complex64"===a.dtype)return i$({inputs:{x:a},backend:n});let e=s$(n,a.shape,a.dtype),t=p$({inputs:{x:a},backend:n,attrs:{dtype:"float32"}}),r=r$({inputs:{real:t,imag:e},backend:n});return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),r}if("complex64"===a.dtype){let e=l$({inputs:{input:a},backend:n}),t=p$({inputs:{x:e},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(e),t}if(!ja.hasEncodingLoss(a.dtype,s)){let e=i$({inputs:{x:a},backend:n});return{dataId:e.dataId,shape:e.shape,dtype:s}}let i=n.data.get(a.dataId).values,[o,l,u]=d$(i,a.shape,a.dtype,s);return n.makeTensorInfo(o,l,u)}var h$={kernelName:zt,backendName:"cpu",kernelFunc:p$};function c$(e,t,n,r){return null==n?({inputs:n,backend:a})=>{let{a:s,b:i}=n,o=a;YE([s,i],e);let l=o.data.get(s.dataId).values,u=o.data.get(i.dataId).values,d="string"===s.dtype?Im.fromUint8ToStringArray(l):l,p="string"===s.dtype?Im.fromUint8ToStringArray(u):u,h=r||s.dtype,[c,f]=t(s.shape,i.shape,d,p,h);return o.makeTensorInfo(f,h,c)}:({inputs:e,backend:a})=>{let{a:s,b:i}=e,o=a;if("complex64"===s.dtype||"complex64"===i.dtype){let e=p$({inputs:{x:s},backend:o,attrs:{dtype:"complex64"}}),t=o.data.get(e.dataId),r=t.complexTensorInfos.real,a=t.complexTensorInfos.imag,l=o.data.get(r.dataId).values,u=o.data.get(a.dataId).values,d=p$({inputs:{x:i},backend:o,attrs:{dtype:"complex64"}}),p=o.data.get(d.dataId),h=p.complexTensorInfos.real,c=p.complexTensorInfos.imag,f=o.data.get(h.dataId).values,m=o.data.get(c.dataId).values,[g,y,b]=n(s.shape,i.shape,l,u,f,m),x=o.makeTensorInfo(b,"float32",g),w=o.makeTensorInfo(b,"float32",y),v=r$({inputs:{real:x,imag:w},backend:o});return o.disposeIntermediateTensorInfo(e),o.disposeIntermediateTensorInfo(d),o.disposeIntermediateTensorInfo(x),o.disposeIntermediateTensorInfo(w),v}{let e=o.data.get(s.dataId).values,n=o.data.get(i.dataId).values,a=r||s.dtype,[l,u]=t(s.shape,i.shape,e,n,a);return o.makeTensorInfo(u,a,l)}}}function f$(e){return(t,n,r,a,s,i)=>{let o=Im.assertAndGetBroadcastShape(t,n),l=ja.sizeFromShape(o),u=o.length,d=ja.computeStrides(o),p=ja.getTypedArrayFromDType("float32",l),h=ja.getTypedArrayFromDType("float32",l),c=Im.getBroadcastDims(t,o),f=Im.getBroadcastDims(n,o),m=Im.mergeRealAndImagArrays(r,a),g=Im.mergeRealAndImagArrays(s,i),y=t.length,b=ja.computeStrides(t),x=n.length,w=ja.computeStrides(n);if(c.length+f.length===0)for(let t=0;t<p.length;t++){let n=t%m.length,r=t%g.length,a=e(m[2*n],m[2*n+1],g[2*r],g[2*r+1]);p[t]=a.real,h[t]=a.imag}else for(let t=0;t<p.length;t++){let n=ja.indexToLoc(t,u,d),r=n.slice(-y);
2c.forEach((e=>r[e]=0));let a=ja.locToIndex(r,y,b),s=n.slice(-x);f.forEach((e=>s[e]=0));let i=ja.locToIndex(s,x,w),o=e(m[2*a],m[2*a+1],g[2*i],g[2*i+1]);p[t]=o.real,h[t]=o.imag}return[p,h,o]}}var m$=n$(((e,t)=>e+t)),g$=f$(((e,t,n,r)=>({real:e+n,imag:t+r}))),y$=c$(yt,m$,g$),b$={kernelName:yt,backendName:"cpu",kernelFunc:y$};function x$(e,t,n,r,a){let s=ja.sizeFromShape(r),i=ja.makeZerosTypedArray(a,n);for(let n=0;n<e.length;n++){let r=e[n];if(r<0)throw new Error("Input x must be non-negative!");r>=a||(i[r]+=s>0?t[n]:1)}return i}function w$(e,t,n,r=!1){let a=e.shape[0],s=e.shape[1],i=Bo([a,n],t.dtype);for(let o=0;o<a;o++)for(let a=0;a<s;a++){let s=e.get(o,a);if(s<0)throw new Error("Input x must be non-negative!");s>=n||(r?i.set(1,o,s):t.size>0?i.set(i.get(o,s)+t.get(o,a),o,s):i.set(i.get(o,s)+1,o,s))}return i}var v$=n$(((e,t)=>e&t)),k$=c$(Mt,v$),I$={kernelName:Mt,backendName:"cpu",kernelFunc:k$};function S$(e){return(t,n,r)=>{let a=ja.getArrayFromDType(n,t.length);for(let n=0;n<t.length;++n)a[n]=e(t[n],r);return a}}function N$(e,t,n){return T$(e,S$(t),n)}function T$(e,t,n){return({inputs:r,attrs:a,backend:s})=>{let{x:i}=r;YE(i,e);let o,l=s,u=l.data.get(i.dataId).values;if("string"===i.dtype){if(!Array.isArray(u))throw new Error("String tensor's value was not an instance of Array");o=Im.fromUint8ToStringArray(u)}else o=u;let d=n||i.dtype,p=t(o,d,a);return l.makeTensorInfo(i.shape,d,p)}}var _$=S$((e=>Math.ceil(e))),C$=T$(Pt,_$),E$={kernelName:Pt,backendName:"cpu",kernelFunc:C$};function $$(e,t,n,r){let a=ja.getArrayFromDType(n,ja.sizeFromShape(t));if(r&&"string"!==n){let t=0;e.forEach((e=>{let n=ja.sizeFromShape(e.shape);a.set(e.vals,t),t+=n}))}else{let r=0;e.forEach((e=>{let s="string"===n?Im.fromUint8ToStringArray(e.vals):e.vals,i=0;for(let n=0;n<e.shape[0];++n){let o=n*t[1]+r;for(let t=0;t<e.shape[1];++t)a[o+t]=s[i++]}r+=e.shape[1]}))}return a}var A$=n$(((e,t)=>e===t?1:0)),R$=c$(yn,A$,null,"bool"),F$={kernelName:yn,backendName:"cpu",kernelFunc:R$},D$=S$((e=>Math.exp(e))),M$=T$(bn,D$,"float32"),O$={kernelName:bn,backendName:"cpu",kernelFunc:M$},L$=S$((e=>Math.expm1(e))),z$=T$(wn,L$),P$={kernelName:wn,backendName:"cpu",kernelFunc:z$},B$=S$((e=>Math.floor(e))),W$=T$(Sn,B$),V$={kernelName:Sn,backendName:"cpu",kernelFunc:W$},U$=n$(((e,t)=>Math.floor(e/t))),G$=c$(Nn,U$,null,"int32"),H$={kernelName:Nn,backendName:"cpu",kernelFunc:G$};function j$(e,t,n,r,a,s,i,o,l){let u=Bo([r,s],n);for(let n=0;n<r;n++){let r=[],d=0;for(let t=0;t<a;t++){let s=e[n*a+t];d+=s*i[t],r.push(s)}if(d<0||d>=l/s)throw new Error(`Invalid indices: ${r} does not index into ${o}`);for(let e=0;e<s;e++)u.values[n*s+e]=t.get(...t.indexToLoc(d*s+e))}return u}function q$(e,t,n){let r=Bo(n,e.dtype);for(let n=0;n<r.size;++n){let a=r.indexToLoc(n).slice(),s=a[0],i=a[2],o=t.locToIndex([s,i]);a[2]=t.values[o];let l=e.locToIndex(a);0<=l&&l<e.values.length&&(r.values[n]=e.values[l])}return r}var K$=n$(((e,t)=>e>t?1:0)),X$=c$(En,K$,null,"bool"),Y$={kernelName:En,backendName:"cpu",kernelFunc:X$},Z$=n$(((e,t)=>e>=t?1:0)),J$=c$($n,Z$,null,"bool"),Q$={kernelName:$n,backendName:"cpu",kernelFunc:J$},eA=n$(((e,t)=>e<t?1:0)),tA=c$(zn,eA,null,"bool"),nA={kernelName:zn,backendName:"cpu",kernelFunc:tA},rA=n$(((e,t)=>e<=t?1:0)),aA=c$(Pn,rA,null,"bool"),sA={kernelName:Pn,backendName:"cpu",kernelFunc:aA};function iA(e,t,n){let r=(t-e)/(n-1),a=ja.makeZerosTypedArray(n,"float32");a[0]=e;for(let e=1;e<a.length;e++)a[e]=a[e-1]+r;return a}var oA=S$((e=>Math.log(e))),lA=T$(Wn,oA),uA={kernelName:Wn,backendName:"cpu",kernelFunc:lA};function dA(e,t,n,r){let a=ja.getTypedArrayFromDType(r,ja.sizeFromShape(n));for(let n=0;n<a.length;++n){let r=n*t,s=e[r];for(let n=0;n<t;++n){let t=e[r+n];(Number.isNaN(t)||t>s)&&(s=t)}a[n]=s}return a}var pA=n$(((e,t)=>Math.max(e,t))),hA=c$(Qn,pA),cA={kernelName:Qn,backendName:"cpu",kernelFunc:hA},fA=n$(((e,t)=>Math.min(e,t))),mA=c$(or,fA),gA={kernelName:or,backendName:"cpu",kernelFunc:mA},yA=n$(((e,t)=>e*t)),bA=f$(((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n}))),xA=c$(pr,yA,bA),wA={kernelName:pr,backendName:"cpu",kernelFunc:xA};function vA(e,t,n){let r=ja.createScalarValue(-1,n);return yA([],t,r,e,n)}var kA={kernelName:hr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r}=t;YE(r,"neg");let a=n.data.get(r.dataId).values,[s,i]=vA(a,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,s)}},IA=n$(((e,t)=>e!==t?1:0)),SA=c$(cr,IA,null,"bool"),NA={kernelName:cr,backendName:"cpu",kernelFunc:SA};function TA(e,t,n,r,a){let s=t.length,i=ja.sizeFromShape(t),o=ja.computeStrides(t),l=ja.computeStrides(a),u=ja.getTypedArrayFromDType(n,ja.sizeFromShape(a));for(let t=0;t<i;++t){let n=ja.indexToLoc(t,s,o),a=new Array(n.length);for(let e=0;e<a.length;e++)a[e]=n[r[e]];u[ja.locToIndex(a,s,l)]=e[t]}return u}function _A(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{perm:s}=n;YE(a,"transpose");let i=a.shape.length,o=new Array(i);for(let e=0;e<o.length;e++)o[e]=a.shape[s[e]];let l=TA(r.data.get(a.dataId).values,a.shape,a.dtype,s,o);return{dataId:r.write(l,o,a.dtype),shape:o,dtype:a.dtype}}var CA={kernelName:va,backendName:"cpu",kernelFunc:_A};function EA(e,t,n,r){let[a,s]=Im.computeOutAndReduceShapes(e,r),i=Ws(t,"int32"),o=ja.makeZerosTypedArray(ja.sizeFromShape(a),i),l=ja.sizeFromShape(s);for(let e=0;e<o.length;++e){let t=e*l,r=1;for(let e=0;e<l;++e)r*=n[t+e];o[e]=r}return{outVals:o,outShape:a,outDtype:i}}var $A={kernelName:Sr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;YE(a,"prod");let o=a.shape.length,l=ja.parseAxisParam(s,a.shape),u=Im.getAxesPermutation(l,o),d=l,p=a,h=[];null!=u&&(p=_A({inputs:{x:a},backend:n,attrs:{perm:u}}),h.push(p),d=Im.getInnerMostAxes(d.length,o));let c=n.data.get(p.dataId).values,{outVals:f,outShape:m,outDtype:g}=EA(p.shape,p.dtype,c,d),y=m;return i&&(y=Im.expandShapeToKeepDim(m,l)),h.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(y,g,f)}};function AA(e,t,n,r){let a=[],s=0,i=t.length-1+n.length,o=new Array(i).fill(null).map((()=>[0]));!function(e,t){for(let n=0;n<e.length;++n){let r=e[n],a=n===e.length-1?t:e[n+1].length;if(0===r.length)throw new Error("Ragged splits may not be empty");if(r[0]<0)throw new Error("Ragged splits must be non-negative");if(r[r.length-1]>a)throw new Error("Ragged splits must not point past values");for(let e=1;e<r.length;++e)if(r[e-1]>r[e])throw new Error("Ragged splits must be sorted in ascending order")}}(n,r);let l=1;for(let e=0;e<t.length-1;++e){l*=t[e];let n=t[e+1];for(let t=1;t<l+1;++t)o[e].push(t*n)}for(let r=0;r<e.length;++r){let i=e[r],l=e[r]+1;for(let e=0;e<n.length;++e){let r=n[e],a=e+t.length-1;if(a>=0){let e=o[a],t=e[e.length-1]-r[i];for(let e=i;e<l;++e)o[a].push(r[e+1]+t)}i=r[i],l=r[l]}l!==i&&(a.push([i,l]),s+=l-i)}
2return{outSplits:o,valueSlices:a,numValues:s}}function RA(e,t){let n=e.slice(0,t);for(;n.length<t;)n.push(1);for(let r=t;r<e.length;r++)n[t-1]*=e[r];return n}function FA(e,t,n,r,a){let s=t.slice();s[0]=a;let i=ja.getArrayFromDType(n,ja.sizeFromShape(s)),o=e.length;return function(e,t,n,r,a,s){let i=RA(t,2)[1],o=RA(s,2)[1],l=0;for(let t of n)for(let n=t[0];n<t[1];++n){for(let t=0;t<r;++t)a[l*o+t]=e[n*i+t];++l}}(e,t,r,0===o?0:o/t[0],i,s),[i,s]}function DA(e,t,n,r,a,s,i,o){if(0===e.length)throw new Error("paramsNestedSplits must be non empty");if(0===t[0].length)throw new Error("Split tensors must not be scalars");if(function(e,t,n){e.forEach(((e,r)=>{if(e<0||e>=n){let a=ja.indexToLoc(r,t.length,ja.computeStrides(t)).join(",");throw new Error(`indices[${a}] = ${e} is not in [0, ${n})`)}}))}(s,i,t[0][0]-1),0===r.length)throw new Error("params.rank must be nonzero");let l=r[0],{outSplits:u,valueSlices:d,numValues:p}=AA(s,i,e,l),h=function(e){let t=[];for(let n=0;n<e.length;++n){let r=e[n].length,a=ja.getArrayFromDType("int32",r);t.push(a),e[n].forEach(((e,t)=>a[t]=e))}return t}(u),c=FA(n,r,a,d,p);return[h,c[0],c[1]]}var MA=2147483647;function OA(e,t,n,r,a,s,i){if(t.length>1)throw new Error("starts must be a scalar or vector");if(a.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=0===t.length,l=0===a.length,u=0===i.length,d=[];o||d.push(t[0]),l||d.push(a[0]),u||d.push(i[0]);for(let e=1;e<d.length;++e)if(d[e]!==d[e-1])throw new Error("starts, limits, and deltas must have the same shape");let p=0===d.length?1:d[0],h=ja.getArrayFromDType("int32",p+1);h[0]=0;for(let t=0;t<p;++t){let n,a=o?e[0]:e[t],i=l?r[0]:r[t],d=u?s[0]:s[t];if(0===d)throw new Error("Requires delta != 0");if(d>0&&i<a||d<0&&i>a)n=0;else if(n=Math.ceil(Math.abs((i-a)/d)),n>MA)throw new Error(`Requires ((limit - start) / delta) <= ${MA}`);h[t+1]=h[t]+n}let c=h[p],f=ja.getArrayFromDType(n,c),m=0;for(let t=0;t<p;++t){let n=h[t+1]-h[t],r=o?e[0]:e[t],a=u?s[0]:s[t];for(let e=0;e<n;++e)f[m++]=r,r+=a}return[h,f]}var LA=Im.RowPartitionType,zA=class e{constructor(e,t,n,r,a,s,i,o,l,u){this.shape=e,this.shapeShape=t,this.values=n,this.valuesShape=r,this.valuesDType=a,this.defaultValue=s,this.defaultValueShape=i,this.rowPartitionValues=o,this.rowPartitionValuesShapes=l,this.rowPartitionTypes=Im.getRowPartitionTypesHelper(u),this.raggedRank=Im.getRaggedRank(this.rowPartitionTypes)}getRowPartitionTypeByDimension(e){return this.rowPartitionTypes[0]===LA.FIRST_DIM_SIZE?this.rowPartitionTypes[e+1]:this.rowPartitionTypes[e]}getRowPartitionTensor(e){return this.rowPartitionTypes[0]===LA.FIRST_DIM_SIZE?this.rowPartitionValues[e+1]:this.rowPartitionValues[e]}getMaxWidth(t){let n=this.getRowPartitionTensor(t-1);switch(this.getRowPartitionTypeByDimension(t-1)){case LA.VALUE_ROWIDS:return e.getMaxWidthValueRowID(n);case LA.ROW_SPLITS:return e.getMaxWidthRowSplit(n);default:throw new Error(`Cannot handle partition type ${LA[this.getRowPartitionTypeByDimension(t-1)]}`)}}static getMaxWidthRowSplit(e){let t=e.length;if(0===t||1===t)return 0;let n=0;for(let r=0;r<t-1;++r){let t=e[r+1]-e[r];t>n&&(n=t)}return n}static getMaxWidthValueRowID(e){let t=e.length;if(0===t)return 0;let n=0,r=e[0],a=0;for(let s=1;s<t;++s){let t=e[s];t!==r&&(r=t,a=Math.max(s-n,a),n=s)}return Math.max(t-n,a)}tensorShapeFromTensor(e,t,n=!0){if(0===t.length){if(-1===e[0])return[];throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1.")}return BA(e,n)}calculateOutputSize(e){let t=this.valuesShape,n=this.defaultValueShape;Im.validateDefaultValueShape(n,t);let r=this.tensorShapeFromTensor(this.shape,this.shapeShape),a=Im.combineRaggedTensorToTensorShapes(this.raggedRank,r,t);a[0]<0&&(a[0]=e);for(let e=1;e<=this.raggedRank;++e)a[e]<0&&(a[e]=this.getMaxWidth(e));return a}calculateFirstParentOutputIndex(e,t,n){let r=Math.min(e,n),a=[],s=0;for(let e=0;e<r;++e,s+=t)a.push(s);for(let t=r;t<e;++t)a.push(-1);return ja.assert(a.length===e,(()=>"Final length of result must be equal to firstDimension.")),a}calculateOutputIndexRowSplit(e,t,n,r){let a=e.length,s=[];for(let i=0;i<a-1;++i){let a=e[i+1]-e[i],o=Math.min(r,a),l=t[i];-1===l&&(o=0);for(let e=0;e<o;++e)s.push(l),l+=n;for(let e=0;e<a-o;++e)s.push(-1)}if(a>0&&s.length!==e[a-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,n,r){let a=e.length,s=[];if(0===a)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u<a;++u){let a=e[u];if(a===o)l>=0&&(++i,i<r?l+=n:l=-1);else{if(i=0,o=a,a>=t.length)throw new Error(`Got nextValueRowId=${a} which is not less than ${t.length}`);l=t[a]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,n,r){let a=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case LA.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(a,t,n,r);case LA.ROW_SPLITS:if(a.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${a.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(a,t,n,r);default:throw new Error(`Unsupported partition type: ${LA[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(0===this.rowPartitionTypes.length)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case LA.FIRST_DIM_SIZE:return e[0];case LA.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case LA.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${LA[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let e=n.length-2;e>=0;--e)n[e]=n[e+1]*t[e+1];let r=BA(t,!1),a=ja.getArrayFromDType(this.valuesDType,ja.sizeFromShape(r));if(n[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,n[0],t[0]);for(let e=1;e<=this.raggedRank;++e)s=this.calculateOutputIndex(e-1,s,n[e],t[e]);this.setOutput(this.raggedRank,s,a,r)}return[r,a]}setOutput(e,t,n,r){if(0===n.length)return;let a=this.values,s=n,i=r.slice();i=i.slice(e+1);let o=ja.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&1!==u.length){let e=this.defaultValueShape;Ci((()=>{let t=kl(u,e);u=Bl(t,i).dataSync()}))}let d=0,p=0,h=0;for(let e=0;e<=l;++e){let r=e<l?t[e]:-1;if(r!==h){if(p<h){let e=a.subarray(d*o);PA(s.subarray(p*o),e,(h-p)*o)}if(e>=l){let e=n.length;r=Math.floor(e/o)}if(r>h)if(1===this.defaultValue.length)s.subarray(h*o,r*o).fill(this.defaultValue[0]),h=r;else for(;r>h;){PA(s.slice(h*o),u,o),++h}r<0?(d=e+1,p=h):(d=e,p=h,h=p+1)}else++h}}};function PA(e,t,n){for(let r=0;r<n;r++)e[r]=t[r]}function BA(e,t){let n=[];
2for(let r of e){if(r<0){if(!t)throw new Error(`Dimension ${r} must be >= 0`);if(r<-1)throw new Error(`Dimension ${r} must be >= -1`);r=-1}n.push(r)}return n}function WA(e,t,n,r,a,s,i,o,l,u){return new zA(e,t,n,r,a,s,i,o,l,u).compute()}function VA(e,t,n,r){if(e===t||e<t&&n<0||t<e&&n>1)return ja.makeZerosTypedArray(0,r);let a=Math.abs(Math.ceil((t-e)/n)),s=ja.makeZerosTypedArray(a,r);t<e&&1===n&&(n=-1),s[0]=e;for(let e=1;e<s.length;e++)s[e]=s[e-1]+n;return s}var UA=S$((e=>1/Math.sqrt(e))),GA=T$(Br,UA),HA={kernelName:Br,backendName:"cpu",kernelFunc:GA};function jA(e,t,n,r,a,s,i,o,l,u){let d=[r/a,a],p=e.values,h=t.values;if(0===r)return Bo(n,t.dtype);let c=l instanceof _s?l:Bo(d,t.dtype);"string"==typeof l||"number"==typeof l?c.values.fill(l):"boolean"==typeof l&&c.values.fill(+l);for(let e=0;e<s;e++){let s=[],l=0;for(let t=0;t<i;t++){let n=p[e*i+t];s.push(n),l+=n*o[t]}if(l<0||l>=r/a)throw new Error(`Invalid indices: ${s} does not index into ${n}`);for(let n=0;n<a;n++)u?c.values[l*a+n]+=h[e*a+n]:c.values[l*a+n]=0===t.rank?h[0]:h[e*a+n]}return c}var qA=S$((e=>1/(1+Math.exp(-e)))),KA=N$(Yr,(e=>1/(1+Math.exp(-e)))),XA={kernelName:Yr,backendName:"cpu",kernelFunc:KA};function YA(e,t,n,r,a){let s=Zf.isSliceContinous(r,t,n),i=ja.sizeFromShape(n),o=ja.computeStrides(r);if(s){let n=Zf.computeFlatOffset(t,o);return"string"===a?e.slice(n,n+i):e.subarray(n,n+i)}let l=Bo(r,a,"string"===a?Im.fromUint8ToStringArray(e):e),u=Bo(n,a);for(let e=0;e<u.size;++e){let n=u.indexToLoc(e),r=n.map(((e,n)=>e+t[n]));u.set(l.get(...r),...n)}return"string"===a?Im.fromStringArrayToUint8(u.values):u.values}function ZA(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r;YE(a,"slice");let[o,l]=Zf.parseSliceParams(a,s,i);Zf.assertParamsValid(a,o,l);let u=YA(n.data.get(a.dataId).values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,u)}var JA={kernelName:jr,backendName:"cpu",kernelFunc:ZA};function QA(e,t,n,r,a,s,i){let o=t[0],l=s[0],u=new Array(l),d=new Array(o),p=t[1];if(0===l){if(0!==o)throw new Error(Im.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));return[ja.getArrayFromDType(n,0),[0,p],ja.getArrayFromDType(a,0),u,d]}let h=!0,c=0,f=new Array(l).fill(0);for(let t=0;t<o;++t){let n=e[t*p];if(n<0)throw new Error(Im.getSparseFillEmptyRowsNegativeIndexErrorMessage(t,n));if(n>=l)throw new Error(Im.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(t,n,l));++f[n],h=h&&n>=c,c=n}let m=!0;for(let e=0;e<l;++e){let t=0===f[e];u[e]=t,m=m&&!t,f[e]=Math.max(f[e],1),e>0&&(f[e]+=f[e-1])}if(m&&h){let t=e,n=r;for(let e=0;e<o;++e)d[e]=e;return[t,[o,p],n,u,d]}{let t=f[l-1],s=ja.getArrayFromDType(n,t*p),h=ja.getArrayFromDType(a,t),c=new Array(l).fill(0);for(let t=0;t<o;++t){let n=e[t*p],a=c[n],i=(0===n?0:f[n-1])+a;c[n]++;for(let n=0;n<p;++n)s[i*p+n]=e[t*p+n];h[i]=r[t],d[t]=i}for(let e=0;e<l;++e)if(0===c[e]){let t=0===e?0:f[e-1];s[t*p+0]=e;for(let e=1;e<p;++e)s[t*p+e]=0;h[t]=i}return[s,[t,p],h,u,d]}}function eR(e,t,n,r,a){let s=ja.sizeFromShape(r),i=t[0],o=a.length,l=[],u=1,d=-1;for(let e=0;e<o;++e){let t=a[e];if(-1===t){if(-1!==d)throw new Error(Im.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(d,e));d=e,l.push(1)}else{if(t<0)throw new Error(Im.getSparseReshapeNegativeOutputDimErrorMessage(e,t));u*=t,l.push(t)}}if(-1!==d){if(u<=0)throw new Error(Im.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());let e=Math.trunc(s/u);if(u*e!==s)throw new Error(Im.getSparseReshapeInputOutputMultipleErrorMessage(r,l));l[d]=e}if(ja.sizeFromShape(l)!==s)throw new Error(Im.getSparseReshapeInputOutputMismatchErrorMessage(r,l));let p=r.length,h=[];if(p>0){h[p-1]=1;for(let e=p-2;e>=0;--e)h[e]=h[e+1]*r[e+1]}let c=[];if(o>0){c[o-1]=1;for(let e=o-2;e>=0;--e)c[e]=c[e+1]*l[e+1]}let f=ja.getArrayFromDType(n,i*o);for(let t=0;t<i;++t){let n=0;for(let r=0;r<p;++r)n+=e[t*p+r]*h[r];for(let e=0;e<o;++e)f[t*o+e]=Math.trunc(n/c[e]),n%=c[e]}return[f,[i,o],l]}function tR(e,t,n,r,a,s=!1,i=0){let o=r.length,l=[t[0],e.length/t[0]],u=l[1],d=o>0?a[o-1]+1:0;if(d<0)throw new Error(Im.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=t.slice();p[0]=d;let h=p.reduce(((e,t)=>e*t),1),c=ja.getArrayFromDType(n,h);if(0===o)return d>0&&c.fill(i),[c,p];if(d<=0)throw new Error(Im.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let f=0,m=1,g=0,y=a[f];for(;;){let t=0;if(m<o){if(t=a[m],y===t){++m;continue}if(y>=t)throw new Error(Im.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=d)throw new Error(Im.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,d));y>g&&c.fill(i,g*u,y*u);for(let t=f;t<m;++t){let n=r[t];if(n<0||n>=l[0])throw new Error(Im.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(t,r[t],l[0]));for(let t=0;t<u;t++)c[y*u+t]+=e[n*u+t]}if(s)for(let e=0;e<u;e++)c[y*u+e]/=m-f;if(f=m,++m,g=y+1,y=t,m>o)break}return g<d&&c.fill(i,g*u,d*u),[c,p]}var nR=S$((e=>Math.sqrt(e))),rR=N$(Jr,(e=>Math.sqrt(e))),aR={kernelName:Jr,backendName:"cpu",kernelFunc:rR},sR=n$(((e,t)=>{let n=e-t;return n*n})),iR=c$(la,sR),oR={kernelName:la,backendName:"cpu",kernelFunc:iR},lR=S$(((e,t)=>{let{pattern:n,replaceGlobal:r,rewrite:a}=t;return e.replace(new RegExp(n,r?"g":""),a)})),uR=T$(da,lR),dR={kernelName:da,backendName:"cpu",kernelFunc:uR};function pR(e,t,n,r){let a=Bo(e,t.dtype);for(let e=0;e<a.size;e++){let s=a.indexToLoc(e),i=new Array(s.length);for(let e=0;e<i.length;e++)i[e]=s[e]*n[e]+r[e];
2a.set(t.get(...i),...s)}return a}var hR=class{constructor(e,t,n,r,a,s){this.separator=ja.encodeString(e),this.nGramWidths=t,this.leftPad=ja.encodeString(n),this.rightPad=ja.encodeString(r),this.padWidth=a,this.preserveShort=s}getPadWidth(e){return Math.min(this.padWidth<0?e-1:this.padWidth,e-1)}getNumNGrams(e,t){let n=this.getPadWidth(t);return Math.max(0,e+2*n-t+1)}createNGrams(e,t,n,r,a,s){for(let i=0;i<a;++i){let o=this.getPadWidth(s),l=Math.max(0,o-i),u=Math.max(0,o-(a-(i+1))),d=s-(l+u),p=t+(l>0?0:i-o),h=0;h+=l*this.leftPad.length;for(let t=0;t<d;++t)h+=e[p+t].length;h+=u*this.rightPad.length,h+=(l+u+d-1)*this.separator.length,n[r+i]=new Uint8Array(h);let c=n[r+i],f=0,m=e=>e.forEach((e=>c[f++]=e));for(let e=0;e<l;++e)m(this.leftPad),m(this.separator);for(let t=0;t<d-1;++t)m(e[p+t]),m(this.separator);if(d>0){m(e[p+d-1]);for(let e=0;e<u;++e)m(this.separator),m(this.rightPad)}else{for(let e=0;e<u-1;++e)m(this.rightPad),m(this.separator);m(this.rightPad)}}}compute(e,t){let n=e.length,r=t.length;if(r>0){let e=t[0];if(0!==e)throw new Error(`First split value must be 0, got ${e}`);for(let a=1;a<r;++a){let r=t[a]>=e;if(r=r&&t[a]<=n,!r)throw new Error(`Invalid split value ${t[a]}, must be in [${e}, ${n}]`);e=t[a]}if(e!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${e}`)}let a=r-1,s=ja.getArrayFromDType("int32",r);if(0===n||0===r){let e=new Array(n);for(let e=0;e<=a;++e)s[e]=0;return[e,s]}s[0]=0;for(let e=1;e<=a;++e){let n=t[e]-t[e-1],r=0;this.nGramWidths.forEach((e=>{r+=this.getNumNGrams(n,e)})),this.preserveShort&&n>0&&0===r&&(r=1),s[e]=s[e-1]+r}let i=new Array(s[a]);for(let n=0;n<a;++n){let r=t[n],a=s[n];if(this.nGramWidths.forEach((s=>{let o=t[n+1]-t[n],l=this.getNumNGrams(o,s);this.createNGrams(e,r,i,a,l,s),a+=l})),this.preserveShort&&a===s[n]){let s=t[n+1]-t[n];if(0===s)continue;let o=s+2*this.padWidth;this.createNGrams(e,r,i,a,1,o)}}return[i,s]}};function cR(e,t,n,r,a,s,i,o){return new hR(n,r,a,s,i,o).compute(e,t)}function fR(e,t,n,r){if(!e.length)return;if(0===t.length){for(let t=0;t<e.length;++t)r.push(e.subarray(t,t+1));return}if(1===t.length){let a=t[0],s=e.indexOf(a);for(;-1!==s;){let t=e.subarray(0,s);(!n||0!==t.length)&&r.push(t),s=(e=e.subarray(s+1)).indexOf(a)}return void((!n||0!==e.length)&&r.push(e))}let a=0;for(let s=0;s<e.length+1;s++)if(s===e.length||-1!==t.indexOf(e[s])){let t=e.subarray(a,s);(!n||0!==t.length)&&r.push(t),a=s+1}}function mR(e,t,n){let r=e.length,a=[],s=0,i=0,o=new Array(r);for(let l=0;l<r;++l){let r=a.length;fR(e[l],t,n,a);let u=a.length-r;o[l]=u,s+=u,i=Math.max(i,u)}let l=ja.getArrayFromDType("int32",2*s),u=new Array(s),d=[r,i],p=0;for(let e=0;e<r;++e)for(let t=0;t<o[e];++t)l[2*p]=e,l[2*p+1]=t,u[p]=a[p],++p;return[l,u,d]}function gR(e,t){let n=ja.getArrayFromDType("int32",e.length);for(let r=0;r<e.length;++r)n[r]=ja.fingerPrint64(e[r]).modulo(t).getLowBitsUnsigned();return n}var yR=n$(((e,t)=>e-t)),bR=f$(((e,t,n,r)=>({real:e-n,imag:t-r}))),xR=c$(ma,yR,bR),wR={kernelName:ma,backendName:"cpu",kernelFunc:xR};function vR(e,t){let n=new Array(e.rank);for(let r=0;r<n.length;r++)n[r]=e.shape[r]*t[r];let r=Bo(n,e.dtype);for(let t=0;t<r.values.length;++t){let n=r.indexToLoc(t),a=new Array(e.rank);for(let t=0;t<a.length;t++)a[t]=n[t]%e.shape[t];let s=e.locToIndex(a);r.values[t]=e.values[s]}return r}var kR=(e,t)=>{let n=t.value-e.value;return 0===n?e.index-t.index:n};function IR(e,t,n=0,r=e.length-1){for(;r>n;){if(r-n>600){let a=r-n+1,s=t-n+1,i=Math.log(a),o=.5*Math.exp(2*i/3),l=.5*Math.sqrt(i*o*(a-o)/a)*Math.sign(s-a/2);IR(e,t,Math.max(n,Math.floor(t-s*o/a+l)),Math.min(r,Math.floor(t+(a-s)*o/a+l)))}let a=e[t],s=n,i=r;for(ja.swap(e,n,t),kR(e[r],a)>0&&ja.swap(e,n,r);s<i;){for(ja.swap(e,s,i),s++,i--;kR(e[s],a)<0;)s+=1;for(;kR(e[i],a)>0;)i-=1}0===kR(e[n],a)?ja.swap(e,n,i):(i+=1,ja.swap(e,i,r)),i<=t&&(n=i+1),t<=i&&(r=i-1)}}function SR(e,t,n,r,a){let s=t[t.length-1],[i,o]=[e.length/s,s],l=ja.getTypedArrayFromDType(n,i*r),u=ja.getTypedArrayFromDType("int32",i*r);for(let t=0;t<i;t++){let n=t*o,s=e.subarray(n,n+o),i=new Array(s.length);s.forEach(((e,t)=>i[t]={value:e,index:t})),r<i.length&&(IR(i,r),i=i.slice(0,r)),a&&i.sort(kR);let d=t*r,p=l.subarray(d,d+r),h=u.subarray(d,d+r);for(let e=0;e<r;e++)p[e]=i[e].value,h[e]=i[e].index}let d=t.slice();return d[d.length-1]=r,[Bo(d,n,l),Bo(d,"int32",u)]}
2function NR(e,t,n,r){let a=ja.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let e=0;e<a;e++)s[0]*=n[e];s[1]=n[a];for(let e=a+1;e<n.length;e++)s[2]*=n[e];let i=new Map,o=new Int32Array(n[a]),l=new _s(s,r,e),u=[],d=1===s[0]&&1===s[2];for(let t=0;t<n[a];t++){let n;if(d)n=e[t].toString();else{let e=[];for(let n=0;n<s[0];n++)for(let r=0;r<s[2];r++)e.push(l.get(n,t,r));n=e.join(",")}let r=i.get(n);if(null!=r)o[t]=r;else{let e=i.size;i.set(n,e),o[t]=e,u.push(t)}}let p=s.slice();p[1]=i.size;let h=new _s(p,r);u.forEach(((e,t)=>{for(let n=0;n<s[0];n++)for(let r=0;r<s[2];r++)h.set(l.get(n,e,r),n,t,r)}));let c=n.slice();return c[a]=p[1],{outputValues:h.values,outputShape:c,indices:o}}var TR="4.21.0";zi("cpu",(()=>new JE),1);var _R=N$(fn,(e=>e>=0?e:Math.exp(e)-1)),CR={kernelName:fn,backendName:"cpu",kernelFunc:_R};function ER(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r;YE([a],"leakyRelu");let i=ja.sizeFromShape(a.shape),o=n.data.get(a.dataId).values,l=ja.getTypedArrayFromDType("float32",i);for(let e=0;e<o.length;e++)l[e]=o[e]<0?s*o[e]:o[e];return n.makeTensorInfo(a.shape,"float32",l)}var $R={kernelName:Ln,backendName:"cpu",kernelFunc:ER},AR=n$(((e,t)=>e<0?t*e:e));function RR(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t;YE([r,a],"prelu");let s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,[o,l]=AR(r.shape,a.shape,s,i,"float32");return n.makeTensorInfo(l,"float32",o)}var FR={kernelName:Ir,backendName:"cpu",kernelFunc:RR},DR=N$(Ar,(e=>Math.max(0,e))),MR={kernelName:Ar,backendName:"cpu",kernelFunc:DR},OR=N$(Lr,(e=>Math.min(Math.max(0,e),6))),LR={kernelName:Lr,backendName:"cpu",kernelFunc:OR};function zR(e,t,n,r,a){if("linear"===n)return i$({inputs:{x:t},backend:e});if("relu"===n)return DR({inputs:{x:t},backend:e});if("elu"===n)return _R({inputs:{x:t},backend:e});if("relu6"===n)return OR({inputs:{x:t},backend:e});if("prelu"===n)return RR({inputs:{x:t,alpha:r},backend:e});if("leakyrelu"===n)return ER({inputs:{x:t},backend:e,attrs:{alpha:a}});if("sigmoid"===n)return KA({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function PR(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=ja.sizeFromShape(a.shape),o=ja.inferFromImplicitShape(s,i),l=ja.sizeFromShape(o);ja.assert(i===l,(()=>`The new shape (${o}) has ${l} elements and the old shape (${a.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`)),n.incRef(a.dataId);let u=n.data.get(a.dataId);if(null!=u.complexTensorInfos){let e=u.complexTensorInfos.real,t=u.complexTensorInfos.imag;e.shape=o,t.shape=o}return{dataId:a.dataId,shape:o,dtype:a.dtype}}var BR={kernelName:Rr,backendName:"cpu",kernelFunc:PR};function WR(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;YE([a,s],"matMul");let l=a.shape.length,u=s.shape.length,d=i?a.shape[l-2]:a.shape[l-1],p=o?s.shape[u-1]:s.shape[u-2],h=i?a.shape[l-1]:a.shape[l-2],c=o?s.shape[u-2]:s.shape[u-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),g=ja.sizeFromShape(f),y=ja.sizeFromShape(m),b=du.assertAndGetBroadcastShape(a.shape.slice(0,-2),s.shape.slice(0,-2)).concat([h,c]);ja.assert(d===p,(()=>`Error in matMul: inner shapes (${d}) and (${p}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`));let x=o?[y,c,p]:[y,p,c],w=PR({inputs:{x:a},backend:n,attrs:{shape:i?[g,d,h]:[g,h,d]}}),v=PR({inputs:{x:s},backend:n,attrs:{shape:x}}),k=i?w.shape[1]:w.shape[2],I=i?w.shape[2]:w.shape[1],S=o?v.shape[1]:v.shape[2],N=Math.max(g,y),T=n.data.get(w.dataId).values,_=n.data.get(v.dataId).values,C=ja.computeStrides(w.shape),E=ja.computeStrides(v.shape),[$,A,R]=i?[C[0],1,C[1]]:[C[0],C[1],1],[F,D,M]=o?[1,E[1],E[0]]:[E[1],1,E[0]],O=I*S,L=Bo([N,I,S],w.dtype),z=L.values,P=n.blockSize;for(let e=0;e<N;e++){let t=e%g,n=e%y;for(let r=0;r<I;r+=P){let a=Math.min(r+P,I);for(let s=0;s<S;s+=P){let i=Math.min(s+P,S);for(let o=0;o<k;o+=P){let l=Math.min(o+P,k);for(let u=r;u<a;u++)for(let r=s;r<i;r++){let a=0;for(let e=o;e<l;e++){a+=T[t*$+u*A+e*R]*_[e*F+r*D+n*M]}z[e*O+(u*S+r)]+=a}}}}}return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(v),n.makeTensorInfo(b,L.dtype,L.values)}var VR={kernelName:Rt,backendName:"cpu",kernelFunc:WR};var UR={kernelName:$a,backendName:"cpu",kernelFunc:function(e){let t,n,r,{inputs:a,backend:s,attrs:i}=e,{a:o,b:l,bias:u,preluActivationWeights:d}=a,{transposeA:p,transposeB:h,activation:c,leakyreluAlpha:f}=i,m=[];
2t=WR({inputs:{a:o,b:l},attrs:{transposeA:p,transposeB:h},backend:s}),u&&(n=y$({inputs:{a:t,b:u},backend:s}),m.push(t),t=n),c&&(r=zR(s,t,c,d,f),m.push(t),t=r);for(let e of m)s.disposeIntermediateTensorInfo(e);return t}},GR=N$(mt,(e=>Math.acos(e))),HR={kernelName:mt,backendName:"cpu",kernelFunc:GR},jR=N$(gt,(e=>Math.acosh(e))),qR={kernelName:gt,backendName:"cpu",kernelFunc:jR};var KR={kernelName:bt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,r=t;YE(t,"addN");let a=r.map((e=>n.data.get(e.dataId).values)),s=Bo(r[0].shape,r[0].dtype),i=s.values;for(let e=0;e<r.length;e++){let t=a[e];for(let e=0;e<i.length;e++)i[e]+=t[e]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}};var XR={kernelName:xt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;YE(a,"all");let o=ja.parseAxisParam(s,a.shape),l=o,u=Im.getAxesPermutation(l,a.shape.length),d=a;null!=u&&(d=_A({inputs:{x:a},backend:n,attrs:{perm:u}}),l=Im.getInnerMostAxes(l.length,a.shape.length)),Im.assertAxesAreInnerMostDims("all",l,d.shape.length);let[p,h]=Im.computeOutAndReduceShapes(d.shape,l),c=ja.sizeFromShape(h),f=ja.makeZerosTypedArray(ja.sizeFromShape(p),d.dtype),m=n.data.get(d.dataId).values;for(let e=0;e<f.length;++e){let t=e*c,n=m[t];for(let e=0;e<c;++e){let r=m[t+e];n=n&&r}f[e]=n}null!=u&&n.disposeIntermediateTensorInfo(d);let g=n.makeTensorInfo(p,d.dtype,f);if(i){let e=PR({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(p,o)}});return n.disposeIntermediateTensorInfo(g),e}return g}};var YR={kernelName:wt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;YE(a,"any");let o=ja.parseAxisParam(s,a.shape),l=o,u=Im.getAxesPermutation(l,a.shape.length),d=a;null!=u&&(d=_A({inputs:{x:a},backend:n,attrs:{perm:u}}),l=Im.getInnerMostAxes(l.length,a.shape.length)),Im.assertAxesAreInnerMostDims("any",l,d.shape.length);let[p,h]=Im.computeOutAndReduceShapes(d.shape,l),c=ja.sizeFromShape(h),f=ja.makeZerosTypedArray(ja.sizeFromShape(p),d.dtype),m=n.data.get(d.dataId).values;for(let e=0;e<f.length;++e){let t=e*c,n=m[t];for(let e=0;e<c;++e){let r=m[t+e];n=n||r}f[e]=n}null!=u&&n.disposeIntermediateTensorInfo(d);let g=n.makeTensorInfo(p,d.dtype,f);if(i){let e=PR({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(p,o)}});return n.disposeIntermediateTensorInfo(g),e}return g}};var ZR={kernelName:vt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;YE(a,"argMax");let i=ja.parseAxisParam(s,a.shape),o=Im.getAxesPermutation(i,a.shape.length),l=a,u=[];null!=o&&(l=_A({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Im.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],Im.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[d,p]=Im.computeOutAndReduceShapes(l.shape,i),h=ja.sizeFromShape(d),c=ja.makeZerosTypedArray(h,"int32"),f=ja.sizeFromShape(p),m=n.data.get(l.dataId).values;for(let e=0;e<c.length;++e){let t=e*f,n=m[t],r=0;for(let e=0;e<f;++e){let a=m[t+e];a>n&&(n=a,r=e)}c[e]=r}return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(d,"int32",c)}};var JR={kernelName:kt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r;YE(a,"argMin");let i=ja.parseAxisParam(s,a.shape),o=Im.getAxesPermutation(i,a.shape.length),l=a,u=[];null!=o&&(l=_A({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Im.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],Im.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[d,p]=Im.computeOutAndReduceShapes(l.shape,i),h=ja.sizeFromShape(d),c=ja.makeZerosTypedArray(h,"int32"),f=ja.sizeFromShape(p),m=n.data.get(l.dataId).values;for(let e=0;e<c.length;++e){let t=e*f,n=m[t],r=0;for(let e=0;e<f;++e){let a=m[t+e];a<n&&(n=a,r=e)}c[e]=r}return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(d,"int32",c)}},QR=N$(It,(e=>Math.asin(e))),eF={kernelName:It,backendName:"cpu",kernelFunc:QR},tF=N$(St,(e=>Math.asinh(e))),nF={kernelName:St,backendName:"cpu",kernelFunc:tF},rF=N$(Nt,(e=>Math.atan(e))),aF={kernelName:Nt,backendName:"cpu",kernelFunc:rF},sF=n$(((e,t)=>Math.atan2(e,t))),iF=c$(_t,sF),oF={kernelName:_t,backendName:"cpu",kernelFunc:iF},lF=N$(Tt,(e=>Math.atanh(e))),uF={kernelName:Tt,backendName:"cpu",kernelFunc:lF};function dF(e,t,n,r,a,s){let i=a.strideHeight,o=a.strideWidth,l=a.dilationHeight,u=a.dilationWidth,d=a.effectiveFilterHeight,p=a.effectiveFilterWidth,h=a.padInfo.top,c=a.padInfo.left,f="max"===s?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,m=Bo(a.outShape,n),g=m.values,y=a.outShape[1]*a.outShape[2]*a.outShape[3],b=a.outShape[2]*a.outShape[3],x=a.outShape[3];for(let t=0;t<a.batchSize;++t){let n=t*y,m=t*r[0];for(let t=0;t<a.inChannels;++t)for(let y=0;y<a.outHeight;++y){let w=y*i-h,v=Math.max(0,w),k=Math.min(a.inHeight,d+w),I=n+y*b;for(let n=0;n<a.outWidth;++n){let i=n*o-c,d=Math.max(0,i),h=Math.min(a.inWidth,p+i),y=f,b=0,w=0;for(let n=v;n<k;n+=l){let a=m+n*r[1];for(let n=d;
2n<h;n+=u){let i=e[a+n*r[2]+t];"max"===s&&i>y?y=i:"avg"===s&&(b+=i,w++)}if(isNaN(y))break}g[I+n*x+t]="avg"===s?b/w:y}}}return m}function pF(e,t,n,r,a=!1,s=!1){let i=Bo(r.outShape,"int32"),o=r.strideHeight,l=r.strideWidth,u=r.dilationHeight,d=r.dilationWidth,p=r.effectiveFilterHeight,h=r.effectiveFilterWidth,c=r.padInfo.top,f=r.padInfo.left,m=Bo(t,n,e);for(let e=0;e<r.batchSize;++e)for(let t=0;t<r.inChannels;++t)for(let n=0;n<r.outHeight;++n){let g=n*o-c,y=g;for(;y<0;)y+=u;let b=Math.min(r.inHeight,p+g);for(let o=0;o<r.outWidth;++o){let p=o*l-f,c=p;for(;c<0;)c+=d;let x=Math.min(r.inWidth,h+p),w=Number.NEGATIVE_INFINITY,v=-1;for(let n=y;n<b;n+=u){let i=n-g;for(let o=c;o<x;o+=d){let l=o-p,u=m.get(e,n,o,t);u>w&&(w=u,v=a?s?((e*r.inHeight+n)*r.inWidth+o)*r.inChannels+t:(n*r.inWidth+o)*r.inChannels+t:i*h+l)}}i.set(v,e,n,o,t)}}return i}function hF(e,t,n,r,a,s){let i=a.strideDepth,o=a.strideHeight,l=a.strideWidth,u=a.dilationDepth,d=a.dilationHeight,p=a.dilationWidth,h=a.effectiveFilterDepth,c=a.effectiveFilterHeight,f=a.effectiveFilterWidth,m=a.padInfo.front,g=a.padInfo.top,y=a.padInfo.left,b="max"===s?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,x=Bo(a.outShape,n),w=x.values,v=a.outShape[1]*a.outShape[2]*a.outShape[3]*a.outShape[4],k=a.outShape[2]*a.outShape[3]*a.outShape[4],I=a.outShape[3]*a.outShape[4],S=a.outShape[4];for(let t=0;t<a.batchSize;++t){let n=t*v,x=t*r[0];for(let t=0;t<a.inChannels;++t)for(let v=0;v<a.outDepth;++v){let N=v*i-m,T=N;for(;T<0;)T+=u;let _=Math.min(a.inDepth,h+N),C=n+v*k;for(let n=0;n<a.outHeight;++n){let i=n*o-g,h=i;for(;h<0;)h+=d;let m=Math.min(a.inHeight,c+i),v=C+n*I;for(let n=0;n<a.outWidth;++n){let i=n*l-y,o=i;for(;o<0;)o+=p;let c=Math.min(a.inWidth,f+i),g=v+n*S,k=b,I=0,N=0;for(let n=T;n<_;n+=u){let a=x+n*r[1];for(let n=h;n<m;n+=d){let i=a+n*r[2];for(let n=o;n<c;n+=p){let a=e[i+n*r[3]+t];if("max"===s&&a>k?k=a:"avg"===s&&(I+=a,N++),isNaN(k))break}if(isNaN(k))break}if(isNaN(k))break}w[g+t]="avg"===s?I/Math.max(N,1):k}}}}return x}var cF={kernelName:Ct,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;YE(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;ja.assert(Im.eitherStridesOrDilationsAreOne(i,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));let u,d=Im.computePool2DInfo(a.shape,s,i,1,o,l);if(1===d.filterWidth&&1===d.filterHeight&&ja.arraysEqual(d.inShape,d.outShape))u=i$({inputs:{x:a},backend:n});else{let e=n.data.get(a.dataId).values,t=ja.computeStrides(a.shape),r=dF(e,a.shape,a.dtype,t,d,"avg");u=n.makeTensorInfo(d.outShape,a.dtype,r.values)}return u}};var fF={kernelName:$t,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;YE(a,"avgPool3d");let d=Im.computePool3DInfo(a.shape,s,i,1,o,l,u),p=hF(n.data.get(a.dataId).values,a.shape,a.dtype,ja.computeStrides(a.shape),d,"avg");return n.makeTensorInfo(p.shape,"float32",p.values)}};var mF={kernelName:At,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;YE([a,s],"avgPool3DGrad");let d=Im.computePool3DInfo(s.shape,i,o,1,l,u),p=d.strideDepth,h=d.strideHeight,c=d.strideWidth,f=d.filterDepth,m=d.filterHeight,g=d.filterWidth,y=d.dilationDepth,b=d.dilationHeight,x=d.dilationWidth,w=d.effectiveFilterDepth,v=d.effectiveFilterHeight,k=d.effectiveFilterWidth,I=w-1-d.padInfo.front,S=k-1-d.padInfo.left,N=v-1-d.padInfo.top,T=Bo(s.shape,"float32"),_=1/(f*m*g),C=n.bufferSync(a);for(let e=0;e<d.batchSize;++e)for(let t=0;t<d.inChannels;++t)for(let n=0;n<d.inDepth;++n)for(let r=0;r<d.inHeight;++r)for(let a=0;a<d.inWidth;++a){let s=n-I,i=r-N,o=a-S,l=0;for(let n=0;n<w;n+=y){let r=(s+n)/p;if(!(r<0||r>=d.outDepth||Math.floor(r)!==r))for(let n=0;n<v;n+=b){let a=(i+n)/h;if(!(a<0||a>=d.outHeight||Math.floor(a)!==a))for(let n=0;n<k;n+=x){let s=(o+n)/c;s<0||s>=d.outWidth||Math.floor(s)!==s||(l+=C.get(e,r,a,s,t))}}}T.set(l*_,e,n,r,a,t)}return n.makeTensorInfo(T.shape,T.dtype,T.values)}};var gF={kernelName:Et,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;YE([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=r,d=Im.computePool2DInfo(i.shape,o,l,1,u),p=d.strideHeight,h=d.strideWidth,c=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,g
2=d.dilationWidth,y=d.effectiveFilterHeight,b=d.effectiveFilterWidth,x=b-1-d.padInfo.left,w=y-1-d.padInfo.top,v=Bo(i.shape,"float32"),k=1/(c*f),I=n.data.get(a.dataId).values,S=Bo(a.shape,"float32",I);for(let e=0;e<d.batchSize;++e)for(let t=0;t<d.inChannels;++t)for(let n=0;n<d.inHeight;++n)for(let r=0;r<d.inWidth;++r){let a=n-w,s=r-x,i=0;for(let n=0;n<y;n+=m){let r=(a+n)/p;if(!(r<0||r>=d.outHeight||Math.floor(r)!==r))for(let n=0;n<b;n+=g){let a=(s+n)/h;a<0||a>=d.outWidth||Math.floor(a)!==a||(i+=S.get(e,r,a,t))}}v.set(i*k,e,n,r,t)}return n.makeTensorInfo(v.shape,v.dtype,v.values)}};var yF={kernelName:Tn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,scale:s,offset:i,mean:o,variance:l}=t;ja.assert(o.shape.length===l.shape.length,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),ja.assert(null==i||o.shape.length===i.shape.length,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),ja.assert(null==s||o.shape.length===s.shape.length,(()=>"Batch normalization gradient requires mean and scale to have equal ranks.")),YE([a,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=r;null==u&&(u=.001);let d=n.data.get(a.dataId).values,p=n.data.get(o.dataId).values,h=n.data.get(l.dataId).values,c=s?n.data.get(s.dataId).values:new Float32Array([1]),f=i?n.data.get(i.dataId).values:new Float32Array([0]),m=new Float32Array(d.length),g=f.length,y=c.length,b=h.length,x=p.length,w=0,v=0,k=0,I=0;for(let e=0;e<d.length;++e)m[e]=f[w++]+(d[e]-p[v++])*c[k++]/Math.sqrt(h[I++]+u),w>=g&&(w=0),v>=x&&(v=0),k>=y&&(k=0),I>=b&&(I=0);return n.makeTensorInfo(a.shape,a.dtype,m)}};var bF={kernelName:Ft,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;YE([a],"batchToSpaceND");let o=s.reduce(((e,t)=>e*t)),l=Im.getReshaped(a.shape,s,o),u=Im.getPermuted(l.length,s.length),d=Im.getReshapedPermuted(a.shape,s,o),p=Im.getSliceBeginCoords(i,s.length),h=Im.getSliceSize(d,i,s.length),c=PR({inputs:{x:a},backend:n,attrs:{shape:l}}),f=_A({inputs:{x:c},backend:n,attrs:{perm:u}}),m=PR({inputs:{x:f},backend:n,attrs:{shape:d}}),g=ZA({inputs:{x:m},backend:n,attrs:{begin:p,size:h}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}};var xF={kernelName:Dt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=x$(n.data.get(a.dataId).values,n.data.get(s.dataId).values,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,o)}};var wF={kernelName:Lt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{s0:r,s1:a}=t,s=n.data.get(r.dataId).values,i=n.data.get(a.dataId).values,o=Im.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}},vF=N$(Bt,((e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e})),kF={kernelName:Bt,backendName:"cpu",kernelFunc:vF},IF={kernelName:Vt,backendName:"cpu",kernelFunc:e=>{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(ja.sizeFromShape(t.shape)),a=n.data.get(t.dataId),s=a.complexTensorInfos.real,i=a.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let e=0;e<o.length;e++){let t=o[e],n=l[e];r[e]=Math.hypot(t,n)}return n.makeOutput(r,t.shape,"float32")}};function SF(e){let{inputs:t,backend:n}=e,{input:r}=t,a=n.data.get(r.dataId).complexTensorInfos.imag,s=n.data.get(a.dataId).values;return n.makeTensorInfo(a.shape,a.dtype,s)}var NF={kernelName:Fn,backendName:"cpu",kernelFunc:SF};function TF(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=ja.parseAxisParam(a,t[0].shape)[0],i=t.map((e=>e.shape));Im.assertParamsConsistent(i,s);let o=Im.computeOutShape(t.map((e=>e.shape)),s);if(0===ja.sizeFromShape(o))return n.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter((e=>ja.sizeFromShape(e.shape)>0));if(1===l.length)return i$({inputs:{x:l[0]},backend:n});if("complex64"===l[0].dtype){let e=l.map((e=>l$({inputs:{input:e},backend:n}))),t=l.map((e=>SF({inputs:{input:e},backend:n}
2))),r=TF({inputs:e,backend:n,attrs:{axis:s}}),a=TF({inputs:t,backend:n,attrs:{axis:s}}),i=r$({inputs:{real:r,imag:a},backend:n});return e.forEach((e=>n.disposeIntermediateTensorInfo(e))),t.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(a),i}let u=l.map((e=>{let t=[-1,ja.sizeFromShape(e.shape.slice(s))];return PR({inputs:{x:e},backend:n,attrs:{shape:t}})})),d=u.map((e=>({vals:n.data.get(e.dataId).values,shape:e.shape})));o=Im.computeOutShape(u.map((e=>e.shape)),1);let p=1===u[0].shape[0],h=$$(d,o,t[0].dtype,p),c=Im.computeOutShape(l.map((e=>e.shape)),s),f=n.makeTensorInfo(c,t[0].dtype,h);return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),f}var _F={kernelName:Ut,backendName:"cpu",kernelFunc:TF};function CF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:d}=r;YE([a,s],"conv2d");let p=Im.convertConv2DDataFormat(l),h=Im.computeConv2DInfo(a.shape,s.shape,i,u,o,d,!1,p),c=h.filterHeight,f=h.filterWidth,m=h.dilationHeight,g=h.dilationWidth,y=h.padInfo.left,b=h.padInfo.top,x="channelsLast"===h.dataFormat,w=new _s(h.outShape,a.dtype),v=ja.computeStrides(a.shape),k=ja.computeStrides(s.shape),I=v[0],S=x?v[1]:v[2],N=x?v[2]:1,T=x?1:v[1],_=w.strides[0],C=x?w.strides[1]:w.strides[2],E=x?w.strides[2]:1,$=x?1:w.strides[1],A=n.data.get(a.dataId).values,R=n.data.get(s.dataId).values,F=w.values;for(let e=0;e<h.batchSize;++e){let t=e*I,n=e*_;for(let e=0;e<h.outHeight;++e){let r=n+e*C,a=e*h.strideHeight-b;for(let e=0;e<c;++e){let n=a+e*m;if(n<0||n>=h.inHeight)continue;let s=e*k[0],i=t+n*S;for(let e=0;e<h.outWidth;++e){let t=r+e*E,n=e*h.strideWidth-y;for(let e=0;e<f;++e){let r=n+e*g;if(r<0||r>=h.inWidth)continue;let a=i+r*N,o=s+e*k[1];for(let e=0;e<h.inChannels;++e){let n=A[a+e*T];for(let e=0;e<h.outChannels;++e)F[t+e*$]+=n*R[o+e];o+=h.outChannels}}}}}}return n.makeTensorInfo(w.shape,w.dtype,F)}var EF={kernelName:Gt,backendName:"cpu",kernelFunc:CF};var $F={kernelName:Ht,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:d}=r;YE([a,s],"conv2dBackpropFilter");let p=Im.convertConv2DDataFormat(l),h=Im.computeConv2DInfo(a.shape,d,i,1,o,u,!1,p),{strideHeight:c,strideWidth:f,filterHeight:m,filterWidth:g}=h,y="channelsLast"===h.dataFormat,b=new _s(h.filterShape,"float32"),x=h.padInfo.left,w=h.padInfo.top,v=n.data.get(a.dataId).values,k=n.data.get(s.dataId).values,I=new _s(a.shape,a.dtype,v),S=new _s(s.shape,s.dtype,k);for(let e=0;e<m;++e){let t=Math.max(0,Math.ceil((w-e)/c)),n=Math.min(h.outHeight,(h.inHeight+w-e)/c);for(let r=0;r<g;++r){let a=Math.max(0,Math.ceil((x-r)/f)),s=Math.min(h.outWidth,(h.inWidth+x-r)/f);for(let i=0;i<h.inChannels;++i)for(let o=0;o<h.outChannels;++o){let l=0;for(let u=0;u<h.batchSize;++u)for(let d=t;d<n;++d){let t=e+d*c-w;for(let e=a;e<s;++e){let n=r+e*f-x;l+=y?I.get(u,t,n,i)*S.get(u,d,e,o):I.get(u,i,t,n)*S.get(u,o,d,e)}}b.set(l,e,r,i,o)}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}};var AF={kernelName:jt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}=r;YE([a,s],"conv2dBackpropInput");let p=ja.computeStrides(s.shape),h=ja.computeStrides(a.shape),c=Im.convertConv2DDataFormat(u),f=Im.computeConv2DInfo(i,s.shape,o,1,l,d,!1,c),m=new _s(f.inShape,"float32"),g=m.values,y=n.data.get(a.dataId).values,b=n.data.get(s.dataId).values,[x,w,v]=p,{batchSize:k,filterHeight:I,filterWidth:S,inChannels:N,inHeight:T,inWidth:_,outChannels:C,outHeight:E,outWidth:$,strideHeight:A,strideWidth:R}=f;c=f.dataFormat;let F=I-1-f.padInfo.top,D=S-1-f.padInfo.left,M="channelsLast"===c,O=m.strides[0],L=M?m.strides[1]:m.strides[2],z=M?m.strides[2]:1,P=M?1:m.strides[1],B=h[0],W=M?h[1]:h[2],V=M?h[2]:1,U=M?1:h[1];for(let e=0;e<k;++e)for(let t=0;t<N;++t)for(let n=0;n<T;++n){let r=n-F,a=Math.max(0,Math.ceil(r/A)),s=Math.min(E,(I+r)/A);for(let i=0;i<_;++i){let o=i-D,l=Math.max(0,Math.ceil(o/R)),u=Math.min($,(S+o)/R),d=0;for(let n=a;n<s;
vendor: 3,943 bytes, line 2
2++n){let a=n*A-r;for(let r=l;r<u;++r){let s=B*e+W*n+V*r,i=x*(I-1-a)+w*(S-1-(r*R-o))+v*t;for(let e=0;e<C;++e){d+=y[s+U*e]*b[i+e]}}}g[O*e+L*n+z*i+P*t]=d}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}};var RF={kernelName:qt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;YE([a,s],"conv3d");let u=Im.computeConv3DInfo(a.shape,s.shape,i,l,o),{filterDepth:d,filterHeight:p,filterWidth:h,dilationDepth:c,dilationHeight:f,dilationWidth:m,padInfo:g}=u,y=g.front,b=g.left,x=g.top,w=new _s(u.outShape,a.dtype),v=n.data.get(a.dataId).values,k=n.data.get(s.dataId).values,I=w.values,S=ja.computeStrides(a.shape),N=ja.computeStrides(s.shape);for(let e=0;e<u.batchSize;++e){let t=e*S[0],n=e*w.strides[0];for(let e=0;e<u.outDepth;++e){let r=n+e*w.strides[1],a=e*u.strideDepth-y;for(let e=0;e<d;++e){let n=a+e*c;if(n<0||n>=u.inDepth)continue;let s=e*N[0],i=t+n*S[1];for(let e=0;e<u.outHeight;++e){let t=r+e*w.strides[2],n=e*u.strideHeight-x;for(let e=0;e<p;++e){let r=n+e*f;if(r<0||r>=u.inHeight)continue;let a=s+e*N[1],o=i+r*S[2];for(let e=0;e<u.outWidth;++e){let n=t+e*u.outChannels,r=e*u.strideWidth-b;for(let e=0;e<h;++e){let t=r+e*m;if(t<0||t>=u.inWidth)continue;let s=a+e*N[2],i=o+t*u.inChannels,l=s;for(let e=0;e<u.inChannels;++e){let t=v[i+e];for(let e=0;e<u.outChannels;++e)I[n+e]+=t*k[l+e];l+=u.outChannels}}}}}}}}return n.makeTensorInfo(w.shape,w.dtype,w.values)}};var FF={kernelName:Kt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r;YE([a,s],"conv3dBackpropFilterV2");let u=ja.computeStrides(a.shape),d=ja.computeStrides(s.shape),p=Im.computeConv3DInfo(a.shape,l,i,1,o),h=p.strideDepth,c=p.strideHeight,f=p.strideWidth,m=p.filterDepth,g=p.filterHeight,y=p.filterWidth,b=new _s(p.filterShape,"float32"),x=b.values,[w,v,k,I]=b.strides,S=n.data.get(s.dataId).values,[N,T,_,C]=d,E=n.data.get(a.dataId).values,[$,A,R,F]=u,D=p.padInfo.front,M=p.padInfo.left,O=p.padInfo.top;for(let e=0;e<m;++e){let t=Math.max(0,Math.ceil((D-e)/h)),n=Math.min(p.outDepth,(p.inDepth+D-e)/h),r=e*w;for(let a=0;a<g;++a){let s=Math.max(0,Math.ceil((O-a)/c)),i=Math.min(p.outHeight,(p.inHeight+O-a)/c),o=a*v+r;for(let r=0;r<y;++r){let l=Math.max(0,Math.ceil((M-r)/f)),u=Math.min(p.outWidth,(p.inWidth+M-r)/f),d=r*k+o;for(let o=0;o<p.inChannels;++o){let m=o*I+d;for(let d=0;d<p.outChannels;++d){let g=0;for(let m=0;m<p.batchSize;++m){let p=m*$,y=m*N;for(let m=t;m<n;++m){let t=(e+m*h-D)*A+p,n=m*T+y;for(let e=s;e<i;++e){let s=(a+e*c-O)*R+t,i=e*_+n;for(let e=l;e<u;++e){let t=e*C+i;g+=E[(r+e*f-M)*F+s+o]*S[t+d]}}}}x[m+d]=g}}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}};var DF={kernelName:Xt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r;YE([a],"conv3dBackpropInputV2");let u=ja.computeStrides(a.shape),d=ja.computeStrides(s.shape),p=Im.computeConv3DInfo(l,s.shape,o,1,i),h=new _s(p.inShape,"float32"),c=h.values,[f,m,g,y]=h.strides,b=n.data.get(a.dataId).values,[x,w,v,k]=u,I=n.data.get(s.dataId).values,[S,N,T,_]=d,{batchSize:C,filterDepth:E,filterHeight:$,filterWidth:A,inChannels:R,inDepth:F,inHeight:D,inWidth:M,outChannels:O,outDepth:L,outHeight:z,outWidth:P,strideDepth:B,strideHeight:W,strideWidth:V}=p,U=E-1-p.padInfo.front,G=$-1-p.padInfo.top,H=A-1-p.padInfo.left;for(let e=0;e<C;++e)for(let t=0;t<R;++t)for(let n=0;n<F;++n){let r=n-U,a=Math.max(0,Math.ceil(r/B)),s=Math.min(L,(E+r)/B);for(let i=0;i<D;++i){let o=i-G,l=Math.max(0,Math.ceil(o/W)),u=Math.min(z,($+o)/W);for(let d=0;d<M;++d){let p=d-H,h=Math.max(0,Math.ceil(p/V)),C=Math.min(P,(A+p)/V),R=0;for(let n=a;n<s;++n){let a=n*B-r;for(let r=l;r<u;++r){let s=r*W-o;for(let i=h;i<C;++i){let o=x*e+w*n+v*r+k*i,l=S*(E-1-a)+N*($-1-s)+T*(A-1-(i*V-p))+_*t;for(let e=0;e<O;++e){R+=b[o+e]*I[l+e]}}}}c[f*e+m*n+g*i+y*d+t]=R}}}return n.makeTensorInfo(h.shape,h.dtype,h.values)}}
2,MF=N$(Yt,(e=>Math.cos(e))),OF={kernelName:Yt,backendName:"cpu",kernelFunc:MF},LF=N$(Zt,(e=>Math.cosh(e))),zF={kernelName:Zt,backendName:"cpu",kernelFunc:LF};var PF={kernelName:en,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,[d,p,h,c]=a.shape,f=s.shape[0],[m,g]=o,y=Bo([f,m,g,c],"float32"),b=n.data.get(s.dataId).values,x=n.data.get(i.dataId).values,w=n.data.get(a.dataId).values,v=ja.computeStrides(a.shape),k=ja.computeStrides(y.shape);for(let e=0;e<f;e++){let t=4*e,n=b[t],r=b[t+1],a=b[t+2],s=b[t+3],i=x[e];if(i>=d)continue;let o=m>1?(a-n)*(p-1)/(m-1):0,f=g>1?(s-r)*(h-1)/(g-1):0;for(let t=0;t<m;t++){let d=m>1?n*(p-1)+t*o:.5*(n+a)*(p-1);if(d<0||d>p-1)for(let n=0;n<g;n++)for(let r=0;r<c;r++){let a=r+n*k[2]+t*k[1]+e*k[0];y.values[a]=u}else if("bilinear"===l){let n=Math.floor(d),a=Math.ceil(d),o=d-n;for(let l=0;l<g;l++){let d=g>1?r*(h-1)+l*f:.5*(r+s)*(h-1);if(d<0||d>h-1){for(let n=0;n<c;n++){let r=n+l*k[2]+t*k[1]+e*k[0];y.values[r]=u}continue}let p=Math.floor(d),m=Math.ceil(d),b=d-p;for(let r=0;r<c;r++){let s=r+p*v[2]+n*v[1]+i*v[0],u=w[s];s=r+m*v[2]+n*v[1]+i*v[0];let d=w[s];s=r+p*v[2]+a*v[1]+i*v[0];let h=w[s];s=r+m*v[2]+a*v[1]+i*v[0];let c=u+(d-u)*b,f=h+(w[s]-h)*b;s=r+l*k[2]+t*k[1]+e*k[0],y.values[s]=c+(f-c)*o}}}else for(let n=0;n<g;++n){let a=g>1?r*(h-1)+n*f:.5*(r+s)*(h-1);if(a<0||a>h-1){for(let r=0;r<c;r++){let a=r+n*k[2]+t*k[1]+e*k[0];y.values[a]=u}continue}let o=Math.round(a),l=Math.round(d);for(let r=0;r<c;r++){let a=r+o*v[2]+l*v[1]+i*v[0],s=r+n*k[2]+t*k[1]+e*k[0];y.values[s]=w[a]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}};var BF={kernelName:Jt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;YE(a,"cumprod");let l=Im.getAxesPermutation([s],a.shape.length),u=a;null!=l&&(u=_A({inputs:{x:a},backend:n,attrs:{perm:l}}));let d=Im.getInnerMostAxes(1,a.shape.length)[0];if(d!==u.shape.length-1)throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${d}`);let p=Ws(u.dtype,"int32"),h=ja.makeOnesTypedArray(ja.sizeFromShape(u.shape),p),c=n.data.get(u.dataId).values,f=u.shape[u.shape.length-1],m=o?(e,t)=>e+f-t-1:(e,t)=>e+t;for(let e=0;e<c.length;e+=f)for(let t=0;t<f;t++){let n=m(e,t);if(0===t)h[n]=i?1:c[n];else{let r=m(e,t-1);h[n]=i?c[r]*h[r]:c[n]*h[r]}}let g=n.makeTensorInfo(u.shape,p,h);if(null!=l){let e=_A({inputs:{x:g},backend:n,attrs:{perm:Im.getUndoAxesPermutation(l)}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),e}return g}};var WF={kernelName:Qt,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;YE(a,"cumsum");let l=Im.getAxesPermutation([s],a.shape.length),u=a;null!=l&&(u=_A({inputs:{x:a},backend:n,attrs:{perm:l}}));let d=Im.getInnerMostAxes(1,a.shape.length)[0];if(d!==u.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${d}`);let p=Ws(u.dtype,"int32"),h=ja.makeZerosTypedArray(ja.sizeFromShape(u.shape),p),c=n.data.get(u.dataId).values,f=u.shape[u.shape.length-1],m=o?(e,t)=>e+f-t-1:(e,t)=>e+t;for(let e=0;e<c.length;e+=f)for(let t=0;t<f;t++){let n=m(e,t);if(0===t)h[n]=i?0:c[n];else{let r=m(e,t-1);h[n]=i?c[r]+h[r]:c[n]+h[r]}}let g=n.makeTensorInfo(u.shape,p,h);if(null!=l){let e=_A({inputs:{x:g},backend:n,attrs:{perm:Im.getUndoAxesPermutation(l)}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),e}return g}};var VF={kernelName:tn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(1===a.shape.length){let e=x$(n.data.get(a.dataId).values,n.data.get(s.dataId).values,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,e)}if(2===a.shape.length){let e=w$(n.bufferSync(a),n.bufferSync(s),i,o);return n.makeTensorInfo(e.shape,s.dtype,e.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}};var UF={kernelName:nn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r;ja.assert("NHWC"===i,(()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`));let o=a.shape[0],l=a.shape[1],u=a.shape[2],d=a.shape[3],p=l*s,h=u*s,c=d/(s*s),f=n.data.get(a.dataId).values,m=new Float32Array(o*p*h*c),g=0;for(let e=0;e<o;++e)for(let t=0;t<p;++t){let n=Math.floor(t/s),r=t%s;for(let t=0;t<h;++t){let a=Math.floor(t/s),i=(r*s+t%s)*c;for(let t=0;t<c;
2++t){let r=t+i+d*(a+u*(n+l*e));m[g++]=f[r]}}}return n.makeTensorInfo([o,p,h,c],a.dtype,m)}};function GF(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=r;YE([a,s],"depthwiseConv2DNative");let d=ja.computeStrides(a.shape),p=ja.computeStrides(s.shape),h=l;null==h&&(h=[1,1]),ja.assert(Im.eitherStridesOrDilationsAreOne(i,h),(()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${h}'`));let c=Im.computeConv2DInfo(a.shape,s.shape,i,h,o,u,!0),{filterHeight:f,filterWidth:m,dilationHeight:g,dilationWidth:y,padInfo:b}=c,x=b.left,w=b.top,v=c.outChannels/c.inChannels,k=new _s(c.outShape,a.dtype),I=n.data.get(a.dataId).values,S=n.data.get(s.dataId).values,N=k.values;for(let e=0;e<c.batchSize;++e){let t=e*d[0],n=e*k.strides[0];for(let e=0;e<c.outHeight;++e){let r=n+e*k.strides[1],a=e*c.strideHeight-w;for(let e=0;e<f;++e){let n=a+e*g;if(n<0||n>=c.inHeight)continue;let s=e*p[0],i=t+n*d[1];for(let e=0;e<c.outWidth;++e){let t=r+e*k.strides[2],n=e*c.strideWidth-x;for(let e=0;e<m;++e){let r=n+e*y;if(r<0||r>=c.inWidth)continue;let a=s+e*p[1],o=i+r*c.inChannels,l=t,u=a;for(let e=0;e<c.inChannels;++e){let t=I[o+e];for(let e=0;e<v;++e)N[l+e]+=t*S[u+e];l+=v,u+=v}}}}}}return n.makeTensorInfo(k.shape,k.dtype,k.values)}var HF={kernelName:rn,backendName:"cpu",kernelFunc:GF};var jF={kernelName:an,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:d}=r;YE([a,s],"depthwiseConv2dNativeBackpropFilter");let p=Im.computeConv2DInfo(a.shape,d,i,o,l,u,!0),{strideHeight:h,strideWidth:c,filterHeight:f,filterWidth:m}=p,g=new _s(p.filterShape,"float32"),y=p.padInfo.left,b=p.padInfo.top,x=p.outChannels/p.inChannels,w=n.data.get(a.dataId).values,v=new _s(a.shape,a.dtype,w),k=n.data.get(s.dataId).values,I=new _s(s.shape,s.dtype,k);for(let e=0;e<f;++e){let t=Math.max(0,Math.ceil((b-e)/h)),n=Math.min(p.outHeight,(p.inHeight+b-e)/h);for(let r=0;r<m;++r){let a=Math.max(0,Math.ceil((y-r)/c)),s=Math.min(p.outWidth,(p.inWidth+y-r)/c);for(let i=0;i<p.outChannels;++i){let o=Math.trunc(i/x),l=i%x,u=0;for(let l=0;l<p.batchSize;++l)for(let d=t;d<n;++d){let t=e+d*h-b;for(let e=a;e<s;++e){let n=r+e*c-y;u+=v.get(l,t,n,o)*I.get(l,d,e,i)}}g.set(u,e,r,o,l)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}};var qF={kernelName:sn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:d}=r;YE([a,s],"depthwiseConv2DNativeBackpropInput");let p=ja.computeStrides(a.shape),h=ja.computeStrides(s.shape),c=Im.computeConv2DInfo(d,s.shape,i,o,l,u,!0),f=new _s(c.inShape,"float32"),m=f.values,[g,y,b]=f.strides,x=n.data.get(a.dataId).values,[w,v,k]=p,I=n.data.get(s.dataId).values,[S,N,T]=h,{batchSize:_,filterHeight:C,filterWidth:E,inChannels:$,inHeight:A,inWidth:R,outChannels:F,outHeight:D,outWidth:M,strideHeight:O,strideWidth:L}=c,z=C-1-c.padInfo.top,P=E-1-c.padInfo.left,B=F/$;for(let e=0;e<_;++e)for(let t=0;t<$;++t)for(let n=0;n<A;++n){let r=n-z,a=Math.max(0,Math.ceil(r/O)),s=Math.min(D,(C+r)/O);for(let i=0;i<R;++i){let o=i-P,l=Math.max(0,Math.ceil(o/L)),u=Math.min(M,(E+o)/L),d=0;for(let n=a;n<s;++n){let a=n*O-r;for(let r=l;r<u;++r){let s=w*e+v*n+k*r,i=S*(C-1-a)+N*(E-1-(r*L-o))+T*t;for(let e=0;e<B;++e){d+=x[s+(t*B+e)]*I[i+e]}}}m[g*e+y*n+b*i+t]=d}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}};var KF={kernelName:on,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r}=t,a=ja.sizeFromShape(r.shape),s=n.data.get(r.dataId).values,i=Bo([a,a],r.dtype),o=i.values;for(let e=0;e<s.length;e++)o[e*a+e]=s[e];let l=[...r.shape,...r.shape];return n.makeTensorInfo(l,i.dtype,i.values)}},XF={kernelName:ln,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a}=e,{strides:s,pad:i,dilations:o}=n,l=t,u=l.data.get(r.dataId).values,d=r.shape.length,p=l.data.get(a.dataId).values,h=a.shape.length,{batchSize:c,inHeight:f,inWidth:m,inChannels:g,outHeight:y,outWidth:b,padInfo:x,strideHeight:w,strideWidth:v,filterHeight:k,filterWidth:I,dilationHeight:S,dilationWidth:N,outShape:T}=Im.computeDilation2DInfo(r.shape,a.shape,s,i,"NHWC",o),_=ja.sizeFromShape(T),C=T.length,E=ja.getArrayFromDType(r.dtype,_);for(let e=0;e<c;++e)for(let t=0;t<y;++t){let n=t*w-x.top;for(let s=0;s<b;++s){let i=s*v-x.left;for(let o=0;o<g;++o){let l=Number.MIN_SAFE_INTEGER;for(let t=0;t<k;++t){let s=n+t*S;if(s>=0&&s<f)for(let n=0;n<I;++n){let c=i+n*N;if(c>=0&&c<m){let i=ja.locToIndex([e,s,c,o],d,ja.computeStrides(r.shape)),f=ja.locToIndex([t,n,o],h,ja.computeStrides(a.shape)),m=u[i]+p[f];m>l&&(l=m)}}}E[ja.locToIndex([e,t,s,o],C,ja.computeStrides(T))]=l}}}return{dataId:l.write(ja.toTypedArray(E,r.dtype),T,r.dtype),shape:T,dtype:r.dtype}}}
2,YF={kernelName:dn,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,d=ja.toNestedArray(r.shape,u.data.get(r.dataId).values),p=ja.toNestedArray(a.shape,u.data.get(a.dataId).values),{batchSize:h,inHeight:c,inWidth:f,inChannels:m,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:w,filterHeight:v,filterWidth:k,dilationHeight:I,dilationWidth:S,outShape:N}=Im.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);ja.assert(s.rank===N.length,(()=>`Error in ${dn}, dy must have the same rank as output ${N.length}, but got ${s.rank}`));let T=ja.toNestedArray(N,u.data.get(s.dataId).values),_=ja.makeZerosNestedTypedArray(a.shape,a.dtype);for(let e=0;e<h;++e)for(let t=0;t<g;++t){let n=t*x-b.top;for(let r=0;r<y;++r){let a=r*w-b.left;for(let s=0;s<m;++s){let i=Number.MIN_SAFE_INTEGER,o=0,l=0;for(let t=0;t<v;++t){let r=n+t*I;if(r>=0&&r<c)for(let n=0;n<k;++n){let u=a+n*S;if(u>=0&&u<f){let a=d[e][r][u][s]+p[t][n][s];a>i&&(i=a,o=t,l=n)}}}_[o][l][s]+=T[e][t][r][s]}}}return{dataId:u.write(ja.toTypedArray(_,r.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},ZF={kernelName:un,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:a,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,d=ja.toNestedArray(r.shape,u.data.get(r.dataId).values),p=ja.toNestedArray(a.shape,u.data.get(a.dataId).values),{batchSize:h,inHeight:c,inWidth:f,inChannels:m,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:w,filterHeight:v,filterWidth:k,dilationHeight:I,dilationWidth:S,outShape:N}=Im.computeDilation2DInfo(r.shape,a.shape,i,o,"NHWC",l);ja.assert(s.rank===N.length,(()=>`Error in ${un}, dy must have the same rank as output ${N.length}, but got ${s.rank}`));let T=ja.toNestedArray(N,u.data.get(s.dataId).values),_=ja.makeZerosNestedTypedArray(r.shape,r.dtype);for(let e=0;e<h;++e)for(let t=0;t<g;++t){let n=t*x-b.top;for(let r=0;r<y;++r){let a=r*w-b.left;for(let s=0;s<m;++s){let i=Number.MIN_SAFE_INTEGER,o=n<0?0:n,l=a<0?0:a;for(let t=0;t<v;++t){let r=n+t*I;if(r>=0&&r<c)for(let n=0;n<k;++n){let u=a+n*S;if(u>=0&&u<f){let a=d[e][r][u][s]+p[t][n][s];a>i&&(i=a,o=r,l=u)}}}_[e][o][l][s]+=T[e][t][r][s]}}}return{dataId:u.write(ja.toTypedArray(_,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};var JF={kernelName:pn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{image:a}=t,{canvas:s,options:i}=r,{contextOptions:o,imageOptions:l}=i||{},u=(null==l?void 0:l.alpha)||1,d=(null==o?void 0:o.contextType)||"2d";if("2d"!==d)throw new Error(`Context type ${o.contextType} is not supported by the CPU backend.`);let p=s.getContext(d,(null==o?void 0:o.contextAttributes)||{});if(null==p)throw new Error(`Could not get the context with ${d} type.`);let[h,c]=a.shape.slice(0,2),f=2===a.shape.length?1:a.shape[2],m=n.data.get(a.dataId).values,g="float32"===a.dtype?255:1,y=new Uint8ClampedArray(c*h*4);for(let e=0;e<h*c;++e){let t=[0,0,0,255*u];for(let n=0;n<f;n++){let r=m[e*f+n];if("float32"===a.dtype){if(r<0||r>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${r}.`)}else if("int32"===a.dtype&&(r<0||r>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${r}.`);1===f?(t[0]=r*g,t[1]=r*g,t[2]=r*g):t[n]=r*g}let n=4*e;y[n+0]=Math.round(t[0]),y[n+1]=Math.round(t[1]),y[n+2]=Math.round(t[2]),y[n+3]=Math.round(t[3])}s.width=c,s.height=h;let b=new ImageData(y,c,h);return p.putImageData(b,0,0),a}};function QF(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s}=n,{axis:i,keepDims:o}=a;YE(s,"sum"),t="bool"===s.dtype?p$({inputs:{x:s},backend:r,attrs:{dtype:"int32"}}):i$({inputs:{x:s},backend:r});let l=t.shape.length,u=ja.parseAxisParam(i,t.shape),d=Im.getAxesPermutation(u,l),p=u,h=t;null!=d&&(h=_A({inputs:{x:t},backend:r,attrs:{perm:d}}),p=Im.getInnerMostAxes(p.length,l)),Im.assertAxesAreInnerMostDims("sum",p,h.shape.length);let[c,f]=Im.computeOutAndReduceShapes(h.shape,p),m=s$(r,c,Im.upcastType(h.dtype,"int32")),g=ja.sizeFromShape(f),y=r.data.get(m.dataId).values,b=r.data.get(h.dataId).values;for(let e=0;e<y.length;++e){let t=e*g,n=0;for(let e=0;e<g;++e)n+=b[t+e];y[e]=n}if(o){let e=m;
2m=PR({inputs:{x:m},backend:r,attrs:{shape:Im.expandShapeToKeepDim(m.shape,u)}}),r.disposeIntermediateTensorInfo(e)}return r.disposeIntermediateTensorInfo(t),null!=d&&r.disposeIntermediateTensorInfo(h),m}var eD={kernelName:Qr,backendName:"cpu",kernelFunc:QF};var tD={kernelName:cn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{equation:a}=r,s=t,{allDims:i,summedDims:o,idDims:l}=Im.decodeEinsumEquation(a,s.length);Im.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=Im.getEinsumComputePath(o,l),p=d.length,h=null,c=i.length,f=[];for(let e=0;e<p;++e){for(let t of d[e]){let e,{permutationIndices:r,expandDims:a}=Im.getEinsumPermutation(c,l[t]);Im.isIdentityPermutation(r)?e=s[t]:(e=_A({inputs:{x:s[t]},backend:n,attrs:{perm:r}}),f.push(e));let i=e.shape.slice();for(let e=0;e<a.length;++e)i.splice(a[e],0,1);ja.arraysEqual(e.shape,i)||(e=PR({inputs:{x:e},backend:n,attrs:{shape:i}}),f.push(e)),null===h?h=e:(h=xA({inputs:{a:e,b:h},backend:n}),f.push(h))}e<p-1&&(u[e]>=0&&(h=QF({inputs:{x:h},backend:n,attrs:{axis:u[e]-(i.length-c),keepDims:!1}}),f.push(h)),c--)}for(let e of f)e!==h&&n.disposeIntermediateTensorInfo(e);return h}};var nD={kernelName:mn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{dy:r,y:a}=t;YE([r,a],"eluGrad");let s=new Float32Array(ja.sizeFromShape(a.shape)),i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values;for(let e=0;e<i.length;++e){let t=i[e];s[e]=t>=0?o[e]:o[e]*(t+1)}return n.makeTensorInfo(a.shape,"float32",s)}},rD=Im.ERF_P,aD=Im.ERF_A1,sD=Im.ERF_A2,iD=Im.ERF_A3,oD=Im.ERF_A4,lD=Im.ERF_A5,uD=N$(gn,(e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+rD*n);return t*(1-((((lD*r+oD)*r+iD)*r+sD)*r+aD)*r*Math.exp(-n*n))})),dD={kernelName:gn,backendName:"cpu",kernelFunc:uD};function pD(e){let{inputs:t,backend:n,attrs:r}=e,{input:a}=t,{dim:s}=r,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(ja.assert(-(i+1)<=s,(()=>`Axis must be in the interval [${-(i+1)}, ${i}]`)),l=i+s+1),o.splice(l,0,1),PR({inputs:{x:a},backend:n,attrs:{shape:o}})}var hD={kernelName:xn,backendName:"cpu",kernelFunc:pD},cD=n$(((e,t)=>e/t)),fD=c$(hn,cD),mD={kernelName:hn,backendName:"cpu",kernelFunc:fD};function gD(e,t,n){let r=e.shape,a=r[0],s=r[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[a,s],d=ja.sizeFromShape(u),p=ja.getTypedArrayFromDType("float32",d),h=ja.getTypedArrayFromDType("float32",d);for(let e=0;e<a;e++){let r=ZA({inputs:{x:o},backend:n,attrs:{begin:[e,0],size:[1,s]}}),a=ZA({inputs:{x:l},backend:n,attrs:{begin:[e,0],size:[1,s]}}),i=r$({inputs:{real:r,imag:a},backend:n}),{real:u,imag:d}=yD(i,t,n),c=Im.mergeRealAndImagArrays(u,d);for(let t=0;t<s;t++){let n=Im.getComplexWithIndex(c,t);p[e*s+t]=n.real,h[e*s+t]=n.imag}n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(i)}let c=n.makeTensorInfo(u,"float32",p),f=n.makeTensorInfo(u,"float32",h),m=r$({inputs:{real:c,imag:f},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(f),m}function yD(e,t,n){let r=ja.sizeFromShape(e.shape),a=n.data.get(e.dataId),s=n.data.get(a.complexTensorInfos.real.dataId).values,i=n.data.get(a.complexTensorInfos.imag.dataId).values;if(function(e){return 0==(e&e-1)}(r)){let a=bD(s,i,r,t,n),o=[e.shape[0],e.shape[1]];if(t){let e=n.makeTensorInfo(o,"float32",a.real),t=n.makeTensorInfo(o,"float32",a.imag),s=n.makeTensorInfo([],"float32",ja.createScalarValue(r,"float32")),i=i$({inputs:{x:s},backend:n}),l=mD.kernelFunc({inputs:{a:e,b:s},backend:n}),u=mD.kernelFunc({inputs:{a:t,b:i},backend:n}),d=n.data.get(l.dataId).values,p=n.data.get(u.dataId).values;return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(u),{real:d,imag:p}}return a}{let e=function(e,t,n){let r=new Float32Array(2*t);for(let a=0;a<t;a++){let s=0,i=0;for(let r=0;r<t;r++){let o=Im.exponent(a*r,t,n),l=Im.getComplexWithIndex(e,r);s+=l.real*o.real-l.imag*o.imag,i+=l.real*o.imag+l.imag*o.real}n&&(s/=t,i/=t),Im.assignToTypedArray(r,s,i,a)}return r}(Im.mergeRealAndImagArrays(s,i),r,t);return Im.splitRealAndImagArrays(e)}}function bD(e,t,n,r,a){if(1===n)return{real:e,imag:t};let s=Im.mergeRealAndImagArrays(e,t),i=n/2,o=Im.complexWithEvenIndex(s),l=o.real,u=o.imag,d=[l.length],p=a.makeTensorInfo(d,"float32",l),h=a.makeTensorInfo(d,"float32",u),c=r$({inputs:{real:p,imag:h},backend:a}),f=Im.complexWithOddIndex(s),m=f.real,g=f.imag,y=[m.length],b=a.makeTensorInfo(y,"float32",m),x=a.makeTensorInfo(y,"float32",g),w=r$({inputs:{real:b,imag:x},backend:a}),v=bD(l,u,i,r,a),k=v.real,I=v.imag,S=[k.length],N=a.makeTensorInfo(S,"float32",k),T=a.makeTensorInfo(S,"float32",I),_=r$({inputs:{real:N,imag:T},backend:a}),C=bD(m,g,i,r,a),E=C.real,$=C.imag,A=[E.length],R=a.makeTensorInfo(A,"float32",E),F=a.makeTensorInfo(A,"float32",$),D=r$({inputs:{real:R,imag:F},backend:a}),M=Im.exponents(n,r),O=[M.real.length],L=a.makeTensorInfo(O,"float32",M.real),z=a.makeTensorInfo(O,"float32",M.imag),P=r$({inputs:{real:L,imag:z},backend:a}),B=xA({inputs:{a:P,b:D},backend:a}),W=y$({inputs:{a:_,b:B},backend:a}),V=xR({inputs:{a:_,b:B},backend:a}),U=l$({inputs:{input:W},backend:a}),G=l$({inputs:{input:V},backend:a}),H=SF({inputs:{input:W},backend:a}),j=SF({inputs:{input:V},backend:a}
2),q=TF({inputs:[U,G],backend:a,attrs:{axis:0}}),K=TF({inputs:[H,j],backend:a,attrs:{axis:0}}),X=a.data.get(q.dataId).values,Y=a.data.get(K.dataId).values;return a.disposeIntermediateTensorInfo(p),a.disposeIntermediateTensorInfo(h),a.disposeIntermediateTensorInfo(c),a.disposeIntermediateTensorInfo(b),a.disposeIntermediateTensorInfo(x),a.disposeIntermediateTensorInfo(w),a.disposeIntermediateTensorInfo(N),a.disposeIntermediateTensorInfo(T),a.disposeIntermediateTensorInfo(_),a.disposeIntermediateTensorInfo(R),a.disposeIntermediateTensorInfo(F),a.disposeIntermediateTensorInfo(D),a.disposeIntermediateTensorInfo(L),a.disposeIntermediateTensorInfo(z),a.disposeIntermediateTensorInfo(P),a.disposeIntermediateTensorInfo(B),a.disposeIntermediateTensorInfo(W),a.disposeIntermediateTensorInfo(V),a.disposeIntermediateTensorInfo(U),a.disposeIntermediateTensorInfo(H),a.disposeIntermediateTensorInfo(G),a.disposeIntermediateTensorInfo(j),a.disposeIntermediateTensorInfo(q),a.disposeIntermediateTensorInfo(K),{real:X,imag:Y}}var xD={kernelName:vn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{input:r}=t,a=ja.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=PR({inputs:{x:r},backend:n,attrs:{shape:[a/s,s]}}),o=gD(i,!1,n),l=PR({inputs:{x:o},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}};function wD(e){let{backend:t,attrs:n}=e,{shape:r,value:a,dtype:s}=n,i=s||ja.inferDtype(a),o=ja.getArrayFromDType(i,ja.sizeFromShape(r));return function(e,t,n){e.fill(t)}(o,a),t.makeTensorInfo(r,i,o)}var vD={kernelName:kn,backendName:"cpu",kernelFunc:wD};var kD={kernelName:In,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,a=n,s=ja.getTypedArrayFromDType(r.dtype,ja.sizeFromShape(r.shape)),[i,o,l,u]=r.shape,d=a.data.get(r.dataId).values;for(let e=0;e<i;e++){let t=e*l*o*u;for(let e=0;e<o;e++){let n=e*(l*u);for(let e=0;e<l;e++){let r=e*u;for(let a=0;a<u;a++){let i=Math.round(l-e-1),o=t+n+r+a,p=d[o];if(i>=0&&i<l){p=d[t+n+i*u+a]}s[o]=p}}}}return{dataId:a.write(s,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};var ID={kernelName:Aa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:p,dimRoundingMode:h,activation:c,leakyreluAlpha:f}=r,m=CF({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:d,dilations:p,dimRoundingMode:h}});if(i){let e=m;if("NCHW"===d&&1===i.shape.length&&1!==i.shape[0]){let e=PR({inputs:{x:i},backend:n,attrs:{shape:[i.shape[0],1,1]}});m=y$({inputs:{a:m,b:e},backend:n}),n.disposeIntermediateTensorInfo(e)}else m=y$({inputs:{a:m,b:i},backend:n});n.disposeIntermediateTensorInfo(e)}if(c){let e=m;if("NCHW"===d&&"prelu"===c&&1===o.shape.length&&1!==o.shape[0]){let e=PR({inputs:{x:o},backend:n,attrs:{shape:[o.shape[0],1,1]}});m=zR(n,m,c,e,f),n.disposeIntermediateTensorInfo(e)}else m=zR(n,m,c,o,f);n.disposeIntermediateTensorInfo(e)}return m}};var SD={kernelName:Ra,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:d,dilations:p,dimRoundingMode:h,activation:c,leakyreluAlpha:f}=r,m=GF({inputs:{x:a,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:d,dilations:p,dimRoundingMode:h}});if(i){let e=m;m=y$({inputs:{a:m,b:i},backend:n}),n.disposeIntermediateTensorInfo(e)}if(c){let e=m;m=zR(n,m,c,o,f),n.disposeIntermediateTensorInfo(e)}return m}};var ND={kernelName:Cn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=ja.sizeFromShape(r.shape),i=a.shape,o=i[i.length-1],[l,u,d,p]=Im.prepareAndValidate(r,a);if(0===u)return n.makeTensorInfo(l,r.dtype,[]);let h=j$(n.data.get(a.dataId).values,n.bufferSync(r),r.dtype,u,o,d,p,r.shape,s);return n.makeTensorInfo(l,r.dtype,h.values)}};var TD={kernelName:_n,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r;YE([a,s],"gatherV2");let l=ja.parseAxisParam(i,a.shape)[0],u=n.data.get(s.dataId).values,d=a.shape[l];for(let e=0;e<u.length;++e){let t=u[e];ja.assert(t<=d-1&&t>=0,(()=>`GatherV2: the index value ${t} is not in [0, ${d-1}]`))}let p=o;null==o&&(p=0);let h=ja.sizeFromShape(s.shape),c=Im.segment_util.collectGatherOpShapeInfo(a,s,l,p),f=PR({input
2s:{x:a},backend:n,attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]}}),m=PR({inputs:{x:s},backend:n,attrs:{shape:[c.batchSize,h/c.batchSize]}}),g=[c.batchSize,c.outerSize,h/c.batchSize,c.sliceSize],y=n.bufferSync(m),b=q$(n.bufferSync(f),y,g);return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),n.makeTensorInfo(c.outputShape,b.dtype,b.values)}};var _D={kernelName:Rn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{input:r}=t,a=ja.sizeFromShape(r.shape),s=r.shape[r.shape.length-1],i=PR({inputs:{x:r},backend:n,attrs:{shape:[a/s,s]}}),o=gD(i,!0,n),l=PR({inputs:{x:o},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}},CD=N$(Dn,(e=>Number.isFinite(e)?1:0),"bool"),ED={kernelName:Dn,backendName:"cpu",kernelFunc:CD},$D=N$(Mn,(e=>Math.abs(e)===1/0?1:0),"bool"),AD={kernelName:Mn,backendName:"cpu",kernelFunc:$D},RD=N$(On,(e=>Number.isNaN(e)?1:0),"bool"),FD={kernelName:On,backendName:"cpu",kernelFunc:RD};var DD={kernelName:Bn,backendName:"cpu",kernelFunc:function(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=iA(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}},MD=N$(Vn,(e=>Math.log1p(e))),OD={kernelName:Vn,backendName:"cpu",kernelFunc:MD},LD=n$(((e,t)=>e&&t)),zD=c$(Un,LD,null,"bool"),PD={kernelName:Un,backendName:"cpu",kernelFunc:zD},BD=N$(Gn,(e=>e?0:1),"bool"),WD={kernelName:Gn,backendName:"cpu",kernelFunc:BD},VD=n$(((e,t)=>e||t)),UD=c$(Hn,VD,null,"bool"),GD={kernelName:Hn,backendName:"cpu",kernelFunc:UD};var HD={kernelName:Xn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;YE(a,"LRN");let u=a.shape[3],d=u-1,p=n.data.get(a.dataId).values,h=ja.sizeFromShape(a.shape),c=new Float32Array(h);function f(e){let t=e%u,n=e-t+Math.max(0,t-s),r=e-t+Math.min(t+s,d),a=0;for(;n<=r;n++){let e=p[n];a+=e*e}return a}for(let e=0;e<h;e++){let t=f(e),n=p[e]*Math.pow(i+o*t,-l);c[e]=n}return n.makeTensorInfo(a.shape,a.dtype,c)}};var jD={kernelName:Yn,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=r;YE(i,"LRNGrad");let p=ja.sizeFromShape(i.shape),h=i.shape[3],c=n.data.get(i.dataId).values,f=n.data.get(a.dataId).values,m=n.data.get(s.dataId).values,g=new Float32Array(p),y=p;for(let e=0;e<y;e++){let t=e%h,n=e-t+Math.max(0,t-o),r=e-t+Math.min(h,t+o+1),a=0;for(let e=n;e<r;e++)a+=Math.pow(f[e],2);a=u*a+l;for(let t=n;t<r;t++){let n=-2*u*d*f[t]*m[e]/a;e===t&&(n+=Math.pow(a,-d)),n*=c[e],g[t]+=n}}return n.makeTensorInfo(i.shape,a.dtype,g)}};function qD(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=n,l=a.shape,u=l.length,d=ja.parseAxisParam(s,l),p=d,h=Im.getAxesPermutation(p,u),c=o.data.get(a.dataId).values;if(null!=h){let e=new Array(u);for(let t=0;t<e.length;t++)e[t]=l[h[t]];c=TA(c,l,a.dtype,h,e),p=Im.getInnerMostAxes(p.length,u),l=e}YE(a,"max"),Im.assertAxesAreInnerMostDims("max",p,u);let[f,m]=Im.computeOutAndReduceShapes(l,p),g=dA(c,ja.sizeFromShape(m),f,a.dtype),y=o.write(g,f,a.dtype),b=f;return i&&(b=Im.expandShapeToKeepDim(f,d)),{dataId:y,shape:b,dtype:a.dtype}}var KD={kernelName:Jn,backendName:"cpu",kernelFunc:qD};var XD={kernelName:er,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;YE(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;ja.assert(Im.eitherStridesOrDilationsAreOne(i,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));let u,d=Im.computePool2DInfo(a.shape,s,i,1,o,l);if(1===d.filterWidth&&1===d.filterHeight&&ja.arraysEqual(d.inShape,d.outShape))u=i$({inputs:{x:a},backend:n});else{let e=n.data.get(a.dataId).values,t=ja.computeStrides(a.shape),r=dF(e,a.shape,a.dtype,t,d,"max");u=n.makeTensorInfo(d.outShape,a.dtype,r.values)}return u}};var YD={kernelName:nr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r;YE(a,"maxPool3d");let d=Im.computePool3DInfo(a.shape,s,i,1,o,l,u),p=hF(n.data.get(a.dataId).values,a.shape,a.dtype,ja.computeStrides(a.shape),d,"max");return n.makeTensorInfo(p.shape,"float32",p.values)}};var ZD={kernelName:rr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r;YE([a,s],"maxPool3DGrad");let d=Im.computePool3DInfo(s.shape,i,o,1,l,u),p=function(e,t){let n=Bo(t.outShape,"int32"),r=t.strideDepth,a=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,d=t.effectiveFilterHeight,p=t.effectiveFilterWidth,h=t.padInfo.front,c=t.padInfo.top,f=t.padInfo.left;for(let m=0;m<t.batchSize;++m)for(let g=0;g<t.inChannels;++g)for(let y=0;y<t.outDepth;++y){let b=y*r-h,x=b;
2for(;x<0;)x+=i;let w=Math.min(t.inDepth,u+b);for(let r=0;r<t.outHeight;++r){let u=r*a-c,h=u;for(;h<0;)h+=o;let v=Math.min(t.inHeight,d+u);for(let a=0;a<t.outWidth;++a){let c=a*s-f,k=c;for(;k<0;)k+=l;let I=Math.min(t.inWidth,p+c),S=Number.NEGATIVE_INFINITY,N=-1;for(let t=x;t<w;t+=i){let n=t-b;for(let r=h;r<v;r+=o){let a=r-u;for(let s=k;s<I;s+=l){let i=s-c,o=e.get(m,t,r,s,g);o>=S&&(S=o,N=n*d*p+a*d+i)}}}n.set(N,m,y,r,a,g)}}}return n}(n.bufferSync(s),d),h=d.strideDepth,c=d.strideHeight,f=d.strideWidth,m=d.dilationDepth,g=d.dilationHeight,y=d.dilationWidth,b=d.effectiveFilterDepth,x=d.effectiveFilterHeight,w=d.effectiveFilterWidth,v=b-1-d.padInfo.front,k=w-1-d.padInfo.left,I=x-1-d.padInfo.top,S=Bo(s.shape,"float32"),N=n.bufferSync(a);for(let e=0;e<d.batchSize;++e)for(let t=0;t<d.inChannels;++t)for(let n=0;n<d.inDepth;++n)for(let r=0;r<d.inHeight;++r)for(let a=0;a<d.inWidth;++a){let s=n-v,i=r-I,o=a-k,l=0;for(let n=0;n<b;n+=m){let r=(s+n)/h;if(!(r<0||r>=d.outDepth||Math.floor(r)!==r))for(let a=0;a<x;a+=g){let s=(i+a)/c;if(!(s<0||s>=d.outHeight||Math.floor(s)!==s))for(let i=0;i<w;i+=y){let u=(o+i)/f;if(u<0||u>=d.outWidth||Math.floor(u)!==u)continue;let h=b*x*w-1-p.get(e,r,s,u,t)===n*x*w+a*w+i?1:0;0!==h&&(l+=N.get(e,r,s,u,t)*h)}}}S.set(l,e,n,r,a,t)}return n.makeTensorInfo(S.shape,S.dtype,S.values)}};var JD={kernelName:tr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;YE([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:p}=r,h=Im.computePool2DInfo(o.shape,l,u,1,d,p),c=n.data.get(o.dataId).values,f=Bo(h.outShape,o.dtype,pF(c,o.shape,o.dtype,h).values),m=h.strideHeight,g=h.strideWidth,y=h.dilationHeight,b=h.dilationWidth,x=h.effectiveFilterHeight,w=h.effectiveFilterWidth,v=w-1-h.padInfo.left,k=x-1-h.padInfo.top,I=Bo(o.shape,"float32"),S=n.data.get(a.dataId).values,N=Bo(a.shape,"float32",S);for(let e=0;e<h.batchSize;++e)for(let t=0;t<h.inChannels;++t)for(let n=0;n<h.inHeight;++n)for(let r=0;r<h.inWidth;++r){let a=n-k,s=r-v,i=0;for(let n=0;n<x;n+=y){let r=(a+n)/m;if(!(r<0||r>=h.outHeight||Math.floor(r)!==r))for(let a=0;a<w;a+=b){let o=(s+a)/g;if(o<0||o>=h.outWidth||Math.floor(o)!==o)continue;let l=x*w-1-f.get(e,r,o,t)===n*w+a?1:0;0!==l&&(i+=N.get(e,r,o,t)*l)}}I.set(i,e,n,r,t)}return n.makeTensorInfo(I.shape,I.dtype,I.values)}};var QD={kernelName:ar,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;YE(r,"MaxPoolWithArgmax");let u=l.data.get(r.dataId).values,d=Im.computePool2DInfo(r.shape,a,s,[1,1],i),[p,h]=function(e,t,n,r,a){let s=dF(e,0,n,ja.computeStrides(t),a,"max"),i=pF(e,t,n,a,!0,r);return[s.values,i.values]}(u,r.shape,r.dtype,o,d),c=l.write(p,d.outShape,r.dtype),f=l.write(h,d.outShape,r.dtype);return[{dataId:c,shape:d.outShape,dtype:r.dtype},{dataId:f,shape:d.outShape,dtype:"int32"}]}};var eM={kernelName:sr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=ja.parseAxisParam(s,a.shape),l=Im.computeOutAndReduceShapes(a.shape,o)[1],u=ja.sizeFromShape(l),d=[],p=n.makeTensorInfo([],"float32",new Float32Array([u]));d.push(p);let h=p$({inputs:{x:a},backend:n,attrs:{dtype:"float32"}});d.push(h);let c=fD({inputs:{a:h,b:p},backend:n});d.push(c);let f=QF({inputs:{x:c},backend:n,attrs:{axis:s,keepDims:i}});return d.forEach((e=>n.disposeIntermediateTensorInfo(e))),f}};var tM={kernelName:ir,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;YE(a,"min");let o=ja.parseAxisParam(s,a.shape),l=o,u=Im.getAxesPermutation(l,a.shape.length),d=a;null!=u&&(d=_A({inputs:{x:a},backend:n,attrs:{perm:u}}),l=Im.getInnerMostAxes(l.length,a.shape.length)),Im.assertAxesAreInnerMostDims("min",l,d.shape.length);let[p,h]=Im.computeOutAndReduceShapes(d.shape,l),c=ja.sizeFromShape(h),f=ja.makeZerosTypedArray(ja.sizeFromShape(p),d.dtype),m=n.data.get(d.dataId).values;for(let e=0;e<f.length;++e){let t=e*c,n=m[t];for(let e=0;e<c;++e){let r=m[t+e];(Number.isNaN(r)||r<n)&&(n=r)}f[e]=n}null!=u&&n.disposeIntermediateTensorInfo(d);let g=n.makeTensorInfo(p,d.dtype,f);
2if(i){let e=PR({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(p,o)}});return n.disposeIntermediateTensorInfo(g),e}return g}};var nM={kernelName:lr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,mode:i}=r;YE(a,"mirrorPad");let o=s.map(((e,t)=>e[0]+a.shape[t]+e[1])),l=s.map((e=>e[0])),u=s.map(((e,t)=>e[0]+a.shape[t])),d="reflect"===i?0:1,p=n.data.get(a.dataId).values,h=a.shape.length,c=ja.computeStrides(a.shape),f=ja.sizeFromShape(o),m=o.length,g=ja.computeStrides(o),y=ja.getTypedArrayFromDType(a.dtype,f);for(let e=0;e<f;e++){let t=ja.indexToLoc(e,m,g);for(let e=0;e<m;e++)t[e]<l[e]?t[e]=2*l[e]-t[e]-d:t[e]>=u[e]&&(t[e]=2*(u[e]-1)-t[e]+d);t=t.map(((e,t)=>e-l[t]));let n=ja.locToIndex(t,h,c);y[e]=p[n]}return{dataId:n.write(y,o,a.dtype),shape:o,dtype:a.dtype}}},rM=n$(((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t})),aM=c$(ur,rM),sM={kernelName:ur,backendName:"cpu",kernelFunc:aM},iM=W(Q());function oM(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=a.shape.length,o=s;if(-1===o&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=ja.parseAxisParam([o],a.shape),u=qD({inputs:{x:a},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),d=Im.expandShapeToKeepDim(u.shape,l),p=PR({inputs:{x:u},backend:n,attrs:{shape:d}}),h=xR({inputs:{a,b:p},backend:n}),c=M$({inputs:{x:h},backend:n}),f=QF({inputs:{x:c},backend:n,attrs:{axis:l,keepDims:!1}}),m=PR({inputs:{x:f},backend:n,attrs:{shape:d}}),g=fD({inputs:{a:c,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}var lM={kernelName:na,backendName:"cpu",kernelFunc:oM};var uM={kernelName:dr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;YE(a,"multinomial");let l=o?a:oM({inputs:{logits:a},backend:n,attrs:{dim:-1}}),u=l.shape[0],d=l.shape[1],p=n.data.get(l.dataId).values,h=[u,s],c=ja.makeZerosTypedArray(ja.sizeFromShape(h),"int32");for(let e=0;e<u;++e){let t=e*d,n=new Float32Array(d-1);n[0]=p[t];for(let e=1;e<n.length;++e)n[e]=n[e-1]+p[t+e];let r=iM.alea(i.toString()),a=e*s;for(let e=0;e<s;++e){let t=r();c[a+e]=n.length;for(let r=0;r<n.length;r++)if(t<n[r]){c[a+e]=r;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(h,"int32",c)}},dM=Eg.nonMaxSuppressionV3Impl;var pM={kernelName:fr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r;YE(a,"NonMaxSuppression");let u=n.data.get(a.dataId).values,d=n.data.get(s.dataId).values,{selectedIndices:p}=dM(u,d,i,o,l);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}},hM=Eg.nonMaxSuppressionV4Impl;var cM={kernelName:mr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=r;YE(a,"NonMaxSuppressionPadded");let d=n.data.get(a.dataId).values,p=n.data.get(s.dataId).values,{selectedIndices:h,validOutputs:c}=hM(d,p,i,o,l,u);return[n.makeTensorInfo([h.length],"int32",new Int32Array(h)),n.makeTensorInfo([],"int32",new Int32Array([c]))]}},fM=Eg.nonMaxSuppressionV5Impl;var mM={kernelName:gr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=r;YE(a,"NonMaxSuppressionWithScore");let d=n.data.get(a.dataId).values,p=n.data.get(s.dataId).values,h=i,c=o,f=l,m=u,{selectedIndices:g,selectedScores:y}=fM(d,p,h,c,f,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}};var gM={kernelName:br,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{dtype:s,depth:i,onValue:o,offValue:l}=r;YE(a,"oneHot");let u=ja.sizeFromShape(a.shape),d=new Float32Array(u*i);d.fill(l);let p=n.data.get(a.dataId).values;for(let e=0;e<u;++e)p[e]>=0&&p[e]<i&&(d[e*i+p[e]]=o);return n.makeTensorInfo([...a.shape,i],s,d)}};function yM(e){let{inputs:t,backend:n}=e,{x:r}=t;if("string"===r.dtype)throw new Error("zerosLike is not supported for string tensors");if("complex64"===r.dtype){let e=l$({inputs:{input:r},backend:n}),t=yM({inputs:{x:e},backend:n}),a=SF({inputs:{input:r},backend:n}),s=yM({inputs:{x:a},backend:n}),i=r$({inputs:{real:t,imag:s},backend:n});return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),i}return wD({backend:n,attrs:{shape:r.shape,value:0,dtype:r.dtype}})}var bM={kernelName:Ta,backendName:"cpu",kernelFunc:yM};var xM={kernelName:yr,backendName:"cpu",kernelFunc:function e(t){let{inputs:n,backend:r}=t,{x:a}=n;if("string"===a.dtype)throw new Error("onesLike is not supported for string tensors");if("complex64"===a.dtype){let t=l$({inputs:{input:a},backend:r}),n=e({inputs:{x:t},backend:r}),s=SF({inputs:{input:a},backend:r}),i=yM({inputs:{x:s},backend:r}),o=r$({inputs:{real:n,imag:i},backend:r});return r.disposeIntermediateTensorInfo(t),r.disposeIntermediateTensorInfo(n),r.disposeIntermediateTensorInfo(s),r.disposeIntermediateTensorInfo(i),o}return wD({backend:r,attrs:{shape:a.shape,value:1,dtype:a.dtype}})}};function wM(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(1===t.length)return pD({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach((e=>{ja.assertShapesMatch(s,e.shape,"All tensors passed to stack must have matching shapes"),ja.assert(i===e.dtype,(()=>"All tensors passed to stack must have matching dtypes"))}));
2let o=[],l=TF({inputs:t.map((e=>{let t=pD({inputs:{input:e},backend:n,attrs:{dim:a}});return o.push(t),t})),backend:n,attrs:{axis:a}});return o.forEach((e=>n.disposeIntermediateTensorInfo(e))),l}var vM={kernelName:xr,backendName:"cpu",kernelFunc:wM};var kM={kernelName:wr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;YE(a,"pad");let o=s.map(((e,t)=>e[0]+a.shape[t]+e[1])),l=s.map((e=>e[0])),u=n.data.get(a.dataId).values,d=ja.sizeFromShape(a.shape),p=a.shape.length,h=ja.computeStrides(a.shape),c=ja.sizeFromShape(o),f=o.length,m=ja.computeStrides(o),g=ja.getTypedArrayFromDType(a.dtype,c);0!==i&&g.fill(i);for(let e=0;e<d;e++){let t=ja.indexToLoc(e,p,h).map(((e,t)=>e+l[t]));g[ja.locToIndex(t,f,m)]=u[e]}return{dataId:n.write(g,o,a.dtype),shape:o,dtype:a.dtype}}},IM=n$(((e,t)=>Math.pow(e,t))),SM=c$(kr,IM),NM={kernelName:kr,backendName:"cpu",kernelFunc:SM};var TM={kernelName:Nr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:a,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=r,l=a.map((e=>n.data.get(e.dataId).values)),u=a.map((e=>e.shape)),d=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,[h,c,f]=DA(l,u,d,s.shape,s.dtype,p,i.shape),m=h.map((e=>n.makeTensorInfo([e.length],"int32",e))),g=n.makeTensorInfo(f,s.dtype,c);return m.concat([g])}};var _M={kernelName:Tr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{starts:r,limits:a,deltas:s}=t,i=n.data.get(r.dataId).values,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,[u,d]=OA(i,r.shape,r.dtype,o,a.shape,l,s.shape);return[n.makeTensorInfo([u.length],"int32",u),n.makeTensorInfo([d.length],r.dtype,d)]}};var CM={kernelName:_r,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{shape:a,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=r,u=n.data.get(a.dataId).values,d=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,h=o.map((e=>n.data.get(e.dataId).values)),c=o.map((e=>e.shape)),[f,m]=WA(u,a.shape,d,s.shape,s.dtype,p,i.shape,h,c,l);return n.makeTensorInfo(f,s.dtype,m)}};var EM={kernelName:Cr,backendName:"cpu",kernelFunc:function(e){let{backend:t,attrs:n}=e,{start:r,stop:a,dtype:s,step:i}=n,o=VA(r,a,i,s);return t.makeTensorInfo([o.length],s,o)}},$M=N$($r,(e=>1/e)),AM={kernelName:$r,backendName:"cpu",kernelFunc:$M};var RM={kernelName:Mr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;YE(a,"resizeBilinear");let l=ja.computeStrides(a.shape),[u,d]=o,[p,h,c,f]=a.shape,m=n.data.get(a.dataId).values,g=new Float32Array(ja.sizeFromShape([p,u,d,f])),y=[s&&u>1?h-1:h,s&&d>1?c-1:c],b=[s&&u>1?u-1:u,s&&d>1?d-1:d],x=0,w=y[0]/b[0],v=y[1]/b[1];for(let e=0;e<p;e++)for(let t=0;t<u;t++){let n;n=i?w*(t+.5)-.5:w*t;let r=Math.max(0,Math.floor(n)),a=n-r,s=Math.min(h-1,Math.ceil(n)),o=e*l[0]+r*l[1],u=e*l[0]+s*l[1];for(let e=0;e<d;e++){let t;t=i?v*(e+.5)-.5:v*e;let n=Math.max(0,Math.floor(t)),r=t-n,s=Math.min(c-1,Math.ceil(t)),d=o+n*l[2],p=u+n*l[2],h=o+s*l[2],y=u+s*l[2];for(let e=0;e<f;
2e++){let t=m[d+e],n=m[p+e],s=t+(m[h+e]-t)*r,i=s+(n+(m[y+e]-n)*r-s)*a;g[x++]=i}}}return n.makeTensorInfo([p,u,d,f],"float32",g)}};var FM={kernelName:Or,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;YE([s,a],"resizeBilinearGrad");let o=ja.computeStrides(a.shape),[l,u,d,p]=a.shape,[,h,c]=s.shape,f=new Float32Array(l*u*d*p),m=[i&&h>1?u-1:u,i&&c>1?d-1:d],g=[i&&h>1?h-1:h,i&&c>1?c-1:c],y=m[0]/g[0],b=m[1]/g[1],x=n.data.get(s.dataId).values,w=0;for(let e=0;e<l;e++){let t=e*o[0];for(let e=0;e<h;e++){let n=e*y,r=Math.floor(n),a=Math.min(Math.ceil(n),u-1),s=t+r*o[1],i=t+a*o[1],l=n-r,h=1-l;for(let e=0;e<c;e++){let t=e*b,n=Math.floor(t),r=Math.min(Math.ceil(t),d-1),a=t-n,u=1-a,c=s+n*o[2],m=s+r*o[2],g=i+n*o[2],y=i+r*o[2],v=h*u,k=h*a,I=l*u,S=l*a;for(let e=0;e<p;e++){let t=x[w++];f[c+e]+=t*v,f[m+e]+=t*k,f[g+e]+=t*I,f[y+e]+=t*S}}}}return n.makeTensorInfo([l,d,u,p],"float32",f)}};var DM={kernelName:Fr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r;YE(a,"resizeNearestNeighbor");let l=ja.computeStrides(a.shape),[u,d]=o,[p,h,c,f]=a.shape,m=n.data.get(a.dataId).values,g=new Float32Array(p*u*d*f),y=[s&&u>1?h-1:h,s&&d>1?c-1:c],b=[s&&u>1?u-1:u,s&&d>1?d-1:d],x=y[0]/b[0],w=y[1]/b[1],v=0;for(let e=0;e<p;e++){let t=e*l[0];for(let e=0;e<u;e++){let n=i?x*(e+.5):x*e,r=Math.min(h-1,s?Math.round(n):Math.floor(n));i&&(r=Math.max(0,r));let a=t+r*l[1];for(let e=0;e<d;e++){let t=i?w*(e+.5):w*e,n=Math.min(c-1,s?Math.round(t):Math.floor(t));i&&(n=Math.max(0,n));let r=a+n*l[2];for(let e=0;e<f;e++){let t=m[r+e];g[v++]=t}}}}return n.makeTensorInfo([p,u,d,f],a.dtype,g)}};var MM={kernelName:Dr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r;YE([s,a],"resizeNearestNeighborGrad");let o=ja.computeStrides(a.shape),l=ja.computeStrides(s.shape),[u,d,p,h]=a.shape,[,c,f]=s.shape,m=new Float32Array(u*d*p*h),g=n.data.get(s.dataId).values,y=[i&&c>1?d-1:d,i&&f>1?p-1:p],b=[i&&c>1?c-1:c,i&&f>1?f-1:f],x=y[0]/b[0],w=y[1]/b[1],v=1/x,k=1/w,I=2*Math.ceil(v)+2,S=2*Math.ceil(k)+2;for(let e=0;e<u;e++){let t=e*o[0];for(let e=0;e<d;e++){let n=t+e*o[1],r=Math.floor(e*v),a=Math.floor(r-I/2);for(let r=0;r<p;r++){let s=n+r*o[2],u=Math.floor(r*k),y=Math.floor(u-S/2);for(let n=0;n<h;n++){let o=0;for(let s=0;s<I;s++){let u=s+a;if(u<0||u>=c)continue;let h=t+u*l[1],m=u*x;if(e===Math.min(d-1,i?Math.round(m):Math.floor(m)))for(let e=0;e<S;e++){let t=e+y;if(t<0||t>=f)continue;let a=h+t*l[2],s=t*w;r===Math.min(p-1,i?Math.round(s):Math.floor(s))&&(o+=g[a+n])}}m[s+n]=o}}}}return n.makeTensorInfo(a.shape,a.dtype,m)}};var OM={kernelName:zr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r;YE(a,"reverse");let i=a.shape.length,o=ja.parseAxisParam(s,a.shape);if(0===i)return i$({inputs:{x:a},backend:n});let l=new _s(a.shape,a.dtype),u=n.bufferSync(a);for(let e=0;e<l.size;e++){let t=l.indexToLoc(e),n=t.slice();o.forEach((e=>n[e]=a.shape[e]-1-n[e])),l.set(u.get(...n),...t)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}},LM={kernelName:Ea,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}
2=e,{radians:a,fillValue:s,center:i}=t,o=n,l=ja.getTypedArrayFromDType(r.dtype,ja.sizeFromShape(r.shape)),[u,d,p,h]=r.shape,[c,f]=Im.getImageCenter(i,d,p),m=Math.sin(a),g=Math.cos(a),y=o.data.get(r.dataId).values;for(let e=0;e<u;e++){let t=e*p*d*h;for(let e=0;e<d;e++){let n=e*(p*h);for(let r=0;r<p;r++){let a=r*h;for(let i=0;i<h;i++){let o=[u,e,r,i],b=o[2],x=o[1],w=(b-c)*g-(x-f)*m,v=(b-c)*m+(x-f)*g;w=Math.round(w+c),v=Math.round(v+f);let k=s;if("number"!=typeof s&&(k=3===i?255:s[i]),w>=0&&w<p&&v>=0&&v<d){k=y[t+v*(p*h)+w*h+i]}l[t+n+a+i]=k}}}}return{dataId:o.write(l,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},zM=N$(Pr,(e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2==0?t:t+1})),PM={kernelName:Pr,backendName:"cpu",kernelFunc:zM};var BM={kernelName:Wr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:p}=Im.calculateShapes(s,a,i),h=jA(n.bufferSync(a),n.bufferSync(s),i,p,u,l,o,d,0,!0);return n.makeTensorInfo(i,h.dtype,h.values)}};function WM(e,t){let n=0,r=e.length,a=0;for(;n<r;)a=Math.floor((n+r)/2),e[a]<t?n=a+1:r=a;return r}function VM(e,t){let n=0,r=e.length,a=0;for(;n<r;)a=Math.floor((n+r)/2),e[a]<=t?n=a+1:r=a;return r}var UM={kernelName:Ur,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:a,values:s}=t,{side:i}=r,o=function(e,t,n,r,a,s){let i=ja.getArrayFromDType("int32",n*a);for(let o=0;o<n;++o){let n=e.slice(o*r,(o+1)*r),l=o*a;for(let e=0;e<a;++e)i[l+e]="left"===s?WM(n,t[e+l]):VM(n,t[e+l])}return i}(n.data.get(a.dataId).values,n.data.get(s.dataId).values,a.shape[0],a.shape[1],s.shape[1],i);return n.makeTensorInfo(s.shape,"int32",o)}};var GM={kernelName:Gr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t;YE([r,a,s],"select");let i=r.shape.length,o=n.data.get(r.dataId).values,l=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,d=Ws(a.dtype,s.dtype),p=ja.makeZerosTypedArray(ja.sizeFromShape(a.shape),d),h=0,c=0===i||i>1||1===a.shape.length?1:ja.sizeFromShape(a.shape.slice(1));for(let e=0;e<o.length;e++)for(let t=0;t<c;t++)1===o[e]?p[h++]=l[e]:p[h++]=u[e];return n.makeTensorInfo(a.shape,d,p)}},HM=Im.SELU_SCALEALPHA,jM=Im.SELU_SCALE,qM=N$(Hr,(e=>e>=0?jM*e:HM*(Math.exp(e)-1))),KM={kernelName:Hr,backendName:"cpu",kernelFunc:qM},XM=N$(Xr,(e=>e<0?-1:e>0?1:0)),YM={kernelName:Xr,backendName:"cpu",kernelFunc:XM},ZM=N$(qr,(e=>Math.sin(e))),JM={kernelName:qr,backendName:"cpu",kernelFunc:ZM},QM=N$(Kr,(e=>Math.sinh(e))),eO={kernelName:Kr,backendName:"cpu",kernelFunc:QM},tO=Math.log(1.1920928955078125e-7)+2,nO=N$(Zr,(e=>{let t,n=e>-tO,r=e<tO,a=Math.exp(e);return t=r?a:n?e:Math.log(1+a),t})),rO={kernelName:Zr,backendName:"cpu",kernelFunc:nO};var aO={kernelName:ea,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;YE([a],"spaceToBatchND");let o=ja.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let e=1+s.length;e<a.shape.length;++e)l.push([0,0]);let u=kM.kernelFunc({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),d=Im.getReshaped(u.shape,s,o,!1),p=Im.getPermuted(d.length,s.length,!1),h=Im.getReshapedPermuted(u.shape,s,o,!1),c=PR({inputs:{x:u},backend:n,attrs:{shape:d}}),f=_A({inputs:{x:c},backend:n,attrs:{perm:p}}),m=PR({inputs:{x:f},backend:n,attrs:{shape:h}});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(f),m}};var sO={kernelName:ra,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{indices:r,values:a,denseShape:s,defaultValue:i}=t;if(1!==s.shape.length)throw new Error(`Dense shape must be a vector, saw:\n        ${s.shape}`);if(2!==r.shape.length)throw new Error(`Indices must be a matrix, saw:\n        ${r.shape}`);if(1!==a.shape.length)throw new Error(`Values must be a vector, saw:\n        ${a.shape}`);if(0!==i.shape.length)throw new Error(`Default value must be a scalar, saw:\n        ${i.shape}`);let o=n.data.get(r.dataId).values,l=n.data.get(a.dataId).values,u=n.data.get(s.dataId).values,d=n.data.get(i.dataId).values[0],[p,h,c,f,m]=QA(o,r.shape,r.dtype,l,a.dtype,u,d);return[n.makeTensorInfo(h,r.dtype,p),n.makeTensorInfo([h[0]],a.dtype,c),n.makeTensorInfo([f.length],"bool",new Uint8Array(f.map((e=>Number(e))))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}};var iO={kernelName:aa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:a,newShape:s}=t;if(2!==r.shape.length)throw new Error(`Input indices should be a matrix but received shape\n        ${r.shape}`);if(1!==a.shape.length)throw new Error(`Input shape should be a vector but received shape\n        ${a.shape}`);if(1!==s.shape.length)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.data.get(a.dataId).values),o=n.data.get(r.dataId).values,l=Array.from(n.data.get(s.dataId).values),[u,d,p]=eR(o,r.shape,r.dtype,i,l);return[n.makeTensorInfo(d,r.dtype,u),n.makeTensorInfo([p.length],s.dtype,new Int32Array(p))]}};var oO={kernelName:sa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{data:r,indices:a,segmentIds:s}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");
2if(1!==a.shape.length)throw new Error(`Indices should be a vector but received shape\n          ${a.shape}`);if(1!==s.shape.length)throw new Error(`Segment ids should be a vector but received shape\n          ${s.shape}`);if(a.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(r.dataId).values,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,[u,d]=tR(i,r.shape,r.dtype,o,l,!0);return n.makeTensorInfo(d,r.dtype,u)}};var lO={kernelName:ia,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{data:r,indices:a,segmentIds:s}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(1!==a.shape.length)throw new Error(`Indices should be a vector but received shape\n         ${a.shape}`);if(1!==s.shape.length)throw new Error(`Segment ids should be a vector but received shape\n         ${s.shape}`);if(a.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(r.dataId).values,o=n.data.get(a.dataId).values,l=n.data.get(s.dataId).values,[u,d]=tR(i,r.shape,r.dtype,o,l);return n.makeTensorInfo(d,r.dtype,u)}};var uO={kernelName:oa,backendName:"cpu",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{sparseIndices:s,sparseValues:i,defaultValue:o}=n,{outputShape:l}=a,{sliceRank:u,numUpdates:d,sliceSize:p,strides:h,outputSize:c}=Im.calculateShapes(i,s,l),f=!1,m=r.bufferSync(s);switch(i.dtype){case"bool":t=jA(m,r.bufferSync(i),l,c,p,d,u,h,!!r.data.get(o.dataId).values[0],f);break;case"float32":case"int32":t=jA(m,r.bufferSync(i),l,c,p,d,u,h,r.data.get(o.dataId).values[0],f);break;case"string":t=jA(m,r.bufferSync(i),l,c,p,d,u,h,ja.decodeString(r.data.get(o.dataId).values[0]),f);break;default:throw new Error(`Unsupported type ${i.dtype}`)}return r.makeTensorInfo(l,t.dtype,t.values)}};var dO={kernelName:ta,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=ja.parseAxisParam(i,a.shape)[0],l=Im.prepareSplitSize(a,s,o),u=new Array(a.shape.length).fill(0),d=a.shape.slice();return l.map((e=>{let t=[...d];t[o]=e;let r=ZA({inputs:{x:a},backend:n,attrs:{begin:u,size:t}});return u[o]+=e,r}))}},pO={kernelName:ua,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;YE(n,"square");let a=r.data.get(n.dataId).values,s=new Float32Array(a.length);for(let e=0;e<a.length;++e){let t=a[e];s[e]=t*t}return{dataId:r.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},hO=N$(_a,((e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha})),cO={kernelName:_a,backendName:"cpu",kernelFunc:hO};var fO={kernelName:pa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:d,newAxisMask:p,shrinkAxisMask:h}=r;YE(a,"stridedSlice");let c,{finalShapeSparse:f,finalShape:m,isIdentity:g,sliceDim0:y,isSimpleSlice:b,begin:x,end:w,strides:v}=Zf.sliceInfo(a.shape,s,i,o,l,u,d,p,h);if(g)c=PR({inputs:{x:a},backend:n,attrs:{shape:m}});else if(y||b){ja.assert(a.shape.length>=1,(()=>`Input must have rank at least 1, got: ${a.shape.length}`));let e=Zf.computeOutShape(x,w,v),t=ZA({inputs:{x:a},backend:n,attrs:{begin:x,size:e}});c=PR({inputs:{x:t},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(t)}else{let e=pR(f,n.bufferSync(a),v,x);c=n.makeTensorInfo(m,e.dtype,e.values)}return c}};var mO={kernelName:ha,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{separator:a,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=r,{data:d,dataSplits:p}=t,h=n.data.get(d.dataId).values,c=n.data.get(p.dataId).values,[f,m]=cR(h,c,a,s,i,o,l,u);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",m)]}};var gO={kernelName:ca,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:a}=r,{input:s,delimiter:i}=t;if("string"!==s.dtype)throw new Error("Input must be of datatype string");if(1!==s.shape.length)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(0!==i.shape.length)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values[0],[u,d,p]=mR(o,l,a),h=d.length;return[n.makeTensorInfo([h,2],"int32",u),n.makeTensorInfo([h],"string",d),n.makeTensorInfo([2],"int32",new Int32Array(p))]}};var yO={kernelName:fa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:a}=r,{input:s}=t;if("string"!==s.dtype)throw new Error("Input must be of datatype string");if(a<=0)throw new Error("Number of buckets must be at least 1");let i=gR(n.data.get(s.dataId).values,a);return n.makeTensorInfo(s.shape,"int32",i)}},bO=N$(ga,(e=>Math.tan(e))),xO={kernelName:ga,backendName:"cpu",kernelFunc:bO},wO=N$(ya,(e=>Math.tanh(e)));var vO={kernelName:Vr,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n}=e,{tensor:r,indices:a,updates:s}=t,{sliceRank:i,numUpdates:o,sliceSize:l,strides:u,outputSize:d}=Im.calculateShapes(s,a,r.shape),p=n.bufferSync(a),h=n.bufferSync(s),c=n.bufferSync(r),f=jA(p,h,r.shape,d,l,o,i,u,c,!1);return n.makeTensorInfo(r.shape,f.dtype,f.values)}};var kO={kernelName:ba,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;YE(a,"tile");let i=vR(n.bufferSync(a),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}};var IO={kernelName:xa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r;YE(a,"topk");let o=n.data.get(a.dataId).values,[l,u]=SR(o,a.shape,a.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}};var SO={kernelName:wa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{image:a,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[d,p,h,c]=a.shape,[f,m]=null!=u?u:[p,h],g=[d,f,m,c],y=ja.computeStrides(a.shape),b=y[0],x=y[1],w=y[2],v=ja.computeStrides(g),k=v[0],I=v[1],S=v[2],N=ja.getTypedArrayFromDType(a.dtype,ja.sizeFromShape(g));N.fill(l);let T=r.data.get(a.dataId).values,_=r.data.get(s.dataId).values;for(let e=0;e<d;++e){let t=1===s.shape[0]?_:_.subarray(8*e,8*e+8);for(let n=0;n<f;++n)for(let r=0;r<m;++r)for(let a=0;a<c;++a){let s,u=t[6]*r+t[7]*n+1;if(0===u)continue;let d=(t[0]*r+t[1]*n+t[2])/u,c=(t[3]*r+t[4]*n+t[5])/u,f=NO(d,h,o),m=NO(c,p,o);switch(i){case"nearest":s=_O(T,p,h,b,x,w,e,m,f,a,l);break;case"bilinear":s=CO(T,p,h,b,x,w,e,m,f,a,l);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${i}`)}N[e*k+n*I+r*S+a]=s}return r.makeTensorInfo(g,a.dtype,N)}return{dataId:r.write(N,g,a.dtype),shape:a.shape,dtype:a.dtype}}};function NO(e,t,n){switch(n){case"reflect":return function(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let e=2*t;n<e&&(n=e*Math.trunc(-n/e)+n),n=n<-t?n+e:-n-1}else if(n>t-1)if(t<=1)n=0;else{let e=2*t;n-=e*Math.trunc(n/e),n>=t&&(n=e-n-1)}return ja.clamp(0,n,t-1)}(e,t);case"wrap":return function(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let e=t-1;n+=t*(Math.trunc(-n/e)+1)}else if(n>t-1)if(t<=1)n=0;else{let e=t-1;n-=t*Math.trunc(n/e)}return ja.clamp(0,n,t-1)}(e,t);case"nearest":return function(e,t){return ja.clamp(0,e,t-1)}(e,t);default:return function(e,t){return e}(e)}}function TO(e,t,n,r,a,s,i,o,l,u,d){return 0<=o&&o<t&&0<=l&&l<n?e[i*r+o*a+l*s+u]:d}function _O(e,t,n,r,a,s,i,o,l,u,d){return TO(e,t,n,r,a,s,i,Math.round(o),Math.round(l),u,d)}function CO(e,t,n,r,a,s,i,o,l,u,d){let p=Math.floor(o),h=Math.floor(l),c=p+1,f=h+1;return(c-o)*((f-l)*TO(e,t,n,r,a,s,i,p,h,u,d)+(l-h)*TO(e,t,n,r,a,s,i,p,f,u,d))+(o-p)*((f-l)*TO(e,t,n,r,a,s,i,c,h,u,d)+(l-h)*TO(e,t,n,r,a,s,i,c,f,u,d))}var EO={kernelName:ka,backendName:"cpu",kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;YE(s,"unique");let i=r.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:u}=NR(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([u.length],"int32",u)]}};var $O={kernelName:Ia,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape.length,o=a.shape[s],l=new Array(i-1),u=0;for(let e=0;e<i;e++)e!==s&&(l[u++]=a.shape[e]);let d=new Array(i).fill(0),p=a.shape.slice();p[s]=1;let h=new Array(o);for(let e=0;e<h.length;e++){d[s]=e;let t=ZA({inputs:{x:a},backend:n,attrs:{begin:d,size:p}});
2h[e]=PR({inputs:{x:t},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(t)}return h}};var AO={kernelName:Sa,backendName:"cpu",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r;YE(a,"unsortedSegmentSum");let o=[],l=[],u=a.shape.length-s.shape.length,d=s;for(let e=0;e<u;++e){let t=pD({inputs:{input:d},backend:n,attrs:{dim:e+1}});d=t,l.push(t)}for(let e=0;e<i;++e){let t=ja.createScalarValue(e,"int32"),r=n.makeTensorInfo([],"int32",t),s=R$({inputs:{a:r,b:d},backend:n}),i=p$({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),u=xA({inputs:{a:i,b:a},backend:n}),p=QF({inputs:{x:u},backend:n,attrs:{axis:0,keepDims:!1}});o.push(p),l.push(r),l.push(s),l.push(i),l.push(u),l.push(p)}let p=wM({inputs:o,backend:n,attrs:{axis:0}});return l.forEach((e=>n.disposeIntermediateTensorInfo(e))),p}},RO=[UR,t$,HR,qR,b$,KR,XR,YR,ZR,JR,eF,nF,aF,oF,uF,cF,fF,mF,gF,VR,yF,bF,xF,I$,wF,h$,E$,kF,a$,IF,_F,EF,$F,AF,RF,FF,DF,OF,zF,PF,BF,WF,VF,UF,HF,jF,qF,KF,XF,YF,ZF,JF,tD,CR,nD,F$,dD,O$,hD,P$,xD,vD,kD,V$,H$,ID,SD,ND,TD,Y$,Q$,o$,_D,NF,ED,AD,FD,$R,nA,sA,DD,uA,OD,PD,WD,GD,HD,jD,KD,cA,XD,YD,ZD,JD,QD,eM,tM,gA,nM,sM,uM,wA,kA,pM,cM,mM,NA,gM,xM,vM,kM,NM,FR,$A,TM,_M,CM,EM,u$,mD,AM,MR,LR,BR,RM,FM,DM,MM,OM,LM,PM,HA,BM,UM,GM,KM,XA,YM,JM,eO,JA,lM,rO,aO,sO,iO,oO,lO,uO,dO,aR,pO,oR,dR,cO,fO,mO,gO,yO,wR,eD,xO,{kernelName:ya,backendName:"cpu",kernelFunc:wO},vO,kO,IO,SO,CA,EO,$O,AO,bM];for(let e of RO)Ba(e);var FO={};B(FO,{assertNotComplex:()=>VL,bindCanvasToFramebuffer:()=>bL,bindColorTextureToFramebuffer:()=>xL,bindTextureToProgramUniformSampler:()=>yL,bindTextureUnit:()=>cL,bindVertexBufferToProgramAttribute:()=>hL,callAndCheck:()=>HO,canBeRepresented:()=>KO,createFragmentShader:()=>JO,createFramebuffer:()=>pL,createProgram:()=>rL,createStaticIndexBuffer:()=>oL,createStaticVertexBuffer:()=>iL,createTexture:()=>uL,createVertexShader:()=>ZO,getBatchDim:()=>NL,getExtensionOrThrow:()=>YO,getFramebufferErrorMessage:()=>kL,getMaxTexturesInShader:()=>DL,getNumChannels:()=>lL,getProgramUniformLocation:()=>gL,getProgramUniformLocationOrThrow:()=>mL,getRowsCols:()=>TL,getShapeAs3D:()=>_L,getTextureShapeFromLogicalShape:()=>CL,getWebGLDisjointQueryTimerVersion:()=>ML,getWebGLErrorMessage:()=>XO,getWebGLMaxTextureSize:()=>AL,hasExtension:()=>OL,isCapableOfRenderingToFloatTexture:()=>zL,isDownloadFloatTextureEnabled:()=>PL,isReshapeFree:()=>$L,isWebGLFenceEnabled:()=>WL,isWebGLVersionEnabled:()=>LL,linkProgram:()=>aL,logShaderSourceAndInfoLog:()=>nL,resetMaxTextureSize:()=>RL,resetMaxTexturesInShader:()=>FL,unbindColorTextureFromFramebuffer:()=>wL,unbindTextureUnit:()=>fL,validateFramebuffer:()=>vL,validateProgram:()=>sL,validateTextureSize:()=>dL});var DO,MO,OO,LO={},zO={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function PO(e,t){LO[e]=t}function BO(e,t){if(!(e in LO)||null!=t){let n=function(e,t){if(1!==e&&2!==e)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=null==t?function(e){if(!ut().getBool("IS_SAFARI")&&"undefined"!=typeof OffscreenCanvas&&2===e)return new OffscreenCanvas(300,150);if("undefined"!=typeof document)return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}(e):t;return n.addEventListener("webglcontextlost",(t=>{t.preventDefault(),delete LO[e]}),!1),ut().getBool("SOFTWARE_WEBGL_ENABLED")&&(zO.failIfMajorPerformanceCaveat=!1),1===e?n.getContext("webgl",zO)||n.getContext("experimental-webgl",zO):n.getContext("webgl2",zO)}(e,t);if(null===n)return console.log("Could not get context for WebGL version",e),null;LO[e]=n}let n=LO[e];return null==n||n.isContextLost()?(delete LO[e],BO(e)):(n.disable(n.DEPTH_TEST),n.disable(n.STENCIL_TEST),n.disable(n.BLEND),n.disable(n.DITHER),n.disable(n.POLYGON_OFFSET_FILL),n.disable(n.SAMPLE_COVERAGE),n.enable(n.SCISSOR_TEST),n.enable(n.CULL_FACE),n.cullFace(n.BACK),LO[e])}function WO(e,t){return[t,e]}function VO(e){let t=ja.sizeFromShape(e),n=Math.ceil(t/4);return ja.sizeToSquarishShape(n)}function UO(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function GO(e,t){let n,r,a,s,i,o,l,u,d,p,h=e;return 2===ut().getNumber("WEBGL_VERSION")?(n=h.R32F,r=h.R16F,a=h.RGBA16F,s=h.RGBA32F,i=h.RED,l=4,u=1,d=h.HALF_FLOAT,p=h.FLOAT,o=h.RGBA8):(n=e.RGBA,r=e.RGBA,a=e.RGBA,s=h.RGBA,i=e.RGBA,l=4,u=4,d=null!=t?t.HALF_FLOAT_OES:null,p=e.FLOAT,o=e.RGBA),{internalFormatFloat:n,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:a,internalFormatPackedFloat:s,textureFormatFloat:i,downloadTextureFormat:o,downloadUnpackNumChannels:l,defaultNumChannels:u,textureTypeHalfFloat:d,textureTypeFloat:p}}function HO(e,t){let n=t();return ut().getBool("DEBUG")&&function(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+XO(e,t))}(e),n}!function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"}(DO||(DO={})),function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"}(MO||(MO={})),function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"}(OO||(OO={}));var jO=5.96e-8,qO=65504;function KO(e){return!!(ut().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||0===e||jO<Math.abs(e)&&Math.abs(e)<qO)}function XO(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function YO(e,t){return IL(e,(()=>e.getExtension(t)),'Extension "'+t+'" not supported on this browser.')}function ZO(e,t){let n=IL(e,(()=>e.createShader(e.VERTEX_SHADER)),"Unable to create vertex WebGLShader.");if(HO(e,(()=>
2e.shaderSource(n,t))),HO(e,(()=>e.compileShader(n))),!1===e.getShaderParameter(n,e.COMPILE_STATUS))throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function JO(e,t){let n=IL(e,(()=>e.createShader(e.FRAGMENT_SHADER)),"Unable to create fragment WebGLShader.");if(HO(e,(()=>e.shaderSource(n,t))),HO(e,(()=>e.compileShader(n))),ut().get("ENGINE_COMPILE_ONLY"))return n;if(!1===e.getShaderParameter(n,e.COMPILE_STATUS))throw nL(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var QO,eL,tL=/ERROR: [0-9]+:([0-9]+):/g;function nL(e,t){let n=tL.exec(t);if(null==n)return console.log(`Couldn't parse line number in error: ${t}`),void console.log(e);let r=+n[1],a=e.split("\n"),s=a.length.toString().length+2,i=a.map(((e,t)=>ja.rightPad((t+1).toString(),s)+e)),o=0;for(let e=0;e<i.length;e++)o=Math.max(i[e].length,o);let l=i.slice(0,r-1),u=i.slice(r-1,r),d=i.slice(r);console.log(l.join("\n")),console.log(t.split("\n")[0]),console.log(`%c ${ja.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(d.join("\n"))}function rL(e){return IL(e,(()=>e.createProgram()),"Unable to create WebGLProgram.")}function aL(e,t){if(HO(e,(()=>e.linkProgram(t))),!ut().get("ENGINE_COMPILE_ONLY")&&!1===e.getProgramParameter(t,e.LINK_STATUS))throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function sL(e,t){if(HO(e,(()=>e.validateProgram(t))),!1===e.getProgramParameter(t,e.VALIDATE_STATUS))throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function iL(e,t){let n=IL(e,(()=>e.createBuffer()),"Unable to create WebGLBuffer");return HO(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,n))),HO(e,(()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW))),n}function oL(e,t){let n=IL(e,(()=>e.createBuffer()),"Unable to create WebGLBuffer");return HO(e,(()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n))),HO(e,(()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW))),n}function lL(){return 2===ut().getNumber("WEBGL_VERSION")?1:4}function uL(e){return IL(e,(()=>e.createTexture()),"Unable to create WebGLTexture.")}function dL(e,t){let n=ut().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){throw new Error("Requested texture size "+`[${e}x${t}]`+" is invalid.")}if(e>n||t>n){throw new Error("Requested texture size "+`[${e}x${t}]`+" greater than WebGL maximum on this browser / GPU "+`[${n}x${n}]`+".")}}function pL(e){return IL(e,(()=>e.createFramebuffer()),"Unable to create WebGLFramebuffer.")}function hL(e,t,n,r,a,s,i){let o=e.getAttribLocation(t,n);return-1!==o&&(HO(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,r))),HO(e,(()=>e.vertexAttribPointer(o,a,e.FLOAT,!1,s,i))),HO(e,(()=>e.enableVertexAttribArray(o))),!0)}function cL(e,t,n){SL(e,n),HO(e,(()=>e.activeTexture(e.TEXTURE0+n))),HO(e,(()=>e.bindTexture(e.TEXTURE_2D,t)))}function fL(e,t){SL(e,t),HO(e,(()=>e.activeTexture(e.TEXTURE0+t))),HO(e,(()=>e.bindTexture(e.TEXTURE_2D,null)))}function mL(e,t,n){return IL(e,(()=>e.getUniformLocation(t,n)),'uniform "'+n+'" not present in program.')}function gL(e,t,n){return e.getUniformLocation(t,n)}function yL(e,t,n,r){HO(e,(()=>cL(e,t,r))),HO(e,(()=>e.uniform1i(n,r)))}function bL(e){HO(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,null))),HO(e,(()=>e.viewport(0,0,e.canvas.width,e.canvas.height))),HO(e,(()=>e.scissor(0,0,e.canvas.width,e.canvas.height)))}function xL(e,t,n){HO(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,n))),HO(e,(()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0)))}function wL(e,t){HO(e,(()=>
2e.bindFramebuffer(e.FRAMEBUFFER,t))),HO(e,(()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0)))}function vL(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+kL(e,t))}function kL(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function IL(e,t,n){let r=HO(e,(()=>t()));if(null==r)throw new Error(n);return r}function SL(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(r<e.TEXTURE0||r>n){throw new Error(`textureUnit must be in ${`[gl.TEXTURE0, gl.TEXTURE${n}]`}.`)}}function NL(e,t=2){return ja.sizeFromShape(e.slice(0,e.length-t))}function TL(e){if(0===e.length)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function _L(e){let t=[1,1,1];return 0===e.length||1===e.length&&1===e[0]||(t=[NL(e),...TL(e)]),t}function CL(e,t=!1){let n=ut().getNumber("WEBGL_MAX_TEXTURE_SIZE"),r=ut().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");r===1/0&&ut().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(r=n/2),t&&(n*=2,r*=2,1===(e=e.map(((t,n)=>n>=e.length-2?ja.nearestLargerEven(e[n]):e[n]))).length&&(e=[2,e[0]])),2!==e.length&&(e=ja.squeezeShape(e).newShape);let a=ja.sizeFromShape(e),s=null;e.length<=1&&a<=n?s=[1,a]:2===e.length&&e[0]<=n&&e[1]<=n?s=e:3===e.length&&e[0]*e[1]<=n&&e[2]<=n?s=[e[0]*e[1],e[2]]:3===e.length&&e[0]<=n&&e[1]*e[2]<=n?s=[e[0],e[1]*e[2]]:4===e.length&&e[0]*e[1]*e[2]<=n&&e[3]<=n?s=[e[0]*e[1]*e[2],e[3]]:4===e.length&&e[0]<=n&&e[1]*e[2]*e[3]<=n&&(s=[e[0],e[1]*e[2]*e[3]]);let i=null!=s&&Math.max(...s)>r&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(null==s||i)if(t){let t=NL(e),n=2,r=2;e.length&&([n,r]=TL(e)),a=t*(n/2)*(r/2),s=ja.sizeToSquarishShape(a).map((e=>2*e))}else s=ja.sizeToSquarishShape(a);return s}function EL(e){return e%2==0}function $L(e,t){if(e=e.slice(-2),t=t.slice(-2),ja.arraysEqual(e,t)||!e.length||!t.length||0===e[0]||0===e[1]||0===t[0]||0===t[1])return!0;if(e.length!==t.length){let n=e[e.length-1],r=t[t.length-1];if(n===r||EL(n)&&EL(r)&&(1===e[0]||1===t[0]))return!0}return e[1]===t[1]&&EL(e[0])&&EL(t[0])}function AL(e){if(null==QO){let t=BO(e);QO=t.getParameter(t.MAX_TEXTURE_SIZE)}return QO}function RL(){QO=null}function FL(){eL=null}function DL(e){if(null==eL){let t=BO(e);eL=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,eL)}function ML(e){if(0===e)return 0;let t,n=BO(e);return t=OL(n,"EXT_disjoint_timer_query_webgl2")&&2===e?2:OL(n,"EXT_disjoint_timer_query")?1:0,t}function OL(e,t){return null!=e.getExtension(t)}function LL(e){try{if(null!=BO(e))return!0}catch(e){return console.log("Error when getting WebGL context: ",e),!1}return!1}function zL(e){if(0===e)return!1;let t=BO(e);if(1===e){if(!OL(t,"OES_texture_float"))return!1}else if(!OL(t,"EXT_color_buffer_float"))return!1;return BL(t)}function PL(e){if(0===e)return!1;let t=BO(e);if(1!==e){if(OL(t,"EXT_color_buffer_float"))return BL(t);let e="EXT_color_buffer_half_float";if(OL(t,e)){let n=t.getExtension(e);return function(e,t){let n=GO(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let s=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(a),s}(t,n)}return!1}return!(!OL(t,"OES_texture_float")||!OL(t,"WEBGL_color_buffer_float"))&&BL(t)}function BL(e){let t=GO(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let r=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,r),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let a=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(r),a}function WL(e){return 2===e&&null!=BO(e).fenceSync}function VL(e,t){Array.isArray(e)||(e=[e]),e.forEach((e=>{null!=e&&ja.assert("complex64"!==e.dtype,(()=>`${t} does not support complex64 tensors in the WebGL backend.`))}))}var UL=ut();function GL(){let e,t,n,r,a,s,i,o,l,u;return 2===ut().getNumber("WEBGL_VERSION")?(e="#version 300 es",t="in",n="out",r="in",a="texture",s="outputColor",i="out vec4 outputColor;",o=ut().getBool("WEBGL2_ISNAN_CUSTOM")?"\n      bool isnan_custom(float val) {\n        uint floatToUint = floatBitsToUint(val);\n        return (floatToUint & 0x7fffffffu) > 0x7f800000u;\n      }\n\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan_custom(val.x),\n          isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));\n      }\n\n      #define isnan(value) isnan_custom(value)\n    ":"",l="",u="\n      #define round(value) newRound(value)\n      int newRound(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 newRound(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    "):(e="",t="attribute",n="varying",r="varying",a="texture2D",s="gl_FragColor",i="",o="\n      #define isnan(value) isnan_custom(value)\n      bool isnan_custom(float val) {\n        return (val > 0. || val < 1. || val == 0.) ? false : true;\n      }\n      bvec4 isnan_custom(vec4 val) {\n        return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));\n      }\n    ",l="\n      uniform float INFINITY;\n\n      bool isinf(float val) {\n        return abs(val) == INFINITY;\n      }\n      bvec4 isinf(vec4 val) {\n        return equal(abs(val), vec4(INFINITY));\n      }\n    ",u="\n      int round(float value) {\n        return int(floor(value + 0.5));\n      }\n\n      ivec4 round(vec4 value) {\n        return ivec4(floor(value + vec4(0.5)));\n      }\n    "),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:a,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function HL(e,t,n="index"){let r=ja.computeStrides(t);return r.map(((t,a)=>`${`int ${e[a]} = ${n} / ${t}`}; ${a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${t}`:`index -= ${e[a]} * ${t}`};`)).join("")}function jL(e,t,n="index"){let r=ja.computeStrides(t);return r.map(((t,a)=>`${`int ${e[a]} = ${n} / outShapeStrides[${a}]`}; ${a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * outShapeStrides[${a}]`:`index -= ${e[a]} * outShapeStrides[${a}]`};`)).join("")}function qL(e,t,n="index"){let r=function(e,t){let n=e.length,r=e.map((e=>`${t}[${e}]`)),a=new Array(n-1);a[n-2]=r[n-1];for(let e=n-3;e>=0;--e)a[e]=`(${a[e+1]} * ${r[e+1]})`;return a}(e.map(((e,t)=>t)),t);return r.map(((t,a)=>`${`int ${e[a]} = ${n} / ${r[a]}`}; ${a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${r[a]}`:`index -= ${e[a]} * ${r[a]}`};`)).join("")}function KL(e){let t=ja.computeStrides(e).map((e=>e.toString()));return`\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;\n  }\n`}
2UL.registerFlag("HAS_WEBGL",(()=>UL.getNumber("WEBGL_VERSION")>0)),UL.registerFlag("WEBGL_VERSION",(()=>LL(2)?2:LL(1)?1:0)),UL.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",(()=>!1)),UL.registerFlag("WEBGL_BUFFER_SUPPORTED",(()=>2===UL.get("WEBGL_VERSION"))),UL.registerFlag("WEBGL_CPU_FORWARD",(()=>!0)),UL.registerFlag("WEBGL_FORCE_F16_TEXTURES",(()=>!1)),UL.registerFlag("WEBGL_PACK",(()=>UL.getBool("HAS_WEBGL"))),UL.registerFlag("WEBGL_PACK_NORMALIZATION",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_CLIP",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_DEPTHWISECONV",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_REDUCE",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_LAZILY_UNPACK",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_CONV_IM2COL",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",(()=>UL.getBool("WEBGL_PACK"))),UL.registerFlag("WEBGL_MAX_TEXTURE_SIZE",(()=>AL(UL.getNumber("WEBGL_VERSION")))),UL.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",(()=>DL(UL.getNumber("WEBGL_VERSION")))),UL.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",(()=>{let e=UL.getNumber("WEBGL_VERSION");return 0===e?0:ML(e)})),UL.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",(()=>UL.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!ri.isMobile())),UL.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",(()=>zL(UL.getNumber("WEBGL_VERSION")))),UL.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",(()=>!UL.getBool("WEBGL_FORCE_F16_TEXTURES")&&UL.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"))),UL.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",(()=>PL(UL.getNumber("WEBGL_VERSION")))),UL.registerFlag("WEBGL_FENCE_API_ENABLED",(()=>WL(UL.getNumber("WEBGL_VERSION")))),UL.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",(()=>UL.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0)),UL.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",(()=>-1),(e=>{if("number"!=typeof e)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${e}.`);if(e<0&&-1!==e)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)})),UL.registerFlag("WEBGL_FLUSH_THRESHOLD",(()=>ri.isMobile()?1:-1),(e=>{if("number"!=typeof e)throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${e}.`);if(e<0&&-1!==e)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)})),UL.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",(()=>128)),UL.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",(()=>!1)),UL.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",(()=>1e5)),UL.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",(()=>128)),UL.registerFlag("WEBGL_EXP_CONV",(()=>!1)),UL.registerFlag("SOFTWARE_WEBGL_ENABLED",(()=>UL.getBool("IS_TEST"))),UL.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",(()=>1/0)),UL.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",(()=>!1)),UL.registerFlag("WEBGL2_ISNAN_CUSTOM",(()=>!1)),UL.registerFlag("ENGINE_COMPILE_ONLY",(()=>!1));var XL="\n  const float FLOAT_MAX = 1.70141184e38;\n  const float FLOAT_MIN = 1.17549435e-38;\n\n  lowp vec4 encode_float(highp float v) {\n    if (isnan(v)) {\n      return vec4(255, 255, 255, 255);\n    }\n\n    highp float av = abs(v);\n\n    if(av < FLOAT_MIN) {\n      return vec4(0.0, 0.0, 0.0, 0.0);\n    } else if(v > FLOAT_MAX) {\n      return vec4(0.0, 0.0, 128.0, 127.0) / 255.0;\n    } else if(v < -FLOAT_MAX) {\n      return vec4(0.0, 0.0,  128.0, 255.0) / 255.0;\n    }\n\n    highp vec4 c = vec4(0,0,0,0);\n\n    highp float e = floor(log2(av));\n    highp float m = exp2(fract(log2(av))) - 1.0;\n\n    c[2] = floor(128.0 * m);\n    m -= c[2] / 128.0;\n    c[1] = floor(32768.0 * m);\n    m -= c[1] / 32768.0;\n    c[0] = floor(8388608.0 * m);\n\n    highp float ebias = e + 127.0;\n    c[3] = floor(ebias / 2.0);\n    ebias -= c[3] * 2.0;\n    c[2] += floor(ebias) * 128.0;\n\n    c[3] += 128.0 * step(0.0, -v);\n\n    return c / 255.0;\n  }\n",{getBroadcastDims:YL}=Im;function ZL(e,t,n){let r=[];if(e.forEach((e=>{let t=ja.sizeFromShape(e.shapeInfo.logicalShape);if(e.shapeInfo.isUniform?r.push(`uniform float ${e.name}${t>1?`[${t}]`:""};`):(r.push(`uniform sampler2D ${e.name};`),r.push(`uniform int offset${e.name};`)),n.enableShapeUniforms){let{uniformShape:t}=lz(n.packedInputs,e.shapeInfo.logicalShape,e.shapeInfo.texShape);switch(t.length){case 1:r.push(`uniform int ${e.name}Shape;`);break;case 2:r.push(`uniform ivec2 ${e.name}Shape;`);break;case 3:r.push(`uniform ivec3 ${e.name}Shape;`);break;case 4:r.push(`uniform ivec4 ${e.name}Shape;`)}r.push(`uniform ivec2 ${e.name}TexShape;`)}})),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:r.push("uniform int outShape;");break;case 2:r.push("uniform ivec2 outShape;"),r.push("uniform int outShapeStrides;");break;case 3:r.push("uniform ivec3 outShape;"),r.push("uniform ivec2 outShapeStrides;");break;case 4:r.push("uniform ivec4 outShape;"),r.push("uniform ivec3 outShapeStrides;")}r.push("uniform ivec2 outTexShape;")}
2n.customUniforms&&n.customUniforms.forEach((e=>{r.push(`uniform ${e.type} ${e.name}${e.arrayIndex?`[${e.arrayIndex}]`:""};`)}));let a,s,i=r.join("\n"),o=e.map((e=>function(e,t,n=!1,r){let a="";a+=n?QL(e,r):JL(e,r);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(a+=n?function(e,t){let n,r=e.name,a=r.charAt(0).toUpperCase()+r.slice(1),s="get"+a+"AtOutCoords",i=e.shapeInfo.logicalShape.length,o=t.logicalShape.length,l=YL(e.shapeInfo.logicalShape,t.logicalShape),u=oz(o),d=o-i,p=["x","y","z","w","u","v"];n=0===i?"":o<2&&l.length>=1?"coords = 0;":l.map((e=>`coords.${p[e+d]} = 0;`)).join("\n");let h="";h=o<2&&i>0?"coords":e.shapeInfo.logicalShape.map(((e,t)=>`coords.${p[t+d]}`)).join(", ");let c="return outputValue;",f=1===ja.sizeFromShape(e.shapeInfo.logicalShape),m=1===ja.sizeFromShape(t.logicalShape);if(1!==i||f||m){if(f&&!m)c=1===o?"\n        return vec4(outputValue.x, outputValue.x, 0., 0.);\n      ":"\n        return vec4(outputValue.x);\n      ";else if(l.length){let e=i-2,t=i-1;l.indexOf(e)>-1&&l.indexOf(t)>-1?c="return vec4(outputValue.x);":l.indexOf(e)>-1?c="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":l.indexOf(t)>-1&&(c="return vec4(outputValue.xx, outputValue.zz);")}}else c="\n      return vec4(outputValue.xy, outputValue.xy);\n    ";return`\n    vec4 ${s}() {\n      ${u} coords = getOutputCoords();\n      ${n}\n      vec4 outputValue = get${a}(${h});\n      ${c}\n    }\n  `}(e,t):function(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),a="get"+r+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&null==e.shapeInfo.flatOffset&&ja.arraysEqual(i,s))return`\n      float ${a}() {\n        return sampleTexture(${n}, resultUV);\n      }\n    `;let u,d=oz(l),p=YL(e.shapeInfo.logicalShape,t.logicalShape),h=l-o,c=["x","y","z","w","u","v"];u=0===o?"":l<2&&p.length>=1?"coords = 0;":p.map((e=>`coords.${c[e+h]} = 0;`)).join("\n");let f="";return f=l<2&&o>0?"coords":e.shapeInfo.logicalShape.map(((e,t)=>`coords.${c[t+h]}`)).join(", "),`\n    float ${a}() {\n      ${d} coords = getOutputCoords();\n      ${u}\n      return get${r}(${f});\n    }\n  `}(e,t)),a}(e,t,n.packedInputs,n.enableShapeUniforms))).join("\n"),l=t.texShape,u=GL(),d=function(e){return`\n    float sampleTexture(sampler2D textureSampler, vec2 uv) {\n      return ${e.texture2D}(textureSampler, uv).r;\n    }\n  `}(u),p=function(e){return`${e.version}\n    precision highp float;\n    precision highp int;\n    precision highp sampler2D;\n    ${e.varyingFs} vec2 resultUV;\n    ${e.defineOutput}\n    const vec2 halfCR = vec2(0.5, 0.5);\n\n    struct ivec5\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n    };\n\n    struct ivec6\n    {\n      int x;\n      int y;\n      int z;\n      int w;\n      int u;\n      int v;\n    };\n\n    uniform float NAN;\n    ${e.defineSpecialNaN}\n    ${e.defineSpecialInf}\n    ${e.defineRound}\n\n    int imod(int x, int y) {\n      return x - y * (x / y);\n    }\n\n    int idiv(int a, int b, float sign) {\n      int res = a / b;\n      int mod = imod(a, b);\n      if (sign < 0. && mod != 0) {\n        res -= 1;\n      }\n      return res;\n    }\n\n    //Based on the work of Dave Hoskins\n    //https://www.shadertoy.com/view/4djSRW\n    #define HASHSCALE1 443.8975\n    float random(float seed){\n      vec2 p = resultUV * seed;\n      vec3 p3  = fract(vec3(p.xyx) * HASHSCALE1);\n      p3 += dot(p3, p3.yzx + 19.19);\n      return fract((p3.x + p3.y) * p3.z);\n    }\n\n    ${ez}\n    ${tz}\n    ${nz}\n  `}(u);return t.isPacked?(a=function(e,t,n){switch(e.length){case 0:return az();case 1:return function(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return 1===r[0]?n?"\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));\n      }\n    ":`\n      int getOutputCoords() {\n        return 2 * int(resultUV.x * ${r[1]}.0);\n      }\n    `:1===r[1]?n?"\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));\n      }\n    ":`\n      int getOutputCoords() {\n        return 2 * int(resultUV.y * ${r[0]}.0);\n      }\n    `:n?"\n    int getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
2\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);\n    }\n  ":`\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${r[0]}, ${r[1]}));\n      return 2 * (resTexRC.x * ${r[1]} + resTexRC.y);\n    }\n  `}(0,t,n);case 2:return function(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(ja.arraysEqual(e,t))return n?"\n      ivec2 getOutputCoords() {\n        ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n        return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));\n      }\n    ":`\n      ivec2 getOutputCoords() {\n        return 2 * ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]}));\n      }\n    `;let a=Math.ceil(e[1]/2);return n?"\n    ivec2 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec2(r, c);\n    }\n  ":`\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${r[0]}, ${r[1]}));\n\n      int index = resTexRC.x * ${r[1]} + resTexRC.y;\n      int r = 2 * (index / ${a});\n      int c = imod(index, ${a}) * 2;\n\n      return ivec2(r, c);\n    }\n  `}(e,t,n);case 3:return function(e,t,n){if(n)return"\n    ivec3 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));\n      int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n      int b = index / texelsInBatch;\n      index -= b * texelsInBatch;\n\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec3(b, r, c);\n    }\n  ";let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],a=Math.ceil(e[2]/2),s=a*Math.ceil(e[1]/2);return`\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${r[0]}, ${r[1]}));\n      int index = resTexRC.x * ${r[1]} + resTexRC.y;\n\n      int b = index / ${s};\n      index -= b * ${s};\n\n      int r = 2 * (index / ${a});\n      int c = imod(index, ${a}) * 2;\n\n      return ivec3(b, r, c);\n    }\n  `}(e,t,n);default:return function(e,t,n){if(n)return"\n    ivec4 getOutputCoords() {\n      ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(packedTexShape[0], packedTexShape[1]));\n      int index = resTexRC.x * packedTexShape[1] + resTexRC.y;\n\n      int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));\n      int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));\n      int texelsInBatchN = texelsInBatch * outShape[1];\n\n      int b2 = index / texelsInBatchN;\n      index -= b2 * texelsInBatchN;\n\n      int b = index / texelsInBatch;\n      index -= b * texelsInBatch;\n\n      int r = 2 * (index / texelsInLogicalRow);\n      int c = imod(index, texelsInLogicalRow) * 2;\n\n      return ivec4(b2, b, r, c);\n    }\n  ";let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],a=Math.ceil(e[e.length-1]/2),s=a*Math.ceil(e[e.length-2]/2),i=s,o="",l="b, r, c";for(let t=2;t<e.length-1;t++)i*=e[e.length-t-1],o=`\n      int b${t} = index / ${i};\n      index -= b${t} * ${i};\n    `+o,l=`b${t}, `+l;return`\n    ivec${e.length}
2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${r[0]}, ${r[1]}));\n      int index = resTexRC.x * ${r[1]} + resTexRC.y;\n\n      ${o}\n\n      int b = index / ${s};\n      index -= b * ${s};\n\n      int r = 2 * (index / ${a});\n      int c = imod(index, ${a}) * 2;\n\n      return ivec${e.length}(${l});\n    }\n  `}(e,t,n)}}(t.logicalShape,l,n.enableShapeUniforms),s=function(e){return`\n    void setOutput(vec4 val) {\n      ${e.output} = val;\n    }\n  `}(u)):(a=function(e,t,n){switch(e.length){case 0:return az();case 1:return function(e,t,n){return 1===t[0]?n?"\n      int getOutputCoords() {\n        return int(resultUV.x * float(outTexShape[1]));\n      }\n    ":`\n      int getOutputCoords() {\n        return int(resultUV.x * ${t[1]}.0);\n      }\n    `:1===t[1]?n?"\n      int getOutputCoords() {\n        return int(resultUV.y * float(outTexShape[0]));\n      }\n    ":`\n      int getOutputCoords() {\n        return int(resultUV.y * ${t[0]}.0);\n      }\n    `:n?"\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(outTexShape[0], outTexShape[1]));\n      return resTexRC.x * outTexShape[1] + resTexRC.y;\n    }\n  ":`\n    int getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${t[0]}, ${t[1]}));\n      return resTexRC.x * ${t[1]} + resTexRC.y;\n    }\n  `}(0,t,n);case 2:return function(e,t,n){return ja.arraysEqual(e,t)?n?"\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));\n      }\n    ":`\n      ivec2 getOutputCoords() {\n        return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));\n      }\n    `:1===e[1]?n?"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(outTexShape[0], outTexShape[1]));\n        int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    ":`\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(${t[0]}, ${t[1]}));\n        int index = resTexRC.x * ${t[1]} + resTexRC.y;\n        return ivec2(index, 0);\n      }\n    `:1===e[0]?n?"\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(outTexShape[0], outTexShape[1]));\n        int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n        return ivec2(0, index);\n      }\n    ":`\n      ivec2 getOutputCoords() {\n        ivec2 resTexRC = ivec2(resultUV.yx *\n                               vec2(${t[0]}, ${t[1]}));\n        int index = resTexRC.x * ${t[1]} + resTexRC.y;\n        return ivec2(0, index);\n      }\n    `:n?"\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(outTexShape[0], outTexShape[1]));\n      int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n      int r = index / outShape[1];\n      int c = index - r * outShape[1];\n      return ivec2(r, c);\n    }\n  ":`\n    ivec2 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${t[0]}, ${t[1]}));\n      int index = resTexRC.x * ${t[1]} + resTexRC.y;\n      int r = index / ${e[1]};\n      int c = index - r * ${e[1]};\n      return ivec2(r, c);\n    }\n  `}(e,t,n);case 3:return function(e,t,n){if(n)return`\n  ivec3 getOutputCoords() {\n    ivec2 resTexRC = ivec2(resultUV.yx *\n                           vec2(outTexShape[0], outTexShape[1]));\n    int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n    ${jL(["r","c","d"],e)}\n    return ivec3(r, c, d);\n  }\n`;let r=HL(["r","c","d"],e);return`\n    ivec3 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n                             vec2(${t[0]}, ${t[1]}));\n      int index = resTexRC.x * ${t[1]} + resTexRC.y;\n      ${r}\n      return ivec3(r, c, d);\n    }\n  `}(e,t,n);case 4:return function(e,t,n){if(n)return`\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(outTexShape[0], outTexShape[1]));\n      int index = resTexRC.x * outTexShape[1] + resTexRC.y;\n      ${jL(["r","c","d","d2"],e)}\n      return ivec4(r, c, d, d2);\n    }\n  `;let r=HL(["r","c","d","d2"],e);return`\n    ivec4 getOutputCoords() {\n      ivec2 resTexRC = ive
2c2(resultUV.yx *\n        vec2(${t[0]}, ${t[1]}));\n      int index = resTexRC.x * ${t[1]} + resTexRC.y;\n      ${r}\n      return ivec4(r, c, d, d2);\n    }\n  `}(e,t,n);case 5:return function(e,t){let n=HL(["r","c","d","d2","d3"],e);return`\n    ivec5 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},\n                             ${t[1]}));\n\n      int index = resTexRC.x * ${t[1]} + resTexRC.y;\n\n      ${n}\n\n      ivec5 outShape = ivec5(r, c, d, d2, d3);\n      return outShape;\n    }\n  `}(e,t);case 6:return function(e,t){let n=HL(["r","c","d","d2","d3","d4"],e);return`\n    ivec6 getOutputCoords() {\n      ivec2 resTexRC = ivec2(resultUV.yx *\n        vec2(${t[0]}, ${t[1]}));\n      int index = resTexRC.x * ${t[1]} + resTexRC.y;\n\n      ${n}\n\n      ivec6 result = ivec6(r, c, d, d2, d3, d4);\n      return result;\n    }\n  `}(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}(t.logicalShape,l,n.enableShapeUniforms),s=function(e){return`\n    void setOutput(float val) {\n      ${e.output} = vec4(val, 0, 0, 0);\n    }\n  `}(u)),n.packedInputs&&(p+=rz),[p,d,s,i,a,o,n.userCode].join("\n")}function JL(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return function(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`float ${r}() {return ${n};}`;let[a,s]=e.shapeInfo.texShape;if(1===a&&1===s)return`\n      float ${r}() {\n        return sampleTexture(${n}, halfCR);\n      }\n    `;let i=sz(n);if(t)return`\n    float ${r}() {\n      vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], ${i});\n      return sampleTexture(${n}, uv);\n    }\n  `;let[o,l]=e.shapeInfo.texShape;return`\n    float ${r}() {\n      vec2 uv = uvFromFlat(${o}, ${l}, ${i});\n      return sampleTexture(${n}, uv);\n    }\n  `}(e,t);case 1:return function(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`\n      float ${r}(int index) {\n        ${iz(e)}\n      }\n    `;let a=e.shapeInfo.texShape,s=a[0],i=a[1];if(1===i&&1===s)return`\n      float ${r}(int index) {\n        return sampleTexture(${n}, halfCR);\n      }\n    `;let o=sz(n);return 1===i?t?`\n      float ${r}(int index) {\n        vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${n}TexShape[0]));\n        return sampleTexture(${n}, uv);\n      }\n    `:`\n      float ${r}(int index) {\n        vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / ${s}.0);\n        return sampleTexture(${n}, uv);\n      }\n    `:1===s?t?`\n      float ${r}(int index) {\n        vec2 uv = vec2((float(index + ${o}) + 0.5) / float(${n}TexShape[1]), 0.5);\n        return sampleTexture(${n}, uv);\n      }\n    `:`\n      float ${r}(int index) {\n        vec2 uv = vec2((float(index + ${o}) + 0.5) / ${i}.0, 0.5);\n        return sampleTexture(${n}, uv);\n      }\n    `:t?`\n    float ${r}(int index) {\n      vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index + ${o});\n      return sampleTexture(${n}, uv);\n    }\n  `:`\n    float ${r}(int index) {\n      vec2 uv = uvFromFlat(${s}, ${i}, index + ${o});\n      return sampleTexture(${n}, uv);\n    }\n  `}(e,t);case 2:return function(e,t){let n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape;if(null!=s&&ja.arraysEqual(n,s)){if(t)return`\n      float ${a}(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);\n        return sampleTexture(${r}, uv);\n      }\n    `;let e=s[0];return`\n    float ${a}(int row, int col) {\n      vec2 uv = (vec2(col, row) + halfCR) / vec2(${s[1]}.0, ${e}.0);\n      return sampleTexture(${r}, uv);\n    }\n  `}let{newShape:i,keptDims:o}=ja.squeezeShape(n),l=i;if(l.length<n.length){let n=["row","col"];return`\n      ${JL(uz(e,l),t)}\n      float ${a}(int row, int col) {\n        return ${a}(${dz(n,o)});\n      }\n    `}if(e.shapeInfo.isUniform)return`\n      float ${a}(int row, int col) {\n        int index = round(dot(vec2(row, col), vec2(${n[1]}, 1)));\n        ${iz(e)}\n      }\n    `;let u=s[0],d=s[1],p=sz(r);
2return 1===d?t?`\n      float ${a}(int row, int col) {\n        float index = dot(vec3(row, col, ${p}), vec3(${r}Shape[1], 1, 1));\n        vec2 uv = vec2(0.5, (index + 0.5) / float(${r}TexShape[0]));\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n    float ${a}(int row, int col) {\n      float index = dot(vec3(row, col, ${p}), vec3(${n[1]}, 1, 1));\n      vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0);\n      return sampleTexture(${r}, uv);\n    }\n  `:1===u?t?`\n      float ${a}(int row, int col) {\n        float index = dot(vec3(row, col, ${p}), vec3(${r}Shape[1], 1, 1));\n        vec2 uv = vec2((index + 0.5) / float(${r}TexShape[1]), 0.5);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n    float ${a}(int row, int col) {\n      float index = dot(vec3(row, col, ${p}), vec3(${n[1]}, 1, 1));\n      vec2 uv = vec2((index + 0.5) / ${d}.0, 0.5);\n      return sampleTexture(${r}, uv);\n    }\n  `:t?`\n      float ${a}(int row, int col) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * ${r}Shape[1] + col + ${p};\n        vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n  float ${a}(int row, int col) {\n    // Explicitly use integer operations as dot() only works on floats.\n    int index = row * ${n[1]} + col + ${p};\n    vec2 uv = uvFromFlat(${u}, ${d}, index);\n    return sampleTexture(${r}, uv);\n  }\n`}(e,t);case 3:return function(e,t){let n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=n[1]*n[2],i=n[2],{newShape:o,keptDims:l}=ja.squeezeShape(n),u=o;if(u.length<n.length){let n=["row","col","depth"];return`\n        ${JL(uz(e,u),t)}\n        float ${a}(int row, int col, int depth) {\n          return ${a}(${dz(n,l)});\n        }\n      `}if(e.shapeInfo.isUniform)return`\n      float ${a}(int row, int col, int depth) {\n        int index = round(dot(vec3(row, col, depth),\n                          vec3(${s}, ${i}, 1)));\n        ${iz(e)}\n      }\n    `;let d=e.shapeInfo.texShape,p=d[0],h=d[1],c=e.shapeInfo.flatOffset;if(h===s&&null==c)return t?`\n      float ${a}(int row, int col, int depth) {\n        int stride1 = ${r}Shape[2];\n        float texR = float(row);\n        float texC = dot(vec2(col, depth), vec2(stride1, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${r}TexShape[1], ${r}TexShape[0]);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n        float ${a}(int row, int col, int depth) {\n          float texR = float(row);\n          float texC = dot(vec2(col, depth), vec2(${i}, 1));\n          vec2 uv = (vec2(texC, texR) + halfCR) /\n                     vec2(${h}.0, ${p}.0);\n          return sampleTexture(${r}, uv);\n        }\n      `;if(h===i&&null==c)return t?`\n      float ${a}(int row, int col, int depth) {\n        float texR = dot(vec2(row, col), vec2(${r}Shape[1], 1));\n        float texC = float(depth);\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n    float ${a}(int row, int col, int depth) {\n      float texR = dot(vec2(row, col), vec2(${n[1]}, 1));\n      float texC = float(depth);\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${h}.0, ${p}.0);\n      return sampleTexture(${r}, uv);\n    }\n  `;let f=sz(r);return t?`\n    float ${a}(int row, int col, int depth) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int stride0 = ${r}Shape[1] * ${r}Shape[2];\n      int stride1 = ${r}Shape[2];\n      int index = row * stride0 + col * stride1 + depth + ${f};\n      vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index);\n      return sampleTexture(${r}, uv);\n    }\n    `:`\n      float ${a}(int row, int col, int depth) {\n        // Explicitly use integer operations as dot() only works on floats.\n        int index = row * ${s} + col * ${i} + depth + ${f};\n        vec2 uv = uvFromFlat(${p}, ${h}, index);\n        return sampleTexture(${r}, uv);\n      }\n  `}(e,t);case 4:return function(e,t){let n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=n[3],i=n[2]*s,o=n[1]*i,{newShape:l,keptDims:u}=ja.squeezeShape(n);if(l.length<n.length){let n=["row","col","depth","depth2"];return`\n      ${JL(uz(e,l),t)}\n      float ${a}(int row, int col, int depth, int depth2) {\n        return ${a}(${dz(n,u)});\n      }\n    `}if(e.shapeInfo.isUniform)return`\n      float ${a}(int row, int col, int depth, int depth2) {\n        int index = round(dot(vec4(row, col, depth, depth2),\n                          vec4(${o}, ${i}, ${s}, 1)));\n        ${iz(e)}\n      }\n    `;let d=e.shapeInfo.flatOffset,p=e.shapeInfo.texShape,h=p[0],c=p[1],f=`int stride2 = ${r}Shape[3];`,m=`int stride1 = ${r}Shape[2] * stride2;`,g=`int stride0 = ${r}Shape[1] * stride1;`;if(c===o&&null==d)return t?`\n      float ${a}(int row, int col, int depth, int depth2) {\n        ${f}\n        ${m}\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3(stride1, str
2ide2, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${r}TexShape[1], ${r}TexShape[0]);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n      float ${a}(int row, int col, int depth, int depth2) {\n        float texR = float(row);\n        float texC =\n            dot(vec3(col, depth, depth2),\n                vec3(${i}, ${s}, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${c}.0, ${h}.0);\n        return sampleTexture(${r}, uv);\n      }\n    `;if(c===s&&null==d)return t?`\n      float ${a}(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3(${r}Shape[1] * ${r}Shape[2], ${r}Shape[2], 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${r}TexShape[1], ${r}TexShape[0]);\n        return sampleTexture(${r}, uv);\n      }\n    `:`\n      float ${a}(int row, int col, int depth, int depth2) {\n        float texR = dot(vec3(row, col, depth),\n                         vec3(${n[1]*n[2]}, ${n[2]}, 1));\n        float texC = float(depth2);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${c}.0, ${h}.0);\n        return sampleTexture(${r}, uv);\n      }\n    `;let y=sz(r);return t?`\n    float ${a}(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      ${f}\n      ${m}\n      ${g}\n      int index = row * stride0 + col * stride1 +\n          depth * stride2 + depth2;\n      vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index + ${y});\n      return sampleTexture(${r}, uv);\n    }\n  `:`\n    float ${a}(int row, int col, int depth, int depth2) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${o} + col * ${i} +\n          depth * ${s} + depth2;\n      vec2 uv = uvFromFlat(${h}, ${c}, index + ${y});\n      return sampleTexture(${r}, uv);\n    }\n  `}(e,t);case 5:return function(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=t[4],s=t[3]*a,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:u}=ja.squeezeShape(t);if(l.length<t.length){let t=["row","col","depth","depth2","depth3"];return`\n      ${JL(uz(e,l))}\n      float ${r}(int row, int col, int depth, int depth2, int depth3) {\n        return ${r}(${dz(t,u)});\n      }\n    `}if(e.shapeInfo.isUniform)return`\n      float ${r}(int row, int col, int depth, int depth2, int depth3) {\n        float index = dot(\n          vec4(row, col, depth, depth2),\n          vec4(${o}, ${i}, ${s}, ${a})) +\n          depth3;\n        ${iz(e)}\n      }\n    `;let d=e.shapeInfo.flatOffset,p=e.shapeInfo.texShape,h=p[0],c=p[1];if(c===o&&null==d)return`\n      float ${r}(int row, int col, int depth, int depth2, int depth3) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n                         vec4(${i}, ${s}, ${a}, 1));\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${c}.0, ${h}.0);\n        return sampleTexture(${n}, uv);\n      }\n    `;if(c===a&&null==d)return`\n      float ${r}(int row, int col, int depth, int depth2, int depth3) {\n        float texR = dot(\n          vec4(row, col, depth, depth2),\n          vec4(${t[1]*t[2]*t[3]},\n               ${t[2]*t[3]}, ${t[3]}, 1));\n        int texC = depth3;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${c}.0, ${h}.0);\n        return sampleTexture(${n}, uv);\n      }\n    `;let f=sz(n);return`\n    float ${r}(int row, int col, int depth, int depth2, int depth3) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${o} + col * ${i} + depth * ${s} +\n          depth2 * ${a} + depth3 + ${f};\n      vec2 uv = uvFromFlat(${h}, ${c}, index);\n      return sampleTexture(${n}, uv);\n    }\n  `}(e);case 6:return function(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:a,keptDims:s}=ja.squeezeShape(t);if(a.length<t.length){let t=["row","col","depth","depth2","depth3","depth4"];return`\n      ${JL(uz(e,a))}\n      float ${r}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        return ${r}(${dz(t,s)});\n      }\n    `}let i=t[5],o=t[4]*i,l=t[3]*o,u=t[2]*l,d=t[1]*u;if(e.shapeInfo.isUniform)return`\n      float ${r}(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n        int index = round(dot(\n          vec4(row, col, depth, depth2),\n          vec4(${d}, ${u}, ${l}, ${o})) +\n          dot(\n            vec2(depth3, depth4),\n            vec2(${i}, 1)));\n        ${iz(e)}\n      }\n    `;let p=e.shapeInfo.flatOffset,h=e.shapeInfo.texShape,c=h[0],f=h[1];if(f===d&&null==p)return`\n      float ${r}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        int texR = row;\n        float texC = dot(vec4(col, depth, depth2, depth3),\n          vec4(${u}, ${l}, ${o}, ${i})) +\n               float(depth4);\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                   vec2(${f}.0, ${c}.0);\n        return sampleTexture(${n}, uv);\n      }\n    `;if(f===i&&null==p)return`\n      float ${r}(int row, int col, int depth,\n                    int depth2, int depth3, int depth4) {\n        float texR = dot
2(vec4(row, col, depth, depth2),\n          vec4(${t[1]*t[2]*t[3]*t[4]},\n               ${t[2]*t[3]*t[4]},\n               ${t[3]*t[4]},\n               ${t[4]})) + float(depth3);\n        int texC = depth4;\n        vec2 uv = (vec2(texC, texR) + halfCR) /\n                  vec2(${f}.0, ${c}.0);\n        return sampleTexture(${n}, uv);\n      }\n    `;let m=sz(n);return`\n    float ${r}(int row, int col, int depth,\n                  int depth2, int depth3, int depth4) {\n      // Explicitly use integer operations as dot() only works on floats.\n      int index = row * ${d} + col * ${u} + depth * ${l} +\n          depth2 * ${o} + depth3 * ${i} + depth4 + ${m};\n      vec2 uv = uvFromFlat(${c}, ${f}, index);\n      return sampleTexture(${n}, uv);\n    }\n  `}(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function QL(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return function(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=GL();return`\n    vec4 ${n}() {\n      return ${r.texture2D}(${t}, halfCR);\n    }\n  `}(e);case 1:return function(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=e.shapeInfo.texShape,s=GL();if(t)return`\n    vec4 ${r}(int index) {\n      ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));\n      vec2 uv = packedUVfrom1D(\n        packedTexShape[0], packedTexShape[1], index);\n      return ${s.texture2D}(${n}, uv);\n    }\n  `;let i=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];return`\n    vec4 ${r}(int index) {\n      vec2 uv = packedUVfrom1D(\n        ${i[0]}, ${i[1]}, index);\n      return ${s.texture2D}(${n}, uv);\n    }\n  `}(e,t);case 2:return function(e,t){let n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=GL();if(null!=s&&ja.arraysEqual(n,s))return t?`\n      vec4 ${a}(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);\n\n        return ${l.texture2D}(${r}, uv);\n      }\n    `:`\n      vec4 ${a}(int row, int col) {\n        vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}.0, ${i}.0);\n\n        return ${l.texture2D}(${r}, uv);\n      }\n    `;if(t)return`\n    vec4 ${a}(int row, int col) {\n      ivec2 packedTexShape = ivec2(ceil(float(${r}TexShape[0]) / 2.0), ceil(float(${r}TexShape[1]) / 2.0));\n      int valuesPerRow = int(ceil(float(${r}Shape[1]) / 2.0));\n      vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);\n      return ${l.texture2D}(${r}, uv);\n    }\n  `;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],d=Math.ceil(n[1]/2);return`\n    vec4 ${a}(int row, int col) {\n      vec2 uv = packedUVfrom2D(${d}, ${u[0]}, ${u[1]}, row, col);\n      return ${l.texture2D}(${r}, uv);\n    }\n  `}(e,t);case 3:return function(e,t){let n=e.shapeInfo.logicalShape,r=e.name,a="get"+r.charAt(0).toUpperCase()+r.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(1===n[0]){let r=[1,2],s=["b","row","col"];return`\n        ${QL(uz(e,n.slice(1)),t)}\n        vec4 ${a}(int b, int row, int col) {\n          return ${a}(${dz(s,r)});\n        }\n      `}let o=GL();if(t)return`\n    vec4 ${a}(int b, int row, int col) {\n      ivec2 packedTexShape = ivec2(ceil(float(${r}TexShape[0]) / 2.0), ceil(float(${r}TexShape[1]) / 2.0));\n      int valuesPerRow = int(ceil(float(${r}Shape[2]) / 2.0));\n      int texelsInBatch = valuesPerRow * int(ceil(float(${r}Shape[1]) / 2.0));\n      vec2 uv = packedUVfrom3D(\n        packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);\n      return ${o.texture2D}(${r}, uv);\n    }\n  `;let l=i[0],u=i[1],d=Math.ceil(n[2]/2),p=d*Math.ceil(n[1]/2);return`\n    vec4 ${a}(int b, int row, int col) {\n      vec2 uv = packedUVfrom3D(\n        ${l}, ${u}, ${p}, ${d}, b, row, col);\n      return ${o.texture2D}(${r}, uv);\n    }\n  `}(e,t);default:return function(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),a=GL();if(t)return`\n    vec4 ${r}(int b2, int b, int row, int col) {\n      int valuesPerRow = int(ceil(float(${n}Shape[3]) / 2.0));\n      int texelsInBatch = valuesPerRow * int(ceil(float(${n}Shape[2]) / 2.0));\n      int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);\n      texelsInBatch *= ${n}Shape[1];\n      index = b2 * texelsInBatch + index;\n      ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));\n      int texR = index / packedTexShape[1];\n      int texC = index - texR * packedTexShape[1];\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${a.texture2D}(${n}, uv);\n    }\n  `;let s=e.shapeInfo.logicalShape,i=s.length,o=e.shapeInfo.texShape,l=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)],u=l[0],d=l[1],p=Math.ceil(s[i-1]/2),h=p*Math.ceil(s[i-2]/2),c="int b, int row, int col",f=`b * ${h} + (row / 2) * ${p} + (col / 2)`;for(let e=2;e<i-1;e++)c=`int b${e}, `+c,h*=s[i-e-1],f=`b${e} * ${h} + `+f;return`\n    vec4 ${r}(${c}) {\n      int index = ${f};\n      int texR = index / ${d};\n      int texC = index - texR * ${d};\n      vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${d}, ${u});\n      return ${a.texture2D}(${n}, uv);\n    }\n  `}(e,t)}}var ez="\nvec2 uvFromFlat(int texNumR, int texNumC, int index) {\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\nvec2 packedUVfrom1D(int texNumR, int texNumC, int index) {\n  int texelIndex = index / 2;\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",tz="\nvec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,\n  int texNumC, int row, int col) {\n  int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = texelIndex / texNumC;\n  int texC = texelIndex - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",nz="\nvec2 packedUVfrom3D(int texNumR, int texNumC,\n    int texelsInBatch, int texelsInLogicalRow, int b,\n    int row, int col) {\n  int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);\n  int texR = index / texNumC;\n  int texC = index - texR * texNumC;\n  return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);\n}\n",rz="\n  float getChannel(vec4 frag, vec2 innerDims) {\n    vec2 modCoord = mod(innerDims, 2.);\n    return modCoord.x == 0. ?\n      (modCoord.y == 0. ? frag.r : frag.g) :\n      (modCoord.y == 0. ? frag.b : frag.a);\n  }\n  float getChannel(vec4 frag, int dim) {\n    float modCoord = mod(float(dim), 2.);\n    return modCoord == 0. ? frag.r : frag.g;\n  }\n";function az(){return"\n    int getOutputCoords() {\n      return 0;\n    }\n  "}function sz(e){return`offset${e}`}function iz(e){let t=e.name,n=ja.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`\n    for (int i = 0; i < ${n};
2 i++) {\n      if (i == index) {\n        return ${t}[i];\n      }\n    }\n  `}function oz(e){if(e<=1)return"int";if(2===e)return"ivec2";if(3===e)return"ivec3";if(4===e)return"ivec4";if(5===e)return"ivec5";if(6===e)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function lz(e,t,n){let{newShape:r,keptDims:a}=ja.squeezeShape(t),s=t.length,i=e&&3===s&&1===t[0],o=i?t.slice(1):r,l=!e&&s>1&&!ja.arraysEqual(t,n)&&r.length<s||i;return{useSqueezeShape:l,uniformShape:l?o:t,keptDims:a}}function uz(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function dz(e,t){return t.map((t=>e[t])).join(", ")}function pz(e,t,n){let r,a,s,i=[],o=[],l=null,u=null;u=e.getUniformLocation(n,"NAN",!1),1===ut().getNumber("WEBGL_VERSION")&&(l=e.getUniformLocation(n,"INFINITY",!1));let d=!1;for(let r of t.variableNames){let a={name:r,uniform:e.getUniformLocation(n,r,d),offset:e.getUniformLocation(n,`offset${r}`,d)};t.enableShapeUniforms&&(a.shape=e.getUniformLocation(n,`${r}Shape`,d),a.texShape=e.getUniformLocation(n,`${r}TexShape`,d)),i.push(a)}if(t.enableShapeUniforms&&(r=e.getUniformLocation(n,"outShape",d),s=e.getUniformLocation(n,"outShapeStrides",d),a=e.getUniformLocation(n,"outTexShape",d)),t.customUniforms)for(let r of t.customUniforms)o.push(e.getUniformLocation(n,r.name,d));return{variablesLocations:i,customUniformLocations:o,infLoc:l,nanLoc:u,outShapeLocation:r,outShapeStridesLocation:s,outTexShapeLocation:a}}function hz(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach(((e,n)=>{let r=e.logicalShape,a=t[n],s=a.shape;if(!ja.arraysEqual(r,s))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${s} must match`);if(e.isUniform&&a.isUniform)return;let i=e.texShape,o=a.isUniform?null:a.texData.texShape;if(!ja.arraysEqual(i,o))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${o} must match`)}))}function cz(e){return ut().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var fz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=DO.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=GL();this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length),this.userCode=`\n      ivec3 outCoordsFromFlatIndex(int index) {\n        ${this.enableShapeUniforms?jL(["r","c","d"],e):HL(["r","c","d"],e)}\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n        int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getA(rc.x, rc.y, rc.z);\n        }\n\n        ${t.output} = result;\n      }\n    `}},mz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=DO.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=GL();this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length),this.userCode=`\n      ivec3 outCoordsFromFlatIndex(int index) {\n        ${this.enableShapeUniforms?jL(["r","c","d"],e):HL(["r","c","d"],e)}\n        return ivec3(r, c, d);\n      }\n\n      void main() {\n        ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));\n        int index = 4 * (resTexRC.x * texShape[1] + resTexRC.y);\n\n        vec4 result = vec4(0.);\n\n        for (int i=0; i<4; i++) {\n          int flatIndex = index + i;\n          ivec3 rc = outCoordsFromFlatIndex(flatIndex);\n          result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z));\n        }\n\n        ${t.output} = result;\n      }\n    `}},gz=class{constructor(e){this.variableNames=["A"],this.outTexUsage=MO.DOWNLOAD;let t=GL();this.outputShape=e,this.userCode=`\n      ${XL}\n\n      void main() {\n        float x = getAAtOutCoords();\n        ${t.output} = encode_float(x);\n      }\n    `}},yz=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=MO.DOWNLOAD;let t=GL();this.outputShape=e,this.userCode=`\n      ${XL}\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n        float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));\n        ${t.output} = encode_float(x);\n      }\n    `}},bz={R:0,G:1,B:2,A:3},xz=class{constructor(e,t=!1,n="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let r=GL();this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length);let a="result";t&&(a="floor(result * 255. + 0.5)");let s="";for(let e=0;e<n.length;e++){let t=n[e];s+=`\n          if(offset == ${e}) {\n            result = values[${bz[t]}];\n          }`}this.userCode=`\n      ${this.enableShapeUniforms?"\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n  }\n":KL(e)}\n\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int flatIndex = getFlatIndex(coords);\n        float result = 0.;\n        int offset = imod(flatIndex, ${n.length});\n\n        flatIndex = idiv(flatIndex, ${n.length}, 1.);\n\n        int r = flatIndex / texShape[1];
2\n        if (r < texShape[0]) {\n          int c = imod(flatIndex, texShape[1]);\n          vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);\n          vec4 values = ${r.texture2D}(A, uv);\n          ${s}\n        }\n        ${r.output} = vec4(${a}, 0., 0., 0.);\n      }\n    `}},wz=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=GL();this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length);let r="",a="result";t&&(a="floor(result * 255. + 0.5)");for(let t=0;t<=1;t++)for(let a=0;a<=1;a++){let s=2*t+a;r+=`\n          localCoords = coords;\n          if(localCoords[2] + ${a} < ${this.enableShapeUniforms?"outShape[2]":`${e[2]}`}) {\n          localCoords[2] += ${a};\n          if (localCoords[1] + ${t} < ${this.enableShapeUniforms?"outShape[1]":`${e[1]}`}) {\n            localCoords[1] += ${t};\n\n            flatIndex = getFlatIndex(localCoords);\n            offset = imod(flatIndex, 4);\n\n            flatIndex = idiv(flatIndex, 4, 1.);\n\n            int r = flatIndex / texShape[1];\n            int c = imod(flatIndex, texShape[1]);\n            vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);\n            values = ${n.texture2D}(A, uv);\n\n            if (offset == 0) {\n              result[${s}] = values[0];\n            } else if (offset == 1) {\n              result[${s}] = values[1];\n            } else if (offset == 2) {\n              result[${s}] = values[2];\n            } else {\n              result[${s}] = values[3];\n            }\n          }\n        }\n        `}this.userCode=`\n        ${this.enableShapeUniforms?"\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n  }\n":KL(e)}\n\n        void main() {\n          ivec3 coords = getOutputCoords();\n\n          vec4 result = vec4(0.);\n          int flatIndex, r, c, offset;\n          ivec3 localCoords;\n          vec2 uv;\n          vec4 values;\n\n          ${r}\n\n          ${n.output} = ${a};\n        }\n    `}},vz={};function kz(e){let t=GL();return ZO(e,`${t.version}\n    precision highp float;\n    ${t.attribute} vec3 clipSpacePos;\n    ${t.attribute} vec2 uv;\n    ${t.varyingVs} vec2 resultUV;\n\n    void main() {\n      gl_Position = vec4(clipSpacePos, 1);\n      resultUV = uv;\n    }`)}function Iz(e){return iL(e,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function Sz(e){return oL(e,new Uint16Array([0,1,2,2,1,3]))}function Nz(e,t,n,r,a,s){dL(t,n);let i=uL(e),o=e.TEXTURE_2D;return HO(e,(()=>e.bindTexture(o,i))),HO(e,(()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE))),HO(e,(()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE))),HO(e,(()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST))),HO(e,(()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST))),1===ut().getNumber("WEBGL_VERSION")?HO(e,(()=>e.texImage2D(o,0,r,t,n,0,a,s,null))):HO(e,(()=>e.texStorage2D(o,1,r,t,n))),HO(e,(()=>e.bindTexture(e.TEXTURE_2D,null))),{texture:i,texShape:[n,t]}}function Tz(e){return e.internalFormatFloat}function _z(e,t,n,r){let[a,s]=WO(t,n);return Nz(e,a,s,Tz(r),r.textureFormatFloat,e.FLOAT)}function Cz(e){return e.internalFormatHalfFloat}function Ez(e,t,n,r){let[a,s]=WO(t,n);return Nz(e,a,s,Cz(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function $z(e){return e.downloadTextureFormat}function Az(e,t,n,r){let[a,s]=WO(t,n);return Nz(e,a,s,$z(r),e.RGBA,e.UNSIGNED_BYTE)}function Rz(e){return e.internalFormatPackedFloat}function Fz(e,t,n,r){let[a,s]=UO(t,n);return Nz(e,a,s,Rz(r),e.RGBA,e.FLOAT)}function Dz(e){return e.internalFormatPackedHalfFloat}function Mz(e,t,n,r){let[a,s]=UO(t,n);return Nz(e,a,s,Dz(r),e.RGBA,r.textureTypeHalfFloat)}function Oz(e,t,n){return HO(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,n))),hL(e,t,"clipSpacePos",n,3,20,0)&&hL(e,t,"uv",n,2,20,12)}function Lz(e,t,n,r,a,s){let i,o,l;HO(e,(()=>e.bindTexture(e.TEXTURE_2D,t))),a instanceof Uint8Array?(i=new Uint8Array(n*r*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*r*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(a),2===ut().getNumber("WEBGL_VERSION")?HO(e,(()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,r,e.RGBA,o,i))):HO(e,(()=>e.texImage2D(e.TEXTURE_2D,0,l,n,r,0,e.RGBA,o,i))),HO(e,(()=>e.bindTexture(e.TEXTURE_2D,null)))}function zz(e,t,n){HO(e,(()=>e.bindTexture(e.TEXTURE_2D,t))),n.data instanceof Uint8Array?2===ut().getNumber("WEBGL_VERSION")?HO(e,(()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data))):HO(e,(()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data))):2===ut().getNumber("WEBGL_VERSION")?HO(e,(()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n))):HO(e,(()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n))),HO(e,(()=>e.bindTexture(e.TEXTURE_2D,null)))}function Pz(e,t,n,r){let a=e.createBuffer();HO(e,(()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,a)));let s=16*t*n;return HO(e,(()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ))),HO(e,(()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0))),HO(e,(()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null))),a}function Bz(e,t,n){let r=e,a=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,a),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),a}function Wz(e,t,n,r){let[a,s]=WO(t,n),i=new Uint8Array(function(e,t){return e*t}(t*n,4));return HO(e,(()=>e.readPixels(0,0,a,s,r.downloadTextureFormat,e.UNSIGNED_BYTE,i))),new Float32Array(i.buffer)}function Vz(e,t,n,r,a,s,i,o){let l=e,u=new Float32Array(function(e,t){let[n,r]=UO(e,t);return n*r*4}(s,i));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 Uz(e,t,n){let r=new Float32Array(t*n*4);return HO(e,(()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r))),r}B(vz,{bindVertexProgramAttributeStreams:()=>Oz,createBufferFromOutputTexture:()=>Pz,createFloat16MatrixTexture:()=>Ez,createFloat16PackedMatrixTexture:()=>Mz,createFloat32MatrixTexture:()=>_z,createIndexBuffer:()=>Sz,createPackedMatrixTexture:()=>Fz,createUnsignedBytesMatrixTexture:()=>Az,createVertexBuffer:()=>Iz,createVertexShader:()=>kz,downloadByteEncodedFloatMatrixFromOutputTexture:()=>Wz,downloadFloat32MatrixFromBuffer:()=>Bz,downloadMatrixFromPackedOutputTexture:()=>Uz,downloadPackedMatrixFromBuffer:()=>Vz,getInternalFormatForFloat16MatrixTexture:()=>Cz,getInternalFormatForFloat16PackedMatrixTexture:()=>Dz,getInternalFormatForFloat32MatrixTexture:()=>Tz,getInternalFormatForPackedMatrixTexture:()=>Rz,getInternalFormatForUnsignedBytesMatrixTexture:()=>$z,uploadDenseMatrixToTexture:()=>Lz,uploadPixelDataToTexture:()=>zz});var Gz=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=ut().getNumber("WEBGL_VERSION");if(null!=e?(this.gl=e,PO(t,e)):this.gl=BO(t),e=this.gl,2===ut().getNumber("WEBGL_VERSION")){let t=e;this.createVertexArray=()=>HO(t,(()=>t.createVertexArray())),this.bindVertexArray=e=>HO(t,(()=>t.bindVertexArray(e))),this.deleteVertexArray=e=>HO(t,(()=>t.deleteVertexArray(e))),this.getVertexArray=()=>HO(t,(()=>t.getParameter(t.VERTEX_ARRAY_BINDING)))}else if(null!=e){let t=e.getExtension("OES_vertex_array_object");
2if(null==t)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>HO(e,(()=>t.createVertexArrayOES())),this.bindVertexArray=n=>HO(e,(()=>t.bindVertexArrayOES(n))),this.deleteVertexArray=n=>HO(e,(()=>t.deleteVertexArrayOES(n))),this.getVertexArray=()=>HO(e,(()=>e.getParameter(t.VERTEX_ARRAY_BINDING_OES)))}let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),1===ut().getNumber("WEBGL_VERSION")){let e="OES_texture_float",t="OES_texture_half_float";if(this.textureFloatExtension=YO(this.gl,e),OL(this.gl,t))this.textureHalfFloatExtension=YO(this.gl,t);else if(ut().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),OL(this.gl,r))this.colorBufferHalfFloatExtension=YO(this.gl,r);else if(ut().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",OL(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else{if(!OL(this.gl,r))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension(r)}this.vertexBuffer=Iz(this.gl),this.indexBuffer=Sz(this.gl),this.framebuffer=pL(this.gl),this.textureConfig=GO(this.gl,this.textureHalfFloatExtension)}get debug(){return ut().getBool("DEBUG")}dispose(){if(this.disposed)return;null!=this.program&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),null!=this.outputTexture&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture.  This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;HO(e,(()=>e.finish())),HO(e,(()=>e.bindFramebuffer(e.FRAMEBUFFER,null))),HO(e,(()=>e.deleteFramebuffer(this.framebuffer))),HO(e,(()=>e.bindBuffer(e.ARRAY_BUFFER,null))),HO(e,(()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null))),HO(e,(()=>e.deleteBuffer(this.indexBuffer))),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),_z(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Ez(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),Az(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),zz(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),Lz(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Mz(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),Fz(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(wL(this.gl,this.framebuffer),this.outputTexture=null),HO(this.gl,(()=>this.gl.deleteTexture(e)))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,(()=>Wz(this.gl,t,n,this.textureConfig)))}downloadPackedMatrixFromBuffer(e,t,n,r,a,s){return Vz(this.gl,e,0,0,0,a,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return Bz(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=Pz(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(ut().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,a=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let e=r.clientWaitSync(a,0,0);return e===r.ALREADY_SIGNALED||e===r.CONDITION_SATISFIED},t=a}else ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,(()=>Uz(this.gl,t,n)))}createProgram(e){this.throwIfDisposed();let t=this.gl;null==this.vertexShader&&(this.vertexShader=kz(t));let n=rL(t);HO(t,(()=>
2t.attachShader(n,this.vertexShader))),HO(t,(()=>t.attachShader(n,e))),aL(t,n);let r=Object.assign(n,{vao:this.createVertexArray()});return this.debug&&sL(t,r),r}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;HO(t,(()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer))),Oz(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),null!=e&&(HO(this.gl,(()=>this.gl.deleteProgram(e))),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,null!=this.program&&this.debug&&sL(this.gl,this.program),HO(this.gl,(()=>this.gl.useProgram(e)))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?mL(this.gl,e,t):gL(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),HO(this.gl,(()=>this.gl.getAttribLocation(e,t)))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),yL(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,a]=UO(t,n);this.setOutputMatrixTextureDriver(e,r,a)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){null!=this.program&&sL(this.gl,this.program),vL(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let e=this.getVertexArray();console.assert(e===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}HO(e,(()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0)))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),HO(this.gl,(()=>this.gl.finish()))}getQueryTimerExtension(){return null==this.disjointQueryTimerExtension&&(this.disjointQueryTimerExtension=YO(this.gl,2===ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(2===ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){let e=this.gl,t=this.getQueryTimerExtensionWebGL2(),n=e.createQuery();return e.beginQuery(t.TIME_ELAPSED_EXT,n),n}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(2===ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")){let e=this.gl,t=this.getQueryTimerExtensionWebGL2();return void e.endQuery(t.TIME_ELAPSED_EXT)}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await ja.repeatedTry((()=>this.disposed||this.isQueryAvailable(e,ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")))),this.getQueryTime(e,ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(0===t)return null;if(2===t){let t=this.gl;return t.getQueryParameter(e,t.QUERY_RESULT)/1e6}{let t=this.getQueryTimerExtensionWebGL1();return t.getQueryObjectEXT(e,t.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(0===t)return!0;if(2===t){let t=this.gl,n=this.getQueryTimerExtensionWebGL2(),r=t.getQueryParameter(e,t.QUERY_RESULT_AVAILABLE);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}{let t=this.getQueryTimerExtensionWebGL1(),n=t.getQueryObjectEXT(e,t.QUERY_RESULT_AVAILABLE_EXT);return null==this.disjoint&&(this.disjoint=this.gl.getParameter(t.GPU_DISJOINT_EXT)),n&&!this.disjoint}}pollFence(e){return new Promise((t=>{this.addItemToPoll((()=>e.isFencePassed()),(()=>t()))}))}pollItems(){let e=function(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}(this.itemsToPoll.map((e=>e.isDoneFn)));for(let t=0;t<=e;++t){let{resolveFn:e}=this.itemsToPoll[t];e()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let n;"setTimeoutCustom"in ut().platform&&(n=ut().platform.setTimeoutCustom.bind(ut().platform)),ja.repeatedTry((()=>(this.pollItems(),0===this.itemsToPoll.length)),(()=>0),null,n)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),xL(this.gl,e,this.framebuffer),this.debug&&vL(this.gl)}unbindTextureToFrameBuffer(){null!=this.outputTexture?(xL(this.gl,this.outputTexture,this.framebuffer),this.debug&&vL(this.gl)):wL(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let r=this.gl;xL(r,e,this.framebuffer),this.debug&&vL(r),this.outputTexture=e,HO(r,(()=>r.viewport(0,0,t,n))),HO(r,(()=>r.scissor(0,0,t,n)))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),HO(this.gl,(()=>this.gl.scissor(e,t,n,r)))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(null==this.program)throw new Error("No GPU program is currently set.")}};var{addImpl:Hz,bincountImpl:jz,bincountReduceImpl:qz,bitwiseAndImpl:Kz,castImpl:Xz,ceilImpl:Yz,concatImpl:Zz,equalImpl:Jz,expImpl:Qz,expm1Impl:eP,floorImpl:tP,gatherNdImpl:nP,gatherV2Impl:rP,greaterImpl:aP,greaterEqualImpl:sP,lessImpl:iP,lessEqualImpl:oP,linSpaceImpl:lP,logImpl:uP,maxImpl:dP,maximumImpl:pP,minimumImpl:hP,multiplyImpl:cP,negImpl:fP,notEqualImpl:mP,prodImpl:gP,raggedGatherImpl:yP,raggedRangeImpl:bP,raggedTensorToTensorImpl:xP,rangeImpl:wP,rsqrtImpl:vP,scatterImpl:kP,sigmoid
2Impl:IP,simpleAbsImpl:SP,sliceImpl:NP,sparseFillEmptyRowsImpl:TP,sparseReshapeImpl:_P,sparseSegmentReductionImpl:CP,sqrtImpl:EP,staticRegexReplaceImpl:$P,stridedSliceImpl:AP,stringNGramsImpl:RP,stringSplitImpl:FP,stringToHashBucketFastImpl:DP,subImpl:MP,tileImpl:OP,topKImpl:LP,transposeImpl:zP,uniqueImpl:PP}=QE;function BP(e,t){return["x","y","z","w","u","v"].slice(0,t).map((t=>`${e}.${t}`))}function WP(e,t){return 1===t?[e]:BP(e,t)}var VP=class{constructor(e){if(this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.enableShapeUniforms=cz(this.outputShape.length),0===this.rank)this.userCode="\n        void main() {\n          setOutput(vec4(getA(), 0., 0., 0.));\n        }\n      ";else{let e=WP("rc",this.rank),t=oz(this.rank),n=this.getOutOfBoundsCondition(e),r=this.getSetup(e),a=this.getOutput(e);this.userCode=`\n        void main() {\n          ${t} rc = getOutputCoords();\n\n          if(${n}) {\n            setOutput(vec4(0));\n          } else {\n            ${r}\n\n            setOutput(vec4(${a}));\n          }\n        }\n      `}}getSourceCoordsArr(e){let t=[];for(let n=0;n<=1;n++)for(let r=0;r<=1;r++){let a=`${0===n?"r":"rp1"}, ${0===r?"c":"cp1"}`;for(let t=2;t<this.rank;t++)a=`${e[e.length-1-t]},`+a;t.push(a)}return t}getOutOfBoundsCondition(e){if(1===this.rank)return`rc > ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let t="";for(let n=this.rank-2;n<this.rank;n++)t+=`${e[n]} >= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n<this.rank-1&&(t+="||");return t}getSetup(e){if(1===this.rank)return"";let t=e.slice(-2),n=this.enableShapeUniforms?`outShape[${this.rank} - 1]`:this.outputShape[this.rank-1],r=this.enableShapeUniforms?`outShape[${this.rank} - 2]`:this.outputShape[this.rank-2];return`\n      int r = ${t[0]};\n      int c = ${t[1]};\n      int rp1 = r + 1;\n      int cp1 = c + 1;\n\n      bool cEdge = cp1 >= ${n};\n      bool rEdge = rp1 >= ${r};\n    `}getOutput(e){let t=this.getSourceCoordsArr(e);return 1===this.rank?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),\n            cEdge ? 0. : getA(${t[1]}),\n            rEdge ? 0. : getA(${t[2]}),\n            rEdge || cEdge ? 0. : getA(${t[3]})`}},UP=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length);let n="";for(let e=0;e<4;e++){let t="thisRC = rc;";e%2==1&&(t+="thisRC.z += 1;"),e>1&&(t+="thisRC.y += 1;"),n+=`\n        ${t}\n        ${e>0?"if(thisRC.y < rows && thisRC.z < cols){":""}\n          int flatIndex = getFlatIndex(thisRC);\n\n          ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);\n          vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));\n\n          result[${e}] =\n            getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);\n        ${e>0?"}":""}\n      `}this.userCode=`\n      ${function(e,t){return`\n    ivec3 inputCoordsFromReshapedOutCoords(int index) {\n      ${t?qL(["r","c","d"],"inputShape"):HL(["r","c","d"],e)}\n      return ivec3(r, c, d);\n    }\n  `}(t,this.enableShapeUniforms)}\n      ${this.enableShapeUniforms?"\n  int getFlatIndex(ivec3 coords) {\n    return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;\n  }\n":KL(e)}\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0.);\n\n        ivec3 thisRC;\n        int rows = ${this.enableShapeUniforms?"outShape[1]":e[1]};\n        int cols = ${this.enableShapeUniforms?"outShape[2]":e[2]};\n\n        ${n}\n\n        setOutput(result);\n      }\n    `}};var GP=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,n){let r=jP(t,n),a=qP(e,r,n);a in this.freeTextures||(this.freeTextures[a]=[]),a in this.usedTextures||(this.usedTextures[a]=[]);let s,i=HP(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[a].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=i,this.log(
2);let e=this.freeTextures[a].pop();return this.usedTextures[a].push(e),e}return r===OO.PACKED_2X2_FLOAT32?s=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===OO.PACKED_2X2_FLOAT16?s=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===OO.UNPACKED_FLOAT32?s=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===OO.UNPACKED_FLOAT16?s=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===OO.PACKED_4X1_UNSIGNED_BYTE&&(s=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[a].push(s),this.numUsedTextures++,this._numBytesAllocated+=i,this.log(),s}releaseTexture(e,t,n,r){if(null==this.freeTextures)return;let a=jP(n,r),s=qP(t,a,r);s in this.freeTextures||(this.freeTextures[s]=[]);let i=HP(t,a,this.gpgpu.gl,this.gpgpu.textureConfig,r),o=ut().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");-1!==o&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l&&l.indexOf(e);if(null==u||u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l[u]=l[l.length-1],l.pop(),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(null!=this.freeTextures){for(let e in this.freeTextures)this.freeTextures[e].forEach((e=>{this.gpgpu.deleteMatrixTexture(e.texture)}));for(let e in this.usedTextures)this.usedTextures[e].forEach((e=>{this.gpgpu.deleteMatrixTexture(e.texture)}));this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function HP(e,t,n,r,a){let s,i=function(e,t){switch(e){case OO.PACKED_2X2_FLOAT32:return Rz(t);case OO.PACKED_2X2_FLOAT16:return Dz(t);case OO.UNPACKED_FLOAT32:return Tz(t);case OO.UNPACKED_FLOAT16:return Cz(t);case OO.PACKED_4X1_UNSIGNED_BYTE:return $z(t);default:throw new Error(`Unknown physical texture type ${e}`)}}(t,r);if(a){let[t,n]=UO(e[0],e[1]);s=t*n}else{let[t,n]=WO(e[0],e[1]);s=t*n}let o=function(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;if(t===n.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}(n,i);return s*o}function jP(e,t){if(e===MO.UPLOAD)return OO.PACKED_2X2_FLOAT32;if(e===MO.RENDER||null==e)return function(e){return ut().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?OO.PACKED_2X2_FLOAT32:OO.UNPACKED_FLOAT32:e?OO.PACKED_2X2_FLOAT16:OO.UNPACKED_FLOAT16}(t);if(e===MO.DOWNLOAD||e===MO.PIXELS)return OO.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function qP(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var KP=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length),this.userCode=`\n      float unaryOperation(float x) {\n        ${t}\n      }\n\n      void main() {\n        float x = getAAtOutCoords();\n        float y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    `}},XP="if (isnan(x)) return x;",YP="return x;",ZP="return abs(x);",JP="return (x >= 0.0) ? x : (exp(x) - 1.0);",QP=XP+"\n  return (x < 0.0) ? 0.0 : x;\n",eB=XP+"\n  return (x < 0.0) ? 0.0 : min(6.0, x);\n",tB="return x;",nB="return 1.0 / (1.0 + exp(-1.0 * x));",rB="return x;",aB="\n  vec4 result;\n\n  result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n  result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n  result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n  result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n  return result;\n",sB="\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;
2\n",iB="\n  vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n",oB="return 1.0 / (1.0 + exp(-1.0 * x));",lB=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length),this.userCode=`\n      vec4 unaryOperation(vec4 x) {\n        ${t}\n      }\n\n      void main() {\n        vec4 x = getAAtOutCoords();\n        vec4 y = unaryOperation(x);\n\n        setOutput(y);\n      }\n    `}},uB=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length);let t=e.length,n=WP("rc",t),r=oz(t),a=function(e,t){if(1===e)return"rc";let n="";for(let r=0;r<e;r++)n+=t[r],r<e-1&&(n+=",");return n}(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`\n      void main() {\n        ${r} rc = getOutputCoords();\n        vec4 packedInput = getA(${a});\n\n        setOutput(getChannel(packedInput, ${i}));\n      }\n    `}},dB=Eg.whereImpl,pB={};var hB=ut().getNumber("CPU_HANDOFF_SIZE_THRESHOLD");var cB=class e extends de{nextDataId(){return e.nextDataId++}constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!ut().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(null!=e){if(e instanceof Gz)t=e;else{let n=BO(ut().getNumber("WEBGL_VERSION"),e);t=new Gz(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let e=BO(ut().getNumber("WEBGL_VERSION"));t=new Gz(e),this.binaryCache=function(e){return e in pB||(pB[e]={}),pB[e]}(ut().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new GP(this.gpgpu),this.numMBBeforeWarning=null==ut().global.screen?1024:ut().global.screen.height*ut().global.screen.width*window.devicePixelRatio*600/1024/1024,this.texData=new ue(this,Ni())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,n,r,a,s){let i=this.makeTensorInfo(t,n),o=this.texData.get(i.dataId);o.isPacked=!1,o.texture={texture:e,texShape:[r,a]},o.texShape=[r,a];let l=_L(t),u=new xz(l,!1,s),d=this.runWebGLProgram(u,[i],n,[[r,a]]);return d.shape=t,o.texture=null,this.disposeIntermediateTensorInfo(i),d.dataId}write(e,t,n){if((ut().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||ut().getBool("DEBUG"))&&this.checkNumericalProblems(e),"complex64"===n&&null!=e)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:MO.UPLOAD,refCount:1}),r}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){this.texData.get(e).refCount++}decRef(e){if(this.texData.has(e)){this.texData.get(e).refCount--}}move(e,t,n,r,a){if(ut().getBool("DEBUG")&&this.checkNumericalProblems(t),"complex64"===r)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:r,values:t,usage:MO.UPLOAD,refCount:a})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:a,slice:s,shape:i,isPacked:o}=t;if(null!=s){let t;t=o?new lB(i,tB):new KP(i,tB);let n=this.runWebGLProgram(t,[{dataId:e,shape:i,dtype:r}],r),a=this.readSync(n.dataId);return this.disposeIntermediateTensorInfo(n),a}if(null!=n)return this.convertAndCacheOnCPU(e);if("string"===r)return n;let l,u,d=null!=this.activeTimers;if(d&&(l=ja.now()),"complex64"===r){let e=this.readSync(a.real.dataId),t=this.readSync(a.imag.dataId);u=Im.mergeRealAndImagArrays(e,t)}else u=this.getValuesFromTexture(e);return d&&(this.downloadWaitMs+=ja.now()-l),this.convertAndCacheOnCPU(e,u)}async read(e){if(this.pendingRead.has(e)){let t=this.pendingRead.get(e);return new Promise((e=>t.push(e)))}let t=this.texData.get(e),{values:n,shape:r,slice:a,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(null!=a){let t;t=o?new lB(r,tB):new KP(r,tB);let n=this.runWebGLProgram(t,[{dataId:e,shape:r,dtype:s}],s),a=this.read(n.dataId);return this.disposeIntermediateTensorInfo(n),a}if(null!=n)return this.convertAndCacheOnCPU(e);if(ut().getBool("DEBUG")&&!ut().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&2===ut().getNumber("WEBGL_VERSION"))throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l,u,d=null;if("complex64"!==s&&ut().get("WEBGL_BUFFER_SUPPORTED")){l=this.decode(e);let t=this.texData.get(l.dataId);d=this.gpgpu.createBufferFromTexture(t.texture.texture,...VO(r))}if(this.pendingRead.set(e,[]),"complex64"!==s&&await this.gpgpu.createAndWaitForFence(),"complex64"===s){let e=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),t=e[0],n=e[1];u=Im.mergeRealAndImagArrays(t,n)}else if(null==d)u=this.getValuesFromTexture(e);else{let e=ja.sizeFromShape(r);u=this.gpgpu.downloadFloat32MatrixFromBuffer(d,e)}if(null!=l&&this.disposeIntermediateTensorInfo(l),null!=d){let e=this.gpgpu.gl;
2HO(e,(()=>e.deleteBuffer(d)))}let p=this.convertAndCacheOnCPU(e,u),h=this.pendingRead.get(e);return this.pendingRead.delete(e),h.forEach((e=>e(p))),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Ni().removeDataId(e,this),this.pendingDeletes--),p}readToGPU(e,t={}){let n=this.texData.get(e),{values:r,shape:a,slice:s,dtype:i,isPacked:o,texture:l}=n;if("complex64"===i)throw new Error("Does not support reading texture for complex64 dtype.");if(null!=s){let n;n=o?new lB(a,tB):new KP(a,tB);let r=this.runWebGLProgram(n,[{dataId:e,shape:a,dtype:i}],i),s=this.readToGPU(r,t);return this.disposeIntermediateTensorInfo(r),s}if(null==l)throw null!=r?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),d=Ni().makeTensorFromTensorInfo(u),p=this.texData.get(u.dataId);return Object.assign({tensorRef:d},p.texture)}bufferSync(e){let t=this.readSync(e.dataId);if("string"===e.dtype)try{let n=t.map((e=>ja.decodeString(e)));return Bo(e.shape,e.dtype,n)}catch(e){throw new Error("Failed to decode encoded string bytes into utf-8")}return Bo(e.shape,e.dtype,t)}checkNumericalProblems(e){if(null!=e)for(let t=0;t<e.length;t++){let n=e[t];if(!KO(n))throw ut().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:r}=this.texData.get(e),a=ja.sizeFromShape(t);if(ut().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let n=this.decode(e),r=this.texData.get(n.dataId),s=this.gpgpu.downloadMatrixFromPackedTexture(r.texture.texture,...VO(t)).subarray(0,a);return this.disposeIntermediateTensorInfo(n),s}let s=ut().getBool("WEBGL_PACK")&&!0===r,i=s?_L(t):t,o=s?new yz(i):new gz(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),u=this.texData.get(l.dataId),d=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(u.texture.texture,u.texShape[0],u.texShape[1]).subarray(0,a);return this.disposeIntermediateTensorInfo(l),d}timerAvailable(){return ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}time(e){let t=this.activeTimers,n=[],r=!1;null==this.programTimersStack?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();let a=ja.flatten(this.activeTimers.map((e=>e.query))).filter((e=>null!=e)),s=ja.flatten(this.activeTimers.map((e=>e.name))).filter((e=>null!=e));this.activeTimers=t,r&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let e=await Promise.all(a);i.kernelMs=ja.sum(e),i.getExtraProfileInfo=()=>e.map(((e,t)=>({name:s[t],ms:e}))).map((e=>`${e.name}: ${e.ms}`)).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:ja.now(),endMs:null}}endTimer(e){return ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=ja.now(),e)}async getQueryTime(e){if(ut().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return null!=n&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:a,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),null!=t&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,a,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=hB){return ut().getBool("WEBGL_CPU_FORWARD")&&e.every((e=>null==this.texData.get(e.dataId).texture&&ja.sizeFromShape(e.shape)<t))}getGPGPUContext(){return this.gpgpu}where(e){Im.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return dB(e.shape,t)}packedUnaryOp(e,t,n){let r=new lB(e.shape,t),a=this.compileAndRun(r,[e],n);return Ni().makeTensorFromTensorInfo(a)}abs(e){if(this.shouldExecuteOnCPU([e])&&"complex64"!==e.dtype){let t=SP(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,t)}if(ut().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,ZP,e.dtype);let t=new KP(e.shape,ZP),n=this.compileAndRun(t,[e]);return Ni().makeTensorFromTensorInfo(n)}makeTensorInfo(e,t,n){let r;if("string"===t&&null!=n&&n.length>0&&ja.isString(n[0])){let a=n.map((e=>ja.encodeString(e)));r=this.write(a,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){return Ni().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,n),this)}unpackTensor(e){let t=new uB(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new VP(e.shape);return this.runWebGLProgram(t,[e],e.dtype,null,!0)}packedReshape(e,t){let n=[NL(e.shape),...TL(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},a=[NL(t),...TL(t)],s=new UP(a,n),i=[n],o=this.runWebGLProgram(s,[r],e.dtype,i,!0);return{dataId:o.dataId,shape:t,dtype:o.dtype}}decode(e,t){let n=this.texData.get(e),{isPacked:r,shape:a,dtype:s}=n;if(null!=t){let e=ja.sizeFromShape(a),n=t[0]*t[1]*4;ja.assert(e<=n,(()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data."))}let i,o=_L(a);i=r?new mz(o):new fz(o);let l=[null!=t?t:VO(o)];return{dtype:s,shape:a,dataId:this.runWebGLProgram(i,[{shape:o,dtype:s,dataId:e}],s,l,!0,t).dataId}}runWebGLProgram(e,t,n,r,a=!1,s){let i=this.makeTensorInfo(e.outputShape,n),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===DO.DENSE){let t=null!=s?s:VO(e.outputShape);o.texShape=t.map((e=>2*e))}if(null!=e.outTexUsage&&(o.usage=e.outTexUsage),0===ja.sizeFromShape(i.shape))return o.values=ja.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map((t=>{if("complex64"===t.dtype)throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let n=this.texData.get(t.dataId);
2if(null==n.texture){if(!e.packedInputs&&ja.sizeFromShape(t.shape)<=ut().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:t.shape,texData:null,isUniform:!0,uniformValues:n.values};e.packedInputs&&(n.isPacked=!0,n.shape=t.shape)}if(this.uploadToGPU(t.dataId),!!n.isPacked!=!!e.packedInputs)t=n.isPacked?this.unpackTensor(t):this.packTensor(t),l.push(t),n=this.texData.get(t.dataId);else if(n.isPacked&&!$L(n.shape,t.shape)){let e=t,r=t.shape;t.shape=n.shape,t=this.packedReshape(t,r),l.push(t),n=this.texData.get(t.dataId),e.shape=r}return{shape:t.shape,texData:n,isUniform:!1}}));this.uploadToGPU(i.dataId);let d,p={shape:i.shape,texData:o,isUniform:!1},h=function(e,t,n){let r="";t.concat(n).forEach((t=>{let a=null!=t.texData&&null!=t.texData.slice&&t.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!t.isUniform){let s=t.texData.texShape,{useSqueezeShape:i,uniformShape:o,keptDims:l}=lz(e.packedInputs,t.shape,s),u="",d="",p="";if(1===o.length&&e.packedInputs){let e=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];u=`${e[0]>1}_${e[1]>1}`}else if(2!==o.length||e.packedInputs){if(o.length>2&&!e.packedInputs){let e=ja.computeStrides(o);p=`${e[0]===s[1]}_${e[e.length-1]===s[1]}`}}else d=`${o[0]>1}_${o[1]>1}`;let h=t.shape.length,c=2===o.length&&ja.arraysEqual(t.shape,s),f=1===ja.sizeFromShape(t.shape),m=Im.getBroadcastDims(t.shape,n.shape),g=!e.packedInputs&&h===n.shape.length&&ja.arraysEqual(s,n.texData.texShape),y=e.packedInputs||o.length>2?"":`${s[0]>1}_${s[1]>1}`;r+=`${h}_${g}_${i?l:""}_${o.length}_${f}_${m}_${c}_${u}_${d}_${p}_${y}_${a}`}else{let e=t.isUniform?"uniform":t.texData.texShape;r+=`${t.shape}_${e}_${a}`}}));let a=e.userCode,s=e.constructor.name;return s+="_"+r+"_"+a+`${ut().getNumber("WEBGL_VERSION")}`,s}(e,u,p),c=this.getAndSaveBinary(h,(()=>function(e,t,n,r){let a=n.map(((e,n)=>{let r={logicalShape:e.shape,texShape:e.isUniform?null:e.texData.texShape,isUniform:e.isUniform,isPacked:!e.isUniform&&e.texData.isPacked,flatOffset:null};return null!=e.texData&&null!=e.texData.slice&&e.texData.slice.flatOffset>0&&(r.flatOffset=e.texData.slice.flatOffset),{name:t.variableNames[n],shapeInfo:r}})),s=a.map((e=>e.shapeInfo)),i={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},o=ZL(a,i,t),l=JO(e.gl,o),u=e.createProgram(l);return ut().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(u),Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},pz(e,t,u)))}(this.gpgpu,e,u,p))),f=null!=this.activeTimers;f&&(d=this.startTimer()),ut().get("ENGINE_COMPILE_ONLY")||function(e,t,n,r,a){t.program.enableShapeUniforms||(hz(t.inShapeInfos,n),hz([t.outShapeInfo],[r]));let s=r.texData.texture,i=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),e.bindVertexArray(t.webGLProgram.vao),1===ut().getNumber("WEBGL_VERSION")&&null!==t.infLoc&&e.gl.uniform1f(t.infLoc,1/0),null!==t.nanLoc&&e.gl.uniform1f(t.nanLoc,NaN);for(let r=0;r<n.length;++r){let a=n[r],{uniform:s,offset:i,shape:o,texShape:l}=t.variablesLocations[r];if(o){let{uniformShape:n}=lz(t.program.packedInputs,a.shape,a.texData.texShape);switch(n.length){case 1:e.gl.uniform1iv(o,new Int32Array(n));break;case 2:e.gl.uniform2iv(o,new Int32Array(n));break;case 3:e.gl.uniform3iv(o,new Int32Array(n));break;case 4:e.gl.uniform4iv(o,new Int32Array(n))}}if(l&&e.gl.uniform2i(l,a.texData.texShape[0],a.texData.texShape[1]),null!=s){if(a.isUniform){if(ja.sizeFromShape(a.shape)<2)e.gl.uniform1f(s,a.uniformValues[0]);else{let t=a.uniformValues;t instanceof Float32Array||(t=new Float32Array(t)),e.gl.uniform1fv(s,t)}continue}null!=a.texData.slice&&null!=i&&e.gl.uniform1i(i,a.texData.slice.flatOffset),e.setInputMatrixTexture(a.texData.texture.texture,s,r)}}let o=t.outShapeLocation;if(o)switch(r.shape.length){case 1:e.gl.uniform1iv(o,new Int32Array(r.shape));break;case 2:e.gl.uniform2iv(o,new Int32Array(r.shape));break;case 3:e.gl.uniform3iv(o,new Int32Array(r.shape));break;case 4:e.gl.uniform4iv(o,new Int32Array(r.shape))}if(t.outShapeStridesLocation){let n=ja.computeStrides(r.shape);switch(r.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(n));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(n));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(n))}}if(t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,r.texData.texShape[0],r.texData.texShape[1]),t.program.customUniforms&&a)for(let n=0;n<t.program.customUniforms.length;++n){let r=t.program.customUniforms[n],s=t.customUniformLocations[n],i=a[n];if("float"===r.type)e.gl.uniform1fv(s,i);else if("vec2"===r.type)e.gl.uniform2fv(s,i);else if("vec3"===r.type)e.gl.uniform3fv(s,i);else if("vec4"===r.type)e.gl.uniform4fv(s,i);else if("int"===r.type)e.gl.uniform1iv(s,i);else if("ivec2"===r.type)e.gl.uniform2iv(s,i);else if("ivec3"===r.type)e.gl.uniform3iv(s,i);else{if("ivec4"!==r.type)throw Error(`uniform type ${r.type} is not supported yet.`);e.gl.uniform4iv(s,i)}}e.executeProgram()}(this.gpgpu,c,u,p,r),l.forEach((e=>this.disposeIntermediateTensorInfo(e))),f&&(d=this.endTimer(d),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(d)}));let m=ut().getNumber("WEBGL_FLUSH_THRESHOLD");if(m>0){let e=ja.now();e-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=e)}if(!ut().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&!1===a){let e=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),e}return i}compileAndRun(e,t,n,r,a=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,a)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(ut().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach((e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}
2)),this.textureManager.dispose(),null!=this.canvas&&"undefined"!=typeof HTMLCanvasElement&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return null==this.floatPrecisionValue&&(this.floatPrecisionValue=Ci((()=>{if(!ut().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=ut().getBool("DEBUG");ut().set("DEBUG",!1);let t=this.abs(Du(1e-8)).dataSync()[0];if(ut().set("DEBUG",e),t>0)return 32}return 16}))),this.floatPrecisionValue}epsilon(){return 32===this.floatPrecision()?1e-7:1e-4}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:a,texture:s,usage:i,isPacked:o}=t;if(null!=s)return;let l,u=null!=this.activeTimers;u&&(l=ja.now());let d=t.texShape;if(null==d&&(d=CL(n,o),t.texShape=d),null!=a){let e,s=_L(n),i=d[1],p=d[0],h=a instanceof Uint8Array||a instanceof Uint8ClampedArray;(o||!h)&&([i,p]=UO(d[0],d[1])),e=o?new wz(s,h):new xz(s,h);let c=h?[p,i]:d,f=this.makeTensorInfo(c,r),m=this.texData.get(f.dataId);m.usage=h?MO.PIXELS:MO.UPLOAD,m.texShape=c,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(f.dataId),i,p,a);let g=[[p,i]],y=this.runWebGLProgram(e,[f],r,g,!0),b=this.texData.get(y.dataId);t.texShape=b.texShape,t.isPacked=b.isPacked,t.usage=b.usage,ut().get("ENGINE_COMPILE_ONLY")?this.disposeData(y.dataId):(t.texture=b.texture,t.values=null,this.texData.delete(y.dataId)),this.disposeIntermediateTensorInfo(f),u&&(this.uploadWaitMs+=ja.now()-l)}else{let e=this.acquireTexture(d,i,r,o);t.texture=e}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return null!=t&&(n.values=function(e,t){if("float32"===t||"complex64"===t)return e;if("int32"===t||"bool"===t){let n="int32"===t?new Int32Array(e.length):new Uint8Array(e.length);for(let t=0;t<n.length;++t)n[t]=Math.round(e[t]);return n}throw new Error(`Unknown dtype ${t}`)}(t,r)),n.values}acquireTexture(e,t,n,r){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>1024*this.numMBBeforeWarning*1024){let e=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${e} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*ja.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];
2if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}for(let[,t]of Object.entries(this.binaryCache)){let n=new Promise((e=>{try{this.checkCompletion_(t),e(!0)}catch(e){throw e}}));e.push(n)}return Promise.all(e)}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await vm(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(!1===this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS))throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),!1===this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)?(nL(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let e of Object.values(this.binaryCache)){this.gpgpu.buildVao(e.webGLProgram);let{variablesLocations:t,customUniformLocations:n,infLoc:r,nanLoc:a,outShapeLocation:s,outShapeStridesLocation:i,outTexShapeLocation:o}=pz(this.gpgpu,e.program,e.webGLProgram);e.variablesLocations=t,e.customUniformLocations=n,e.infLoc=r,e.nanLoc=a,e.outShapeLocation=s,e.outShapeStridesLocation=i,e.outTexShapeLocation=o}}createTensorFromGPUData(e,t,n){e.channels=e.channels||"RGBA";let{texture:r,height:a,width:s,channels:i}=e,o=Ni().backend;if(!o.gpgpu.gl.isTexture(r))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let l=o.writeTexture(r,t,n,a,s,i);return Ni().makeTensorFromDataId(l,t,n,o)}};cB.nextDataId=0;var fB="4.21.0";function mB(){ut().set("WEBGL_FORCE_F16_TEXTURES",!0)}ri.isBrowser()&&zi("webgl",(()=>new cB),2);var gB={forceHalfFloat:mB},yB="\n  if (isnan(a)) return a;\n  if (isnan(b)) return b;\n",bB=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=Im.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=cz(this.outputShape.length),this.userCode=`\n      float binaryOperation(float a, float b) {\n        ${e}\n      }\n\n      void main() {\n        float a = getAAtOutCoords();\n        float b = getBAtOutCoords();\n        setOutput(binaryOperation(a, b));\n      }\n    `}},xB="\n  result.r = isNaN.r ? NAN : result.r;\n  result.g = isNaN.g ? NAN : result.g;\n  result.b = isNaN.b ? NAN : result.b;\n  result.a = isNaN.a ? NAN : result.a;\n",wB=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Im.assertAndGetBroadcastShape(t,n);let a=this.outputShape.length;this.enableShapeUniforms=cz(a);let s="";if(r)if(0===a||1===ja.sizeFromShape(this.outputShape))s="\n          result.y = 0.;\n          result.z = 0.;\n          result.w = 0.;\n        ";else if(s=`\n          ${oz(a)} coords = getOutputCoords();\n        `,1===a)this.enableShapeUniforms?s+="\n            result.y = (coords + 1) >= outShape ? 0. : result.y;\n            result.z = 0.;\n            result.w = 0.;\n          ":s+=`\n            result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;\n            result.z = 0.;\n            result.w = 0.;\n          `;else{let e=WP("coords",a);this.enableShapeUniforms?s+=`\n            bool nextRowOutOfBounds =\n              (${e[a-2]} + 1) >= outShape[${a} - 2];\n            bool nextColOutOfBounds =\n              (${e[a-1]} + 1) >= outShape[${a} - 1];\n            result.y = nextColOutOfBounds ? 0. : result.y;\n            result.z = nextRowOutOfBounds ? 0. : result.z;\n            result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n          `:s+=`\n            bool nextRowOutOfBounds =\n              (${e[a-2]} + 1) >= ${this.outputShape[a-2]};\n            bool nextColOutOfBounds =\n              (${e[a-1]} + 1) >= ${this.outputShape[a-1]};\n            result.y = nextColOutOfBounds ? 0. : result.y;\n            result.z = nextRowOutOfBounds ? 0. : result.z;\n            result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;\n          `}this.userCode=`\n      vec4 binaryOperation(vec4 a, vec4 b) {\n        ${e}\n      }\n\n      void main() {\n        vec4 a = getAAtOutCoords();\n        vec4 b = getBAtOutCoords();\n\n        vec4 result = binaryOperation(a, b);\n        ${s}\n\n        setOutput(result);\n      }\n    `}};function vB(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var kB={kernelName:An,backendName:"webgl",kernelFunc:vB};function IB(e){let{inputs:t,backend:n}=e,{real:r,imag:a}=t,s=n.makeTensorInfo(r.shape,"complex64"),i=n.texData.get(s.dataId),o=vB({input
2s:{x:r},backend:n}),l=vB({inputs:{x:a},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var SB={kernelName:Wt,backendName:"webgl",kernelFunc:IB},NB="return (a < 0.) ? b * a : a;",TB="\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n";var _B={kernelName:Ln,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{alpha:s}=r,i=n.makeTensorInfo([],"float32",ja.createScalarValue(s,"float32")),o=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new wB(TB,a.shape,i.shape):new bB(NB,a.shape,i.shape),l=n.runWebGLProgram(o,[a,i],"float32");return n.disposeIntermediateTensorInfo(i),l}},CB="return (a < 0.) ? b * a : a;",EB="\n  vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));\n  return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);\n";var $B={kernelName:Ir,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new wB(EB,r.shape,a.shape):new bB(CB,r.shape,a.shape);return n.runWebGLProgram(s,[r,a],"float32")}},AB="if (isnan(x)) return x;";function RB({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:a,backend:s})=>{let i,{x:o}=a,l=s,u=r||o.dtype;if(l.shouldExecuteOnCPU([o])&&null!=n){let e=l.texData.get(o.dataId),t=n(e.values,u);return l.makeTensorInfo(o.shape,u,t)}return i=ut().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&null!=t?new lB(o.shape,t):new KP(o.shape,e),l.runWebGLProgram(i,[o],u)}}function FB({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:a,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,d=o;if(r&&"complex64"===l.dtype){let t=d.texData.get(l.dataId),n=d.texData.get(u.dataId),[r,a]=[[t.complexTensorInfos.real,n.complexTensorInfos.real],[t.complexTensorInfos.imag,n.complexTensorInfos.imag]].map((t=>{let[n,r]=t,a={dataId:n.dataId,dtype:n.dtype,shape:l.shape},s={dataId:r.dataId,dtype:r.dtype,shape:u.shape},i=new bB(e,l.shape,u.shape);return d.runWebGLProgram(i,[a,s],Ws(n.dtype,r.dtype))})),s=IB({inputs:{real:r,imag:a},backend:d});return d.disposeIntermediateTensorInfo(r),d.disposeIntermediateTensorInfo(a),s}let p,h=s||Ws(l.dtype,u.dtype);if(("string"===l.dtype||"string"===u.dtype||d.shouldExecuteOnCPU([l,u]))&&null!=a){let e=d.texData.get(l.dataId).values,t=d.texData.get(u.dataId).values,n="string"===l.dtype?Im.fromUint8ToStringArray(e):e,r="string"===l.dtype?Im.fromUint8ToStringArray(t):t,[s,i]=a(l.shape,u.shape,n,r,h),o=d.makeTensorInfo(i,h);return d.texData.get(o.dataId).values=s,o}return p=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&null!=t?new wB(t,l.shape,u.shape,n):new bB(e,l.shape,u.shape),d.runWebGLProgram(p,[l,u],h)}}function DB(e,t=!1){if("linear"===e)return t?rB:YP;if("relu"===e)return t?sB:QP;if("elu"===e)return t?aB:JP;if("relu6"===e)return t?iB:eB;if("prelu"===e)return t?EB:CB;if("leakyrelu"===e)return t?TB:NB;if("sigmoid"===e)return t?oB:nB;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var MB=class{constructor(e,t,n,r=!1,a=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=cz(this.outputShape.length);let u=r?e[1]:e[2],d=Math.ceil(u/2),p=r?"i * 2, rc.y":"rc.y, i * 2",h=a?"rc.z, i * 2":"i * 2, rc.z",c=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=a?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],m="",g="";i&&(m=o?`vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          ${i}\n        }`:l?`vec4 activation(vec4 a) {\n          vec4 b = getLeakyreluAlphaAtOutCoords();\n          ${i}\n        }`:`vec4 activation(vec4 x) {\n          ${i}\n        }`,g="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let b="rc.x",x="rc.x";e[0]<t[0]?b=`imod(rc.x, ${e[0]})`:t[0]<e[0]&&(x=`imod(rc.x, ${t[0]})`),this.userCode=`\n      ${m}\n      // Don't use uniform for sharedDimensionPacked for performance.\n      const float sharedDimension = ${d}.0;\n\n      vec4 dot2x2ARowBCol(ivec3 rc) {\n        vec4 result = vec4(0);\n        int batchA = ${b};\n        int batchB = ${x};\n        for (int i = 0; i < ${d};
2 i++) {\n          vec4 a = getMatrixA(batchA, ${p});\n          vec4 b = getMatrixB(batchB, ${h});\n\n          // These swizzled products need to be separately added.\n          // See: https://github.com/tensorflow/tfjs/issues/1735\n          result += (${c[0]} * ${f[0]});\n          result += (${c[1]} * ${f[1]});\n        }\n        return result;\n      }\n\n      void main() {\n        ivec3 rc = getOutputCoords();\n        vec4 result = dot2x2ARowBCol(rc);\n\n        ${y}\n\n        ${g}\n\n        setOutput(result);\n      }\n    `}},OB={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},LB=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=Im.assertAndGetBroadcastShape(t,n),this.userCode=`\n      float binaryOpComplex(\n          float areal, float aimag, float breal, float bimag) {\n        ${e}\n      }\n\n      void main() {\n        float areal = getARealAtOutCoords();\n        float aimag = getAImagAtOutCoords();\n        float breal = getBRealAtOutCoords();\n        float bimag = getBImagAtOutCoords();\n        setOutput(binaryOpComplex(areal, aimag, breal, bimag));\n      }\n    `}},zB="return a * b;";function PB(e){let t,{inputs:n,backend:r}=e,{a,b:s}=n,i=Im.upcastType(a.dtype,s.dtype);if("complex64"===a.dtype){let e=r.texData.get(a.dataId),t=r.texData.get(s.dataId),n=new LB(OB.REAL,a.shape,s.shape),i=new LB(OB.IMAG,a.shape,s.shape),o=[{dataId:e.complexTensorInfos.real.dataId,dtype:e.complexTensorInfos.real.dtype,shape:a.shape},{dataId:e.complexTensorInfos.imag.dataId,dtype:e.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:t.complexTensorInfos.real.dataId,dtype:t.complexTensorInfos.real.dtype,shape:s.shape},{dataId:t.complexTensorInfos.imag.dataId,dtype:t.complexTensorInfos.imag.dtype,shape:s.shape}],l=r.runWebGLProgram(n,o,"float32"),u=r.runWebGLProgram(i,o,"float32"),d=IB({inputs:{real:l,imag:u},backend:r});return r.disposeIntermediateTensorInfo(l),r.disposeIntermediateTensorInfo(u),d}if(r.shouldExecuteOnCPU([a,s])){let e=r.texData.get(a.dataId),t=r.texData.get(s.dataId),[n,o]=cP(a.shape,s.shape,e.values,t.values,i),l=r.makeTensorInfo(o,i);return r.texData.get(l.dataId).values=n,l}return t=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new wB(zB,a.shape,s.shape):new bB(zB,a.shape,s.shape),r.runWebGLProgram(t,[a,s],i)}var BB={kernelName:pr,backendName:"webgl",kernelFunc:PB};function WB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{shape:s}=r,i=n,o=ja.sizeFromShape(a.shape),l=ja.inferFromImplicitShape(s,o),u=ja.sizeFromShape(l);ja.assert(o===u,(()=>`The new shape (${l}) has ${u} elements and the old shape (${a.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`));let d=i.texData.get(a.dataId);return!d.isPacked||$L(a.shape,l)||null!==d.texture&&$L(d.shape,l)?(i.incRef(a.dataId),{dataId:a.dataId,shape:l,dtype:a.dtype}):function(e,t,n){let r=[NL(e.shape),...TL(e.shape)],a={dtype:e.dtype,shape:r,dataId:e.dataId},s=[NL(t),...TL(t)],i=new UP(s,r),o=[r],l=n.runWebGLProgram(i,[a],e.dtype,o,!0);return{dataId:l.dataId,shape:t,dtype:l.dtype}}(a,l,i)}var VB={kernelName:Rr,backendName:"webgl",kernelFunc:WB},UB=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i=4*Math.floor(n/4),o=n%4,l="sumValue += dot(values, ones);";if(null!=t){let e=1/t;l=`sumValue += dot(values * ${ja.isInt(e)?e.toPrecision(2):e}, ones);`}let u="";a%n>0&&(u=`\n        if (inIdx < 0 || inIdx >= ${a}) {\n          return 0.0;\n        }\n      `),this.userCode=`\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        ${u}\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * ${n};\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < ${i}; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          ${l}\n        }\n\n        int inIdx = inOffset + ${i};\n        if (${1===o}) {\n          vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);\n\n          ${l}\n        } else if (${2===o}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1), 0.0, 0.0);\n\n          ${l}\n        } else if (${3===o}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2), 0.0);\n\n          ${l}\n        }\n        setOutput(sumValue);\n      }\n    `}},GB=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:a,outSize:s}=e;this.outputShape=[r,s];let i="0.0",o="";"prod"===t?i="1.0":"min"===t?(i="1.0 / 1e-20",o="min"):"max"===t&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"sum"===t?l="sumValue":"prod"===t?l="prodValue":"all"===t?l="allValue":"any"===t&&(l="anyValue");let u=4*Math.floor(n/4),d=n%4,p=`\n      if (${"sum"===t}) {\n        sumValue += dot(values, ones);\n      } else if (${"prod"===t}) {\n        vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);\n        prodValue *= tmp[0] * tmp[1];\n      } else {\n        minMaxValue = ${o}(values, minMaxValue);\n        if (${"min"===t} || ${"max"===t}) {\n          minMaxValue = ${o}(values, minMaxValue);\n          bvec4 isNaN = isnan(values);\n          if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {\n            minMaxValue = vec4(NAN);\n          }\n        }\n      }\n    `,h="vec4";"all"===t?(i="1.0",p="\n        bool reducedAllValue = all(values);\n        float floatedReducedAllValue = float(reducedAllValue);\n        allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);\n      ",h="bvec4"):"any"===t&&(i="0.0",p="\n        bool reducedAnyValue = any(values);\n        float floatedReducedAnyValue = float(reducedAnyValue);\n        anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);\n      ",h="bvec4");let c="";a%n>0&&(c=`\n        if (inIdx < 0 || inIdx >= ${a}) {\n          return initializationValue;\n        }\n      `),this.userCode=`\n      const float initializationValue = ${i};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float getValue(int batch, int inIdx) {\n        ${c}\n        return getX(batch, inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * ${n};\n\n        vec4 minMaxValue = vec4(${i});\n        float prodValue = 1.0;\n        float sumValue = 0.0;\n        float allValue = 1.0;\n        float anyValue = 0.0;\n\n        for (int i = 0; i < ${u}; i += 4) {\n          int inIdx = inOffset + i;\n          ${h} values = ${h}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          ${p}\n        }\n\n        int inIdx = inOffset + ${u};\n        if (${1===d}) {\n          ${h} values = ${h}(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          ${p}\n        } else if (${2===d}) {\n          ${h} values = ${h}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          ${p}\n        } else if (${3===d}) {\n          ${h} values = ${h}(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          ${p}\n        }\n        setOutput(${l});\n      }\n    `}};function HB(e,t,n,r){let a=function(e){let t=[];for(;0===t.length||1!==t[t.length-1].outSize;){let n=t.length?t[t.length-1].outSize:e[1],r=Im.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}(e.shape),s=e;for(let i=0;i<a.length;i++){let o,l,{inSize:u,windowSize:d,outSize:p}=a[i];o="mean"===n?0===i?new UB({windowSize:d,inSize:u,batchSize:e.shape[0],outSize:p},u):new UB({windowSize:d,inSize:u,batchSize:e.shape[0],outSize:p}):new GB({windowSize:d,inSize:u,batchSize:e.shape[0],outSize:p},n),l=s,s=r.runWebGLProgram(o,[s],t),l.dataId!==e.dataId&&r.disposeIntermediateTensorInfo(l)}return s}var jB=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];this.outputShape=n,this.rank=n.length;
2let r=oz(this.rank),a=function(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let t=0;t<e.length;t++)r[e[t]]=n[t];return r.join()}(t);this.userCode=`\n    void main() {\n      ${r} resRC = getOutputCoords();\n      setOutput(getA(${a}));\n    }\n    `}};var qB=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=oz(this.rank),a=BP("rc",this.rank),s=new Array(this.rank);for(let e=0;e<t.length;e++)s[t[e]]=a[e];let i=`vec2(${s.slice(-2).join()})`,o=`++${a[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`\n    void main() {\n      ${r} rc = getOutputCoords();\n      vec4 result = vec4(0.);\n      result[0] = ${l};\n      if(${o}) {\n        result[1] = ${l};\n      }\n      --${a[this.rank-1]};\n      if(++${a[this.rank-2]} < ${n[this.rank-2]}) {\n        result[2] = ${l};\n        if(${o}) {\n          result[3] = ${l};\n        }\n      }\n      setOutput(result);\n    }\n    `}};function KB(e,t,n){let r=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qB(e.shape,t):new jB(e.shape,t);return n.runWebGLProgram(r,[e],e.dtype)}function XB(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r;return function(e,t,n,r){let a=t,s=e.shape.length,i=ja.parseAxisParam(a,e.shape),o=i,l=Im.getAxesPermutation(o,s),u=null!=l,d=e;u&&(d=KB(e,l,r),o=Im.getInnerMostAxes(o.length,s)),Im.assertAxesAreInnerMostDims("sum",o,s);let[p,h]=Im.computeOutAndReduceShapes(d.shape,o),c=p;n&&(c=Im.expandShapeToKeepDim(p,i));let f=ja.sizeFromShape(h),m=WB({inputs:{x:d},attrs:{shape:[ja.sizeFromShape(e.shape)/f,f]},backend:r}),g=HB(m,Vs(e.dtype),"sum",r),y=WB({inputs:{x:g},attrs:{shape:c},backend:r});return r.disposeIntermediateTensorInfo(m),r.disposeIntermediateTensorInfo(g),u&&r.disposeIntermediateTensorInfo(d),y}(a,s,i,n)}var YB={kernelName:Qr,backendName:"webgl",kernelFunc:XB};function ZB(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s}=n,{perm:i}=a,o=r,l=s.shape.length,u=new Array(l);for(let e=0;e<u.length;e++)u[e]=s.shape[i[e]];if(o.shouldExecuteOnCPU([s])){let e=o.texData.get(s.dataId).values,n=zP(e,s.shape,s.dtype,i,u);t=o.makeTensorInfo(u,s.dtype),o.texData.get(t.dataId).values=n}else t=KB(s,i,o);return t}var JB={kernelName:va,backendName:"webgl",kernelFunc:ZB},QB=1e3;function eW({a:e,b:t,transposeA:n,transposeB:r,backend:a,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,d=t.shape.length,p=n?e.shape[u-2]:e.shape[u-1],h=r?t.shape[d-1]:t.shape[d-2],c=n?e.shape[u-1]:e.shape[u-2],f=r?t.shape[d-2]:t.shape[d-1],m=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=ja.sizeFromShape(m),b=ja.sizeFromShape(g),x=du.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([c,f]);ja.assert(p===h,(()=>`Error in matMul: inner shapes (${p}) and (${h}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`));let w,v=n?[y,p,c]:[y,c,p],k=r?[b,f,h]:[b,h,f],I=WB({inputs:{x:e},backend:a,attrs:{shape:v}}),S=WB({inputs:{x:t},backend:a,attrs:{shape:k}}),N=[I,S],T=Math.max(y,b),_=n?I.shape[1]:I.shape[2],C=null!=s,E=null!=i,$="leakyrelu"===l,A=null!=l?DB(l,!0):null;if((1===c||1===f)&&_>QB&&!1===(C||E||$||null!=A)){let e=I,t=S;n&&(e=ZB({inputs:{x:I},backend:a,attrs:{perm:[0,2,1]}}),N.push(e)),r&&(t=ZB({inputs:{x:S},backend:a,attrs:{perm:[0,2,1]}}),N.push(t));let s=1===f,i=e;1!==f&&(i=WB({inputs:{x:e},backend:a,attrs:{shape:[T,_,1]}}),N.push(i));let o=1===f?2:1,l=t;s&&(l=WB({inputs:{x:t},backend:a,attrs:{shape:[T,1,_]}}),N.push(l));let u=PB({inputs:{a:i,b:l},backend:a});w=XB({inputs:{x:u},backend:a,attrs:{axis:o,keepDims:!0}}),N.push(u)}else{let l=Ws(e.dtype,t.dtype),u=new MB(v,k,[T,c,f],n,r,C,A,E,$),d=[I,S];if(null!=s&&d.push(s),E&&d.push(i),$){let e=a.makeTensorInfo([],"float32",ja.createScalarValue(o,"float32"));d.push(e),N.push(e)}w=a.runWebGLProgram(u,d,l)}
2let R=WB({inputs:{x:w},backend:a,attrs:{shape:x}});N.push(w);for(let e of N)a.disposeIntermediateTensorInfo(e);return R}var tW={kernelName:$a,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:p}=r;return eW({a,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:p,activation:d})}},nW="return abs(x);";var rW={kernelName:ft,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r}=e,{x:a}=n;if(r.shouldExecuteOnCPU([a])&&"complex64"!==a.dtype){let e=r.texData.get(a.dataId),t=SP(e.values);return r.makeTensorInfo(a.shape,a.dtype,t)}return t=ut().getBool("WEBGL_PACK_UNARY_OPERATIONS")?new lB(a.shape,nW):new KP(a.shape,nW),r.runWebGLProgram(t,[a],a.dtype)}},aW=RB({opSnippet:XP+"\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return acos(x);\n"}),sW={kernelName:mt,backendName:"webgl",kernelFunc:aW},iW=RB({opSnippet:XP+"\n  if (x < 1.0) return NAN;\nreturn log(x + sqrt(x * x - 1.0));"}),oW={kernelName:gt,backendName:"webgl",kernelFunc:iW},lW="return a + b;",uW=FB({opSnippet:lW,packedOpSnippet:lW,supportsComplex:!0,cpuKernelImpl:Hz}),dW={kernelName:yt,backendName:"webgl",kernelFunc:uW},pW=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map(((e,t)=>`T${t}`));let n=[];this.variableNames.forEach((e=>{n.push(`float v${e} = get${e}AtOutCoords();`)}));let r=this.variableNames.map((e=>`v${e}`)).join(" + ");this.userCode=`\n      void main() {\n        ${n.join("\n        ")}\n\n        float result = ${r};\n        setOutput(result);\n      }\n    `}},hW=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map(((e,t)=>`T${t}`));let n=[];this.variableNames.forEach((e=>{n.push(`vec4 v${e} = get${e}AtOutCoords();`)}));let r=this.variableNames.map((e=>`v${e}`)).join(" + ");this.userCode=`\n      void main() {\n        ${n.join("\n        ")}\n\n        vec4 result = ${r};\n        setOutput(result);\n      }\n    `}};var cW={kernelName:bt,backendName:"webgl",kernelFunc:function e(t){let{inputs:n,backend:r}=t,a=n;if(1===a.length)return vB({inputs:{x:a[0]},backend:r});if(a.length>ut().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let t=Math.floor(a.length/2),n=e({
2inputs:a.slice(0,t),backend:r}),s=e({inputs:a.slice(t),backend:r});return e({inputs:[n,s],backend:r})}let s=a.map((e=>e.dtype)).reduce(((e,t)=>Ws(e,t))),i=a.map((e=>e.shape)),o=ut().getBool("WEBGL_PACK")?new hW(a[0].shape,i):new pW(a[0].shape,i);return r.runWebGLProgram(o,a,s)}};var fW={kernelName:xt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=ja.parseAxisParam(s,a.shape),u=l,d=Im.getAxesPermutation(u,o),p=a;null!=d&&(p=ZB({inputs:{x:a},backend:n,attrs:{perm:d}}),u=Im.getInnerMostAxes(u.length,o)),Im.assertAxesAreInnerMostDims("all",u,o);let h,[c,f]=Im.computeOutAndReduceShapes(p.shape,u),m=WB({inputs:{x:p},backend:n,attrs:{shape:[-1,ja.sizeFromShape(f)]}}),g=HB(m,m.dtype,"all",n);if(i){h=WB({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(c,l)}})}else h=WB({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),null!=d&&n.disposeIntermediateTensorInfo(p),h}};var mW={kernelName:wt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=ja.parseAxisParam(s,a.shape),u=l,d=Im.getAxesPermutation(u,o),p=a;null!=d&&(p=ZB({inputs:{x:a},backend:n,attrs:{perm:d}}),u=Im.getInnerMostAxes(u.length,o)),Im.assertAxesAreInnerMostDims("any",u,o);let h,[c,f]=Im.computeOutAndReduceShapes(p.shape,u),m=WB({inputs:{x:p},backend:n,attrs:{shape:[-1,ja.sizeFromShape(f)]}}),g=HB(m,m.dtype,"any",n);if(i){h=WB({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(c,l)}})}else h=WB({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),null!=d&&n.disposeIntermediateTensorInfo(p),h}},gW=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:a,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[a,s];let i="max"===t?">":"<",o=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = outIdx * ${r};\n\n        int bestIndex = inOffset;\n        float bestValue = getA(batch, bestIndex);\n\n        for (int i = 0; i < ${r}; i++) {\n          int inIdx = ${o};\n          float candidate = getA(batch, inIdx);\n          if (candidate ${i} bestValue) {\n            bestValue = candidate;\n            bestIndex = inIdx;\n          }\n        }\n        setOutput(float(bestIndex));\n      }\n    `}},yW=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,ja.assert(e.length>2,(()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`));let a=e[e.length-1],s=Math.ceil(a/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),r||this.variableNames.push("bestIndicesA");let i,o,l=this.outputShape,u=l.length,d=oz(u),p=WP("coords",u);if(1===s){o=u+1;let e=oz(o);i=`\n        ${e} sourceLocR = ${e}(${p.join()}, 0);\n        ++${p[u-1]};\n        ${e} sourceLocG = ${e}(${p.join()}, 0);\n        ++${p[u-2]};\n        ${e} sourceLocA = ${e}(${p.join()}, 0);\n        --${p[u-1]};\n        ${e} sourceLocB = ${e}(${p.join()}, 0);\n        --${p[u-2]};`}else o=u,i=`\n        ${d} sourceLocR = coords;\n        ++${p[u-1]};\n        ${d} sourceLocG = coords;\n        ++${p[u-2]};\n        ${d} sourceLocA = coords;\n        --${p[u-1]};\n        ${d} sourceLocB = coords;\n        --${p[u-2]};`;let h=["x","y","z","w","u","v"].slice(0,o),c="."+h[o-1],f=h.map((e=>"int "+e)),m=WP("sourceLocR",o-1).concat("inIdx.r"),g=WP("sourceLocG",o-1).concat("inIdx.g"),y=WP("sourceLocB",o-1).concat("inIdx.b"),b=WP("sourceLocA",o-1).concat("inIdx.a"),x="max"===n?"greaterThan":"lessThan",w=r?"":`\n          inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),\n                             getBestIndicesAChannel(${g.join()}),\n                             getBestIndicesAChannel(${y.join()}),\n                             getBestIndicesAChannel(${b.join()})));`,v=`vec4(\n            getAChannel(${m.join()}),\n            hasNextCol ? getAChannel(${g.join()}) : 0.,\n            hasNextRow ? getAChannel(${y.join()}) : 0.,\n            hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,k=r?"":`\n      float getBestIndicesAChannel(${f.join()}) {\n        return getChannel(getBestIndicesA(${h.join()}),\n                                          vec2(${h.slice(-2).join()}));\n      }`;this.userCode=`\n      float getAChannel(${f.join()}) {\n        return getChannel(getA(${h.join()}),\n                               vec2(${h.slice(-2).join()}));\n      }\n      ${k}\n      void main() {\n        ${d} coords = getOutputCoords();\n        bool hasNextCol = ${p[u-1]} < ${l[u-1]-1};\n        bool hasNextRow = ${p[u-2]} < ${l[u-2]-1};\n        ${i}\n        ivec4 srcIdx = ivec4(sourceLocR${c}, sourceLocG${c},\n          sourceLocB${c}, sourceLocA${c}) * ${t};\n        ivec4 inIdx = srcIdx;\n        vec4 bestIndex = vec4(inIdx);\n        vec4 bestValue = ${v};\n\n        for (int i = 0; i < ${t};
2 i++) {\n          inIdx = srcIdx;\n          ${w}\n          vec4 candidate = ${v};\n          bvec4 nan = isnan(candidate);\n          bvec4 replace = bvec4(\n            vec4(${x}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));\n\n          bestValue = vec4(replace.x  ? candidate.x : bestValue.x,\n                           replace.y  ? candidate.y : bestValue.y,\n                           replace.z  ? candidate.z : bestValue.z,\n                           replace.w  ? candidate.w : bestValue.w);\n          bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));\n          srcIdx++;\n        }\n        setOutput(bestIndex);\n      }\n    `}};function bW(e,t,n,r=null){let a=t.shape[0],s=t.shape[1];null!=r&&(a=r.shape[0],s=r.shape[1]);let i=Im.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:a,outSize:Math.ceil(s/i)},l=new gW(o,n,null==r),u=[t];null!=r&&u.push(r);let d=e.runWebGLProgram(l,u,"int32");if(1===d.shape[1])return d;let p=bW(e,t,n,d);return e.disposeIntermediateTensorInfo(d),p}function xW(e,t,n,r=null){let a=null!=r?r.shape:t.shape,s=a[a.length-1],i=Im.computeOptimalWindowSize(s),o=new yW(a,i,n,null==r),l=null==r?[t]:[t,r],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let r=xW(e,t,n,u);return e.disposeIntermediateTensorInfo(u),r}return u}function wW(e,t,n,r){let a=[n];if(Im.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),a,t.shape.length),!ut().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let n=[],s=e.texData.get(t.dataId),i=t;null!==s&&s.isPacked&&(i=e.unpackTensor(t),n.push(i));let[o,l]=Im.computeOutAndReduceShapes(i.shape,a),u=ja.sizeFromShape(l),d=WB({inputs:{x:i},backend:e,attrs:{shape:[-1,u]}});n.push(d);let p=bW(e,d,r);n.push(p);let h=WB({inputs:{x:p},backend:e,attrs:{shape:o}});return n.forEach((t=>e.disposeIntermediateTensorInfo(t))),h}return xW(e,t,r)}var vW={kernelName:vt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=ja.parseAxisParam(s,a.shape),o=Im.getAxesPermutation(i,a.shape.length),l=a,u=[];null!=o&&(l=ZB({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Im.getInnerMostAxes(i.length,l.shape.length)),Im.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let d=wW(n,l,i[0],"max");return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),d}};var kW={kernelName:kt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s}=r,i=ja.parseAxisParam(s,a.shape),o=Im.getAxesPermutation(i,a.shape.length),l=a,u=[];null!=o&&(l=ZB({inputs:{x:a},backend:n,attrs:{perm:o}}),u.push(l),i=Im.getInnerMostAxes(i.length,l.shape.length)),Im.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let d=wW(n,l,i[0],"min");return u.forEach((e=>n.disposeIntermediateTensorInfo(e))),d}},IW=RB({opSnippet:XP+"\n  if (abs(x) > 1.) {\n    return NAN;\n  }\n  return asin(x);\n"}),SW={kernelName:It,backendName:"webgl",kernelFunc:IW},NW=RB({opSnippet:XP+"return log(x + sqrt(x * x + 1.0));"}),TW={kernelName:St,backendName:"webgl",kernelFunc:NW},_W=RB({opSnippet:XP+"\n  return atan(x);\n"}),CW={kernelName:Nt,backendName:"webgl",kernelFunc:_W},EW=FB({opSnippet:yB+"\n  return atan(a, b);\n",packedOpSnippet:"\n  vec4 result = atan(a, b);\n  bvec4 isNaNA = isnan(a);\n  bvec4 isNaNB = isnan(b);\n  bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n  "+xB+"\n  return result;\n"}),$W={kernelName:_t,backendName:"webgl",kernelFunc:EW},AW=RB({opSnippet:XP+"\n  if ((x < -1.0) || (x > 1.0)) return NAN;\nreturn (log(1.0 + x) - log(1.0 - x)) / 2.0;"}),RW={kernelName:Tt,backendName:"webgl",kernelFunc:AW},FW=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],"avg"===t&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterHeight,p=e.effectiveFilterWidth,h=e.padInfo.top,c=e.padInfo.left;this.outputShape=e.outShape;let f="avg"===t,m=`((batch  * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(f||(y="-1.0 / 1e-20"),n){let t=">=";return void(this.userCode=`\n        const ivec2 strides = ivec2(${i}, ${o});\n        const ivec2 pads = ivec2(${h}, ${c});\n\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int batch = coords[0];\n          int d = coords[3];\n\n          ivec2 xRCCorner = coords.yz * strides - pads;\n          int xRCorner = xRCCorner.x;\n          int xCCorner = xRCCorner.y;\n\n          // max/min x(?, ?, d) to get y(yR, yC, d).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n          float avgValue = 0.0;\n\n          for (int wR = 0; wR < ${d};\n              wR += ${l}) {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= ${e.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${p};\n                wC += ${u}) {\n              int xC = xCCorner + wC;\n\n              if (xC < 0 || xC >= ${e.inWidth}) {\n                continue;\n              }\n\n              float value = getX(batch, xR, xC, d);\n\n              // If a min / max value has already been found, use it. If not,\n              // use the current value.\n              float currMinMaxValue = mix(\n                  value, minMaxValue, minMaxValueFound);\n              if (value ${t} currMinMaxValue) {\n                minMaxValue = value;\n                minMaxValueFound = 1.0;\n                minMaxPosition = ${r?a?m:g:`wR * ${p} + wC`};\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      `)}let b=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"avg"===t&&(b="avgValue / max(count, 1.0)");let x=4*Math.floor(s/4),w=s%4,v=`\n      if (${f}
2) {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = max(values, minMaxValue);\n      }\n    `;this.userCode=`\n      const ivec2 strides = ivec2(${i}, ${o});\n      const ivec2 pads = ivec2(${h}, ${c});\n      const float initializationValue = ${y};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xR, int xC, int d) {\n        if (xC < 0 || xC >= ${e.inWidth}) {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xR, xC, d);\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d = coords[3];\n\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // max/min x(?, ?, d) to get y(yR, yC, d).\n        // ? = to be determined\n        vec4 minMaxValue = vec4(${y});\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wR = 0; wR < ${d};\n            wR += ${l}) {\n          int xR = xRCorner + wR;\n\n          if (xR < 0 || xR >= ${e.inHeight}) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${x}; wC += 4) {\n            int xC = xCCorner + wC * ${u};\n\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${u}, d),\n              getValue(batch, xR, xC + 2 * ${u}, d),\n              getValue(batch, xR, xC + 3 * ${u}, d)\n            );\n\n            ${v}\n          }\n\n          int xC = xCCorner + ${x};\n          if (${1===w}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              initializationValue,\n              initializationValue,\n              initializationValue\n            );\n\n            ${v}\n          } else if (${2===w}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${u}, d),\n              initializationValue,\n              initializationValue\n            );\n\n            ${v}\n          } else if (${3===w}) {\n            vec4 values = vec4(\n              getValue(batch, xR, xC, d),\n              getValue(batch, xR, xC + ${u}, d),\n              getValue(batch, xR, xC + 2 * ${u}, d),\n              initializationValue\n            );\n\n            ${v}\n          }\n        }\n        setOutput(${b});\n      }\n    `}},DW=class{constructor(e,t,n,r=!1,a=!1){if(this.variableNames=["x"],"avg"===t&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,d=e.dilationHeight,p=e.dilationWidth,h=e.effectiveFilterDepth,c=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let b="avg"===t,x="0.0";if(b||(x="-1.0 / 1e-20"),n){let t=">=";return void(this.userCode=`\n        const ivec3 strides =\n            ivec3(${i}, ${o}, ${l});\n        const ivec3 pads = ivec3(${m}, ${g}, ${y});\n\n        void main() {\n          ivec5 coords = getOutputCoords();\n          int batch = coords.x;\n          int ch = coords.u;\n\n          ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n          int xDCorner = xCorner.x;\n          int xRCorner = xCorner.y;\n          int xCCorner = xCorner.z;\n\n          // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).\n          // ? = to be determined\n          float minMaxValue = 0.0;\n          float minMaxValueFound = 0.0;\n          int minMaxPosition = 0;\n\n          for (int wD = 0; wD < ${h};\n              wD += ${u}) {\n            int xD = xDCorner + wD;\n\n            if (xD < 0 || xD >= ${e.inDepth}) {\n              continue;\n            }\n\n            for (int wR = 0; wR < ${c};\n                wR += ${d}) {\n              int xR = xRCorner + wR;\n\n              if (xR < 0 || xR >= ${e.inHeight}) {\n                continue;\n              }\n\n              for (int wC = 0; wC < ${f};\n                  wC += ${p}) {\n                int xC = xCCorner + wC;\n\n                if (xC < 0 || xC >= ${e.inWidth}) {\n                  continue;\n                }\n\n                float value = getX(batch, xD, xR, xC, ch);\n\n                // If a min / max value has already been found, use it. If not,\n                // use the current value.\n                float currMinMaxValue = mix(\n                    value, minMaxValue, minMaxValueFound);\n                if (value ${t} currMinMaxValue) {\n                  minMaxValue = value;\n                  minMaxValueFound = 1.0;
2\n                  minMaxPosition = ${r?a?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${c} * ${f} +\n                      wR * ${f} + wC`};\n                }\n              }\n            }\n          }\n          setOutput(float(minMaxPosition));\n        }\n      `)}let w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;"avg"===t&&(w="avgValue / max(count, 1.0)");let v=4*Math.floor(s/4),k=s%4,I=`\n      if (${b}) {\n        avgValue += dot(values, ones);\n      } else {\n        minMaxValue = max(values, minMaxValue);\n      }\n    `;this.userCode=`\n      const ivec3 strides =\n        ivec3(${i}, ${o}, ${l});\n      const ivec3 pads = ivec3(${m}, ${g}, ${y});\n      const float initializationValue = ${x};\n      const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);\n\n      float count = 0.0;\n\n      float getValue(int batch, int xD, int xR, int xC, int ch) {\n        if (xC < 0 || xC >= ${e.inWidth}) {\n          return initializationValue;\n        }\n        count += 1.0;\n        return getX(batch, xD, xR, xC, ch);\n      }\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xDCorner = xCorner.x;\n        int xRCorner = xCorner.y;\n        int xCCorner = xCorner.z;\n\n        // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).\n        // ? = to be determined\n        vec4 minMaxValue = vec4(${x});\n        float avgValue = 0.0;\n        count = 0.0;\n\n        for (int wD = 0; wD < ${h};\n            wD += ${u}) {\n          int xD = xDCorner + wD;\n\n          if (xD < 0 || xD >= ${e.inDepth}) {\n            continue;\n          }\n\n          for (int wR = 0; wR < ${c};\n            wR += ${d}) {\n            int xR = xRCorner + wR;\n\n            if (xR < 0 || xR >= ${e.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${v}; wC += 4) {\n              int xC = xCCorner + wC * ${p};\n\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${p}, ch),\n                getValue(batch, xD, xR, xC + 2 * ${p}, ch),\n                getValue(batch, xD, xR, xC + 3 * ${p}, ch)\n              );\n\n              ${I}\n            }\n\n            int xC = xCCorner + ${v};\n            if (${1===k}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                initializationValue,\n                initializationValue,\n                initializationValue\n              );\n\n              ${I}\n            } else if (${2===k}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${p}, ch),\n                initializationValue,\n                initializationValue\n              );\n\n              ${I}\n            } else if (${3===k}) {\n              vec4 values = vec4(\n                getValue(batch, xD, xR, xC, ch),\n                getValue(batch, xD, xR, xC + ${p}, ch),\n                getValue(batch, xD, xR, xC + 2 * ${p}, ch),\n                initializationValue\n              );\n\n              ${I}\n            }\n          }\n        }\n        setOutput(${w});\n      }\n    `}};var MW={kernelName:Ct,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;VL(a,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;ja.assert(Im.eitherStridesOrDilationsAreOne(i,1),(()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));let u=Im.computePool2DInfo(a.shape,s,i,1,o,l);if(1===u.filterWidth&&1===u.filterHeight&&ja.arraysEqual(u.inShape,u.outShape))return vB({inputs:{x:a},backend:n});let d=new FW(u,"avg",!1);return n.runWebGLProgram(d,[a],"float32")}};var OW={kernelName:$t,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r,d=Im.computePool3DInfo(a.shape,s,i,[1,1,1],o,l,u),p=new DW(d,"avg",!1);return n.runWebGLProgram(p,[a],"float32")}},LW=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,d=l-1-e.padInfo.left,p=1/(t*n);this.userCode=`\n      const ivec2 pads = ivec2(${u}, ${d});\n      const float avgMultiplier = float(${p});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${o};\n            wR += ${s}) {\n          float dyR = float(dyRCorner + wR) / ${r}.0;\n\n          if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < ${l};\n            wC+= ${i}) {\n            float dyC = float(dyCCorner + wC) / ${a}.0;\n\n            if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n\n            dotProd += dyValue * avgMultiplier;\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},zW=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.effectiveFilterDepth,p=e.effectiveFilterHeight,h=e.effectiveFilterWidth,c=d-1-e.padInfo.front,f=p-1-e.padInfo.top,m=h-1-e.padInfo.left,g=1/(t*n*r);this.userCode=`\n      const ivec3 pads = ivec3(${c}, ${f}, ${m});\n      const float avgMultiplier = float(${g});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get\n        // dx(x
2D, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < ${d};\n            wD += ${o}) {\n          float dyD = float(dyDCorner + wD) / ${a}.0;\n\n          if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < ${p};\n              wR += ${l}) {\n            float dyR = float(dyRCorner + wR) / ${s}.0;\n\n            if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < ${h};\n                wC += ${u}) {\n              float dyC = float(dyCCorner + wC) / ${i}.0;\n\n              if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n\n              dotProd += dyValue * avgMultiplier;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}};var PW={kernelName:At,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=r,p=Im.computePool3DInfo(i.shape,o,l,[1,1,1],u,d),h=new zW(p);return n.runWebGLProgram(h,[a],i.dtype)}};var BW={kernelName:Et,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s;VL([a,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=r,d=Im.computePool2DInfo(i.shape,o,l,1,u),p=new LW(d);return n.runWebGLProgram(p,[a],i.dtype)}};var WW={kernelName:Rt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;return eW({a,b:s,transposeA:i,transposeB:o,backend:n})}},VW=class{constructor(e,t,n,r,a,s){this.outputShape=[],this.variableNames=["x","mean","variance"],Im.assertAndGetBroadcastShape(e,t),Im.assertAndGetBroadcastShape(e,n);let i="0.0";null!=r&&(Im.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";null!=a&&(Im.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`\n      void main() {\n        float x = getXAtOutCoords();\n        float mean = getMeanAtOutCoords();\n        float variance = getVarianceAtOutCoords();\n        float offset = ${i};\n        float scale = ${o};\n        float inv = scale * inversesqrt(variance + float(${s}));\n        setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));\n      }\n    `}},UW=class{constructor(e,t,n,r,a,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],Im.assertAndGetBroadcastShape(e,t),Im.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";null!=r&&(Im.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";null!=a&&(Im.assertAndGetBroadcastShape(e,a),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`\n      void main() {\n        vec4 offset = ${i};\n        vec4 scale = ${o};\n\n        vec4 x = getXAtOutCoords();\n        vec4 mean = getMeanAtOutCoords();\n        vec4 variance = getVarianceAtOutCoords();\n\n        vec4 inv = scale * inversesqrt(variance + vec4(${s}));\n\n        setOutput((x - mean) * inv + offset);\n      }\n    `}},GW={kernelName:Tn,backendName:"webgl",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:a,variance:s,offset:i,scale:o}=e;ja.assert(a.shape.length===s.shape.length,(()=>"Batch normalization gradient requires mean and variance to have equal ranks.")),ja.assert(null==i||a.shape.length===i.shape.length,(()=>"Batch normalization gradient requires mean and offset to have equal ranks.")),ja.assert(null==o||a.shape.length===o.shape.length,(()=>"Batch normalization gradient requires mean and scale to have equal ranks."));let{varianceEpsilon:l}=n;null==l&&(l=.001);let u=[r,a,s],d=null;null!=i&&(d=i.shape,u.push(i));let p=null;null!=o&&(p=o.shape,u.push(o));let h=ut().getBool("WEBGL_PACK_NORMALIZATION")?new UW(r.shape,a.shape,s.shape,d,p,l):new VW(r.shape,a.shape,s.shape,d,p,l);return t.runWebGLProgram(h,u,u[0].dtype)}},HW=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;
2let t=oz(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n,r=function(e){if(1===e)return"sourceLoc";if(e<=6)return jW.slice(0,e).map((e=>"sourceLoc."+e)).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}(this.rank);n=`\n        ${t} sourceLoc;\n        ${t} coords = getOutputCoords();\n        ${e.map(((e,t)=>`sourceLoc.${jW[t]} = start[${t}] + coords.${jW[t]};`)).join("\n")}\n      `,this.userCode=`\n      void main() {\n        ${n}\n        setOutput(getSource(${r}));\n      }\n    `}},jW=["x","y","z","w","u","v"];var qW=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=oz(this.rank),n=WP("coords",this.rank),r=WP("sourceLoc",this.rank),a=1===this.rank?"sourceLoc":`vec2(${r.slice(-2).join()})`,s=`getChannel(getSource(${r.join()}), ${a})`,i=`\n      result.x = ${s};\n      if (++${n[this.rank-1]} < ${e[this.rank-1]}) {\n        ++${r[this.rank-1]};\n        result.y = ${s};\n        --${r[this.rank-1]};\n      }\n    `,o=1===this.rank?"":`\n      --${n[this.rank-1]};\n      if (++${n[this.rank-2]} < ${e[this.rank-2]}) {\n        ++${r[this.rank-2]};\n        result.z = ${s};\n        if (++${n[this.rank-1]} < ${e[this.rank-1]}) {\n          ++${r[this.rank-1]};\n          result.w = ${s};\n        }\n      }\n    `,l=this.rank<=4?`sourceLoc = coords +\n            ${t}(${e.map(((e,t)=>`start[${t}]`)).join()});`:e.map(((e,t)=>`${r[t]} = ${n[t]} + start[${t}];`)).join("\n");this.userCode=`\n      void main() {\n        ${t} coords = getOutputCoords();\n        ${t} sourceLoc;\n        ${l}\n        vec4 result = vec4(0.);\n        ${i}\n        ${o}\n        setOutput(result);\n      }\n    `}};function KW(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{begin:s,size:i}=r,[o,l]=Zf.parseSliceParams(a,s,i);if(Zf.assertParamsValid(a,o,l),0===ja.sizeFromShape(l))return n.makeTensorInfo(l,a.dtype,[]);if(n.shouldExecuteOnCPU([a])||"string"===a.dtype){let e=n.texData.get(a.dataId),t=NP(e.values,o,l,a.shape,a.dtype);return n.makeTensorInfo(l,a.dtype,t)}let{isPacked:u}=n.texData.get(a.dataId),d=Zf.isSliceContinous(a.shape,o,l);if(u||!d){let e=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qW(l):new HW(l),t=[o];return n.runWebGLProgram(e,[a],a.dtype,t)}return n.uploadToGPU(a.dataId),function(e,t,n,r){let a=r.texData.get(e.dataId),s=r.makeTensorInfo(n,e.dtype),i=r.texData.get(s.dataId);Object.assign(i,a),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=Zf.computeFlatOffset(t,ja.computeStrides(e.shape));a.slice&&(o+=a.slice.flatOffset),i.slice={flatOffset:o,origDataId:a.slice&&a.slice.origDataId||e.dataId};let l=r.dataRefCount.get(i.slice.origDataId)||1;return r.dataRefCount.set(i.slice.origDataId,l+1),s}
2(a,o,l,n)}var XW={kernelName:jr,backendName:"webgl",kernelFunc:KW},YW={kernelName:Ft,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r;ja.assert(a.shape.length<=4,(()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"));let o=s.reduce(((e,t)=>e*t)),l=Im.getReshaped(a.shape,s,o),u=Im.getPermuted(l.length,s.length),d=Im.getReshapedPermuted(a.shape,s,o),p=Im.getSliceBeginCoords(i,s.length),h=Im.getSliceSize(d,i,s.length),c=[],f=WB({inputs:{x:a},backend:n,attrs:{shape:l}}),m=ZB({inputs:{x:f},backend:n,attrs:{perm:u}}),g=WB({inputs:{x:m},backend:n,attrs:{shape:d}}),y=KW({inputs:{x:g},backend:n,attrs:{begin:p,size:h}});return c.push(f),c.push(m),c.push(g),c.forEach((e=>n.disposeIntermediateTensorInfo(e))),y}};var ZW={kernelName:Dt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i}=r,o=n.readSync(a.dataId),l=n.readSync(s.dataId),u=jz(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}};var JW={kernelName:Mt,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r}=e,{a,b:s}=n,i=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS"),o=ut().getNumber("WEBGL_VERSION");if(r.shouldExecuteOnCPU([a,s])||1===o){let e=r.texData.get(a.dataId).values,t=r.texData.get(s.dataId).values,[n,i]=Kz(a.shape,s.shape,e,t,a.dtype),o=r.makeTensorInfo(i,a.dtype);return r.texData.get(o.dataId).values=n,o}return t=i?new wB("\n  int r = int(a.r) & int(b.r);\n  int g = int(a.g) & int(b.g);\n  int rb = int(a.b) & int(b.b);\n  int ra = int(a.a) & int(b.a);\n  return vec4(r, g, rb, ra);\n",a.shape,s.shape,!1):new bB("\n  return float(int(a.r) & int(b.r));\n",a.shape,s.shape),r.runWebGLProgram(t,[a,s],a.dtype)}};var QW={kernelName:Lt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{s0:r,s1:a}=t,s=n.readSync(r.dataId),i=n.readSync(a.dataId),o=Im.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}},eV=FB({opSnippet:"return float(a != b);",cpuKernelImpl:mP,dtype:"bool"}),tV={kernelName:cr,backendName:"webgl",kernelFunc:eV};function nV(e){let{inputs:t,backend:n}=e,{input:r}=t;return vB({inputs:{x:n.texData.get(r.dataId).complexTensorInfos.real},backend:n})}var rV={kernelName:Er,backendName:"webgl",kernelFunc:nV},aV="return float(int(x));";var sV={kernelName:zt,backendName:"webgl",kernelFunc:function e(t){let{inputs:n,backend:r,attrs:a}=t,{x:s}=n,{dtype:i}=a;if("complex64"===i){if("complex64"===s.dtype)return vB({inputs:{x:s},backend:r});let t=Rd(s.shape),n=e({inputs:{x:s},backend:r,attrs:{dtype:"float32"}}),a=IB({inputs:{real:n,imag:t},backend:r});return t.dispose(),r.disposeIntermediateTensorInfo(n),a}if("complex64"===s.dtype){let t=nV({inputs:{input:s},backend:r}),n=e({inputs:{x:t},backend:r,attrs:{dtype:i}});return r.disposeIntermediateTensorInfo(t),n}if(!ja.hasEncodingLoss(s.dtype,i)){let e=vB({inputs:{x:s},backend:r});return{dataId:e.dataId,shape:e.shape,dtype:i}}if(r.shouldExecuteOnCPU([s])){let e=r.texData.get(s.dataId).values,[t,n,a]=Xz(e,s.shape,s.dtype,i);return r.makeTensorInfo(t,n,a)}if("int32"===i)return function(e,t){let n=new KP(e.shape,aV),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}(s,r);if("bool"===i){let e=r.makeTensorInfo([],"bool",ja.getTypedArrayFromDType("bool",1)),t=eV({inputs:{a:s,b:e},backend:r});return r.disposeIntermediateTensorInfo(e),t}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${i}`)}},iV="return ceil(x);",oV=RB({opSnippet:iV,packedOpSnippet:iV,cpuKernelImpl:Yz}),lV={kernelName:Pt,backendName:"webgl",kernelFunc:oV},uV=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode="\n\n      void main() {\n        float value = getAAtOutCoords();\n        if (isnan(value)) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, minVal, maxVal));\n      }\n    "}},dV=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode="\n      void main() {\n        vec4 value = getAAtOutCoords();\n\n        if (any(isnan(value))) {\n          setOutput(value);\n          return;\n        }\n\n        setOutput(clamp(value, vec4(minVal), vec4(maxVal)));\n      }\n    "}};var pV={kernelName:Bt,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s}=n,{clipValueMin:i,clipValueMax:o}=a;t=ut().getBool("WEBGL_PACK_CLIP")?new dV(s.shape):new uV(s.shape);let l=[[i],[o]];return r.runWebGLProgram(t,[s],s.dtype,l)}},hV=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,this.userCode="\n      void main() {\n        float re = abs(getRealAtOutCoords());\n        float im = abs(getImagAtOutCoords());\n        float mx = max(re, im);\n\n        // sadly the length function in glsl is not underflow-safe\n        // (at least not on Intel GPUs). So the safe solution is\n        // to ensure underflow-safety in all cases.\n        setOutput(\n          mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx))\n        );\n      }\n    "}};function cV(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}var fV={kernelName:Vt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r}=t,a=n.texData.get(r.dataId),s=new hV(r.shape),i=[cV(r,a.complexTensorInfos.real),cV(r,a.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}},mV=class{constructor(e){this.outputShape=[],this.outputShape=Im.computeOutShape(e,1),this.variableNames=e.map(((e,t)=>`T${t}`));let t=new Array(e.length-1);t[0]=e[0][1];for(let n=1;n<t.length;n++)t[n]=t[n-1]+e[n][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let e=1;e<t.length;e++){let r=t[e-1];n.push(`else if (yC < ${t[e]}
2) setOutput(getT${e}(yR, yC-${r}));`)}let r=t.length,a=t[t.length-1];n.push(`else setOutput(getT${r}(yR, yC-${a}));`),this.userCode=`\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int yR = coords.x;\n        int yC = coords.y;\n\n        ${n.join("\n        ")}\n      }\n    `}},gV=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=Im.computeOutShape(e,t);let n=this.outputShape,r=n.length,a=oz(r),s=WP("coords",r),i=["x","y","z","w","u","v"].slice(0,r);this.variableNames=e.map(((e,t)=>`T${t}`));let o=new Array(e.length-1);o[0]=e[0][t];for(let n=1;n<o.length;n++)o[n]=o[n-1]+e[n][t];let l=i[t],u=i.slice(-2),d=i.join(),p=`if (${l} < ${o[0]}) {\n        return getChannel(\n            getT0(${d}), vec2(${u.join()}));\n        }`;for(let e=1;e<o.length;e++){let t=o[e-1];p+=`\n        if (${l} < ${o[e]}  && ${l} >= ${o[e-1]}) {\n          return getChannel(\n            getT${e}(${yV(i,l,t)}),\n            vec2(${yV(u,l,t)}));\n        }`}let h=o.length,c=o[o.length-1];p+=`\n        return getChannel(\n          getT${h}(${yV(i,l,c)}),\n          vec2(${yV(u,l,c)}));`,this.userCode=`\n      float getValue(${i.map((e=>"int "+e))}) {\n        ${p}\n      }\n\n      void main() {\n        ${a} coords = getOutputCoords();\n        vec4 result = vec4(getValue(${s}), 0., 0., 0.);\n\n        ${s[r-1]} = ${s[r-1]} + 1;\n        if (${s[r-1]} < ${n[r-1]}) {\n          result.g = getValue(${s});\n        }\n\n        ${s[r-2]} = ${s[r-2]} + 1;\n        if (${s[r-2]} < ${n[r-2]}) {\n          result.a = getValue(${s});\n        }\n\n        ${s[r-1]} = ${s[r-1]} - 1;\n        if (${s[r-2]} < ${n[r-2]} &&\n            ${s[r-1]} < ${n[r-1]}) {\n          result.b = getValue(${s});\n        }\n        setOutput(result);\n      }\n    `}};function yV(e,t,n){let r=e.indexOf(t);return e.map(((e,t)=>t===r?`${e} - ${n}`:e)).join()}function bV(e){let{inputs:t,backend:n}=e,{input:r}=t;return vB({inputs:{x:n.texData.get(r.dataId).complexTensorInfos.imag},backend:n})}var xV={kernelName:Fn,backendName:"webgl",kernelFunc:bV};function wV(e,t,n){let r=e[0].dtype;if("complex64"===r){let r=e.map((e=>nV({inputs:{input:e},backend:n}))),a=e.map((e=>bV({inputs:{input:e},backend:n}))),s=wV(r,t,n),i=wV(a,t,n),o=IB({inputs:{real:s,imag:i},backend:n});return r.forEach((e=>n.disposeIntermediateTensorInfo(e))),a.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),o}let a=n.shouldExecuteOnCPU(e);if("string"===r&&(a=!0),a){let a=e.map((e=>{let r=[-1,ja.sizeFromShape(e.shape.slice(t))];return WB({inputs:{x:e},backend:n,attrs:{shape:r}})})),s=a.map((e=>({vals:n.readSync(e.dataId),shape:e.shape}))),i=Im.computeOutShape(a.map((e=>e.shape)),1),o=1===a[0].shape[0],l=Zz(s,i,r,o),u=Im.computeOutShape(e.map((e=>e.shape)),t),d=n.makeTensorInfo(u,r,l);return a.forEach((e=>n.disposeIntermediateTensorInfo(e))),d}let s=e.filter((e=>ja.sizeFromShape(e.shape)>0)),i=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(1===s.length){let t=i?new KP(e[0].shape,tB):new lB(e[0].shape,tB);return n.runWebGLProgram(t,e,r)}let o=ut().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let e=[];for(let r=0;r<s.length;r+=o){let a=s.slice(r,r+o);e.push(wV(a,t,n))}let r=wV(e,t,n);for(let t of e)n.disposeIntermediateTensorInfo(t);return r}if(i){let e=new gV(s.map((e=>e.shape)),t);return n.runWebGLProgram(e,s,r)}let{tensors2D:l,outShape:u}=function(e,t,n){let r=Im.computeOutShape(e.map((e=>e.shape)),t);return{tensors2D:e.map((e=>WB({inputs:{x:e},attrs:{shape:[-1,ja.sizeFromShape(e.shape.slice(t))]},backend:n}))),outShape:r}}(s,t,n),d=new mV(l.map((e=>e.shape))),p=n.runWebGLProgram(d,l,r);l.forEach((e=>n.disposeIntermediateTensorInfo(e)));let h=WB({inputs:{x:p},attrs:{shape:u},backend:n});return n.disposeIntermediateTensorInfo(p),h}function vV(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r,s=ja.parseAxisParam(a,t[0].shape)[0],i=t.map((e=>e.shape));Im.assertParamsConsistent(i,s);let o=Im.computeOutShape(t.map((e=>e.shape)),s);if(0===ja.sizeFromShape(o))return n.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter((e=>ja.sizeFromShape(e.shape)>0));
2return 1===l.length?vB({inputs:{x:l[0]},backend:n}):wV(l,s,n)}var kV={kernelName:Ut,backendName:"webgl",kernelFunc:vV},IV=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,d=e.dilationWidth,p=e.filterHeight,h=e.filterWidth,c=4*Math.floor(e.inChannels/4),f=e.inChannels%4,m="channelsLast"===e.dataFormat,g=m?1:2,y=m?2:3,b=m?3:1,x="",w="";n&&(x=r?`float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          ${n}\n        }`:a?`float activation(float a) {\n          float b = getLeakyreluAlphaAtOutCoords();\n          ${n}\n        }`:`\n          float activation(float x) {\n            ${n}\n          }\n        `,w="result = activation(result);");let v=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n      ${x}\n\n      const ivec2 strides = ivec2(${o}, ${l});\n      const ivec2 pads = ivec2(${s}, ${i});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d2 = coords[${b}];\n\n        ivec2 xRCCorner =\n            ivec2(coords[${g}], coords[${y}]) * strides - pads;\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${p}; wR++) {\n          int xR = xRCorner + wR * ${u};\n\n          if (xR < 0 || xR >= ${e.inHeight}) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${h}; wC++) {\n            int xC = xCCorner + wC * ${d};\n\n            if (xC < 0 || xC >= ${e.inWidth}) {\n              continue;\n            }\n\n            for (int d1 = 0; d1 < ${c}; d1 += 4) {\n              vec4 wValues = vec4(\n                getW(wR, wC, d1, d2),\n                getW(wR, wC, d1 + 1, d2),\n                getW(wR, wC, d1 + 2, d2),\n                getW(wR, wC, d1 + 3, d2)\n              );\n\n              if (${m}) {\n                vec4 xValues = vec4(\n                  getX(batch, xR, xC, d1),\n                  getX(batch, xR, xC, d1 + 1),\n                  getX(batch, xR, xC, d1 + 2),\n                  getX(batch, xR, xC, d1 + 3)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec4 xValues = vec4(\n                  getX(batch, d1, xR, xC),\n                  getX(batch, d1 + 1, xR, xC),\n                  getX(batch, d1 + 2, xR, xC),\n                  getX(batch, d1 + 3, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n\n            if (${1===f}) {\n\n              if (${m}) {\n                dotProd +=\n                    getX(batch, xR, xC, ${c}) *\n                    getW(wR, wC, ${c}, d2);\n              } else {\n                dotProd +=\n                    getX(batch, ${c}, xR, xC) *\n                    getW(wR, wC, ${c}, d2);\n              }\n\n            } else if (${2===f}) {\n              vec2 wValues = vec2(\n                getW(wR, wC, ${c}, d2),\n                getW(wR, wC, ${c} + 1, d2)\n              );\n\n              if (${m}) {\n                vec2 xValues = vec2(\n                  getX(batch, xR, xC, ${c}),\n                  getX(batch, xR, xC, ${c} + 1)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec2 xValues = vec2(\n                  getX(batch, ${c}, xR, xC),\n                  getX(batch, ${c} + 1, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            } else if (${3===f}) {\n              vec3 wValues = vec3(\n                getW(wR, wC, ${c}, d2),\n                getW(wR, wC, ${c} + 1, d2),\n                getW(wR, wC, ${c} + 2, d2)\n              );\n\n              if (${m}) {\n                vec3 xValues = vec3(\n                  getX(batch, xR, xC, ${c}),\n                  getX(batch, xR, xC, ${c} + 1),\n                  getX(batch, xR, xC, ${c} + 2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else {\n                vec3 xValues = vec3(\n                  getX(batch, ${c}, xR, xC),\n                  getX(batch, ${c} + 1, xR, xC),\n                  getX(batch, ${c} + 2, xR, xC)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n\n            }\n          }\n        }\n\n        float result = dotProd;\n        ${v}\n        ${w}\n        setOutput(result);\n      }\n    `}},SV=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,d=e.filterDepth,p=e.filterHeight,h=e.filterWidth,c=4*Math.floor(e.inChannels/4),f=e.inChannels%4;this.userCode=`\n      const ivec3 strides = ivec3(${a}, ${s}, ${i});\n      const ivec3 pads = ivec3(${t}, ${n}, ${r});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d2 = coords.u;\n\n        ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;\n        int xFCorner = xFRCCorner.x;\n        int xRCorner = xFRCCorner.y;\n        int xCCorner = xFRCCorner.z;\n\n        // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get\n        // y(yF, yR, yC, d2). ? = to be determined. : = across all\n        // values in that axis.\n        float dotProd = 0.0;\n        for (int wF = 0; wF < ${d};
2 wF++) {\n          int xF = xFCorner + wF * ${o};\n\n          if (xF < 0 || xF >= ${e.inDepth}) {\n            continue;\n          }\n\n          for (int wR = 0; wR < ${p}; wR++) {\n            int xR = xRCorner + wR * ${l};\n\n            if (xR < 0 || xR >= ${e.inHeight}) {\n              continue;\n            }\n\n            for (int wC = 0; wC < ${h}; wC++) {\n              int xC = xCCorner + wC * ${u};\n\n              if (xC < 0 || xC >= ${e.inWidth}) {\n                continue;\n              }\n\n              for (int d1 = 0; d1 < ${c}; d1 += 4) {\n                vec4 xValues = vec4(\n                  getX(batch, xF, xR, xC, d1),\n                  getX(batch, xF, xR, xC, d1 + 1),\n                  getX(batch, xF, xR, xC, d1 + 2),\n                  getX(batch, xF, xR, xC, d1 + 3)\n                );\n                vec4 wValues = vec4(\n                  getW(wF, wR, wC, d1, d2),\n                  getW(wF, wR, wC, d1 + 1, d2),\n                  getW(wF, wR, wC, d1 + 2, d2),\n                  getW(wF, wR, wC, d1 + 3, d2)\n                );\n\n                dotProd += dot(xValues, wValues);\n              }\n\n              if (${1===f}) {\n                dotProd +=\n                  getX(batch, xF, xR, xC, ${c}) *\n                  getW(wF, wR, wC, ${c}, d2);\n              } else if (${2===f}) {\n                vec2 xValues = vec2(\n                  getX(batch, xF, xR, xC, ${c}),\n                  getX(batch, xF, xR, xC, ${c} + 1)\n                );\n                vec2 wValues = vec2(\n                  getW(wF, wR, wC, ${c}, d2),\n                  getW(wF, wR, wC, ${c} + 1, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              } else if (${3===f}) {\n                vec3 xValues = vec3(\n                  getX(batch, xF, xR, xC, ${c}),\n                  getX(batch, xF, xR, xC, ${c} + 1),\n                  getX(batch, xF, xR, xC, ${c} + 2)\n                );\n                vec3 wValues = vec3(\n                  getW(wF, wR, wC, ${c}, d2),\n                  getW(wF, wR, wC, ${c} + 1, d2),\n                  getW(wF, wR, wC, ${c} + 2, d2)\n                );\n                dotProd += dot(xValues, wValues);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},NV=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=cz(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,d=u,p="\n       int xR; int xC; int xCOffset;\n       vec4 wTexel; vec4 previous; vec4 final;";for(let e=0;e<u;e++)p+=`\n           vec4 xTexelC${2*e};\n           int xTexelC${2*e}Ready;\n           vec4 xTexelC${2*e+1};\n           int xTexelC${2*e+1}Ready;\n           vec4 xC${e};`;p+=`\n     for (int r = 0; r < ${l}; r++) {\n      for (int d1 = 0; d1 < ${e.inChannels}; d1 += 2) {\n       `;for(let e=0;e<u;e++)p+=`\n           xTexelC${2*e} = vec4(0.0);\n           xTexelC${2*e}Ready = 0;\n           xTexelC${2*e+1} = vec4(0.0);\n           xTexelC${2*e+1}Ready = 0;\n           xC${e} = vec4(0.0);`;p+="\n         xR = xRCorner + r * dilations[0];\n         if (xR >=0 && xR < inDims[0]) {\n       ";for(let t=0;t<(d+1)/2;t++){let n=2*t;if(p+=`\n           xC = xCCorner + ${n*o};\n           `,1===i){if(n<u&&(s%2==1?(p+=`\n                 xCOffset = xC + 1;\n                 if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${n}Ready == 0) {\n                   xTexelC${n} = getX(batch, xR, xCOffset, d1);\n\n                   // Need to manually clear unused channels in case\n                   // we're reading from recycled texture.\n                   if (xCOffset + 1 >= inDims[1]) {\n                     xTexelC${n}.zw = vec2(0.0);\n                   }\n                   xTexelC${n}Ready = 1;\n                 }\n               `,p+=1===o&&n>0?`\n                 xC${n} = vec4(xTexelC${n-2}.zw, xTexelC${n}.xy);\n                 `:`\n                   xCOffset = xC + 1 - 2;\n\n                   if (xCOffset >= 0 && xCOffset < inDims[1]) {\n                     previous = getX(batch, xR, xCOffset, d1);\n\n                     // Need to manually clear unused channels in case\n                     // we're reading from recycled texture.\n                     if (xCOffset + 1 >= inDims[1]) {\n                       previous.zw = vec2(0.0);\n                     }\n\n                     xC${n} = vec4(previous.zw, xTexelC${n}.xy);\n                   } else {\n                     xC${n} = vec4(0.0, 0.0, xTexelC${n}.xy);\n                   }\n                   `):p+=`\n                 if (xC >= 0 && xC < inDims[1] && xTexelC${n}Ready == 0) {\n                   xTexelC${n} = getX(batch, xR, xC, d1);\n                   if (xC + 1 >= inDims[1]) {\n                     xTexelC${n}.zw = vec2(0.0);\n                   }\n                   xTexelC${n}Ready = 1;\n                 }\n\n                 xC${n} = xTexelC${n};\n                 `,n+1<u)){let e=s%2==0?ja.nearestLargerEven(o):o;o%2==0&&s%2==1||o%2!=0&&s%2!=1?(p+=`\n                   xCOffset = xC + imod(pads[1], 2) + ${e};\n\n                   if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${n+1}Ready == 0) {\n                     xTexelC${n+1} = getX(batch, xR, xCOffset, d1);\n\n                     // Need to manually clear unused channels in case\n                     // we're reading from recycled texture.\n                     if (xCOffset + 1 >= inDims[1]) {\n                       xTexelC${n+1}.zw = vec2(0.0);\n                     }\n                     xTexelC${n+1}Ready = 1;\n                   }\n                   `,p+=o>1?`\n                     xCOffset -= 2;\n                     if (xCOffset >= 0 && xCOffset < inDims[1]) {\n                      previous = getX(batch, xR, xCOffset, d1);\n                      xC${n+1} = vec4(previous.zw, xTexelC${n+1}.xy);\n                     } else {\n                      xC${n+1} = vec4(0.0, 0.0, xTexelC${n+1}.xy);\n                     }\n                     `:`\n                     xC${n+1} = vec4(xTexelC${n}.zw, xTexelC${n+1}.xy);
2\n                     `):p+=1===e?`\n                     xC${n+1} = xTexelC${n};\n                     `:`\n                     xCOffset = xC + ${e};\n\n                     if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${n+1}Ready == 0) {\n                       xTexelC${n+1} = getX(batch, xR, xCOffset, d1);\n                       if (xCOffset + 1 >= inDims[1]) {\n                         xTexelC${n+1}.zw = vec2(0.0);\n                       }\n                       xTexelC${n+1}Ready = 1;\n                     }\n\n                     xC${n+1} = xTexelC${n+1};\n                     `}}else n<u&&(s%2==1?(p+=`\n                 xCOffset = xC + 1 - strides[1];\n                 if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${n}Ready == 0) {\n                   xTexelC${n} = getX(batch, xR, xCOffset, d1);\n                   // Need to manually clear unused channels in case\n                   // we're reading from recycled texture.\n                   if (xCOffset + 1 >= inDims[1]) {\n                     xTexelC${n}.zw = vec2(0.0);\n                   }\n                   xTexelC${n}Ready = 1;\n                 }\n\n                 if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${n+1}Ready == 0) {\n                   xTexelC${n+1} = getX(batch, xR, xC + 1, d1);\n                   // Need to manually clear unused channels in case\n                   // we're reading from recycled texture.\n                   if (xC + 2 >= inDims[1]) {\n                     xTexelC${n+1}.zw = vec2(0.0);\n                   }\n                   xTexelC${n+1}Ready = 1;\n                 }\n\n                 xC${n} = vec4(xTexelC${n}.zw, xTexelC${n+1}.zw);\n               `,n+1<u&&(p+=`\n                   final = vec4(0.0);\n                   xCOffset = xC + 1 + strides[1];\n                   if(xCOffset >= 0 && xCOffset < inDims[1]) {\n                     final = getX(batch, xR, xCOffset, d1);\n                   }\n                   xC${n+1} = vec4(xTexelC${n+1}.xy, final.xy);\n                 `)):(p+=`\n                 if(xC >= 0 && xC < inDims[1] && xTexelC${n}Ready == 0) {\n                   xTexelC${n} = getX(batch, xR, xC, d1);\n                   if (xC + 1 >= inDims[1]) {\n                     xTexelC${n}.zw = vec2(0.0);\n                   }\n                   xTexelC${n}Ready = 1;\n                 }\n\n                 xCOffset = xC + strides[1];\n                 if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${n+1}Ready == 0) {\n                   xTexelC${n+1} = getX(batch, xR, xCOffset, d1);\n                   if (xCOffset + 1 >= inDims[1]) {\n                     xTexelC${n+1}.zw = vec2(0.);\n                   }\n                   xTexelC${n+1}Ready = 1;\n                 }\n\n                 xC${n} = vec4(\n                   xTexelC${n}.xy, xTexelC${n+1}.xy);\n               `,n+1<u&&(p+=`\n                   xC${n+1} = vec4(xTexelC${n}.zw, xTexelC${n+1}.zw);\n                 `)));n<u&&(p+=`\n             wTexel = getW(r, ${n}, d1, d2);\n             dotProd += xC${n}.xxzz * vec4(wTexel.xy, wTexel.xy);\n             if(d1 + 1 < ${e.inChannels}) {\n               dotProd += xC${n}.yyww * vec4(wTexel.zw, wTexel.zw);\n             }\n           `,n+1<u&&(p+=`\n               wTexel = getW(r, ${n+1}, d1, d2);\n               dotProd += xC${n+1}.xxzz * vec4(wTexel.xy, wTexel.xy);\n               if(d1 + 1 < ${e.inChannels}) {\n                 dotProd += xC${n+1}.yyww * vec4(wTexel.zw, wTexel.zw);\n               }\n             `))}p+="\n     }\n   ",p+="\n     }\n   ",p+="\n     }\n   ";let h="",c="";n&&(h=r?`vec4 activation(vec4 a) {\n           vec4 b = getPreluActivationWeightsAtOutCoords();\n           ${n}\n         }`:a?`vec4 activation(vec4 a) {\n           vec4 b = getLeakyreluAlphaAtOutCoords();\n           ${n}\n         }`:`vec4 activation(vec4 x) {\n           ${n}\n         }`,c="result = activation(result);");let f=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n       ${h}\n\n       void main() {\n         ivec4 coords = getOutputCoords();\n         int batch = coords.x;\n         ivec2 xRCCorner = coords.yz * strides - pads;\n         int d2 = coords.w;\n         int xRCorner = xRCCorner.x;\n         int xCCorner = xRCCorner.y;\n\n         //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.\n         vec4 dotProd = vec4(0.000000000000001);\n\n         ${p}\n\n         vec4 result = dotProd - vec4(0.000000000000001);\n         ${f}\n         ${c}\n         setOutput(result);\n       }\n     `}},TV=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=cz(this.outputShape.length);let{dataFormat:n}=t,r=GL(),a="channelsLast"===n,s=a?1:2,i=a?2:3,o=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${e[2]} && pos < ${e[1]}) {`,l="";for(let e=0;e<=1;e++)for(let t=0;t<=1;t++)l+=`\n          blockIndex = rc.z + ${t};\n          pos = rc.y + ${e};\n\n          ${o}\n            offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];\n            d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);\n\n            if(d0 < inputShape[${s}] && d0 >= 0) {\n              // Use custom imod instead mod. On Intel GPU, mod may generate\n              // unexpected value.\n              // https://github.com/tensorflow/tfjs/issues/5447\n              offsetX = imod(blockIndex, outWidth) * stride[1] - pad[
21];\n              d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /\n                  inChannels);\n\n              if(d1 < inputShape[${i}] && d1 >= 0) {\n\n                ch = imod(pos, inChannels);\n\n                if (${a}) {\n                  innerDims = vec2(d1, ch);\n                  result[${2*e+t}] = getChannel(\n                    getA(rc.x, d0, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                } else {\n                  innerDims = vec2(d0, d1);\n                  result[${2*e+t}] = getChannel(\n                    getA(rc.x, ch, int(innerDims.x),\n                    int(innerDims.y)), innerDims);\n                }\n              }\n            }\n          }\n        `;this.userCode=`\n      void main() {\n        ivec3 rc = getOutputCoords();\n\n        vec4 result = vec4(0);\n\n        int blockIndex, pos, offsetY, d0, offsetX, d1, ch;\n        vec2 innerDims;\n\n        ${l}\n\n        ${r.output} = result;\n      }\n    `}};function _V(e,t){let n=e.length;return n>=3?t?[...e.slice(0,-3),e[n-3]*e[n-2],e[n-1]]:[...e.slice(0,-3),e[n-3],e[n-2]*e[n-1]]:!t&&1===n&&e[0]>1?[e[0],1]:null}function CV({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l,u=e.shape,d=r.texData.get(e.dataId),p=n.inChannels,h=u[0]*u[1]*u[2],c=n.outChannels,f="channelsLast"===n.dataFormat,m=[];if(null!=s){let e=_V(s.shape,f);null!=e&&(s=WB({inputs:{x:s},backend:r,attrs:{shape:e}}),m.push(s))}if(null!=a){let e=_V(a.shape,f);null!=e&&(a=WB({inputs:{x:a},backend:r,attrs:{shape:e}}),m.push(a))}if((1!==h&&1!==c||!(p>QB))&&d.isPacked&&f&&null!=d.texture&&u[2]%2!=0&&ja.arraysEqual(d.shape.slice(-3),u.slice(-3))){let p=u[0]*u[1]*(u[2]+1),h={dataId:e.dataId,shape:[1,p,n.inChannels],dtype:e.dtype},c=d.shape;d.shape=d.shape.slice(),d.shape[d.shape.length-2]++,ja.assert($L(d.shape,h.shape),(()=>`packed reshape ${d.shape} to ${h.shape} isn't free`));let f=WB({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});m.push(f);let g=eW({a:h,b:f,backend:r,transposeA:false,transposeB:false,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),y=r.texData.get(g.dataId);ja.assert(y.isPacked,(()=>"batchMatMul result is expected to be packed")),d.shape=c,y.shape=n.outShape,l=vB({input
2s:{x:g},backend:r}),l.shape=n.outShape,m.push(g)}else{let u=n.outHeight*n.outWidth,d=WB({inputs:{x:e},backend:r,attrs:{shape:f?[n.batchSize,u,n.inChannels]:[n.batchSize,n.inChannels,u]}}),p=WB({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),h=eW({a:f?d:p,b:f?p:d,transposeA:!f,transposeB:false,backend:r,bias:a,activation:o,preluActivationWeights:s,leakyreluAlpha:i});l=WB({inputs:{x:h},backend:r,attrs:{shape:n.outShape}}),m.push(d),m.push(p),m.push(h)}for(let e of m)r.disposeIntermediateTensorInfo(e);return l}function EV({x:e,filter:t,convInfo:n,backend:r,bias:a=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:d,outWidth:p,outHeight:h,dataFormat:c}=n,f="channelsLast"===c,m=l*u*d,g=h*p,y=[n.batchSize,m,g],b=[];if(null!=s){let e=_V(s.shape,f);null!=e&&(s=WB({inputs:{x:s},backend:r,attrs:{shape:e}}),b.push(s))}if(null!=a){let e=_V(a.shape,f);null!=e&&(a=WB({inputs:{x:a},backend:r,attrs:{shape:e}}),b.push(a))}let x=WB({inputs:{x:t},backend:r,attrs:{shape:[1,m,ja.sizeFromShape(t.shape)/m]}});b.push(x);let w=new TV(y,n),v=[e.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],k=r.runWebGLProgram(w,[e],"float32",v),I=WB({inputs:{x:k},backend:r,attrs:{shape:y}});b.push(k),b.push(I);let S=null!=a,N=null!=s,T="leakyrelu"===o,_=o?DB(o,!0):null,C=new MB(f?I.shape:x.shape,f?x.shape:I.shape,f?[n.batchSize,g,n.outChannels]:[n.batchSize,n.outChannels,g],!0,!1,S,_,N,T),E=f?[I,x]:[x,I];if(a&&E.push(a),N&&E.push(s),T){let e=r.makeTensorInfo([],"float32",ja.createScalarValue(i,"float32"));E.push(e),b.push(e)}let $=r.runWebGLProgram(C,E,"float32"),A=WB({inputs:{x:$},backend:r,attrs:{shape:n.outShape}});b.push($);for(let e of b)r.disposeIntermediateTensorInfo(e);return A}var $V={kernelName:Gt,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s,filter:i}=n,{strides:o,pad:l,dataFormat:u,dilations:d,dimRoundingMode:p}=a,h=Im.convertConv2DDataFormat(u),c=Im.computeConv2DInfo(s.shape,i.shape,o,d,l,p,!1,h);if(1!==c.filterHeight||1!==c.filterWidth||1!==c.dilationHeight||1!==c.dilationWidth||1!==c.strideHeight||1!==c.strideWidth||"SAME"!==c.padInfo.type&&"VALID"!==c.padInfo.type)if(c.strideWidth<=2&&"channelsLast"===h&&ut().getBool("WEBGL_EXP_CONV")){let e=new NV(c),n=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];t=r.runWebGLProgram(e,[s,i],"float32",n)}else if(ut().getBool("WEBGL_CONV_IM2COL"))t=EV({x:s,filter:i,convInfo:c,backend:r});else{let e=new IV(c);t=r.runWebGLProgram(e,[s,i],"float32")}else t=CV({x:s,filter:i,convInfo:c,backend:r});let f=WB({inputs:{x:t},backend:r,attrs:{shape:c.outShape}});return r.disposeIntermediateTensorInfo(t),f}},AV=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s="channelsLast"===e.dataFormat;this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int d2 = coords.w;\n\n        // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int b = 0; b < ${e.batchSize}; b++) {\n          for (int yR = 0; yR < ${e.outHeight}; yR++) {\n            int xR = wR + yR * ${t} - ${r};\n\n            if (xR < 0 || xR >= ${e.inHeight}) {\n              continue;\n            }\n\n            for (int yC = 0; yC < ${e.outWidth}; yC++) {\n              int xC = wC + yC * ${n} - ${a};\n\n              if (xC < 0 || xC >= ${e.inWidth}) {\n                continue;\n              }\n\n              ${s?"float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);":"float dyValue = getDy(b, d2, yR, yC);\n              float xValue = getX(b, d1, xR, xC);\n              dotProd += (xValue * dyValue);"}\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},RV=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s="channelsLast"===e.dataFormat,i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,u=s?2:3,d=s?3:1;this.userCode=`\n      const ivec2 pads = ivec2(${i}, ${o});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[${d}];\n\n        ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${t}; wR++) {\n          float dyR = float(dyRCorner + wR) / ${r}.0;\n\n          if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = ${t} - 1 - wR;\n\n          for (int wC = 0; wC < ${n}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${a}.0;\n\n            if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = ${n} - 1 - wC;\n\n            for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n\n              if (${s}) {\n                float xValue = getDy(batch, idyR, idyC, d2);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              } else {\n                float xValue = getDy(batch, d2, idyR, idyC);\n                float wValue = getW(wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},FV=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=`\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int wF = coords.x;\n        int wR = coords.y;\n        int wC = coords.z;\n        int d1 = coords.w;\n        int d2 = coords.u;\n\n        float dotProd = 0.0;\n\n        for (int b = 0; b < ${e.batchSize}; b++) {\n          for (int yF = 0; yF < ${e.outDepth};
2 yF++) {\n            int xF = wF + yF * ${t} - ${a};\n\n            if (xF < 0 || xF >= ${e.inDepth}) {\n              continue;\n            }\n\n            for (int yR = 0; yR < ${e.outHeight}; yR++) {\n              int xR = wR + yR * ${n} - ${s};\n\n              if (xR < 0 || xR >= ${e.inHeight}) {\n                continue;\n              }\n\n              for (int yC = 0; yC < ${e.outWidth}; yC++) {\n                int xC = wC + yC * ${r} - ${i};\n\n                if (xC < 0 || xC >= ${e.inWidth}) {\n                  continue;\n                }\n\n                float dyValue = getDy(b, yF, yR, yC, d2);\n                float xValue = getX(b, xF, xR, xC, d1);\n                dotProd += (xValue * dyValue);\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},DV=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,a=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=r-1-e.padInfo.left;this.userCode=`\n      const ivec3 pads = ivec3(${o}, ${l}, ${u});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.u;\n\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyFCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        float dotProd = 0.0;\n        for (int wF = 0; wF < ${t}; wF++) {\n          float dyF = float(dyFCorner + wF) / ${a}.0;\n\n          if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {\n            continue;\n          }\n          int idyF = int(dyF);\n\n          int wFPerm = ${t} - 1 - wF;\n\n          for (int wR = 0; wR < ${n}; wR++) {\n            float dyR = float(dyRCorner + wR) / ${s}.0;\n\n            if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n              fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            int wRPerm = ${n} - 1 - wR;\n\n            for (int wC = 0; wC < ${r}; wC++) {\n              float dyC = float(dyCCorner + wC) / ${i}.0;\n\n              if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              int wCPerm = ${r} - 1 - wC;\n\n              for (int d2 = 0; d2 < ${e.outChannels}; d2++) {\n                float xValue = getDy(batch, idyF, idyR, idyC, d2);\n                float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);\n                dotProd += xValue * wValue;\n              }\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}};var MV={kernelName:Ht,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:d}=r,p=Im.convertConv2DDataFormat(l),h=Im.computeConv2DInfo(a.shape,d,i,1,o,u,!1,p),c=new AV(h);return n.runWebGLProgram(c,[a,s],"float32")}},OV=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=cz(this.outputShape.length);let t=e.filterHeight,n=e.filterWidth,r=t-1-e.padInfo.top,a=n-1-e.padInfo.left;this.userCode=`\n      const ivec2 pads = ivec2(${r}, ${a});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n\n        ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        vec4 result = vec4(0.);\n        for (int wR = 0; wR < ${t}; wR++) {\n          float dyR = float(dyRCorner + wR) / strides[0];\n          if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n          int wRPerm = ${t} - 1 - wR;\n\n          for (int wC = 0; wC < ${n}; wC++) {\n            int wCPerm = ${n} - 1 - wC;\n\n            float dyC = float(dyCCorner + wC) / strides[1];\n            bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0)\n              && (fract(dyC) == 0.0);\n            int idyC = int(dyC);\n\n            float dyC2 = float(dyCCorner + wC + 1) / strides[1];\n            bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0)\n              && (fract(dyC2) == 0.0);\n            int idyC2 = int(dyC2);\n\n            if (idyCVal && idyCVal2) {\n              for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n                vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n                vec4 dySample = getDy(batch, idyR, idyC, d2);\n                vec4 dySample2 = (idyC / 2 == idyC2 / 2) ?\n                  dySample : getDy(batch, idyR, idyC2, d2);\n\n                vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n                  dySample.xy : dySample.zw;\n                result.xy += vec2(dot(dyValue, wValue.xy),\n                  dot(dyValue, wValue.zw));\n\n                dyValue = mod(float(idyC2), 2.) == 0. ?\n                  dySample2.xy : dySample2.zw;\n                result.zw += vec2(dot(dyValue, wValue.xy),\n                  dot(dyValue, wValue.zw));\n              }\n            } else if (idyCVal) {\n              for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n                vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n                vec4 dySample = getDy(batch, idyR, idyC, d2);\n                vec2 dyValue = mod(float(idyC), 2.) == 0. ?\n                  dySample.xy : dySample.zw;\n                result.xy += vec2(dot(dyValue, wValue.xy),\n                  dot(dyValue, wValue.zw));\n              }\n            } else if (idyCVal2) {\n              for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) {\n                vec4 wValue = getW(wRPerm, wCPerm, d1, d2);\n                vec4 dySample = getDy(batch, idyR, idyC2, d2);\n                vec2 dyValue = mod(float(idyC2), 2.) == 0. ?\n                  dySample.xy : dySample.zw;\n                result.zw += vec2(dot(dyValue, wValue.xy),\n                  dot(dyValue, wValue.zw));\n              }\n            }\n          }\n        }\n        setOutput(result);\n      }\n    `}};var LV={kernelName:jt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:d}
2=r,p=Im.convertConv2DDataFormat(u),h=Im.computeConv2DInfo(i,s.shape,o,1,l,d,!1,p);if(ut().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&"channelsLast"===p){let e=[[h.strideHeight,h.strideWidth]],t=new OV(h);return n.runWebGLProgram(t,[a,s],"float32",e)}{let e=new RV(h);return n.runWebGLProgram(e,[a,s],"float32")}}};var zV={kernelName:qt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r,u=Im.computeConv3DInfo(a.shape,s.shape,i,l,o),d=new SV(u);return n.runWebGLProgram(d,[a,s],"float32")}};var PV={kernelName:Kt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r,u=Im.computeConv3DInfo(a.shape,l,i,1,o),d=new FV(u);return n.runWebGLProgram(d,[a,s],"float32")}};var BV,WV={kernelName:Xt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r,u=Im.computeConv3DInfo(l,s.shape,o,1,i),d=new DV(u);return n.runWebGLProgram(d,[a,s],"float32")}}
2,VV=RB({opSnippet:AB+"\n  return cos(x);\n",packedOpSnippet:`\n  vec4 result = cos(x);\n  bvec4 isNaN = isnan(x);\n  ${xB}\n  return result;\n`}),UV={kernelName:Yt,backendName:"webgl",kernelFunc:VV},GV=RB({opSnippet:"\n  float e2x = exp(-x);\n  return (e2x + 1.0 / e2x) / 2.0;\n"}),HV={kernelName:Zt,backendName:"webgl",kernelFunc:GV},jV=class{constructor(e,t,n,r,a){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[d,p]=n;this.outputShape=[u,d,p,l];let h="bilinear"===r?1:0,[c,f]=[i-1+".0",o-1+".0"],[m,g,y]=d>1?[""+(i-1)/(d-1),"(y2-y1) * height_ratio",`y1*${c} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${c}`],[b,x,w]=p>1?[""+(o-1)/(p-1),"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=`\n      const float height_ratio = float(${m});\n      const float width_ratio = float(${b});\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int y = coords[1];\n        int x = coords[2];\n        int d = coords[3];\n\n        // get box vals\n        float y1 = getBoxes(b,0);\n        float x1 = getBoxes(b,1);\n        float y2 = getBoxes(b,2);\n        float x2 = getBoxes(b,3);\n\n        // get image in batch index\n        int bInd = round(getBoxInd(b));\n        if(bInd < 0 || bInd >= ${s}) {\n          return;\n        }\n\n        float height_scale = ${g};\n        float width_scale = ${x};\n\n        float in_y = ${y};\n        if( in_y < 0.0 || in_y > ${c} ) {\n          setOutput(float(${a}));\n          return;\n        }\n        float in_x = ${w};\n        if( in_x < 0.0 || in_x > ${f} ) {\n          setOutput(float(${a}));\n          return;\n        }\n\n        vec2 sourceFracIndexCR = vec2(in_x,in_y);\n        if(${h} == 1) {\n          // Compute the four integer indices.\n          ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);\n          ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));\n\n          float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);\n          float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);\n          float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);\n          float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);\n\n          vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);\n\n          float top = topLeft + (topRight - topLeft) * fracCR.x;\n          float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;\n          float newValue = top + (bottom - top) * fracCR.y;\n          setOutput(newValue);\n        } else {\n          // Compute the coordinators of nearest neighbor point.\n          ivec2 sourceNearestCR = ivec2(floor(\n            sourceFracIndexCR + vec2(0.5,0.5)));\n          float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);\n          setOutput(newValue);\n        }\n      }\n    `}},qV={kernelName:en,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{image:a,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=r,d=new jV(a.shape,s.shape,o,l,u);return n.runWebGLProgram(d,[a,s,i],"float32")}};!function(e){e.Prod="*",e.Sum="+"}(BV||(BV={}));var KV=class{constructor(e,t,n,r){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let a=this.outputShape.length,s=this.op===BV.Prod?"1.0":"0.0",i=n?s:`getX(${XV(a,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";n?(l=r?"end != "+(o-1):"end != 0",u=r?"end + 1":"end - 1"):(l=r?`end + pow2 < ${o}`:"end >= pow2",u=r?"end + pow2":"end - pow2"),this.userCode=`\n      void main() {\n        ${oz(a)} coords = getOutputCoords();\n        int end = ${YV(a,"coords",this.op)};\n        float val = ${i};\n        int pow2 = int(pow(2.0, index));\n        if (${l}) {\n          int idx = ${u};\n          ${YV(a,"coords",this.op)} = idx;\n          val ${this.op}= getX(${XV(a,"coords",this.op)});\n        }\n        setOutput(val);\n      }\n    `}};function XV(e,t,n){if(1===e)return`${t}`;if(2===e)return`${t}.x, ${t}.y`;if(3===e)return`${t}.x, ${t}.y, ${t}.z`;if(4===e)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${n} for rank ${e} is not yet supported`)}function YV(e,t,n){if(1===e)return`${t}`;if(2===e)return`${t}.y`;if(3===e)return`${t}.z`;if(4===e)return`${t}.w`;throw new Error(`Cumulative ${n} for rank ${e} is not yet supported`)}function ZV(e,t,n,r,a,s){let i=t.shape.length,o=Im.getAxesPermutation([r],i),l=t;null!=o&&(l=ZB({inputs:{x:t},backend:n,attrs:{perm:o}}));let u=Im.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${r}`);
2let d=l.shape[u],p=vB({inputs:{x:l},backend:n});for(let t=0;t<=Math.ceil(Math.log2(d))-1;t++){let r=new KV(e,l.shape,!1,s),a=[[t]],i=p;p=n.runWebGLProgram(r,[p],p.dtype,a),n.disposeIntermediateTensorInfo(i)}if(a){let t=new KV(e,l.shape,a,s),r=p;p=n.runWebGLProgram(t,[p],p.dtype),n.disposeIntermediateTensorInfo(r)}if(null!=o){let e=ZB({inputs:{x:p},backend:n,attrs:{perm:Im.getUndoAxesPermutation(o)}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(l),e}return p}var JV={kernelName:Jt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;return ZV(BV.Prod,a,n,s,i,o)}};var QV={kernelName:Qt,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r;return ZV(BV.Sum,a,n,s,i,o)}};var eU={kernelName:tn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,weights:s}=t,{size:i,binaryOutput:o}=r;if(1===a.shape.length){let e=n.readSync(a.dataId),t=n.readSync(s.dataId),r=jz(e,t,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,r)}if(2===a.shape.length){let e=n.bufferSync(a),t=n.bufferSync(s),r=qz(e,t,i,o);return n.makeTensorInfo(r.shape,s.dtype,r.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${a.shape.length}.`)}},tU=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,this.userCode=`\n    void main() {\n      ivec4 coords = getOutputCoords();\n      int b = coords[0];\n      int h = ${this.getHeightCoordString()};\n      int w = ${this.getWidthCoordString()};\n      int d = ${this.getDepthCoordString()};\n\n      int in_h = h / ${t};\n      int offset_h = imod(h, ${t});\n      int in_w = w / ${t};\n      int offset_w = imod(w, ${t});\n      int offset_d = (offset_h * ${t} + offset_w) *\n        ${this.getOutputDepthSize()};\n      int in_d = d + offset_d;\n\n      float result = ${this.getInputSamplingString()};\n      setOutput(result);\n    }\n  `}
2getHeightCoordString(){return"NHWC"===this.dataFormat?"coords[1]":"coords[2]"}getWidthCoordString(){return"NHWC"===this.dataFormat?"coords[2]":"coords[3]"}getDepthCoordString(){return"NHWC"===this.dataFormat?"coords[3]":"coords[1]"}getOutputDepthSize(){return"NHWC"===this.dataFormat?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return"NHWC"===this.dataFormat?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};var nU={kernelName:nn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockSize:s,dataFormat:i}=r,o=a.shape[0],l=("NHWC"===i?a.shape[1]:a.shape[2])*s,u=("NHWC"===i?a.shape[2]:a.shape[3])*s,d=("NHWC"===i?a.shape[3]:a.shape[1])/(s*s),p=new tU("NHWC"===i?[o,l,u,d]:[o,d,l,u],s,i);return n.runWebGLProgram(p,[a],a.dtype)}},rU=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=cz(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";n&&(l=r?`float activation(float a) {\n          float b = getPreluActivationWeightsAtOutCoords();\n          ${n}\n        }`:a?`float activation(float a) {\n          float b = getLeakyreluAlphaAtOutCoords();\n          ${n}\n        }`:`\n          float activation(float x) {\n            ${n}\n          }\n        `,u="result = activation(result);");let d=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n      ${l}\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / ${o};\n        int q = d2 - d1 * ${o};\n\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.\n        for (int wR = 0; wR < ${s}; wR++) {\n          int xR = xRCorner + wR * dilations[0];\n\n          if (xR < 0 || xR >= inDims[0]) {\n            continue;\n          }\n\n          for (int wC = 0; wC < ${i}; wC++) {\n            int xC = xCCorner + wC * dilations[1];\n\n            if (xC < 0 || xC >= inDims[1]) {\n              continue;\n            }\n\n            float xVal = getX(batch, xR, xC, d1);\n            float wVal = getW(wR, wC, d1, q);\n            dotProd += xVal * wVal;\n          }\n        }\n\n        float result = dotProd;\n        ${d}\n        ${u}\n        setOutput(result);\n      }\n    `}},aU=class{constructor(e,t=!1,n=null,r=!1,a=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=cz(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,d=e.filterWidth,p=d,h="\n      int xR; int xC; int xCOffset;\n      vec4 wTexel; vec4 previous; vec4 final;";for(let e=0;e<d;e++)h+=`\n          vec4 xTexelC${2*e};\n          int xTexelC${2*e}Ready;\n          vec4 xTexelC${2*e+1};\n          int xTexelC${2*e+1}Ready;\n          vec4 xC${e};`;h+=`\n    for (int r = 0; r < ${u}; r++) {\n      `;for(let e=0;e<d;e++)h+=`\n          xTexelC${2*e} = vec4(0.0);\n          xTexelC${2*e}Ready = 0;\n          xTexelC${2*e+1} = vec4(0.0);\n          xTexelC${2*e+1}Ready = 0;\n          xC${e} = vec4(0.0);`;h+="\n        xR = xRCorner + r * dilations[0];\n        if (xR >=0 && xR < inDims[0]) {\n      ";for(let e=0;e<(p+1)/2;e++){let t=2*e;if(h+=`\n          xC = xCCorner + ${t*l};\n          `,1===o){if(t<d&&(i%2==1?(h+=`\n                xCOffset = xC + 1;\n                if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${t}Ready == 0) {\n                  xTexelC${t} = getX(batch, xR, xCOffset, d1);\n\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC${t}.zw = vec2(0.0);\n                  }\n                  xTexelC${t}Ready = 1;\n                }\n              `,h+=1===l&&t>0?`\n                xC${t} = vec4(xTexelC${t-2}.zw, xTexelC${t}.xy);\n                `:`\n                  xCOffset = xC + 1 - 2;\n\n                  if (xCOffset >= 0 && xCOffset < inDims[1]) {\n                    previous = getX(batch, xR, xCOffset, d1);\n\n                    // Need to manually clear unused channels in case\n                    // we're reading from recycled texture.\n                    if (xCOffset + 1 >= inDims[1]) {\n                      previous.zw = vec2(0.0);\n                    }\n\n                    xC${t} = vec4(previous.zw, xTexelC${t}.xy);\n                  } else {\n                    xC${t} = vec4(0.0, 0.0, xTexelC${t}.xy);\n                  }\n                  `):h+=`\n                if (xC >= 0 && xC < inDims[1] && xTexelC${t}Ready == 0) {\n                  xTexelC${t} = getX(batch, xR, xC, d1);\n                  if (xC + 1 >= inDims[1]) {\n                    xTexelC${t}.zw = vec2(0.0);\n                  }\n                  xTexelC${t}Ready = 1;\n                }\n\n                xC${t} = xTexelC${t};\n                `,t+1<d)){let e=i%2==0?ja.nearestLargerEven(l):l;l%2==0&&i%2==1||l%2!=0&&i%2!=1?(h+=`\n                  xCOffset = xC + imod(pads[1], 2) + ${e};\n\n                  if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${t+1}Ready == 0) {\n                    xTexelC${t+1} = getX(batch, xR, xCOffset, d1);\n\n                    // Need to manually clear unused channels in case\n                    // we're reading from recycled texture.\n                    if (xCOffset + 1 >= inDims[1]) {\n                      xTexelC${t+1}.zw = vec2(0.0);\n                    }\n                    xTexelC${t+1}Ready = 1;\n                  }\n                  `,h+=l>1?`\n                    xCOffset -= 2;\n                    if (xCOffset >= 0 && xCOffset < inDims[1]) {\n                     previous = getX(batch, xR, xCOffset, d1);\n                     xC${t+1} = vec4(previous.zw, xTexelC${t+1}.xy);\n                    } else {\n                     xC${t+1} = vec4(0.0, 0.0, xTexelC${t+1}.xy);\n                    }\n                    `:`\n                    xC${t+1} = vec4(xTexelC${t}.zw, xTexelC${t+1}.xy);
2\n                    `):h+=1===e?`\n                    xC${t+1} = xTexelC${t};\n                    `:`\n                    xCOffset = xC + ${e};\n\n                    if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${t+1}Ready == 0) {\n                      xTexelC${t+1} = getX(batch, xR, xCOffset, d1);\n                      if (xCOffset + 1 >= inDims[1]) {\n                        xTexelC${t+1}.zw = vec2(0.0);\n                      }\n                      xTexelC${t+1}Ready = 1;\n                    }\n\n                    xC${t+1} = xTexelC${t+1};\n                    `}}else t<d&&(i%2==1?(h+=`\n                xCOffset = xC + 1 - strides[1];\n                if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${t}Ready == 0) {\n                  xTexelC${t} = getX(batch, xR, xCOffset, d1);\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC${t}.zw = vec2(0.0);\n                  }\n                  xTexelC${t}Ready = 1;\n                }\n\n                if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${t+1}Ready == 0) {\n                  xTexelC${t+1} = getX(batch, xR, xC + 1, d1);\n                  // Need to manually clear unused channels in case\n                  // we're reading from recycled texture.\n                  if (xC + 2 >= inDims[1]) {\n                    xTexelC${t+1}.zw = vec2(0.0);\n                  }\n                  xTexelC${t+1}Ready = 1;\n                }\n\n                xC${t} = vec4(xTexelC${t}.zw, xTexelC${t+1}.zw);\n              `,t+1<d&&(h+=`\n                  final = vec4(0.0);\n                  xCOffset = xC + 1 + strides[1];\n                  if(xCOffset >= 0 && xCOffset < inDims[1]) {\n                    final = getX(batch, xR, xCOffset, d1);\n                  }\n                  xC${t+1} = vec4(xTexelC${t+1}.xy, final.xy);\n                `)):(h+=`\n                if(xC >= 0 && xC < inDims[1] && xTexelC${t}Ready == 0) {\n                  xTexelC${t} = getX(batch, xR, xC, d1);\n                  if (xC + 1 >= inDims[1]) {\n                    xTexelC${t}.zw = vec2(0.0);\n                  }\n                  xTexelC${t}Ready = 1;\n                }\n\n                xCOffset = xC + strides[1];\n                if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${t+1}Ready == 0) {\n                  xTexelC${t+1} = getX(batch, xR, xCOffset, d1);\n                  if (xCOffset + 1 >= inDims[1]) {\n                    xTexelC${t+1}.zw = vec2(0.);\n                  }\n                  xTexelC${t+1}Ready = 1;\n                }\n\n                xC${t} = vec4(\n                  xTexelC${t}.xy, xTexelC${t+1}.xy);\n              `,t+1<d&&(h+=`\n                  xC${t+1} = vec4(xTexelC${t}.zw, xTexelC${t+1}.zw);\n                `)));t<d&&(h+=`\n            wTexel = getW(r, ${t}, d1, q);\n            dotProd += xC${t} * vec4(wTexel.xz, wTexel.xz);\n          `,t+1<d&&(h+=`\n              wTexel = getW(r, ${t+1}, d1, q);\n              dotProd += xC${t+1} * vec4(wTexel.xz, wTexel.xz);\n            `))}h+="\n    }\n  ",h+="\n      }\n    ";let c="",f="";n&&(c=r?`vec4 activation(vec4 a) {\n          vec4 b = getPreluActivationWeightsAtOutCoords();\n          ${n}\n        }`:a?`vec4 activation(vec4 a) {\n          vec4 b = getLeakyreluAlphaAtOutCoords();\n          ${n}\n        }`:`vec4 activation(vec4 x) {\n          ${n}\n        }`,f="result = activation(result);");let m=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),a&&this.variableNames.push("leakyreluAlpha"),this.userCode=`\n      ${c}\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        ivec2 xRCCorner = coords.yz * strides - pads;\n        int d2 = coords.w;\n        int d1 = d2 / ${s};\n        int q = d2 - d1 * ${s};\n        int xRCorner = xRCCorner.x;\n        int xCCorner = xRCCorner.y;\n\n        //intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.\n        vec4 dotProd = vec4(0.000000000000001);\n\n        ${h}\n\n        vec4 result = dotProd - vec4(0.000000000000001);\n        ${m}\n        ${f}\n        setOutput(result);\n      }\n    `}};var sU={kernelName:rn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=r,d=l;null==d&&(d=[1,1]),ja.assert(Im.eitherStridesOrDilationsAreOne(i,d),(()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${d}'`));let p,h=Im.computeConv2DInfo(a.shape,s.shape,i,d,o,u,!0);p=ut().getBool("WEBGL_PACK_DEPTHWISECONV")&&h.strideWidth<=2&&h.outChannels/h.inChannels==1?new aU(h):new rU(h);let c=[[h.padInfo.top,h.padInfo.left],[h.strideHeight,h.strideWidth],[h.dilationHeight,h.dilationWidth],[h.inHeight,h.inWidth
2]];return n.runWebGLProgram(p,[a,s],"float32",c)}},iU=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,a=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int wR = coords.x;\n        int wC = coords.y;\n        int d1 = coords.z;\n        int dm = coords.w;\n        int d2 = d1 * ${s} + dm;\n\n        float dotProd = 0.0;\n\n        // TO DO: Vec4 over the batch size\n        for (int b = 0; b < ${e.batchSize}; b++) {\n          for (int yR = 0; yR < ${e.outHeight}; yR++) {\n            int xR = wR + yR * ${t} - ${r};\n\n            if (xR < 0 || xR >= ${e.inHeight}) {\n              continue;\n            }\n\n            for (int yC = 0; yC < ${e.outWidth}; yC++) {\n              int xC = wC + yC * ${n} - ${a};\n\n              if (xC < 0 || xC >= ${e.inWidth}) {\n                continue;\n              }\n\n              float dyValue = getDy(b, yR, yC, d2);\n              float xValue = getX(b, xR, xC, d1);\n              dotProd += (xValue * dyValue);\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},oU=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,a=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`\n      const ivec2 pads = ivec2(${s}, ${i});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords[0];\n        int d1 = coords[3];\n        ivec2 dyCorner = coords.yz - pads;\n        int dyRCorner = dyCorner.x;\n        int dyCCorner = dyCorner.y;\n\n        float dotProd = 0.0;\n\n        for (int wR = 0; wR < ${t}; wR++) {\n          float dyR = float(dyRCorner + wR) / ${r}.0;\n\n          if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          int wRPerm = ${t} - 1 - wR;\n\n          for (int wC = 0; wC < ${n}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${a}.0;\n\n            if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            int wCPerm = ${n} - 1 - wC;\n\n            // TO DO: Vec4 over the channelMul\n            for (int dm = 0; dm < ${o}; dm++) {\n              int d2 = d1 * ${o} + dm;\n              float xValue = getDy(batch, idyR, idyC, d2);\n              float wValue = getW(wRPerm, wCPerm, d1, dm);\n              dotProd += xValue * wValue;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}};var lU={kernelName:an,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:d}=r,p=Im.computeConv2DInfo(a.shape,d,i,o,l,u,!0),h=new iU(p);return n.runWebGLProgram(h,[a,s],"float32")}};var uU={kernelName:sn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:d}=r,p=Im.computeConv2DInfo(d,s.shape,i,o,l,u,!0),h=new oU(p);return n.runWebGLProgram(h,[a,s],"float32")}},dU=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode="\n      void main() {\n          ivec2 coords = getOutputCoords();\n          float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;\n          setOutput(val);\n      }\n    "}};var pU={kernelName:on,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r}=t,a=[...r.shape,...r.shape],s=ja.sizeFromShape(r.shape),i=WB({inputs:{x:r},backend:n,attrs:{shape:[s]}}),o=new dU(s),l=n.runWebGLProgram(o,[i],i.dtype),u=WB({inputs:{x:l},backend:n,attrs:{shape:a}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}},hU=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:a,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:d,left:p}=r;this.userCode=`\n      const ivec2 strides = ivec2(${a}, ${s});\n      const ivec2 pads = ivec2(${d}, ${p});\n      const float neg_infinity = -3.4e38;\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int batch = coords.x;\n        int d1 = coords.w;\n        ivec2 outTopLeftCorner =\n            coords.yz * strides - pads;\n        int hBeg = outTopLeftCorner.x;\n        int wBeg = outTopLeftCorner.y;\n\n        float curVal = neg_infinity;\n        for (int h = 0; h < ${i}; h++) {\n          int hIn = hBeg + h * ${l};\n\n          if (hIn >= 0 && hIn < ${t}
2) {\n            for (int w = 0; w < ${o}; w++) {\n              int wIn = wBeg + w * ${u};\n\n              if (wIn >= 0 && wIn < ${n}) {\n                float xVal = getX(batch, hIn, wIn, d1);\n                float wVal = getW(h, w, d1);\n\n                float val = xVal + wVal;\n                if (val > curVal) {\n                  curVal = val;\n                }\n              }\n            }\n          }\n        }\n\n        float result = curVal;\n        setOutput(result);\n      }\n    `}};var cU={kernelName:ln,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s,filter:i}=n,{strides:o,pad:l,dilations:u}=a,d=Im.computeDilation2DInfo(s.shape,i.shape,o,l,"NHWC",u),p=new hU(d);t=r.runWebGLProgram(p,[s,i],"float32");let h=WB({inputs:{x:t},backend:r,attrs:{shape:d.outShape}});return r.disposeIntermediateTensorInfo(t),h}};var fU={kernelName:cn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{equation:a}=r,s=t,{allDims:i,summedDims:o,idDims:l}=Im.decodeEinsumEquation(a,s.length);Im.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:d}=Im.getEinsumComputePath(o,l),p=d.length,h=null,c=i.length,f=[];for(let e=0;e<p;++e){for(let t of d[e]){let e,{permutationIndices:r,expandDims:a}=Im.getEinsumPermutation(c,l[t]);Im.isIdentityPermutation(r)?e=s[t]:(e=ZB({inputs:{x:s[t]},backend:n,attrs:{perm:r}}),f.push(e));let i=e.shape.slice();for(let e=0;e<a.length;++e)i.splice(a[e],0,1);ja.arraysEqual(e.shape,i)||(e=WB({inputs:{x:e},backend:n,attrs:{shape:i}}),f.push(e)),null===h?h=e:(h=PB({inputs:{a:e,b:h},backend:n}),f.push(h))}e<p-1&&(u[e]>=0&&(h=XB({inputs:{x:h},backend:n,attrs:{axis:u[e]-(i.length-c),keepDims:!1}}),f.push(h)),c--)}for(let e of f)e!==h&&n.disposeIntermediateTensorInfo(e);return h}},mU=RB({opSnippet:"return (x >= 0.0) ? x : (exp(x) - 1.0);",packedOpSnippet:"\n  vec4 result;\n\n  result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0);\n  result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0);\n  result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0);\n  result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0);\n\n  return result;\n"}),gU={kernelName:fn,backendName:"webgl",kernelFunc:mU},yU={kernelName:mn,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=ut().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new wB("\n  vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
2\n  return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));\n",r.shape,a.shape):new bB("return (b >= 0.0) ? a : a * (b + 1.0);",r.shape,a.shape);return n.runWebGLProgram(s,[r,a],r.dtype)}},bU=FB({opSnippet:"return float(a == b);",packedOpSnippet:"\n  return vec4(equal(a, b));\n",dtype:"bool",cpuKernelImpl:Jz}),xU={kernelName:yn,backendName:"webgl",kernelFunc:bU},wU=RB({opSnippet:`\n  // Error function is calculated approximately with elementary function.\n  // See "Handbook of Mathematical Functions with Formulas,\n  // Graphs, and Mathematical Tables", Abramowitz and Stegun.\n  float p = ${Im.ERF_P};\n  float a1 = ${Im.ERF_A1};\n  float a2 = ${Im.ERF_A2};\n  float a3 = ${Im.ERF_A3};\n  float a4 = ${Im.ERF_A4};\n  float a5 = ${Im.ERF_A5};\n\n  float sign = sign(x);\n  x = abs(x);\n  float t = 1.0 / (1.0 + p * x);\n  return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));\n`}),vU={kernelName:gn,backendName:"webgl",kernelFunc:wU},kU=RB({opSnippet:AB+"\n  return exp(x);\n",packedOpSnippet:"\n  vec4 result = exp(x);\n  bvec4 isNaN = isnan(x);\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n",cpuKernelImpl:Qz,dtype:"float32"}),IU={kernelName:bn,backendName:"webgl",kernelFunc:kU};function SU(e){let{inputs:t,attrs:n,backend:r}=e,{dim:a}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=a;return a<0&&(ja.assert(-(i+1)<=a,(()=>`Axis must be in the interval [${-(i+1)}, ${i}
2]`)),l=i+a+1),o.splice(l,0,1),WB({inputs:{x:s},backend:r,attrs:{shape:o}})}var NU={kernelName:xn,backendName:"webgl",kernelFunc:SU},TU="return exp(x) - 1.0;",_U=RB({opSnippet:TU,packedOpSnippet:TU,cpuKernelImpl:eP}),CU={kernelName:wn,backendName:"webgl",kernelFunc:_U},EU=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let a,s=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,i=n?`${r}.0`:"1.0";if("real"===e)a="return real * expR - imag * expI;";else{if("imag"!==e)throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);a="return real * expI + imag * expR;"}this.userCode=`\n      const float exponentMultiplier = ${s};\n\n      float unaryOpComplex(float real, float expR, float imag, float expI) {\n        ${a}\n      }\n\n      float mulMatDFT(int batch, int index) {\n        float indexRatio = float(index) / float(${r});\n        float exponentMultiplierTimesIndexRatio =\n            exponentMultiplier * indexRatio;\n\n        float result = 0.0;\n\n        for (int i = 0; i < ${r}; i++) {\n          // x = (-2|2 * PI / N) * index * i;\n          float x = exponentMultiplierTimesIndexRatio * float(i);\n          float expR = cos(x);\n          float expI = sin(x);\n          float real = getReal(batch, i);\n          float imag = getImag(batch, i);\n\n          result +=\n              unaryOpComplex(real, expR, imag, expI) / ${i};\n        }\n\n        return result;\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        setOutput(mulMatDFT(coords[0], coords[1]));\n      }\n    `}};function $U(e,t,n){let r=n.texData.get(e.dataId),a=ja.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=WB({inputs:{x:e},backend:n,attrs:{shape:[a/s,s]}}),o=i.shape,l=new EU("real",o,t),u=new EU("imag",o,t),d=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:o},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:o}],p=n.runWebGLProgram(l,d,"float32"),h=n.runWebGLProgram(u,d,"float32"),c=IB({inputs:{real:p,imag:h},backend:n});n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(h);let f=WB({inputs:{x:c},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(c),f}var AU={kernelName:vn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{input:r}=t;return $U(r,!1,n)}},RU=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode="\n      void main() {\n        // Input can be obtained from uniform value.\n        setOutput(value);\n      }\n    "}};function FU(e){let{backend:t,attrs:n}=e,{shape:r,value:a}=n,{dtype:s}=n;if(s=s||ja.inferDtype(a),"string"===s){let e=ja.getArrayFromDType(s,ja.sizeFromShape(r));return e.fill(a),t.makeTensorInfo(r,s,e)}{let e=new RU(r,a),n=[[a]];return t.runWebGLProgram(e,[],s,n)}}var DU,MU={kernelName:kn,backendName:"webgl",kernelFunc:FU},OU=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int x = coords[2];\n\n          int coordX = ${t} - x - 1;\n          float outputValue;\n          if(coordX >= 0 && coordX < ${t}
2) {\n            outputValue = getImage(coords[0], coords[1], coordX, coords[3]);\n          } else {\n            outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);\n          }\n          setOutput(outputValue);\n        }\n    `}},LU={kernelName:In,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,a=new OU(n.shape);return r.runWebGLProgram(a,[n],n.dtype)}},zU="return floor(x);",PU=RB({opSnippet:zU,packedOpSnippet:zU,cpuKernelImpl:tP}),BU={kernelName:Sn,backendName:"webgl",kernelFunc:PU},WU=FB({opSnippet:"\n  float s = sign(a) * sign(b);\n  int ia = round(a);\n  int ib = round(b);\n  if (ib != 0) {\n    // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n    return float(idiv(ia, ib, s));\n  } else {\n    return NAN;\n  }\n",packedOpSnippet:"\n  ivec4 ia = round(a);\n  ivec4 ib = round(b);\n  bvec4 cond = notEqual(ib, ivec4(0));\n  ivec4 result = ivec4(0);\n  vec4 s = sign(a) * sign(b);\n\n  // Windows (D3D) wants guaranteed non-zero int division at compile-time.\n  if (cond[0]) {\n    result[0] = idiv(ia[0], ib[0], s[0]);\n  }\n  if (cond[1]) {\n    result[1] = idiv(ia[1], ib[1], s[1]);\n  }\n  if (cond[2]) {\n    result[2] = idiv(ia[2], ib[2], s[2]);\n  }\n  if (cond[3]) {\n    result[3] = idiv(ia[3], ib[3], s[3]);\n  }\n  return vec4(result);\n",dtype:"int32"}),VU={kernelName:Nn,backendName:"webgl",kernelFunc:WU},UU=class{constructor(e){this.variableNames=["A"];let t=GL(),[n,r]=e;this.outputShape=e,this.userCode=`\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n        vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}.0, ${n}.0);\n\n        vec4 values = ${t.texture2D}(A, uv);\n        float value;\n        if (depth == 0) {\n          value = values.r;\n        } else if (depth == 1) {\n          value = values.g;\n        } else if (depth == 2) {\n          value = values.b;\n        } else if (depth == 3) {\n          value = values.a;\n        }\n\n        setOutput(floor(value * 255.0 + 0.5));\n      }\n    `}},GU=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=GL(),[n,r]=e;this.outputShape=e,this.userCode=`\n      void main() {\n        ivec3 coords = getOutputCoords();\n        int texR = coords[0];\n        int texC = coords[1];\n        int depth = coords[2];\n\n        vec4 result = vec4(0.);\n\n        for(int row=0; row<=1; row++) {\n          for(int col=0; col<=1; col++) {\n            texC = coords[1] + row;\n            depth = coords[2] + col;\n\n            vec2 uv = (vec2(texC, texR) + halfCR) /\n                       vec2(${r}.0, ${n}.0);\n            vec4 values = ${t.texture2D}(A, uv);\n            float value;\n            if (depth == 0) {\n              value = values.r;\n            } else if (depth == 1) {\n              value = values.g;\n            } else if (depth == 2) {\n              value = values.b;\n            } else if (depth == 3) {\n              value = values.a;\n            }\n\n            result[row * 2 + col] = floor(value * 255.0 + 0.5);\n          }\n        }\n\n        ${t.output} = result;\n      }\n    `}},HU={kernelName:Ca,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:a}=t,{numChannels:s}=r,i="undefined"!=typeof HTMLVideoElement&&a instanceof HTMLVideoElement,o="undefined"!=typeof HTMLImageElement&&a instanceof HTMLImageElement,[l,u]=i?[a.videoWidth,a.videoHeight]:[a.width,a.height],d=[u,l],p=[u,l,s];if(o||i){let e=ut().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(null==DU||e!==jU)&&(jU=e,DU=document.createElement("canvas").getContext("2d",{willReadFrequently:jU})),DU.canvas.width=l,DU.canvas.height=u,DU.drawImage(a,0,0,l,u),a=DU.canvas}let h=n.makeTensorInfo(d,"int32");n.texData.get(h.dataId).usage=MO.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(h.dataId),a);let c=ut().getBool("WEBGL_PACK")?new GU(p):new UU(p),f=n.runWebGLProgram(c,[h],"int32");return n.disposeData(h.dataId),f}},jU=ut().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");var qU={kernelName:Aa,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s,filter:i,bias:o,preluActivationWeights:l}=n,{strides:u,pad:d,dataFormat:p,dilations:h,dimRoundingMode:c,activation:f,leakyreluAlpha:m}
2=a,g=Im.convertConv2DDataFormat(p),y=Im.computeConv2DInfo(s.shape,i.shape,u,h,d,c,!1,g),b=[],x=null!=o,w=null!=l,v="leakyrelu"===f,k=()=>{let e=[s,i],t=(e,t)=>{if("NCHW"===t&&1===e.shape.length&&1!==e.shape[0]){let t=WB({inputs:{x:e},backend:r,attrs:{shape:[e.shape[0],1,1]}});return b.push(t),t}return e};if(x&&e.push(t(o,p)),w&&e.push(t(l,p)),v){let t=r.makeTensorInfo([],"float32",ja.createScalarValue(m,"float32"));e.push(t),b.push(t)}return e};if(1!==y.filterHeight||1!==y.filterWidth||1!==y.dilationHeight||1!==y.dilationWidth||1!==y.strideHeight||1!==y.strideWidth||"SAME"!==y.padInfo.type&&"VALID"!==y.padInfo.type)if(y.strideWidth<=2&&"channelsLast"===g&&ut().getBool("WEBGL_EXP_CONV")){let e=f?DB(f,!0):null,n=new NV(y,x,e,w,v),a=[[y.padInfo.top,y.padInfo.left],[y.strideHeight,y.strideWidth],[y.dilationHeight,y.dilationWidth],[y.inHeight,y.inWidth]],s=k();t=r.runWebGLProgram(n,s,"float32",a)}else if(ut().getBool("WEBGL_CONV_IM2COL"))t=EV({x:s,filter:i,convInfo:y,backend:r,bias:o,activation:f,preluActivationWeights:l,leakyreluAlpha:m});else{let e=f?DB(f,!1):null,n=new IV(y,x,e,w,v),a=k();t=r.runWebGLProgram(n,a,"float32")}else t=CV({x:s,filter:i,convInfo:y,backend:r,bias:o,activation:f,preluActivationWeights:l,leakyreluAlpha:m});let I=WB({inputs:{x:t},backend:r,attrs:{shape:y.outShape}});return b.push(t),b.forEach((e=>r.disposeIntermediateTensorInfo(e))),I}};var KU={kernelName:Ra,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dimRoundingMode:p,activation:h,leakyreluAlpha:c}=r,f=[],m=d;null==m&&(m=[1,1]),ja.assert(Im.eitherStridesOrDilationsAreOne(l,m),(()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${m}'`));let g,y=Im.computeConv2DInfo(a.shape,s.shape,l,m,u,p,!0),b=ut().getBool("WEBGL_PACK_DEPTHWISECONV")&&y.strideWidth<=2&&y.outChannels/y.inChannels==1,x=h?DB(h,b):null,w=[a,s],v=null!=i,k=null!=o,I="leakyrelu"===h;if(v&&w.push(i),k&&w.push(o),I){let e=n.makeTensorInfo([],"float32",ja.createScalarValue(c,"float32"));w.push(e),f.push(e)}g=b?new aU(y,v,x,k,I):new rU(y,v,x,k,I);let S=[[y.padInfo.top,y.padInfo.left],[y.strideHeight,y.strideWidth],[y.dilationHeight,y.dilationWidth],[y.inHeight,y.inWidth]],N=n.runWebGLProgram(g,w,"float32",S);return f.forEach((e=>n.disposeIntermediateTensorInfo(e))),N}},XU=class{constructor(e,t,n,r){this.sliceDim=e,this.strides=t,this.paramsShape=r,this.variableNames=["x","indices"],this.outputShape=n;let a=oz(n.length),s="\n    int index;";for(let e=0;e<this.sliceDim;e++)s+=`\n          index = round(getIndices(coords[0], ${e}));\n          out_of_bounds = out_of_bounds || index < 0;\n          out_of_bounds = out_of_bounds || index >= ${this.paramsShape[e]};\n          flattenIndex += index * ${this.strides[e]};`;this.userCode=`\n         void main() {\n          ${a} coords = getOutputCoords();\n          int flattenIndex = 0;\n          bool out_of_bounds = false;\n\n          ${s}\n\n          setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));\n        }\n      `}};var YU={kernelName:Cn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{params:r,indices:a}=t,s=a.shape,i=s[s.length-1],o=ja.sizeFromShape(r.shape),[l,u,d,p]=Im.prepareAndValidate(r,a),h=WB({inputs:{x:a},backend:n,attrs:{shape:[u,i]}}),c=WB({inputs:{x:r},backend:n,attrs:{shape:[ja.sizeFromShape(r.shape)/d,d]}});if(n.shouldExecuteOnCPU([r,a])||"string"===r.dtype){let e=n.readSync(a.dataId),t=n.bufferSync(r),s=nP(e,t,r.dtype,u,i,d,p,r.shape,o);return n.makeTensorInfo(l,r.dtype,s.values)}let f=new XU(i,p,[u,d],r.shape),m=n.runWebGLProgram(f,[c,h],c.dtype),g=WB({inputs:{x:m},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(m),g}},ZU=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=oz(this.rank),r=function(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let t=0;t<e.length;t++)2===t?r.push("index"):r.push(`${n[t]}`);return r.join()}(e);this.userCode=`\n      void main() {\n        ${n} resRC = getOutputCoords();\n        int index = int(getIndices(resRC.x, resRC.z));\n        float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;\n        setOutput(inBounds * getA(${r}));\n      }\n    `}};function JU(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,indices:s}=t,{axis:i,batchDims:o}=r,l=ja.parseAxisParam(i,a.shape)[0];if(ut().get("DEBUG")){let e=n.readSync(s.dataId),t=a.shape[l];for(let n=0;n<e.length;++n){let r=e[n];ja.assert(r<=t-1&&r>=0,(()=>`GatherV2: the index value ${r} is not in [0, ${t-1}]`))}}let u=Im.segment_util.collectGatherOpShapeInfo(a,s,l,o),d=ja.sizeFromShape(s.shape),p=[],h=WB({input
2s:{x:a},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),c=WB({inputs:{x:s},backend:n,attrs:{shape:[u.batchSize,d/u.batchSize]}});p.push(h),p.push(c);let f=[u.batchSize,u.outerSize,d/u.batchSize,u.sliceSize];if(n.shouldExecuteOnCPU([a,s])||"string"===a.dtype){let e=n.bufferSync(c),t=n.bufferSync(h),r=rP(t,e,f);return p.forEach((e=>n.disposeIntermediateTensorInfo(e))),n.makeTensorInfo(u.outputShape,r.dtype,r.values)}let m=new ZU(h.shape,f),g=n.runWebGLProgram(m,[h,c],h.dtype);p.push(g);let y=WB({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return p.forEach((e=>n.disposeIntermediateTensorInfo(e))),y}var QU={kernelName:_n,backendName:"webgl",kernelFunc:JU},eG=FB({opSnippet:"return float(a > b);",packedOpSnippet:"\n  return vec4(greaterThan(a, b));\n",cpuKernelImpl:aP,dtype:"bool"}),tG={kernelName:En,backendName:"webgl",kernelFunc:eG},nG=FB({opSnippet:"return float(a >= b);",packedOpSnippet:"\n  return vec4(greaterThanEqual(a, b));\n",dtype:"bool",cpuKernelImpl:sP}),rG={kernelName:$n,backendName:"webgl",kernelFunc:nG};var aG={kernelName:Rn,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{input:r}=t;return $U(r,!0,n)}},sG=RB({opSnippet:"return float(!isnan(x) && !isinf(x));",dtype:"bool"}),iG={kernelName:Dn,backendName:"webgl",kernelFunc:sG},oG=RB({opSnippet:"return float(isinf(x));",dtype:"bool"}),lG={kernelName:Mn,backendName:"webgl",kernelFunc:oG},uG=RB({opSnippet:"return float(isnan(x));",dtype:"bool"}),dG={kernelName:On,backendName:"webgl",kernelFunc:uG},pG=FB({opSnippet:"return float(a < b);",packedOpSnippet:"\n  return vec4(lessThan(a, b));\n",cpuKernelImpl:iP,dtype:"bool"}),hG={kernelName:zn,backendName:"webgl",kernelFunc:pG},cG=FB({opSnippet:"return float(a <= b);",packedOpSnippet:"\n  return vec4(lessThanEqual(a, b));\n",cpuKernelImpl:oP,dtype:"bool"}),fG={kernelName:Pn,backendName:"webgl",kernelFunc:cG};var mG={kernelName:Bn,backendName:"webgl",kernelFunc:function(e){let{backend:t,attrs:n}=e,{start:r,stop:a,num:s}=n,i=lP(r,a,s);return t.makeTensorInfo([i.length],"float32",i)}},gG=RB({opSnippet:AB+"\n  return x < 0.0 ? 0./0. : log(x);\n",packedOpSnippet:"\n  vec4 result = log(x);\n  bvec4 isNaN = isnan(x);\n  result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);\n  result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);\n  result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);\n  result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);\n  return result;\n",cpuKernelImpl:uP}),yG={kernelName:Wn,backendName:"webgl",kernelFunc:gG},bG=RB({opSnippet:AB+"\n  return log(1.0 + x);\n"}),xG={kernelName:Vn,backendName:"webgl",kernelFunc:bG},wG=FB({opSnippet:"return float(a >= 1.0 && b >= 1.0);",packedOpSnippet:"\n  return vec4(\n    vec4(greaterThanEqual(a, vec4(1.0))) *\n    vec4(greaterThanEqual(b, vec4(1.0))));\n",dtype:"bool"}),vG={kernelName:Un,backendName:"webgl",kernelFunc:wG},kG=RB({opSnippet:"return float(!(x >= 1.0));"}),IG={kernelName:Gn,backendName:"webgl",kernelFunc:kG},SG=FB({opSnippet:"return float(a >= 1.0 || b >= 1.0);",packedOpSnippet:"\n  return min(\n    vec4(greaterThanEqual(a, vec4(1.0))) +\n    vec4(greaterThanEqual(b, vec4(1.0))),\n    vec4(1.0));\n",dtype:"bool"}),NG={kernelName:Hn,backendName:"webgl",kernelFunc:SG},TG=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;o=.5===a?`inversesqrt(${l})`:1===a?`1.0/(${l})`:`exp(log(${l}) * float(-${a}));`,this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n        int d = coords[3];\n        float x = getX(b, r, c, d);\n        float sum = 0.0;\n        for (int j = -${s}; j <= ${s}; j++) {\n          int idx = d + j;\n          if (idx >= 0 && idx <=  ${i}) {\n            float z = getX(b, r, c, idx);\n            sum += z * z;\n          }\n        }\n        float val = x * ${o};\n        setOutput(val);\n      }\n    `}},_G=class{constructor(e,t,n,r,a){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${r}) * sum`;o=.5===a?`inversesqrt(${l})`:1===a?`1.0/(${l})`:`exp(log(${l}) * float(-${a}));`,this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords.x;\n        int r = coords.y;\n        int c = coords.z;\n        int d = coords.w;\n\n        bool hasNextCol = d < ${this.outputShape[3]};\n        bool hasNextRow = c < ${this.outputShape[2]};\n\n        vec4 sum = vec4(0.);\n        vec4 xFragAtOutputCoords = getX(b, r, c, d);\n\n        vec4 xAtOutputCoords = vec4(\n          getChannel(xFragAtOutputCoords, vec2(c, d)),\n          hasNextCol ?\n            getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,\n          hasNextRow ?\n            getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0\n        );\n\n        int firstChannel = d - ${s};\n        vec2 cache = vec2(0.);\n        if(firstChannel >= 0){\n          vec4 firstChannelFrag = getX(b, r, c, firstChannel);\n          cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));\n            if(hasNextRow){\n              cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));\n            }\n        }
2\n\n        ivec2 depth = ivec2(d, d + 1);\n        for (int j = - ${s}; j <= ${s}; j++) {\n          ivec2 idx = depth + j;\n          bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));\n          bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));\n\n          bool depthInRange = aboveLowerBound.x && belowUpperBound.x;\n          bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;\n\n          if(depthInRange || depthPlusOneInRange){\n            vec4 z = vec4(0.);\n            vec4 xFragAtCurrentDepth;\n            z.xz = cache.xy;\n            if(depthPlusOneInRange && hasNextCol){\n              xFragAtCurrentDepth = idx.y != d ?\n                getX(b, r, c, idx.y) : xFragAtOutputCoords;\n              z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));\n              if(hasNextRow){\n                z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));\n              }\n            }\n            cache.xy = z.yw;\n            sum += z * z;\n          }\n        }\n        vec4 result = xAtOutputCoords * ${o};\n        setOutput(result);\n      }\n    `}},CG={kernelName:Xn,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r,u=ut().getBool("WEBGL_PACK_NORMALIZATION")?new _G(a.shape,s,i,o,l):new TG(a.shape,s,i,o,l);return n.runWebGLProgram(u,[a],a.dtype)}},EG=class{constructor(e,t,n,r,a){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=a,this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int r = coords[1];\n        int c = coords[2];\n\n        float result = 0.0;\n        for (int d = 0; d < ${this.depth}; ++d) {\n          int depthBegin = int(max(0.0, float(d - ${t})));\n          int depthEnd = int(min(float(${this.depth}),\n              float(d + ${t} + 1)));\n\n          const int MIN_DEPTH_BEGIN = 0;\n          const int MAX_DEPTH_END = ${this.depth};\n\n          float norm = 0.0;\n          for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd) {\n              norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);\n            }\n            else {\n              break;\n            }\n          }\n\n          norm = float(${r}) * norm + float(${n});\n\n          for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){\n            if (k < depthBegin){\n              continue;\n            }\n            else if (k >= depthBegin && k < depthEnd){\n              float dyi = -2.0 * float(${r})\n                * float(${a})\n                * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d)\n                / norm;\n              if (k == d) {\n                dyi += pow(norm, -1.0 * ${a});\n              }\n              if (k == coords[3]) {\n                dyi *= getDy(b, r, c, d);\n                result += dyi;\n              }\n            }\n            else {\n              break;\n            }\n          }\n      }\n      setOutput(result);\n      }\n    `}},$G={kernelName:Yn,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=r,p=new EG(a.shape,o,l,u,d);return n.runWebGLProgram(p,[a,s,i],a.dtype)}};function AG(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reductionIndices:s,keepDims:i}=r,o=a.shape.length,l=ja.parseAxisParam(s,a.shape),u=l,d=Im.getAxesPermutation(u,o),p=null!=d,h=n.shouldExecuteOnCPU([a]),c=a;if(p){if(h){let e=n.texData.get(c.dataId).values,t=new Array(o);for(let e=0;e<t.length;e++)t[e]=a.shape[d[e]];let r=zP(e,a.shape,a.dtype,d,t);c=n.makeTensorInfo(t,a.dtype),n.texData.get(c.dataId).values=r}else c=KB(a,d,n);u=Im.getInnerMostAxes(u.length,o)}Im.assertAxesAreInnerMostDims("max",u,o);let f,[m,g]=Im.computeOutAndReduceShapes(c.shape,u),y=m;if(i&&(y=Im.expandShapeToKeepDim(m,l)),h){let e=n.texData.get(c.dataId).values,t=dP(e,ja.sizeFromShape(g),y,a.dtype);f=n.makeTensorInfo(y,a.dtype),n.texData.get(f.dataId).values=t}
2else f=function(e,t,n,r){let a=ja.sizeFromShape(t),s=WB({inputs:{x:e},attrs:{shape:[ja.sizeFromShape(e.shape)/a,a]},backend:r}),i=HB(s,e.dtype,"max",r),o=WB({inputs:{x:i},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(s),r.disposeIntermediateTensorInfo(i),o}(c,g,y,n);return p&&n.disposeIntermediateTensorInfo(c),f}var RG={kernelName:Jn,backendName:"webgl",kernelFunc:AG},FG=FB({opSnippet:yB+"\n  return max(a, b);\n",packedOpSnippet:"\n  vec4 result = vec4(max(a, b));\n  bvec4 isNaNA = isnan(a);\n  bvec4 isNaNB = isnan(b);\n  bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n  "+xB+"\n  return result;\n",cpuKernelImpl:pP}),DG={kernelName:Qn,backendName:"webgl",kernelFunc:FG};var MG={kernelName:er,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;VL(a,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=r;ja.assert(Im.eitherStridesOrDilationsAreOne(i,1),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '1'`));let u=Im.computePool2DInfo(a.shape,s,i,1,o,l);if(1===u.filterWidth&&1===u.filterHeight&&ja.arraysEqual(u.inShape,u.outShape))return vB({inputs:{x:a},backend:n});let d=new FW(u,"max",!1);return n.runWebGLProgram(d,[a],a.dtype)}};var OG={kernelName:nr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=r,d=Im.computePool3DInfo(a.shape,s,i,[1,1,1],o,u,l),p=new DW(d,"max",!1);return n.runWebGLProgram(p,[a],a.dtype)}},LG=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,a=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=a-1-e.padInfo.top,o=s-1-e.padInfo.left,l=a*s-1;this.userCode=`\n      const ivec2 pads = ivec2(${i}, ${o});\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n\n        ivec2 dyRCCorner = coords.yz - pads;\n        int dyRCorner = dyRCCorner.x;\n        int dyCCorner = dyRCCorner.y;\n\n        // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n        for (int wR = 0; wR < ${a};\n          wR += ${r}) {\n          float dyR = float(dyRCorner + wR) / ${t}.0;\n\n          if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {\n            continue;\n          }\n          int idyR = int(dyR);\n\n          for (int wC = 0; wC < ${s}; wC++) {\n            float dyC = float(dyCCorner + wC) / ${n}.0;\n\n            if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                fract(dyC) > 0.0) {\n              continue;\n            }\n            int idyC = int(dyC);\n\n            float dyValue = getDy(b, idyR, idyC, d);\n            int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));\n\n            // Get the current value, check it against the value from the\n            // position matrix.\n            int curPosValue = wR * ${s} + wC;\n            float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n            dotProd += dyValue * mask;\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}},zG=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,a=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,d=o-1-e.padInfo.front,p=l-1-e.padInfo.top,h=u-1-e.padInfo.left,c=o*l*u-1;this.userCode=`\n      const ivec3 pads = ivec3(${d}, ${p}, ${h});\n\n      void main() {\n        ivec5 coords = getOutputCoords();\n        int batch = coords.x;\n        int ch = coords.u;\n\n        ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;\n        int dyDCorner = dyCorner.x;\n        int dyRCorner = dyCorner.y;\n        int dyCCorner = dyCorner.z;\n\n        // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get\n        // dx(x
2D, xR, xC, ch).\n        // ? = to be determined. : = across all values in that axis.\n        float dotProd = 0.0;\n\n        for (int wD = 0; wD < ${o};\n           wD += ${a}) {\n          float dyD = float(dyDCorner + wD) / ${t}.0;\n\n          if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {\n            continue;\n          }\n          int idyD = int(dyD);\n\n          for (int wR = 0; wR < ${l};\n              wR += ${s}) {\n            float dyR = float(dyRCorner + wR) / ${n}.0;\n\n            if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||\n                fract(dyR) > 0.0) {\n              continue;\n            }\n            int idyR = int(dyR);\n\n            for (int wC = 0; wC < ${u};\n                wC += ${i}) {\n              float dyC = float(dyCCorner + wC) / ${r}.0;\n\n              if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||\n                  fract(dyC) > 0.0) {\n                continue;\n              }\n              int idyC = int(dyC);\n\n              float dyValue = getDy(batch, idyD, idyR, idyC, ch);\n              int maxPosValue = ${c} -\n                  int(getMaxPos(batch, idyD, idyR, idyC, ch));\n\n              // Get the current value, check it against the value from the\n              // position matrix.\n              int curPosValue =\n                  wD * ${l} * ${u} +\n                  wR * ${u} + wC;\n              float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);\n\n              dotProd += dyValue * mask;\n            }\n          }\n        }\n        setOutput(dotProd);\n      }\n    `}};var PG={kernelName:rr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:d}=r,p=Im.computePool3DInfo(i.shape,o,l,[1,1,1],u,d),h=new DW(p,"max",!0),c=n.runWebGLProgram(h,[i],i.dtype),f=new zG(p),m=n.runWebGLProgram(f,[a,c],i.dtype);return n.disposeIntermediateTensorInfo(c),m}};var BG={kernelName:tr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s,output:i}=t,o=s;VL([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:d,dimRoundingMode:p}=r,h=Im.computePool2DInfo(o.shape,l,u,1,d,p),c=new FW(h,"max",!0),f=n.runWebGLProgram(c,[o],o.dtype),m=new LG(h),g=n.runWebGLProgram(m,[a,f],o.dtype);return n.disposeIntermediateTensorInfo(f),g}};var WG={kernelName:ar,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:a,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;ja.assert(4===r.shape.length,(()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`));let u=[1,1];ja.assert(Im.eitherStridesOrDilationsAreOne(s,u),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`));let d=Im.computePool2DInfo(r.shape,a,s,u,i),[p,h]=function(e,t,n,r){let a=new FW(n,"max",!1),s=r.runWebGLProgram(a,[e],"float32");return a=new FW(n,"max",!0,!0,t),[s,r.runWebGLProgram(a,[e],"float32")]}(r,o,d,l);return[p,h]}};var VG={kernelName:sr,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:a,axis:s}=t,i=n,o=r.shape.length,l=ja.parseAxisParam(s,r.shape),u=l,d=Im.getAxesPermutation(u,o),p=null!=d,h=i.shouldExecuteOnCPU([r]),c=[],f=r;if(p){if(h){let e=i.texData.get(f.dataId).values,t=new Array(o);for(let e=0;e<t.length;e++)t[e]=r.shape[d[e]];let n=zP(e,r.shape,r.dtype,d,t);f=i.makeTensorInfo(t,r.dtype),i.texData.get(f.dataId).values=n}else f=KB(r,d,i);c.push(f),u=Im.getInnerMostAxes(u.length,o)}Im.assertAxesAreInnerMostDims("sum",u,o);let[m,g]=Im.computeOutAndReduceShapes(f.shape,u),y=m;a&&(y=Im.expandShapeToKeepDim(m,l));let b=function(e,t,n,r){let a=ja.sizeFromShape(t),s=WB({inputs:{x:e},attrs:{shape:[ja.sizeFromShape(e.shape)/a,a]},backend:r}),i=HB(s,"float32","mean",r),o=WB({inputs:{x:i},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(s),r.disposeIntermediateTensorInfo(i),o}(f,g,y,i);for(let e of c)i.disposeIntermediateTensorInfo(e);return b}};var UG={kernelName:ir,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,keepDims:i}=r,o=a.shape.length,l=ja.parseAxisParam(s,a.shape),u=l,d=Im.getAxesPermutation(u,o),p=a;null!=d&&(p=ZB({inputs:{x:a},backend:n,attrs:{perm:d}}
2),u=Im.getInnerMostAxes(u.length,a.shape.length)),Im.assertAxesAreInnerMostDims("min",u,o);let h,[c,f]=Im.computeOutAndReduceShapes(p.shape,u),m=WB({inputs:{x:p},backend:n,attrs:{shape:[-1,ja.sizeFromShape(f)]}}),g=HB(m,m.dtype,"min",n);if(i){h=WB({inputs:{x:g},backend:n,attrs:{shape:Im.expandShapeToKeepDim(c,l)}})}else h=WB({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),null!=d&&n.disposeIntermediateTensorInfo(p),h}},GG=FB({opSnippet:yB+"\n  return min(a, b);\n",packedOpSnippet:"\n  vec4 result = vec4(min(a, b));\n  bvec4 isNaNA = isnan(a);\n  bvec4 isNaNB = isnan(b);\n  bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);\n  "+xB+"\n  return result;\n",cpuKernelImpl:hP}),HG={kernelName:or,backendName:"webgl",kernelFunc:GG},jG=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));let r=e.length,a=oz(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),l="reflect"===n?0:1;this.userCode=1!==r?`\n      ${a} start = ${a}(${s});\n      ${a} end = ${a}(${i});\n\n      void main() {\n        ${a} outC = getOutputCoords();\n        for (int i = 0; i < ${r}; i++) {\n          if (outC[i] < start[i]) {\n            outC[i] = start[i] * 2 - outC[i] - ${l};\n          } else if(outC[i] >= end[i]) {\n            outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};\n          }\n        }\n        ${a} coords = outC - start;\n        setOutput(getX(${o}));\n      }\n    `:`\n        int start = ${s};\n        int end = ${i};\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start) {\n            outC = start * 2 - outC - ${l};\n          } else if(outC >= end) {\n            outC = (end - 1) * 2 - outC + ${l};\n          }\n          setOutput(getX(outC - start));\n        }\n      `}},qG=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));let r=e.length,a=oz(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=WP("rc",r),l=WP("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,d=1===r?"source":`vec2(${l.slice(-2).join()})`,p="reflect"===n?0:1,h="";if(1===r){let e=`\n        ${a} source = rc;\n        if (source < start) {\n          source = start * 2 - source - ${p};\n        } else if (source >= end) {\n          source = (end - 1) * 2 - source + ${p};\n        }\n        source -= start;\n      `;h=`\n        ${a} rc = outputLoc;\n        ${e}\n        result[0] = getChannel(getX(${l.join()}), ${d});\n        ${o[r-1]} += 1;\n        if(${u}) {\n          ${e}\n          result[1] = getChannel(getX(${l.join()}), ${d});\n        }\n      `}else{let e=`\n        ${a} source = rc;\n        ${a} lt = ${a}(lessThan(source, start));\n        ${a} gte = ${a}(greaterThanEqual(source, end));\n        ${a} orig = 1 - (lt + gte);\n        source = orig * source +\n                lt * (start * 2 - source - ${p}) +\n                gte * ((end - 1) * 2 - source + ${p});\n        source -= start;\n      `;h=`\n        ${a} rc = outputLoc;\n        ${e}\n        result[0] = getChannel(getX(${l.join()}), ${d});\n        ${o[r-1]} += 1;\n        if(${u}) {\n          ${e}\n          result[1] = getChannel(getX(${l.join()}), ${d});\n        }\n        rc = outputLoc;\n        ${o[r-2]} += 1;\n        if(${o[r-2]} < ${this.outputShape[r-2]}) {\n          ${e}\n          result[2] = getChannel(getX(${l.join()}), ${d});\n          ${o[r-1]} += 1;\n          if(${u}) {\n            ${e}\n            result[3] = getChannel(getX(${l.join()}), ${d});\n          }\n        }\n      `}this.userCode=`\n      const ${a} start = ${a}(${s});\n      const ${a} end = ${a}(${i});\n\n      void main() {\n        ${a} outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        ${h}\n        setOutput(result);\n      }\n    `}}
2,KG={kernelName:lr,backendName:"webgl",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:a,mode:s}=n,i=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qG(r.shape,a,s):new jG(r.shape,a,s);return t.runWebGLProgram(i,[r],r.dtype)}},XG=FB({opSnippet:"if (b == 0.0) return NAN;\n  return mod(a, b);",packedOpSnippet:"\n  vec4 result = mod(a, b);\n  bvec4 isNaN = equal(b, vec4(0.0));\n  "+xB+"\n  return result;\n"}),YG={kernelName:ur,backendName:"webgl",kernelFunc:XG},ZG=class{constructor(e,t,n){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,n],this.userCode=`\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n\n        float r = random(seed);\n        float cdf = 0.0;\n\n        for (int i = 0; i < ${t-1}; i++) {\n          cdf += getProbs(batch, i);\n\n          if (r < cdf) {\n            setOutput(float(i));\n            return;\n          }\n        }\n\n        // If no other event happened, last event happened.\n        setOutput(float(${t-1}));\n      }\n    `}},JG=FB({opSnippet:"\nif (a == b) {\n  return 1.0;\n};\nreturn a / b;",packedOpSnippet:"\n  // vec4 one = vec4(equal(a, b));\n  // return one + (vec4(1.0) - one) * a / b;\n  vec4 result = a / b;\n  if(a.x == b.x) {\n    result.x = 1.;\n  }\n  if(a.y == b.y) {\n    result.y = 1.;\n  }\n  if(a.z == b.z) {\n    result.z = 1.;\n  }\n  if(a.w == b.w) {\n    result.w = 1.;\n  }\n\n  return result;\n",checkOutOfBounds:!0}),QG={kernelName:hn,backendName:"webgl",kernelFunc:JG},eH="return a - b;",tH=FB({opSnippet:eH,packedOpSnippet:eH,supportsComplex:!0,cpuKernelImpl:MP}),nH={kernelName:ma,backendName:"webgl",kernelFunc:tH};function rH(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{dim:s}=r,i=ja.parseAxisParam([s],a.shape),o=AG({inputs:{x:a},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=Im.expandShapeToKeepDim(o.shape,i),u=WB({inputs:{x:o},backend:n,attrs:{shape:l}}),d=tH({inputs:{a,b:u},backend:n}
2),p=kU({inputs:{x:d},backend:n}),h=XB({inputs:{x:p},backend:n,attrs:{axis:i,keepDims:!1}}),c=WB({inputs:{x:h},backend:n,attrs:{shape:l}}),f=JG({inputs:{a:p,b:c},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(c),f}var aH={kernelName:na,backendName:"webgl",kernelFunc:rH};var sH={kernelName:dr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r,l=o?a:rH({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),u=l.shape[0],d=l.shape[1],p=new ZG(u,d,s),h=[[i]],c=n.runWebGLProgram(p,[l],"int32",h);return o||n.disposeIntermediateTensorInfo(l),c}},iH=XP+"\n  return -x;\n";var oH={kernelName:hr,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r}=e,{x:a}=n;if(r.shouldExecuteOnCPU([a])){let e=r.texData.get(a.dataId),[t,n]=fP(e.values,a.shape,a.dtype);return r.makeTensorInfo(n,a.dtype,t)}return t=ut().getBool("WEBGL_PACK_UNARY_OPERATIONS")?new lB(a.shape,"\n  vec4 result = -x;\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n"):new KP(a.shape,iH),r.runWebGLProgram(t,[a],a.dtype)}},lH=Eg.nonMaxSuppressionV3Impl;var uH={kernelName:fr,backendName:"webgl",kernelFunc:function(e){Im.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=r,u=n.readSync(a.dataId),d=n.readSync(s.dataId),{selectedIndices:p}=lH(u,d,i,o,l);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}},dH=Eg.nonMaxSuppressionV4Impl;var pH={kernelName:mr,backendName:"webgl",kernelFunc:function(e){Im.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=r,d=n.readSync(a.dataId),p=n.readSync(s.dataId),{selectedIndices:h,validOutputs:c}=dH(d,p,i,o,l,u);return[n.makeTensorInfo([h.length],"int32",new Int32Array(h)),n.makeTensorInfo([],"int32",new Int32Array([c]))]}},hH=Eg.nonMaxSuppressionV5Impl;var cH={kernelName:gr,backendName:"webgl",kernelFunc:function(e){Im.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:a,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=r,d=n.readSync(a.dataId),p=n.readSync(s.dataId),h=i,c=o,f=l,m=u,{selectedIndices:g,selectedScores:y}=hH(d,p,h,c,f,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}},fH=class{constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int index = round(getIndices(coords.x));\n        setOutput(mix(float(${r}), float(${n}),\n                      float(index == coords.y)));\n      }\n    `}},mH={kernelName:br,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{dtype:s,depth:i,onValue:o,offValue:l}=r,u=ja.sizeFromShape(a.shape),d=new fH(u,i,o,l),p=WB({inputs:{x:a},backend:n,attrs:{shape:[u]}}),h=n.runWebGLProgram(d,[p],s);n.disposeIntermediateTensorInfo(p);let c=WB({inputs:{x:h},backend:n,attrs:{shape:[...a.shape,i]}});return n.disposeIntermediateTensorInfo(h),c}};function gH(e){let{inputs:t,backend:n}=e,{x:r}=t;if("complex64"===r.dtype){let e=nV({inputs:{input:r},backend:n}),t=gH({inputs:{x:e},backend:n}),a=bV({inputs:{input:r},backend:n}),s=gH({inputs:{x:a},backend:n}),i=IB({inputs:{real:t,imag:s},backend:n});return n.disposeIntermediateTensorInfo(e),n.disposeIntermediateTensorInfo(t),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(s),i}return FU({attrs:{shape:r.shape,dtype:r.dtype,value:"string"===r.dtype?"":0},backend:n})}var yH={kernelName:Ta,backendName:"webgl",kernelFunc:gH};var bH={kernelName:yr,backendName:"webgl",kernelFunc:function e(t){let{inputs:n,backend:r}=t,{x:a}=n;if("string"===a.dtype)throw new Error("onesLike is not supported under string dtype");
2if("complex64"===a.dtype){let t=nV({inputs:{input:a},backend:r}),n=e({inputs:{x:t},backend:r}),s=bV({inputs:{input:a},backend:r}),i=gH({inputs:{x:s},backend:r}),o=IB({inputs:{real:n,imag:i},backend:r});return r.disposeIntermediateTensorInfo(t),r.disposeIntermediateTensorInfo(n),r.disposeIntermediateTensorInfo(s),r.disposeIntermediateTensorInfo(i),o}return FU({attrs:{shape:a.shape,dtype:a.dtype,value:1},backend:r})}};var xH={kernelName:xr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(1===t.length)return SU({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach((e=>{ja.assertShapesMatch(s,e.shape,"All tensors passed to stack must have matching shapes"),ja.assert(i===e.dtype,(()=>"All tensors passed to stack must have matching dtypes"))}));let o=[],l=vV({inputs:t.map((e=>{let t=SU({inputs:{input:e},backend:n,attrs:{dim:a}});return o.push(t),t})),backend:n,attrs:{axis:a}});return o.forEach((e=>n.disposeIntermediateTensorInfo(e))),l}},wH=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));let r=e.length,a=oz(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=1!==r?`\n      ${a} start = ${a}(${s});\n      ${a} end = ${a}(${i});\n\n      void main() {\n        ${a} outC = getOutputCoords();\n        if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {\n          setOutput(value);\n        } else {\n          ${a} coords = outC - start;\n          setOutput(getX(${o}));\n        }\n      }\n    `:`\n        int start = ${s};\n        int end = ${i};\n\n        void main() {\n          int outC = getOutputCoords();\n          if (outC < start || outC >= end) {\n            setOutput(value);\n          } else {\n            setOutput(getX(outC - start));\n          }\n        }\n      `}},vH=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map(((t,n)=>t[0]+e[n]+t[1]));let r=e.length,a=oz(r),s=t.map((e=>e[0])).join(","),i=t.map(((t,n)=>t[0]+e[n])).join(","),o=WP("rc",r),l=WP("source",r),u=`${o[r-1]} < ${this.outputShape[r-1]}`,d=1===r?"source":`vec2(${l.slice(-2).join()})`,p=[`${a} rc = outputLoc;`,`${o[r-1]} += 1;\n       if(${u}) {\n      `,1===r?"":`}\n       rc = outputLoc;\n       ${o[r-2]} += 1;\n       if(${o[r-2]} < ${this.outputShape[r-2]}) {`,1===r?"":`  ${o[r-1]} += 1;\n         if(${u}) {`],h=1===r?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",c="";for(let e=0,t=1===r?2:4;e<t;e++)c+=`\n        ${p[e]}\n        if (${h}) {\n          result[${e}] = float(value);\n        } else {\n          ${a} source = rc - start;\n          result[${e}] = getChannel(getX(${l.join()}), ${d});\n        }\n      `;c+=1===r?"} ":"}}",this.userCode=`\n      const ${a} start = ${a}(${s});\n      const ${a} end = ${a}(${i});\n\n      void main() {\n        ${a} outputLoc = getOutputCoords();\n        vec4 result = vec4(0.);\n        ${c}\n        setOutput(result);\n      }\n    `}},kH=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{paddings:s,constantValue:i}=r;if(0===ja.sizeFromShape(a.shape)){return FU({backend:n,attrs:{shape:s.map(((e,t)=>e[0]+a.shape[t]+e[1])),value:i,dtype:a.dtype}})}let o=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new vH(a.shape,s,i):new wH(a.shape,s,i),l=[[i]];return n.runWebGLProgram(o,[a],a.dtype,l)},IH={kernelName:wr,backendName:"webgl",kernelFunc:kH},SH=FB({opSnippet:"\n  if(a < 0.0 && floor(b) < b){\n    return NAN;\n  }\n  if (b == 0.0) {\n    return 1.0;\n  }\n  return (round(mod(b, 2.0)) != 1) ?\n      pow(abs(a), b) : sign(a) * pow(abs(a), b);\n",packedOpSnippet:"\n  // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.\n  vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));\n  vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);\n  vec4 result = multiplier * pow(abs(a), b);\n\n  // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS\n  bvec4 isExpZero = equal(b, vec4(0.0));\n  result.r = isExpZero.r ? 1.0 : result.r;\n  result.g = isExpZero.g ? 1.0 : result.g;\n  result.b = isExpZero.b ? 1.0 : result.b;\n  result.a = isExpZero.a ? 1.0 : result.a;\n\n  bvec4 isNaN1 = lessThan(a, vec4(0.0));\n  bvec4 isNaN2 = lessThan(floor(b), b);\n  bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.
2w);\n  "+xB+"\n  return result;\n"}),NH={kernelName:kr,backendName:"webgl",kernelFunc:SH};var TH={kernelName:Sr,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s}=n,{axis:i,keepDims:o}=a,l=s.shape.length,u=[],d=ja.parseAxisParam(i,s.shape),p=d,h=Im.getAxesPermutation(p,l),c=s;if(null!=h&&(c=ZB({inputs:{x:s},backend:r,attrs:{perm:h}}),p=Im.getInnerMostAxes(p.length,l),u.push(c)),Im.assertAxesAreInnerMostDims("prod",p,l),r.shouldExecuteOnCPU([c])){let e=r.texData.get(c.dataId).values,{outVals:n,outShape:a,outDtype:s}=gP(c.shape,c.dtype,e,p);t=r.makeTensorInfo(a,s,n)}else{let[e,n]=Im.computeOutAndReduceShapes(c.shape,p),a=ja.sizeFromShape(n),i=WB({inputs:{x:c},backend:r,attrs:{shape:[-1,a]}}),o=HB(i,Vs(s.dtype),"prod",r);t=WB({inputs:{x:o},backend:r,attrs:{shape:e}}),u.push(i),u.push(o)}if(o){u.push(t);let e=Im.expandShapeToKeepDim(t.shape,d);t=WB({inputs:{x:t},backend:r,attrs:{shape:e}})}return u.forEach((e=>r.disposeIntermediateTensorInfo(e))),t}};var _H={kernelName:Nr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:a,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=r,l=a.map((e=>n.readSync(e.dataId))),u=a.map((e=>e.shape)),d=n.readSync(s.dataId),p=n.readSync(i.dataId),[h,c,f]=yP(l,u,d,s.shape,s.dtype,p,i.shape,o),m=h.map((e=>n.makeTensorInfo([e.length],"int32",e))),g=n.makeTensorInfo(f,s.dtype,c);return m.concat([g])}};var CH={kernelName:Tr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{starts:r,limits:a,deltas:s}=t,i=n.readSync(r.dataId),o=n.readSync(a.dataId),l=n.readSync(s.dataId),[u,d]=bP(i,r.shape,r.dtype,o,a.shape,l,s.shape);return[n.makeTensorInfo([u.length],"int32",u),n.makeTensorInfo([d.length],r.dtype,d)]}};var EH={kernelName:_r,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{shape:a,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=r,u=n.readSync(a.dataId),d=n.readSync(s.dataId),p=n.readSync(i.dataId),h=o.map((e=>n.readSync(e.dataId))),c=o.map((e=>e.shape)),[f,m]=xP(u,a.shape,d,s.shape,s.dtype,p,i.shape,h,c,l);return n.makeTensorInfo(f,s.dtype,m)}},$H=e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=wP(r,a,s,i);return t.makeTensorInfo([o.length],i,o)},AH={kernelName:Cr,backendName:"webgl",kernelFunc:$H},RH=RB({opSnippet:"return 1.0 / x;"}),FH={kernelName:$r,backendName:"webgl",kernelFunc:RH},DH=RB({opSnippet:XP+"\n  return (x < 0.0) ? 0.0 : x;\n",packedOpSnippet:"\n  vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n"}),MH={kernelName:Ar,backendName:"webgl",kernelFunc:DH},OH=RB({opSnippet:XP+"\n  return (x < 0.0) ? 0.0 : min(6.0, x);\n",packedOpSnippet:"\n  vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0)));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n"}),LH={kernelName:Lr,backendName:"webgl",kernelFunc:OH},zH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u,d=[r&&t>1?i-1:i,r&&n>1?o-1:o],p=[r&&t>1?t-1:t,r&&n>1?n-1:n];u=a?"(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":"vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          ${d[0]/p[0]},\n          ${d[1]/p[1]});\n      const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = ${u};\n\n        // Compute the four integer indices.\n        ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));\n        ivec2 sourceCeilRC = ivec2(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);\n        float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);\n        float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);\n        float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);\n\n        vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);\n\n        float top = topLeft + (topRight - topLeft) * fracRC.y;\n        float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;\n        float newValue = top + (bottom - top) * fracRC.x;\n\n        setOutput(newValue);\n      }\n    `}},PH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u,d=[r&&t>1?i-1:i,r&&n>1?o-1:o],p=[r&&t>1?t-1:t,r&&n>1?n-1:n];u=a?"(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":"vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          ${d[0]/p[0]},\n          ${d[1]/p[1]},\n          ${d[1]/p[1]});\n      const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,\n                                     ${o}.0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = ${u};\n\n        // Compute the four integer indices.\n        ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));\n        ivec3 sourceCeilRC = ivec3(\n          min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));\n\n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < ${l
vendor: 2,116 bytes, line 2
2-1};\n        bool hasNextRow = coords.z < ${n-1};\n\n        // In parallel, construct four corners for all four components in\n        // packed 2x2 cell.\n        vec4 topLeft = vec4(\n          getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 bottomLeft = vec4(\n          getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);\n\n        vec4 topRight = vec4(\n          getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec4 bottomRight = vec4(\n          getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),\n          hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);\n\n        vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);\n\n        vec4 top = mix(topLeft, topRight, fracRC.yyzz);\n        vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);\n        vec4 newValue = mix(top, bottom, fracRC.x);\n\n        setOutput(newValue);\n      }\n    `}}
2;var BH={kernelName:Mr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,d=ut().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new PH(a.shape,l,u,s,i):new zH(a.shape,l,u,s,i);return n.runWebGLProgram(d,[a],"float32")}},WH=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],p=1/u,h=1/d,c=2*Math.ceil(p)+2,f=2*Math.ceil(h)+2;this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(${u});\n        const float widthScale = float(${d});\n\n        const float invHeightScale = float(${p});\n        const float invWidthScale = float(${h});\n\n        const int winHeight = int(${c});\n        const int winWidth = int(${f});\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(startRLerp - float(winHeight / 2));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(startCLerp - float(winWidth / 2));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= ${s}) {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= ${i}) {\n              continue;\n            }\n\n            float dxR = float(dyR) * heightScale;\n            int topDxRIndex = int(floor(dxR));\n            int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0));\n            float dxRLerp = dxR - float(topDxRIndex);\n            float inverseDxRLerp = 1.0 - dxRLerp;\n\n            float dxC = float(dyC) * widthScale;\n            int leftDxCIndex = int(floor(dxC));\n            int rightDxCIndex = int(min(ceil(dxC), ${a-1}.0));\n            float dxCLerp = dxC - float(leftDxCIndex);\n            float inverseDxCLerp = 1.0 - dxCLerp;\n\n            if (r == topDxRIndex && c == leftDxCIndex) {\n              // topLeft\n              accumulator +=\n                getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;\n            }\n\n            if (r == topDxRIndex && c == rightDxCIndex) {\n              // topRight\n              accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == leftDxCIndex) {\n              // bottomLeft\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;\n            }\n\n            if (r == bottomDxRIndex && c == rightDxCIndex) {\n              // bottomRight\n              accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    `}};var VH={kernelName:Or,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new WH(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}},UH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u,d=[r&&t>1?i-1:i,r&&n>1?o-1:o],p=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0";u=a?"max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":"vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n      const vec2 effectiveInputOverOutputRatioRC = vec2(\n          ${d[0]/p[0]},\n          ${d[1]/p[1]});\n      const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        ivec2 yRC = coords.yz;\n\n        // Fractional source index.\n        vec2 sourceFracIndexRC = ${u};\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec2 sourceNearestRC = ivec2(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));\n        float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);\n\n        setOutput(newValue);\n      }\n    `}},GH=class{constructor(e,t,n,r,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u,d=[r&&t>1?i-1:i,r&&n>1?o-1:o],p=[r&&t>1?t-1:t,r&&n>1?n-1:n],h=r?"0.5":"0.0";u=a?"max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":"vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`\n      const vec3 effectiveInputOverOutputRatioRC = vec3(\n          ${d[0]/p[0]},\n          ${d[1]/p[1]},\n          ${d[1]/p[1]});\n      const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,\n                                     ${o}.0);\n\n      float getAValue(int b, int r, int c, int d) {\n        return getChannel(getA(b, r, c, d), vec2(c, d));\n      }\n\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        // Calculate values for next column in yRC.z.\n        ivec3 yRC = coords.yzz + ivec3(0, 0, 1);\n\n        // Fractional source index.\n        vec3 sourceFracIndexRC = ${u};\n\n        // Compute the coordinators of nearest neighbor point.\n        ivec3 sourceNearestRC = ivec3(\n          min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${h})));\n\n        // Should we calculate next column and row elements in 2x2 packed cell.\n        bool hasNextCol = d < ${l-1};\n        bool hasNextRow = coords.z < ${n-1};
2\n\n        vec4 newValue = vec4(\n          getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),\n          hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)\n                     : 0.0,\n          hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)\n                     : 0.0,\n          (hasNextRow && hasNextCol) ?\n            getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);\n\n        setOutput(newValue);\n      }\n    `}};var HH={kernelName:Fr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a}=t,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,d=ut().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new GH(a.shape,l,u,s,i):new UH(a.shape,l,u,s,i);return n.runWebGLProgram(d,[a],a.dtype)}},jH=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,a]=t,[,s,i]=e,o=[n&&s>1?r-1:r,n&&i>1?a-1:a],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],d=o[1]/l[1],p=1/u,h=1/d,c=2*Math.ceil(p)+2,f=2*Math.ceil(h)+2;this.userCode=`\n      void main() {\n        ivec4 coords = getOutputCoords();\n        int b = coords[0];\n        int d = coords[3];\n        int r = coords[1];\n        int c = coords[2];\n\n        float accumulator = 0.0;\n\n        const float heightScale = float(${u});\n        const float widthScale = float(${d});\n\n        const float invHeightScale = float(${p});\n        const float invWidthScale = float(${h});\n\n        const int winHeight = int(${c});\n        const int winWidth = int(${f});\n\n        // Compute bounds for where in dy we will look\n        float startRLerp = floor(float(r) * invHeightScale);\n        int startDyR = int(floor(startRLerp - float(winHeight / 2)));\n\n        float startCLerp = floor(float(c) * invWidthScale);\n        int startDyC = int(floor(startCLerp - float(winWidth / 2)));\n\n        // Loop over dy\n        for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {\n          int dyR = dyROffset + startDyR;\n\n          // Guard against the window exceeding the bounds of dy\n          if (dyR < 0 || dyR >= ${s}) {\n            continue;\n          }\n\n          for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {\n            int dyC = dyCOffset + startDyC;\n\n            // Guard against the window exceeding the bounds of dy\n            if (dyC < 0 || dyC >= ${i}) {\n              continue;\n            }\n\n            float sourceFracRow =\n              float(${o[0]}) *\n                (float(dyR) / float(${l[0]}));\n\n            float sourceFracCol =\n                float(${o[1]}) *\n                  (float(dyC) / float(${l[1]}));\n\n            int sourceNearestRow = int(min(\n                float(int(${r}) - 1),\n                ${n} ? float(round(sourceFracRow)) :\n                                  float(floor(sourceFracRow))));\n\n            int sourceNearestCol = int(min(\n                float(int(${a}) - 1),\n                ${n} ? float(round(sourceFracCol)) :\n                                  float(floor(sourceFracCol))));\n\n            if (r == sourceNearestRow && c == sourceNearestCol) {\n              accumulator += getDy(b, dyR, dyC, d);\n            }\n          }\n        }\n        // End loop over dy\n\n        setOutput(accumulator);\n      }\n    `}};var qH={kernelName:Dr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{images:a,dy:s}=t,{alignCorners:i}=r,o=new jH(s.shape,a.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}},KH=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,1===n)return void(this.userCode=`\n        void main() {\n          int coord = getOutputCoords();\n          setOutput(getX(${e[0]} - coord - 1));\n        }\n      `);let r=e.map(((n,r)=>(n=>-1!==t.indexOf(n)&&1!==e[n]?`${e[n]} - coords[${n}] - 1`:`coords[${n}]`)(r))).join(","),a=oz(n);this.userCode=`\n      void main() {\n        ${a} coords = getOutputCoords();\n        setOutput(getX(${r}));\n      }\n    `}},XH=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let r=WP("rc",n),a=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,i=oz(n);var o;function l(n){let r=e.map(((r,a)=>function(n,r){return-1!==t.indexOf(n)&&1!==e[n]?`${e[n]} - ${r[n]} - 1`:`${r[n]}`}(a,n)));return`getChannel(getX(${r.join(",")}), vec2(${r.slice(-2).join(",")}))`}this.userCode=1===n?`\n        void main(){\n          int rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = getChannel(getX(${e[0]} - rc - 1),\n            ${e[0]} - rc - 1);\n          if(${a}){\n              result.g = getChannel(getX(${e[0]} - (rc  + 1) - 1),\n                ${e[0]} - (rc  + 1) - 1);\n          }\n          setOutput(result);\n        }\n      `:`\n        void main() {\n          ${i} rc = getOutputCoords();\n          vec4 result = vec4(0.);\n          result.r = ${o=r.slice(),l(o)};\n          if(${a}){\n            result.g = ${function(e){return e[n-1]="("+e[n-1]+" + 1)",l(e)}(r.slice())};\n          }\n          if(${s}) {\n            result.b = ${function(e){return e[n-2]="("+e[n-2]+" + 1)",l(e)}(r.slice())};\n            if(${a}) {\n              result.a = ${function(e){return e[n-1]="("+e[n-1]+" + 1)",e[n-2]="("+e[n-2]+" + 1)",l(e)}(r.slice())};\n            }\n          }\n          setOutput(result);\n        }\n    `}};var YH={kernelName:zr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=a.shape.length,o=ja.parseAxisParam(s,a.shape);
2if(0===i)return vB({inputs:{x:a},backend:n});let l=ut().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new XH(a.shape,o):new KH(a.shape,o);return n.runWebGLProgram(l,[a],a.dtype)}},ZH=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=e[1],r=e[2];this.outputShape=e;let a="";a="number"==typeof t?`float outputValue = ${t.toFixed(2)};`:`\n        vec3 fill = vec3(${t.join(",")});\n        float outputValue = fill[coords[3]];`,this.userCode=`\n        void main() {\n          ivec4 coords = getOutputCoords();\n          int x = coords[2];\n          int y = coords[1];\n          float coordXFloat = (float(x) - params[0]) * params[3] -\n            (float(y) - params[1]) * params[2];\n          float coordYFloat = (float(x) - params[0]) * params[2] +\n            (float(y) - params[1]) * params[3];\n          int coordX = int(round(coordXFloat + params[0]));\n          int coordY = int(round(coordYFloat + params[1]));\n          ${a}\n          if(coordX >= 0 && coordX < ${r} && coordY >= 0 && coordY < ${n}) {\n            outputValue = getImage(coords[0], coordY, coordX, coords[3]);\n          }\n          setOutput(outputValue);\n        }\n    `}},JH={kernelName:Ea,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}
2=e,{radians:a,fillValue:s,center:i}=t,o=n,l=new ZH(r.shape,s),[u,d]=Im.getImageCenter(i,r.shape[1],r.shape[2]),p=[[u,d,Math.sin(a),Math.cos(a)]];return o.runWebGLProgram(l,[r],r.dtype,p)}},QH=RB({opSnippet:"\n  // OpenGL ES does not support round function.\n  // The algorithm is based on banker's rounding.\n  float base = floor(x);\n  if ((x - base) < 0.5) {\n    return floor(x);\n  } else if ((x - base) > 0.5) {\n    return ceil(x);\n  } else {\n    if (mod(base, 2.0) == 0.0) {\n      return base;\n    } else {\n      return base + 1.0;\n    }\n  }\n"}),ej={kernelName:Pr,backendName:"webgl",kernelFunc:QH},tj=RB({opSnippet:"return inversesqrt(x);",cpuKernelImpl:vP}),nj={kernelName:Br,backendName:"webgl",kernelFunc:tj},rj=class{constructor(e,t,n,r,a,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let l=oz(a.length),u=oz(s.length),d="";1===n?d="i":2===n&&(d="i, j");let p=`getIndices(${d})`,h="";1===r?h="i":2===r&&(h="i, coords[1]");let c=`getUpdates(${h})`,f="";o&&(f="coords[0], coords[1]");let m=`getDefaultValue(${f})`,g=t>1?"strides[j]":"strides";this.userCode=`\n        ${l} strides = ${l}(${a});\n\n        void main() {\n          ${u} coords = getOutputCoords();\n          float sum = 0.0;\n          bool found = false;\n          for (int i = 0; i < ${e}; i++) {\n            int flattenedIndex = 0;\n            for (int j = 0; j < ${t}; j++) {\n              int index = round(${p});\n              flattenedIndex += index * ${g};\n            }\n            if (flattenedIndex == coords[0]) {\n              sum += ${c};\n              found = true;\n            }\n          }\n          setOutput(mix(${m}, sum, float(found)));\n        }\n      `}},aj=class{constructor(e,t,n,r,a,s,i=!0,o=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=s;let l=oz(a.length),u=oz(s.length),d="";1===n?d="i":2===n&&(d="i, j");let p=`getIndices(${d})`,h="";1===r?h="i":2===r&&(h="i, coords[1]");let c=`getUpdates(${h})`,f="";o&&(f="coords[0], coords[1]");let m=`getDefaultValue(${f})`,g=t>1?"strides[j]":"strides",y=t>1?"strides[j + 1]":"strides";this.userCode=`\n        ${l} strides = ${l}(${a});\n\n        void main() {\n          ${u} coords = getOutputCoords();\n          vec4 sum = vec4(0.);\n          vec4 found = vec4(0.);\n          for (int i = 0; i < ${e}; i+=2) {\n            ivec2 flattenedIndex = ivec2(0);\n            for (int j = 0; j < ${t}; j+=2) {\n              ivec4 index = round(${p});\n              flattenedIndex += index.xz * ${g};\n              if (j + 1 < ${t}) {\n                flattenedIndex += index.yw * ${y};\n              }\n            }\n            if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] ||\n                flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) {\n              vec4 updVals = ${c};\n              if (flattenedIndex[0] == coords[0]) {\n                sum.xy += updVals.xy;\n                found.xy = vec2(1.);\n              } else if (flattenedIndex[0] == coords[0] + 1) {\n                sum.zw += updVals.xy;\n                found.zw = vec2(1.);\n              }\n              if (flattenedIndex[1] == coords[0]) {\n                sum.xy += updVals.zw;\n                found.xy = vec2(1.);\n              } else if (flattenedIndex[1] == coords[0] + 1) {\n                sum.zw += updVals.zw;\n                found.zw = vec2(1.);\n              }\n            }\n          }\n          setOutput(mix(${m}, sum, found));\n        }\n      `}};var sj={kernelName:Wr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a,updates:s}=t,{shape:i}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:p}=Im.calculateShapes(s,a,i),h=[p/u,u];if(0===p)return n.makeTensorInfo(i,a.dtype);let c,f=WB({inputs:{x:a},backend:n,attrs:{shape:[l,o]}}),m=WB({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),g=n.makeTensorInfo([],"float32",new Float32Array([0]));c=ut().getBool("WEBGL_PACK")?new aj(l,o,f.shape.length,m.shape.length,d,h):new rj(l,o,f.shape.length,m.shape.length,d,h);
2let y=n.runWebGLProgram(c,[m,f,g],m.dtype),b=WB({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(g),b}},ij=class{constructor(e,t,n,r){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,n];let a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,s=2===ut().getNumber("WEBGL_VERSION")?"while (left < right) {":a,i="left"===r?"<":"<=";this.userCode=`\n       int findBound(int batch, float value) {\n         int left = 0;\n         int right = numInputs;\n         int mid;\n         ${s}\n           mid = (left + right) / 2;\n           if (getSortedSequence(batch, mid) ${i} value) {\n             left = mid + 1;\n           } else {\n             right = mid;\n           }\n         }\n         return right;\n       }\n\n       void main() {\n         ivec2 coords = getOutputCoords();\n         int batch = coords[0];\n         int valueIndex = coords[1];\n\n         float value = getValues(batch, valueIndex);\n\n         setOutput(float(findBound(batch, value)));\n       }\n     `}};var oj={kernelName:Ur,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:a,values:s}=t,{side:i}=r,o=new ij(a.shape[0],a.shape[1],s.shape[1],i),l=[[a.shape[1]]];return n.runWebGLProgram(o,[a,s],"int32",l)}},lj=class{constructor(e,t,n){let r,a;if(this.variableNames=["c","a","b"],this.outputShape=t,n>4)throw Error(`Where for rank ${n} is not yet supported`);if(1===n)a="resRC",r="resRC";else{let n=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],i=[];for(let r=0;r<t.length;r++)i.push(`${n[r]}`),r<e&&s.push(`${n[r]}`);r=s.join(),a=i.join()}let s=oz(n);this.userCode=`\n      void main() {\n        ${s} resRC = getOutputCoords();\n        float cVal = getC(${r});\n        if (cVal >= 1.0) {\n          setOutput(getA(${a}));\n        } else {\n          setOutput(getB(${a}));\n        }\n      }\n    `}};var uj={kernelName:Gr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=new lj(r.shape.length,a.shape,a.shape.length);return n.runWebGLProgram(i,[r,a,s],Ws(a.dtype,s.dtype))}}
2,dj=RB({opSnippet:`\n  // Stable and Attracting Fixed Point (0, 1) for Normalized Weights.\n  // see: https://arxiv.org/abs/1706.02515\n  float scaleAlpha = ${Im.SELU_SCALEALPHA};\n  float scale = ${Im.SELU_SCALE};\n  return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);\n`}),pj={kernelName:Hr,backendName:"webgl",kernelFunc:dj},hj=RB({opSnippet:AB+"\n  return 1.0 / (1.0 + exp(-1.0 * x));\n",packedOpSnippet:"\n  vec4 result = 1.0 / (1.0 + exp(-1.0 * x));\n  bvec4 isNaN = isnan(x);\n\n  result.r = isNaN.r ? x.r : result.r;\n  result.g = isNaN.g ? x.g : result.g;\n  result.b = isNaN.b ? x.b : result.b;\n  result.a = isNaN.a ? x.a : result.a;\n\n  return result;\n",cpuKernelImpl:IP}),cj={kernelName:Yr,backendName:"webgl",kernelFunc:hj},fj=RB({opSnippet:"\n  if (isnan(x)) { return 0.0; }\n  return sign(x);\n"}),mj={kernelName:Xr,backendName:"webgl",kernelFunc:fj},gj=RB({opSnippet:AB+"\n  return sin(x);\n",packedOpSnippet:`\n  vec4 result = sin(x);\n  bvec4 isNaN = isnan(x);\n  ${xB}\n  return result;\n`}),yj={kernelName:qr,backendName:"webgl",kernelFunc:gj},bj=RB({opSnippet:"\n  float e2x = exp(x);\n  return (e2x - 1.0 / e2x) / 2.0;\n"}),xj={kernelName:Kr,backendName:"webgl",kernelFunc:bj},wj=RB({opSnippet:"\n  float epsilon = 1.1920928955078125e-7;\n  float threshold = log(epsilon) + 2.0;\n\n  bool too_large = x > -threshold;\n  bool too_small = x < threshold;\n\n  float result;\n  float exp_x = exp(x);\n\n  if (too_large){\n    result = x;\n  }\n  else if (too_small){\n    result = exp_x;\n  }\n  else{\n    result = log(exp_x + 1.0);\n  }\n  return result;\n"}),vj={kernelName:Zr,backendName:"webgl",kernelFunc:wj},kj={kernelName:ea,backendName:"webgl",kernelFunc:e=>{let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r;ja.assert(a.shape.length<=4,(()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"));let o=s.reduce(((e,t)=>e*t)),l=[[0,0]];l.push(...i);for(let e=1+s.length;e<a.shape.length;++e)l.push([0,0]);let u=[],d=kH({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),p=Im.getReshaped(d.shape,s,o,!1),h=Im.getPermuted(p.length,s.length,!1),c=Im.getReshapedPermuted(d.shape,s,o,!1),f=WB({inputs:{x:d},backend:n,attrs:{shape:p}}),m=ZB({inputs:{x:f},backend:n,attrs:{perm:h}}),g=WB({inputs:{x:m},backend:n,attrs:{shape:c}});return u.push(d),u.push(f),u.push(m),u.forEach((e=>n.disposeIntermediateTensorInfo(e))),g}};var Ij={kernelName:ra,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{indices:r,values:a,denseShape:s,defaultValue:i}=t;if(1!==s.shape.length)throw new Error(`Dense shape must be a vector, saw:\n         ${s.shape}`);if(2!==r.shape.length)throw new Error(`Indices must be a matrix, saw:\n         ${r.shape}`);if(1!==a.shape.length)throw new Error(`Values must be a vector, saw:\n         ${a.shape}`);if(0!==i.shape.length)throw new Error(`Default value must be a scalar, saw:\n        ${i.shape}`);let o=n.readSync(r.dataId),l=n.readSync(a.dataId),u=n.readSync(s.dataId),d=n.readSync(i.dataId)[0],[p,h,c,f,m]=TP(o,r.shape,r.dtype,l,a.dtype,u,d);return[n.makeTensorInfo(h,r.dtype,p),n.makeTensorInfo([h[0]],a.dtype,c),n.makeTensorInfo([f.length],"bool",new Uint8Array(f.map((e=>Number(e))))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}};var Sj={kernelName:aa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:a,newShape:s}=t;if(2!==r.shape.length)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(1!==a.shape.length)throw new Error(`Input shape should be a vector but received shape ${a.shape}`);if(1!==s.shape.length)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.readSync(a.dataId)),o=n.readSync(r.dataId),l=Array.from(n.readSync(s.dataId)),[u,d,p]=_P(o,r.shape,r.dtype,i,l);return[n.makeTensorInfo(d,r.dtype,u),n.makeTensorInfo([p.length],s.dtype,new Int32Array(p))]}};var Nj={kernelName:sa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{data:r,indices:a,segmentIds:s}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");
2if(1!==a.shape.length)throw new Error(`Indices should be a vector but received shape\n              ${a.shape}`);if(1!==s.shape.length)throw new Error(`Segment ids should be a vector but received shape\n              ${s.shape}`);let i=n.readSync(r.dataId),o=n.readSync(a.dataId),l=n.readSync(s.dataId),[u,d]=CP(i,r.shape,r.dtype,o,l,!0);return n.makeTensorInfo(d,r.dtype,u)}};var Tj={kernelName:ia,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n}=e,{data:r,indices:a,segmentIds:s}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(1!==a.shape.length)throw new Error(`Indices should be a vector but received shape\n             ${a.shape}`);if(1!==s.shape.length)throw new Error(`Segment ids should be a vector but received shape\n             ${s.shape}`);let i=n.readSync(r.dataId),o=n.readSync(a.dataId),l=n.readSync(s.dataId),[u,d]=CP(i,r.shape,r.dtype,o,l);return n.makeTensorInfo(d,r.dtype,u)}};var _j={kernelName:oa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=t,{outputShape:o}=r,{sliceRank:l,numUpdates:u,sliceSize:d,strides:p,outputSize:h}=Im.calculateShapes(s,a,o);if("string"===s.dtype){let e=n.bufferSync(a),t=n.bufferSync(s),r=ja.decodeString(n.readSync(i.dataId)[0]),c=kP(e,t,o,h,d,u,l,p,r,false);return n.makeTensorInfo(o,c.dtype,c.values)}let c=new rj(u,l,a.shape.length,s.shape.length,p,[h,1],false),f=n.runWebGLProgram(c,[s,a,i],s.dtype),m=WB({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),m}};var Cj={kernelName:ta,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=r,o=ja.parseAxisParam(i,a.shape)[0],l=Im.prepareSplitSize(a,s,o),u=a.shape.length,d=new Array(u).fill(0),p=a.shape.slice();return l.map((e=>{let t=[...p];t[o]=e;let r=KW({inputs:{x:a},backend:n,attrs:{begin:d,size:t}});return d[o]+=e,r}))}},Ej="return sqrt(x);",$j=RB({opSnippet:Ej,packedOpSnippet:Ej,cpuKernelImpl:EP}),Aj={kernelName:Jr,backendName:"webgl",kernelFunc:$j}
2,Rj=RB({opSnippet:"return x * x;"}),Fj={kernelName:ua,backendName:"webgl",kernelFunc:Rj},Dj="return (a - b) * (a - b);",Mj=FB({opSnippet:Dj,packedOpSnippet:Dj}),Oj={kernelName:la,backendName:"webgl",kernelFunc:Mj};var Lj={kernelName:da,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t;if("string"!==a.dtype)throw new Error("Input must be of datatype string");let s=n.readSync(a.dataId),i=Im.fromUint8ToStringArray(s),o=$P(i,"string",r);return n.makeTensorInfo(a.shape,"string",o)}};var zj={kernelName:_a,backendName:"webgl",kernelFunc:function({inputs:e,attrs:t,backend:n}){let{x:r}=e,a=XP+`\n    return x > 0.0 ? 1.0 : float(${t.alpha});\n  `,s=new KP(r.shape,a);return n.runWebGLProgram(s,[r],r.dtype)}},Pj=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,a=oz(n.length),s=oz(n.length),i="";if(1===r)i="coords * strides + begin";else{let e=0;i=n.map(((t,r)=>(e++,1===n.length?`coords * strides[${r}] + begin[${r}]`:`coords[${e-1}] * strides[${r}] + begin[${r}]`))).join(",")}this.userCode=`\n      ${a} begin = ${a}(${e});\n      ${a} strides = ${a}(${t});\n\n      void main() {\n        ${s} coords = getOutputCoords();\n        setOutput(getX(${i}));\n      }\n    `}};var Bj={kernelName:pa,backendName:"webgl",kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{x:s}=n,{begin:i,end:o,strides:l,beginMask:u,endMask:d,ellipsisMask:p,newAxisMask:h,shrinkAxisMask:c}=a,{finalShapeSparse:f,finalShape:m,isIdentity:g,sliceDim0:y,isSimpleSlice:b,begin:x,end:w,strides:v}=Zf.sliceInfo(s.shape,i,o,l,u,d,p,h,c);if(g)t=WB({inputs:{x:s},backend:r,attrs:{shape:m}});else if(y||b){ja.assert(s.shape.length>=1,(()=>`Input must have rank at least 1, got: ${s.shape.length}`));let e=Zf.computeOutShape(x,w,v),n=KW({inputs:{x:s},backend:r,attrs:{begin:x,size:e}});t=WB({inputs:{x:n},backend:r,attrs:{shape:m}}),r.disposeIntermediateTensorInfo(n)}else if(r.shouldExecuteOnCPU([s])){let e=r.readSync(s.dataId),n=Bo(s.shape,s.dtype,e),a=AP(f,n,v,x);t=r.makeTensorInfo(m,s.dtype,a.values)}else{let e=new Pj(x,v,f);t=r.runWebGLProgram(e,[s],s.dtype)}let k=WB({inputs:{x:t},backend:r,attrs:{shape:m}});return r.disposeIntermediateTensorInfo(t),k}};var Wj={kernelName:ha,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{separator:a,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=r,{data:d,dataSplits:p}=t,h=n.readSync(d.dataId),c=n.readSync(p.dataId),[f,m]=RP(h,c,a,s,i,o,l,u);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",m)]}};var Vj={kernelName:ca,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:a}=r,{input:s,delimiter:i}=t;if("string"!==s.dtype)throw new Error("Input must be of datatype string");if(1!==s.shape.length)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(0!==i.shape.length)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.readSync(s.dataId),l=n.readSync(i.dataId)[0],[u,d,p]=FP(o,l,a),h=d.length;return[n.makeTensorInfo([h,2],"int32",u),n.makeTensorInfo([h],"string",d),n.makeTensorInfo([2],"int32",new Int32Array(p))]}};var Uj={kernelName:fa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:a}=r,{input:s}=t;if("string"!==s.dtype)throw new Error("Input must be of datatype string");if(a<=0)throw new Error("Number of buckets must be at least 1");let i=n.readSync(s.dataId),o=DP(i,a);return n.makeTensorInfo(s.shape,"int32",o)}},Gj=RB({opSnippet:"return tan(x);"}),Hj={kernelName:ga,backendName:"webgl",kernelFunc:Gj},jj=RB({opSnippet:"\n  float e2x = exp(-2.0 * abs(x));\n  return sign(x) * (1.0 - e2x) / (1.0 + e2x);\n"}),qj={kernelName:ya,backendName:"webgl",kernelFunc:jj};var Kj={kernelName:Vr,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{tensor:a,indices:s,updates:i}=t,{}=r,{sliceRank:o,numUpdates:l,sliceSize:u,strides:d,outputSize:p}=Im.calculateShapes(i,s,a.shape),h=[p/u,u];if(0===p)return n.makeTensorInfo(a.shape,s.dtype);let c=WB({inputs:{x:s},backend:n,attrs:{shape:[l,o]}}
2),f=WB({inputs:{x:i},backend:n,attrs:{shape:[l,u]}}),m=WB({inputs:{x:a},backend:n,attrs:{shape:h}}),g=new rj(l,o,c.shape.length,f.shape.length,d,h,!1,!0),y=n.runWebGLProgram(g,[f,c,m],m.dtype),b=WB({inputs:{x:y},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(y),b}},Xj=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[r]*t[r];this.outputShape=n,this.rank=n.length;let r=oz(this.rank),a=function(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(1===t)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let t=0;t<e.length;t++)r.push(`imod(${n[t]}, ${e[t]})`);return r.join()}(e);this.userCode=`\n      void main() {\n        ${r} resRC = getOutputCoords();\n        setOutput(getA(${a}));\n      }\n    `}};function Yj(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{reps:s}=r;if("string"===a.dtype||a.shape.length>5){let e=n.readSync(a.dataId),t="string"===a.dtype?e.map((e=>ja.decodeString(e))):e,r=Bo(a.shape,a.dtype,t),i=OP(r,s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}let i=new Xj(a.shape,s);return n.runWebGLProgram(i,[a],a.dtype)}var Zj={kernelName:ba,backendName:"webgl",kernelFunc:Yj},Jj=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode="\n       void main() {\n         ivec2 coords = getOutputCoords();\n         int batch = coords[0];\n         int elemIdx = coords[1];\n\n         // We compare elements pair-wise within a group of size 2 * inc.\n         // The comparing rule for each group alternates between ascending\n         // and descending. Within each group, we compare each pair at\n         // positions i and i+inc. To decide whether an element at position i\n         // is x0 or x1, we mod it by 2 * inc, if the result is smaller than\n         // inc, it is in the first half of the group, we denote it as x0,\n         // otherwise we denote it as x1.\n         // For example, as shown in the Bitonic top K paper referenced above,\n         // Figure5(a) shows that element[1] is in the\n         // second half of the group when group size is 2, but it is in the\n         // first half of the group when group size is 4.\n\n         bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;\n         int i = isFirstInPair ? elemIdx : elemIdx - inc;\n\n         int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n         int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));\n         float x0 = i0 < n ? getX(batch, i0) : negativeInf;\n         float x1 = i1 < n ? getX(batch, i1) : negativeInf;\n\n         // Denotes which direction indices are in (ascending or descending).\n         bool reverse = imod(elemIdx, 2 * dir) >= dir;\n         bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);\n         if (reverse == isGreater) { // Elements in opposite order of direction\n           int iTemp = i0;\n           i0 = i1;\n           i1 = iTemp;\n         }\n         if (isFirstInPair) {\n            setOutput(float(i0));\n         } else {\n            setOutput(float(i1));\n         }\n       }\n     "}},Qj=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode="\n    void main() {\n         // Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...\n         ivec2 coords = getOutputCoords();\n         int batch = coords[0];\n         int elemIdx = coords[1];\n\n         // The output size is half of the previous size.\n         // If the previous sequence is | | | | _ _ _ _  | | | |  _ _ _ _ (k=4),\n         // we only need to output the indices at positions |, the indices at\n         // positions _ can be thrown away, see Figure5(b) After Phase 2\n         // (Merge phase) in the Bitonic Top K paper referenced above.\n         // For example, the paper shows we only need to output the orange bars.\n         // The output sequence should look like this | | | | | | | |.\n         // Because the sequence is halved, to map the output index back\n         // to the previous sequence to find the corresponding value,\n         // we need to double the index. When we double the index,\n         // we basically interpolate a position, so 2i looks like\n         // | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position\n         // of each 2k positions by - elemIdx % k. E.g. for output at\n         // index 4,5,6,7, we want to get the corresponding element at\n         // original index 8,9,10,11, for output at index 8,9,10,11,\n         // we want to get the corresponding element at original index\n         // 16,17,18,19, so on and so forth.\n\n         int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));\n         int i0 = firstPass == 1 ? i : int(getIndices(batch, i));\n         int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));\n\n         float x0 = getX(batch, i0);\n         float x1 = i1 < n ? getX(batch, i1) : x0;\n\n         setOutput(x0 >= x1 ? float(i0) : float(i1));\n       }\n     "}};function eq(e,t){null!==t&&e.disposeIntermediateTensorInfo(t)}function tq(e){let t=1;for(;t<e;)t*=2;return t}var nq={kernelName:xa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{k:s,sorted:i}=r,o=ut().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"),l=ut().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"),u=a.shape,d=u[u.length-1];if(n.shouldExecuteOnCPU([a])||d<o||s>l){let e=n.readSync(a.dataId),[t,r]=LP(e,u,a.dtype,s,i);return[n.makeTensorInfo(t.shape,t.dtype,t.values),n.makeTensorInfo(r.shape,r.dtype,r.values)]}if(0===s)return u[u.length-1]=0,[n.makeTensorInfo(u,a.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(1===d)return[a,FU({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let p=n.texData.get(a.dataId),h=null!==p&&p.isPacked,c=h?n.unpackTensor(a):a,f=ja.sizeFromShape(u)/d,m=WB({input
2s:{x:c},attrs:{shape:[f,d]},backend:n});h&&eq(n,c);let g=tq(s),y=tq(d),b=null,x=()=>null===b?[m,m]:[m,b],w=(e,t,r)=>{let a=x(),s=new Jj(r),i=[[d],[null===b?1:0],[Number.NEGATIVE_INFINITY],[e],[t]],o=b;b=n.runWebGLProgram(s,a,"int32",i),eq(n,o)};for(let e=1;e<g;e*=2){let t=2*e;for(let n=e;n>=1;n/=2)w(t,n,[f,y])}for(let e=y;e>g;e/=2){let t=x(),r=new Qj([f,e/2]),a=[[d],[null===b?1:0],[g]],s=b;b=n.runWebGLProgram(r,t,"int32",a),eq(n,s);let i=g/2,o=2*i;for(let e=i;e>=1;e/=2)w(o,e,b.shape)}let v=b;b=KW({inputs:{x:b},backend:n,attrs:{begin:0,size:[f,s]}}),eq(n,v);let k=JU({inputs:{x:m,indices:b},backend:n,attrs:{axis:1,batchDims:1}});eq(n,m);let I=u.slice(0,-1);I.push(s),v=b,b=WB({inputs:{x:b},attrs:{shape:I},backend:n}),eq(n,v);let S=k;return k=WB({inputs:{x:k},attrs:{shape:I},backend:n}),eq(n,S),[k,b]}},rq=class{constructor(e,t,n,r,a,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i,o="nearest"===n?1:2;switch(r){case"constant":default:i=1;break;case"reflect":i=2;break;case"wrap":i=3;break;case"nearest":i=4}this.userCode=`\n            float mapCoord(float outCoord, float len) {\n              float inCoord = outCoord;\n              if(${i} == 2) {\n                if (inCoord < 0.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz2 = 2.0 * len;\n                    if (inCoord < sz2) {\n                      inCoord = sz2 * float(int(float(-inCoord / sz2))) +\n                      inCoord;\n                    }\n                    inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;\n                  }\n                } else if (inCoord > len - 1.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz2 = 2.0 * len;\n                    inCoord -= sz2 * float(int(float(inCoord / sz2)));\n                    if (inCoord >= len) {\n                      inCoord = sz2 - inCoord - 1.0;\n                    }\n                  }\n                }\n                return clamp(inCoord, 0.0, len - 1.0);\n              } else if (${i} == 3) {\n                if (inCoord < 0.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz = len - 1.0;\n                    inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);\n                  }\n                } else if (inCoord > len - 1.0) {\n                  if (len <= 1.0) {\n                    inCoord = 0.0;\n                  } else {\n                    float sz = len - 1.0;\n                    inCoord -= len * float(int(float(inCoord / sz)));\n                  }\n                }\n                return clamp(inCoord, 0.0, len - 1.0);\n              } else if (${i} == 4) {\n                return clamp(outCoord, 0.0, len - 1.0);\n              } else {\n                return outCoord;\n              }\n            }\n\n            float readWithFillValue(int batch, int coordY, int coordX,\n              int channel) {\n              float outputValue;\n              if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}
2) {\n                  outputValue = getImage(batch, coordY, coordX, channel);\n              } else {\n                outputValue = float(${a});\n              }\n              return outputValue;\n            }\n\n            void main() {\n              ivec4 coords = getOutputCoords();\n              float outputValue;\n              int batch = coords[0];\n              int x = coords[2];\n              int y = coords[1];\n              int channel = coords[3];\n              float xf = float(x);\n              float yf = float(y);\n              float a1 = getTransforms(batch, 0);\n              float a2 = getTransforms(batch, 1);\n              float a3 = getTransforms(batch, 2);\n              float b1 = getTransforms(batch, 3);\n              float b2 = getTransforms(batch, 4);\n              float b3 = getTransforms(batch, 5);\n              float c1 = getTransforms(batch, 6);\n              float c2 = getTransforms(batch, 7);\n              float projection = c1 * xf + c2 * yf + 1.0;\n              if (projection == 0.0) {\n                outputValue = float(${a});\n              } else {\n                float inX = (a1 * xf + a2 * yf + a3) / projection;\n                float inY = (b1 * xf + b2 * yf + b3) / projection;\n                float mapX = mapCoord(inX, float(${t}));\n                float mapY = mapCoord(inY, float(${e}));\n\n                if (${o} == 1) {\n                  int coordY = int(round(mapY));
2\n                  int coordX = int(round(mapX));\n                  outputValue = readWithFillValue(batch, coordY, coordX,\n                    channel);\n                } else {\n                  float yFloor = floor(mapY);\n                  float xFloor = floor(mapX);\n                  float yCeil = yFloor + 1.0;\n                  float xCeil = xFloor + 1.0;\n                  float valueYFloor = (xCeil - mapX) *\n                  readWithFillValue(batch, int(yFloor), int(xFloor), channel) +\n                  (mapX - xFloor) *\n                  readWithFillValue(batch, int(yFloor), int(xCeil), channel);\n                  float valueYCeil = (xCeil - mapX) *\n                  readWithFillValue(batch, int(yCeil), int(xFloor), channel) +\n                  (mapX - xFloor) *\n                  readWithFillValue(batch, int(yCeil), int(xCeil), channel);\n                  outputValue = (yCeil - mapY) * valueYFloor +\n                  (mapY - yFloor) * valueYCeil;\n                }\n              }\n              setOutput(outputValue);\n            }\n        `}};var aq={kernelName:wa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{image:a,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=r,[d,p,h,c]=a.shape,[f,m]=null!=u?u:[p,h],g=new rq(p,h,i,o,l,[d,f,m,c]);return n.runWebGLProgram(g,[a,s],"float32")}};var sq={kernelName:ka,backendName:"webgl",kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t;VL(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=r.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=PP(i,a,s.shape,s.dtype);return[r.makeTensorInfo(l,s.dtype,o),r.makeTensorInfo([u.length],"int32",u)]}};var iq={kernelName:Ia,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a,o=i.shape.length,l=a.shape[s],u=new Array(o-1),d=0;for(let e=0;e<o;e++)e!==s&&(u[d++]=i.shape[e]);let p=[],h=new Array(o).fill(0),c=i.shape.slice();c[s]=1;let f=new Array(l);for(let e=0;e<f.length;e++){h[s]=e;let t=KW({inputs:{x:i},backend:n,attrs:{begin:h,size:c}}),r=WB({inputs:{x:t},backend:n,attrs:{shape:u}});f[e]=r,p.push(t)}return p.forEach((e=>n.disposeIntermediateTensorInfo(e))),f}},oq=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,a=e.inSize,s=e.numSegments,i=s*Math.ceil(a/n);this.outputShape=[r,i];let o=4*Math.floor(n/4),l=n%4,u="\n        sumValue += dot(values, segFilter);\n    ",d="";a%n>0&&(d=`\n        if (inIdx < 0 || inIdx >= ${a}) {\n          return initializationValue;\n        }\n      `);let p="";a%n>0&&(p=`\n        if (inIdx < 0 || inIdx >= ${a}) {\n          return -1.0;\n        }\n      `),this.userCode=`\n      const float initializationValue = 0.0;\n\n      float getValue(int batch, int inIdx) {\n        ${d}\n        return getX(batch, inIdx);\n      }\n\n      float getSegmentIdAtIndex(int inIdx) {\n        ${p}\n        return getSegmentIds(inIdx);\n      }\n\n      void main() {\n        ivec2 coords = getOutputCoords();\n        int batch = coords[0];\n        int outIdx = coords[1];\n        int inOffset = int(floor(float(outIdx) / float(\n          ${s})) * float(${n}));\n        int currentSeg = int(mod(float(outIdx), float(${s})));\n\n        float sumValue = 0.0;\n\n        for (int i = 0; i < ${o}; i += 4) {\n          int inIdx = inOffset + i;\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            getValue(batch, inIdx + 3)\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0\n          );\n\n          ${u}\n        }\n\n        int inIdx = inOffset + ${o};\n        if (${1===l}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            initializationValue,\n            initializationValue,\n            initializationValue\n          );\n\n          int inIdxSeg = int(getSegmentIdAtIndex(inIdx));\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            0,\n            0,\n            0\n          );\n\n          ${u}\n        } else if (${2===l}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            initializationValue,\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n              0,\n              0\n          );\n\n          ${u}\n        } else if (${3===l}) {\n          vec4 values = vec4(\n            getValue(batch, inIdx),\n            getValue(batch, inIdx + 1),\n            getValue(batch, inIdx + 2),\n            initializationValue\n          );\n\n          vec4 segFilter = vec4(\n            int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,\n            int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,\n            0\n          );\n\n          ${u}\n        }\n        setOutput(sumValue);\n      }\n    `}};var lq,uq,dq,pq={kernelName:Sa,backendName:"webgl",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,segmentIds:s}=t,{numSegments:i}=r,o=a.shape.length,l=[],u=0,d=Im.getAxesPermutation([u],o),p=a;null!=d&&(p=ZB({inputs:{x:a},backend:n,attrs:{perm:d}}),l.push(p),u=Im.getInnerMostAxes(1,o)[0]);let h=Im.segment_util.computeOutShape(p.shape,u,i),c=ja.sizeFromShape([p.shape[u]]),f=WB({input
2s:{x:p},backend:n,attrs:{shape:[-1,c]}});l.push(f);let m=Vs(a.dtype),g=(e,t,r,a,s)=>{let i=e.shape[0],o=e.shape[1],u=Im.segment_util.segOpComputeOptimalWindowSize(o,s),d=new oq({windowSize:u,inSize:o,batchSize:i,numSegments:s},t),p=n.compileAndRun(d,[e,r],a);if(l.push(p),p.shape[1]===s)return p;let h=$H({backend:n,attrs:{start:0,stop:s,step:1,dtype:"float32"}}),c=Yj({inputs:{x:h},backend:n,attrs:{reps:[o/u]}});return l.push(h),l.push(c),g(p,t,c,a,s)},y=WB({inputs:{x:g(f,"unsortedSegmentSum",s,m,i)},backend:n,attrs:{shape:h}}),b=y;if(null!=d){l.push(y);let e=Im.getUndoAxesPermutation(d);b=ZB({inputs:{x:b},backend:n,attrs:{perm:e}})}return l.forEach((e=>n.disposeIntermediateTensorInfo(e))),b}},hq=[tW,rW,sW,oW,dW,cW,fW,mW,vW,kW,SW,TW,CW,$W,RW,MW,OW,PW,BW,WW,GW,YW,ZW,JW,QW,sV,lV,pV,SB,fV,kV,$V,MV,LV,zV,PV,WV,UV,HV,qV,JV,QV,eU,nU,sU,lU,uU,pU,cU,fU,gU,yU,xU,vU,IU,NU,CU,AU,MU,LU,BU,VU,HU,qU,KU,YU,QU,tG,rG,kB,aG,xV,iG,lG,dG,_B,hG,fG,mG,yG,xG,vG,IG,NG,CG,$G,RG,DG,MG,OG,PG,BG,WG,VG,UG,HG,KG,YG,sH,BB,oH,uH,pH,cH,tV,mH,bH,xH,IH,NH,$B,TH,_H,CH,EH,AH,rV,QG,FH,MH,LH,VB,BH,VH,HH,qH,YH,JH,ej,nj,sj,oj,uj,pj,cj,mj,yj,xj,XW,aH,vj,kj,Ij,Sj,Nj,Tj,_j,Cj,Aj,Fj,Oj,Lj,zj,Bj,Wj,Vj,Uj,nH,YB,Hj,qj,Kj,Zj,nq,aq,JB,sq,iq,pq,yH];for(let e of hq)Ba(e);!function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"}(lq||(lq={})),function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"}(uq||(uq={}));var cq={kernelName:$a,backendName:"wasm",setupFunc:function(e){dq=e.wasm.cwrap($a,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s,bias:i,preluActivationWeights:o}=t;if("float32"!==a.dtype||"float32"!==s.dtype)throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:d,leakyreluAlpha:p}=r,h=n.dataIdMap.get(a.dataId).id,c=n.dataIdMap.get(s.dataId).id,f=0;if(null!=i){let e=n.dataIdMap.get(i.dataId);if(1!==e.shape.length)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${e.shape.length}.`);f=e.id}let m=null==o?0:n.dataIdMap.get(o.dataId).id,g=uq[d];if(null==g)throw new Error(`${d} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?a.shape[2]:a.shape[1],b=u?s.shape[1]:s.shape[2],x=du.assertAndGetBroadcastShape(a.shape.slice(0,-2),s.shape.slice(0,-2)),w=n.makeOutput([...x,y,b],a.dtype),v=n.dataIdMap.get(w.dataId).id,k=new Uint8Array(new Int32Array(a.shape).buffer),I=new Uint8Array(new Int32Array(s.shape).buffer);return dq(h,k,a.shape.length,c,I,s.shape.length,l,u,g,f,m,p||0,v),w}};function fq(e,t){let n;return{kernelName:e,backendName:"wasm",setupFunc:function(t){n=t.wasm.cwrap(e,null,["number","number","number"])},kernelFunc:function(e){let{backend:r,inputs:{x:a}}=e,s=r.dataIdMap.get(a.dataId).id,i=r.makeOutput(a.shape,t||a.dtype),o=r.dataIdMap.get(i.dataId).id;return 0===ja.sizeFromShape(i.shape)||n(s,lq[a.dtype],o),i}}}var mq=fq(ft),gq=fq(mt),yq=fq(gt);function bq(e,t,n){let r;return{kernelName:e,backendName:"wasm",setupFunc:function(t){r=t.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:a}=e,{a:s,b:i}=a,o=t.dataIdMap.get(s.dataId).id,l=t.dataIdMap.get(i.dataId).id,u=null!=n?n:s.dtype,d=Im.assertAndGetBroadcastShape(s.shape,i.shape),p=t.makeOutput(d,u);if(0===ja.sizeFromShape(d))return p;let h=new Uint8Array(new Int32Array(s.shape).buffer),c=new Uint8Array(new Int32Array(i.shape).buffer),f=t.dataIdMap.get(p.dataId).id;return r(o,h,s.shape.length,l,c,i.shape.length,lq[s.dtype],f),p}}}var xq,wq=bq(yt);var vq={kernelName:bt,backendName:"wasm",setupFunc:function(e){xq=e.wasm.cwrap(bt,null,["array","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(0===ja.sizeFromShape(r.shape))return r;let a=t.map((e=>n.dataIdMap.get(e.dataId).id)),s=new Uint8Array(new Int32Array(a).buffer),i=n.dataIdMap.get(r.dataId).id;return xq(s,a.length,lq[r.dtype],i),r}};function kq(e){let{inputs:{x:t},backend:n}=e;if("string"===t.dtype)return yi(n.readSync(t.dataId),t.shape,t.dtype);let r=n.makeOutput(t.shape,t.dtype),a=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(a),r}var Iq,Sq={kernelName:An,backendName:"wasm",kernelFunc:kq};function Nq(e){let{inputs:t,backend:n,attrs:r}=e,[a,s]=function(e,t){let n=[],r=[];for(let a=0;a<e.length;++a)1!==e[a]&&n.push(e[a]),1!==e[t[a]]&&r.push(t[a]);for(let e=0;e<r.length;++e){let t=-1;for(let n=0;n<r.length;++n)r[n]>=e&&(-1===t||r[t]>r[n])&&(t=n);r[t]=e}return[n,r]}(t.x.shape,r.perm),i=!0;for(let e=0;e<s.length;e++)s[e]!==e&&(i=!1);let o=function(e,t){let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];return n}(t.x.shape,r.perm),l={dataId:t.x.dataId,shape:a,dtype:t.x.dtype};if(i){let e=kq({inputs:t,backend:n});return e.shape=o,e}let u=n.makeOutput(o,l.dtype),d=n.dataIdMap.get(l.dataId).id,p=n.dataIdMap.get(u.dataId).id,h=new Uint8Array(new Int32Array(s).buffer),c=new Uint8Array(new Int32Array(l.shape).buffer);return Iq(d,c,l.shape.length,lq[l.dtype],p,h,s.length),u}var Tq,_q={kernelName:va,backendName:"wasm",kernelFunc:Nq,setupFunc:function(e){Iq=e.wasm.cwrap(va,null,["number","array","number","number","number","array","number"])}};function Cq(e,t,n){let r=e.shape,a=e.shape.length,s=ja.parseAxisParam(t,r),i=s,o=Im.getAxesPermutation(i,a),l=null,u=!1;if(null!=o){let t=new Array(a);for(let e=0;e<t.length;e++)t[e]=r[o[e]];i=Im.getInnerMostAxes(i.length,a),l=Nq({inputs:{x:e},attrs:{perm:o},backend:n});let s=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==s&&(u=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:u}}var Eq,$q={kernelName:xt,backendName:"wasm",setupFunc:function(e){Tq=e.wasm.cwrap(xt,null,["number, number, number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:d,originalAxes:p,inputWasTransposed:h}=Cq(i,a,t);if(h){l=u,o=t.dataIdMap.get(u.dataId).id}let c=l.shape.length;Im.assertAxesAreInnerMostDims("all",d,c);let[f,m]=Im.computeOutAndReduceShapes(l.shape,d),g=ja.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(0!==ja.sizeFromShape(l.shape)){let e=t.dataIdMap.get(y.dataId).id;Tq(o,g,e)}if(h&&t.disposeData(u.dataId),s){let e=Im.expandShapeToKeepDim(y.shape,p);y.shape=e}return y}};var Aq={kernelName:wt,backendName:"wasm",setupFunc:function(e){Eq=e.wasm.cwrap(wt,null,["number, number, number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:d,originalAxes:p,inputWasTransposed:h}=Cq(i,a,t);if(h){l=u,o=t.dataIdMap.get(u.dataId).id}let c=l.shape.length;Im.assertAxesAreInnerMostDims("any",d,c);let[f,m]=Im.computeOutAndReduceShapes(l.shape,d),g=ja.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(0!==ja.sizeFromShape(l.shape)){let e=t.dataIdMap.get(y.dataId).id;Eq(o,g,e)}if(h&&t.disposeData(u.dataId),s){let e=Im.expandShapeToKeepDim(y.shape,p);y.shape=e}return y}};function Rq(e){let t;return{kernelName:e,backendName:"wasm",setupFunc:function(n){t=n.wasm.cwrap(e,null,["number","number","number","number","number"])},kernelFunc:function(e){let{backend:n,inputs:r,attrs:a}=e,{axis:s}=a,{x:i}=r,o=n.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:p,inputWasTransposed:h}=Cq(i,s,n);if(h){let e=n.dataIdMap.get(d.dataId).id;e!==o&&(u=d,l=e)}let c=u.shape.slice(0,-1),f=n.makeOutput(c,"int32"),m=n.dataIdMap.get(f.dataId).id,g=ja.sizeFromShape(f.shape),y=u.shape[p[0]];return t(l,lq[u.dtype],g,y,m),h&&n.disposeData(d.dataId),f}}}var Fq,Dq=Rq(vt),Mq=Rq(kt),Oq=fq(It),Lq=fq(St),zq=fq(Nt),Pq=bq(_t),Bq=fq(Tt);var Wq,Vq={kernelName:Ct,backendName:"wasm",setupFunc:function(e){Fq=e.wasm.cwrap(Ct,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,d=Im.computePool2DInfo(a.shape,i,o,1,l,u),p=d.filterHeight,h=d.filterWidth,c=d.padInfo.top,f=d.padInfo.right,m=d.padInfo.bottom,g=d.padInfo.left,y=d.strideHeight,b=d.str
2ideWidth,x=d.inChannels;if("channelsLast"!==d.dataFormat)throw new Error(`wasm backend does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);if(1!==d.dilationWidth||1!==d.dilationHeight)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${d.dilationHeight}, ${d.dilationWidth}].`);let w=r.makeOutput(d.outShape,"float32"),v=r.dataIdMap.get(w.dataId).id;return Fq(s,a.shape[0],a.shape[1],a.shape[2],p,h,c,f,m,g,y,b,x,v),w}};var Uq,Gq={kernelName:$t,backendName:"wasm",setupFunc:function(e){Wq=e.wasm.cwrap("AvgPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r,d=Im.computePool3DInfo(a.shape,s,i,1,o,l,u),p=n.makeOutput(d.outShape,a.dtype);return Wq(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left),p}};var Hq,jq={kernelName:At,backendName:"wasm",setupFunc:function(e){Uq=e.wasm.cwrap("AvgPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r,d=Im.computePool3DInfo(s.shape,i,o,1,l,u),p=n.makeOutput(s.shape,s.dtype);return Uq(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left,d.filterDepth,d.filterHeight,d.filterWidth),p}};var qq={kernelName:Et,backendName:"wasm",setupFunc:function(e){Hq=e.wasm.cwrap("AvgPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l}=r,u=Im.computePool2DInfo(s.shape,i,o,1,l),d=n.makeOutput(s.shape,s.dtype);return Hq(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(d.dataId).id,u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.effectiveFilterHeight,u.effectiveFilterWidth,u.padInfo.top,u.padInfo.left,u.filterHeight,u.filterWidth),d}};function Kq(e){let{inputs:t,attrs:n}=e,{x:r}=t,{shape:a}=n,s=ja.sizeFromShape(r.shape),i=ja.inferFromImplicitShape(a,s);return ja.assert(s===ja.sizeFromShape(i),(()=>`new shape: ${i}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`)),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:i,dtype:r.dtype}}var Xq,Yq={kernelName:Rr,backendName:"wasm",kernelFunc:Kq};var Zq={kernelName:Rt,backendName:"wasm",setupFunc:function(e){Xq=e.wasm.cwrap(Rt,null,["number","array","number","number","array","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{a,b:s}=t,{transposeA:i,transposeB:o}=r;if("float32"!==a.dtype||"float32"!==s.dtype)throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=a.shape.length,u=s.shape.length,d=i?a.shape[l-2]:a.shape[l-1],p=o?s.shape[u-1]:s.shape[u-2],h=i?a.shape[l-1]:a.shape[l-2],c=o?s.shape[u-2]:s.shape[u-1],f=a.shape.slice(0,-2),m=s.shape.slice(0,-2),g=ja.sizeFromShape(f),y=ja.sizeFromShape(m),b=du.assertAndGetBroadcastShape(a.shape.slice(0,-2),s.shape.slice(0,-2)).c
2oncat([h,c]);ja.assert(d===p,(()=>`Error in matMul: inner shapes (${d}) and (${p}) of Tensors with shapes ${a.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`));let x=o?[y,c,p]:[y,p,c],w=Kq({inputs:{x:a},backend:n,attrs:{shape:i?[g,d,h]:[g,h,d]}}),v=Kq({inputs:{x:s},backend:n,attrs:{shape:x}}),k=n.dataIdMap.get(w.dataId).id,I=n.dataIdMap.get(v.dataId).id,S=i?w.shape[2]:w.shape[1],N=o?v.shape[1]:v.shape[2],T=Math.max(g,y),_=n.makeOutput([T,S,N],w.dtype),C=n.dataIdMap.get(_.dataId).id,E=new Uint8Array(new Int32Array(w.shape).buffer),$=new Uint8Array(new Int32Array(v.shape).buffer);return Xq(k,E,w.shape.length,I,$,v.shape.length,i,o,C),n.disposeData(w.dataId),n.disposeData(v.dataId),_.shape=b,_}};function Jq(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:a}=e,[s,i]=Zf.parseSliceParams(t,n,r),o=Zf.isSliceContinous(t.shape,s,i),l=a.readSync(t.dataId),u=a.makeOutput(i,t.dtype),d=ja.computeStrides(t.shape),p=a.dataIdMap.get(u.dataId);if(o){let e=Zf.computeFlatOffset(s,d);return"string"===t.dtype?p.stringBytes=l.slice(e,e+ja.sizeFromShape(i)):a.typedArrayFromHeap(u).set(l.subarray(e,e+ja.sizeFromShape(i))),u}if("string"===t.dtype){let e=YA(l,s,i,t.shape,t.dtype);return p.stringBytes=e,u}let h=a.typedArrayFromHeap(u),c=t.shape.length;if(2===c)!function(e,t,n,r,a){let s=0,i=r[0],o=r[1],l=i+a[0];for(let r=i;r<l;r++){let i=r*t+o;n.set(e.subarray(i,i+a[1]),s),s+=a[1]}}(l,d[0],h,s,i);else if(3===c)!function(e,t,n,r,a,s){let i=0,o=a[0],l=a[1],u=a[2],d=o+s[0],p=l+s[1];for(let a=o;a<d;a++)for(let o=l;o<p;o++){let l=a*t+o*n+u;r.set(e.subarray(l,l+s[2]),i),i+=s[2]}}(l,d[0],d[1],h,s,i);else if(4===c)!function(e,t,n,r,a,s,i){let o=0,l=s[0],u=s[1],d=s[2],p=l+i[0],h=u+i[1],c=d+i[2],f=s[3];for(let s=l;s<p;s++)for(let l=u;l<h;l++)for(let u=d;u<c;u++){let d=s*t+l*n+u*r+f;a.set(e.subarray(d,d+i[3]),o),o+=i[3]}}(l,d[0],d[1],d[2],h,s,i);else{let e=YA(l,s,i,t.shape,t.dtype);h.set(e)}return u}var Qq={kernelName:jr,backendName:"wasm",kernelFunc:Jq};var eK,tK={kernelName:Ft,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,crops:i}=r,o=s.reduce(((e,t)=>e*t)),l=Im.getReshaped(a.shape,s,o),u=Im.getPermuted(l.length,s.length),d=Im.getReshapedPermuted(a.shape,s,o),p=Im.getSliceBeginCoords(i,s.length),h=Im.getSliceSize(d,i,s.length),c=Kq({inputs:{x:a},backend:n,attrs:{shape:l}}),f=Nq({inputs:{x:c},backend:n,attrs:{perm:u}}),m=Kq({inputs:{x:f},backend:n,attrs:{shape:d}}),g=Jq({inputs:{x:m},backend:n,attrs:{begin:p,size:h}});return n.disposeData(c.dataId),n.disposeData(f.dataId),n.disposeData(m.dataId),g}};var nK={kernelName:Dt,backendName:"wasm",setupFunc:function(e){eK=e.wasm.cwrap(Dt,null,["number","number","boolean","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,weights:s}=n,{size:i}=r,o=0!==s.shape.reduce(((e,t)=>e*t),1),l=1===a.shape.length?[i]:[a.shape[0],i],u=t.makeOutput(l,s.dtype);function d(e){return t.dataIdMap.get(e.dataId).id}return eK(d(a),i,o,d(s),lq[s.dtype],d(u)),u}},rK=bq(Mt);var aK={kernelName:Lt,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n}=e,{s0:r,s1:a}=t,s=n.typedArrayFromHeap(r),i=n.typedArrayFromHeap(a),o=Im.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeOutput([o.length],"int32",void 0,new Int32Array(o))}};function sK(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,a=r.makeOutput(t.shape,n),s=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(a).set(s),a}var iK,oK={kernelName:zt,backendName:"wasm",kernelFunc:sK},lK=fq(Pt);var uK={kernelName:Bt,backendName:"wasm",setupFunc:function(e){iK=e.wasm.cwrap(Bt,null,["number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{clipValueMin:s,clipValueMax:i}=r,o=n.dataIdMap.get(a.dataId).id,l=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(l.dataId).id;return iK(o,s,i,u),l}};function dK(e){let{inputs:t,backend:n}=e,r=ja.parseAxisParam(e.attrs.axis,t[0].shape)[0],a=t.map((e=>e.shape));Im.assertParamsConsistent(a,r);let s=Im.computeOutShape(t.map((e=>e.shape)),r),i=t.filter((e=>ja.sizeFromShape(e.shape)>0));
2if(1===i.length)return kq({inputs:{x:i[0]},backend:n});let o=n.makeOutput(s,t[0].dtype);if(0===ja.sizeFromShape(s))return o;if("string"===i[0].dtype){let e=i.map((e=>{let t=[-1,ja.sizeFromShape(e.shape.slice(r))];return Kq({inputs:{x:e},backend:n,attrs:{shape:t}})})),a=e.map((e=>({vals:n.readSync(e.dataId),shape:e.shape})));s=Im.computeOutShape(e.map((e=>e.shape)),1);let l=1===e[0].shape[0],u=$$(a,s,t[0].dtype,l),d=Im.computeOutShape(i.map((e=>e.shape)),r);return o.shape=d,n.dataIdMap.get(o.dataId).stringBytes=Im.fromStringArrayToUint8(u),e.forEach((e=>n.disposeData(e.dataId))),o}let l=ja.sizeFromShape(i[0].shape.slice(0,r)),u=0,d=i.map((e=>{let t=ja.sizeFromShape(e.shape.slice(r));return u+=t,t})),p=i.map((e=>n.typedArrayFromHeap(e))),h=n.typedArrayFromHeap(o);for(let e=0;e<l;e++){let t=e*u;for(let n=0;n<p.length;n++){let r=d[n],a=e*r,s=p[n].subarray(a,a+r);h.set(s,t),t+=r}}return o}var pK,hK={kernelName:Ut,backendName:"wasm",kernelFunc:dK};var cK,fK={kernelName:Gt,backendName:"wasm",setupFunc:function(e){pK=e.wasm.cwrap(Gt,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:d,dimRoundingMode:p,dataFormat:h}=n,c=Im.convertConv2DDataFormat(h),f=Im.computeConv2DInfo(a.shape,s.shape,l,u,d,p,!1,c),m=f.filterHeight,g=f.filterWidth,y=f.padInfo.top,b=f.padInfo.right,x=f.padInfo.bottom,w=f.padInfo.left,v=f.dilationHeight,k=f.dilationWidth,I=f.strideHeight,S=f.strideWidth,N=f.inChannels,T=f.outChannels,_="SAME"===f.padInfo.type?1:0;if("channelsLast"!==f.dataFormat)throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let C=r.makeOutput(f.outShape,"float32"),E=r.dataIdMap.get(C.dataId).id;return pK(i,a.shape[0],a.shape[1],a.shape[2],o,m,g,y,b,x,w,_,v,k,I,S,N,T,E),C}};var mK,gK={kernelName:jt,backendName:"wasm",setupFunc:function(e){cK=e.wasm.cwrap(jt,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{dy:a,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,inputShape:d}=r,p=Im.convertConv2DDataFormat(l),h=Im.computeConv2DInfo(d,s.shape,i,1,o,u,!1,p),{batchSize:c,filterHeight:f,filterWidth:m,inChannels:g,inHeight:y,inWidth:b,outChannels:x,outHeight:w,outWidth:v,strideHeight:k,strideWidth:I}=h,S=f-1-h.padInfo.top,N=m-1-h.padInfo.left,T="channelsLast"===h.dataFormat,_=ja.computeStrides(h.inShape),C=ja.computeStrides(a.shape),[E,$,A]=ja.computeStrides(s.shape),R=_[0],F=T?_[1]:_[2],D=T?_[2]:1,M=T?1:_[1],O=C[0],L=T?C[1]:C[2],z=T?C[2]:1,P=T?1:C[1],B=t.makeOutput(h.inShape,"float32"),W=t.dataIdMap.get(B.dataId).id,V=t.dataIdMap.get(a.dataId).id,U=t.dataIdMap.get(s.dataId).id;return cK(V,U,c,f,m,y,b,g,w,v,x,k,I,S,N,E,$,A,R,F,D,M,O,L,z,P,W),B}};var yK,bK={kernelName:qt,backendName:"wasm",setupFunc:function(e){mK=e.wasm.cwrap(qt,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;if("float32"!==a.dtype)throw new Error(`Tensor x must have dtype float32, got ${a.dtype}`);if("float32"!==s.dtype)throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`);let u=Im.computeConv3DInfo(a.shape,s.shape,i,l,o),d=n.makeOutput(u.outShape,a.dtype);return mK(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(d.dataId).id,u.batchSize,u.inDepth,u.inHeight,u.inWidth,u.inChannels,u.outDepth,u.outHeight,u.outWidth,u.outChannels,u.strideDepth,u.strideHeight,u.strideWidth,u.dilationDepth,u.dilationHeight,u.dilationWidth,u.filterDepth,u.filterHeight,u.filterWidth,u.padInfo.front,u.padInfo.top,u.padInfo.left),d}};var xK,wK={kernelName:Kt,backendName:"wasm",setupFunc:function(e){yK=e.wasm.cwrap(Kt,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,dy:s}=t,{strides:i,pad:o,filterShape:l}=r;if("float32"!==a.dtype)throw new Error(`Tensor dy must have dtype float32, got ${a.dtype}`);if("float32"!==s.dtype)throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`);let u=Im.computeConv3DInfo(a.shape,l,i,1,o),d=n.makeOutput(u.filterShape,s.dtype);return yK(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(d.dataId).id,u.batchSize,u.inDepth,u.inHeight,u.inWidth,u.inChannels,u.outDepth,u.outHeight,u.outWidth,u.outChannels,u.strideDepth,u.strideHeight,u.strideWidth,u.dilationDepth,u.dilationHeight,u.dilationWidth,u.filterDepth,u.filterHeight,u.filterWidth,u.padInfo.front,u.padInfo.top,u.padInfo.left),d}};var vK,kK,IK={kernelName:Xt,backendName:"wasm",setupFunc:function(e){xK=e.wasm.cwrap(Xt,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,filter:s}=t,{pad:i,strides:o,inputShape:l}=r;if("float32"!==a.dtype)throw new Error(`Tensor dy must have dtype float32, got ${a.dtype}`);if("float32"!==s.dtype)throw new Error(`Tensor filter must have dtype float32, got ${s.dtype}`);let u=Im.computeConv3DInfo(l,s.shape,o,1,i),d=n.makeOutput(u.inShape,a.dtype);return xK(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(d.dataId).id,u.batchSize,u.inDepth,u.inHeight,u.inWidth,u.inChannels,u.outDepth,u.outHeight,u.outWidth,u.outChannels,u.strideDepth,u.strideHeight,u.strideWidth,u.dilationDepth,u.dilationHeight,u.dilationWidth,u.filterDepth,u.filterHeight,u.filterWidth,u.padInfo.front,u.padInfo.top,u.padInfo.left),d}},SK=fq(Yt),NK=fq(Zt);!function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"}(vK||(vK={}));var TK,_K={kernelName:en,backendName:"wasm",setupFunc:function(e){kK=e.wasm.cwrap(en,null,["number","number","number","number","array","number","number","number","number","number"])},kernelFunc:function(e){let t,{backend:n,inputs:r,attrs:a}=e,{method:s,extrapolationValue:i,cropSize:o}=a,{image:l,boxes:u,boxInd:d}=r,p=u.shape[0],[h,c]=o,f=[p,h,c,l.shape[3]],m=n.dataIdMap.get(l.dataId);"float32"!==l.dtype&&(t=sK({backend:n,inputs:{x:l},attrs:{dtype:"float32"}}),m=n.dataIdMap.get(t.dataId));let g=m.id,y=n.dataIdMap.get(u.dataId).id,b=n.dataIdMap.get(d.dataId).id,x=n.makeOutput(f,"float32"),w=n.dataIdMap.get(x.dataId).id,v=new Uint8Array(new Int32Array(l.shape).buffer);return kK(g,y,b,p,v,h,c,vK[s],i,w),null!=t&&n.disposeData(t.dataId),x}};
2var CK,EK={kernelName:Jt,backendName:"wasm",setupFunc:function(e){TK=e.wasm.cwrap(Jt,null,["number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length;ja.assert("float32"===a.dtype||"int32"===a.dtype,(()=>`cumprod does not support ${a.dtype} tensors in the WASM backend`));let u=Im.getAxesPermutation([s],l),d=a;null!==u&&(d=Nq({inputs:{x:a},attrs:{perm:u},backend:n}));let p=Im.getInnerMostAxes(1,l)[0];Im.assertAxesAreInnerMostDims("cumprod",[p],l);let h=n.makeOutput(d.shape,d.dtype),c=d.shape[p],f=n.dataIdMap.get(d.dataId).id,m=n.dataIdMap.get(h.dataId).id;TK(f,i?1:0,o?1:0,c,m,lq[a.dtype]);let g=h;if(null!==u){g=Nq({inputs:{x:h},attrs:{perm:Im.getUndoAxesPermutation(u)},backend:n}),n.disposeData(d.dataId),n.disposeData(h.dataId)}return g}};var $K,AK={kernelName:Qt,backendName:"wasm",setupFunc:function(e){CK=e.wasm.cwrap(Qt,null,["number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{axis:s,exclusive:i,reverse:o}=r,l=a.shape.length;ja.assert("float32"===a.dtype||"int32"===a.dtype,(()=>`cumsum does not support ${a.dtype} tensors in the WASM backend`));let u=Im.getAxesPermutation([s],l),d=a;null!==u&&(d=Nq({inputs:{x:a},attrs:{perm:u},backend:n}));let p=Im.getInnerMostAxes(1,l)[0];Im.assertAxesAreInnerMostDims("cumsum",[p],l);let h=n.makeOutput(d.shape,d.dtype),c=d.shape[p],f=n.dataIdMap.get(d.dataId).id,m=n.dataIdMap.get(h.dataId).id;CK(f,i?1:0,o?1:0,c,m,lq[a.dtype]);let g=h;if(null!==u){g=Nq({inputs:{x:h},attrs:{perm:Im.getUndoAxesPermutation(u)},backend:n}),n.disposeData(d.dataId),n.disposeData(h.dataId)}return g}};var RK,FK={kernelName:tn,backendName:"wasm",setupFunc:function(e){$K=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,weights:s}=n,{size:i,binaryOutput:o}=r,l=0!==s.shape.reduce(((e,t)=>e*t),1),u=1===a.shape.length?[i]:[a.shape[0],i],d=t.makeOutput(u,s.dtype);function p(e){return t.dataIdMap.get(e.dataId).id}return $K(p(a),new Uint8Array(new Int32Array(a.shape).buffer),a.shape.length,i,l,p(s),lq[s.dtype],o,p(d)),d}};var DK,MK={kernelName:nn,backendName:"wasm",setupFunc:function(e){RK=e.wasm.cwrap(nn,null,["number","number","number","array","number","array","array","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{x:a}=n,{blockSize:s,dataFormat:i}=r,o=a.shape[0],l=("NHWC"===i?a.shape[1]:a.shape[2])*s,u=("NHWC"===i?a.shape[2]:a.shape[3])*s,d=("NHWC"===i?a.shape[3]:a.shape[1])/(s*s),p="NHWC"===i?[o,l,u,d]:[o,d,l,u],h=t.makeOutput(p,"float32"),c=t.dataIdMap.get(a.dataId).id,f=new Uint8Array(new Int32Array(ja.computeStrides(a.shape)).buffer),m=new Uint8Array(new Int32Array(p).buffer),g=new Uint8Array(new Int32Array(ja.computeStrides(p)).buffer),y=t.dataIdMap.get(h.dataId).id;return RK(c,s,"NHWC"===i?1:0,f,a.shape.length-1,m,g,p.length,y),h}};var OK,LK={kernelName:rn,backendName:"wasm",setupFunc:function(e){DK=e.wasm.cwrap(rn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s}=t,i=r.dataIdMap.get(a.dataId).id,o=r.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:d,dimRoundingMode:p}=n,h=null==u?[1,1]:u,c=Im.computeConv2DInfo(a.shape,s.shape,l,h,d,p,!0),f=c.filterHeight,m=c.filterWidth,g=c.padInfo.top,y=c.padInfo.right,b=c.padInfo.bottom,x=c.padInfo.left,w=c.dilationHeight,v=c.dilationWidth,k=c.strideHeight,I=c.strideWidth,S=c.inChannels,N=c.outChannels,T="SAME"===c.padInfo.type?1:0;if("channelsLast"!==c.dataFormat)throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${c.dataFormat}'. Please use 'channelsLast'.`);let _=r.makeOutput(c.outShape,"float32"),C=r.dataIdMap.get(_.dataId).id;return DK(i,a.shape[0],a.shape[1],a.shape[2],o,f,m,g,y,b,x,T,w,v,k,I,S,N,C),_}};var zK,PK={kernelName:on,backendName:"wasm",setupFunc:function(e){OK=e.w
2asm.cwrap("Diag",null,["number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r}=t,a=ja.sizeFromShape(r.shape),s=n.makeOutput([...r.shape,...r.shape],r.dtype);return OK(n.dataIdMap.get(r.dataId).id,lq[r.dtype],a,n.dataIdMap.get(s.dataId).id),s}};var BK,WK={kernelName:ln,backendName:"wasm",setupFunc:function(e){zK=e.wasm.cwrap(ln,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s}=t,{strides:i,pad:o,dilations:l}=r;if(a.dtype!==s.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${a.dtype} and ${s.dtype}`);let u=Im.computeDilation2DInfo(a.shape,s.shape,i,o,"NHWC",l),d=n.makeOutput(u.outShape,a.dtype);return zK(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(d.dataId).id,lq[a.dtype],u.batchSize,u.inChannels,u.inHeight,u.inWidth,u.outHeight,u.outWidth,u.strideHeight,u.strideWidth,u.dilationHeight,u.dilationWidth,u.filterHeight,u.filterWidth,u.padInfo.top,u.padInfo.left),d}};var VK,UK={kernelName:dn,backendName:"wasm",setupFunc:function(e){BK=e.wasm.cwrap(dn,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=r;if(a.dtype!==s.dtype||a.dtype!==i.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${a.dtype}, ${s.dtype}, and ${i.dtype}`);let d=Im.computeDilation2DInfo(a.shape,s.shape,o,l,"NHWC",u),p=n.makeOutput(s.shape,s.dtype);return BK(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(i.dataId).id,n.dataIdMap.get(p.dataId).id,lq[a.dtype],d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.filterHeight,d.filterWidth,d.padInfo.top,d.padInfo.left),p}};var GK,HK={kernelName:un,backendName:"wasm",setupFunc:function(e){VK=e.wasm.cwrap(un,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,filter:s,dy:i}=t,{strides:o,pad:l,dilations:u}=r;if(a.dtype!==s.dtype||a.dtype!==i.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${a.dtype}, ${s.dtype}, and ${i.dtype}`);let d=Im.computeDilation2DInfo(a.shape,s.shape,o,l,"NHWC",u),p=n.makeOutput(a.shape,a.dtype);return VK(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(i.dataId).id,n.dataIdMap.get(p.dataId).id,lq[a.dtype],d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.filterHeight,d.filterWidth,d.padInfo.top,d.padInfo.left),p}},jK=fq(fn);var qK={kernelName:mn,backendName:"wasm",setupFunc:function(e){GK=e.wasm.cwrap(mn,null,["number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n}=e,{dy:r,y:a}=t,s=n.makeOutput(a.shape,"float32"),i=e=>n.dataIdMap.get(e.dataId).id;return GK(i(a),i(r),i(s)),s}},KK=bq(yn,0,"bool"),XK=fq(gn),YK=fq(bn,"float32");function ZK(e){let{inputs:t,attrs:n,backend:r}=e,{input:a}=t,{dim:s}=n,i=a.shape.length,o=a.shape.slice(),l=s;return s<0&&(ja.assert(-(i+1)<=s,(()=>`Axis must be in the interval [${-(i+1)}, ${i}]`)),l=i+s+1),o.splice(l,0,1),Kq({inputs:{x:a},backend:r,attrs:{shape:o}})}var JK={kernelName:xn,backendName:"wasm",kernelFunc:ZK},QK=fq(wn,"float32");function eX(e){let{attrs:{shape:t,value:n},backend:r}=e,{attrs:{dtype:a}}=e;a=a||ja.inferDtype(n);let s=r.makeOutput(t,a);return r.typedArrayFromHeap(s).fill(n),s}var tX,nX={kernelName:kn,backendName:"wasm",kernelFunc:eX};var rX,aX={kernelName:In,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n}=e,{image:r}=t,a=n.makeOutput(r.shape,r.dtype),s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,[o,l,u,d]=r.shape;return tX(s,o,l,u,d,i),a},setupFunc:function(e){tX=e.wasm.cwrap(In,null,["number","number","number","number","number","number"])}},sX=fq(Sn),iX=bq(Nn);var oX,lX={kernelName:Tn,backendName:"wasm",setupFunc:function(e){rX=e.wasm.cwrap(Tn,null,["number","number","number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:a}=r,{x:s,mean:i,variance:o,offset:l,scale:u}=n,d=t.dataIdMap.get(s.dataId).id,p=t.dataIdMap.get(i.dataId).id,h=t.dataIdMap.get(o.dataId).id,c=null!=l?t.dataIdMap.get(l.dataId).id:0,f=null!=u?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(s.shape,s.dtype);if(0===ja.sizeFromShape(s.shape))return m;let g=t.dataIdMap.get(m.dataId).id;return rX(d,p,h,c,f,a,g),m}};var uX,dX={kernelName:Aa,backendName:"wasm",setupFunc:function(e){oX=e.wasm.cwrap(Aa,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:p,dimRoundingMode:h,activation:c,leakyreluAlpha:f}=n,m=Im.computeConv2DInfo(a.shape,s.shape,l,d,u,h),g=uq[c];if(null==g)throw new Error(`${c} activation not yet supported for FusedConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,b=r.dataIdMap.get(s.dataId).id,x=m.outChannels,w=0;if(null!=i){let e=r.dataIdMap.get(i.dataId);if(1!==e.shape.length)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${e.shape.length}.`);if(e.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${e.shape}) does not match the number of output channels (${x})`);w=e.id}let v=m.filterHeight,k=m.filterWidth,I=m.padInfo.top,S=m.padInfo.right,N=m.padInfo.bottom,T=m.padInfo.left,_=m.dilationHeight,C=m.dilationWidth,E=m.strideHeight,$=m.strideWidth,A=m.inChannels,R="SAME"===m.padInfo.type?1:0,F=m.batchSize,D=m.inHeight,M=m.inWidth;
2if("NHWC"!==p)throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let O=r.makeOutput(m.outShape,"float32"),L=r.dataIdMap.get(O.dataId).id,z=null==o?0:r.dataIdMap.get(o.dataId).id;return oX(y,F,D,M,b,v,k,w,I,S,N,T,R,_,C,E,$,A,x,g,z,f||0,L),O}};var pX,hX={kernelName:Ra,backendName:"wasm",setupFunc:function(e){uX=e.wasm.cwrap(Ra,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{x:a,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:d,dataFormat:p,dimRoundingMode:h,activation:c,leakyreluAlpha:f}=n,m=Im.computeConv2DInfo(a.shape,s.shape,l,d,u,h,!0),g=uq[c];if(null==g)throw new Error(`${c} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=r.dataIdMap.get(a.dataId).id,b=r.dataIdMap.get(s.dataId).id,x=m.outChannels,w=0;if(null!=i){let e=r.dataIdMap.get(i.dataId);if(1!==e.shape.length)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${e.shape.length}.`);if(e.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${e.shape}) does not match the number of output channels (${x})`);w=e.id}let v=m.filterHeight,k=m.filterWidth,I=m.padInfo.top,S=m.padInfo.right,N=m.padInfo.bottom,T=m.padInfo.left,_=m.dilationHeight,C=m.dilationWidth,E=m.strideHeight,$=m.strideWidth,A=m.inChannels,R="SAME"===m.padInfo.type?1:0,F=m.batchSize,D=m.inHeight,M=m.inWidth;if("NHWC"!==p)throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let O=r.makeOutput(m.outShape,"float32"),L=r.dataIdMap.get(O.dataId).id,z=null==o?0:r.dataIdMap.get(o.dataId).id;return uX(y,F,D,M,b,v,k,w,I,S,N,T,R,_,C,E,$,A,x,g,z,f||0,L),O}};var cX,fX={kernelName:Cn,backendName:"wasm",setupFunc:function(e){pX=e.wasm.cwrap(Cn,null,["number","number","number","number","number","number","array","number"])},kernelFunc:function(e){let{backend:t,inputs:n}=e,{params:r,indices:a}=n,[s,i,o,l]=Xf.prepareAndValidate(r,a),u=t.makeOutput(s,r.dtype);if(0===i)return u;let d=a.shape,p=d[d.length-1],h=t.dataIdMap.get(r.dataId).id,c=t.dataIdMap.get(a.dataId).id,f=new Uint8Array(new Int32Array(l).buffer),m=t.dataIdMap.get(u.dataId).id;return pX(h,lq[r.dtype],c,i,p,o,f,m),u}};var mX,gX={kernelName:_n,backendName:"wasm",setupFunc:function(e){cX=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{x:a,indices:s}=n,{axis:i,batchDims:o}=r,l=ja.parseAxisParam(i,a.shape)[0],u=t.readSync(s.dataId),d=a.shape[l];for(let e=0;e<u.length;++e){let t=u[e];ja.assert(t<=d-1&&t>=0,(()=>`GatherV2: the index value ${t} is not in [0, ${d-1}]`))}let p=Im.segment_util.collectGatherOpShapeInfo(a,s,l,o),h=Kq({inputs:{x:a},attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]},backend:t}),c=ja.sizeFromShape(s.shape),f=Kq({inputs:{x:s},attrs:{shape:[p.batchSize,c/p.batchSize]},backend:t}),m=[p.batchSize,p.outerSize,c/p.batchSize,p.sliceSize],g=t.makeOutput(m,a.dtype);if(0===ja.sizeFromShape(a.shape))return g;let y=h.shape.length-1,b=t.dataIdMap.get(h.dataId).id,x=t.dataIdMap.get(f.dataId).id,w=t.dataIdMap.get(g.dataId).id,v=new Uint8Array(new Int32Array(ja.computeStrides(h.shape)).buffer),k=new Uint8Array(new Int32Array(ja.computeStrides(m)).buffer);return cX(b,lq[a.dtype],v,y,x,p.batchSize,k,w),t.disposeData(h.dataId),t.disposeData(f.dataId),g.shape=p.outputShape,g}},yX=bq(En,0,"bool"),bX=bq($n,0,"bool"),xX=fq(Dn,"bool"),wX=fq(Mn,"bool"),vX=fq(On,"bool");var kX,IX={kernelName:Ln,backendName:"wasm",setupFunc:function(e){mX=e.wasm.cwrap(Ln,null,["number","number","number","number"])},kernelFunc:function(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,a=r.dataIdMap.get(t.dataId).id,s=r.makeOutput(t.shape,"float32");if(0!==ja.sizeFromShape(t.shape)){let e=r.dataIdMap.get(s.dataId).id;mX(a,lq[t.dtype],n,e)}return s}},SX=bq(zn,0,"bool"),NX=bq(Pn,0,"bool");var TX,_X={kernelName:Bn,backendName:"wasm",setupFunc:function(e){kX=e.wasm.cwrap(Bn,null,["number","number","number","number"])},kernelFunc:function(e){let{attrs:t,backend:n}=e,{start:r,stop:a,num:s}=t,i=Math.floor(s),o=n.makeOutput([i],"float32");return kX(n.dataIdMap.get(o.dataId).id,r,a,i),o}},CX=fq(Wn),EX=fq(Vn),$X=bq(Un,0,"bool"),AX=fq(Gn),RX=bq(Hn,0,"bool"),FX=bq(jn,0,"bool");var DX,MX={kernelName:Xn,backendName:"wasm",setupFunc:function(e){TX=e.w
2asm.cwrap(Xn,null,["number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=r;if("float32"!==a.dtype)throw new Error("LRN error: x must have dtype float32");let u=n.makeOutput(a.shape,a.dtype);return TX(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(u.dataId).id,a.shape[3],s,i,o,l),u}};var OX,LX={kernelName:Yn,backendName:"wasm",setupFunc:function(e){DX=e.wasm.cwrap(Yn,null,["number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:d}=r;if("float32"!==a.dtype||"float32"!==s.dtype||"float32"!==i.dtype)throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let p=n.makeOutput(a.shape,a.dtype);return DX(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(i.dataId).id,n.dataIdMap.get(p.dataId).id,i.shape[3],o,l,u,d),p}};var zX,PX={kernelName:Jn,backendName:"wasm",setupFunc:function(e){OX=e.wasm.cwrap(Jn,null,["number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:d,originalAxes:p,inputWasTransposed:h}=Cq(i,a,t);if(h){l=u,o=t.dataIdMap.get(u.dataId).id}let c=l.shape.length;Im.assertAxesAreInnerMostDims("max",d,c);let[f,m]=Im.computeOutAndReduceShapes(l.shape,d),g=ja.sizeFromShape(m),y=t.makeOutput(f,i.dtype);if(0!==ja.sizeFromShape(l.shape)){let e=t.dataIdMap.get(y.dataId).id;OX(o,lq[i.dtype],g,e)}if(h&&t.disposeData(u.dataId),s){let e=Im.expandShapeToKeepDim(y.shape,p);y.shape=e}return y}},BX=bq(Qn);var WX,VX={kernelName:er,backendName:"wasm",setupFunc:function(e){zX=e.wasm.cwrap(er,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,a=t.x,s=r.dataIdMap.get(a.dataId).id;ja.assert("float32"===a.dtype,(()=>`Error in MaxPool: only float32 input is supported. Got ${a.dtype}.`));let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,d=Im.computePool2DInfo(a.shape,i,o,1,l,u),p=d.filterHeight,h=d.filterWidth,c=d.padInfo.top,f=d.padInfo.right,m=d.padInfo.bottom,g=d.padInfo.left,y=d.dilationHeight,b=d.dilationWidth,x=d.strideHeight,w=d.strideWidth,v=d.inChannels,k=d.outChannels;if("channelsLast"!==d.dataFormat)throw new Error(`wasm backend does not support dataFormat:'${d.dataFormat}'. Please use 'channelsLast'.`);let I=r.makeOutput(d.outShape,"float32"),S=r.dataIdMap.get(I.dataId).id;return zX(s,a.shape[0],a.shape[1],a.shape[2],p,h,c,f,m,g,y,b,x,w,v,k,S),I}};var UX,GX={kernelName:nr,backendName:"wasm",setupFunc:function(e){WX=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=r,d=Im.computePool3DInfo(a.shape,s,i,1,o,l,u),p=n.makeOutput(d.outShape,a.dtype);return WX(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left),p}};var HX,jX={kernelName:rr,backendName:"wasm",setupFunc:function(e){UX=e.wasm.cwrap("MaxPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r,d=Im.computePool3DInfo(s.shape,i,o,1,l,u),p=n.makeOutput(s.shape,s.dtype);return UX(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,d.batchSize,d.inChannels,d.inDepth,d.inHeight,d.inWidth,d.outDepth,d.outHeight,d.outWidth,d.strideDepth,d.strideHeight,d.strideWidth,d.dilationDepth,d.dilationHeight,d.dilationWidth,d.effectiveFilterDepth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.front,d.padInfo.top,d.padInfo.left),p}};var qX,KX={kernelName:tr,backendName:"wasm",setupFunc:function(e){HX=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{dy:a,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=r,d=Im.computePool2DInfo(s.shape,i,o,1,l,u),p=n.makeOutput(s.shape,s.dtype);return HX(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.top,d.padInfo.left),p}};var XX,YX={kernelName:ar,backendName:"wasm",setupFunc:function(e){qX=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{filterSize:s,strides:i,pad:o,includeBatchInIndex:l}=r;ja.assert(4===a.shape.length,(()=>`Error in maxPool: input must be rank 4 but got rank ${a.shape.length}.`));let u=[1,1];ja.assert(Im.eitherStridesOrDilationsAreOne(i,u),(()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`));let d=Im.computePool2DInfo(a.shape,s,i,[1,1],o),p=n.makeOutput(d.outShape,a.dtype),h=n.makeOutput(d.outShape,"int32");return qX(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(p.dataId).id,n.dataIdMap.get(h.dataId).id,lq[a.dtype],l,d.batchSize,d.inChannels,d.inHeight,d.inWidth,d.outHeight,d.outWidth,d.strideHeight,d.strideWidth,d.dilationHeight,d.dilationWidth,d.effectiveFilterHeight,d.effectiveFilterWidth,d.padInfo.top,d.padInfo.left),[p,h]}};var ZX,JX={kernelName:sr,backendName:"wasm",setupFunc:function(e){XX=e.wasm.cwrap(sr,null,["number, number, number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:p,originalAxes:h,inputWasTransposed:c}=Cq(i,a,t),f=p;if(c){let e=t.dataIdMap.get(d.dataId).id;e!==o&&(u=d,l=e,f=Im.getInnerMostAxes(f.length,u.shape.length))}Im.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=Im.computeOutAndReduceShapes(u.shape,f),y=ja.sizeFromShape(g),b=u;"float32"!==u.dtype&&(b=sK({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(b.dataId).id);let x=t.makeOutput(m,"float32");if(0!==ja.sizeFromShape(u.shape)){let e=t.dataIdMap.get(x.dataId).id;XX(l,y,e)}if(c&&t.disposeData(d.dataId),s){let e=Im.expandShapeToKeepDim(x.shape,h);x.shape=e}return"float32"!==u.dtype&&t.disposeData(b.dataId),x}};var QX,eY,tY={kernelName:ir,backendName:"wasm",setupFunc:function(e){ZX=e.wasm.cwrap(ir,null,["number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:p,originalAxes:h,inputWasTransposed:c}=Cq(i,a,t);if(c){let e=t.dataIdMap.get(d.dataId).id;e!==o&&(u=d,l=e)}let f=u.shape.length;Im.assertAxesAreInnerMostDims("min",p,f);let[m,g]=Im.computeOutAndReduceShapes(u.shape,p),y=ja.sizeFromShape(g),b=t.makeOutput(m,u.dtype);if(0!==ja.sizeFromShape(u.shape)){let e=t.dataIdMap.get(b.dataId).id;ZX(l,lq[i.dtype],y,e)}if(c&&t.disposeData(d.dataId),s){let e=Im.expandShapeToKeepDim(b.shape,h);b.shape=e}return b}},nY=bq(or);!function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"}(QX||(QX={}));var rY,aY={kernelName:lr,backendName:"wasm",kernelFunc:function(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:a}}=e,s=r.map(((e,n)=>e[0]+t.shape[n]+e[1])),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=r.map((e=>e[0])),p=r.map((e=>e[1])),h=new Uint8Array(new Int32Array(d).buffer),c=new Uint8Array(new Int32Array(p).buffer);return eY(i,u,t.shape.length,lq[t.dtype],h,c,QX[a],l),o}
2,setupFunc:function(e){eY=e.wasm.cwrap(lr,null,["number","array","number","number","array","array","number","number"])}};function sY(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,a=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[r],l=ja.sizeFromShape(n.shape)/o;return 0===ja.sizeFromShape(s.shape)||rY(a,i,o,l),s}var iY,oY={kernelName:na,backendName:"wasm",setupFunc:function(e){rY=e.wasm.cwrap(na,null,["number","number","number","number"])},kernelFunc:sY};var lY,uY={kernelName:dr,backendName:"wasm",setupFunc:function(e){iY=e.wasm.cwrap(dr,null,["number","number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{logits:a}=t,{numSamples:s,seed:i,normalized:o}=r;if("float32"!==a.dtype)throw new Error(`Tensor logits must have dtype float32, got ${a.dtype}`);let l=o?a:sY({inputs:{logits:a},backend:n,attrs:{dim:a.shape.length-1}}),[u,d]=l.shape,p=n.makeOutput([u,s],"int32");return iY(n.dataIdMap.get(l.dataId).id,u,d,s,i,n.dataIdMap.get(p.dataId).id),o||n.disposeData(l.dataId),p}},dY=bq(ur),pY=bq(pr),hY=fq(hr);function cY(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],a=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:a,pSelectedScores:s,pValidOutputs:i}}var fY,mY={kernelName:fr,backendName:"wasm",setupFunc:function(e){lY=e.wasm.cwrap(fr,"number",["number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i}=r,{boxes:o,scores:l}=n,u=t.dataIdMap.get(o.dataId).id,d=t.dataIdMap.get(l.dataId).id,p=lY(u,d,s,a,i),{pSelectedIndices:h,selectedSize:c,pSelectedScores:f,pValidOutputs:m}=cY(t,p);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([c],"int32",h)}};var gY,yY={kernelName:mr,backendName:"wasm",setupFunc:function(e){fY=e.wasm.cwrap(mr,"number",["number","number","number","number","number","bool"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=r,{boxes:l,scores:u}=n,d=t.dataIdMap.get(l.dataId).id,p=t.dataIdMap.get(u.dataId).id,h=fY(d,p,s,a,i,o),{pSelectedIndices:c,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=cY(t,h);return t.wasm._free(m),[t.makeOutput([f],"int32",c),t.makeOutput([],"int32",g)]}};var bY,xY={kernelName:gr,backendName:"wasm",setupFunc:function(e){gY=e.wasm.cwrap(gr,"number",["number","number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:a,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=r,{boxes:l,scores:u}=n,d=t.dataIdMap.get(l.dataId).id,p=t.dataIdMap.get(u.dataId).id,h=gY(d,p,s,a,i,o),{pSelectedIndices:c,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=cY(t,h);return t.wasm._free(g),[t.makeOutput([f],"int32",c),t.makeOutput([f],"float32",m)]}},wY=bq(cr,0,"bool");var vY={kernelName:br,backendName:"wasm",setupFunc:function(e){bY=e.wasm.cwrap(br,null,["number","number","number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{indices:a}=t,{dtype:s,depth:i,onValue:o,offValue:l}=r,u=n.makeOutput([...a.shape,i],s),d=n.dataIdMap.get(u.dataId).id,p=n.dataIdMap.get(a.dataId).id;return bY(p,i,o,l,d),u}};var kY={kernelName:yr,backendName:"wasm",kernelFunc:function(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}};var IY,SY={kernelName:xr,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{axis:a}=r;if(1===t.length)return ZK({inputs:{input:t[0]},backend:n,attrs:{dim:a}});let s=t[0].shape,i=t[0].dtype;t.forEach((e=>{ja.assertShapesMatch(s,e.shape,"All tensors passed to stack must have matching shapes"),ja.assert(i===e.dtype,(()=>"All tensors passed to stack must have matching dtypes"))}));let o=[],l=dK({inputs:t.map((e=>{let t=ZK({inputs:{input:e},backend:n,attrs:{dim:a}});return o.push(t),t})),backend:n,attrs:{axis:a}});return o.forEach((e=>n.disposeData(e.dataId))),l}};var NY,TY={kernelName:wr,backendName:"wasm",kernelFunc:function(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:a}}=e,s=r.map(((e,n)=>e[0]+t.shape[n]+e[1]));
2if(0===ja.sizeFromShape(t.shape))return eX({backend:n,attrs:{shape:s,value:a,dtype:t.dtype}});let i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),d=r.map((e=>e[0])),p=r.map((e=>e[1])),h=new Uint8Array(new Int32Array(d).buffer),c=new Uint8Array(new Int32Array(p).buffer);return IY(i,u,t.shape.length,lq[t.dtype],h,c,a,l),o},setupFunc:function(e){IY=e.wasm.cwrap(wr,null,["number","array","number","number","array","array","number","number"])}},_Y=bq(kr);var CY,EY={kernelName:Ir,backendName:"wasm",setupFunc:function(e){NY=e.wasm.cwrap(Ir,null,["number","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n}=e,{x:r,alpha:a}=t,s=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(a.dataId).id,o=s,l=r,u=l;"float32"!==l.dtype&&(u=sK({backend:n,inputs:{x:r},attrs:{dtype:"float32"}}),o=n.dataIdMap.get(u.dataId).id);let d=n.makeOutput(r.shape,"float32"),p=n.dataIdMap.get(d.dataId).id;return NY(o,i,p),"float32"!==l.dtype&&n.disposeData(u.dataId),d}};var $Y,AY={kernelName:Sr,backendName:"wasm",setupFunc:function(e){CY=e.wasm.cwrap(Sr,null,["number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:p,originalAxes:h,inputWasTransposed:c}=Cq(i,a,t),f=p;if(c){let e=t.dataIdMap.get(d.dataId).id;e!==o&&(u=d,l=e,f=Im.getInnerMostAxes(f.length,u.shape.length))}Im.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=Im.computeOutAndReduceShapes(u.shape,f),y=ja.sizeFromShape(g),b=t.makeOutput(m,u.dtype);if(0!==ja.sizeFromShape(u.shape)){let e=t.dataIdMap.get(b.dataId).id;CY(l,y,lq[b.dtype],e)}if(c&&t.disposeData(d.dataId),s){let e=Im.expandShapeToKeepDim(b.shape,h);b.shape=e}return b}},RY={kernelName:Cr,backendName:"wasm",kernelFunc:e=>{let{backend:t,attrs:n}=e,{start:r,stop:a,step:s,dtype:i}=n,o=VA(r,a,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l}},FY=bq(hn),DY=fq($r),MY=fq(Ar),OY=fq(Lr);var LY,zY={kernelName:Mr,backendName:"wasm",setupFunc:function(e){$Y=e.wasm.cwrap(Mr,null,["number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let t,{backend:n,inputs:r,attrs:a}=e,{images:s}=r,{alignCorners:i,halfPixelCenters:o,size:l}=a,[u,d]=l,[p,h,c,f]=s.shape,m=[p,u,d,f],g=n.dataIdMap.get(s.dataId);"float32"!==g.dtype&&(t=sK({backend:n,inputs:{x:s},attrs:{dtype:"float32"}}),g=n.dataIdMap.get(t.dataId));let y=g.id,b=n.makeOutput(m,"float32");if(0===ja.sizeFromShape(s.shape))return b;let x=n.dataIdMap.get(b.dataId).id;return $Y(y,p,h,c,f,u,d,i?1:0,o?1:0,x),null!=t&&n.disposeData(t.dataId),b}};var PY,BY={kernelName:Or,backendName:"wasm",setupFunc:function(e){LY=e.wasm.cwrap(Or,null,["number","number","number","array","array","boolean"])},kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{images:s,dy:i}=n,{alignCorners:o}=a,l=r.makeOutput(s.shape,"float32"),u=r.dataIdMap.get(s.dataId);return"float32"!==u.dtype&&(t=sK({backend:r,inputs:{x:s},attrs:{dtype:"float32"}}),u=r.dataIdMap.get(t.dataId)),LY(r.dataIdMap.get(s.dataId).id,r.dataIdMap.get(i.dataId).id,r.dataIdMap.get(l.dataId).id,new Uint8Array(new Int32Array(s.shape).buffer),new Uint8Array(new Int32Array(i.shape).buffer),o),null!=t&&r.disposeData(t.dataId),l}};var WY,VY={kernelName:Fr,backendName:"wasm",setupFunc:function(e){PY=e.wasm.cwrap(Fr,null,["number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{images:a}=n,{alignCorners:s,halfPixelCenters:i,size:o}=r,[l,u]=o,[d,p,h,c]=a.shape,f=[d,l,u,c],m=t.makeOutput(f,"float32");if(0===ja.sizeFromShape(a.shape))return m;let g,y=t.dataIdMap.get(a.dataId);"float32"!==y.dtype&&(g=sK({backend:t,inputs:{x:a},attrs:{dtype:"float32"}}),y=t.dataIdMap.get(g.dataId));let b=y.id,x=t.dataIdMap.get(m.dataId).id;return PY(b,d,p,h,c,l,u,s?1:0,i?1:0,x),null!=g&&t.disposeData(g.dataId),m}};var UY,GY={kernelName:Dr,backendName:"wasm",setupFunc:function(e){WY=e.wasm.cwrap(Dr,null,["number","number","number","array","array","boolean"])},kernelFunc:function(e){let t,{inputs:n,backend:r,attrs:a}=e,{images:s,dy:i}=n,{alignCorners:o}=a,l=r.makeOutput(s.shape,"float32"),u=r.dataIdMap.get(s.dataId);return"float32"!==u.dtype&&(t=sK({backend:r,inputs:{x:s},attrs:{dtype:"float32"}}),u=r.dataIdMap.get(t.dataId)),WY(r.dataIdMap.get(s.dataId).id,r.dataIdMap.get(i.dataId).id,r.dataIdMap.get(l.dataId).id,new Uint8Array(new Int32Array(s.shape).buffer),new Uint8Array(new Int32Array(i.shape).buffer),o),null!=t&&r.disposeData(t.dataId),l}};var HY,jY={kernelName:zr,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{dims:s}=r,i=ja.parseAxisParam(s,a.shape);
2if(0===a.shape.length)return kq({inputs:{x:a},backend:n});let o=n.makeOutput(a.shape,a.dtype),l=n.dataIdMap.get(a.dataId).id,u=n.dataIdMap.get(o.dataId).id,d=new Uint8Array(new Int32Array(i).buffer),p=new Uint8Array(new Int32Array(a.shape).buffer);UY(l,d,i.length,p,a.shape.length,u);let h=Kq({inputs:{x:o},attrs:{shape:a.shape},backend:n});return n.disposeData(o.dataId),h},setupFunc:function(e){UY=e.wasm.cwrap(zr,null,["number","array","number","array","number","number"])}};var qY,KY={kernelName:Ea,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{image:a}=t,{radians:s,fillValue:i,center:o}=r,l=n.makeOutput(a.shape,a.dtype),u=n.dataIdMap.get(a.dataId).id,d=n.dataIdMap.get(l.dataId).id,[p,h,c,f]=a.shape,[m,g]=Im.getImageCenter(o,h,c),y="number"==typeof i?[i,i,i,0===i?0:255]:[...i,255],b=new Uint8Array(new Int32Array(y).buffer);return HY(u,p,h,c,f,s,m,g,b,y.length,d),l},setupFunc:function(e){HY=e.wasm.cwrap(Ea,null,["number","number","number","number","number","number","number","number","array","number","number"])}},XY=fq(Pr),YY=fq(Br);var ZY,JY={kernelName:Wr,backendName:"wasm",setupFunc:function(e){qY=e.wasm.cwrap(Wr,null,["number","number","number","number","number","number","array","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{indices:a,updates:s}=n,{shape:i}=r,o=t.makeOutput(i,s.dtype);if(0===ja.sizeFromShape(i))return o;let{sliceRank:l,numUpdates:u,sliceSize:d,strides:p,outputSize:h}=fh.calculateShapes(s,a,i),c=t.dataIdMap.get(a.dataId).id,f=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(p).buffer),g=t.dataIdMap.get(o.dataId).id;return qY(c,f,lq[s.dtype],l,u,d,m,h,g),o}};var QY,eZ={kernelName:Ur,backendName:"wasm",setupFunc:function(e){ZY=e.wasm.cwrap(Ur,null,["number","number","number","number","number","number","bool","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:a,values:s}=t,{side:i}=r;if(a.dtype!==s.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${a.dtype} and ${s.dtype}`);let o=n.makeOutput(s.shape,"int32");function l(e){return n.dataIdMap.get(e.dataId).id}return ZY(l(a),l(s),a.shape[0],a.shape[1],s.shape[1],lq[a.dtype],"left"===i,l(o)),o}};var tZ,nZ={kernelName:Gr,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n}=e,{condition:r,t:a,e:s}=t,i=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(a.dataId).id,l=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(a.shape,a.dtype),d=n.dataIdMap.get(u.dataId).id,p=r.shape.length,h=a.shape.length,c=0===p||p>1||1===h?1:ja.sizeFromShape(a.shape.slice(1));return QY(i,o,l,c,d),u},setupFunc:function(e){QY=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}},rZ=fq(Hr);var aZ={kernelName:"Sigmoid",backendName:"wasm",setupFunc:function(e){tZ=e.wasm.cwrap(Yr,null,["number","number"])},kernelFunc:function(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(a.dataId).id;return 0===ja.sizeFromShape(a.shape)||tZ(r,s),a}},sZ=fq(Xr),iZ=fq(qr),oZ=fq(Kr),lZ=fq(Zr);var uZ,dZ={kernelName:ea,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,{blockShape:s,paddings:i}=r,o=ja.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let e=1+s.length;e<a.shape.length;++e)l.push([0,0]);let u=TY.kernelFunc({inputs:{x:a},backend:n,attrs:{paddings:l,constantValue:0}}),d=Im.getReshaped(u.shape,s,o,!1),p=Im.getPermuted(d.length,s.length,!1),h=Im.getReshapedPermuted(u.shape,s,o,!1),c=Kq({inputs:{x:u},backend:n,attrs:{shape:d}}),f=Nq({inputs:{x:c},backend:n,attrs:{perm:p}}),m=Kq({inputs:{x:f},backend:n,attrs:{shape:h}});return n.disposeData(u.dataId),n.disposeData(c.dataId),n.disposeData(f.dataId),m}};var pZ,hZ={kernelName:ra,backendName:"wasm",setupFunc:function(e){uZ=e.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])},kernelFunc:function(e){let t,{backend:n,inputs:r}=e,{indices:a,values:s,denseShape:i,defaultValue:o}=r,l=a.shape[0],u=a.shape[1],d=n.readSync(i.dataId)[0],p=[l+d,u],h=n.dataIdMap.get(a.dataId).id,c=n.dataIdMap.get(s.dataId).id,f=n.dataIdMap.get(o.dataId).id,m=n.makeOutput(p,a.dtype),g=n.dataIdMap.get(m.dataId).id,y=n.makeOutput(p.slice(0,1),s.dtype),b=n.dataIdMap.get(y.dataId).id,x=n.makeOutput([d],"bool"),w=n.dataIdMap.get(x.dataId).id,v=n.makeOutput([l],a.dtype),k=n.dataIdMap.get(v.dataId).id,I=n.makeOutput([4],"int32"),S=n.dataIdMap.get(I.dataId).id,N=uZ(h,c,lq[s.dtype],l,d,u,f,g,b,w,k,S),T=n.readSync(I.dataId);switch(T[0]){case 1:t=Im.getSparseFillEmptyRowsIndicesDenseShapeMismatch(T[1]);break;case 2:t=Im.getSparseFillEmptyRowsNegativeIndexErrorMessage(T[1],T[2]);break;case 3:t=Im.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(T[1],T[2],T[3]);break;default:t=""}if(n.disposeData(I.dataId),t)throw n.disposeData(m.dataId),n.disposeData(y.dataId),n.disposeData(x.dataId),n.disposeData(v.dataId),new Error(t);let _=m,C=y;return N!==p[0]&&(_=Jq({inputs:{x:m},attrs:{begin:0,size:[N,u]},backend:n}),C=Jq({inputs:{x:y},attrs:{begin:0,size:N},backend:n}),n.disposeData(m.dataId),n.disposeData(y.dataId)),[_,C,x,v]}};var cZ,fZ={kernelName:aa,backendName:"wasm",setupFunc:function(e){pZ=e.wasm.cwrap(aa,null,["number","number","number","number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n}=e,{inputIndices:r,inputShape:a,newShape:s}=n;if(2!==r.shape.length)throw new Error(`Input indices should be a matrix but received shape\n        ${r.shape}`);if(1!==a.shape.length)throw new Error(`Input shape should be a vector but received shape\n        ${a.shape}`);if(1!==s.shape.length)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(r.dataId).id,o=t.dataIdMap.get(a.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=r.shape[0],d=ja.sizeFromShape(s.shape),p=t.makeOutput([u,d],r.dtype),h=t.dataIdMap.get(p.dataId).id,c=t.makeOutput([d],s.dtype),f=t.dataIdMap.get(c.dataId).id,m=t.makeOutput([3],"int32"),g=t.dataIdMap.get(m.dataId).id;pZ(i,o,l,u,h,f,g);let y,b=t.readSync(m.dataId);switch(b[0]){case 0:y=Im.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(b[1],b[2]);break;case 1:y=Im.getSparseReshapeNegativeOutputDimErrorMessage(b[1],b[2]);break;case 2:y=Im.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let e=Array.from(t.readSync(a.dataId)),n=Array.from(t.readSync(c.dataId));y=Im.getSparseReshapeInputOutputMultipleErrorMessage(e,n);break}case 4:{let e=Array.from(t.readSync(a.dataId)),n=Array.from(t.readSync(c.dataId));y=Im.getSparseReshapeInputOutputMismatchErrorMessage(e,n);break}default:y=""}if(t.disposeData(m.dataId),y)throw t.disposeData(p.dataId),t.dis
2poseData(c.dataId),new Error(y);return[p,c]}};function mZ(e){cZ=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function gZ(e,t){let{backend:n,inputs:r}=e,{data:a,indices:s,segmentIds:i}=r,o=s.shape[0],l=n.readSync(i.dataId,o-1,o)[0],u=o>0?l+1:0;if(u<0)throw new Error(Im.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=a.shape.slice();d[0]=u;let p=n.dataIdMap.get(a.dataId).id,h=n.dataIdMap.get(s.dataId).id,c=n.dataIdMap.get(i.dataId).id,f=n.makeOutput(d,a.dtype),m=n.dataIdMap.get(f.dataId).id,g=n.makeOutput([4],"int32"),y=n.dataIdMap.get(g.dataId).id;cZ(p,lq[a.dtype],a.shape[0],h,c,m,y,t,0);let b,x=n.readSync(g.dataId);switch(x[0]){case 0:b=Im.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break;case 1:b=Im.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break;case 2:b=Im.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(x[1],x[2]);break;case 3:b=Im.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x[1],x[2],x[3]);break;default:b=""}if(n.disposeData(g.dataId),b)throw n.disposeData(f.dataId),new Error(b);return f}var yZ={kernelName:sa,backendName:"wasm",setupFunc:mZ,kernelFunc:function(e){return gZ(e,!0)}};var bZ,xZ={kernelName:ia,backendName:"wasm",setupFunc:mZ,kernelFunc:function(e){return gZ(e,!1)}};var wZ={kernelName:oa,backendName:"wasm",setupFunc:function(e){bZ=e.wasm.cwrap(oa,null,["number","number","number","number","number","number","number","number","array","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{sparseIndices:a,sparseValues:s,defaultValue:i}=n,{outputShape:o}=r,l=t.makeOutput(o,i.dtype);if(0===ja.sizeFromShape(o))return l;let{sliceRank:u,numUpdates:d,sliceSize:p,strides:h,outputSize:c}=Im.calculateShapes(s,a,o),f=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(i.dataId).id,y=new Uint8Array(new Int32Array(h).buffer),b=t.dataIdMap.get(l.dataId).id;return bZ(f,m,s.shape.length,g,lq[i.dtype],u,d,p,y,c,b),l}};var vZ,kZ={kernelName:ta,backendName:"wasm",kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{x:a}=t,{numOrSizeSplits:s,axis:i}=n,o=ja.parseAxisParam(i,a.shape)[0],l=Im.prepareSplitSize(a,s,o),u=new Array(a.shape.length).fill(0),d=a.shape.slice();return l.map((e=>{let t=[...d];t[o]=e;let n=Jq({inputs:{x:a},attrs:{begin:u,size:t},backend:r});return u[o]+=e,n}))}},IZ=fq(Jr),SZ=fq(ua),NZ=bq(la);var TZ,_Z={kernelName:_a,backendName:"wasm",setupFunc:function(e){vZ=e.wasm.cwrap(_a,null,["number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:a}=r,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return vZ(i,a,lq[s.dtype],l),o}};var CZ={kernelName:pa,backendName:"wasm",setupFunc:function(e){TZ=e.wasm.cwrap(pa,null,["number","array","number","array","array","array","array","array","number","number"])},kernelFunc:function(e){let t,{backend:n,inputs:r,attrs:a}=e,{x:s}=r,{begin:i,end:o,strides:l,beginMask:u,endMask:d,ellipsisMask:p,newAxisMask:h,shrinkAxisMask:c}=a,{finalShapeSparse:f,finalShape:m,isIdentity:g,sliceDim0:y,isSimpleSlice:b,begin:x,end:w,strides:v}=Zf.sliceInfo(s.shape,i,o,l,u,d,p,h,c);if(g)t=Kq({inputs:{x:s},backend:n,attrs:{shape:m}});else if(y||b){ja.assert(s.shape.length>=1,(()=>`Input must have rank at least 1, got: ${s.shape.length}`));let e=Zf.computeOutShape(x,w,v),r=Jq({inputs:{x:s},backend:n,attrs:{begin:x,size:e}});t=Kq({inputs:{x:r},backend:n,attrs:{shape:m}}),n.disposeData(r.dataId)}else{let e=n.makeOutput(f,"float32"),r=n.dataIdMap.get(s.dataId).id,a=new Uint8Array(new Int32Array(ja.computeStrides(s.shape)).buffer),i=new Uint8Array(new Int32Array(x).buffer),o=new Uint8Array(new Int32Array(w).buffer),l=new Uint8Array(new Int32Array(v).buffer),u=new Uint8Array(new Int32Array(f).buffer),d=new Uint8Array(new Int32Array(ja.computeStrides(f)).buffer),p=n.dataIdMap.get(e.dataId).id;TZ(r,a,s.shape.length,i,o,l,u,d,f.length,p),t=Kq({inputs:{x:e},backend:n,attrs:{shape:m}}),n.disposeData(e.dataId)}return t}};var EZ={kernelName:ha,backendName:"wasm",kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{data:a,dataSplits:s}=n,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:d,preserveShortSequences:p}=r,h=t.readSync(a.dataId),c=t.readSync(s.dataId),[f,m]=cR(h,c,i,o,l,u,d,p),g=t.makeOutput([f.length],"string");
2t.dataIdMap.get(g.dataId).stringBytes=f;let y=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(y).set(m),[g,y]}};var $Z={kernelName:ca,backendName:"wasm",kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{input:a,delimiter:s}=n,{skipEmpty:i}=r,o=t.readSync(a.dataId),l=t.readSync(s.dataId),[u,d,p]=mR(o,l[0],i),h=d.length,c=t.makeOutput([h,2],"int32");t.typedArrayFromHeap(c).set(u);let f=t.makeOutput([h],"string");t.dataIdMap.get(f.dataId).stringBytes=d;let m=t.makeOutput([2],"int32");return t.typedArrayFromHeap(m).set(p),[c,f,m]}};var AZ,RZ={kernelName:fa,backendName:"wasm",kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{input:a}=n,{numBuckets:s}=r,i=gR(t.readSync(a.dataId),s),o=t.makeOutput(a.shape,"int32");return t.typedArrayFromHeap(o).set(i),o}},FZ=bq(ma);var DZ,MZ={kernelName:Qr,backendName:"wasm",setupFunc:function(e){AZ=e.wasm.cwrap(Qr,null,["number","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{axis:a,keepDims:s}=r,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:d,axes:p,originalAxes:h,inputWasTransposed:c}=Cq(i,a,t),f=p;if(c){let e=t.dataIdMap.get(d.dataId).id;e!==o&&(u=d,l=e,f=Im.getInnerMostAxes(f.length,u.shape.length))}Im.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=Im.computeOutAndReduceShapes(u.shape,f),y=ja.sizeFromShape(g),b=t.makeOutput(m,u.dtype);if(0!==ja.sizeFromShape(u.shape)){let e=t.dataIdMap.get(b.dataId).id;AZ(l,y,lq[b.dtype],e)}if(c&&t.disposeData(d.dataId),s){let e=Im.expandShapeToKeepDim(b.shape,h);b.shape=e}return b}},OZ=fq(ga),LZ=fq(ya);var zZ,PZ={kernelName:Vr,backendName:"wasm",setupFunc:function(e){DZ=e.wasm.cwrap(Vr,null,["number","number","number","number","number","number","array","number","number","number"])},kernelFunc:function(e){let{backend:t,inputs:n,attrs:r}=e,{tensor:a,indices:s,updates:i}=n,{}=r,o=t.makeOutput(a.shape,a.dtype);if(0===ja.sizeFromShape(a.shape))return o;let{sliceRank:l,numUpdates:u,sliceSize:d,strides:p,outputSize:h}=fh.calculateShapes(i,s,a.shape),c=t.dataIdMap.get(s.dataId).id,f=t.dataIdMap.get(i.dataId).id,m=t.dataIdMap.get(a.dataId).id,g=new Uint8Array(new Int32Array(p).buffer),y=t.dataIdMap.get(o.dataId).id;return DZ(c,f,lq[i.dtype],l,u,d,g,h,y,m),o}};var BZ,WZ={kernelName:ba,backendName:"wasm",setupFunc:function(e){zZ=e.wasm.cwrap(ba,null,["number","array","number","array","number","number"])},kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{x:a}=t,s=n.dataIdMap.get(a.dataId).id,{reps:i}=r,o=new Array(a.shape.length);for(let e=0;e<o.length;e++)o[e]=a.shape[e]*i[e];let l=new Uint8Array(new Int32Array(a.shape).buffer),u=new Uint8Array(new Int32Array(o).buffer),d=n.makeOutput(o,a.dtype),p=n.dataIdMap.get(d.dataId).id;return zZ(s,l,a.shape.length,u,o.length,lq[d.dtype],p),d}};var VZ,UZ={kernelName:xa,backendName:"wasm",setupFunc:function(e){BZ=e.wasm.cwrap(xa,null,["number","array","number","number","number","bool","number","number"])},kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{k:a,sorted:s}=n,i=t.dataIdMap.get(r.dataId).id,o=new Uint8Array(new Int32Array(r.shape).buffer),l=r.shape.slice();l[l.length-1]=a;let u=t.makeOutput(l,r.dtype),d=t.dataIdMap.get(u.dataId).id,p=t.makeOutput(l,"int32"),h=t.dataIdMap.get(p.dataId).id;return BZ(i,o,r.shape.length,lq[r.dtype],a,s,d,h),[u,p]}};var GZ={kernelName:wa,backendName:"wasm",setupFunc:function(e){VZ=e.wasm.cwrap(wa,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])},kernelFunc:function(e){let t,{backend:n,inputs:r,attrs:a}=e,{image:s,transforms:i}=r,{interpolation:o,fillMode:l,fillValue:u,outputShape:d}=a,[p,h,c,f]=s.shape,[m,g]=null!=d?d:[h,c],y=[p,m,g,f],b=new Uint8Array(new Int32Array(ja.computeStrides(s.shape)).buffer),x=new Uint8Array(new Int32Array(ja.computeStrides(y)).buffer),w=n.makeOutput(y,s.dtype),v=n.dataIdMap.get(w.dataId).id,k=n.dataIdMap.get(s.dataId).id,I=n.dataIdMap.get(i.dataId).id,S="nearest"===o?1:2;switch(l){case"constant":default:t=1;break;case"reflect":t=2;break;case"wrap":t=3;break;case"nearest":t=4}return VZ(k,I,i.shape[0]>1,p,m,g,f,c,h,b,s.shape.length-1,x,y.length-1,S,t,u,v),w}};
2var HZ={kernelName:ka,backendName:"wasm",kernelFunc:function(e){let{inputs:t,attrs:n,backend:r}=e,{axis:a}=n,{x:s}=t,{outputValues:i,outputShape:o,indices:l}=NR(r.readSync(s.dataId),a,s.shape,s.dtype);return[r.makeOutput(o,s.dtype,void 0,i),r.makeOutput([l.length],"int32",void 0,l)]}};var jZ={kernelName:Ia,backendName:"wasm",kernelFunc:function(e){let{inputs:t,backend:n,attrs:r}=e,{value:a}=t,{axis:s}=r;s<0&&(s+=a.shape.length);let i=a.shape[s],o=a.shape.length,l=new Array(o-1),u=0;for(let e=0;e<o;e++)e!==s&&(l[u++]=a.shape[e]);let d=new Array(i),p=new Array(o).fill(0),h=a.shape.slice();h[s]=1;for(let e=0;e<d.length;e++)p[s]=e,d[e]=Jq({inputs:{x:a},attrs:{begin:p,size:h},backend:n});return d.map((({dataId:e,dtype:t})=>({dataId:e,dtype:t,shape:l})))}};var qZ={kernelName:Ta,backendName:"wasm",kernelFunc:function(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}},KZ=[cq,mq,gq,yq,wq,vq,$q,Aq,Dq,Mq,Oq,Lq,zq,Pq,Bq,Vq,qq,Gq,jq,Zq,tK,nK,rK,aK,oK,lK,uK,hK,fK,gK,bK,wK,IK,SK,NK,_K,EK,AK,FK,MK,LK,PK,WK,UK,HK,jK,qK,KK,XK,YK,JK,QK,nX,aX,sX,iX,lX,dX,hX,fX,gX,yX,bX,Sq,xX,wX,vX,IX,SX,NX,_X,EX,CX,$X,AX,RX,FX,MX,LX,PX,BX,VX,GX,jX,KX,YX,JX,tY,nY,aY,uY,dY,pY,hY,mY,yY,xY,wY,vY,kY,SY,TY,_Y,EY,AY,RY,FY,DY,MY,OY,Yq,zY,BY,VY,GY,jY,KY,XY,YY,JY,eZ,nZ,rZ,aZ,sZ,iZ,oZ,Qq,oY,lZ,dZ,hZ,fZ,yZ,xZ,wZ,kZ,IZ,SZ,NZ,_Z,CZ,EZ,$Z,RZ,FZ,MZ,OZ,LZ,PZ,WZ,UZ,GZ,_q,HZ,jZ,qZ];for(let e of KZ)Ba(e);var XZ=ut();XZ.registerFlag("WASM_HAS_SIMD_SUPPORT",(async()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]))}catch(e){return!1}})),XZ.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",(async()=>{if(XZ.get("IS_NODE"))return!1;try{return(new MessageChannel).port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}}));var YZ=W(ie()),ZZ=W(oe()),JZ=W(le()),QZ=YZ.default||YZ,eJ=JZ.default||JZ,tJ=class extends de{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(hJ),cJ=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new ue(this,Ni())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=ja.now();return e(),{kernelMs:ja.now()-t}}move(e,t,n,r,a){let s=this.dataIdNextNumber++;if("string"===r){let i=t;return void this.dataIdMap.set(e,{id:s,stringBytes:i,shape:n,dtype:r,memoryOffset:null,refCount:a})}let i=ja.sizeFromShape(n),o=i*ja.bytesPerElement(r),l=this.wasm._malloc(o)>>>0;this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:r,refCount:a}),this.wasm.tfjs.registerTensor(s,i,l),null!=t&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e,t,n){let{memoryOffset:r,dtype:a,shape:s,stringBytes:i}=this.dataIdMap.get(e);if("string"===a)return null!=t&&0!==t||!(null==n||n>=i.length)?i.slice(t,n):i;t=t||0,n=n||ja.sizeFromShape(s);let o=ja.bytesPerElement(a);return function(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}(this.wasm.HEAPU8.slice(r+t*o,r+n*o).buffer,a)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);null!=t&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n,r){let a;if(null==n)a=this.write(null!=r?r:null,e,t);else{let r=this.dataIdNextNumber++;a={id:r},this.dataIdMap.set(a,{id:r,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=ja.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,n)}return{dataId:a,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:a}=this.dataIdMap.get(n),s=ja.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,a,s);case"int32":return new Int32Array(r,a,s);case"bool":return new Uint8Array(r,a,s);default:throw new Error(`Unknown dtype ${t}`)}}};function nJ(e,t,n){if(null!=sJ)return sJ;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),null!=oJ&&null!=oJ[r]?oJ[r]:n+r}async function rJ(){let[e,t]=await Promise.all([ut().getAsync("WAS
2M_HAS_SIMD_SUPPORT"),ut().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise(((n,r)=>{let a={locateFile:(n,r)=>{if(n.endsWith(".worker.js")){let e=ZZ.wasmWorkerContents.replace(/\n/g,"\\n"),t=new Blob([e],{type:"application/javascript"});return URL.createObjectURL(t)}return n.endsWith(".wasm")?nJ(e,t,null!=iJ?iJ:r):r+n}};uJ&&(a.instantiateWasm=function(e){return(t,n)=>(ja.fetch(e,{credentials:"same-origin"}).then((r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then((e=>{WebAssembly.instantiate(e,t).then((e=>{n(e.instance,e.module)}))}))})),{})}(nJ(e,t,null!=iJ?iJ:"")));let s,i=!1;a.onAbort=()=>{i||lJ||(lJ=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))},t&&e&&null==sJ?(a.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+QZ.toString()],{type:"text/javascript"}),s=QZ(a)):s=eJ(a),s.then((e=>{i=!0,lJ=!1;e.tfjs={init:e.cwrap("init",null,[]),initWithThreadsCount:e.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:e.cwrap("get_threads_count","number",[]),registerTensor:e.cwrap("register_tensor",null,["number","number","number"]),disposeData:e.cwrap("dispose_data",null,["number"]),dispose:e.cwrap("dispose",null,[])},n({wasm:e})})).catch(r)}))}var aJ=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],sJ=null,iJ=null,oJ={},lJ=!1,uJ=!1;function dJ(e,t=!1){if(Ii("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),lJ)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");sJ=e,uJ=t}function pJ(e,t=!1){if(lJ)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if("string"==typeof e)iJ=e;else{oJ=e;let t=aJ.filter((e=>null==oJ[e]));if(t.length>0)throw new Error(`There were no entries found for the following binaries: ${t.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}uJ=t}var hJ=-1,cJ=-1;function fJ(e){hJ=e}function mJ(){if(-1===cJ)throw new Error("WASM backend not initialized.");return cJ}var gJ="4.21.0";zi("wasm",(async()=>{let{wasm:e}=await rJ();return new tJ(e)}),2);var yJ="4.21.0",bJ={tfjs:yJ,"tfjs-core":yJ,"tfjs-converter":"4.21.0","tfjs-backend-cpu":"4.21.0","tfjs-backend-webgl":"4.21.0","tfjs-backend-wasm":"4.21.0"},xJ={};function wJ(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach((({x:n,y:r},a)=>{let s=t[a];e.moveTo(s.x,s.y),e.lineTo(n,r)})),n){let n=t[t.length-1],r=t[0];if(!n||!r)return;e.moveTo(n.x,n.y),e.lineTo(r.x,r.y)}e.stroke()}R(xJ,{AnchorPosition:()=>oQ,DrawBox:()=>pQ,DrawBoxOptions:()=>dQ,DrawFaceLandmarks:()=>QQ,DrawFaceLandmarksOptions:()=>JQ,DrawTextField:()=>uQ,DrawTextFieldOptions:()=>lQ,drawContour:()=>wJ,drawDetections:()=>hQ,drawFaceExpressions:()=>XQ,drawFaceLandmarks:()=>e0});R({},{computeReshapedDimensions:()=>AJ,getCenterPoint:()=>RJ,isDimensions:()=>$J,isEven:()=>CJ,isFloat:()=>_J,isTensor:()=>kJ,isTensor1D:()=>IJ,isTensor2D:()=>SJ,isTensor3D:()=>NJ,isTensor4D:()=>TJ,isValidNumber:()=>DJ,isValidProbablitiy:()=>MJ,range:()=>FJ,round:()=>EJ});var vJ=class e{constructor(e,t){if(!DJ(e)||!DJ(t))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:e,height:t})}`);this._width=e,this._height=t}get width(){return this._width}get height(){return this._height}reverse(){return new e(1/this.width,1/this.height)}};function kJ(e,t){return e instanceof $s&&e.shape.length===t}function IJ(e){return kJ(e,1)}function SJ(e){return kJ(e,2)}function NJ(e){return kJ(e,3)}function TJ(e){return kJ(e,4)}function _J(e){return e%1!=0}function CJ(e){return e%2==0}function EJ(e,t=2){let n=10**t;return Math.floor(e*n)/n}function $J(e){return e&&e.width&&e.height}function AJ({width:e,height:t},n){let r=n/Math.max(t,e);return new vJ(Math.round(e*r),Math.round(t*r))}function RJ(e){return e.reduce(((e,t)=>e.add(t)),new OJ(0,0)).div(new OJ(e.length,e.length))}function FJ(e,t,n){return Array(e).fill(0).map(((e,r)=>t+r*n))}function DJ(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||0===e}function MJ(e){return DJ(e)&&e>=0&&e<=1}var OJ=class e{constructor(e,t){this._x=e,this._y=t}get x(){return this._x}get y(){return this._y}add(t){return new e(this.x+t.x,this.y+t.y)}sub(t){return new e(this.x-t.x,this.y-t.y)}mul(t){return new e(this.x*t.x,this.y*t.y)}div(t){return new e(this.x/t.x,this.y/t.y)}abs(){return new e(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new e(Math.floor(this.x),Math.floor(this.y))}},LJ=class e{static isRect(e){return!!e&&[e.x,e.y,e.width,e.height].every(DJ)}static assertIsValidBox(t,n,r=!1){if(!e.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let r=t||{},a=[r.left,r.top,r.right,r.bottom].every(DJ),s=[r.x,r.y,r.width,r.height].every(DJ);
2if(!s&&!a)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[i,o,l,u]=s?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];e.assertIsValidBox({x:i,y:o,width:l,height:u},"Box.constructor",n),this._x=i,this._y=o,this._width=l,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new OJ(this.left,this.top)}get topRight(){return new OJ(this.right,this.top)}get bottomLeft(){return new OJ(this.left,this.bottom)}get bottomRight(){return new OJ(this.right,this.bottom)}round(){let[t,n,r,a]=[this.x,this.y,this.width,this.height].map((e=>Math.round(e)));return new e({x:t,y:n,width:r,height:a})}floor(){let[t,n,r,a]=[this.x,this.y,this.width,this.height].map((e=>Math.floor(e)));return new e({x:t,y:n,width:r,height:a})}toSquare(){let{x:t,y:n,width:r,height:a}=this,s=Math.abs(r-a);return r<a&&(t-=s/2,r+=s),a<r&&(n-=s/2,a+=s),new e({x:t,y:n,width:r,height:a})}rescale(t){let n=$J(t)?t.width:t,r=$J(t)?t.height:t;return new e({x:this.x*n,y:this.y*r,width:this.width*n,height:this.height*r})}pad(t,n){let[r,a,s,i]=[this.x-t/2,this.y-n/2,this.width+t,this.height+n];return new e({x:r,y:a,width:s,height:i})}clipAtImageBorders(t,n){let{x:r,y:a,right:s,bottom:i}=this,o=Math.max(r,0),l=Math.max(a,0),u=s-o,d=i-l,p=Math.min(u,t-o),h=Math.min(d,n-l);return new e({x:o,y:l,width:p,height:h}).floor()}shift(t,n){let{width:r,height:a}=this,s=this.x+t,i=this.y+n;return new e({x:s,y:i,width:r,height:a})}padAtBorders(e,t){let n=this.width+1,r=this.height+1,a=n,s=r,i=this.left,o=this.top,l=this.right,u=this.bottom;return l>t&&(a=-l+t+n,l=t),u>e&&(s=-u+e+r,u=e),i<1&&(s=2-i,i=1),o<1&&(s=2-o,o=1),{dy:1,edy:s,dx:1,edx:a,y:o,ey:u,x:i,ex:l,w:n,h:r}}calibrate(t){return new e({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}},zJ=class extends LJ{constructor(e,t,n,r,a=!1){super({left:e,top:t,right:n,bottom:r},a)}},PJ=class e{constructor(e,t,n,r,a){this._imageDims=new vJ(a.width,a.height),this._score=e,this._classScore=t,this._className=n,this._box=new LJ(r).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new LJ(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new e(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}},BJ=class e extends PJ{constructor(e,t,n){super(e,e,"",t,n)}forSize(t,n){let{score:r,relativeBox:a,imageDims:s}=super.forSize(t,n);return new e(r,a,s)}};function WJ(e,t,n=!0){let r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left))*Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top));return n?r/(e.area+t.area-r):r/Math.min(e.area,t.area)}function VJ(e,t){return Ci((()=>{let[n,r,a]=t,s=Vl([...e.shape.slice(0,3),1],n,"float32"),i=Vl([...e.shape.slice(0,3),1],r,"float32"),o=Vl([...e.shape.slice(0,3),1],a,"float32"),l=Nl([s,i,o],3);return yd(e,l)}))}function UJ(e){return 1/(1+Math.exp(-e))}var GJ,HJ=class extends LJ{constructor(e,t,n,r,a=!1){super({x:e,y:t,width:n,height:r},a)}},jJ=class{constructor(e,t,n=new OJ(0,0)){let{width:r,height:a}=t;this._imgDims=new vJ(r,a),this._shift=n,this._positions=e.map((e=>e.mul(new OJ(r,a)).add(n)))}get shift(){return new OJ(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map((e=>e.sub(this._shift).div(new OJ(this.imageWidth,this.imageHeight))))}forSize(e,t){return new this.constructor(this.relativePositions,{width:e,height:t})}shiftBy(e,t){return new this.constructor(this.relativePositions,this._imgDims,new OJ(e,t))}shiftByPoint(e){return this.shiftBy(e.x,e.y)}align(e,t={}){if(e){let n=e instanceof BJ?e.box.floor():new LJ(e);return this.shiftBy(n.x,n.y).align(null,t)}let{useDlibAlignment:n,minBoxPadding:r}={useDlibAlignment:!1,minBoxPadding:.2,...t};return n?this.alignDlib():this.alignMinBbox(r)}alignDlib(){let e=this.getRefPointsForAlignment(),[t,n,r]=e,a=e=>r.sub(e).magnitude(),s=(a(t)+a(n))/2,i=Math.floor(s/.45),o=RJ(e),l=Math.floor(Math.max(0,o.x-.5*i)),u=Math.floor(Math.max(0,o.y-.43*i));return new HJ(l,u,Math.min(i,this.imageWidth+l),Math.min(i,this.imageHeight+u))}alignMinBbox(e){let t=function(e){let t=e.map((e=>e.x)),n=e.map((e=>e.y)),r=t.reduce(((e,t)=>t<e?t:e),1/0),a=n.reduce(((e,t)=>t<e?t:e),1/0),s=t.reduce(((e,t)=>e<t?t:e),0),i=n.reduce(((e,t)=>e<t?t:e),0);return new zJ(r,a,s,i)}(this.positions);return t.pad(t.width*e,t.height*e)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}},qJ=class extends jJ{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(RJ)}};function KJ(e){return e.detection instanceof BJ}function XJ(e,t){return{...e,detection:t}}function YJ(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function ZJ(){return"object"==typeof n.g&&void 0!==C&&null!=C.versions&&null!=C.versions.node}function JJ(e){let t="";if(!e&&ZJ())try{e=A("fs")}catch(e){t=e.toString()}return{readFile:e?t=>new Promise(((n,r)=>{e.readFile(t,((e,t)=>
2e?r(e):n(t)))})):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function QJ(){let e=n.g.Canvas||n.g.HTMLCanvasElement,t=n.g.Image||n.g.HTMLImageElement,r=n.g.Video||n.g.HTMLVideoElement,a=n.g.fetch,s=JJ();return{Canvas:e||class{},CanvasRenderingContext2D:n.g.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:n.g.ImageData||class{},Video:n.g.HTMLVideoElement||class{},createCanvasElement:()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},createImageElement:()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},createVideoElement:()=>{if(r)return new r;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},fetch:a,...s}}function eQ(){return"object"==typeof window&&"undefined"!=typeof document&&"undefined"!=typeof HTMLImageElement&&"undefined"!=typeof HTMLCanvasElement&&"undefined"!=typeof HTMLVideoElement&&"undefined"!=typeof ImageData&&"undefined"!=typeof CanvasRenderingContext2D}function tQ(e){GJ=e}function nQ(){return eQ()?tQ(YJ()):ZJ()?tQ(QJ()):null}var rQ={getEnv:function(){if(!GJ)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return GJ},setEnv:tQ,initialize:nQ,createBrowserEnv:YJ,createFileSystem:JJ,createNodejsEnv:QJ,monkeyPatch:function(e){if(GJ||nQ(),!GJ)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=GJ.Canvas,Image:n=GJ.Image}=e;GJ.Canvas=t,GJ.Image=n,GJ.createCanvasElement=e.createCanvasElement||(()=>new t),GJ.createImageElement=e.createImageElement||(()=>new n),GJ.ImageData=e.ImageData||GJ.ImageData,GJ.Video=e.Video||GJ.Video,GJ.fetch=e.fetch||GJ.fetch,GJ.readFile=e.readFile||GJ.readFile},isBrowser:eQ,isNodejs:ZJ};function aQ(e){return rQ.isNodejs()||"string"!=typeof e?e:document.getElementById(e)}function sQ(e){let{Canvas:t,CanvasRenderingContext2D:n}=rQ.getEnv();if(e instanceof n)return e;let r=aQ(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let a=r.getContext("2d",{willReadFrequently:!0});if(!a)throw new Error("resolveContext2d - canvas 2d context is null");return a}nQ();var iQ,oQ=((iQ=oQ||{}).TOP_LEFT="TOP_LEFT",iQ.TOP_RIGHT="TOP_RIGHT",iQ.BOTTOM_LEFT="BOTTOM_LEFT",iQ.BOTTOM_RIGHT="BOTTOM_RIGHT",iQ),lQ=class{constructor(e={}){let{anchorPosition:t,backgroundColor:n,fontColor:r,fontSize:a,fontStyle:s,padding:i}=e;this.anchorPosition=t||"TOP_LEFT",this.backgroundColor=n||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=a||14,this.fontStyle=s||"Georgia",this.padding=i||4}},uQ=class e{constructor(t,n,r={}){this.text="string"==typeof t?[t]:t instanceof e?t.text:t,this.anchor=n,this.options=new lQ(r)}measureWidth(e){let{padding:t}=this.options;return this.text.map((t=>e.measureText(t).width)).reduce(((e,t)=>e<t?t:e),0)+2*t}measureHeight(){let{fontSize:e,padding:t}=this.options;return this.text.length*e+2*t}getUpperLeft(e,t){let{anchorPosition:n}=this.options,r="BOTTOM_RIGHT"===n||"TOP_RIGHT"===n,a="BOTTOM_LEFT"===n||"BOTTOM_RIGHT"===n,s=this.measureWidth(e),i=this.measureHeight(),o=r?this.anchor.x-s:this.anchor.x,l=a?this.anchor.y-i:this.anchor.y;if(t){let{width:e,height:n}=t;return{x:Math.max(Math.min(o,e-s),0),y:Math.max(Math.min(l,n-i),0)}}return{x:o,y:l}}draw(e){let t=aQ(e),n=sQ(t),{backgroundColor:r,fontColor:a,fontSize:s,fontStyle:i,padding:o}=this.options;n.font=`${s}px ${i}`;let l=this.measureWidth(n),u=this.measureHeight();n.fillStyle=r;let d=this.getUpperLeft(n,t);n.fillRect(d.x,d.y,l,u),n.fillStyle=a,this.text.forEach(((e,t)=>{let r=o+d.x,a=o+d.y+(t+1)*s;n.fillText(e,r,a)}))}},dQ=class{constructor(e={}){let{boxColor:t,lineWidth:n,label:r,drawLabelOptions:a}=e;this.boxColor=t||"rgba(0, 0, 255, 1)",this.lineWidth=n||2,this.label=r;let s={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new lQ({...s,...a})}},pQ=class{constructor(e,t={}){this.box=new LJ(e),this.options=new dQ(t)}draw(e){let t=sQ(e),{boxColor:n,lineWidth:r}=this.options,{x:a,y:s,width:i,height:o}=this.box;t.strokeStyle=n,t.lineWidth=r,t.strokeRect(a,s,i,o);let{label:l}=this.options;l&&new uQ([l],{x:a-r/2,y:s},this.options.drawLabelOptions).draw(e)}};
2function hQ(e,t){(Array.isArray(t)?t:[t]).forEach((t=>{let n=t instanceof BJ?t.score:KJ(t)?t.detection.score:void 0,r=t instanceof BJ?t.box:KJ(t)?t.detection.box:new LJ(t),a=n?`${EJ(n)}`:void 0;new pQ(r,{label:a}).draw(e)}))}function cQ(e){let{Image:t,Video:n}=rQ.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function fQ(e){let{Image:t,Video:n}=rQ.getEnv();return e instanceof t?new vJ(e.naturalWidth,e.naturalHeight):e instanceof n?new vJ(e.videoWidth,e.videoHeight):new vJ(e.width,e.height)}function mQ({width:e,height:t}){let{createCanvasElement:n}=rQ.getEnv(),r=n();return r.width=e,r.height=t,r}function gQ(e,t){let{ImageData:n}=rQ.getEnv();if(!(e instanceof n||cQ(e)))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:a}=t||fQ(e),s=mQ({width:r,height:a});return e instanceof n?sQ(s).putImageData(e,0,0):sQ(s).drawImage(e,0,0,r,a),s}function yQ(e){let{Image:t,Canvas:n,Video:r}=rQ.getEnv();return e instanceof t||e instanceof n||e instanceof r}var bQ=class{constructor(e,t=!1){if(this._imageTensors=[],this._canvases=[],this._treatAsBatchInput=!1,this._inputDimensions=[],this._inputSize=0,!Array.isArray(e))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${e}`);this._treatAsBatchInput=t,this._batchSize=e.length,e.forEach(((e,t)=>{if(NJ(e))return this._imageTensors[t]=e,void(this._inputDimensions[t]=e.shape);if(TJ(e)){let n=e.shape[0];if(1!==n)throw new Error(`NetInput - tf.Tensor4D with batchSize ${n} passed, but not supported in input array`);return this._imageTensors[t]=e,void(this._inputDimensions[t]=e.shape.slice(1))}let n=e instanceof rQ.getEnv().Canvas?e:gQ(e);this._canvases[t]=n,this._inputDimensions[t]=[n.height,n.width,3]}))}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return FJ(this.batchSize,0,1).map(((e,t)=>this.getReshapedInputDimensions(t)))}getInput(e){return this.canvases[e]||this.imageTensors[e]}getInputDimensions(e){return this._inputDimensions[e]}getInputHeight(e){return this._inputDimensions[e][0]}getInputWidth(e){return this._inputDimensions[e][1]}getReshapedInputDimensions(e){if("number"!=typeof this.inputSize)throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");return AJ({width:this.getInputWidth(e),height:this.getInputHeight(e)},this.inputSize)}toBatchTensor(e,t=!0){return this._inputSize=e,Ci((()=>{let n=FJ(this.batchSize,0,1).map((n=>{let r=this.getInput(n);if(r instanceof $s){let n=TJ(r)?r:Vu(r);return n=function(e,t=!1){return Ci((()=>{let[n,r]=e.shape.slice(1);if(n===r)return e;let a=Math.abs(n-r),s=Math.round(a*(t?.5:1)),i=n>r?2:1,o=t=>{let n=e.shape.slice();return n[i]=t,Vl(n,0,"float32")},l=o(s),u=a-l.shape[i],d=[t&&u?o(u):null,e,l].filter((e=>!!e)).map((e=>Wo(e,"float32")));return Nl(d,i)}))}(n,t),(n.shape[1]!==e||n.shape[2]!==e)&&(n=Kc.resizeBilinear(n,[e,e],!1,!1)),n.as3D(e,e,3)}if(r instanceof rQ.getEnv().Canvas)return Pf.fromPixels(function(e,t,n=!1){let{Image:r,Canvas:a}=rQ.getEnv();if(!(e instanceof r||e instanceof a))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return mQ({width:1,height:1});let s=fQ(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=mQ({width:t,height:t}),d=e instanceof a?e:gQ(e),p=Math.abs(o-l)/2,h=n&&o<l?p:0,c=n&&l<o?p:0;return d.width>0&&d.height>0&&sQ(u).drawImage(d,h,c,o,l),u}(r,e,t));throw new Error(`toBatchTensor - at batchIdx ${n}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${r}`)}));return ah(n.map((e=>Wo(e,"float32")))).as4D(this.batchSize,e,e,3)}))}};async function xQ(e){if(e instanceof bQ)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=t=>Array.isArray(e)?` at input index ${t}:`:"",r=t.map(aQ);return r.forEach(((e,r)=>{if(!yQ(e)&&!NJ(e)&&!TJ(e))throw"string"==typeof t[r]?new Error(`toNetInput -${n(r)} string passed, but could not resolve HTMLElement for element id ${t[r]}`):new Error(`toNetInput -${n(r)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);
2if(TJ(e)){let t=e.shape[0];if(1!==t)throw new Error(`toNetInput -${n(r)} tf.Tensor4D with batchSize ${t} passed, but not supported in input array`)}})),await Promise.all(r.map((e=>yQ(e)&&function(e){return new Promise(((t,n)=>{function r(e){e.currentTarget&&(e.currentTarget.removeEventListener("load",a),e.currentTarget.removeEventListener("error",r),n(e))}function a(e){e.currentTarget&&(e.currentTarget.removeEventListener("load",a),e.currentTarget.removeEventListener("error",r),t(e))}e instanceof rQ.getEnv().Canvas||cQ(e)?t(null):(e.addEventListener("load",a),e.addEventListener("error",r))}))}(e)))),new bQ(r,Array.isArray(e))}async function wQ(e,t){let{Canvas:n}=rQ.getEnv(),r=e;if(!(e instanceof n)){let t=await xQ(e);if(t.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let a=t.getInput(0);r=a instanceof n?a:await async function(e,t){let n=t||rQ.getEnv().createCanvasElement(),[r,a,s]=e.shape.slice(TJ(e)?1:0),i=Ci((()=>e.as3D(r,a,s).toInt()));return await Pf.toPixels(i,n),i.dispose(),n}(a)}let a=sQ(r);return t.map((e=>e instanceof BJ?e.forSize(r.width,r.height).box.floor():e)).map((e=>e.clipAtImageBorders(r.width,r.height))).map((({x:e,y:t,width:n,height:r})=>{let s=mQ({width:n,height:r});return n>0&&r>0&&sQ(s).putImageData(a.getImageData(e,t,n,r),0,0),s}))}async function vQ(e,t){if(!NJ(e)&&!TJ(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(TJ(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Ci((()=>{let[n,r,a]=e.shape.slice(TJ(e)?1:0);return t.map((e=>e instanceof BJ?e.forSize(r,n).box:e)).map((e=>e.clipAtImageBorders(r,n))).filter((e=>e.width>0&&e.height>0)).map((({x:t,y:s,width:i,height:o})=>Kp(e.as3D(n,r,a),[s,t,0],[o,i,a])))}))}async function kQ(e,t){let{fetch:n}=rQ.getEnv(),r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}function IQ(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if("/"===e)return{modelBaseUri:"/",manifestUri:`/${n}`};let r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"",a=(e=e.replace(r,"")).split("/").filter((e=>e)),s=e.endsWith(".json")?a[a.length-1]:n,i=r+(e.endsWith(".json")?a.slice(0,a.length-1):a).join("/");return i=e.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:"/"===i?`/${s}`:`${i}/${s}`}}async function SQ(e,t){let{manifestUri:n,modelBaseUri:r}=IQ(e,t),a=await async function(e){return(await kQ(e)).json()}(n);return gf.loadWeights(a,r)}function NQ(e,t,n=!1){let{width:r,height:a}=n?fQ(t):t;return e.width=r,e.height=a,{width:r,height:a}}var TQ=class{constructor(e){this._params=void 0,this._paramMappings=[],this._name=e}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(e){let{obj:t,objProp:n}=this.traversePropertyPath(e);return t[n]}reassignParamFromPath(e,t){let{obj:n,objProp:r}=this.traversePropertyPath(e);n[r].dispose(),n[r]=t}getParamList(){return this._paramMappings.map((({paramPath:e})=>({path:e,tensor:this.getParamFromPath(e)})))}getTrainableParams(){return this.getParamList().filter((e=>e.tensor instanceof Rs))}getFrozenParams(){return this.getParamList().filter((e=>!(e.tensor instanceof Rs)))}variable(){this.getFrozenParams().forEach((({path:e,tensor:t})=>{this.reassignParamFromPath(e,t.variable())}))}freeze(){this.getTrainableParams().forEach((({path:e,tensor:t})=>{let n=yi(t.dataSync());t.dispose(),this.reassignParamFromPath(e,n)}))}dispose(e=!0){this.getParamList().forEach((t=>{if(e&&t.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${t.path}`);t.tensor.dispose()})),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map((({tensor:e})=>Array.from(e.dataSync()))).reduce(((e,t)=>e.concat(t))))}async load(e){e instanceof Float32Array?this.extractWeights(e):await this.loadFromUri(e)}async loadFromUri(e){if(e&&"string"!=typeof e)throw new Error(`${this._name}.loadFromUri - expected model uri`);let t=await SQ(e,this.getDefaultModelName());this.loadFromWeightMap(t)}async loadFromDisk(e){if(e&&"string"!=typeof e)throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:t}=rQ.getEnv(),{manifestUri:n,modelBaseUri:r}=IQ(e,this.getDefaultModelName()),a=gf.weightsLoaderFactory((e=>Promise.all(e.map((e=>t(e).then((e=>"string"==typeof e?E.from(e):e.buffer))))))),s=JSON.parse((await t(n)).toString()),i=await a(s,r);this.loadFromWeightMap(i)}loadFromWeightMap(e){let{paramMappings:t,params:n}=this.extractParamsFromWeightMap(e);this._paramMappings=t,this._params=n}extractWeights(e){let{paramMappings:t,params:n}=this.extractParams(e);this._paramMappings=t,this._params=n}traversePropertyPath(e){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let t=e.split("/").reduce(((t,n)=>{if(!t.nextObj.hasOwnProperty(n))throw new Error(`traversePropertyPath - object does not have property ${n}, for path ${e}`);
2return{obj:t.nextObj,objProp:n,nextObj:t.nextObj[n]}}),{nextObj:this.params}),{obj:n,objProp:r}=t;if(!(n&&r&&n[r]instanceof $s))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${e}`);return{obj:n,objProp:r}}};function _Q(e,t,n){return Ci((()=>{let r=Wp(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=Go(r,t.bias),r}))}function CQ(e,t,n=!1){return Ci((()=>{let r=Ap(n?Go(Kl(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):_Q(e,t.conv0,[2,2])),a=_Q(r,t.conv1,[1,1]),s=_Q(Ap(Go(r,a)),t.conv2,[1,1]);return Ap(Go(r,Go(a,s)))}))}function EQ(e,t,n=!1,r=!0){return Ci((()=>{let a=Ap(n?Go(Kl(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):_Q(e,t.conv0,r?[2,2]:[1,1])),s=_Q(a,t.conv1,[1,1]),i=_Q(Ap(Go(a,s)),t.conv2,[1,1]),o=_Q(Ap(Go(a,Go(s,i))),t.conv3,[1,1]);return Ap(Go(a,Go(s,Go(i,o))))}))}function $Q(e,t,n="same",r=!1){return Ci((()=>{let a=Go(Kl(e,t.filters,[1,1],n),t.bias);return r?Ap(a):a}))}function AQ(e,t){Object.keys(e).forEach((n=>{t.some((e=>e.originalPath===n))||e[n].dispose()}))}function RQ(e,t){return(n,r,a,s)=>{let i=ph(e(n*r*a*a),[a,a,n,r]),o=lh(e(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function FQ(e,t){return(n,r,a)=>{let s=uh(e(n*r),[n,r]),i=lh(e(r));return t.push({paramPath:`${a}/weights`},{paramPath:`${a}/bias`}),{weights:s,bias:i}}}var DQ=class{constructor(e,t,n){this.depthwise_filter=e,this.pointwise_filter=t,this.bias=n}};function MQ(e,t){return(n,r,a)=>{let s=ph(e(9*n),[3,3,n,1]),i=ph(e(n*r),[1,1,n,r]),o=lh(e(r));return t.push({paramPath:`${a}/depthwise_filter`},{paramPath:`${a}/pointwise_filter`},{paramPath:`${a}/bias`}),new DQ(s,i,o)}}function OQ(e){return t=>{let n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),a=e(`${t}/bias`,1);return new DQ(n,r,a)}}function LQ(e,t){return(n,r,a)=>{let s=e[n];if(!kJ(s,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${s}`);return t.push({originalPath:n,paramPath:a||n}),s}}function zQ(e){let t=e;return{extractWeights:function(e){let n=t.slice(0,e);return t=t.slice(e),n},getRemainingWeights:function(){return t}}}function PQ(e,t){let n=RQ(e,t),r=MQ(e,t);function a(e,t,a,s=!1){return{conv0:s?n(e,t,3,`${a}/conv0`):r(e,t,`${a}/conv0`),conv1:r(t,t,`${a}/conv1`),conv2:r(t,t,`${a}/conv2`)}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:function(e,t,n,s=!1){let{conv0:i,conv1:o,conv2:l}=a(e,t,n,s);return{conv0:i,conv1:o,conv2:l,conv3:r(t,t,`${n}/conv3`)}}}}function BQ(e){return t=>({filters:e(`${t}/filters`,4),bias:e(`${t}/bias`,1)})}function WQ(e,t){let n=LQ(e,t),r=BQ(n),a=OQ(n);return{extractDenseBlock3Params:function(e,t=!1){return{conv0:t?r(`${e}/conv0`):a(`${e}/conv0`),conv1:a(`${e}/conv1`),conv2:a(`${e}/conv2`)}},extractDenseBlock4Params:function(e,t=!1){return{conv0:t?r(`${e}/conv0`):a(`${e}/conv0`),conv1:a(`${e}/conv1`),conv2:a(`${e}/conv2`),conv3:a(`${e}/conv3`)}}}}var VQ=class extends TQ{constructor(){super("FaceFeatureExtractor")}forwardInput(e){let{params:t}=this;if(!t)throw new Error("FaceFeatureExtractor - load model before inference");return Ci((()=>{let n=EQ(VJ(Wo(e.toBatchTensor(112,!0),"float32"),[122.782,117.001,104.298]).div(255),t.dense0,!0);return n=EQ(n,t.dense1),n=EQ(n,t.dense2),n=EQ(n,t.dense3),n=Il(n,[7,7],[2,2],"valid"),n}))}async forward(e){return this.forwardInput(await xQ(e))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(e){return function(e){let t=[],{extractDenseBlock4Params:n}=WQ(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return AQ(e,t),{params:r,paramMappings:t}}(e)}extractParams(e){return function(e){let t=[],{extractWeights:n,getRemainingWeights:r}=zQ(e),{extractDenseBlock4Params:a}=PQ(n,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),o=a(64,128,"dense2"),l=a(128,256,"dense3");if(0!==r().length)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o,dense3:l}}}(e)}};function UQ(e,t){return Ci((()=>Go(Tl(e,t.weights),t.bias)))}function GQ(e){let t={},n={};return Object.keys(e).forEach((r=>{(r.startsWith("fc")?n:t)[r]=e[r]})),{featureExtractorMap:t,classifierMap:n}}var HQ=class extends TQ{constructor(e,t){super(e),this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return Ci((()=>{let n=e instanceof bQ?this.faceFeatureExtractor.forwardInput(e):e;return UQ(n.as2D(n.shape[0],-1),t.fc)}))}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return function(e,t,n){let r=[],{extractWeights:a,getRemainingWeights:s}=zQ(e),i=FQ(a,r)(t,n,"fc");if(0!==s().length)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:r,params:{fc:i}}}(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(e){let{featureExtractorMap:t,classifierMap:n}=GQ(e);return this.faceFeatureExtractor.loadFromWeightMap(t),function(e){let t=[],n=LQ(e,t),r={fc:(a="fc",{weights:n(`${a}/weights`,2),bias:n(`${a}/bias`,1)})};var a;return AQ(e,t),{params:r,paramMappings:t}}(n)}extractParams(e){let t=this.getClassifierChannelsIn(),n=this.getClassifierChannelsOut(),r=n*t+n,a=e.slice(0,e.length-r),s=e.slice(e.length-r);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(s)}},jQ=["neutral","happy","sad","angry","fearful","disgusted","surprised"],qQ=class{constructor(e){if(this.neutral=0,this.happy=0,this.sad=0,this.angry=0,this.fearful=0,this.disgusted=0,this.surprised=0,7!==e.length)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${e.length}`);
2jQ.forEach(((t,n)=>{this[t]=e[n]}))}asSortedArray(){return jQ.map((e=>({expression:e,probability:this[e]}))).sort(((e,t)=>t.probability-e.probability))}};function KQ(e,t){return{...e,expressions:t}}function XQ(e,t,n=.1,r){(Array.isArray(t)?t:[t]).forEach((t=>{let a=t instanceof qQ?t:function(e){return e.expressions instanceof qQ}(t)?t.expressions:void 0;if(!a)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let s=a.asSortedArray().filter((e=>e.probability>n)),i=KJ(t)?t.detection.box.bottomLeft:r||new OJ(0,0);new uQ(s.map((e=>`${e.expression} (${EJ(e.probability)})`)),i).draw(e)}))}function YQ(e){return KJ(e)&&e.landmarks instanceof jJ&&e.unshiftedLandmarks instanceof jJ&&e.alignedRect instanceof BJ}function ZQ(e,t){let{box:n}=e.detection,r=t.shiftBy(n.x,n.y),a=r.align(),{imageDims:s}=e.detection,i=new BJ(e.detection.score,a.rescale(s.reverse()),s),o=function(e){let t=e=>180*e/Math.PI,n=(e,t)=>Math.sqrt((e.x-t.x)**2+(e.y-t.y)**2),r={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e.positions||68!==e.positions.length)return r;let a=e.positions;return r.roll=((e,n)=>{let r=Math.hypot(n.x-e.x,n.y-e.y),a=n.y-e.y,s=Math.asin(a/r),i=t(s);return Math.floor(90-i)*(n.x-e.x<0?-1:1)})(a[27],a[66]),r.pitch=((e,r,a)=>{let s=n(e,a),i=new OJ((e.x+a.x)/2,(e.y+a.y)/2),o=n(r,i),l=Math.atan(o/s);return Math.floor(t(l))*(i.y-r.y<0?-1:1)})(a[14],a[30],a[2]),r.yaw=(s=a[14],i=a[33],o=a[2],Math.floor(s.x-i.x)-Math.floor(i.x-o.x)),r;var s,i,o}(t);return{...e,landmarks:r,unshiftedLandmarks:t,alignedRect:i,angle:o}}var JQ=class{constructor(e={}){let{drawLines:t=!0,drawPoints:n=!0,lineWidth:r,lineColor:a,pointSize:s,pointColor:i}=e;this.drawLines=t,this.drawPoints=n,this.lineWidth=r||1,this.pointSize=s||2,this.lineColor=a||"rgba(0, 255, 255, 1)",this.pointColor=i||"rgba(255, 0, 255, 1)"}},QQ=class{constructor(e,t={}){this.faceLandmarks=e,this.options=new JQ(t)}draw(e){let t=sQ(e),{drawLines:n,drawPoints:r,lineWidth:a,lineColor:s,pointSize:i,pointColor:o}=this.options;if(n&&this.faceLandmarks instanceof qJ&&(t.strokeStyle=s,t.lineWidth=a,wJ(t,this.faceLandmarks.getJawOutline()),wJ(t,this.faceLandmarks.getLeftEyeBrow()),wJ(t,this.faceLandmarks.getRightEyeBrow()),wJ(t,this.faceLandmarks.getNose()),wJ(t,this.faceLandmarks.getLeftEye(),!0),wJ(t,this.faceLandmarks.getRightEye(),!0),wJ(t,this.faceLandmarks.getMouth(),!0)),r){t.strokeStyle=o,t.fillStyle=o;let e=e=>{t.beginPath(),t.arc(e.x,e.y,i,0,2*Math.PI),t.fill()};this.faceLandmarks.positions.forEach(e)}}};function e0(e,t){(Array.isArray(t)?t:[t]).forEach((t=>{let n=t instanceof jJ?t:YQ(t)?t.landmarks:void 0;if(!n)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new QQ(n).draw(e)}))}function t0(e,t){let n=[],{extractWeights:r,getRemainingWeights:a}=zQ(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=function(e,t){let n=RQ(e,t),r=MQ(e,t);return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:function(e,t,a){return{separable_conv0:r(e,t,`${a}/separable_conv0`),separable_conv1:r(t,t,`${a}/separable_conv1`),expansion_conv:n(e,t,1,`${a}/expansion_conv`)}},extractMainBlockParams:function(e,t){return{separable_conv0:r(e,e,`${t}/separable_conv0`),separable_conv1:r(e,e,`${t}/separable_conv1`),separable_conv2:r(e,e,`${t}/separable_conv2`)}}}}(r,n),u={conv_in:s(3,32,3,"entry_flow/conv_in"),reduction_block_0:o(32,64,"entry_flow/reduction_block_0"),reduction_block_1:o(64,128,"entry_flow/reduction_block_1")},d={};FJ(t,0,1).forEach((e=>{d[`main_block_${e}`]=l(128,`middle_flow/main_block_${e}`)}));let p={reduction_block:o(128,256,"exit_flow/reduction_block"),separable_conv:i(256,512,"exit_flow/separable_conv")};if(0!==a().length)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:n,params:{entry_flow:u,middle_flow:d,exit_flow:p}}}function n0(e,t){let n=[],{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:i}=function(e,t){let n=LQ(e,t),r=BQ(n),a=OQ(n);return{extractConvParams:r,extractSeparableConvParams:a,extractReductionBlockParams:function(e){return{separable_conv0:a(`${e}/separable_conv0`),separable_conv1:a(`${e}/separable_conv1`),expansion_conv:r(`${e}
2/expansion_conv`)}},extractMainBlockParams:function(e){return{separable_conv0:a(`${e}/separable_conv0`),separable_conv1:a(`${e}/separable_conv1`),separable_conv2:a(`${e}/separable_conv2`)}}}}(e,n),o={conv_in:r("entry_flow/conv_in"),reduction_block_0:s("entry_flow/reduction_block_0"),reduction_block_1:s("entry_flow/reduction_block_1")},l={};FJ(t,0,1).forEach((e=>{l[`main_block_${e}`]=i(`middle_flow/main_block_${e}`)}));let u={reduction_block:s("exit_flow/reduction_block"),separable_conv:a("exit_flow/separable_conv")};return AQ(e,n),{params:{entry_flow:o,middle_flow:l,exit_flow:u},paramMappings:n}}function r0(e,t,n){return Go(Kl(e,t.filters,n,"same"),t.bias)}function a0(e,t,n=!0){let r=n?Ap(e):e;return r=_Q(r,t.separable_conv0,[1,1]),r=_Q(Ap(r),t.separable_conv1,[1,1]),r=_d(r,[3,3],[2,2],"same"),r=Go(r,r0(e,t.expansion_conv,[2,2])),r}var s0=class extends TQ{constructor(e){super("TinyXception"),this._numMainBlocks=e}forwardInput(e){let{params:t}=this;if(!t)throw new Error("TinyXception - load model before inference");return Ci((()=>{let n=VJ(Wo(e.toBatchTensor(112,!0),"float32"),[122.782,117.001,104.298]).div(255),r=Ap(r0(n,t.entry_flow.conv_in,[2,2]));return r=a0(r,t.entry_flow.reduction_block_0,!1),r=a0(r,t.entry_flow.reduction_block_1),FJ(this._numMainBlocks,0,1).forEach((e=>{r=function(e,t){let n=_Q(Ap(e),t.separable_conv0,[1,1]);return n=_Q(Ap(n),t.separable_conv1,[1,1]),n=_Q(Ap(n),t.separable_conv2,[1,1]),n=Go(n,e),n}(r,t.middle_flow[`main_block_${e}`])})),r=a0(r,t.exit_flow.reduction_block),r=Ap(_Q(r,t.exit_flow.separable_conv,[1,1])),r}))}async forward(e){return this.forwardInput(await xQ(e))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(e){return n0(e,this._numMainBlocks)}extractParams(e){return t0(e,this._numMainBlocks)}};var i0,o0=((i0=o0||{}).FEMALE="female",i0.MALE="male",i0),l0=class extends HQ{postProcess(e,t,n){let r=n.map((({width:e,height:n})=>{let r=t/Math.max(n,e);return{width:e*r,height:n*r}})),a=r.length;return Ci((()=>{let n=(e,t)=>ah([Vl([68],e,"float32"),Vl([68],t,"float32")],1).as2D(1,136).as1D(),s=(e,t)=>{let{width:n,height:a}=r[e];return t(n,a)?Math.abs(n-a)/2:0};return e.mul(Vl([a,136],t,"float32")).sub(ah(Array.from(Array(a),((e,t)=>n((e=>s(e,((e,t)=>e<t)))(t),(e=>s(e,((e,t)=>t<e)))(t)))))).div(ah(Array.from(Array(a),((e,t)=>n(r[t].width,r[t].height)))))}))}forwardInput(e){return Ci((()=>{let t=this.runNet(e);return this.postProcess(t,e.inputSize,e.inputDimensions.map((([e,t])=>({height:e,width:t}))))}))}async forward(e){return this.forwardInput(await xQ(e))}async detectLandmarks(e){let t=await xQ(e),n=Ci((()=>Ih(this.forwardInput(t)))),r=await Promise.all(n.map((async(e,n)=>{let r=Array.from(e.dataSync()),a=r.filter(((e,t)=>CJ(t))),s=r.filter(((e,t)=>!CJ(t)));return new qJ(Array(68).fill(0).map(((e,t)=>new OJ(a[t],s[t]))),{height:t.getInputHeight(n),width:t.getInputWidth(n)})})));return n.forEach((e=>e.dispose())),t.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}},u0=class extends l0{constructor(e=new VQ){super("FaceLandmark68Net",e)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};var d0=class extends TQ{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(e){let{params:t}=this;if(!t)throw new Error("TinyFaceFeatureExtractor - load model before inference");return Ci((()=>{let n=CQ(VJ(Wo(e.toBatchTensor(112,!0),"float32"),[122.782,117.001,104.298]).div(255),t.dense0,!0);return n=CQ(n,t.dense1),n=CQ(n,t.dense2),n=Il(n,[14,14],[2,2],"valid"),n}))}async forward(e){return this.forwardInput(await xQ(e))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(e){return function(e){let t=[],{extractDenseBlock3Params:n}=WQ(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return AQ(e,t),{params:r,paramMappings:t}}(e)}extractParams(e){return function(e){let t=[],{extractWeights:n,getRemainingWeights:r}=zQ(e),{extractDenseBlock3Params:a}=PQ(n,t),s=a(3,32,"dense0",!0),i=a(32,64,"dense1"),o=a(64,128,"dense2");if(0!==r().length)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o}}}(e)}};function p0(e,t,n,r,a="same"){let{filters:s,bias:i}=t.conv,o=Kl(e,s,n,a);return o=Go(o,i),o=function(e,t){return Go(qo(e,t.weights),t.biases)}(o,t.scale),r?Ap(o):o}function h0(e,t){return p0(e,t,[1,1],!1)}function c0(e,t){return p0(e,t,[2,2],!0,"valid")}function f0(e,t){function n(n,r,a,s){let i=function(t,n,r){let a=e(t),s=a.length/(n*r*r);if(_J(s))throw new Error(`depth has to be an integer: ${s}, weights.length: ${a.length}, numFilters: ${n}, filterSize: ${r}`);return Ci((()=>Eh(ph(a,[n,s,r,r]),[2,3,1,0])))}(n,r,a),o=lh(e(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}function r(r,a,s,i){let o=n(r,a,s,`${i}/conv`),l=function(n,r){let a=lh(e(n)),s=lh(e(n));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/biases`}),{weights:a,biases:s}}(a,`${i}/scale`);return{conv:o,scale:l}}return{extractConvLayerParams:r,extractResidualLayerParams:function(e,t,n,a,s=!1){return{conv1:r((s?.5:1)*e,t,n,`${a}/conv1`),conv2:r(e,t,n,`${a}/conv2`)}}}}function m0(e,t){let n=LQ(e,t);function r(e){let t=n(`${e}/conv/filters`,4),r=n(`${e}/conv/bias`,1),a=function(e){return{weights:n(`${e}/scale/weights`,1),biases:n(`${e}/scale/biases`,1)}}(e);return{conv:{filters:t,bias:r},scale:a}}return{extractConvLayerParams:r,extractResidualLayerParams:function(e){return{conv1:r(`${e}/conv1`),conv2:r(`${e}/conv2`)}}}}function g0(e,t){let n=function(e,t){return p0(e,t,[1,1],!0)}(e,t.conv1);return n=h0(n,t.conv2),n=Go(n,e),n=Ap(n),n}function y0(e,t){let n=c0(e,t.conv1);n=h0(n,t.conv2);let r=Il(e,2,2,"valid"),a=Rd(r.shape),s=r.shape[3]!==n.shape[3];if(r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2]){let e=[...n.shape];e[1]=1;let t=Rd(e);n=Nl([n,t],1);let r=[...n.shape];r[2]=1;let a=Rd(r);n=Nl([n,a],2)}return r=s?Nl([r,a],3):r,n=Go(r,n),n=Ap(n),n}var b0=class extends TQ{constructor(){super("FaceRecognitionNet")}forwardInput(e){let{params:t}=this;if(!t)throw new Error("FaceRecognitionNet - load model before inference");return Ci((()=>{let n=c0(VJ(Wo(e.toBatchTensor(150,!0),"float32"),[122.782,117.001,104.298]).div(255),t.conv32_down);n=_d(n,3,2,"valid"),n=g0(n,t.conv32_1),n=g0(n,t.conv32_2),n=g0(n,t.conv32_3),n=y0(n,t.conv64_down),n=g0(n,t.conv64_1),n=g0(n,t.conv64_2),n=g0(n,t.conv64_3),n=y0(n,t.conv128_down),n=g0(n,t.conv128_1),n=g0(n,t.conv128_2),n=y0(n,t.conv256_down),n=g0(n,t.conv256_1),n=g0(n,t.conv256_2),n=y0(n,t.conv256_down_out);let r=n.mean([1,2]);return Tl(r,t.fc)}))}async forward(e){return this.forwardInput(await xQ(e))}async computeFaceDescriptor(e){var t;if(null!=(t=null==e?void 0:e.shape)&&t.some((e=>e<=0)))return new Float32Array(128);let n=await xQ(e),r=Ci((()=>Ih(this.forwardInput(n)))),a=await Promise.all(r.map((e=>e.data())));return r.forEach((e=>e.dispose())),n.isBatchInput?a:a[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(e){return function(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=m0(e,t),a=n("conv32_down"),s=r("conv32_1"),i=r("conv32_2"),o=r("conv32_3"),l=r("conv64_down"),u=r("conv64_1"),d=r("conv64_2"),p=r("conv64_3"),h=r("conv128_down"),c=r("conv128_1"),f=r("conv128_2"),m=r("conv256_down"),g=r("conv256_1"),y=r("conv256_2"),b=r("conv256_down_out"),{fc:x}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!SJ(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);
2let w={conv32_down:a,conv32_1:s,conv32_2:i,conv32_3:o,conv64_down:l,conv64_1:u,conv64_2:d,conv64_3:p,conv128_down:h,conv128_1:c,conv128_2:f,conv256_down:m,conv256_1:g,conv256_2:y,conv256_down_out:b,fc:x};return AQ(e,t),{params:w,paramMappings:t}}(e)}extractParams(e){return function(e){let{extractWeights:t,getRemainingWeights:n}=zQ(e),r=[],{extractConvLayerParams:a,extractResidualLayerParams:s}=f0(t,r),i=a(4704,32,7,"conv32_down"),o=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),u=s(9216,32,3,"conv32_3"),d=s(36864,64,3,"conv64_down",!0),p=s(36864,64,3,"conv64_1"),h=s(36864,64,3,"conv64_2"),c=s(36864,64,3,"conv64_3"),f=s(147456,128,3,"conv128_down",!0),m=s(147456,128,3,"conv128_1"),g=s(147456,128,3,"conv128_2"),y=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),w=s(589824,256,3,"conv256_down_out"),v=Ci((()=>Eh(uh(t(32768),[128,256]),[1,0])));if(r.push({paramPath:"fc"}),0!==n().length)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:i,conv32_1:o,conv32_2:l,conv32_3:u,conv64_down:d,conv64_1:p,conv64_2:h,conv64_3:c,conv128_down:f,conv128_1:m,conv128_2:g,conv256_down:y,conv256_1:b,conv256_2:x,conv256_down_out:w,fc:v},paramMappings:r}}(e)}};function x0(e,t){return{...e,descriptor:t}}function w0(e,t){return{...e,age:t}}function v0(e,t,n){return{...e,gender:t,genderProbability:n}}function k0(e,t){function n(n,r,a,s,i){let o=ph(e(n*r*a*a),[a,a,n,r]),l=lh(e(r));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/${i?"batch_norm_offset":"bias"}`}),{filters:o,bias:l}}function r(e,t,r,a){let{filters:s,bias:i}=n(e,t,r,a,!0);return{filters:s,batch_norm_offset:i}}function a(n,a,s){let i=function(n,r){let a=ph(e(9*n),[3,3,n,1]),s=lh(e(n)),i=lh(e(n)),o=lh(e(n)),l=lh(e(n));return t.push({paramPath:`${r}/filters`},{paramPath:`${r}/batch_norm_scale`},{paramPath:`${r}/batch_norm_offset`},{paramPath:`${r}/batch_norm_mean`},{paramPath:`${r}/batch_norm_variance`}),{filters:a,batch_norm_scale:s,batch_norm_offset:i,batch_norm_mean:o,batch_norm_variance:l}}(n,`${s}/depthwise_conv`);return{depthwise_conv:i,pointwise_conv:r(n,a,1,`${s}/pointwise_conv`)}}return{extractMobilenetV1Params:function(){return{conv_0:r(3,32,3,"mobilenetv1/conv_0"),conv_1:a(32,64,"mobilenetv1/conv_1"),conv_2:a(64,128,"mobilenetv1/conv_2"),conv_3:a(128,128,"mobilenetv1/conv_3"),conv_4:a(128,256,"mobilenetv1/conv_4"),conv_5:a(256,256,"mobilenetv1/conv_5"),conv_6:a(256,512,"mobilenetv1/conv_6"),conv_7:a(512,512,"mobilenetv1/conv_7"),conv_8:a(512,512,"mobilenetv1/conv_8"),conv_9:a(512,512,"mobilenetv1/conv_9"),conv_10:a(512,512,"mobilenetv1/conv_10"),conv_11:a(512,512,"mobilenetv1/conv_11"),conv_12:a(512,1024,"mobilenetv1/conv_12"),conv_13:a(1024,1024,"mobilenetv1/conv_13")}},extractPredictionLayerParams:function(){return{conv_0:r(1024,256,1,"prediction_layer/conv_0"),conv_1:r(256,512,3,"prediction_layer/conv_1"),conv_2:r(512,128,1,"prediction_layer/conv_2"),conv_3:r(128,256,3,"prediction_layer/conv_3"),conv_4:r(256,128,1,"prediction_layer/conv_4"),conv_5:r(128,256,3,"prediction_layer/conv_5"),conv_6:r(256,64,1,"prediction_layer/conv_6"),conv_7:r(64,128,3,"prediction_layer/conv_7"),box_predictor_0:{box_encoding_predictor:n(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),class_predictor:n(512,9,1,"prediction_layer/box_predictor_0/class_predictor")},box_predictor_1:{box_encoding_predictor:n(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),class_predictor:n(1024,18,1,"prediction_layer/box_predictor_1/class_predictor")},box_predictor_2:{box_encoding_predictor:n(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),class_predictor:n(512,18,1,"prediction_layer/box_predictor_2/class_predictor")},box_predictor_3:{box_encoding_predictor:n(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),class_predictor:n(256,18,1,"prediction_layer/box_predictor_3/class_predictor")},box_predictor_4:{box_encoding_predictor:n(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),class_predictor:n(256,18,1,"prediction_layer/box_predictor_4/class_predictor")},box_predictor_5:{box_encoding_predictor:n(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),class_predictor:n(128,18,1,"prediction_layer/box_predictor_5/class_predictor")}}}}}function I0(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=function(e,t){let n=LQ(e,t);function r(e,t,r){return{filters:n(`${e}/Conv2d_${t}_pointwise/weights`,4,`${r}/filters`),batch_norm_offset:n(`${e}/Conv2d_${t}_pointwise/convolution_bn_offset`,1,`${r}/batch_norm_offset`)}}function a(e){let t=`mobilenetv1/conv_${e}`,a=`MobilenetV1/Conv2d_${e}_depthwise`,s=`${t}/depthwise_conv`,i=`${t}/pointwise_conv`;return{depthwise_conv:{filters:n(`${a}/depthwise_weights`,4,`${s}/filters`),batch_norm_scale:n(`${a}/BatchNorm/gamma`,1,`${s}/batch_norm_scale`),batch_norm_offset:n(`${a}/BatchNorm/beta`,1,`${s}/batch_norm_offset`),batch_norm_mean:n(`${a}/BatchNorm/moving_mean`,1,`${s}/batch_norm_mean`),batch_norm_variance:n(`${a}/BatchNorm/moving_variance`,1,`${s}/batch_norm_variance`)}
2,pointwise_conv:r("MobilenetV1",e,i)}}function s(e,t){return{filters:n(`${e}/weights`,4,`${t}/filters`),bias:n(`${e}/biases`,1,`${t}/bias`)}}function i(e){return{box_encoding_predictor:s(`Prediction/BoxPredictor_${e}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${e}/box_encoding_predictor`),class_predictor:s(`Prediction/BoxPredictor_${e}/ClassPredictor`,`prediction_layer/box_predictor_${e}/class_predictor`)}}return{extractMobilenetV1Params:function(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:a(1),conv_2:a(2),conv_3:a(3),conv_4:a(4),conv_5:a(5),conv_6:a(6),conv_7:a(7),conv_8:a(8),conv_9:a(9),conv_10:a(10),conv_11:a(11),conv_12:a(12),conv_13:a(13)}},extractPredictionLayerParams:function(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:i(0),box_predictor_1:i(1),box_predictor_2:i(2),box_predictor_3:i(3),box_predictor_4:i(4),box_predictor_5:i(5)}}}}(e,t),a=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!NJ(a))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${a}`);let s={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:a}};return AQ(e,t),{params:s,paramMappings:t}}function S0(e,t,n){return Ci((()=>{let r=Kl(e,t.filters,n,"same");return r=Go(r,t.batch_norm_offset),Ul(r,0,6)}))}var N0=.0010000000474974513;function T0(e,t){return Ci((()=>{let n,r=S0(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach(((e,t)=>{let a=t+1,s=function(e){return[2,4,6,12].some((t=>t===e))?[2,2]:[1,1]}(a);r=function(e,t,n){return Ci((()=>{let r=ou(e,t.filters,n,"same");return r=Fl(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,N0),Ul(r,0,6)}))}(r,e.depthwise_conv,s),r=S0(r,e.pointwise_conv,[1,1]),11===a&&(n=r)})),null===n)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}}))}function _0(e,t,n){let r=e.arraySync(),a=Math.min(r[t][0],r[t][2]),s=Math.min(r[t][1],r[t][3]),i=Math.max(r[t][0],r[t][2]),o=Math.max(r[t][1],r[t][3]),l=Math.min(r[n][0],r[n][2]),u=Math.min(r[n][1],r[n][3]),d=Math.max(r[n][0],r[n][2]),p=Math.max(r[n][1],r[n][3]),h=(i-a)*(o-s),c=(d-l)*(p-u);if(h<=0||c<=0)return 0;let f=Math.max(a,l),m=Math.max(s,u),g=Math.min(i,d),y=Math.min(o,p),b=Math.max(g-f,0)*Math.max(y-m,0);return b/(h+c-b)}function C0(e,t){let{sizes:n,centers:r}=function(e){let t=Ih(Eh(e,[1,0])),n=[yd(t[2],t[0]),yd(t[3],t[1])];return{sizes:n,centers:[Go(t[0],jo(n[0],2)),Go(t[1],jo(n[1],2))]}}(e),a=Ih(Eh(t,[1,0])),s=jo(qo(Wu(jo(a[2],5)),n[0]),2),i=Go(qo(jo(a[0],10),n[0]),r[0]),o=jo(qo(Wu(jo(a[3],5)),n[1]),2),l=Go(qo(jo(a[1],10),n[1]),r[1]);return Eh(ah([yd(i,s),yd(l,o),Go(i,s),Go(l,o)]),[1,0])}function E0(e,t){return Ci((()=>{let n=e.shape[0];return{boxPredictionEncoding:kl($Q(e,t.box_encoding_predictor),[n,-1,1,4]),classPrediction:kl($Q(e,t.class_predictor),[n,-1,3])}}))}var $0=class{constructor({minConfidence:e,maxResults:t}={}){if(this._name="SsdMobilenetv1Options",this._minConfidence=e||.5,this._maxResults=t||100,"number"!=typeof this._minConfidence||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if("number"!=typeof this._maxResults)throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}},A0=class extends TQ{constructor(){super("SsdMobilenetv1")}forwardInput(e){let{params:t}=this;if(!t)throw new Error("SsdMobilenetv1 - load model before inference");return Ci((()=>{let n=Wo(e.toBatchTensor(512,!1),"float32"),r=T0(yd(jo(n,127.5),1),t.mobilenetv1),{boxPredictions:a,classPredictions:s}=function(e,t,n){return Ci((()=>{let r=S0(e,n.conv_0,[1,1]),a=S0(r,n.conv_1,[2,2]),s=S0(a,n.conv_2,[1,1]),i=S0(s,n.conv_3,[2,2]),o=S0(i,n.conv_4,[1,1]),l=S0(o,n.conv_5,[2,2]),u=S0(l,n.conv_6,[1,1]),d=S0(u,n.conv_7,[2,2]),p=E0(t,n.box_predictor_0),h=E0(e,n.box_predictor_1),c=E0(a,n.box_predictor_2),f=E0(i,n.box_predictor_3),m=E0(l,n.box_predictor_4),g=E0(d,n.box_predictor_5);return{boxPredictions:Nl([p.boxPredictionEncoding,h.boxPredictionEncoding,c.boxPredictionEncoding,f.boxPredictionEncoding,m.boxPredictionEncoding,g.boxPredictionEncoding],1),classPredictions:Nl([p.classPrediction,h.classPrediction,c.classPrediction,f.classPrediction,m.classPrediction,g.classPrediction],1)}}))}(r.out,r.conv11,t.prediction_layer);return function(e,t,n){return Ci((()=>{let r=e.shape[0],a=C0(kl(Gu(n.extra_dim,[r,1,1]),[-1,4]),kl(e,[-1,4]));a=kl(a,[r,a.shape[0]/r,4]);let s=_l(Cl(t,[0,0,1],[-1,-1,-1])),i=Cl(s,[0,0,0],[-1,-1,1]);return i=kl(i,[r,i.shape[1]]),{boxes:Ih(a),scores:Ih(i)}}))}(a,s,t.output_layer)}
2))}async forward(e){return this.forwardInput(await xQ(e))}async locateFaces(e,t={}){let{maxResults:n,minConfidence:r}=new $0(t),a=await xQ(e),{boxes:s,scores:i}=this.forwardInput(a),o=s[0],l=i[0];for(let e=1;e<s.length;e++)s[e].dispose(),i[e].dispose();let u=Array.from(l.dataSync()),d=function(e,t,n,r,a){let s=e.shape[0],i=Math.min(n,s),o=t.map(((e,t)=>({score:e,boxIndex:t}))).filter((e=>e.score>a)).sort(((e,t)=>t.score-e.score)),l=e=>e<=r?1:0,u=[];return o.forEach((t=>{if(u.length>=i)return;let n=t.score;for(let n=u.length-1;n>=0;--n){let r=_0(e,t.boxIndex,u[n]);if(0!==r&&(t.score*=l(r),t.score<=a))break}n===t.score&&u.push(t.boxIndex)})),u}(o,u,n,.5,r),p=a.getReshapedInputDimensions(0),h=a.inputSize,c=h/p.width,f=h/p.height,m=o.arraySync(),g=d.map((e=>{let[t,n]=[Math.max(0,m[e][0]),Math.min(1,m[e][2])].map((e=>e*f)),[r,s]=[Math.max(0,m[e][1]),Math.min(1,m[e][3])].map((e=>e*c));return new BJ(u[e],new HJ(r,t,s-r,n-t),{height:a.getInputHeight(0),width:a.getInputWidth(0)})}));return o.dispose(),l.dispose(),g}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(e){return I0(e)}extractParams(e){return function(e){let t=[],{extractWeights:n,getRemainingWeights:r}=zQ(e),{extractMobilenetV1Params:a,extractPredictionLayerParams:s}=k0(n,t),i=a(),o=s(),l={extra_dim:dh(n(20472),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),0!==r().length)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:i,prediction_layer:o,output_layer:l},paramMappings:t}}(e)}};var R0=[new OJ(.738768,.874946),new OJ(2.42204,2.65704),new OJ(4.30971,7.04493),new OJ(10.246,4.59428),new OJ(12.6868,11.8741)],F0=[new OJ(1.603231,2.094468),new OJ(6.041143,7.080126),new OJ(2.882459,3.518061),new OJ(4.266906,5.178857),new OJ(9.041765,10.66308)],D0=[117.001,114.697,97.404],M0=e=>"number"==typeof e;function O0(e){return Ci((()=>{let t=qo(e,Du(.10000000149011612));return Go(Ap(yd(e,t)),t)}))}function L0(e,t){return Ci((()=>{let n=Hd(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Kl(n,t.conv.filters,[1,1],"valid"),n=yd(n,t.bn.sub),n=qo(n,t.bn.truediv),n=Go(n,t.conv.bias),O0(n)}))}function z0(e,t){return Ci((()=>{let n=Hd(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Wp(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=Go(n,t.bias),O0(n)}))}function P0(e,t){let n=RQ(e,t);let r=MQ(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:function(r,a,s){let i=n(r,a,3,`${s}/conv`),o=function(n,r){let a=lh(e(n)),s=lh(e(n));return t.push({paramPath:`${r}/sub`},{paramPath:`${r}/truediv`}),{sub:a,truediv:s}}(a,`${s}/bn`);return{conv:i,bn:o}},extractSeparableConvParams:r}}function B0(e,t){let n=LQ(e,t);function r(e){return{filters:n(`${e}/filters`,4),bias:n(`${e}/bias`,1)}}return{extractConvParams:r,extractConvWithBatchNormParams:function(e){let t=r(`${e}/conv`),a=function(e){return{sub:n(`${e}/sub`,1),truediv:n(`${e}/truediv`,1)}}(`${e}/bn`);return{conv:t,bn:a}},extractSeparableConvParams:OQ(n)}}var W0=class{constructor({inputSize:e,scoreThreshold:t}={}){if(this._name="TinyYolov2Options",this._inputSize=e||416,this._scoreThreshold=t||.5,"number"!=typeof this._inputSize||this._inputSize%32!=0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if("number"!=typeof this._scoreThreshold||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}},V0=class e extends TQ{constructor(e){super("TinyYolov2"),function(e){if(!e)throw new Error(`invalid config: ${e}`);if("boolean"!=typeof e.withSeparableConvs)throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!M0(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every((e=>"string"==typeof e)))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map((e=>e||{})).every((e=>M0(e.x)&&M0(e.y))))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||3!==e.meanRgb.length||!e.meanRgb.every(M0))
2)throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}(e),this._config=e}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(e,t){let n=L0(e,t.conv0);return n=_d(n,[2,2],[2,2],"same"),n=L0(n,t.conv1),n=_d(n,[2,2],[2,2],"same"),n=L0(n,t.conv2),n=_d(n,[2,2],[2,2],"same"),n=L0(n,t.conv3),n=_d(n,[2,2],[2,2],"same"),n=L0(n,t.conv4),n=_d(n,[2,2],[2,2],"same"),n=L0(n,t.conv5),n=_d(n,[2,2],[1,1],"same"),n=L0(n,t.conv6),n=L0(n,t.conv7),$Q(n,t.conv8,"valid",!1)}runMobilenet(e,t){let n=this.config.isFirstLayerConv2d?O0($Q(e,t.conv0,"valid",!1)):z0(e,t.conv0);return n=_d(n,[2,2],[2,2],"same"),n=z0(n,t.conv1),n=_d(n,[2,2],[2,2],"same"),n=z0(n,t.conv2),n=_d(n,[2,2],[2,2],"same"),n=z0(n,t.conv3),n=_d(n,[2,2],[2,2],"same"),n=z0(n,t.conv4),n=_d(n,[2,2],[2,2],"same"),n=z0(n,t.conv5),n=_d(n,[2,2],[1,1],"same"),n=t.conv6?z0(n,t.conv6):n,n=t.conv7?z0(n,t.conv7):n,$Q(n,t.conv8,"valid",!1)}forwardInput(e,t){let{params:n}=this;if(!n)throw new Error("TinyYolov2 - load model before inference");return Ci((()=>{let r=Wo(e.toBatchTensor(t,!1),"float32");return r=this.config.meanRgb?VJ(r,this.config.meanRgb):r,r=r.div(255),this.config.withSeparableConvs?this.runMobilenet(r,n):this.runTinyYolov2(r,n)}))}async forward(e,t){return this.forwardInput(await xQ(e),t)}async detect(e,t={}){let{inputSize:n,scoreThreshold:r}=new W0(t),a=await xQ(e),s=await this.forwardInput(a,n),i=Ci((()=>Ih(s)[0].expandDims())),o={width:a.getInputWidth(0),height:a.getInputHeight(0)},l=await this.extractBoxes(i,a.getReshapedInputDimensions(0),r);s.dispose(),i.dispose();let u=l.map((e=>e.box)),d=l.map((e=>e.score)),p=l.map((e=>e.classScore)),h=l.map((e=>this.config.classes[e.label]));return function(e,t,n,r=!0){let a=t.map(((e,t)=>({score:e,boxIndex:t}))).sort(((e,t)=>e.score-t.score)).map((e=>e.boxIndex)),s=[];for(;a.length>0;){let t=a.pop();s.push(t);let i=a,o=[];for(let n=0;n<i.length;n++){let a=i[n],s=e[t],l=e[a];o.push(WJ(s,l,r))}a=a.filter(((e,t)=>o[t]<=n))}return s}(u.map((e=>e.rescale(n))),d,this.config.iouThreshold,!0).map((e=>new PJ(d[e],p[e],h[e],u[e],o)))}getDefaultModelName(){return""}extractParamsFromWeightMap(e){return function(e,t){let n,r=[],{extractConvParams:a,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}=B0(e,r);if(t.withSeparableConvs){let e=t.filterSizes&&t.filterSizes.length||9;n={conv0:t.isFirstLayerConv2d?a("conv0"):i("conv0"),conv1:i("conv1"),conv2:i("conv2"),conv3:i("conv3"),conv4:i("conv4"),conv5:i("conv5"),conv6:e>7?i("conv6"):void 0,conv7:e>8?i("conv7"):void 0,conv8:a("conv8")}}else n={conv0:s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:s("conv6"),conv7:s("conv7"),conv8:a("conv8")};return AQ(e,r),{params:n,paramMappings:r}}(e,this.config)}extractParams(t){let n=this.config.filterSizes||e.DEFAULT_FILTER_SIZES,r=n?n.length:void 0;if(7!==r&&8!==r&&9!==r)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return function(e,t,n,r){let a,{extractWeights:s,getRemainingWeights:i}=zQ(e),o=[],{extractConvParams:l,extractConvWithBatchNormParams:u,extractSeparableConvParams:d}=P0(s,o);if(t.withSeparableConvs){let[e,s,i,o,u,p,h,c,f]=r;a={conv0:t.isFirstLayerConv2d?l(e,s,3,"conv0"):d(e,s,"conv0"),conv1:d(s,i,"conv1"),conv2:d(i,o,"conv2"),conv3:d(o,u,"conv3"),conv4:d(u,p,"conv4"),conv5:d(p,h,"conv5"),conv6:c?d(h,c,"conv6"):void 0,conv7:f?d(c,f,"conv7"):void 0,conv8:l(f||c||h,5*n,1,"conv8")}}else{let[e,t,s,i,o,d,p,h,c]=r;a={conv0:u(e,t,"conv0"),conv1:u(t,s,"conv1"),conv2:u(s,i,"conv2"),conv3:u(i,o,"conv3"),conv4:u(o,d,"conv4"),conv5:u(d,p,"conv5"),conv6:u(p,h,"conv6"),conv7:u(h,c,"conv7"),conv8:l(c,5*n,1,"conv8")}}if(0!==i().length)throw new Error(`weights remaing after extract: ${i().length}`);return{params:a,paramMappings:o}}(t,this.config,this.boxEncodingSize,n)}async extractBoxes(e,t,n){let{width:r,height:a}=t,s=Math.max(r,a),i=s/r,o=s/a,l=e.shape[1],u=this.config.anchors.length,[d,p,h]=Ci((()=>{let t=e.reshape([l,l,u,this.boxEncodingSize]);return[t.slice([0,0,0,0],[l,l,u,4]),t.slice([0,0,0,4],[l,l,u,1]),this.withClassScores?Yp(t.slice([0,0,0,5],[l,l,u,this.config.classes.length]),3):Du(0)]})),c=[],f=await p.array(),m=await d.array();for(let e=0;e<l;e++)for(let t=0;t<l;t++)for(let r=0;r<u;r++){let a=UJ(f[e][t][r][0]);if(!n||a>n){let n=(t+UJ(m[e][t][r][0]))/l*i,s=(e+UJ(m[e][t][r][1]))/l*o,u=Math.exp(m[e][t][r][2])*this.config.anchors[r].x/l*i,d=Math.exp(m[e][t][r][3])*this.config.anchors[r].y/l*o,p=n-u/2,f=s-d/2,g={row:e,col:t,anchor:r},{classScore:y,label:b}=this.withClassScores?await this.extractPredictedClass(h,g):{classScore:1,label:0};c.push({box:new zJ(p,f,p+u,f+d),score:a,classScore:a*y,label:b,...g})}}return d.dispose(),p.dispose(),h.dispose(),c}async extractPredictedClass(e,t){let{row:n,col:r,anchor:a}=t,s=await e.array();return Array(this.config.classes.length).fill(0).map(((e,t)=>s[n][r][a][t])).map(((e,t)=>({classScore:e,label:t}))).reduce(((e,t)=>e.classScore>t.classScore?e:t))}};V0.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var U0=V0,G0=class extends U0{constructor(e=!0){super({withSeparableConvs:e,iouThreshold:.4,classes:["face"],...e?{anchors:F0,meanRgb:D0}:{anchors:R0,withClassScores:!0}})}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(e,t){return(await this.detect(e,t)).map((e=>new BJ(e.score,e.relativeBox,{width:e.imageWidth,height:e.imageHeight})))}getDefaultModelName(){return this.withSeparableConvs?"tiny_yolov2_separable_conv_model":"tiny_yolov2_model"}extractParamsFromWeightMap(e){return super.extractParamsFromWeightMap(e)}};var H0=class extends W0{constructor(){super(...arguments),this._name="TinyFaceDetectorOptions"}},j0=class{async then(e){return e(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function q0(e,t,n,r,a=(({alignedRect:e})=>e)){let s=e.map((e=>YQ(e)?a(e):e.detection)),i=r||(t instanceof $s?await vQ(t,s):await wQ(t,s)),o=await n(i);
2return i.forEach((e=>e instanceof $s&&e.dispose())),o}async function K0(e,t,n,r,a){return q0([e],t,(async e=>n(e[0])),r,a)}var X0=[new OJ(1.603231,2.094468),new OJ(6.041143,7.080126),new OJ(2.882459,3.518061),new OJ(4.266906,5.178857),new OJ(9.041765,10.66308)],Y0=[117.001,114.697,97.404],Z0=class extends U0{constructor(){super({withSeparableConvs:!0,iouThreshold:.4,classes:["face"],anchors:X0,meanRgb:Y0,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]})}get anchors(){return this.config.anchors}async locateFaces(e,t){return(await this.detect(e,t)).map((e=>new BJ(e.score,e.relativeBox,{width:e.imageWidth,height:e.imageHeight})))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(e){return super.extractParamsFromWeightMap(e)}},J0={ssdMobilenetv1:new A0,tinyFaceDetector:new Z0,tinyYolov2:new G0,faceLandmark68Net:new u0,faceLandmark68TinyNet:new class extends l0{constructor(e=new d0){super("FaceLandmark68TinyNet",e)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}},faceRecognitionNet:new b0,faceExpressionNet:new class extends HQ{constructor(e=new VQ){super("FaceExpressionNet",e)}forwardInput(e){return Ci((()=>Yp(this.runNet(e))))}async forward(e){return this.forwardInput(await xQ(e))}async predictExpressions(e){let t=await xQ(e),n=await this.forwardInput(t),r=await Promise.all(Ih(n).map((async e=>{let t=e.dataSync();return e.dispose(),t})));n.dispose();let a=r.map((e=>new qQ(e)));return t.isBatchInput?a:a[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}},ageGenderNet:new class extends TQ{constructor(e=new s0(2)){super("AgeGenderNet"),this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){let{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return Ci((()=>{let n=e instanceof bQ?this.faceFeatureExtractor.forwardInput(e):e,r=Il(n,[7,7],[2,2],"valid").as2D(n.shape[0],-1);return{age:UQ(r,t.fc.age).as1D(),gender:UQ(r,t.fc.gender)}}))}forwardInput(e){return Ci((()=>{let{age:t,gender:n}=this.runNet(e);return{age:t,gender:Yp(n)}}))}async forward(e){return this.forwardInput(await xQ(e))}async predictAgeAndGender(e){let t=await xQ(e),n=await this.forwardInput(t),r=Ih(n.age),a=Ih(n.gender),s=r.map(((e,t)=>({ageTensor:e,genderTensor:a[t]}))),i=await Promise.all(s.map((async({ageTensor:e,genderTensor:t})=>{let n=e.dataSync()[0],r=t.dataSync()[0],a=r>.5,s=a?"male":"female",i=a?r:1-r;return e.dispose(),t.dispose(),{age:n,gender:s,genderProbability:i}})));return n.age.dispose(),n.gender.dispose(),t.isBatchInput?i:i[0]}getDefaultModelName(){return"age_gender_model"}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){let{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return function(e){let t=[],{extractWeights:n,getRemainingWeights:r}=zQ(e),a=FQ(n,t),s=a(512,1,"fc/age"),i=a(512,2,"fc/gender");if(0!==r().length)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}(e)}extractParamsFromWeightMap(e){let{featureExtractorMap:t,classifierMap:n}=GQ(e);return this.faceFeatureExtractor.loadFromWeightMap(t),function(e){let t=[],n=LQ(e,t);function r(e){return{weights:n(`${e}/weights`,2),bias:n(`${e}/bias`,1)}}let a={fc:{age:r("fc/age"),gender:r("fc/gender")}};return AQ(e,t),{params:a,paramMappings:t}}(n)}extractParams(e){let t=e.slice(0,e.length-1539),n=e.slice(e.length-1539);return this.faceFeatureExtractor.extractWeights(t),this.extractClassifierParams(n)}}},Q0=e=>J0.tinyFaceDetector.load(e),e1=e=>J0.faceLandmark68Net.load(e),t1=e=>J0.faceRecognitionNet.load(e),n1=e=>J0.faceExpressionNet.load(e),r1=class extends j0{constructor(e,t,n){super(),this.parentTask=e,this.input=t,this.extractedFaces=n}},a1=class extends r1{async run(){let e=await this.parentTask,t=await q0(e,this.input,(async e=>Promise.all(e.map((e=>J0.faceExpressionNet.predictExpressions(e))))),this.extractedFaces);return e.map(((e,n)=>KQ(e,t[n])))}withAgeAndGender(){return new u1(this,this.input)}},s1=class extends r1{async run(){let e=await this.parentTask;if(e)return KQ(e,await K0(e,this.input,(e=>J0.faceExpressionNet.predictExpressions(e)),this.extractedFaces))}withAgeAndGender(){return new d1(this,this.input)}},i1=class extends a1{withAgeAndGender(){return new p1(this,this.input)}withFaceDescriptors(){return new f1(this,this.input)}},o1=class extends s1{withAgeAndGender(){return new h1(this,this.input)}withFaceDescriptor(){return new m1(this,this.input)}},l1=class extends j0{constructor(e,t,n){super(),this.parentTask=e,this.input=t,this.extractedFaces=n}},u1=class extends l1{async run(){let e=await this.parentTask,t=await q0(e,this.input,(async e=>Promise.all(e.map((e=>J0.ageGenderNet.predictAgeAndGender(e))))),this.extractedFaces);return e.map(((e,n)=>{let{age:r,gender:a,genderProbability:s}=t[n];return w0(v0(e,a,s),r)}))}withFaceExpressions(){return new a1(this,this.input)}},d1=class extends l1{async run(){let e=await this.parentTask;if(!e)return;let{age:t,gender:n,genderProbability:r}=await K0(e,this.input,(e=>J0.ageGenderNet.predictAgeAndGender(e)),this.extractedFaces);return w0(v0(e,n,r),t)}withFaceExpressions(){return new s1(this,this.input)}},p1=class extends u1{withFaceExpressions(){return new i1(this,this.input)}withFaceDescriptors(){return new f1(this,this.input)}},h1=class extends d1{withFaceExpressions(){return new o1(this,this.input)}withFaceDescriptor(){return new m1(this,this.input)}},c1=class extends j0{constructor(e,t){super(),this.parentTask=e,this.input=t}},f1=class extends c1{async run(){let e=await this.parentTask;return(await q0(e,this.input,(e=>Promise.all(e.map((e=>J0.faceRecognitionNet.computeFaceDescriptor(e))))),null,(e=>e.landmarks.align(null,{useDlibAlignment:!0})))).map(((t,n)=>x0(e[n],t)))}withFaceExpressions(){return new i1(this,this.input)}withAgeAndGender(){return new p1(this,this.input)}},m1=class extends c1{async run(){let e=await this.parentTask;if(e)return x0(e,await K0(e,this.input,(e=>J0.faceRecognitionNet.computeFaceDescriptor(e)),null,(e=>e.landmarks.align(null,{useDlibAlignment:!0}))))}withFaceExpressions(){return new o1(this,this.input)}withAgeAndGender(){return new h1(this,this.input)}},g1=class extends j0{constructor(e,t,n){super(),this.parentTask=e,this.input=t,this.useTinyLandmarkNet=n}get landmarkNet(){return this.useTinyLandmarkNet?J0.faceLandmark68TinyNet:J0.faceLandmark68Net}},y1=class extends g1{async run(){let e=await this.parentTask,t=e.map((e=>e.detection)),n=this.input instanceof $s?await vQ(this.input,t):await wQ(this.input,t),r=await Promise.all(n.map((e=>this.landmarkNet.detectLandmarks(e))));
2return n.forEach((e=>e instanceof $s&&e.dispose())),e.filter(((e,t)=>r[t])).map(((e,t)=>ZQ(e,r[t])))}withFaceExpressions(){return new i1(this,this.input)}withAgeAndGender(){return new p1(this,this.input)}withFaceDescriptors(){return new f1(this,this.input)}},b1=class extends g1{async run(){let e=await this.parentTask;if(!e)return;let{detection:t}=e,n=this.input instanceof $s?await vQ(this.input,[t]):await wQ(this.input,[t]),r=await this.landmarkNet.detectLandmarks(n[0]);return n.forEach((e=>e instanceof $s&&e.dispose())),ZQ(e,r)}withFaceExpressions(){return new o1(this,this.input)}withAgeAndGender(){return new h1(this,this.input)}withFaceDescriptor(){return new m1(this,this.input)}},x1=class extends j0{constructor(e,t=new $0){super(),this.input=e,this.options=t}},w1=class extends x1{async run(){let e,{input:t,options:n}=this;if(n instanceof H0)e=J0.tinyFaceDetector.locateFaces(t,n);else if(n instanceof $0)e=J0.ssdMobilenetv1.locateFaces(t,n);else{if(!(n instanceof W0))throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");e=J0.tinyYolov2.locateFaces(t,n)}return e}runAndExtendWithFaceDetections(){return new Promise(((e,t)=>{this.run().then((t=>e(t.map((e=>XJ({}
2,e)))))).catch((e=>t(e)))}))}withFaceLandmarks(e=!1){return new y1(this.runAndExtendWithFaceDetections(),this.input,e)}withFaceExpressions(){return new a1(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new u1(this.runAndExtendWithFaceDetections(),this.input)}},v1=class extends x1{async run(){let e=await new w1(this.input,this.options),t=e[0];return e.forEach((e=>{e.score>t.score&&(t=e)})),t}runAndExtendWithFaceDetection(){return new Promise((async e=>{let t=await this.run();e(t?XJ({},t):void 0)}))}withFaceLandmarks(e=!1){return new b1(this.runAndExtendWithFaceDetection(),this.input,e)}withFaceExpressions(){return new s1(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new d1(this.runAndExtendWithFaceDetection(),this.input)}};function k1(e,t=new $0){return new v1(e,t)}function I1(e,t){let{width:n,height:r}=new vJ(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map((e=>I1(e,{width:n,height:r})));if(YQ(e)){let t=e.detection.forSize(n,r),a=e.unshiftedLandmarks.forSize(t.box.width,t.box.height);return ZQ(XJ(e,t),a)}return KJ(e)?XJ(e,e.detection.forSize(n,r)):e instanceof jJ||e instanceof BJ?e.forSize(n,r):e}var S1=n(31913);function N1(e){return N1="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(e){return typeof e}:function(e){return e&&"function"==typeof Symbol&&e.constructor===Symbol&&e!==Symbol.prototype?"symbol":typeof e},N1(e)}function T1(){T1=function(){return t};var e,t={},n=Object.prototype,r=n.hasOwnProperty,a=Object.defineProperty||function(e,t,n){e[t]=n.value},s="function"==typeof Symbol?Symbol:{},i=s.iterator||"@@iterator",o=s.asyncIterator||"@@asyncIterator",l=s.toStringTag||"@@toStringTag";function u(e,t,n){return Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}),e[t]}try{u({},"")}catch(e){u=function(e,t,n){return e[t]=n}}function d(e,t,n,r){var s=t&&t.prototype instanceof y?t:y,i=Object.create(s.prototype),o=new $(r||[]);return a(i,"_invoke",{value:T(e,n,o)}),i}function p(e,t,n){try{return{type:"normal",arg:e.call(t,n)}}catch(e){return{type:"throw",arg:e}}}t.wrap=d;var h="suspendedStart",c="suspendedYield",f="executing",m="completed",g={};function y(){}function b(){}function x(){}var w={};u(w,i,(function(){return this}));var v=Object.getPrototypeOf,k=v&&v(v(A([])));k&&k!==n&&r.call(k,i)&&(w=k);var I=x.prototype=y.prototype=Object.create(w);function S(e){["next","throw","return"].forEach((function(t){u(e,t,(function(e){return this._invoke(t,e)}))}))}function N(e,t){function n(a,s,i,o){var l=p(e[a],e,s);if("throw"!==l.type){var u=l.arg,d=u.value;return d&&"object"==N1(d)&&r.call(d,"__await")?t.resolve(d.__await).then((function(e){n("next",e,i,o)}),(function(e){n("throw",e,i,o)})):t.resolve(d).then((function(e){u.value=e,i(u)}),(function(e){return n("throw",e,i,o)}))}o(l.arg)}var s;a(this,"_invoke",{value:function(e,r){function a(){return new t((function(t,a){n(e,r,t,a)}))}return s=s?s.then(a,a):a()}})}function T(t,n,r){var a=h;return function(s,i){if(a===f)throw new Error("Generator is already running");if(a===m){if("throw"===s)throw i;return{value:e,done:!0}}for(r.method=s,r.arg=i;;){var o=r.delegate;if(o){var l=_(o,r);if(l){if(l===g)continue;return l}}if("next"===r.method)r.sent=r._sent=r.arg;else if("throw"===r.method){if(a===h)throw a=m,r.arg;r.dispatchException(r.arg)}else"return"===r.method&&r.abrupt("return",r.arg);a=f;var u=p(t,n,r);if("normal"===u.type){if(a=r.done?m:c,u.arg===g)continue;return{value:u.arg,done:r.done}}"throw"===u.type&&(a=m,r.method="throw",r.arg=u.arg)}}}function _(t,n){var r=n.method,a=t.iterator[r];if(a===e)return n.delegate=null,"throw"===r&&t.iterator.return&&(n.method="return",n.arg=e,_(t,n),"throw"===n.method)||"return"!==r&&(n.method="throw",n.arg=new TypeError("The iterator does not provide a '"+r+"' method")),g;var s=p(a,t.iterator,n.arg);if("throw"===s.type)return n.method="throw",n.arg=s.arg,n.delegate=null,g;var i=s.arg;
vendor: 1,295 bytes, line 2
2return i?i.done?(n[t.resultName]=i.value,n.next=t.nextLoc,"return"!==n.method&&(n.method="next",n.arg=e),n.delegate=null,g):i:(n.method="throw",n.arg=new TypeError("iterator result is not an object"),n.delegate=null,g)}function C(e){var t={tryLoc:e[0]};1 in e&&(t.catchLoc=e[1]),2 in e&&(t.finallyLoc=e[2],t.afterLoc=e[3]),this.tryEntries.push(t)}function E(e){var t=e.completion||{};t.type="normal",delete t.arg,e.completion=t}function $(e){this.tryEntries=[{tryLoc:"root"}],e.forEach(C,this),this.reset(!0)}function A(t){if(t||""===t){var n=t[i];if(n)return n.call(t);if("function"==typeof t.next)return t;if(!isNaN(t.length)){var a=-1,s=function n(){for(;++a<t.length;)if(r.call(t,a))return n.value=t[a],n.done=!1,n;return n.value=e,n.done=!0,n};return s.next=s}}throw new TypeError(N1(t)+" is not iterable")}return b.prototype=x,a(I,"constructor",{value:x,configurable:!0}),a(x,"constructor",{value:b,configurable:!0}),b.displayName=u(x,l,"GeneratorFunction"),t.isGeneratorFunction=function(e){var t="function"==typeof e&&e.constructor;return!!t&&(t===b||"GeneratorFunction"===(t.displayName||t.name))},t.mark=function(e){return Object.setPrototypeOf?Object.setPrototypeOf(e,x):(e.__proto__=x,u(e,l,"GeneratorFunction")),e.prototype=Object.create(I),e},t.awrap=function(e){return{__await:e}}
2,S(N.prototype),u(N.prototype,o,(function(){return this})),t.AsyncIterator=N,t.async=function(e,n,r,a,s){void 0===s&&(s=Promise);var i=new N(d(e,n,r,a),s);return t.isGeneratorFunction(n)?i:i.next().then((function(e){return e.done?e.value:i.next()}))},S(I),u(I,l,"Generator"),u(I,i,(function(){return this})),u(I,"toString",(function(){return"[object Generator]"})),t.keys=function(e){var t=Object(e),n=[];for(var r in t)n.push(r);return n.reverse(),function e(){for(;n.length;){var r=n.pop();if(r in t)return e.value=r,e.done=!1,e}return e.done=!0,e}},t.values=A,$.prototype={constructor:$,reset:function(t){if(this.prev=0,this.next=0,this.sent=this._sent=e,this.done=!1,this.delegate=null,this.method="next",this.arg=e,this.tryEntries.forEach(E),!t)for(var n in this)"t"===n.charAt(0)&&r.call(this,n)&&!isNaN(+n.slice(1))&&(this[n]=e)},stop:function(){this.done=!0;var e=this.tryEntries[0].completion;if("throw"===e.type)throw e.arg;return this.rval},dispatchException:function(t){if(this.done)throw t;var n=this;function a(r,a){return o.type="throw",o.arg=t,n.next=r,a&&(n.method="next",n.arg=e),!!a}for(var s=this.tryEntries.length-1;s>=0;--s){var i=this.tryEntries[s],o=i.completion;if("root"===i.tryLoc)return a("end");if(i.tryLoc<=this.prev){var l=r.call(i,"catchLoc"),u=r.call(i,"finallyLoc");if(l&&u){if(this.prev<i.catchLoc)return a(i.catchLoc,!0);if(this.prev<i.finallyLoc)return a(i.finallyLoc)}else if(l){if(this.prev<i.catchLoc)return a(i.catchLoc,!0)}else{if(!u)throw new Error("try statement without catch or finally");if(this.prev<i.finallyLoc)return a(i.finallyLoc)}}}},abrupt:function(e,t){for(var n=this.tryEntries.length-1;n>=0;--n){var a=this.tryEntries[n];if(a.tryLoc<=this.prev&&r.call(a,"finallyLoc")&&this.prev<a.finallyLoc){var s=a;break}}s&&("break"===e||"continue"===e)&&s.tryLoc<=t&&t<=s.finallyLoc&&(s=null);var i=s?s.completion:{};return i.type=e,i.arg=t,s?(this.method="next",this.next=s.finallyLoc,g):this.complete(i)},complete:function(e,t){if("throw"===e.type)throw e.arg;return"break"===e.type||"continue"===e.type?this.next=e.arg:"return"===e.type?(this.rval=this.arg=e.arg,this.method="return",this.next="end"):"normal"===e.type&&t&&(this.next=t),g},finish:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.finallyLoc===e)return this.complete(n.completion,n.afterLoc),E(n),g}},catch:function(e){for(var t=this.tryEntries.length-1;t>=0;--t){var n=this.tryEntries[t];if(n.tryLoc===e){var r=n.completion;if("throw"===r.type){var a=r.arg;E(n)}return a}}throw new Error("illegal catch attempt")},delegateYield:function(t,n,r){return this.delegate={iterator:A(t),resultName:n,nextLoc:r},"next"===this.method&&(this.arg=e),g}},t}function _1(e,t,n,r,a,s,i){try{var o=e[s](i),l=o.value}catch(e){return void n(e)}o.done?t(l):Promise.resolve(l).then(r,a)}function C1(e){return function(){var t=this,n=arguments;return new Promise((function(r,a){var s=e.apply(t,n);function i(e){_1(s,r,a,i,o,"next",e)}function o(e){_1(s,r,a,i,o,"throw",e)}i(void 0)}))}}const E1={emits:["close","proceed","verified"],props:{lang:{type:String,default:"en"},account:{type:Number,default:0},type:{type:String,default:"resident"},messages:{type:Object,default:{tl:{20:"Sorry, hindi matagpuan ang taong ito sa aming sistema.",21:"Isearch ang taong ito?",22:"Masyado pang maaga para mag-in.",23:"Ikaw ba ay mag ka-clock in na?",24:"Ikaw ba ay may ka-clock out na?",25:"Natapos na ang iyong schedule sa araw na ito","btn-green":"Isearch","btn-red":"Hindi","btn-yellow":"Oo, Naiintindihan ko.",face:"Paumanhin"},en:{20:"Sorry, this resident was not found in our system.",21:"Face recognized search person?",22:"It's too early to clock in.",23:"Are you going to clock in?",24:"Are you going to clock out?",25:"Your schedule for today has ended.","btn-green":"Search","btn-red":"No","btn-yellow":"Yes, I Understand.",face:"Sorry"}}}},data:function(){return{title:"Camera is loading please wait...",isCameraOpen:!1,cameraDevices:[],isLoading:!1,localStream:null,loading:!1,image:"",intervalID:null,countdown:10,rem_countdown:10,allow_countdown:!1,init:!0,allow_escape:!1,images:[],image_size:{inputSize:128},detect_person:0,show_api_loader:!1,mic:{enable:!0,listen:!1,stream:null},sound:{playing:!1},dialog:{show:!1,photo:null,name:null,message:null,btnloading:!1,status:null,btn_yellow:"",btn_red:"",btn_green:"",noface:null},resident:{id:null,api_request_id:null},titles:{tl:{20:"Hindi makita",21:"Nakita"},en:{20:"Not found.",21:"Face recognized"}}}},mounted:function(){var e=this;return C1(T1().mark((function t(){return T1().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return document.addEventListener("keydown",e.onKeydown),t.next=3,e.loadModels();
2case 3:e.initializeLoader();case 4:case"end":return t.stop()}}),t)})))()},unmounted:function(){clearInterval(this.intervalID),this.allow_countdown=!1,this.stopStreamedLocalVideo()},beforeDestroy:function(){this.onKeydown.removeEventListener(),clearInterval(this.intervalID),this.allow_countdown=!1,this.stopStreamedLocalVideo()},methods:{onKeydown:function(e){"Escape"===e.key&&this.$emit("close")},initializeLoader:function(){var e=this;this.$refs.spinner.style.visibility="visible";for(var t=function(t){setTimeout((function(){3===t?(e.$refs.loading_circle.style.strokeDashoffset=154,e.createCameraElement()):e.$refs.loading_circle.style.strokeDashoffset=e.loaderBorder(t,3)}),1e3*t)},n=1;n<=3;n++)t(n)},stopCameraStream:function(){this.$refs.camera.srcObject.getTracks().forEach((function(e){e.stop()}))},loaderBorder:function(e,t){return 154-154*(e/t)},createCameraElement:function(){var e=this;this.isLoading=!0,this.loading=!0,this.getCameraSelection(),this.isCameraOpen=!1,this.init=!0,this.rem_countdown=this.countdown,this.title="Please wait...",this.allow_escape=!1;navigator.mediaDevices.getUserMedia({audio:!1,video:!0}).then((function(t){e.isLoading=!1,e.loading=!1,e.isCameraOpen=!0,e.$refs.camera.srcObject=t,e.localStream=t,e.title="",e.detect(),e.$refs.spinner.style.visibility="hidden"})).catch((function(t){e.isLoading=!1,e.loading=!1,e.title="Failed to fetch camera"}))},spinnerLoader:function(e,t){var n=this.$refs.loading_circle_overlay;2===e?t?n.classList.add("verifying"):(n.classList.remove("verifying"),n.classList.add("success")):e?t?n.classList.add("success"):this.$refs.spinner.style.visibility="visible":t?n.classList.remove("success"):this.$refs.spinner.style.visibility="hidden"},updateCameraStream:function(){var e=this;return C1(T1().mark((function t(){return T1().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:e.stopCameraStream(),e.createCameraElement();case 2:case"end":return t.stop()}}),t)})))()},getCameraSelection:function(){var e=this;return C1(T1().mark((function t(){var n,r;return T1().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return e.cameraDevices=[],t.next=3,navigator.mediaDevices.enumerateDevices();case 3:n=t.sent,r=n.filter((function(e){return"videoinput"===e.kind})),r.map((function(t){e.cameraDevices.push({deviceId:t.deviceId,label:t.label})}));case 6:case"end":return t.stop()}}),t)})))()},closeCamera:function(){this.$emit("closeCamera"),this.stopCameraStream()},loadModels:function(){return C1(T1().mark((function e(){var t;return T1().wrap((function(e){for(;;)switch(e.prev=e.next){case 0:return t="/models",e.next=3,Q0(t);case 3:return e.next=5,e1(t);case 5:return e.next=7,n1(t);case 7:return e.next=9,t1(t);case 9:case"end":return e.stop()}}),e)})))()},detect:function(){var e=this;return C1(T1().mark((function t(){var n,r;return T1().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:try{n=e,(r=e.$refs.camera).addEventListener("play",(function(){var e=gQ(r),t=0;n.$refs.camera_body.append(e);var a={width:r.width,height:r.height};NQ(e,a),clearInterval(n.intervalID),n.intervalID=setInterval(C1(T1().mark((function s(){var i,o,l,u;return T1().wrap((function(s){for(;;)switch(s.prev=s.next){case 0:if(r.paused){s.next=33;break}return s.next=3,k1(r,new H0(n.image_size)).withFaceLandmarks().withFaceExpressions().withFaceDescriptor();case 3:if(i=s.sent,!n.allow_countdown&&n.init&&(n.init=!1,n.allow_countdown=!0),n.allow_escape=!0,i){s.next=12;break}return e.getContext("2d").clearRect(0,0,e.width,e.height),n.detect_person=0,t=0,n.$refs.loading_circle.style.strokeDashoffset=154,s.abrupt("return");case 12:if(o=I1(i,a),e.getContext("2d").clearRect(0,0,e.width,e.height),xJ.drawFaceLandmarks(e,o),xJ.drawDetections(e,o),l=o.detection.box,t+=100,!(l.width<145&&l.height<145)){s.next=21;break}return t-=1,s.abrupt("return");case 21:if(n.detect_person=1,u=n.loaderBorder(t,1500),n.$refs.loading_circle.style.strokeDashoffset=u,!(t>=1500)||n.hit){s.next=33;break}return new xJ.DrawBox(l).draw(e),n.spinnerLoader(2,1),r.pause(),setTimeout((function(){return n.$refs.loading_circle.style.strokeDashoffset=154}),500),s.next=32,setTimeout((function(){return n.captureDetected()}),500);case 32:t=0;case 33:case"end":return s.stop()}}),s)}))),100)}))}catch(e){}case 1:case"end":return t.stop()}}),t)})))()},captureDetected:function(){var e=this;return C1(T1().mark((function t(){var n,r,a,s,i;return T1().wrap((function(t){for(;;)switch(t.prev=t.next){case 0:return n=e.$refs.camera,r=e.$refs.canvas,r.getContext("2d").drawImage(n,
20,0,r.width,r.height),a=r.toDataURL("image/jpeg"),s={image:a,type:e.type},e.$refs.loader_api.classList.remove("d-none"),e.show_api_loader=!0,i=e,t.next=11,S1.Z.verifyFace(s).then((function(e){var t=e.data;console.log(t),t.status?i.recognized(t):i.not_recognized(t)})).catch((function(t){try{e.show_api_loader=!1,e.getError(t)}catch(e){}})).finally((function(){e.show_api_loader=!1}));case 11:case"end":return t.stop()}}),t)})))()},stopStreamedLocalVideo:function(){this.localStream&&this.localStream.getTracks().forEach((function(e){e.stop()}))},reset:function(){try{this.dialog.show=!1,this.$refs.camera.play(),this.$refs.loading_circle_overlay.classList.remove("verifying"),this.$refs.loading_circle_overlay.classList.remove("success"),this.$refs.loader_api.classList.add("d-none"),this.dialog.name=null,this.dialog.photo=null,this.dialog.status=null,setTimeout((function(){for(var e=document.getElementsByTagName("canvas");e[0];)e[0].parentNode.removeChild(e[0])}),100)}catch(e){console.log(e)}},search:function(){this.reset(),this.$emit("getTableData",{search:this.resident.record_id,resident:this.resident})},recognized:function(e){this.spinnerLoader(2,0),this.dialog.show=!0,this.dialog.photo=e.data.image,this.dialog.name=e.message,this.dialog.title="",this.dialog.message="",this.dialog.status=1,this.$emit("verified",{})},not_recognized:function(e){this.dialog.show=!0,this.dialog.photo="/images/time_log/not-registered.jpg",this.dialog.noface="Access Denied",this.dialog.message=e.message,this.show_api_loader=!1}}};var $1=n(93379),A1=n.n($1),R1=n(56587),F1={insert:"head",singleton:!1};A1()(R1.Z,F1);R1.Z.locals;var D1=n(91718),M1={insert:"head",singleton:!1};A1()(D1.Z,M1);D1.Z.locals;const O1=(0,n(83744).Z)(E1,[["render",function(e,t,n,a,_,C){var E=this,$=(0,r.resolveComponent)("p-button"),A=(0,r.resolveComponent)("av-media"),R=(0,r.resolveComponent)("p-dialog");return(0,r.openBlock)(),(0,r.createElementBlock)(r.Fragment,null,[(0,r.createElementVNode)("div",s,[(0,r.withDirectives)((0,r.createElementVNode)("div",i,[(0,r.createElementVNode)("h4",{onClick:t[0]||(t[0]=function(t){e.$emit("close")}),class:"m-0 mb-2",id:"title-face"},"Doctor Verification"),(0,r.createElementVNode)("p",o,"Keep your head up and make sure your face fits into the circle.",512)],512),[[r.vShow,!_.show_api_loader]]),(0,r.withDirectives)((0,r.createElementVNode)("img",l,null,512),[[r.vShow,_.show_api_loader]]),(0,r.withDirectives)((0,r.createElementVNode)("div",u,[((0,r.openBlock)(),(0,r.createElementBlock)("svg",d,[(0,r.createElementVNode)("circle",p,null,512)],512)),(0,r.createElementVNode)("div",h,[(0,r.createElementVNode)("div",{ref:"loader_api",class:(0,r.normalizeClass)(["verifying-div p-4 rounded-circle",{"d-none":!_.show_api_loader}])},c,2),(0,r.createElementVNode)("canvas",f,null,512),(0,r.createElementVNode)("video",m,null,512),(0,r.createElementVNode)("div",g,y,512)],512)],512),[[r.vShow,!_.show_api_loader]]),(0,r.createVNode)($,{onClick:(0,r.withModifiers)(C.captureDetected,["prevent"]),disabled:_.show_api_loader,class:"button btn btn-primary mt-5 w-100 mx-0"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)((0,r.toDisplayString)(_.show_api_loader?"Recognizing Photo...":"Capture Photo"),1)]})),_:1},8,["onClick","disabled"]),(0,r.createVNode)($,{onClick:t[1]||(t[1]=(0,r.withModifiers)((function(t){e.$emit("close")}),["prevent"])),class:"button btn btn-dark mt-2 w-100 mx-0"},{default:(0,r.withCtx)((function(){return[(0,r.createTextVNode)("Close")]})),_:1})]),(0,r.createVNode)(R,{visible:_.dialog.show,"onUpdate:visible":t[5]||(t[5]=function(e){return _.dialog.show=e}),modal:"",class:"dialog-align-center hide-header footer-action-center",position:"center",draggable:!1,closable:!1,style:{width:"100%","max-width":"500px",overflow:"hidden","border-radius":"10px"}},{header:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("h3",b,[x,(0,r.createElementVNode)("span",{textContent:(0,r.toDisplayString)(_.dialog.title)},null,8,w)])]})),footer:(0,r.withCtx)((function(){return[(0,r.createVNode)($,{class:"btn btn-default",onClick:t[2]||(t[2]=function(e){E.$emit("close")}),label:"Close",placeholder:"Top"}),E.dialog.status?((0,r.openBlock)(),(0,r.createBlock)($,{key:0,class:"btn btn-primary",onClick:t[3]||(t[3]=function(e){return E.$emit("proceed")}),label:"Proceed",placeholder:"Top"})):(0,r.createCommentVNode)("",!0),E.dialog.status?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createBlock)($,{key:1,class:"btn btn-secondary",onClick:t[4]||(t[4]=function(e){return C.reset()}),label:"Retry",placeholder:"Top"}))]})),default:(0,r.withCtx)((function(){return[(0,r.createElementVNode)("div",v,[(0,r.createElementVNode)("div",k,[(0,r.createElementVNode)("img",{class:"rounded-circle dialog-photo",src:_.dialog.photo},null,8,I)]),(0,r.createElementVNode)("h3",{class:"fw-bolder",textContent:(0,r.toDisplayString)(_.dialog.name)},null,8,S),E.dialog.status?(0,r.createCommentVNode)("",!0):((0,r.openBlock)(),(0,r.createElementBlock)("h4",N,(0,r.toDisplayString)(_.dialog.noface),1)),(0,r.createElementVNode)("h4",{class:"mb-0 fw-normal",textContent:(0,r.toDisplayString)(_.dialog.message)},null,8,T)]),_.mic.listen&&!_.sound.playing?((0,r.openBlock)(),(0,r.createBlock)(A,{key:0,class:"mic-graph",media:_.mic.stream,"line-color":"blue",type:"wform"},null,8,["media"])):(0,r.createCommentVNode)("",!0)]})),_:1},8,["visible"])],64)}],["__scopeId","data-v-8fe763dc"]])}}]);

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.