(self.webpackChunk=self.webpackChunk||[]).push([[1512],{40001:function(or,mt,Te){"use strict";Te.d(mt,{Z:function(){return h}});var we=Te(54476),st=Te(59301),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M912 190h-69.9c-9.8 0-19.1 4.5-25.1 12.2L404.7 724.5 207 474a32 32 0 00-25.1-12.2H112c-6.7 0-10.4 7.7-6.3 12.9l273.9 347c12.8 16.2 37.4 16.2 50.3 0l488.4-618.9c4.1-5.1.4-12.8-6.3-12.8z"}}]},name:"check",theme:"outlined"},M=o,R=Te(7657),p=function(g,w){return st.createElement(R.Z,(0,we.Z)({},g,{ref:w,icon:M}))},f=st.forwardRef(p),h=f},26227:function(or,mt,Te){"use strict";Te.d(mt,{Z:function(){return h}});var we=Te(54476),st=Te(59301),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M360 184h-8c4.4 0 8-3.6 8-8v8h304v-8c0 4.4 3.6 8 8 8h-8v72h72v-80c0-35.3-28.7-64-64-64H352c-35.3 0-64 28.7-64 64v80h72v-72zm504 72H160c-17.7 0-32 14.3-32 32v32c0 4.4 3.6 8 8 8h60.4l24.7 523c1.6 34.1 29.8 61 63.9 61h454c34.2 0 62.3-26.8 63.9-61l24.7-523H888c4.4 0 8-3.6 8-8v-32c0-17.7-14.3-32-32-32zM731.3 840H292.7l-24.2-512h487l-24.2 512z"}}]},name:"delete",theme:"outlined"},M=o,R=Te(7657),p=function(g,w){return st.createElement(R.Z,(0,we.Z)({},g,{ref:w,icon:M}))},f=st.forwardRef(p),h=f},41464:function(or,mt,Te){"use strict";Te.d(mt,{Z:function(){return h}});var we=Te(54476),st=Te(59301),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M505.7 661a8 8 0 0012.6 0l112-141.7c4.1-5.2.4-12.9-6.3-12.9h-74.1V168c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v338.3H400c-6.7 0-10.4 7.7-6.3 12.9l112 141.8zM878 626h-60c-4.4 0-8 3.6-8 8v154H214V634c0-4.4-3.6-8-8-8h-60c-4.4 0-8 3.6-8 8v198c0 17.7 14.3 32 32 32h684c17.7 0 32-14.3 32-32V634c0-4.4-3.6-8-8-8z"}}]},name:"download",theme:"outlined"},M=o,R=Te(7657),p=function(g,w){return st.createElement(R.Z,(0,we.Z)({},g,{ref:w,icon:M}))},f=st.forwardRef(p),h=f},15277:function(or,mt,Te){"use strict";Te.d(mt,{Z:function(){return h}});var we=Te(54476),st=Te(59301),o={icon:{tag:"svg",attrs:{viewBox:"64 64 896 896",focusable:"false"},children:[{tag:"path",attrs:{d:"M942.2 486.2C847.4 286.5 704.1 186 512 186c-192.2 0-335.4 100.5-430.2 300.3a60.3 60.3 0 000 51.5C176.6 737.5 319.9 838 512 838c192.2 0 335.4-100.5 430.2-300.3 7.7-16.2 7.7-35 0-51.5zM512 766c-161.3 0-279.4-81.8-362.7-254C232.6 339.8 350.7 258 512 258c161.3 0 279.4 81.8 362.7 254C791.5 684.2 673.4 766 512 766zm-4-430c-97.2 0-176 78.8-176 176s78.8 176 176 176 176-78.8 176-176-78.8-176-176-176zm0 288c-61.9 0-112-50.1-112-112s50.1-112 112-112 112 50.1 112 112-50.1 112-112 112z"}}]},name:"eye",theme:"outlined"},M=o,R=Te(7657),p=function(g,w){return st.createElement(R.Z,(0,we.Z)({},g,{ref:w,icon:M}))},f=st.forwardRef(p),h=f},65030:function(or,mt,Te){"use strict";Te.d(mt,{Z:function(){return ye}});var we=Te(33885),st=Te(42978),o=Te(75931),M=Te(43403),R=Te(92310),p=Te.n(R),f=Te(29301),h=Te(76846),y=Te(96452),g=Te(6089),w=Te(80402),c=Te(34280),m=Te(49658),v=Te(59301),b=Te(54476),x=Te(77900),T=Te(8654);function S(V){var G=V.prefixCls,W=V.align,K=V.arrow,te=V.arrowPos,U=K||{},L=U.className,$=U.content,ue=te.x,Ee=ue===void 0?0:ue,ze=te.y,_e=ze===void 0?0:ze,le=v.useRef();if(!W||!W.points)return null;var Re={position:"absolute"};if(W.autoArrow!==!1){var Me=W.points[0],He=W.points[1],Be=Me[0],Je=Me[1],$e=He[0],rt=He[1];Be===$e||!["t","b"].includes(Be)?Re.top=_e:Be==="t"?Re.top=0:Re.bottom=0,Je===rt||!["l","r"].includes(Je)?Re.left=Ee:Je==="l"?Re.left=0:Re.right=0}return v.createElement("div",{ref:le,className:p()("".concat(G,"-arrow"),L),style:Re},$)}function C(V){var G=V.prefixCls,W=V.open,K=V.zIndex,te=V.mask,U=V.motion;return te?v.createElement(x.default,(0,b.Z)({},U,{motionAppear:!0,visible:W,removeOnLeave:!0}),function(L){var $=L.className;return v.createElement("div",{style:{zIndex:K},className:p()("".concat(G,"-mask"),$)})}):null}var E=v.memo(function(V){var G=V.children;return G},function(V,G){return G.cache}),j=E,Z=v.forwardRef(function(V,G){var W=V.popup,K=V.className,te=V.prefixCls,U=V.style,L=V.target,$=V.onVisibleChanged,ue=V.open,Ee=V.keepDom,ze=V.fresh,_e=V.onClick,le=V.mask,Re=V.arrow,Me=V.arrowPos,He=V.align,Be=V.motion,Je=V.maskMotion,$e=V.forceRender,rt=V.getPopupContainer,qe=V.autoDestroy,pt=V.portal,Pe=V.zIndex,Qe=V.onMouseEnter,nt=V.onMouseLeave,yt=V.onPointerEnter,St=V.onPointerDownCapture,Lt=V.ready,jt=V.offsetX,Dt=V.offsetY,Ct=V.offsetR,Mt=V.offsetB,Bt=V.onAlign,Ut=V.onPrepare,Nt=V.stretch,tr=V.targetWidth,Zt=V.targetHeight,zt=typeof W=="function"?W():W,Xe=ue||Ee,Kt=(rt==null?void 0:rt.length)>0,Ft=v.useState(!rt||!Kt),kr=(0,st.Z)(Ft,2),hr=kr[0],vr=kr[1];if((0,c.Z)(function(){!hr&&Kt&&L&&vr(!0)},[hr,Kt,L]),!hr)return null;var $t="auto",Xt={left:"-1000vw",top:"-1000vh",right:$t,bottom:$t};if(Lt||!ue){var sr,Nr=He.points,Tt=He.dynamicInset||((sr=He._experimental)===null||sr===void 0?void 0:sr.dynamicInset),Mr=Tt&&Nr[0][1]==="r",Jt=Tt&&Nr[0][0]==="b";Mr?(Xt.right=Ct,Xt.left=$t):(Xt.left=jt,Xt.right=$t),Jt?(Xt.bottom=Mt,Xt.top=$t):(Xt.top=Dt,Xt.bottom=$t)}var Xr={};return Nt&&(Nt.includes("height")&&Zt?Xr.height=Zt:Nt.includes("minHeight")&&Zt&&(Xr.minHeight=Zt),Nt.includes("width")&&tr?Xr.width=tr:Nt.includes("minWidth")&&tr&&(Xr.minWidth=tr)),ue||(Xr.pointerEvents="none"),v.createElement(pt,{open:$e||Xe,getContainer:rt&&function(){return rt(L)},autoDestroy:qe},v.createElement(C,{prefixCls:te,open:ue,zIndex:Pe,mask:le,motion:Je}),v.createElement(f.Z,{onResize:Bt,disabled:!ue},function(Kr){return v.createElement(x.default,(0,b.Z)({motionAppear:!0,motionEnter:!0,motionLeave:!0,removeOnLeave:!1,forceRender:$e,leavedClassName:"".concat(te,"-hidden")},Be,{onAppearPrepare:Ut,onEnterPrepare:Ut,visible:ue,onVisibleChanged:function(hn){var Yr;Be==null||(Yr=Be.onVisibleChanged)===null||Yr===void 0||Yr.call(Be,hn),$(hn)}}),function(on,hn){var Yr=on.className,$r=on.style,We=p()(te,Yr,K);return v.createElement("div",{ref:(0,T.sQ)(Kr,G,hn),className:We,style:(0,we.Z)((0,we.Z)((0,we.Z)((0,we.Z)({"--arrow-x":"".concat(Me.x||0,"px"),"--arrow-y":"".concat(Me.y||0,"px")},Xt),Xr),$r),{},{boxSizing:"border-box",zIndex:Pe},U),onMouseEnter:Qe,onMouseLeave:nt,onPointerEnter:yt,onClick:_e,onPointerDownCapture:St},Re&&v.createElement(S,{prefixCls:te,arrow:Re,arrowPos:Me,align:He}),v.createElement(j,{cache:!ue&&!ze},zt))})}))}),P=Z,Q=v.forwardRef(function(V,G){var W=V.children,K=V.getTriggerDOMNode,te=(0,T.Yr)(W),U=v.useCallback(function($){(0,T.mH)(G,K?K($):$)},[K]),L=(0,T.x1)(U,(0,T.C4)(W));return te?v.cloneElement(W,{ref:L}):W}),B=Q,k=v.createContext(null),D=k;function F(V){return V?Array.isArray(V)?V:[V]:[]}function J(V,G,W,K){return v.useMemo(function(){var te=F(W!=null?W:G),U=F(K!=null?K:G),L=new Set(te),$=new Set(U);return V&&(L.has("hover")&&(L.delete("hover"),L.add("click")),$.has("hover")&&($.delete("hover"),$.add("click"))),[L,$]},[V,G,W,K])}var H=Te(29194);function N(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:[],G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:[],W=arguments.length>2?arguments[2]:void 0;return W?V[0]===G[0]:V[0]===G[0]&&V[1]===G[1]}function _(V,G,W,K){for(var te=W.points,U=Object.keys(V),L=0;L1&&arguments[1]!==void 0?arguments[1]:1;return Number.isNaN(V)?G:V}function ne(V){return he(parseFloat(V),0)}function Ie(V,G){var W=(0,we.Z)({},V);return(G||[]).forEach(function(K){if(!(K instanceof HTMLBodyElement||K instanceof HTMLHtmlElement)){var te=ee(K).getComputedStyle(K),U=te.overflow,L=te.overflowClipMargin,$=te.borderTopWidth,ue=te.borderBottomWidth,Ee=te.borderLeftWidth,ze=te.borderRightWidth,_e=K.getBoundingClientRect(),le=K.offsetHeight,Re=K.clientHeight,Me=K.offsetWidth,He=K.clientWidth,Be=ne($),Je=ne(ue),$e=ne(Ee),rt=ne(ze),qe=he(Math.round(_e.width/Me*1e3)/1e3),pt=he(Math.round(_e.height/le*1e3)/1e3),Pe=(Me-He-$e-rt)*qe,Qe=(le-Re-Be-Je)*pt,nt=Be*pt,yt=Je*pt,St=$e*qe,Lt=rt*qe,jt=0,Dt=0;if(U==="clip"){var Ct=ne(L);jt=Ct*qe,Dt=Ct*pt}var Mt=_e.x+St-jt,Bt=_e.y+nt-Dt,Ut=Mt+_e.width+2*jt-St-Lt-Pe,Nt=Bt+_e.height+2*Dt-nt-yt-Qe;W.left=Math.max(W.left,Mt),W.top=Math.max(W.top,Bt),W.right=Math.min(W.right,Ut),W.bottom=Math.min(W.bottom,Nt)}}),W}function q(V){var G=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0,W="".concat(G),K=W.match(/^(.*)\%$/);return K?V*(parseFloat(K[1])/100):parseFloat(W)}function pe(V,G){var W=G||[],K=(0,st.Z)(W,2),te=K[0],U=K[1];return[q(V.width,te),q(V.height,U)]}function ve(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:"";return[V[0],V[1]]}function xe(V,G){var W=G[0],K=G[1],te,U;return W==="t"?U=V.y:W==="b"?U=V.y+V.height:U=V.y+V.height/2,K==="l"?te=V.x:K==="r"?te=V.x+V.width:te=V.x+V.width/2,{x:te,y:U}}function ce(V,G){var W={t:"b",b:"t",l:"r",r:"l"};return V.map(function(K,te){return te===G?W[K]||"c":K}).join("")}function fe(V,G,W,K,te,U,L){var $=v.useState({ready:!1,offsetX:0,offsetY:0,offsetR:0,offsetB:0,arrowX:0,arrowY:0,scaleX:1,scaleY:1,align:te[K]||{}}),ue=(0,st.Z)($,2),Ee=ue[0],ze=ue[1],_e=v.useRef(0),le=v.useMemo(function(){return G?ie(G):[]},[G]),Re=v.useRef({}),Me=function(){Re.current={}};V||Me();var He=(0,g.Z)(function(){if(G&&W&&V){let mn=function(je,ai){var Ai=arguments.length>2&&arguments[2]!==void 0?arguments[2]:Ge,ia=Xe.x+je,En=Xe.y+ai,Dn=ia+Jt,zn=En+Mr,oi=Math.max(ia,Ai.left),_t=Math.max(En,Ai.top),Ht=Math.min(Dn,Ai.right),rn=Math.min(zn,Ai.bottom);return Math.max(0,(Ht-oi)*(rn-_t))},Hi=function(){Jr=Xe.y+Br,qt=Jr+Mr,_r=Xe.x+mr,qr=_r+Jt};var $e,rt,qe,pt,Pe=G,Qe=Pe.ownerDocument,nt=ee(Pe),yt=nt.getComputedStyle(Pe),St=yt.position,Lt=Pe.style.left,jt=Pe.style.top,Dt=Pe.style.right,Ct=Pe.style.bottom,Mt=Pe.style.overflow,Bt=(0,we.Z)((0,we.Z)({},te[K]),U),Ut=Qe.createElement("div");($e=Pe.parentElement)===null||$e===void 0||$e.appendChild(Ut),Ut.style.left="".concat(Pe.offsetLeft,"px"),Ut.style.top="".concat(Pe.offsetTop,"px"),Ut.style.position=St,Ut.style.height="".concat(Pe.offsetHeight,"px"),Ut.style.width="".concat(Pe.offsetWidth,"px"),Pe.style.left="0",Pe.style.top="0",Pe.style.right="auto",Pe.style.bottom="auto",Pe.style.overflow="hidden";var Nt;if(Array.isArray(W))Nt={x:W[0],y:W[1],width:0,height:0};else{var tr,Zt,zt=W.getBoundingClientRect();zt.x=(tr=zt.x)!==null&&tr!==void 0?tr:zt.left,zt.y=(Zt=zt.y)!==null&&Zt!==void 0?Zt:zt.top,Nt={x:zt.x,y:zt.y,width:zt.width,height:zt.height}}var Xe=Pe.getBoundingClientRect(),Kt=nt.getComputedStyle(Pe),Ft=Kt.height,kr=Kt.width;Xe.x=(rt=Xe.x)!==null&&rt!==void 0?rt:Xe.left,Xe.y=(qe=Xe.y)!==null&&qe!==void 0?qe:Xe.top;var hr=Qe.documentElement,vr=hr.clientWidth,$t=hr.clientHeight,Xt=hr.scrollWidth,sr=hr.scrollHeight,Nr=hr.scrollTop,Tt=hr.scrollLeft,Mr=Xe.height,Jt=Xe.width,Xr=Nt.height,Kr=Nt.width,on={left:0,top:0,right:vr,bottom:$t},hn={left:-Tt,top:-Nr,right:Xt-Tt,bottom:sr-Nr},Yr=Bt.htmlRegion,$r="visible",We="visibleFirst";Yr!=="scroll"&&Yr!==We&&(Yr=$r);var tn=Yr===We,Zr=Ie(hn,le),yr=Ie(on,le),Ge=Yr===$r?yr:Zr,Ye=tn?yr:Ge;Pe.style.left="auto",Pe.style.top="auto",Pe.style.right="0",Pe.style.bottom="0";var ot=Pe.getBoundingClientRect();Pe.style.left=Lt,Pe.style.top=jt,Pe.style.right=Dt,Pe.style.bottom=Ct,Pe.style.overflow=Mt,(pt=Pe.parentElement)===null||pt===void 0||pt.removeChild(Ut);var ut=he(Math.round(Jt/parseFloat(kr)*1e3)/1e3),dt=he(Math.round(Mr/parseFloat(Ft)*1e3)/1e3);if(ut===0||dt===0||(0,h.Sh)(W)&&!(0,H.Z)(W))return;var ht=Bt.offset,xt=Bt.targetOffset,it=pe(Xe,ht),Wt=(0,st.Z)(it,2),Pt=Wt[0],lt=Wt[1],rr=pe(Nt,xt),er=(0,st.Z)(rr,2),dr=er[0],pr=er[1];Nt.x-=dr,Nt.y-=pr;var Er=Bt.points||[],jr=(0,st.Z)(Er,2),Wr=jr[0],Cr=jr[1],br=ve(Cr),ar=ve(Wr),Rt=xe(Nt,br),fn=xe(Xe,ar),nr=(0,we.Z)({},Bt),mr=Rt.x-fn.x+Pt,Br=Rt.y-fn.y+lt,dn=mn(mr,Br),sn=mn(mr,Br,yr),vn=xe(Nt,["t","l"]),Qn=xe(Xe,["t","l"]),Xn=xe(Nt,["b","r"]),_n=xe(Xe,["b","r"]),gn=Bt.overflow||{},un=gn.adjustX,Fn=gn.adjustY,Ln=gn.shiftX,Un=gn.shiftY,Kn=function(ai){return typeof ai=="boolean"?ai:ai>=0},Jr,qt,_r,qr;Hi();var yn=Kn(Fn),ln=ar[0]===br[0];if(yn&&ar[0]==="t"&&(qt>Ye.bottom||Re.current.bt)){var Tn=Br;ln?Tn-=Mr-Xr:Tn=vn.y-_n.y-lt;var Zn=mn(mr,Tn),Jn=mn(mr,Tn,yr);Zn>dn||Zn===dn&&(!tn||Jn>=sn)?(Re.current.bt=!0,Br=Tn,lt=-lt,nr.points=[ce(ar,0),ce(br,0)]):Re.current.bt=!1}if(yn&&ar[0]==="b"&&(Jrdn||fi===dn&&(!tn||wr>=sn)?(Re.current.tb=!0,Br=Wn,lt=-lt,nr.points=[ce(ar,0),ce(br,0)]):Re.current.tb=!1}var zr=Kn(un),Gn=ar[1]===br[1];if(zr&&ar[1]==="l"&&(qr>Ye.right||Re.current.rl)){var di=mr;Gn?di-=Jt-Kr:di=vn.x-_n.x-Pt;var ii=mn(di,Br),Ci=mn(di,Br,yr);ii>dn||ii===dn&&(!tn||Ci>=sn)?(Re.current.rl=!0,mr=di,Pt=-Pt,nr.points=[ce(ar,1),ce(br,1)]):Re.current.rl=!1}if(zr&&ar[1]==="r"&&(_rdn||Yt===dn&&(!tn||Pi>=sn)?(Re.current.lr=!0,mr=Si,Pt=-Pt,nr.points=[ce(ar,1),ce(br,1)]):Re.current.lr=!1}Hi();var ui=Ln===!0?0:Ln;typeof ui=="number"&&(_ryr.right&&(mr-=qr-yr.right-Pt,Nt.x>yr.right-ui&&(mr+=Nt.x-yr.right+ui)));var Ii=Un===!0?0:Un;typeof Ii=="number"&&(Jryr.bottom&&(Br-=qt-yr.bottom-lt,Nt.y>yr.bottom-Ii&&(Br+=Nt.y-yr.bottom+Ii)));var pi=Xe.x+mr,Ti=pi+Jt,ra=Xe.y+Br,Ba=ra+Mr,ya=Nt.x,Ot=ya+Kr,bn=Nt.y,ba=bn+Xr,Na=Math.max(pi,ya),na=Math.min(Ti,Ot),lr=(Na+na)/2,Fr=lr-pi,en=Math.max(ra,bn),Sr=Math.min(Ba,ba),Gr=(en+Sr)/2,Rn=Gr-ra;L==null||L(G,nr);var jn=ot.right-Xe.x-(mr+Xe.width),hi=ot.bottom-Xe.y-(Br+Xe.height);ut===1&&(mr=Math.round(mr),jn=Math.round(jn)),dt===1&&(Br=Math.round(Br),hi=Math.round(hi));var Yn={ready:!0,offsetX:mr/ut,offsetY:Br/dt,offsetR:jn/ut,offsetB:hi/dt,arrowX:Fr/ut,arrowY:Rn/dt,scaleX:ut,scaleY:dt,align:nr};ze(Yn)}}),Be=function(){_e.current+=1;var rt=_e.current;Promise.resolve().then(function(){_e.current===rt&&He()})},Je=function(){ze(function(rt){return(0,we.Z)((0,we.Z)({},rt),{},{ready:!1})})};return(0,c.Z)(Je,[K]),(0,c.Z)(function(){V||Je()},[V]),[Ee.ready,Ee.offsetX,Ee.offsetY,Ee.offsetR,Ee.offsetB,Ee.arrowX,Ee.arrowY,Ee.scaleX,Ee.scaleY,Ee.align,Be]}var ge=Te(94480);function Se(V,G,W,K,te){(0,c.Z)(function(){if(V&&G&&W){let _e=function(){K(),te()};var U=G,L=W,$=ie(U),ue=ie(L),Ee=ee(L),ze=new Set([Ee].concat((0,ge.Z)($),(0,ge.Z)(ue)));return ze.forEach(function(le){le.addEventListener("scroll",_e,{passive:!0})}),Ee.addEventListener("resize",_e,{passive:!0}),K(),function(){ze.forEach(function(le){le.removeEventListener("scroll",_e),Ee.removeEventListener("resize",_e)})}}},[V,G,W])}var De=Te(48736);function ke(V,G,W,K,te,U,L,$){var ue=v.useRef(V);ue.current=V;var Ee=v.useRef(!1);v.useEffect(function(){if(G&&K&&(!te||U)){var _e=function(){Ee.current=!1},le=function(qe){var pt;ue.current&&!L(((pt=qe.composedPath)===null||pt===void 0||(pt=pt.call(qe))===null||pt===void 0?void 0:pt[0])||qe.target)&&!Ee.current&&$(!1)},Re=ee(K);Re.addEventListener("pointerdown",_e,!0),Re.addEventListener("mousedown",le,!0),Re.addEventListener("contextmenu",le,!0);var Me=(0,y.A)(W);if(Me&&(Me.addEventListener("mousedown",le,!0),Me.addEventListener("contextmenu",le,!0)),0)var He,Be,Je,$e;return function(){Re.removeEventListener("pointerdown",_e,!0),Re.removeEventListener("mousedown",le,!0),Re.removeEventListener("contextmenu",le,!0),Me&&(Me.removeEventListener("mousedown",le,!0),Me.removeEventListener("contextmenu",le,!0))}}},[G,W,K,te,U]);function ze(){Ee.current=!0}return ze}var de=["prefixCls","children","action","showAction","hideAction","popupVisible","defaultPopupVisible","onPopupVisibleChange","afterPopupVisibleChange","mouseEnterDelay","mouseLeaveDelay","focusDelay","blurDelay","mask","maskClosable","getPopupContainer","forceRender","autoDestroy","destroyPopupOnHide","popup","popupClassName","popupStyle","popupPlacement","builtinPlacements","popupAlign","zIndex","stretch","getPopupClassNameFromAlign","fresh","alignPoint","onPopupClick","onPopupAlign","arrow","popupMotion","maskMotion","popupTransitionName","popupAnimation","maskTransitionName","maskAnimation","className","getTriggerDOMNode"];function Y(){var V=arguments.length>0&&arguments[0]!==void 0?arguments[0]:M.Z,G=v.forwardRef(function(W,K){var te=W.prefixCls,U=te===void 0?"rc-trigger-popup":te,L=W.children,$=W.action,ue=$===void 0?"hover":$,Ee=W.showAction,ze=W.hideAction,_e=W.popupVisible,le=W.defaultPopupVisible,Re=W.onPopupVisibleChange,Me=W.afterPopupVisibleChange,He=W.mouseEnterDelay,Be=W.mouseLeaveDelay,Je=Be===void 0?.1:Be,$e=W.focusDelay,rt=W.blurDelay,qe=W.mask,pt=W.maskClosable,Pe=pt===void 0?!0:pt,Qe=W.getPopupContainer,nt=W.forceRender,yt=W.autoDestroy,St=W.destroyPopupOnHide,Lt=W.popup,jt=W.popupClassName,Dt=W.popupStyle,Ct=W.popupPlacement,Mt=W.builtinPlacements,Bt=Mt===void 0?{}:Mt,Ut=W.popupAlign,Nt=W.zIndex,tr=W.stretch,Zt=W.getPopupClassNameFromAlign,zt=W.fresh,Xe=W.alignPoint,Kt=W.onPopupClick,Ft=W.onPopupAlign,kr=W.arrow,hr=W.popupMotion,vr=W.maskMotion,$t=W.popupTransitionName,Xt=W.popupAnimation,sr=W.maskTransitionName,Nr=W.maskAnimation,Tt=W.className,Mr=W.getTriggerDOMNode,Jt=(0,o.Z)(W,de),Xr=yt||St||!1,Kr=v.useState(!1),on=(0,st.Z)(Kr,2),hn=on[0],Yr=on[1];(0,c.Z)(function(){Yr((0,m.Z)())},[]);var $r=v.useRef({}),We=v.useContext(D),tn=v.useMemo(function(){return{registerSubPopup:function(Ht,rn){$r.current[Ht]=rn,We==null||We.registerSubPopup(Ht,rn)}}},[We]),Zr=(0,w.Z)(),yr=v.useState(null),Ge=(0,st.Z)(yr,2),Ye=Ge[0],ot=Ge[1],ut=v.useRef(null),dt=(0,g.Z)(function(_t){ut.current=_t,(0,h.Sh)(_t)&&Ye!==_t&&ot(_t),We==null||We.registerSubPopup(Zr,_t)}),ht=v.useState(null),xt=(0,st.Z)(ht,2),it=xt[0],Wt=xt[1],Pt=v.useRef(null),lt=(0,g.Z)(function(_t){(0,h.Sh)(_t)&&it!==_t&&(Wt(_t),Pt.current=_t)}),rr=v.Children.only(L),er=(rr==null?void 0:rr.props)||{},dr={},pr=(0,g.Z)(function(_t){var Ht,rn,nn=it;return(nn==null?void 0:nn.contains(_t))||((Ht=(0,y.A)(nn))===null||Ht===void 0?void 0:Ht.host)===_t||_t===nn||(Ye==null?void 0:Ye.contains(_t))||((rn=(0,y.A)(Ye))===null||rn===void 0?void 0:rn.host)===_t||_t===Ye||Object.values($r.current).some(function(Ve){return(Ve==null?void 0:Ve.contains(_t))||_t===Ve})}),Er=X(U,hr,Xt,$t),jr=X(U,vr,Nr,sr),Wr=v.useState(le||!1),Cr=(0,st.Z)(Wr,2),br=Cr[0],ar=Cr[1],Rt=_e!=null?_e:br,fn=(0,g.Z)(function(_t){_e===void 0&&ar(_t)});(0,c.Z)(function(){ar(_e||!1)},[_e]);var nr=v.useRef(Rt);nr.current=Rt;var mr=v.useRef([]);mr.current=[];var Br=(0,g.Z)(function(_t){var Ht;fn(_t),((Ht=mr.current[mr.current.length-1])!==null&&Ht!==void 0?Ht:Rt)!==_t&&(mr.current.push(_t),Re==null||Re(_t))}),dn=v.useRef(),sn=function(){clearTimeout(dn.current)},vn=function(Ht){var rn=arguments.length>1&&arguments[1]!==void 0?arguments[1]:0;sn(),rn===0?Br(Ht):dn.current=setTimeout(function(){Br(Ht)},rn*1e3)};v.useEffect(function(){return sn},[]);var Qn=v.useState(!1),Xn=(0,st.Z)(Qn,2),_n=Xn[0],gn=Xn[1];(0,c.Z)(function(_t){(!_t||Rt)&&gn(!0)},[Rt]);var un=v.useState(null),Fn=(0,st.Z)(un,2),Ln=Fn[0],Un=Fn[1],Kn=v.useState(null),Jr=(0,st.Z)(Kn,2),qt=Jr[0],_r=Jr[1],qr=function(Ht){_r([Ht.clientX,Ht.clientY])},yn=fe(Rt,Ye,Xe&&qt!==null?qt:it,Ct,Bt,Ut,Ft),ln=(0,st.Z)(yn,11),Tn=ln[0],Zn=ln[1],Jn=ln[2],Wn=ln[3],fi=ln[4],wr=ln[5],zr=ln[6],Gn=ln[7],di=ln[8],ii=ln[9],Ci=ln[10],Si=J(hn,ue,Ee,ze),Yt=(0,st.Z)(Si,2),Pi=Yt[0],ui=Yt[1],Ii=Pi.has("click"),pi=ui.has("click")||ui.has("contextMenu"),Ti=(0,g.Z)(function(){_n||Ci()}),ra=function(){nr.current&&Xe&&pi&&vn(!1)};Se(Rt,it,Ye,Ti,ra),(0,c.Z)(function(){Ti()},[qt,Ct]),(0,c.Z)(function(){Rt&&!(Bt!=null&&Bt[Ct])&&Ti()},[JSON.stringify(Ut)]);var Ba=v.useMemo(function(){var _t=_(Bt,U,ii,Xe);return p()(_t,Zt==null?void 0:Zt(ii))},[ii,Zt,Bt,U,Xe]);v.useImperativeHandle(K,function(){return{nativeElement:Pt.current,popupElement:ut.current,forceAlign:Ti}});var ya=v.useState(0),Ot=(0,st.Z)(ya,2),bn=Ot[0],ba=Ot[1],Na=v.useState(0),na=(0,st.Z)(Na,2),lr=na[0],Fr=na[1],en=function(){if(tr&&it){var Ht=it.getBoundingClientRect();ba(Ht.width),Fr(Ht.height)}},Sr=function(){en(),Ti()},Gr=function(Ht){gn(!1),Ci(),Me==null||Me(Ht)},Rn=function(){return new Promise(function(Ht){en(),Un(function(){return Ht})})};(0,c.Z)(function(){Ln&&(Ci(),Ln(),Un(null))},[Ln]);function jn(_t,Ht,rn,nn){dr[_t]=function(Ve){var Cn;nn==null||nn(Ve),vn(Ht,rn);for(var $n=arguments.length,vi=new Array($n>1?$n-1:0),Sn=1;Sn<$n;Sn++)vi[Sn-1]=arguments[Sn];(Cn=er[_t])===null||Cn===void 0||Cn.call.apply(Cn,[er,Ve].concat(vi))}}(Ii||pi)&&(dr.onClick=function(_t){var Ht;nr.current&&pi?vn(!1):!nr.current&&Ii&&(qr(_t),vn(!0));for(var rn=arguments.length,nn=new Array(rn>1?rn-1:0),Ve=1;Ve1?rn-1:0),Ve=1;VeJ in F?w(F,J,{enumerable:!0,configurable:!0,writable:!0,value:H}):F[J]=H,S=(F,J)=>{for(var H in J||(J={}))b.call(J,H)&&T(F,H,J[H]);if(v)for(var H of v(J))x.call(J,H)&&T(F,H,J[H]);return F},C=(F,J)=>c(F,m(J)),E=(F,J)=>{var H={};for(var N in F)b.call(F,N)&&J.indexOf(N)<0&&(H[N]=F[N]);if(F!=null&&v)for(var N of v(F))J.indexOf(N)<0&&x.call(F,N)&&(H[N]=F[N]);return H},j=(F,J,H)=>new Promise((N,_)=>{var X=he=>{try{ie(H.next(he))}catch(ne){_(ne)}},ee=he=>{try{ie(H.throw(he))}catch(ne){_(ne)}},ie=he=>he.done?N(he.value):Promise.resolve(he.value).then(X,ee);ie((H=H.apply(F,J)).next())});const{Dragger:Z}=st.default,P=F=>{const J="bf3c199c2470cb477d907b1e0917c17b",H="5183666c72eec9e4";var N=p().enc.Utf8.parse(J);let _=p().enc.Utf8.parse(H);var X=p().AES.decrypt(F,N,{iv:_,mode:p().mode.CBC});return X.toString(p().enc.Utf8)};let Q;const B=F=>j(void 0,[F],function*({identifier:J,oldFilename:H,newFilename:N}){var _,X,ee,ie,he,ne;const Ie=yield Fetch("/api/buckets/get_upload_token_for_big_files.json",{method:"get"});Ie.data=JSON.parse(P(Ie.data));const q=new OSS({endpoint:(_=Ie==null?void 0:Ie.data)==null?void 0:_.end_point,region:(X=Ie==null?void 0:Ie.data)==null?void 0:X.region,accessKeyId:(ee=Ie==null?void 0:Ie.data)==null?void 0:ee.access_key_id,accessKeySecret:(ie=Ie==null?void 0:Ie.data)==null?void 0:ie.access_key_secret,bucket:(he=Ie==null?void 0:Ie.data)==null?void 0:he.bucket,stsToken:(ne=Ie==null?void 0:Ie.data)==null?void 0:ne.security_token});return new Promise((pe,ve)=>{console.log(11111,`${J}/${H}`,`${J}/${N}`,Ie.data),q.copy(`/${J}/${H}`,`/${J}/${N}`).then(xe=>{console.log("\u62F7\u8D1D\u6210\u529F",xe)}).catch(xe=>{console.log(xe)})})}),k=(F,J,H)=>j(void 0,null,function*(){var N,_,X,ee,ie,he;J.file_name=F.name;const ne=yield(0,M.ZP)("/api/buckets/get_upload_token.json",{method:"get"});console.log("decrypt(res.data):",P(ne.data)),ne.data=JSON.parse(P(ne.data));const Ie=F.name.split(".");Ie.pop();const q=J.realFileName?Ie.join(""):(0,f.Z)(),pe=new(g())({endpoint:(N=ne==null?void 0:ne.data)==null?void 0:N.end_point,region:(_=ne==null?void 0:ne.data)==null?void 0:_.region,accessKeyId:(X=ne==null?void 0:ne.data)==null?void 0:X.access_key_id,accessKeySecret:(ee=ne==null?void 0:ne.data)==null?void 0:ee.access_key_secret,bucket:(ie=ne==null?void 0:ne.data)==null?void 0:ie.bucket,stsToken:(he=ne==null?void 0:ne.data)==null?void 0:he.security_token});return new Promise((ve,xe)=>{var ce;pe.multipartUpload(`${q}`,new Blob([F],{type:F.type}),C(S({timeout:200*1e3,partSize:102400},H),{callback:{url:(ce=ne==null?void 0:ne.data)==null?void 0:ce.callback_url,host:ne==null?void 0:ne.data.bucket_host,body:"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&my_var=${x:my_var}&"+(0,M.rz)(J)}})).then(function(fe){var ge;F.response=(ge=fe.data)==null?void 0:ge.data,ve(fe==null?void 0:fe.data)}).catch(function(fe){xe(fe),console.log("err:",fe)})})}),D=F=>{var J=F,{user:H,cancelUpload:N}=J,_=E(J,["user","cancelUpload"]);const[X,ee]=(0,we.useState)([]);let[ie,he]=(0,we.useState)();const ne={onRemove:q=>{ee([...X.filter(pe=>pe.name!==q.name)]),_.onChange(X.filter(pe=>pe.name!==q.name))},disabled:_.disabled,multiple:!0,fileList:X==null?void 0:X.map(q=>q.file),customRequest:()=>{},beforeUpload:q=>j(void 0,null,function*(){let pe=_.maxSize||1073741824;if(X.filter(ve=>ve.name===q.name).length){o.ZP.info(`${q.name}\u5DF2\u5B58\u5728\uFF0C\u8BF7\u91CD\u65B0\u9009\u62E9`);return}return(q==null?void 0:q.size)>pe?(o.ZP.info(`\u6587\u4EF6\u8D85\u8FC7${pe/1024/1024/1024}GB\uFF0C\u4E0D\u7B26\u5408\u4E0A\u4F20\u8981\u6C42`),!1):(X.push({name:q.name,file:q}),ee([...X]),_.onChange(X),!1)})},Ie=(q,pe)=>j(void 0,null,function*(){var ve,xe,ce,fe,ge,Se;pe.file_name=q.name;const De=q.name,ke=yield(0,M.ZP)("/api/buckets/get_upload_token_for_big_files.json",{method:"get"});if(ke.data=JSON.parse(P(ke.data)),(ke==null?void 0:ke.status)!==0){X[X.findIndex(ye=>ye.name===De)].status="error",X[X.findIndex(ye=>ye.name===De)].file.status="error",_.onChange(X),o.ZP.warning("\u4E0A\u4F20\u5931\u8D25\uFF0C\u8BF7\u91CD\u65B0\u5C1D\u8BD5");return}ie=new(g())({endpoint:(ve=ke==null?void 0:ke.data)==null?void 0:ve.end_point,region:(xe=ke==null?void 0:ke.data)==null?void 0:xe.region,accessKeyId:(ce=ke==null?void 0:ke.data)==null?void 0:ce.access_key_id,accessKeySecret:(fe=ke==null?void 0:ke.data)==null?void 0:fe.access_key_secret,bucket:(ge=ke==null?void 0:ke.data)==null?void 0:ge.bucket,stsToken:(Se=ke==null?void 0:ke.data)==null?void 0:Se.security_token}),console.log(q,"file"),he(ie);const de=q.name.split(".");de.pop();const Y=De.indexOf(".")>-1?pe.realFileName?de.join("."):(0,f.Z)():De;return new Promise((ye,V)=>{var G;try{ie.multipartUpload(`${_.identifier}/${Y}${De.indexOf(".")>-1?"."+De.split(".").pop():""}`,new Blob([q.file],{type:q.file.type}),{timeout:3600*1e3,partSize:1002400,progress:(W,K,te)=>{try{console.log("\u8FDB\u5EA6",W,K,te);const U=X.findIndex(L=>L.name===De);X[U].file.percent=W*100,X[U].tempCheckpoint=K,ee([...X])}catch(U){}},checkpoint:X[X.findIndex(W=>W.name===De)].tempCheckpoint,callback:{customValue:{id:De+""},url:(G=ke==null?void 0:ke.data)==null?void 0:G.callback_url,host:ke==null?void 0:ke.data.bucket_host,body:"bucket=${bucket}&object=${object}&etag=${etag}&size=${size}&mimeType=${mimeType}&my_var=${x:my_var}&"+(0,M.rz)(pe)}}).then(function(W){var K,te,U;const L=X.findIndex(ue=>ue.name===De);let $="done";if(((K=W.data)==null?void 0:K.status)===0){q.response=(te=W.data)==null?void 0:te.data;const ue=X.findIndex(Ee=>Ee.name===De);X[ue].status="done",X[ue].file.status="done"}else o.ZP.warning((U=W.data)==null?void 0:U.message),$="error";X[L].status=$,X[L].file.status=$,_.onChange(X),ye(W==null?void 0:W.data)}).catch(function(W){X[X.findIndex(K=>K.name===De)].status="error",X[X.findIndex(K=>K.name===De)].file.status="error",o.ZP.warning("\u4E0A\u4F20\u5931\u8D25\uFF0C\u8BF7\u91CD\u65B0\u5C1D\u8BD5"),ee([...X]),_.onChange(X),V(W),console.log("err:",W)})}catch(W){}})});return(0,we.useEffect)(()=>{X.every(q=>q==="done"||q==="error")&&_.onComplete(X)},[X]),(0,we.useEffect)(()=>{N&&(ie==null||ie.cancel())},[N]),(0,we.useEffect)(()=>{_.uploading&&X.map(q=>j(void 0,null,function*(){var pe;if((!q.status||q.status==="error")&&!N){q.status="uploading",q.file.status="uploading";const ve=yield Ie(q,{login:(pe=H==null?void 0:H.userInfo)==null?void 0:pe.login,container_type:_.container_type,container_id:_.container_id,description:_.description,realFileName:_.realFileName})}}))},[_.uploading]),we.createElement(Z,C(S({},ne),{height:_.height,className:_.className}),we.createElement("p",{className:"ant-upload-hint"},_.text||"\u62D6\u62FD\u6587\u4EF6\u6216\u8005\u70B9\u51FB\u4E0A\u4F20"))};mt.ZP=(0,h.connect)(({loading:F,globalSetting:J,user:H})=>({globalSetting:J,loading:F.models.competitions,user:H}))(D)},57920:function(or,mt,Te){"use strict";Te.r(mt),Te.d(mt,{default:function(){return $0}});var we=Te(59301),st=Te(63823),o=Te(11938),M=Te(10846),R=Te(6767),p=Te(7939),f=Te(77019),h=Te(5269),y=Te(62957),g={flex_box_center:"flex_box_center___uIDcP",flex_space_between:"flex_space_between___l5roZ",flex_box_vertical_center:"flex_box_vertical_center___mj8nW",flex_box_center_end:"flex_box_center_end___v4Eig",flex_box_column:"flex_box_column___SQn0H",bg:"bg___H5S8d",steps:"steps___mrlSw",qrcode:"qrcode___xRSbG"},w=Te(68911),c=Te(58870),m=Te(15845),v=Te.n(m),b=Te(97671),x=Te(19208).lW;var T=function(n,t){return(T=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,r){e.__proto__=r}||function(e,r){for(var i in r)r.hasOwnProperty(i)&&(e[i]=r[i])})(n,t)};function S(n,t){function e(){this.constructor=n}T(n,t),n.prototype=t===null?Object.create(t):(e.prototype=t.prototype,new e)}function C(n,t,e,r){return new(e||(e=Promise))(function(i,a){function s(d){try{l(r.next(d))}catch(A){a(A)}}function u(d){try{l(r.throw(d))}catch(A){a(A)}}function l(d){d.done?i(d.value):new e(function(A){A(d.value)}).then(s,u)}l((r=r.apply(n,t||[])).next())})}function E(n,t){var e,r,i,a,s={label:0,sent:function(){if(1&i[0])throw i[1];return i[1]},trys:[],ops:[]};return a={next:u(0),throw:u(1),return:u(2)},typeof Symbol=="function"&&(a[Symbol.iterator]=function(){return this}),a;function u(l){return function(d){return function(A){if(e)throw new TypeError("Generator is already executing.");for(;s;)try{if(e=1,r&&(i=2&A[0]?r.return:A[0]?r.throw||((i=r.return)&&i.call(r),0):r.next)&&!(i=i.call(r,A[1])).done)return i;switch(r=0,i&&(A=[2&A[0],i.value]),A[0]){case 0:case 1:i=A;break;case 4:return s.label++,{value:A[1],done:!1};case 5:s.label++,r=A[1],A=[0];continue;case 7:A=s.ops.pop(),s.trys.pop();continue;default:if(!(i=(i=s.trys).length>0&&i[i.length-1])&&(A[0]===6||A[0]===2)){s=0;continue}if(A[0]===3&&(!i||A[1]>i[0]&&A[1]0;)r=Math.random()*t|0,e=n[--t],n[t]=n[r],n[r]=e}function he(n,t,e){return Math.max(n,Math.min(t,e))}function ne(n){return n%2==0?n:n+1}function Ie(n){for(var t=0,e=0;e=e?i():setTimeout(s,u)}};s()})}function Y(n,t){for(var e=1,r=-1,i=0;i=0)e*=n[i];else if(n[i]===-1){if(r!==-1)throw Error("Shapes can only have 1 implicit size. Found -1 at dim "+r+" and dim "+i);r=i}else if(n[i]<0)throw Error("Shapes can not be < 0. Found "+n[i]+" at dim "+i);if(r===-1){if(t>0&&t!==e)throw Error("Size("+t+") must match the product of shape "+n);return n}if(e===0)throw Error("Cannot infer the missing size in ["+n+"] when there are 0 elements");if(t%e!=0)throw Error("The implicit shape can't be a fractional number. Got "+t+" / "+e);var a=n.slice();return a[r]=t/e,a}function ye(n,t){var e=t.length;return q((n=n==null?t.map(function(r,i){return i}):[].concat(n)).every(function(r){return r>=-e&&ru)&&n[u]===1&&(e.push(n[u]),r.push(u)),a[s]<=u&&s++}n[u]!==1&&(e.push(n[u]),r.push(u))}return{newShape:e,keptDims:r}}function G(n,t){var e=null;if(n==null||n==="float32")e=new Float32Array(t);else if(n==="int32")e=new Int32Array(t);else{if(n!=="bool")throw new Error("Unknown data type "+n);e=new Uint8Array(t)}return e}function W(n,t){var e=null;if(n==null||n==="float32")e=new Float32Array(t);else if(n==="int32")e=new Int32Array(t);else if(n==="bool")e=new Uint8Array(t);else{if(n!=="string")throw new Error("Unknown data type "+n);e=new Array(t)}return e}function K(n,t){for(var e=0;e=0;--r)e[r]=e[r+1]*n[r+1];return e}function Be(n,t,e){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(n)&&(n=xe(n)),e&&K(n,t),function(a,s){return a instanceof Float32Array&&s==="float32"||a instanceof Int32Array&&s==="int32"||a instanceof Uint8Array&&s==="bool"}(n,t))return n;if(t==null||t==="float32"||t==="complex64")return new Float32Array(n);if(t==="int32")return new Int32Array(n);if(t==="bool"){for(var r=new Uint8Array(n.length),i=0;i=0,function(){return"Tensor must have a shape comprised of positive integers but got shape ["+n+"]."})})}function Pe(n,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",P().platform.encode(n,t)}function Qe(n,t){return t===void 0&&(t="utf-8"),t=t||"utf-8",P().platform.decode(n,t)}function nt(n,t,e){if(t===0)return 0;if(t===1)return n[0];for(var r=n[n.length-1],i=0;i0?re:"")+" "}console.log("%c"+l+" %c"+u+" %c"+d+"D "+I+" %c"+A+" %c"+O+" %c"+s,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")},n}(),Dt=20,Ct=3,Mt=7;function Bt(n,t,e,r){var i=He(t),a=function(d,A,I,O){var z=ce(A),re=O[O.length-1],oe=new Array(re).fill(0),ae=A.length,se=I==="complex64"?tr(d):d;if(ae>1)for(var be=0;beDt){var Ae=Ct*ae,me=Array.from(A.slice(0,Ae)),Ce=Array.from(A.slice((se-Ct)*ae,se*ae));return O==="complex64"&&(me=tr(me),Ce=tr(Ce)),["["+me.map(function(ct,bt){return Ut(ct,re[bt],O)}).join(", ")+", ..., "+Ce.map(function(ct,bt){return Ut(ct,re[se-Ct+bt],O)}).join(", ")+"]"]}return["["+(O==="complex64"?tr(A):Array.from(A)).map(function(ct,bt){return Ut(ct,re[bt],O)}).join(", ")+"]"]}var Oe=I.slice(1),Le=z.slice(1),Ue=z[0]*ae,Ne=[];if(se>Dt){for(var Fe=0;Fe=this.shape[r]){var u="Requested out of range element at "+t+". Buffer shape="+this.shape;throw new Error(u)}r++}for(var l=t[t.length-1],d=0;d0)throw new Error("Backend '"+this.backendName+"' has an internal memory leak ("+u+" data ids) after running '"+t+"'")},n.prototype.runKernelFunc=function(t,e,r,i,a,s,u){var l,d=this;s===void 0&&(s=[]),u===void 0&&(u=[]);var A=[],I=this.isTapeOn();i==null&&(i=this.state.activeScope!=null?this.state.activeScope.name:"");var O,z=function(be){I&&(A=be.map(function(Ae){return d.keep(d.clone(Ae))}))},re=this.state.numBytes,oe=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);var ae,se=D(i,this.backendName);return O=se!=null?function(){var be=d.backend.numDataIds();ae=se.kernelFunc({inputs:e,attrs:a,backend:d.backend});var Ae=Array.isArray(ae)?ae:[ae];d.shouldCheckForMemLeaks()&&d.checkKernelForMemLeak(i,be,Ae);var me=Ae.map(function(Oe){var Le=Oe.dataId,Ue=Oe.shape,Ne=Oe.dtype;return d.makeTensorFromDataId(Le,Ue,Ne)}),Ce=me.filter(function(Oe,Le){return u[Le]});return z((s||[]).slice().concat(Ce)),me}:function(){var be=d.backend.numDataIds();ae=d.tidy(function(){return t(d.backend,z)});var Ae=Array.isArray(ae)?ae:[ae];return d.shouldCheckForMemLeaks()&&d.checkKernelForMemLeak(i,be,Ae),Ae},this.scopedRun(function(){return d.state.kernelDepth++},function(){return d.state.kernelDepth--},function(){l=d.ENV.getBool("DEBUG")?d.profiler.profileKernel(i,e,function(){return O()}):O()}),I&&this.addTapeNode(i,e,l,r,A),this.state.profiling&&this.state.activeProfile.kernels.push({name:i,bytesAdded:this.state.numBytes-re,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-oe,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(e).map(function(be){return e[be].shape}),outputShapes:l.map(function(be){return be.shape})}),Array.isArray(ae)?l:l[0]},n.prototype.makeTensor=function(t,e,r,i){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");r=r||"float32",i=i||this.backend;var a=t;r==="string"&&Ee(t[0])&&(a=t.map(function(A){return Pe(A)}));var s=i.write(a,e,r),u=new Ft(e,r,s,this.nextTensorId());if(this.incRef(u,i),r==="string"){var l=this.state.tensorInfo.get(s),d=ue(a);this.state.numBytes+=d-l.bytes,l.bytes=d}return u},n.prototype.makeTensorFromDataId=function(t,e,r,i){var a=new Ft(e,r=r||"float32",t,this.nextTensorId());return this.incRef(a,i),a},n.prototype.makeVariable=function(t,e,r,i){e===void 0&&(e=!0),r=r||this.nextVariableId().toString(),i!=null&&i!==t.dtype&&(t=t.asType(i));var a=new sr(t,e,r,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error("Variable with name "+a.name+" was already registered");return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a},n.prototype.incRef=function(t,e){var r=this.state.tensorInfo.has(t.dataId)?this.state.tensorInfo.get(t.dataId).refCount:0;if(this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++,r===0){this.state.numDataBuffers++;var i=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(i=t.size*$(t.dtype)),this.state.tensorInfo.set(t.dataId,{backend:e||this.backend,dtype:t.dtype,shape:t.shape,bytes:i,refCount:0}),this.state.numBytes+=i}this.state.tensorInfo.get(t.dataId).refCount++,t instanceof sr||this.track(t)},n.prototype.disposeTensor=function(t){if(this.state.tensorInfo.has(t.dataId)){this.state.numTensors--,t.dtype==="string"&&this.state.numStringTensors--;var e=this.state.tensorInfo.get(t.dataId);e.refCount<=1?(t.dtype!=="complex64"&&(this.state.numBytes-=e.bytes),this.state.numDataBuffers--,e.backend.disposeData(t.dataId),this.state.tensorInfo.delete(t.dataId)):this.state.tensorInfo.get(t.dataId).refCount--}},n.prototype.disposeVariables=function(){for(var t in this.state.registeredVariables){var e=this.state.registeredVariables[t];this.disposeVariable(e)}},n.prototype.disposeVariable=function(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]},n.prototype.memory=function(){var t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t},n.prototype.profile=function(t){return C(this,void 0,void 0,function(){var e,r;return E(this,function(i){return this.state.profiling=!0,e=this.state.numBytes,r=this.state.numTensors,this.state.activeProfile.kernels=[],this.state.activeProfile.result=t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max.apply(Math,this.state.activeProfile.kernels.map(function(a){return a.totalBytesSnapshot})),this.state.activeProfile.newBytes=this.state.numBytes-e,this.state.activeProfile.newTensors=this.state.numTensors-r,[2,this.state.activeProfile]})})},n.prototype.isTapeOn=function(){return this.state.gradientDepth>0&&this.state.kernelDepth===0},n.prototype.addTapeNode=function(t,e,r,i,a){var s=this,u={id:this.state.nextTapeNodeId++,kernelName:t,inputs:e,outputs:r,saved:a},l=F(t);l!=null&&(i=l.gradFunc),i!=null&&(u.gradient=function(d){return d=d.map(function(A,I){if(A==null){var O=r[I],z=rt(O.size,O.dtype);return s.makeTensor(z,O.shape,O.dtype)}return A}),i(d.length>1?d:d[0],a)}),this.state.activeTape.push(u)},n.prototype.keep=function(t){return t.kept=!0,t},n.prototype.startTape=function(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++},n.prototype.endTape=function(){this.state.gradientDepth--},n.prototype.startScope=function(t){var e={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(e.name=t),this.state.scopeStack.push(e),this.state.activeScope=e},n.prototype.endScope=function(t){for(var e=this,r=Kr(t),i=new Set(r.map(function(l){return l.id})),a=0;a0,function(){return"gradients() received an empty list of xs."}),r!=null&&r.dtype!=="float32")throw new Error("dy must have 'float32' dtype, but has '"+r.dtype+"'");var s=this.scopedRun(function(){return a.startTape()},function(){return a.endTape()},function(){return a.tidy("forward",t)});q(s instanceof Ft,function(){return"The result y returned by f() must be a tensor."});var u=function(l,d,A){for(var I={},O={},z=0;z=0;z--)for(re=(Oe=l[z]).inputs,be=0;be0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",function(){var l,d,A={};A[s.id]=r==null?(l=s.shape,d=$e(ce(l),"float32"),We.makeTensor(d,l,"float32")):r,function(O,z,re){for(var oe=function(se){var be=z[se],Ae=[];if(be.outputs.forEach(function(Le){var Ue=O[Le.id];Ue!=null?Ae.push(Ue):Ae.push(null)}),be.gradient==null)throw new Error("Cannot compute gradient: gradient function not found for "+be.kernelName+".");var me=be.gradient(Ae),Ce=function(Le){if(!(Le in me))throw new Error("Cannot backprop through input "+Le+". Available gradients found: "+Object.keys(me)+".");var Ue=re(function(){return me[Le]()});if(Ue.dtype!=="float32")throw new Error("Error in gradient for op "+be.kernelName+". The gradient of input "+Le+" must have 'float32' dtype, but has '"+Ue.dtype+"'");var Ne=be.inputs[Le];if(!fe(Ue.shape,Ne.shape))throw new Error("Error in gradient for op "+be.kernelName+". The gradient of input '"+Le+"' has shape '"+Ue.shape+"', which does not match the shape of the input '"+Ne.shape+"'");if(O[Ne.id]==null)O[Ne.id]=Ue;else{var Fe=O[Ne.id];O[Ne.id]=Fe.add(Ue),Fe.dispose()}};for(var Oe in be.inputs)Ce(Oe)},ae=z.length-1;ae>=0;ae--)oe(ae)}(A,u,function(O){return a.tidy(O)});var I=e.map(function(O){return A[O.id]});return a.state.gradientDepth===0&&(a.state.activeTape.forEach(function(O){for(var z=0,re=O.saved;ze||t>e)throw r="["+n+"x"+t+"]",new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+("["+e+"x"+e+"]")+".")}function vn(n,t){return Jr(n,t,function(){return n.createFramebuffer()},"Unable to create WebGLFramebuffer.")}function Qn(n,t,e,r,i,a,s,u){var l=n.getAttribLocation(e,r);return l!==-1&&(lt(n,t,function(){return n.bindBuffer(n.ARRAY_BUFFER,i)}),lt(n,t,function(){return n.vertexAttribPointer(l,a,n.FLOAT,!1,s,u)}),lt(n,t,function(){return n.enableVertexAttribArray(l)}),!0)}function Xn(n,t,e,r){qt(n,r),lt(n,t,function(){return n.activeTexture(n.TEXTURE0+r)}),lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,e)})}function _n(n,t,e,r){return Jr(n,t,function(){return n.getUniformLocation(e,r)},'uniform "'+r+'" not present in program.')}function gn(n,t,e){return n.getUniformLocation(t,e)}function un(n,t,e,r,i,a){lt(n,t,function(){return Xn(n,t,r,a)}),lt(n,t,function(){return n.uniform1i(i,a)})}function Fn(n,t,e,r){lt(n,t,function(){return n.bindFramebuffer(n.FRAMEBUFFER,r)}),lt(n,t,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0)})}function Ln(n,t,e){lt(n,t,function(){return n.bindFramebuffer(n.FRAMEBUFFER,e)}),lt(n,t,function(){return n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,null,0)})}function Un(n){var t=n.checkFramebufferStatus(n.FRAMEBUFFER);if(t!==n.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+Kn(n,t))}function Kn(n,t){switch(t){case n.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case n.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case n.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return"unknown error "+t}}function Jr(n,t,e,r){var i=lt(n,t,function(){return e()});if(i==null)throw new Error(r);return i}function qt(n,t){var e=n.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+n.TEXTURE0;if(re)throw new Error("textureUnit must be in "+("[gl.TEXTURE0, gl.TEXTURE"+e+"]")+".")}function _r(n,t){return t===void 0&&(t=2),ce(n.slice(0,n.length-t))}function qr(n){if(n.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[n.length>1?n[n.length-2]:1,n[n.length-1]]}function yn(n){var t=[1,1,1];return n.length===0||n.length===1&&n[0]===1||(t=[_r(n)].concat(qr(n))),t}function ln(n,t){var e;t===void 0&&(t=!1);var r=P().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(t&&(r*=2,(n=n.map(function(d,A){return A>=n.length-2?ne(n[A]):n[A]})).length===1&&(n=[2,n[0]])),n.length!==2){var i=V(n);n=i.newShape}var a=ce(n);if(n.length<=1&&a<=r)return[1,a];if(n.length===2&&n[0]<=r&&n[1]<=r)return n;if(n.length===3&&n[0]*n[1]<=r&&n[2]<=r)return[n[0]*n[1],n[2]];if(n.length===3&&n[0]<=r&&n[1]*n[2]<=r)return[n[0],n[1]*n[2]];if(n.length===4&&n[0]*n[1]*n[2]<=r&&n[3]<=r)return[n[0]*n[1]*n[2],n[3]];if(n.length===4&&n[0]<=r&&n[1]*n[2]*n[3]<=r)return[n[0],n[1]*n[2]*n[3]];if(t){var s=_r(n),u=2,l=2;return n.length&&(u=(e=qr(n))[0],l=e[1]),De(a=s*(u/2)*(l/2)).map(function(d){return 2*d})}return De(a)}function Tn(n){return n%2==0}function Zn(n,t){if(fe(n=n.slice(-2),t=t.slice(-2))||!n.length||!t.length||n[0]===0||n[1]===0||t[0]===0||t[1]===0)return!0;if(n.length!==t.length){var e=n.slice(-1)[0],r=t.slice(-1)[0];if(e===r||Tn(e)&&Tn(r)&&(n[0]===1||t[0]===1))return!0}return n[1]===t[1]&&Tn(n[0])&&Tn(t[0])}function Jn(n){if(Cr==null){var t=ht(n);Cr=t.getParameter(t.MAX_TEXTURE_SIZE)}return Cr}function Wn(n){if(br==null){var t=ht(n);br=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,br)}function fi(n){if(n===0)return 0;var t=ht(n);return wr(t,"EXT_disjoint_timer_query_webgl2")&&n===2?2:wr(t,"EXT_disjoint_timer_query")?1:0}function wr(n,t){return n.getExtension(t)!=null}function zr(n){try{if(ht(n)!=null)return!0}catch(t){return!1}return!1}function Gn(n){if(n===0)return!1;var t=ht(n);if(n===1){if(!wr(t,"OES_texture_float"))return!1}else if(!wr(t,"EXT_color_buffer_float"))return!1;return ii(t)}function di(n){if(n===0)return!1;var t=ht(n);if(n!==1){if(wr(t,"EXT_color_buffer_float"))return ii(t);if(wr(t,"EXT_color_buffer_half_float")){var e=t.getExtension("EXT_color_buffer_half_float");return function(r,i){var a=Pt(r,i),s=r.createTexture();r.bindTexture(r.TEXTURE_2D,s),r.texImage2D(r.TEXTURE_2D,0,a.internalFormatHalfFloat,1,1,0,a.textureFormatFloat,a.textureTypeHalfFloat,null);var u=r.createFramebuffer();r.bindFramebuffer(r.FRAMEBUFFER,u),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,s,0);var l=r.checkFramebufferStatus(r.FRAMEBUFFER)===r.FRAMEBUFFER_COMPLETE;return r.bindTexture(r.TEXTURE_2D,null),r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteTexture(s),r.deleteFramebuffer(u),l}(t,e)}return!1}return!!wr(t,"OES_texture_float")&&!!wr(t,"WEBGL_color_buffer_float")&&ii(t)}function ii(n){var t=Pt(n),e=n.createTexture();n.bindTexture(n.TEXTURE_2D,e),n.texImage2D(n.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);var r=n.createFramebuffer();n.bindFramebuffer(n.FRAMEBUFFER,r),n.framebufferTexture2D(n.FRAMEBUFFER,n.COLOR_ATTACHMENT0,n.TEXTURE_2D,e,0);var i=n.checkFramebufferStatus(n.FRAMEBUFFER)===n.FRAMEBUFFER_COMPLETE;return n.bindTexture(n.TEXTURE_2D,null),n.bindFramebuffer(n.FRAMEBUFFER,null),n.deleteTexture(e),n.deleteFramebuffer(r),i}function Ci(n){return n===2&&ht(n).fenceSync!=null}var Si=Object.freeze({callAndCheck:lt,canBeRepresented:dr,getWebGLErrorMessage:pr,getExtensionOrThrow:Er,createVertexShader:jr,createFragmentShader:Wr,createProgram:Rt,linkProgram:fn,validateProgram:nr,createStaticVertexBuffer:mr,createStaticIndexBuffer:Br,getNumChannels:function(){return P().getNumber("WEBGL_VERSION")===2?1:4},createTexture:dn,validateTextureSize:sn,createFramebuffer:vn,bindVertexBufferToProgramAttribute:Qn,bindTextureUnit:Xn,unbindTextureUnit:function(n,t,e){qt(n,e),lt(n,t,function(){return n.activeTexture(n.TEXTURE0+e)}),lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,null)})},getProgramUniformLocationOrThrow:_n,getProgramUniformLocation:gn,bindTextureToProgramUniformSampler:un,bindCanvasToFramebuffer:function(n,t){lt(n,t,function(){return n.bindFramebuffer(n.FRAMEBUFFER,null)}),lt(n,t,function(){return n.viewport(0,0,n.canvas.width,n.canvas.height)}),lt(n,t,function(){return n.scissor(0,0,n.canvas.width,n.canvas.height)})},bindColorTextureToFramebuffer:Fn,unbindColorTextureFromFramebuffer:Ln,validateFramebuffer:Un,getFramebufferErrorMessage:Kn,getBatchDim:_r,getRowsCols:qr,getShapeAs3D:yn,getTextureShapeFromLogicalShape:ln,isReshapeFree:Zn,getWebGLMaxTextureSize:Jn,resetMaxTextureSize:function(){Cr=null},resetMaxTexturesInShader:function(){br=null},getMaxTexturesInShader:Wn,getWebGLDisjointQueryTimerVersion:fi,hasExtension:wr,isWebGLVersionEnabled:zr,isCapableOfRenderingToFloatTexture:Gn,isDownloadFloatTextureEnabled:di,isWebGLFenceEnabled:Ci}),Yt=P();function Pi(){P().set("PROD",!0)}function ui(){P().set("DEBUG",!0)}function Ii(){P().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function pi(n){P().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(n+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}function Ti(){We.disposeVariables()}function ra(){return We}function Ba(){return We.memory()}function ya(n){return We.profile(n)}function Ot(n,t){return We.tidy(n,t)}function bn(n){Kr(n).forEach(function(t){return t.dispose()})}function ba(n){return We.keep(n)}function Na(n){return We.time(n)}function na(n){return We.setBackend(n)}function lr(){return We.ready()}function Fr(){return We.backendName}function en(n){We.removeBackend(n)}function Sr(n){return We.findBackend(n)}function Gr(n){return We.findBackendFactory(n)}function Rn(n,t,e){return e===void 0&&(e=1),We.registerBackend(n,t,e)}function jn(){return We.backend}function hi(n,t){P().setPlatform(n,t)}function Yn(){for(var n=[],t=0;t0,function(){return"Element arr["+u.join("][")+"] should be a primitive, but is an array of "+a.length+" elements"}),q(a.length===s[0],function(){return"Element arr["+u.join("][")+"] should have "+s[0]+" elements, but has "+a.length+" elements"});for(var l=s.slice(1),d=0;d=0&&(i=r),Hi(r,i,t,e),n==null||!L(n)&&!Array.isArray(n)&&typeof n!="number"&&typeof n!="boolean"&&typeof n!="string"){var a=n==null?"null":n.constructor.name;throw new Error("Argument '"+t+"' passed to '"+e+"' must be a Tensor or TensorLike, but got '"+a+"'")}var s=mn(n,i);L(n)||Array.isArray(n)||(n=[n]);var u=i!=="string"?Be(n,i,P().getBool("DEBUG")):xe(n,[],!0);return We.makeTensor(u,s,i)}function ai(n,t,e,r){if(r===void 0&&(r="numeric"),!Array.isArray(n))throw new Error("Argument "+t+" passed to "+e+" must be a `Tensor[]` or `TensorLike[]`");return n.map(function(i,a){return je(i,t+"["+a+"]",e)},r)}function Ai(n,t){for(var e=0;e=0&&t0}),Yt.registerFlag("WEBGL_VERSION",function(){return zr(2)?2:zr(1)?1:0}),Yt.registerFlag("WEBGL_BUFFER_SUPPORTED",function(){return Yt.get("WEBGL_VERSION")===2}),Yt.registerFlag("WEBGL_CPU_FORWARD",function(){return!0}),Yt.registerFlag("WEBGL_FORCE_F16_TEXTURES",function(){return!1}),Yt.registerFlag("WEBGL_PACK",function(){return Yt.getBool("HAS_WEBGL")}),Yt.registerFlag("WEBGL_PACK_NORMALIZATION",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_CLIP",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_DEPTHWISECONV",function(){return!1}),Yt.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_PACK_REDUCE",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_LAZILY_UNPACK",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_CONV_IM2COL",function(){return Yt.getBool("WEBGL_PACK")}),Yt.registerFlag("WEBGL_MAX_TEXTURE_SIZE",function(){return Jn(Yt.getNumber("WEBGL_VERSION"))}),Yt.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",function(){return Wn(Yt.getNumber("WEBGL_VERSION"))}),Yt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",function(){var n=Yt.getNumber("WEBGL_VERSION");return n===0?0:fi(n)}),Yt.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",function(){return Yt.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&(n=navigator.userAgent||navigator.vendor||window.opera,!(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(n)||/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(n.substr(0,4))));var n}),Yt.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",function(){return Gn(Yt.getNumber("WEBGL_VERSION"))}),Yt.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",function(){return!Yt.getBool("WEBGL_FORCE_F16_TEXTURES")&&Yt.getBool("WEBGL_RENDER_FLOAT32_CAPABLE")}),Yt.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",function(){return di(Yt.getNumber("WEBGL_VERSION"))}),Yt.registerFlag("WEBGL_FENCE_API_ENABLED",function(){return Ci(Yt.getNumber("WEBGL_VERSION"))}),Yt.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",function(){return Yt.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0}),Kt=pi;var Cn=Ve({complex_:function(n,t){var e=je(n,"real","complex"),r=je(t,"imag","complex");return pe(e.shape,r.shape,"real and imag shapes, "+e.shape+" and "+r.shape+", must match in call to tf.complex()."),We.runKernelFunc(function(i){return i.complex(e,r)},{$real:e,$imag:r})}}),$n=Ve({real_:function(n){var t=je(n,"input","real");return We.runKernelFunc(function(e){return e.real(t)},{$input:t})}}),vi=Ve({imag_:function(n){var t=je(n,"input","imag");return We.runKernelFunc(function(e){return e.imag(t)},{$input:t})}});function Sn(n,t,e){return aa(n,t,mn(n,e),e)}function aa(n,t,e,r){if(r==null&&(r=le(n)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!L(n)&&!Array.isArray(n)&&typeof n!="number"&&typeof n!="boolean"&&typeof n!="string")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(t!=null){pt(t);var i=ce(t),a=ce(e);q(i===a,function(){return"Based on the provided shape, ["+t+"], the tensor should have "+i+" values but has "+a});for(var s=0;s1)return pn([0],r);var i=rt(Math.abs(Math.ceil((t-n)/e)),r);t=1,function(){return"Pass at least one tensor to concat"});var e=ai(n,"tensors","concat");e[0].dtype==="complex64"&&e.forEach(function(u){if(u.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype `+u.dtype+". ")}),t=ye(t,e[0].shape)[0];var r=nn(e.map(function(u){return u.shape}),t);if(ce(r)===0)return Sn([],r);if((e=e.filter(function(u){return u.size>0})).length===1)return e[0];var i=e.map(function(u){return u.shape});rn(i,t);var a=e,s={axis:t};return We.runKernelFunc(function(u){return u.concat(e,t)},a,function(u){var l=i.map(function(d){return d[t]});return vs(u,l,t).map(function(d){return function(){return d}})},"Concat",s)}}),Nd=Ve({concat1d_:function(n){return Pn(n,0)}}),Md=Ve({concat2d_:function(n,t){return Pn(n,t)}}),_d=Ve({concat3d_:function(n,t){return Pn(n,t)}}),Fd=Ve({concat4d_:function(n,t){return Pn(n,t)}}),vs=Ve({split_:function(n,t,e){e===void 0&&(e=0);var r,i=je(n,"x","split");return e=ye(e,i.shape)[0],typeof t=="number"?(q(i.shape[e]%t==0,function(){return"Number of splits must evenly divide the axis."}),r=new Array(t).fill(i.shape[e]/t)):(q(i.shape[e]===t.reduce(function(a,s){return a+s}),function(){return"The sum of sizes must match the size of the axis dimension."}),r=t),We.runKernelFunc(function(a){return a.split(i,r,e)},{$x:i},function(a){return{$x:function(){return Pn(a,e)}}})}});typeof globalThis!="undefined"||typeof window!="undefined"||typeof Te.g!="undefined"&&Te.g;function wa(n,t){return n(t={exports:{}},t.exports),t.exports}var Ld=wa(function(n){(function(t,e,r){function i(u){var l,d=this,A=(l=4022871197,function(I){I=I.toString();for(var O=0;O>>0,l=(z*=l)>>>0,l+=4294967296*(z-=l)}return 23283064365386963e-26*(l>>>0)});d.next=function(){var I=2091639*d.s0+23283064365386963e-26*d.c;return d.s0=d.s1,d.s1=d.s2,d.s2=I-(d.c=0|I)},d.c=1,d.s0=A(" "),d.s1=A(" "),d.s2=A(" "),d.s0-=A(u),d.s0<0&&(d.s0+=1),d.s1-=A(u),d.s1<0&&(d.s1+=1),d.s2-=A(u),d.s2<0&&(d.s2+=1),A=null}function a(u,l){return l.c=u.c,l.s0=u.s0,l.s1=u.s1,l.s2=u.s2,l}function s(u,l){var d=new i(u),A=l&&l.state,I=d.next;return I.int32=function(){return 4294967296*d.next()|0},I.double=function(){return I()+11102230246251565e-32*(2097152*I()|0)},I.quick=I,A&&(typeof A=="object"&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.alea=s})(0,n,!1)}),Ud=wa(function(n){(function(t,e,r){function i(u){var l=this,d="";l.x=0,l.y=0,l.z=0,l.w=0,l.next=function(){var I=l.x^l.x<<11;return l.x=l.y,l.y=l.z,l.z=l.w,l.w^=l.w>>>19^I^I>>>8},u===(0|u)?l.x=u:d+=u;for(var A=0;A>>0)/4294967296};return I.double=function(){do var O=((d.next()>>>11)+(d.next()>>>0)/4294967296)/2097152;while(O===0);return O},I.int32=d.next,I.quick=I,A&&(typeof A=="object"&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.xor128=s})(0,n,!1)}),Wd=wa(function(n){(function(t,e,r){function i(u){var l=this,d="";l.next=function(){var I=l.x^l.x>>>2;return l.x=l.y,l.y=l.z,l.z=l.w,l.w=l.v,(l.d=l.d+362437|0)+(l.v=l.v^l.v<<4^I^I<<1)|0},l.x=0,l.y=0,l.z=0,l.w=0,l.v=0,u===(0|u)?l.x=u:d+=u;for(var A=0;A>>4),l.next()}function a(u,l){return l.x=u.x,l.y=u.y,l.z=u.z,l.w=u.w,l.v=u.v,l.d=u.d,l}function s(u,l){var d=new i(u),A=l&&l.state,I=function(){return(d.next()>>>0)/4294967296};return I.double=function(){do var O=((d.next()>>>11)+(d.next()>>>0)/4294967296)/2097152;while(O===0);return O},I.int32=d.next,I.quick=I,A&&(typeof A=="object"&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.xorwow=s})(0,n,!1)}),zd=wa(function(n){(function(t,e,r){function i(u){var l=this;l.next=function(){var d,A,I=l.x,O=l.i;return d=I[O],A=(d^=d>>>7)^d<<24,A^=(d=I[O+1&7])^d>>>10,A^=(d=I[O+3&7])^d>>>3,A^=(d=I[O+4&7])^d<<7,d=I[O+7&7],A^=(d^=d<<13)^d<<9,I[O]=A,l.i=O+1&7,A},function(d,A){var I,O=[];if(A===(0|A))O[0]=A;else for(A=""+A,I=0;I0;--I)d.next()}(l,u)}function a(u,l){return l.x=u.x.slice(),l.i=u.i,l}function s(u,l){u==null&&(u=+new Date);var d=new i(u),A=l&&l.state,I=function(){return(d.next()>>>0)/4294967296};return I.double=function(){do var O=((d.next()>>>11)+(d.next()>>>0)/4294967296)/2097152;while(O===0);return O},I.int32=d.next,I.quick=I,A&&(A.x&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.xorshift7=s})(0,n,!1)}),Vd=wa(function(n){(function(t,e,r){function i(u){var l=this;l.next=function(){var d,A,I=l.w,O=l.X,z=l.i;return l.w=I=I+1640531527|0,A=O[z+34&127],d=O[z=z+1&127],A^=A<<13,d^=d<<17,A^=A>>>15,d^=d>>>12,A=O[z]=A^d,l.i=z,A+(I^I>>>16)|0},function(d,A){var I,O,z,re,oe,ae=[],se=128;for(A===(0|A)?(O=A,A=null):(A+="\0",O=0,se=Math.max(se,A.length)),z=0,re=-32;re>>15,O^=O<<4,O^=O>>>13,re>=0&&(oe=oe+1640531527|0,z=(I=ae[127&re]^=O+oe)==0?z+1:0);for(z>=128&&(ae[127&(A&&A.length||0)]=-1),z=127,re=512;re>0;--re)O=ae[z+34&127],I=ae[z=z+1&127],O^=O<<13,I^=I<<17,O^=O>>>15,I^=I>>>12,ae[z]=O^I;d.w=oe,d.X=ae,d.i=z}(l,u)}function a(u,l){return l.i=u.i,l.w=u.w,l.X=u.X.slice(),l}function s(u,l){u==null&&(u=+new Date);var d=new i(u),A=l&&l.state,I=function(){return(d.next()>>>0)/4294967296};return I.double=function(){do var O=((d.next()>>>11)+(d.next()>>>0)/4294967296)/2097152;while(O===0);return O},I.int32=d.next,I.quick=I,A&&(A.X&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.xor4096=s})(0,n,!1)}),Hd=wa(function(n){(function(t,e,r){function i(u){var l=this,d="";l.next=function(){var I=l.b,O=l.c,z=l.d,re=l.a;return I=I<<25^I>>>7^O,O=O-z|0,z=z<<24^z>>>8^re,re=re-I|0,l.b=I=I<<20^I>>>12^O,l.c=O=O-z|0,l.d=z<<16^O>>>16^re,l.a=re-I|0},l.a=0,l.b=0,l.c=-1640531527,l.d=1367130551,u===Math.floor(u)?(l.a=u/4294967296|0,l.b=0|u):d+=u;for(var A=0;A>>0)/4294967296};return I.double=function(){do var O=((d.next()>>>11)+(d.next()>>>0)/4294967296)/2097152;while(O===0);return O},I.int32=d.next,I.quick=I,A&&(typeof A=="object"&&a(A,d),I.state=function(){return a(d,{})}),I}e&&e.exports?e.exports=s:r&&r.amd?r(function(){return s}):this.tychei=s})(0,n,!1)}),Aa=wa(function(n){(function(t,e){var r,i=this,a=256,s=6,u="random",l=e.pow(a,s),d=e.pow(2,52),A=2*d,I=a-1;function O(se,be,Ae){var me=[],Ce=oe(function Ue(Ne,Fe){var Ze,Ke=[],et=typeof Ne;if(Fe&&et=="object")for(Ze in Ne)try{Ke.push(Ue(Ne[Ze],Fe-1))}catch(tt){}return Ke.length?Ke:et=="string"?Ne:Ne+"\0"}((be=be==1?{entropy:!0}:be||{}).entropy?[se,ae(t)]:se==null?function(){try{var Ue;return r&&(Ue=r.randomBytes)?Ue=Ue(a):(Ue=new Uint8Array(a),(i.crypto||i.msCrypto).getRandomValues(Ue)),ae(Ue)}catch(Ze){var Ne=i.navigator,Fe=Ne&&Ne.plugins;return[+new Date,i,Fe,i.screen,ae(t)]}}():se,3),me),Oe=new z(me),Le=function(){for(var Ue=Oe.g(s),Ne=l,Fe=0;Ue=A;)Ue/=2,Ne/=2,Fe>>>=1;return(Ue+Fe)/Ne};return Le.int32=function(){return 0|Oe.g(4)},Le.quick=function(){return Oe.g(4)/4294967296},Le.double=Le,oe(ae(Oe.S),t),(be.pass||Ae||function(Ue,Ne,Fe,Ze){return Ze&&(Ze.S&&re(Ze,Oe),Ue.state=function(){return re(Oe,{})}),Fe?(e[u]=Ue,Ne):Ue})(Le,Ce,"global"in be?be.global:this==e,be.state)}function z(se){var be,Ae=se.length,me=this,Ce=0,Oe=me.i=me.j=0,Le=me.S=[];for(Ae||(se=[Ae++]);Ce=1||u===0);var l=Math.sqrt(-2*Math.log(u)/u);e=this.mean+this.stdDev*a*l,r=this.mean+this.stdDev*s*l,this.truncated&&!this.isValidTruncated(e)||(i=!0)}return this.truncated&&!this.isValidTruncated(r)||(this.nextVal=this.convertValue(r)),this.convertValue(e)},n.prototype.convertValue=function(t){return this.dtype==null||this.dtype==="float32"?t:Math.round(t)},n.prototype.isValidTruncated=function(t){return t<=this.upper&&t>=this.lower},n}(),Gd=function(){function n(t,e,r,i){this.alpha=t,this.beta=1/e,this.dtype=r;var a=i||Math.random();this.randu=Co(a.toString()),this.randn=new ms(0,1,r,!1,this.randu()),this.d=t<1?t+2/3:t-1/3,this.c=1/Math.sqrt(9*this.d)}return n.prototype.nextValue=function(){for(var t,e,r,i,a,s;;){do i=this.randn.nextValue(),s=1+this.c*i;while(s<=0);if(s*=s*s,e=1-.331*(t=i*i)*t,r=.5*t+this.d*(1-s+Math.log(s)),(a=this.randu())=1+t.length,function(){return"input rank is "+r.rank+" but should be > than blockShape.length "+t.length}),q(e.length===t.length,function(){return"crops.length is "+e.length+" but should be equal to blockShape.length "+t.length}),q(r.shape[0]%i==0,function(){return"input tensor batch is "+r.shape[0]+" but is not divisible by the product of the elements of blockShape "+t.join(" * ")+" === "+i}),We.runKernelFunc(function(a){return a.batchToSpaceND(r,t,e)},{$x:r},function(a){return{$x:function(){return a.spaceToBatchND(t,e)}}})}}),Kd=Ve({broadcastTo_:function(n,t){var e=je(n,"broadcastTo","x"),r=e.shape;if(t.some(function(l){return!(l>0)||l%1!=0}))throw new Error("broadcastTo(): Invalid broadcast shape ["+t+"].");if(t.lengthe.rank){for(var i=e.shape.slice();i.length=0;s--)if(e.shape[s]===t[s])a[s]=1;else if(e.shape[s]!==1)throw new Error("broadcastTo(): ["+r+"] cannot be broadcast to ["+t+"].");var u=a.map(function(l,d){return l>1?d:-1}).filter(function(l){return l>=0});return u.length===0?e.clone():We.runKernelFunc(function(l){return l.tile(e,a)},{input:e},function(l){return{input:function(){return l.sum(u,!0)}}})}}),Zd=Ve({cast_:function(n,t){var e=je(n,"x","cast");if(!te(t))throw new Error("Failed to cast to unknown dtype "+t);if(t==="string"&&e.dtype!=="string"||t!=="string"&&e.dtype==="string")throw new Error("Only strings can be casted to strings");var r={dtype:t};return We.runKernelFunc(function(i){return i.cast(e,t)},{x:e},function(i){return{x:function(){return i.clone()}}},"Cast",r)}}),Jd=Ve({clone_:function(n){var t=je(n,"x","clone",null);return We.runKernelFunc(function(){return We.makeTensorFromDataId(t.dataId,t.shape,t.dtype)},{$x:t},function(e){return{$x:function(){return e.toFloat()}}})}}),Yd=Ve({cumsum_:function(n,t,e,r){t===void 0&&(t=0),e===void 0&&(e=!1),r===void 0&&(r=!1);var i=je(n,"x","cumsum"),a=oi([t|=0],i.rank),s=i;a!=null&&(s=i.transpose(a));var u=Ht(1,i.rank)[0],l=We.runKernelFunc(function(d){return d.cumsum(s,u,e,r)},{permutedX:s},function(d){return{permutedX:function(){return d.cumsum(t,e,!r)}}});return a!=null&&(l=l.transpose(a)),l}}),$d=Ve({depthToSpace_:function(n,t,e){e===void 0&&(e="NHWC");var r=je(n,"x","depthToSpace"),i=e==="NHWC"?r.shape[1]:r.shape[2],a=e==="NHWC"?r.shape[2]:r.shape[3],s=e==="NHWC"?r.shape[3]:r.shape[1];return q(i*t>=0,function(){return`Negative dimension size caused by overflow when multiplying `+i+" and "+t+` for depthToSpace with input shape `+r.shape}),q(a*t>=0,function(){return`Negative dimension size caused by overflow when multiplying `+a+" and "+t+` for depthToSpace with input shape `+r.shape}),q(s%(t*t)==0,function(){return"Dimension size must be evenly divisible by "+t*t+" but is "+s+" for depthToSpace with input shape "+r.shape}),We.runKernelFunc(function(u){return u.depthToSpace(r,t,e)},{$x:r})}}),xi=Ve({expandDims_:function(n,t){t===void 0&&(t=0);var e=je(n,"x","expandDims",null);q(t<=e.rank,function(){return"Axis must be <= rank of the tensor"});var r=e.shape.slice();return t<0&&(q(-(e.rank+1)<=t,function(){return"Axis must be in the interval ["+-(e.rank+1)+", "+e.rank+"]"}),t=e.rank+t+1),r.splice(t,0,1),Ri(e,r)}}),dl=Ve({eye_:function(n,t,e,r){r===void 0&&(r="float32"),t==null&&(t=n);for(var i=cr([n,t],r),a=n<=t?n:t,s=0;s2)throw new Error("Rank of probabilities must be 1 or 2, but is "+s);e=e||Math.random();var u=s===1?i.as2D(1,-1):i,l=We.runKernelFunc(function(d){return d.multinomial(u,r,t,e)},{logits2D:u});return s===1?l.as1D():l}}),gs=Ve({oneHot_:function(n,t,e,r){if(e===void 0&&(e=1),r===void 0&&(r=0),t<2)throw new Error("Error in oneHot: depth must be >=2, but it is "+t);var i=je(n,"indices","oneHot","int32"),a=i.shape.concat([t]);return i=i.flatten(),We.runKernelFunc(function(s){return s.oneHot(i,t,e,r)},{$indices:i},function(s){return{$indices:function(){return pn(i.shape,"float32")}}}).reshape(a)}}),xa=Ve({pad_:function(n,t,e){e===void 0&&(e=0);var r=je(n,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");var i={paddings:t,constantValue:e};return We.runKernelFunc(function(a){return a.pad(r,t,e)},{x:r},function(a){var s=t.map(function(u){return u[0]});return{x:function(){return a.slice(s,r.shape)}}},"PadV2",i)}}),ep=Ve({pad1d_:function(n,t,e){return e===void 0&&(e=0),q(t.length===2,function(){return"Invalid number of paddings. Must be length of 2."}),xa(n,[t],e)}}),tp=Ve({pad2d_:function(n,t,e){return e===void 0&&(e=0),q(t.length===2&&t[0].length===2&&t[1].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),xa(n,t,e)}}),rp=Ve({pad3d_:function(n,t,e){return e===void 0&&(e=0),q(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),xa(n,t,e)}}),np=Ve({pad4d_:function(n,t,e){return e===void 0&&(e=0),q(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,function(){return"Invalid number of paddings. Must be length of 2 each."}),xa(n,t,e)}}),ip=Ve({rand_:function(n,t,e){var r=ce(n),i=null;if(e==null||e==="float32")i=new Float32Array(r);else if(e==="int32")i=new Int32Array(r);else{if(e!=="bool")throw new Error("Unknown data type "+e);i=new Uint8Array(r)}for(var a=0;a=1+t.length,function(){return"input rank "+r.rank+" should be > than [blockShape] "+t.length}),q(e.length===t.length,function(){return"paddings.shape[0] "+e.length+" must be equal to [blockShape] "+t.length}),q(r.shape.reduce(function(i,a,s){return s>0&&s<=t.length?i&&(a+e[s-1][0]+e[s-1][1])%t[s-1]==0:i},!0),function(){return"input spatial dimensions "+r.shape.slice(1)+" with paddings "+e.toString()+" must be divisible by blockShapes "+t.toString()}),We.runKernelFunc(function(i){return i.spaceToBatchND(r,t,e)},{$x:r},function(i){return{$x:function(){return i.batchToSpaceND(t,e)}}})}}),vl=Ve({squeeze_:function(n,t){var e=je(n,"x","squeeze");return Ri(e,V(e.shape,t).newShape)}}),mi=Ve({stack_:function(n,t){t===void 0&&(t=0);var e=ai(n,"tensors","stack");if(q(e.length>=1,function(){return"Pass at least one tensor to tf.stack"}),e.length===1)return e[0].expandDims(t);var r=e[0].rank,i=e[0].shape,a=e[0].dtype;q(t<=r,function(){return"Axis must be <= rank of the tensor"}),e.forEach(function(u){pe(i,u.shape,"All tensors passed to stack must have matching shapes")}),e.forEach(function(u){q(a===u.dtype,function(){return"All tensors passed to stack must have matching dtypes"})});var s=e.map(function(u){return u.expandDims(t)});return Pn(s,t)}}),_a=Ve({tile_:function(n,t){var e=je(n,"x","tile",null);q(e.rank===t.length,function(){return"Error in transpose: rank of input "+e.rank+" must match length of reps "+t+"."});var r=[e],i={reps:t};return We.runKernelFunc(function(a,s){var u=a.tile(e,t);return s([e]),u},{x:e},function(a,s){var u=s[0];return{x:function(){var l=Lr(u);if(u.rank===1)for(var d=0;d=-e.shape.length&&t=2*t+1||i%2==1?s.push(i):a.push(i);r.push.apply(r,a),r.push(0),r.push.apply(r,s)}return r}function To(n,t,e,r){r===void 0&&(r=!0);var i=[];r?i.push(n[0]/e):i.push(n[0]*e);for(var a=1;an.rank)throw new Error("index innermost dimension length must be <= tensor rank; saw: "+t.shape[t.rank-1]+" vs. "+n.rank);if(n.size===0)throw new Error("Requested more than 0 entries, but input is empty. Input shape: "+n.shape+".");for(var e=t.shape,r=e[e.length-1],i=1,a=0;a1?t.shape[t.rank-1]:1,i=t.rank>1?t.rank-1:1,a="Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: "+e.shape+", indices.shape: "+t.shape+", shape: "+n+", sliceDim: "+r+", and batchDim: "+i+".";if(e.rank1?t.shape[r-1]:1,a=e.length,s=1,u=i;u0;)1&n&&t.push(e),n/=2,e++;return t}function Oo(n,t,e){for(var r=[],i=0;i0?Number.MIN_SAFE_INTEGER:Number.MAX_SAFE_INTEGER);var u=r[i];return a<0&&(a+=u),a=he(0,a,u-1)}function xl(n,t,e,r,i){var a=t[i],s=e[i]||1;(n&1<0?Number.MAX_SAFE_INTEGER:Number.MIN_SAFE_INTEGER);var u=r[i];return a<0&&(a+=u),a=s>0?he(0,a,u):he(-1,a,u-1)}function As(n,t,e){for(var r=e.length,i=0;i1){r=i;break}for(i=r+1;i0||e[i]!==n[i])return!1;return!0}function xs(n,t){for(var e=n.length>0?n[n.length-1]:1,r=0;r0,function(){return"variableGrads() expects at least one of the input variables to be trainable, but none of the "+a+" variables is trainable."});var s=We.gradients(n,t,null,!0),u=s.value,l=s.grads;q(l.some(function(A){return A!=null}),function(){return"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."}),q(u.rank===0,function(){return"The f passed in variableGrads(f) must return a scalar, but it returned a rank-"+u.rank+" tensor"});var d={};return t.forEach(function(A,I){l[I]!=null&&(d[A.name]=l[I])}),i!=null&&i.forEach(function(A){return d[A.name]=null}),{value:u,grads:d}}function ko(n){return We.customGrad(n)}function jo(n){if(n.filter(function(t){return t==null}).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.`)}var Gi=Ve({softmax_:function(n,t){t===void 0&&(t=-1);var e=je(n,"logits","softmax","float32");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error("Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and dim was "+t);return We.runKernelFunc(function(r,i){var a=r.softmax(e,t);return i([a]),a},{logits:e},function(r,i){var a=i[0],s=r.mul(a);return{logits:function(){return s.sub(s.sum([t],!0).mul(a))}}},"Softmax",{dim:t},[],[!0])}}),cp=Ve({logSoftmax_:function(n,t){t===void 0&&(t=-1);var e=je(n,"logits","logSoftmax");if(t===-1&&(t=e.rank-1),t!==e.rank-1)throw Error("Log Softmax along a non-last dimension is not yet supported. Logits was rank "+e.rank+" and axis was "+t);return ko(function(r,i){var a=r.max(t,!0),s=r.sub(a),u=s.toFloat().sub(s.exp().sum(t,!0).log());return i([u]),{value:u,gradFunc:function(l,d){var A=d[0].exp();return l.sub(l.sum(t,!0).mul(A))}}})(e)}}),El=function(){function n(t,e){this.backend=t,this.dataMover=e,this.data=new WeakMap,this.dataIdsCount=0}return n.prototype.get=function(t){return this.data.has(t)||this.dataMover.moveData(this.backend,t),this.data.get(t)},n.prototype.set=function(t,e){this.dataIdsCount++,this.data.set(t,e)},n.prototype.has=function(t){return this.data.has(t)},n.prototype.delete=function(t){return this.dataIdsCount--,this.data.delete(t)},n.prototype.numDataIds=function(){return this.dataIdsCount},n}(),Cl=function(){function n(){}return n.prototype.time=function(t){return at("time")},n.prototype.read=function(t){return at("read")},n.prototype.readSync=function(t){return at("readSync")},n.prototype.numDataIds=function(){return at("numDataIds")},n.prototype.disposeData=function(t){return at("disposeData")},n.prototype.write=function(t,e,r){return at("write")},n.prototype.move=function(t,e,r,i){return at("move")},n.prototype.memory=function(){return at("memory")},n.prototype.floatPrecision=function(){return at("floatPrecision")},n.prototype.epsilon=function(){return this.floatPrecision()===32?1e-7:1e-4},n.prototype.batchMatMul=function(t,e,r,i){return at("batchMatMul")},n.prototype.fusedBatchMatMul=function(t){return t.a,t.b,t.transposeA,t.transposeB,t.bias,t.activation,t.preluActivationWeights,at("fusedBatchMatMul")},n.prototype.slice=function(t,e,r){return at("slice")},n.prototype.stridedSlice=function(t,e,r,i){return at("stridedSlice")},n.prototype.unstack=function(t,e){return at("unstack")},n.prototype.reverse=function(t,e){return at("reverse")},n.prototype.concat=function(t,e){return at("concat")},n.prototype.neg=function(t){return at("neg")},n.prototype.add=function(t,e){return at("add")},n.prototype.addN=function(t){return at("addN")},n.prototype.subtract=function(t,e){return at("subtract")},n.prototype.multiply=function(t,e){return at("multiply")},n.prototype.realDivide=function(t,e){return at("realDivide")},n.prototype.floorDiv=function(t,e){return at("floorDiv")},n.prototype.sum=function(t,e){return at("sum")},n.prototype.prod=function(t,e){return at("prod")},n.prototype.unsortedSegmentSum=function(t,e,r){return at("unsortedSegmentSum")},n.prototype.argMin=function(t,e){return at("argMin")},n.prototype.argMax=function(t,e){return at("argMax")},n.prototype.equal=function(t,e){return at("equal")},n.prototype.notEqual=function(t,e){return at("notEqual")},n.prototype.less=function(t,e){return at("less")},n.prototype.lessEqual=function(t,e){return at("lessEqual")},n.prototype.greater=function(t,e){return at("greater")},n.prototype.greaterEqual=function(t,e){return at("greaterEqual")},n.prototype.logicalNot=function(t){return at("logicalNot")},n.prototype.logicalAnd=function(t,e){return at("logicalAnd")},n.prototype.logicalOr=function(t,e){return at("logicalOr")},n.prototype.where=function(t){return at("where")},n.prototype.select=function(t,e,r){return at("select")},n.prototype.topk=function(t,e,r){return at("topk")},n.prototype.min=function(t,e){return at("min")},n.prototype.minimum=function(t,e){return at("minimum")},n.prototype.mod=function(t,e){return at("mod")},n.prototype.max=function(t,e){return at("max")},n.prototype.maximum=function(t,e){return at("maximum")},n.prototype.all=function(t,e){return at("all")},n.prototype.any=function(t,e){return at("any")},n.prototype.squaredDifference=function(t,e){return at("squaredDifference")},n.prototype.ceil=function(t){return at("ceil")},n.prototype.floor=function(t){return at("floor")},n.prototype.round=function(t){return at("round")},n.prototype.sign=function(t){return at("sign")},n.prototype.isNaN=function(t){return at("isNaN")},n.prototype.isInf=function(t){return at("isInf")},n.prototype.isFinite=function(t){return at("isFinite")},n.prototype.pow=function(t,e){return at("pow")},n.prototype.exp=function(t){return at("exp")},n.prototype.expm1=function(t){return at("expm1")},n.prototype.softmax=function(t,e){return at("softmax")},n.prototype.log=function(t){return at("log")},n.prototype.log1p=function(t){return at("log1p")},n.prototype.sqrt=function(t){return at("sqrt")},n.prototype.rsqrt=function(t){return at("rsqrt")},n.prototype.square=function(t){return at("square")},n.prototype.reciprocal=function(t){return at("reciprocal")},n.prototype.relu=function(t){return at("relu")},n.prototype.relu6=function(t){return at("relu6")},n.prototype.prelu=function(t,e){return at("prelu")},n.prototype.elu=function(t){return at("elu")},n.prototype.eluDer=function(t,e){return at("eluDer")},n.prototype.selu=function(t){return at("selu")},n.prototype.int=function(t){return at("int")},n.prototype.clip=function(t,e,r){return at("clip")},n.prototype.abs=function(t){return at("abs")},n.prototype.complexAbs=function(t){return at("complexAbs")},n.prototype.sigmoid=function(t){return at("sigmoid")},n.prototype.softplus=function(t){return at("softplus")},n.prototype.sin=function(t){return at("sin")},n.prototype.cos=function(t){return at("cos")},n.prototype.tan=function(t){return at("tan")},n.prototype.asin=function(t){return at("asin")},n.prototype.acos=function(t){return at("acos")},n.prototype.atan=function(t){return at("atan")},n.prototype.atan2=function(t,e){return at("atan2")},n.prototype.sinh=function(t){return at("sinh")},n.prototype.cosh=function(t){return at("cosh")},n.prototype.tanh=function(t){return at("tanh")},n.prototype.asinh=function(t){return at("asinh")},n.prototype.acosh=function(t){return at("acosh")},n.prototype.atanh=function(t){return at("atanh")},n.prototype.erf=function(t){return at("erf")},n.prototype.step=function(t,e){return at("step")},n.prototype.fusedConv2d=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,at("fusedConv2d")},n.prototype.conv2d=function(t,e,r){return at("conv2d")},n.prototype.conv2dDerInput=function(t,e,r){return at("conv2dDerInput")},n.prototype.conv2dDerFilter=function(t,e,r){return at("conv2dDerFilter")},n.prototype.fusedDepthwiseConv2D=function(t){return t.input,t.filter,t.convInfo,t.bias,t.activation,t.preluActivationWeights,at("fusedDepthwiseConv2D")},n.prototype.depthwiseConv2D=function(t,e,r){return at("depthwiseConv2D")},n.prototype.depthwiseConv2DDerInput=function(t,e,r){return at("depthwiseConv2DDerInput")},n.prototype.depthwiseConv2DDerFilter=function(t,e,r){return at("depthwiseConv2DDerFilter")},n.prototype.conv3d=function(t,e,r){return at("conv3d")},n.prototype.conv3dDerInput=function(t,e,r){return at("conv3dDerInput")},n.prototype.conv3dDerFilter=function(t,e,r){return at("conv3dDerFilter")},n.prototype.maxPool=function(t,e){return at("maxPool")},n.prototype.maxPoolBackprop=function(t,e,r,i){return at("maxPoolBackprop")},n.prototype.avgPool=function(t,e){return at("avgPool")},n.prototype.avgPoolBackprop=function(t,e,r){return at("avgPoolBackprop")},n.prototype.avgPool3d=function(t,e){return at("avgPool3d")},n.prototype.avgPool3dBackprop=function(t,e,r){return at("avgPool3dBackprop")},n.prototype.maxPool3d=function(t,e){return at("maxPool3d")},n.prototype.maxPool3dBackprop=function(t,e,r,i){return at("maxPool3dBackprop")},n.prototype.reshape=function(t,e){return at("reshape")},n.prototype.cast=function(t,e){return at("cast")},n.prototype.tile=function(t,e){return at("tile")},n.prototype.pad=function(t,e,r){return at("pad")},n.prototype.transpose=function(t,e){return at("transpose")},n.prototype.gather=function(t,e,r){return at("gather")},n.prototype.gatherND=function(t,e){return at("gatherND")},n.prototype.scatterND=function(t,e,r){return at("scatterND")},n.prototype.batchToSpaceND=function(t,e,r){return at("batchToSpaceND")},n.prototype.spaceToBatchND=function(t,e,r){return at("spaceToBatchND")},n.prototype.resizeBilinear=function(t,e,r,i){return at("resizeBilinear")},n.prototype.resizeBilinearBackprop=function(t,e,r){return at("resizeBilinearBackprop")},n.prototype.resizeNearestNeighbor=function(t,e,r,i){return at("resizeNearestNeighbor")},n.prototype.resizeNearestNeighborBackprop=function(t,e,r){return at("resizeNearestNeighborBackprop")},n.prototype.batchNormalization=function(t,e,r,i,a,s){return at("batchNormalization")},n.prototype.localResponseNormalization4D=function(t,e,r,i,a){return at("localResponseNormalization4D")},n.prototype.LRNGrad=function(t,e,r,i,a,s,u){return at("LRNGrad")},n.prototype.multinomial=function(t,e,r,i){return at("multinomial")},n.prototype.oneHot=function(t,e,r,i){return at("oneHot")},n.prototype.cumsum=function(t,e,r,i){return at("cumsum")},n.prototype.nonMaxSuppression=function(t,e,r,i,a){return at("nonMaxSuppression")},n.prototype.fft=function(t){return at("fft")},n.prototype.ifft=function(t){return at("ifft")},n.prototype.complex=function(t,e){return at("complex")},n.prototype.real=function(t){return at("real")},n.prototype.imag=function(t){return at("imag")},n.prototype.cropAndResize=function(t,e,r,i,a,s){return at("cropAndResize")},n.prototype.depthToSpace=function(t,e,r){return at("depthToSpace")},n.prototype.split=function(t,e,r){return at("split")},n.prototype.sparseToDense=function(t,e,r,i){return at("sparseToDense")},n.prototype.diag=function(t){return at("diag")},n.prototype.fill=function(t,e,r){return at("fill")},n.prototype.onesLike=function(t){return at("onesLike")},n.prototype.zerosLike=function(t){return at("zerosLike")},n.prototype.linspace=function(t,e,r){return at("linspace")},n.prototype.dispose=function(){return at("dispose")},n}();function at(n){throw new Error("'"+n+"' not yet implemented or not found in the registry. Did you forget to import the kernel?")}function Qi(n,t){for(var e=n.length,r=[],i=0;i1&&s===1&&r.unshift(a)}return r}function kn(n,t){for(var e=[],r=0;r1)&&e.unshift(a)}return e}function Ir(n,t){for(var e=[],r=Math.max(n.length,t.length),i=0;i>>1)]);oe>0?I=z+1:(O=z,re=!oe)}return re?I:-I-1}(a,s,u||hp)}(n,t,e),i=r<0?-(r+1):r;n.splice(i,0,t)}function hp(n,t){return n>t?1:ni}).sort(Tl),d=a>0?-.5/a:0,A=[],I=[];A.length0;){var O=l.pop(),z=O.score,re=O.boxIndex,oe=O.suppressBeginIndex;if(z=oe;--se){var be=vp(n,re,A[se]);if(be>=r){ae=!0;break}if(O.score=O.score*mp(r,d,be),O.score<=i)break}O.suppressBeginIndex=A.length,ae||(O.score===z?(A.push(re),I.push(O.score)):O.score>i&&pp(l,O,Tl))}var Ae=A.length;return u&&(A.fill(0,Ae),I.fill(0,Ae)),{selectedIndices:On(A,"int32"),selectedScores:On(I,"float32"),numValidOutputs:kt(Ae,"int32")}}function vp(n,t,e){var r=n.subarray(4*t,4*t+4),i=n.subarray(4*e,4*e+4),a=Math.min(r[0],r[2]),s=Math.min(r[1],r[3]),u=Math.max(r[0],r[2]),l=Math.max(r[1],r[3]),d=Math.min(i[0],i[2]),A=Math.min(i[1],i[3]),I=Math.max(i[0],i[2]),O=Math.max(i[1],i[3]),z=(u-a)*(l-s),re=(I-d)*(O-A);if(z<=0||re<=0)return 0;var oe=Math.max(a,d),ae=Math.max(s,A),se=Math.min(u,I),be=Math.min(l,O),Ae=Math.max(se-oe,0)*Math.max(be-ae,0);return Ae/(z+re-Ae)}function mp(n,t,e){var r=Math.exp(t*e*e);return e<=n?r:0}function Tl(n,t){return n.score-t.score||n.score===t.score&&t.boxIndex-n.boxIndex}function Rl(n,t,e){var r=new Array(n.rank).fill(0),i=n.shape.slice();return t.map(function(a){i[e]=a;var s=n.slice(r,i);return r[e]+=a,s})}function Ol(n,t){for(var e=new Array(n.rank),r=0;r":"<",l=e?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=` void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * `+r+`; int bestIndex = inOffset; float bestValue = getA(batch, bestIndex); for (int i = 0; i < `+r+`; i++) { int inIdx = `+l+`; float candidate = getA(batch, inIdx); if (candidate `+u+` bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `};function jl(n,t){return["x","y","z","w","u","v"].slice(0,t).map(function(e){return n+"."+e})}function ci(n,t){return t===1?[n]:jl(n,t)}function qn(){var n,t,e,r,i,a,s,u,l,d;return P().getNumber("WEBGL_VERSION")===2?(n="#version 300 es",t="in",e="out",r="in",i="texture",a="outputColor",s="out vec4 outputColor;",u=` bool isnan_custom(float val) { return (val > 0.0 || val < 0.0) ? false : val != 0.0; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `,l="",d=` #define round(value) newRound(value) int newRound(float value) { return int(floor(value + 0.5)); } ivec4 newRound(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `):(n="",t="attribute",e="varying",r="varying",i="texture2D",a="gl_FragColor",s="",u=` #define isnan(value) isnan_custom(value) bool isnan_custom(float val) { return (val > 0. || val < 1. || val == 0.) ? false : true; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w)); } `,l=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,d=` int round(float value) { return int(floor(value + 0.5)); } ivec4 round(vec4 value) { return ivec4(floor(value + vec4(0.5))); } `),{version:n,attribute:t,varyingVs:e,varyingFs:r,texture2D:i,output:a,defineOutput:s,defineSpecialNaN:u,defineSpecialInf:l,defineRound:d}}function Ca(n,t,e){e===void 0&&(e="index");var r=He(t);return r.map(function(i,a){return"int "+n[a]+" = "+e+" / "+i+"; "+(a===r.length-1?"int "+n[a+1]+" = "+e+" - "+n[a]+" * "+i:"index -= "+n[a]+" * "+i)+";"}).join("")}function js(n){var t=He(n).map(function(e){return e.toString()});return` int getFlatIndex(ivec3 coords) { return coords.x * `+t[0]+" + coords.y * "+t[1]+` + coords.z; } `}var Dl=` const float FLOAT_MAX = 1.70141184e38; const float FLOAT_MIN = 1.17549435e-38; lowp vec4 encode_float(highp float v) { if (isnan(v)) { return vec4(255, 255, 255, 255); } highp float av = abs(v); if(av < FLOAT_MIN) { return vec4(0.0, 0.0, 0.0, 0.0); } else if(v > FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 127.0) / 255.0; } else if(v < -FLOAT_MAX) { return vec4(0.0, 0.0, 128.0, 255.0) / 255.0; } highp vec4 c = vec4(0,0,0,0); highp float e = floor(log2(av)); highp float m = exp2(fract(log2(av))) - 1.0; c[2] = floor(128.0 * m); m -= c[2] / 128.0; c[1] = floor(32768.0 * m); m -= c[1] / 32768.0; c[0] = floor(8388608.0 * m); highp float ebias = e + 127.0; c[3] = floor(ebias / 2.0); ebias -= c[3] * 2.0; c[2] += floor(ebias) * 128.0; c[3] += 128.0 * step(0.0, -v); return c / 255.0; } `;function wp(n,t,e,r){var i=[];n.forEach(function(z){var re=ce(z.shapeInfo.logicalShape);z.shapeInfo.isUniform?i.push("uniform float "+z.name+(re>1?"["+re+"]":"")+";"):(i.push("uniform sampler2D "+z.name+";"),i.push("uniform int offset"+z.name+";"))});var a,s,u=i.join(` `),l=n.map(function(z){return function(re,oe,ae){ae===void 0&&(ae=!1);var se="";se+=ae?Pl(re):Ua(re);var be=re.shapeInfo.logicalShape,Ae=oe.logicalShape;return be.length<=Ae.length&&(se+=ae?function(me,Ce){var Oe,Le=me.name,Ue=Le.charAt(0).toUpperCase()+Le.slice(1),Ne="get"+Ue+"AtOutCoords",Fe=me.shapeInfo.logicalShape.length,Ze=Ce.logicalShape.length,Ke=Qi(me.shapeInfo.logicalShape,Ce.logicalShape),et=cn(Ze),tt=Ze-Fe,ct=["x","y","z","w","u","v"];Oe=Fe===0?"":Ze<2&&Ke.length>=1?"coords = 0;":Ke.map(function(It){return"coords."+ct[It+tt]+" = 0;"}).join(` `);var bt="";bt=Ze<2&&Fe>0?"coords":me.shapeInfo.logicalShape.map(function(It,Vt){return"coords."+ct[Vt+tt]}).join(", ");var gt="return outputValue;",vt=ce(me.shapeInfo.logicalShape)===1,At=ce(Ce.logicalShape)===1;if(Fe!==1||vt||At){if(vt&&!At)gt=Ze===1?` return vec4(outputValue.x, outputValue.x, 0., 0.); `:` return vec4(outputValue.x); `;else if(Ke.length){var ft=Fe-2,Et=Fe-1;Ke.indexOf(ft)>-1&&Ke.indexOf(Et)>-1?gt="return vec4(outputValue.x);":Ke.indexOf(ft)>-1?gt="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":Ke.indexOf(Et)>-1&&(gt="return vec4(outputValue.xx, outputValue.zz);")}}else gt=` return vec4(outputValue.xy, outputValue.xy); `;return` vec4 `+Ne+`() { `+et+` coords = getOutputCoords(); `+Oe+` vec4 outputValue = get`+Ue+"("+bt+`); `+gt+` } `}(re,oe):function(me,Ce){var Oe=me.name,Le=Oe.charAt(0).toUpperCase()+Oe.slice(1),Ue="get"+Le+"AtOutCoords",Ne=Ce.texShape,Fe=me.shapeInfo.texShape,Ze=me.shapeInfo.logicalShape.length,Ke=Ce.logicalShape.length;if(!me.shapeInfo.isUniform&&Ze===Ke&&me.shapeInfo.flatOffset==null&&fe(Fe,Ne))return` float `+Ue+`() { return sampleTexture(`+Oe+`, resultUV); } `;var et,tt=cn(Ke),ct=Qi(me.shapeInfo.logicalShape,Ce.logicalShape),bt=Ke-Ze,gt=["x","y","z","w","u","v"];et=Ze===0?"":Ke<2&&ct.length>=1?"coords = 0;":ct.map(function(At){return"coords."+gt[At+bt]+" = 0;"}).join(` `);var vt="";return vt=Ke<2&&Ze>0?"coords":me.shapeInfo.logicalShape.map(function(At,ft){return"coords."+gt[ft+bt]}).join(", "),` float `+Ue+`() { `+tt+` coords = getOutputCoords(); `+et+` return get`+Le+"("+vt+`); } `}(re,oe)),se}(z,t,r)}).join(` `),d=t.texShape,A=qn(),I=function(z){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return `+z.texture2D+`(textureSampler, uv).r; } `}(A),O=function(z){return z.version+` precision highp float; precision highp int; precision highp sampler2D; `+z.varyingFs+` vec2 resultUV; `+z.defineOutput+` const vec2 halfCR = vec2(0.5, 0.5); struct ivec5 { int x; int y; int z; int w; int u; }; struct ivec6 { int x; int y; int z; int w; int u; int v; }; uniform float NAN; `+z.defineSpecialNaN+` `+z.defineSpecialInf+` `+z.defineRound+` int imod(int x, int y) { return x - y * (x / y); } int idiv(int a, int b, float sign) { int res = a / b; int mod = imod(a, b); if (sign < 0. && mod != 0) { res -= 1; } return res; } //Based on the work of Dave Hoskins //https://www.shadertoy.com/view/4djSRW #define HASHSCALE1 443.8975 float random(float seed){ vec2 p = resultUV * seed; vec3 p3 = fract(vec3(p.xyx) * HASHSCALE1); p3 += dot(p3, p3.yzx + 19.19); return fract((p3.x + p3.y) * p3.z); } `+Ap+` `+xp+` `+Ep+` `}(A);return t.isPacked?(a=function(z,re){switch(z.length){case 0:return` int getOutputCoords() { return 0; } `;case 1:return function(me,Ce){var Oe=[Math.ceil(Ce[0]/2),Math.ceil(Ce[1]/2)];return Oe[0]===1?` int getOutputCoords() { return 2 * int(resultUV.x * `+Oe[1]+`.0); } `:Oe[1]===1?` int getOutputCoords() { return 2 * int(resultUV.y * `+Oe[0]+`.0); } `:` int getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+Oe[0]+", "+Oe[1]+`)); return 2 * (resTexRC.x * `+Oe[1]+` + resTexRC.y); } `}(0,re);case 2:return function(me,Ce){var Oe=[Math.ceil(Ce[0]/2),Math.ceil(Ce[1]/2)];if(fe(me,Ce))return` ivec2 getOutputCoords() { return 2 * ivec2(resultUV.yx * vec2(`+Oe[0]+", "+Oe[1]+`)); } `;var Le=Math.ceil(me[1]/2);return` ivec2 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+Oe[0]+", "+Oe[1]+`)); int index = resTexRC.x * `+Oe[1]+` + resTexRC.y; int r = 2 * (index / `+Le+`); int c = imod(index, `+Le+`) * 2; return ivec2(r, c); } `}(z,re);case 3:return oe=z,ae=re,se=[Math.ceil(ae[0]/2),Math.ceil(ae[1]/2)],be=Math.ceil(oe[2]/2),Ae=be*Math.ceil(oe[1]/2),` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+se[0]+", "+se[1]+`)); int index = resTexRC.x * `+se[1]+` + resTexRC.y; int b = index / `+Ae+`; index -= b * `+Ae+`; int r = 2 * (index / `+be+`); int c = imod(index, `+be+`) * 2; return ivec3(b, r, c); } `;default:return function(me,Ce){for(var Oe=[Math.ceil(Ce[0]/2),Math.ceil(Ce[1]/2)],Le=Math.ceil(me[me.length-1]/2),Ue=Le*Math.ceil(me[me.length-2]/2),Ne=Ue,Fe="",Ze="b, r, c",Ke=2;Ke2,function(){return"Packed arg"+(e.charAt(0).toUpperCase()+e.slice(1))+" supports only inputs with rank above 2."});var i=n[n.length-1],a=Math.ceil(i/t);this.outputShape=n.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push("bestIndicesA");var s,u,l=this.outputShape,d=l.length,A=cn(d),I=ci("coords",d);if(a===1){var O=cn(u=d+1);s=` `+O+" sourceLocR = "+O+"("+I.join()+`, 0); ++`+I[d-1]+`; `+O+" sourceLocG = "+O+"("+I.join()+`, 0); ++`+I[d-2]+`; `+O+" sourceLocA = "+O+"("+I.join()+`, 0); --`+I[d-1]+`; `+O+" sourceLocB = "+O+"("+I.join()+`, 0); --`+I[d-2]+";"}else u=d,s=` `+A+` sourceLocR = coords; ++`+I[d-1]+`; `+A+` sourceLocG = coords; ++`+I[d-2]+`; `+A+` sourceLocA = coords; --`+I[d-1]+`; `+A+` sourceLocB = coords; --`+I[d-2]+";";var z=["x","y","z","w","u","v"].slice(0,u),re="."+z[u-1],oe=z.map(function(Ue){return"int "+Ue}),ae=ci("sourceLocR",u-1).concat("inIdx.r"),se=ci("sourceLocG",u-1).concat("inIdx.g"),be=ci("sourceLocB",u-1).concat("inIdx.b"),Ae=ci("sourceLocA",u-1).concat("inIdx.a"),me=e==="max"?"greaterThan":"lessThan",Ce=r?"":` inIdx = round(vec4(getBestIndicesAChannel(`+ae.join()+`), getBestIndicesAChannel(`+se.join()+`), getBestIndicesAChannel(`+be.join()+`), getBestIndicesAChannel(`+Ae.join()+")));",Oe=`vec4( getAChannel(`+ae.join()+`), hasNextCol ? getAChannel(`+se.join()+`) : 0., hasNextRow ? getAChannel(`+be.join()+`) : 0., hasNextRow && hasNextCol ? getAChannel(`+Ae.join()+") : 0.)",Le=r?"":` float getBestIndicesAChannel(`+oe.join()+`) { return getChannel(getBestIndicesA(`+z.join()+`), vec2(`+z.slice(-2).join()+`)); }`;this.userCode=` float getAChannel(`+oe.join()+`) { return getChannel(getA(`+z.join()+`), vec2(`+z.slice(-2).join()+`)); } `+Le+` void main() { `+A+` coords = getOutputCoords(); bool hasNextCol = `+I[d-1]+" < "+(l[d-1]-1)+`; bool hasNextRow = `+I[d-2]+" < "+(l[d-2]-1)+`; `+s+` ivec4 srcIdx = ivec4(sourceLocR`+re+", sourceLocG"+re+`, sourceLocB`+re+", sourceLocA"+re+") * "+t+`; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = `+Oe+`; for (int i = 0; i < `+t+`; i++) { inIdx = srcIdx; `+Ce+` vec4 candidate = `+Oe+`; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(`+me+`(candidate, bestValue)) * (vec4(1.0) - vec4(nan))); bestValue = vec4(replace.x ? candidate.x : bestValue.x, replace.y ? candidate.y : bestValue.y, replace.z ? candidate.z : bestValue.z, replace.w ? candidate.w : bestValue.w); bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace)); srcIdx++; } setOutput(bestIndex); } `},Ip=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var t=n.filterHeight,e=n.filterWidth,r=n.strideHeight,i=n.strideWidth,a=n.dilationHeight,s=n.dilationWidth,u=n.effectiveFilterHeight,l=n.effectiveFilterWidth,d=u-1-n.padInfo.top,A=l-1-n.padInfo.left,I=1/(t*e);this.userCode=` const ivec2 pads = ivec2(`+d+", "+A+`); const float avgMultiplier = float(`+I+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+u+`; wR += `+a+`) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+l+`; wC+= `+s+`) { float dyC = float(dyCCorner + wC) / `+i+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); dotProd += dyValue * avgMultiplier; } } setOutput(dotProd); } `},Tp=function(n){this.variableNames=["dy"],this.outputShape=n.inShape;var t=n.filterDepth,e=n.filterHeight,r=n.filterWidth,i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=n.dilationDepth,l=n.dilationHeight,d=n.dilationWidth,A=n.effectiveFilterDepth,I=n.effectiveFilterHeight,O=n.effectiveFilterWidth,z=A-1-n.padInfo.front,re=I-1-n.padInfo.top,oe=O-1-n.padInfo.left,ae=1/(t*e*r);this.userCode=` const ivec3 pads = ivec3(`+z+", "+re+", "+oe+`); const float avgMultiplier = float(`+ae+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < `+A+`; wD += `+u+`) { float dyD = float(dyDCorner + wD) / `+i+`.0; if (dyD < 0.0 || dyD >= `+n.outDepth+`.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < `+I+`; wR += `+l+`) { float dyR = float(dyRCorner + wR) / `+a+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+O+`; wC += `+d+`) { float dyC = float(dyCCorner + wC) / `+s+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); dotProd += dyValue * avgMultiplier; } } } setOutput(dotProd); } `},Rp=function(n,t,e,r,i,a){this.outputShape=[],this.variableNames=["x","mean","variance"],Ir(n,t),Ir(n,e);var s="0.0";r!=null&&(Ir(n,r),this.variableNames.push("offset"),s="getOffsetAtOutCoords()");var u="1.0";i!=null&&(Ir(n,i),this.variableNames.push("scale"),u="getScaleAtOutCoords()"),this.outputShape=n,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = `+s+`; float scale = `+u+`; float inv = scale * inversesqrt(variance + float(`+a+`)); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `},Op=function(n,t,e,r,i,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],Ir(n,t),Ir(n,e);var s="vec4(0.0)";r!=null&&(Ir(n,r),this.variableNames.push("offset"),s="getOffsetAtOutCoords()");var u="vec4(1.0)";i!=null&&(Ir(n,i),this.variableNames.push("scale"),u="getScaleAtOutCoords()"),this.outputShape=n,this.userCode=` void main() { vec4 offset = `+s+`; vec4 scale = `+u+`; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(`+a+`)); setOutput((x - mean) * inv + offset); } `},kp="return areal * breal - aimag * bimag;",jp="return areal * bimag + aimag * breal;",Bl=function(n,t,e){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=Ir(t,e),this.userCode=` float binaryOpComplex( float areal, float aimag, float breal, float bimag) { `+n+` } void main() { float areal = getARealAtOutCoords(); float aimag = getAImagAtOutCoords(); float breal = getBRealAtOutCoords(); float bimag = getBImagAtOutCoords(); setOutput(binaryOpComplex(areal, aimag, breal, bimag)); } `},Ds="return a + b;",Ps="return a - b;",Nl="return a * b;",Ml="return (a < 0.) ? b * a : a;",In=function(n,t,e){this.variableNames=["A","B"],this.outputShape=Ir(t,e),this.userCode=` float binaryOperation(float a, float b) { `+n+` } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `},_l=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `,Xi=function(n,t,e,r){r===void 0&&(r=!1),this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=Ir(t,e);var i=this.outputShape.length,a="";if(r)if(i===0||ce(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(a=` `+cn(i)+` coords = getOutputCoords(); `,i===1)a+=` result.y = (coords + 1) >= `+this.outputShape[0]+` ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{var s=ci("coords",i);a+=` bool nextRowOutOfBounds = (`+s[i-2]+" + 1) >= "+this.outputShape[i-2]+`; bool nextColOutOfBounds = (`+s[i-1]+" + 1) >= "+this.outputShape[i-1]+`; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `}this.userCode=` vec4 binaryOperation(vec4 a, vec4 b) { `+n+` } void main() { vec4 a = getAAtOutCoords(); vec4 b = getBAtOutCoords(); vec4 result = binaryOperation(a, b); `+a+` setOutput(result); } `},Dp=function(){function n(t){this.variableNames=["A"],this.outputShape=t,this.userCode=` uniform float minVal; uniform float maxVal; void main() { float value = getAAtOutCoords(); if (isnan(value)) { setOutput(value); return; } setOutput(clamp(value, minVal, maxVal)); } `}return n.prototype.getCustomSetupFunc=function(t,e){var r=this;return function(i,a){r.minLoc==null&&(r.minLoc=i.getUniformLocationNoThrow(a,"minVal"),r.maxLoc=i.getUniformLocationNoThrow(a,"maxVal")),i.gl.uniform1f(r.minLoc,t),i.gl.uniform1f(r.maxLoc,e)}},n}(),Pp=function(){function n(t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.userCode=` uniform float minVal; uniform float maxVal; void main() { vec4 value = getAAtOutCoords(); if (any(isnan(value))) { setOutput(value); return; } setOutput(clamp(value, vec4(minVal), vec4(maxVal))); } `}return n.prototype.getCustomSetupFunc=function(t,e){var r=this;return function(i,a){r.minLoc==null&&(r.minLoc=i.getUniformLocationNoThrow(a,"minVal"),r.maxLoc=i.getUniformLocationNoThrow(a,"maxVal")),i.gl.uniform1f(r.minLoc,t),i.gl.uniform1f(r.maxLoc,e)}},n}(),Bp=function(n){this.variableNames=["real","imag"],this.outputShape=n,this.userCode=` void main() { float re = abs(getRealAtOutCoords()); float im = abs(getImagAtOutCoords()); float mx = max(re, im); // sadly the length function in glsl is not underflow-safe // (at least not on Intel GPUs). So the safe solution is // to ensure underflow-safety in all cases. setOutput( mx == 0.0 ? 0.0 : mx * length(vec2(1, min(re, im)/mx)) ); } `},Np=function(n){this.outputShape=[],this.outputShape=nn(n,1),this.variableNames=n.map(function(u,l){return"T"+l});var t=new Array(n.length-1);t[0]=n[0][1];for(var e=1;e= "+u[l-1]+`) { return getChannel( getT`+l+"("+No(s,d,z)+`), vec2(`+No(A,d,z)+`)); }`}var re=u.length,oe=u[u.length-1];O+=` return getChannel( getT`+re+"("+No(s,d,oe)+`), vec2(`+No(A,d,oe)+"));",this.userCode=` float getValue(`+s.map(function(ae){return"int "+ae})+`) { `+O+` } void main() { `+i+` coords = getOutputCoords(); vec4 result = vec4(getValue(`+a+`), 0., 0., 0.); `+a[r-1]+" = "+a[r-1]+` + 1; if (`+a[r-1]+" < "+e[r-1]+`) { result.g = getValue(`+a+`); } `+a[r-2]+" = "+a[r-2]+` + 1; if (`+a[r-2]+" < "+e[r-2]+`) { result.a = getValue(`+a+`); } `+a[r-1]+" = "+a[r-1]+` - 1; if (`+a[r-2]+" < "+e[r-2]+` && `+a[r-1]+" < "+e[r-1]+`) { result.b = getValue(`+a+`); } setOutput(result); } `};function No(n,t,e){var r=n.indexOf(t);return n.map(function(i,a){return a===r?i+" - "+e:i}).join()}var _p=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var t=n.strideHeight,e=n.strideWidth,r=n.padInfo.top,i=n.padInfo.left,a=n.dataFormat==="channelsLast";this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int d2 = coords.w; // Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int b = 0; b < `+n.batchSize+`; b++) { for (int yR = 0; yR < `+n.outHeight+`; yR++) { int xR = wR + yR * `+t+" - "+r+`; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int yC = 0; yC < `+n.outWidth+`; yC++) { int xC = wC + yC * `+e+" - "+i+`; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } if (`+a+`) { float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } else { float dyValue = getDy(b, d2, yR, yC); float xValue = getX(b, d1, xR, xC); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `},Fp=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var t=n.filterHeight,e=n.filterWidth,r=n.strideHeight,i=n.strideWidth,a=n.dataFormat==="channelsLast",s=t-1-n.padInfo.top,u=e-1-n.padInfo.left,l=a?1:2,d=a?2:3,A=a?3:1;this.userCode=` const ivec2 pads = ivec2(`+s+", "+u+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[`+A+`]; ivec2 dyCorner = ivec2(coords[`+l+"], coords["+d+`]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+t+`; wR++) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+t+` - 1 - wR; for (int wC = 0; wC < `+e+`; wC++) { float dyC = float(dyCCorner + wC) / `+i+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+e+` - 1 - wC; for (int d2 = 0; d2 < `+n.outChannels+`; d2++) { if (`+a+`) { float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } else { float xValue = getDy(batch, d2, idyR, idyC); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `},Lp=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var t=n.strideDepth,e=n.strideHeight,r=n.strideWidth,i=n.padInfo.front,a=n.padInfo.top,s=n.padInfo.left;this.userCode=` void main() { ivec5 coords = getOutputCoords(); int wF = coords.x; int wR = coords.y; int wC = coords.z; int d1 = coords.w; int d2 = coords.u; float dotProd = 0.0; for (int b = 0; b < `+n.batchSize+`; b++) { for (int yF = 0; yF < `+n.outDepth+`; yF++) { int xF = wF + yF * `+t+" - "+i+`; if (xF < 0 || xF >= `+n.inDepth+`) { continue; } for (int yR = 0; yR < `+n.outHeight+`; yR++) { int xR = wR + yR * `+e+" - "+a+`; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int yC = 0; yC < `+n.outWidth+`; yC++) { int xC = wC + yC * `+r+" - "+s+`; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } float dyValue = getDy(b, yF, yR, yC, d2); float xValue = getX(b, xF, xR, xC, d1); dotProd += (xValue * dyValue); } } } } setOutput(dotProd); } `},Up=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var t=n.filterDepth,e=n.filterHeight,r=n.filterWidth,i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=t-1-n.padInfo.front,l=e-1-n.padInfo.top,d=r-1-n.padInfo.left;this.userCode=` const ivec3 pads = ivec3(`+u+", "+l+", "+d+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyFCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; float dotProd = 0.0; for (int wF = 0; wF < `+t+`; wF++) { float dyF = float(dyFCorner + wF) / `+i+`.0; if (dyF < 0.0 || dyF >= `+n.outDepth+`.0 || fract(dyF) > 0.0) { continue; } int idyF = int(dyF); int wFPerm = `+t+` - 1 - wF; for (int wR = 0; wR < `+e+`; wR++) { float dyR = float(dyRCorner + wR) / `+a+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+e+` - 1 - wR; for (int wC = 0; wC < `+r+`; wC++) { float dyC = float(dyCCorner + wC) / `+s+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+r+` - 1 - wC; for (int d2 = 0; d2 < `+n.outChannels+`; d2++) { float xValue = getDy(batch, idyF, idyR, idyC, d2); float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `},Wp=function(n){this.variableNames=["x","dy"],this.outputShape=n.filterShape;var t=n.strideHeight,e=n.strideWidth,r=n.padInfo.top,i=n.padInfo.left,a=n.outChannels/n.inChannels;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int wR = coords.x; int wC = coords.y; int d1 = coords.z; int dm = coords.w; int d2 = d1 * `+a+` + dm; float dotProd = 0.0; // TO DO: Vec4 over the batch size for (int b = 0; b < `+n.batchSize+`; b++) { for (int yR = 0; yR < `+n.outHeight+`; yR++) { int xR = wR + yR * `+t+" - "+r+`; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int yC = 0; yC < `+n.outWidth+`; yC++) { int xC = wC + yC * `+e+" - "+i+`; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue); } } } setOutput(dotProd); } `},zp=function(n){this.variableNames=["dy","W"],this.outputShape=n.inShape;var t=n.filterHeight,e=n.filterWidth,r=n.strideHeight,i=n.strideWidth,a=t-1-n.padInfo.top,s=e-1-n.padInfo.left,u=n.outChannels/n.inChannels;this.userCode=` const ivec2 pads = ivec2(`+a+", "+s+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < `+t+`; wR++) { float dyR = float(dyRCorner + wR) / `+r+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); int wRPerm = `+t+` - 1 - wR; for (int wC = 0; wC < `+e+`; wC++) { float dyC = float(dyCCorner + wC) / `+i+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = `+e+` - 1 - wC; // TO DO: Vec4 over the channelMul for (int dm = 0; dm < `+u+`; dm++) { int d2 = d1 * `+u+` + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `},Fl=function(n,t,e,r){t===void 0&&(t=!1),e===void 0&&(e=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.padInfo.top,a=n.padInfo.left,s=n.strideHeight,u=n.strideWidth,l=n.dilationHeight,d=n.dilationWidth,A=n.filterHeight,I=n.filterWidth,O=4*Math.floor(n.inChannels/4),z=n.inChannels%4,re=n.dataFormat==="channelsLast",oe=re?1:2,ae=re?2:3,se=re?3:1,be="",Ae="";e&&(be=r?`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); `+e+` }`:` float activation(float x) { `+e+` } `,Ae="result = activation(result);");var me=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+be+` const ivec2 strides = ivec2(`+s+", "+u+`); const ivec2 pads = ivec2(`+i+", "+a+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[`+se+`]; ivec2 xRCCorner = ivec2(coords[`+oe+"], coords["+ae+`]) * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+A+`; wR++) { int xR = xRCorner + wR * `+l+`; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+I+`; wC++) { int xC = xCCorner + wC * `+d+`; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } for (int d1 = 0; d1 < `+O+`; d1 += 4) { vec4 wValues = vec4( getW(wR, wC, d1, d2), getW(wR, wC, d1 + 1, d2), getW(wR, wC, d1 + 2, d2), getW(wR, wC, d1 + 3, d2) ); if (`+re+`) { vec4 xValues = vec4( getX(batch, xR, xC, d1), getX(batch, xR, xC, d1 + 1), getX(batch, xR, xC, d1 + 2), getX(batch, xR, xC, d1 + 3) ); dotProd += dot(xValues, wValues); } else { vec4 xValues = vec4( getX(batch, d1, xR, xC), getX(batch, d1 + 1, xR, xC), getX(batch, d1 + 2, xR, xC), getX(batch, d1 + 3, xR, xC) ); dotProd += dot(xValues, wValues); } } if (`+(z===1)+`) { if (`+re+`) { dotProd += getX(batch, xR, xC, `+O+`) * getW(wR, wC, `+O+`, d2); } else { dotProd += getX(batch, `+O+`, xR, xC) * getW(wR, wC, `+O+`, d2); } } else if (`+(z===2)+`) { vec2 wValues = vec2( getW(wR, wC, `+O+`, d2), getW(wR, wC, `+O+` + 1, d2) ); if (`+re+`) { vec2 xValues = vec2( getX(batch, xR, xC, `+O+`), getX(batch, xR, xC, `+O+` + 1) ); dotProd += dot(xValues, wValues); } else { vec2 xValues = vec2( getX(batch, `+O+`, xR, xC), getX(batch, `+O+` + 1, xR, xC) ); dotProd += dot(xValues, wValues); } } else if (`+(z===3)+`) { vec3 wValues = vec3( getW(wR, wC, `+O+`, d2), getW(wR, wC, `+O+` + 1, d2), getW(wR, wC, `+O+` + 2, d2) ); if (`+re+`) { vec3 xValues = vec3( getX(batch, xR, xC, `+O+`), getX(batch, xR, xC, `+O+` + 1), getX(batch, xR, xC, `+O+` + 2) ); dotProd += dot(xValues, wValues); } else { vec3 xValues = vec3( getX(batch, `+O+`, xR, xC), getX(batch, `+O+` + 1, xR, xC), getX(batch, `+O+` + 2, xR, xC) ); dotProd += dot(xValues, wValues); } } } } float result = dotProd; `+me+` `+Ae+` setOutput(result); } `},Vp=function(n){this.variableNames=["x","W"],this.outputShape=n.outShape;var t=n.padInfo.front,e=n.padInfo.top,r=n.padInfo.left,i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=n.dilationDepth,l=n.dilationHeight,d=n.dilationWidth,A=n.filterDepth,I=n.filterHeight,O=n.filterWidth,z=4*Math.floor(n.inChannels/4),re=n.inChannels%4;this.userCode=` const ivec3 strides = ivec3(`+i+", "+a+", "+s+`); const ivec3 pads = ivec3(`+t+", "+e+", "+r+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d2 = coords.u; ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xFCorner = xFRCCorner.x; int xRCorner = xFRCCorner.y; int xCCorner = xFRCCorner.z; // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; for (int wF = 0; wF < `+A+`; wF++) { int xF = xFCorner + wF * `+u+`; if (xF < 0 || xF >= `+n.inDepth+`) { continue; } for (int wR = 0; wR < `+I+`; wR++) { int xR = xRCorner + wR * `+l+`; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+O+`; wC++) { int xC = xCCorner + wC * `+d+`; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } for (int d1 = 0; d1 < `+z+`; d1 += 4) { vec4 xValues = vec4( getX(batch, xF, xR, xC, d1), getX(batch, xF, xR, xC, d1 + 1), getX(batch, xF, xR, xC, d1 + 2), getX(batch, xF, xR, xC, d1 + 3) ); vec4 wValues = vec4( getW(wF, wR, wC, d1, d2), getW(wF, wR, wC, d1 + 1, d2), getW(wF, wR, wC, d1 + 2, d2), getW(wF, wR, wC, d1 + 3, d2) ); dotProd += dot(xValues, wValues); } if (`+(re===1)+`) { dotProd += getX(batch, xF, xR, xC, `+z+`) * getW(wF, wR, wC, `+z+`, d2); } else if (`+(re===2)+`) { vec2 xValues = vec2( getX(batch, xF, xR, xC, `+z+`), getX(batch, xF, xR, xC, `+z+` + 1) ); vec2 wValues = vec2( getW(wF, wR, wC, `+z+`, d2), getW(wF, wR, wC, `+z+` + 1, d2) ); dotProd += dot(xValues, wValues); } else if (`+(re===3)+`) { vec3 xValues = vec3( getX(batch, xF, xR, xC, `+z+`), getX(batch, xF, xR, xC, `+z+` + 1), getX(batch, xF, xR, xC, `+z+` + 2) ); vec3 wValues = vec3( getW(wF, wR, wC, `+z+`, d2), getW(wF, wR, wC, `+z+` + 1, d2), getW(wF, wR, wC, `+z+` + 2, d2) ); dotProd += dot(xValues, wValues); } } } } setOutput(dotProd); } `},Ll=function(n,t,e,r){t===void 0&&(t=!1),e===void 0&&(e=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.outputShape=n.outShape;var i=n.inHeight,a=n.inWidth,s=n.padInfo.top,u=n.padInfo.left,l=n.strideHeight,d=n.strideWidth,A=n.dilationHeight,I=n.dilationWidth,O=n.filterHeight,z=n.filterWidth,re=n.outChannels/n.inChannels,oe="",ae="";e&&(oe=r?`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); `+e+` }`:` float activation(float x) { `+e+` } `,ae="result = activation(result);");var se=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+oe+` const ivec2 strides = ivec2(`+l+", "+d+`); const ivec2 pads = ivec2(`+s+", "+u+`); void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / `+re+`; int q = d2 - d1 * `+re+`; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; // TO DO(dsmilkov): Flatten the two for loops and vec4 the operations. for (int wR = 0; wR < `+O+`; wR++) { int xR = xRCorner + wR * `+A+`; if (xR < 0 || xR >= `+i+`) { continue; } for (int wC = 0; wC < `+z+`; wC++) { int xC = xCCorner + wC * `+I+`; if (xC < 0 || xC >= `+a+`) { continue; } float xVal = getX(batch, xR, xC, d1); float wVal = getW(wR, wC, d1, q); dotProd += xVal * wVal; } } float result = dotProd; `+se+` `+ae+` setOutput(result); } `},Ul=function(n,t,e,r){t===void 0&&(t=!1),e===void 0&&(e=null),r===void 0&&(r=!1),this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n.outShape;for(var i=n.inHeight,a=n.inWidth,s=n.padInfo.top,u=n.padInfo.left,l=n.strideHeight,d=n.strideWidth,A=n.dilationHeight,I=n.dilationWidth,O=n.filterHeight,z=n.filterWidth,re=z,oe="int xR; int xC; int xCOffset;",ae=0;ae= 0 && xR < `+i+" && xCOffset >= 0 && xCOffset < "+a+`) { xTexelR`+ae+"C"+se+` = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= `+a+`) { xTexelR`+ae+"C"+se+`.zw = vec2(0.); } } else { xTexelR`+ae+"C"+se+` = vec4(0.); } xCOffset = xC + 1 - 2; if(xR >= 0 && xR < `+i+" && xCOffset >= 0 && xCOffset < "+a+`) { vec4 previous = getX(batch, xR, xCOffset, d1); // Need to manually clear unused channels in case // we're reading from recycled texture. if(xCOffset + 1 >= `+a+`) { previous.zw = vec2(0.); } xR`+ae+"C"+se+" = vec4(previous.zw, xTexelR"+ae+"C"+se+`.xy); } else { xR`+ae+"C"+se+" = vec4(0, 0, xTexelR"+ae+"C"+se+`.xy); } `:` if(xR >= 0 && xR < `+i+" && xC >= 0 && xC < "+a+`) { xTexelR`+ae+"C"+se+` = getX(batch, xR, xC, d1); } else { xTexelR`+ae+"C"+se+` = vec4(0.); } xR`+ae+"C"+se+" = xTexelR"+ae+"C"+se+`; `,se+1= 0 && xR < `+i+` && xCOffset >= 0 && xCOffset < `+a+`) { xTexelR`+ae+"C"+(se+2)+` = getX(batch, xR, xCOffset, d1); } `,I>1&&(oe+=` xCOffset -= 2; if(xR >= 0 && xR < `+i+` && xCOffset >= 0 && xCOffset < `+a+`) { xTexelR`+ae+"C"+se+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+ae+"C"+se+` = vec4(0.); } `),oe+=` xR`+ae+"C"+(se+1)+` = vec4( xTexelR`+ae+"C"+se+".zw, xTexelR"+ae+"C"+(se+2)+`.xy); `):oe+=` xCOffset = xC + `+Ae+`; if(xR >= 0 && xR < `+i+` && xCOffset >= 0 && xCOffset < `+a+`) { xTexelR`+ae+"C"+(se+2)+` = getX(batch, xR, xCOffset, d1); } xR`+ae+"C"+(se+1)+" = xTexelR"+ae+"C"+(se+2)+`; `}}else se= 0 && xR < `+i+`) { `,u%2==1?(oe+=` xCOffset = xC + 1 - `+d+`; if(xCOffset >= 0 && xCOffset < `+a+`) { xTexelR`+ae+"C"+se+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+ae+"C"+se+` = vec4(0.); } if(xC + 1 >= 0 && xC + 1 < `+a+`) { xTexelR`+ae+"C"+(se+2)+` = getX(batch, xR, xC + 1, d1); } else { xTexelR`+ae+"C"+(se+2)+` = vec4(0.); } xR`+ae+"C"+se+` = vec4( xTexelR`+ae+"C"+se+".zw, xTexelR"+ae+"C"+(se+2)+`.zw); `,se+1= 0 && xCOffset < `+a+`) { final = getX(batch, xR, xCOffset, d1); } xR`+ae+"C"+(se+1)+" = vec4(xTexelR"+ae+"C"+(se+2)+`.xy, final.xy); `)):(oe+=` if(xC >= 0 && xC < `+a+`) { xTexelR`+ae+"C"+se+` = getX(batch, xR, xC, d1); } else { xTexelR`+ae+"C"+se+` = vec4(0.); } xCOffset = xC + `+d+`; if(xCOffset >= 0 && xCOffset < `+a+`) { xTexelR`+ae+"C"+(se+2)+` = getX(batch, xR, xCOffset, d1); } else { xTexelR`+ae+"C"+(se+2)+` = vec4(0.); } xR`+ae+"C"+se+` = vec4( xTexelR`+ae+"C"+se+".xy, xTexelR"+ae+"C"+(se+2)+`.xy); `,se+11?[""+(s-1)/(A-1),"(y2-y1) * height_ratio","y1*"+re+" + float(y)*(height_scale)"]:["0.0","0.0","0.5 * (y1+y2) * "+re],se=ae[0],be=ae[1],Ae=ae[2],me=I>1?[""+(u-1)/(I-1),"(x2-x1) * width_ratio","x1*"+oe+" + float(x)*(width_scale)"]:["0.0","0.0","0.5 * (x1+x2) * "+oe],Ce=me[0],Oe=me[1],Le=me[2];this.userCode=` const float height_ratio = float(`+se+`); const float width_ratio = float(`+Ce+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int y = coords[1]; int x = coords[2]; int d = coords[3]; // get box vals float y1 = getBoxes(b,0); float x1 = getBoxes(b,1); float y2 = getBoxes(b,2); float x2 = getBoxes(b,3); // get image in batch index int bInd = round(getBoxInd(b)); if(bInd < 0 || bInd >= `+a+`) { return; } float height_scale = `+be+`; float width_scale = `+Oe+`; float in_y = `+Ae+`; if( in_y < 0.0 || in_y > `+re+` ) { setOutput(float(`+i+`)); return; } float in_x = `+Le+`; if( in_x < 0.0 || in_x > `+oe+` ) { setOutput(float(`+i+`)); return; } vec2 sourceFracIndexCR = vec2(in_x,in_y); if(`+O+` == 1) { // Compute the four integer indices. ivec2 sourceFloorCR = ivec2(sourceFracIndexCR); ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR)); float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d); float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d); float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d); float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d); vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR); float top = topLeft + (topRight - topLeft) * fracCR.x; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x; float newValue = top + (bottom - top) * fracCR.y; setOutput(newValue); } else { // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestCR = ivec2(floor( sourceFracIndexCR + vec2(0.5,0.5))); float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d); setOutput(newValue); } } `},Gp=function(n,t,e){this.variableNames=["x"],this.outputShape=n;var r=n.length,i=n[n.length-1],a=e?"<":">";this.userCode=` int getIndex(int i) { `+(e?"return "+i+" -i - 1;":"return i;")+` } void main() { `+cn(r)+` coords = getOutputCoords(); int end = `+Wl(r,"coords")+`; float val = 0.0; for (int i = `+i+` - 1; i >= 0; i -= 1) { int idx = getIndex(i); if (idx `+a+` end) { continue; } if (idx == end && `+t+`) { continue; } `+Wl(r,"coords")+` = idx; val += getX(`+function(s,u){if(s===1)return""+u;if(s===2)return u+".x, "+u+".y";if(s===3)return u+".x, "+u+".y, "+u+".z";if(s===4)return u+".x, "+u+".y, "+u+".z, "+u+".w";throw Error("Cumulative sum for rank "+s+" is not yet supported")}(r,"coords")+`); } setOutput(val); } `};function Wl(n,t){if(n===1)return""+t;if(n===2)return t+".y";if(n===3)return t+".z";if(n===4)return t+".w";throw Error("Cumulative sum for rank "+n+" is not yet supported")}var Qp=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=yr.DENSE;var t=it(n),e=qn();this.outputShape=n,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { `+Ca(["r","c","d"],n)+` return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+t[0]+", "+t[1]+`)); int index = 4 * (resTexRC.x * `+t[1]+` + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getA(rc.x, rc.y, rc.z); } `+e.output+` = result; } `},Xp=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=yr.DENSE;var t=it(n),e=qn();this.outputShape=n,this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { `+Ca(["r","c","d"],n)+` return ivec3(r, c, d); } void main() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(`+t[0]+", "+t[1]+`)); int index = 4 * (resTexRC.x * `+t[1]+` + resTexRC.y); vec4 result = vec4(0.); for (int i=0; i<4; i++) { int flatIndex = index + i; ivec3 rc = outCoordsFromFlatIndex(flatIndex); result[i] = getChannel(getA(rc.x, rc.y, rc.z), vec2(rc.y, rc.z)); } `+e.output+` = result; } `},Kp=function(){function n(t,e,r){this.variableNames=["x"],this.outputShape=[],this.outputShape=t,this.blockSize=e,this.dataFormat=r,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int h = `+this.getHeightCoordString()+`; int w = `+this.getWidthCoordString()+`; int d = `+this.getDepthCoordString()+`; int in_h = h / `+e+`; int offset_h = imod(h, `+e+`); int in_w = w / `+e+`; int offset_w = imod(w, `+e+`); int offset_d = (offset_h * `+e+` + offset_w) * `+this.getOutputDepthSize()+`; int in_d = d + offset_d; float result = `+this.getInputSamplingString()+`; setOutput(result); } `}return n.prototype.getHeightCoordString=function(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"},n.prototype.getWidthCoordString=function(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"},n.prototype.getDepthCoordString=function(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"},n.prototype.getOutputDepthSize=function(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]},n.prototype.getInputSamplingString=function(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"},n}(),Zp=function(n){this.variableNames=["X"],this.outputShape=[n,n],this.userCode=` void main() { ivec2 coords = getOutputCoords(); float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0; setOutput(val); } `},Jp=function(n){this.variableNames=["A"],this.outTexUsage=Ge.DOWNLOAD;var t=qn();this.outputShape=n,this.userCode=` `+Dl+` void main() { float x = getAAtOutCoords(); `+t.output+` = encode_float(x); } `},Yp=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=Ge.DOWNLOAD;var t=qn();this.outputShape=n,this.userCode=` `+Dl+` void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); `+t.output+` = encode_float(x); } `},$p=function(n,t,e){e===void 0&&(e=!1),this.variableNames=["A"];var r=qn(),i=t[0],a=t[1];this.outputShape=n;var s="result";e&&(s="floor(result * 255. + 0.5)"),this.userCode=` `+js(n)+` void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); int r = flatIndex / `+a+`; int c = imod(flatIndex, `+a+`); vec2 uv = (vec2(c, r) + halfCR) / vec2(`+a+".0, "+i+`.0); vec4 values = `+r.texture2D+`(A, uv); float result; if(offset == 0) { result = values[0]; } else if(offset == 1) { result = values[1]; } else if(offset == 2) { result = values[2]; } else { result = values[3]; } `+r.output+" = vec4("+s+`, 0., 0., 0.); } `},qp=function(n,t,e){e===void 0&&(e=!1),this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;var r=qn(),i=t[0],a=t[1];this.outputShape=n;var s="",u="result";e&&(u="floor(result * 255. + 0.5)");for(var l=0;l<=1;l++)for(var d=0;d<=1;d++){var A=2*l+d;s+=` localCoords = coords; if(localCoords[2] + `+d+" < "+n[2]+`) { localCoords[2] += `+d+`; if(localCoords[1] + `+l+" < "+n[1]+`) { localCoords[1] += `+l+`; flatIndex = getFlatIndex(localCoords); offset = imod(flatIndex, 4); flatIndex = idiv(flatIndex, 4, 1.); r = flatIndex / `+a+`; c = imod(flatIndex, `+a+`); uv = (vec2(c, r) + halfCR) / vec2(`+a+".0, "+i+`.0); values = `+r.texture2D+`(A, uv); if(offset == 0) { result[`+A+`] = values[0]; } else if(offset == 1) { result[`+A+`] = values[1]; } else if(offset == 2) { result[`+A+`] = values[2]; } else { result[`+A+`] = values[3]; } } } `}this.userCode=` `+js(n)+` void main() { ivec3 coords = getOutputCoords(); vec4 result = vec4(0.); int flatIndex, r, c, offset; ivec3 localCoords; vec2 uv; vec4 values; `+s+` `+r.output+" = "+u+`; } `},eh="return real * expR - imag * expI;",th="return real * expI + imag * expR;",zl=function(n,t,e){this.variableNames=["real","imag"];var r=t[1];this.outputShape=t;var i=e?"2.0 * "+Math.PI:"-2.0 * "+Math.PI,a=e?r+".0":"1.0";this.userCode=` const float exponentMultiplier = `+i+`; float unaryOpComplex(float real, float expR, float imag, float expI) { `+n+` } float mulMatDFT(int batch, int index) { float indexRatio = float(index) / float(`+r+`); float exponentMultiplierTimesIndexRatio = exponentMultiplier * indexRatio; float result = 0.0; for (int i = 0; i < `+r+`; i++) { // x = (-2|2 * PI / N) * index * i; float x = exponentMultiplierTimesIndexRatio * float(i); float expR = cos(x); float expI = sin(x); float real = getReal(batch, i); float imag = getImag(batch, i); result += unaryOpComplex(real, expR, imag, expI) / `+a+`; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `},rh=function(){function n(t,e){this.outputShape=[],this.variableNames=["x"],this.outputShape=t,this.userCode=` uniform float value; void main() { // Input can be obtained from uniform value. setOutput(value); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;return function(r,i){e.valueLoc==null&&(e.valueLoc=r.getUniformLocationNoThrow(i,"value")),r.gl.uniform1f(e.valueLoc,t)}},n}(),nh=function(n,t,e){this.variableNames=["A","indices"];var r=n.slice();r[e]=t,this.outputShape=r,this.rank=r.length;var i=cn(this.rank),a=function(s,u){var l=s.length;if(l>4)throw Error("Gather for rank "+l+" is not yet supported");if(l===1)return"int(getIndices(resRC))";for(var d=["resRC.x","resRC.y","resRC.z","resRC.w"],A=[],I=0;I1?"strides[j]":"strides";this.userCode=` `+r+" strides = "+r+"("+this.strides+`); void main() { `+i+` coords = getOutputCoords(); int flattenIndex = 0; for (int j = 0; j < `+this.sliceDim+`; j++) { int index = round(getIndices(coords[0], j)); flattenIndex += index * `+a+`; } setOutput(getX(flattenIndex, coords[1])); } `};function Vl(n,t){var e=qn();return jr(n,t,e.version+` precision highp float; `+e.attribute+` vec3 clipSpacePos; `+e.attribute+` vec2 uv; `+e.varyingVs+` vec2 resultUV; void main() { gl_Position = vec4(clipSpacePos, 1); resultUV = uv; }`)}function Hl(n,t){return mr(n,t,new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]))}function Gl(n,t){return Br(n,t,new Uint16Array([0,1,2,2,1,3]))}function so(n,t,e,r,i,a,s){sn(e,r);var u=dn(n,t),l=n.TEXTURE_2D;return lt(n,t,function(){return n.bindTexture(l,u)}),lt(n,t,function(){return n.texParameteri(l,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE)}),lt(n,t,function(){return n.texParameteri(l,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE)}),lt(n,t,function(){return n.texParameteri(l,n.TEXTURE_MIN_FILTER,n.NEAREST)}),lt(n,t,function(){return n.texParameteri(l,n.TEXTURE_MAG_FILTER,n.NEAREST)}),lt(n,t,function(){return n.texImage2D(l,0,i,e,r,0,a,s,null)}),lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,null)}),u}function Ql(n,t,e,r,i){var a=xt(e,r);return so(n,t,a[0],a[1],i.internalFormatFloat,i.textureFormatFloat,n.FLOAT)}function Xl(n,t,e,r,i){var a=xt(e,r);return so(n,t,a[0],a[1],i.internalFormatHalfFloat,i.textureFormatFloat,i.textureTypeHalfFloat)}function Kl(n,t,e,r,i){var a=xt(e,r);return so(n,t,a[0],a[1],n.RGBA,n.RGBA,n.UNSIGNED_BYTE)}function Zl(n,t,e,r,i){var a=Wt(e,r);return so(n,t,a[0],a[1],i.internalFormatPackedFloat,n.RGBA,n.FLOAT)}function Jl(n,t,e,r,i){var a=Wt(e,r);return so(n,t,a[0],a[1],i.internalFormatPackedHalfFloat,n.RGBA,i.textureTypeHalfFloat)}function Yl(n,t,e,r){return lt(n,t,function(){return n.bindBuffer(n.ARRAY_BUFFER,r)}),Qn(n,t,e,"clipSpacePos",r,3,20,0)&&Qn(n,t,e,"uv",r,2,20,12)}function $l(n,t,e,r,i,a,s){var u,l,d;lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,e)}),a instanceof Uint8Array?(u=new Uint8Array(r*i*4),l=n.UNSIGNED_BYTE,d=n.RGBA):(u=new Float32Array(r*i*4),l=n.FLOAT,d=s.internalFormatPackedFloat),u.set(a),lt(n,t,function(){return n.texImage2D(n.TEXTURE_2D,0,d,r,i,0,n.RGBA,l,u)}),lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function ql(n,t,e,r){lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,e)}),r.data instanceof Uint8Array?lt(n,t,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,r.width,r.height,0,n.RGBA,n.UNSIGNED_BYTE,r.data)}):lt(n,t,function(){return n.texImage2D(n.TEXTURE_2D,0,n.RGBA,n.RGBA,n.UNSIGNED_BYTE,r)}),lt(n,t,function(){return n.bindTexture(n.TEXTURE_2D,null)})}function ec(n,t,e,r,i){var a=n.createBuffer();lt(n,t,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,a)});var s=16*e*r;return lt(n,t,function(){return n.bufferData(n.PIXEL_PACK_BUFFER,s,n.STREAM_READ)}),lt(n,t,function(){return n.readPixels(0,0,r,e,n.RGBA,n.FLOAT,0)}),lt(n,t,function(){return n.bindBuffer(n.PIXEL_PACK_BUFFER,null)}),a}function tc(n,t,e){var r=n,i=new Float32Array(e);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,i),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),i}function rc(n,t,e,r,i){var a=xt(e,r),s=a[0],u=a[1],l=new Uint8Array(e*r*4);return lt(n,t,function(){return n.readPixels(0,0,s,u,i.downloadTextureFormat,n.UNSIGNED_BYTE,l)}),new Float32Array(l.buffer)}function nc(n,t,e,r,i,a,s,u){var l=n,d=new Float32Array(function(A,I){var O=Wt(A,I);return O[0]*O[1]*4}(a,s));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,d),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),d}function ic(n,t,e,r){var i=new Float32Array(e*r*4);return lt(n,t,function(){return n.readPixels(0,0,r,e,n.RGBA,n.FLOAT,i)}),i}var ah=Object.freeze({createVertexShader:Vl,createVertexBuffer:Hl,createIndexBuffer:Gl,createFloat32MatrixTexture:Ql,createFloat16MatrixTexture:Xl,createUnsignedBytesMatrixTexture:Kl,createPackedMatrixTexture:Zl,createFloat16PackedMatrixTexture:Jl,bindVertexProgramAttributeStreams:Yl,uploadDenseMatrixToTexture:$l,uploadPixelDataToTexture:ql,createBufferFromOutputTexture:ec,downloadFloat32MatrixFromBuffer:tc,downloadByteEncodedFloatMatrixFromOutputTexture:rc,downloadPackedMatrixFromBuffer:nc,downloadMatrixFromPackedOutputTexture:ic}),ac=function(){function n(t){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];var e=P().getNumber("WEBGL_VERSION");t!=null?(this.gl=t,dt(e,t)):this.gl=ht(e);var r="WEBGL_color_buffer_float";if(P().getNumber("WEBGL_VERSION")===1){if(this.textureFloatExtension=Er(this.gl,this.debug,"OES_texture_float"),wr(this.gl,"OES_texture_half_float"))this.textureHalfFloatExtension=Er(this.gl,this.debug,"OES_texture_half_float");else if(P().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(r),wr(this.gl,"EXT_color_buffer_half_float"))this.colorBufferHalfFloatExtension=Er(this.gl,this.debug,"EXT_color_buffer_half_float");else if(P().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(r="EXT_color_buffer_float",wr(this.gl,r))this.colorBufferFloatExtension=this.gl.getExtension(r);else{if(!wr(this.gl,"EXT_color_buffer_half_float"))throw new Error("GL context does not support color renderable floats");this.colorBufferHalfFloatExtension=this.gl.getExtension("EXT_color_buffer_half_float")}this.vertexBuffer=Hl(this.gl,this.debug),this.indexBuffer=Gl(this.gl,this.debug),this.framebuffer=vn(this.gl,this.debug),this.textureConfig=Pt(this.gl,this.textureHalfFloatExtension)}return Object.defineProperty(n.prototype,"debug",{get:function(){return P().getBool("DEBUG")},enumerable:!0,configurable:!0}),n.prototype.dispose=function(){var t=this;if(!this.disposed){this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");var e=this.gl;lt(e,this.debug,function(){return e.finish()}),lt(e,this.debug,function(){return e.bindFramebuffer(e.FRAMEBUFFER,null)}),lt(e,this.debug,function(){return e.deleteFramebuffer(t.framebuffer)}),lt(e,this.debug,function(){return e.bindBuffer(e.ARRAY_BUFFER,null)}),lt(e,this.debug,function(){return e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)}),lt(e,this.debug,function(){return e.deleteBuffer(t.indexBuffer)}),this.disposed=!0}},n.prototype.createFloat32MatrixTexture=function(t,e){return this.throwIfDisposed(),Ql(this.gl,this.debug,t,e,this.textureConfig)},n.prototype.createFloat16MatrixTexture=function(t,e){return this.throwIfDisposed(),Xl(this.gl,this.debug,t,e,this.textureConfig)},n.prototype.createUnsignedBytesMatrixTexture=function(t,e){return this.throwIfDisposed(),Kl(this.gl,this.debug,t,e,this.textureConfig)},n.prototype.uploadPixelDataToTexture=function(t,e){this.throwIfDisposed(),ql(this.gl,this.debug,t,e)},n.prototype.uploadDenseMatrixToTexture=function(t,e,r,i){this.throwIfDisposed(),$l(this.gl,this.debug,t,e,r,i,this.textureConfig)},n.prototype.createFloat16PackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Jl(this.gl,this.debug,t,e,this.textureConfig)},n.prototype.createPackedMatrixTexture=function(t,e){return this.throwIfDisposed(),Zl(this.gl,this.debug,t,e,this.textureConfig)},n.prototype.deleteMatrixTexture=function(t){var e=this;this.throwIfDisposed(),this.outputTexture===t&&(Ln(this.gl,this.debug,this.framebuffer),this.outputTexture=null),lt(this.gl,this.debug,function(){return e.gl.deleteTexture(t)})},n.prototype.downloadByteEncodedFloatMatrixFromOutputTexture=function(t,e,r){var i=this;return this.downloadMatrixDriver(t,function(){return rc(i.gl,i.debug,e,r,i.textureConfig)})},n.prototype.downloadPackedMatrixFromBuffer=function(t,e,r,i,a,s){return nc(this.gl,t,0,0,0,a,s,this.textureConfig)},n.prototype.downloadFloat32MatrixFromBuffer=function(t,e){return tc(this.gl,t,e)},n.prototype.createBufferFromTexture=function(t,e,r){this.bindTextureToFrameBuffer(t);var i=ec(this.gl,this.debug,e,r,this.textureConfig);return this.unbindTextureToFrameBuffer(),i},n.prototype.createAndWaitForFence=function(){var t=this.createFence(this.gl);return this.pollFence(t)},n.prototype.createFence=function(t){var e,r,i=this;if(P().getBool("WEBGL_FENCE_API_ENABLED")){var a=t,s=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);t.flush(),r=function(){var u=a.clientWaitSync(s,0,0);return u===a.ALREADY_SIGNALED||u===a.CONDITION_SATISFIED},e=s}else P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(e=this.beginQuery(),this.endQuery(),r=function(){return i.isQueryAvailable(e,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}):r=function(){return!0};return{query:e,isFencePassed:r}},n.prototype.downloadMatrixFromPackedTexture=function(t,e,r){var i=this;return this.downloadMatrixDriver(t,function(){return ic(i.gl,i.debug,e,r)})},n.prototype.createProgram=function(t){this.throwIfDisposed();var e=this.gl,r=Wr(e,this.debug,t),i=Vl(e,this.debug),a=Rt(e,this.debug);return lt(e,this.debug,function(){return e.attachShader(a,i)}),lt(e,this.debug,function(){return e.attachShader(a,r)}),fn(e,this.debug,a),this.debug&&nr(e,this.debug,a),this.vertexAttrsAreBound||(this.setProgram(a),this.vertexAttrsAreBound=Yl(e,this.debug,this.program,this.vertexBuffer)),a},n.prototype.deleteProgram=function(t){var e=this;this.throwIfDisposed(),t===this.program&&(this.program=null),t!=null&<(this.gl,this.debug,function(){return e.gl.deleteProgram(t)})},n.prototype.setProgram=function(t){var e=this;this.throwIfDisposed(),this.program=t,this.program!=null&&this.debug&&nr(this.gl,this.debug,this.program),lt(this.gl,this.debug,function(){return e.gl.useProgram(t)})},n.prototype.getUniformLocation=function(t,e,r){return r===void 0&&(r=!0),this.throwIfDisposed(),r?_n(this.gl,this.debug,t,e):gn(this.gl,t,e)},n.prototype.getAttributeLocation=function(t,e){var r=this;return this.throwIfDisposed(),lt(this.gl,this.debug,function(){return r.gl.getAttribLocation(t,e)})},n.prototype.getUniformLocationNoThrow=function(t,e){return this.throwIfDisposed(),this.gl.getUniformLocation(t,e)},n.prototype.setInputMatrixTexture=function(t,e,r){this.throwIfDisposed(),this.throwIfNoProgram(),un(this.gl,this.debug,this.program,t,e,r)},n.prototype.setOutputMatrixTexture=function(t,e,r){this.setOutputMatrixTextureDriver(t,r,e)},n.prototype.setOutputPackedMatrixTexture=function(t,e,r){this.throwIfDisposed();var i=Wt(e,r),a=i[0],s=i[1];this.setOutputMatrixTextureDriver(t,a,s)},n.prototype.setOutputMatrixWriteRegion=function(t,e,r,i){this.setOutputMatrixWriteRegionDriver(r,t,i,e)},n.prototype.setOutputPackedMatrixWriteRegion=function(t,e,r,i){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")},n.prototype.debugValidate=function(){this.program!=null&&nr(this.gl,this.debug,this.program),Un(this.gl)},n.prototype.executeProgram=function(){this.throwIfDisposed(),this.throwIfNoProgram();var t=this.gl;this.debug&&this.debugValidate(),lt(t,this.debug,function(){return t.drawElements(t.TRIANGLES,6,t.UNSIGNED_SHORT,0)})},n.prototype.blockUntilAllProgramsCompleted=function(){var t=this;this.throwIfDisposed(),lt(this.gl,this.debug,function(){return t.gl.finish()})},n.prototype.getQueryTimerExtension=function(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Er(this.gl,this.debug,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension},n.prototype.getQueryTimerExtensionWebGL2=function(){return this.getQueryTimerExtension()},n.prototype.getQueryTimerExtensionWebGL1=function(){return this.getQueryTimerExtension()},n.prototype.beginQuery=function(){if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){var t=this.gl,e=this.getQueryTimerExtensionWebGL2(),r=t.createQuery();return t.beginQuery(e.TIME_ELAPSED_EXT,r),r}var i=this.getQueryTimerExtensionWebGL1(),a=i.createQueryEXT();return i.beginQueryEXT(i.TIME_ELAPSED_EXT,a),a},n.prototype.endQuery=function(){if(P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")!==2){var t=this.getQueryTimerExtensionWebGL1();t.endQueryEXT(t.TIME_ELAPSED_EXT)}else{var e=this.gl,r=this.getQueryTimerExtensionWebGL2();e.endQuery(r.TIME_ELAPSED_EXT)}},n.prototype.waitForQueryAndGetTime=function(t){return C(this,void 0,void 0,function(){var e=this;return E(this,function(r){switch(r.label){case 0:return[4,de(function(){return e.disposed||e.isQueryAvailable(t,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))})];case 1:return r.sent(),[2,this.getQueryTime(t,P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))]}})})},n.prototype.getQueryTime=function(t,e){if(e===0)return null;if(e===2){var r=this.gl;return r.getQueryParameter(t,r.QUERY_RESULT)/1e6}var i=this.getQueryTimerExtensionWebGL1();return i.getQueryObjectEXT(t,i.QUERY_RESULT_EXT)/1e6},n.prototype.isQueryAvailable=function(t,e){if(e===0)return!0;if(e===2){var r=this.gl,i=this.getQueryTimerExtensionWebGL2(),a=r.getQueryParameter(t,r.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(i.GPU_DISJOINT_EXT)),a&&!this.disjoint}return a=(i=this.getQueryTimerExtensionWebGL1()).getQueryObjectEXT(t,i.QUERY_RESULT_AVAILABLE_EXT),this.disjoint==null&&(this.disjoint=this.gl.getParameter(i.GPU_DISJOINT_EXT)),a&&!this.disjoint},n.prototype.pollFence=function(t){var e=this;return new Promise(function(r){e.addItemToPoll(function(){return t.isFencePassed()},function(){return r()})})},n.prototype.pollItems=function(){for(var t=function(r){for(var i=0;i1||de(function(){return r.pollItems(),r.itemsToPoll.length===0})},n.prototype.bindTextureToFrameBuffer=function(t){this.throwIfDisposed(),Fn(this.gl,this.debug,t,this.framebuffer),this.debug&&Un(this.gl)},n.prototype.unbindTextureToFrameBuffer=function(){this.outputTexture!=null?(Fn(this.gl,this.debug,this.outputTexture,this.framebuffer),this.debug&&Un(this.gl)):Ln(this.gl,this.debug,this.framebuffer)},n.prototype.downloadMatrixDriver=function(t,e){this.bindTextureToFrameBuffer(t);var r=e();return this.unbindTextureToFrameBuffer(),r},n.prototype.setOutputMatrixTextureDriver=function(t,e,r){this.throwIfDisposed();var i=this.gl;Fn(i,this.debug,t,this.framebuffer),this.debug&&Un(i),this.outputTexture=t,lt(i,this.debug,function(){return i.viewport(0,0,e,r)}),lt(i,this.debug,function(){return i.scissor(0,0,e,r)})},n.prototype.setOutputMatrixWriteRegionDriver=function(t,e,r,i){var a=this;this.throwIfDisposed(),lt(this.gl,this.debug,function(){return a.gl.scissor(t,e,r,i)})},n.prototype.throwIfDisposed=function(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")},n.prototype.throwIfNoProgram=function(){if(this.program==null)throw new Error("No GPU program is currently set.")},n}();function oc(n,t){if(n.length!==t.length)throw Error("Binary was compiled with "+n.length+" inputs, but was executed with "+t.length+" inputs");n.forEach(function(e,r){var i=e.logicalShape,a=t[r],s=a.shape;if(!fe(i,s))throw Error("Binary was compiled with different shapes than the current args. Shapes "+i+" and "+s+" must match");if(!e.isUniform||!a.isUniform){var u=e.texShape,l=a.isUniform?null:a.texData.texShape;if(!fe(u,l))throw Error("Binary was compiled with different texture shapes than the current args. Shape "+u+" and "+l+" must match")}})}var oh=function(n,t,e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var r=e.filterWidth,i=e.inChannels,a=e.strideWidth,s=e.strideHeight,u=e.padInfo,l=e.outWidth,d=e.dilationWidth,A=e.dilationHeight,I=e.dataFormat,O=u.left,z=u.top,re=i*r,oe=qn(),ae=I==="channelsLast",se=ae?0:1,be=ae?1:2,Ae="",me=0;me<=1;me++)for(var Ce=0;Ce<=1;Ce++)Ae+=` blockIndex = rc.y + `+Ce+`; pos = rc.x + `+me+`; if(blockIndex < `+n[1]+" && pos < "+n[0]+`) { offsetY = int(blockIndex / (`+l+")) * "+s+" - "+z+`; d0 = offsetY + `+A+" * (pos / "+re+`); if(d0 < `+t[se]+` && d0 >= 0) { offsetX = int(mod(float(blockIndex), `+l+".) * "+a+". - "+O+`.); d1 = offsetX + `+d+" * (int(mod(float(pos), "+re+".) / "+i+`.)); if(d1 < `+t[be]+` && d1 >= 0) { ch = int(mod(float(pos), `+i+`.)); if (`+ae+`) { innerDims = vec2(d1, ch); result[`+(2*me+Ce)+`] = getChannel( getA(d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[`+(2*me+Ce)+`] = getChannel( getA(ch, int(innerDims.x), int(innerDims.y)), innerDims); } } } } `;this.userCode=` void main() { ivec2 rc = getOutputCoords(); vec4 result = vec4(0); int blockIndex, pos, offsetY, d0, offsetX, d1, ch; vec2 innerDims; `+Ae+` `+oe.output+` = result; } `},sh=function(n,t,e,r,i){this.variableNames=["x"],this.outputShape=[];var a,s=t,u=n[3]-1;this.outputShape=n;var l="float("+e+") + float("+r+") * sum";a=i===.5?"inversesqrt("+l+")":i===1?"1.0/("+l+")":"exp(log("+l+") * float(-"+i+"));",this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; int d = coords[3]; float x = getX(b, r, c, d); float sum = 0.0; for (int j = -`+s+"; j <= "+s+`; j++) { int idx = d + j; if (idx >= 0 && idx <= `+u+`) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * `+a+`; setOutput(val); } `},uh=function(n,t,e,r,i){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=n,this.depth=n[3],this.depthRadius=t,this.bias=e,this.alpha=r,this.beta=i,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; float result = 0.0; for (int d = 0; d < `+this.depth+`; ++d) { int depthBegin = int(max(0.0, float(d - `+t+`))); int depthEnd = int(min(float(`+this.depth+`), float(d + `+t+` + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = `+this.depth+`; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(`+r+") * norm + float("+e+`); for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){ if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd){ float dyi = -2.0 * float(`+r+`) * float(`+i+`) * getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d) / norm; if (k == d) { dyi += pow(norm, -1.0 * `+i+`); } if (k == coords[3]) { dyi *= getDy(b, r, c, d); result += dyi; } } else { break; } } } setOutput(result); } `},lh=function(n,t,e,r,i){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;var a,s=t,u=n[3]-1;this.outputShape=n;var l="float("+e+") + float("+r+") * sum";a=i===.5?"inversesqrt("+l+")":i===1?"1.0/("+l+")":"exp(log("+l+") * float(-"+i+"));",this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords.x; int r = coords.y; int c = coords.z; int d = coords.w; bool hasNextCol = d < `+this.outputShape[3]+`; bool hasNextRow = c < `+this.outputShape[2]+`; vec4 sum = vec4(0.); vec4 xFragAtOutputCoords = getX(b, r, c, d); vec4 xAtOutputCoords = vec4( getChannel(xFragAtOutputCoords, vec2(c, d)), hasNextCol ? getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0, hasNextRow ? getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0, (hasNextRow && hasNextCol) ? getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0 ); int firstChannel = d - `+s+`; vec2 cache = vec2(0.); if(firstChannel >= 0){ vec4 firstChannelFrag = getX(b, r, c, firstChannel); cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel)); if(hasNextRow){ cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel)); } } ivec2 depth = ivec2(d, d + 1); for (int j = - `+s+"; j <= "+s+`; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(`+u+`)); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * `+a+`; setOutput(result); } `},ch=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var t=n.strideHeight,e=n.strideWidth,r=n.dilationHeight,i=n.effectiveFilterHeight,a=n.effectiveFilterWidth,s=i-1-n.padInfo.top,u=a-1-n.padInfo.left,l=i*a-1;this.userCode=` const ivec2 pads = ivec2(`+s+", "+u+`); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < `+i+`; wR += `+r+`) { float dyR = float(dyRCorner + wR) / `+t+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+a+`; wC++) { float dyC = float(dyCCorner + wC) / `+e+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(b, idyR, idyC, d); int maxPosValue = `+l+` - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * `+a+` + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `},fh=function(n){this.variableNames=["dy","maxPos"],this.outputShape=n.inShape;var t=n.strideDepth,e=n.strideHeight,r=n.strideWidth,i=n.dilationDepth,a=n.dilationHeight,s=n.dilationWidth,u=n.effectiveFilterDepth,l=n.effectiveFilterHeight,d=n.effectiveFilterWidth,A=u-1-n.padInfo.front,I=l-1-n.padInfo.top,O=d-1-n.padInfo.left,z=u*l*d-1;this.userCode=` const ivec3 pads = ivec3(`+A+", "+I+", "+O+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyDCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; // Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get // dx(xD, xR, xC, ch). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wD = 0; wD < `+u+`; wD += `+i+`) { float dyD = float(dyDCorner + wD) / `+t+`.0; if (dyD < 0.0 || dyD >= `+n.outDepth+`.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < `+l+`; wR += `+a+`) { float dyR = float(dyRCorner + wR) / `+e+`.0; if (dyR < 0.0 || dyR >= `+n.outHeight+`.0 || fract(dyR) > 0.0) { continue; } int idyR = int(dyR); for (int wC = 0; wC < `+d+`; wC += `+s+`) { float dyC = float(dyCCorner + wC) / `+r+`.0; if (dyC < 0.0 || dyC >= `+n.outWidth+`.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); float dyValue = getDy(batch, idyD, idyR, idyC, ch); int maxPosValue = `+z+` - int(getMaxPos(batch, idyD, idyR, idyC, ch)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wD * `+l+" * "+d+` + wR * `+d+` + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `},Bs=function(n,t,e,r,i,a,s){e===void 0&&(e=!1),r===void 0&&(r=!1),i===void 0&&(i=!1),a===void 0&&(a=null),s===void 0&&(s=!1),this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t;var u=e?n[1]:n[2],l=Math.ceil(u/2),d=e?"i * 2, rc.y":"rc.y, i * 2",A=r?"rc.z, i * 2":"i * 2, rc.z",I=e?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],O=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],z="",re="";a&&(z=s?`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); `+a+` }`:`vec4 activation(vec4 x) { `+a+` }`,re="result = activation(result);");var oe=i?"result += getBiasAtOutCoords();":"";i&&this.variableNames.push("bias"),s&&this.variableNames.push("preluActivationWeights"),this.userCode=` `+z+` const float sharedDimension = `+l+`.0; vec4 dot2x2ARowBCol(ivec3 rc) { vec4 result = vec4(0); for (int i = 0; i < `+l+`; i++) { vec4 a = getMatrixA(rc.x, `+d+`); vec4 b = getMatrixB(rc.x, `+A+`); // These swizzled products need to be separately added. // See: https://github.com/tensorflow/tfjs/issues/1735 result += (`+I[0]+" * "+O[0]+`); result += (`+I[1]+" * "+O[1]+`); } return result; } void main() { ivec3 rc = getOutputCoords(); vec4 result = dot2x2ARowBCol(rc); `+oe+` `+re+` setOutput(result); } `},dh=function(){function n(t,e,r){this.variableNames=["probs"],this.outputShape=[t,r],this.userCode=` uniform float seed; void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; float r = random(seed); float cdf = 0.0; for (int i = 0; i < `+(e-1)+`; i++) { cdf += getProbs(batch, i); if (r < cdf) { setOutput(float(i)); return; } } // If no other event happened, last event happened. setOutput(float(`+(e-1)+`)); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;return function(r,i){e.seedLoc==null&&(e.seedLoc=r.getUniformLocation(i,"seed")),r.gl.uniform1f(e.seedLoc,t)}},n}(),ph=function(n,t,e,r){this.variableNames=["indices"],this.outputShape=[n,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(`+r+"), float("+e+`), float(index == coords.y))); } `},hh=function(n){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=n;var t=n.length;if(t===0)this.userCode=` void main() { setOutput(vec4(getA(), 0., 0., 0.)); } `;else{var e=ci("rc",t),r=cn(t),i=function(u,l,d){if(u===1)return"rc > "+l[0];for(var A="",I=u-2;I= "+l[I],I= `+l+`; bool rEdge = rp1 >= `+d+`; `}(t,n[n.length-1],n[n.length-2],e),s=function(u,l){var d=u.length,A=function(I,O){for(var z=[],re=0;re<=1;re++)for(var oe=0;oe<=1;oe++){for(var ae=(re===0?"r":"rp1")+", "+(oe===0?"c":"cp1"),se=2;se= `+u[0]+` ? 0. : getA(rc + 1), 0, 0`:"getA("+A[0]+`), cEdge ? 0. : getA(`+A[1]+`), rEdge ? 0. : getA(`+A[2]+`), rEdge || cEdge ? 0. : getA(`+A[3]+")"}(n,e);this.userCode=` void main() { `+r+` rc = getOutputCoords(); if(`+i+`) { setOutput(vec4(0)); } else { `+a+` setOutput(vec4(`+s+`)); } } `}},vh=function(n,t,e){this.variableNames=["x"],this.outputShape=t.map(function(l,d){return l[0]+n[d]+l[1]});var r=n.length,i=cn(r),a=t.map(function(l){return l[0]}).join(","),s=t.map(function(l,d){return l[0]+n[d]}).join(","),u=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);this.userCode=r!==1?` `+i+" start = "+i+"("+a+`); `+i+" end = "+i+"("+s+`); void main() { `+i+` outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(float(`+e+`)); } else { `+i+` coords = outC - start; setOutput(getX(`+u+`)); } } `:` int start = `+a+`; int end = `+s+`; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(float(`+e+`)); } else { setOutput(getX(outC - start)); } } `},mh=function(n,t,e){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map(function(ae,se){return ae[0]+n[se]+ae[1]});for(var r=n.length,i=cn(r),a=t.map(function(ae){return ae[0]}).join(","),s=t.map(function(ae,se){return ae[0]+n[se]}).join(","),u=ci("rc",r),l=ci("source",r),d=u[r-1]+" < "+this.outputShape[r-1],A=r===1?"source":"vec2("+l.slice(-2).join()+")",I=[i+" rc = outputLoc;",u[r-1]+` += 1; if(`+d+`) { `,r===1?"":`} rc = outputLoc; `+u[r-2]+` += 1; if(`+u[r-2]+" < "+this.outputShape[r-2]+") {",r===1?"":" "+u[r-1]+` += 1; if(`+d+") {"],O=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",z="",re=0,oe=r===1?2:4;re= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+d+`; wC += `+u+`) { int xC = xCCorner + wC; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } float value = getX(batch, xR, xC, d); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value >= currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = wR * `+d+` + wC; } } } setOutput(float(minMaxPosition)); } `;else{var re=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";t==="avg"&&(re="avgValue / count");var oe=4*Math.floor(r/4),ae=r%4,se=` if (`+O+`) { avgValue += dot(values, ones); } else { minMaxValue = max(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(`+i+", "+a+`); const ivec2 pads = ivec2(`+A+", "+I+`); const float initializationValue = `+z+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= `+n.inWidth+`) { return initializationValue; } count += 1.0; return getX(batch, xR, xC, d); } void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d = coords[3]; ivec2 xRCCorner = coords.yz * strides - pads; int xRCorner = xRCCorner.x; int xCCorner = xRCCorner.y; // max/min x(?, ?, d) to get y(yR, yC, d). // ? = to be determined vec4 minMaxValue = vec4(`+z+`); float avgValue = 0.0; count = 0.0; for (int wR = 0; wR < `+l+`; wR += `+s+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+oe+`; wC += 4) { int xC = xCCorner + wC * `+u+`; vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+u+`, d), getValue(batch, xR, xC + 2 * `+u+`, d), getValue(batch, xR, xC + 3 * `+u+`, d) ); `+se+` } int xC = xCCorner + `+oe+`; if (`+(ae===1)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); `+se+` } else if (`+(ae===2)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+u+`, d), initializationValue, initializationValue ); `+se+` } else if (`+(ae===3)+`) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + `+u+`, d), getValue(batch, xR, xC + 2 * `+u+`, d), initializationValue ); `+se+` } } setOutput(`+re+`); } `}},Ms=function(n,t,e){if(this.variableNames=["x"],t==="avg"&&e)throw new Error("Cannot compute positions for average pool.");var r=n.filterWidth,i=n.strideDepth,a=n.strideHeight,s=n.strideWidth,u=n.dilationDepth,l=n.dilationHeight,d=n.dilationWidth,A=n.effectiveFilterDepth,I=n.effectiveFilterHeight,O=n.effectiveFilterWidth,z=n.padInfo.front,re=n.padInfo.top,oe=n.padInfo.left;this.outputShape=n.outShape;var ae=t==="avg",se="0.0";if(ae||(se="-1.0 / 1e-20"),e)this.userCode=` const ivec3 strides = ivec3(`+i+", "+a+", "+s+`); const ivec3 pads = ivec3(`+z+", "+re+", "+oe+`); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; for (int wD = 0; wD < `+A+`; wD += `+u+`) { int xD = xDCorner + wD; if (xD < 0 || xD >= `+n.inDepth+`) { continue; } for (int wR = 0; wR < `+I+`; wR += `+l+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+O+`; wC += `+d+`) { int xC = xCCorner + wC; if (xC < 0 || xC >= `+n.inWidth+`) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value >= currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = wD * `+I+" * "+O+` + wR * `+O+` + wC;; } } } } setOutput(float(minMaxPosition)); } `;else{var be=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";t==="avg"&&(be="avgValue / count");var Ae=4*Math.floor(r/4),me=r%4,Ce=` if (`+ae+`) { avgValue += dot(values, ones); } else { minMaxValue = max(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(`+i+", "+a+", "+s+`); const ivec3 pads = ivec3(`+z+", "+re+", "+oe+`); const float initializationValue = `+se+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xD, int xR, int xC, int ch) { if (xC < 0 || xC >= `+n.inWidth+`) { return initializationValue; } count += 1.0; return getX(batch, xD, xR, xC, ch); } void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch). // ? = to be determined vec4 minMaxValue = vec4(`+se+`); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < `+A+`; wD += `+u+`) { int xD = xDCorner + wD; if (xD < 0 || xD >= `+n.inDepth+`) { continue; } for (int wR = 0; wR < `+I+`; wR += `+l+`) { int xR = xRCorner + wR; if (xR < 0 || xR >= `+n.inHeight+`) { continue; } for (int wC = 0; wC < `+Ae+`; wC += 4) { int xC = xCCorner + wC * `+d+`; vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), getValue(batch, xD, xR, xC + 2 * `+d+`, ch), getValue(batch, xD, xR, xC + 3 * `+d+`, ch) ); `+Ce+` } int xC = xCCorner + `+Ae+`; if (`+(me===1)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); `+Ce+` } else if (`+(me===2)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), initializationValue, initializationValue ); `+Ce+` } else if (`+(me===3)+`) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + `+d+`, ch), getValue(batch, xD, xR, xC + 2 * `+d+`, ch), initializationValue ); `+Ce+` } } setOutput(`+be+`); } } `}},gh=function(n,t){this.variableNames=["x"];var e=n.windowSize,r=n.batchSize,i=n.inSize,a=Math.ceil(i/e);this.outputShape=[r,a];var s="0.0",u="";t==="prod"?s="1.0":t==="min"?(s="1.0 / 1e-20",u="min"):t==="max"&&(s="-1.0 / 1e-20",u="max");var l=t+"("+t+"("+t+"(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])";t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");var d=4*Math.floor(e/4),A=e%4,I=` if (`+(t==="sum")+`) { sumValue += dot(values, ones); } else if (`+(t==="prod")+`) { vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]); prodValue *= tmp[0] * tmp[1]; } else { minMaxValue = `+u+`(values, minMaxValue); } `,O="vec4";t==="all"?(s="1.0",I=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,O="bvec4"):t==="any"&&(s="0.0",I=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); `,O="bvec4");var z="";i%e>0&&(z=` if (inIdx < 0 || inIdx >= `+i+`) { return initializationValue; } `),this.userCode=` const float initializationValue = `+s+`; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { `+z+` return getX(batch, inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = outIdx * `+e+`; vec4 minMaxValue = vec4(`+s+`); float prodValue = 1.0; float sumValue = 0.0; float allValue = 1.0; float anyValue = 0.0; for (int i = 0; i < `+d+`; i += 4) { int inIdx = inOffset + i; `+O+" values = "+O+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); `+I+` } int inIdx = inOffset + `+d+`; if (`+(A===1)+`) { `+O+" values = "+O+`( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); `+I+` } else if (`+(A===2)+`) { `+O+" values = "+O+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); `+I+` } else if (`+(A===3)+`) { `+O+" values = "+O+`( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); `+I+` } setOutput(`+l+`); } `},yh=function(n,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n;for(var e="",r=0;r<4;r++){var i="thisRC = rc;";r%2==1&&(i+="thisRC.z += 1;"),r>1&&(i+="thisRC.y += 1;"),e+=` `+i+` `+(r>0?"if(thisRC.y < rows && thisRC.z < cols){":"")+` int flatIndex = getFlatIndex(thisRC); ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); result[`+r+`] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); `+(r>0?"}":"")+` `}this.userCode=` ivec3 inputCoordsFromReshapedOutCoords(int index) { `+Ca(["r","c","d"],t)+` return ivec3(r, c, d); } `+js(n)+` void main() { ivec3 rc = getOutputCoords(); vec4 result = vec4(0.); ivec3 thisRC; int rows = `+n[1]+`; int cols = `+n[2]+`; `+e+` setOutput(result); } `},bh=function(n,t,e){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var r=t.shape,i=r[1],a=r[2],s=n.shape,u=s[1],l=s[2],d=[e&&u>1?i-1:i,e&&l>1?a-1:a],A=[e&&u>1?u-1:u,e&&l>1?l-1:l],I=d[0]/A[0],O=d[1]/A[1],z=1/I,re=1/O,oe=2*Math.ceil(z)+2,ae=2*Math.ceil(re)+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(`+I+`); const float widthScale = float(`+O+`); const float invHeightScale = float(`+z+`); const float invWidthScale = float(`+re+`); const int winHeight = int(`+oe+`); const int winWidth = int(`+ae+`); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(startRLerp - float(winHeight / 2)); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(startCLerp - float(winWidth / 2)); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= `+u+`) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= `+l+`) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), `+(i-1)+`.0)); float dxRLerp = dxR - float(topDxRIndex); float inverseDxRLerp = 1.0 - dxRLerp; float dxC = float(dyC) * widthScale; int leftDxCIndex = int(floor(dxC)); int rightDxCIndex = int(min(ceil(dxC), `+(a-1)+`.0)); float dxCLerp = dxC - float(leftDxCIndex); float inverseDxCLerp = 1.0 - dxCLerp; if (r == topDxRIndex && c == leftDxCIndex) { // topLeft accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; } if (r == topDxRIndex && c == rightDxCIndex) { // topRight accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; } if (r == bottomDxRIndex && c == leftDxCIndex) { // bottomLeft accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; } if (r == bottomDxRIndex && c == rightDxCIndex) { // bottomRight accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; } } } // End loop over dy setOutput(accumulator); } `},wh=function(n,t,e,r){this.variableNames=["A"],this.outputShape=[];var i=n[0],a=n[1],s=n[2],u=n[3];this.outputShape=[i,t,e,u];var l=[r&&t>1?a-1:a,r&&e>1?s-1:s],d=[r&&t>1?t-1:t,r&&e>1?e-1:e];this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( `+l[0]/d[0]+`, `+l[1]/d[1]+`); const vec2 inputShapeRC = vec2(`+a+".0, "+s+`.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC; // Compute the four integer indices. ivec2 sourceFloorRC = ivec2(sourceFracIndexRC); ivec2 sourceCeilRC = ivec2( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d); float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d); float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d); float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d); vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC); float top = topLeft + (topRight - topLeft) * fracRC.y; float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y; float newValue = top + (bottom - top) * fracRC.x; setOutput(newValue); } `},Ah=function(n,t,e,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];var i=n[0],a=n[1],s=n[2],u=n[3];this.outputShape=[i,t,e,u];var l=[r&&t>1?a-1:a,r&&e>1?s-1:s],d=[r&&t>1?t-1:t,r&&e>1?e-1:e];this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( `+l[0]/d[0]+`, `+l[1]/d[1]+`, `+l[1]/d[1]+`); const vec3 inputShapeRC = vec3(`+a+".0, "+s+`.0, `+s+`.0); float getAValue(int b, int r, int c, int d) { return getChannel(getA(b, r, c, d), vec2(c, d)); } void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; // Calculate values for next column in yRC.z. ivec3 yRC = coords.yzz + ivec3(0, 0, 1); // Fractional source index. vec3 sourceFracIndexRC = vec3(yRC) * effectiveInputOverOutputRatioRC; // Compute the four integer indices. ivec3 sourceFloorRC = ivec3(sourceFracIndexRC); ivec3 sourceCeilRC = ivec3( min(inputShapeRC - 1.0, ceil(sourceFracIndexRC))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < `+(u-1)+`; bool hasNextRow = coords.z < `+(e-1)+`; // In parallel, construct four corners for all four components in // packed 2x2 cell. vec4 topLeft = vec4( getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 bottomLeft = vec4( getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0); vec4 topRight = vec4( getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0); vec4 bottomRight = vec4( getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d), hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1) : 0.0, hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d) : 0.0, (hasNextRow && hasNextCol) ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0); vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC); vec4 top = mix(topLeft, topRight, fracRC.yyzz); vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz); vec4 newValue = mix(top, bottom, fracRC.x); setOutput(newValue); } `},xh=function(n,t,e){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t.shape;var r=t.shape,i=r[1],a=r[2],s=n.shape,u=s[1],l=s[2],d=[e&&u>1?i-1:i,e&&l>1?a-1:a],A=[e&&u>1?u-1:u,e&&l>1?l-1:l],I=d[0]/A[0],O=d[1]/A[1],z=1/I,re=1/O,oe=2*Math.ceil(z)+2,ae=2*Math.ceil(re)+2;this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; int r = coords[1]; int c = coords[2]; float accumulator = 0.0; const float heightScale = float(`+I+`); const float widthScale = float(`+O+`); const float invHeightScale = float(`+z+`); const float invWidthScale = float(`+re+`); const int winHeight = int(`+oe+`); const int winWidth = int(`+ae+`); // Compute bounds for where in dy we will look float startRLerp = floor(float(r) * invHeightScale); int startDyR = int(floor(startRLerp - float(winHeight / 2))); float startCLerp = floor(float(c) * invWidthScale); int startDyC = int(floor(startCLerp - float(winWidth / 2))); // Loop over dy for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) { int dyR = dyROffset + startDyR; // Guard against the window exceeding the bounds of dy if (dyR < 0 || dyR >= `+u+`) { continue; } for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) { int dyC = dyCOffset + startDyC; // Guard against the window exceeding the bounds of dy if (dyC < 0 || dyC >= `+l+`) { continue; } float sourceFracRow = float(`+d[0]+`) * (float(dyR) / float(`+A[0]+`)); float sourceFracCol = float(`+d[1]+`) * (float(dyC) / float(`+A[1]+`)); int sourceNearestRow = int(min( float(int(`+i+`) - 1), `+e+` ? float(round(sourceFracRow)) : float(floor(sourceFracRow)))); int sourceNearestCol = int(min( float(int(`+a+`) - 1), `+e+` ? float(round(sourceFracCol)) : float(floor(sourceFracCol)))); if (r == sourceNearestRow && c == sourceNearestCol) { accumulator += getDy(b, dyR, dyC, d); } } } // End loop over dy setOutput(accumulator); } `},Eh=function(n,t,e,r){this.variableNames=["A"],this.outputShape=[];var i=n[0],a=n[1],s=n[2],u=n[3];this.outputShape=[i,t,e,u];var l=[r&&t>1?a-1:a,r&&e>1?s-1:s],d=[r&&t>1?t-1:t,r&&e>1?e-1:e],A=r?"0.5":"0.0";this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( `+l[0]/d[0]+`, `+l[1]/d[1]+`); const vec2 inputShapeRC = vec2(`+a+".0, "+s+`.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = vec2(yRC) * effectiveInputOverOutputRatioRC; // Compute the coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + `+A+`))); float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); setOutput(newValue); } `},Ch=function(n,t){this.variableNames=["x"];var e=n.length;if(e>4)throw new Error("WebGL backend: Reverse of rank-"+e+" tensor is not yet supported");if(this.outputShape=n,e!==1){var r=n.map(function(a,s){return function(u){return t.indexOf(u)!==-1&&n[u]!==1?n[u]+" - coords["+u+"] - 1":"coords["+u+"]"}(s)}).join(","),i=cn(e);this.userCode=` void main() { `+i+` coords = getOutputCoords(); setOutput(getX(`+r+`)); } `}else this.userCode=` void main() { int coord = getOutputCoords(); setOutput(getX(`+n[0]+` - coord - 1)); } `},Sh=function(n,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;var e=n.length;if(e>4)throw new Error("WebGL backend: Reverse of rank-"+e+" tensor is not yet supported");this.outputShape=n;var r=ci("rc",e),i=r[e-1]+" + 1 < "+this.outputShape[e-1],a=r[e-2]+" + 1 < "+this.outputShape[e-2],s=cn(e);function u(l){var d=n.map(function(A,I){return function(O,z){return t.indexOf(O)!==-1&&n[O]!==1?n[O]+" - "+z[O]+" - 1":""+z[O]}(I,l)});return"getChannel(getX("+d.join(",")+"), vec2("+d.slice(-2).join(",")+"))"}this.userCode=e===1?` void main(){ int rc = getOutputCoords(); vec4 result = vec4(0.); result.r = getChannel(getX(`+n[0]+` - rc - 1), `+n[0]+` - rc - 1); if(`+i+`){ result.g = getChannel(getX(`+n[0]+` - (rc + 1) - 1), `+n[0]+` - (rc + 1) - 1); } setOutput(result); } `:` void main() { `+s+` rc = getOutputCoords(); vec4 result = vec4(0.); result.r = `+function(l){return u(l)}(r.slice())+`; if(`+i+`){ result.g = `+function(l){return l[e-1]="("+l[e-1]+" + 1)",u(l)}(r.slice())+`; } if(`+a+`) { result.b = `+function(l){return l[e-2]="("+l[e-2]+" + 1)",u(l)}(r.slice())+`; if(`+i+`) { result.a = `+function(l){return l[e-1]="("+l[e-1]+" + 1)",l[e-2]="("+l[e-2]+" + 1)",u(l)}(r.slice())+`; } } setOutput(result); } `},sc=function(n,t,e,r,i,a,s){s===void 0&&(s=!0),this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;var u=cn(i.length),l=cn(a.length),d="";e===1?d="i":e===2&&(d="i, j");var A="getIndices("+d+")",I="";r===1?I="i":r===2&&(I="i, coords[1]");var O="getUpdates("+I+")",z=t>1?"strides[j]":"strides";this.userCode=` `+u+" strides = "+u+"("+i+`); void main() { `+l+` coords = getOutputCoords(); float sum = 0.0; bool found = false; for (int i = 0; i < `+n+`; i++) { int flattenedIndex = 0; for (int j = 0; j < `+t+`; j++) { int index = round(`+A+`); flattenedIndex += index * `+z+`; } if (flattenedIndex == coords[0]) { sum += `+O+`; found = true; } } setOutput(mix(getDefaultValue(), sum, float(found))); } `},Ih=function(n,t){this.variableNames=["x","segmentIds"];var e=n.windowSize,r=n.batchSize,i=n.inSize,a=n.numSegments,s=a*Math.ceil(i/e);this.outputShape=[r,s];var u=4*Math.floor(e/4),l=e%4,d=` sumValue += dot(values, segFilter); `,A="";i%e>0&&(A=` if (inIdx < 0 || inIdx >= `+i+`) { return initializationValue; } `);var I="";i%e>0&&(I=` if (inIdx < 0 || inIdx >= `+i+`) { return -1.0; } `),this.userCode=` const float initializationValue = 0.0; float getValue(int batch, int inIdx) { `+A+` return getX(batch, inIdx); } float getSegmentIdAtIndex(int inIdx) { `+I+` return getSegmentIds(inIdx); } void main() { ivec2 coords = getOutputCoords(); int batch = coords[0]; int outIdx = coords[1]; int inOffset = int(floor(float(outIdx) / float( `+a+")) * float("+e+`)); int currentSeg = int(mod(float(outIdx), float(`+a+`))); float sumValue = 0.0; for (int i = 0; i < `+u+`; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 ); `+d+` } int inIdx = inOffset + `+u+`; if (`+(l===1)+`) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, 0, 0, 0 ); `+d+` } else if (`+(l===2)+`) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, 0, 0 ); `+d+` } else if (`+(l===3)+`) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, 0 ); `+d+` } setOutput(sumValue); } `},Th=function(n,t,e){var r,i;if(this.variableNames=["c","a","b"],this.outputShape=t,e>4)throw Error("Where for rank "+e+" is not yet supported");if(e===1)i="resRC",r="resRC";else{for(var a=["resRC.x","resRC.y","resRC.z","resRC.w"],s=[],u=[],l=0;l= 1.0) { setOutput(getA(`+i+`)); } else { setOutput(getB(`+i+`)); } } `},Rh=function(){function n(t){this.variableNames=["source"],this.outputShape=t,this.rank=t.length;var e,r=cn(this.rank),i="uniform int start["+this.rank+"];",a=function(s){if(s===1)return"sourceLoc";if(s<=6)return _s.slice(0,s).map(function(u){return"sourceLoc."+u}).join(",");throw Error("Slicing for rank "+s+" is not yet supported")}(this.rank);e=` `+r+` sourceLoc; `+r+` coords = getOutputCoords(); `+t.map(function(s,u){return"sourceLoc."+_s[u]+" = start["+u+"] + coords."+_s[u]+";"}).join(` `)+` `,this.userCode=` `+i+` void main() { `+e+` setOutput(getSource(`+a+`)); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(r,i){e.startLoc==null&&(e.startLoc=r.getUniformLocationNoThrow(i,"start"),e.startLoc==null)||r.gl.uniform1iv(e.startLoc,t)}},n}(),_s=["x","y","z","w","u","v"],Oh=function(){function n(t){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t,this.rank=t.length;var e=cn(this.rank),r=ci("coords",this.rank),i=ci("sourceLoc",this.rank),a=this.rank===1?"sourceLoc":"vec2("+i.slice(-2).join()+")",s="getChannel(getSource("+i.join()+"), "+a+")",u=` result.x = `+s+`; if (++`+r[this.rank-1]+" < "+t[this.rank-1]+`) { ++`+i[this.rank-1]+`; result.y = `+s+`; --`+i[this.rank-1]+`; } `,l=this.rank===1?"":` --`+r[this.rank-1]+`; if (++`+r[this.rank-2]+" < "+t[this.rank-2]+`) { ++`+i[this.rank-2]+`; result.z = `+s+`; if (++`+r[this.rank-1]+" < "+t[this.rank-1]+`) { ++`+i[this.rank-1]+`; result.w = `+s+`; } } `,d=this.rank<=4?`sourceLoc = coords + `+e+"("+t.map(function(A,I){return"start["+I+"]"}).join()+");":t.map(function(A,I){return i[I]+" = "+r[I]+" + start["+I+"];"}).join(` `);this.userCode=` uniform int start[`+this.rank+`]; void main() { `+e+` coords = getOutputCoords(); `+e+` sourceLoc; `+d+` vec4 result = vec4(0.); `+u+` `+l+` setOutput(result); } `}return n.prototype.getCustomSetupFunc=function(t){var e=this;if(t.length!==this.rank)throw Error("The rank ("+this.rank+") of the program must match the length of start ("+t.length+")");return function(r,i){e.startLoc==null&&(e.startLoc=r.getUniformLocationNoThrow(i,"start"),e.startLoc==null)||r.gl.uniform1iv(e.startLoc,t)}},n}(),kh=function(n,t,e){this.variableNames=["x"],this.outputShape=e;var r=e.length,i=cn(e.length),a=cn(e.length),s="";if(r===1)s="coords * strides + begin";else{var u=0;s=e.map(function(l,d){return u++,e.length===1?"coords * strides["+d+"] + begin["+d+"]":"coords["+(u-1)+"] * strides["+d+"] + begin["+d+"]"}).join(",")}this.userCode=` `+i+" begin = "+i+"("+n+`); `+i+" strides = "+i+"("+t+`); void main() { `+a+` coords = getOutputCoords(); setOutput(getX(`+s+`)); } `},jh=function(){function n(t){this.gpgpu=t,this.numUsedTextures=0,this.numFreeTextures=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}return n.prototype.acquireTexture=function(t,e,r){var i,a=uc(e,r),s=lc(t,a,r);if(s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]),this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this.log();var u=this.freeTextures[s].shift();return this.usedTextures[s].push(u),u}return this.numUsedTextures++,this.log(),a===Ye.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(t[0],t[1]):a===Ye.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(t[0],t[1]):a===Ye.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(t[0],t[1]):a===Ye.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(t[0],t[1]):a===Ye.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(t[0],t[1])),this.usedTextures[s].push(i),i},n.prototype.releaseTexture=function(t,e,r,i){if(this.freeTextures!=null){var a=lc(e,uc(r,i),i);a in this.freeTextures||(this.freeTextures[a]=[]),this.freeTextures[a].push(t),this.numFreeTextures++,this.numUsedTextures--;var s=this.usedTextures[a],u=s.indexOf(t);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");s.splice(u,1),this.log()}},n.prototype.log=function(){if(this.logEnabled){var t=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",this.numFreeTextures+" / "+this.numUsedTextures,"("+t+")")}},n.prototype.getNumUsedTextures=function(){return this.numUsedTextures},n.prototype.getNumFreeTextures=function(){return this.numFreeTextures},n.prototype.dispose=function(){var t=this;if(this.freeTextures!=null){for(var e in this.freeTextures)this.freeTextures[e].forEach(function(r){t.gpgpu.deleteMatrixTexture(r)});for(var e in this.usedTextures)this.usedTextures[e].forEach(function(i){t.gpgpu.deleteMatrixTexture(i)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0}},n}();function uc(n,t){if(n===Ge.UPLOAD)return Ye.PACKED_2X2_FLOAT32;if(n===Ge.RENDER||n==null)return function(e){return P().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?Ye.PACKED_2X2_FLOAT32:Ye.UNPACKED_FLOAT32:e?Ye.PACKED_2X2_FLOAT16:Ye.UNPACKED_FLOAT16}(t);if(n===Ge.DOWNLOAD||n===Ge.PIXELS)return Ye.PACKED_4X1_UNSIGNED_BYTE;throw new Error("Unknown logical texture type "+n)}function lc(n,t,e){return n[0]+"_"+n[1]+"_"+t+"_"+e}var Dh=function(n,t){this.variableNames=["A"];for(var e=new Array(n.length),r=0;r5)throw Error("Tile for rank "+u+" is not yet supported");if(u===1)return"imod(resRC, "+s[0]+")";for(var l=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],d=[],A=0;A6)throw Error("Transpose for rank "+u+" is not yet supported");for(var l=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],d=new Array(u),A=0;A6)throw Error("Packed transpose for rank "+this.rank+" is not yet supported.");var i=cn(this.rank),a=jl("rc",this.rank),s=new Array(this.rank);for(r=0;r= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,hc="return -x;",vc="return ceil(x);",mc="return floor(x);",gc="return exp(x);",yc="return exp(x) - 1.0;",_h=Oi+` return sin(x); `,Fh=Oi+` return cos(x); `,Lh=Oi+` if (abs(x) > 1.) { return NAN; } return asin(x); `,Uh=Oi+` if (abs(x) > 1.) { return NAN; } return acos(x); `,Wh=Oi+` return atan(x); `,zh=Oi+"return log(x + sqrt(x * x + 1.0));",Vh=Oi+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,Hh=Oi+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,Mo="return x;",Gh="return x;",bc=` vec4 result = x * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,wc=` vec4 result = min(x, vec4(6.)) * vec4(greaterThanEqual(x, vec4(0.0))); bvec4 isNaN = isnan(x); result.r = isNaN.r ? x.r : result.r; result.g = isNaN.g ? x.g : result.g; result.b = isNaN.b ? x.b : result.b; result.a = isNaN.a ? x.a : result.a; return result; `,Ac=` vec4 result; result.r = (x.r >= 0.0) ? x.r : (exp(x.r) - 1.0); result.g = (x.g >= 0.0) ? x.g : (exp(x.g) - 1.0); result.b = (x.b >= 0.0) ? x.b : (exp(x.b) - 1.0); result.a = (x.a >= 0.0) ? x.a : (exp(x.a) - 1.0); return result; `,uo=function(n,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.userCode=` vec4 unaryOperation(vec4 x) { `+t+` } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `},Qh=function(n){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=n;var t=n.length,e=ci("rc",t),r=cn(t),i=function(u,l){if(u===1)return"rc";for(var d="",A=0;A0?[4,Promise.all(s)]:[3,2];case 1:return d=A.sent(),l.kernelMs=Ie(d),l.getExtraProfileInfo=function(){return d.map(function(I,O){return{name:u[O],ms:I}}).map(function(I){return I.name+": "+I.ms}).join(", ")},[3,3];case 2:l.kernelMs={error:"WebGL query timers are not supported in this environment."},A.label=3;case 3:return this.uploadWaitMs=0,this.downloadWaitMs=0,[2,l]}})})},t.prototype.memory=function(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU}},t.prototype.startTimer=function(){return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:qe(),endMs:null}},t.prototype.endTimer=function(e){return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=qe(),e)},t.prototype.getQueryTime=function(e){return C(this,void 0,void 0,function(){var r;return E(this,function(i){return P().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?[2,this.gpgpu.waitForQueryAndGetTime(e)]:[2,(r=e).endMs-r.startMs]})})},t.prototype.disposeData=function(e){if(!this.pendingDisposal.has(e)){if(this.pendingRead.has(e))return this.pendingDisposal.add(e),void this.pendingDeletes++;if(this.texData.has(e)){this.releaseGPUData(e);var r=this.texData.get(e).complexTensors;r!=null&&(r.real.dispose(),r.imag.dispose()),this.texData.delete(e)}}},t.prototype.releaseGPUData=function(e){var r=this.texData.get(e),i=r.texture,a=r.dtype,s=r.texShape,u=r.usage,l=r.isPacked,d=r.slice,A=d&&d.origDataId||e,I=this.dataRefCount.get(A);I>1?this.dataRefCount.set(A,I-1):(this.dataRefCount.delete(A),i!=null&&(this.numBytesInGPU-=this.computeBytes(s,a),this.textureManager.releaseTexture(i,s,u,l)));var O=this.texData.get(e);O.texture=null,O.texShape=null,O.isPacked=!1,O.slice=null},t.prototype.getTexture=function(e){return this.uploadToGPU(e),this.texData.get(e).texture},t.prototype.getDataInfo=function(e){return this.texData.get(e)},t.prototype.getCPUBackend=function(){return P().getBool("WEBGL_CPU_FORWARD")?(this.cpuBackend==null&&(this.cpuBackend=We.findBackend("cpu")),this.cpuBackend):null},t.prototype.shouldExecuteOnCPU=function(e,r){var i=this;return r===void 0&&(r=128),this.getCPUBackend()!=null&&e.every(function(a){return i.texData.get(a.dataId).texture==null&&a.sizeP().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){var s=Math.floor(e.length/2),u=this.concat(e.slice(0,s),r),l=this.concat(e.slice(s),r);return this.concat([u,l],r)}if(P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].rank>1){var d=new Mp(e.map(function(z){return z.shape}),r);return this.compileAndRun(d,e)}var A=nn(e.map(function(z){return z.shape}),r),I=e.map(function(z){return z.as2D(-1,ce(z.shape.slice(r)))}),O=new Np(I.map(function(z){return z.shape}));return this.compileAndRun(O,I).reshape(A)},t.prototype.neg=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.neg(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,hc,e.dtype);var r=new gr(e.shape,hc);return this.compileAndRun(r,[e])},t.prototype.batchMatMul=function(e,r,i,a){var s=i?e.shape[2]:e.shape[1],u=a?r.shape[1]:r.shape[2],l=i?e.shape[1]:e.shape[2],d=e.shape[0];if((s===1||u===1)&&l>1e3){i&&(e=e.transpose([0,2,1])),a&&(r=r.transpose([0,2,1]));var A=u===1?e:e.as3D(d,l,1),I=u===1?2:1,O=u===1?r.as3D(d,1,l):r;return this.multiply(A,O).sum(I,!0)}var z=Tt(e.dtype,r.dtype),re=new Bs(e.shape,[d,s,u],i,a);return this.compileAndRun(re,[e,r],z)},t.prototype.fusedBatchMatMul=function(e){var r=e.a,i=e.b,a=e.transposeA,s=e.transposeB,u=e.bias,l=e.activation,d=e.preluActivationWeights,A=a?r.shape[2]:r.shape[1],I=s?i.shape[1]:i.shape[2],O=r.shape[0],z=Tt(r.dtype,i.dtype),re=u!=null,oe=d!=null,ae=l?Fo(l,!0):null,se=new Bs(r.shape,[O,A,I],a,s,re,ae,oe),be=[r,i];return u&&be.push(u),d&&be.push(d),this.compileAndRun(se,be,z)},t.prototype.multiply=function(e,r){if(e.dtype==="complex64"){var i=this.texData.get(e.dataId),a=this.texData.get(r.dataId),s=new Bl(kp,e.shape,r.shape),u=new Bl(jp,e.shape,r.shape),l=[this.makeComplexComponentTensorInfo(e,i.complexTensors.real),this.makeComplexComponentTensorInfo(e,i.complexTensors.imag),this.makeComplexComponentTensorInfo(r,a.complexTensors.real),this.makeComplexComponentTensorInfo(r,a.complexTensors.imag)],d=this.compileAndRun(s,l),A=this.compileAndRun(u,l),I=this.complex(d,A);return d.dispose(),A.dispose(),I}if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.multiply(e,r);if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,Nl,e.dtype);var O=new In(Nl,e.shape,r.shape);return this.compileAndRun(O,[e,r],e.dtype)},t.prototype.batchNormalization=function(e,r,i,a,s,u){var l=[e,r,i],d=null;u!=null&&(d=u.shape,l.push(u));var A=null;if(s!=null&&(A=s.shape,l.push(s)),P().getBool("WEBGL_PACK_NORMALIZATION")){var I=new Op(e.shape,r.shape,i.shape,d,A,a);return this.compileAndRun(I,l)}var O=new Rp(e.shape,r.shape,i.shape,d,A,a);return this.compileAndRun(O,l)},t.prototype.localResponseNormalization4D=function(e,r,i,a,s){var u=P().getBool("WEBGL_PACK_NORMALIZATION")?new lh(e.shape,r,i,a,s):new sh(e.shape,r,i,a,s);return this.compileAndRun(u,[e])},t.prototype.LRNGrad=function(e,r,i,a,s,u,l){var d=new uh(r.shape,a,s,u,l);return this.compileAndRun(d,[r,i,e])},t.prototype.tile=function(e,r){if(e.dtype==="string"){var i=this.readSync(e.dataId).map(function(s){return Qe(s)});return Ol(cr(e.shape,e.dtype,i),r)}var a=new Dh(e.shape,r);return this.compileAndRun(a,[e])},t.prototype.pad=function(e,r,i){var a=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new mh(e.shape,r,i):new vh(e.shape,r,i);return this.compileAndRun(a,[e])},t.prototype.transpose=function(e,r){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.transpose(e,r);var i=P().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Bh(e.shape,r):new Ph(e.shape,r);return this.compileAndRun(i,[e])},t.prototype.gather=function(e,r,i){if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.gather(e,r,i);var a=new nh(e.shape,r.size,i);return this.compileAndRun(a,[e,r])},t.prototype.batchToSpaceND=function(e,r,i){q(e.rank<=4,function(){return"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet"});var a=r.reduce(function(I,O){return I*O}),s=So(e.shape,r,a),u=Io(s.length,r.length),l=To(e.shape,r,a),d=ml(i,r.length),A=gl(l,i,r.length);return e.reshape(s).transpose(u).reshape(l).slice(d,A)},t.prototype.spaceToBatchND=function(e,r,i){q(e.rank<=4,function(){return"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet"});var a=r.reduce(function(O,z){return O*z}),s=[[0,0]];s.push.apply(s,i);for(var u=1+r.length;uz||re===O?oe=!0:re=Me(O,re+1);return re}(l,s),A=new Ih({windowSize:d,inSize:l,batchSize:u,numSegments:s},r),I=this.compileAndRun(A,[e,i],a);return I.shape[1]===s?I:(i=Eo(0,s).tile([l/d]),this.segOpCompute(I,r,i,a,s))},t.prototype.argMinMaxReduce=function(e,r,i){var a=[r];if(zn("arg"+i.charAt(0).toUpperCase()+i.slice(1),a,e.rank),!P().getBool("WEBGL_PACK_REDUCE")||e.rank<=2){var s=En(e.shape,a),u=s[0],l=ce(s[1]),d=e.as2D(-1,l);return this.argReduce(d,i).reshape(u)}return this.argReducePacked(e,i)},t.prototype.argMin=function(e,r){return this.argMinMaxReduce(e,r,"min")},t.prototype.argMax=function(e,r){return this.argMinMaxReduce(e,r,"max")},t.prototype.cumsum=function(e,r,i,a){if(r!==e.rank-1)throw new Error("WebGL cumsum shader expects an inner-most axis="+(e.rank-1)+" but got axis="+r);var s=new Gp(e.shape,i,a);return this.compileAndRun(s,[e])},t.prototype.equal=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(equal(a, b)); `,"bool");var i=new In("return float(a == b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.notEqual=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(notEqual(a, b)); `,"bool");var i=new In("return float(a != b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.less=function(e,r){if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.less(e,r);if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(lessThan(a, b)); `,"bool");var i=new In("return float(a < b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.lessEqual=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(lessThanEqual(a, b)); `,"bool");var i=new In("return float(a <= b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.greater=function(e,r){if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.greater(e,r);if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(greaterThan(a, b)); `,"bool");var i=new In("return float(a > b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.greaterEqual=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4(greaterThanEqual(a, b)); `,"bool");var i=new In("return float(a >= b);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.logicalNot=function(e){var r=new gr(e.shape,"return float(!(x >= 1.0));");return this.compileAndRun(r,[e])},t.prototype.logicalAnd=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,"bool");var i=new In("return float(a >= 1.0 && b >= 1.0);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.logicalOr=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,"bool");var i=new In("return float(a >= 1.0 || b >= 1.0);",e.shape,r.shape);return this.compileAndRun(i,[e,r],"bool")},t.prototype.select=function(e,r,i){var a=new Th(e.rank,r.shape,r.rank);return this.compileAndRun(a,[e,r,i],Tt(r.dtype,i.dtype))},t.prototype.where=function(e){Yn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");var r=e.dataSync();return ks(e.shape,r)},t.prototype.topk=function(e,r,i){return kl(e.dataSync(),e.shape,e.dtype,r)},t.prototype.min=function(e,r){zn("min",r,e.rank);var i=En(e.shape,r),a=i[0],s=ce(i[1]),u=e.as2D(-1,s);return this.reduce(u,"min",u.dtype).reshape(a)},t.prototype.minimum=function(e,r){if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.minimum(e,r);var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` vec4 result = vec4(min(a, b)); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; return result; `,e.shape,r.shape):new In(` if (isnan(a)) return a; if (isnan(b)) return b; return min(a, b); `,e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.mod=function(e,r){var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; return result; `,e.shape,r.shape):new In(`if (b == 0.0) return NAN; return mod(a, b);`,e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.max=function(e,r){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.max(e,r);zn("max",r,e.rank);var i=En(e.shape,r),a=i[0],s=ce(i[1]),u=e.as2D(-1,s);return this.reduce(u,"max",u.dtype).reshape(a)},t.prototype.maximum=function(e,r){if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.maximum(e,r);var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` vec4 result = vec4(max(a, b)); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; return result; `,e.shape,r.shape):new In(` if (isnan(a)) return a; if (isnan(b)) return b; return max(a, b); `,e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.all=function(e,r){zn("all",r,e.rank);var i=En(e.shape,r),a=i[0],s=ce(i[1]),u=e.as2D(-1,s);return this.reduce(u,"all",u.dtype).reshape(a)},t.prototype.any=function(e,r){zn("any",r,e.rank);var i=En(e.shape,r),a=i[0],s=ce(i[1]),u=e.as2D(-1,s);return this.reduce(u,"any",u.dtype).reshape(a)},t.prototype.realDivide=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` // vec4 one = vec4(equal(a, b)); // return one + (vec4(1.0) - one) * a / b; vec4 result = a / b; if(a.x == b.x) { result.x = 1.; } if(a.y == b.y) { result.y = 1.; } if(a.z == b.z) { result.z = 1.; } if(a.w == b.w) { result.w = 1.; } return result; `,"float32",!0);var i=new In(` if (a == b) { return 1.0; }; return a / b;`,e.shape,r.shape);return this.compileAndRun(i,[e,r],"float32")},t.prototype.floorDiv=function(e,r){if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,` ivec4 ia = round(a); ivec4 ib = round(b); bvec4 cond = notEqual(ib, ivec4(0)); ivec4 result = ivec4(0); vec4 s = sign(a) * sign(b); // Windows (D3D) wants guaranteed non-zero int division at compile-time. if (cond[0]) { result[0] = idiv(ia[0], ib[0], s[0]); } if (cond[1]) { result[1] = idiv(ia[1], ib[1], s[1]); } if (cond[2]) { result[2] = idiv(ia[2], ib[2], s[2]); } if (cond[3]) { result[3] = idiv(ia[3], ib[3], s[3]); } return vec4(result); `,"int32");var i=new In(` float s = sign(a) * sign(b); int ia = round(a); int ib = round(b); if (ib != 0) { // Windows (D3D) wants guaranteed non-zero int division at compile-time. return float(idiv(ia, ib, s)); } else { return NAN; } `,e.shape,r.shape);return this.compileAndRun(i,[e,r],"int32")},t.prototype.add=function(e,r){if(e.dtype==="complex64"&&r.dtype==="complex64")return this.complexSeparableBinaryOp(e,r,Ds);if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.add(e,r);var i=Tt(e.dtype,r.dtype);if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,Ds,i);var a=new In(Ds,e.shape,r.shape);return this.compileAndRun(a,[e,r],i)},t.prototype.packedUnaryOp=function(e,r,i){var a=new uo(e.shape,r);return this.compileAndRun(a,[e],i)},t.prototype.packedBinaryOp=function(e,r,i,a,s){s===void 0&&(s=!1);var u=new Xi(i,e.shape,r.shape,s);return this.compileAndRun(u,[e,r],a)},t.prototype.complexSeparableBinaryOp=function(e,r,i){var a=this,s=this.texData.get(e.dataId),u=this.texData.get(r.dataId),l=[[s.complexTensors.real,u.complexTensors.real],[s.complexTensors.imag,u.complexTensors.imag]].map(function(O){var z=O[0],re=O[1],oe=a.makeComplexComponentTensorInfo(e,z),ae=a.makeComplexComponentTensorInfo(r,re),se=new In(i,e.shape,r.shape);return a.compileAndRun(se,[oe,ae],Tt(z.dtype,re.dtype))}),d=l[0],A=l[1],I=this.complex(d,A);return d.dispose(),A.dispose(),I},t.prototype.makeComplexComponentTensorInfo=function(e,r){return{dataId:r.dataId,dtype:r.dtype,shape:e.shape}},t.prototype.addN=function(e){if(e.length===1)return e[0];if(e.length>P().get("WEBGL_MAX_TEXTURES_IN_SHADER")){var r=Math.floor(e.length/2),i=this.addN(e.slice(0,r)),a=this.addN(e.slice(r));return this.addN([i,a])}var s=e.map(function(d){return d.dtype}).reduce(function(d,A){return Tt(d,A)}),u=e.map(function(d){return d.shape}),l=P().getBool("WEBGL_PACK")?new yp(e[0].shape,u):new gp(e[0].shape,u);return this.compileAndRun(l,e,s)},t.prototype.subtract=function(e,r){if(e.dtype==="complex64"&&r.dtype==="complex64")return this.complexSeparableBinaryOp(e,r,Ps);if(this.shouldExecuteOnCPU([e,r]))return this.cpuBackend.subtract(e,r);var i=Tt(e.dtype,r.dtype);if(P().getBool("WEBGL_PACK_BINARY_OPERATIONS"))return this.packedBinaryOp(e,r,Ps,e.dtype);var a=new In(Ps,e.shape,r.shape);return this.compileAndRun(a,[e,r],i)},t.prototype.pow=function(e,r){var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; return result; `,e.shape,r.shape):new In(` if(a < 0.0 && floor(b) < b){ return NAN; } if (b == 0.0) { return 1.0; } return (round(mod(b, 2.0)) != 1) ? pow(abs(a), b) : sign(a) * pow(abs(a), b); `,e.shape,r.shape),a=Tt(e.dtype,r.dtype);return this.compileAndRun(i,[e,r],a)},t.prototype.ceil=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.ceil(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,vc,e.dtype);var r=new gr(e.shape,vc);return this.compileAndRun(r,[e])},t.prototype.floor=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.floor(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,mc,e.dtype);var r=new gr(e.shape,mc);return this.compileAndRun(r,[e])},t.prototype.sign=function(e){var r=new gr(e.shape,` if (isnan(x)) { return 0.0; } return sign(x); `);return this.compileAndRun(r,[e])},t.prototype.isNaN=function(e){var r=new gr(e.shape,"return float(isnan(x));");return this.compileAndRun(r,[e],"bool")},t.prototype.isInf=function(e){var r=new gr(e.shape,"return float(isinf(x));");return this.compileAndRun(r,[e],"bool")},t.prototype.isFinite=function(e){var r=new gr(e.shape,"return float(!isnan(x) && !isinf(x));");return this.compileAndRun(r,[e],"bool")},t.prototype.round=function(e){var r=new gr(e.shape,` // OpenGL ES does not support round function. // The algorithm is based on banker's rounding. float base = floor(x); if ((x - base) < 0.5) { return floor(x); } else if ((x - base) > 0.5) { return ceil(x); } else { if (mod(base, 2.0) == 0.0) { return base; } else { return base + 1.0; } } `);return this.compileAndRun(r,[e])},t.prototype.exp=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.exp(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,gc,e.dtype);var r=new gr(e.shape,gc);return this.compileAndRun(r,[e])},t.prototype.expm1=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.expm1(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,yc,e.dtype);var r=new gr(e.shape,yc);return this.compileAndRun(r,[e])},t.prototype.softmax=function(e,r){var i=ye([r],e.shape),a=this.max(e,i),s=Dn(a.shape,i),u=this.subtract(e,a.reshape(s)),l=this.exp(u),d=this.sum(l,i).reshape(s);return this.realDivide(l,d)},t.prototype.log=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.log(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,` vec4 result = log(x); vec4 isNaN = vec4(lessThan(x, vec4(0.0))); result.r = isNaN.r == 1.0 ? NAN : result.r; result.g = isNaN.g == 1.0 ? NAN : result.g; result.b = isNaN.b == 1.0 ? NAN : result.b; result.a = isNaN.a == 1.0 ? NAN : result.a; return result; `,e.dtype);var r=new gr(e.shape,`if (x < 0.0) return NAN; return log(x);`);return this.compileAndRun(r,[e])},t.prototype.log1p=function(e){var r=new gr(e.shape,"return log(1.0 + x);");return this.compileAndRun(r,[e])},t.prototype.sqrt=function(e){var r=new gr(e.shape,"return sqrt(x);");return this.compileAndRun(r,[e])},t.prototype.rsqrt=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.rsqrt(e);var r=new gr(e.shape,"return inversesqrt(x);");return this.compileAndRun(r,[e])},t.prototype.reciprocal=function(e){var r=new gr(e.shape,"return 1.0 / x;");return this.compileAndRun(r,[e])},t.prototype.relu=function(e){var r;return r=P().getBool("WEBGL_PACK")?new uo(e.shape,bc):new gr(e.shape,fc),this.compileAndRun(r,[e])},t.prototype.relu6=function(e){var r;return r=P().getBool("WEBGL_PACK")?new uo(e.shape,wc):new gr(e.shape,dc),this.compileAndRun(r,[e])},t.prototype.prelu=function(e,r){var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(_l,e.shape,r.shape):new In(Ml,e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.elu=function(e){if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Ac,e.dtype);var r=new gr(e.shape,pc);return this.compileAndRun(r,[e])},t.prototype.eluDer=function(e,r){var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,e.shape,r.shape):new In("return (b >= 1.0) ? a : a * (b + 1.0);",e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.selu=function(e){var r=new gr(e.shape,Mh);return this.compileAndRun(r,[e])},t.prototype.int=function(e){var r=new gr(e.shape,"return float(int(x));");return this.compileAndRun(r,[e],"int32")},t.prototype.clip=function(e,r,i){var a,s=(a=P().getBool("WEBGL_PACK_CLIP")?new Pp(e.shape):new Dp(e.shape)).getCustomSetupFunc(r,i);return this.compileAndRun(a,[e],null,s)},t.prototype.abs=function(e){if(this.shouldExecuteOnCPU([e]))return this.cpuBackend.abs(e);if(P().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,cc,e.dtype);var r=new gr(e.shape,cc);return this.compileAndRun(r,[e])},t.prototype.complexAbs=function(e){var r=this.texData.get(e.dataId),i=new Bp(e.shape),a=[this.makeComplexComponentTensorInfo(e,r.complexTensors.real),this.makeComplexComponentTensorInfo(e,r.complexTensors.imag)];return this.compileAndRun(i,a)},t.prototype.sigmoid=function(e){var r=new gr(e.shape,"return 1.0 / (1.0 + exp(-1.0 * x));");return this.compileAndRun(r,[e])},t.prototype.softplus=function(e){var r=new gr(e.shape,` float epsilon = 1.1920928955078125e-7; float threshold = log(epsilon) + 2.0; bool too_large = x > -threshold; bool too_small = x < threshold; float result; float exp_x = exp(x); if (too_large){ result = x; } else if (too_small){ result = exp_x; } else{ result = log(exp_x + 1.0); } return result; `);return this.compileAndRun(r,[e])},t.prototype.sin=function(e){var r=new gr(e.shape,_h);return this.compileAndRun(r,[e])},t.prototype.cos=function(e){var r=new gr(e.shape,Fh);return this.compileAndRun(r,[e])},t.prototype.tan=function(e){var r=new gr(e.shape,"return tan(x);");return this.compileAndRun(r,[e])},t.prototype.asin=function(e){var r=new gr(e.shape,Lh);return this.compileAndRun(r,[e])},t.prototype.acos=function(e){var r=new gr(e.shape,Uh);return this.compileAndRun(r,[e])},t.prototype.atan=function(e){var r=new gr(e.shape,Wh);return this.compileAndRun(r,[e])},t.prototype.atan2=function(e,r){var i=P().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Xi(` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; return result; `,e.shape,r.shape):new In(` if (isnan(a)) return a; if (isnan(b)) return b; return atan(a, b); `,e.shape,r.shape);return this.compileAndRun(i,[e,r])},t.prototype.sinh=function(e){var r=new gr(e.shape,` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `);return this.compileAndRun(r,[e])},t.prototype.cosh=function(e){var r=new gr(e.shape,` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `);return this.compileAndRun(r,[e])},t.prototype.tanh=function(e){var r=new gr(e.shape,` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `);return this.compileAndRun(r,[e])},t.prototype.asinh=function(e){var r=new gr(e.shape,zh);return this.compileAndRun(r,[e])},t.prototype.acosh=function(e){var r=new gr(e.shape,Vh);return this.compileAndRun(r,[e])},t.prototype.atanh=function(e){var r=new gr(e.shape,Hh);return this.compileAndRun(r,[e])},t.prototype.erf=function(e){var r=new gr(e.shape,` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = 0.3275911; float a1 = 0.254829592; float a2 = -0.284496736; float a3 = 1.421413741; float a4 = -1.453152027; float a5 = 1.061405429; float sign = sign(x); x = abs(x); float t = 1.0 / (1.0 + p * x); return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x)); `);return this.compileAndRun(r,[e])},t.prototype.step=function(e,r){var i=new gr(e.shape,function(a){return a===void 0&&(a=0),Oi+` return x > 0.0 ? 1.0 : float(`+a+`); `}(r));return this.compileAndRun(i,[e])},t.prototype.conv2dByMatMul=function(e,r,i,a,s,u){var l=e.shape,d=this.texData.get(e.dataId),A=i.inChannels,I=l[0]*l[1]*l[2],O=i.outChannels,z=i.dataFormat==="channelsLast",re=(I===1||O===1)&&A>1e3,oe=l[2]%2!=0&&!!d.isPacked;if(re||!P().getBool("WEBGL_LAZILY_UNPACK")||!P().getBool("WEBGL_PACK_BINARY_OPERATIONS")||!oe){var ae=z?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],se=this.reshape(e,[1,ae,i.inChannels]),be=this.reshape(r,[1,i.inChannels,i.outChannels]);return this.reshape(this.fusedBatchMatMul({a:se,b:be,transposeA:!1,transposeB:!1,bias:a,activation:s,preluActivationWeights:u}),i.outShape)}var Ae=z?l[0]*l[1]*(l[2]+1):l[0]*l[2]*(l[3]+1),me={dataId:e.dataId,shape:[1,Ae,i.inChannels],dtype:e.dtype},Ce=d.shape;d.shape=d.shape.slice(),d.shape[d.shape.length-2]++,q(Zn(d.shape,me.shape),function(){return"packed reshape "+d.shape+" to "+me.shape+" isn't free"});var Oe=this.reshape(r,[1,i.inChannels,i.outChannels]),Le=this.fusedBatchMatMul({a:me,b:Oe,transposeA:!1,transposeB:!1,bias:a,activation:s,preluActivationWeights:u}),Ue=this.texData.get(Le.dataId);return q(Ue.isPacked,function(){return"batchMatMul result is expected to be packed"}),d.shape=Ce,Ue.shape=i.outShape,We.makeTensorFromDataId(Le.dataId,i.outShape,Le.dtype)},t.prototype.conv2dWithIm2Row=function(e,r,i,a,s,u){var l=i.filterWidth,d=i.filterHeight,A=i.inChannels,I=i.outWidth,O=i.outHeight,z=i.dataFormat==="channelsLast",re=l*d*A,oe=O*I,ae=[re,oe],se=e.squeeze([0]),be=r.reshape([1,re,-1]),Ae=new oh(ae,se.shape,i),me=this.compileAndRun(Ae,[se]).reshape([1,ae[0],ae[1]]),Ce=a!=null,Oe=u!=null,Le=s?Fo(s,!0):null,Ue=new Bs(me.shape,[1,oe,i.outChannels],!0,!1,Ce,Le,Oe),Ne=[me,be];a&&Ne.push(a),Oe&&Ne.push(u);var Fe=this.compileAndRun(Ue,Ne);return z?Fe.reshape([1,O,I,i.outChannels]):Fe.reshape([1,i.outChannels,O,I])},t.prototype.fusedConv2d=function(e){var r=e.input,i=e.filter,a=e.convInfo,s=e.bias,u=e.activation,l=e.preluActivationWeights;if(a.filterHeight===1&&a.filterWidth===1&&a.dilationHeight===1&&a.dilationWidth===1&&a.strideHeight===1&&a.strideWidth===1&&(a.padInfo.type==="SAME"||a.padInfo.type==="VALID"))return this.conv2dByMatMul(r,i,a,s,u,l);if(P().getBool("WEBGL_CONV_IM2COL")&&r.shape[0]===1)return this.conv2dWithIm2Row(r,i,a,s,u,l);var d=s!=null,A=l!=null,I=u?Fo(u,!1):null,O=new Fl(a,d,I,A),z=[r,i];return s&&z.push(s),l&&z.push(l),this.compileAndRun(O,z)},t.prototype.conv2d=function(e,r,i){if(i.filterHeight===1&&i.filterWidth===1&&i.dilationHeight===1&&i.dilationWidth===1&&i.strideHeight===1&&i.strideWidth===1&&(i.padInfo.type==="SAME"||i.padInfo.type==="VALID"))return this.conv2dByMatMul(e,r,i);if(P().getBool("WEBGL_CONV_IM2COL")&&e.shape[0]===1)return this.conv2dWithIm2Row(e,r,i);var a=new Fl(i);return this.compileAndRun(a,[e,r])},t.prototype.conv2dDerInput=function(e,r,i){var a=new Fp(i);return this.compileAndRun(a,[e,r])},t.prototype.conv2dDerFilter=function(e,r,i){var a=new _p(i);return this.compileAndRun(a,[e,r])},t.prototype.fusedDepthwiseConv2D=function(e){var r,i=e.input,a=e.filter,s=e.convInfo,u=e.bias,l=e.activation,d=e.preluActivationWeights,A=P().getBool("WEBGL_PACK_DEPTHWISECONV")&&s.strideWidth<=2&&s.outChannels/s.inChannels==1,I=l?Fo(l,A):null,O=[i,a],z=u!=null,re=d!=null;return z&&O.push(u),re&&O.push(d),A?(r=new Ul(s,z,I,re),this.compileAndRun(r,O)):(r=new Ll(s,z,I,re),this.compileAndRun(r,O))},t.prototype.depthwiseConv2D=function(e,r,i){var a;return P().getBool("WEBGL_PACK_DEPTHWISECONV")&&i.strideWidth<=2&&i.outChannels/i.inChannels==1?(a=new Ul(i),this.compileAndRun(a,[e,r])):(a=new Ll(i),this.compileAndRun(a,[e,r]))},t.prototype.depthwiseConv2DDerInput=function(e,r,i){var a=new zp(i);return this.compileAndRun(a,[e,r])},t.prototype.depthwiseConv2DDerFilter=function(e,r,i){var a=new Wp(i);return this.compileAndRun(a,[e,r])},t.prototype.conv3d=function(e,r,i){var a=new Vp(i);return this.compileAndRun(a,[e,r])},t.prototype.conv3dDerInput=function(e,r,i){var a=new Up(i);return this.compileAndRun(a,[e,r])},t.prototype.conv3dDerFilter=function(e,r,i){var a=new Lp(i);return this.compileAndRun(a,[e,r])},t.prototype.maxPool=function(e,r){var i=new Ns(r,"max",!1);return this.compileAndRun(i,[e])},t.prototype.avgPool=function(e,r){var i=new Ns(r,"avg",!1);return this.compileAndRun(i,[e],"float32")},t.prototype.maxPoolBackprop=function(e,r,i,a){var s=new Ns(a,"max",!0),u=this.compileAndRun(s,[r]),l=new ch(a),d=this.compileAndRun(l,[e,u],r.dtype);return u.dispose(),d},t.prototype.avgPoolBackprop=function(e,r,i){var a=new Ip(i);return this.compileAndRun(a,[e],r.dtype)},t.prototype.cast=function(e,r){return Ss(e,r,this)},t.prototype.unstack=function(e,r){for(var i=e.shape[r],a=new Array(e.rank-1),s=0,u=0;u1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+r});var a=e.shape[0],s=i==="NHWC"?e.shape[1]:e.shape[2],u=i==="NHWC"?e.shape[2]:e.shape[3],l=i==="NHWC"?e.shape[3]:e.shape[1],d=s*r,A=u*r,I=l/(r*r),O=new Kp(i==="NHWC"?[a,d,A,I]:[a,I,d,A],r,i);return this.compileAndRun(O,[e])},t.prototype.split=function(e,r,i){return Rl(e,r,i)},t.prototype.scatterND=function(e,r,i){var a=no(0,e,i),s=a.sliceRank,u=a.numUpdates,l=a.sliceSize,d=a.strides,A=a.outputSize,I=[A/l,l],O=e.reshape([u,s]),z=r.reshape([u,l]);if(A===0)return Bo(Sn([]),i);var re=kt(0),oe=new sc(u,s,O.rank,z.rank,d,I);return this.compileAndRun(oe,[z,O,re]).reshape(i)},t.prototype.sparseToDense=function(e,r,i,a){var s=no(0,e,i),u=s.sliceRank,l=s.numUpdates,d=s.strides,A=s.outputSize,I=new sc(l,u,e.rank,r.rank,d,[A,1],!1);return this.compileAndRun(I,[r,e,a]).reshape(i)},t.prototype.fft=function(e){return this.fftImpl(e,!1)},t.prototype.ifft=function(e){return this.fftImpl(e,!0)},t.prototype.fftImpl=function(e,r){var i=this.texData.get(e.dataId),a=new zl(eh,e.shape,r),s=new zl(th,e.shape,r),u=[this.makeComplexComponentTensorInfo(e,i.complexTensors.real),this.makeComplexComponentTensorInfo(e,i.complexTensors.imag)],l=this.compileAndRun(a,u),d=this.compileAndRun(s,u),A=this.complex(l,d).as2D(e.shape[0],e.shape[1]);return l.dispose(),d.dispose(),A},t.prototype.gatherND=function(e,r){var i=r.shape,a=i[i.length-1],s=ys(e,r),u=s[0],l=s[1],d=s[2],A=s[3],I=r.reshape([l,a]),O=e.reshape([e.size/d,d]),z=new ih(a,A,[l,d]);return this.compileAndRun(z,[O,I]).reshape(u)},t.prototype.fill=function(e,r,i){if((i=i||le(r))==="string"){var a=W(i,ce(e));return a.fill(r),We.makeTensor(a,e,i,this)}var s=new rh(e,r),u=s.getCustomSetupFunc(r);return this.compileAndRun(s,[],i,u)},t.prototype.onesLike=function(e){if(e.dtype==="string")throw new Error("onesLike is not supported under string dtype");return this.fill(e.shape,1,e.dtype)},t.prototype.zerosLike=function(e){return this.fill(e.shape,e.dtype==="string"?"":0,e.dtype)},t.prototype.linspace=function(e,r,i){return Is(e,r,i)},t.prototype.makeTensorInfo=function(e,r){var i=this.write(null,e,r);return this.texData.get(i).usage=null,{dataId:i,shape:e,dtype:r}},t.prototype.makeOutput=function(e,r){var i=this.makeTensorInfo(e,r).dataId;return We.makeTensorFromDataId(i,e,r,this)},t.prototype.unpackTensor=function(e){var r=new Qh(e.shape);return this.runWebGLProgram(r,[e],e.dtype)},t.prototype.packTensor=function(e){var r=new hh(e.shape);return this.runWebGLProgram(r,[e],e.dtype,null,!0)},t.prototype.packedReshape=function(e,r){var i=[_r(e.shape)].concat(qr(e.shape)),a={dtype:e.dtype,shape:i,dataId:e.dataId},s=[_r(r)].concat(qr(r)),u=new yh(s,i),l=this.runWebGLProgram(u,[a],e.dtype,null,!0);return{dataId:l.dataId,shape:r,dtype:l.dtype}},t.prototype.decode=function(e){var r,i=this.texData.get(e),a=i.isPacked,s=i.shape,u=i.dtype,l=yn(s);return r=a?new Xp(l):new Qp(l),{dtype:u,shape:s,dataId:this.runWebGLProgram(r,[{shape:l,dtype:u,dataId:e}],u,null,!0).dataId}},t.prototype.runWebGLProgram=function(e,r,i,a,s){var u=this;s===void 0&&(s=!1);var l=this.makeTensorInfo(e.outputShape,i),d=this.texData.get(l.dataId);if(e.packedOutput&&(d.isPacked=!0),e.outPackingScheme===yr.DENSE){var A=it(e.outputShape);d.texShape=A.map(function(Ae){return 2*Ae})}if(e.outTexUsage!=null&&(d.usage=e.outTexUsage),ce(l.shape)===0)return d.values=G(l.dtype,0),l;var I=[],O=r.map(function(Ae){if(Ae.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");var me=u.texData.get(Ae.dataId);if(me.texture==null){if(!e.packedInputs&&ce(Ae.shape)<=P().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:Ae.shape,texData:null,isUniform:!0,uniformValues:me.values};e.packedInputs&&(me.isPacked=!0,me.shape=Ae.shape)}else if(!!me.isPacked!=!!e.packedInputs)Ae=me.isPacked?u.unpackTensor(Ae):u.packTensor(Ae),I.push(Ae),me=u.texData.get(Ae.dataId);else if(me.isPacked&&!Zn(me.shape,Ae.shape)){var Ce=Ae,Oe=Ae.shape;Ae.shape=me.shape,Ae=u.packedReshape(Ae,Oe),I.push(Ae),me=u.texData.get(Ae.dataId),Ce.shape=Oe}return u.uploadToGPU(Ae.dataId),{shape:Ae.shape,texData:me,isUniform:!1}});this.uploadToGPU(l.dataId);var z,re={shape:l.shape,texData:d,isUniform:!1},oe=function(Ae,me,Ce){var Oe="";me.concat(Ce).forEach(function(Ne){var Fe=Ne.texData!=null&&Ne.texData.slice!=null&&Ne.texData.slice.flatOffset>0,Ze=Ne.isUniform?"uniform":Ne.texData.texShape;Oe+=Ne.shape+"_"+Ze+"_"+Fe});var Le=Ae.userCode,Ue=Ae.constructor.name;return Ue+="_"+Oe+"_"+Le}(e,O,re),ae=this.getAndSaveBinary(oe,function(){return function(Ae,me,Ce,Oe){var Le=me.userCode,Ue=Ce.map(function(vt,At){var ft={logicalShape:vt.shape,texShape:vt.isUniform?null:vt.texData.texShape,isUniform:vt.isUniform,isPacked:!vt.isUniform&&vt.texData.isPacked,flatOffset:null};return vt.texData!=null&&vt.texData.slice!=null&&vt.texData.slice.flatOffset>0&&(ft.flatOffset=vt.texData.slice.flatOffset),{name:me.variableNames[At],shapeInfo:ft}}),Ne=Ue.map(function(vt){return vt.shapeInfo}),Fe={logicalShape:Oe.shape,texShape:Oe.texData.texShape,isUniform:!1,isPacked:Oe.texData.isPacked,flatOffset:null},Ze=wp(Ue,Fe,Le,me.packedInputs),Ke=Ae.createProgram(Ze),et=null,tt=Ae.getUniformLocation(Ke,"NAN",!1);P().getNumber("WEBGL_VERSION")===1&&(et=Ae.getUniformLocation(Ke,"INFINITY",!1));for(var ct={},bt=0;bt0)return 32}return 16})),this.floatPrecisionValue},t.prototype.epsilon=function(){return this.floatPrecision()===32?1e-7:1e-4},t.prototype.uploadToGPU=function(e){var r,i=this.texData.get(e),a=i.shape,s=i.dtype,u=i.values,l=i.texture,d=i.usage,A=i.isPacked;if(l==null){var I,O=this.activeTimers!=null;O&&(I=qe());var z=i.texShape;if(z==null&&(z=ln(a,A),i.texShape=z),u!=null){var re=yn(a),oe=void 0,ae=z[1],se=z[0],be=u instanceof Uint8Array;A?(ae=(r=Wt(z[0],z[1]))[0],se=r[1],oe=new qp(re,[se,ae],be)):oe=new $p(re,[se,ae],be);var Ae=this.makeTensorInfo([se,ae],s);this.texData.get(Ae.dataId).usage=be?Ge.PIXELS:Ge.UPLOAD,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(Ae.dataId),ae,se,u);var me=this.runWebGLProgram(oe,[Ae],s,null,!0),Ce=this.texData.get(me.dataId);i.texture=Ce.texture,i.texShape=Ce.texShape,i.isPacked=Ce.isPacked,i.usage=Ce.usage,this.disposeData(Ae.dataId),this.texData.delete(me.dataId),i.values=null,O&&(this.uploadWaitMs+=qe()-I)}else{var Oe=this.acquireTexture(z,d,s,A);i.texture=Oe}}},t.prototype.convertAndCacheOnCPU=function(e,r){var i=this.texData.get(e),a=i.dtype;return this.releaseGPUData(e),r!=null&&(i.values=function(s,u){if(u==="float32"||u==="complex64")return s;if(u==="int32"||u==="bool"){for(var l=u==="int32"?new Int32Array(s.length):new Uint8Array(s.length),d=0;d1024*this.numMBBeforeWarning*1024){var s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn("High memory usage in GPU: "+s+" MB, most likely due to a memory leak")}return this.textureManager.acquireTexture(e,r,a)},t.prototype.computeBytes=function(e,r){return e[0]*e[1]*$(r)},t}(Cl);tn()&&We.registerBackend("webgl",function(){return new xc},2);var Kh=Ve({square_:function(n){var t=je(n,"x","square"),e=[t];return We.runKernelFunc(function(r,i){return i([t]),r.square(t)},{x:t},null,"Square",{},e,[])}}),lo="SquaredDifference",Ec=Ve({squaredDifference_:function(n,t){var e,r=je(n,"a","squaredDifference"),i=je(t,"b","squaredDifference");e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape);var a={a:r,b:i},s=[r,i];return We.runKernelFunc(function(u,l){var d=u.squaredDifference(r,i);return l([r,i]),d},a,function(u,l){var d=l[0],A=l[1],I=kt(2);return{a:function(){return u.mul(d.sub(A).mul(I))},b:function(){return u.mul(A.sub(d).mul(I))}}},lo,{},s,[])}}),Zh=Ve({abs_:function(n){var t=je(n,"x","abs");return t.dtype==="complex64"?We.runKernelFunc(function(e){return e.complexAbs(t)},{$x:t}):We.runKernelFunc(function(e,r){var i=e.abs(t);return r([t]),i},{x:t},function(e,r){var i=r[0];return{x:function(){return e.mul(i.toFloat().step(-1))}}},"Abs")}}),Jh=Ve({acos_:function(n){var t=je(n,"x","acos");return We.runKernelFunc(function(e,r){var i=e.acos(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.divStrict(kt(1).sub(i.toFloat().square()).sqrt()).neg()}}})}}),Yh=Ve({acosh_:function(n){var t=je(n,"x","acosh");return We.runKernelFunc(function(e,r){var i=e.acosh(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.divStrict(i.toFloat().square().sub(1).sqrt())}}})}}),$h=Ve({asin_:function(n){var t=je(n,"x","asin");return We.runKernelFunc(function(e,r){var i=e.asin(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.divStrict(kt(1).sub(i.toFloat().square()).sqrt())}}})}}),qh=Ve({asinh_:function(n){var t=je(n,"x","asinh");return We.runKernelFunc(function(e,r){var i=e.asinh(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.divStrict(kt(1).add(i.toFloat().square()).sqrt())}}})}}),ev=Ve({atan_:function(n){var t=je(n,"x","atan");return We.runKernelFunc(function(e,r){var i=e.atan(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(i.toFloat().square().add(1))}}})}}),tv=Ve({atanh_:function(n){var t=je(n,"x","atanh");return We.runKernelFunc(function(e,r){var i=e.atanh(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(kt(1).sub(i.toFloat().square()))}}})}}),rv=Ve({ceil_:function(n){var t=je(n,"x","ceil");return We.runKernelFunc(function(e){return e.ceil(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),Us=Ve({clipByValue_:function(n,t,e){var r=je(n,"x","clipByValue");q(t<=e,function(){return"Error in clip: min ("+t+") must be less than or equal to max ("+e+")."});var i=[r],a={min:t,max:e};return We.runKernelFunc(function(s,u){var l=s.clip(r,t,e);return u([r]),l},{x:r},function(s,u){var l=u[0];return{x:function(){return s.where(l.greaterEqual(t).logicalAnd(l.lessEqual(e)),Lr(s))}}},"ClipByValue",a,i)}}),nv=Ve({cos_:function(n){var t=je(n,"x","cos"),e=[t];return We.runKernelFunc(function(r,i){var a=r.cos(t);return i([t]),a},{x:t},function(r,i){var a=i[0];return{x:function(){return a.toFloat().sin().neg().mul(r)}}},"Cos",{},e)}}),iv=Ve({cosh_:function(n){var t=je(n,"x","cosh");return We.runKernelFunc(function(e,r){var i=e.cosh(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return i.toFloat().sinh().mulStrict(e)}}})}}),av=Ve({erf_:function(n){var t=je(n,"x","erf");return q(t.dtype==="int32"||t.dtype==="float32",function(){return"Input dtype must be `int32` or `float32`."}),t.dtype==="int32"&&(t=t.toFloat()),We.runKernelFunc(function(e,r){var i=e.erf(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.mul(i.square().neg().exp().mul(2/Math.sqrt(Math.PI)))}}})}}),Ws=Ve({exp_:function(n){var t=je(n,"x","exp");return We.runKernelFunc(function(e,r){var i=e.exp(t);return r([i]),i},{x:t},function(e,r){return{x:function(){return e.mulStrict(r[0])}}},"Exp",{},[],[!0])}}),ov=Ve({expm1_:function(n){var t=je(n,"x","expm1");return We.runKernelFunc(function(e,r){var i=e.expm1(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.mul(i.exp())}}})}}),sv=Ve({floor_:function(n){var t=je(n,"x","floor");return We.runKernelFunc(function(e){return e.floor(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),uv=Ve({log_:function(n){var t=je(n,"x","log"),e=[t];return We.runKernelFunc(function(r,i){var a=r.log(t);return i([t]),a},{x:t},function(r,i){var a=i[0];return{x:function(){return r.div(a.toFloat())}}},"Log",{},e)}}),lv=Ve({log1p_:function(n){var t=je(n,"x","log1p");return We.runKernelFunc(function(e,r){var i=e.log1p(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(i.add(1))}}})}}),cv=Ve({logSigmoid_:function(n){var t=je(n,"x","logSigmoid");return We.runKernelFunc(function(e,r){var i=e.softplus(t.neg()).neg();return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.mul(i.neg().sigmoid())}}})}}),Lo=Ve({neg_:function(n){var t=je(n,"x","neg"),e=[t];return We.runKernelFunc(function(r){return r.neg(t)},{x:t},function(r){return{x:function(){return r.neg()}}},"Neg",{},e)}}),fv=Ve({reciprocal_:function(n){var t=je(n,"x","reciprocal");return We.runKernelFunc(function(e,r){var i=e.reciprocal(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(i.square().neg())}}})}}),dv=Ve({round_:function(n){var t=je(n,"x","round");return We.runKernelFunc(function(e){return e.round(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),Cc=Ve({rsqrt_:function(n){var t=je(n,"x","rsqrt"),e=[t];return We.runKernelFunc(function(r,i){var a=r.rsqrt(t);return i([t]),a},{x:t},function(r,i){var a=i[0];return{x:function(){return r.div(a.pow(1.5).mul(2)).neg()}}},"Rsqrt",{},e)}}),Sc=Ve({sigmoid_:function(n){var t=je(n,"x","sigmoid");return We.runKernelFunc(function(e,r){var i=e.sigmoid(t);return r([i]),i},{x:t},function(e,r){var i=r[0];return{x:function(){return e.mul(i.mul(kt(1).sub(i)))}}},"Sigmoid")}}),pv=Ve({sign_:function(n){var t=je(n,"x","sign");return We.runKernelFunc(function(e){return e.sign(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),hv=Ve({isNaN_:function(n){var t=je(n,"x","isNaN");return We.runKernelFunc(function(e){return e.isNaN(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),vv=Ve({isInf_:function(n){var t=je(n,"x","isInf");return We.runKernelFunc(function(e){return e.isInf(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),mv=Ve({isFinite_:function(n){var t=je(n,"x","isFinite");return We.runKernelFunc(function(e){return e.isFinite(t)},{$x:t},function(e){return{$x:function(){return Lr(e)}}})}}),gv=Ve({sin_:function(n){var t=je(n,"x","sin"),e=[t];return We.runKernelFunc(function(r,i){var a=r.sin(t);return i([t]),a},{x:t},function(r,i){var a=i[0];return{x:function(){return a.toFloat().cos().mul(r)}}},"Sin",{},e)}}),yv=Ve({sinh_:function(n){var t=je(n,"x","sinh");return We.runKernelFunc(function(e,r){var i=e.sinh(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return i.toFloat().cosh().mulStrict(e)}}})}}),bv=Ve({softplus_:function(n){var t=je(n,"x","softplus");return We.runKernelFunc(function(e,r){var i=e.softplus(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.mul(i.sigmoid())}}})}}),wv=Ve({sqrt_:function(n){var t=je(n,"x","sqrt");return We.runKernelFunc(function(e,r){var i=e.sqrt(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(i.toFloat().sqrt().mul(2))}}})}}),Av=Ve({step_:function(n,t){t===void 0&&(t=0);var e=je(n,"x","step");return We.runKernelFunc(function(r){return r.step(e,t)},{$x:e},function(r){return{$x:function(){return Lr(r)}}})}}),xv=Ve({tan_:function(n){var t=je(n,"x","tan");return We.runKernelFunc(function(e,r){var i=e.tan(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){return e.div(i.cos().square())}}})}}),Ev=Ve({tanh_:function(n){var t=je(n,"x","tanh");return We.runKernelFunc(function(e,r){var i=e.tanh(t);return r([i]),i},{x:t},function(e,r){var i=r[0];return{x:function(){return kt(1).sub(i.square()).mulStrict(e)}}},"Tanh",{},null,[!0])}});function Ic(n,t,e,r,i,a){var s,u,l=je(n,"x","batchNorm"),d=je(t,"mean","batchNorm"),A=je(e,"variance","batchNorm");return i!=null&&(s=je(i,"scale","batchNorm")),r!=null&&(u=je(r,"offset","batchNorm")),q(l.rank===2,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+l.rank+"."}),q(d.rank===2||d.rank===1,function(){return"Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank "+d.rank+"."}),q(A.rank===2||A.rank===1,function(){return"Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank "+A.rank+"."}),s!=null&&q(s.rank===2||s.rank===1,function(){return"Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank "+s.rank+"."}),u!=null&&q(u.rank===2||u.rank===1,function(){return"Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank "+u.rank+"."}),co(l,d,A,u,s,a)}function Tc(n,t,e,r,i,a){var s,u,l=je(n,"x","batchNorm"),d=je(t,"mean","batchNorm"),A=je(e,"variance","batchNorm");return i!=null&&(s=je(i,"scale","batchNorm")),r!=null&&(u=je(r,"offset","batchNorm")),q(l.rank===3,function(){return"Error in batchNorm3D: x must be rank 3 but got rank "+l.rank+"."}),q(d.rank===3||d.rank===1,function(){return"Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank "+d.rank+"."}),q(A.rank===3||A.rank===1,function(){return"Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank "+A.rank+"."}),s!=null&&q(s.rank===3||s.rank===1,function(){return"Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank "+s.rank+"."}),u!=null&&q(u.rank===3||u.rank===1,function(){return"Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank "+u.rank+"."}),co(l,d,A,u,s,a)}function Rc(n,t,e,r,i,a){var s,u,l=je(n,"x","batchNorm"),d=je(t,"mean","batchNorm"),A=je(e,"variance","batchNorm");return i!=null&&(s=je(i,"scale","batchNorm")),r!=null&&(u=je(r,"offset","batchNorm")),q(l.rank===4,function(){return"Error in batchNorm4D: x must be rank 4 but got rank "+l.rank+"."}),q(d.rank===4||d.rank===1,function(){return"Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank "+d.rank+"."}),q(A.rank===4||A.rank===1,function(){return"Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank "+A.rank+"."}),s!=null&&q(s.rank===4||s.rank===1,function(){return"Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank "+s.rank+"."}),u!=null&&q(u.rank===4||u.rank===1,function(){return"Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank "+u.rank+"."}),co(l,d,A,u,s,a)}function co(n,t,e,r,i,a){a==null&&(a=.001);var s,u,l,d=je(n,"x","batchNorm"),A=je(t,"mean","batchNorm"),I=je(e,"variance","batchNorm");i!=null&&(s=je(i,"scale","batchNorm")),r!=null&&(u=je(r,"offset","batchNorm")),q(A.rank===I.rank,function(){return"Batch normalization gradient requires mean and variance to have equal ranks."}),q(u==null||A.rank===u.rank,function(){return"Batch normalization gradient requires mean and offset to have equal ranks."}),q(s==null||A.rank===s.rank,function(){return"Batch normalization gradient requires mean and scale to have equal ranks."}),l=d.rank===0||d.rank===1?d.as4D(1,1,1,d.size):d.rank===2?d.as4D(1,1,d.shape[0],d.shape[1]):d.rank===3?d.as4D(1,d.shape[0],d.shape[1],d.shape[2]):d;var O=[d,A,I,s];return We.runKernelFunc(function(z,re){var oe=z.batchNormalization(l,Uo(A),Uo(I),a,Uo(s),Uo(u));return re([d,A,I,s]),oe},{x:d,mean:A,variance:I,scale:s,offset:u},function(z,re){var oe=re,ae=oe[0],se=oe[1],be=oe[2],Ae=oe[3],me=Ae==null?kt(1):Ae,Ce=kn(se.shape,l.shape),Oe=[];if(se.rank===1){for(var Le=0;Le0&&(u=u.sum(l)),u.reshape(r.shape)},b:function(){var u=s,l=kn(i.shape,a);return l.length>0&&(u=u.sum(l)),u.reshape(i.shape)}}},"Add")}}),Pv=Ve({addN_:function(n){q(Array.isArray(n),function(){return"The argument passed to tf.addN() must be a list of tensors"}),q(n.length>=1,function(){return"Must pass at least one tensor to tf.addN(), but got "+n.length});var t=n.map(function(i,a){return je(i,"tensors"+a,"addN")}),e=t[0];t.forEach(function(i){if(i.dtype!==e.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(function(i){if(!fe(i.shape,e.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});var r=t;return We.runKernelFunc(function(i){return i.addN(t)},r,function(i){var a={};return t.forEach(function(s,u){a[u]=function(){return i.clone()}}),a},"AddN")}}),Bv=Ve({addStrict_:function(n,t){var e=je(n,"a","addStrict"),r=je(t,"b","addStrict");return pe(e.shape,r.shape,"Error in addStrict: "),e.add(r)}}),Nv=Ve({atan2_:function(n,t){var e,r=je(n,"a","atan2"),i=je(t,"b","atan2");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s,u){var l=s.atan2(r,i);return u([r,i]),l},{$a:r,$b:i},function(s,u){var l=u[0],d=u[1];return{$a:function(){var A=Tr(l.square(),d.square()),I=s.mul(d.div(A)),O=kn(l.shape,a);return O.length>0&&(I=I.sum(O)),I.reshape(l.shape)},$b:function(){var A=Tr(l.square(),d.square()),I=Lo(s.mul(l.div(A))),O=kn(d.shape,a);return O.length>0&&(I=I.sum(O)),I.reshape(d.shape)}}})}}),ki=Ve({div_:function(n,t){var e,r=je(n,"a","div"),i=je(t,"b","div");if(e=Jt(r,i),r=e[0],i=e[1],r.dtype==="int32"&&i.dtype==="int32")return Dc(r,i);var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s,u){var l=s.realDivide(r,i);return u([r,i]),l},{a:r,b:i},function(s,u){var l=u[0],d=u[1];return{a:function(){var A=s.div(d.toFloat()),I=kn(l.shape,a);return I.length>0?A.sum(I).reshape(l.shape):A},b:function(){var A=s.mul(l.toFloat()),I=kn(d.shape,a);I.length>0&&(A=A.sum(I).reshape(d.shape));var O=d.square();return A.div(O.toFloat()).neg()}}},"Div")}}),Mv=Ve({divNoNan_:function(n,t){var e,r=je(n,"a","div"),i=je(t,"b","div");r=(e=Jt(r,i))[0],i=e[1];var a=ki(r,i),s=Lr(a),u=i.equal(s);return Ia(u,s,a)}}),_v=Ve({divStrict_:function(n,t){var e=je(n,"a","div"),r=je(t,"b","div");return pe(e.shape,r.shape,"Error in divideStrict: "),e.div(r)}}),Dc=Ve({floorDiv_:function(n,t){var e,r=je(n,"a","floorDiv"),i=je(t,"b","floorDiv");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s,u){var l=s.floorDiv(r,i);return u([r,i]),l},{a:r,b:i},function(s,u){var l=u[0],d=u[1];return{a:function(){var A=s.div(d.toFloat()),I=kn(l.shape,a);return I.length>0?A.sum(I).reshape(l.shape):A},b:function(){var A=s.mul(l.toFloat()),I=kn(d.shape,a);I.length>0&&(A=A.sum(I).reshape(d.shape));var O=d.square();return A.div(O.toFloat()).neg()}}},"FloorDiv")}}),zs=Ve({maximum_:function(n,t){var e,r=je(n,"a","maximum"),i=je(t,"b","maximum");return e=Jt(r,i),r=e[0],i=e[1],r.dtype==="bool"&&(r=r.toInt(),i=i.toInt()),Ir(r.shape,i.shape),We.runKernelFunc(function(a,s){var u=a.maximum(r,i);return s([r,i]),u},{a:r,b:i},function(a,s){var u=s[0],l=s[1];return{a:function(){return a.mul(u.greaterEqual(l).toFloat())},b:function(){return a.mul(u.less(l).toFloat())}}},"Maximum")}}),Fv=Ve({maximumStrict_:function(n,t){var e=je(n,"a","maximumStrict"),r=je(t,"b","maximumStrict");return pe(e.shape,r.shape,"Error in maximumStrict: "),e.maximum(r)}}),Pc=Ve({minimum_:function(n,t){var e,r=je(n,"a","minimum"),i=je(t,"b","minimum");return e=Jt(r,i),r=e[0],i=e[1],r.dtype==="bool"&&(r=r.toInt(),i=i.toInt()),Ir(r.shape,i.shape),We.runKernelFunc(function(a,s){var u=a.minimum(r,i);return s([r,i]),u},{a:r,b:i},function(a,s){var u=s[0],l=s[1];return{a:function(){return a.mul(u.lessEqual(l).toFloat())},b:function(){return a.mul(u.greater(l).toFloat())}}},"Minimum")}}),Lv=Ve({minimumStrict_:function(n,t){var e=je(n,"a","minimumStrict"),r=je(t,"b","minimumStrict");return pe(e.shape,r.shape,"Error in minimumStrict: "),e.minimum(r)}}),Uv=Ve({mod_:function(n,t){var e,r=je(n,"a","mod"),i=je(t,"b","mod");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s,u){var l=s.mod(r,i);return u([r,i]),l},{$a:r,$b:i},function(s,u){var l=u[0],d=u[1];return{$a:function(){var A=kn(l.shape,a);return A.length>0?s.sum(A).reshape(l.shape):s},$b:function(){var A=s.mul(l.div(d).floor().neg()),I=kn(d.shape,a);return I.length>0?A.sum(I).reshape(d.shape):A}}})}}),Wv=Ve({modStrict_:function(n,t){var e=je(n,"a","modStrict"),r=je(t,"b","modStrict");return pe(e.shape,r.shape,"Error in modStrict: "),e.mod(r)}}),ei=Ve({mul_:function(n,t){var e,r=je(n,"a","mul"),i=je(t,"b","mul");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s,u){var l=s.multiply(r,i);return u([r,i]),l},{a:r,b:i},function(s,u){var l=u[0],d=u[1];return{a:function(){var A=s.mul(d.toFloat()),I=kn(l.shape,a);return I.length>0?A.sum(I).reshape(l.shape):A},b:function(){var A=s.mul(l.toFloat()),I=kn(d.shape,a);return I.length>0?A.sum(I).reshape(d.shape):A}}},"Mul")}}),zv=Ve({mulStrict_:function(n,t){var e=je(n,"a","mul"),r=je(t,"b","mul");return pe(e.shape,r.shape,"Error in multiplyStrict: "),e.mul(r)}}),Vo=Ve({pow_:function(n,t){var e,r=je(n,"base","pow"),i=je(t,"exp","pow");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape),s=[r,i];return We.runKernelFunc(function(u,l){var d=u.pow(r,i);return l([r,i,d]),d},{a:r,b:i},function(u,l){var d=l[0],A=l[1],I=l[2];return{a:function(){var O=A.toFloat(),z=u.mul(O.mul(d.pow(O.sub(kt(1))))),re=kn(d.shape,a);return re.length>0&&(z=z.sum(re)),z.reshape(d.shape)},b:function(){var O=d.greater(0),z=d.log().where(O,Lr(d)),re=u.mul(I.mul(z)),oe=kn(A.shape,a);return oe.length>0&&(re=re.sum(oe)),re.reshape(A.shape)}}},"Pow",{},s,[!0])}}),Vv=Ve({powStrict_:function(n,t){return pe(n.shape,t.shape,"Error in powStrict: "),n.pow(t)}}),Hv=Ve({squaredDifferenceStrict_:function(n,t){var e=je(n,"a","squaredDifferenceStrict"),r=je(t,"b","squaredDifferenceStrict");return pe(e.shape,r.shape,"Error in squaredDifferenceStrict: "),e.squaredDifference(r)}}),Nn=Ve({sub_:function(n,t){var e,r=je(n,"a","sub"),i=je(t,"b","sub");e=Jt(r,i),r=e[0],i=e[1];var a=Ir(r.shape,i.shape);return We.runKernelFunc(function(s){return s.subtract(r,i)},{a:r,b:i},function(s){return{a:function(){var u=s,l=kn(r.shape,a);return l.length>0&&(u=u.sum(l)),u.reshape(r.shape)},b:function(){var u=s,l=kn(i.shape,a);return l.length>0&&(u=u.sum(l)),u.neg().reshape(i.shape)}}},"Sub")}}),Gv=Ve({subStrict_:function(n,t){var e=je(n,"a","subStrict"),r=je(t,"b","subStrict");return pe(e.shape,r.shape,"Error in subStrict: "),e.sub(r)}}),Bc=Ve({equal_:function(n,t){var e,r=je(n,"a","equal"),i=je(t,"b","equal");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a){return a.equal(r,i)},{$a:r,$b:i})}}),Qv=Ve({equalStrict_:function(n,t){var e=je(n,"a","equalStrict"),r=je(t,"b","equalStrict");return pe(e.shape,r.shape,"Error in equalStrict: "),e.equal(r)}}),Xv=Ve({greater_:function(n,t){var e,r=je(n,"a","greater"),i=je(t,"b","greater");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a){return a.greater(r,i)},{a:r,b:i},null,"Greater")}}),Nc=Ve({greaterEqual_:function(n,t){var e,r=je(n,"a","greaterEqual"),i=je(t,"b","greaterEqual");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a,s){var u=a.greaterEqual(r,i);return s([r,i]),u},{a:r,b:i},function(a,s){var u=s[0],l=s[1];return{a:function(){return Lr(u)},b:function(){return Lr(l)}}},"GreaterEqual")}}),Kv=Ve({greaterEqualStrict_:function(n,t){var e=je(n,"a","greaterEqualStrict"),r=je(t,"b","greaterEqualStrict");return pe(e.shape,r.shape,"Error in greaterEqualStrict: "),e.greaterEqual(r)}}),Zv=Ve({greaterStrict_:function(n,t){var e=je(n,"a","greaterStrict"),r=je(t,"b","greaterStrict");return pe(e.shape,r.shape,"Error in greaterStrict: "),e.greater(r)}}),Jv=Ve({less_:function(n,t){var e,r=je(n,"a","less"),i=je(t,"b","less");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a){return a.less(r,i)},{a:r,b:i},null,"Less")}}),Yv=Ve({lessEqual_:function(n,t){var e,r=je(n,"a","lessEqual"),i=je(t,"b","lessEqual");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a,s){var u=a.lessEqual(r,i);return s([r,i]),u},{a:r,b:i},null,"LessEqual")}}),$v=Ve({lessEqualStrict_:function(n,t){var e=je(n,"a","lessEqualStrict"),r=je(t,"b","lessEqualStrict");return pe(e.shape,r.shape,"Error in lessEqualStrict: "),e.lessEqual(r)}}),qv=Ve({lessStrict_:function(n,t){var e=je(n,"a","lessStrict"),r=je(t,"b","lessStrict");return pe(e.shape,r.shape,"Error in lessStrict: "),e.less(r)}}),em=Ve({notEqual_:function(n,t){var e,r=je(n,"a","notEqual"),i=je(t,"b","notEqual");return e=Jt(r,i),r=e[0],i=e[1],Ir(r.shape,i.shape),We.runKernelFunc(function(a){return a.notEqual(r,i)},{a:r,b:i},null,"NotEqual")}}),tm=Ve({notEqualStrict_:function(n,t){var e=je(n,"a","notEqualStrict"),r=je(t,"b","notEqualStrict");return pe(e.shape,r.shape,"Error in notEqualStrict: "),e.notEqual(r)}});function Mc(n,t){for(var e=[],r=n;r0,function(){return"mask cannot be scalar"}),pe(u.slice(a,a+s),i.shape,"mask's shape must match the first K dimensions of tensor's shape,"),l=1,d=a;d=2&&s.rank>=2&&a.rank===s.rank,function(){return"Error in matMul: inputs must have the same rank of at least 2, got ranks "+a.rank+" and "+s.rank+"."}),q(fe(I,O),function(){return"Error in matMul: outer dimensions ("+I+") and ("+O+") of Tensors with shapes "+a.shape+" and "+s.shape+" must match."}),q(u===l,function(){return"Error in matMul: inner shapes ("+u+") and ("+l+") of Tensors with shapes "+a.shape+" and "+s.shape+" and transposeA="+e+" and transposeB="+r+" must match."});var oe=a.shape.slice(0,-2).concat([d,A]),ae=e?a.as3D(z,u,d):a.as3D(z,d,u),se=r?s.as3D(re,A,l):s.as3D(re,l,A),be={transposeA:e,transposeB:r};return We.runKernelFunc(function(Ae,me){var Ce=Ae.batchMatMul(ae,se,e,r);return me([ae,se]),Ce},{a:ae,b:se},function(Ae,me){var Ce=me,Oe=Ce[0],Le=Ce[1];return e||r?!e&&r?{a:function(){return Ae.matMul(Le,!1,!1)},b:function(){return Ae.matMul(Oe,!0,!1)}}:e&&!r?{a:function(){return Le.matMul(Ae,!1,!0)},b:function(){return Oe.matMul(Ae,!1,!1)}}:{a:function(){return Le.matMul(Ae,!0,!0)},b:function(){return Ae.matMul(Oe,!0,!0)}}:{a:function(){return Ae.matMul(Le,!1,!0)},b:function(){return Oe.matMul(Ae,!0,!1)}}},"BatchMatMul",be).reshape(oe)}}),sm=Ve({dot_:function(n,t){var e=je(n,"t1","dot"),r=je(t,"t2","dot");q(!(e.rank!==1&&e.rank!==2||r.rank!==1&&r.rank!==2),function(){return"Error in dot: inputs must all be rank 1 or 2, but got ranks "+e.rank+" and "+r.rank+"."});var i=e.rank===1?e.size:e.shape[1],a=r.rank===1?r.size:r.shape[0];return q(i===a,function(){return"Error in dot: inner dimensions of inputs must match, but got "+i+" and "+a+"."}),e.rank===1&&r.rank===1?e.as2D(1,-1).matMul(r.as2D(-1,1)).asScalar():e.rank===1&&r.rank===2?e.as2D(1,-1).matMul(r.as2D(r.shape[0],r.shape[1])).as1D():e.rank===2&&r.rank===1?e.matMul(r.as2D(-1,1)).as1D():e.matMul(r.as2D(r.shape[0],r.shape[1]))}}),um=Ve({outerProduct_:function(n,t){var e=je(n,"v1","outerProduct"),r=je(t,"v2","outerProduct");return q(e.rank===1&&r.rank===1,function(){return"Error in outerProduct: inputs must be rank 1, but got ranks "+e.rank+" and "+r.rank+"."}),e.as2D(-1,1).matMul(r.as2D(1,-1))}}),fo=Ve({reverse_:function(n,t){var e=je(n,"x","reverse");if(e.rank===0)return e.clone();var r=ye(t,e.shape);return We.runKernelFunc(function(i){return i.reverse(e,r)},{$x:e},function(i){return{$x:function(){return i.reverse(r)}}}).reshapeAs(e)}}),lm=Ve({reverse1d_:function(n){var t=je(n,"x","reverse");return q(t.rank===1,function(){return"Error in reverse1D: x must be rank 1 but got rank "+t.rank+"."}),fo(t,0)}}),cm=Ve({reverse2d_:function(n,t){var e=je(n,"x","reverse");return q(e.rank===2,function(){return"Error in reverse2D: x must be rank 2 but got rank "+e.rank+"."}),fo(e,t)}}),fm=Ve({reverse3d_:function(n,t){var e=je(n,"x","reverse");return q(e.rank===3,function(){return"Error in reverse3D: x must be rank 3 but got rank "+e.rank+"."}),fo(e,t)}}),dm=Ve({reverse4d_:function(n,t){var e=je(n,"x","reverse");return q(e.rank===4,function(){return"Error in reverse4D: x must be rank 4 but got rank "+e.rank+"."}),fo(e,t)}});function Hc(n,t,e,r,i,a){var s=je(n,"x","maxPool"),u=s,l=!1;s.rank===3&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),r==null&&(r=[1,1]),q(u.rank===4,function(){return"Error in maxPool: input must be rank 4 but got rank "+u.rank+"."}),q(si(e,r),function(){return"Error in maxPool: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+r+"'"}),a!=null&&q(ge(i),function(){return"Error in maxPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+i+"."});var d=Fa(u.shape,t,e,r,i,a);if(d.filterWidth===1&&d.filterHeight===1&&fe(d.inShape,d.outShape))return s.clone();var A=[u],I=We.runKernelFunc(function(O,z){var re=O.maxPool(u,d);return z([u,re]),re},{x:u},function(O,z){var re=z[0],oe=z[1];return{x:function(){return function(ae,se,be,Ae,me,Ce,Oe,Le){var Ue=je(ae,"dy","maxPoolBackprop"),Ne=je(se,"input","maxPoolBackprop"),Fe=je(be,"output","maxPoolBackprop");q(Ne.rank===Ue.rank,function(){return"Rank of input ("+Ne.rank+") does not match rank of dy ("+Ue.rank+")"}),Ce==null&&(Ce=[1,1]),q(si(me,Ce),function(){return"Error in maxPoolBackProp: Either strides or dilations must be 1. Got strides "+me+" and dilations '"+Ce+"'"}),q(Ue.rank===4,function(){return"Error in maxPoolBackprop: dy must be rank 4 but got rank "+Ue.rank+"."}),q(Ne.rank===4,function(){return"Error in maxPoolBackprop: input must be rank 4 but got rank "+Ne.rank+"."}),Le!=null&&q(ge(Oe),function(){return"Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode "+Le+" but got pad "+Oe+"."});var Ze=Fa(Ne.shape,Ae,me,Ce,Oe,Le);return We.runKernelFunc(function(Ke){return Ke.maxPoolBackprop(Ue,Ne,Fe,Ze)},{$dy:Ue,$input:Ne})}(O,re,oe,t,e,r,i)}}},"MaxPool",d,A);return l?I.as3D(I.shape[1],I.shape[2],I.shape[3]):I}function Gc(n,t,e,r,i,a){var s=je(n,"x","avgPool","float32");r==null&&(r=[1,1]),q(si(e,r),function(){return"Error in avgPool: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+r+"'"});var u=s,l=!1;s.rank===3&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),q(u.rank===4,function(){return"Error in avgPool: x must be rank 4 but got rank "+u.rank+"."}),a!=null&&q(ge(i),function(){return"Error in avgPool: pad must be an integer when using, dimRoundingMode "+a+" but got pad "+i+"."});var d=Fa(u.shape,t,e,r,i,a);if(d.filterWidth===1&&d.filterHeight===1&&fe(d.inShape,d.outShape))return s.clone();var A=We.runKernelFunc(function(I){return I.avgPool(u,d)},{x:u},function(I){return{x:function(){return function(O,z,re,oe,ae,se){var be=je(O,"dy","avgPoolBackprop"),Ae=je(z,"input","avgPoolBackprop");q(Ae.rank===be.rank,function(){return"Rank of input ("+Ae.rank+") does not match rank of dy ("+be.rank+")"}),ae==null&&(ae=[1,1]),q(si(oe,ae),function(){return"Error in avgPoolBackprop: Either strides or dilations must be 1. Got strides "+oe+" and dilations '"+ae+"'"});var me=Ae,Ce=be,Oe=!1;Ae.rank===3&&(Oe=!0,me=Ae.as4D(1,Ae.shape[0],Ae.shape[1],Ae.shape[2]),Ce=be.as4D(1,be.shape[0],be.shape[1],be.shape[2])),q(Ce.rank===4,function(){return"Error in avgPoolBackprop: dy must be rank 4 but got rank "+Ce.rank+"."}),q(me.rank===4,function(){return"Error in avgPoolBackprop: input must be rank 4 but got rank "+me.rank+"."});var Le=Fa(me.shape,re,oe,ae,se),Ue=We.runKernelFunc(function(Ne){return Ne.avgPoolBackprop(Ce,me,Le)},{dy4D:Ce,input4D:me});return Oe?Ue.as3D(Ue.shape[1],Ue.shape[2],Ue.shape[3]):Ue}(I,u,t,e,r,i)}}},"AvgPool",d);return A=A.cast(s.dtype),l?A.as3D(A.shape[1],A.shape[2],A.shape[3]):A}var Vn=Ve({maxPool_:function(n,t,e,r,i){return Hc(n,t,e,1,r,i)}}),po=Ve({avgPool_:function(n,t,e,r,i){return Gc(n,t,e,1,r,i)}}),pm=Ve({pool_:function(n,t,e,r,i,a){i==null&&(i=[1,1]),a==null&&(a=1),r===0&&(r="valid");var s=je(n,"x","maxPool"),u=s,l=!1;s.rank===3&&(l=!0,u=s.as4D(1,s.shape[0],s.shape[1],s.shape[2])),q(si(a,i),function(){return"Error in pool: Either strides or dilations must be 1. Got strides "+a+" and dilations '"+i+"'"});var d,A=Fa(u.shape,t,a,i,r),I=[A.dilationHeight,A.dilationWidth];d=r==="same"?function(me,Ce){var Oe=me.map(function(Ne,Fe){return Ne+(Ne-1)*(Ce[Fe]-1)}).map(function(Ne){return Ne-1}),Le=Oe.map(function(Ne){return Math.floor(Ne/2)}),Ue=Oe.map(function(Ne,Fe){return Ne-Le[Fe]});return Oe.map(function(Ne,Fe){return[Le[Fe],Ue[Fe]]})}([A.filterHeight,A.filterWidth],I):[[0,0],[0,0]];var O=I[0]===1&&I[1]===1,z=function(me,Ce,Oe){var Le=Oe.map(function(tt){return tt[0]}),Ue=Oe.map(function(tt){return tt[1]}),Ne=me.concat(Le,Ue),Fe=Ce.map(function(tt,ct){return(tt-Ne[ct]%tt)%tt}),Ze=Ue.map(function(tt,ct){return tt+Fe[ct]}),Ke=Ce.map(function(tt,ct){return[Le[ct],Ze[ct]]}),et=Ce.map(function(tt,ct){return[0,Fe[ct]]});return[Ke,et]}([A.inHeight,A.inWidth],I,d),re=z[0],oe=z[1],ae=O?r:"valid",se=O?u:hl(u,I,re),be=(e==="avg"?function(){return Gc(se,t,a,1,ae)}:function(){return Hc(se,t,a,1,ae)})(),Ae=O?be:fl(be,I,oe);return l?Ae.as3D(Ae.shape[1],Ae.shape[2],Ae.shape[3]):Ae}}),hm=Ve({maxPool3d_:function(n,t,e,r,i,a,s){a===void 0&&(a="NDHWC");var u=je(n,"x","maxPool3d"),l=u,d=!1;u.rank===4&&(d=!0,l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3])),s==null&&(s=[1,1,1]),q(l.rank===5,function(){return"Error in maxPool3d: x must be rank 5 but got rank "+l.rank+"."}),q(a==="NDHWC",function(){return"Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of "+a}),q(si(e,s),function(){return"Error in maxPool3d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+s+"'"}),i!=null&&q(ge(r),function(){return"Error in maxPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."});var A=io(l.shape,t,e,s,r,i,a),I=We.runKernelFunc(function(O,z){var re=O.maxPool3d(l,A);return z([l,re]),re},{x:l},function(O,z){var re=z[0],oe=z[1];return{x:function(){return function(ae,se,be,Ae,me,Ce,Oe,Le){var Ue=je(ae,"dy","maxPool3dBackprop"),Ne=je(se,"input","maxPool3dBackprop"),Fe=je(be,"output","maxPool3dBackprop"),Ze=Ue,Ke=Ne,et=Fe,tt=!1;Ne.rank===4&&(tt=!0,Ze=Ue.as5D(1,Ue.shape[0],Ue.shape[1],Ue.shape[2],Ue.shape[3]),Ke=Ne.as5D(1,Ne.shape[0],Ne.shape[1],Ne.shape[2],Ne.shape[3]),et=Fe.as5D(1,Fe.shape[0],Fe.shape[1],Fe.shape[2],Fe.shape[3])),q(Ze.rank===5,function(){return"Error in maxPool3dBackprop: dy must be rank 5 but got rank "+Ze.rank+"."}),q(Ke.rank===5,function(){return"Error in maxPool3dBackprop: input must be rank 5 but got rank "+Ke.rank+"."}),q(et.rank===5,function(){return"Error in maxPool3dBackprop: output must be rank 5 but got rank "+et.rank+"."}),Ce==null&&(Ce=[1,1,1]),q(si(me,Ce),function(){return"Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides "+me+" and dilations '"+Ce+"'"}),Le!=null&&q(ge(Oe),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+Le+" but got pad "+Oe+"."});var ct=io(Ke.shape,Ae,me,Ce,Oe,Le),bt=We.runKernelFunc(function(gt){return gt.maxPool3dBackprop(Ze,Ke,et,ct)},{dy5D:Ze,input5D:Ke});return tt?bt.as4D(bt.shape[1],bt.shape[2],bt.shape[3],bt.shape[4]):bt}(O,re,oe,t,e,s,r,i)}}});return d?I.as4D(I.shape[1],I.shape[2],I.shape[3],I.shape[4]):I}}),vm=Ve({avgPool3d_:function(n,t,e,r,i,a,s){a===void 0&&(a="NDHWC");var u=je(n,"x","avgPool3d","float32"),l=u,d=!1;u.rank===4&&(d=!0,l=u.as5D(1,u.shape[0],u.shape[1],u.shape[2],u.shape[3])),s==null&&(s=[1,1,1]),q(l.rank===5,function(){return"Error in avgPool3d: x must be rank 5 but got rank "+l.rank+"."}),q(a==="NDHWC",function(){return"Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of "+a}),q(si(e,s),function(){return"Error in avgPool3d: Either strides or dilations must be 1. Got strides "+e+" and dilations '"+s+"'"}),i!=null&&q(ge(r),function(){return"Error in avgPool3d: pad must be an integer when using, dimRoundingMode "+i+" but got pad "+r+"."});var A=io(l.shape,t,e,s,r,i,a),I=We.runKernelFunc(function(O){return O.avgPool3d(l,A)},{x:l},function(O){return{x:function(){return function(z,re,oe,ae,se,be,Ae){var me=je(z,"dy","avgPool3dBackprop"),Ce=je(re,"input","avgPool3dBackprop"),Oe=me,Le=Ce,Ue=!1;Ce.rank===4&&(Ue=!0,Oe=me.as5D(1,me.shape[0],me.shape[1],me.shape[2],me.shape[3]),Le=Ce.as5D(1,Ce.shape[0],Ce.shape[1],Ce.shape[2],Ce.shape[3])),q(Oe.rank===5,function(){return"Error in avgPool3dBackprop: dy must be rank 5 but got rank "+Oe.rank+"."}),q(Le.rank===5,function(){return"Error in avgPool3dBackprop: input must be rank 5 but got rank "+Le.rank+"."}),se==null&&(se=[1,1,1]),q(si(ae,se),function(){return"Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides "+ae+" and dilations '"+se+"'"}),Ae!=null&&q(ge(be),function(){return"Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode "+Ae+" but got pad "+be+"."});var Ne=io(Le.shape,oe,ae,se,be,Ae),Fe=We.runKernelFunc(function(Ze){return Ze.avgPool3dBackprop(Oe,Le,Ne)},{dy5D:Oe,input5D:Le});return Ue?Fe.as4D(Fe.shape[1],Fe.shape[2],Fe.shape[3],Fe.shape[4]):Fe}(O,l,t,e,s,r,i)}}});return I=I.cast(l.dtype),d?I.as4D(I.shape[1],I.shape[2],I.shape[3],I.shape[4]):I}}),Ni=Ve({slice_:function(n,t,e){var r,i,a=je(n,"x","slice");if(a.rank===0)throw new Error("Slicing scalar is not possible");(r=typeof t=="number"?[t].concat(new Array(a.rank-1).fill(0)):t.length=0?l:(q(l===-1,function(){return"Negative size values should be exactly -1 but got "+l+" for the slice() size at index "+d+"."}),a.shape[d]-r[d])}),wl(a,r,i);var s=a.shape,u={begin:r,size:i};return We.runKernelFunc(function(l){return l.slice(a,r,i)},{x:a},function(l){for(var d=[],A=0;A0&&(d=d.sum(A)),d.reshape(u.shape)}}},"Prelu")}}),wn=Ve({relu_:function(n){var t=je(n,"x","relu");return t.dtype==="bool"?t.toInt():We.runKernelFunc(function(e,r){var i=e.relu(t);return r([t]),i},{x:t},function(e,r){var i=r[0];return{x:function(){return e.mulStrict(i.step().toFloat())}}},"Relu")}}),Yc=Ve({relu6_:function(n){var t=je(n,"x","relu6");return t.dtype==="bool"?t.toInt():We.runKernelFunc(function(e,r){var i=e.relu6(t);return r([t]),i},{x:t},function(e,r){var i=r[0],a=i.lessEqual(6).mul(i.step());return{x:function(){return e.mulStrict(a.toFloat())}}},"Relu6")}}),Om=Ve({selu_:function(n){var t=je(n,"x","selu");return We.runKernelFunc(function(e,r){var i=e.selu(t);return r([t]),i},{$x:t},function(e,r){var i=r[0];return{$x:function(){var a=i.greater(kt(0)),s=kt(Fs),u=kt(Ls),l=e.mul(u),d=e.mul(s).mul(i.toFloat().exp());return Ia(a,l,d)}}})}}),ua=Ve({transpose_:function(n,t){var e=je(n,"x","transpose");if(t==null&&(t=e.shape.map(function(i,a){return a}).reverse()),q(e.rank===t.length,function(){return"Error in transpose: rank of input "+e.rank+" must match length of perm "+t+"."}),t.forEach(function(i){q(i>=0&&ii)throw new Error("'k' passed to topk() must be <= the last dimension ("+i+") but got "+t);var a=We.runKernelFunc(function(s){return s.topk(r,t,e)},{$x:r});return{values:a[0],indices:a[1]}}}),Mm=Ve({scatterND_:function(n,t,e){var r=je(n,"indices","scatterND","int32"),i=je(t,"updates","scatterND");return bl(i,r,e),We.runKernelFunc(function(a){return a.scatterND(r,i,e)},{indices:r,updates:i},null,"ScatterNd",{shape:e})}}),Xs=Ve({fft_:function(n){q(n.dtype==="complex64",function(){return"The dtype for tf.spectral.fft() must be complex64 but got "+n.dtype+"."});var t=n.shape[n.shape.length-1],e=n.size/t,r=n.as2D(e,t);return We.runKernelFunc(function(i){return i.fft(r)},{input:n}).reshape(n.shape)}}),Xo=Ve({ifft_:function(n){q(n.dtype==="complex64",function(){return"The dtype for tf.spectral.ifft() must be complex64 but got "+n.dtype+"."});var t=n.shape[n.shape.length-1],e=n.size/t,r=n.as2D(e,t);return We.runKernelFunc(function(i){return i.ifft(r)},{input:n}).reshape(n.shape)}}),Ks=Ve({rfft_:function(n,t){q(n.dtype==="float32",function(){return"The dtype for rfft() must be real value but got "+n.dtype});var e,r=n.shape[n.shape.length-1],i=n.size/r;if(t!=null&&tr){var u=n.shape.map(function(se){return se});u[n.shape.length-1]=t-r,e=n.concat(pn(u),n.shape.length-1),r=t}else e=n;var l=e.zerosLike(),d=Cn(e,l).as2D(i,r),A=Xs(d),I=Math.floor(r/2)+1,O=$n(A),z=vi(A),re=O.split([I,r-I],O.shape.length-1),oe=z.split([I,r-I],z.shape.length-1),ae=e.shape.slice();return ae[e.shape.length-1]=I,Cn(re[0],oe[0]).reshape(ae)}}),qc=Ve({irfft_:function(n){var t=n.shape[n.shape.length-1],e=n.size/t;if(t<=2){var r=n.as2D(e,t),i=Xo(r);return $n(i)}var a=[e,2*(t-1)],s=$n(n).as2D(e,t),u=vi(n).as2D(e,t),l=s.slice([0,1],[e,t-2]).reverse(1),d=u.slice([0,1],[e,t-2]).reverse(1).mul(kt(-1)),A=s.concat(l,1),I=u.concat(d,1);return r=Cn(A,I).as2D(a[0],a[1]),i=Xo(r),$n(i)}}),_m=Object.freeze({fft:Xs,ifft:Xo,rfft:Ks,irfft:qc}),Fm=Ve({sparseToDense_:function(n,t,e,r){r===void 0&&(r=0);var i=je(n,"sparseIndices","sparseToDense","int32"),a=je(t,"sparseValues","sparseToDense"),s=je(r,"defaultValue","sparseToDense",a.dtype);return function(u,l,d,A){if(u.dtype!=="int32")throw new Error("tf.sparseToDense() expects the indices to be int32 type, but the dtype was "+u.dtype+".");if(u.rank>2)throw new Error("sparseIndices should be a scalar, vector, or matrix, but got shape "+u.shape+".");var I=u.rank>0?u.shape[0]:1,O=u.rank>1?u.shape[1]:1;if(d.length!==O)throw new Error("outputShape has incorrect number of elements:, "+d.length+", should be: "+O+".");var z=l.size;if(l.rank!==0&&(l.rank!==1||z!==I))throw new Error("sparseValues has incorrect shape "+l.shape+", should be [] or ["+I+"]");if(l.dtype!==A.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}(i,a,e,s),We.runKernelFunc(function(u){return u.sparseToDense(i,a,e,s)},{$sparseIndices:i,$sparseValues:a,$defaultValue:s})}}),Lm=Ve({gatherND_:function(n,t){var e=je(t,"indices","gatherND","int32"),r=je(n,"x","gatherND");return We.runKernelFunc(function(i){return i.gatherND(r,e)},{x:r,indices:e},null,"GatherNd")}}),Um=Ve({diag_:function(n){var t=je(n,"x","diag").flatten(),e=n.shape.concat(n.shape);return We.runKernelFunc(function(r){return r.diag(t)},{$x:t}).reshape(e)}}),Wm=Ve({dropout_:function(n,t,e,r){var i=je(n,"x","dropout");if(q(i.dtype==="float32",function(){return"x has to be a floating point tensor since it's going to be scaled, but got a "+i.dtype+" tensor instead."}),q(t>=0&&t<1,function(){return"rate must be a float in the range [0, 1), but got "+t+"."}),t===0)return n instanceof Ft?i.clone():i;var a=function(l,d){if(d==null)return l.shape.slice();if(fe(l.shape,d))return d;if(l.shape.length===d.length){for(var A=[],I=0;I1,function(){return"inTopK() expects the predictions to be of rank 2 or higher, but got "+r.rank}),q(r.rank-1===i.rank,function(){return"predictions rank should be 1 larger than targets rank, but got predictions rank "+r.rank+" and targets rank "+i.rank}),pe(r.shape.slice(0,r.shape.length-1),i.shape,"predictions's shape should be align with the targets' shape, except the last dimension."),a=r.shape[r.shape.length-1],q(e>0&&e<=a,function(){return"'k' passed to inTopK() must be > 0 && <= the predictions last dimension ("+a+"), but got "+e}),[4,r.data()];case 1:return s=se.sent(),[4,i.data()];case 2:for(u=se.sent(),l=[s.length/a,a],A=l[1],I=G("bool",d=l[0]),O=0;O1?u.div(kt(s)):u}if(e===ti.SUM_BY_NONZERO_WEIGHTS){if(i==null)return a.sum().div(kt(r.size));var l=i.mul(Ma(r.shape)).notEqual(kt(0)).sum().toFloat();return a.sum().div(l)}throw Error("Unknown reduction: "+e)}}),Gm=Ve({cosineDistance_:function(n,t,e,r,i){i===void 0&&(i=ti.SUM_BY_NONZERO_WEIGHTS);var a=je(n,"labels","cosineDistance"),s=je(t,"predictions","cosineDistance"),u=null;r!=null&&(u=je(r,"weights","cosineDistance")),pe(a.shape,s.shape,"Error in cosineDistance: ");var l=kt(1).sub(a.mul(s).sum(e,!0));return Ki(l,u,i)}}),Qm=Ve({hingeLoss_:function(n,t,e,r){r===void 0&&(r=ti.SUM_BY_NONZERO_WEIGHTS);var i=je(n,"labels","hingeLoss"),a=je(t,"predictions","hingeLoss"),s=null;e!=null&&(s=je(e,"weights","hingeLoss")),pe(i.shape,a.shape,"Error in hingeLoss: ");var u=kt(1);i=kt(2).mul(i).sub(u);var l=u.sub(i.mul(a)).relu();return Ki(l,s,r)}}),Xm=Ve({huberLoss_:function(n,t,e,r,i){r===void 0&&(r=1),i===void 0&&(i=ti.SUM_BY_NONZERO_WEIGHTS);var a=je(n,"labels","huberLoss"),s=je(t,"predictions","huberLoss"),u=null;e!=null&&(u=je(e,"weights","huberLoss")),pe(a.shape,s.shape,"Error in huberLoss: ");var l=kt(r),d=s.sub(a).abs(),A=Pc(d,l),I=d.sub(A),O=kt(.5).mul(A.square()).add(l.mul(I));return Ki(O,u,i)}}),Km=Ve({logLoss_:function(n,t,e,r,i){r===void 0&&(r=1e-7),i===void 0&&(i=ti.SUM_BY_NONZERO_WEIGHTS);var a=je(n,"labels","logLoss"),s=je(t,"predictions","logLoss"),u=null;e!=null&&(u=je(e,"weights","logLoss")),pe(a.shape,s.shape,"Error in logLoss: ");var l=kt(1),d=kt(r),A=a.mul(s.add(d).log()).neg().sub(l.sub(a).mul(l.sub(s).add(d).log()));return Ki(A,u,i)}}),Zm=Ve({meanSquaredError_:function(n,t,e,r){r===void 0&&(r=ti.SUM_BY_NONZERO_WEIGHTS);var i=je(n,"labels","meanSquaredError"),a=je(t,"predictions","meanSquaredError"),s=null;e!=null&&(s=je(e,"weights","meanSquaredError")),pe(i.shape,a.shape,"Error in meanSquaredError: ");var u=i.squaredDifference(a);return Ki(u,s,r)}}),Jm=Ve({sigmoidCrossEntropy_:function(n,t,e,r,i){r===void 0&&(r=0),i===void 0&&(i=ti.SUM_BY_NONZERO_WEIGHTS);var a=je(n,"multiClassLabels","sigmoidCrossEntropy"),s=je(t,"logits","sigmoidCrossEntropy"),u=null;if(e!=null&&(u=je(e,"weights","sigmoidCrossEntropy")),pe(a.shape,s.shape,"Error in sigmoidCrossEntropy: "),r>0){var l=kt(r),d=kt(1),A=kt(.5);a=a.mul(d.sub(l)).add(A.mul(l))}var I=function(O,z){var re=je(O,"labels","sigmoidCrossEntropyWithLogits"),oe=je(z,"logits","sigmoidCrossEntropyWithLogits");pe(re.shape,oe.shape,"Error in sigmoidCrossEntropyWithLogits: ");var ae=oe.relu(),se=oe.mul(re),be=oe.abs().neg().exp().log1p();return ae.sub(se).add(be)}(a,s);return Ki(I,u,i)}}),Ym=Ve({softmaxCrossEntropy_:function(n,t,e,r,i){r===void 0&&(r=0),i===void 0&&(i=ti.SUM_BY_NONZERO_WEIGHTS);var a=je(n,"onehotLabels","softmaxCrossEntropy"),s=je(t,"logits","softmaxCrossEntropy"),u=null;if(e!=null&&(u=je(e,"weights","softmaxCrossEntropy")),pe(a.shape,s.shape,"Error in softmaxCrossEntropy: "),r>0){var l=kt(r),d=kt(1),A=kt(a.shape[1]);a=a.mul(d.sub(l)).add(l.div(A))}var I=function(O,z,re){if(re===void 0&&(re=-1),re===-1&&(re=z.rank-1),re!==z.rank-1)throw Error("Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank "+z.rank+" and dim was "+re);return ko(function(oe,ae,se){var be=ae.logSumExp([re],!0),Ae=ae.toFloat().sub(be);return se([oe,Ae]),{value:Ae.mul(oe).neg().sum([re]),gradFunc:function(me,Ce){var Oe=Ce[0],Le=Ce[1],Ue=Dn(me.shape,[re]);return[me.reshape(Ue).mul(Oe.toFloat().sub(Le.exp())),me.reshape(Ue).mul(Le.exp().sub(Oe.toFloat()))]}}})(O,z)}(a,s);return Ki(I,u,i)}}),$m=Object.freeze({get Reduction(){return ti},absoluteDifference:Hm,computeWeightedLoss:Ki,cosineDistance:Gm,hingeLoss:Qm,huberLoss:Xm,logLoss:Km,meanSquaredError:Zm,sigmoidCrossEntropy:Jm,softmaxCrossEntropy:Ym});function nf(n,t){return t===void 0&&(t=!1),We.tidy(function(){if(n.shape.length!==2)throw new Error("qr2d() requires a 2D Tensor, but got a "+n.shape.length+"D Tensor.");for(var e=n.shape[0],r=n.shape[1],i=dl(e),a=n.clone(),s=oa([[1]],[1,1]),u=s.clone(),l=e>=r?r:e,d=function(I){var O,z=a,re=u,oe=i;O=We.tidy(function(){var ae=a.slice([I,I],[e-I,1]),se=ae.norm(),be=a.slice([I,I],[1,1]),Ae=oa([[-1]]).where(be.greater(0),oa([[1]])),me=be.sub(Ae.mul(se)),Ce=ae.div(me);u=Ce.shape[0]===1?s.clone():s.concat(Ce.slice([1,0],[Ce.shape[0]-1,Ce.shape[1]]),0);var Oe=Ae.matMul(me).div(se).neg(),Le=a.slice([I,0],[e-I,r]),Ue=Oe.mul(u);if(I===0)a=Le.sub(Ue.matMul(u.transpose().matMul(Le)));else{var Ne=Le.sub(Ue.matMul(u.transpose().matMul(Le)));a=a.slice([0,0],[I,r]).concat(Ne,0)}var Fe=i.slice([0,I],[e,i.shape[1]-I]);if(I===0)i=Fe.sub(Fe.matMul(u).matMul(Ue.transpose()));else{var Ze=Fe.sub(Fe.matMul(u).matMul(Ue.transpose()));i=i.slice([0,0],[e,I]).concat(Ze,1)}return[u,a,i]}),u=O[0],a=O[1],i=O[2],bn([z,re,oe])},A=0;Ar&&(i=i.slice([0,0],[e,r]),a=a.slice([0,0],[r,r])),[i,a]})}var qm=Ve({bandPart_:function(n,t,e){if(t%1!=0)throw new Error("bandPart(): numLower must be an integer, got "+t+".");if(e%1!=0)throw new Error("bandPart(): numUpper must be an integer, got "+e+".");var r=je(n,"a","bandPart");if(r.rank<2)throw new Error("bandPart(): Rank must be at least 2, got "+r.rank+".");var i=r.shape,a=r.shape.slice(-2),s=a[0],u=a[1];if(!(t<=s))throw new Error("bandPart(): numLower ("+t+") must not be greater than the number of rows ("+s+").");if(!(e<=u))throw new Error("bandPart(): numUpper ("+e+") must not be greater than the number of columns ("+u+").");t<0&&(t=s),e<0&&(e=u);var l=Eo(0,s,1,"int32").reshape([-1,1]),d=Eo(0,u,1,"int32"),A=Nn(l,d),I=zo(A.lessEqual(kt(+t,"int32")),A.greaterEqual(kt(-e,"int32"))),O=pn([s,u],r.dtype);return mi(Bn(r.reshape([-1,s,u])).map(function(z){return Ia(I,z,O)})).reshape(i)}}),eg=Ve({gramSchmidt_:function(n){var t;if(Array.isArray(n)){t=!1,q(n!=null&&n.length>0,function(){return"Gram-Schmidt process: input must not be null, undefined, or empty"});for(var e=n[0].shape[0],r=function(l){q(n[l].shape[0]===e,function(){return"Gram-Schmidt: Non-unique lengths found in the input vectors: ("+n[l].shape[0]+" vs. "+e+")"})},i=1;i0)for(var A=0;A= 2, but got rank "+n.rank);if(n.rank===2)return nf(n,t);var e=n.shape.slice(0,n.shape.length-2).reduce(function(s,u){return s*u}),r=Bn(n.reshape([e,n.shape[n.shape.length-2],n.shape[n.shape.length-1]]),0),i=[],a=[];return r.forEach(function(s){var u=nf(s,t),l=u[0],d=u[1];i.push(l),a.push(d)}),[mi(i,0).reshape(n.shape),mi(a,0).reshape(n.shape)]}}),rg=Object.freeze({bandPart:qm,gramSchmidt:eg,qr:tg});function Ko(n,t,e,r,i,a){r==null&&(r=.5),i==null&&(i=Number.NEGATIVE_INFINITY),a==null&&(a=0);var s=n.shape[0];return e=Math.min(e,s),q(0<=r&&r<=1,function(){return"iouThreshold must be in [0, 1], but was '"+r+"'"}),q(n.rank===2,function(){return"boxes must be a 2D tensor, but was of rank '"+n.rank+"'"}),q(n.shape[1]===4,function(){return"boxes must have 4 columns, but 2nd dimension was "+n.shape[1]}),q(t.rank===1,function(){return"scores must be a 1D tensor"}),q(t.shape[0]===s,function(){return"scores has incompatible shape with boxes. Expected "+s+", but was "+t.shape[0]}),q(0<=a&&a<=1,function(){return"softNmsSigma must be in [0, 1], but was '"+a+"'"}),{maxOutputSize:e,iouThreshold:r,scoreThreshold:i,softNmsSigma:a}}var ng=Ve({resizeBilinear_:function(n,t,e){e===void 0&&(e=!1);var r=je(n,"images","resizeBilinear");q(r.rank===3||r.rank===4,function(){return"Error in resizeBilinear: x must be rank 3 or 4, but got rank "+r.rank+"."}),q(t.length===2,function(){return"Error in resizeBilinear: new shape must 2D, but got shape "+t+"."});var i=r,a=!1;r.rank===3&&(a=!0,i=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var s=t[0],u=t[1],l=We.runKernelFunc(function(d,A){return A([i]),d.resizeBilinear(i,s,u,e)},{x:i},function(d,A){return{x:function(){return We.runKernelFunc(function(I){return I.resizeBilinearBackprop(d,A[0],e)},{})}}},"ResizeBilinear",{alignCorners:e,newHeight:s,newWidth:u});return a?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}}),ig=Ve({resizeNearestNeighbor_:function(n,t,e){e===void 0&&(e=!1);var r=je(n,"images","resizeNearestNeighbor");q(r.rank===3||r.rank===4,function(){return"Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank "+r.rank+"."}),q(t.length===2,function(){return"Error in resizeNearestNeighbor: new shape must 2D, but got shape "+t+"."}),q(r.dtype==="float32"||r.dtype==="int32",function(){return"`images` must have `int32` or `float32` as dtype"});var i=r,a=!1;r.rank===3&&(a=!0,i=r.as4D(1,r.shape[0],r.shape[1],r.shape[2]));var s=t[0],u=t[1],l=We.runKernelFunc(function(d,A){return A([i]),d.resizeNearestNeighbor(i,s,u,e)},{batchImages:i},function(d,A){return{batchImages:function(){return We.runKernelFunc(function(I){return I.resizeNearestNeighborBackprop(d,A[0],e)},{})}}});return a?l.as3D(l.shape[1],l.shape[2],l.shape[3]):l}}),ag=Ve({nonMaxSuppression_:function(n,t,e,r,i){r===void 0&&(r=.5),i===void 0&&(i=Number.NEGATIVE_INFINITY);var a=je(n,"boxes","nonMaxSuppression"),s=je(t,"scores","nonMaxSuppression"),u=Ko(a,s,e,r,i);e=u.maxOutputSize,r=u.iouThreshold,i=u.scoreThreshold;var l={maxOutputSize:e,iouThreshold:r,scoreThreshold:i};return We.runKernelFunc(function(d){return d.nonMaxSuppression(a,s,e,r,i)},{boxes:a,scores:s},null,"NonMaxSuppressionV3",l)}}),og=function(n,t,e,r,i){return r===void 0&&(r=.5),i===void 0&&(i=Number.NEGATIVE_INFINITY),C(this,void 0,void 0,function(){var a,s,u,l,d,A,I;return E(this,function(O){switch(O.label){case 0:return a=je(n,"boxes","nonMaxSuppressionAsync"),s=je(t,"scores","nonMaxSuppressionAsync"),u=Ko(a,s,e,r,i),e=u.maxOutputSize,r=u.iouThreshold,i=u.scoreThreshold,[4,Promise.all([a.data(),s.data()])];case 1:return l=O.sent(),d=l[0],A=l[1],I=Rs(d,A,e,r,i),a!==n&&a.dispose(),s!==t&&s.dispose(),[2,I]}})})},sg=Ve({nonMaxSuppressionWithScore_:function(n,t,e,r,i,a){r===void 0&&(r=.5),i===void 0&&(i=Number.NEGATIVE_INFINITY),a===void 0&&(a=0);var s=je(n,"boxes","nonMaxSuppression"),u=je(t,"scores","nonMaxSuppression"),l=Ko(s,u,e,r,i,a),d={maxOutputSize:e=l.maxOutputSize,iouThreshold:r=l.iouThreshold,scoreThreshold:i=l.scoreThreshold,softNmsSigma:a=l.softNmsSigma},A=We.runKernel("NonMaxSuppressionV5",{boxes:s,scores:u},d);return{selectedIndices:A[0],selectedScores:A[1]}}}),ug=function(n,t,e,r,i,a){return r===void 0&&(r=.5),i===void 0&&(i=Number.NEGATIVE_INFINITY),a===void 0&&(a=0),C(this,void 0,void 0,function(){var s,u,l,d,A,I,O;return E(this,function(z){switch(z.label){case 0:return s=je(n,"boxes","nonMaxSuppressionAsync"),u=je(t,"scores","nonMaxSuppressionAsync"),l=Ko(s,u,e,r,i,a),e=l.maxOutputSize,r=l.iouThreshold,i=l.scoreThreshold,a=l.softNmsSigma,[4,Promise.all([s.data(),u.data()])];case 1:return d=z.sent(),A=d[0],I=d[1],O=Os(A,I,e,r,i,a),s!==n&&s.dispose(),u!==t&&u.dispose(),[2,O]}})})},lg=Ve({cropAndResize_:function(n,t,e,r,i,a){var s=je(n,"image","cropAndResize"),u=je(t,"boxes","cropAndResize","float32"),l=je(e,"boxInd","cropAndResize","int32");i=i||"bilinear",a=a||0;var d=u.shape[0];return q(s.rank===4,function(){return"Error in cropAndResize: image must be rank 4,but got rank "+s.rank+"."}),q(u.rank===2&&u.shape[1]===4,function(){return"Error in cropAndResize: boxes must be have size ["+d+",4] but had shape "+u.shape+"."}),q(l.rank===1&&l.shape[0]===d,function(){return"Error in cropAndResize: boxInd must be have size ["+d+"] but had shape "+u.shape+"."}),q(r.length===2,function(){return"Error in cropAndResize: cropSize must be of length 2, but got length "+r.length+"."}),q(r[0]>=1&&r[1]>=1,function(){return"cropSize must be atleast [1,1], but was "+r}),q(i==="bilinear"||i==="nearest",function(){return"method must be bilinear or nearest, but was "+i}),We.runKernelFunc(function(A,I){return A.cropAndResize(s,u,l,r,i,a)},{images:s,boxes:u,boxInd:l},null,"CropAndResize",{method:i,extrapolationValue:a,cropSize:r})}}),Ys=Object.freeze({resizeBilinear:ng,resizeNearestNeighbor:ig,nonMaxSuppression:ag,nonMaxSuppressionAsync:og,nonMaxSuppressionWithScore:sg,nonMaxSuppressionWithScoreAsync:ug,cropAndResize:lg}),$s=function(n,t){return!(n>0)||t==="linear"},eu=function(n,t,e){if(e==null||e==="linear")return n;if(e==="relu")return n.mul(t.step());throw new Error("Gradient for activation "+e+" has not been implemented yet.")},tu=function(n,t){var e=t,r=kn(n.shape,t.shape);return r.length>0&&(e=e.sum(r)),e.reshape(n.shape)},ru=function(n,t,e){if(t==="linear")return n;if(t==="relu")return wn(n);if(t==="elu")return Zc(n);if(t==="relu6")return Yc(n);if(t==="prelu")return Jc(n,e);throw new Error("Unknown fused activation "+t+".")},cg=Ve({fusedMatMul_:function(n){var t,e=n.a,r=n.b,i=n.transposeA,a=i!==void 0&&i,s=n.transposeB,u=s!==void 0&&s,l=n.bias,d=n.activation,A=d===void 0?"linear":d,I=n.preluActivationWeights;if($s(We.state.gradientDepth,A)===!1){var O=Go(e,r,a,u);return l!=null&&(O=Tr(O,l)),ru(O,A,I)}var z=je(e,"a","fused matMul"),re=je(r,"b","fused matMul");t=Jt(z,re),z=t[0],re=t[1];var oe=a?z.shape[z.rank-2]:z.shape[z.rank-1],ae=u?re.shape[re.rank-1]:re.shape[re.rank-2],se=a?z.shape[z.rank-1]:z.shape[z.rank-2],be=u?re.shape[re.rank-2]:re.shape[re.rank-1],Ae=z.shape.slice(0,-2),me=re.shape.slice(0,-2),Ce=ce(Ae),Oe=ce(me);q(z.rank>=2&&re.rank>=2&&z.rank===re.rank,function(){return"Error in fused matMul: inputs must have the same rank of at least 2, got ranks "+z.rank+" and "+re.rank+"."}),q(fe(Ae,me),function(){return"Error in fused matMul: outer dimensions ("+Ae+") and ("+me+") of Tensors with shapes "+z.shape+" and "+re.shape+" must match."}),q(oe===ae,function(){return"Error in fused matMul: inner shapes ("+oe+") and ("+ae+") of Tensors with shapes "+z.shape+" and "+re.shape+" and transposeA="+a+" and transposeB="+u+" must match."});var Le,Ue,Ne=z.shape.slice(0,-2).concat([se,be]),Fe=a?z.as3D(Ce,oe,se):z.as3D(Ce,se,oe),Ze=u?re.as3D(Oe,be,ae):re.as3D(Oe,ae,be);l!=null&&Ir(Ne,(Le=Jt(Le=je(l,"bias","fused matMul"),z)[0]).shape),I!=null&&(Ue=je(I,"prelu weights","fused matMul"));var Ke={a:Fe,b:Ze};l!=null&&(Ke.bias=Le),I!=null&&(Ke.preluActivationWeights=Ue);var et=[Fe,Ze];return We.runKernelFunc(function(tt,ct){var bt=tt.fusedBatchMatMul({a:Fe,b:Ze,transposeA:a,transposeB:u,bias:Le,activation:A,preluActivationWeights:Ue});return ct([Fe,Ze,bt]),bt},Ke,function(tt,ct){var bt=ct[0],gt=ct[1],vt=ct[2],At=eu(tt,vt,A),ft={};return l!=null&&(ft={bias:function(){return tu(Le,At)}}),Object.assign(a||u?!a&&u?{a:function(){return At.matMul(gt,!1,!1)},b:function(){return At.matMul(bt,!0,!1)}}:a&&!u?{a:function(){return gt.matMul(At,!1,!0)},b:function(){return bt.matMul(At,!1,!1)}}:{a:function(){return gt.matMul(At,!0,!0)},b:function(){return At.matMul(bt,!0,!0)}}:{a:function(){return At.matMul(gt,!1,!0)},b:function(){return bt.matMul(At,!0,!1)}},ft)},"_FusedMatMul",{transposeA:a,transposeB:u,activation:A},et,[!0]).reshape(Ne)}}),fg=Ve({fusedConv2d_:function(n){var t=n.x,e=n.filter,r=n.strides,i=n.pad,a=n.dataFormat,s=a===void 0?"NHWC":a,u=n.dilations,l=u===void 0?[1,1]:u,d=n.dimRoundingMode,A=n.bias,I=n.activation,O=I===void 0?"linear":I,z=n.preluActivationWeights;if(O=O||"linear",$s(We.state.gradientDepth,O)===!1){var re=Ei(t,e,r,i,s,l,d);return A!=null&&(re=Tr(re,A)),ru(re,O,z)}var oe=je(t,"x","conv2d"),ae=je(e,"filter","conv2d"),se=oe,be=!1;oe.rank===3&&(be=!0,se=oe.as4D(1,oe.shape[0],oe.shape[1],oe.shape[2])),q(se.rank===4,function(){return"Error in fused conv2d: input must be rank 4, but got rank "+se.rank+"."}),q(ae.rank===4,function(){return"Error in fused conv2d: filter must be rank 4, but got rank "+ae.rank+"."}),d!=null&&q(ge(i),function(){return"Error in fused conv2d: pad must be an integer when using, dimRoundingMode "+d+" but got pad "+i+"."}),q(se.shape[3]===ae.shape[2],function(){return"Error in conv2d: depth of input ("+se.shape[3]+") must match input depth for filter "+ae.shape[2]+"."}),q(si(r,l),function(){return"Error in conv2D: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+l+"'"}),q(s==="NHWC",function(){return"Error in conv2d: got dataFormat of "+s+" but only NHWC is currently supported."});var Ae,me,Ce=sa(se.shape,ae.shape,r,l,i,d);A!=null&&(Ae=Jt(Ae=je(A,"bias","fused conv2d"),oe)[0],Ir(Ce.outShape,Ae.shape)),z!=null&&(me=je(z,"prelu weights","fused conv2d"));var Oe={x:se,filter:ae};A!=null&&(Oe.bias=Ae),z!=null&&(Oe.preluActivationWeights=me);var Le=[ae,se],Ue=We.runKernelFunc(function(Ne,Fe){var Ze=Ne.fusedConv2d({input:se,filter:ae,convInfo:Ce,bias:Ae,activation:O,preluActivationWeights:me});return Fe([ae,se,Ze]),Ze},Oe,function(Ne,Fe){var Ze=Fe,Ke=Ze[0],et=Ze[1],tt=Ze[2],ct=eu(Ne,tt,O);q(Ea(l),function(){return"Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '"+l+"'"});var bt={};return A!=null&&(bt={bias:function(){return tu(Ae,ct)}}),Object.assign({x:function(){return Wc(et.shape,ct,Ke,r,i)},filter:function(){return Gs(et,ct,Ke.shape,r,i)}},bt)},"FusedConv2D",{convInfo:Ce,activation:O},Le,[!0]);return be?Ue.as3D(Ue.shape[1],Ue.shape[2],Ue.shape[3]):Ue}}),dg=Ve({fusedDepthwiseConv2d_:function(n){var t=n.x,e=n.filter,r=n.strides,i=n.pad,a=n.dataFormat,s=a===void 0?"NHWC":a,u=n.dilations,l=u===void 0?[1,1]:u,d=n.dimRoundingMode,A=n.bias,I=n.activation,O=I===void 0?"linear":I,z=n.preluActivationWeights;if($s(We.state.gradientDepth,O)===!1){var re=Ho(t,e,r,i,s,l,d);return A!=null&&(re=Tr(re,A)),ru(re,O,z)}var oe=je(t,"x","depthwiseConv2d"),ae=je(e,"filter","depthwiseConv2d"),se=oe,be=!1;oe.rank===3&&(be=!0,se=oe.as4D(1,oe.shape[0],oe.shape[1],oe.shape[2])),q(se.rank===4,function(){return"Error in fused depthwiseConv2d: input must be rank 4, but got rank "+se.rank+"."}),q(ae.rank===4,function(){return"Error in fused depthwiseConv2d: filter must be rank 4, but got rank "+ae.rank+"."}),q(se.shape[3]===ae.shape[2],function(){return"Error in fused depthwiseConv2d: number of input channels ("+se.shape[3]+") must match the inChannels dimension in filter "+ae.shape[2]+"."}),l==null&&(l=[1,1]),q(si(r,l),function(){return"Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides "+r+" and dilations '"+l+"'"}),d!=null&&q(ge(i),function(){return"Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode "+d+" but got pad "+i+"."});var Ae,me,Ce=sa(se.shape,ae.shape,r,l,i,d,!0);A!=null&&(Ae=Jt(Ae=je(A,"bias","fused conv2d"),oe)[0],Ir(Ce.outShape,Ae.shape)),z!=null&&(me=je(z,"prelu weights","fused depthwiseConv2d"));var Oe={x:se,filter:ae};A!=null&&(Oe.bias=Ae),z!=null&&(Oe.preluActivationWeights=me);var Le=[ae,se],Ue=We.runKernelFunc(function(Ne,Fe){var Ze=Ne.fusedDepthwiseConv2D({input:se,filter:ae,convInfo:Ce,bias:Ae,activation:O,preluActivationWeights:me});return Fe([ae,se,Ze]),Ze},Oe,function(Ne,Fe){q(Ea(l),function(){return"Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '"+l+"'"});var Ze=Fe[0],Ke=Fe[1],et=Fe[2],tt=eu(Ne,et,O),ct={};return A!=null&&(ct={bias:function(){return tu(Ae,tt)}}),Object.assign({x:function(){return zc(Ke.shape,tt,Ze,Ce)},filter:function(){return Vc(Ke,tt,Ze.shape,Ce)}},ct)},"FusedDepthwiseConv2D",{convInfo:Ce,activation:O},Le,[!0]);return be?Ue.as3D(Ue.shape[1],Ue.shape[2],Ue.shape[3]):Ue}}),pg=Object.freeze({matMul:cg,conv2d:fg,depthwiseConv2d:dg}),hg=Object.freeze({image:Ys,linalg:rg,losses:$m,spectral:_m,fused:pg,signal:zm,square:Kh,squaredDifference:Ec,conv1d:nm,conv2d:Ei,conv3d:im,depthwiseConv2d:Ho,separableConv2d:Qs,conv2dTranspose:am,conv3dTranspose:om,op:Ve,batchNormalization2d:Cv,batchNormalization3d:Sv,batchNormalization4d:Iv,batchNormalization:Tv,batchNorm:Oc,batchNorm2d:Rv,batchNorm3d:Ov,batchNorm4d:kv,booleanMaskAsync:rm,complex:Cn,real:$n,imag:vi,concat:Pn,concat1d:Nd,concat2d:Md,concat3d:_d,concat4d:Fd,split:vs,matMul:Go,dot:sm,outerProduct:um,reverse:fo,reverse1d:lm,reverse2d:cm,reverse3d:fm,reverse4d:dm,maxPool:Vn,avgPool:po,pool:pm,maxPool3d:hm,avgPool3d:vm,slice:Ni,slice1d:mm,slice2d:gm,slice3d:Qc,slice4d:ym,abs:Zh,acos:Jh,acosh:Yh,asin:$h,asinh:qh,atan:ev,atanh:tv,ceil:rv,clipByValue:Us,cos:nv,cosh:iv,erf:av,exp:Ws,expm1:ov,floor:sv,log:uv,log1p:lv,logSigmoid:cv,neg:Lo,reciprocal:fv,round:dv,rsqrt:Cc,sigmoid:Sc,sign:pv,isNaN:hv,isInf:vv,isFinite:mv,sin:gv,sinh:yv,softplus:bv,sqrt:wv,step:Av,tan:xv,tanh:Ev,all:bm,any:wm,argMax:Am,argMin:xm,logSumExp:Em,max:Qo,mean:Cm,min:Sm,moments:Im,sum:Kc,prod:Tm,equal:Bc,equalStrict:Qv,greater:Xv,greaterEqual:Nc,greaterEqualStrict:Kv,greaterStrict:Zv,less:Jv,lessEqual:Yv,lessEqualStrict:$v,lessStrict:qv,notEqual:em,notEqualStrict:tm,add:Tr,addN:Pv,addStrict:Bv,atan2:Nv,div:ki,divNoNan:Mv,divStrict:_v,floorDiv:Dc,maximum:zs,maximumStrict:Fv,minimum:Pc,minimumStrict:Lv,mod:Uv,modStrict:Wv,mul:ei,mulStrict:zv,pow:Vo,powStrict:Vv,squaredDifferenceStrict:Hv,sub:Nn,subStrict:Gv,elu:Zc,leakyRelu:Rm,prelu:Jc,relu:wn,relu6:Yc,selu:Om,logicalAnd:zo,logicalNot:jv,logicalOr:kc,logicalXor:Dv,where:Ia,whereAsync:jc,buffer:cr,print:Xd,batchToSpaceND:fl,broadcastTo:Kd,cast:Zd,clone:Jd,cumsum:Yd,depthToSpace:$d,expandDims:xi,eye:dl,multinomial:qd,oneHot:gs,pad:xa,pad1d:ep,pad2d:tp,pad3d:rp,pad4d:np,rand:ip,randomNormal:ap,randomGamma:op,randomUniform:pl,reshape:Ri,spaceToBatchND:hl,squeeze:vl,stack:mi,tile:_a,truncatedNormal:sp,unstack:Bn,setdiff1dAsync:up,fill:Bi,linspace:Bd,ones:Ma,range:Eo,scalar:kt,tensor:Sn,tensor1d:On,tensor2d:oa,tensor3d:hs,tensor4d:li,tensor5d:jd,tensor6d:Dd,variable:Pd,zeros:pn,onesLike:cl,zerosLike:Lr,transpose:ua,softmax:Gi,logSoftmax:cp,localResponseNormalization:km,norm:$c,gather:Vs,unsortedSegmentSum:Fc,basicLSTMCell:jm,multiRNNCell:Dm,movingAverage:Pm,stridedSlice:Bm,topk:Nm,scatterND:Mm,fft:Xs,ifft:Xo,rfft:Ks,irfft:qc,sparseToDense:Fm,gatherND:Lm,diag:Um,dropout:Wm,hannWindow:Zs,hammingWindow:tf,frame:Js,stft:rf,inTopKAsync:Vm});function wt(n,t){Array.isArray(n)||(n=[n]),n.forEach(function(e){e!=null&&q(e.dtype!=="complex64",function(){return t+" does not support complex64 tensors."})})}function nu(n,t,e,r){if(e==="linear")return n.linear(t);if(e==="relu")return n.relu(t);if(e==="elu")return n.elu(t);if(e==="relu6")return n.relu6(t);if(e==="prelu")return n.prelu(t,r);throw new Error("Activation "+e+" has not been implemented for the CPU backend.")}var vg=function(n){function t(){var e=n.call(this)||this;return e.blockSize=48,e.firstUse=!0,e.data=new El(e,We),e}return S(t,n),t.prototype.write=function(e,r,i){this.firstUse&&(this.firstUse=!1,P().get("IS_NODE")&&Yn(` ============================ Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details. ============================`));var a={};return this.data.set(a,{values:e,dtype:i}),a},t.prototype.move=function(e,r,i,a){this.data.set(e,{values:r,dtype:a})},t.prototype.numDataIds=function(){return this.data.numDataIds()},t.prototype.read=function(e){return C(this,void 0,void 0,function(){return E(this,function(r){return[2,this.readSync(e)]})})},t.prototype.readSync=function(e){var r=this.data.get(e),i=r.dtype,a=r.complexTensors;return i==="complex64"?Ts(this.readSync(a.real.dataId),this.readSync(a.imag.dataId)):this.data.get(e).values},t.prototype.bufferSync=function(e){var r=this.readSync(e.dataId),i=r;if(e.dtype==="string")try{i=r.map(function(a){return Qe(a)})}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return cr(e.shape,e.dtype,i)},t.prototype.makeOutput=function(e,r,i){var a=this.write(e,r,i);return We.makeTensorFromDataId(a,r,i,this)},t.prototype.disposeData=function(e){if(this.data.has(e)){var r=this.data.get(e).complexTensors;r!=null&&(r.real.dispose(),r.imag.dispose()),this.data.delete(e)}},t.prototype.time=function(e){return C(this,void 0,void 0,function(){var r;return E(this,function(i){return r=qe(),e(),[2,{kernelMs:qe()-r}]})})},t.prototype.memory=function(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}},t.prototype.complex=function(e,r){var i=this.makeOutput(null,e.shape,"complex64");return this.data.get(i.dataId).complexTensors={real:We.keep(e.clone()),imag:We.keep(r.clone())},i},t.prototype.real=function(e){return this.data.get(e.dataId).complexTensors.real.clone()},t.prototype.imag=function(e){return this.data.get(e.dataId).complexTensors.imag.clone()},t.prototype.slice=function(e,r,i){if(wt(e,"slice"),As(e.shape,r,i)){var a=xs(r,e.strides),s=ce(i);return Sn(this.readSync(e.dataId).subarray(a,a+s),i,e.dtype)}for(var u=cr(i,e.dtype),l=this.bufferSync(e),d=0;dre&&(re=se,oe=ae)}A[O]=oe}return l},t.prototype.cumsum=function(e,r,i,a){if(wt(e,"cumsum"),r!==e.rank-1)throw new Error("backend.cumsum in CPU expects an inner-most axis="+(e.rank-1)+" but got axis="+r);for(var s=Tt(e.dtype,"int32"),u=pn(e.shape,s),l=this.readSync(u.dataId),d=this.readSync(e.dataId),A=e.shape[e.rank-1],I=a?function(ae,se){return ae+A-se-1}:function(ae,se){return ae+se},O=0;Oa?1:0})},t.prototype.greaterEqual=function(e,r){return wt([e,r],"greaterEqual"),this.broadcastedBinaryOp(e,r,"bool",function(i,a){return i>=a?1:0})},t.prototype.logicalNot=function(e){wt(e,"logicalNot");for(var r=this.readSync(e.dataId),i=new Uint8Array(r.length),a=0;a1||r.rank===1?1:ce(r.shape.slice(1)),O=0;O=0&&a>=0?s:(s+a)%a})},t.prototype.max=function(e,r){wt(e,"max"),zn("max",r,e.rank);for(var i=En(e.shape,r),a=i[0],s=i[1],u=pn(a,e.dtype),l=ce(s),d=this.readSync(u.dataId),A=this.readSync(e.dataId),I=0;Iz&&(z=oe)}d[I]=z}return u},t.prototype.maximum=function(e,r){return wt([e,r],"maximum"),this.broadcastedBinaryOp(e,r,e.dtype,function(i,a){return Math.max(i,a)})},t.prototype.all=function(e,r){wt(e,"all"),zn("all",r,e.rank);for(var i=En(e.shape,r),a=i[0],s=i[1],u=pn(a,e.dtype),l=ce(s),d=this.readSync(u.dataId),A=this.readSync(e.dataId),I=0;I0?i[a]=1:i[a]=0;return this.makeOutput(i,e.shape,"float32")},t.prototype.isNaN=function(e){wt(e,"x");for(var r=this.readSync(e.dataId),i=new Uint8Array(r.length),a=0;a.5?i[a]=Math.ceil(r[a]):i[a]=s%2==0?s:s+1}return this.makeOutput(i,e.shape,"float32")},t.prototype.exp=function(e){wt(e,"exp");for(var r=this.readSync(e.dataId),i=new Float32Array(r.length),a=0;a=0?s:Math.exp(s)-1}return this.makeOutput(r,e.shape,"float32")},t.prototype.eluDer=function(e,r){wt([e,r],"eluDer");for(var i=new Float32Array(r.size),a=this.readSync(r.dataId),s=this.readSync(e.dataId),u=0;u=1?s[u]:s[u]*(l+1)}return this.makeOutput(i,r.shape,"float32")},t.prototype.selu=function(e){wt(e,"selu");for(var r=Fs,i=Ls,a=new Float32Array(e.size),s=this.readSync(e.dataId),u=0;u=0?i*l:r*(Math.exp(l)-1)}return this.makeOutput(a,e.shape,"float32")},t.prototype.clip=function(e,r,i){wt(e,"clip");for(var a=new Float32Array(e.size),s=this.readSync(e.dataId),u=0;ui?i:l-r,l=a[s]0?1:r}return this.makeOutput(i,e.shape,"float32")},t.prototype.fusedConv2d=function(e){var r=e.input,i=e.filter,a=e.convInfo,s=e.bias,u=e.activation,l=e.preluActivationWeights,d=this.conv2d(r,i,a);return s&&(d=this.add(d,s)),u&&(d=nu(this,d,u,l)),d},t.prototype.conv2d=function(e,r,i){wt([e,r],"conv2d");for(var a=i.filterHeight,s=i.filterWidth,u=i.dilationHeight,l=i.dilationWidth,d=i.padInfo.left,A=i.padInfo.top,I=i.dataFormat==="channelsLast",O=cr(i.outShape,e.dtype),z=e.strides[0],re=I?e.strides[1]:e.strides[2],oe=I?e.strides[2]:1,ae=I?1:e.strides[1],se=O.strides[0],be=I?O.strides[1]:O.strides[2],Ae=I?O.strides[2]:1,me=I?1:O.strides[1],Ce=this.readSync(e.dataId),Oe=this.readSync(r.dataId),Le=O.values,Ue=0;Ue=i.inHeight))for(var bt=tt*r.strides[0],gt=Ne+ct*re,vt=0;vt=i.inWidth))for(var Vt=gt+It*oe,ir=bt+Et*r.strides[1],fr=0;fr=i.inDepth))for(var Fe=Ue*r.strides[0],Ze=Ae+Ne*e.strides[1],Ke=0;Ke=i.inHeight))for(var gt=Fe+ct*r.strides[1],vt=Ze+bt*e.strides[2],At=0;At=i.inWidth))for(var ir=gt+It*r.strides[2],fr=vt+Vt*i.inChannels,Ar=ir,Dr=0;Dr=i.inHeight))for(var Ue=Oe*r.strides[0],Ne=se+Le*e.strides[1],Fe=0;Fe=i.inWidth))for(var ct=Ue+et*r.strides[1],bt=Ne+tt*i.inChannels,gt=Ze,vt=ct,At=0;Atgt?gt=Vt:i==="avg"&&(vt+=Vt,At++)}if(isNaN(gt))break}ae[Ke+et*Ae+Le]=i==="avg"?vt/At:gt}return oe.toTensor()},t.prototype.maxPool=function(e,r){return this.pool(e,r,"max")},t.prototype.maxPoolPositions=function(e,r){for(var i=cr(r.outShape,"int32"),a=r.strideHeight,s=r.strideWidth,u=r.dilationHeight,l=r.dilationWidth,d=r.effectiveFilterHeight,A=r.effectiveFilterWidth,I=r.padInfo.top,O=r.padInfo.left,z=this.bufferSync(e),re=0;reUe&&(Ue=tt,Ne=Ze*A+et)}i.set(Ne,re,ae,me,oe)}}return i.toTensor()},t.prototype.maxPoolBackprop=function(e,r,i,a){wt([r,i],"maxPoolBackprop");for(var s=this.maxPoolPositions(r,a),u=a.strideHeight,l=a.strideWidth,d=a.dilationHeight,A=a.dilationWidth,I=a.effectiveFilterHeight,O=a.effectiveFilterWidth,z=O-1-a.padInfo.left,re=I-1-a.padInfo.top,oe=cr(r.shape,"float32"),ae=this.bufferSync(s),se=this.bufferSync(e),be=0;be=a.outHeight||Math.floor(Fe)!==Fe))for(var Ze=0;Ze=a.outWidth||Math.floor(Ke)!==Ke)){var et=I*O-1-ae.get(be,Fe,Ke,Ae)===Ne*O+Ze?1:0;et!==0&&(Ue+=se.get(be,Fe,Ke,Ae)*et)}}}oe.set(Ue,be,me,Ce,Ae)}return oe.toTensor()},t.prototype.avgPoolBackprop=function(e,r,i){wt([e,r],"avgPoolBackprop");for(var a=i.strideHeight,s=i.strideWidth,u=i.filterHeight,l=i.filterWidth,d=i.dilationHeight,A=i.dilationWidth,I=i.effectiveFilterHeight,O=i.effectiveFilterWidth,z=O-1-i.padInfo.left,re=I-1-i.padInfo.top,oe=cr(r.shape,"float32"),ae=1/(u*l),se=this.bufferSync(e),be=0;be=i.outHeight||Math.floor(Fe)!==Fe))for(var Ze=0;Ze=i.outWidth||Math.floor(Ke)!==Ke||(Ue+=se.get(be,Fe,Ke,Ae))}}oe.set(Ue*ae,be,me,Ce,Ae)}return oe.toTensor()},t.prototype.pool3d=function(e,r,i){wt(e,"pool3d");for(var a=r.strideDepth,s=r.strideHeight,u=r.strideWidth,l=r.dilationDepth,d=r.dilationHeight,A=r.dilationWidth,I=r.effectiveFilterDepth,O=r.effectiveFilterHeight,z=r.effectiveFilterWidth,re=r.padInfo.front,oe=r.padInfo.top,ae=r.padInfo.left,se=i==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,be=this.readSync(e.dataId),Ae=cr(r.outShape,e.dtype),me=Ae.values,Ce=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],Oe=r.outShape[2]*r.outShape[3]*r.outShape[4],Le=r.outShape[3]*r.outShape[4],Ue=r.outShape[4],Ne=0;NeRr?Rr=xn:i==="avg"&&(Pr+=xn,xr++),isNaN(Rr))break}if(isNaN(Rr))break}if(isNaN(Rr))break}me[Dr+Ke]=i==="avg"?Pr/xr:Rr}}}return Ae.toTensor()},t.prototype.avgPool3d=function(e,r){return wt(e,"avgPool3d"),this.pool3d(e,r,"avg").toFloat()},t.prototype.avgPool3dBackprop=function(e,r,i){wt([e,r],"avgPool3dBackprop");for(var a=i.strideDepth,s=i.strideHeight,u=i.strideWidth,l=i.filterDepth,d=i.filterHeight,A=i.filterWidth,I=i.dilationDepth,O=i.dilationHeight,z=i.dilationWidth,re=i.effectiveFilterDepth,oe=i.effectiveFilterHeight,ae=i.effectiveFilterWidth,se=re-1-i.padInfo.front,be=ae-1-i.padInfo.left,Ae=oe-1-i.padInfo.top,me=cr(r.shape,"float32"),Ce=1/(l*d*A),Oe=this.bufferSync(e),Le=0;Le=i.outDepth||Math.floor(gt)!==gt))for(var vt=0;vt=i.outHeight||Math.floor(At)!==At))for(var ft=0;ft=i.outWidth||Math.floor(Et)!==Et||(ct+=Oe.get(Le,gt,At,Et,Ue))}}}me.set(ct*Ce,Le,Ne,Fe,Ze,Ue)}return me.toTensor()},t.prototype.maxPool3d=function(e,r){return wt(e,"maxPool3d"),this.pool3d(e,r,"max").toFloat()},t.prototype.maxPool3dPositions=function(e,r){for(var i=cr(r.outShape,"int32"),a=r.strideDepth,s=r.strideHeight,u=r.strideWidth,l=r.dilationDepth,d=r.dilationHeight,A=r.dilationWidth,I=r.effectiveFilterDepth,O=r.effectiveFilterHeight,z=r.effectiveFilterWidth,re=r.padInfo.front,oe=r.padInfo.top,ae=r.padInfo.left,se=this.bufferSync(e),be=0;be=bt&&(bt=ir,gt=At*O*z+Et*O+Vt)}i.set(gt,be,me,Ue,Ke,Ae)}}}return i.toTensor()},t.prototype.maxPool3dBackprop=function(e,r,i,a){wt([r,i],"maxPool3dBackprop");for(var s=this.maxPool3dPositions(r,a),u=a.strideDepth,l=a.strideHeight,d=a.strideWidth,A=a.dilationDepth,I=a.dilationHeight,O=a.dilationWidth,z=a.effectiveFilterDepth,re=a.effectiveFilterHeight,oe=a.effectiveFilterWidth,ae=z-1-a.padInfo.front,se=oe-1-a.padInfo.left,be=re-1-a.padInfo.top,Ae=cr(r.shape,"float32"),me=this.bufferSync(s),Ce=this.bufferSync(e),Oe=0;Oe=a.outDepth||Math.floor(bt)!==bt))for(var gt=0;gt=a.outHeight||Math.floor(vt)!==vt))for(var At=0;At=a.outWidth||Math.floor(ft)!==ft)){var Et=z*re*oe-1-me.get(Oe,bt,vt,ft,Le)===ct*re*oe+gt*oe+At?1:0;Et!==0&&(tt+=Ce.get(Oe,bt,vt,ft,Le)*Et)}}}}Ae.set(tt,Oe,Ue,Ne,Fe,Le)}return Ae.toTensor()},t.prototype.cast=function(e,r){return Ss(e,r,this)},t.prototype.reshape=function(e,r){return Bo(e,r)},t.prototype.avgPool=function(e,r){return wt(e,"avgPool"),this.pool(e,r,"avg").toFloat()},t.prototype.resizeBilinear=function(e,r,i,a){wt(e,"resizeBilinear");for(var s=e.shape,u=s[0],l=s[1],d=s[2],A=s[3],I=this.readSync(e.dataId),O=new Float32Array(ce([u,r,i,A])),z=[a&&r>1?l-1:l,a&&i>1?d-1:d],re=[a&&r>1?r-1:r,a&&i>1?i-1:i],oe=0,ae=z[0]/re[0],se=z[1]/re[1],be=0;be1?u-1:u,i&&O>1?l-1:l],oe=[i&&I>1?I-1:I,i&&O>1?O-1:O],ae=re[0]/oe[0],se=re[1]/oe[1],be=this.readSync(e.dataId),Ae=0,me=0;me1?l-1:l,a&&i>1?d-1:d],re=[a&&r>1?r-1:r,a&&i>1?i-1:i],oe=z[0]/re[0],ae=z[1]/re[1],se=0,be=0;be1?u-1:u,i&&O>1?l-1:l],ae=[i&&I>1?I-1:I,i&&O>1?O-1:O],se=oe[0]/ae[0],be=oe[1]/ae[1],Ae=1/se,me=1/be,Ce=2*Math.ceil(Ae)+2,Oe=2*Math.ceil(me)+2,Le=0;Le=I)){var Et=Ue+ft*e.strides[1],It=ft*se;if(Ne===Math.min(u-1,i?Math.round(It):Math.floor(It)))for(var Vt=0;Vt=O)){var fr=Et+ir*e.strides[2],Ar=ir*be;et===Math.min(l-1,i?Math.round(Ar):Math.floor(Ar))&&(vt+=re[fr+gt])}}}}z[tt+gt]=vt}return li(z,r.shape,r.dtype)},t.prototype.batchNormalization=function(e,r,i,a,s,u){wt([e,r,i,s,u],"batchNorm");for(var l=this.readSync(e.dataId),d=this.readSync(r.dataId),A=this.readSync(i.dataId),I=s?this.readSync(s.dataId):new Float32Array([1]),O=u?this.readSync(u.dataId):new Float32Array([0]),z=new Float32Array(l.length),re=O.length,oe=I.length,ae=A.length,se=d.length,be=0,Ae=0,me=0,Ce=0,Oe=0;Oe=re&&(be=0),Ae>=se&&(Ae=0),me>=oe&&(me=0),Ce>=ae&&(Ce=0);return li(z,e.shape)},t.prototype.localResponseNormalization4D=function(e,r,i,a,s){wt(e,"localResponseNormalization4D");var u=e.shape[3],l=u-1,d=this.readSync(e.dataId),A=e.size,I=new Float32Array(A);function O(ae){for(var se=ae%u,be=ae-se+Math.max(0,se-r),Ae=ae-se+Math.min(se+r,l),me=0;be<=Ae;be++){var Ce=d[be];me+=Ce*Ce}return me}for(var z=0;z=0&&u[l]1,function(){return"blockSize should be > 1 for depthToSpace, but was: "+r});for(var a=e.shape[0],s=e.shape[1],u=e.shape[2],l=e.shape[3],d=s*r,A=u*r,I=l/(r*r),O=this.readSync(e.dataId),z=new Float32Array(a*d*A*I),re=0,oe=0;oe=d))for(var et=re>1?(Fe-Ue)*(A-1)/(re-1):0,tt=oe>1?(Ze-Ne)*(I-1)/(oe-1):0,ct=0;ct1?Ue*(A-1)+ct*et:.5*(Ue+Fe)*(A-1);if(bt<0||bt>A-1)for(var gt=0;gt1?Ne*(I-1)+gt*tt:.5*(Ne+Ze)*(I-1))<0||Or>I-1)for(vt=0;vt1?Ne*(I-1)+gt*tt:.5*(Ne+Ze)*(I-1))<0||Or>I-1)for(vt=0;vt=e.size/d)throw new Error("Invalid indices: "+oe+" does not index into "+e.shape);for(var Ae=0;Ae=a/s)throw new Error("Invalid indices: "+se+" does not index into "+i);for(var Ce=0;Ce0,function(){return"scheme must not be an empty string."});var r=n.getInstance();q(r.managers[t]==null,function(){return"A model store manager is already registered for scheme '"+t+"'."}),r.managers[t]=e},n.getManager=function(t){var e=this.getInstance().managers[t];if(e==null)throw new Error("Cannot find model manager for scheme '"+t+"'");return e},n.getSchemes=function(){return Object.keys(this.getInstance().managers)},n}();function Jo(n){if(n.indexOf(Ga)===-1)throw new Error("The url string provided does not contain a scheme. Supported schemes are: "+la.getSchemes().join(","));return{scheme:n.split(Ga)[0],path:n.split(Ga)[1]}}function ff(n,t,e){return e===void 0&&(e=!1),C(this,void 0,void 0,function(){var r,i,a,s,u,l,d,A,I;return E(this,function(O){switch(O.label){case 0:return q(n!==t,function(){return"Old path and new path are the same: '"+n+"'"}),q((r=gi.getLoadHandlers(n)).length>0,function(){return"Copying failed because no load handler is found for source URL "+n+"."}),q(r.length<2,function(){return"Copying failed because more than one ("+r.length+") load handlers for source URL "+n+"."}),i=r[0],q((a=gi.getSaveHandlers(t)).length>0,function(){return"Copying failed because no save handler is found for destination URL "+t+"."}),q(a.length<2,function(){return"Copying failed because more than one ("+r.length+") save handlers for destination URL "+t+"."}),s=a[0],u=Jo(n).scheme,l=Jo(n).path,d=u===Jo(n).scheme,[4,i.load()];case 1:return A=O.sent(),e&&d?[4,la.getManager(u).removeModel(l)]:[3,3];case 2:O.sent(),O.label=3;case 3:return[4,s.save(A)];case 4:return I=O.sent(),!e||d?[3,6]:[4,la.getManager(u).removeModel(l)];case 5:O.sent(),O.label=6;case 6:return[2,I.modelArtifactsInfo]}})})}var Ta="models_store",ca="model_info_store";function df(){if(!P().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");var n=window||self,t=n.indexedDB||n.mozIndexedDB||n.webkitIndexedDB||n.msIndexedDB||n.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function fu(n){var t=n.result;t.createObjectStore(Ta,{keyPath:"modelPath"}),t.createObjectStore(ca,{keyPath:"modelPath"})}var Qa=function(){function n(t){if(this.indexedDB=df(),t==null||!t)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=t}return n.prototype.save=function(t){return C(this,void 0,void 0,function(){return E(this,function(e){if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return[2,this.databaseAction(this.modelPath,t)]})})},n.prototype.load=function(){return C(this,void 0,void 0,function(){return E(this,function(t){return[2,this.databaseAction(this.modelPath)]})})},n.prototype.databaseAction=function(t,e){var r=this;return new Promise(function(i,a){var s=r.indexedDB.open("tensorflowjs",1);s.onupgradeneeded=function(){return fu(s)},s.onsuccess=function(){var u=s.result;if(e==null){var l=u.transaction(Ta,"readonly"),d=l.objectStore(Ta).get(r.modelPath);d.onsuccess=function(){if(d.result==null)return u.close(),a(new Error("Cannot find model with path '"+r.modelPath+"' in IndexedDB."));i(d.result.modelArtifacts)},d.onerror=function(oe){return u.close(),a(d.error)},l.oncomplete=function(){return u.close()}}else{var A,I=ho(e),O=u.transaction(ca,"readwrite"),z=O.objectStore(ca),re=z.put({modelPath:r.modelPath,modelArtifactsInfo:I});re.onsuccess=function(){var oe=(A=u.transaction(Ta,"readwrite")).objectStore(Ta).put({modelPath:r.modelPath,modelArtifacts:e,modelArtifactsInfo:I});oe.onsuccess=function(){return i({modelArtifactsInfo:I})},oe.onerror=function(ae){var se=(z=O.objectStore(ca)).delete(r.modelPath);se.onsuccess=function(){return u.close(),a(oe.error)},se.onerror=function(be){return u.close(),a(oe.error)}}},re.onerror=function(oe){return u.close(),a(re.error)},O.oncomplete=function(){A==null?u.close():A.oncomplete=function(){return u.close()}}}},s.onerror=function(u){return a(s.error)}})},n.URL_SCHEME="indexeddb://",n}(),pf=function(n){return P().getBool("IS_BROWSER")&&!Array.isArray(n)&&n.startsWith(Qa.URL_SCHEME)?(t=n.slice(Qa.URL_SCHEME.length),new Qa(t)):null;var t};gi.registerSaveRouter(pf),gi.registerLoadRouter(pf);var xg=function(){function n(){this.indexedDB=df()}return n.prototype.listModels=function(){return C(this,void 0,void 0,function(){var t=this;return E(this,function(e){return[2,new Promise(function(r,i){var a=t.indexedDB.open("tensorflowjs",1);a.onupgradeneeded=function(){return fu(a)},a.onsuccess=function(){var s=a.result,u=s.transaction(ca,"readonly"),l=u.objectStore(ca).getAll();l.onsuccess=function(){for(var d={},A=0,I=l.result;A0,function(){return"promises must be a none empty array"})})(n),function(a,s){q(a>=0&&a<=1,function(){return"Progress fraction must be in range [0, 1], but got startFraction "+a}),q(s>=0&&s<=1,function(){return"Progress fraction must be in range [0, 1], but got endFraction "+s}),q(s>=a,function(){return"startFraction must be no more than endFraction, but got startFraction "+a+" and endFraction "+s})}(e=e==null?0:e,r=r==null?1:r);var i=0;return Promise.all(n.map(function(a){return a.then(function(s){var u=e+ ++i/n.length*(r-e);return t(u),s}),a}))}function bf(n,t){return C(this,void 0,void 0,function(){var e,r,i,a,s,u,l,d,A;return E(this,function(I){switch(I.label){case 0:return t==null&&(t={}),e=t.fetchFunc==null?P().platform.fetch:t.fetchFunc,r=n.map(function(O){return e(O,t.requestInit,{isBinary:!0})}),i=0,a=.5,t.onProgress!=null?[3,2]:[4,Promise.all(r)];case 1:return s=I.sent(),[3,4];case 2:return[4,yf(r,t.onProgress,i,a)];case 3:s=I.sent(),I.label=4;case 4:return u=s.map(function(O){return O.arrayBuffer()}),l=.5,d=1,t.onProgress!=null?[3,6]:[4,Promise.all(u)];case 5:return A=I.sent(),[3,8];case 6:return[4,yf(u,t.onProgress,l,d)];case 7:A=I.sent(),I.label=8;case 8:return[2,A]}})})}function wf(n){var t=this;return function(e,r,i){return r===void 0&&(r=""),C(t,void 0,void 0,function(){var a,s,u,l,d,A,I,O,z,re;return E(this,function(oe){switch(oe.label){case 0:if(a=e.map(function(){return!1}),s={},u=i!=null?i.map(function(){return!1}):[],l=[],e.forEach(function(ae,se){var be=0;ae.weights.forEach(function(Ae){var me="quantization"in Ae?Ae.quantization.dtype:Ae.dtype,Ce=uu[me]*ce(Ae.shape),Oe=function(){a[se]=!0,s[se]==null&&(s[se]=[]),s[se].push({manifestEntry:Ae,groupOffset:be,sizeBytes:Ce})};i!=null?i.forEach(function(Le,Ue){Le===Ae.name&&(Oe(),u[Ue]=!0)}):Oe(),l.push(Ae.name),be+=Ce})}),!u.every(function(ae){return ae}))throw d=i.filter(function(ae,se){return!u[se]}),new Error("Could not find weights in manifest with names: "+d.join(", ")+`. Manifest JSON has weights with names: `+l.join(", ")+".");return A=a.reduce(function(ae,se,be){return se&&ae.push(be),ae},[]),I=[],A.forEach(function(ae){e[ae].paths.forEach(function(se){var be=r+(r.endsWith("/")?"":"/")+se;I.push(be)})}),[4,n(I)];case 1:return O=oe.sent(),z={},re=0,A.forEach(function(ae){for(var se=e[ae].paths.length,be=0,Ae=0;Ae0,function(){return"URL path for http must not be null, undefined or empty."}),Array.isArray(t)&&q(t.length===2,function(){return"URL paths for http must have a length of 2, (actual length is "+t.length+")."}),this.path=t,e.requestInit!=null&&e.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=e.requestInit||{}}return n.prototype.save=function(t){return C(this,void 0,void 0,function(){var e,r,i,a;return E(this,function(s){switch(s.label){case 0:if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");return(e=Object.assign({method:this.DEFAULT_METHOD},this.requestInit)).body=new FormData,r=[{paths:["./model.weights.bin"],weights:t.weightSpecs}],i={modelTopology:t.modelTopology,format:t.format,generatedBy:t.generatedBy,convertedBy:t.convertedBy,userDefinedMetadata:t.userDefinedMetadata,weightsManifest:r},e.body.append("model.json",new Blob([JSON.stringify(i)],{type:"application/json"}),"model.json"),t.weightData!=null&&e.body.append("model.weights.bin",new Blob([t.weightData],{type:"application/octet-stream"}),"model.weights.bin"),[4,this.fetch(this.path,e)];case 1:if((a=s.sent()).ok)return[2,{modelArtifactsInfo:ho(t),responses:[a]}];throw new Error("BrowserHTTPRequest.save() failed due to HTTP response status "+a.status+".")}})})},n.prototype.load=function(){return C(this,void 0,void 0,function(){var t,e,r,i,a,s,u,l,d,A,I,O;return E(this,function(z){switch(z.label){case 0:return[4,this.fetch(this.path,this.requestInit)];case 1:if(!(t=z.sent()).ok)throw new Error("Request to "+this.path+" failed with status code "+t.status+". Please verify this URL points to the model JSON of the model to load.");z.label=2;case 2:return z.trys.push([2,4,,5]),[4,t.json()];case 3:return e=z.sent(),[3,5];case 4:throw z.sent(),r="Failed to parse model JSON of response from "+this.path+".",this.path.endsWith(".pb")?r+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":r+=" Please make sure the server is serving valid JSON for this request.",new Error(r);case 5:if(i=e.modelTopology,a=e.weightsManifest,s=e.generatedBy,u=e.convertedBy,l=e.format,d=e.userDefinedMetadata,i==null&&a==null)throw new Error("The JSON from HTTP path "+this.path+" contains neither model topology or manifest for weights.");return a==null?[3,7]:[4,this.loadWeights(a)];case 6:O=z.sent(),A=O[0],I=O[1],z.label=7;case 7:return[2,{modelTopology:i,weightSpecs:A,weightData:I,userDefinedMetadata:d,generatedBy:s,convertedBy:u,format:l}]}})})},n.prototype.loadWeights=function(t){return C(this,void 0,void 0,function(){var e,r,i,a,s,u,l,d,A,I,O;return E(this,function(z){switch(z.label){case 0:for(e=Array.isArray(this.path)?this.path[1]:this.path,r=function(re){var oe=re.lastIndexOf("/"),ae=re.lastIndexOf("?"),se=re.substring(0,oe),be=ae>oe?re.substring(ae):"";return[se+"/",be]}(e),i=r[0],a=r[1],s=this.weightPathPrefix||i,u=[],l=0,d=t;l0&&Number.isInteger(e),function(){return"If provided, numClasses must be a positive integer, but got "+e}),q(r.rank===1,function(){return"Expected the rank of labels to be 1, but got "+r.rank}),q(i.rank===1,function(){return"Expected the rank of predictions to be 1, but got "+i.rank}),q(r.shape[0]===i.shape[0],function(){return"Mismatch in the number of examples: "+r.shape[0]+" vs. "+i.shape[0]+". Labels and predictions should have the same number of elements."}),q(e>0&&Number.isInteger(e),function(){return"numClasses is required to be a positive integer, but got "+e});var a=gs(r.asType("int32"),e),s=gs(i.asType("int32"),e);return a.transpose().matMul(s).asType("int32")}}),cb=Object.freeze({confusionMatrix:Bg}),Ng=Ve({fromPixels_:function(n,t){if(t===void 0&&(t=3),t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(n==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");var e=!1,r=!1,i=!1,a=!1,s=!1;if(n.data instanceof Uint8Array)e=!0;else if(typeof ImageData!="undefined"&&n instanceof ImageData)r=!0;else if(typeof HTMLVideoElement!="undefined"&&n instanceof HTMLVideoElement)i=!0;else if(typeof HTMLImageElement!="undefined"&&n instanceof HTMLImageElement)a=!0;else{if(n.getContext==null)throw new Error("pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was "+n.constructor.name);s=!0}if(i&&i&&n.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the