4883 lines
1.2 MiB
4883 lines
1.2 MiB
/*
|
|
Face-API
|
|
homepage: <https://github.com/vladmandic/face-api>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
var nF=Object.defineProperty;var aF=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof require!="undefined"?require:t)[n]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var tb=(e,t)=>{for(var n in t)nF(e,n,{get:t[n],enumerable:!0})};var ze={};tb(ze,{Abs:()=>wl,Acos:()=>kl,Acosh:()=>Il,AdadeltaOptimizer:()=>Ov,AdagradOptimizer:()=>Lv,AdamOptimizer:()=>zv,AdamaxOptimizer:()=>Wv,Add:()=>fs,AddN:()=>yi,All:()=>Sl,Any:()=>Tl,ArgMax:()=>bi,ArgMin:()=>rc,Asin:()=>Nl,Asinh:()=>Cl,Atan:()=>_l,Atan2:()=>Al,Atanh:()=>El,AvgPool:()=>xi,AvgPool3D:()=>sc,AvgPool3DGrad:()=>Yh,AvgPoolGrad:()=>Xh,BackendWasm:()=>wA,BatchMatMul:()=>vi,BatchToSpaceND:()=>$l,Bincount:()=>Zh,BroadcastArgs:()=>Jh,BroadcastTo:()=>$I,Callback:()=>ZN,CallbackList:()=>tN,Cast:()=>wi,Ceil:()=>ki,ClipByValue:()=>gs,Complex:()=>Qh,ComplexAbs:()=>ic,Concat:()=>Fl,Conv2D:()=>Ii,Conv2DBackpropFilter:()=>em,Conv2DBackpropInput:()=>Si,Conv3D:()=>oc,Conv3DBackpropFilterV2:()=>tm,Conv3DBackpropInputV2:()=>nm,Cos:()=>Ti,Cosh:()=>Ni,CropAndResize:()=>Dl,Cumprod:()=>Rl,Cumsum:()=>Ci,CustomCallback:()=>aN,DataStorage:()=>Hh,DenseBincount:()=>am,DepthToSpace:()=>Ml,DepthwiseConv2dNative:()=>_i,DepthwiseConv2dNativeBackpropFilter:()=>rm,DepthwiseConv2dNativeBackpropInput:()=>sm,Diag:()=>im,Dilation2D:()=>lc,Dilation2DBackpropFilter:()=>gh,Dilation2DBackpropInput:()=>fh,ENV:()=>xx,EarlyStopping:()=>JN,Einsum:()=>om,Elu:()=>Ai,EluGrad:()=>lm,Environment:()=>EI,Equal:()=>Ol,Erf:()=>Pl,Exp:()=>$i,ExpandDims:()=>Ll,Expm1:()=>zl,FFT:()=>um,Fill:()=>uc,FlipLeftRight:()=>Wl,Floor:()=>Fi,FloorDiv:()=>Ri,FromPixels:()=>yh,FusedBatchNorm:()=>Di,FusedConv2D:()=>ei,FusedDepthwiseConv2D:()=>ti,GPGPUContext:()=>ph,GatherNd:()=>Vl,GatherV2:()=>Bl,GraphModel:()=>S0,Greater:()=>Ul,GreaterEqual:()=>Mi,History:()=>nN,IFFT:()=>pm,Identity:()=>Pi,Imag:()=>cm,InputSpec:()=>zt,IsFinite:()=>Gl,IsInf:()=>Hl,IsNan:()=>Oi,KernelBackend:()=>ac,LRN:()=>pc,LRNGrad:()=>hm,LayerVariable:()=>KT,LayersModel:()=>_r,LeakyRelu:()=>Li,Less:()=>ql,LessEqual:()=>jl,LinSpace:()=>dm,Log:()=>zi,Log1p:()=>Kl,LogSoftmax:()=>RI,LogicalAnd:()=>Xl,LogicalNot:()=>Yl,LogicalOr:()=>Zl,LogicalXor:()=>FI,LowerBound:()=>KF,MathBackendWebGL:()=>Ef,Max:()=>Wi,MaxPool:()=>Vi,MaxPool3D:()=>cc,MaxPool3DGrad:()=>fm,MaxPoolGrad:()=>mm,MaxPoolWithArgmax:()=>gm,Maximum:()=>Bi,Mean:()=>Ui,Min:()=>Gi,Minimum:()=>Hi,MirrorPad:()=>qi,Mod:()=>Jl,MomentumOptimizer:()=>Bv,Multinomial:()=>ym,Multiply:()=>ji,Neg:()=>Ql,NonMaxSuppressionV3:()=>tu,NonMaxSuppressionV4:()=>nu,NonMaxSuppressionV5:()=>au,NotEqual:()=>eu,OP_SCOPE_SUFFIX:()=>Ix,OneHot:()=>Ki,OnesLike:()=>ru,Optimizer:()=>Rr,OptimizerConstructors:()=>$T,Pack:()=>su,PadV2:()=>Xi,Pool:()=>XF,Pow:()=>Yi,Prelu:()=>Zi,Prod:()=>Ji,RMSPropOptimizer:()=>Vv,RNN:()=>mr,RaggedGather:()=>bm,RaggedRange:()=>xm,RaggedTensorToTensor:()=>vm,Range:()=>dc,Rank:()=>vb,Real:()=>wm,RealDiv:()=>Ei,Reciprocal:()=>Qi,Reduction:()=>vn,Relu:()=>eo,Relu6:()=>ao,Reshape:()=>iu,ResizeBilinear:()=>no,ResizeBilinearGrad:()=>Im,ResizeNearestNeighbor:()=>to,ResizeNearestNeighborGrad:()=>km,Reverse:()=>ro,RotateWithOffset:()=>ku,Round:()=>so,Rsqrt:()=>io,SGDOptimizer:()=>of,ScatterNd:()=>ou,SearchSorted:()=>Sm,Select:()=>lu,Selu:()=>uu,Sequential:()=>hl,Sigmoid:()=>lo,Sign:()=>du,Sin:()=>oo,Sinh:()=>cu,Slice:()=>pu,Softmax:()=>co,Softplus:()=>hu,SpaceToBatchND:()=>mu,SparseFillEmptyRows:()=>hc,SparseReshape:()=>gu,SparseSegmentMean:()=>mc,SparseSegmentSum:()=>fc,SparseToDense:()=>Tm,SplitV:()=>fu,Sqrt:()=>uo,Square:()=>gc,SquaredDifference:()=>ho,Step:()=>bs,StridedSlice:()=>yu,StringNGrams:()=>yc,StringSplit:()=>bc,StringToHashBucketFast:()=>xc,Sub:()=>mo,Sum:()=>po,SymbolicTensor:()=>Va,Tan:()=>fo,Tanh:()=>go,Tensor:()=>Ne,TensorBuffer:()=>jt,Tile:()=>ys,TopK:()=>bu,Transform:()=>xu,Transpose:()=>Cr,Unique:()=>Nm,Unpack:()=>vu,UnsortedSegmentSum:()=>vc,UpperBound:()=>YF,Variable:()=>ss,ZerosLike:()=>wu,_FusedMatMul:()=>Qs,abs:()=>Lt,acos:()=>Ex,acosh:()=>Ax,add:()=>X,addN:()=>tS,all:()=>$m,any:()=>Gp,argMax:()=>ri,argMin:()=>$x,asin:()=>Fx,asinh:()=>Rx,atan:()=>Dx,atan2:()=>Mx,atanh:()=>Px,avgPool:()=>ya,avgPool3d:()=>Lx,backend:()=>eS,backend_util:()=>N,basicLSTMCell:()=>sS,batchNorm:()=>vs,batchNorm2d:()=>zx,batchNorm3d:()=>Wx,batchNorm4d:()=>Bx,batchToSpaceND:()=>Cc,bincount:()=>Vx,booleanMaskAsync:()=>HS,broadcastArgs:()=>iS,broadcastTo:()=>Ys,broadcast_util:()=>Iu,browser:()=>vo,buffer:()=>Le,callbacks:()=>kH,cast:()=>ie,ceil:()=>Ux,clipByValue:()=>tn,clone:()=>sr,complex:()=>Er,concat:()=>Ze,concat1d:()=>Gx,concat2d:()=>Hx,concat3d:()=>qx,concat4d:()=>jx,constraints:()=>ZT,conv1d:()=>Fm,conv2d:()=>Rt,conv2dTranspose:()=>Rm,conv3d:()=>Xx,conv3dTranspose:()=>Yx,copyRegisteredKernels:()=>eR,cos:()=>_c,cosh:()=>Dm,cosineWindow:()=>tf,cumprod:()=>jp,cumsum:()=>Mm,customGrad:()=>ur,data:()=>k2,denseBincount:()=>Ih,deprecationWarn:()=>_x,depthToSpace:()=>Zx,depthwiseConv2d:()=>ws,deregisterOp:()=>TH,device_util:()=>Sc,diag:()=>lS,dilation2d:()=>Jx,disableDeprecationWarnings:()=>pD,dispose:()=>_e,disposeVariables:()=>cD,div:()=>he,divNoNan:()=>Qx,dot:()=>ev,dropout:()=>Fv,einsum:()=>pS,elu:()=>Su,enableDebugMode:()=>uD,enableProdMode:()=>lD,enclosingPowerOfTwo:()=>Rv,engine:()=>Ca,env:()=>H,equal:()=>Jn,erf:()=>tv,euclideanNorm:()=>rv,exp:()=>yn,expandDims:()=>Qt,expm1:()=>sv,eye:()=>Pm,fft:()=>Oc,fill:()=>bn,findBackend:()=>bD,findBackendFactory:()=>xD,floor:()=>Nu,floorDiv:()=>Am,forceHalfFloat:()=>B_,fused:()=>ul,gather:()=>Cu,gatherND:()=>YS,gather_util:()=>Hv,getBackend:()=>gD,getGradient:()=>bb,getKernel:()=>bh,getKernelsForBackend:()=>xh,getThreadsCount:()=>wpe,gpgpu_util:()=>x_,grad:()=>hP,grads:()=>mP,greater:()=>Nn,greaterEqual:()=>$r,ifft:()=>ll,imag:()=>Ec,image:()=>Ea,inTopKAsync:()=>ZS,initializers:()=>JT,input:()=>yN,io:()=>Ht,irfft:()=>Zm,isFinite:()=>iv,isInf:()=>ov,isNaN:()=>lv,keep:()=>Gt,kernel_impls:()=>hr,layers:()=>QT,leakyRelu:()=>Ac,less:()=>Om,lessEqual:()=>ks,linalg:()=>Pv,linspace:()=>fS,loadGraphModel:()=>E6,loadGraphModelSync:()=>A6,loadLayersModel:()=>vU,localResponseNormalization:()=>uv,log:()=>Qn,log1p:()=>$c,logSigmoid:()=>pv,logSoftmax:()=>zm,logSumExp:()=>Wm,logicalAnd:()=>$a,logicalNot:()=>Fc,logicalOr:()=>Bm,logicalXor:()=>cv,losses:()=>uT,lowerBound:()=>yS,matMul:()=>Re,math:()=>xT,max:()=>ha,maxPool:()=>Dt,maxPool3d:()=>dv,maxPoolWithArgmax:()=>bS,maximum:()=>dr,mean:()=>Ct,memory:()=>kh,meshgrid:()=>xS,metrics:()=>KN,min:()=>rl,minimum:()=>_u,mirrorPad:()=>hv,mod:()=>mv,model:()=>IU,models:()=>XN,moments:()=>Rc,movingAverage:()=>qS,mul:()=>z,multiRNNCell:()=>vS,multinomial:()=>wS,neg:()=>bt,nextFrame:()=>qv,norm:()=>Tu,notEqual:()=>li,oneHot:()=>sl,ones:()=>Zn,onesLike:()=>ea,op:()=>L,outerProduct:()=>kS,pad:()=>ba,pad1d:()=>IS,pad2d:()=>SS,pad3d:()=>TS,pad4d:()=>NS,pool:()=>fv,pow:()=>Ar,prelu:()=>Mc,print:()=>Cx,prod:()=>gv,profile:()=>dD,raggedGather:()=>CS,raggedRange:()=>_S,raggedTensorToTensor:()=>ES,rand:()=>AS,randomGamma:()=>DS,randomNormal:()=>Um,randomStandardNormal:()=>MS,randomUniform:()=>Eu,range:()=>ui,ready:()=>fD,real:()=>il,reciprocal:()=>wv,registerBackend:()=>Em,registerCallbackConstructor:()=>TU,registerGradient:()=>DI,registerKernel:()=>wc,registerOp:()=>SH,regularizers:()=>YN,relu:()=>Ke,relu6:()=>Gm,removeBackend:()=>yD,reshape:()=>W,reverse:()=>ga,reverse1d:()=>PS,reverse2d:()=>OS,reverse3d:()=>LS,reverse4d:()=>zS,rfft:()=>Lc,round:()=>Hm,rsqrt:()=>qm,scalar:()=>xe,scatterND:()=>KS,scatter_util:()=>Ev,searchSorted:()=>Vm,selu:()=>jm,separableConv2d:()=>Is,sequential:()=>SU,serialization:()=>ne,setBackend:()=>mD,setPlatform:()=>vD,setThreadsCount:()=>vpe,setWasmPath:()=>bpe,setWasmPaths:()=>xpe,setWebGLContext:()=>UC,setdiff1dAsync:()=>WS,sigmoid:()=>da,sign:()=>kv,signal:()=>lT,sin:()=>Km,sinh:()=>Xm,slice:()=>Ve,slice1d:()=>Pc,slice2d:()=>Ym,slice3d:()=>bo,slice4d:()=>ol,slice_util:()=>Kt,softmax:()=>Xa,softplus:()=>yo,spaceToBatchND:()=>Dc,sparse:()=>pT,sparseToDense:()=>XS,spectral:()=>oT,split:()=>zn,sqrt:()=>pn,square:()=>it,squaredDifference:()=>Jm,squeeze:()=>Ss,stack:()=>Ft,step:()=>xo,stridedSlice:()=>Iv,string:()=>cT,sub:()=>pe,sum:()=>fe,sumOutType:()=>_m,tan:()=>Sv,tanh:()=>ii,tensor:()=>fn,tensor1d:()=>je,tensor2d:()=>Aa,tensor3d:()=>zc,tensor4d:()=>Ra,tensor5d:()=>BS,tensor6d:()=>VS,tensor_util:()=>Ua,test_util:()=>$S,tidy:()=>P,tile:()=>Ln,time:()=>hD,topk:()=>Tv,train:()=>Us,transpose:()=>Ee,truncatedNormal:()=>Qm,unique:()=>Nv,unregisterGradient:()=>QF,unregisterKernel:()=>JF,unsortedSegmentSum:()=>ef,unstack:()=>lt,upcastType:()=>ma,upperBound:()=>US,util:()=>v,valueAndGrad:()=>fP,valueAndGrads:()=>gP,variable:()=>Cv,variableGrads:()=>gS,version:()=>_pe,version_converter:()=>F6,version_core:()=>Ez,version_layers:()=>mw,version_wasm:()=>kpe,version_webgl:()=>uJ,webgl:()=>pJ,webgl_util:()=>VC,where:()=>gn,whereAsync:()=>_v,zeros:()=>It,zerosLike:()=>qe});var rF=Object.create,gx=Object.defineProperty,sF=Object.getOwnPropertyDescriptor,iF=Object.getOwnPropertyNames,oF=Object.getPrototypeOf,lF=Object.prototype.hasOwnProperty,Bt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Ae=(e,t)=>{for(var n in t)gx(e,n,{get:t[n],enumerable:!0})},uF=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of iF(t))!lF.call(e,r)&&r!==n&&gx(e,r,{get:()=>t[r],enumerable:!(a=sF(t,r))||a.enumerable});return e},hs=(e,t,n)=>(n=e!=null?rF(oF(e)):{},uF(t||!e||!e.__esModule?gx(n,"default",{value:e,enumerable:!0}):n,e)),pF=Bt((e,t)=>{t.exports=a;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(S){}function a(S,M,B){this.low=S|0,this.high=M|0,this.unsigned=!!B}a.prototype.__isLong__,Object.defineProperty(a.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}a.isLong=r;var s={},i={};function o(S,M){var B,U,G;return M?(S>>>=0,(G=0<=S&&S<256)&&(U=i[S],U)?U:(B=u(S,(S|0)<0?-1:0,!0),G&&(i[S]=B),B)):(S|=0,(G=-128<=S&&S<128)&&(U=s[S],U)?U:(B=u(S,S<0?-1:0,!1),G&&(s[S]=B),B))}a.fromInt=o;function l(S,M){if(isNaN(S))return M?w:x;if(M){if(S<0)return w;if(S>=g)return $}else{if(S<=-y)return R;if(S+1>=y)return E}return S<0?l(-S,M).neg():u(S%f|0,S/f|0,M)}a.fromNumber=l;function u(S,M,B){return new a(S,M,B)}a.fromBits=u;var p=Math.pow;function d(S,M,B){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return x;if(typeof M=="number"?(B=M,M=!1):M=!!M,B=B||10,B<2||36<B)throw RangeError("radix");var U;if((U=S.indexOf("-"))>0)throw Error("interior hyphen");if(U===0)return d(S.substring(1),M,B).neg();for(var G=l(p(B,8)),j=x,K=0;K<S.length;K+=8){var Z=Math.min(8,S.length-K),J=parseInt(S.substring(K,K+Z),B);if(Z<8){var ee=l(p(B,Z));j=j.mul(ee).add(l(J))}else j=j.mul(G),j=j.add(l(J))}return j.unsigned=M,j}a.fromString=d;function c(S,M){return typeof S=="number"?l(S,M):typeof S=="string"?d(S,M):u(S.low,S.high,typeof M=="boolean"?M:S.unsigned)}a.fromValue=c;var h=1<<16,m=1<<24,f=h*h,g=f*f,y=g/2,b=o(m),x=o(0);a.ZERO=x;var w=o(0,!0);a.UZERO=w;var I=o(1);a.ONE=I;var T=o(1,!0);a.UONE=T;var C=o(-1);a.NEG_ONE=C;var E=u(-1,2147483647,!1);a.MAX_VALUE=E;var $=u(-1,-1,!0);a.MAX_UNSIGNED_VALUE=$;var R=u(0,-2147483648,!1);a.MIN_VALUE=R;var F=a.prototype;F.toInt=function(){return this.unsigned?this.low>>>0:this.low},F.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},F.toString=function(S){if(S=S||10,S<2||36<S)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative())if(this.eq(R)){var M=l(S),B=this.div(M),U=B.mul(M).sub(this);return B.toString(S)+U.toInt().toString(S)}else return"-"+this.neg().toString(S);for(var G=l(p(S,6),this.unsigned),j=this,K="";;){var Z=j.div(G),J=j.sub(Z.mul(G)).toInt()>>>0,ee=J.toString(S);if(j=Z,j.isZero())return ee+K;for(;ee.length<6;)ee="0"+ee;K=""+ee+K}},F.getHighBits=function(){return this.high},F.getHighBitsUnsigned=function(){return this.high>>>0},F.getLowBits=function(){return this.low},F.getLowBitsUnsigned=function(){return this.low>>>0},F.getNumBitsAbs=function(){if(this.isNegative())return this.eq(R)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,M=31;M>0&&!(S&1<<M);M--);return this.high!=0?M+33:M+1},F.isZero=function(){return this.high===0&&this.low===0},F.eqz=F.isZero,F.isNegative=function(){return!this.unsigned&&this.high<0},F.isPositive=function(){return this.unsigned||this.high>=0},F.isOdd=function(){return(this.low&1)===1},F.isEven=function(){return(this.low&1)===0},F.equals=function(S){return r(S)||(S=c(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},F.eq=F.equals,F.notEquals=function(S){return!this.eq(S)},F.neq=F.notEquals,F.ne=F.notEquals,F.lessThan=function(S){return this.comp(S)<0},F.lt=F.lessThan,F.lessThanOrEqual=function(S){return this.comp(S)<=0},F.lte=F.lessThanOrEqual,F.le=F.lessThanOrEqual,F.greaterThan=function(S){return this.comp(S)>0},F.gt=F.greaterThan,F.greaterThanOrEqual=function(S){return this.comp(S)>=0},F.gte=F.greaterThanOrEqual,F.ge=F.greaterThanOrEqual,F.compare=function(S){if(r(S)||(S=c(S)),this.eq(S))return 0;var M=this.isNegative(),B=S.isNegative();return M&&!B?-1:!M&&B?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},F.comp=F.compare,F.negate=function(){return!this.unsigned&&this.eq(R)?R:this.not().add(I)},F.neg=F.negate,F.add=function(S){r(S)||(S=c(S));var M=this.high>>>16,B=this.high&65535,U=this.low>>>16,G=this.low&65535,j=S.high>>>16,K=S.high&65535,Z=S.low>>>16,J=S.low&65535,ee=0,ae=0,te=0,re=0;return re+=G+J,te+=re>>>16,re&=65535,te+=U+Z,ae+=te>>>16,te&=65535,ae+=B+K,ee+=ae>>>16,ae&=65535,ee+=M+j,ee&=65535,u(te<<16|re,ee<<16|ae,this.unsigned)},F.subtract=function(S){return r(S)||(S=c(S)),this.add(S.neg())},F.sub=F.subtract,F.multiply=function(S){if(this.isZero())return x;if(r(S)||(S=c(S)),n){var M=n.mul(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(S.isZero())return x;if(this.eq(R))return S.isOdd()?R:x;if(S.eq(R))return this.isOdd()?R:x;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(b)&&S.lt(b))return l(this.toNumber()*S.toNumber(),this.unsigned);var B=this.high>>>16,U=this.high&65535,G=this.low>>>16,j=this.low&65535,K=S.high>>>16,Z=S.high&65535,J=S.low>>>16,ee=S.low&65535,ae=0,te=0,re=0,se=0;return se+=j*ee,re+=se>>>16,se&=65535,re+=G*ee,te+=re>>>16,re&=65535,re+=j*J,te+=re>>>16,re&=65535,te+=U*ee,ae+=te>>>16,te&=65535,te+=G*J,ae+=te>>>16,te&=65535,te+=j*Z,ae+=te>>>16,te&=65535,ae+=B*ee+U*J+G*Z+j*K,ae&=65535,u(re<<16|se,ae<<16|te,this.unsigned)},F.mul=F.multiply,F.divide=function(S){if(r(S)||(S=c(S)),S.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var M=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?w:x;var B,U,G;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return w;if(S.gt(this.shru(1)))return T;G=w}else{if(this.eq(R)){if(S.eq(I)||S.eq(C))return R;if(S.eq(R))return I;var j=this.shr(1);return B=j.div(S).shl(1),B.eq(x)?S.isNegative()?I:C:(U=this.sub(S.mul(B)),G=B.add(U.div(S)),G)}else if(S.eq(R))return this.unsigned?w:x;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();G=x}for(U=this;U.gte(S);){B=Math.max(1,Math.floor(U.toNumber()/S.toNumber()));for(var K=Math.ceil(Math.log(B)/Math.LN2),Z=K<=48?1:p(2,K-48),J=l(B),ee=J.mul(S);ee.isNegative()||ee.gt(U);)B-=Z,J=l(B,this.unsigned),ee=J.mul(S);J.isZero()&&(J=I),G=G.add(J),U=U.sub(ee)}return G},F.div=F.divide,F.modulo=function(S){if(r(S)||(S=c(S)),n){var M=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},F.mod=F.modulo,F.rem=F.modulo,F.not=function(){return u(~this.low,~this.high,this.unsigned)},F.and=function(S){return r(S)||(S=c(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},F.or=function(S){return r(S)||(S=c(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},F.xor=function(S){return r(S)||(S=c(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},F.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<<S,this.high<<S|this.low>>>32-S,this.unsigned):u(0,this.low<<S-32,this.unsigned)},F.shl=F.shiftLeft,F.shiftRight=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low>>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},F.shr=F.shiftRight,F.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var M=this.high;if(S<32){var B=this.low;return u(B>>>S|M<<32-S,M>>>S,this.unsigned)}else return S===32?u(M,0,this.unsigned):u(M>>>S-32,0,this.unsigned)},F.shru=F.shiftRightUnsigned,F.shr_u=F.shiftRightUnsigned,F.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},F.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},F.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},F.toBytesLE=function(){var S=this.high,M=this.low;return[M&255,M>>>8&255,M>>>16&255,M>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},F.toBytesBE=function(){var S=this.high,M=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,M>>>24,M>>>16&255,M>>>8&255,M&255]},a.fromBytes=function(S,M,B){return B?a.fromBytesLE(S,M):a.fromBytesBE(S,M)},a.fromBytesLE=function(S,M){return new a(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,M)},a.fromBytesBE=function(S,M){return new a(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],M)}}),cF=Bt(()=>{}),dF=Bt(()=>{}),hF=Bt((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=String(d);for(var c=0;c<d.length;c++){u+=d.charCodeAt(c);var h=.02519603282416938*u;u=h>>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),mF=Bt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),fF=Bt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,d==p.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),gF=Bt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h<c.length;++h)f[h&7]=f[h&7]<<15^c.charCodeAt(h)+f[h+1&7]<<13;for(;f.length<8;)f.push(0);for(h=0;h<8&&f[h]===0;++h);for(h==8?m=f[7]=-1:m=f[h],d.x=f,d.i=0,h=256;h>0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),yF=Bt((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g<x;++g)c&&(m^=c.charCodeAt((g+32)%c.length)),g===0&&(y=m),m^=m<<10,m^=m>>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),bF=Bt((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d<p.length+20;d++)u.b^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.a=l.a,u.b=l.b,u.c=l.c,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),xF=Bt(()=>{}),vF=Bt((e,t)=>{(function(n,a,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),d=p*2,c=s-1,h;function m(I,T,C){var E=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[I,w(a)]:I==null?x():I,3),E),R=new f(E),F=function(){for(var S=R.g(i),M=u,B=0;S<p;)S=(S+B)*s,M*=s,B=R.g(1);for(;S>=d;)S/=2,M/=2,B>>>=1;return(S+B)/M};return F.int32=function(){return R.g(4)|0},F.quick=function(){return R.g(4)/4294967296},F.double=F,b(w(R.S),a),(T.pass||C||function(S,M,B,U){return U&&(U.S&&g(U,R),S.state=function(){return g(R,{})}),B?(r[l]=S,M):S})(F,$,"global"in T?T.global:this==r,T.state)}function f(I){var T,C=I.length,E=this,$=0,R=E.i=E.j=0,F=E.S=[];for(C||(I=[C++]);$<s;)F[$]=$++;for($=0;$<s;$++)F[$]=F[R=c&R+I[$%C]+(T=F[$])],F[R]=T;(E.g=function(S){for(var M,B=0,U=E.i,G=E.j,j=E.S;S--;)M=j[U=c&U+1],B=B*s+j[c&(j[U]=j[G=c&G+M])+(j[G]=M)];return E.i=U,E.j=G,B})(s)}function g(I,T){return T.i=I.i,T.j=I.j,T.S=I.S.slice(),T}function y(I,T){var C=[],E=typeof I,$;if(T&&E=="object")for($ in I)try{C.push(y(I[$],T-1))}catch(R){}return C.length?C:E=="string"?I:I+"\0"}function b(I,T){for(var C=I+"",E,$=0;$<C.length;)T[c&$]=c&(E^=T[c&$]*19)+C.charCodeAt($++);return w(T)}function x(){try{var I;return h&&(I=h.randomBytes)?I=I(s):(I=new Uint8Array(s),(n.crypto||n.msCrypto).getRandomValues(I)),w(I)}catch(E){var T=n.navigator,C=T&&T.plugins;return[+new Date,n,C,n.screen,w(a)]}}function w(I){return String.fromCharCode.apply(0,I)}if(b(r.random(),a),typeof t=="object"&&t.exports){t.exports=m;try{h=xF()}catch(I){}}else typeof define=="function"&&define.amd?define(function(){return m}):r["seed"+l]=m})(typeof self!="undefined"?self:e,[],Math)}),Gh=Bt((e,t)=>{var n=hF(),a=mF(),r=fF(),s=gF(),i=yF(),o=bF(),l=vF();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),yI=Bt(()=>{}),yx=Bt(()=>{}),bI=Bt(()=>{}),wF=Bt(()=>{}),kF=Bt(()=>{}),IF=Bt(()=>{}),SF=Bt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};function s(){return ue.buffer!=De&&st(ue.buffer),dt}function i(){return ue.buffer!=De&&st(ue.buffer),Hn}function o(){return ue.buffer!=De&&st(ue.buffer),Pt}function l(){return ue.buffer!=De&&st(ue.buffer),on}function u(){return ue.buffer!=De&&st(ue.buffer),Fn}function p(){return ue.buffer!=De&&st(ue.buffer),ia}function d(){return ue.buffer!=De&&st(ue.buffer),Rn}var c=typeof r!="undefined"?r:{},h,m;c.ready=new Promise(function(D,q){h=D,m=q});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},c),y=[],b="./this.program",x=(D,q)=>{throw q},w=typeof window=="object",I=typeof importScripts=="function",T=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=c.ENVIRONMENT_IS_PTHREAD||!1,E="";function $(D){return c.locateFile?c.locateFile(D,E):E+D}var R,F,S,M;function B(D){D instanceof Ls||J("exiting due to exception: "+D)}if(T){var U=yx(),G=bI();I?E=G.dirname(E)+"/":E=__dirname+"/",R=(q,le)=>(q=Bo(q)?new URL(q):G.normalize(q),U.readFileSync(q,le?void 0:"utf8")),S=q=>{var le=R(q,!0);return le.buffer||(le=new Uint8Array(le)),le},F=(q,le,Te)=>{q=Bo(q)?new URL(q):G.normalize(q),U.readFile(q,function(Me,Fe){Me?Te(Me):le(Fe.buffer)})},process.argv.length>1&&(b=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(q){if(!(q instanceof Ls))throw q}),process.on("unhandledRejection",function(q){throw q}),x=(q,le)=>{if(ka())throw process.exitCode=q,le;B(le),process.exit(q)},c.inspect=function(){return"[Emscripten Module object]"};let D;try{D=wF()}catch(q){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),q}global.Worker=D.Worker}else(w||I)&&(I?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof a!="undefined"&&a&&(E=a),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",T||(R=D=>{var q=new XMLHttpRequest;return q.open("GET",D,!1),q.send(null),q.responseText},I&&(S=D=>{var q=new XMLHttpRequest;return q.open("GET",D,!1),q.responseType="arraybuffer",q.send(null),new Uint8Array(q.response)}),F=(D,q,le)=>{var Te=new XMLHttpRequest;Te.open("GET",D,!0),Te.responseType="arraybuffer",Te.onload=()=>{if(Te.status==200||Te.status==0&&Te.response){q(Te.response);return}le()},Te.onerror=le,Te.send(null)}),M=D=>document.title=D);T&&typeof performance=="undefined"&&(global.performance=kF().performance);var j=console.log.bind(console),K=console.warn.bind(console);T&&(j=D=>U.writeSync(1,D+`
|
|
`),K=D=>U.writeSync(2,D+`
|
|
`));var Z=c.print||j,J=c.printErr||K;Object.assign(c,g),g=null,c.arguments&&(y=c.arguments),c.thisProgram&&(b=c.thisProgram),c.quit&&(x=c.quit);var ee=4,ae=Atomics.load,te=Atomics.store,re=Atomics.compareExchange,se;c.wasmBinary&&(se=c.wasmBinary);var be=c.noExitRuntime||!0;typeof WebAssembly!="object"&&Os("no native wasm support detected");var ue,ye,ke=!1,Se;function We(D,q){D||Os(q)}var Ge=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function pt(D,q,le){for(var Te=q+le,Me=q;D[Me]&&!(Me>=Te);)++Me;if(Me-q>16&&D.buffer&&Ge)return Ge.decode(D.buffer instanceof SharedArrayBuffer?D.slice(q,Me):D.subarray(q,Me));for(var Fe="";q<Me;){var me=D[q++];if(!(me&128)){Fe+=String.fromCharCode(me);continue}var we=D[q++]&63;if((me&224)==192){Fe+=String.fromCharCode((me&31)<<6|we);continue}var Nt=D[q++]&63;if((me&240)==224?me=(me&15)<<12|we<<6|Nt:me=(me&7)<<18|we<<12|Nt<<6|D[q++]&63,me<65536)Fe+=String.fromCharCode(me);else{var la=me-65536;Fe+=String.fromCharCode(55296|la>>10,56320|la&1023)}}return Fe}function at(D,q){return D?pt(i(),D,q):""}function Qe(D,q,le,Te){if(!(Te>0))return 0;for(var Me=le,Fe=le+Te-1,me=0;me<D.length;++me){var we=D.charCodeAt(me);if(we>=55296&&we<=57343){var Nt=D.charCodeAt(++me);we=65536+((we&1023)<<10)|Nt&1023}if(we<=127){if(le>=Fe)break;q[le++]=we}else if(we<=2047){if(le+1>=Fe)break;q[le++]=192|we>>6,q[le++]=128|we&63}else if(we<=65535){if(le+2>=Fe)break;q[le++]=224|we>>12,q[le++]=128|we>>6&63,q[le++]=128|we&63}else{if(le+3>=Fe)break;q[le++]=240|we>>18,q[le++]=128|we>>12&63,q[le++]=128|we>>6&63,q[le++]=128|we&63}}return q[le]=0,le-Me}function et(D,q,le){return Qe(D,i(),q,le)}var De,dt,Hn,Pt,sa,on,Fn,ia,Rn;C&&(De=c.buffer);function st(D){De=D,c.HEAP8=dt=new Int8Array(D),c.HEAP16=Pt=new Int16Array(D),c.HEAP32=on=new Int32Array(D),c.HEAPU8=Hn=new Uint8Array(D),c.HEAPU16=sa=new Uint16Array(D),c.HEAPU32=Fn=new Uint32Array(D),c.HEAPF32=ia=new Float32Array(D),c.HEAPF64=Rn=new Float64Array(D)}var Dn=c.INITIAL_MEMORY||16777216;if(C)ue=c.wasmMemory,De=c.buffer;else if(c.wasmMemory)ue=c.wasmMemory;else if(ue=new WebAssembly.Memory({initial:Dn/65536,maximum:32768,shared:!0}),!(ue.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),T&&J("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ue&&(De=ue.buffer),Dn=De.byteLength,st(De);var qn,br=[],zo=[],Qa=[],dp=!1;function ka(){return be}function Ur(){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)hg(c.preRun.shift());mp(br)}function Zt(){dp=!0,!C&&mp(zo)}function gd(){if(!C){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)T1(c.postRun.shift());mp(Qa)}}function hg(D){br.unshift(D)}function mg(D){zo.unshift(D)}function T1(D){Qa.unshift(D)}var Gr=0,Wo=null,xr=null;function fg(D){Gr++,c.monitorRunDependencies&&c.monitorRunDependencies(Gr)}function yd(D){if(Gr--,c.monitorRunDependencies&&c.monitorRunDependencies(Gr),Gr==0&&(Wo!==null&&(clearInterval(Wo),Wo=null),xr)){var q=xr;xr=null,q()}}function Os(D){c.onAbort&&c.onAbort(D),D="Aborted("+D+")",J(D),ke=!0,Se=1,D+=". Build with -sASSERTIONS for more info.";var q=new WebAssembly.RuntimeError(D);throw m(q),q}var gg="data:application/octet-stream;base64,";function bd(D){return D.startsWith(gg)}function Bo(D){return D.startsWith("file://")}var mn;mn="tfjs-backend-wasm-threaded-simd.wasm",bd(mn)||(mn=$(mn));function xd(D){try{if(D==mn&&se)return new Uint8Array(se);if(S)return S(D);throw"both async and sync fetching of the wasm failed"}catch(q){Os(q)}}function yg(){if(!se&&(w||I)){if(typeof fetch=="function"&&!Bo(mn))return fetch(mn,{credentials:"same-origin"}).then(function(D){if(!D.ok)throw"failed to load wasm binary file at '"+mn+"'";return D.arrayBuffer()}).catch(function(){return xd(mn)});if(F)return new Promise(function(D,q){F(mn,function(le){D(new Uint8Array(le))},q)})}return Promise.resolve().then(function(){return xd(mn)})}function bg(){var D={env:Fd,wasi_snapshot_preview1:Fd};function q(me,we){var Nt=me.exports;if(c.asm=Nt,Cg(c.asm._emscripten_tls_init),qn=c.asm.__indirect_function_table,mg(c.asm.__wasm_call_ctors),ye=we,!C){var la=$e.unusedWorkers.length;$e.unusedWorkers.forEach(function(wr){$e.loadWasmModuleToWorker(wr,function(){--la||yd("wasm-instantiate")})})}}C||fg("wasm-instantiate");function le(me){q(me.instance,me.module)}function Te(me){return yg().then(function(we){return WebAssembly.instantiate(we,D)}).then(function(we){return we}).then(me,function(we){J("failed to asynchronously prepare wasm: "+we),Os(we)})}function Me(){return!se&&typeof WebAssembly.instantiateStreaming=="function"&&!bd(mn)&&!Bo(mn)&&!T&&typeof fetch=="function"?fetch(mn,{credentials:"same-origin"}).then(function(me){var we=WebAssembly.instantiateStreaming(me,D);return we.then(le,function(Nt){return J("wasm streaming compile failed: "+Nt),J("falling back to ArrayBuffer instantiation"),Te(le)})}):Te(le)}if(c.instantiateWasm)try{var Fe=c.instantiateWasm(D,q);return Fe}catch(me){J("Module.instantiateWasm callback failed with error: "+me),m(me)}return Me().catch(m),{}}var N1,C1,vd={};function Ls(D){this.name="ExitStatus",this.message="Program terminated with exit("+D+")",this.status=D}function xg(D){var q=$e.pthreads[D];delete $e.pthreads[D],q.terminate(),Jy(D),$e.runningWorkers.splice($e.runningWorkers.indexOf(q),1),q.pthread_ptr=0}function vg(D){var q=$e.pthreads[D];q.postMessage({cmd:"cancel"})}function hp(D){var q=$e.pthreads[D];We(q),$e.returnWorkerToPool(q)}function wg(D){var q=$e.getNewWorker();if(!q)return 6;$e.runningWorkers.push(q),$e.pthreads[D.pthread_ptr]=q,q.pthread_ptr=D.pthread_ptr;var le={cmd:"run",start_routine:D.startRoutine,arg:D.arg,pthread_ptr:D.pthread_ptr};return q.runPthread=()=>{T&&q.ref(),q.postMessage(le,D.transferList),delete q.runPthread},q.loaded&&q.runPthread(),0}var wd={varargs:void 0,get:function(){wd.varargs+=4;var D=l()[wd.varargs-4>>2];return D},getStr:function(D){var q=at(D);return q}};function kd(D){if(C)return Hr(1,1,D);Se=D,ka()||($e.terminateAllThreads(),c.onExit&&c.onExit(D),ke=!0),x(D,new Ls(D))}function kg(D,q){if(Se=D,!q&&C)throw Sd(D),"unwind";kd(D)}var Id=kg;function Ig(D){if(D instanceof Ls||D=="unwind")return Se;x(1,D)}var $e={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?$e.initWorker():$e.initMainThread()},initMainThread:function(){for(var D=8;D--;)$e.allocateUnusedWorker()},initWorker:function(){be=!1},setExitStatus:function(D){Se=D},terminateAllThreads:function(){for(var D of Object.values($e.pthreads))$e.returnWorkerToPool(D);for(var D of $e.unusedWorkers)D.terminate();$e.unusedWorkers=[]},returnWorkerToPool:function(D){var q=D.pthread_ptr;delete $e.pthreads[q],$e.unusedWorkers.push(D),$e.runningWorkers.splice($e.runningWorkers.indexOf(D),1),D.pthread_ptr=0,T&&D.unref(),Jy(q)},receiveObjectTransfer:function(D){},threadInitTLS:function(){$e.tlsInitFunctions.forEach(D=>D())},loadWasmModuleToWorker:function(D,q){D.onmessage=Fe=>{var me=Fe.data,we=me.cmd;if(D.pthread_ptr&&($e.currentProxiedOperationCallerThread=D.pthread_ptr),me.targetThread&&me.targetThread!=Ld()){var Nt=$e.pthreads[me.targetThread];Nt?Nt.postMessage(me,me.transferList):J('Internal error! Worker sent a message "'+we+'" to target pthread '+me.targetThread+", but that thread no longer exists!"),$e.currentProxiedOperationCallerThread=void 0;return}we==="processProxyingQueue"?fp(me.queue):we==="spawnThread"?wg(me):we==="cleanupThread"?hp(me.thread):we==="killThread"?xg(me.thread):we==="cancelThread"?vg(me.thread):we==="loaded"?(D.loaded=!0,T&&D.unref(),q&&q(D),D.runPthread&&D.runPthread()):we==="print"?Z("Thread "+me.threadId+": "+me.text):we==="printErr"?J("Thread "+me.threadId+": "+me.text):we==="alert"?alert("Thread "+me.threadId+": "+me.text):me.target==="setimmediate"?D.postMessage(me):we==="callHandler"?c[me.handler](...me.args):we&&J("worker sent an unknown command "+we),$e.currentProxiedOperationCallerThread=void 0},D.onerror=Fe=>{var me="worker sent an error!";throw J(me+" "+Fe.filename+":"+Fe.lineno+": "+Fe.message),Fe},T&&(D.on("message",function(Fe){D.onmessage({data:Fe})}),D.on("error",function(Fe){D.onerror(Fe)}),D.on("detachedExit",function(){}));var le=[],Te=["onExit","onAbort","print","printErr"];for(var Me of Te)c.hasOwnProperty(Me)&&le.push(Me);D.postMessage({cmd:"load",handlers:le,urlOrBlob:c.mainScriptUrlOrBlob||a,wasmMemory:ue,wasmModule:ye})},allocateUnusedWorker:function(){var D,q=$("tfjs-backend-wasm-threaded-simd.worker.js");D=new Worker(q),$e.unusedWorkers.push(D)},getNewWorker:function(){return $e.unusedWorkers.length==0&&($e.allocateUnusedWorker(),$e.loadWasmModuleToWorker($e.unusedWorkers[0])),$e.unusedWorkers.pop()}};c.PThread=$e;function mp(D){for(;D.length>0;)D.shift()(c)}function Sg(){var D=Ld(),q=l()[D+52>>2],le=l()[D+56>>2],Te=q-le;R1(q,Te),zd(q)}c.establishStackSpace=Sg;function Sd(D){if(C)return Hr(2,0,D);try{Id(D)}catch(q){Ig(q)}}var Vo=[];function Tg(D){var q=Vo[D];return q||(D>=Vo.length&&(Vo.length=D+1),Vo[D]=q=qn.get(D)),q}function Ng(D,q){var le=Tg(D)(q);ka()?$e.setExitStatus(le):F1(le)}c.invokeEntryPoint=Ng;function Cg(D){$e.tlsInitFunctions.push(D)}function _g(D){E1(D,!I,1,!w),$e.threadInitTLS()}function Eg(D){C?postMessage({cmd:"cleanupThread",thread:D}):hp(D)}function Td(D,q,le,Te){return C?Hr(3,1,D,q,le,Te):Nd(D,q,le,Te)}function Nd(D,q,le,Te){if(typeof SharedArrayBuffer=="undefined")return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Me=[],Fe=0;if(C&&(Me.length===0||Fe))return Td(D,q,le,Te);if(Fe)return Fe;var me={startRoutine:le,pthread_ptr:D,arg:Te,transferList:Me};return C?(me.cmd="spawnThread",postMessage(me,Me),0):wg(me)}function Ag(){return 65536}var $g=!0;function Fg(){return $g}function fp(D){Atomics.store(l(),D>>2,1),Ld()&&$1(D),Atomics.compareExchange(l(),D>>2,1,0)}c.executeNotifiedProxyingQueue=fp;function Rg(D,q,le,Te){if(D==q)setTimeout(()=>fp(Te));else if(C)postMessage({targetThread:D,cmd:"processProxyingQueue",queue:Te});else{var Me=$e.pthreads[D];if(!Me)return;Me.postMessage({cmd:"processProxyingQueue",queue:Te})}return 1}function Dg(D,q,le){return-1}function Mg(){Os("")}function zs(D){zs.shown||(zs.shown={}),zs.shown[D]||(zs.shown[D]=1,T&&(D="warning: "+D),J(D))}function Pg(){T||I||zs("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Og(){return Date.now()}function Cd(){return 2147483648}function Lg(){return Cd()}var gp;T?gp=()=>{var D=process.hrtime();return D[0]*1e3+D[1]/1e6}:gp=()=>performance.timeOrigin+performance.now();function zg(D,q,le){i().copyWithin(D,q,q+le)}function Wg(){return T?IF().cpus().length:navigator.hardwareConcurrency}function Bg(D){var q=Qy(),le=D();return zd(q),le}function Hr(D,q){var le=arguments.length-2,Te=arguments;return Bg(()=>{for(var Me=le,Fe=Wd(Me*8),me=Fe>>3,we=0;we<le;we++){var Nt=Te[2+we];d()[me+we]=Nt}return A1(D,Me,Fe,q)})}var yp=[];function Vg(D,q,le){yp.length=q;for(var Te=le>>3,Me=0;Me<q;Me++)yp[Me]=d()[Te+Me];var Fe=D<0,me=Fe?vd[-D-1]:Zg[D];return me.apply(null,yp)}function Ug(D){try{return ue.grow(D-De.byteLength+65535>>>16),st(ue.buffer),1}catch(q){}}function Gg(D){var q=i().length;if(D=D>>>0,D<=q)return!1;var le=Cd();if(D>le)return!1;let Te=(Nt,la)=>Nt+(la-Nt%la)%la;for(var Me=1;Me<=4;Me*=2){var Fe=q*(1+.2/Me);Fe=Math.min(Fe,D+100663296);var me=Math.min(le,Te(Math.max(D,Fe),65536)),we=Ug(me);if(we)return!0}return!1}function Hg(){throw"unwind"}function _d(D){return C?Hr(4,1,D):52}function Ed(D,q,le,Te,Me){return C?Hr(5,1,D,q,le,Te,Me):70}var qg=[null,[],[]];function jg(D,q){var le=qg[D];q===0||q===10?((D===1?Z:J)(pt(le,0)),le.length=0):le.push(q)}function Ad(D,q,le,Te){if(C)return Hr(6,1,D,q,le,Te);for(var Me=0,Fe=0;Fe<le;Fe++){var me=u()[q>>2],we=u()[q+4>>2];q+=8;for(var Nt=0;Nt<we;Nt++)jg(D,i()[me+Nt]);Me+=we}return u()[Te>>2]=Me,0}function $d(D){var q=c["_"+D];return q}function Kg(D,q){s().set(D,q)}function Xg(D,q,le,Te,Me){var Fe={string:ua=>{var qo=0;if(ua!=null&&ua!==0){var P1=(ua.length<<2)+1;qo=Wd(P1),et(ua,qo,P1)}return qo},array:ua=>{var qo=Wd(ua.length);return Kg(ua,qo),qo}};function me(ua){return q==="string"?at(ua):q==="boolean"?Boolean(ua):ua}var we=$d(D),Nt=[],la=0;if(Te)for(var wr=0;wr<Te.length;wr++){var M1=Fe[le[wr]];M1?(la===0&&(la=Qy()),Nt[wr]=M1(Te[wr])):Nt[wr]=Te[wr]}var eb=we.apply(null,Nt);function tF(ua){return la!==0&&zd(la),me(ua)}return eb=tF(eb),eb}function Yg(D,q,le,Te){le=le||[];var Me=le.every(me=>me==="number"||me==="boolean"),Fe=q!=="string";return Fe&&Me&&!Te?$d(D):function(){return Xg(D,q,le,arguments,Te)}}$e.init();var Zg=[null,kd,Sd,Td,_d,Ed,Ad],Fd={__emscripten_init_main_thread_js:_g,__emscripten_thread_cleanup:Eg,__pthread_create_js:Nd,_emscripten_default_pthread_stack_size:Ag,_emscripten_get_now_is_monotonic:Fg,_emscripten_notify_task_queue:Rg,_emscripten_set_offscreencanvas_size:Dg,abort:Mg,emscripten_check_blocking_allowed:Pg,emscripten_date_now:Og,emscripten_get_heap_max:Lg,emscripten_get_now:gp,emscripten_memcpy_big:zg,emscripten_num_logical_cores:Wg,emscripten_receive_on_main_thread_js:Vg,emscripten_resize_heap:Gg,emscripten_unwind_to_js_event_loop:Hg,exit:Id,fd_close:_d,fd_seek:Ed,fd_write:Ad,memory:ue||c.wasmMemory},_1=bg(),Jg=c.___wasm_call_ctors=function(){return(Jg=c.___wasm_call_ctors=c.asm.__wasm_call_ctors).apply(null,arguments)},Qg=c._init=function(){return(Qg=c._init=c.asm.init).apply(null,arguments)},ey=c._init_with_threads_count=function(){return(ey=c._init_with_threads_count=c.asm.init_with_threads_count).apply(null,arguments)},ty=c._get_threads_count=function(){return(ty=c._get_threads_count=c.asm.get_threads_count).apply(null,arguments)},ny=c._register_tensor=function(){return(ny=c._register_tensor=c.asm.register_tensor).apply(null,arguments)},ay=c._dispose_data=function(){return(ay=c._dispose_data=c.asm.dispose_data).apply(null,arguments)},ry=c._dispose=function(){return(ry=c._dispose=c.asm.dispose).apply(null,arguments)},sy=c._Abs=function(){return(sy=c._Abs=c.asm.Abs).apply(null,arguments)},iy=c._Add=function(){return(iy=c._Add=c.asm.Add).apply(null,arguments)},oy=c._AddN=function(){return(oy=c._AddN=c.asm.AddN).apply(null,arguments)},ly=c._All=function(){return(ly=c._All=c.asm.All).apply(null,arguments)},uy=c._Any=function(){return(uy=c._Any=c.asm.Any).apply(null,arguments)},py=c._ArgMax=function(){return(py=c._ArgMax=c.asm.ArgMax).apply(null,arguments)},cy=c._AvgPool=function(){return(cy=c._AvgPool=c.asm.AvgPool).apply(null,arguments)},dy=c._BatchMatMul=function(){return(dy=c._BatchMatMul=c.asm.BatchMatMul).apply(null,arguments)},hy=c._Ceil=function(){return(hy=c._Ceil=c.asm.Ceil).apply(null,arguments)},my=c._ClipByValue=function(){return(my=c._ClipByValue=c.asm.ClipByValue).apply(null,arguments)},fy=c._Conv2D=function(){return(fy=c._Conv2D=c.asm.Conv2D).apply(null,arguments)},gy=c._Conv2DBackpropInput=function(){return(gy=c._Conv2DBackpropInput=c.asm.Conv2DBackpropInput).apply(null,arguments)},yy=c._Cos=function(){return(yy=c._Cos=c.asm.Cos).apply(null,arguments)},by=c._Cosh=function(){return(by=c._Cosh=c.asm.Cosh).apply(null,arguments)},xy=c._CropAndResize=function(){return(xy=c._CropAndResize=c.asm.CropAndResize).apply(null,arguments)},vy=c._Cumprod=function(){return(vy=c._Cumprod=c.asm.Cumprod).apply(null,arguments)},wy=c._Cumsum=function(){return(wy=c._Cumsum=c.asm.Cumsum).apply(null,arguments)},ky=c._DepthToSpace=function(){return(ky=c._DepthToSpace=c.asm.DepthToSpace).apply(null,arguments)},Iy=c._DepthwiseConv2dNative=function(){return(Iy=c._DepthwiseConv2dNative=c.asm.DepthwiseConv2dNative).apply(null,arguments)},Sy=c._Elu=function(){return(Sy=c._Elu=c.asm.Elu).apply(null,arguments)},Ty=c._Equal=function(){return(Ty=c._Equal=c.asm.Equal).apply(null,arguments)},Ny=c._Exp=function(){return(Ny=c._Exp=c.asm.Exp).apply(null,arguments)},Cy=c._FlipLeftRight=function(){return(Cy=c._FlipLeftRight=c.asm.FlipLeftRight).apply(null,arguments)},_y=c._Floor=function(){return(_y=c._Floor=c.asm.Floor).apply(null,arguments)},Ey=c._FloorDiv=function(){return(Ey=c._FloorDiv=c.asm.FloorDiv).apply(null,arguments)},Ay=c._FusedBatchNorm=function(){return(Ay=c._FusedBatchNorm=c.asm.FusedBatchNorm).apply(null,arguments)},$y=c._FusedConv2D=function(){return($y=c._FusedConv2D=c.asm.FusedConv2D).apply(null,arguments)},Fy=c._FusedDepthwiseConv2D=function(){return(Fy=c._FusedDepthwiseConv2D=c.asm.FusedDepthwiseConv2D).apply(null,arguments)},Ry=c._Gather=function(){return(Ry=c._Gather=c.asm.Gather).apply(null,arguments)},Dy=c._GatherNd=function(){return(Dy=c._GatherNd=c.asm.GatherNd).apply(null,arguments)},My=c._Greater=function(){return(My=c._Greater=c.asm.Greater).apply(null,arguments)},Py=c._GreaterEqual=function(){return(Py=c._GreaterEqual=c.asm.GreaterEqual).apply(null,arguments)},Oy=c._IsNan=function(){return(Oy=c._IsNan=c.asm.IsNan).apply(null,arguments)},Ly=c._LeakyRelu=function(){return(Ly=c._LeakyRelu=c.asm.LeakyRelu).apply(null,arguments)},zy=c._Less=function(){return(zy=c._Less=c.asm.Less).apply(null,arguments)},Wy=c._LessEqual=function(){return(Wy=c._LessEqual=c.asm.LessEqual).apply(null,arguments)},By=c._Log=function(){return(By=c._Log=c.asm.Log).apply(null,arguments)},Vy=c._LogicalAnd=function(){return(Vy=c._LogicalAnd=c.asm.LogicalAnd).apply(null,arguments)},Uy=c._LogicalNot=function(){return(Uy=c._LogicalNot=c.asm.LogicalNot).apply(null,arguments)},Gy=c._LogicalOr=function(){return(Gy=c._LogicalOr=c.asm.LogicalOr).apply(null,arguments)},Hy=c._LogicalXor=function(){return(Hy=c._LogicalXor=c.asm.LogicalXor).apply(null,arguments)},qy=c._Max=function(){return(qy=c._Max=c.asm.Max).apply(null,arguments)},jy=c._MaxPool=function(){return(jy=c._MaxPool=c.asm.MaxPool).apply(null,arguments)},Rd=c._Maximum=function(){return(Rd=c._Maximum=c.asm.Maximum).apply(null,arguments)},Dd=c._Mean=function(){return(Dd=c._Mean=c.asm.Mean).apply(null,arguments)},bp=c._Min=function(){return(bp=c._Min=c.asm.Min).apply(null,arguments)},Ky=c._Minimum=function(){return(Ky=c._Minimum=c.asm.Minimum).apply(null,arguments)},Xy=c._MirrorPad=function(){return(Xy=c._MirrorPad=c.asm.MirrorPad).apply(null,arguments)},Uo=c._Multiply=function(){return(Uo=c._Multiply=c.asm.Multiply).apply(null,arguments)},Md=c._Neg=function(){return(Md=c._Neg=c.asm.Neg).apply(null,arguments)},Go=c._NonMaxSuppressionV3=function(){return(Go=c._NonMaxSuppressionV3=c.asm.NonMaxSuppressionV3).apply(null,arguments)},Ho=c._NonMaxSuppressionV4=function(){return(Ho=c._NonMaxSuppressionV4=c.asm.NonMaxSuppressionV4).apply(null,arguments)},Yy=c._NonMaxSuppressionV5=function(){return(Yy=c._NonMaxSuppressionV5=c.asm.NonMaxSuppressionV5).apply(null,arguments)},Y=c._NotEqual=function(){return(Y=c._NotEqual=c.asm.NotEqual).apply(null,arguments)},oe=c._OneHot=function(){return(oe=c._OneHot=c.asm.OneHot).apply(null,arguments)},Ie=c._PadV2=function(){return(Ie=c._PadV2=c.asm.PadV2).apply(null,arguments)},Xe=c._Pow=function(){return(Xe=c._Pow=c.asm.Pow).apply(null,arguments)},wt=c._Prelu=function(){return(wt=c._Prelu=c.asm.Prelu).apply(null,arguments)},kt=c._Prod=function(){return(kt=c._Prod=c.asm.Prod).apply(null,arguments)},He=c._RealDiv=function(){return(He=c._RealDiv=c.asm.RealDiv).apply(null,arguments)},Be=c._Reciprocal=function(){return(Be=c._Reciprocal=c.asm.Reciprocal).apply(null,arguments)},Ot=c._Relu=function(){return(Ot=c._Relu=c.asm.Relu).apply(null,arguments)},oa=c._Relu6=function(){return(oa=c._Relu6=c.asm.Relu6).apply(null,arguments)},vr=c._ResizeBilinear=function(){return(vr=c._ResizeBilinear=c.asm.ResizeBilinear).apply(null,arguments)},Pd=c._ResizeNearestNeighbor=function(){return(Pd=c._ResizeNearestNeighbor=c.asm.ResizeNearestNeighbor).apply(null,arguments)},xp=c._Reverse=function(){return(xp=c._Reverse=c.asm.Reverse).apply(null,arguments)},Zy=c._RotateWithOffset=function(){return(Zy=c._RotateWithOffset=c.asm.RotateWithOffset).apply(null,arguments)},Mn=c._Round=function(){return(Mn=c._Round=c.asm.Round).apply(null,arguments)},qr=c._Rsqrt=function(){return(qr=c._Rsqrt=c.asm.Rsqrt).apply(null,arguments)},Od=c._ScatterNd=function(){return(Od=c._ScatterNd=c.asm.ScatterNd).apply(null,arguments)},I$=c._SelectV2=function(){return(I$=c._SelectV2=c.asm.SelectV2).apply(null,arguments)},S$=c._Sigmoid=function(){return(S$=c._Sigmoid=c.asm.Sigmoid).apply(null,arguments)},T$=c._Sin=function(){return(T$=c._Sin=c.asm.Sin).apply(null,arguments)},N$=c._Softmax=function(){return(N$=c._Softmax=c.asm.Softmax).apply(null,arguments)},C$=c._SparseFillEmptyRows=function(){return(C$=c._SparseFillEmptyRows=c.asm.SparseFillEmptyRows).apply(null,arguments)},_$=c._SparseReshape=function(){return(_$=c._SparseReshape=c.asm.SparseReshape).apply(null,arguments)},E$=c._SparseSegmentReduction=function(){return(E$=c._SparseSegmentReduction=c.asm.SparseSegmentReduction).apply(null,arguments)},A$=c._Sqrt=function(){return(A$=c._Sqrt=c.asm.Sqrt).apply(null,arguments)},$$=c._Square=function(){return($$=c._Square=c.asm.Square).apply(null,arguments)},F$=c._SquaredDifference=function(){return(F$=c._SquaredDifference=c.asm.SquaredDifference).apply(null,arguments)},R$=c._Step=function(){return(R$=c._Step=c.asm.Step).apply(null,arguments)},D$=c._StridedSlice=function(){return(D$=c._StridedSlice=c.asm.StridedSlice).apply(null,arguments)},M$=c._Sub=function(){return(M$=c._Sub=c.asm.Sub).apply(null,arguments)},P$=c._Sum=function(){return(P$=c._Sum=c.asm.Sum).apply(null,arguments)},O$=c._Tan=function(){return(O$=c._Tan=c.asm.Tan).apply(null,arguments)},L$=c._Tanh=function(){return(L$=c._Tanh=c.asm.Tanh).apply(null,arguments)},z$=c._Tile=function(){return(z$=c._Tile=c.asm.Tile).apply(null,arguments)},W$=c._TopK=function(){return(W$=c._TopK=c.asm.TopK).apply(null,arguments)},B$=c._Transform=function(){return(B$=c._Transform=c.asm.Transform).apply(null,arguments)},V$=c._Transpose=function(){return(V$=c._Transpose=c.asm.Transpose).apply(null,arguments)},U$=c.__FusedMatMul=function(){return(U$=c.__FusedMatMul=c.asm._FusedMatMul).apply(null,arguments)},G$=c._malloc=function(){return(G$=c._malloc=c.asm.malloc).apply(null,arguments)},H$=c._free=function(){return(H$=c._free=c.asm.free).apply(null,arguments)},q$=c.__emscripten_tls_init=function(){return(q$=c.__emscripten_tls_init=c.asm._emscripten_tls_init).apply(null,arguments)},Ld=c._pthread_self=function(){return(Ld=c._pthread_self=c.asm.pthread_self).apply(null,arguments)},j$=c.___errno_location=function(){return(j$=c.___errno_location=c.asm.__errno_location).apply(null,arguments)},E1=c.__emscripten_thread_init=function(){return(E1=c.__emscripten_thread_init=c.asm._emscripten_thread_init).apply(null,arguments)},K$=c.__emscripten_thread_crashed=function(){return(K$=c.__emscripten_thread_crashed=c.asm._emscripten_thread_crashed).apply(null,arguments)},X$=c._emscripten_main_thread_process_queued_calls=function(){return(X$=c._emscripten_main_thread_process_queued_calls=c.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},Y$=c._emscripten_main_browser_thread_id=function(){return(Y$=c._emscripten_main_browser_thread_id=c.asm.emscripten_main_browser_thread_id).apply(null,arguments)},A1=c._emscripten_run_in_main_runtime_thread_js=function(){return(A1=c._emscripten_run_in_main_runtime_thread_js=c.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},Z$=c._emscripten_dispatch_to_thread_=function(){return(Z$=c._emscripten_dispatch_to_thread_=c.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},$1=c.__emscripten_proxy_execute_task_queue=function(){return($1=c.__emscripten_proxy_execute_task_queue=c.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},Jy=c.__emscripten_thread_free_data=function(){return(Jy=c.__emscripten_thread_free_data=c.asm._emscripten_thread_free_data).apply(null,arguments)},F1=c.__emscripten_thread_exit=function(){return(F1=c.__emscripten_thread_exit=c.asm._emscripten_thread_exit).apply(null,arguments)},R1=c._emscripten_stack_set_limits=function(){return(R1=c._emscripten_stack_set_limits=c.asm.emscripten_stack_set_limits).apply(null,arguments)},Qy=c.stackSave=function(){return(Qy=c.stackSave=c.asm.stackSave).apply(null,arguments)},zd=c.stackRestore=function(){return(zd=c.stackRestore=c.asm.stackRestore).apply(null,arguments)},Wd=c.stackAlloc=function(){return(Wd=c.stackAlloc=c.asm.stackAlloc).apply(null,arguments)},J$=c.dynCall_iijjiiii=function(){return(J$=c.dynCall_iijjiiii=c.asm.dynCall_iijjiiii).apply(null,arguments)},Q$=c.dynCall_jiji=function(){return(Q$=c.dynCall_jiji=c.asm.dynCall_jiji).apply(null,arguments)};c.keepRuntimeAlive=ka,c.wasmMemory=ue,c.cwrap=Yg,c.ExitStatus=Ls,c.PThread=$e;var Bd;xr=function D(){Bd||D1(),Bd||(xr=D)};function D1(D){if(D=D||y,Gr>0)return;if(C){h(c),Zt(),startWorker(c);return}if(Ur(),Gr>0)return;function q(){Bd||(Bd=!0,c.calledRun=!0,!ke&&(Zt(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),gd()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),q()},1)):q()}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();D1();var Vd;f&&(Vd={uncaughtException:process.listeners("uncaughtException").filter(function(D){return!f.uncaughtException.indexOf(D)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(D){return!f.unhandledRejection.indexOf(D)>-1})});var Ud;if(typeof WasmBackendModule!="undefined")Ud=WasmBackendModule;else if(typeof r!="undefined")Ud=r;else throw new Error("Could not find wasm module in post.js");if(Vd){var eF=Ud._dispose;Ud._dispose=function(){eF(),Vd.uncaughtException.forEach(function(D){process.removeListener("uncaughtException",D)}),Vd.unhandledRejection.forEach(function(D){process.removeListener("unhandledRejection",D)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),TF=Bt((e,t)=>{t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"
|
|
");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}),NF=Bt((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(Y,oe){i=Y,o=oe});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],d="./this.program",c=(Y,oe)=>{throw oe},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(Y){return s.locateFile?s.locateFile(Y,g):g+Y}var b,x,w,I;function T(Y){Y instanceof Wo||R("exiting due to exception: "+Y)}if(f){var C=yx(),E=bI();m?g=E.dirname(g)+"/":g=__dirname+"/",b=(Y,oe)=>(Y=Ur(Y)?new URL(Y):E.normalize(Y),C.readFileSync(Y,oe?void 0:"utf8")),w=Y=>{var oe=b(Y,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},x=(Y,oe,Ie)=>{Y=Ur(Y)?new URL(Y):E.normalize(Y),C.readFile(Y,function(Xe,wt){Xe?Ie(Xe):oe(wt.buffer)})},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof Wo))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),c=(Y,oe)=>{if(Hn())throw process.exitCode=Y,oe;T(oe),process.exit(Y)},s.inspect=function(){return"[Emscripten Module object]"}}else(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),a&&(g=a),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",b=Y=>{var oe=new XMLHttpRequest;return oe.open("GET",Y,!1),oe.send(null),oe.responseText},m&&(w=Y=>{var oe=new XMLHttpRequest;return oe.open("GET",Y,!1),oe.responseType="arraybuffer",oe.send(null),new Uint8Array(oe.response)}),x=(Y,oe,Ie)=>{var Xe=new XMLHttpRequest;Xe.open("GET",Y,!0),Xe.responseType="arraybuffer",Xe.onload=()=>{if(Xe.status==200||Xe.status==0&&Xe.response){oe(Xe.response);return}Ie()},Xe.onerror=Ie,Xe.send(null)},I=Y=>document.title=Y);var $=s.print||console.log.bind(console),R=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(d=s.thisProgram),s.quit&&(c=s.quit);var F=4,S;s.wasmBinary&&(S=s.wasmBinary);var M=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Qa("no native wasm support detected");var B,U=!1,G;function j(Y,oe){Y||Qa(oe)}var K=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Z(Y,oe,Ie){for(var Xe=oe+Ie,wt=oe;Y[wt]&&!(wt>=Xe);)++wt;if(wt-oe>16&&Y.buffer&&K)return K.decode(Y.subarray(oe,wt));for(var kt="";oe<wt;){var He=Y[oe++];if(!(He&128)){kt+=String.fromCharCode(He);continue}var Be=Y[oe++]&63;if((He&224)==192){kt+=String.fromCharCode((He&31)<<6|Be);continue}var Ot=Y[oe++]&63;if((He&240)==224?He=(He&15)<<12|Be<<6|Ot:He=(He&7)<<18|Be<<12|Ot<<6|Y[oe++]&63,He<65536)kt+=String.fromCharCode(He);else{var oa=He-65536;kt+=String.fromCharCode(55296|oa>>10,56320|oa&1023)}}return kt}function J(Y,oe){return Y?Z(se,Y,oe):""}function ee(Y,oe,Ie,Xe){if(!(Xe>0))return 0;for(var wt=Ie,kt=Ie+Xe-1,He=0;He<Y.length;++He){var Be=Y.charCodeAt(He);if(Be>=55296&&Be<=57343){var Ot=Y.charCodeAt(++He);Be=65536+((Be&1023)<<10)|Ot&1023}if(Be<=127){if(Ie>=kt)break;oe[Ie++]=Be}else if(Be<=2047){if(Ie+1>=kt)break;oe[Ie++]=192|Be>>6,oe[Ie++]=128|Be&63}else if(Be<=65535){if(Ie+2>=kt)break;oe[Ie++]=224|Be>>12,oe[Ie++]=128|Be>>6&63,oe[Ie++]=128|Be&63}else{if(Ie+3>=kt)break;oe[Ie++]=240|Be>>18,oe[Ie++]=128|Be>>12&63,oe[Ie++]=128|Be>>6&63,oe[Ie++]=128|Be&63}}return oe[Ie]=0,Ie-wt}function ae(Y,oe,Ie){return ee(Y,se,oe,Ie)}var te,re,se,be,ue,ye,ke,Se,We;function Ge(Y){te=Y,s.HEAP8=re=new Int8Array(Y),s.HEAP16=be=new Int16Array(Y),s.HEAP32=ye=new Int32Array(Y),s.HEAPU8=se=new Uint8Array(Y),s.HEAPU16=ue=new Uint16Array(Y),s.HEAPU32=ke=new Uint32Array(Y),s.HEAPF32=Se=new Float32Array(Y),s.HEAPF64=We=new Float64Array(Y)}var pt=s.INITIAL_MEMORY||16777216,at,Qe=[],et=[],De=[],dt=!1;function Hn(){return M}function Pt(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Fn(s.preRun.shift());xr(Qe)}function sa(){dt=!0,xr(et)}function on(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Rn(s.postRun.shift());xr(De)}function Fn(Y){Qe.unshift(Y)}function ia(Y){et.unshift(Y)}function Rn(Y){De.unshift(Y)}var st=0,Dn=null,qn=null;function br(Y){st++,s.monitorRunDependencies&&s.monitorRunDependencies(st)}function zo(Y){if(st--,s.monitorRunDependencies&&s.monitorRunDependencies(st),st==0&&(Dn!==null&&(clearInterval(Dn),Dn=null),qn)){var oe=qn;qn=null,oe()}}function Qa(Y){s.onAbort&&s.onAbort(Y),Y="Aborted("+Y+")",R(Y),U=!0,G=1,Y+=". Build with -sASSERTIONS for more info.";var oe=new WebAssembly.RuntimeError(Y);throw o(oe),oe}var dp="data:application/octet-stream;base64,";function ka(Y){return Y.startsWith(dp)}function Ur(Y){return Y.startsWith("file://")}var Zt;Zt="tfjs-backend-wasm.wasm",ka(Zt)||(Zt=y(Zt));function gd(Y){try{if(Y==Zt&&S)return new Uint8Array(S);if(w)return w(Y);throw"both async and sync fetching of the wasm failed"}catch(oe){Qa(oe)}}function hg(){if(!S&&(h||m)){if(typeof fetch=="function"&&!Ur(Zt))return fetch(Zt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Zt+"'";return Y.arrayBuffer()}).catch(function(){return gd(Zt)});if(x)return new Promise(function(Y,oe){x(Zt,function(Ie){Y(new Uint8Array(Ie))},oe)})}return Promise.resolve().then(function(){return gd(Zt)})}function mg(){var Y={env:hp,wasi_snapshot_preview1:hp};function oe(He,Be){var Ot=He.exports;s.asm=Ot,B=s.asm.memory,Ge(B.buffer),at=s.asm.__indirect_function_table,ia(s.asm.__wasm_call_ctors),zo("wasm-instantiate")}br("wasm-instantiate");function Ie(He){oe(He.instance)}function Xe(He){return hg().then(function(Be){return WebAssembly.instantiate(Be,Y)}).then(function(Be){return Be}).then(He,function(Be){R("failed to asynchronously prepare wasm: "+Be),Qa(Be)})}function wt(){return!S&&typeof WebAssembly.instantiateStreaming=="function"&&!ka(Zt)&&!Ur(Zt)&&!f&&typeof fetch=="function"?fetch(Zt,{credentials:"same-origin"}).then(function(He){var Be=WebAssembly.instantiateStreaming(He,Y);return Be.then(Ie,function(Ot){return R("wasm streaming compile failed: "+Ot),R("falling back to ArrayBuffer instantiation"),Xe(Ie)})}):Xe(Ie)}if(s.instantiateWasm)try{var kt=s.instantiateWasm(Y,oe);return kt}catch(He){R("Module.instantiateWasm callback failed with error: "+He),o(He)}return wt().catch(o),{}}var T1,Gr;function Wo(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function xr(Y){for(;Y.length>0;)Y.shift()(s)}function fg(){Qa("")}function yd(){return 2147483648}function Os(){return yd()}function gg(Y,oe,Ie){se.copyWithin(Y,oe,oe+Ie)}function bd(Y){try{return B.grow(Y-te.byteLength+65535>>>16),Ge(B.buffer),1}catch(oe){}}function Bo(Y){var oe=se.length;Y=Y>>>0;var Ie=yd();if(Y>Ie)return!1;let Xe=(Ot,oa)=>Ot+(oa-Ot%oa)%oa;for(var wt=1;wt<=4;wt*=2){var kt=oe*(1+.2/wt);kt=Math.min(kt,Y+100663296);var He=Math.min(Ie,Xe(Math.max(Y,kt),65536)),Be=bd(He);if(Be)return!0}return!1}var mn={varargs:void 0,get:function(){mn.varargs+=4;var Y=ye[mn.varargs-4>>2];return Y},getStr:function(Y){var oe=J(Y);return oe}};function xd(Y){return 52}function yg(Y,oe,Ie,Xe,wt){return 70}var bg=[null,[],[]];function N1(Y,oe){var Ie=bg[Y];oe===0||oe===10?((Y===1?$:R)(Z(Ie,0)),Ie.length=0):Ie.push(oe)}function C1(Y,oe,Ie,Xe){for(var wt=0,kt=0;kt<Ie;kt++){var He=ke[oe>>2],Be=ke[oe+4>>2];oe+=8;for(var Ot=0;Ot<Be;Ot++)N1(Y,se[He+Ot]);wt+=Be}return ke[Xe>>2]=wt,0}function vd(Y){var oe=s["_"+Y];return oe}function Ls(Y,oe){re.set(Y,oe)}function xg(Y,oe,Ie,Xe,wt){var kt={string:Mn=>{var qr=0;if(Mn!=null&&Mn!==0){var Od=(Mn.length<<2)+1;qr=bp(Od),ae(Mn,qr,Od)}return qr},array:Mn=>{var qr=bp(Mn.length);return Ls(Mn,qr),qr}};function He(Mn){return oe==="string"?J(Mn):oe==="boolean"?Boolean(Mn):Mn}var Be=vd(Y),Ot=[],oa=0;if(Xe)for(var vr=0;vr<Xe.length;vr++){var Pd=kt[Ie[vr]];Pd?(oa===0&&(oa=Rd()),Ot[vr]=Pd(Xe[vr])):Ot[vr]=Xe[vr]}var xp=Be.apply(null,Ot);function Zy(Mn){return oa!==0&&Dd(oa),He(Mn)}return xp=Zy(xp),xp}function vg(Y,oe,Ie,Xe){Ie=Ie||[];var wt=Ie.every(He=>He==="number"||He==="boolean"),kt=oe!=="string";return kt&&wt&&!Xe?vd(Y):function(){return xg(Y,oe,Ie,arguments,Xe)}}var hp={abort:fg,emscripten_get_heap_max:Os,emscripten_memcpy_big:gg,emscripten_resize_heap:Bo,fd_close:xd,fd_seek:yg,fd_write:C1},wg=mg(),wd=s.___wasm_call_ctors=function(){return(wd=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},kd=s._init=function(){return(kd=s._init=s.asm.init).apply(null,arguments)},kg=s._init_with_threads_count=function(){return(kg=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Id=s._get_threads_count=function(){return(Id=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},Ig=s._register_tensor=function(){return(Ig=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},$e=s._dispose_data=function(){return($e=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},mp=s._dispose=function(){return(mp=s._dispose=s.asm.dispose).apply(null,arguments)},Sg=s._Abs=function(){return(Sg=s._Abs=s.asm.Abs).apply(null,arguments)},Sd=s._Add=function(){return(Sd=s._Add=s.asm.Add).apply(null,arguments)},Vo=s._AddN=function(){return(Vo=s._AddN=s.asm.AddN).apply(null,arguments)},Tg=s._All=function(){return(Tg=s._All=s.asm.All).apply(null,arguments)},Ng=s._Any=function(){return(Ng=s._Any=s.asm.Any).apply(null,arguments)},Cg=s._ArgMax=function(){return(Cg=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},_g=s._AvgPool=function(){return(_g=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},Eg=s._BatchMatMul=function(){return(Eg=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Td=s._Ceil=function(){return(Td=s._Ceil=s.asm.Ceil).apply(null,arguments)},Nd=s._ClipByValue=function(){return(Nd=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Ag=s._Conv2D=function(){return(Ag=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},$g=s._Conv2DBackpropInput=function(){return($g=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},Fg=s._Cos=function(){return(Fg=s._Cos=s.asm.Cos).apply(null,arguments)},fp=s._Cosh=function(){return(fp=s._Cosh=s.asm.Cosh).apply(null,arguments)},Rg=s._CropAndResize=function(){return(Rg=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Dg=s._Cumprod=function(){return(Dg=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Mg=s._Cumsum=function(){return(Mg=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},zs=s._DepthToSpace=function(){return(zs=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Pg=s._DepthwiseConv2dNative=function(){return(Pg=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Og=s._Elu=function(){return(Og=s._Elu=s.asm.Elu).apply(null,arguments)},Cd=s._Equal=function(){return(Cd=s._Equal=s.asm.Equal).apply(null,arguments)},Lg=s._Exp=function(){return(Lg=s._Exp=s.asm.Exp).apply(null,arguments)},gp=s._FlipLeftRight=function(){return(gp=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},zg=s._Floor=function(){return(zg=s._Floor=s.asm.Floor).apply(null,arguments)},Wg=s._FloorDiv=function(){return(Wg=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},Bg=s._FusedBatchNorm=function(){return(Bg=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},Hr=s._FusedConv2D=function(){return(Hr=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},yp=s._FusedDepthwiseConv2D=function(){return(yp=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},Vg=s._Gather=function(){return(Vg=s._Gather=s.asm.Gather).apply(null,arguments)},Ug=s._GatherNd=function(){return(Ug=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},Gg=s._Greater=function(){return(Gg=s._Greater=s.asm.Greater).apply(null,arguments)},Hg=s._GreaterEqual=function(){return(Hg=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},_d=s._IsNan=function(){return(_d=s._IsNan=s.asm.IsNan).apply(null,arguments)},Ed=s._LeakyRelu=function(){return(Ed=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},qg=s._Less=function(){return(qg=s._Less=s.asm.Less).apply(null,arguments)},jg=s._LessEqual=function(){return(jg=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},Ad=s._Log=function(){return(Ad=s._Log=s.asm.Log).apply(null,arguments)},$d=s._LogicalAnd=function(){return($d=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},Kg=s._LogicalNot=function(){return(Kg=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},Xg=s._LogicalOr=function(){return(Xg=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},Yg=s._LogicalXor=function(){return(Yg=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},Zg=s._Max=function(){return(Zg=s._Max=s.asm.Max).apply(null,arguments)},Fd=s._MaxPool=function(){return(Fd=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},_1=s._Maximum=function(){return(_1=s._Maximum=s.asm.Maximum).apply(null,arguments)},Jg=s._Mean=function(){return(Jg=s._Mean=s.asm.Mean).apply(null,arguments)},Qg=s._Min=function(){return(Qg=s._Min=s.asm.Min).apply(null,arguments)},ey=s._Minimum=function(){return(ey=s._Minimum=s.asm.Minimum).apply(null,arguments)},ty=s._MirrorPad=function(){return(ty=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},ny=s._Multiply=function(){return(ny=s._Multiply=s.asm.Multiply).apply(null,arguments)},ay=s._Neg=function(){return(ay=s._Neg=s.asm.Neg).apply(null,arguments)},ry=s._NonMaxSuppressionV3=function(){return(ry=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},sy=s._NonMaxSuppressionV4=function(){return(sy=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},iy=s._NonMaxSuppressionV5=function(){return(iy=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},oy=s._NotEqual=function(){return(oy=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},ly=s._OneHot=function(){return(ly=s._OneHot=s.asm.OneHot).apply(null,arguments)},uy=s._PadV2=function(){return(uy=s._PadV2=s.asm.PadV2).apply(null,arguments)},py=s._Pow=function(){return(py=s._Pow=s.asm.Pow).apply(null,arguments)},cy=s._Prelu=function(){return(cy=s._Prelu=s.asm.Prelu).apply(null,arguments)},dy=s._Prod=function(){return(dy=s._Prod=s.asm.Prod).apply(null,arguments)},hy=s._RealDiv=function(){return(hy=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},my=s._Reciprocal=function(){return(my=s._Reciprocal=s.asm.Reciprocal).apply(null,arguments)},fy=s._Relu=function(){return(fy=s._Relu=s.asm.Relu).apply(null,arguments)},gy=s._Relu6=function(){return(gy=s._Relu6=s.asm.Relu6).apply(null,arguments)},yy=s._ResizeBilinear=function(){return(yy=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},by=s._ResizeNearestNeighbor=function(){return(by=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},xy=s._Reverse=function(){return(xy=s._Reverse=s.asm.Reverse).apply(null,arguments)},vy=s._RotateWithOffset=function(){return(vy=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},wy=s._Round=function(){return(wy=s._Round=s.asm.Round).apply(null,arguments)},ky=s._Rsqrt=function(){return(ky=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Iy=s._ScatterNd=function(){return(Iy=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},Sy=s._SelectV2=function(){return(Sy=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},Ty=s._Sigmoid=function(){return(Ty=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},Ny=s._Sin=function(){return(Ny=s._Sin=s.asm.Sin).apply(null,arguments)},Cy=s._Softmax=function(){return(Cy=s._Softmax=s.asm.Softmax).apply(null,arguments)},_y=s._SparseFillEmptyRows=function(){return(_y=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},Ey=s._SparseReshape=function(){return(Ey=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},Ay=s._SparseSegmentReduction=function(){return(Ay=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},$y=s._Sqrt=function(){return($y=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},Fy=s._Square=function(){return(Fy=s._Square=s.asm.Square).apply(null,arguments)},Ry=s._SquaredDifference=function(){return(Ry=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},Dy=s._Step=function(){return(Dy=s._Step=s.asm.Step).apply(null,arguments)},My=s._StridedSlice=function(){return(My=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},Py=s._Sub=function(){return(Py=s._Sub=s.asm.Sub).apply(null,arguments)},Oy=s._Sum=function(){return(Oy=s._Sum=s.asm.Sum).apply(null,arguments)},Ly=s._Tan=function(){return(Ly=s._Tan=s.asm.Tan).apply(null,arguments)},zy=s._Tanh=function(){return(zy=s._Tanh=s.asm.Tanh).apply(null,arguments)},Wy=s._Tile=function(){return(Wy=s._Tile=s.asm.Tile).apply(null,arguments)},By=s._TopK=function(){return(By=s._TopK=s.asm.TopK).apply(null,arguments)},Vy=s._Transform=function(){return(Vy=s._Transform=s.asm.Transform).apply(null,arguments)},Uy=s._Transpose=function(){return(Uy=s._Transpose=s.asm.Transpose).apply(null,arguments)},Gy=s.__FusedMatMul=function(){return(Gy=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},Hy=s._malloc=function(){return(Hy=s._malloc=s.asm.malloc).apply(null,arguments)},qy=s._free=function(){return(qy=s._free=s.asm.free).apply(null,arguments)},jy=s.___errno_location=function(){return(jy=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Rd=s.stackSave=function(){return(Rd=s.stackSave=s.asm.stackSave).apply(null,arguments)},Dd=s.stackRestore=function(){return(Dd=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},bp=s.stackAlloc=function(){return(bp=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},Ky=s.dynCall_iijjiiii=function(){return(Ky=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},Xy=s.dynCall_jiji=function(){return(Xy=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=vg;var Uo;qn=function Y(){Uo||Md(),Uo||(qn=Y)};function Md(Y){if(Y=Y||p,st>0||(Pt(),st>0))return;function oe(){Uo||(Uo=!0,s.calledRun=!0,!U&&(sa(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),on()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),oe()},1)):oe()}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Md();var Go;l&&(Go={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!l.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!l.unhandledRejection.indexOf(Y)>-1})});var Ho;if(typeof r!="undefined")Ho=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Ho=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(Go){var Yy=Ho._dispose;Ho._dispose=function(){Yy(),Go.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),Go.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),Hh=class{constructor(e,t){this.backend=e,this.dataMover=t,this.data=new WeakMap,this.dataIdsCount=0}get(e){return this.data.has(e)||this.dataMover.moveData(this.backend,e),this.data.get(e)}set(e,t){this.dataIdsCount++,this.data.set(e,t)}has(e){return this.data.has(e)}delete(e){return this.dataIdsCount--,this.data.delete(e)}numDataIds(){return this.dataIdsCount}},ac=class{refCount(e){return jn("refCount")}incRef(e){return jn("incRef")}timerAvailable(){return!0}time(e){return jn("time")}read(e){return jn("read")}readSync(e){return jn("readSync")}readToGPU(e,t){return jn("readToGPU")}numDataIds(){return jn("numDataIds")}disposeData(e,t){return jn("disposeData")}write(e,t,n){return jn("write")}move(e,t,n,a,r){return jn("move")}createTensorFromGPUData(e,t,n){return jn("createTensorFromGPUData")}memory(){return jn("memory")}floatPrecision(){return jn("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return jn("dispose")}};function jn(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function xI(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,dh(e,t,n)}function CF(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,a=0;for(;n>0;)a=Math.random()*n|0,n--,dh(e,n,a),dh(t,n,a)}function zp(e,t,n){return Math.max(e,Math.min(t,n))}function _F(e){return e%2===0?e:e+1}function dh(e,t,n){let a=e[t];e[t]=e[n],e[n]=a}function EF(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function AF(e,t){let n=Math.random();return t*n+(1-n)*e}function $F(e,t){let n=0;for(let a=0;a<e.length;a++){let r=Number(e[a])-Number(t[a]);n+=r*r}return n}function A(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function Sn(e,t,n=""){A(ms(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function gi(e){A(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function mt(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function FF(e){return e.length===0}function ms(e,t){if(e===t)return!0;if(e==null||t==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function nl(e){return e%1===0}function RF(e){if(Math.tanh!=null)return Math.tanh(e);if(e===1/0)return 1;if(e===-1/0)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function DF(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function MF(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return xI(t),t}function Mp(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function PF(e,t=r=>0,n,a){return new Promise((r,s)=>{let i=0,o=()=>{if(e()){r();return}i++;let l=t(i);if(n!=null&&i>=n){s();return}a!=null?a(o,l):setTimeout(o,l)};o()})}function OF(e,t){let n=1,a=-1;for(let s=0;s<e.length;++s)if(e[s]>=0)n*=e[s];else if(e[s]===-1){if(a!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${a} and dim ${s}`);a=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(a===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let r=e.slice();return r[a]=t/n,r}function Fa(e,t){let n=t.length;return e=e==null?t.map((a,r)=>r):[].concat(e),A(e.every(a=>a>=-n&&a<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),A(e.every(a=>nl(a)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(a=>a<0?n+a:a)}function vI(e,t){let n=[],a=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:Fa(t,e).sort(),i=0;for(let o=0;o<e.length;++o){if(s!=null){if(s[i]===o&&e[o]!==1)throw new Error(`Can't squeeze axis ${o} since its dim '${e[o]}' is not 1`);(s[i]==null||s[i]>o)&&e[o]===1&&(n.push(e[o]),a.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),a.push(o))}return{newShape:n,keptDims:a}}function wI(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function kI(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else if(e==="string")n=new Array(t);else throw new Error(`Unknown data type ${e}`);return n}function II(e,t){for(let n=0;n<e.length;n++){let a=e[n];if(isNaN(a)||!isFinite(a))throw Error(`A tensor of type ${t} being uploaded contains ${a}.`)}}function SI(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function LF(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function hh(e){if(e==="float32"||e==="int32")return 4;if(e==="complex64")return 8;if(e==="bool")return 1;throw new Error(`Unknown dtype ${e}`)}function TI(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function Yr(e){return typeof e=="string"||e instanceof String}function NI(e){return typeof e=="boolean"}function CI(e){return typeof e=="number"}function qh(e){return Array.isArray(e)?qh(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":CI(e)?"float32":Yr(e)?"string":NI(e)?"bool":"float32"}function as(e){return!!(e&&e.constructor&&e.call&&e.apply)}function mh(e,t){for(let n=t;n<e;++n)if(e%n===0)return n;return e}function vl(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let a=t-3;a>=0;--a)n[a]=n[a+1]*e[a+1];return n}function _I(e,t,n,a=!1){let r=new Array;if(t.length===1){let s=t[0]*(a?2:1);for(let i=0;i<s;i++)r[i]=n[e+i]}else{let s=t[0],i=t.slice(1),o=i.reduce((l,u)=>l*u)*(a?2:1);for(let l=0;l<s;l++)r[l]=_I(e+l*o,i,n,a)}return r}function Jo(e,t,n=!1){if(e.length===0)return t[0];let a=e.reduce((r,s)=>r*s)*(n?2:1);if(a===0)return[];if(a!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return _I(0,e,t,n)}function zF(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function bx(e,t){let n=jh(e,t);for(let a=0;a<n.length;a++)n[a]=1;return n}function jh(e,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool")return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function WF(e,t){let n=e.reduce((a,r)=>a*r,1);if(t==null||t==="float32")return Jo(e,new Float32Array(n));if(t==="int32")return Jo(e,new Int32Array(n));if(t==="bool")return Jo(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function na(e){e.forEach(t=>{A(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function BF(e,t,n){if(t===0)return 0;if(t===1)return e[0];let a=e[e.length-1];for(let r=0;r<e.length-1;++r)a+=n[r]*e[r];return a}function VF(e,t,n){if(t===0)return[];if(t===1)return[e];let a=new Array(t);for(let r=0;r<a.length-1;++r)a[r]=Math.floor(e/n[r]),e-=a[r]*n[r];return a[a.length-1]=e,a}function Kh(e){return e&&e.then&&typeof e.then=="function"}var O1="tfjsflags",EI=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.getQueryParams=UF,this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&(H().getBool("IS_TEST")||H().getBool("PROD")||console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let a=this.urlFlags[e];H().getBool("IS_TEST")||H().getBool("PROD")||console.warn(`Setting feature override from URL ${e}: ${a}.`),this.set(e,a)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(Kh(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(this.flagRegistry[e]==null)throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,this.flagRegistry[e].setHook!=null&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(this.flagRegistry[e]==null)throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let e=this.getQueryParams(this.global.location.search);O1 in e&&e[O1].split(",").forEach(t=>{let[n,a]=t.split(":");this.urlFlags[n]=HF(n,a)})}};function UF(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...a)=>(GF(t,a[0],a[1]),a.join("="))),t}function GF(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function HF(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function H(){return xx}var xx=null;function qF(e){xx=e}var nb;function AI(){if(nb==null){let e;if(typeof window!="undefined")e=window;else if(typeof global!="undefined")e=global;else if(typeof process!="undefined")e=process;else if(typeof self!="undefined")e=self;else throw new Error("Could not find a global object");nb=e}return nb}function jF(){let e=AI();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function vx(e,t){let n=jF();if(n.has(e))return n.get(e);{let a=t();return n.set(e,a),n.get(e)}}var wl="Abs",kl="Acos",Il="Acosh",fs="Add",yi="AddN",Sl="All",Tl="Any",bi="ArgMax",rc="ArgMin",Nl="Asin",Cl="Asinh",_l="Atan",El="Atanh",Al="Atan2",xi="AvgPool",Xh="AvgPoolGrad",sc="AvgPool3D",Yh="AvgPool3DGrad",vi="BatchMatMul",$l="BatchToSpaceND",Zh="Bincount",$I="BroadcastTo",Jh="BroadcastArgs",wi="Cast",ki="Ceil",gs="ClipByValue",Qh="Complex",ic="ComplexAbs",Fl="Concat",Ii="Conv2D",em="Conv2DBackpropFilter",Si="Conv2DBackpropInput",oc="Conv3D",tm="Conv3DBackpropFilterV2",nm="Conv3DBackpropInputV2",Ti="Cos",Ni="Cosh",Rl="Cumprod",Ci="Cumsum",Dl="CropAndResize",am="DenseBincount",Ml="DepthToSpace",_i="DepthwiseConv2dNative",rm="DepthwiseConv2dNativeBackpropFilter",sm="DepthwiseConv2dNativeBackpropInput",im="Diag",lc="Dilation2D",fh="Dilation2DBackpropInput",gh="Dilation2DBackpropFilter",Ei="RealDiv",om="Einsum",Ai="Elu",lm="EluGrad",Pl="Erf",Ol="Equal",$i="Exp",Ll="ExpandDims",zl="Expm1",um="FFT",uc="Fill",Wl="FlipLeftRight",Fi="Floor",Ri="FloorDiv",Di="FusedBatchNorm",Bl="GatherV2",Vl="GatherNd",Ul="Greater",Mi="GreaterEqual",Pi="Identity",pm="IFFT",cm="Imag",Gl="IsFinite",Hl="IsInf",Oi="IsNan",Li="LeakyRelu",ql="Less",jl="LessEqual",dm="LinSpace",zi="Log",Kl="Log1p",Xl="LogicalAnd",Yl="LogicalNot",Zl="LogicalOr",FI="LogicalXor",RI="LogSoftmax",KF="LowerBound",pc="LRN",hm="LRNGrad",Wi="Max",Bi="Maximum",Vi="MaxPool",mm="MaxPoolGrad",cc="MaxPool3D",fm="MaxPool3DGrad",gm="MaxPoolWithArgmax",Ui="Mean",Gi="Min",Hi="Minimum",qi="MirrorPad",Jl="Mod",ym="Multinomial",ji="Multiply",Ql="Neg",eu="NotEqual",tu="NonMaxSuppressionV3",nu="NonMaxSuppressionV4",au="NonMaxSuppressionV5",ru="OnesLike",Ki="OneHot",su="Pack",Xi="PadV2",XF="Pool",Yi="Pow",Zi="Prelu",Ji="Prod",bm="RaggedGather",xm="RaggedRange",vm="RaggedTensorToTensor",dc="Range",wm="Real",Qi="Reciprocal",eo="Relu",iu="Reshape",to="ResizeNearestNeighbor",km="ResizeNearestNeighborGrad",no="ResizeBilinear",Im="ResizeBilinearGrad",ao="Relu6",ro="Reverse",so="Round",io="Rsqrt",ou="ScatterNd",Sm="SearchSorted",lu="Select",uu="Selu",pu="Slice",oo="Sin",cu="Sinh",du="Sign",lo="Sigmoid",hu="Softplus",uo="Sqrt",po="Sum",mu="SpaceToBatchND",fu="SplitV",co="Softmax",hc="SparseFillEmptyRows",gu="SparseReshape",mc="SparseSegmentMean",fc="SparseSegmentSum",Tm="SparseToDense",ho="SquaredDifference",gc="Square",yu="StridedSlice",yc="StringNGrams",bc="StringSplit",xc="StringToHashBucketFast",mo="Sub",fo="Tan",go="Tanh",ys="Tile",bu="TopK",xu="Transform",Cr="Transpose",Nm="Unique",vu="Unpack",vc="UnsortedSegmentSum",YF="UpperBound",wu="ZerosLike",bs="Step",yh="FromPixels",ku="RotateWithOffset",Qs="_FusedMatMul",ei="FusedConv2D",ti="FusedDepthwiseConv2D";function Xr(...e){H().getBool("IS_TEST")||H().getBool("PROD")||console.warn(...e)}function ZF(...e){H().getBool("IS_TEST")||H().getBool("PROD")||console.log(...e)}var al=vx("kernelRegistry",()=>new Map),Wp=vx("gradRegistry",()=>new Map);function bh(e,t){let n=wx(e,t);return al.get(n)}function bb(e){return Wp.get(e)}function xh(e){let t=al.entries(),n=[];for(;;){let{done:a,value:r}=t.next();if(a)break;let[s,i]=r,[o]=s.split("_");o===e&&n.push(i)}return n}function wc(e){let{kernelName:t,backendName:n}=e,a=wx(t,n);al.has(a)&&Xr(`The kernel '${t}' for backend '${n}' is already registered`),al.set(a,e)}function DI(e){let{kernelName:t}=e;Wp.has(t)&&H().getBool("DEBUG")&&Xr(`Overriding the gradient for '${t}'`),Wp.set(t,e)}function JF(e,t){let n=wx(e,t);if(!al.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);al.delete(n)}function QF(e){if(!Wp.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Wp.delete(e)}function eR(e,t){xh(e).forEach(n=>{let a=Object.assign({},n,{backendName:t});wc(a)})}function wx(e,t){return`${t}_${e}`}var v={};Ae(v,{arraysEqual:()=>ms,assert:()=>A,assertNonNegativeIntegerDimensions:()=>na,assertNonNull:()=>gi,assertShapesMatch:()=>Sn,bytesFromStringArray:()=>TI,bytesPerElement:()=>hh,checkConversionForErrors:()=>II,clamp:()=>zp,computeStrides:()=>vl,convertBackendValuesAndArrayBuffer:()=>zF,createScalarValue:()=>iR,createShuffledIndices:()=>MF,decodeString:()=>vh,distSquared:()=>$F,encodeString:()=>Ic,fetch:()=>lR,fingerPrint64:()=>sR,flatten:()=>rs,getArrayFromDType:()=>kI,getTypedArrayFromDType:()=>wI,hasEncodingLoss:()=>LF,hexToLong:()=>kc,indexToLoc:()=>VF,inferDtype:()=>qh,inferFromImplicitShape:()=>OF,isBoolean:()=>NI,isFunction:()=>as,isInt:()=>nl,isNumber:()=>CI,isPromise:()=>Kh,isScalarShape:()=>FF,isString:()=>Yr,isTypedArray:()=>ln,isValidDtype:()=>SI,locToIndex:()=>BF,makeOnesTypedArray:()=>bx,makeZerosNestedTypedArray:()=>WF,makeZerosTypedArray:()=>jh,nearestDivisor:()=>mh,nearestLargerEven:()=>_F,now:()=>Bp,parseAxisParam:()=>Fa,randUniform:()=>AF,repeatedTry:()=>PF,rightPad:()=>Mp,shuffle:()=>xI,shuffleCombo:()=>CF,sizeFromShape:()=>mt,sizeToSquarishShape:()=>DF,squeezeShape:()=>vI,sum:()=>EF,swap:()=>dh,tanh:()=>RF,toNestedArray:()=>Jo,toTypedArray:()=>Cm});var L1=hs(pF()),Gs=L1.default||L1;function kc(e){return Gs.fromString(e,!0,16)}var MI=kc("c3a5c85c97cb3127"),Vs=kc("b492b66fbe98f273"),xn=kc("9ae16a3b2f90404f");function xb(e){return e.xor(e.shru(47))}function PI(e,t,n){let a=e.slice(t,t+n);return Gs.fromBytes(Array.from(a),!0,!0)}function ht(e,t){return PI(e,t,8)}function z1(e,t){return PI(e,t,4)}function Jt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function es(e,t,n=kc("9ddfea08eb382d69")){let a=e.xor(t).mul(n);a=a.xor(a.shru(47));let r=t.xor(a).mul(n);return r=r.xor(r.shru(47)),r=r.mul(n),r}function tR(e,t,n,a,r,s){r=r.add(e),s=Jt(s.add(r).add(a),21);let i=r;return r=r.add(t),r=r.add(n),s=s.add(Jt(r,44)),[r.add(a),s.add(i)]}function Gd(e,t,n,a){return tR(ht(e,t),ht(e,t+8),ht(e,t+16),ht(e,t+24),n,a)}function nR(e,t=e.length){if(t>=8){let n=xn.add(t*2),a=ht(e,0).add(xn),r=ht(e,t-8),s=Jt(r,37).mul(n).add(a),i=Jt(a,25).add(r).mul(n);return es(s,i,n)}if(t>=4){let n=xn.add(t*2),a=z1(e,0);return es(a.shl(3).add(t),z1(e,t-4),n)}if(t>0){let n=e[0],a=e[t>>1],r=e[t-1],s=n+(a<<8),i=t+(r<<2);return xb(xn.mul(s).xor(MI.mul(i))).mul(xn)}return xn}function aR(e,t=e.length){let n=xn.add(t*2),a=ht(e,0).mul(Vs),r=ht(e,8),s=ht(e,t-8).mul(n),i=ht(e,t-16).mul(xn);return es(Jt(a.add(r),43).add(Jt(s,30)).add(i),a.add(Jt(r.add(xn),18)).add(s),n)}function rR(e,t=e.length){let n=xn.add(t*2),a=ht(e,0).mul(xn),r=ht(e,8),s=ht(e,t-8).mul(n),i=ht(e,t-16).mul(xn),o=Jt(a.add(r),43).add(Jt(s,30)).add(i),l=es(o,a.add(Jt(r.add(xn),18)).add(s),n),u=ht(e,16).mul(n),p=ht(e,24),d=o.add(ht(e,t-32)).mul(n),c=l.add(ht(e,t-24)).mul(n);return es(Jt(u.add(p),43).add(Jt(d,30)).add(c),u.add(Jt(p.add(a),18)).add(d),n)}function sR(e,t=e.length){let n=Gs.fromNumber(81,!0);if(t<=32)return t<=16?nR(e,t):aR(e,t);if(t<=64)return rR(e,t);let a=n,r=n.mul(Vs).add(113),s=xb(r.mul(xn).add(113)).mul(xn),i=[Gs.UZERO,Gs.UZERO],o=[Gs.UZERO,Gs.UZERO];a=a.mul(xn).add(ht(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do a=Jt(a.add(r).add(i[0]).add(ht(e,l+8)),37).mul(Vs),r=Jt(r.add(i[1]).add(ht(e,l+48)),42).mul(Vs),a=a.xor(o[1]),r=r.add(i[0]).add(ht(e,l+40)),s=Jt(s.add(o[0]),33).mul(Vs),i=Gd(e,l,i[1].mul(Vs),a.add(o[0])),o=Gd(e,l+32,s.add(o[1]),r.add(ht(e,l+16))),[s,a]=[a,s],l+=64;while(l!==u);let d=Vs.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),a=Jt(a.add(r).add(i[0]).add(ht(e,l+8)),37).mul(d),r=Jt(r.add(i[1]).add(ht(e,l+48)),42).mul(d),a=a.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(ht(e,l+40))),s=Jt(s.add(o[0]),33).mul(d),i=Gd(e,l,i[1].mul(d),a.add(o[0])),o=Gd(e,l+32,s.add(o[1]),r.add(ht(e,l+16))),[s,a]=[a,s],es(es(i[0],o[0],d).add(xb(r).mul(MI)).add(s),es(i[1],o[1],d).add(a),d)}function iR(e,t){return t==="string"?Ic(e):Cm([e],t)}function oR(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Cm(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=rs(e)),H().getBool("DEBUG")&&II(e,t),oR(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let a=0;a<n.length;++a)Math.round(e[a])!==0&&(n[a]=1);return n}else throw new Error(`Unknown data type ${t}`)}function Bp(){return H().platform.now()}function lR(e,t){return H().platform.fetch(e,t)}function Ic(e,t="utf-8"){return t=t||"utf-8",H().platform.encode(e,t)}function vh(e,t="utf-8"){return t=t||"utf-8",H().platform.decode(e,t)}function ln(e){return H().platform.isTypedArray(e)}function rs(e,t=[],n=!1){if(t==null&&(t=[]),typeof e=="boolean"||typeof e=="number"||typeof e=="string"||Kh(e)||e==null||ln(e)&&n)t.push(e);else if(Array.isArray(e)||ln(e))for(let a=0;a<e.length;++a)rs(e[a],t,n);else{let a=-1;for(let r of Object.keys(e))/^([1-9]+[0-9]*|0)$/.test(r)&&(a=Math.max(a,Number(r)));for(let r=0;r<=a;r++)rs(e[r],t,n)}return t}var uR=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new cR)}profileKernel(e,t,n){let a,r=()=>{a=n()},s,i=Bp();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of a)o.dataSync();s=Promise.resolve({kernelMs:Bp()-i})}if(H().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o<a.length;o++){let l=a[o];l.data().then(u=>{pR(u,l.dtype,e)})}return{kernelName:e,outputs:a,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:a,inputs:r,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),a,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function pR(e,t,n){if(t!=="float32")return!1;for(let a=0;a<e.length;a++){let r=e[a];if(isNaN(r)||!isFinite(r))return console.warn(`Found ${r} in the result of '${n}'`),!0}return!1}var cR=class{logKernelProfile(e,t,n,a,r,s){let i=typeof a=="number"?Mp(`${a}ms`,9):a.error,o=Mp(e,25),l=t.rank,u=t.size,p=Mp(t.shape.toString(),14),d="";for(let c in r){let h=r[c];if(h!=null){let m=h.shape||t.shape,f=m.length;d+=`${c}: ${f}D ${f>0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${d} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function dR(e,t,n){let a={},r={};for(let l=0;l<t.length;l++)a[t[l].id]=!0;for(let l=0;l<e.length;l++){let u=e[l],p=u.inputs;for(let d in p){let c=p[d],h=!1;for(let m=0;m<t.length;m++)if(a[c.id]){u.outputs.forEach(f=>a[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let d=0;d<u.outputs.length;d++)if(s[u.outputs[d].id]){for(let c in p)s[p[c].id]=!0,i[u.id]=!0;break}}let o=[];for(let l=0;l<e.length;l++){let u=e[l];if(r[u.id]&&i[u.id]){let p={};for(let c in u.inputs){let h=u.inputs[c];a[h.id]&&(p[c]=h)}let d=Object.assign({},u);d.inputs=p,d.outputs=u.outputs,o.push(d)}}return o}function hR(e,t,n,a){for(let r=t.length-1;r>=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=n(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!ms(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let d=e[p.id];e[p.id]=a(d,u),d.dispose()}}}}var W1=20,vp=3,ab=7;function mR(e,t,n,a){let r=vl(t),s=fR(e,t,n,r),i=t.length,o=ah(e,t,n,r,s),l=["Tensor"];return a&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(`
|
|
`)),l.join(`
|
|
`)}function fR(e,t,n,a){let r=mt(t),s=a[a.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Np(e):e;if(o>1)for(let u=0;u<r/s;u++){let p=u*s;for(let d=0;d<s;d++)i[d]=Math.max(i[d],Tp(l[p+d],0,n).length)}return i}function Tp(e,t,n){let a;return Array.isArray(e)?a=`${parseFloat(e[0].toFixed(ab))} + ${parseFloat(e[1].toFixed(ab))}j`:Yr(e)?a=`'${e}'`:n==="bool"?a=OI(e):a=parseFloat(e.toFixed(ab)).toString(),Mp(a,t)}function OI(e){return e===0?"false":"true"}function ah(e,t,n,a,r,s=!0){let i=n==="complex64"?2:1,o=t[0],l=t.length;if(l===0){if(n==="complex64"){let f=Np(e);return[Tp(f[0],0,n)]}return n==="bool"?[OI(e[0])]:[e[0].toString()]}if(l===1){if(o>W1){let f=vp*i,g=Array.from(e.slice(0,f)),y=Array.from(e.slice((o-vp)*i,o*i));return n==="complex64"&&(g=Np(g),y=Np(y)),["["+g.map((b,x)=>Tp(b,r[x],n)).join(", ")+", ..., "+y.map((b,x)=>Tp(b,r[o-vp+x],n)).join(", ")+"]"]}return["["+(n==="complex64"?Np(e):Array.from(e)).map((f,g)=>Tp(f,r[g],n)).join(", ")+"]"]}let u=t.slice(1),p=a.slice(1),d=a[0]*i,c=[];if(o>W1){for(let f=0;f<vp;f++){let g=f*d,y=g+d;c.push(...ah(e.slice(g,y),u,n,p,r,!1))}c.push("...");for(let f=o-vp;f<o;f++){let g=f*d,y=g+d;c.push(...ah(e.slice(g,y),u,n,p,r,f===o-1))}}else for(let f=0;f<o;f++){let g=f*d,y=g+d;c.push(...ah(e.slice(g,y),u,n,p,r,f===o-1))}let h=l===2?",":"";c[0]="["+(o>0?c[0]+h:"");for(let f=1;f<c.length-1;f++)c[f]=" "+c[f]+h;let m=`,
|
|
`;for(let f=2;f<l;f++)m+=`
|
|
`;return c[c.length-1]=" "+c[c.length-1]+"]"+(s?"":m),c}function Np(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var jt=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=mt(e),n!=null){let a=n.length;A(a===this.size,()=>`Length of values '${a}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||kI(t,this.size),this.strides=vl(e)}set(e,...t){t.length===0&&(t=[0]),A(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let a of e){if(a<0||a>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let n=e[e.length-1];for(let a=0;a<e.length-1;++a)n+=this.strides[a]*e[a];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Wa().makeTensor(this.values,this.shape,this.dtype)}},Wa=null,Xo=null,gR=null;function yR(e){Wa=e}function bR(e){Xo=e}function xR(e){gR=e}var Ne=class{constructor(e,t,n,a){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=mt(e),this.strides=vl(e),this.dataId=n,this.id=a,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return Xo.buffer(this.shape,this.dtype,e)}bufferSync(){return Xo.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return Jo(this.shape,e,this.dtype==="complex64")}arraySync(){return Jo(this.shape,this.dataSync(),this.dtype==="complex64")}async data(){this.throwIfDisposed();let e=Wa().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>vh(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Wa().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Wa().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>vh(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Wa().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Wa().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Xo.print(this,e)}clone(){return this.throwIfDisposed(),Xo.clone(this)}toString(e=!1){let t=this.dataSync();return mR(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Xo.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Wa().makeVariable(this,e,t,n)}};Object.defineProperty(Ne,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Q(){return vx("Tensor",()=>Ne)}Q();var ss=class extends Ne{constructor(e,t,n,a){super(e.shape,e.dtype,e.dataId,a),this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!ms(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Wa().disposeTensor(this),this.dataId=e.dataId,Wa().incRef(this,null)}dispose(){Wa().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ss,Symbol.hasInstance,{value:e=>e instanceof Ne&&e.assign!=null&&e.assign instanceof Function});var Ua={};Ae(Ua,{assertTypesMatch:()=>LI,getTensorsInContainer:()=>kx,isTensorInList:()=>wR,makeTypesMatch:()=>Et});var vb;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(vb||(vb={}));var wb;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(wb||(wb={}));var kb;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(kb||(kb={}));var Ib;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Ib||(Ib={}));var Sb;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Sb||(Sb={}));var vR={float32:Ib,int32:wb,bool:kb,complex64:Sb};function ma(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return vR[e][t]}function _m(e){return ma(e,"int32")}function Et(e,t){if(e.dtype===t.dtype)return[e,t];let n=ma(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function LI(e,t){A(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function wR(e,t){return t.some(n=>n.id===e.id)}function kx(e){let t=[];return zI(e,t,new Set),t}function zI(e,t,n){if(e==null)return;if(e instanceof Ne){t.push(e);return}if(!kR(e))return;let a=e;for(let r in a){let s=a[r];n.has(s)||(n.add(s),zI(s,t,n))}}function kR(e){return Array.isArray(e)||typeof e=="object"}function rb(e){return e.kernelName!=null}var B1=class{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null,get kernelNames(){return Array.from(new Set(this.kernels.map(e=>e.name)))}}}dispose(){for(let e in this.registeredVariables)this.registeredVariables[e].dispose()}},Vp=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new B1}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry))if(e in this.registryFactory){let{asyncInit:t}=this.initializeBackend(e);if(t)return null}else return null;return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(Xr(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(this.registryFactory[e]==null)throw new Error(`Backend name '${e}' not found in registry`);if(this.backendName=e,this.registry[e]==null){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new uR(this.backendInstance),!0}setupRegisteredKernels(){xh(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){xh(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof ac)&&typeof n.then=="function"){let a=++this.pendingBackendInitId,r=n.then(s=>a<this.pendingBackendInitId?!1:(this.registry[e]=s,this.pendingBackendInit=null,!0)).catch(s=>(a<this.pendingBackendInitId||(this.pendingBackendInit=null,Xr(`Initialization of backend ${e} failed`),Xr(s.stack||s.message)),!1));return this.pendingBackendInit=r,{success:r,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return Xr(`Initialization of backend ${e} failed`),Xr(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:a,asyncInit:r}=this.initializeBackend(n);if(r||a)return{name:n,asyncInit:r}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),a=n.backend,r=this.readSync(t),s=a.refCount(t);a.disposeData(t,!0),n.backend=e,e.move(t,r,n.shape,n.dtype,s),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let a;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(a),()=>(a=t(),a instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),a))}scopedRun(e,t,n){e();try{let a=n();return t(),a}catch(a){throw t(),a}}nextTensorId(){return Vp.nextTensorId++}nextVariableId(){return Vp.nextVariableId++}clone(e){let t=O.runKernel(Pi,{x:e}),n={x:e},a=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return O.runKernel(wi,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,n,[t],a,r,{}),t}runKernel(e,t,n){if(this.backendName==null&&this.backend,bh(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let a=this.backend.numDataIds(),r=0;n.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=a-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],a=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=rb(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(rb(e)){let{kernelName:h,inputs:m,attrs:f}=e;this.backendName==null&&this.backend;let g=bh(h,this.backendName);A(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=g.kernelFunc({inputs:m,attrs:f,backend:this.backend});let b=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,b);let x=b.map(w=>w.rank!=null?w:this.makeTensorFromTensorInfo(w));if(a){let w=this.getTensorsForGradient(h,m,x);n=this.saveTensorsForBackwardMode(w)}return x}}else{let{forwardFunc:h}=e,m=f=>{a&&(n=f.map(g=>this.keep(this.clone(g))))};i=()=>{let f=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,m));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,f,g),g}}let{inputs:u,attrs:p}=e,d=rb(e)?null:e.backwardsFunc,c;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(c=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(c),t=c.outputs)}),a&&this.addTapeNode(l,u,t,d,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:c.timeMs,extraInfo:c.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let a=bb(e);if(a!=null){let r=a.inputsToSave||[],s=a.outputsToSave||[],i;a.saveAllInputs?(A(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=n.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,n,a){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",a=a||this.backend;let r=e;n==="string"&&Yr(e[0])&&(r=e.map(o=>Ic(o)));let s=a.write(r,t,n),i=new Ne(t,n,s,this.nextTensorId());if(this.trackTensor(i,a),n==="string"){let o=this.state.tensorInfo.get(s),l=TI(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,a){n=n||"float32";let r={dataId:e,shape:t,dtype:n};return this.makeTensorFromTensorInfo(r,a)}makeTensorFromTensorInfo(e,t){let{dataId:n,shape:a,dtype:r}=e,s=new Ne(a,r,n,this.nextTensorId());return this.trackTensor(s,t),s}makeVariable(e,t=!0,n,a){n=n||this.nextVariableId().toString(),a!=null&&a!==e.dtype&&(e=e.cast(a));let r=new ss(e,t,n,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*hh(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof ss||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*hh(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(a=>a.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let a of this.state.activeProfile.kernels)a.kernelTimeMs=await a.kernelTimeMs,a.extraInfo=await a.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,a,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:r},o=bb(e);o!=null&&(a=o.gradFunc),a!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let d=n[p],c=jh(d.size,d.dtype);return this.makeTensor(c,d.shape,d.dtype)}return u}),a(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=kx(e),n=new Set(t.map(r=>r.id));for(let r=0;r<this.state.activeScope.track.length;r++){let s=this.state.activeScope.track[r];!s.kept&&!n.has(s.id)&&s.dispose()}let a=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(r=>{!r.kept&&r.scopeId===a.id&&this.track(r)})}gradients(e,t,n,a=!1){if(A(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));A(r instanceof Ne,()=>"The result y returned by f() must be a tensor.");let s=dR(this.state.activeTape,t,r);if(!a&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=n==null?IR(r.shape):n,hR(i,s,l=>this.tidy(l),SR);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return A(as(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{A(t.every(i=>i instanceof Ne),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,a={};t.forEach((i,o)=>{a[o]=i});let r=(i,o)=>(n=e(...t,o),A(n.value instanceof Ne,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),A(as(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),s=(i,o)=>{let l=n.gradFunc(i,o),u=Array.isArray(l)?l:[l];A(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),A(u.every(d=>d instanceof Ne),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return u.forEach((d,c)=>{p[c]=()=>d}),p};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:a})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Bp(),n=await this.backend.time(e);return n.wallMs=Bp()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new B1;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Vp.nextTensorId=0;Vp.nextVariableId=0;function IR(e){let t=bx(mt(e),"float32");return O.makeTensor(t,e,"float32")}function WI(){let e=AI();if(e._tfengine==null){let t=new EI(e);e._tfengine=new Vp(t)}return qF(e._tfengine.ENV),yR(()=>e._tfengine),e._tfengine}var O=WI();function SR(e,t){let n={a:e,b:t};return O.runKernel(fs,n)}var Sc={};Ae(Sc,{isBrowser:()=>BI,isMobile:()=>CR,mockIsMobile:()=>NR});function TR(){return typeof navigator!="undefined"&&navigator!=null}var Tb;function NR(e){Tb=e}function CR(e){if(Tb!==void 0)return Tb;if(e||TR()){if(e||(e=navigator),e.product==="ReactNative")return!0;let t=e.userAgent||e.vendor||(typeof window!="undefined"?window.opera:"");if(!t){let n=e;return n.userAgentData&&n.userAgentData.mobile}return/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4))}return!1}function BI(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var fa=H();fa.registerFlag("DEBUG",()=>!1,e=>{e&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});fa.registerFlag("IS_BROWSER",()=>BI());fa.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");fa.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));fa.registerFlag("PROD",()=>!1);fa.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>fa.getBool("DEBUG"));fa.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);fa.registerFlag("IS_TEST",()=>!1);fa.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);fa.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);fa.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);fa.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function lr(e,t){let n=e;if(ln(e))return t==="string"?[]:[e.length];if(typeof e=="object"){if("texture"in e){let r=e.channels||"RGBA";return[e.height,e.width*r.length]}else if("buffer"in e&&!(e.buffer instanceof ArrayBuffer))return[e.buffer.size/(t==null?4:hh(t))]}if(!Array.isArray(e))return[];let a=[];for(;Array.isArray(n)||ln(n)&&t!=="string";)a.push(n.length),n=n[0];return Array.isArray(e)&&H().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&VI(e,a,[]),a}function VI(e,t,n){if(n=n||[],!Array.isArray(e)&&!ln(e)){A(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}A(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),A(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let a=t.slice(1);for(let r=0;r<e.length;++r)VI(e[r],a,n.concat(r))}function V1(e,t,n,a){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${a}' must be ${e} tensor, but got ${t} tensor`)}}function _(e,t,n,a="numeric"){if(e instanceof Ne)return V1(a,e.dtype,t,n),e;let r=qh(e);if(r!=="string"&&["bool","int32","float32"].indexOf(a)>=0&&(r=a),V1(a,r,t,n),e==null||!ln(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=lr(e,r);!ln(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Cm(e,r):rs(e,[],!0);return O.makeTensor(i,s,r)}function Up(e,t,n,a="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>_(r,`${t}[${s}]`,n,a))}var Ix="__op";function L(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],a=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+Ix;let r=(...s)=>{O.startScope(n);try{let i=a(...s);return Kh(i)&&console.error("Cannot return a Promise inside of tidy."),O.endScope(i),i}catch(i){throw O.endScope(null),i}};return Object.defineProperty(r,"name",{value:n,configurable:!0}),r}function _R(e,t){let n=_(e,"real","complex"),a=_(t,"imag","complex");Sn(n.shape,a.shape,`real and imag shapes, ${n.shape} and ${a.shape}, must match in call to tf.complex().`);let r={real:n,imag:a};return O.runKernel(Qh,r)}var Er=L({complex_:_R});function xs(e,t,n,a){if(a==null)a=qh(e);else if(a==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof e=="object"&&("texture"in e||"buffer"in e&&!(e.buffer instanceof ArrayBuffer))){if(a!=="float32"&&a!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${a}.`);return O.backend.createTensorFromGPUData(e,t||n,a)}if(!ln(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="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){na(t);let r=mt(t),s=mt(n);A(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i<n.length;++i){let o=n[i],l=i===n.length-1?o!==mt(t.slice(i)):!0;A(n[i]===t[i]||!l,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!ln(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=a!=="string"?Cm(e,a):rs(e,[],!0),O.makeTensor(e,t,a)}function fn(e,t,n){let a=lr(e,n);return xs(e,t,a,n)}var Nb={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},wh=4;async function ER(e,t){let n=[],a=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i<r.length;++i){let o=r[i],l=Array.isArray(e)?e[i].tensor:e[o];if(l.dtype!=="float32"&&l.dtype!=="int32"&&l.dtype!=="bool"&&l.dtype!=="string"&&l.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${o}': ${l.dtype}`);let u={name:o,shape:l.shape,dtype:l.dtype};if(l.dtype==="string"){let p=new Promise(async d=>{let c=await l.bytes(),h=c.reduce((g,y)=>g+y.length,0)+wh*c.length,m=new Uint8Array(h),f=0;for(let g=0;g<c.length;g++){let y=c[g],b=new Uint8Array(new Uint32Array([y.length]).buffer);m.set(b,f),f+=wh,m.set(y,f),f+=y.length}d(m)});a.push(p)}else a.push(l.data());t!=null&&(u.group=t),n.push(u)}let s=await Promise.all(a);return{data:AR(s),specs:n}}function UI(e,t){let n={},a,r=0;for(let s of t){let i=s.name,o=s.dtype,l=s.shape,u=mt(l),p;if("quantization"in s){let d=s.quantization;if(d.dtype==="uint8"||d.dtype==="uint16"){if(!("min"in d&&"scale"in d))throw new Error(`Weight ${s.name} with quantization ${d.dtype} doesn't have corresponding metadata min and scale.`)}else if(d.dtype==="float16"){if(o!=="float32")throw new Error(`Weight ${s.name} is quantized with ${d.dtype} which only supports weights of type float32 not ${o}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${d.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let c=Nb[d.dtype],h=e.slice(r,r+u*c),m=d.dtype==="uint8"?new Uint8Array(h):new Uint16Array(h);if(o==="float32")if(d.dtype==="uint8"||d.dtype==="uint16"){p=new Float32Array(m.length);for(let f=0;f<m.length;f++){let g=m[f];p[f]=g*d.scale+d.min}}else if(d.dtype==="float16")a===void 0&&(a=PR()),p=a(m);else throw new Error(`Unsupported quantization type ${d.dtype} for weight type float32.`);else if(o==="int32"){if(d.dtype!=="uint8"&&d.dtype!=="uint16")throw new Error(`Unsupported quantization type ${d.dtype} for weight type int32.`);p=new Int32Array(m.length);for(let f=0;f<m.length;f++){let g=m[f];p[f]=Math.round(g*d.scale+d.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);r+=u*c}else if(o==="string"){let d=mt(s.shape);p=[];for(let c=0;c<d;c++){let h=new Uint32Array(e.slice(r,r+wh))[0];r+=wh;let m=new Uint8Array(e.slice(r,r+h));p.push(m),r+=h}}else{let d=Nb[o],c=e.slice(r,r+u*d);if(o==="float32")p=new Float32Array(c);else if(o==="int32")p=new Int32Array(c);else if(o==="bool")p=new Uint8Array(c);else if(o==="complex64"){p=new Float32Array(c);let h=new Float32Array(p.length/2),m=new Float32Array(p.length/2);for(let y=0;y<h.length;y++)h[y]=p[y*2],m[y]=p[y*2+1];let f=fn(h,l,"float32"),g=fn(m,l,"float32");n[i]=Er(f,g),f.dispose(),g.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);r+=u*d}o!=="complex64"&&(n[i]=fn(p,l,o))}return n}function AR(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(s=>{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let a=new Uint8Array(t),r=0;return n.forEach(s=>{a.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),a.buffer}var Sx=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function U1(e){return Sx?Buffer.byteLength(e):new Blob([e]).size}function $R(e){if(Sx)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let a=0,r=t.length;a<r;a++)n+=String.fromCharCode(t[a]);return btoa(n)}function FR(e){if(Sx){let a=Buffer.from(e,"base64");return a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;++a)n.set([t.charCodeAt(a)],a);return n.buffer}function Tx(e){if(e.length===1)return e[0];let t=0;e.forEach(r=>{t+=r.byteLength});let n=new Uint8Array(t),a=0;return e.forEach(r=>{n.set(new Uint8Array(r),a),a+=r.byteLength}),n.buffer}function G1(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function GI(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(n.initializerSignature=e.initializerSignature),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}function HI(e,t,n){let a={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(a.trainingConfig=e.trainingConfig),e.weightsManifest!=null){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!n)throw new Error("modelJSON has weightsManifest but weightData is null");a.weightSpecs=t,a.weightData=n}return e.signature!=null&&(a.signature=e.signature),e.userDefinedMetadata!=null&&(a.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(a.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(a.initializerSignature=e.initializerSignature),a}async function Nx(e,t){let n,a;return e.weightsManifest!=null&&([n,a]=await t(e.weightsManifest)),HI(e,n,a)}function Tc(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:U1(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:U1(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function qI(e){let t=[];for(let n of e)t.push(...n.weights);return t}function RR(){let e=n=>{let a=n<<13,r=0;for(;!(a&8388608);)r-=8388608,a<<=1;return a&=-8388609,r+=947912704,a|r},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function DR(){let e=new Uint32Array(64);e[0]=0,e[31]=1199570944,e[32]=2147483648,e[63]=3347054592;for(let t=1;t<31;t++)e[t]=t<<23;for(let t=33;t<63;t++)e[t]=2147483648+(t-32<<23);return e}function MR(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function PR(){let e=RR(),t=DR(),n=MR();return a=>{let r=new ArrayBuffer(4*a.length),s=new Uint32Array(r);for(let i=0;i<a.length;i++){let o=a[i],l=e[n[o>>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var $t=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return $t.instance==null&&($t.instance=new $t),$t.instance}static registerSaveRouter(e){$t.getInstance().saveRouters.push(e)}static registerLoadRouter(e){$t.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return $t.getHandlers(e,"save")}static getLoadHandlers(e,t){return $t.getHandlers(e,"load",t)}static getHandlers(e,t,n){let a=[];return(t==="load"?$t.getInstance().loadRouters:$t.getInstance().saveRouters).forEach(r=>{let s=r(e,n);s!==null&&a.push(s)}),a}},OR=e=>$t.registerSaveRouter(e),LR=e=>$t.registerLoadRouter(e),zR=e=>$t.getSaveHandlers(e),WR=(e,t)=>$t.getLoadHandlers(e,t),Cb="tensorflowjs",_b=1,Ks="models_store",Zr="model_info_store";function jI(){if(!H().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Eb(e){let t=e.result;t.createObjectStore(Ks,{keyPath:"modelPath"}),t.createObjectStore(Zr,{keyPath:"modelPath"})}var ni=class{constructor(e){if(this.indexedDB=jI(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,a)=>{let r=this.indexedDB.open(Cb,_b);r.onupgradeneeded=()=>Eb(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(Ks,"readonly"),o=i.objectStore(Ks).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),a(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),a(o.error)),i.oncomplete=()=>s.close()}else{let i=Tc(t),o=s.transaction(Zr,"readwrite"),l=o.objectStore(Zr),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;u.onsuccess=()=>{p=s.transaction(Ks,"readwrite");let d=p.objectStore(Ks).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>n({modelArtifactsInfo:i}),d.onerror=c=>{l=o.objectStore(Zr);let h=l.delete(this.modelPath);h.onsuccess=()=>(s.close(),a(d.error)),h.onerror=m=>(s.close(),a(d.error))}},u.onerror=d=>(s.close(),a(u.error)),o.oncomplete=()=>{p==null?s.close():p.oncomplete=()=>s.close()}}},r.onerror=s=>a(r.error)})}};ni.URL_SCHEME="indexeddb://";var KI=e=>H().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ni.URL_SCHEME)?BR(e.slice(ni.URL_SCHEME.length)):null;$t.registerSaveRouter(KI);$t.registerLoadRouter(KI);function BR(e){return new ni(e)}function VR(e){return e.startsWith(ni.URL_SCHEME)?e.slice(ni.URL_SCHEME.length):e}var UR=class{constructor(){this.indexedDB=jI()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Cb,_b);n.onupgradeneeded=()=>Eb(n),n.onsuccess=()=>{let a=n.result,r=a.transaction(Zr,"readonly"),s=r.objectStore(Zr).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(a.close(),t(s.error)),r.oncomplete=()=>a.close()},n.onerror=a=>t(n.error)})}async removeModel(e){return e=VR(e),new Promise((t,n)=>{let a=this.indexedDB.open(Cb,_b);a.onupgradeneeded=()=>Eb(a),a.onsuccess=()=>{let r=a.result,s=r.transaction(Zr,"readwrite"),i=s.objectStore(Zr),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),p=()=>{l=r.transaction(Ks,"readwrite");let d=l.objectStore(Ks).delete(e);d.onsuccess=()=>t(o.result.modelArtifactsInfo),d.onerror=c=>n(o.error)};u.onsuccess=p,u.onerror=d=>(p(),r.close(),n(o.error))}},o.onerror=u=>(r.close(),n(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},a.onerror=r=>n(a.error)})}},Nr="/",Yo="tensorflowjs_models",XI="info",GR="model_topology",HR="weight_specs",qR="weight_data",jR="model_metadata";function YI(e){return{info:[Yo,e,XI].join(Nr),topology:[Yo,e,GR].join(Nr),weightSpecs:[Yo,e,HR].join(Nr),weightData:[Yo,e,qR].join(Nr),modelMetadata:[Yo,e,jR].join(Nr)}}function ZI(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function KR(e){let t=e.split(Nr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Nr)}function XR(e){return e.startsWith(ai.URL_SCHEME)?e.slice(ai.URL_SCHEME.length):e}var ai=class{constructor(e){if(!H().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=YI(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),a=Tc(e);try{this.LS.setItem(this.keys.info,JSON.stringify(a)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,$R(e.weightData));let r={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:a}}catch(r){throw ZI(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${a.modelTopologyBytes}, weightSpecsBytes=${a.weightSpecsBytes}, weightDataBytes=${a.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let a=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(a==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=a;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.initializerSignature!=null&&(t.initializerSignature=i.initializerSignature),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=FR(s),t}};ai.URL_SCHEME="localstorage://";var JI=e=>H().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ai.URL_SCHEME)?YR(e.slice(ai.URL_SCHEME.length)):null;$t.registerSaveRouter(JI);$t.registerLoadRouter(JI);function YR(e){return new ai(e)}var ZR=class{constructor(){A(H().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),A(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Yo+Nr,n=Nr+XI;for(let a=0;a<this.LS.length;++a){let r=this.LS.key(a);if(r.startsWith(t)&&r.endsWith(n)){let s=KR(r);e[s]=JSON.parse(this.LS.getItem(r))}}return e}async removeModel(e){e=XR(e);let t=YI(e);if(this.LS.getItem(t.info)==null)throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return ZI(t),n}},Qo="://",Pn=class{constructor(){this.managers={}}static getInstance(){return Pn.instance==null&&(Pn.instance=new Pn),Pn.instance}static registerManager(e,t){A(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(Qo)&&(e=e.slice(0,e.indexOf(Qo))),A(e.length>0,()=>"scheme must not be an empty string.");let n=Pn.getInstance();A(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=Pn.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Pn.getInstance().managers)}};function rh(e){if(e.indexOf(Qo)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Pn.getSchemes().join(",")}`);return{scheme:e.split(Qo)[0],path:e.split(Qo)[1]}}async function QI(e,t,n=!1){A(e!==t,()=>`Old path and new path are the same: '${e}'`);let a=$t.getLoadHandlers(e);A(a.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),A(a.length<2,()=>`Copying failed because more than one (${a.length}) load handlers for source URL ${e}.`);let r=a[0],s=$t.getSaveHandlers(t);A(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),A(s.length<2,()=>`Copying failed because more than one (${a.length}) save handlers for destination URL ${t}.`);let i=s[0],o=rh(e).scheme,l=rh(e).path,u=o===rh(e).scheme,p=await r.load();n&&u&&await Pn.getManager(o).removeModel(l);let d=await i.save(p);return n&&!u&&await Pn.getManager(o).removeModel(l),d.modelArtifactsInfo}async function JR(){let e=Pn.getSchemes(),t={};for(let n of e){let a=await Pn.getManager(n).listModels();for(let r in a){let s=n+Qo+r;t[s]=a[r]}}return t}async function QR(e){let t=rh(e);return Pn.getManager(t.scheme).removeModel(t.path)}async function eD(e,t){return QI(e,t,!1)}async function tD(e,t){return QI(e,t,!0)}var nD=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!H().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",n=>{if(n.source===window&&n.data.name===this.messageName){n.stopPropagation();let a=this.functionRefs[n.data.index];a(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}};if(H().get("IS_BROWSER")){H().setPlatform("browser",new nD);try{Pn.registerManager(ai.URL_SCHEME,new ZR)}catch(e){}try{Pn.registerManager(ni.URL_SCHEME,new UR)}catch(e){}}var aD={importFetch:()=>cF()},sb,rD=class{constructor(){this.util=dF(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return H().global.fetch!=null?H().global.fetch(e,t):(sb==null&&(sb=aD.importFetch()),sb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};H().get("IS_NODE")&&!H().get("IS_BROWSER")&&H().setPlatform("node",new rD);function Le(e,t="float32",n){return t=t||"float32",na(e),new jt(e,t,n)}function sD(e,t){let n=_(e,"x","cast");if(!SI(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let a={x:n},r={dtype:t};return O.runKernel(wi,a,r)}var ie=L({cast_:sD});function iD(e){let t={x:_(e,"x","clone","string_or_numeric")};return O.runKernel(Pi,t)}var sr=L({clone_:iD});function Cx(e,t=!1){console.log(e.toString(t))}WI();var oD={buffer:Le,cast:ie,clone:sr,print:Cx};bR(oD);function lD(){H().set("PROD",!0)}function uD(){H().set("DEBUG",!0)}function pD(){H().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function _x(e){H().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}xR(_x);function cD(){O.disposeVariables()}function Ca(){return O}function kh(){return O.memory()}function dD(e){return O.profile(e)}function P(e,t){return O.tidy(e,t)}function _e(e){kx(e).forEach(t=>t.dispose())}function Gt(e){return O.keep(e)}function hD(e){return O.time(e)}function mD(e){return O.setBackend(e)}function fD(){return O.ready()}function gD(){return O.backendName}function yD(e){O.removeBackend(e)}function bD(e){return O.findBackend(e)}function xD(e){return O.findBackendFactory(e)}function Em(e,t,n=1){return O.registerBackend(e,t,n)}function eS(){return O.backend}function vD(e,t){H().setPlatform(e,t)}function wD(e,t){let n=_(e,"a","add"),a=_(t,"b","add");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(fs,r)}var X=L({add_:wD});function kD(e,t){let n=_(e,"a","floorDiv"),a=_(t,"b","floorDiv");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(Ri,r)}var Am=L({floorDiv_:kD});function ID(e,t){let n=_(e,"a","div"),a=_(t,"b","div");if([n,a]=Et(n,a),n.dtype==="int32"&&a.dtype==="int32")return Am(n,a);let r={a:n,b:a},s={};return O.runKernel(Ei,r,s)}var he=L({div_:ID});function SD(e,t){let n=_(e,"a","mul"),a=_(t,"b","mul");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(ji,r)}var z=L({mul_:SD});function TD(e){let t=_(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return O.runKernel(ic,n)}else{let n={x:t};return O.runKernel(wl,n)}}var Lt=L({abs_:TD});function ND(e){let t={x:_(e,"x","acos")};return O.runKernel(kl,t)}var Ex=L({acos_:ND});function CD(e){let t={x:_(e,"x","acosh")};return O.runKernel(Il,t)}var Ax=L({acosh_:CD});function _D(e){A(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),A(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>_(r,`tensors${s}`,"addN")),n=t[0];t.forEach(r=>{if(r.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!ms(r.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let a=t;return O.runKernel(yi,a)}var tS=L({addN_:_D});function ED(e,t=null,n=!1){let a={x:_(e,"x","all","bool")},r={axis:t,keepDims:n};return O.runKernel(Sl,a,r)}var $m=L({all_:ED});function AD(e,t=null,n=!1){let a={x:_(e,"x","any","bool")},r={axis:t,keepDims:n};return O.runKernel(Tl,a,r)}var Gp=L({any_:AD});function $D(e,t=0){let n={x:_(e,"x","argMax")},a={axis:t};return O.runKernel(bi,n,a)}var ri=L({argMax_:$D});function FD(e,t=0){let n={x:_(e,"x","argMin")},a={axis:t};return O.runKernel(rc,n,a)}var $x=L({argMin_:FD});function RD(e){let t={x:_(e,"x","asin")};return O.runKernel(Nl,t)}var Fx=L({asin_:RD});function DD(e){let t={x:_(e,"x","asinh")};return O.runKernel(Cl,t)}var Rx=L({asinh_:DD});function MD(e){let t={x:_(e,"x","atan")};return O.runKernel(_l,t)}var Dx=L({atan_:MD});function PD(e,t){let n=_(e,"a","atan2"),a=_(t,"b","atan2");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(Al,r)}var Mx=L({atan2_:PD});function OD(e){let t={x:_(e,"x","atanh")};return O.runKernel(El,t)}var Px=L({atanh_:OD});function LD(e,t,n,a,r="NHWC",s){let i=e[3],o=[...t,i],l=rS(r);return Nc(e,o,n,s,a,null,null,l)}function nS(e,t,n,a,r,s,i="channelsLast"){let[o,l]=Hp(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Nc(e,u,n,a,r,s,!1,i)}function zD(e,t,n,a,r,s,i="NDHWC"){let[o,l,u]=Ab(t),p,d;if(i==="NDHWC")d="channelsLast",p=[o,l,u,e[4],e[4]];else if(i==="NCDHW")d="channelsFirst",p=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return aS(e,p,n,a,r,!1,d,s)}function Nc(e,t,n,a,r,s,i=!1,o="channelsLast"){let[l,u,p,d]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,p,d]=e;else if(o==="channelsFirst")[l,d,u,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[c,h,,m]=t,[f,g]=Hp(n),[y,b]=Hp(a),x=el(c,y),w=el(h,b),{padInfo:I,outHeight:T,outWidth:C}=VD(r,u,p,f,g,x,w,s,o),E=i?m*d:m,$;return o==="channelsFirst"?$=[l,E,T,C]:o==="channelsLast"&&($=[l,T,C,E]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:d,outHeight:T,outWidth:C,outChannels:E,padInfo:I,strideHeight:f,strideWidth:g,filterHeight:c,filterWidth:h,effectiveFilterHeight:x,effectiveFilterWidth:w,dilationHeight:y,dilationWidth:b,inShape:e,outShape:$,filterShape:t}}function aS(e,t,n,a,r,s=!1,i="channelsLast",o){let[l,u,p,d,c]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,p,d,c]=e;else if(i==="channelsFirst")[l,c,u,p,d]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,m,f,,g]=t,[y,b,x]=Ab(n),[w,I,T]=Ab(a),C=el(h,w),E=el(m,I),$=el(f,T),{padInfo:R,outDepth:F,outHeight:S,outWidth:M}=UD(r,u,p,d,y,b,x,C,E,$,o),B=s?g*c:g,U;return i==="channelsFirst"?U=[l,B,F,S,M]:i==="channelsLast"&&(U=[l,F,S,M,B]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:d,inChannels:c,outDepth:F,outHeight:S,outWidth:M,outChannels:B,padInfo:R,strideDepth:y,strideHeight:b,strideWidth:x,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:C,effectiveFilterHeight:E,effectiveFilterWidth:$,dilationDepth:w,dilationHeight:I,dilationWidth:T,inShape:e,outShape:U,filterShape:t}}function WD(e,t,n,a,r){a==null&&(a=Ox(e,t,n));let s=e[0],i=e[1],o=qp((s-t+2*a)/n+1,r),l=qp((i-t+2*a)/n+1,r);return[o,l]}function BD(e,t,n,a,r,s){r==null&&(r=Ox(e,t[0],a[0]));let i=[0,0,0,n];for(let o=0;o<3;o++)e[o]+2*r>=t[o]&&(i[o]=qp((e[o]-t[o]+2*r)/a[o]+1,s));return i}function Ox(e,t,n,a=1){let r=el(t,a);return Math.floor((e[0]*(n-1)-n+r)/2)}function Hp(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function Ab(e){return typeof e=="number"?[e,e,e]:e}function el(e,t){return t<=1?e:e+(e-1)*(t-1)}function VD(e,t,n,a,r,s,i,o,l){let u,p,d;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let c=WD([t,n],s,a,e,o);p=c[0],d=c[1]}else if(e==="same"){p=Math.ceil(t/a),d=Math.ceil(n/r);let c=Math.max(0,(p-1)*a+s-t),h=Math.max(0,(d-1)*r+i-n),m=Math.floor(c/2),f=c-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},p=Math.ceil((t-s+1)/a),d=Math.ceil((n-i+1)/r);else if(typeof e=="object"){let c=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:c,bottom:h,left:m,right:f,type:c===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},p=qp((t-s+c+h)/a+1,o),d=qp((n-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:d}}function UD(e,t,n,a,r,s,i,o,l,u,p){let d,c,h,m;if(e==="valid"&&(e=0),typeof e=="number"){d={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=BD([t,n,a,1],[o,l,u],1,[r,s,i],e,p);c=f[0],h=f[1],m=f[2]}else if(e==="same"){c=Math.ceil(t/r),h=Math.ceil(n/s),m=Math.ceil(a/i);let f=(c-1)*r+o-t,g=(h-1)*s+l-n,y=(m-1)*i+u-a,b=Math.floor(f/2),x=f-b,w=Math.floor(g/2),I=g-w,T=Math.floor(y/2),C=y-T;d={top:w,bottom:I,left:T,right:C,front:b,back:x,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:d,outDepth:c,outHeight:h,outWidth:m}}function qp(e,t){if(!t)return Math.trunc(e);switch(t){case"round":return Math.round(e);case"ceil":return Math.ceil(e);case"floor":return Math.floor(e);default:throw new Error(`Unknown roundingMode ${t}`)}}function is(e){let[t,n,a]=Hp(e);return t===1&&n===1&&a===1}function cr(e,t){return is(e)||is(t)}function si(e){return Hp(e).every(t=>t>0)}function rS(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Tn(e,t,n){if(n!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);if(typeof t=="number")A(nl(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);else if(typeof t=="object")t.forEach(a=>{a.forEach(r=>{A(nl(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function GD(e,t){let n={x:_(e,"x","reshape","string_or_numeric")},a={shape:t};return O.runKernel(iu,n,a)}var W=L({reshape_:GD});function HD(e,t,n,a,r){let s=_(e,"x","avgPool","float32"),i=1;A(cr(n,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),A(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),Tn("avgPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=O.runKernel(xi,u,p);return d=ie(d,s.dtype),l?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var ya=L({avgPool_:HD});function qD(e,t,n,a,r,s="NDHWC"){let i=_(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),A(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),A(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),A(typeof n=="number"&&n>0||Array.isArray(n)&&n[0]>0&&n[1]>0&&n[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${n}'`),Tn("avgPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=O.runKernel(sc,u,p);return d=ie(d,o.dtype),l?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Lx=L({avgPool3d_:qD});function jD(e,t=0){A(e.length>=1,()=>"Pass at least one tensor to concat");let n=Up(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype ${s.dtype}. `)}),n.length===1)return sr(n[0]);let a=n,r={axis:t};return O.runKernel(Fl,a,r)}var Ze=L({concat_:jD});function KD(e,t,n=!1,a=!1){let r=_(e,"a","matMul"),s=_(t,"b","matMul");[r,s]=Et(r,s);let i={a:r,b:s},o={transposeA:n,transposeB:a};return O.runKernel(vi,i,o)}var Re=L({matMul_:KD});function XD(e){let t={x:_(e,"x","sigmoid","float32")};return O.runKernel(lo,t)}var da=L({sigmoid_:XD});function YD(e,t,n){let a=_(e,"x","slice","string_or_numeric");if(a.rank===0)throw new Error("Slicing scalar is not possible");let r={x:a},s={begin:t,size:n};return O.runKernel(pu,r,s)}var Ve=L({slice_:YD});function ZD(e){let t={x:_(e,"x","tanh","float32")};return O.runKernel(go,t)}var ii=L({tanh_:ZD});function JD(e,t,n,a,r,s){let i=_(e,"forgetBias","basicLSTMCell"),o=_(t,"lstmKernel","basicLSTMCell"),l=_(n,"lstmBias","basicLSTMCell"),u=_(a,"data","basicLSTMCell"),p=_(r,"c","basicLSTMCell"),d=_(s,"h","basicLSTMCell"),c=Ze([u,d],1),h=Re(c,o),m=X(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],b=Ve(m,[0,0],y),x=Ve(m,[0,g],y),w=Ve(m,[0,g*2],y),I=Ve(m,[0,g*3],y),T=X(z(da(b),ii(x)),z(p,da(X(i,w)))),C=z(ii(T),da(I));return[T,C]}var sS=L({basicLSTMCell_:JD});function QD(e,t,n){let a=_(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);A(a.rank>=1+t.length,()=>`input rank is ${a.rank} but should be > than blockShape.length ${t.length}`),A(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),A(a.shape[0]%r===0,()=>`input tensor batch is ${a.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:a},i={blockShape:t,crops:n};return O.runKernel($l,s,i)}var Cc=L({batchToSpaceND_:QD});function eM(e){let t;return e.rank===0||e.rank===1?t=W(e,[1,1,1,e.size]):e.rank===2?t=W(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function tM(e,t,n,a,r,s){s==null&&(s=.001);let i=_(e,"x","batchNorm"),o=_(t,"mean","batchNorm"),l=_(n,"variance","batchNorm"),u;r!=null&&(u=_(r,"scale","batchNorm"));let p;a!=null&&(p=_(a,"offset","batchNorm")),A(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),A(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),A(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:eM(i),scale:u,offset:p,mean:o,variance:l},c={varianceEpsilon:s},h=O.runKernel(Di,d,c);return W(h,i.shape)}var vs=L({batchNorm_:tM});function nM(e,t,n,a,r,s){let i=_(e,"x","batchNorm"),o=_(t,"mean","batchNorm"),l=_(n,"variance","batchNorm"),u;r!=null&&(u=_(r,"scale","batchNorm"));let p;return a!=null&&(p=_(a,"offset","batchNorm")),A(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),A(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),A(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&A(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&A(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),vs(i,o,l,p,u,s)}var zx=L({batchNorm2d_:nM});function aM(e,t,n,a,r,s){let i=_(e,"x","batchNorm"),o=_(t,"mean","batchNorm"),l=_(n,"variance","batchNorm"),u;r!=null&&(u=_(r,"scale","batchNorm"));let p;return a!=null&&(p=_(a,"offset","batchNorm")),A(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),A(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),A(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&A(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&A(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),vs(i,o,l,p,u,s)}var Wx=L({batchNorm3d_:aM});function rM(e,t,n,a,r,s){let i=_(e,"x","batchNorm"),o=_(t,"mean","batchNorm"),l=_(n,"variance","batchNorm"),u;r!=null&&(u=_(r,"scale","batchNorm"));let p;return a!=null&&(p=_(a,"offset","batchNorm")),A(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),A(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),A(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&A(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&A(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),vs(i,o,l,p,u,s)}var Bx=L({batchNorm4d_:rM});function sM(e,t,n){let a=_(e,"x","bincount"),r=_(t,"weights","bincount");A(a.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${a.dtype}`),A(n>=0,()=>`size must be non-negative, but got ${n}.`),A(r.size===a.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${a.shape}, weights shape: ${r.shape}.`);let s={x:a,weights:r},i={size:n};return O.runKernel(Zh,s,i)}var Vx=L({bincount_:sM});function iM(e,t){let n=_(e,"s0","broadcastArgs","int32"),a=_(t,"s1","broadcastArgs","int32");if(n.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${n.rank}`);if(a.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${a.rank}`);let r={s0:n,s1:a};return O.runKernel(Jh,r)}var iS=L({broadcastArgs_:iM});function oM(e,t){let n=_(e,"broadcastTo","x"),a=n.shape;if(na(t),t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let l=n.shape.slice();for(;l.length<t.length;)l.unshift(1);n=W(n,l)}let r=n.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(r[l]===t[l])s[l]=1;else if(n.shape[l]!==1)throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return sr(n);let i={x:n},o={reps:s};return O.runKernel(ys,i,o)}var Ys=L({broadcastTo_:oM});function lM(e){let t={x:_(e,"x","ceil","float32")};return O.runKernel(ki,t)}var Ux=L({ceil_:lM});function bn(e,t,n){na(e);let a={shape:e,value:t,dtype:n};return O.runKernel(uc,{},a)}function uM(e,t,n){let a=_(e,"x","clipByValue");if(A(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`),t===n)return bn(a.shape,t,a.dtype);let r={x:a},s={clipValueMin:t,clipValueMax:n};return O.runKernel(gs,r,s)}var tn=L({clipByValue_:uM});function pM(e){return Ze(e,0)}var Gx=L({concat1d_:pM});function cM(e,t){return Ze(e,t)}var Hx=L({concat2d_:cM});function dM(e,t){return Ze(e,t)}var qx=L({concat3d_:dM});function hM(e,t){return Ze(e,t)}var jx=L({concat4d_:hM});function mM(e,t,n,a,r="NHWC",s=[1,1],i){let o=_(e,"x","conv2d","float32"),l=_(t,"filter","conv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=W(o,[1,o.shape[0],o.shape[1],o.shape[2]])),A(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),A(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Tn("conv2d",a,i);let d=r==="NHWC"?u.shape[3]:u.shape[1];A(d===l.shape[2],()=>`Error in conv2d: depth of input (${d}) must match input depth for filter ${l.shape[2]}.`),A(cr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),A(si(s),()=>"Error in conv2D: Dilated rates should be larger than 0."),A(si(n),()=>"Error in conv2D: Strides should be larger than 0.");let c={x:u,filter:l},h={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},m=O.runKernel(Ii,c,h);return p?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Rt=L({conv2d_:mM});function fM(e,t,n,a,r="NWC",s=1,i){let o=_(e,"x","conv1d"),l=_(t,"filter","conv1d"),u=o,p=!1;o.rank===2&&(p=!0,u=W(o,[1,o.shape[0],o.shape[1]])),A(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),A(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Tn("conv1d",a,i),A(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),A(cr(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),A(si(s),()=>"Error in conv1D: Dilated rates should be larger than 0."),A(si(n),()=>"Error in conv1D: Stride should be larger than 0."),A(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let d=W(l,[1,l.shape[0],l.shape[1],l.shape[2]]),c=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Rt(c,d,[1,n],a,"NHWC",[1,s],i);return p?W(h,[h.shape[2],h.shape[3]]):W(h,[h.shape[0],h.shape[2],h.shape[3]])}var Fm=L({conv1d_:fM});function gM(e,t,n,a,r,s="NHWC",i){A(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),A(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),A(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),A(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let p=s==="NHWC"?o[3]:o[1],d=s==="NHWC"?l.shape[3]:l.shape[1];A(p===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${n.shape[2]}.`),A(d===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${d}) must match output depth for filter ${n.shape[3]}.`),Tn("conv2dDerInput",r,i);let c={dy:l,filter:n},h={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=O.runKernel(Si,c,h);return u?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Kx=L({conv2DBackpropInput_:gM});function yM(e,t,n,a,r,s){let i=_(e,"x","conv2dTranspose"),o=_(t,"filter","conv2dTranspose");return Kx(n,i,o,a,r,"NHWC",s)}var Rm=L({conv2dTranspose_:yM});function bM(e,t,n,a,r="NDHWC",s=[1,1,1]){let i=_(e,"x","conv3d"),o=_(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),A(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),A(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),A(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),A(cr(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),A(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`),A(si(s),()=>"Error in conv3D: Dilated rates should be larger than 0."),A(si(n),()=>"Error in conv3D: Strides should be larger than 0.");let p={x:l,filter:o},d={strides:n,pad:a,dataFormat:r,dilations:s},c=O.runKernel(oc,p,d);return u?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var Xx=L({conv3d_:bM});function xM(e,t,n,a,r){A(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];A(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),A(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),A(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),A(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),A(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`);let p={dy:i,filter:n},d={pad:r,strides:a,inputShape:s},c=O.runKernel(nm,p,d);return o?W(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var oS=L({conv3DBackpropInput_:xM});function vM(e,t,n,a,r){let s=_(e,"x","conv3dTranspose"),i=_(t,"filter","conv3dTranspose");return oS(n,s,i,a,r)}var Yx=L({conv3dTranspose_:vM});function wM(e){let t={x:_(e,"x","cos","float32")};return O.runKernel(Ti,t)}var _c=L({cos_:wM});function kM(e){let t={x:_(e,"x","cosh","float32")};return O.runKernel(Ni,t)}var Dm=L({cosh_:kM});function IM(e,t=0,n=!1,a=!1){let r={x:_(e,"x","cumprod")},s={axis:t,exclusive:n,reverse:a};return O.runKernel(Rl,r,s)}var jp=L({cumprod_:IM});function SM(e,t=0,n=!1,a=!1){let r={x:_(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:a};return O.runKernel(Ci,r,s)}var Mm=L({cumsum_:SM});function TM(e,t,n,a=!1){let r=_(e,"x","denseBincount"),s=_(t,"weights","denseBincount");A(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),A(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),A(n>=0,()=>`size must be non-negative, but got ${n}.`),A(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:n,binaryOutput:a};return O.runKernel(am,i,o)}var Ih=L({denseBincount_:TM});function NM(e,t,n="NHWC"){let a=_(e,"x","depthToSpace","float32"),r=n==="NHWC"?a.shape[1]:a.shape[2],s=n==="NHWC"?a.shape[2]:a.shape[3],i=n==="NHWC"?a.shape[3]:a.shape[1];A(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),A(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${r} and ${t} for depthToSpace with input shape
|
|
${a.shape}`),A(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${a.shape}`),A(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${a.shape}`);let o={x:a},l={blockSize:t,dataFormat:n};return O.runKernel(Ml,o,l)}var Zx=L({depthToSpace_:NM});function CM(e,t,n,a,r="NHWC",s=[1,1],i){let o=_(e,"x","depthwiseConv2d","float32"),l=_(t,"filter","depthwiseConv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=W(o,[1,o.shape[0],o.shape[1],o.shape[2]])),A(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),A(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`);let d=r==="NHWC"?u.shape[3]:u.shape[1];A(d===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${d}) must match the inChannels dimension in filter ${l.shape[2]}.`),Tn("depthwiseConv2d",a,i);let c={x:u,filter:l},h={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},m=O.runKernel(_i,c,h);return p?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var ws=L({depthwiseConv2d_:CM});function _M(e){let t={x:_(e,"x","diag")};return O.runKernel(im,t)}var lS=L({diag_:_M});function EM(e,t,n,a,r=[1,1],s="NHWC"){let i=_(e,"x","dilation2d"),o=_(t,"filter","dilation2d");A(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),A(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),A(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=W(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0),A(l.shape[3]===o.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${l.shape[3]} vs ${o.shape[2]}`);let p={x:l,filter:o},d={strides:n,pad:a,dilations:r},c=O.runKernel(lc,p,d);return u?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Jx=L({dilation2d_:EM}),Iu={};Ae(Iu,{assertAndGetBroadcastShape:()=>ot,getBroadcastDims:()=>uS,getReductionAxes:()=>Wt});function uS(e,t){let n=e.length,a=[];for(let r=0;r<n;r++){let s=n-1-r,i=e[s]||1;(t[t.length-1-r]||1)>1&&i===1&&a.unshift(s)}return a}function Wt(e,t){let n=[];for(let a=0;a<t.length;a++){let r=e[e.length-a-1],s=t.length-a-1,i=t[s];(r==null||r===1&&i>1)&&n.unshift(s)}return n}function ot(e,t){let n=[],a=Math.max(e.length,t.length);for(let r=0;r<a;r++){let s=e[e.length-r-1];s==null&&(s=1);let i=t[t.length-r-1];if(i==null&&(i=1),s===1)n.unshift(i);else if(i===1)n.unshift(s);else if(s!==i){let o=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(o)}else n.unshift(s)}return n}function AM(e,t){let n=_(e,"a","equal","string_or_numeric"),a=_(t,"b","equal","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Ol,r)}var Jn=L({equal_:AM});function $M(e,t,n){let a=_(t,"a","where"),r=_(n,"b","where"),s=_(e,"condition","where","bool"),i=ot(ot(s.shape,a.shape),r.shape),o=Ys(s,i),l=Ys(a,i),u=Ys(r,i),p={condition:o,t:l,e:u};return O.runKernel(lu,p)}var gn=L({where_:$M});function FM(e){let t={x:_(e,"x","zerosLike")};return O.runKernel(wu,t)}var qe=L({zerosLike_:FM});function RM(e,t){let n=_(e,"a","div"),a=_(t,"b","div");[n,a]=Et(n,a);let r=he(n,a),s=qe(r),i=Jn(a,s);return gn(i,s,r)}var Qx=L({divNoNan_:RM});function DM(e,t){let n=_(e,"t1","dot"),a=_(t,"t2","dot");A((n.rank===1||n.rank===2)&&(a.rank===1||a.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${a.rank}.`);let r=n.rank===1?n.size:n.shape[1],s=a.rank===1?a.size:a.shape[0];if(A(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),n.rank===1&&a.rank===1){let i=W(n,[1,-1]),o=W(a,[-1,1]),l=Re(i,o);return W(l,[])}else if(n.rank===1&&a.rank===2){let i=W(n,[1,-1]),o=W(a,[a.shape[0],a.shape[1]]),l=Re(i,o);return W(l,[l.size])}else if(n.rank===2&&a.rank===1){let i=W(a,[-1,1]),o=Re(n,i);return W(o,[o.size])}else{let i=W(a,[a.shape[0],a.shape[1]]);return Re(n,i)}}var ev=L({dot_:DM});function MM(e,...t){let n=t.map((r,s)=>_(r,`tensors${s}`,"einsum")),a={equation:e};return O.runKernel(om,n,a)}var pS=L({einsum_:MM});function PM(e){let t={x:_(e,"x","elu","float32")};return O.runKernel(Ai,t)}var Su=L({elu_:PM});function OM(e){let t=_(e,"x","erf");A(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=ie(t,"float32"));let n={x:t};return O.runKernel(Pl,n)}var tv=L({erf_:OM});function nv(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function cS(e,t,n){let a=e.length+t.length,r=[],s=0,i=0;for(let o=0;o<a;o++)n.indexOf(o)===-1?r.push(e[s++]):r.push(t[i++]);return r}function dS(e,t){let n=[],a=e.length;for(let s=0;s<a;s++)t.indexOf(s)===-1&&n.push(e[s]);let r=t.map(s=>e[s]);return[n,r]}function oi(e,t){let n=t.map(a=>1);return cS(e,n,t)}function LM(e,t,n){A(nv(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function hS(e,t){if(nv(e,t))return null;let n=[];for(let a=0;a<t;++a)e.indexOf(a)===-1&&n.push(a);return e.forEach(a=>n.push(a)),n}function av(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function zM(e,t){let n=[];for(let a=t-e;a<t;++a)n.push(a);return n}function WM(e,t=null,n=!1){let a={x:_(e,"x","max")},r={reductionIndices:t,keepDims:n};return O.runKernel(Wi,a,r)}var ha=L({max_:WM});function BM(e,t=null,n=!1){let a={x:_(e,"x","min")},r={axis:t,keepDims:n};return O.runKernel(Gi,a,r)}var rl=L({min_:BM});function VM(e,t){let n=_(e,"base","pow"),a=_(t,"exp","pow");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(Yi,r)}var Ar=L({pow_:VM});function xe(e,t){if((ln(e)&&t!=="string"||Array.isArray(e))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&ln(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return xs(e,[],[],t)}function UM(e){let t={x:_(e,"x","sqrt","float32")};return O.runKernel(uo,t)}var pn=L({sqrt_:UM});function GM(e){let t=_(e,"x","square"),n={};return O.runKernel("Square",{x:t},n)}var it=L({square_:GM});function HM(e,t=null,n=!1){let a=_(e,"x","sum");a.dtype==="bool"&&(a=ie(a,"int32"));let r={x:a},s={axis:t,keepDims:n};return O.runKernel(po,r,s)}var fe=L({sum_:HM});function qM(e,t="euclidean",n=null,a=!1){e=_(e,"x","norm");let r=mS(e,t,n),s=r.shape;if(a){let i=Fa(n,e.shape);s=oi(r.shape,i)}return W(r,s)}function mS(e,t,n=null){if(e.rank===0)return Lt(e);if(e.rank!==1&&n===null)return mS(W(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return fe(Lt(e),n);if(t===1/0)return ha(Lt(e),n);if(t===-1/0)return rl(Lt(e),n);if(t==="euclidean"||t===2)return pn(fe(Ar(Lt(e),xe(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return ha(fe(Lt(e),n[0]),n[1]-1);if(t===1/0)return ha(fe(Lt(e),n[1]),n[0]);if(t===-1/0)return rl(fe(Lt(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return pn(fe(it(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var Tu=L({norm_:qM});function jM(e,t=null,n=!1){return Tu(e,"euclidean",t,n)}var rv=L({euclideanNorm_:jM});function KM(e){let t={x:_(e,"x","exp")};return O.runKernel($i,t)}var yn=L({exp_:KM});function XM(e,t=0){let n=_(e,"x","expandDims","string_or_numeric");A(t<=n.rank,()=>"Axis must be <= rank of the tensor");let a={input:n},r={dim:t};return O.runKernel(Ll,a,r)}var Qt=L({expandDims_:XM});function YM(e){let t={x:_(e,"x","expm1")};return O.runKernel(zl,t)}var sv=L({expm1_:YM});function ZM(e,t){let n=_(e,"x","tile","string_or_numeric");A(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let a={x:n},r={reps:t};return O.runKernel(ys,a,r)}var Ln=L({tile_:ZM});function JM(e,t,n,a="float32"){t==null&&(t=e);let r=Le([e,t],a),s=e<=t?e:t;for(let o=0;o<s;++o)r.set(1,o,o);let i=W(r.toTensor(),[e,t]);if(n==null)return i;if(n.length===1)return Ln(Qt(i,0),[n[0],1,1]);if(n.length===2)return Ln(Qt(Qt(i,0),0),[n[0],n[1],1,1]);if(n.length===3)return Ln(Qt(Qt(Qt(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var Pm=L({eye_:JM});function QM(e){let t={x:_(e,"x","floor","float32")};return O.runKernel(Fi,t)}var Nu=L({floor_:QM});function eP(e,t,n=0,a=0){let r=_(e,"x","gather"),s=_(t,"indices","gather","int32"),i={x:r,indices:s},o={axis:n,batchDims:a};return O.runKernel(Bl,i,o)}var Cu=L({gather_:eP});function tP(e,t){let n=_(e,"a","greater","string_or_numeric"),a=_(t,"b","greater","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Ul,r)}var Nn=L({greater_:tP});function nP(e,t){let n=_(e,"a","greaterEqual","string_or_numeric"),a=_(t,"b","greaterEqual","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Mi,r)}var $r=L({greaterEqual_:nP});function aP(e){let t={input:_(e,"input","imag")};return O.runKernel(cm,t)}var Ec=L({imag_:aP});function rP(e){let t={x:_(e,"x","isFinite")};return O.runKernel(Gl,t)}var iv=L({isFinite_:rP});function sP(e){let t={x:_(e,"x","isInf")};return O.runKernel(Hl,t)}var ov=L({isInf_:sP});function iP(e){let t={x:_(e,"x","isNaN")};return O.runKernel(Oi,t)}var lv=L({isNaN_:iP});function oP(e,t=.2){let n={x:_(e,"x","leakyRelu")},a={alpha:t};return O.runKernel(Li,n,a)}var Ac=L({leakyRelu_:oP});function lP(e,t){let n=_(e,"a","less","string_or_numeric"),a=_(t,"b","less","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(ql,r)}var Om=L({less_:lP});function uP(e,t){let n=_(e,"a","lessEqual","string_or_numeric"),a=_(t,"b","lessEqual","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(jl,r)}var ks=L({lessEqual_:uP});function fS(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let a={start:e,stop:t,num:n};return O.runKernel(dm,{},a)}function pP(e,t=5,n=1,a=1,r=.5){let s=_(e,"x","localResponseNormalization");A(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${s.rank}.`),A(nl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:n,alpha:a,beta:r},p=O.runKernel(pc,l,u);return o?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var uv=L({localResponseNormalization_:pP});function cP(e){let t={x:_(e,"x","log","float32")};return O.runKernel(zi,t)}var Qn=L({log_:cP});function dP(e){let t={x:_(e,"x","log1p")};return O.runKernel(Kl,t)}var $c=L({log1p_:dP});function hP(e){return A(as(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let a=_(t,"x","tf.grad","string_or_numeric"),r=n!=null?_(n,"dy","tf.grad"):null;return O.tidy(()=>{let{value:s,grads:i}=O.gradients(()=>e(a),[a],r);return r!=null&&Sn(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Lm(i),i[0]})}}function mP(e){return A(as(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{A(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let a=Up(t,"args","tf.grads","string_or_numeric"),r=n!=null?_(n,"dy","tf.grads"):null;return O.tidy(()=>{let{value:s,grads:i}=O.gradients(()=>e(...a),a,r);return r!=null&&Sn(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lm(i),i})}}function fP(e){return A(as(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{A(t instanceof Ne,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),A(n==null||n instanceof Ne,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:a,value:r}=O.gradients(()=>e(t),[t],n);return Lm(a),{grad:a[0],value:r}}}function gP(e){return A(as(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{A(Array.isArray(t)&&t.every(r=>r instanceof Ne),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),A(n==null||n instanceof Ne,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let a=O.gradients(()=>e(...t),t,n);return n!=null&&Sn(a.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Lm(a.grads),a}}function gS(e,t){A(as(e),()=>"The f passed in variableGrads(f) must be a function"),A(t==null||Array.isArray(t)&&t.every(u=>u instanceof ss),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in O.registeredVariables)t.push(O.registeredVariables[u])}let a=n?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),A(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=O.gradients(e,t,null,s);A(o.some(u=>u!=null),()=>"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()."),A(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((u,p)=>{o[p]!=null&&(l[u.name]=o[p])}),a!=null&&a.forEach(u=>l[u.name]=null),{value:i,grads:l}}function ur(e){return O.customGrad(e)}function Lm(e){if(e.filter(t=>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.`)}function yP(e){let t={x:_(e,"x","neg")};return O.runKernel(Ql,t)}var bt=L({neg_:yP});function bP(e){let t={x:_(e,"x","softplus")};return O.runKernel(hu,t)}var yo=L({softplus_:bP});function xP(e){let t=_(e,"x","logSigmoid");return ur(n=>({value:bt(yo(bt(n))),gradFunc:a=>z(a,da(bt(n)))}))(t)}var pv=L({logSigmoid_:xP});function vP(e,t){let n=_(e,"a","sub"),a=_(t,"b","sub");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(mo,r)}var pe=L({sub_:vP});function wP(e,t=-1){let n=_(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return ur((a,r)=>{let s=ha(a,t,!0),i=pe(a,s),o=pe(ie(i,"float32"),Qn(fe(yn(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,d=!0,c=yn(p);return pe(l,z(fe(l,t,d),c))}}})(n)}var zm=L({logSoftmax_:wP});function kP(e,t=null,n=!1){let a=_(e,"x","logSumExp"),r=Fa(t,a.shape),s=ha(a,r,!0),i=pe(a,s),o=yn(i),l=fe(o,r),u=Qn(l),p=X(W(s,u.shape),u);if(n){let d=oi(p.shape,r);return W(p,d)}return p}var Wm=L({logSumExp_:kP});function IP(e,t){let n=_(e,"a","logicalAnd","bool"),a=_(t,"b","logicalAnd","bool");ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Xl,r)}var $a=L({logicalAnd_:IP});function SP(e){let t={x:_(e,"x","logicalNot","bool")};return O.runKernel(Yl,t)}var Fc=L({logicalNot_:SP});function TP(e,t){let n=_(e,"a","logicalOr","bool"),a=_(t,"b","logicalOr","bool");ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Zl,r)}var Bm=L({logicalOr_:TP});function NP(e,t){let n=_(e,"a","logicalXor","bool"),a=_(t,"b","logicalXor","bool");return ot(n.shape,a.shape),$a(Bm(e,t),Fc($a(e,t)))}var cv=L({logicalXor_:NP}),Hd=2147483648;function CP(e,t,n="left"){let a=_(e,"sortedSequence","searchSorted"),r=_(t,"values","searchSorted"),s=a.shape[a.shape.length-1],i=r.shape[r.shape.length-1],o=W(a,[-1,s]),l=W(r,[-1,i]);if(o.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(o.shape[0]!==l.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(mt(l.shape)>=Hd)throw new Error(`values tensor size must less than ${Hd}`);if(o.shape[1]>=Hd)throw new Error(`trailing dim_size must less than ${Hd} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:n};return O.runKernel(Sm,u,p)}var Vm=L({searchSorted_:CP});function yS(e,t){return Vm(e,t,"left")}function _P(e,t,n,a,r){let s=_(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),A(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),A(cr(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),Tn("maxPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=O.runKernel(Vi,u,p);return l?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Dt=L({maxPool_:_P});function EP(e,t=[1,1,1],n,a,r,s="NDHWC"){let i=_(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),A(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),A(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Tn("maxPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=O.runKernel(cc,u,p);return l?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var dv=L({maxPool3d_:EP});function AP(e,t,n,a,r=!1){let s={x:_(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:a,includeBatchInIndex:r},o=O.runKernel(gm,s,i);return{result:o[0],indexes:o[1]}}var bS=L({maxPoolWithArgmax_:AP});function $P(e,t){let n=_(e,"a","maximum"),a=_(t,"b","maximum");[n,a]=Et(n,a),n.dtype==="bool"&&(n=ie(n,"int32"),a=ie(a,"int32")),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Bi,r)}var dr=L({maximum_:$P});function FP(e,t=null,n=!1){let a={x:_(e,"x","mean")},r={axis:t,keepDims:n};return O.runKernel(Ui,a,r)}var Ct=L({mean_:FP});function It(e,t="float32"){if(na(e),t==="complex64"){let a=It(e,"float32"),r=It(e,"float32");return Er(a,r)}let n=jh(mt(e),t);return O.makeTensor(n,e,t)}function Zn(e,t="float32"){if(na(e),t==="complex64"){let a=Zn(e,"float32"),r=It(e,"float32");return Er(a,r)}let n=bx(mt(e),t);return O.makeTensor(n,e,t)}function xS(e,t,{indexing:n="xy"}={}){if(n!=="xy"&&n!=="ij")throw new TypeError(`${n} is not a valid third argument to meshgrid`);if(e===void 0)return[];let a=_(e,"x","meshgrid",e instanceof Ne?e.dtype:"float32");if(t===void 0)return[a];let r=_(t,"y","meshgrid",t instanceof Ne?t.dtype:"float32"),s=mt(a.shape),i=mt(r.shape);return n==="xy"?(a=W(a,[1,-1]),r=W(r,[-1,1]),[Re(Zn([i,1],a.dtype),a),Re(r,Zn([1,s],r.dtype))]):(a=W(a,[-1,1]),r=W(r,[1,-1]),[Re(a,Zn([1,i],a.dtype)),Re(Zn([s,1],r.dtype),r)])}function RP(e,t){let n=_(e,"a","minimum"),a=_(t,"b","minimum");[n,a]=Et(n,a),n.dtype==="bool"&&(n=ie(n,"int32"),a=ie(a,"int32")),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(Hi,r)}var _u=L({minimum_:RP});function DP(e,t,n){A(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let a=_(e,"x","mirrorPad");if(a.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");A(t.length===a.rank,()=>`Padding doesn't match input. Must be ${a.rank}. Got ${t.length}.`);let r=n==="reflect"?1:0;for(let o=0;o<a.rank;o++)A(t[o].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),A(t[o][0]>=0&&t[o][0]<=a.shape[o]-r&&t[o][1]>=0&&t[o][1]<=a.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${a.shape[o]-r} or less than 0 for input of shape ${a.shape}`);let s={paddings:t,mode:n},i={x:a};return O.runKernel(qi,i,s)}var hv=L({mirrorPad_:DP});function MP(e,t){let n=_(e,"a","mod"),a=_(t,"b","mod");[n,a]=Et(n,a);let r={a:n,b:a};return O.runKernel(Jl,r)}var mv=L({mod_:MP});function PP(e,t=null,n=!1){e=_(e,"x","moments");let a=Fa(t,e.shape),r=Ct(e,a,n),s=r.shape;n||(s=oi(r.shape,a));let i=it(pe(ie(e,"float32"),W(r,s))),o=Ct(i,a,n);return{mean:r,variance:o}}var Rc=L({moments_:PP});function OP(e,t,n,a){let r=_(t,"data","multiRNNCell"),s=Up(n,"c","multiRNNCell"),i=Up(a,"h","multiRNNCell"),o=r,l=[];for(let d=0;d<e.length;d++){let c=e[d](o,s[d],i[d]);l.push(c[0]),l.push(c[1]),o=c[1]}let u=[],p=[];for(let d=0;d<l.length;d+=2)u.push(l[d]),p.push(l[d+1]);return[u,p]}var vS=L({multiRNNCell_:OP});function LP(e,t,n,a=!1){let r=_(e,"logits","multinomial"),s=r.size,i=r.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?W(r,[1,-1]):r},l={numSamples:t,seed:n,normalized:a},u=O.runKernel(ym,o,l);return i===1?W(u,[u.size]):u}var wS=L({multinomial_:LP});function zP(e,t){let n=_(e,"a","notEqual","string_or_numeric"),a=_(t,"b","notEqual","string_or_numeric");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a};return O.runKernel(eu,r)}var li=L({notEqual_:zP});function WP(e,t,n=1,a=0,r="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let s={indices:_(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:n,offValue:a};return O.runKernel(Ki,s,i)}var sl=L({oneHot_:WP});function BP(e){let t={x:_(e,"x","onesLike")};return O.runKernel(ru,t)}var ea=L({onesLike_:BP});function VP(e,t){let n=_(e,"v1","outerProduct"),a=_(t,"v2","outerProduct");A(n.rank===1&&a.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${a.rank}.`);let r=W(n,[-1,1]),s=W(a,[1,-1]);return Re(r,s)}var kS=L({outerProduct_:VP});function UP(e,t,n=0){let a=_(e,"x","pad");if(a.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:n},s={x:a};return O.runKernel(Xi,s,r)}var ba=L({pad_:UP});function GP(e,t,n=0){return A(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ba(e,[t],n)}var IS=L({pad1d_:GP});function HP(e,t,n=0){return A(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ba(e,t,n)}var SS=L({pad2d_:HP});function qP(e,t,n=0){return A(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ba(e,t,n)}var TS=L({pad3d_:qP});function jP(e,t,n=0){return A(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ba(e,t,n)}var NS=L({pad4d_:jP});function KP(e,t,n){let a=_(e,"x","spaceToBatchND");A(a.rank>=1+t.length,()=>`input rank ${a.rank} should be > than [blockShape] ${t.length}`),A(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),A(a.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+n[l-1][0]+n[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${a.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:a},s={blockShape:t,paddings:n};return O.runKernel(mu,r,s)}var Dc=L({spaceToBatchND_:KP});function XP(e,t,n,a,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),a===0&&(a="valid");let o=_(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=W(o,[1,o.shape[0],o.shape[1],o.shape[2]])),A(cr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=nS(l.shape,t,s,r,a),d=[p.dilationHeight,p.dilationWidth],c;a==="same"?c=ZP([p.filterHeight,p.filterWidth],d):c=[[0,0],[0,0]];let h=d[0]===1&&d[1]===1,[m,f]=YP([p.inHeight,p.inWidth],d,c),g=h?a:"valid",y=h?l:Dc(l,d,m),b=(n==="avg"?()=>ya(y,t,s,g,i):()=>Dt(y,t,s,g,i))(),x=h?b:Cc(b,d,f);return u?W(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function YP(e,t,n){let a=n.map(p=>p[0]),r=n.map(p=>p[1]),s=e.concat(a,r),i=t.map((p,d)=>(p-s[d]%p)%p),o=r.map((p,d)=>p+i[d]),l=t.map((p,d)=>[a[d],o[d]]),u=t.map((p,d)=>[0,i[d]]);return[l,u]}function ZP(e,t){let n=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),a=n.map(s=>Math.floor(s/2)),r=n.map((s,i)=>s-a[i]);return n.map((s,i)=>[a[i],r[i]])}var fv=L({pool_:XP});function JP(e,t){let n=_(e,"x","prelu"),a=_(t,"alpha","prelu"),r={x:n,alpha:a};return O.runKernel(Zi,r)}var Mc=L({prelu_:JP});function QP(e,t=null,n=!1){let a=_(e,"x","prod");a.dtype==="bool"&&(a=ie(a,"int32"));let r={x:a},s={axis:t,keepDims:n};return O.runKernel(Ji,r,s)}var gv=L({prod_:QP});function eO(e,t,n,a){let r=e.map((p,d)=>_(p,`tensors${d}`,"raggedGather","int32")),s=_(t,"paramsDenseValues","raggedGather"),i=_(n,"indices","raggedGather","int32"),o={paramsNestedSplits:r,paramsDenseValues:s,indices:i},l={outputRaggedRank:a},u=O.runKernel(bm,o,l);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var CS=L({raggedGather_:eO});function tO(e,t,n){let a=_(e,"starts","raggedRange"),r=_(t,"limits","raggedRange",a.dtype),s=_(n,"deltas","raggedRange",a.dtype),i={starts:a,limits:r,deltas:s},o=O.runKernel(xm,i);return{rtNestedSplits:o[0],rtDenseValues:o[1]}}var _S=L({raggedRange_:tO});function nO(e,t,n,a,r){let s=_(e,"shape","raggedTensorToTensor","int32"),i=_(t,"values","raggedTensorToTensor"),o=_(n,"defaultValue","raggedTensorToTensor",i.dtype),l=a.map((d,c)=>_(d,`tensors${c}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},p={rowPartitionTypes:r};return O.runKernel(vm,u,p)}var ES=L({raggedTensorToTensor_:nO});function aO(e,t,n){na(e);let a=mt(e),r=null;if(n==null||n==="float32")r=new Float32Array(a);else if(n==="int32")r=new Int32Array(a);else if(n==="bool")r=new Uint8Array(a);else throw new Error(`Unknown data type ${n}`);for(let s=0;s<a;s++)r[s]=t();return O.makeTensor(r,e,n)}var AS=L({rand_:aO}),yv=hs(Gh()),$S={};Ae($S,{TEST_EPSILON_FLOAT16:()=>FS,createVideoElement:()=>cO,encodeStrings:()=>RS,expectArrayBuffersEqual:()=>pO,expectArraysClose:()=>sO,expectArraysEqual:()=>oO,expectNumbersClose:()=>lO,expectPromiseToFail:()=>iO,expectValuesInRange:()=>uO,play:()=>dO,testEpsilon:()=>bv});var rO=.001,FS=.1;function sO(e,t,n){return n==null&&(n=bv()),$b(e,t,(a,r)=>xv(a,r,n))}function bv(){return O.backend.floatPrecision()===32?rO:FS}function $b(e,t,n){let a=!0;if((ln(e)||ln(t))&&(a=!1),ln(e)&&ln(t)&&(a=!0),a){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=lr(e),o=lr(t);if(!ms(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=ln(e)?e:rs(e),s=ln(t)?t:rs(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}.
|
|
Actual: ${r}.
|
|
Expected: ${s}.`);for(let i=0;i<s.length;++i){let o=r[i],l=s[i];if(!n(o,l))throw new Error(`Arrays differ: actual[${i}] = ${o}, expected[${i}] = ${l}.
|
|
Actual: ${r}.
|
|
Expected: ${s}.`)}typeof expect!="undefined"&&expect().nothing()}function iO(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function oO(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Yr(e)||Yr(e[0])||Yr(t)||Yr(t[0])?$b(e,n,(a,r)=>a==r):$b(e,t,(a,r)=>xv(a,r,0))}function lO(e,t,n){if(n==null&&(n=bv()),!xv(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function xv(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function uO(e,t,n){for(let a=0;a<e.length;a++)if(e[a]<t||e[a]>n)throw new Error(`Value out of range:${e[a]} low: ${t}, high: ${n}`)}function pO(e,t){let n=new Float32Array(e),a=new Float32Array(t);if(n.length!==a.length)throw new Error(`Expected ArrayBuffer to be of length ${a.length}, but it was ${n.length}`);for(let r=0;r<a.length;r++)if(n[r]!==a[r])throw new Error(`Expected ArrayBuffer value at ${r} to be ${a[r]} but got ${n[r]} instead`)}function RS(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?RS(n):e[t]=Ic(n)}return e}function cO(e){let t=document.createElement("video");return"playsInline"in t&&(t.playsInline=!0),t.muted=!0,t.loop=!0,t.style.position="fixed",t.style.left="0px",t.style.top="0px",t.preload="auto",t.appendChild(e),new Promise(n=>{t.addEventListener("loadeddata",a=>n(t)),t.load()})}async function dO(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var vv=class{constructor(e,t,n,a,r){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=a,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=yv.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let a=this.nextVal;return this.nextVal=NaN,a}let e,t,n=!1;for(;!n;){let a,r,s;do a=2*this.random()-1,r=2*this.random()-1,s=a*a+r*r;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*a*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},hO=class{constructor(e,t,n,a){this.alpha=e,this.beta=1/t,this.dtype=n;let r=a||Math.random();this.randu=yv.alea(r.toString()),this.randn=new vv(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,a,r,s;for(;;){do a=this.randn.nextValue(),s=1+this.c*a;while(s<=0);if(s*=s*s,e=a*a,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),r<t||Math.log(r)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},mO=class{constructor(e=0,t=1,n,a){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,a==null&&(a=Math.random()),typeof a=="number"&&(a=a.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=yv.alea(a)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function fO(e,t,n=1,a="float32",r){if(na(e),n==null&&(n=1),a==null&&(a="float32"),a!=="float32"&&a!=="int32")throw new Error(`Unsupported data type ${a}`);let s=new hO(t,n,a,r),i=Le(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var DS=L({randomGamma_:fO});function gO(e,t=0,n=1,a,r){if(na(e),a!=null&&a==="bool")throw new Error(`Unsupported data type ${a}`);let s=new vv(t,n,a,!1,r),i=Le(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var Um=L({randomNormal_:gO});function yO(e,t,n){if(t!=null&&t==="bool")throw new Error(`Unsupported data type ${t}`);return Um(e,0,1,t,n)}var MS=L({randomStandardNormal_:yO});function bO(e,t=0,n=1,a="float32",r){na(e);let s=Le(e,a),i=new mO(t,n,null,r);for(let o=0;o<s.values.length;o++)s.values[o]=i.nextValue();return s.toTensor()}var Eu=L({randomUniform_:bO});function ui(e,t,n=1,a="float32"){if(n===0)throw new Error("Cannot have a step of zero");let r={start:e,stop:t,step:n,dtype:a};return O.runKernel(dc,{},r)}function xO(e){let t={input:_(e,"input","real")};return O.runKernel(wm,t)}var il=L({real_:xO});function vO(e){let t={x:_(e,"x","reciprocal")};return O.runKernel(Qi,t)}var wv=L({reciprocal_:vO});function wO(e){let t={x:_(e,"x","relu")};return O.runKernel(eo,t)}var Ke=L({relu_:wO});function kO(e){let t={x:_(e,"x","relu6")};return O.runKernel(ao,t)}var Gm=L({relu6_:kO});function IO(e,t){let n={x:_(e,"x","reverse")},a={dims:t};return O.runKernel(ro,n,a)}var ga=L({reverse_:IO});function SO(e){let t=_(e,"x","reverse");return A(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),ga(t,0)}var PS=L({reverse1d_:SO});function TO(e,t){let n=_(e,"x","reverse");return A(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),ga(n,t)}var OS=L({reverse2d_:TO});function NO(e,t){let n=_(e,"x","reverse");return A(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),ga(n,t)}var LS=L({reverse3d_:NO});function CO(e,t){let n=_(e,"x","reverse");return A(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),ga(n,t)}var zS=L({reverse4d_:CO});function _O(e){let t={x:_(e,"x","round")};return O.runKernel(so,t)}var Hm=L({round_:_O});function EO(e){let t={x:_(e,"x","rsqrt","float32")};return O.runKernel(io,t)}var qm=L({rsqrt_:EO});function AO(e){let t={x:_(e,"x","selu")};return O.runKernel(uu,t)}var jm=L({selu_:AO});function $O(e,t,n,a,r,s=[1,1],i="NHWC"){let o=_(e,"x","separableConv2d"),l=_(t,"depthwiseFilter","separableConv2d"),u=_(n,"pointwiseFilter","separableConv2d"),p=o,d=!1;if(o.rank===3&&(d=!0,p=W(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");A(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),A(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),A(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),A(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),A(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let c=l.shape[2],h=l.shape[3];A(u.shape[2]===c*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${c*h}, but got ${u.shape[2]}.`);let m=ws(p,l,a,r,i,s),f=Rt(m,u,1,"valid",i);return d?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Is=L({separableConv2d_:$O});async function FO(e,t){let n=_(e,"x","setdiff1d"),a=_(t,"y","setdiff1d");A(n.dtype===a.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${a.dtype}).`),A(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),A(a.rank===1,()=>`y should be 1D tensor, but got y (${a.shape}).`);let r=await n.data(),s=await a.data(),i=new Set(s),o=0;for(let p=0;p<r.length;p++)i.has(r[p])||o++;let l=new jt([o],n.dtype),u=new jt([o],"int32");for(let p=0,d=0;p<r.length;p++)i.has(r[p])||(l.values[d]=r[p],u.values[d]=p,d++);return[l.toTensor(),u.toTensor()]}var WS=FO;function RO(e){let t={x:_(e,"x","sign")};return O.runKernel(du,t)}var kv=L({sign_:RO});function DO(e){let t={x:_(e,"x","sin","float32")};return O.runKernel(oo,t)}var Km=L({sin_:DO});function MO(e){let t={x:_(e,"x","sinh")};return O.runKernel(cu,t)}var Xm=L({sinh_:MO});function PO(e,t,n){let a=_(e,"x","slice1d");return A(a.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${a.rank} tensor`),Ve(a,[t],[n])}var Pc=L({slice1d_:PO});function OO(e,t,n){let a=_(e,"x","slice2d");return A(a.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${a.rank} tensor`),Ve(a,t,n)}var Ym=L({slice2d_:OO});function LO(e,t,n){let a=_(e,"x","slice3d");return A(a.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${a.rank} tensor`),Ve(a,t,n)}var bo=L({slice3d_:LO});function zO(e,t,n){let a=_(e,"x","slice4d");return A(a.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${a.rank} tensor`),Ve(a,t,n)}var ol=L({slice4d_:zO});function WO(e,t=-1){let n=_(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let a={logits:n},r={dim:t};return O.runKernel(co,a,r)}var Xa=L({softmax_:WO});function BO(e){A(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return O.runKernel(um,t)}var Oc=L({fft_:BO});function VO(e){A(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return O.runKernel(pm,t)}var ll=L({ifft_:VO});function UO(e){let t=e.shape[e.shape.length-1],n=e.size/t,a;if(t<=2){let r=W(e,[n,t]);a=ll(r)}else{let r=[n,2*(t-1)],s=W(il(e),[n,t]),i=W(Ec(e),[n,t]),o=ga(Ve(s,[0,1],[n,t-2]),1),l=z(ga(Ve(i,[0,1],[n,t-2]),1),xe(-1)),u=Ze([s,o],1),p=Ze([i,l],1),d=W(Er(u,p),[r[0],r[1]]);a=ll(d)}if(a=il(a),e.rank===3&&e.shape[0]!==0){let r=a,s=e.shape[0];a=W(a,[s,a.shape[0]/s,a.shape[1]]),r.dispose()}return a}var Zm=L({irfft_:UO});function GO(e,t,n=0){let a={x:_(e,"x","split")},r={numOrSizeSplits:t,axis:n};return O.runKernel(fu,a,r)}var zn=L({split_:GO});function HO(e,t){A(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],a=e.size/n,r;if(t!=null&&t<n){let m=e.shape.map(g=>0),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=Ve(e,m,f),n=t}else if(t!=null&&t>n){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-n,r=Ze([e,It(m)],e.shape.length-1),n=t}else r=e;let s=qe(r),i=W(Er(r,s),[a,n]),o=Oc(i),l=Math.floor(n/2)+1,u=il(o),p=Ec(o),d=zn(u,[l,n-l],u.shape.length-1),c=zn(p,[l,n-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,W(Er(d[0],c[0]),h)}var Lc=L({rfft_:HO});function qO(e,t){let n=_(e,"a","squaredDifference"),a=_(t,"b","squaredDifference");[n,a]=Et(n,a),ot(n.shape,a.shape);let r={a:n,b:a},s={};return O.runKernel(ho,r,s)}var Jm=L({squaredDifference_:qO});function jO(e,t){let n=_(e,"x","squeeze","string_or_numeric");return W(n,vI(n.shape,t).newShape)}var Ss=L({squeeze_:jO});function KO(e,t=0){let n=Up(e,"tensors","stack","string_or_numeric");A(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&A(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let a=n,r={axis:t};return O.runKernel(su,a,r)}var Ft=L({stack_:KO});function XO(e,t=0){let n={x:_(e,"x","step")},a={alpha:t};return O.runKernel(bs,n,a)}var xo=L({step_:XO});function YO(e,t,n,a,r=0,s=0,i=0,o=0,l=0){let u={x:_(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:a,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return O.runKernel(yu,u,p)}var Iv=L({stridedSlice_:YO});function ZO(e){let t={x:_(e,"x","tan","float32")};return O.runKernel(fo,t)}var Sv=L({tan_:ZO});function je(e,t){gi(e);let n=lr(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return xs(e,null,n,t)}function Aa(e,t,n){if(gi(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let a=lr(e,n);if(a.length!==2&&a.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return xs(e,t,a,n)}function zc(e,t,n){if(gi(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let a=lr(e,n);if(a.length!==3&&a.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return xs(e,t,a,n)}function Ra(e,t,n){if(gi(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let a=lr(e,n);if(a.length!==4&&a.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return xs(e,t,a,n)}function BS(e,t,n){if(gi(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let a=lr(e,n);if(a.length!==5&&a.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return xs(e,t,a,n)}function VS(e,t,n){if(gi(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let a=lr(e,n);if(a.length!==6&&a.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||a,xs(e,t,a,n)}function JO(e,t=1,n=!0){let a=_(e,"x","topk");if(a.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let r=a.shape[a.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:a},i={k:t,sorted:n},[o,l]=O.runKernel(bu,s,i);return{values:o,indices:l}}var Tv=L({topk_:JO});function QO(e,t=0,n=1,a,r){if(na(e),a!=null&&a==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new vv(t,n,a,!0,r),i=Le(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var Qm=L({truncatedNormal_:QO});function e3(e,t=0){let n=_(e,"x","unique","string_or_numeric");A(n.rank>0,()=>"The input tensor must be at least 1D");let a={x:n},r={axis:t},[s,i]=O.runKernel(Nm,a,r);return{values:s,indices:i}}var Nv=L({unique_:e3});function t3(e,t,n){let a=_(e,"x","unsortedSegmentSum"),r=_(t,"segmentIds","unsortedSegmentSum","int32");A(nl(n),()=>"numSegments must be of dtype int");let s={x:a,segmentIds:r},i={numSegments:n};return O.runKernel(vc,s,i)}var ef=L({unsortedSegmentSum_:t3});function n3(e,t=0){let n=_(e,"x","unstack","string_or_numeric");A(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let a={value:n},r={axis:t};return O.runKernel(vu,a,r)}var lt=L({unstack_:n3});function US(e,t){return Vm(e,t,"right")}function Cv(e,t=!0,n,a){return O.makeVariable(e,t,n,a)}function GS(e,t){let n=[];for(let s=0;s<t.length;s++)t[s]&&n.push(s);let a=Le(e,"int32"),r=Le([n.length,e.length],"int32");for(let s=0;s<n.length;s++){let i=a.indexToLoc(n[s]),o=s*e.length;r.values.set(i,o)}return r.toTensor()}async function a3(e){let t=_(e,"condition","whereAsync","bool"),n=await t.data(),a=GS(t.shape,n);return e!==t&&t.dispose(),a}var _v=a3;async function r3(e,t,n){let a=_(e,"tensor","boolMask"),r=_(t,"mask","boolMask","bool"),s=n==null?0:n,i=r.rank,o=a.shape;A(i>0,()=>"mask cannot be scalar"),Sn(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let f=s;f<s+i;f++)l*=o[f];let u=o.slice(0,s).concat([l],o.slice(s+i)),p=W(a,u),d=W(r,[-1]),c=await _v(d),h=Ss(c,[1]),m=Cu(p,h,s);return e!==a&&a.dispose(),t!==r&&r.dispose(),h.dispose(),p.dispose(),d.dispose(),c.dispose(),m}var HS=r3;function s3(e,t,n){let a=_(e,"x","transpose");if(t==null&&(t=a.shape.map((i,o)=>o).reverse()),A(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of perm ${t}.`),t.forEach(i=>{A(i>=0&&i<a.rank,()=>`All entries in 'perm' must be between 0 and ${a.rank-1} but got ${t}`)}),a.rank<=1)return a.clone();let r={x:a},s={perm:t};return a.dtype==="complex64"?P(()=>{let i=il(a),o=Ec(a);return i=O.runKernel(Cr,{x:i},s),o=O.runKernel(Cr,{x:o},s),n&&(o=bt(o)),Er(i,o)}):O.runKernel(Cr,r,s)}var Ee=L({transpose_:s3});function i3(e,t,n,a,r=!0){let s=_(e,"v","movingAverage"),i=_(t,"x","movingAverage"),o=_(n,"decay","movingAverage");LI(s,i),A(ms(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=xe(1),u=pe(l,o),p=z(pe(i,s),u);if(r){A(a!=null,()=>"When using zeroDebias: true, step is required.");let d=_(a,"step","movingAverage");p=he(p,pe(l,Ar(o,d)))}return X(s,p)}var qS=L({movingAverage_:i3}),Ev={};Ae(Ev,{calculateShapes:()=>jS,validateInput:()=>$v,validateUpdateShape:()=>Av});function Av(e,t,n){let a=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${a}, and batchDim: ${r}.`;if(n.rank<r)throw new Error(s+` update.rank < ${r}. `);if(e.length<a+(n.rank-r))throw new Error(s+` Output shape length < ${a+(n.rank-r)}`);if(n.rank!==r+e.length-a)throw new Error(s+` update.rank != ${r+e.length-a}`);for(let i=0;i<r;++i)if(n.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${n.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<n.rank-r;++i)if(n.shape[i+r]!==e[i+a])throw new Error(s+` updates.shape[${i+r}] (${n.shape[i+r]}) != shape[${i+r}] (${e[i+r]})`)}function $v(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(n.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(e.size===0)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}Av(n,t,e)}function jS(e,t,n){let a=t.shape.length,r=a>1?t.shape[a-1]:1,s=n.length,i=1;for(let d=r;d<s;++d)i*=n[d];let o=r<1?1:r,l=mt(t.shape)/o,u=[...vl(n.slice(0,r)),1],p=mt(n);return{sliceRank:r,numUpdates:l,sliceSize:i,strides:u,outputSize:p}}function o3(e,t,n){na(n);let a=_(e,"indices","scatterND","int32"),r=_(t,"updates","scatterND");$v(r,a,n);let s={indices:a,updates:r},i={shape:n};return O.runKernel(ou,s,i)}var KS=L({scatterND_:o3});function l3(e,t,n,a){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==a.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function u3(e,t,n,a=0){na(n);let r=_(e,"sparseIndices","sparseToDense","int32"),s=_(t,"sparseValues","sparseToDense","string_or_numeric"),i=_(a,"defaultValue","sparseToDense",s.dtype);l3(r,s,n,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:n};return O.runKernel(Tm,o,l)}var XS=L({sparseToDense_:u3});function p3(e,t){let n=_(t,"indices","gatherND","int32"),a={params:_(e,"x","gatherND","string_or_numeric"),indices:n};return O.runKernel(Vl,a)}var YS=L({gatherND_:p3});function c3(e,t){if(t==null)return e.shape.slice();if(ms(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let a=0;a<e.shape.length;a++)t[a]==null&&e.shape[a]!=null?n.push(e.shape[a]):n.push(t[a]);return n}return t}function d3(e,t,n,a){let r=_(e,"x","dropout");if(A(r.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),A(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Ne?r.clone():r;let s=c3(r,n),i=1-t,o=he(Nu(X(Eu(s,0,1,"float32",a),i)),i);return z(r,o)}var Fv=L({dropout_:d3});function Rv(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function tf(e,t,n){let a=1-e%2,r=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+a-1);r[s]=t-n*Math.cos(i)}return je(r,"float32")}async function h3(e,t,n=1){let a=_(e,"predictions","inTopK"),r=_(t,"targets","inTopK");A(a.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${a.rank}`),A(a.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${a.rank} and targets rank ${r.rank}`),Sn(a.shape.slice(0,a.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=a.shape[a.shape.length-1];A(n>0&&n<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`);let i=await a.data(),o=await r.data(),[l,u]=[i.length/s,s],p=wI("bool",l);for(let d=0;d<l;d++){let c=d*u,h=i.subarray(c,c+u),m=[];for(let f=0;f<h.length;f++)m.push({value:h[f],index:f});m.sort((f,g)=>g.value-f.value),p[d]=0;for(let f=0;f<n;f++)if(m[f].index===o[d]){p[d]=1;break}}return e!==a&&a.dispose(),t!==r&&r.dispose(),fn(p,r.shape,"bool")}var ZS=h3,ul={};Ae(ul,{conv2d:()=>g3,depthwiseConv2d:()=>v3,matMul:()=>k3});function m3(e,t,n,a,r,s="NHWC",i){let o=e;e.rank===3&&(o=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),A(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),A(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),A(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],p=s==="NHWC"?l.shape[3]:l.shape[1];A(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),A(p===n[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${n[3]}).`),Tn("conv2dDerFilter",r,i);let d={x:o,dy:l},c={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:n};return O.runKernel(em,d,c)}var Dv=L({conv2DBackpropFilter_:m3});function nf(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return z(e,xo(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function af(e,t){let n=t,a=Wt(e.shape,t.shape);return a.length>0&&(n=fe(n,a)),W(n,e.shape)}function rf(e,t,n,a){if(t==="linear")return e;if(t==="relu")return Ke(e);if(t==="elu")return Su(e);if(t==="relu6")return Gm(e);if(t==="prelu")return Mc(e,n);if(t==="leakyrelu")return Ac(e,a);if(t==="sigmoid")return da(e);throw new Error(`Unknown fused activation ${t}.`)}var sf=(e,t)=>!(e>0)||t==="linear";function f3({x:e,filter:t,strides:n,pad:a,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(l=l||"linear",sf(O.state.gradientDepth,l)===!1){A(r==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${r} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let T=Rt(e,t,n,a,r,s,i);return o!=null&&(T=X(T,o)),rf(T,l,u,p)}let d=_(e,"x","conv2d","float32"),c=_(t,"filter","conv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=W(d,[1,d.shape[0],d.shape[1],d.shape[2]])),A(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),A(c.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${c.rank}.`),Tn("fused conv2d",a,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];A(c.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${c.shape[2]}.`),A(cr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let g=Nc(h.shape,c.shape,n,s,a,i),y;o!=null&&(y=_(o,"bias","fused conv2d"),[y]=Et(y,d),r==="NHWC"?ot(g.outShape,y.shape):(A(y.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${y.shape.length}.`),A(y.shape.length===0||y.shape[0]===g.outChannels||y.shape[0]===1,()=>`Error in fused conv2d: bias shape (${y.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let b;if(u!=null){let T=u.shape;if(A(T.length<=1||T.length===3,()=>`Error in fused conv2d: only supports scalar, 1-D Tensor or 3-D Tensor PReLU activation weights but got a tensor of rank-${T.length}.`),T.length===1)A(T[0]===1||T[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the number of output channels (${g.outChannels}).`);else if(T.length===3)try{ot(T,g.outShape)}catch(C){let E=`Error in fused conv2d: PReLU activation weights (${T}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(E)}b=_(u,"prelu weights","fused conv2d")}let x=(T,C)=>{A(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[E,$,R,F]=C,S=nf(T,R,l);A(is(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let M=Kx($.shape,S,E,n,a),B=Dv($,S,E.shape,n,a),U=[M,B];if(F!=null){let G=af(F,S);U.push(G)}return U},w={x:h,filter:c,bias:y,preluActivationWeights:b},I={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?ur((T,C,E)=>{let $=O.runKernel(ei,w,I);return E([C,T,$]),m&&($=W($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:x}})(h,c):ur((T,C,E,$)=>{let R=O.runKernel(ei,w,I);return $([C,T,R,E]),m&&(R=W(R,[R.shape[1],R.shape[2],R.shape[3]])),{value:R,gradFunc:x}})(h,c,y)}var g3=L({fusedConv2d_:f3});function y3(e,t,n,a,r,s=[1,1],i){let o=e;e.rank===3&&(o=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},p={strides:a,pad:r,dimRoundingMode:i,dilations:s,filterShape:n};return O.runKernel(rm,u,p)}var JS=L({depthwiseConv2dNativeBackpropFilter_:y3});function b3(e,t,n,a,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:n},p={strides:a,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},d=O.runKernel(sm,u,p);return l?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var QS=L({depthwiseConv2dNativeBackpropInput_:b3});function x3({x:e,filter:t,strides:n,pad:a,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(sf(O.state.gradientDepth,l)===!1){let I=ws(e,t,n,a,r,s,i);return o!=null&&(I=X(I,o)),rf(I,l,u,p)}let d=_(e,"x","depthwiseConv2d","float32"),c=_(t,"filter","depthwiseConv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=W(d,[1,d.shape[0],d.shape[1],d.shape[2]])),A(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),A(c.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${c.rank}.`),A(h.shape[3]===c.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),s==null&&(s=[1,1]),A(cr(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),Tn("fused depthwiseConv2d",a,i);let f=Nc(h.shape,c.shape,n,s,a,i,!0),g;o!=null&&(g=_(o,"bias","fused conv2d"),[g]=Et(g,d),ot(f.outShape,g.shape));let y;u!=null&&(y=_(u,"prelu weights","fused depthwiseConv2d"));let b=(I,T)=>{A(is(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[C,E,$,R]=T,F=nf(I,$,l),S=QS(E.shape,F,C,n,a,s,i),M=JS(E,F,C.shape,n,a,s,i);if(R!=null){let B=af(g,F);return[S,M,B]}return[S,M]},x={x:h,filter:c,bias:g,preluActivationWeights:y},w={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?ur((I,T,C)=>{let E=O.runKernel(ti,x,w);return C([T,I,E]),m&&(E=W(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:b}})(h,c):ur((I,T,C,E)=>{let $=O.runKernel(ti,x,w);return E([T,I,$,C]),m&&($=W($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:b}})(h,c,g)}var v3=L({fusedDepthwiseConv2d_:x3});function w3({a:e,b:t,transposeA:n=!1,transposeB:a=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(sf(O.state.gradientDepth,s)===!1){let R=Re(e,t,n,a);return r!=null&&(R=X(R,r)),rf(R,s,i,o)}let l=_(e,"a","fused matMul"),u=_(t,"b","fused matMul");[l,u]=Et(l,u);let p=n?l.shape[l.rank-2]:l.shape[l.rank-1],d=a?u.shape[u.rank-1]:u.shape[u.rank-2],c=n?l.shape[l.rank-1]:l.shape[l.rank-2],h=a?u.shape[u.rank-2]:u.shape[u.rank-1],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=mt(m),y=mt(f);A(p===d,()=>`Error in fused matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${a} must match.`);let b=ot(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([c,h]),x=n?W(l,[g,p,c]):W(l,[g,c,p]),w=a?W(u,[y,h,d]):W(u,[y,d,h]),I;r!=null&&(I=_(r,"bias","fused matMul"),[I]=Et(I,l),ot(b,I.shape));let T;i!=null&&(T=_(i,"prelu weights","fused matMul"));let C=(R,F)=>{let[S,M,B,U]=F,G=nf(W(R,B.shape),B,s),j,K;if(!n&&!a?(j=Re(G,M,!1,!0),K=Re(S,G,!0,!1)):!n&&a?(j=Re(G,M,!1,!1),K=Re(G,S,!0,!1)):n&&!a?(j=Re(M,G,!1,!0),K=Re(S,G,!1,!1)):(j=Re(M,G,!0,!0),K=Re(G,S,!0,!0)),r!=null){let Z=af(U,G);return[j,K,Z]}else return[j,K]},E={a:x,b:w,bias:I,preluActivationWeights:T},$={transposeA:n,transposeB:a,activation:s,leakyreluAlpha:o};return r==null?ur((R,F,S)=>{let M=O.runKernel(Qs,E,$);return S([R,F,M]),{value:W(M,b),gradFunc:C}})(x,w):ur((R,F,S,M)=>{let B=O.runKernel(Qs,E,$);return M([R,F,B,S]),{value:W(B,b),gradFunc:C}})(x,w,I)}var k3=L({fusedMatMul_:w3});function I3(e){return tf(e,.54,.46)}var S3=L({hammingWindow_:I3});function T3(e){return tf(e,.5,.5)}var eT=L({hannWindow_:T3});function N3(e,t,n,a=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Ve(e,s,t)),s+=n;if(a)for(;s<e.size;){let o=s+t-e.size,l=Ze([Ve(e,s,t-o),bn([o],r)]);i.push(l),s+=n}return i.length===0?Aa([],[0,t]):W(Ze(i),[i.length,t])}var tT=L({frame_:N3});function C3(e,t,n,a,r=eT){a==null&&(a=Rv(t));let s=tT(e,t,n),i=z(s,r(t));return Lc(i,a)}var _3=L({stft_:C3});function E3(e,t,n,a,r="bilinear",s=0){let i=_(e,"image","cropAndResize"),o=_(t,"boxes","cropAndResize","float32"),l=_(n,"boxInd","cropAndResize","int32"),u=o.shape[0];A(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),A(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),A(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),A(a.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${a.length}.`),A(a[0]>=1&&a[1]>=1,()=>`cropSize must be atleast [1,1], but was ${a}`),A(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let p={image:i,boxes:o,boxInd:l},d={method:r,extrapolationValue:s,cropSize:a};return O.runKernel(Dl,p,d)}var A3=L({cropAndResize_:E3});function $3(e){let t=_(e,"image","flipLeftRight","float32");A(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return O.runKernel(Wl,n,{})}var F3=L({flipLeftRight_:$3});function R3(e){let t=_(e,"image","grayscaleToRGB"),n=t.rank-1,a=t.shape[n];A(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),A(a===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${a}.`);let r=new Array(t.rank);return r.fill(1,0,n),r[n]=3,Ln(t,r)}var D3=L({grayscaleToRGB_:R3});function M3(e,t,n=0,a=.5){let r=_(e,"image","rotateWithOffset","float32");A(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:n,center:a};return O.runKernel(ku,s,i)}var P3=L({rotateWithOffset_:M3});function Au(e,t,n,a,r,s){a==null&&(a=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return n=Math.min(n,i),A(0<=a&&a<=1,()=>`iouThreshold must be in [0, 1], but was '${a}'`),A(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),A(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),A(t.rank===1,()=>"scores must be a 1D tensor"),A(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),A(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:a,scoreThreshold:r,softNmsSigma:s}}function O3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=_(e,"boxes","nonMaxSuppression","float32"),i=_(t,"scores","nonMaxSuppression","float32"),o=Au(s,i,n,a,r);n=o.maxOutputSize,a=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:a,scoreThreshold:r};return O.runKernel(tu,{boxes:s,scores:i},l)}var L3=L({nonMaxSuppression_:O3});function z3(e,t,n){let a=W3(e,t,n),r=a<0?-(a+1):a;e.splice(r,0,t)}function W3(e,t,n){return V3(e,t,n||B3)}function B3(e,t){return e>t?1:e<t?-1:0}function V3(e,t,n){let a=0,r=e.length,s=0,i=!1;for(;a<r;){s=a+(r-a>>>1);let o=n(t,e[s]);o>0?a=s+1:(r=s,i=!o)}return i?a:-a-1}function nT(e,t,n,a,r){return Mv(e,t,n,a,r,0)}function aT(e,t,n,a,r,s){return Mv(e,t,n,a,r,0,!1,s,!0)}function rT(e,t,n,a,r,s){return Mv(e,t,n,a,r,s,!0)}function Mv(e,t,n,a,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;g<t.length;g++)t[g]>r&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(H1);let p=s>0?-.5/s:0,d=[],c=[];for(;d.length<n&&u.length>0;){let g=u.pop(),{score:y,boxIndex:b,suppressBeginIndex:x}=g;if(y<r)break;let w=!1;for(let I=d.length-1;I>=x;--I){let T=U3(e,b,d[I]);if(T>=a){w=!0;break}if(g.score=g.score*G3(a,p,T),g.score<=r)break}g.suppressBeginIndex=d.length,w||(g.score===y?(d.push(b),c.push(g.score)):g.score>r&&z3(u,g,H1))}let h=d.length,m=n-h;o&&m>0&&(d.push(...new Array(m).fill(0)),c.push(...new Array(m).fill(0)));let f={selectedIndices:d};return i&&(f.selectedScores=c),l&&(f.validOutputs=h),f}function U3(e,t,n){let a=e.subarray(t*4,t*4+4),r=e.subarray(n*4,n*4+4),s=Math.min(a[0],a[2]),i=Math.min(a[1],a[3]),o=Math.max(a[0],a[2]),l=Math.max(a[1],a[3]),u=Math.min(r[0],r[2]),p=Math.min(r[1],r[3]),d=Math.max(r[0],r[2]),c=Math.max(r[1],r[3]),h=(o-s)*(l-i),m=(d-u)*(c-p);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,p),y=Math.min(o,d),b=Math.min(l,c),x=Math.max(y-f,0)*Math.max(b-g,0);return x/(h+m-x)}function G3(e,t,n){let a=Math.exp(t*n*n);return n<=e?a:0}function H1(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function H3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=_(e,"boxes","nonMaxSuppressionAsync"),i=_(t,"scores","nonMaxSuppressionAsync"),o=Au(s,i,n,a,r);n=o.maxOutputSize,a=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],p=l[1],{selectedIndices:d}=nT(u,p,n,a,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),je(d,"int32")}var q3=H3;function j3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=_(e,"boxes","nonMaxSuppression"),o=_(t,"scores","nonMaxSuppression"),l=Au(i,o,n,a,r,s);n=l.maxOutputSize,a=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},p={maxOutputSize:n,iouThreshold:a,scoreThreshold:r,softNmsSigma:s},d=O.runKernel(au,u,p);return{selectedIndices:d[0],selectedScores:d[1]}}var K3=L({nonMaxSuppressionWithScore_:j3});async function X3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=_(e,"boxes","nonMaxSuppressionAsync"),o=_(t,"scores","nonMaxSuppressionAsync"),l=Au(i,o,n,a,r,s);n=l.maxOutputSize,a=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),p=u[0],d=u[1],{selectedIndices:c,selectedScores:h}=rT(p,d,n,a,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:je(c,"int32"),selectedScores:je(h)}}var Y3=X3;function Z3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=_(e,"boxes","nonMaxSuppression"),o=_(t,"scores","nonMaxSuppression"),l=Au(i,o,n,a,r,null),u=l.maxOutputSize,p=l.iouThreshold,d=l.scoreThreshold,c={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:p,scoreThreshold:d,padToMaxOutputSize:s},m=O.runKernel(nu,c,h);return{selectedIndices:m[0],validOutputs:m[1]}}var J3=L({nonMaxSuppressionPadded_:Z3});async function Q3(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=_(e,"boxes","nonMaxSuppressionAsync"),o=_(t,"scores","nonMaxSuppressionAsync"),l=Au(i,o,n,a,r,null),u=l.maxOutputSize,p=l.iouThreshold,d=l.scoreThreshold,[c,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:m,validOutputs:f}=aT(c,h,u,p,d,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:je(m,"int32"),validOutputs:xe(f,"int32")}}var eL=Q3;function tL(e,t,n=!1,a=!1){let r=_(e,"images","resizeBilinear");A(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),A(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),A(a===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=O.runKernel(no,o,l);return i?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var sT=L({resizeBilinear_:tL});function nL(e,t,n=!1,a=!1){let r=_(e,"images","resizeNearestNeighbor");A(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),A(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),A(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),A(a===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=W(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=O.runKernel(to,o,l);return i?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var iT=L({resizeNearestNeighbor_:nL});function aL(e,t="binary",n=!1,a=.5){let r=_(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=z(je([a]),255),p,d,c,h;if(A(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),A(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),A(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),A(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,d,c]=zn(r,[1,1,1],-1);let f=z(p,s),g=z(d,i),y=z(c,o);h=X(X(f,g),y)}else h=e;if(t==="otsu"){let f=Vx(ie(Hm(h),"int32"),fn([]),256);u=rL(f,l)}let m=n?ks(h,u):Nn(h,u);return ie(z(m,255),"int32")}function rL(e,t){let n=je([-1]),a=je([0]),r=je([0]),s,i,o,l,u,p;for(let d=0;d<e.size-1;d++){s=Ve(e,0,d+1),i=Ve(e,d+1),u=he(fe(s),t),p=he(fe(i),t);let c=fe(z(s,ui(0,s.size)));o=he(c,fe(s));let h=bn(i.shape,s.size),m=X(ui(0,i.size),h),f=z(i,m);l=he(fe(f),fe(i));let g=pe(o,l),y=pe(o,l),b=z(u,p);r=z(z(b,g),y);let x=Nn(r,a);a=gn(x,r,a),n=gn(x,je([d]),n)}return n}var sL=L({threshold_:aL});function iL(e,t,n="nearest",a="constant",r=0,s){let i=_(e,"image","transform","float32"),o=_(t,"transforms","transform","float32");A(i.rank===4,()=>`Error in transform: image must be rank 4,but got rank ${i.rank}.`),A(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),A(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:n,fillMode:a,fillValue:r,outputShape:s};return O.runKernel(xu,l,u)}var oL=L({transform_:iL});function lL(e,t,n){A(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),A(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let a=_(e,"a","bandPart");A(a.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${a.rank}.`);let r=a.shape,[s,i]=a.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);let o=W(ui(0,s,1,"int32"),[-1,1]),l=ui(0,i,1,"int32"),u=pe(o,l),p=$a(ks(u,xe(+t,"int32")),$r(u,xe(-n,"int32"))),d=It([s,i],a.dtype);return W(Ft(lt(W(a,[-1,s,i])).map(c=>gn(p,c,d))),r)}var uL=L({bandPart_:lL});function pL(e){let t;if(Array.isArray(e)){t=!1,A(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let r=e[0].shape[0];for(let s=1;s<e.length;++s)A(e[s].shape[0]===r,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=zn(e,e.shape[0],0).map(r=>Ss(r,[0]));A(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],a=e;for(let r=0;r<e.length;++r)n.push(O.tidy(()=>{let s=a[r];if(r>0)for(let i=0;i<r;++i){let o=z(fe(z(n[i],s)),n[i]);s=pe(s,o)}return he(s,Tu(s,"euclidean"))}));return t?Ft(n,0):n}var cL=L({gramSchmidt_:pL});function dL(e,t=!1){if(A(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return q1(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),a=lt(W(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];a.forEach(l=>{let[u,p]=q1(l,t);r.push(u),s.push(p)});let i=W(Ft(r,0),e.shape),o=W(Ft(s,0),e.shape);return[i,o]}}function q1(e,t=!1){return O.tidy(()=>{A(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],a=e.shape[1],r=Pm(n),s=sr(e),i=Aa([[1]],[1,1]),o=sr(i),l=n>=a?a:n;for(let u=0;u<l;++u){let p=s,d=o,c=r;[o,s,r]=O.tidy(()=>{let h=Ve(s,[u,u],[n-u,1]),m=Tu(h),f=Ve(s,[u,u],[1,1]),g=gn(Nn(f,0),Aa([[-1]]),Aa([[1]])),y=pe(f,z(g,m)),b=he(h,y);b.shape[0]===1?o=sr(i):o=Ze([i,Ve(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let x=bt(he(Re(g,y),m)),w=Ve(s,[u,0],[n-u,a]),I=z(x,o),T=Ee(o);if(u===0)s=pe(w,Re(I,Re(T,w)));else{let $=pe(w,Re(I,Re(T,w)));s=Ze([Ve(s,[0,0],[u,a]),$],0)}let C=Ee(I),E=Ve(r,[0,u],[n,r.shape[1]-u]);if(u===0)r=pe(E,Re(Re(E,o),C));else{let $=pe(E,Re(Re(E,o),C));r=Ze([Ve(r,[0,0],[n,u]),$],1)}return[o,s,r]}),_e([p,d,c])}return!t&&n>a&&(r=Ve(r,[0,0],[n,a]),s=Ve(s,[0,0],[a,a])),[r,s]})}var hL=L({qr_:dL}),vn;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(vn||(vn={}));function mL(e,t,n=vn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=_(t,"weights","computeWeightedLoss"));let s=r==null?a:z(a,r);if(n===vn.NONE)return s;if(n===vn.SUM)return fe(s);if(n===vn.MEAN){if(r==null)return Ct(s);{let i=a.size/r.size,o=he(fe(s),fe(r));return i>1?he(o,xe(i)):o}}if(n===vn.SUM_BY_NONZERO_WEIGHTS){if(r==null)return he(fe(s),xe(a.size));{let i=z(r,Zn(a.shape)),o=ie(fe(li(i,xe(0))),"float32");return he(fe(s),o)}}throw Error(`Unknown reduction: ${n}`)}var Fr=L({computeWeightedLoss_:mL});function fL(e,t,n,a=vn.SUM_BY_NONZERO_WEIGHTS){let r=_(e,"labels","absoluteDifference"),s=_(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=_(n,"weights","absoluteDifference")),Sn(r.shape,s.shape,"Error in absoluteDifference: ");let o=Lt(pe(r,s));return Fr(o,i,a)}var gL=L({absoluteDifference_:fL});function yL(e,t,n,a,r=vn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","cosineDistance"),i=_(t,"predictions","cosineDistance"),o=null;a!=null&&(o=_(a,"weights","cosineDistance")),Sn(s.shape,i.shape,"Error in cosineDistance: ");let l=xe(1),u=pe(l,fe(z(s,i),n,!0));return Fr(u,o,r)}var bL=L({cosineDistance_:yL});function xL(e,t,n,a=vn.SUM_BY_NONZERO_WEIGHTS){let r=_(e,"labels","hingeLoss"),s=_(t,"predictions","hingeLoss"),i=null;n!=null&&(i=_(n,"weights","hingeLoss")),Sn(r.shape,s.shape,"Error in hingeLoss: ");let o=xe(1);r=pe(z(xe(2),r),o);let l=Ke(pe(o,z(r,s)));return Fr(l,i,a)}var vL=L({hingeLoss_:xL});function wL(e,t,n,a=1,r=vn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","huberLoss"),i=_(t,"predictions","huberLoss"),o=null;n!=null&&(o=_(n,"weights","huberLoss")),Sn(s.shape,i.shape,"Error in huberLoss: ");let l=xe(a),u=Lt(pe(i,s)),p=_u(u,l),d=pe(u,p),c=X(z(xe(.5),it(p)),z(l,d));return Fr(c,o,r)}var kL=L({huberLoss_:wL});function IL(e,t,n,a=1e-7,r=vn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","logLoss"),i=_(t,"predictions","logLoss"),o=null;n!=null&&(o=_(n,"weights","logLoss")),Sn(s.shape,i.shape,"Error in logLoss: ");let l=xe(1),u=xe(a),p=bt(z(s,Qn(X(i,u)))),d=z(pe(l,s),Qn(X(pe(l,i),u))),c=pe(p,d);return Fr(c,o,r)}var SL=L({logLoss_:IL});function TL(e,t,n,a=vn.SUM_BY_NONZERO_WEIGHTS){let r=_(e,"labels","meanSquaredError"),s=_(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=_(n,"weights","meanSquaredError")),Sn(r.shape,s.shape,"Error in meanSquaredError: ");let o=Jm(r,s);return Fr(o,i,a)}var NL=L({meanSquaredError_:TL});function CL(e,t){let n=_(e,"labels","sigmoidCrossEntropyWithLogits"),a=_(t,"logits","sigmoidCrossEntropyWithLogits");Sn(n.shape,a.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=Ke(a),s=z(a,n),i=$c(yn(bt(Lt(a))));return X(pe(r,s),i)}function _L(e,t,n,a=0,r=vn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"multiClassLabels","sigmoidCrossEntropy"),i=_(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=_(n,"weights","sigmoidCrossEntropy")),Sn(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),a>0){let u=xe(a),p=xe(1),d=xe(.5);s=X(z(s,pe(p,u)),z(d,u))}let l=CL(s,i);return Fr(l,o,r)}var EL=L({sigmoidCrossEntropy_:_L});function AL(e,t,n=-1){if(n===-1&&(n=t.rank-1),n!==t.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${t.rank} and dim was ${n}`);return ur((a,r,s)=>{let i=Wm(r,[n],!0),o=pe(ie(r,"float32"),i);s([a,o]);let l=bt(z(o,a));return{value:fe(l,[n]),gradFunc:(u,p)=>{let[d,c]=p,h=oi(u.shape,[n]);return[z(W(u,h),pe(ie(d,"float32"),yn(c))),z(W(u,h),pe(yn(c),ie(d,"float32")))]}}})(e,t)}function $L(e,t,n,a=0,r=vn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"onehotLabels","softmaxCrossEntropy"),i=_(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=_(n,"weights","softmaxCrossEntropy")),Sn(s.shape,i.shape,"Error in softmaxCrossEntropy: "),a>0){let u=xe(a),p=xe(1),d=xe(s.shape[1]);s=X(z(s,pe(p,u)),he(u,d))}let l=AL(s,i);return Fr(l,o,r)}var FL=L({softmaxCrossEntropy_:$L});function RL(e,t,n,a){let r=_(e,"indices","sparseFillEmptyRows","int32"),s=_(t,"values","sparseFillEmptyRows"),i=_(n,"denseShape","sparseFillEmptyRows","int32"),o=_(a,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=O.runKernel(hc,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var DL=L({sparseFillEmptyRows_:RL});function ML(e,t,n){let a=_(e,"inputIndices","sparseReshape","int32"),r=_(t,"inputShape","sparseReshape","int32"),s=_(n,"newShape","sparseReshape","int32");if(a.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape
|
|
${a.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:a,inputShape:r,newShape:s},o=O.runKernel(gu,i);return{outputIndices:o[0],outputShape:o[1]}}var PL=L({sparseReshape_:ML});function OL(e,t,n){let a=_(e,"data","sparseSegmentMean"),r=_(t,"indices","sparseSegmentMean","int32"),s=_(n,"segmentIds","sparseSegmentMean","int32");if(a.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
|
|
${s.shape}`);let i={data:a,indices:r,segmentIds:s};return O.runKernel(mc,i)}var LL=L({sparseSegmentMean_:OL});function zL(e,t,n){let a=_(e,"data","sparseSegmentSum"),r=_(t,"indices","sparseSegmentSum","int32"),s=_(n,"segmentIds","sparseSegmentSum","int32");if(a.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
|
|
${s.shape}`);let i={data:a,indices:r,segmentIds:s};return O.runKernel(fc,i)}var WL=L({sparseSegmentSum_:zL});function BL(e,t,n,a,r,s,i,o){let l=_(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=_(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let p={separator:n,nGramWidths:a,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},d={data:l,dataSplits:u},c=O.runKernel(yc,d,p);return{nGrams:c[0],nGramsSplits:c[1]}}var VL=L({stringNGrams_:BL});function UL(e,t,n=!0){let a=_(e,"input","stringSplit","string"),r=_(t,"delimiter","stringSplit","string");if(a.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${a.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:n},i={input:a,delimiter:r},o=O.runKernel(bc,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var GL=L({stringSplit_:UL});function HL(e,t){let n=_(e,"input","stringToHashBucketFast","string"),a={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:n};return O.runKernel(xc,r,a)}var qL=L({stringToHashBucketFast_:HL}),oT={fft:Oc,ifft:ll,rfft:Lc,irfft:Zm},lT={hammingWindow:S3,hannWindow:eT,frame:tT,stft:_3},Ea={flipLeftRight:F3,grayscaleToRGB:D3,resizeNearestNeighbor:iT,resizeBilinear:sT,rotateWithOffset:P3,cropAndResize:A3,nonMaxSuppression:L3,nonMaxSuppressionAsync:q3,nonMaxSuppressionWithScore:K3,nonMaxSuppressionWithScoreAsync:Y3,nonMaxSuppressionPadded:J3,nonMaxSuppressionPaddedAsync:eL,threshold:sL,transform:oL},Pv={bandPart:uL,gramSchmidt:cL,qr:hL},uT={absoluteDifference:gL,computeWeightedLoss:Fr,cosineDistance:bL,hingeLoss:vL,huberLoss:kL,logLoss:SL,meanSquaredError:NL,sigmoidCrossEntropy:EL,softmaxCrossEntropy:FL},pT={sparseFillEmptyRows:DL,sparseReshape:PL,sparseSegmentMean:LL,sparseSegmentSum:WL},cT={stringNGrams:VL,stringSplit:GL,stringToHashBucketFast:qL},ne={};Ae(ne,{Serializable:()=>dT,SerializationMap:()=>Hs,registerClass:()=>hT});var dT=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Hs=class{constructor(){this.classNameMap={}}static getMap(){return Hs.instance==null&&(Hs.instance=new Hs),Hs.instance}static register(e){Hs.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function hT(e){A(e.className!=null,()=>"Class being registered does not have the static className property defined."),A(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),A(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Hs.register(e)}var Rr=class extends dT{minimize(e,t=!1,n){let{value:a,grads:r}=this.computeGradients(e,n);if(n!=null){let s=n.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return _e(r),t?a:(a.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return gS(e,t)}dispose(){this.iterations_!=null&&_e(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:xe(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Rr,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Ov=class extends Rr{constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=O.backend.epsilon())}static get className(){return"Adadelta"}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=O.registeredVariables[t],r=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:P(()=>qe(a).variable(r))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:P(()=>qe(a).variable(r))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[n].variable,o=this.accumulatedUpdates[n].variable;P(()=>{let l=X(z(i,this.rho),z(it(s),1-this.rho)),u=z(he(pn(X(o,this.epsilon)),pn(X(i,this.epsilon))),s),p=X(z(o,this.rho),z(it(u),1-this.rho));i.assign(l),o.assign(p);let d=X(z(u,-this.learningRate),a);a.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(_e(this.accumulatedGrads.map(e=>e.variable)),_e(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}},Lv=class extends Rr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}static get className(){return"Adagrad"}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=O.registeredVariables[t];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:P(()=>bn(a.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[n].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[n].variable;P(()=>{let i=X(s,it(r));s.assign(i);let o=X(z(he(r,pn(X(i,O.backend.epsilon()))),-this.learningRate),a);a.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&_e(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}},zv=class extends Rr{constructor(e,t,n,a=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=a,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],P(()=>{this.accBeta1=xe(t).variable(),this.accBeta2=xe(n).variable()}),a==null&&(this.epsilon=O.backend.epsilon())}static get className(){return"Adam"}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);P(()=>{let n=pe(1,this.accBeta1),a=pe(1,this.accBeta2);t.forEach((r,s)=>{let i=O.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:P(()=>qe(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:P(()=>qe(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedSecondMoment[s].variable,d=X(z(u,this.beta1),z(l,1-this.beta1)),c=X(z(p,this.beta2),z(it(l),1-this.beta2)),h=he(d,n),m=he(c,a);u.assign(d),p.assign(c);let f=X(z(he(h,X(pn(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(z(this.accBeta1,this.beta1)),this.accBeta2.assign(z(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&_e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&_e(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),P(()=>{this.accBeta1.assign(Ar(this.beta1,this.iterations_+1)),this.accBeta2.assign(Ar(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}},Wv=class extends Rr{constructor(e,t,n,a=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=a,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],P(()=>{this.iteration=xe(0).variable(),this.accBeta1=xe(t).variable()}),a==null&&(this.epsilon=O.backend.epsilon())}static get className(){return"Adamax"}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);P(()=>{let n=pe(1,this.accBeta1),a=he(-this.learningRate,X(z(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=O.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:qe(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:qe(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedWeightedInfNorm[s].variable,d=X(z(u,this.beta1),z(l,1-this.beta1)),c=z(p,this.beta2),h=Lt(l),m=dr(c,h);u.assign(d),p.assign(m);let f=X(z(he(a,n),he(d,X(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(X(this.iteration,1)),this.accBeta1.assign(z(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&_e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&_e(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}},of=class extends Rr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}static get className(){return"SGD"}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=Array.isArray(e)?e[n].tensor:e[t];if(a==null)return;let r=O.registeredVariables[t];P(()=>{let s=X(z(this.c,a),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Gt(xe(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}},Bv=class extends of{constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=xe(this.momentum)}static get className(){return"Momentum"}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=O.registeredVariables[t];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${t}/momentum`,variable:P(()=>qe(a).variable(!1))});let r=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&P(()=>{let i,o=X(z(this.m,r),s);this.useNesterov?i=X(z(this.c,X(s,z(o,this.m))),a):i=X(z(this.c,o),a),r.assign(o),a.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&_e(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}},Vv=class extends Rr{constructor(e,t=.9,n=0,a=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=a,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,a==null&&(this.epsilon=O.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}static get className(){return"RMSProp"}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=O.registeredVariables[t],r=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:P(()=>qe(a).variable(r))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:P(()=>qe(a).variable(r))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:P(()=>qe(a).variable(r))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;P(()=>{let l=X(z(i,this.decay),z(it(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[n].variable,p=X(z(u,this.decay),z(s,1-this.decay)),d=he(z(s,this.learningRate),pn(pe(l,X(it(p),this.epsilon)))),c=X(z(o,this.momentum),d);i.assign(l),u.assign(p),o.assign(c);let h=pe(a,c);a.assign(h)}else{let u=X(z(i,this.decay),z(it(s),1-this.decay)),p=X(z(o,this.momentum),he(z(s,this.learningRate),pn(X(u,this.epsilon))));i.assign(u),o.assign(p);let d=pe(a,p);a.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&_e(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&_e(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&_e(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}},jL=[Ov,Lv,zv,Wv,Bv,Vv,of];function KL(){for(let e of jL)hT(e)}var Ht={};Ae(Ht,{browserFiles:()=>tz,browserHTTPRequest:()=>iz,concatenateArrayBuffers:()=>Tx,copyModel:()=>eD,decodeWeights:()=>UI,encodeWeights:()=>ER,fromMemory:()=>lz,fromMemorySync:()=>bT,getLoadHandlers:()=>WR,getModelArtifactsForJSON:()=>Nx,getModelArtifactsForJSONSync:()=>HI,getModelArtifactsInfoForJSON:()=>Tc,getSaveHandlers:()=>zR,getWeightSpecs:()=>qI,http:()=>Gv,isHTTPScheme:()=>Fb,listModels:()=>JR,loadWeights:()=>nz,moveModel:()=>tD,registerLoadRouter:()=>LR,registerSaveRouter:()=>OR,removeModel:()=>QR,weightsLoaderFactory:()=>fT,withSaveHandler:()=>uz,withSaveHandlerSync:()=>pz});var XL="model",YL=".json",ZL=".weights.bin";function j1(e){return new Promise(t=>setTimeout(t)).then(e)}var pl=class{constructor(e){if(!H().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(pl.URL_SCHEME)&&(e=e.slice(pl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=XL),this.modelJsonFileName=e+YL,this.weightDataFileName=e+ZL}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],a=GI(e,n),r=window.URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),s=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(s.download=this.modelJsonFileName,s.href=r,await j1(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await j1(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Tc(e)}}}};pl.URL_SCHEME="downloads://";var JL=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let n=new FileReader;n.onload=a=>{let r=JSON.parse(a.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=Nx(r,o=>this.loadWeights(o));e(i)},n.onerror=a=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(e){let t=[],n=[];for(let s of e)t.push(...s.weights),n.push(...s.paths);let a=this.checkManifestAndWeightFiles(e),r=n.map(s=>this.loadWeightsFile(s,a[s]));return Promise.all(r).then(s=>[t,Tx(s)])}loadWeightsFile(e,t){return new Promise((n,a)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;n(i)},r.onerror=s=>a(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map(r=>G1(r.name)),a={};for(let r of e)r.paths.forEach(s=>{let i=G1(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),n.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);a[s]=this.weightsFiles[n.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return a}},QL=e=>H().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(pl.URL_SCHEME)?ez(e.slice(pl.URL_SCHEME.length)):null;$t.registerSaveRouter(QL);function ez(e="model"){return new pl(e)}function tz(e){return new JL(e)}function K1(e,t,n,a){i(e),n=n==null?0:n,a=a==null?1:a,o(n,a);let r=0,s=l=>(l.then(u=>{let p=n+ ++r/e.length*(a-n);return t(p),u}),l);function i(l){A(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){A(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),A(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),A(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function mT(e,t){t==null&&(t={});let n=t.fetchFunc==null?H().platform.fetch:t.fetchFunc,a=e.map(u=>n(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(a):await K1(a,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await K1(i,t.onProgress,o,l)}async function nz(e,t="",n,a){return fT(r=>mT(r,{requestInit:a}))(e,t,n)}function fT(e){return async(t,n="",a)=>{let r=t.map(()=>!1),s={},i=a!=null?a.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,b=Nb[y]*mt(g.shape),x=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:b})};a!=null?a.forEach((w,I)=>{w===g.name&&(x(),i[I]=!0)}):x(),o.push(g.name),f+=b})}),!i.every(h=>h)){let h=a.filter((m,f)=>!i[f]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}.
|
|
Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=n+(n.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),d={},c=0;return l.forEach(h=>{let m=t[h].paths.length,f=0;for(let x=0;x<m;x++)f+=p[c+x].byteLength;let g=new ArrayBuffer(f),y=new Uint8Array(g),b=0;for(let x=0;x<m;x++){let w=new Uint8Array(p[c+x]);y.set(w,b),b+=w.byteLength}s[h].forEach(x=>{let w=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),I=UI(w,[x.manifestEntry]);for(let T in I)d[T]=I[T]}),c+=m}),d}}var az="application/octet-stream",rz="application/json",Uv=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(A(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=H().platform.fetch,A(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&A(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],a=GI(e,n);t.body.append("model.json",new Blob([JSON.stringify(a)],{type:rz}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:az}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Tc(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" 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.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let n=t.modelTopology,a=t.weightsManifest;if(n==null&&a==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Nx(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,a]=sz(t),r=this.weightPathPrefix||n,s=qI(e),i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+a);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await mT(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,Tx(l)]}};Uv.URL_SCHEME_REGEX=/^https?:\/\//;function sz(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),a=e.substring(0,t),r=n>t?e.substring(n):"";return[a+"/",r]}function Fb(e){return e.match(Uv.URL_SCHEME_REGEX)!=null}var gT=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(a=>Fb(a)):n=Fb(e),n)return Gv(e,t)}return null};$t.registerSaveRouter(gT);$t.registerLoadRouter(gT);function Gv(e,t){return new Uv(e,t)}function iz(e,t){return Gv(e,t)}var ib=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},yT=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},oz=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function lz(e,t,n,a){let r=arguments;return new oz(bT(...r))}function bT(e,t,n,a){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new ib(e):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ib({modelTopology:e})):(console.warn("Please call tf.io.fromMemory() with only one argument. The argument should be of type ModelArtifacts. The multi-argument signature of tf.io.fromMemory() has been deprecated and will be removed in a future release."),new ib({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:a}))}function uz(e){return new yT(e)}function pz(e){return new yT(e)}var xT={};Ae(xT,{confusionMatrix:()=>dz});function cz(e,t,n){let a=_(e,"labels","confusionMatrix"),r=_(t,"predictions","confusionMatrix");A(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),A(a.rank===1,()=>`Expected the rank of labels to be 1, but got ${a.rank}`),A(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),A(a.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${a.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),A(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=sl(ie(a,"int32"),n),i=sl(ie(r,"int32"),n),o=Ee(s),l=Re(o,i);return ie(l,"int32")}var dz=L({confusionMatrix_:cz}),vo={};Ae(vo,{fromPixels:()=>xz,fromPixelsAsync:()=>yz,toPixels:()=>bz});var Ws;function vT(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,a=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)a=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(bh(yh,O.backendName)!=null){let c={pixels:e},h={numChannels:t};return O.runKernel(yh,c,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(i)p=e.getContext("2d").getImageData(0,0,l,u).data;else if(a||n)p=e.data;else if(s||r||o){if(Ws==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Ws=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Ws=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Ws.canvas.width=l,Ws.canvas.height=u,Ws.drawImage(e,0,0,l,u),p=Ws.getImageData(0,0,l,u).data}let d;if(t===4)d=new Int32Array(p);else{let c=l*u;d=new Int32Array(c*t);for(let h=0;h<c;h++)for(let m=0;m<t;++m)d[h*t+m]=p[h*4+m]}return zc(d,[u,l,t],"int32")}function hz(e){return e!=null&&e.data instanceof Uint8Array}function mz(){return typeof window!="undefined"&&typeof ImageBitmap!="undefined"&&window.hasOwnProperty("createImageBitmap")}function fz(e){return e!=null&&e.width!==0&&e.height!==0}function gz(e){return mz()&&!(e instanceof ImageBitmap)&&fz(e)&&!hz(e)}async function yz(e,t=3){let n=null;if(H().getBool("WRAP_TO_IMAGEBITMAP")&&gz(e)){let a;try{a=await createImageBitmap(e,{premultiplyAlpha:"none"})}catch(r){a=null}a!=null&&a.width===e.width&&a.height===e.height?n=a:n=e}else n=e;return vT(n,t)}async function bz(e,t){let n=_(e,"img","toPixels");if(!(e instanceof Ne)){let u=n;n=ie(u,"int32"),u.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[a,r]=n.shape.slice(0,2),s=n.rank===2?1:n.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let i=await n.data(),o=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*a*4);for(let u=0;u<a*r;++u){let p=[0,0,0,255];for(let c=0;c<s;c++){let h=i[u*s+c];if(n.dtype==="float32"){if(h<0||h>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(n.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(p[0]=h*o,p[1]=h*o,p[2]=h*o):p[c]=h*o}let d=u*4;l[d+0]=Math.round(p[0]),l[d+1]=Math.round(p[1]),l[d+2]=Math.round(p[2]),l[d+3]=Math.round(p[3])}if(t!=null){t.width=r,t.height=a;let u=t.getContext("2d"),p=new ImageData(l,r,a);u.putImageData(p,0,0)}return n!==e&&n.dispose(),l}var xz=L({fromPixels_:vT}),Hv={};Ae(Hv,{prepareAndValidate:()=>wT});function wT(e,t){let n=e.shape.length,a=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(a<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${a}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[a-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[a-1]} vs. ${n}`);if(mt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let d=0;d<r.length-1;++d)i*=r[d];let o=e.shape,l=r.slice();l.pop();let u=1;for(let d=s;d<n;++d)u*=o[d],l.push(o[d]);let p=[...vl(e.shape).map(d=>d/u),1].slice(0,s);return[l,i,u,p]}var Kt={};Ae(Kt,{assertParamsValid:()=>wz,computeFlatOffset:()=>Nz,computeOutShape:()=>Iz,getNormalizedAxes:()=>Sz,isSliceContinous:()=>Tz,maskToAxes:()=>kz,parseSliceParams:()=>AT,sliceInfo:()=>Cz,startForAxis:()=>_T,startIndicesWithElidedDims:()=>TT,stopForAxis:()=>ET,stopIndicesWithElidedDims:()=>NT,stridesForAxis:()=>CT,stridesWithElidedDims:()=>kT});var Rb=-2,vz=-1;function wz(e,t,n){let a=e.shape.length;A(a===t.length,()=>`Error in slice${a}D: Length of begin ${t} must match the rank of the array (${a}).`),A(a===n.length,()=>`Error in slice${a}D: Length of size ${n} must match the rank of the array (${a}).`);for(let r=0;r<a;++r)A(t[r]+n[r]<=e.shape[r],()=>`Error in slice${a}D: begin[${r}] + size[${r}] (${t[r]+n[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function kz(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function Iz(e,t,n){let a=[];for(let r=0;r<e.length;r++)a[r]=Math.ceil((t[r]-e[r])/n[r]);return a}function kT(e,t,n,a){let r=[...e];for(let s=r.length;s<a.length;s++)r.push(1);for(let s=0;s<n;s++)s===0?r[t]=1:(r.splice(t,0,1),r.pop());return r}function IT(e,t,n){return n<=e?n:n-(t-1)}function ST(e,t){let n=[];for(let a=0;a<e;a++)n.push(t+a);return n}function Sz(e,t,n,a,r,s,i,o,l){let u=e.length,p=new Array(u),d=new Array(u),c=new Array(u);if(t.length&&n>0){let h=t[0],m=n+1;p=TT(i,h,m,a,e),d=NT(o,h,m,r,e),c=kT(s,h,m,e)}else for(let h=0;h<u;h++)p[h]=_T(i,a,s,e,h,l),d[h]=ET(o,r,s,e,h,l),c[h]=CT(s,h,l);return{begin:p,end:d,strides:c}}function TT(e,t,n,a,r){let s=[...r],i=ST(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=0;else{let l=IT(t,n,o),u=a[l];e&1<<l&&(u=0),s[o]=u}return s}function NT(e,t,n,a,r){let s=[...r],i=ST(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=IT(t,n,o),u=a[l];e&1<<l&&(u=Number.MAX_SAFE_INTEGER),s[o]=u}for(let o=0;o<s.length;o++){let l=r[o];s[o]<0&&(s[o]+=l),s[o]=zp(0,s[o],r[o])}return s}function CT(e,t,n){let a=e[t];return(n&1<<t||a==null)&&(a=1),a}function _T(e,t,n,a,r,s){let i=t[r],o=n[r]||1;(e&1<<r||s&1<<r||i==null)&&(o>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),i=zp(0,i,l-1),i}function ET(e,t,n,a,r,s){let i=t[r],o=n[r]||1;(e&1<<r||s&1<<r||i==null)&&(o>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),o>0?i=zp(0,i,l):i=zp(-1,i,l-1),i}function Tz(e,t,n){let a=n.length;for(let r=0;r<n.length;r++)if(n[r]>1){a=r;break}for(let r=a+1;r<n.length;r++)if(t[r]>0||n[r]!==e[r])return!1;return!0}function Nz(e,t){let n=e.length>0?e[e.length-1]:1;for(let a=0;a<e.length-1;a++)n+=e[a]*t[a];return n}function AT(e,t,n){let a,r=e.shape.length;typeof t=="number"?a=[t,...new Array(r-1).fill(0)]:t.length<r?a=t.concat(new Array(r-t.length).fill(0)):a=t.slice(),a.forEach(i=>{A(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return n==null?s=new Array(r).fill(-1):typeof n=="number"?s=[n,...new Array(r-1).fill(-1)]:n.length<r?s=n.concat(new Array(r-n.length).fill(-1)):s=n,s=s.map((i,o)=>i>=0?i:(A(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-a[o])),[a,s]}function Cz(e,t,n,a,r,s,i,o,l){let u;if(a==null?(u=new Array(t.length),u.fill(1)):u=a,i!=null&&i&i-1)throw new Error("Multiple ellipses in slice is not allowed.");let p=!1,d={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:n.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let b=0;b<d.dims;b++)p&&1<<b&o&&d.numAddAxisAfterEllipsis++,1<<b&i&&(p=!0);p||(d.ellipsisMask|=1<<d.dims,d.dims++);let c={dims:e.length,beginMask:0,endMask:0,beginValid:!1,endValid:!1};_z(d,c);let h=!0,m=!0,f=!0,g=[],y=[];for(let b=0;b<e.length;++b){if(c.strides[b]===0)throw Error(`strides[${b}] must be non-zero`);let x=!!(c.shrinkAxisMask&1<<b),w=e[b];if(w===-1){g.push(x?1:-1);continue}let I=[c.beginMask&1<<b,c.endMask&1<<b],T=[c.strides[b]>0?0:-1,c.strides[b]>0?w:w-1];if(x&&c.strides[b]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&c.strides[b]===1;let C=!!(c.beginMask&1<<b&&c.endMask&1<<b);if(c.beginValid&&c.endValid){if(x){let F=c.begin[b]<0?w+c.begin[b]:c.begin[b];if(c.begin[b]=F,c.end[b]=c.begin[b]+1,F<0||F>=w)throw Error(`slice index ${c.begin[b]} of dimension ${b} out of bounds.`)}else c.begin[b]=X1(c.begin[b],0,c.strides[b],w,I,T),c.end[b]=X1(c.end[b],1,c.strides[b],w,I,T);let R=c.strides[b]===1&&c.begin[b]===0&&c.end[b]===w;h=h&&R,m=m&&(b===0&&c.strides[b]===1||R)}else h=h&&c.strides[b]===1&&C,m=m&&(b===0&&c.strides[b]===1||C);let E,$=!1;if(c.beginValid&&c.endValid?(E=c.end[b]-c.begin[b],$=!0):x?(E=1,$=!0):C&&w>=0&&(c.strides[b]<0?E=-w:E=w,$=!0),$){let R;E===0||E<0!=c.strides[b]<0?R=0:R=Math.trunc(E/c.strides[b])+(E%c.strides[b]!==0?1:0),g.push(R)}else g.push(-1)}for(let b=0;b<c.finalShapeGatherIndices.length;++b){let x=c.finalShapeGatherIndices[b];x>=0?y.push(g[x]):x===Rb&&y.push(1)}return{finalShapeSparse:y.filter((b,x)=>c.finalShapeGatherIndices[x]!==Rb),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:c.begin,end:c.end,strides:c.strides}}function _z(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let n=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let a=0;a<e.dims;a++)if(1<<a&e.ellipsisMask){let r=Math.min(t.dims-(e.dims-a)+1+e.numAddAxisAfterEllipsis,t.dims);for(;n<r;n++)t.begin[n]=0,t.end[n]=0,t.strides[n]=1,t.beginMask|=1<<n,t.endMask|=1<<n,t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(-1),t.inputShapeGatherIndicesSparse[n]=a}else if(1<<a&e.newAxisMask)t.finalShapeGatherIndices.push(Rb),t.finalShapeGatherIndicesSparse.push(-1);else{if(n===t.begin.length)throw Error(`Index out of range using input dim ${n}; input has only ${t.dims} dims, ${t.begin.length}.`);e.begin!=null&&(t.begin[n]=e.begin[a]),e.end!=null&&(t.end[n]=e.end[a]),t.strides[n]=e.strides[a],e.beginMask&1<<a&&(t.beginMask|=1<<n),e.endMask&1<<a&&(t.endMask|=1<<n),e.shrinkAxisMask&1<<a?(t.finalShapeGatherIndices.push(vz),t.finalShapeGatherIndicesSparse.push(-1),t.shrinkAxisMask|=1<<n):(t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(a)),t.inputShapeGatherIndicesSparse[n]=a,n++}}function X1(e,t,n,a,r,s){if(r[t])return n>0?s[t]:s[t+1&1];{let i=e<0?a+e:e;return i<s[0]?s[0]:i>s[1]?s[1]:i}}var Ez="4.2.0",$T=class{static sgd(e){return new of(e)}static momentum(e,t,n=!1){return new Bv(e,t,n)}static rmsprop(e,t=.9,n=0,a=null,r=!1){return new Vv(e,t,n,a,r)}static adam(e=.001,t=.9,n=.999,a=null){return new zv(e,t,n,a)}static adadelta(e=.001,t=.95,n=null){return new Ov(e,t,n)}static adamax(e=.002,t=.9,n=.999,a=null,r=0){return new Wv(e,t,n,a,r)}static adagrad(e,t=.1){return new Lv(e,t)}},Us=$T,Az=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function qv(){return new Promise(e=>Az(()=>e()))}var N={};Ae(N,{ERF_A1:()=>Hz,ERF_A2:()=>qz,ERF_A3:()=>jz,ERF_A4:()=>Kz,ERF_A5:()=>Xz,ERF_P:()=>Gz,PARALLELIZE_THRESHOLD:()=>jv,RowPartitionType:()=>tr,SELU_SCALE:()=>RT,SELU_SCALEALPHA:()=>FT,applyActivation:()=>rf,assertAndGetBroadcastShape:()=>ot,assertAxesAreInnerMostDims:()=>LM,assertParamsConsistent:()=>$z,assignToTypedArray:()=>tW,axesAreInnerMostDims:()=>nv,calculateShapes:()=>jS,checkEinsumDimSizes:()=>oW,checkPadOnDimRoundingMode:()=>Tn,combineLocations:()=>cS,combineRaggedTensorToTensorShapes:()=>Rz,complexWithEvenIndex:()=>Jz,complexWithOddIndex:()=>Qz,computeConv2DInfo:()=>Nc,computeConv3DInfo:()=>aS,computeDefaultPad:()=>Ox,computeDilation2DInfo:()=>LD,computeOptimalWindowSize:()=>Oz,computeOutAndReduceShapes:()=>dS,computeOutShape:()=>Fz,computePool2DInfo:()=>nS,computePool3DInfo:()=>zD,convertConv2DDataFormat:()=>rS,decodeEinsumEquation:()=>sW,eitherStridesOrDilationsAreOne:()=>cr,expandShapeToKeepDim:()=>oi,exponent:()=>aW,exponents:()=>nW,fromStringArrayToUint8:()=>_W,fromUint8ToStringArray:()=>CW,getAxesPermutation:()=>hS,getBroadcastDims:()=>uS,getComplexWithIndex:()=>eW,getEinsumComputePath:()=>lW,getEinsumPermutation:()=>iW,getFusedBiasGradient:()=>af,getFusedDyActivation:()=>nf,getImageCenter:()=>Lz,getInnerMostAxes:()=>zM,getPermuted:()=>Wz,getRaggedRank:()=>Mz,getReductionAxes:()=>Wt,getReshaped:()=>zz,getReshapedPermuted:()=>Bz,getRowPartitionTypesHelper:()=>Dz,getSliceBeginCoords:()=>Vz,getSliceSize:()=>Uz,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>dW,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>hW,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>mW,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>yW,getSparseReshapeInputOutputMismatchErrorMessage:()=>xW,getSparseReshapeInputOutputMultipleErrorMessage:()=>bW,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>fW,getSparseReshapeNegativeOutputDimErrorMessage:()=>gW,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>IW,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>vW,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>wW,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>kW,getUndoAxesPermutation:()=>av,isIdentityPermutation:()=>uW,log:()=>ZF,mergeRealAndImagArrays:()=>Yz,prepareAndValidate:()=>wT,prepareSplitSize:()=>cW,segment_util:()=>DT,shouldFuse:()=>sf,slice_util:()=>Kt,splitRealAndImagArrays:()=>Zz,stridesOrDilationsArePositive:()=>si,tupleValuesAreOne:()=>is,upcastType:()=>ma,validateDefaultValueShape:()=>Pz,validateInput:()=>$v,validateUpdateShape:()=>Av,warn:()=>Xr});function $z(e,t){let n=e[0].length;e.forEach((r,s)=>{A(r.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),A(t>=0&&t<n,()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let a=e[0];e.forEach((r,s)=>{for(let i=0;i<n;i++)A(i===t||r[i]===a[i],()=>`Error in concat${n}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${a}) along the non-concatenated axis ${s}.`)})}function Fz(e,t){let n=e[0].slice();for(let a=1;a<e.length;a++)n[t]+=e[a][t];return n}var tr;(function(e){e[e.FIRST_DIM_SIZE=0]="FIRST_DIM_SIZE",e[e.VALUE_ROWIDS=1]="VALUE_ROWIDS",e[e.ROW_LENGTHS=2]="ROW_LENGTHS",e[e.ROW_SPLITS=3]="ROW_SPLITS",e[e.ROW_LIMITS=4]="ROW_LIMITS",e[e.ROW_STARTS=5]="ROW_STARTS"})(tr||(tr={}));function Rz(e,t,n){let a=new Array;if(n==null&&t==null)return a;if(t==null)for(;a.length<e+n.length;)a.push(-1);else a=t.slice();if(n==null)return a;if(e+n.length!==a.length)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.rank = ${e+n.length}, but shape.rank = ${a.length}`);for(let r=1;r<n.length;++r){let s=n[r],i=a[a.length-n.length+r],o=a[i];if(s>=0)if(o>=0){if(o!==s)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${r+e}] = ${s} but shape[${r+e}] = ${o}`)}else a[i]=s}return a}function Dz(e){let t={FIRST_DIM_SIZE:tr.FIRST_DIM_SIZE,VALUE_ROWIDS:tr.VALUE_ROWIDS,ROW_LENGTHS:tr.ROW_LENGTHS,ROW_SPLITS:tr.ROW_SPLITS,ROW_LIMITS:tr.ROW_LIMITS,ROW_STARTS:tr.ROW_STARTS},n=[];for(let a of e)if(a in t)n.push(t[a]);else break;return n}function Mz(e){return e.length===0?0:e[0]===tr.FIRST_DIM_SIZE?e.length-1:e.length}function Pz(e,t){if(e==null||t==null)return;let n=e.length,a=t.length;if(n>=a)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${n} must be less than ragged tensor input flatValues.rank = ${a})`);for(let r=0;r<Math.min(n,a-1);++r){let s=e[r],i=t[r+1];if(s>=0&&i>=0&&s!==1&&s!==i)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${r-e.length}] = ${s} but ragged tensor input.flatValues.shape[${r-e.length}] = ${i}`)}}var jv=30;function Oz(e){return e<=jv?e:mh(e,Math.floor(Math.sqrt(e)))}function Lz(e,t,n){let a=n*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[a,r]}function zz(e,t,n,a=!0){let r=[];if(a)r=r.concat(t.slice(0)),r.push(e[0]/n),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i<s;++i)r=r.concat([e[i+1]/t[i],t[i]]);r=r.concat(e.slice(s+1))}return r}function Wz(e,t,n=!0){let a=[];if(n){a.push(t);for(let r=t+1;r<e;++r)r<=2*t?(a.push(r),a.push(r-(t+1))):a.push(r)}else{let r=[],s=[];for(let i=1;i<e;++i)i>=t*2+1||i%2===1?s.push(i):r.push(i);a.push(...r),a.push(0),a.push(...s)}return a}function Bz(e,t,n,a=!0){let r=[];a?r.push(e[0]/n):r.push(e[0]*n);for(let s=1;s<e.length;++s)s<=t.length?a?r.push(t[s-1]*e[s]):r.push(e[s]/t[s-1]):r.push(e[s]);return r}function Vz(e,t){let n=[0];for(let a=0;a<t;++a)n.push(e[a][0]);return n}function Uz(e,t,n){let a=e.slice(0,1);for(let r=0;r<n;++r)a.push(e[r+1]-t[r][0]-t[r][1]);return a}var FT=1.7580993408473768,RT=1.0507009873554805,Gz=.3275911,Hz=.254829592,qz=-.284496736,jz=1.421413741,Kz=-1.453152027,Xz=1.061405429;function Yz(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let a=0;a<n.length;a+=2)n[a]=e[a/2],n[a+1]=t[a/2];return n}function Zz(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let a=0;a<e.length;a+=2)t[a/2]=e[a],n[a/2]=e[a+1];return{real:t,imag:n}}function Jz(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),a=new Float32Array(t);for(let r=0;r<e.length;r+=4)n[Math.floor(r/4)]=e[r],a[Math.floor(r/4)]=e[r+1];return{real:n,imag:a}}function Qz(e){let t=Math.floor(e.length/4),n=new Float32Array(t),a=new Float32Array(t);for(let r=2;r<e.length;r+=4)n[Math.floor(r/4)]=e[r],a[Math.floor(r/4)]=e[r+1];return{real:n,imag:a}}function eW(e,t){let n=e[t*2],a=e[t*2+1];return{real:n,imag:a}}function tW(e,t,n,a){e[a*2]=t,e[a*2+1]=n}function nW(e,t){let n=new Float32Array(e/2),a=new Float32Array(e/2);for(let r=0;r<Math.ceil(e/2);r++){let s=(t?2:-2)*Math.PI*(r/e);n[r]=Math.cos(s),a[r]=Math.sin(s)}return{real:n,imag:a}}function aW(e,t,n){let a=(n?2:-2)*Math.PI*(e/t),r=Math.cos(a),s=Math.sin(a);return{real:r,imag:s}}var ob="->",rW=/->/g,Y1=",",Z1="...";function sW(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(rW,"").length)/ob.length;if(n<1)throw new Error("Equations without an arrow are not supported.");if(n>1)throw new Error(`Equation must contain exactly one arrow ("${ob}").`);let[a,r]=e.split(ob);A(a.indexOf(Z1)===-1,()=>`The ellipsis notation ("${Z1}") is not supported yet.`);let s=a.split(Y1),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let c=0;c<r.length;++c){let h=r[c];if(!s.some(m=>m.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let c=0;c<a.length;++c){let h=a[c];o.indexOf(h)===-1&&h!==Y1&&o.push(h)}let l=new Array(s.length);for(let c=0;c<i;++c){if(new Set(s[c].split("")).size!==s[c].length)throw new Error(`Found duplicate axes in input component ${s[c]}. Support for duplicate axes in input is not implemented yet.`);l[c]=[];for(let h=0;h<s[c].length;++h)l[c].push(o.indexOf(s[c][h]))}let u=o.length,p=r.length,d=[];for(let c=p;c<u;++c)d.push(c);return{allDims:o,summedDims:d,idDims:l}}function iW(e,t){let n=new Array(e);n.fill(-1);for(let r=0;r<t.length;++r)n[t[r]]=r;let a=[];for(let r=0;r<e;++r)n[r]===-1&&a.push(r);return n=n.filter(r=>r!==-1),{permutationIndices:n,expandDims:a}}function oW(e,t,n){let a=new Array(e);for(let r=0;r<n.length;++r){let s=n[r].shape;for(let i=0;i<t[r].length;++i)a[t[r][i]]===void 0?a[t[r][i]]=s[i]:A(a[t[r][i]]===s[i],()=>`Expected dimension ${a[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function lW(e,t){let n=e,a=[],r=0;e.length===0&&n.push(-1),r=e.length+1;for(let i=0;i<r;++i)a.push([]);let s=[];for(let i=0;i<n.length;++i){let o=n[i],l=pW(t,o);for(let u of l)s.indexOf(u)===-1&&(a[i].push(u),s.push(u))}return{path:n,steps:a}}function uW(e){return e.every((t,n)=>t===n)}function pW(e,t){let n=[];for(let a=0;a<e.length;++a)(e[a].length===0||e[a].indexOf(t)!==-1||t===-1)&&n.push(a);return n}function cW(e,t,n=0){let a=[];if(typeof t=="number")A(e.shape[n]%t===0,()=>"Number of splits must evenly divide the axis."),a=new Array(t).fill(e.shape[n]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);A(r<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[n]-i}A(e.shape[n]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),a=t}return a}function dW(e){return`Received SparseTensor with denseShape[0] = 0 but
|
|
indices.shape[0] = ${e}`}function hW(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function mW(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function fW(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function gW(e,t){return`size ${e} must be non-negative, not ${t}`}function yW(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function bW(e,t){let n=mt(e),a=mt(t);return`Input to reshape is a SparseTensor with ${n}
|
|
dense values, but the requested shape requires a multiple of ${a}. inputShape=${e} outputShape= ${t}`}function xW(e,t){let n=mt(e),a=mt(t);return`Input to reshape is a tensor with ${n} dense values, but the requested shape has ${a}. inputShape=${e} outputShape=${t}`}function vW(){return"segment ids must be >= 0"}function wW(){return"segment ids are not increasing"}function kW(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function IW(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var DT={};Ae(DT,{collectGatherOpShapeInfo:()=>NW,computeOutShape:()=>TW,segOpComputeOptimalWindowSize:()=>SW});function SW(e,t){let n=!1,a;for(e<=jv?(a=e,n=!0):a=mh(e,Math.floor(Math.sqrt(e)));!n;)a>t||a===e?n=!0:a=mh(e,a+1);return a}function TW(e,t,n){let a=[],r=e.length;for(let s=0;s<r;s++)s!==t?a.push(e[s]):a.push(n);return a}function NW(e,t,n,a){let r=t.shape.length,s=e.shape.length;if(a!==0&&(a<-r||a>r))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${a}`);if(a<0&&(a+=r),a>s)throw new Error(`batchDims (${a}) must be less than rank(x) (
|
|
${s}).`);if(n<a)throw new Error(`batchDims (${a}) must be less than or equal to axis (${n}).`);for(let d=0;d<a;++d)if(e.shape[d]!==t.shape[d])throw new Error(`x.shape[${d}]: ${e.shape[d]} should be equal to indices.shape[${d}]: ${t.shape[d]}.`);let i=e.shape[n],o=[],l=1,u=1,p=1;for(let d=0;d<a;++d)o.push(e.shape[d]),l*=e.shape[d];for(let d=a;d<n;d++)o.push(e.shape[d]),u*=e.shape[d];for(let d=a;d<r;d++)o.push(t.shape[d]);for(let d=n+1;d<s;d++)o.push(e.shape[d]),p*=e.shape[d];return{batchSize:l,sliceSize:p,outerSize:u,dimSize:i,outputShape:o}}function CW(e){try{return e.map(t=>vh(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function _W(e){return e.map(t=>Ic(t))}var hr={};Ae(hr,{nonMaxSuppressionV3Impl:()=>nT,nonMaxSuppressionV4Impl:()=>aT,nonMaxSuppressionV5Impl:()=>rT,whereImpl:()=>GS});KL();var MT={kernelName:wl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,xo(ie(n,"float32"),-1))}}},EW={kernelName:kl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=it(ie(n,"float32")),r=pn(pe(xe(1),a));return bt(he(e,r))}}}},AW={kernelName:Il,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=pn(pe(it(ie(n,"float32")),1));return he(e,a)}}}},$W={kernelName:fs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=e,i=Wt(n.shape,r);return i.length>0&&(s=fe(s,i)),W(s,n.shape)},b:()=>{let s=e,i=Wt(a.shape,r);return i.length>0&&(s=fe(s,i)),W(s,a.shape)}}}},FW={kernelName:yi,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((a,r)=>{n[r]=()=>e.clone()}),n}},RW={kernelName:bi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},DW={kernelName:rc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},MW={kernelName:Nl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,pn(pe(xe(1),it(ie(n,"float32")))))}}},PW={kernelName:Cl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=pn(X(xe(1),it(ie(n,"float32"))));return he(e,a)}}}},OW={kernelName:Al,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=X(it(n),it(a)),i=z(e,he(a,s)),o=Wt(n.shape,r);return o.length>0&&(i=fe(i,o)),W(i,n.shape)},b:()=>{let s=X(it(n),it(a)),i=bt(z(e,he(n,s))),o=Wt(a.shape,r);return o.length>0&&(i=fe(i,o)),W(i,a.shape)}}}},LW={kernelName:_l,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,X(it(ie(n,"float32")),1))}}},zW={kernelName:El,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,pe(xe(1),it(ie(n,"float32"))))}}};function WW(e,t,n,a,r,s){let i=_(e,"dy","avgPool3dGrad"),o=_(t,"input","avgPool3dGrad"),l=i,u=o,p=!1;o.rank===4&&(p=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),A(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),A(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),Tn("avgPool3dGrad",r,s);let d={dy:l,input:u},c={filterSize:n,strides:a,pad:r,dimRoundingMode:s},h=O.runKernel(Yh,d,c);return p?W(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var BW=L({avgPool3dGrad_:WW}),VW={kernelName:sc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>BW(e,a,r,s,i,o)}}};function UW(e,t,n,a,r){let s=_(e,"dy","avgPoolGrad"),i=_(t,"input","avgPoolGrad");A(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let o=i,l=s,u=!1;i.rank===3&&(u=!0,o=W(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=W(s,[1,s.shape[0],s.shape[1],s.shape[2]])),A(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),A(o.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`);let p={dy:l,input:o},d={filterSize:n,strides:a,pad:r},c=O.runKernel(Xh,p,d);return u?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var GW=L({avgPoolGrad_:UW}),HW={kernelName:xi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i}=n;return{x:()=>GW(e,a,r,s,i)}}},qW={kernelName:vi,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[a,r]=t,{transposeA:s,transposeB:i}=n;return!s&&!i?{a:()=>Re(e,r,!1,!0),b:()=>Re(a,e,!0,!1)}:!s&&i?{a:()=>Re(e,r,!1,!1),b:()=>Re(e,a,!0,!1)}:s&&!i?{a:()=>Re(r,e,!1,!0),b:()=>Re(a,e,!1,!1)}:{a:()=>Re(r,e,!0,!0),b:()=>Re(e,a,!0,!0)}}},jW={kernelName:$l,gradFunc:(e,t,n)=>{let{blockShape:a,crops:r}=n;return{x:()=>Dc(e,a,r)}}},KW={kernelName:$I,gradFunc:(e,t,n)=>{let a=n,r=a.inputShape,s=a.shape,i=Array.from(s);for(let l=r.length-1;l>=0;l--)if(r[l]===s[l])i[l]=1;else if(r[l]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${s}].`);let o=[];for(let l=0;l<i.length;l++)i[l]>1&&o.push(l);return{x:()=>fe(e,o,!0)}}},XW={kernelName:wi,gradFunc:e=>({x:()=>e.clone()})},YW={kernelName:ki,gradFunc:e=>({x:()=>qe(e)})},ZW={kernelName:gs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{clipValueMin:r,clipValueMax:s}=n;return{x:()=>gn($a($r(a,r),ks(a,s)),e,qe(e))}}},JW={kernelName:ic,inputsToSave:["x"],gradFunc:MT.gradFunc},QW={kernelName:Fl,saveAllInputs:!0,gradFunc:(e,t,n)=>{let a=t.map(o=>o.shape),{axis:r}=n,s=Fa(r,t[0].shape)[0],i=a.map(o=>o[s]);return zn(e,i,s).map(o=>()=>o)}},eB={kernelName:Ii,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return A(is(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Kx(a.shape,e,r,i,o,l),filter:()=>Dv(a,e,r.shape,i,o,l)}}},tB={kernelName:Si,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Rt(e,r,s,i,o,1,l),filter:()=>Dv(e,a,r.shape,s,i,o,l)}}};function nB(e,t,n,a,r){let s=e;e.rank===4&&(s=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),A(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),A(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),A(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),A(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),A(i.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`);let o={x:s,dy:i},l={strides:a,pad:r,filterShape:n};return O.runKernel(tm,o,l)}var aB=L({conv3DBackpropFilter_:nB}),rB={kernelName:oc,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s}=n;A(is(a),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`);let[i,o]=t;return{x:()=>oS(i.shape,e,o,r,s),filter:()=>aB(i,e,o.shape,r,s)}}},sB={kernelName:Ti,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(bt(Km(ie(n,"float32"))),e)}}},iB={kernelName:Ni,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(Xm(ie(n,"float32")),e)}}},oB={kernelName:Ci,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r,exclusive:s,reverse:i}=n;return{x:()=>{let o=hS([r],a.rank),l=Mm(e,r,s,!i);return o!=null&&(l=Ee(l,o)),l}}}},lB={kernelName:_i,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s,dimRoundingMode:i}=n,o=a==null?[1,1]:a;A(is(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,u]=t;return A(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),A(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),A(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),A(cr(r,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${r} and dilations '${o}'.`),Tn("depthwiseConv2d",s,i),{x:()=>QS(l.shape,e,u,r,s,o,i),filter:()=>JS(l,e,u.shape,r,s,o,i)}}},uB={kernelName:lc,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,s={x:a,filter:r,dy:e},i={x:a,filter:r,dy:e};return{x:()=>O.runKernel(fh,s,n),filter:()=>O.runKernel(gh,i,n)}}},pB={kernelName:Ai,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,a={dy:e,y:n};return{x:()=>O.runKernel(lm,a)}}},cB={kernelName:Pl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=z(yn(bt(it(n))),2/Math.sqrt(Math.PI));return{x:()=>z(e,a)}}},dB={kernelName:$i,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,n)}}},hB={kernelName:Ll,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>W(e,n.shape)}}},mB={kernelName:zl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,yn(n))}}},fB={kernelName:Fi,gradFunc:e=>({x:()=>qe(e)})},gB={kernelName:Ri,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=he(e,ie(a,"float32")),i=Wt(n.shape,r);return i.length>0?W(fe(s,i),n.shape):s},b:()=>{let s=z(e,ie(n,"float32")),i=Wt(a.shape,r);i.length>0&&(s=W(fe(s,i),a.shape));let o=it(a);return bt(he(s,ie(o,"float32")))}}}},yB={kernelName:Di,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:a}=n,[r,s,i,o]=t,l=o==null?xe(1):o,u=Wt(s.shape,r.shape),p=[];if(s.rank===1){for(let f=0;f<r.shape.length-1;++f)p.push(r.shape[f]);p.push(1)}let d=pe(r,s),c=z(e,l),h=qm(X(i,xe(a))),m=z(z(z(h,h),h),xe(-.5));return{x:()=>s.rank===1?W(z(z(e,Ln(W(h,[1,1,1,s.shape[0]]),p)),l),r.shape):W(z(z(e,h),l),r.shape),mean:()=>{let f=z(z(h,xe(-1)),c);return s.rank===1&&(f=fe(f,u)),W(f,s.shape)},variance:()=>{let f=z(z(m,d),c);return s.rank===1&&(f=fe(f,u)),W(f,s.shape)},scale:()=>{let f=z(d,h),g=z(e,f);return s.rank===1&&(g=fe(g,u)),W(g,s.shape)},offset:()=>{let f=e;return s.rank===1&&(f=fe(f,u)),W(f,s.shape)}}}},bB={kernelName:Bl,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[a,r]=t,{axis:s}=n,i=Fa(s,a.shape)[0];return{x:()=>{let o=a.shape,l=r.size,u=o.slice(0,i),p=u.length,d=o.slice(s,o.length).slice(1),c=d.length,h=J1(0,p),m=J1(p+1,p+1+c),f=Q1([u,[l],d]),g=W(e,f),y=W(r,[l]),b=Q1([[p],h,m]),x=Ee(g,b),w=ef(x,y,a.shape[i]),I=av(b);return w=Ee(w,I),w},indices:()=>r}}};function J1(e,t){let n=[];for(let a=e;a<t;++a)n.push(a);return n}function Q1(e){let t=[];for(let n=0;n<e.length;++n)for(let a=0;a<e[n].length;++a)t.push(e[n][a]);return t}var xB={kernelName:Mi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>qe(n),b:()=>qe(a)}}},vB={kernelName:Pi,gradFunc:e=>({x:()=>ie(e,"float32")})},wB={kernelName:Gl,gradFunc:e=>({x:()=>qe(e)})},kB={kernelName:Hl,gradFunc:e=>({x:()=>qe(e)})},IB={kernelName:Oi,gradFunc:e=>({x:()=>qe(e)})},SB={kernelName:Li,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{alpha:r}=n,s=Nn(a,0);return{x:()=>gn(s,e,z(e,r))}}},TB={kernelName:Kl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,X(n,1))}}},NB={kernelName:zi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,ie(n,"float32"))}}},CB={kernelName:RI,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n;return{logits:()=>{let s=yn(a);return pe(e,z(fe(e,r,!0),s))}}}};function _B(e,t,n,a=5,r=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:a,bias:r,alpha:s,beta:i};return O.runKernel(hm,o,l)}var EB=L({localResponseNormalizationBackprop_:_B}),AB={kernelName:pc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>EB(a,r,e,s,i,o,l)}}};function PT(e,t,n,a){return t.rank<n.rank&&(t=W(t,oi(t.shape,a))),e.rank<n.rank&&(e=W(e,oi(e.shape,a))),{x:()=>z(e,ie(Jn(n,t),e.dtype))}}var ek={kernelName:Wi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{reductionIndices:r}=a,s=t[0],i=t[1],o=Fa(r,s.shape),l=PT(e,i,s,o);return{x:()=>l.x()}}},$B={kernelName:Bi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>z(e,ie($r(n,a),"float32")),b:()=>z(e,ie(Om(n,a),"float32"))}}};function FB(e,t,n,a,r,s,i){let o=_(e,"dy","maxPool3dGrad"),l=_(t,"input","maxPool3dGrad"),u=_(n,"output","maxPool3dGrad"),p=o,d=l,c=u,h=!1;l.rank===4&&(h=!0,p=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),d=W(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),c=W(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),A(p.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${p.rank}.`),A(d.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${d.rank}.`),A(c.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${c.rank}.`),Tn("maxPool3dGrad",s,i);let m={dy:p,input:d,output:c},f={filterSize:a,strides:r,pad:s,dimRoundingMode:i},g=O.runKernel(fm,m,f);return h?W(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var RB=L({maxPool3dGrad_:FB}),DB={kernelName:cc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>RB(e,a,r,s,i,o,l)}}};function MB(e,t,n,a,r,s,i){let o=_(e,"dy","maxPoolGrad"),l=_(t,"input","maxPoolGrad"),u=_(n,"output","maxPoolGrad");A(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),A(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),A(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),Tn("maxPoolGrad",s,i);let p={dy:o,input:l,output:u},d={filterSize:a,strides:r,pad:s,dimRoundingMode:i};return O.runKernel(mm,p,d)}var PB=L({maxPoolGrad_:MB}),OB={kernelName:Vi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>PB(e,a,r,s,i,o)}}},LB={kernelName:Ui,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n,s=Fa(r,a.shape),i=dS(a.shape,s)[1],o=mt(i);return{x:()=>{let l=a.shape.slice();s.forEach(p=>{l[p]=1});let u=W(e,l);return he(z(u,Zn(a.shape,"float32")),o)}}}},zB={kernelName:Gi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{axis:r}=a,[s,i]=t,o=Fa(r,s.shape),l=PT(e,i,s,o);return{x:()=>l.x()}}},WB={kernelName:Hi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>z(e,ie(ks(n,a),"float32")),b:()=>z(e,ie(Nn(n,a),"float32"))}}},BB={kernelName:qi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>Ve(e,s,a.shape)}}},VB={kernelName:Jl,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=Wt(n.shape,r);return s.length>0?W(fe(e,s),n.shape):e},b:()=>{let s=z(e,bt(Nu(he(n,a)))),i=Wt(a.shape,r);return i.length>0?W(fe(s,i),a.shape):s}}}},UB={kernelName:ji,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=z(e,ie(a,"float32")),i=Wt(n.shape,r);return i.length>0?W(fe(s,i),n.shape):s},b:()=>{let s=z(e,ie(n,"float32")),i=Wt(a.shape,r);return i.length>0?W(fe(s,i),a.shape):s}}}},GB={kernelName:Ql,gradFunc:e=>({x:()=>bt(e)})},HB={kernelName:Ki,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>It(n.shape,"float32")}}},qB={kernelName:ru,gradFunc:e=>({x:()=>qe(e)})},jB={kernelName:su,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:a}=n;return lt(e,a).map(r=>()=>r)}},tk={kernelName:Xi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>Ve(e,s,a.shape)}}},KB={kernelName:Yi,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,a,r]=t,s=n,i=a,o=ot(s.shape,i.shape);return{a:()=>{let l=ie(i,"float32"),u=z(e,z(l,Ar(s,pe(l,xe(1))))),p=Wt(s.shape,o);return p.length>0&&(u=fe(u,p)),W(u,s.shape)},b:()=>{let l=Nn(s,0),u=gn(l,Qn(s),qe(s)),p=z(e,z(r,u)),d=Wt(i.shape,o);return d.length>0&&(p=fe(p,d)),W(p,i.shape)}}}},XB={kernelName:Zi,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,a]=t,r=Nn(n,0);return{x:()=>gn(r,e,z(e,a)),alpha:()=>{let s=gn(r,qe(e),z(e,n)),i=Wt(a.shape,e.shape);return i.length>0&&(s=fe(s,i)),W(s,a.shape)}}}};function YB(e,t,n){let a=e.shape.slice();a[n]=1;let r=W(t,a),s=jp(e,n,!0,!1),i=jp(e,n,!0,!0),o=z(s,i);return z(r,o)}function ZB(e,t,n){let a=e.shape.length,r=a-n.length,s=N.getAxesPermutation(n,a),i=e;s!=null&&(i=Ee(e,s));let o=i.shape.slice(),l=o.splice(a-n.length,n.length).reduce((d,c)=>d*c,1);o.push(l);let u=i.reshape(o),p=YB(u,t,r);if(p=p.reshape(i.shape),s!=null){let d=N.getUndoAxesPermutation(s);p=Ee(p,d)}return p}var JB={kernelName:Ji,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n,s=[];return r==null?s=a.shape.map((i,o)=>o):typeof r=="number"?s=[r]:s=r,{x:()=>ZB(a,e,s)}}},QB={kernelName:Ei,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=he(e,ie(a,"float32")),i=Wt(n.shape,r);return i.length>0?W(fe(s,i),n.shape):s},b:()=>{let s=z(e,ie(n,"float32")),i=Wt(a.shape,r);i.length>0&&(s=W(fe(s,i),a.shape));let o=it(a);return bt(he(s,ie(o,"float32")))}}}},e4={kernelName:Qi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,bt(it(n)))}}},t4={kernelName:ao,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=z(ks(n,6),xo(n));return{x:()=>z(e,ie(a,"float32"))}}},n4={kernelName:eo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,ie(xo(n),"float32"))}}},a4={kernelName:iu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n.shape)}}},r4={kernelName:no,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>O.runKernel(Im,r,n)}}},s4={kernelName:to,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>O.runKernel(km,r,n)}}},i4={kernelName:ro,gradFunc:(e,t,n)=>{let{dims:a}=n,r=Fa(a,e.shape);return{x:()=>ga(e,r)}}},o4={kernelName:so,gradFunc:e=>({x:()=>qe(e)})},l4={kernelName:io,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>bt(he(e,z(Ar(n,1.5),2)))}}},u4={kernelName:lu,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>ie(qe(n),"float32"),t:()=>z(e,ie(n,e.dtype)),e:()=>z(e,ie(Fc(n),e.dtype))}}},p4={kernelName:uu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=Nn(n,xe(0)),r=xe(FT),s=xe(RT),i=z(e,s),o=z(z(e,r),yn(ie(n,"float32")));return gn(a,i,o)}}}},c4={kernelName:lo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,z(n,pe(xe(1),n)))}}},d4={kernelName:du,gradFunc:e=>({x:()=>qe(e)})},h4={kernelName:oo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(_c(ie(n,"float32")),e)}}},m4={kernelName:cu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(Dm(ie(n,"float32")),e)}}},f4={kernelName:pu,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{begin:r,size:s}=n,i=a.shape,[o,l]=AT(a,r,s),u=[];for(let p=0;p<e.rank;p++)u.push([o[p],i[p]-o[p]-l[p]]);return{x:()=>ba(e,u)}}},g4={kernelName:co,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{dim:r}=n,s=!0,i=z(e,a);return{logits:()=>pe(i,z(fe(i,[r],s),a))}}},y4={kernelName:hu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,da(n))}}},nk={kernelName:mu,gradFunc:(e,t,n)=>{let{blockShape:a,paddings:r}=n;return{x:()=>Cc(e,a,r)}}},ak={kernelName:fu,gradFunc:(e,t,n)=>{let{axis:a}=n;return{x:()=>Ze(e,a)}}},b4={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,z(pn(ie(n,"float32")),2))}}},x4={kernelName:gc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,z(ie(n,"float32"),2))}}},v4={kernelName:ho,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=xe(2);return{a:()=>z(e,z(r,pe(n,a))),b:()=>z(e,z(r,pe(a,n)))}}},w4={kernelName:bs,gradFunc:e=>({x:()=>qe(e)})},k4={kernelName:mo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ot(n.shape,a.shape);return{a:()=>{let s=e,i=Wt(n.shape,r);return i.length>0&&(s=fe(s,i)),W(s,n.shape)},b:()=>{let s=e,i=Wt(a.shape,r);return i.length>0&&(s=fe(s,i)),W(bt(s),a.shape)}}}},I4={kernelName:po,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,r=a.shape.slice(),{axis:s}=n;Fa(s,a.shape).forEach(l=>{r[l]=1});let i=W(e,r),o=z(i,Zn(a.shape,"float32"));return{x:()=>o}}},S4={kernelName:fo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>he(e,it(_c(n)))}}},T4={kernelName:go,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(pe(xe(1),it(n)),e)}}},N4={kernelName:ys,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{reps:r}=n;return{x:()=>{let s=qe(a);if(a.rank===1)for(let i=0;i<r[0];++i)s=X(s,Ve(e,[i*a.shape[0]],[a.shape[0]]));else if(a.rank===2)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)s=X(s,Ve(e,[i*a.shape[0],o*a.shape[1]],[a.shape[0],a.shape[1]]));else if(a.rank===3)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)for(let l=0;l<r[2];++l)s=X(s,Ve(e,[i*a.shape[0],o*a.shape[1],l*a.shape[2]],[a.shape[0],a.shape[1],a.shape[2]]));else if(a.rank===4)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)for(let l=0;l<r[2];++l)for(let u=0;u<r[3];++u)s=X(s,Ve(e,[i*a.shape[0],o*a.shape[1],l*a.shape[2],u*a.shape[3]],[a.shape[0],a.shape[1],a.shape[2],a.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${a.rank} tensors yet.`);return s}}}},C4={kernelName:Cr,gradFunc:(e,t,n)=>{let a=n,{perm:r}=a,s=av(r);return{x:()=>Ee(e,s)}}},_4={kernelName:vu,gradFunc:(e,t,n)=>{let a=n,{axis:r}=a;return{value:()=>Ft(e,r)}}},E4={kernelName:vc,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>A4(e,n)}}};function A4(e,t){let n=dr(t,qe(t)),a=Cu(e,n),r=$r(t,xe(0,"int32")),s=a.rank-r.rank;for(let o=0;o<s;++o)r=Qt(r,o+1);r=$a(r,Zn(a.shape,"bool"));let i=qe(a);return gn(r,a,i)}var $4={kernelName:wu,gradFunc:e=>({x:()=>qe(e)})},F4=[MT,EW,AW,$W,FW,RW,DW,MW,PW,OW,LW,zW,VW,HW,qW,jW,KW,XW,YW,ZW,JW,QW,tB,eB,rB,sB,iB,oB,lB,uB,QB,pB,cB,dB,hB,mB,gB,fB,yB,bB,xB,vB,wB,kB,IB,SB,TB,NB,CB,AB,ek,ek,$B,DB,OB,LB,zB,WB,BB,VB,UB,GB,HB,qB,jB,tk,tk,KB,XB,JB,e4,t4,n4,a4,r4,s4,i4,o4,l4,u4,p4,c4,d4,h4,m4,f4,g4,y4,nk,nk,ak,ak,b4,v4,x4,w4,k4,I4,S4,T4,N4,C4,_4,E4,$4];for(let e of F4)DI(e);Q().prototype.abs=function(){return this.throwIfDisposed(),Lt(this)};Q().prototype.acos=function(){return this.throwIfDisposed(),Ex(this)};Q().prototype.acosh=function(){return this.throwIfDisposed(),Ax(this)};Q().prototype.add=function(e){return this.throwIfDisposed(),X(this,e)};Q().prototype.all=function(e,t){return this.throwIfDisposed(),$m(this,e,t)};Q().prototype.any=function(e,t){return this.throwIfDisposed(),Gp(this,e,t)};Q().prototype.argMax=function(e){return this.throwIfDisposed(),ri(this,e)};Q().prototype.argMin=function(e){return this.throwIfDisposed(),$x(this,e)};Q().prototype.asScalar=function(){return this.throwIfDisposed(),A(this.size===1,()=>"The array must have only 1 element."),W(this,[])};Q().prototype.asType=function(e){return this.throwIfDisposed(),ie(this,e)};Q().prototype.as1D=function(){return this.throwIfDisposed(),W(this,[this.size])};Q().prototype.as2D=function(e,t){return this.throwIfDisposed(),W(this,[e,t])};Q().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),W(this,[e,t,n])};Q().prototype.as4D=function(e,t,n,a){return this.throwIfDisposed(),W(this,[e,t,n,a])};Q().prototype.as5D=function(e,t,n,a,r){return this.throwIfDisposed(),W(this,[e,t,n,a,r])};Q().prototype.asin=function(){return this.throwIfDisposed(),Fx(this)};Q().prototype.asinh=function(){return this.throwIfDisposed(),Rx(this)};Q().prototype.atan=function(){return this.throwIfDisposed(),Dx(this)};Q().prototype.atan2=function(e){return this.throwIfDisposed(),Mx(this,e)};Q().prototype.atanh=function(){return this.throwIfDisposed(),Px(this)};Q().prototype.avgPool=function(e,t,n,a){return this.throwIfDisposed(),ya(this,e,t,n,a)};Q().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Cc(this,e,t)};Q().prototype.batchNorm=function(e,t,n,a,r){return this.throwIfDisposed(),vs(this,e,t,n,a,r)};Q().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Ys(this,e)};Q().prototype.cast=function(e){return this.throwIfDisposed(),ie(this,e)};Q().prototype.ceil=function(){return this.throwIfDisposed(),Ux(this)};Q().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),tn(this,e,t)};Q().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Ne&&(e=[e]),Ze([this,...e],t)};Q().prototype.conv1d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Fm(this,e,t,n,a,r,s)};Q().prototype.conv2dTranspose=function(e,t,n,a,r){return this.throwIfDisposed(),Rm(this,e,t,n,a,r)};Q().prototype.conv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Rt(this,e,t,n,a,r,s)};Q().prototype.cos=function(){return this.throwIfDisposed(),_c(this)};Q().prototype.cosh=function(){return this.throwIfDisposed(),Dm(this)};Q().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),jp(this,e,t,n)};Q().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),Mm(this,e,t,n)};Q().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),Zx(this,e,t)};Q().prototype.depthwiseConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),ws(this,e,t,n,a,r,s)};Q().prototype.dilation2d=function(e,t,n,a,r){return this.throwIfDisposed(),Jx(this,e,t,n,a,r)};Q().prototype.divNoNan=function(e){return this.throwIfDisposed(),Qx(this,e)};Q().prototype.div=function(e){return this.throwIfDisposed(),he(this,e)};Q().prototype.dot=function(e){return this.throwIfDisposed(),ev(this,e)};Q().prototype.elu=function(){return this.throwIfDisposed(),Su(this)};Q().prototype.equal=function(e){return this.throwIfDisposed(),Jn(this,e)};Q().prototype.erf=function(){return this.throwIfDisposed(),tv(this)};Q().prototype.euclideanNorm=function(e,t){return this.throwIfDisposed(),rv(this,e,t)};Q().prototype.exp=function(){return this.throwIfDisposed(),yn(this)};Q().prototype.expandDims=function(e){return this.throwIfDisposed(),Qt(this,e)};Q().prototype.expm1=function(){return this.throwIfDisposed(),sv(this)};Q().prototype.fft=function(){return this.throwIfDisposed(),Oc(this)};Q().prototype.flatten=function(){return this.throwIfDisposed(),W(this,[this.size])};Q().prototype.floor=function(){return this.throwIfDisposed(),Nu(this)};Q().prototype.floorDiv=function(e){return this.throwIfDisposed(),Am(this,e)};Q().prototype.gather=function(e,t){return this.throwIfDisposed(),Cu(this,e,t)};Q().prototype.greaterEqual=function(e){return this.throwIfDisposed(),$r(this,e)};Q().prototype.greater=function(e){return this.throwIfDisposed(),Nn(this,e)};Q().prototype.ifft=function(){return this.throwIfDisposed(),ll(this)};Q().prototype.irfft=function(){return this.throwIfDisposed(),Zm(this)};Q().prototype.isFinite=function(){return this.throwIfDisposed(),iv(this)};Q().prototype.isInf=function(){return this.throwIfDisposed(),ov(this)};Q().prototype.isNaN=function(){return this.throwIfDisposed(),lv(this)};Q().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Ac(this,e)};Q().prototype.lessEqual=function(e){return this.throwIfDisposed(),ks(this,e)};Q().prototype.less=function(e){return this.throwIfDisposed(),Om(this,e)};Q().prototype.localResponseNormalization=function(e,t,n,a){return this.throwIfDisposed(),uv(this,e,t,n,a)};Q().prototype.logSigmoid=function(){return this.throwIfDisposed(),pv(this)};Q().prototype.logSoftmax=function(e){return this.throwIfDisposed(),zm(this,e)};Q().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),Wm(this,e,t)};Q().prototype.log=function(){return this.throwIfDisposed(),Qn(this)};Q().prototype.log1p=function(){return this.throwIfDisposed(),$c(this)};Q().prototype.logicalAnd=function(e){return this.throwIfDisposed(),$a(this,e)};Q().prototype.logicalNot=function(){return this.throwIfDisposed(),Fc(this)};Q().prototype.logicalOr=function(e){return this.throwIfDisposed(),Bm(this,e)};Q().prototype.logicalXor=function(e){return this.throwIfDisposed(),cv(this,e)};Q().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Re(this,e,t,n)};Q().prototype.maxPool=function(e,t,n,a){return this.throwIfDisposed(),Dt(this,e,t,n,a)};Q().prototype.max=function(e,t){return this.throwIfDisposed(),ha(this,e,t)};Q().prototype.maximum=function(e){return this.throwIfDisposed(),dr(this,e)};Q().prototype.mean=function(e,t){return this.throwIfDisposed(),Ct(this,e,t)};Q().prototype.min=function(e,t){return this.throwIfDisposed(),rl(this,e,t)};Q().prototype.minimum=function(e){return this.throwIfDisposed(),_u(this,e)};Q().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),hv(this,e,t)};Q().prototype.mod=function(e){return this.throwIfDisposed(),mv(this,e)};Q().prototype.mul=function(e){return this.throwIfDisposed(),z(this,e)};Q().prototype.neg=function(){return this.throwIfDisposed(),bt(this)};Q().prototype.norm=function(e,t,n){return this.throwIfDisposed(),Tu(this,e,t,n)};Q().prototype.notEqual=function(e){return this.throwIfDisposed(),li(this,e)};Q().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),sl(this,e,t,n)};Q().prototype.onesLike=function(){return this.throwIfDisposed(),ea(this)};Q().prototype.pad=function(e,t){return this.throwIfDisposed(),ba(this,e,t)};Q().prototype.pool=function(e,t,n,a,r,s){return this.throwIfDisposed(),fv(this,e,t,n,a,r,s)};Q().prototype.pow=function(e){return this.throwIfDisposed(),Ar(this,e)};Q().prototype.prelu=function(e){return this.throwIfDisposed(),Mc(this,e)};Q().prototype.prod=function(e,t){return this.throwIfDisposed(),gv(this,e,t)};Q().prototype.reciprocal=function(){return this.throwIfDisposed(),wv(this)};Q().prototype.relu=function(){return this.throwIfDisposed(),Ke(this)};Q().prototype.relu6=function(){return this.throwIfDisposed(),Gm(this)};Q().prototype.reshapeAs=function(e){return this.throwIfDisposed(),W(this,e.shape)};Q().prototype.reshape=function(e){return this.throwIfDisposed(),W(this,e)};Q().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),sT(this,e,t,n)};Q().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),iT(this,e,t,n)};Q().prototype.reverse=function(e){return this.throwIfDisposed(),ga(this,e)};Q().prototype.rfft=function(){return this.throwIfDisposed(),Lc(this)};Q().prototype.round=function(){return this.throwIfDisposed(),Hm(this)};Q().prototype.rsqrt=function(){return this.throwIfDisposed(),qm(this)};Q().prototype.selu=function(){return this.throwIfDisposed(),jm(this)};Q().prototype.separableConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Is(this,e,t,n,a,r,s)};Q().prototype.sigmoid=function(){return this.throwIfDisposed(),da(this)};Q().prototype.sign=function(){return this.throwIfDisposed(),kv(this)};Q().prototype.sin=function(){return this.throwIfDisposed(),Km(this)};Q().prototype.sinh=function(){return this.throwIfDisposed(),Xm(this)};Q().prototype.slice=function(e,t){return this.throwIfDisposed(),Ve(this,e,t)};Q().prototype.softmax=function(e){return this.throwIfDisposed(),Xa(this,e)};Q().prototype.softplus=function(){return this.throwIfDisposed(),yo(this)};Q().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Dc(this,e,t)};Q().prototype.split=function(e,t){return this.throwIfDisposed(),zn(this,e,t)};Q().prototype.sqrt=function(){return this.throwIfDisposed(),pn(this)};Q().prototype.square=function(){return this.throwIfDisposed(),it(this)};Q().prototype.squaredDifference=function(e){return this.throwIfDisposed(),Jm(this,e)};Q().prototype.squeeze=function(e){return this.throwIfDisposed(),Ss(this,e)};Q().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Ne?[this,e]:[this,...e];return Ft(n,t)};Q().prototype.step=function(e){return this.throwIfDisposed(),xo(this,e)};Q().prototype.stridedSlice=function(e,t,n,a,r,s,i,o){return this.throwIfDisposed(),Iv(this,e,t,n,a,r,s,i,o)};Q().prototype.sub=function(e){return this.throwIfDisposed(),pe(this,e)};Q().prototype.sum=function(e,t){return this.throwIfDisposed(),fe(this,e,t)};Q().prototype.tan=function(){return this.throwIfDisposed(),Sv(this)};Q().prototype.tanh=function(){return this.throwIfDisposed(),ii(this)};Q().prototype.tile=function(e){return this.throwIfDisposed(),Ln(this,e)};Q().prototype.toBool=function(){return this.throwIfDisposed(),ie(this,"bool")};Q().prototype.toFloat=function(){return this.throwIfDisposed(),ie(this,"float32")};Q().prototype.toInt=function(){return this.throwIfDisposed(),ie(this,"int32")};Q().prototype.topk=function(e,t){return this.throwIfDisposed(),Tv(this,e,t)};Q().prototype.transpose=function(e){return this.throwIfDisposed(),Ee(this,e)};Q().prototype.unique=function(e){return this.throwIfDisposed(),Nv(this,e)};Q().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),ef(this,e,t)};Q().prototype.unstack=function(e){return this.throwIfDisposed(),lt(this,e)};Q().prototype.where=function(e,t){return this.throwIfDisposed(),gn(e,this,t)};Q().prototype.zerosLike=function(){return this.throwIfDisposed(),qe(this)};var kr=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,kr.prototype)}},Ba=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Ba.prototype)}},V=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,V.prototype)}},Pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Pe.prototype)}},OT=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,OT.prototype)}},LT=class{constructor(e){this.maxEntries=e||100,this.cache=new Map}get(e){let t;return this.cache.has(e)&&(t=this.cache.get(e),this.cache.delete(e),this.cache.set(e,t)),t}put(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxEntries){let n=this.cache.keys().next().value;this.cache.delete(n)}this.cache.set(e,t)}getMaxEntries(){return this.maxEntries}setMaxEntries(e){if(e<0)throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${e}.`);if(this.maxEntries>e)for(let t=0;t<this.maxEntries-e;t++){let n=this.cache.keys().next().value;this.cache.delete(n)}this.maxEntries=e}};function pi(e,t){if(Array.isArray(e)){let n=[];for(let a=0;a<t;a++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function nr(e,t){if(!e)throw new OT(t)}function rk(e,t){let n=0;for(let a of e)a===t&&n++;return n}function On(e){return e.length===1?e[0]:e}function yt(e){return Array.isArray(e)?e:[e]}function Ir(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return t[0]!=="_"?t:"private"+t}function qs(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var Ia={};function Kv(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function Db(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>Db(t));else{let t=Object.keys(e);for(let n of t){let a=e[n];a!=null&&typeof a=="object"&&(!Array.isArray(a)&&a.type==="ndarray"&&typeof a.value=="number"?e[n]=a.value:Db(a))}}}function Wc(e,t={},n={},a="object",r=!1){if(typeof e=="string"){let s=e,i;if(s in n)i=n[s];else if(s in Ia)i=Ia[s];else if(i=t[s],i==null)throw new V(`Unknown ${a}: ${e}. This may be due to one of the following reasons:
|
|
1. The ${a} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${a} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return i}else{let s=e;if(s.className==null||s.config==null)throw new V(`${a}: Improper config format: ${JSON.stringify(s)}.
|
|
'className' and 'config' must set.`);let i=s.className,o,l;if(i in n?[o,l]=n[i]:i in Ia?[o,l]=Ia.className:i in t&&([o,l]=t[i]),o==null)throw new V(`Unknown ${a}: ${i}. This may be due to one of the following reasons:
|
|
1. The ${a} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${a} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let u={};for(let h of Object.keys(Ia))u[h]=Ia[h];for(let h of Object.keys(n))u[h]=n[h];let p=s.config;p.customObjects=u;let d=Object.assign({},Ia);for(let h of Object.keys(n))Ia[h]=n[h];Db(s.config);let c=l(o,s.config,n,r);return Ia=Object.assign({},d),c}else{let u=Object.assign({},Ia);for(let d of Object.keys(n))Ia[d]=n[d];let p=new o(s.config);return Ia=Object.assign({},u),p}}}function R4(e,t){return e<t?-1:e>t?1:0}function qd(e,t){return-1*R4(e,t)}function ts(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function D4(e){if(e==null)throw new V(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function wo(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new V(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function Xv(e,t,n=0,a=1/0){return nr(n>=0),nr(a>=n),Array.isArray(e)&&e.length>=n&&e.length<=a&&e.every(r=>typeof r===t)}function en(e,t){Array.isArray(e)?(v.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,a)=>en(n,`element ${a+1} of ${t}`))):v.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${zT(e)}.`)}function zT(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>zT(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function M4(e,t,n){let a=n!=null?n():v.now(),r;return(...s)=>{let i=n!=null?n():v.now();return i-a<t||(a=i,r=e(...s)),r}}function WT(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}var P4=0;function BT(){return P4++}var jd={};function lf(e=""){return e in jd||(jd[e]=0),jd[e]+=1,e+jd[e].toString()}var O4=["channelsFirst","channelsLast"],L4=["nearest","bilinear"],z4=["valid","same","causal"],W4=["max","avg"],B4=["sum","mul","concat","ave"],jo=new Map;function Mt(e){wo(O4,"DataFormat",e)}function V4(e){wo(L4,"InterpolationFormat",e)}function xa(e){wo(z4,"PaddingMode",e)}function VT(e){wo(W4,"PoolMode",e)}var Pp=[],sk="/";function Zs(e,t){Pp.push(e);try{let n=t();return Pp.pop(),n}catch(n){throw Pp.pop(),n}}function U4(){return Pp.length===0?"":Pp.join(sk)+sk}function UT(e){if(!HT(e))throw new Error("Not a valid tensor name: '"+e+"'");return U4()+e}function GT(e){if(!HT(e))throw new Error("Not a valid tensor name: '"+e+"'");jo.has(e)||jo.set(e,0);let t=jo.get(e);if(jo.set(e,jo.get(e)+1),t>0){let n=`${e}_${t}`;return jo.set(n,1),n}else return e}var G4=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function HT(e){return!!e.match(G4)}function H4(e){return e===parseInt(e.toString(),10)}function ns(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let a=1;for(let r=t;r<n;++r)a*=e[r];return a}function cl(e){if(e.length===0)return Number.NaN;let t=Number.POSITIVE_INFINITY;for(let n=0;n<e.length;n++){let a=e[n];a<t&&(t=a)}return t}function os(e){if(e.length===0)return Number.NaN;let t=Number.NEGATIVE_INFINITY;for(let n=0;n<e.length;n++){let a=e[n];a>t&&(t=a)}return t}function qa(e,t){if(t<e)throw new V(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let a=e;a<t;++a)n.push(a);return n}var lb;function qt(){return lb==null&&(lb=eS().epsilon()),lb}function ja(){return"channelsLast"}function ir(e,t){return ie(e,t)}function Bc(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),W(e,n)}function q4(e,t){return P(()=>{if(e.shape.length!==2)throw new V(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=Bc(e,1);return Mb(n,[1,t,1])})}function j4(e){let t=[ns(e.shape)];return W(e,t)}function K4(e){if(e.rank<=1)throw new V(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],ns(e.shape,1)];return W(e,t)}function Js(e,t,n){return P(()=>{switch(e.rank){case 1:return Pc(e,t,n);case 2:return Ym(e,[t,0],[n,e.shape[1]]);case 3:return bo(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return ol(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Ve(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Ve(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new V(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function ub(e,t,n){return P(()=>{switch(e.rank){case 1:return Pc(e,t,n);case 2:return Ym(e,[0,t],[e.shape[0],n]);case 3:return bo(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return ol(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Kd(e,t,n,a){return P(()=>{switch(e.rank){case 1:return Pc(e,t,n);case 2:switch(a){case 1:return Js(e,t,n);case 2:return ub(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${a}`)}case 3:switch(a){case 1:return Js(e,t,n);case 2:return bo(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return ub(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${a}`)}case 4:switch(a){case 1:return Js(e,t,n);case 2:return ol(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return ol(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return ub(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${a}`)}default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Yv(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),Ze(e,t)}function ik(e,t){switch(e.rank){case 1:return Gx([e,t]);case 2:return Hx([e,t],0);case 3:return qx([e,t],0);case 4:return jx([e,t],0);default:throw new V(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function Mb(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new V(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Ln(e,t)}function uf(e,t=0,n=1,a,r){return Um(e,t,n,a,r)}function or(e,t,n,a){if(e.rank<2||t.rank<2)throw new Pe(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let r=e.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(r!==s)throw new Pe(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2)return ul.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:a?Pb(e.rank,a,ja()):null,activation:n});{let r=e.shape.slice(),s=r.pop();e=W(e,[-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),u=[...i,o],p=Array.from({length:t.rank},(m,f)=>f===0?t.rank-2:f<=t.rank-2?f-1:f);t=W(Ee(t,p),[l,-1]);let d=[...r,...u],c=!1,h=!1;return W(ul.matMul({a:e,b:t,transposeA:c,transposeB:h,bias:a?Pb(e.rank,a,ja()):null,activation:n}),d)}}function qT(e,t,n){return P(()=>(Array.isArray(t)?t=je(t,"int32"):t=ie(t,"int32"),Cu(e,t,n)))}function Vc(e){return z(e,e)}function Pb(e,t,n){let a=t.shape;if(t.rank!==1&&t.rank!==e)throw new V(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return a.length===1?W(t,[1,a[0],1,1,1]):W(t,[1,a[3],a[0],a[1],a[2]]);if(n==="channelsLast")return a.length===1?W(t,[1,1,1,1,a[0]]):W(t,[1].concat(a))}else if(e===4){if(n==="channelsFirst")return a.length===1?W(t,[1,a[0],1,1]):W(t,[1,a[2],a[0],a[1]]);if(n==="channelsLast")return a.length===1?W(t,[1,1,1,a[0]]):W(t,[1].concat(a))}else if(e===3){if(n==="channelsFirst")return a.length===1?W(t,[1,a[0],1]):W(t,[1,a[1],a[0]]);if(n==="channelsLast")return a.length===1?W(t,[1,1,a[0]]):W(t,[1].concat(a))}else if(e<3)return t;throw new V(`Unsupported input rank by biasAdd: ${t.rank}`)}function Ya(e,t,n){return P(()=>(n==null&&(n=ja()),Mt(n),X(e,Pb(e.rank,t,n))))}function X4(e,t=1){if(t!==1)throw new Pe(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Su(e)}function Y4(e){return P(()=>he(e,X(Lt(e),1)))}function jT(e,t,n,a){return P(()=>Fv(e,t,n,a))}function Z4(e){return P(()=>{let t=X(.5,z(.2,e));return tn(t,0,1)})}function Uc(e,t,n=!1){return n?e():t()}var J4=["fanIn","fanOut","fanAvg"],Q4=["normal","uniform","truncatedNormal"];function eV(e){wo(J4,"FanMode",e)}function tV(e){wo(Q4,"Distribution",e)}var Da=class extends ne.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},Zv=class extends Da{apply(e,t){return It(e,t)}};Zv.className="Zeros";ne.registerClass(Zv);var pf=class extends Da{apply(e,t){return Zn(e,t)}};pf.className="Ones";ne.registerClass(pf);var Jv=class extends Da{constructor(e){if(super(),typeof e!="object")throw new V(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new V(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return P(()=>z(xe(this.value),Zn(e,t)))}getConfig(){return{value:this.value}}};Jv.className="Constant";ne.registerClass(Jv);var Qv=class extends Da{constructor(e){super(),this.DEFAULT_MINVAL=-.05,this.DEFAULT_MAXVAL=.05,this.minval=e.minval||this.DEFAULT_MINVAL,this.maxval=e.maxval||this.DEFAULT_MAXVAL,this.seed=e.seed}apply(e,t){return Eu(e,this.minval,this.maxval,t,this.seed)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};Qv.className="RandomUniform";ne.registerClass(Qv);var ew=class extends Da{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Pe(`randomNormal does not support dType ${t}.`);return uf(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};ew.className="RandomNormal";ne.registerClass(ew);var tw=class extends Da{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Pe(`truncatedNormal does not support dType ${t}.`);return Qm(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};tw.className="TruncatedNormal";ne.registerClass(tw);var nw=class extends Da{constructor(e){super(),this.gain=e.gain!=null?e.gain:1}apply(e,t){return P(()=>{if(e.length!==2||e[0]!==e[1])throw new V("Identity matrix initializer can only be used for 2D square matrices.");return z(this.gain,Pm(e[0]))})}getConfig(){return{gain:this.gain}}};nw.className="Identity";ne.registerClass(nw);function nV(e,t="channelsLast"){let n,a;if(Mt(t),e.length===2)n=e[0],a=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let r=ns(e,2);n=e[1]*r,a=e[0]*r}else if(t==="channelsLast"){let r=ns(e,0,e.length-2);n=e[e.length-2]*r,a=e[e.length-1]*r}}else{let r=ns(e);n=Math.sqrt(r),a=Math.sqrt(r)}return[n,a]}var Bn=class extends Da{constructor(e){if(super(),e.scale<0)throw new V(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,eV(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,tV(this.distribution),this.seed=e.seed}apply(e,t){let n=nV(e),a=n[0],r=n[1],s=this.scale;if(this.mode==="fanIn"?s/=Math.max(1,a):this.mode==="fanOut"?s/=Math.max(1,r):s/=Math.max(1,(a+r)/2),this.distribution==="normal"){let i=Math.sqrt(s);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Pe(`${this.getClassName()} does not support dType ${t}.`);return Qm(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return Eu(e,-i,i,t,this.seed)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Bn.className="VarianceScaling";ne.registerClass(Bn);var cf=class extends Bn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};cf.className="GlorotUniform";ne.registerClass(cf);var df=class extends Bn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};df.className="GlorotNormal";ne.registerClass(df);var hf=class extends Bn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};hf.className="HeNormal";ne.registerClass(hf);var mf=class extends Bn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};mf.className="HeUniform";ne.registerClass(mf);var ff=class extends Bn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};ff.className="LeCunNormal";ne.registerClass(ff);var gf=class extends Bn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};gf.className="LeCunUniform";ne.registerClass(gf);var aw=class extends Da{constructor(e){if(super(),this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new Pe("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return P(()=>{if(e.length<2)throw new Pe("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,a=uf(n,0,1,"float32"),r=Pv.gramSchmidt(a);return e[0]>e[1]&&(r=Ee(r)),z(this.gain,r)})}getConfig(){return{gain:this.gain,seed:this.seed}}};aw.className="Orthogonal";ne.registerClass(aw);var ok={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function lk(e,t={}){return Wc(e,ne.SerializationMap.getMap().classNameMap,t,"initializer")}function _t(e){return Kv(e)}function St(e){if(typeof e=="string"){let t=e in ok?ok[e]:e;if(t==="GlorotNormal")return new df;if(t==="GlorotUniform")return new cf;if(t==="HeNormal")return new hf;if(t==="HeUniform")return new mf;if(t==="LeCunNormal")return new ff;if(t==="LeCunUniform")return new gf;{let n={};return n.className=t,n.config={},lk(n)}}else return e instanceof Da?e:lk(e)}function Ob(e){return Array.isArray(e)&&Array.isArray(e[0])}function Sh(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function Ce(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new V(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function Je(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new V(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Th(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((a,r)=>a*r);return t}var uk="Variable",KT=class{constructor(e,t="float32",n=uk,a=!0,r=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=BT(),n=n==null?uk:n,this.originalName=UT(n),this.name=GT(this.originalName),this.trainable_=a,this.constraint=r,this.val=Cv(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),aV(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function aV(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function Lb(e){return e.map(t=>t.read())}function rw(e){e.forEach(t=>{t[0].write(t[1])})}var zt=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Va=class{constructor(e,t,n,a,r,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=a,this.callArgs=r,this.outputTensorIndex=i,this.id=BT(),s!=null&&(this.originalName=UT(s),this.name=GT(this.originalName)),this.rank=t.length}},rV=0,yf=class{constructor(e,t){this.callArgs=t,this.id=rV++,this.outboundLayer=e.outboundLayer,this.inboundLayers=e.inboundLayers,this.nodeIndices=e.nodeIndices,this.tensorIndices=e.tensorIndices,this.inputTensors=e.inputTensors,this.outputTensors=e.outputTensors,this.inputMasks=e.inputMasks,this.outputMasks=e.outputMasks,this.inputShapes=e.inputShapes,this.outputShapes=e.outputShapes;for(let n of e.inboundLayers)n!=null&&n.outboundNodes.push(this);e.outboundLayer.inboundNodes.push(this)}getConfig(){let e=[];for(let t of this.inboundLayers)t!=null?e.push(t.name):e.push(null);return{outboundLayer:this.outboundLayer?this.outboundLayer.name:null,inboundLayers:e,nodeIndices:this.nodeIndices,tensorIndices:this.tensorIndices}}},sV=0,Ue=class extends ne.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=sV++,this.activityRegularizer=null,this.inputSpec=null,this.supportsMasking=!1,this._trainableWeights=[],this._nonTrainableWeights=[],this._losses=[],this._updates=[],this._built=!1,this.inboundNodes=[],this.outboundNodes=[];let t=e.name;if(!t){let n=this.getClassName();t=Ir(n)+"_"+lf(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let r=null;e.batchSize!=null&&(r=e.batchSize),n=[r].concat(e.inputShape)}this.batchInputShape=n;let a=e.dtype;a==null&&(a=e.inputDType),a==null&&(a="float32"),this.dtype=a}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new Ba(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new V(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return On(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return On(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new kr(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer input" is ill-defined. Use \`getInputAt(nodeIndex)\` instead.`);if(this.inboundNodes.length===0)throw new kr(`Layer ${this.name} is not connected, no input to return.`);return On(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new kr(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new kr(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return On(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=yt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=yt(this.inputSpec);if(e.length!==t.length)throw new V(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let a=e[n],r=t[n];if(r==null)continue;let s=a.rank;if(r.ndim!=null&&s!==r.ndim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${r.ndim}, found ndim=${s}`);if(r.maxNDim!=null&&s>r.maxNDim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${r.maxNDim}, found ndim=${s}`);if(r.minNDim!=null&&s<r.minNDim)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${r.minNDim}, found ndim=${s}.`);if(r.dtype!=null&&a.dtype!==r.dtype)throw new V(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${r.dtype}, found dtype=${a.dtype}.`);if(r.axes){let i=a.shape;for(let o in r.axes){let l=Number(o),u=r.axes[o],p=l>=0?i[l]:i[i.length+l];if(u!=null&&[u,null].indexOf(p)===-1)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${u} but got shape ${i}.`)}}if(r.shape!=null)for(let i=0;i<r.shape.length;++i){let o=r.shape[i],l=a.shape[i];if(o!=null&&l!=null&&o!==l)throw new V(`Input ${n} is incompatible with layer ${this.name}: expected shape=${r.shape}, found shape=${a.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=yt(e),a=!0;for(let s of n)if(!(s instanceof Va)){a=!1;break}let r=!0;for(let s of n)if(s instanceof Va){r=!1;break}if(a===r)throw new V("Arguments to apply() must be all SymbolicTensors or all Tensors");return Zs(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of yt(e))s.push(i.shape);this.build(On(s)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&r&&(this._refCount=1)}if(this.assertInputCompatibility(e),r){let s=this.call(e,t),i=yt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=On(o),this.activityRegularizer!=null)throw new Pe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=iV(e),i=this.computeOutputShape(s),o,l=oV(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?s[0]:s),i!=null&&i.length>0&&Array.isArray(i[0])?o=i.map((u,p)=>new Va(l,u,this,yt(e),t,this.name,p)):o=new Va(l,i,this,yt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new Pe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,a)=>{n!=null&&e[a]!=null&&e[a]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new kr(`The layer ${this.name} has never been called and thus has no defined output shape.`);let e=[];for(let t of this.inboundNodes){let n=JSON.stringify(t.outputShapes);e.indexOf(n)===-1&&e.push(n)}if(e.length===1){let t=this.inboundNodes[0].outputShapes;return Array.isArray(t)&&Array.isArray(t[0])&&t.length===1?t[0]:t}else throw new kr(`The layer ${this.name} has multiple inbound nodes with different output shapes. Hence the notion of "output shape" is ill-defined for the layer.`)}countParams(){if(!this.built)throw new Ba(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Th(this.weights)}build(e){this.built=!0}getWeights(e=!1){return Lb(e?this.trainableWeights:this.weights)}setWeights(e){P(()=>{let t=this.weights;if(t.length!==e.length)throw new V(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],a=Lb(t);for(let r=0;r<a.length;++r){let s=a[r],i=t[r],o=e[r];if(!v.arraysEqual(s.shape,o.shape))throw new V(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}rw(n)})}addWeight(e,t,n,a,r,s,i,o){if(this._addedWeightNames.indexOf(e)!==-1)throw new V(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(a=o!=null?o():St("zeros"));let l=a.apply(t,n),u=new KT(l,n,e,s,i);return l.dispose(),r!=null&&this.addLoss(()=>r.apply(u.read())),s==null&&(s=!0),s?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=yt(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,a,r,s,i=null){let o=yt(e);t=yt(t),n=yt(n),a=yt(a),r=Sh(r),s=Sh(s);let l=[],u=[],p=[];for(let d of o)l.push(d.sourceLayer),u.push(d.nodeIndex),p.push(d.tensorIndex);new yf({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:p,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:a,inputShapes:r,outputShapes:s},i);for(let d=0;d<t.length;d++)t[d].sourceLayer=this,t[d].nodeIndex=this.inboundNodes.length-1,t[d].tensorIndex=d}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount===0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function iV(e){e=yt(e);let t=[];for(let n of e)t.push(n.shape);return On(t)}function oV(e){return"float32"}function XT(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let a=t.inboundNodes[n];if(a.inboundLayers.length===0)return a.inputTensors;{let r=[];for(let s=0;s<a.inboundLayers.length;s++){let i=a.inputTensors[s],o=a.inboundLayers[s],l=a.nodeIndices[s],u=XT(i,o,l);for(let p of u)r.indexOf(p)===-1&&r.push(p)}return r}}}var $u=class extends Ue{constructor(e){if(super({dtype:e.dtype,name:e.name!=null?e.name:lf("input").toString()}),e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new V("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(t==null){if(e.inputShape==null)throw new V("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new V("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let a=new Va(this.dtype,this.batchInputShape,this,[],{},this.name);a.nodeIndex=0,a.tensorIndex=0,new yf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[a],outputTensors:[a],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new V(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};$u.className="InputLayer";ne.registerClass($u);function YT(e){if(e.batchShape==null&&e.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(e.batchShape!=null&&e.shape!=null)throw new V("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;e.shape!=null&&t==null&&(t=[null].concat(e.shape));let n=e.dtype;return n==null&&(n="float32"),new $u({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}function lV(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return ie(t,e.dtype)}catch(n){throw new V(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var Xs=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof Xs)for(let t in e.id2Value)this.id2Value[t]=e.id2Value[t],t in e.id2Mask&&(this.id2Mask[t]=e.id2Mask[t]);else{if(e==null)return;for(let t of e)this.add(t.key,t.value)}}add(e,t,n){if(this.id2Value[e.id]==null)this.id2Value[e.id]=lV(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new V(`Duplicate key: name=${e.name}, id=${e.id}`);return this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return this.id2Value[e.id]!=null}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof Va){if(this.id2Value[e.id]==null)throw new V(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new V(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof Va){if(this.id2Value[e.id]==null)throw new V(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new V(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&_e(this.id2Mask)}},Nh=new LT,Ch=new LT;function uV(e){Nh!=null&&Nh.setMaxEntries(e),Ch!=null&&Ch.setMaxEntries(e)}function Cp(e,t,n,a){let r=n==null?!1:n.training,s=Array.isArray(e),i=s?e:[e],o=i.map(m=>m.name),l=[],u=t.names();for(let m of o)u.indexOf(m)!==-1?l.push(t.getValue(m)):l.push(null);a!=null&&(a.maxNumTensors=-1/0,a.minNumTensors=1/0);let p=o.join(",")+"|"+t.names().sort().join(","),d=Nh.get(p),c;if(d==null){let m=pV(i,t);d=m.sorted,c=m.recipientCounts,Nh.put(p,d),Ch.put(p,c)}c={},r||Object.assign(c,Ch.get(p));let h=new Xs(t);for(let m=0;m<d.length;++m){if(a!=null){let $=kh().numTensors;$>a.maxNumTensors&&(a.maxNumTensors=$),$<a.minNumTensors&&(a.minNumTensors=$)}let f=d[m],g=f.sourceLayer;if(g instanceof $u)continue;let y=[],b=[],x=[],w=!1;for(let $ of f.inputs){let R=h.getValue($),F=h.getMask($);y.push(R),b.push(F),F!=null&&(w=!0),r||(c[$.name]--,c[$.name]===0&&!t.hasKey($)&&o.indexOf($.name)===-1&&!R.isDisposed&&$.sourceLayer.stateful!==!0&&x.push(R))}w&&(n=n||{},n.mask=b[0]);let I=yt(g.apply(y,n)),T=null;g.supportsMasking&&(T=g.computeMask(y,b));let C=dV(f),E=Array.isArray(C)?C:[C];for(let $=0;$<E.length;++$){h.hasKey(E[$])||h.add(E[$],I[$],Array.isArray(T)?T[0]:T);let R=o.indexOf(E[$].name);R!==-1&&(l[R]=I[$])}r||_e(x)}return h.disposeMasks(),s?l:l[0]}function pV(e,t){v.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],a={};if(e.length===1){let r=pk(e[0],t);n=r.sorted,a=r.recipientMap}else{let r=new Set;for(let s of e){let{sorted:i,recipientMap:o}=pk(s,t);for(let l of i)r.has(l.name)||(n.push(l),r.add(l.name));for(let l in o)a[l]==null&&(a[l]=new Set),o[l].forEach(u=>a[l].add(u))}}return{sorted:n,recipientCounts:cV(a)}}function cV(e){let t={};for(let n in e)t[n]=e[n].size;return t}function pk(e,t){let n=new Set,a=[],r={};for(let o of t.names())n.add(o);let s=[],i=[];for(s.push(e);s.length>0;){let o=s[s.length-1];if(n.has(o.name)){s.pop();continue}let l=i[i.length-1]===s.length-1;if(o.inputs.length===0||l)s.pop(),a.push(o),n.add(o.name),l&&i.pop();else{i.push(s.length-1);for(let u of o.inputs)r[u.name]==null&&(r[u.name]=new Set),r[u.name].add(o.name),!n.has(u.name)&&s.push(u)}}return{sorted:a,recipientMap:r}}function dV(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let a=0;a<e.sourceLayer.inboundNodes.length;++a)for(let r of e.sourceLayer.inboundNodes[a].outputTensors)if(r.id===e.id){n=a;break}t=e.sourceLayer.getOutputAt(n)}return t}var hV=H();hV.registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES",()=>100,uV);var ZT={};Ae(ZT,{maxNorm:()=>mV,minMaxNorm:()=>yV,nonNeg:()=>gV,unitNorm:()=>fV});function sw(e,t){return P(()=>pn(fe(z(e,e),t,!0)))}var Gc=class extends ne.Serializable{getConfig(){return{}}},iw=class extends Gc{constructor(e){super(),this.defaultMaxValue=2,this.defaultAxis=0,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return P(()=>{let t=sw(e,this.axis),n=tn(t,0,this.maxValue);return z(e,he(n,X(qt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};iw.className="MaxNorm";ne.registerClass(iw);var ow=class extends Gc{constructor(e){super(),this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return P(()=>he(e,X(qt(),sw(e,this.axis))))}getConfig(){return{axis:this.axis}}};ow.className="UnitNorm";ne.registerClass(ow);var lw=class extends Gc{apply(e){return Ke(e)}};lw.className="NonNeg";ne.registerClass(lw);var uw=class extends Gc{constructor(e){super(),this.defaultMinValue=0,this.defaultMaxValue=1,this.defaultRate=1,this.defaultAxis=0,this.minValue=e.minValue!=null?e.minValue:this.defaultMinValue,this.maxValue=e.maxValue!=null?e.maxValue:this.defaultMaxValue,this.rate=e.rate!=null?e.rate:this.defaultRate,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return P(()=>{let t=sw(e,this.axis),n=X(z(this.rate,tn(t,this.minValue,this.maxValue)),z(1-this.rate,t));return z(e,he(n,X(qt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};uw.className="MinMaxNorm";ne.registerClass(uw);var ck={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Xt(e){return Kv(e)}function dk(e,t={}){return Wc(e,ne.SerializationMap.getMap().classNameMap,t,"constraint")}function Yt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in ck?ck[e]:e,config:{}};return dk(t)}else return e instanceof Gc?e:dk(e)}function mV(e){return new iw(e)}function fV(e){return new ow(e)}function gV(){return new lw}function yV(e){return new uw(e)}var JT={};Ae(JT,{constant:()=>vV,glorotNormal:()=>CV,glorotUniform:()=>NV,heNormal:()=>_V,heUniform:()=>EV,identity:()=>SV,leCunNormal:()=>AV,leCunUniform:()=>$V,ones:()=>xV,orthogonal:()=>FV,randomNormal:()=>kV,randomUniform:()=>wV,truncatedNormal:()=>IV,varianceScaling:()=>TV,zeros:()=>bV});function bV(){return new Zv}function xV(){return new pf}function vV(e){return new Jv(e)}function wV(e){return new Qv(e)}function kV(e){return new ew(e)}function IV(e){return new tw(e)}function SV(e){return new nw(e)}function TV(e){return new Bn(e)}function NV(e){return new cf(e)}function CV(e){return new df(e)}function _V(e){return new hf(e)}function EV(e){return new mf(e)}function AV(e){return new ff(e)}function $V(e){return new gf(e)}function FV(e){return new aw(e)}var QT={};Ae(QT,{Layer:()=>Ue,RNN:()=>mr,RNNCell:()=>Xc,activation:()=>sG,add:()=>mG,alphaDropout:()=>ZG,average:()=>fG,averagePooling1d:()=>x0,averagePooling2d:()=>v0,averagePooling3d:()=>w0,avgPool1d:()=>SG,avgPool2d:()=>NG,avgPool3d:()=>_G,avgPooling1d:()=>TG,avgPooling2d:()=>CG,avgPooling3d:()=>EG,batchNormalization:()=>wG,bidirectional:()=>UG,categoryEncoding:()=>nH,centerCrop:()=>eH,concatenate:()=>gG,conv1d:()=>YU,conv2d:()=>ZU,conv2dTranspose:()=>JU,conv3d:()=>QU,conv3dTranspose:()=>eG,convLstm2d:()=>zG,convLstm2dCell:()=>WG,cropping2D:()=>nG,dense:()=>iG,depthwiseConv2d:()=>rG,dot:()=>vG,dropout:()=>oG,elu:()=>GU,embedding:()=>hG,flatten:()=>uG,gaussianDropout:()=>YG,gaussianNoise:()=>XG,globalAveragePooling1d:()=>AG,globalAveragePooling2d:()=>$G,globalMaxPool1d:()=>HG,globalMaxPool2d:()=>qG,globalMaxPooling1d:()=>GN,globalMaxPooling2d:()=>HN,gru:()=>RG,gruCell:()=>DG,input:()=>yN,inputLayer:()=>UU,layerNormalization:()=>kG,leakyReLU:()=>qU,lstm:()=>MG,lstmCell:()=>PG,masking:()=>JG,maxPool1d:()=>jG,maxPool2d:()=>KG,maxPooling1d:()=>qN,maxPooling2d:()=>jN,maxPooling3d:()=>FG,maximum:()=>yG,minimum:()=>bG,multiply:()=>xG,permute:()=>dG,prelu:()=>jU,reLU:()=>HU,repeatVector:()=>pG,rescaling:()=>QG,reshape:()=>cG,resizing:()=>tH,rnn:()=>BG,separableConv2d:()=>tG,simpleRNN:()=>OG,simpleRNNCell:()=>LG,softmax:()=>KU,spatialDropout1d:()=>lG,stackedRNNCells:()=>VG,thresholdedReLU:()=>XU,timeDistributed:()=>GG,upSampling2d:()=>aG,zeroPadding2d:()=>IG});async function jr(e){if(e==null)return;let t=[],n=[],a=[];for(let r in e){let s=e[r];if(typeof s!="number"){let i=s;t.push(i.data()),n.push(r),a.push(i)}}if(t.length>0){let r=await Promise.all(t);for(let s=0;s<r.length;++s)e[n[s]]=r[s][0];_e(a)}}function eN(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var hk;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(hk||(hk={}));var RV=125,dl=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},tN=class{constructor(e,t=10){e==null&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},DV=class extends dl{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let a in t){let r=t[a];if(typeof r=="number")this.totals.hasOwnProperty(a)||(this.totals[a]=0),this.totals[a]=this.totals[a]+r*n;else{let s;a in this.totals?s=this.totals[a]:this.totals[a]=0;let i=P(()=>X(this.totals[a],z(r,n)));this.totals[a]=i,s!=null&&s.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:P(()=>{let a=z(he(1,this.seen),this.totals[n]);t[n]=a,this.totals[n].dispose(),Gt(t[n])}))}},nN=class extends dl{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let r in this.history){let s=this.history[r];for(let i=0;i<s.length;++i)if(typeof s[i]!="number"){let o=s[i];e.push(o.data()),t.push(r),n.push(i)}}let a=await Promise.all(e);for(let r=0;r<a.length;++r)this.history[t[r]][n[r]].dispose(),this.history[t[r]][n[r]]=a[r][0]}},aN=class extends dl{constructor(e,t){if(super(),this.currentEpoch=0,this.nowFunc=e.nowFunc,this.nextFrameFunc=e.nextFrameFunc||qv,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=RV),this.yieldEvery==="never"&&e.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");v.isNumber(this.yieldEvery)&&(this.maybeWait=M4(this.maybeWait.bind(this),this.yieldEvery,this.nowFunc)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let a=[];this.yield!=null&&(await jr(n),a.push(this.yield(e,t,n))),a.push(this.nextFrameFunc()),await Promise.all(a)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await jr(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await jr(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(this.nextFrameFunc()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await jr(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await jr(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(this.nextFrameFunc()):v.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await jr(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await jr(e),await this.trainEnd(e))}};function rN(e,t){return e==null&&(e={}),e instanceof dl?[e]:Array.isArray(e)&&e[0]instanceof dl?e:yt(e).map(n=>new aN(n,t))}var Na=class{constructor(){}static registerCallbackConstructor(e,t){v.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),Na.checkForDuplicate(t),Na.constructors[e]==null&&(Na.constructors[e]=[]),Na.constructors[e].push(t)}static checkForDuplicate(e){for(let t in Na.constructors)Na.constructors[+t].forEach(n=>{if(n===e)throw new V("Duplicate callback constructor.")})}static clear(){Na.constructors={}}static createCallbacks(e){let t=[];for(let n in Na.constructors){let a=+n;e>=a&&t.push(...Na.constructors[a])}return t.map(n=>new n)}};Na.constructors={};function sN(e,t,n,a,r,s,i,o,l){let u=new nN,p=[new DV,...Na.createCallbacks(t)];e!=null&&p.push(...e),p.push(u);let d=new tN(p);return d.setParams({epochs:n,initialEpoch:a,samples:r,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:d,history:u}}function Ga(e,t={},n=!1){return Wc(e,ne.SerializationMap.getMap().classNameMap,t,"layer",n)}function _h(e,t){return P(()=>{e.dtype!=="float32"&&(e=ie(e,"float32"));let n=fe(Vc(e),t,!0),a=bn(n.shape,qt()),r=pn(dr(n,a));return he(e,r)})}function ko(e,t){return P(()=>Ct(Vc(pe(t,e)),-1))}function bf(e,t){return P(()=>Ct(Lt(pe(t,e)),-1))}function Fu(e,t){return P(()=>{let n=pe(e,t),a=tn(Lt(e),qt(),Number.MAX_VALUE),r=Lt(he(n,a));return z(100,Ct(r,-1))})}function MV(e,t){return P(()=>{let n=tn(t,qt(),Number.MAX_VALUE),a=Qn(X(1,n)),r=tn(e,qt(),Number.MAX_VALUE),s=Qn(X(1,r));return Ct(Vc(pe(a,s)),-1)})}function PV(e,t){return P(()=>{let n=dr(0,pe(1,z(e,t)));return Ct(Vc(n),-1)})}function OV(e,t){return P(()=>{let n=dr(0,pe(1,z(e,t)));return Ct(n,-1)})}function LV(e,t){return P(()=>{let n=fe(z(e,t),-1),a=ha(z(pe(1,e),t),-1);return dr(0,X(1,pe(a,n)))})}function zV(e,t){return P(()=>{let n=Math.log(2),a=pe(t,e),r=pe(X(a,yo(z(-2,a))),n);return Ct(r,-1)})}function Kp(e,t,n=!1){return P(()=>{if(n)t=Xa(t);else{let a=fe(t,t.shape.length-1,!0);t=he(t,a)}return t=tn(t,qt(),1-qt()),bt(fe(z(ie(e,"float32"),Qn(t)),t.shape.length-1))})}function Eh(e,t,n=!1){return P(()=>{let a=ie(Nu(j4(e)),"int32");t=tn(t,qt(),1-qt());let r=t.shape,s=W(sl(a,r[r.length-1]),r);return Kp(s,t,n)})}function WV(e,t){if(!v.arraysEqual(e.shape,t.shape))throw new V(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return P(()=>{let n=Ke(t),a=bt(Lt(t));return X(pe(n,z(t,e)),$c(yn(a)))})}function xf(e,t){return P(()=>{let n;return n=tn(t,qt(),1-qt()),n=Qn(he(n,pe(1,n))),Ct(WV(e,n),-1)})}function BV(e,t){return P(()=>{let n=tn(e,qt(),1),a=tn(t,qt(),1);return fe(z(e,Qn(he(n,a))),-1)})}function VV(e,t){return P(()=>{let n=Qn(X(qt(),t));return Ct(pe(t,z(e,n)),-1)})}function pw(e,t){return P(()=>{let n=_h(e,-1),a=_h(t,-1),r=z(n,a);return bt(fe(r,-1))})}var Ah={meanSquaredError:ko,meanAbsoluteError:bf,meanAbsolutePercentageError:Fu,meanSquaredLogarithmicError:MV,squaredHinge:PV,hinge:OV,categoricalHinge:LV,logcosh:zV,categoricalCrossentropy:Kp,sparseCategoricalCrossentropy:Eh,binaryCrossentropy:xf,kullbackLeiblerDivergence:BV,poisson:VV,cosineProximity:pw};function pb(e){if(typeof e=="string"){if(e in Ah)return Ah[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new V(t)}else return e}function cw(e,t){return P(()=>{let n=z(.5,ea(t)),a=ir(Nn(t,n),e.dtype);return Ct(Jn(e,a),-1)})}function dw(e,t){return P(()=>ir(Jn(ri(e,-1),ri(t,-1)),"float32"))}function iN(e,t){return P(()=>ie(fe($a(Jn(e,1),Jn(t,1))),"float32"))}function UV(e,t){return P(()=>ie(fe($a(Jn(e,1),Jn(t,0))),"float32"))}function GV(e,t){return P(()=>ie(fe($a(Jn(e,0),Jn(t,1))),"float32"))}function oN(e,t){return P(()=>{let n=iN(e,t),a=GV(e,t),r=X(n,a);return ie(gn(Nn(r,0),he(n,r),0),"float32")})}function HV(e,t){return P(()=>{let n=iN(e,t),a=UV(e,t),r=X(n,a);return ie(gn(Nn(r,0),he(n,r),0),"float32")})}function lN(e,t){return xf(e,t)}function uN(e,t){return e.rank===t.rank&&(e=Ss(e,[e.rank-1])),t=ri(t,-1),t.dtype!==e.dtype&&(t=ie(t,e.dtype)),ie(Jn(e,t),"float32")}var qV=ko,jV=ko,KV=bf,XV=bf,YV=Fu,ZV=Fu,hw=Kp,JV=pw,pN=Eh,$h={binaryAccuracy:cw,categoricalAccuracy:dw,precision:oN,categoricalCrossentropy:hw,sparseCategoricalCrossentropy:pN,mse:qV,MSE:jV,mae:KV,MAE:XV,mape:YV,MAPE:ZV,cosine:JV};function QV(e){if(typeof e=="string"&&e in $h)return $h[e];if(typeof e!="string"&&e!=null)return e;throw new V(`Unknown metric ${e}`)}function Xd(e){if(nr(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(Ah))if(Ah[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys($h))if($h[n]===e){t=n;break}return t!==void 0?t:e.name}}function eU(e){let t={Adagrad:()=>Us.adagrad(.01),Adadelta:()=>Us.adadelta(1,.95,qt()),Adam:()=>Us.adam(.001,.9,.999,qt()),Adamax:()=>Us.adamax(.002,.9,.999,qt(),0),RMSProp:()=>Us.rmsprop(.001,.9,0,qt()),SGD:()=>Us.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new V(`Unknown Optimizer ${e}`)}function mk(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!zb(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let a=JSON.stringify(e);a.length>1048576&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${a.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${1048576}.`)}}function zb(e){if(e===null)return!0;if(typeof e=="object")if(Object.getPrototypeOf(e)===Object.prototype){let t=Object.keys(e);for(let n of t)if(typeof n!="string"||!zb(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!zb(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function tU(e,t,n,a=console.log){let r=aU(e),s=["Layer (type)","Input Shape","Output shape","Param #"];r?(t=t||90,n=n||[.32,.61,.89,1]):(t=t||115,n=n||[.24,.48,.7,.8,1]),n[n.length-1]<=1&&(n=n.map(p=>Math.floor(t*p)));let i;if(!r){s.push("Receives inputs"),i=[];for(let p in e.nodesByDepth)i.push(...e.nodesByDepth[p])}a("_".repeat(t)),Fh(s,n,a),a("=".repeat(t));let o=e.layers;for(let p=0;p<o.length;++p)r?rU(o[p],n,a):sU(o[p],n,i,a),a((p===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=nU(e),u=Th(e.nonTrainableWeights);a(`Total params: ${l+u}`),a(`Trainable params: ${l}`),a(`Non-trainable params: ${u}`),a("_".repeat(t))}function nU(e){let t;return e.collectedTrainableWeights!=null?t=Th(e.collectedTrainableWeights):t=Th(e.trainableWeights),t}function aU(e){let t=!0,n=[],a=[];for(let r in e.nodesByDepth)n.push(e.nodesByDepth[r]);for(let r of n){if(r.length>1||r.length===1&&r[0].inboundLayers.length>1){t=!1;break}a.push(...r)}if(t)for(let r of e.layers){let s=!1;for(let i of r.inboundNodes)if(a.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function Fh(e,t,n=console.log){let a="";for(let r=0;r<e.length;++r)r>0&&(a=a.slice(0,a.length-1)+" "),a+=e[r],a=a.slice(0,t[r]),a+=" ".repeat(t[r]-a.length);n(a)}function rU(e,t,n){let a,r;try{r=e.inboundNodes.map(l=>JSON.stringify(l.inputShapes)).join(",")}catch(l){r="multiple"}try{a=JSON.stringify(e.outputShape)}catch(l){a="multiple"}let s=e.name,i=e.getClassName(),o=[`${s} (${i})`,r,a,e.countParams().toString()];Fh(o,t,n)}function sU(e,t,n,a){let r,s;try{s=e.inboundNodes.map(d=>JSON.stringify(d.inputShapes)).join(",")}catch(d){s="multiple"}try{r=JSON.stringify(e.outputShape)}catch(d){r="multiple"}let i=[];for(let d of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(d)===-1))for(let c=0;c<d.inboundLayers.length;++c){let h=d.inboundLayers[c].name,m=d.nodeIndices[c],f=d.tensorIndices[c];i.push(`${h}[${m}][${f}]`)}let o=e.name,l=e.getClassName(),u=i.length===0?"":i[0],p=[`${o} (${l})`,s,r,e.countParams().toString(),u];Fh(p,t,a);for(let d=1;d<i.length;++d)Fh(["","","","",i[d]],t,a)}function cN(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function Xp(e,t){if(e===null)return null;if(typeof e=="string")return qs(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],a=e.length;for(let r=0;r<a;++r){let s=e[r];cN(t,r,s)?n.push(s):n.push(Xp(s,t))}return n}else{let n={};for(let a of Object.keys(e)){let r=e[a];if(a==="name"&&typeof r=="string")n[a]=r;else{let s=qs(a);n[s]=Xp(r,s)}}return n}}function Wb(e,t){if(e==null)return null;if(typeof e=="string")return Ir(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],a=e.length;for(let r=0;r<a;++r){let s=e[r];cN(t,r,s)?n.push(s):n.push(Wb(s,t))}return n}else{let n={};for(let a of Object.keys(e)){let r=e[a],s=Ir(a);(a==="name"||a==="className")&&typeof r=="string"?n[s]=r:n[s]=Wb(r,a)}return n}}var mw="4.2.0",er=class extends Ue{constructor(e){if(super({}),this.containerNodes=new Set,this.name=e.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=lf(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],ts(this.inputs).length!==this.inputs.length)throw new V(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);ts(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let b=y.sourceLayer,x=y.nodeIndex,w=y.tensorIndex;this.outputLayers.push(b),this.outputLayersNodeIndices.push(x),this.outputLayersTensorIndices.push(w)}for(let y of this.inputs){let b=y.sourceLayer,x=y.nodeIndex,w=y.tensorIndex;nr(x===0,"input layer has >1 nodes"),nr(w===0,"input layer has >1 tensors"),this.inputLayers.push(b),this.inputLayersNodeIndices.push(x),this.inputLayersTensorIndices.push(w)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;y<this.inputLayers.length;y++){let b=this.inputLayers[y];if(!(b instanceof $u))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${y} (0-based) originates from layer type ${b.getClassName()}.`);this.inputNames.push(b.name),this.feedInputShapes.push(b.batchInputShape),this.feedInputNames.push(b.name)}for(let y of this.outputLayers)this.outputNames.push(y.name);this.internalInputShapes=this.inputs.map(y=>y.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let t={},n={},a={},r={},s={},i=[],o=(y,b,x,w,I,T)=>{(w==null||I==null||T==null)&&(w=y.sourceLayer,I=y.nodeIndex,T=y.tensorIndex);let C=w.inboundNodes[I];if(x.indexOf(C)!==-1)throw new Ba(`The tensor ${y.name} at layer "${w.name}" is part of a cycle.`);if(b.indexOf(C)!==-1)return;this.containerNodes.add(er.nodeKey(w,I)),w.id in s||(s[w.id]=Object.keys(s).length),x.indexOf(C)===-1&&x.push(C);let E=C.inboundLayers.length;for(let $=0;$<E;$++){let R=C.inputTensors[$],F=C.inboundLayers[$],S=C.nodeIndices[$],M=C.tensorIndices[$];o(R,b,x,F,S,M)}for(b.push(C);x.indexOf(C)>=0;)x.splice(x.indexOf(C),1);i.push(C)},l=[],u=[];for(let y of this.outputs)o(y,l,u);let p=i.slice().reverse();for(let y of p){n[y.id]=y,y.id in t||(t[y.id]=0);let b=t[y.id],x=a[y.outboundLayer.id]==null?0:a[y.outboundLayer.id];b=Math.max(b,x),a[y.outboundLayer.id]=b,r[y.outboundLayer.id]=y.outboundLayer,t[y.id]=b;for(let w=0;w<y.inboundLayers.length;w++){let I=y.inboundLayers[w],T=y.nodeIndices[w],C=I.inboundNodes[T],E=t[C.id]==null?0:t[C.id];t[C.id]=Math.max(b+1,E),n[C.id]=C}}let d={};for(let y in t){let b=t[y];b in d||(d[b]=[]),d[b].push(n[y])}let c={};for(let y in a){let b=a[y];b in c||(c[b]=[]),c[b].push(r[y])}let h=Object.keys(c).map(y=>parseInt(y,10)).sort(qd);this.layers=[];for(let y of h){let b=c[y];b.sort((x,w)=>{let I=s[x.id],T=s[w.id];return I<T?-1:I>T?1:0});for(let x of b)x instanceof er&&this.internalContainerRefs.push(x),this.layers.push(x)}this.layersByDepth=c,h=Object.keys(d).map(y=>parseInt(y,10)).sort(qd);let m=this.inputs.slice(),f=[];for(let y of h)for(let b of d[y]){let x=b.outboundLayer;if(x!=null){for(let w of b.inputTensors)if(m.indexOf(w)===-1)throw new Ba(`Graph disconnected: cannot obtain value for tensor ${w} at layer "${x.name}". The following previous layers were accessed without issue: ${f}`);for(let w of b.outputTensors)m.push(w);f.push(x.name)}}this.nodesByDepth=d;let g=this.layers.map(y=>y.name);for(let y of g){let b=g.filter(x=>x===y).length;if(b!==1)throw new Ba(`The name "${y}" is used ${b} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new yf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount===0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new V("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},a=0;for(let s of this.layers)for(let i of s.weights){if(n[i.originalName]!=null)throw new V(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,a++}let r=[];for(let s in e){let i=s;if(n[s]==null){let o=s.split("/");i=o.slice(0,-2).concat([o[o.length-1]]).join("/")}if(n[i]!=null)r.push([n[i],e[s]]);else if(t)throw new V(`Provided weight data has no target variable: ${s}`);delete n[i]}if(t){let s=[];for(let i in n)s.push(i);if(s.length>0)throw new V(`${s.length} of ${a} weights are not set: ${s}`)}rw(r)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${mw}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=Wb(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return P(()=>{e=yt(e);let n=new Xs;for(let a=0;a<this.inputs.length;++a)n.add(this.inputs[a],e[a]);return Cp(this.outputs,n,t)})}computeMask(e,t){return P(()=>{e=yt(e);let n;return t==null?n=pi(null,e.length):n=yt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Sh(e);if(t.length!==this.inputLayers.length)throw new V(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;i<t.length;i++){let o=this.inputLayers[i],l=t[i],u=o.name+"_0_0";n[u]=l}let a=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(qd);if(a.length>1)for(let i of a){let o=this.nodesByDepth[i];for(let l of o){let u=l.outboundLayer;if(this.inputLayers.map(m=>m.id).indexOf(u.id)!==-1)continue;let p=[];for(let m=0;m<l.inboundLayers.length;m++){let f=l.inboundLayers[m],g=l.nodeIndices[m],y=l.tensorIndices[m],b=`${f.name}_${g}_${y}`,x=n[b];p.push(x)}let d=u.computeOutputShape(On(p)),c=Sh(d),h=u.inboundNodes.indexOf(l);for(let m=0;m<c.length;m++){let f=`${u.name}_${h}_${m}`;n[f]=c[m]}}}let r=[],s=[];for(let i=0;i<this.outputLayers.length;i++){let o=this.outputLayers[i],l=this.outputLayersNodeIndices[i],u=this.outputLayersTensorIndices[i],p=`${o.name}_${l}_${u}`;s.push(p)}for(let i=0;i<s.length;i++){let o=s[i];nr(o in n),r.push(n[o])}return On(r)}runInternalGraph(e,t){t==null&&(t=pi(null,e.length));let n={};for(let o=0;o<this.inputs.length;++o){let l=this.inputs[o],u=e[o],p=t[o];n[l.id]=[u,p]}let a=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(qd);for(let o of a){let l=this.nodesByDepth[o];for(let u of l){let p=u.outboundLayer,d=u.inputTensors,c=u.outputTensors,h=new Array;for(let m of d)m.id in n&&h.push(n[m.id]);if(h.length===d.length){let m={},f,g,y,b;if(u.callArgs!=null&&(m=u.callArgs),h.length===1){let[x,w]=h[0];m.mask==null&&(m.mask=w),y=yt(p.call(x,m)),b=yt(p.computeMask(x,w)),f=[x],g=[w]}else f=h.map(x=>x[0]),g=h.map(x=>x[1]),m.mask==null&&(m.mask=g),y=yt(p.call(f,m)),b=yt(p.computeMask(f,g));if(p.activityRegularizer)throw new Pe("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let x=0;x<c.length;++x){let w=c[x],I=y[x],T=b[x];n[w.id]=[I,T]}}}}let r=[],s=[],i=[];for(let o of this.outputs){nr(o.id in n,`Could not compute output ${o.name} : ${o.id}`);let[l,u]=n[o.id];i.push(l.shape),r.push(l),s.push(u)}return[r,s,i]}buildNodeConversionMap(e){let t={},n;for(let a of this.layers){n=a instanceof er?1:0;for(let r=0;r<a.inboundNodes.length;r++){let s=er.nodeKey(a,r);this.containerNodes.has(s)&&(t[s]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new V(`Was asked to retrieve layer at index ${t}, but model only has ${this.layers.length} layer(s).`);return this.layers[t]}else if(e==null)throw new V("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new V(`No such layer: ${e}`)}calculateLosses(){return P(()=>{let e=[];for(let t of this.layers)for(let n=0;n<t.inboundNodes.length;++n){let a=er.nodeKey(t,n);this.containerNodes.has(a)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let s of this.layers){let i=s.getClassName(),o=s.getConfig(),l=[];for(let p=0;p<s.inboundNodes.length;p++){let d=s.inboundNodes[p],c=er.nodeKey(s,p),h={};if(this.containerNodes.has(c)){if(d.callArgs)try{JSON.stringify(d.callArgs),h=d.callArgs}catch(m){console.warn(`Layer ${s.name} was passed non-serializable keyword arguments: ${d.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),h={}}if(d.inboundLayers.length>0){let m=[];for(let f=0;f<d.inboundLayers.length;f++){let g=d.inboundLayers[f],y=d.nodeIndices[f],b=d.tensorIndices[f],x=er.nodeKey(g,y),w=t[x];w==null&&(w=0),m.push([g.name,w,b,h])}l.push(m)}}}let u={};u.name=s.name,u.className=i,u.config=o,u.inboundNodes=l,n.push(u)}e.layers=n;let a=[];for(let s=0;s<this.inputLayers.length;s++){let i=this.inputLayers[s],o=this.inputLayersNodeIndices[s],l=er.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let p=this.inputLayersTensorIndices[s];a.push([i.name,u,p])}e.inputLayers=a;let r=[];for(let s=0;s<this.outputLayers.length;s++){let i=this.outputLayers[s],o=this.outputLayersNodeIndices[s],l=er.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let p=this.outputLayersTensorIndices[s];r.push([i.name,u,p])}return e.outputLayers=r,e}static fromConfig(e,t,n={},a=!1){let r={},s={};function i(f,g){f.name in s?s[f.name].push(g):s[f.name]=[g]}function o(f,g){let y=[],b;for(let x of g){let w=x[0],I=x[1],T=x[2];if(b=x[3]==null?{}:x[3],!(w in r)){i(f,g);return}let C=r[w];if(C.inboundNodes.length<=I){i(f,g);return}let E=C.inboundNodes[I];y.push(E.outputTensors[T])}y.length>0&&f.apply(On(y),b)}function l(f){let g=f.name,y=Ga(f,t.customObjects!=null?t.customObjects:{});y.setFastWeightInitDuringBuild(a),r[g]=y,f.inboundNodes.forEach(b=>{if(!(b instanceof Array))throw new V(`Corrupted configuration, expected array for nodeData: ${b}`);i(y,b)})}let u=t.name,p=t.layers;for(let f of p)l(f);for(;!D4(s);)for(let f of p){let g=r[f.name];if(g.name in s){let y=s[g.name];delete s[g.name];for(let b of y)o(g,b)}}let d=[],c=[],h=t.inputLayers;for(let f of h){let g=f[0],y=f[1],b=f[2];nr(g in r);let x=r[g].inboundNodes[y].outputTensors;d.push(x[b])}let m=t.outputLayers;for(let f of m){let g=f[0],y=f[1],b=f[2];nr(g in r);let x=r[g].inboundNodes[y].outputTensors;c.push(x[b])}return new e({inputs:d,outputs:c,name:u})}get stateful(){if(this._stateful)throw new V("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){P(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function iU(e,t,n){let a=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>null);if(a===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==a)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${a} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let r=[];return t.forEach(s=>{s in e?r.push(e[s]):r.push(null)}),r}else throw new Error(`The model has multiple (${a}) outputs, so ${n} must be either an array with ${a} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function dN(e,t){return iU(e,t,"classWeight")}async function hN(e,t,n,a){if(t!=null||a!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let r=P(()=>{if(e.shape.length===1)return sr(e);if(e.shape.length===2){if(e.shape[1]>1)return ri(e,1);if(e.shape[1]===1)return W(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),s=Array.from(await r.data());_e(r);let i=[];return s.forEach(o=>{if(n[o]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${o} exists in the data but not in classWeight`);i.push(n[o])}),je(i,"float32")}else return null}function oU(e,t){return z(e,t)}var lU=32;function mN(e,t){let n,a,r=t;n=r.xs,a=r.ys,v.assert(n!=null&&a!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let s=fk("input",e.inputNames,n),i=fk("output",e.outputNames,a),o=s[0].shape[0];v.assert(s.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),v.assert(i.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l<s.length;l++)v.assert(s[l].shape[0]===o,()=>`Batch size mismatch: input ${e.inputNames[l]} has ${s[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);for(let l=0;l<i.length;l++)v.assert(i[l].shape[0]===o,()=>`Batch size mismatch: output ${e.outputNames[l]} has ${i[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);return{xs:s,ys:i}}function fk(e,t,n){if(n instanceof Ne)return[n];if(Array.isArray(n))return v.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let a=[];for(let r of t){if(n[r]==null)throw new V(`The feature data generated by the dataset lacks the required ${e} key '${r}'.`);a.push(n[r])}return a}}function uU(e){if(e.length===3)throw new Pe("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function pU(e,t,n){let a=n.batchesPerEpoch!=null;if(v.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),v.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),v.assert(n.epochs!=null&&n.epochs>0&&Number.isInteger(n.epochs),()=>`For fitDataset(), config.epochs is expected to be a positive integer, but got ${n.epochs}`),v.assert(!a||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),v.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let r=n.validationData!=null,s,i;if(r)if(gk(n.validationData))v.assert(n.validationBatches==null||n.validationBatches>0&&Number.isInteger(n.validationBatches),()=>`For fitDataset() with dataset-based validation, config.validationBatches is expected not to be provided, or to be a positive integer, but got ${n.validationBatches}`);else{let g=uU(n.validationData);s=g.xs,i=g.ys}let o=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),u;r?u=l.slice().concat(l.map(g=>"val_"+g)):u=l.slice();let p=rN(n.callbacks,n.yieldEvery),d=n.verbose==null?1:n.verbose,{callbackList:c,history:h}=sN(p,d,n.epochs,null,null,cU(t,n),null,r,u);c.setModel(e),e.history=h,await c.onTrainBegin(),e.stopTraining_=!1;let m=n.initialEpoch==null?0:n.initialEpoch,f=await t.iterator();for(;m<n.epochs;){let g={};await c.onEpochBegin(m);let y=0,b=0;for(a||(f=await t.iterator());!a||y<n.batchesPerEpoch;){let x=await f.next();if(a&&x.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${y} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(x.value!=null){let{xs:w,ys:I}=mN(e,x.value),T={};T.batch=b,T.size=w[0].shape[0],await c.onBatchBegin(b,T);let C=[];if(n.classWeight!=null){let R=dN(n.classWeight,e.outputNames);for(let F=0;F<R.length;++F)C.push(await hN(I[F],null,R[F]))}let E=w.concat(I).concat(C),$=o(E);_e(E);for(let R=0;R<l.length;++R){let F=l[R],S=$[R];T[F]=S,Gt(S)}await c.onBatchEnd(b,T),eN(T),b++,y++}if(a?y>=n.batchesPerEpoch:x.done){if(r){let w;gk(n.validationData)?w=yt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):w=yt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?lU:n.validationBatchSize,verbose:0}));for(let I=0;I<e.metricsNames.length;++I)g[`val_${e.metricsNames[I]}`]=w[I]}break}if(e.stopTraining_)break}if(await c.onEpochEnd(m,g),m++,e.stopTraining_)break}return await c.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function cU(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function gk(e){return typeof e.iterator=="function"}function dU(e){return typeof e.next=="function"}async function hU(e,t,n){n=n||{};let a=n.batches!=null,r=e.testFunction,s=[];if(n.verbose>0)throw new Pe("Verbose mode is not implemented yet.");v.assert(!a||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let i=dU(t)?t:await t.iterator(),o=0,l=0;for(;!a||l<n.batches;){let u=await i.next();if(s=P(()=>{if(u.value){let{xs:p,ys:d}=mN(e,u.value),c=p.concat(d),h=P(()=>r(c));if(_e(c),l===0)for(let f=0;f<h.length;++f)s.push(xe(0));let m=c[0].shape[0];for(let f=0;f<h.length;++f){let g=h[f],y=s[f];s[f]=P(()=>X(s[f],z(m,g))),l>0&&_e(y)}_e(h),o+=m,++l}return s}),u.done){a&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u<s.length;++u){let p=s[u];s[u]=he(s[u],o),_e(p)}return On(s)}function cb(e){v.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function wp(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(a=>Js(a,t,n-t)):Js(e,t,n-t)}function Bb(e,t){return P(()=>e==null?null:Array.isArray(e)?e.map(n=>Bb(n,t)):qT(e,t.dtype==="int32"?t:ie(t,"int32")))}function db(e,t){let n=[],a=0,r=null;for(;a<e;)r=a+t,r>=e&&(r=e),n.push([a,r]),a=r;return n}function fN(e){let t=[];e instanceof Ne&&(e=[e]);for(let n=0;n<e.length;++n){let a=e[n];if(a.rank===1)t.push(Bc(a,1));else{if(a.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(a)}}return t}function za(e,t){if(e==null)return;let n=[];if(t instanceof Ne)n.push(t.id);else if(Array.isArray(t))t.forEach(r=>n.push(r.id));else if(t!=null)for(let r in t){let s=t[r];n.push(s.id)}let a=[];if(e instanceof Ne)n.indexOf(e.id)===-1&&a.push(e);else if(Array.isArray(e))e.forEach(r=>{n.indexOf(r.id)===-1&&a.push(r)});else if(e!=null)for(let r in e){let s=e[r];n.indexOf(s.id)===-1&&a.push(s)}a.forEach(r=>{r.isDisposed||r.dispose()})}function mU(e){return e instanceof Ne}function Vb(e){return Array.isArray(e)}function yk(e){return!mU(e)&&!Vb(e)}function bk(e,t,n,a=!0,r=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(Vb(e)&&e.length>0)i=!0;else if(yk(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new V(`Error when checking model ${r} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(yk(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new V(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(Vb(e)){if(e=e,e.length!==t.length)throw new V(`Error when checking model ${r}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);s=e}else{if(e=e,t.length>1)throw new V(`The model ${r} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=fN(s),n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new V(`Error when checking ${r}: expected ${t[i]} to have ${n[i].length} dimension(s). but got array with shape ${o.shape}`);for(let l=0;l<n[i].length;++l){if(l===0&&!a)continue;let u=o.shape[l],p=n[i][l];if(p!=null&&p>=0&&u!==p)throw new V(`${r} expected a batch of elements where each example has shape [${n[i].slice(1,n[i].length)}] (i.e.,tensor shape [*,${n[i].slice(1,n[i].length)}]) but the ${r} received an input with ${o.shape[0]} examples, each with shape [${o.shape.slice(1,o.shape.length)}] (tensor shape [${o.shape}])`)}}return s}function fU(e,t,n){let a=ts(e.map(s=>s.shape[0]));a.sort();let r=ts(t.map(s=>s.shape[0]));if(r.sort(),a.length>1)throw new V(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(s=>s.shape))}`);if(r.length>1)throw new V(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(a.length>0&&r.length>0&&!v.arraysEqual(a,r))throw new V(`Input Tensors should have the same number of samples as target Tensors. Found ${a[0]} input sample(s) and ${r[0]} target sample(s).`)}function gU(e,t,n){let a=[ko,xf,Kp];for(let r=0;r<e.length;++r){let s=e[r],i=t[r],o=n[r];if(i!=null){if(i===Kp&&s.shape[s.shape.length-1]===1)throw new V(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(a.indexOf(i)!==-1){let l=s.shape.slice(1),u=o.slice(1);for(let p=0;p<l.length;++p){let d=l[p],c=u[p];if(c!=null&&d!==c)throw new V(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function xk(e,t,n,a=!0,r=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new V(`Error when checking model ${r}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new V(`The model expects ${t.length} ${r} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new V(`Error when checking ${r}: expected ${t[i]} to have ${n[i].length} dimension(s), but got array with shape ${JSON.stringify(o.shape)}`);for(let l=0;l<n[i].length;++l){if(l===0&&!a)continue;let u=o.shape[l],p=n[i][l];if(p!=null&&p!==u)throw new V(`Error when checking ${r}: expected ${t[i]} to have shape ${JSON.stringify(n[i])} but got array with shape ${JSON.stringify(o.shape)}.`)}}}function yU(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(a=>[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(a=>n);{let a=[];for(let r of t){let s=n.hasOwnProperty(r)?n[r]:[];Array.isArray(s)||(s=[s]),a.push(s)}return a}}var bU="layers-model",_r=class extends er{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new V("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");tU(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=eU(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Rr))throw new V("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let s in e.loss)if(this.outputNames.indexOf(s)===-1)throw new V(`Unknown entry in loss dictionary: "${s}". Only expected the following keys: ${this.outputNames}`);for(let s of this.outputNames)e.loss[s]==null&&console.warn(`Output "${s}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${s} during training`),t.push(pb(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new V(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(s=>pb(s))}else{let s=pb(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s<this.outputs.length;++s){let i=this.internalOutputShapes[s],o=this.outputNames[s];this.feedOutputNames.push(o),this.feedOutputShapes.push(i),this.feedLossFns.push(this.lossFunctions[s])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],Zs("loss",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=this.lossFunctions[s];this.outputs.length>1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let a=yU(e.metrics,this.outputNames),r=(s,i,o)=>{this.outputNames.length>1&&(i=this.outputNames[s]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([o,s])};Zs("metric",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=a[s];(o=>{let l="",u,p,d;for(let c of o){if(typeof c=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(c)!==-1){let m=this.internalOutputShapes[s];m[m.length-1]===1||this.lossFunctions[s]===xf?["accuracy","acc"].indexOf(c)!==-1?p=cw:["crossentropy","ce"].indexOf(c)!==-1&&(p=lN):this.lossFunctions[s]===Eh?["accuracy","acc"].indexOf(c)!==-1?p=uN:["crossentropy","ce"].indexOf(c)!==-1&&(p=pN):["accuracy","acc"].indexOf(c)!==-1?p=dw:["crossentropy","ce"].indexOf(c)!==-1&&(p=hw);let f;["accuracy","acc"].indexOf(c)!==-1?f="acc":["crossentropy","ce"].indexOf(c)!==-1&&(f="ce"),d=p,u=l+f}else d=QV(c),u=l+Xd(c);let h;Zs(u,()=>{h=d}),r(s,u,h)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let a=n.batchSize==null?32:n.batchSize;cb(a);let r=!0,s=this.standardizeUserDataXY(e,t,r,a);try{let i=s[0].concat(s[1]);this.makeTestFunction();let o=this.testFunction,l=this.testLoop(o,i,a,n.verbose,n.steps);return On(l)}finally{za(s[0],e),za(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),hU(this,e,t)}checkNumSamples(e,t,n,a="steps"){let r;if(n!=null){if(r=null,t!=null)throw new V(`If ${a} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?r=e[0].shape[0]:r=e.shape[0];else throw new V(`Either the input data should have a defined shape, or ${a} shoud be specified.`);return r}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new V("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),a=n?t:[t],r=this.retrieveSymbolicTensors(a),s=new Xs;if(e instanceof Ne&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new V(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;o<this.inputs.length;++o)s.add(this.inputs[o],e[o])}else for(let o of this.inputs){let l=e[o.name];if(l==null)throw new V(`No value is provided for the model's input ${o.name}`);s.add(o,l)}let i=Cp(r,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=pi(null,e.length),n=e.length;for(let a of this.layers){let r=Array.isArray(a.output)?a.output:[a.output],s=r.map(i=>i.name);for(let i=0;i<e.length;++i){let o=s.indexOf(e[i]);if(o!==-1&&(t[i]=r[o],n--),n===0)break}if(n===0)break}if(n>0){let a=[];throw t.forEach((r,s)=>{r==null&&a.push(e[s])}),new V(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(a)}`)}return t}predictLoop(e,t=32,n=!1){return P(()=>{let a=this.checkNumSamples(e);if(n)throw new Pe("Verbose predictLoop() is not implemented yet.");let r=db(a,t),s=this.outputs.map(i=>[]);for(let i=0;i<r.length;++i)P(()=>{let o=r[i][0],l=r[i][1],u=wp(e,o,l),p=[];if(Array.isArray(u))for(let c=0;c<u.length;++c)p.push({key:this.inputs[c],value:u[c]});else p.push({key:this.inputs[0],value:u});let d=new Xs(p);return Cp(this.outputs,d)}).forEach((o,l)=>s[l].push(o));return On(s.map(i=>Ze(i,0)))})}predict(e,t={}){let n=fN(e);xk(n,this.inputNames,this.feedInputShapes,!1);try{let a=t.batchSize==null?32:t.batchSize;return cb(a),this.predictLoop(n,a)}finally{za(n,e)}}predictOnBatch(e){xk(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,a){if(this.optimizer_==null)throw new Ba("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let r=[];for(let s=0;s<this.feedOutputShapes.length;++s){let i=this.feedOutputShapes[s];this.feedLossFns[s]===Eh?r.push(i.slice(0,i.length-1).concat([1])):r.push(i)}if(e=bk(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=bk(t,this.feedOutputNames,r,!1,"target"),fU(e,t,null),gU(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&a!=null&&a>0&&e[0].shape[0]%a!==0)throw new V(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${a}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,a,r=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,r,s);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(a!=null){let u=dN(a,this.outputNames);l=[];for(let p=0;p<u.length;++p)l.push(await hN(o[p],null,u[p]))}return[i,o,l]}testLoop(e,t,n,a=0,r){return P(()=>{let s=this.checkNumSamples(t,n,r,"steps"),i=[];if(a>0)throw new Pe("Verbose mode is not implemented yet.");if(r!=null)throw new Pe("steps mode in testLoop() is not implemented yet");{let o=db(s,n),l=je(qa(0,s));for(let u=0;u<o.length;++u){let p=o[u][0],d=o[u][1],c=Js(l,p,d-p),h=Bb(t,c),m=e(h);if(u===0)for(let f=0;f<m.length;++f)i.push(xe(0));for(let f=0;f<m.length;++f){let g=m[f];i[f]=X(i[f],z(d-p,g))}}for(let u=0;u<i.length;++u)i[u]=he(i[u],s)}return i})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let a=e[n],r=a;if(rk(e,a)>1){let s=rk(e.slice(0,n),a);r+=`_${s}`}t.push(r)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),r=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),s=[],i=()=>{let u=[];for(let h=0;h<this.inputs.length;++h)u.push({key:this.inputs[h],value:n[h]});let p=new Xs(u),d=Cp(this.outputs,p,{training:!0}),c;for(let h=0;h<this.lossFunctions.length;++h){let m=this.lossFunctions[h],f=m(a[h],d[h]);r[h]!=null&&(f=oU(f,r[h]));let g=Ct(f);t.push(g),h===0?c=f:c=X(c,f)}for(let h=0;h<this.metricsTensors.length;++h){let m;if(this.outputs.length>1&&h<this.outputs.length)m=t[h];else{let f=this.metricsTensors[h][0],g=this.metricsTensors[h][1];m=Ct(f(a[g],d[g]))}Gt(m),s.push(m)}return c=Ct(c),this.calculateLosses().forEach(h=>{c=X(c,h)}),c},o=this.collectedTrainableWeights.map(u=>u.read()),l=!0;return[this.optimizer_.minimize(i,l,o)].concat(s)}}makeTestFunction(){this.testFunction=e=>P(()=>{let t=[],n,a=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let l=0;l<this.inputs.length;++l)s.push({key:this.inputs[l],value:a[l]});let i=new Xs(s),o=Cp(this.outputs,i);for(let l=0;l<this.lossFunctions.length;++l){let u=this.lossFunctions[l],p=Ct(u(r[l],o[l]));l===0?n=p:n=X(n,p),t.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let u=this.metricsTensors[l][0],p=this.metricsTensors[l][1],d=Ct(u(r[p],o[p]));t.push(d)}return t})}async fit(e,t,n={}){if(this.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");this.isTraining=!0;let a,r,s,i,o,l,u,p,d;try{let c=n.batchSize==null?32:n.batchSize;cb(c);let h=!1,m=await this.standardizeUserData(e,t,n.sampleWeight,n.classWeight,h,c);a=m[0],r=m[1],d=m[2];let f=!1,g;if(n.validationData!=null&&n.validationData.length>0){if(f=!0,n.validationData.length===2)o=n.validationData[0],l=n.validationData[1];else throw n.validationData.length===3?new Pe("validationData including sample weights is not supported yet."):new V(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${n.validationData} is invalid.`);let C=!0,E=await this.standardizeUserData(o,l,null,null,C,c);u=E[0],p=E[1],g=u.concat(p)}else if(n.validationSplit!=null&&n.validationSplit>0&&n.validationSplit<1){f=!0;let C=Math.floor(a[0].shape[0]*(1-n.validationSplit)),E=a[0].shape[0];u=wp(a,C,E),s=a,a=wp(a,0,C),p=wp(r,C,E),i=r,r=wp(r,0,C),g=u.concat(p)}else n.validationSteps!=null&&(f=!0);let y=a.concat(r).concat(d);this.checkTrainableWeightsConsistency();let b=this.makeTrainFunction(),x=this.getDedupedMetricsNames(),w,I;f?(this.makeTestFunction(),w=this.testFunction,I=x.slice().concat(x.map(C=>"val_"+C))):(w=null,g=[],I=x.slice());let T=rN(n.callbacks,n.yieldEvery);return await this.fitLoop(b,y,x,c,n.epochs,n.verbose,T,w,g,n.shuffle,I,n.initialEpoch,null,null)}finally{this.isTraining=!1,za(a,e),za(r,t),za(s,e),za(i,t),za(u,o),za(p,l),d!=null&&_e(d)}}async fitLoop(e,t,n,a,r,s,i,o,l,u,p,d,c,h){a==null&&(a=32),r==null&&(r=1),u==null&&(u=!0),d==null&&(d=0);let m=!1;if(o!=null&&l!=null&&(m=!0),h!=null&&(m=!0,c==null))throw new V("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let f=this.checkNumSamples(t,a,c,"steps_per_epoch"),g;f!=null&&(g=qa(0,f)),s==null&&(s=1);let{callbackList:y,history:b}=sN(i,s,r,d,f,c,a,m,p);y.setModel(this),this.history=b,await y.onTrainBegin(),this.stopTraining_=!1;for(let x=d;x<r;++x){await y.onEpochBegin(x);let w={};if(c!=null)throw new Pe("stepsPerEpoch mode is not implemented yet.");{if(u==="batch")throw new Pe("batch shuffling is not implemneted yet");u&&v.shuffle(g);let I=je(g),T=db(f,a);for(let C=0;C<T.length;++C){let E={};if(await y.onBatchBegin(C,E),P(()=>{let $=T[C][0],R=T[C][1],F=Js(I,$,R-$);E.batch=C,E.size=R-$;let S=Bb(t,F),M=e(S);for(let B=0;B<n.length;++B){let U=n[B],G=M[B];E[U]=G,Gt(G)}if(C===T.length-1&&m){let B=this.testLoop(o,l,a);for(let U=0;U<n.length;++U){let G=n[U],j=B[U];Gt(j),w["val_"+G]=j}}}),await y.onBatchEnd(C,E),eN(E),this.stopTraining_)break}I.dispose()}if(await y.onEpochEnd(x,w),this.stopTraining_)break}return await y.onTrainEnd(),await this.history.syncData(),this.history}async fitDataset(e,t){return pU(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),a=n[0],r=n[1],s=this.makeTrainFunction()(a.concat(r)),i=[];for(let o of s){let l=await o.data();i.push(l[0])}return _e(s),za(n[0],e),za(n[1],t),On(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,a=n?this.trainableWeights:this.weights,r=this.getWeights(n);for(let s=0;s<a.length;++s)n&&!a[s].trainable||t.push({name:a[s].originalName,tensor:r[s]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=kh().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-kh().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=Ir(this.loss);else if(Array.isArray(this.loss)){for(let t of this.loss)if(typeof t!="string")throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map(t=>Ir(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let a of t)if(typeof n[a]=="string")e[a]=Ir(n[a]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Ir(Xd(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Ir(Xd(e)));{let e={};for(let t in this.metrics)e[t]=Ir(Xd(this.metrics[t]));return e}}getTrainingConfig(){return{loss:this.getLossIdentifiers(),metrics:this.getMetricIdentifiers(),optimizer_config:{class_name:this.optimizer.getClassName(),config:this.optimizer.getConfig()}}}loadTrainingConfig(e){if(e.weighted_metrics!=null)throw new Error("Loading weight_metrics is not supported yet.");if(e.loss_weights!=null)throw new Error("Loading loss_weights is not supported yet.");if(e.sample_weight_mode!=null)throw new Error("Loading sample_weight_mode is not supported yet.");let t=Xp(e.optimizer_config),n=Ga(t),a;if(typeof e.loss=="string")a=qs(e.loss);else if(Array.isArray(e.loss))a=e.loss.map(s=>qs(s));else if(e.loss!=null){a={};for(let s in e.loss)a[s]=qs(e.loss[s])}let r;if(Array.isArray(e.metrics))r=e.metrics.map(s=>qs(s));else if(e.metrics!=null){r={};for(let s in e.metrics)r[s]=qs(e.metrics[s])}this.compile({loss:a,metrics:r,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=Ht.getSaveHandlers(e);if(i.length===0)throw new V(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new V(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new V("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Ht.encodeWeights(this.getNamedWeights(t)),a=!1,r=null,s={modelTopology:this.toJSON(r,a),format:bU,generatedBy:`TensorFlow.js tfjs-layers v${mw}`,convertedBy:null};if(t!=null&&t.includeOptimizer&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await Ht.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=Ht.concatenateArrayBuffers([n.data,o])}return this.userDefinedMetadata!=null&&(mk(this.userDefinedMetadata,this.name,!0),s.userDefinedMetadata=this.userDefinedMetadata),s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){mk(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};_r.className="Model";ne.registerClass(_r);var gN=class extends _r{};gN.className="Functional";ne.registerClass(gN);async function xU(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let a=Xp(n),r=Ga(a,t);if(e.weightsManifest!=null){let s=await Ht.loadWeights(e.weightsManifest,e.pathPrefix,r.weights.map(o=>o.originalName)),i={};for(let o of r.weights)i[o.originalName]=s[o.originalName];r.loadWeights(i),_e(s)}return r}async function vU(e,t){if(t==null&&(t={}),typeof e=="string"){let n=Ht.getLoadHandlers(e,t);if(n.length===0)n.push(Ht.browserHTTPRequest(e,t));else if(n.length>1)throw new V(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return wU(e,void 0,t)}async function wU(e,t,n){if(n==null&&(n={}),e.load==null)throw new V("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let a=await e.load(),r=a.modelTopology;r.model_config!=null&&(r=r.model_config);let s=n.strict==null?!0:n.strict,i=a.weightData!=null&&a.weightSpecs!=null&&s,o=Ga(Xp(r),t,i),l=a.trainingConfig;if(l!=null&&o.loadTrainingConfig(l),a.userDefinedMetadata!=null&&o.setUserDefinedMetadata(a.userDefinedMetadata),a.weightData!=null){if(a.weightSpecs==null)throw new V("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:p}=kU(a.weightData,a.weightSpecs);o.loadWeights(u,s),o.optimizer!=null&&p.length>0&&await o.optimizer.setWeights(p),_e(u),_e(p.map(d=>d.tensor))}return o}function kU(e,t){let n=Ht.decodeWeights(e,t),a={},r=[];return t.forEach(s=>{s.group==="optimizer"?r.push({name:s.name,tensor:n[s.name]}):a[s.name]=n[s.name]}),{modelWeights:a,optimizerWeights:r}}var hl=class extends _r{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:lf("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(t=>t<0))throw new V(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof hl||e instanceof _r,n;if(t){if(n=e,n.outputs.length!==1)throw new V("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new V("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new V("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let a=YT({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(a)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new V(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new V("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=XT(this.outputs[0])}this.inboundNodes=[],new yf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:pi(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(a=>a.shape),outputShapes:this.outputs[0].shape})}else{let a=e.apply(this.outputs[0]);if(Array.isArray(a))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[a],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(Je(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new _r({inputs:this.inputs,outputs:this.outputs[0],name:this.name+"_model"}),this.model.trainable=this.trainable,this.supportsMasking=this.model.supportsMasking,this.inputLayers=this.model.inputLayers,this.inputLayersNodeIndices=this.model.inputLayersNodeIndices,this.inputLayersTensorIndices=this.model.inputLayersTensorIndices,this.outputLayers=this.model.outputLayers,this.outputLayersNodeIndices=this.model.outputLayersNodeIndices,this.outputLayersTensorIndices=this.model.outputLayersTensorIndices,this.nodesByDepth=this.model.nodesByDepth,this.containerNodes=this.model.containerNodes,this.outputNames=this.model.outputNames,this.inputNames=this.model.inputNames,this.built=!0}countParams(){return this.built||this.build(),super.countParams()}summary(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new Ba("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new Ba("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new Ba("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new Ba("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},a=!1){let r,s={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new V("Legacy serialization format not supported yet.");r=t}else v.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),r=t.layers,delete t.layers,s=t;let i=new e(s);if(!(i instanceof hl))throw new Pe(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of r){let l=Ga(o,void 0,a);a&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new V("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new V("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};hl.className="Sequential";ne.registerClass(hl);function IU(e){return new _r(e)}function SU(e){return new hl(e)}function yN(e){return YT(e)}function TU(e,t){Na.registerCallbackConstructor(e,t)}var Un=class extends ne.Serializable{getConfig(){return{}}},bN=class extends Un{apply(e,t=1){return X4(e,t)}};bN.className="elu";ne.registerClass(bN);var xN=class extends Un{apply(e){return jm(e)}};xN.className="selu";ne.registerClass(xN);var vN=class extends Un{apply(e){return Ke(e)}};vN.className="relu";ne.registerClass(vN);var wN=class extends Un{apply(e){return P(()=>_u(6,Ke(e)))}};wN.className="relu6";ne.registerClass(wN);var kN=class extends Un{apply(e){return e}};kN.className="linear";ne.registerClass(kN);var IN=class extends Un{apply(e){return da(e)}};IN.className="sigmoid";ne.registerClass(IN);var SN=class extends Un{apply(e){return Z4(e)}};SN.className="hardSigmoid";ne.registerClass(SN);var TN=class extends Un{apply(e){return yo(e)}};TN.className="softplus";ne.registerClass(TN);var NN=class extends Un{apply(e){return Y4(e)}};NN.className="softsign";ne.registerClass(NN);var CN=class extends Un{apply(e){return ii(e)}};CN.className="tanh";ne.registerClass(CN);var fw=class extends Un{apply(e,t=-1){return Xa(e,t)}};fw.className="softmax";ne.registerClass(fw);var _N=class extends Un{apply(e,t=-1){return zm(e,t)}};_N.className="logSoftmax";ne.registerClass(_N);var EN=class extends Un{apply(e,t=1){return P(()=>z(da(z(e,t)),e))}};EN.className="swish";ne.registerClass(EN);var AN=class extends Un{apply(e){return P(()=>z(e,ii(yo(e))))}};AN.className="mish";ne.registerClass(AN);function ls(e){return e.getClassName()}function hb(e,t={}){return Wc(e,ne.SerializationMap.getMap().classNameMap,t,"activation")}function us(e){if(e==null){let t={};return t.className="linear",t.config={},hb(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},hb(t)}else return e instanceof Un?e:hb(e)}function gw(e){if(e!=null&&typeof e!="object")throw new Error(`Argument to L1L2 regularizer's constructor is expected to be an object, but received: ${e}`)}var $N=class extends ne.Serializable{},Hc=class extends $N{constructor(e){super(),gw(e),this.l1=e==null||e.l1==null?.01:e.l1,this.l2=e==null||e.l2==null?.01:e.l2,this.hasL1=this.l1!==0,this.hasL2=this.l2!==0}apply(e){return P(()=>{let t=It([1]);return this.hasL1&&(t=X(t,fe(z(this.l1,Lt(e))))),this.hasL2&&(t=X(t,fe(z(this.l2,Vc(e))))),W(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Hc.className="L1L2";ne.registerClass(Hc);function NU(e){return gw(e),new Hc({l1:e!=null?e.l1:null,l2:0})}function CU(e){return gw(e),new Hc({l2:e!=null?e.l2:null,l1:0})}var vk={l1l2:"L1L2"};function ct(e){return Kv(e)}function wk(e,t={}){return Wc(e,ne.SerializationMap.getMap().classNameMap,t,"regularizer")}function Tt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in vk?vk[e]:e,config:{}};return wk(t)}else return e instanceof $N?e:wk(e)}var yw=class extends Ue{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Ce(e);let n=Ke(e);return this.maxValue!=null&&(n=tn(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};yw.className="ReLU";ne.registerClass(yw);var bw=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Ce(e);return Ac(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};bw.className="LeakyReLU";ne.registerClass(bw);var xw=class extends Ue{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=St(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=Tt(e.alphaRegularizer),this.alphaConstraint=Yt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new V(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=Je(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let a of this.sharedAxes)t[a-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let a=1;a<e.length;++a)n[a]=e[a];this.inputSpec=[new zt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=Ce(e),Mc(e,this.alpha.read())}getConfig(){let e={alphaInitializer:_t(this.alphaInitializer),alphaRegularizer:ct(this.alphaRegularizer),alphaConstraint:Xt(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};xw.className="PReLU";ne.registerClass(xw);var vw=class extends Ue{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new Pe(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Ce(e);return Su(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};vw.className="ELU";ne.registerClass(vw);var ww=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_THETA=1,e==null&&(e={}),this.theta=e.theta==null?this.DEFAULT_THETA:e.theta}call(e,t){let n=Ce(e);return z(n,ie(Nn(n,this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};ww.className="ThresholdedReLU";ne.registerClass(ww);var kw=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new fw().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=Ce(e);return this.softmax(n,this.axis)}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};kw.className="Softmax";ne.registerClass(kw);function tl(e,t,n){if(typeof e=="number")return pi(e,t);if(e.length!==t)throw new V(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let a=0;a<t;++a){let r=e[a];if(!H4(r))throw new V(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${r}`)}return e}function Ha(e,t,n,a,r=1){if(e==null)return e;let s=t+(t-1)*(r-1),i;return n==="same"?i=e:i=e-s+1,Math.floor((i+a-1)/a)}function ar(e,t,n,a){if(e==null)return null;if(a==="valid")e=e*t+os([n-t,0]);else if(a==="same")e=e*t;else throw new V(`Unsupport padding mode: ${a}.`);return e}function Iw(e,t){return P(()=>(Mt(t),t==="channelsFirst"?Ee(e,[0,2,3,1]):e))}function FN(e,t){return P(()=>(Mt(t),t==="channelsFirst"?Ee(e,[0,2,3,4,1]):e))}function _U(e,t,n,a=1,r="valid",s,i=1){return P(()=>{if(s==null&&(s=ja()),Mt(s),e.shape.length!==3)throw new V(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new V(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new V(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=Ee(e,[0,2,1])),r==="causal")throw new Pe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Fm(e,t,a,r==="same"?"same":"valid","NWC",i);return n!=null&&(o=Ya(o,n)),o})}function kk(e,t,n,a=[1,1],r="valid",s,i,o=null){return P(()=>{if(s==null&&(s=ja()),Mt(s),e.rank!==3&&e.rank!==4)throw new V(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new V(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=Iw(e,s);if(r==="causal")throw new Pe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=ul.conv2d({x:l,filter:t,strides:a,pad:r==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=Ee(l,[0,3,1,2])),l})}function EU(e,t,n,a=[1,1,1],r="valid",s,i){return P(()=>{if(s==null&&(s=ja()),Mt(s),e.rank!==4&&e.rank!==5)throw new V(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new V(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=FN(e,s);if(r==="causal")throw new Pe("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=Xx(o,t,a,r==="same"?"same":"valid","NDHWC",i),n!=null&&(o=Ya(o,n)),s==="channelsFirst"&&(o=Ee(o,[0,4,1,2,3])),o})}var Sw=class extends Ue{constructor(e,t){if(super(t),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Sw.verifyArgs(t),this.rank=e,en(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Pe(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=tl(t.kernelSize,e,"kernelSize"),this.strides=tl(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,xa(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Mt(this.dataFormat),this.activation=us(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=St(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Yt(t.biasConstraint),this.biasRegularizer=Tt(t.biasRegularizer),this.activityRegularizer=Tt(t.activityRegularizer),this.dilationRate=tl(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new V(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new V(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new V(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(nr("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!Xv(e.kernelSize,"number",1,3))throw new V(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:ls(this.activation),useBias:this.useBias,biasInitializer:_t(this.biasInitializer),biasRegularizer:ct(this.biasRegularizer),activityRegularizer:ct(this.activityRegularizer),biasConstraint:Xt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},qc=class extends Sw{constructor(e,t){super(e,t),this.kernel=null,qc.verifyArgs(t),this.filters=t.filters,en(this.filters,"filters"),this.kernelInitializer=St(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Yt(t.kernelConstraint),this.kernelRegularizer=Tt(t.kernelRegularizer)}build(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],a=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return P(()=>{e=Ce(e);let n,a=this.bias==null?null:this.bias.read(),r=WT(this.activation.getClassName());if(r!=null&&this.rank===2)n=kk(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate,r);else{if(this.rank===1)n=_U(e,this.kernel.read(),a,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=kk(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=EU(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Pe("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=Je(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let r=0;r<n.length;++r){let s=Ha(n[r],this.kernelSize[r],this.padding,this.strides[r],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[r]);t.push(s)}let a=[e[0]];return this.dataFormat==="channelsLast"?(a=a.concat(t),a.push(this.filters)):(a.push(this.filters),a=a.concat(t)),a}getConfig(){let e={filters:this.filters,kernelInitializer:_t(this.kernelInitializer),kernelRegularizer:ct(this.kernelRegularizer),kernelConstraint:Xt(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||typeof e.filters!="number"||e.filters<1)throw new V(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},jc=class extends qc{constructor(e){super(2,e),jc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!Xv(e.kernelSize,"number",1,2))throw new V(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};jc.className="Conv2D";ne.registerClass(jc);var Kc=class extends qc{constructor(e){super(3,e),Kc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new V(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};Kc.className="Conv3D";ne.registerClass(Kc);var Tw=class extends jc{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new V(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=Je(e),e.length!==4)throw new V("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],a=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",a,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new zt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return P(()=>{let n=Ce(e);if(n.shape.length!==4)throw new V(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let a=n.shape,r=a[0],s,i;this.dataFormat==="channelsFirst"?(s=2,i=3):(s=1,i=2);let o=a[s],l=a[i],u=this.kernelSize[0],p=this.kernelSize[1],d=this.strides[0],c=this.strides[1],h=ar(o,d,u,this.padding),m=ar(l,c,p,this.padding),f=[r,h,m,this.filters];this.dataFormat!=="channelsLast"&&(n=Ee(n,[0,2,3,1]));let g=Rm(n,this.kernel.read(),f,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(g=Ee(g,[0,3,1,2])),this.bias!=null&&(g=Ya(g,this.bias.read(),this.dataFormat)),this.activation!=null&&(g=this.activation.apply(g)),g})}computeOutputShape(e){e=Je(e);let t=e.slice(),n,a,r;this.dataFormat==="channelsFirst"?(n=1,a=2,r=3):(n=3,a=1,r=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[a]=ar(t[a],o,s,this.padding),t[r]=ar(t[r],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Tw.className="Conv2DTranspose";ne.registerClass(Tw);var Nw=class extends Kc{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new V(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=Je(e),e.length!==5)throw new V("Input should have rank 5; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],a=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",a,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new zt({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return P(()=>{let n=Ce(e);if(n.shape.length!==5)throw new V(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let a=n.shape,r=a[0],s,i,o;this.dataFormat==="channelsFirst"?(o=2,s=3,i=4):(o=1,s=2,i=3);let l=a[o],u=a[s],p=a[i],d=this.kernelSize[0],c=this.kernelSize[1],h=this.kernelSize[2],m=this.strides[0],f=this.strides[1],g=this.strides[2],y=ar(l,m,d,this.padding),b=ar(u,f,c,this.padding),x=ar(p,g,h,this.padding),w=[r,y,b,x,this.filters];this.dataFormat!=="channelsLast"&&(n=Ee(n,[0,2,3,4,1]));let I=Yx(n,this.kernel.read(),w,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(I=Ee(I,[0,4,1,2,3])),this.bias!==null&&(I=Ya(I,this.bias.read(),this.dataFormat)),this.activation!==null&&(I=this.activation.apply(I)),I})}computeOutputShape(e){e=Je(e);let t=e.slice(),n,a,r,s;this.dataFormat==="channelsFirst"?(n=1,a=2,r=3,s=4):(n=4,a=1,r=2,s=3);let i=this.kernelSize[0],o=this.kernelSize[1],l=this.kernelSize[2],u=this.strides[0],p=this.strides[1],d=this.strides[2];return t[n]=this.filters,t[a]=ar(t[a],u,i,this.padding),t[r]=ar(t[r],p,o,this.padding),t[s]=ar(t[s],d,l,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Nw.className="Conv3DTranspose";ne.registerClass(Nw);var RN=class extends qc{constructor(e,t){if(super(e,t),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new V("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new V("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new V(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=Tt(t.depthwiseRegularizer),this.depthwiseConstraint=Yt(t.depthwiseConstraint),this.pointwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=Tt(t.pointwiseRegularizer),this.pointwiseConstraint=Yt(t.pointwiseConstraint)}build(e){if(e=Je(e),e.length<this.rank+2)throw new V(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null||e[t]<0)throw new V(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],a=this.kernelSize.concat([n,this.depthMultiplier]),r=[];for(let i=0;i<this.rank;++i)r.push(1);r.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",a,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",r,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new zt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return P(()=>{e=Ce(e);let n;if(this.rank===1)throw new Pe("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Ee(e,[0,2,3,1])),n=Is(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Ya(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Ee(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=_t(this.depthwiseInitializer),e.pointwiseInitializer=_t(this.pointwiseInitializer),e.depthwiseRegularizer=ct(this.depthwiseRegularizer),e.pointwiseRegularizer=ct(this.pointwiseRegularizer),e.depthwiseConstraint=Xt(this.depthwiseConstraint),e.pointwiseConstraint=Xt(this.pointwiseConstraint),e}};RN.className="SeparableConv";var Cw=class extends RN{constructor(e){super(2,e)}};Cw.className="SeparableConv2D";ne.registerClass(Cw);var vf=class extends qc{constructor(e){super(1,e),vf.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!Xv(e.kernelSize,"number",1,1))throw new V(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};vf.className="Conv1D";ne.registerClass(vf);var _w=class extends Ue{constructor(e){super(e),typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return P(()=>{if(e=Ce(e),this.dataFormat==="channelsLast"){let n=Kd(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return Kd(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=Kd(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return Kd(n,this.cropping[1][0],e.shape[3]-this.cropping[1][1]-this.cropping[1][0],4)}})}getConfig(){let e={cropping:this.cropping,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};_w.className="Cropping2D";ne.registerClass(_w);var Ew=class extends Ue{constructor(e){super(e),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Mt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,V4(this.interpolation)}computeOutputShape(e){if(this.dataFormat==="channelsFirst"){let t=e[2]==null?null:this.size[0]*e[2],n=e[3]==null?null:this.size[1]*e[3];return[e[0],e[1],t,n]}else{let t=e[1]==null?null:this.size[0]*e[1],n=e[2]==null?null:this.size[1]*e[2];return[e[0],t,n,e[3]]}}call(e,t){return P(()=>{let n=Ce(e),a=n.shape;if(this.dataFormat==="channelsFirst"){n=Ee(n,[0,2,3,1]);let r=this.size[0]*a[2],s=this.size[1]*a[3],i=this.interpolation==="nearest"?Ea.resizeNearestNeighbor(n,[r,s]):Ea.resizeBilinear(n,[r,s]);return Ee(i,[0,3,1,2])}else{let r=this.size[0]*a[1],s=this.size[1]*a[2];return this.interpolation==="nearest"?Ea.resizeNearestNeighbor(n,[r,s]):Ea.resizeBilinear(n,[r,s])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat,interpolation:this.interpolation},t=super.getConfig();return Object.assign(e,t),e}};Ew.className="UpSampling2D";ne.registerClass(Ew);function AU(e,t,n=[1,1],a="valid",r,s){return P(()=>{r==null&&(r=ja()),Mt(r);let i=Iw(e,r);if(e.rank!==4)throw new V(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new V(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=ws(i,t,n,a==="same"?"same":"valid","NHWC",s),r==="channelsFirst"&&(i=Ee(i,[0,3,1,2])),i})}var Aw=class extends Sw{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=St(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Yt(e.depthwiseConstraint),this.depthwiseRegularizer=Tt(e.depthwiseRegularizer)}build(e){if(e=Je(e),e.length<4)throw new V(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new V(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],a=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",a,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return P(()=>{e=Ce(e);let n=AU(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Ya(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],a=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,r=Ha(t,this.kernelSize[0],this.padding,this.strides[0]),s=Ha(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],a,r,s]:[e[0],r,s,a]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=_t(this.depthwiseInitializer),e.depthwiseRegularizer=ct(this.depthwiseRegularizer),e.depthwiseConstraint=Xt(this.depthwiseRegularizer),e}};Aw.className="DepthwiseConv2D";ne.registerClass(Aw);function DN(e,t,n,a){if(Array.isArray(e)){if(t!=null||n!=null)throw new V("When inputs is an array, neither initialState or constants should be provided");a!=null&&(n=e.slice(e.length-a,e.length),e=e.slice(0,e.length-a)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function r(s){return s==null||Array.isArray(s)?s:[s]}return t=r(t),n=r(n),{inputs:e,initialState:t,constants:n}}function MN(e,t,n,a=!1,r,s,i=!1,o=!1){return P(()=>{let l=t.shape.length;if(l<3)throw new V(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(qa(2,l));if(t=Ee(t,u),s!=null)throw new Pe("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),r!=null&&(r=ie(ie(r,"bool"),"float32"),r.rank===l-1&&(r=Qt(r,-1)),r=Ee(r,u)),a&&(t=ga(t,0),r!=null&&(r=ga(r,0)));let p=[],d,c=n,h=t.shape[0],m=lt(t),f;r!=null&&(f=lt(r));for(let y=0;y<h;++y){let b=m[y],x=P(()=>e(b,c));if(r==null)d=x[0],c=x[1];else{let w=P(()=>{let I=f[y],T=pe(ea(I),I),C=X(z(x[0],I),z(c[0],T)),E=c.map(($,R)=>X(z(x[1][R],I),z($,T)));return{output:C,newStates:E}});d=w.output,c=w.newStates}o&&p.push(d)}let g;return o&&(g=Ft(p,1)),[d,g,c]})}var mr=class extends Ue{constructor(e){super(e);let t;if(e.cell==null)throw new V("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new If({cells:e.cell}):t=e.cell,t.stateSize==null)throw new V("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new zt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return qa(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){Ob(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],a;if(this.returnSequences?a=[e[0],e[1],n]:a=[e[0],n],this.returnState){let r=[];for(let s of t)r.push([e[0],s]);return[a].concat(r)}else return a}computeMask(e,t){return P(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let a=this.states.map(r=>null);return[n].concat(a)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;n<e;++n)t.push(null);return t}else return this.states_}set states(e){this.states_=e}build(e){if(this.numConstants!=null)throw new Pe("Constants support is not implemented in RNN yet.");Ob(e)&&(e=e[0]),e=e;let t=this.stateful?e[0]:null,n=e.slice(2);this.inputSpec[0]=new zt({shape:[t,null,...n]});let a=[e[0]].concat(e.slice(2));this.cell.build(a);let r;if(Array.isArray(this.cell.stateSize)?r=this.cell.stateSize:r=[this.cell.stateSize],this.stateSpec!=null){if(!v.arraysEqual(this.stateSpec.map(s=>s.shape[s.shape.length-1]),r))throw new V(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=r.map(s=>new zt({shape:[null,s]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){P(()=>{if(!this.stateful)throw new kr("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new V("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(a=>It([n,a])):this.states_=[It([n,this.cell.stateSize])];else if(e==null)_e(this.states_),this.keptStates!=null&&(_e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(a=>It([n,a])):this.states_[0]=It([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new V(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):_e(this.states_);for(let a=0;a<this.states_.length;++a){let r=e[a],s=Array.isArray(this.cell.stateSize)?this.cell.stateSize[a]:this.cell.stateSize,i=[n,s];if(!v.arraysEqual(r.shape,i))throw new V(`State ${a} is incompatible with layer ${this.name}: expected shape=${i}, received shape=${r.shape}`);this.states_[a]=r}}this.states_=this.states_.map(a=>Gt(a.clone()))})}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=DN(e,n,a,this.numConstants);e=r.inputs,n=r.initialState,a=r.constants;let s=[],i=[];if(n!=null){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let o of n)this.stateSpec.push(new zt({shape:o.shape}));i=i.concat(this.stateSpec)}if(a!=null&&(t.constants=a,s=s.concat(a),this.numConstants=a.length),s[0]instanceof Va){let o=[e].concat(s),l=this.inputSpec.concat(i),u=this.inputSpec;this.inputSpec=l;let p=super.apply(o,t);return this.inputSpec=u,p}else return super.apply(e,t)}call(e,t){return P(()=>{let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;e=Ce(e),r==null&&(this.stateful?r=this.states_:r=this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(r.length!==s)throw new V(`RNN Layer has ${s} state(s) but was passed ${r.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:a},o=MN((c,h)=>{let m=this.cell.call([c].concat(h),i);return[m[0],m.slice(1)]},e,r,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],u=o[1],p=o[2];this.stateful&&this.resetStates(p,a);let d=this.returnSequences?u:l;return this.returnState?[d].concat(p):d})}getInitialState(e){return P(()=>{let t=It(e.shape);return t=fe(t,[1,2]),t=Bc(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?Mb(t,[1,n]):t):this.cell.stateSize>1?[Mb(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===mr.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign(Object.assign(Object.assign({},n),e),t)}static fromConfig(e,t,n={}){let a=t.cell,r=Ga(a,n);return new e(Object.assign(t,{cell:r}))}};mr.className="RNN";ne.registerClass(mr);var Xc=class extends Ue{},wf=class extends Xc{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,en(this.units,"units"),this.activation=us(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=cl([1,os([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=cl([1,os([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=Je(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return P(()=>{if(e=e,e.length!==2)throw new V(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let a=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ps({ones:()=>ea(e),rate:this.dropout,training:a,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ps({ones:()=>ea(n),rate:this.recurrentDropout,training:a,dropoutFunc:this.dropoutFunc}));let r,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?r=or(z(e,s),this.kernel.read()):r=or(e,this.kernel.read()),this.bias!=null&&(r=Ya(r,this.bias.read())),i!=null&&(n=z(n,i));let o=X(r,or(n,this.recurrentKernel.read()));return this.activation!=null&&(o=this.activation.apply(o)),[o,o]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:ls(this.activation),useBias:this.useBias,kernelInitializer:_t(this.kernelInitializer),recurrentInitializer:_t(this.recurrentInitializer),biasInitializer:_t(this.biasInitializer),kernelRegularizer:ct(this.kernelRegularizer),recurrentRegularizer:ct(this.recurrentRegularizer),biasRegularizer:ct(this.biasRegularizer),activityRegularizer:ct(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),recurrentConstraint:Xt(this.recurrentConstraint),biasConstraint:Xt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign(Object.assign({},e),t)}};wf.className="SimpleRNNCell";ne.registerClass(wf);var $w=class extends mr{constructor(e){e.cell=new wf(e),super(e)}call(e,t){return P(()=>{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return new e(t)}};$w.className="SimpleRNN";ne.registerClass($w);var kf=class extends Xc{constructor(e){if(super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new V("GRUCell does not support reset_after parameter set to true.");this.units=e.units,en(this.units,"units"),this.activation=us(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=us(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=cl([1,os([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=cl([1,os([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=Je(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return P(()=>{if(e=e,e.length!==2)throw new V(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,a=e[1];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ps({ones:()=>ea(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ps({ones:()=>ea(a),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let r=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0<this.dropout&&this.dropout<1&&(e=z(e,r[0]));let u=or(e,this.kernel.read());this.useBias&&(u=Ya(u,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(a=z(a,s[0]));let p=this.recurrentKernel.read(),[d,c]=zn(p,[2*this.units,this.units],p.rank-1),h=or(a,d),[m,f,g]=zn(u,3,u.rank-1),[y,b]=zn(h,2,h.rank-1);i=this.recurrentActivation.apply(X(m,y)),o=this.recurrentActivation.apply(X(f,b));let x=or(z(o,a),c);l=this.activation.apply(X(g,x));let w=X(z(i,a),z(X(1,bt(i)),l));return[w,w]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:ls(this.activation),recurrentActivation:ls(this.recurrentActivation),useBias:this.useBias,kernelInitializer:_t(this.kernelInitializer),recurrentInitializer:_t(this.recurrentInitializer),biasInitializer:_t(this.biasInitializer),kernelRegularizer:ct(this.kernelRegularizer),recurrentRegularizer:ct(this.recurrentRegularizer),biasRegularizer:ct(this.biasRegularizer),activityRegularizer:ct(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),recurrentConstraint:Xt(this.recurrentConstraint),biasConstraint:Xt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign(Object.assign({},e),t)}};kf.className="GRUCell";ne.registerClass(kf);var Fw=class extends mr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new kf(e),super(e)}call(e,t){return P(()=>{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Fw.className="GRU";ne.registerClass(Fw);var Yc=class extends Xc{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,en(this.units,"units"),this.activation=us(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=us(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=cl([1,os([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=cl([1,os([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=Je(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let a;if(this.useBias){if(this.unitForgetBias){let r=this.biasInitializer,s=this.units;a=new(t=class extends Da{apply(i,o){let l=r.apply([s]),u=new pf().apply([s]),p=r.apply([s*2]);return ik(ik(l,u),p)}},t.className="CustomInit",t)}else a=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,a,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return P(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new V(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let a=e[1],r=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ps({ones:()=>ea(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ps({ones:()=>ea(a),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,u,p;0<this.dropout&&this.dropout<1&&(e=z(e,s[0]));let d=or(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(a=z(a,i[0])),d=X(d,or(a,this.recurrentKernel.read())),this.useBias&&(d=Ya(d,this.bias.read()));let[c,h,m,f]=zn(d,4,d.rank-1);o=this.recurrentActivation.apply(c),l=this.recurrentActivation.apply(h),u=X(z(l,r),z(o,this.activation.apply(m))),p=this.recurrentActivation.apply(f);let g=z(p,this.activation.apply(u));return[g,g,u]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:ls(this.activation),recurrentActivation:ls(this.recurrentActivation),useBias:this.useBias,kernelInitializer:_t(this.kernelInitializer),recurrentInitializer:_t(this.recurrentInitializer),biasInitializer:_t(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:ct(this.kernelRegularizer),recurrentRegularizer:ct(this.recurrentRegularizer),biasRegularizer:ct(this.biasRegularizer),activityRegularizer:ct(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),recurrentConstraint:Xt(this.recurrentConstraint),biasConstraint:Xt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign(Object.assign({},e),t)}};Yc.className="LSTMCell";ne.registerClass(Yc);var Rw=class extends mr{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Yc(e),super(e)}call(e,t){return P(()=>{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};Rw.className="LSTM";ne.registerClass(Rw);var If=class extends Xc{constructor(e){super(e),this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return P(()=>{e=e;let n=e.slice(1),a=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?a.push(n.splice(0,i.stateSize.length)):a.push(n.splice(0,1));a.reverse();let r=[],s;for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=a[i],i===0?s=[e[0]].concat(n):s=[s[0]].concat(n),s=o.call(s,t),r.push(s.slice(1))}n=[];for(let i of r.slice().reverse())n.push(...i);return[s[0]].concat(n)})}build(e){Ob(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,a)=>{Zs(`RNNCell_${a}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=a=>({className:a.getClassName(),config:a.getConfig()}),n={cells:this.cells.map(t)};return Object.assign(Object.assign({},e),n)}static fromConfig(e,t,n={}){let a=[];for(let r of t.cells)a.push(Ga(r,n));return new e({cells:a})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return Lb(e)}setWeights(e){let t=[];for(let n of this.cells){let a=n.weights.length,r=e.splice(a);for(let s=0;s<n.weights.length;++s)t.push([n.weights[s],r[s]])}rw(t)}};If.className="StackedRNNCells";ne.registerClass(If);function ps(e){let{ones:t,rate:n,training:a=!1,count:r=1,dropoutFunc:s}=e,i=()=>s!=null?s(t(),n):jT(t(),n),o=()=>Uc(i,t,a);return!r||r<=1?Gt(o().clone()):Array(r).fill(void 0).map(o).map(l=>Gt(l.clone()))}var $U=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]]);return n},PN=class extends mr{constructor(e){if(e.unroll)throw new Pe("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new Pe("It is not possible at the moment to stack convolutional cells.");super(e),this.inputSpec=[new zt({ndim:5})]}call(e,t){return P(()=>{if(this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new V("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return P(()=>{let{stateSize:t}=this.cell,n=e.shape,a=this.computeSingleOutputShape(n),r=[a[0],...a.slice(2)],s=It(r);return Array.isArray(t)?Array(t.length).fill(s):[s]})}resetStates(e,t=!1){P(()=>{if(!this.stateful)throw new kr("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,a=this.computeSingleOutputShape(n),r=[a[0],...a.slice(2)];if(n[0]==null)throw new V("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>It(r)):this.states_=[It(r)];else if(e==null)_e(this.states_),this.keptStates!=null&&(_e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>It(r)):this.states_[0]=It(r);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new V(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):_e(this.states_);for(let s=0;s<this.states_.length;++s){let i=e[s],o=r;if(!v.arraysEqual(i.shape,o))throw new V(`State ${s} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${i.shape}`);this.states_[s]=i}}this.states_=this.states_.map(s=>Gt(s.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:a,padding:r,strides:s,dilationRate:i}=this.cell,o=t==="channelsFirst",l=e[o?3:2],u=e[o?4:3],p=Ha(l,a[0],r,s[0],i[0]),d=Ha(u,a[1],r,s[1],i[1]);return[...e.slice(0,2),...o?[n,p,d]:[p,d,n]]}};PN.className="ConvRNN2D";var Sf=class extends Yc{constructor(e){let{filters:t,kernelSize:n,strides:a,padding:r,dataFormat:s,dilationRate:i}=e;super(Object.assign(Object.assign({},e),{units:t})),this.filters=t,en(this.filters,"filters"),this.kernelSize=tl(n,2,"kernelSize"),this.kernelSize.forEach(o=>en(o,"kernelSize")),this.strides=tl(a||1,2,"strides"),this.strides.forEach(o=>en(o,"strides")),this.padding=r||"valid",xa(this.padding),this.dataFormat=s||"channelsLast",Mt(this.dataFormat),this.dilationRate=tl(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>en(o,"dilationRate"))}build(e){var t;e=Je(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new V(`The channel dimension of the input should be defined. Found ${e[n]}`);let a=e[n],r=4,s=this.kernelSize.concat([a,this.filters*r]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*r]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let o;if(this.unitForgetBias){let l=this.biasInitializer,u=this.filters;o=new(t=class extends Da{apply(p,d){let c=l.apply([u]),h=Zn([u]),m=l.apply([u*2]);return Yv([c,h,m])}},t.className="CustomInit",t)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*r],null,o,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return P(()=>{if(e.length!==3)throw new V(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,a=e[0],r=e[1],s=e[2],i=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=ps({ones:()=>ea(a),rate:this.dropout,training:n,count:i,dropoutFunc:this.dropoutFunc}));let o=this.dropoutMask,l=(Z,J,ee)=>!J||!J[ee]?Z:z(J[ee],Z),u=l(a,o,0),p=l(a,o,1),d=l(a,o,2),c=l(a,o,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=ps({ones:()=>ea(r),rate:this.recurrentDropout,training:n,count:i,dropoutFunc:this.dropoutFunc}));let h=this.recurrentDropoutMask,m=l(r,h,0),f=l(r,h,1),g=l(r,h,2),y=l(r,h,3),b=3,[x,w,I,T]=zn(this.kernel.read(),i,b),[C,E,$,R]=this.useBias?zn(this.bias.read(),i):[null,null,null,null];u=this.inputConv(u,x,C,this.padding),p=this.inputConv(p,w,E,this.padding),d=this.inputConv(d,I,$,this.padding),c=this.inputConv(c,T,R,this.padding);let[F,S,M,B]=zn(this.recurrentKernel.read(),i,b);m=this.recurrentConv(m,F),f=this.recurrentConv(f,S),g=this.recurrentConv(g,M),y=this.recurrentConv(y,B);let U=this.recurrentActivation.apply(X(u,m)),G=this.recurrentActivation.apply(X(p,f)),j=X(z(G,s),z(U,this.activation.apply(X(d,g)))),K=z(this.recurrentActivation.apply(X(c,y)),this.activation.apply(j));return[K,K,j]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=$U(e,["units"]),a={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign(Object.assign({},n),a)}inputConv(e,t,n,a){let r=Rt(e,t,this.strides,a||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Ya(r,n,this.dataFormat):r}recurrentConv(e,t){return Rt(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Sf.className="ConvLSTM2DCell";ne.registerClass(Sf);var Dw=class extends PN{constructor(e){let t=new Sf(e);super(Object.assign(Object.assign({},e),{cell:t}))}static fromConfig(e,t){return new e(t)}};Dw.className="ConvLSTM2D";ne.registerClass(Dw);var Tf=class extends Ue{constructor(e){super(e),this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let a=0;a<this.noiseShape.length;++a)n.push(this.noiseShape[a]==null?t[a]:this.noiseShape[a]);return n}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);if(0<this.rate&&this.rate<1){let a=t.training==null?!1:t.training,r=this.getNoiseShape(n);return Uc(()=>jT(n,this.rate,r,this.seed),()=>n,a)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};Tf.className="Dropout";ne.registerClass(Tf);var Mw=class extends Tf{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};Mw.className="SpatialDropout1D";ne.registerClass(Mw);var Pw=class extends Ue{constructor(e){if(super(e),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,en(this.units,"units"),this.activation=us(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Yt(e.kernelConstraint),this.biasConstraint=Yt(e.biasConstraint),this.kernelRegularizer=Tt(e.kernelRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.activityRegularizer=Tt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=Je(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=Je(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e),a=WT(this.activation.getClassName()),r;return a!=null?r=or(n,this.kernel.read(),a,this.bias?this.bias.read():null):(r=or(n,this.kernel.read()),this.bias!=null&&(r=Ya(r,this.bias.read())),this.activation!=null&&(r=this.activation.apply(r))),r})}getConfig(){let e={units:this.units,activation:ls(this.activation),useBias:this.useBias,kernelInitializer:_t(this.kernelInitializer),biasInitializer:_t(this.biasInitializer),kernelRegularizer:ct(this.kernelRegularizer),biasRegularizer:ct(this.biasRegularizer),activityRegularizer:ct(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),biasConstraint:Xt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Pw.className="Dense";ne.registerClass(Pw);var Ow=class extends Ue{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=Je(e);for(let t of e.slice(1))if(t==null)throw new V(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],ns(e,1)]}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let a=[0];for(let r=2;r<n.rank;++r)a.push(r);a.push(1),n=Ee(n,a)}return K4(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Ow.className="Flatten";ne.registerClass(Ow);var Lw=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.activation=us(e.activation)}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);return this.activation.apply(n)})}getConfig(){let e={activation:ls(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Lw.className="Activation";ne.registerClass(Lw);var zw=class extends Ue{constructor(e){super(e),this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return P(()=>(e=Ce(e),q4(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};zw.className="RepeatVector";ne.registerClass(zw);var Ww=class extends Ue{constructor(e){super(e),this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",a=t.slice(),r=1,s=null;for(let o=0;o<a.length;++o){let l=a[o];if(this.isUnknown(l))if(s===null)s=o;else throw new V("Can only specifiy one unknown dimension.");else r*=l}let i=ns(e);if(s!==null){if(r===0||i%r!==0)throw new V(n);a[s]=i/r}else if(i!==r)throw new V(n);return a}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e),a=n.shape,r=a.slice(0,1).concat(this.fixUnknownDimension(a.slice(1),this.targetShape));return W(n,r)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};Ww.className="Reshape";ne.registerClass(Ww);var Bw=class extends Ue{constructor(e){if(super(e),e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=qa(1,e.dims.length+1);if(!v.arraysEqual(e.dims.slice().sort(),t))throw new Error("Invalid permutation `dims`: "+JSON.stringify(e.dims)+" `dims` must contain consecutive integers starting from 1.");this.dims=e.dims,this.dimsIncludingBatch=[0].concat(this.dims),this.inputSpec=[new zt({ndim:this.dims.length+1})]}computeOutputShape(e){e=Je(e);let t=e.slice();return this.dims.forEach((n,a)=>{t[a+1]=e[n]}),t}call(e,t){return Ee(Ce(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};Bw.className="Permute";ne.registerClass(Bw);var Vw=class extends Ue{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=Ce(e),a=-1;return Gp(li(n,this.maskValue),a)}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e),a=-1,r=!0,s=Gp(li(n,this.maskValue),a,r);return z(n,ie(s,n.dtype))})}};Vw.className="Masking";ne.registerClass(Vw);var Uw=class extends Ue{constructor(e){if(super(e),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(yt(e.inputLength))}this.inputDim=e.inputDim,en(this.inputDim,"inputDim"),this.outputDim=e.outputDim,en(this.outputDim,"outputDim"),this.embeddingsInitializer=St(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=Tt(e.embeddingsRegularizer),this.activityRegularizer=Tt(e.activityRegularizer),this.embeddingsConstraint=Yt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return P(()=>this.maskZero?(e=Ce(e),li(e,qe(e))):null)}computeOutputShape(e){if(e=Je(e),this.inputLength==null)return[...e,this.outputDim];let t=yt(this.inputLength);if(t.length!==e.length-1)throw new V(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let a=0;a<t.length;++a){let r=t[a],s=e[a+1];if(r!=null&&s!=null&&r!==s)throw new V(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);r==null&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);n.dtype!=="int32"&&(n=ir(n,"int32"));let a=qT(this.embeddings.read(),W(n,[n.size]));return W(a,Je(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:_t(this.embeddingsInitializer),embeddingsRegularizer:ct(this.embeddingsRegularizer),activityRegularizer:ct(this.activityRegularizer),embeddingsConstraint:Xt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};Uw.className="Embedding";ne.registerClass(Uw);var Io=class extends Ue{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Pe}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let a=0;a<t.length;++a){let r=e[e.length-t.length+a],s=t[a];if(r==null||s==null||r<0||s<0)n.push(null);else if(r===1)n.push(s);else if(s===1)n.push(r);else{if(r!==s)throw new V("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(r)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[Je(e)]),e=e,e.length<2)throw new V(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let r of e)r!=null&&r[0]!==null&&t.push(r[0]);if(t=ts(t),t.length>1)throw new V(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let r=1;r<e.length;++r){let s=e[r]==null?null:e[r].slice(1);n=this.computeElementwiseOpOutputShape(n,s)}let a=e.map(r=>r.length);e.indexOf(null)===-1&&ts(a).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return P(()=>{if(e=e,this.reshapeRequired){let n=[],a=e.map(r=>r.rank);if(a.indexOf(null)===-1){let r=os(a);for(let s of e){let i=s.rank;for(let o=0;o<r-i;++o)s=Bc(s,1);n.push(s)}return this.mergeFunction(n)}else{let r=!1;for(let o of e){let l=o.rank;if(l==null){let u=o.shape,p=u[0],d=u.slice(1).concat([p]),c=W(o,[p].concat(ns(u.slice(1))));c=Ee(c,[1,0]),c=W(c,d),n.push(c),r=!0}else if(l>1){let u=qa(1,l).concat([0]);n.push(Ee(o,u)),r=!0}else n.push(o)}let s=this.mergeFunction(n),i=s.rank;if(r){if(i==null){let o=s.shape,l=o.length,u=o[l-1],p=[u].concat(o.slice(0,o.length-1));s=W(Ee(W(s,[-1,u]),[1,0]),p)}else if(i>1){let o=[i-1].concat(qa(0,i-1));s=Ee(s,o)}}return s}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let a=1;a<e.length;++a){let r=e[a]==null?null:e[a].slice(1);t=this.computeElementwiseOpOutputShape(t,r)}let n=[];for(let a of e)a!=null&&a[0]!==null&&n.push(a[0]);return n=ts(n),n.length===1?t=n.concat(t):t=[null].concat(t),t}computeMask(e,t){return P(()=>{if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an Array");if(!Array.isArray(e))throw new V("`inputs` should be an Array");if(t.length!==e.length)throw new V(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(a=>a==null))return null;t=t.map(a=>a==null?a:Qt(a,0));let n=t[0];for(let a=1;a<t.length-1;++a)n=$a(n,t[a]);return n})}},Gw=class extends Io{constructor(e){super(e)}mergeFunction(e){return P(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=X(t,e[n]);return t})}};Gw.className="Add";ne.registerClass(Gw);var Hw=class extends Io{constructor(e){super(e)}mergeFunction(e){return P(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=z(t,e[n]);return t})}};Hw.className="Multiply";ne.registerClass(Hw);var qw=class extends Io{constructor(e){super(e)}mergeFunction(e){return P(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=X(t,e[n]);return z(1/e.length,t)})}};qw.className="Average";ne.registerClass(qw);var jw=class extends Io{constructor(e){super(e)}mergeFunction(e){return P(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=dr(t,e[n]);return t})}};jw.className="Maximum";ne.registerClass(jw);var Kw=class extends Io{constructor(e){super(e)}mergeFunction(e){return P(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=_u(t,e[n]);return t})}};Kw.className="Minimum";ne.registerClass(Kw);var Xw=class extends Io{constructor(e){super(e),this.DEFAULT_AXIS=-1,e==null&&(e={}),this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!(Array.isArray(e)&&Array.isArray(e[0]))||e.length===1)throw new V("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let a of e)if(a!=null){t=!1;break}if(t)return;let n=[];for(let a=0;a<e.length;++a){let r=e[a].slice();r.splice(this.axis,1);let s=!1;for(let i of n)if(v.arraysEqual(i,r)){s=!0;break}s||n.push(r)}if(n.length>1)throw new V("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return P(()=>Yv(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new V("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),a=this.axis<0?n.length+this.axis:this.axis;for(let r of t.slice(1)){if(n[a]==null||r[a]==null){n[a]=null;break}n[a]+=r[a]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new V("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new V(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return P(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let a=[];for(let s=0;s<e.length;++s)t[s]==null?a.push(ie(ea(e[s]),"bool")):t[s].rank<e[s].rank?a.push(Qt(t[s],-1)):a.push(t[s]);let r=Ze(a,this.axis);return $m(r,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};Xw.className="Concatenate";ne.registerClass(Xw);function kp(e,t){for(;e<0;)e+=t;return e}function FU(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new Pe("batchDot is not implemented for tensors of 4D or higher rank yet");if(v.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),v.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new Pe("batchDot is not implemented for complex64-type Tensors yet.");let a=e.shape.length,r=t.shape.length;n==null&&(n=[a-1,r-2]);let s=n;return P(()=>{let i;if(a>r){i=a-r;let l=[];for(let u=0;u<i;++u)l.push(1);t=W(t,t.shape.concat(l))}else if(r>a){i=r-a;let l=[];for(let u=0;u<i;++u)l.push(1);e=W(e,e.shape.concat(l))}else i=0;let o;if(e.shape.length===2&&t.shape.length===2)s[0]===s[1]?o=fe(z(e,t),s[0]):o=fe(z(Ee(e,[1,0]),t),s[1]);else{let l=s[0]!==e.shape.length-1,u=s[1]===t.shape.length-1;o=Re(e,t,l,u)}if(i>0){let l;a>r?l=a+r-3:l=a-1;let u=[];for(let p=l;p<l+i;++p)u.push(p);o=Ss(o,u)}return o.shape.length===1&&(o=Qt(o,1)),o})}var Yw=class extends Io{constructor(e){super(e),this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){v.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0],n=e[1];if(t.length>3||n.length>3)throw new Pe("Dot layer does not support tensors of 4D or higher rank yet.");let a=this.interpretAxes(t,n);if(t[a[0]]!==n[a[1]])throw new V(`Dimension incompatibility: ${t[a[0]]} !== ${n[a[1]]}`)}mergeFunction(e){if(e.length!==2)throw new V(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],a;return Array.isArray(this.axes)?a=this.axes.map((r,s)=>kp(r,e[s].shape.length)):a=[kp(this.axes,t.shape.length),kp(this.axes,n.shape.length)],this.normalize&&(t=_h(t,a[0]),n=_h(n,a[1])),FU(t,n,a)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[kp(this.axes,e.length),kp(this.axes,t.length)],n}computeOutputShape(e){v.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Pe("Dot layer does not support tensors of 4D or higher rank yet.");let a=this.interpretAxes(t,n);t.splice(a[0],1),n.splice(a[1],1),n.splice(0,1);let r=t.concat(n);return r.length===1&&r.push(1),r}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};Yw.className="Dot";ne.registerClass(Yw);var Zw=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);return Uc(()=>X(uf(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};Zw.className="GaussianNoise";ne.registerClass(Zw);var Jw=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return P(()=>{this.invokeCallHook(e,t);let n=Ce(e);return this.rate>0&&this.rate<1?Uc(()=>{let a=Math.sqrt(this.rate/(1-this.rate));return z(n,uf(n.shape,1,a))},()=>n,t.training||!1):n})}};Jw.className="GaussianDropout";ne.registerClass(Jw);var Qw=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Ce(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return P(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return Uc(()=>{let a=Ce(e),r=1.6732632423543772,s=1.0507009873554805,i=-r*s,o=$r(Eu(n),this.rate);o=ir(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,u=-l*i*this.rate,p=X(z(a,o),z(X(o,-1),i));return X(z(p,l),u)},()=>Ce(e),t.training||!1)}return e})}};Qw.className="AlphaDropout";ne.registerClass(Qw);function Yp(e,t,n,a,r,s=.001){let i;if(e.rank===2)i=zx(e,t,n,a,r,s);else if(e.rank===3)i=Wx(e,t,n,a,r,s);else if(e.rank===4)i=Bx(e,t,n,a,r,s);else throw new Pe(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function RU(e,t,n,a,r=.001){return P(()=>{let s=Rc(e,a),i=s.mean,o=s.variance;return[Yp(e,i,o,n,t,r),i,o]})}function DU(e,t,n,a,r=.001){return P(()=>{let s=Rc(e,a),i=s.mean,o=s.variance,l=[];for(let h of qa(0,e.rank))a.indexOf(h)!==-1?l.push(1):l.push(e.shape[h]);let u=W(i,l),p=W(o,l),d=t==null?null:W(t,l),c=n==null?null:W(n,l);return[Yp(e,u,p,c,d,r),i,o]})}function MU(e,t,n,a,r=.001){return v.arraysEqual(a.slice().sort(),qa(0,e.rank-1))?RU(e,t,n,a,r):DU(e,t,n,a,r)}var e0=class extends Ue{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.movingMeanInitializer=St(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=St(e.movingVarianceInitializer||"ones"),this.betaConstraint=Yt(e.betaConstraint),this.gammaConstraint=Yt(e.gammaConstraint),this.betaRegularizer=Tt(e.betaRegularizer),this.gammaRegularizer=Tt(e.gammaRegularizer)}build(e){e=Je(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new V(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new zt({ndim:e.length,axes:{[t]:n}})];let a=[n];this.scale&&(this.gamma=this.addWeight("gamma",a,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",a,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",a,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",a,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return P(()=>{let n=t.training==null?!1:t.training,a=Ce(e),r=a.shape,s=r.length,i=qa(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=pi(1,s);l[o]=r[o];let u=i.slice();u.sort();let p=!v.arraysEqual(u,qa(0,s).slice(0,s-1)),d=()=>{if(p){let g=W(this.movingMean.read(),l),y=W(this.movingVariance.read(),l),b=this.center?W(this.beta.read(),l):null,x=this.scale?W(this.gamma.read(),l):null;return Yp(a,g,y,b,x,this.epsilon)}else return Yp(a,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return d();let[c,h,m]=MU(a,this.gamma.read(),this.beta.read(),i,this.epsilon),f=(g,y,b)=>{P(()=>{let x=1-b,w=g.read(),I=z(pe(w,y),x);g.write(pe(w,I))})};return f(this.movingMean,h,this.momentum),f(this.movingVariance,m,this.momentum),c})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:_t(this.betaInitializer),gammaInitializer:_t(this.gammaInitializer),movingMeanInitializer:_t(this.movingMeanInitializer),movingVarianceInitializer:_t(this.movingVarianceInitializer),betaRegularizer:ct(this.betaRegularizer),gammaRegularizer:ct(this.gammaRegularizer),betaConstraint:Xt(this.betaConstraint),gammaConstraint:Xt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};e0.className="BatchNormalization";ne.registerClass(e0);var t0=class extends Ue{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.betaRegularizer=Tt(e.betaRegularizer),this.gammaRegularizer=Tt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=Je(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let r=0;r<this.axis.length;++r)this.axis[r]<0&&(this.axis[r]+=t);for(let r of this.axis)if(r<0||r>=t)throw new Error(`Invalid axis: ${r}`);if(this.axis.length!==ts(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(r=>e[r]),a=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,a):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,a):this.beta=null,this.built=!0}call(e,t){let n=Ce(e),a=n.shape,r=a.length;return P(()=>{let{mean:s,variance:i}=Rc(n,this.axis,!0),o=pi(1,r);for(let h of this.axis)o[h]=a[h];let l=h=>h!=null&&h.shape.length!==r?W(h,o):h,u=this.scale?l(this.gamma.read()):null,p=this.center?l(this.beta.read()):null,d=[],c=[];for(let h=0;h<r;++h)this.axis.indexOf(h)!==-1?(d.push(a[h]),c.push(1)):(d.push(1),c.push(a[h]));return s=Ln(s,d),i=Ln(i,d),u!=null&&(u=Ln(u,c)),p!=null&&(p=Ln(p,c)),Yp(n,s,i,p,u,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:_t(this.betaInitializer),gammaInitializer:_t(this.gammaInitializer),betaRegularizer:ct(this.betaRegularizer),gammaRegularizer:ct(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};t0.className="LayerNormalization";ne.registerClass(t0);function PU(e,t,n){return P(()=>{if(e.rank!==4)throw new V(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new V("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=ja()),n!=="channelsLast"&&n!=="channelsFirst")throw new V(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let a;return n==="channelsFirst"?a=[[0,0],[0,0],t[0],t[1]]:a=[[0,0],t[0],t[1],[0,0]],ba(e,a)})}var n0=class extends Ue{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?ja():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new V(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new V(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new V(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){e=Je(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return P(()=>PU(Ce(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};n0.className="ZeroPadding2D";ne.registerClass(n0);function Nf(e,t,n,a,r,s){return P(()=>{Mt(r),VT(s),xa(a),n==null&&(n=[1,1]),a==null&&(a="valid"),r==null&&(r=ja()),s==null&&(s="max"),e=Iw(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=Dt(e,t,n,o):i=ya(e,t,n,o),r==="channelsFirst"&&(i=Ee(i,[0,3,1,2])),i})}function ON(e,t,n,a,r,s){return P(()=>{Mt(r),VT(s),xa(a),n==null&&(n=[1,1,1]),a==null&&(a="valid"),r==null&&(r=ja()),s==null&&(s="max"),e=FN(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=dv(e,t,n,o):i=Lx(e,t,n,o),r==="channelsFirst"&&(i=Ee(i,[0,4,1,2,3])),i})}var LN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new V(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(en(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new V(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);en(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,xa(this.padding),this.inputSpec=[new zt({ndim:3})]}computeOutputShape(e){e=Je(e);let t=Ha(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return P(()=>{this.invokeCallHook(e,t),e=Bc(Ce(e),2);let n=this.poolingFunction(Ce(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Ss(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},a0=class extends LN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),Nf(e,t,n,a,r,"max")}};a0.className="MaxPooling1D";ne.registerClass(a0);var r0=class extends LN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),Nf(e,t,n,a,r,"avg")}};r0.className="AveragePooling1D";ne.registerClass(r0);var zN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new V(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];en(this.poolSize,"poolSize"),en(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Mt(this.dataFormat),xa(this.padding),this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Ha(t,this.poolSize[0],this.padding,this.strides[0]),n=Ha(n,this.poolSize[1],this.padding,this.strides[1]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n]:[e[0],t,n,e[3]]}call(e,t){return P(()=>(this.invokeCallHook(e,t),this.poolingFunction(Ce(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},s0=class extends zN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),Nf(e,t,n,a,r,"max")}};s0.className="MaxPooling2D";ne.registerClass(s0);var i0=class extends zN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),Nf(e,t,n,a,r,"avg")}};i0.className="AveragePooling2D";ne.registerClass(i0);var WN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new V(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];en(this.poolSize,"poolSize"),en(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Mt(this.dataFormat),xa(this.padding),this.inputSpec=[new zt({ndim:5})]}computeOutputShape(e){e=Je(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],a=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=Ha(t,this.poolSize[0],this.padding,this.strides[0]),n=Ha(n,this.poolSize[1],this.padding,this.strides[1]),a=Ha(a,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,a]:[e[0],t,n,a,e[4]]}call(e,t){return P(()=>(this.invokeCallHook(e,t),this.poolingFunction(Ce(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},o0=class extends WN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),ON(e,t,n,a,r,"max")}};o0.className="MaxPooling3D";ne.registerClass(o0);var l0=class extends WN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Mt(r),xa(a),ON(e,t,n,a,r,"avg")}};l0.className="AveragePooling3D";ne.registerClass(l0);var BN=class extends Ue{constructor(e){super(e),this.inputSpec=[new zt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Pe}},u0=class extends BN{constructor(e){super(e||{})}call(e,t){return P(()=>{let n=Ce(e);return Ct(n,1)})}};u0.className="GlobalAveragePooling1D";ne.registerClass(u0);var p0=class extends BN{constructor(e){super(e||{})}call(e,t){return P(()=>{let n=Ce(e);return ha(n,1)})}};p0.className="GlobalMaxPooling1D";ne.registerClass(p0);var VN=class extends Ue{constructor(e){super(e),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Mt(this.dataFormat),this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Pe}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},c0=class extends VN{call(e,t){return P(()=>{let n=Ce(e);return this.dataFormat==="channelsLast"?Ct(n,[1,2]):Ct(n,[2,3])})}};c0.className="GlobalAveragePooling2D";ne.registerClass(c0);var d0=class extends VN{call(e,t){return P(()=>{let n=Ce(e);return this.dataFormat==="channelsLast"?ha(n,[1,2]):ha(n,[2,3])})}};d0.className="GlobalMaxPooling2D";ne.registerClass(d0);var UN=class extends Ue{constructor(e){super(e),this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let a=t.layer,r=Ga(a,n);delete t.layer;let s={layer:r};return Object.assign(s,t),new e(s)}},h0=class extends UN{constructor(e){super(e),this.supportsMasking=!0}build(e){if(e=Je(e),e.length<3)throw new V(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=Je(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),a=e[1];return[n[0],a].concat(n.slice(1))}call(e,t){return P(()=>(e=Ce(e),MN((n,a)=>[Ce(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};h0.className="TimeDistributed";ne.registerClass(h0);function OU(e){wo(B4,"BidirectionalMergeMode",e)}var LU="concat",m0=class extends UN{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Ga(n),t.goBackwards=t.goBackwards!==!0;let a={};if(a.className=e.layer.getClassName(),a.config=t,this.backwardLayer=Ga(a),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?LU:e.mergeMode,OU(this.mergeMode),e.weights)throw new Pe("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,a,r;return this.returnState&&(r=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,a=[n]):this.mergeMode==null?a=[n,n.slice()]:a=[n],this.returnState?this.mergeMode==null?a.concat(r).concat(r.slice()):[n].concat(r).concat(r.slice()):On(a)}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=DN(e,n,a,this.numConstants);if(e=r.inputs,n=r.initialState,a=r.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&a==null)return super.apply(e,t);let s=[],i=[];if(n!=null){let l=n.length;if(l%2>0)throw new V("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let u=n.map(p=>new zt({shape:p.shape}));this.forwardLayer.stateSpec=u.slice(0,l/2),this.backwardLayer.stateSpec=u.slice(l/2),i.push(...u)}if(a!=null)throw new Pe("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof Va;for(let l of s)if(l instanceof Va!==o)throw new V("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let l=[e].concat(s),u=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=u;let d=super.apply(l,t);return this.inputSpec=p,d}else return super.apply(e,t)}call(e,t){return P(()=>{let n=t.initialState,a,r;if(n==null)a=this.forwardLayer.call(e,t),r=this.backwardLayer.call(e,t);else{let o=n.slice(0,n.length/2),l=n.slice(n.length/2);a=this.forwardLayer.call(e,Object.assign(t,{initialState:o})),r=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let s;this.returnState&&(Array.isArray(a)&&(s=a.slice(1).concat(r.slice(1))),a=a[0],r=r[0]),this.returnSequences&&(r=ga(r,1));let i;return this.mergeMode==="concat"?i=Yv([a,r]):this.mergeMode==="sum"?i=X(a,r):this.mergeMode==="ave"?i=z(.5,X(a,r)):this.mergeMode==="mul"?i=z(a,r):this.mergeMode==null&&(i=[a,r]),this.returnState?this.mergeMode==null?i.concat(s):[i].concat(s):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){Zs(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),Zs(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let a=this.forwardLayer.states.map(r=>null);return Array.isArray(n)?n.concat(a).concat(a):[n].concat(a).concat(a)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=Ga(t.layer);if(delete t.layer,t.numConstants!=null)throw new Pe("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let a=t;return a.layer=n,new e(a)}};m0.className="Bidirectional";ne.registerClass(m0);var f0=class extends Ue{constructor(e){super(e),this.scale=e.scale,e.offset?this.offset=e.offset:this.offset=0}getConfig(){let e={scale:this.scale,offset:this.offset},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return P(()=>(e=Ce(e),e.dtype!=="float32"&&(e=ir(e,"float32")),X(z(e,this.scale),this.offset)))}};f0.className="Rescaling";ne.registerClass(f0);var{resizeBilinear:zU,cropAndResize:WU}=Ea,g0=class extends Ue{constructor(e){super(e),this.height=e.height,this.width=e.width}centerCrop(e,t,n,a,r,s,i,o){return P(()=>{let l,u=!1,p=t/s,d=n/i,c=(a+t)/s,h=(r+n)/i,m=[p,d,c,h],f=[];e.rank===3?(u=!0,l=Ft([e])):l=e;for(let x=0;x<l.shape[0];x++)f.push(m);let g=fn(f,[f.length,4]),y=ui(0,f.length,1,"int32"),b=WU(l,g,y,[a,r],"nearest");return ir(u?Ce(lt(b)):b,o)})}upsize(e,t,n,a){return P(()=>{let r=zU(e,[t,n]);return ir(r,a)})}call(e,t){return P(()=>{let n=Ce(e),a=n.dtype,r=n.shape,s=r[r.length-3],i=r[r.length-2],o=0;s!==this.height&&(o=Math.floor((s-this.height)/2));let l=0;return i!==this.width&&(l=Math.floor((i-this.width)/2),l===0&&(l=1)),o>=0&&l>=0?this.centerCrop(n,o,l,this.height,this.width,s,i,a):this.upsize(e,this.height,this.width,a)})}getConfig(){let e={height:this.height,width:this.width},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){e=Je(e);let t=e.length-3,n=e.length-2;return e[t]=this.height,e[n]=this.width,e}};g0.className="CenterCrop";ne.registerClass(g0);function BU(e,t,n,a){let r=Ce(e);if(r.dtype!=="int32"&&(r=ir(r,"int32")),t==="int")return r;let s=r.shape;if(r.rank===0&&(r=Qt(r,-1)),t==="oneHot"&&r.shape[r.shape.length-1]!==1&&(r=Qt(r,-1)),r.rank>2)throw new V(`When outputMode is not int, maximum output rank is 2 Received outputMode ${t} and input shape ${s} which would result in output rank ${r.rank}.`);let i=["multiHot","oneHot"].includes(t),o=r,l;if(typeof a!="undefined"&&t==="count"?l=Ih(o,a,n,i):l=Ih(o,[],n,i),t!=="tfIdf")return l;if(a)return z(l,a);throw new V("When outputMode is 'tfIdf', weights must be provided.")}var y0=class extends Ue{constructor(e){super(e),this.numTokens=e.numTokens,e.outputMode?this.outputMode=e.outputMode:this.outputMode="multiHot"}getConfig(){let e={numTokens:this.numTokens,outputMode:this.outputMode},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){return e=Je(e),e==null?[this.numTokens]:this.outputMode==="oneHot"&&e[e.length-1]!==1?(e.push(this.numTokens),e):(e[e.length-1]=this.numTokens,e)}call(e,t){return P(()=>{e=Ce(e),e.dtype!=="int32"&&(e=ir(e,"int32"));let n;if(typeof t.countWeights!="undefined"){if(this.outputMode!=="count")throw new V(`countWeights is not used when outputMode !== count.
|
|
Received countWeights=${t.countWeights}`);n=Ce(t.countWeights)}let a=ha(e),r=rl(e),s=Nn(this.numTokens,a).bufferSync().get(0),i=$r(r,0).bufferSync().get(0);if(!(s&&i))throw new V(`Input values must be between 0 < values <= numTokens with numTokens=${this.numTokens}`);return BU(e,this.outputMode,this.numTokens,n)})}};y0.className="CategoryEncoding";ne.registerClass(y0);var VU=["bilinear","nearest"],Ik=new Set(VU),b0=class extends Ue{constructor(e){if(super(e),this.height=e.height,this.width=e.width,e.interpolation)if(Ik.has(e.interpolation))this.interpolation=e.interpolation;else throw new V(`Invalid interpolation parameter: ${e.interpolation} is not implemented`);else this.interpolation="bilinear";this.cropToAspectRatio=Boolean(e.cropToAspectRatio)}computeOutputShape(e){e=Je(e);let t=e[2];return[this.height,this.width,t]}getConfig(){let e={height:this.height,width:this.width,interpolation:this.interpolation,cropToAspectRatio:this.cropToAspectRatio},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return P(()=>{let n=[this.height,this.width];if(this.interpolation==="bilinear")return Ea.resizeBilinear(e,n,!this.cropToAspectRatio);if(this.interpolation==="nearest")return Ea.resizeNearestNeighbor(e,n,!this.cropToAspectRatio);throw new Error(`Interpolation is ${this.interpolation} but only ${[...Ik]} are supported`)})}};b0.className="Resizing";ne.registerClass(b0);function UU(e){return new $u(e)}function GU(e){return new vw(e)}function HU(e){return new yw(e)}function qU(e){return new bw(e)}function jU(e){return new xw(e)}function KU(e){return new kw(e)}function XU(e){return new ww(e)}function YU(e){return new vf(e)}function ZU(e){return new jc(e)}function JU(e){return new Tw(e)}function QU(e){return new Kc(e)}function eG(e){return new Nw(e)}function tG(e){return new Cw(e)}function nG(e){return new _w(e)}function aG(e){return new Ew(e)}function rG(e){return new Aw(e)}function sG(e){return new Lw(e)}function iG(e){return new Pw(e)}function oG(e){return new Tf(e)}function lG(e){return new Mw(e)}function uG(e){return new Ow(e)}function pG(e){return new zw(e)}function cG(e){return new Ww(e)}function dG(e){return new Bw(e)}function hG(e){return new Uw(e)}function mG(e){return new Gw(e)}function fG(e){return new qw(e)}function gG(e){return new Xw(e)}function yG(e){return new jw(e)}function bG(e){return new Kw(e)}function xG(e){return new Hw(e)}function vG(e){return new Yw(e)}function wG(e){return new e0(e)}function kG(e){return new t0(e)}function IG(e){return new n0(e)}function x0(e){return new r0(e)}function SG(e){return x0(e)}function TG(e){return x0(e)}function v0(e){return new i0(e)}function NG(e){return v0(e)}function CG(e){return v0(e)}function w0(e){return new l0(e)}function _G(e){return w0(e)}function EG(e){return w0(e)}function AG(e){return new u0(e)}function $G(e){return new c0(e)}function GN(e){return new p0(e)}function HN(e){return new d0(e)}function qN(e){return new a0(e)}function jN(e){return new s0(e)}function FG(e){return new o0(e)}function RG(e){return new Fw(e)}function DG(e){return new kf(e)}function MG(e){return new Rw(e)}function PG(e){return new Yc(e)}function OG(e){return new $w(e)}function LG(e){return new wf(e)}function zG(e){return new Dw(e)}function WG(e){return new Sf(e)}function BG(e){return new mr(e)}function VG(e){return new If(e)}function UG(e){return new m0(e)}function GG(e){return new h0(e)}var HG=GN,qG=HN,jG=qN,KG=jN;function XG(e){return new Zw(e)}function YG(e){return new Jw(e)}function ZG(e){return new Qw(e)}function JG(e){return new Vw(e)}function QG(e){return new f0(e)}function eH(e){return new g0(e)}function tH(e){return new b0(e)}function nH(e){return new y0(e)}var KN={};Ae(KN,{MAPE:()=>hH,MSE:()=>gH,binaryAccuracy:()=>aH,binaryCrossentropy:()=>rH,categoricalAccuracy:()=>iH,categoricalCrossentropy:()=>oH,cosineProximity:()=>pH,mape:()=>mH,meanAbsoluteError:()=>cH,meanAbsolutePercentageError:()=>dH,meanSquaredError:()=>fH,mse:()=>yH,precision:()=>lH,recall:()=>uH,sparseCategoricalAccuracy:()=>sH});function aH(e,t){return cw(e,t)}function rH(e,t){return lN(e,t)}function sH(e,t){return uN(e,t)}function iH(e,t){return dw(e,t)}function oH(e,t){return hw(e,t)}function lH(e,t){return oN(e,t)}function uH(e,t){return HV(e,t)}function pH(e,t){return pw(e,t)}function cH(e,t){return bf(e,t)}function dH(e,t){return Fu(e,t)}function hH(e,t){return Fu(e,t)}function mH(e,t){return Fu(e,t)}function fH(e,t){return ko(e,t)}function gH(e,t){return ko(e,t)}function yH(e,t){return ko(e,t)}var XN={};Ae(XN,{modelFromJSON:()=>xU});var YN={};Ae(YN,{l1:()=>xH,l1l2:()=>bH,l2:()=>vH});function bH(e){return new Hc(e)}function xH(e){return NU(e)}function vH(e){return CU(e)}var ZN=class extends dl{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof _r))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Yd(e,t){return e<t}function Sk(e,t){return e>t}var JN=class extends ZN{constructor(e){if(super(),e==null&&(e={}),e.restoreBestWeights)throw new Pe("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=Yd:this.mode==="max"?this.monitorFunc=Sk:this.monitor.indexOf("acc")!==-1?this.monitorFunc=Sk:this.monitorFunc=Yd,this.monitorFunc===Yd&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Yd?1/0:-1/0}async onEpochEnd(e,t){await jr(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function wH(e){return new JN(e)}var kH={earlyStopping:wH},IH=H();IH.registerFlag("KEEP_INTERMEDIATE_TENSORS",()=>!1,e=>{e&&console.warn("Keep intermediate tensors is ON. This will print the values of all intermediate tensors during model inference. Not all models support this mode. For details, check e2e/benchmarks/ model_config.js. This significantly impacts performance.")});var Ta;(function(e){e[e.DT_INVALID=0]="DT_INVALID",e[e.DT_FLOAT=1]="DT_FLOAT",e[e.DT_DOUBLE=2]="DT_DOUBLE",e[e.DT_INT32=3]="DT_INT32",e[e.DT_UINT8=4]="DT_UINT8",e[e.DT_INT16=5]="DT_INT16",e[e.DT_INT8=6]="DT_INT8",e[e.DT_STRING=7]="DT_STRING",e[e.DT_COMPLEX64=8]="DT_COMPLEX64",e[e.DT_INT64=9]="DT_INT64",e[e.DT_BOOL=10]="DT_BOOL",e[e.DT_QINT8=11]="DT_QINT8",e[e.DT_QUINT8=12]="DT_QUINT8",e[e.DT_QINT32=13]="DT_QINT32",e[e.DT_BFLOAT16=14]="DT_BFLOAT16",e[e.DT_QINT16=15]="DT_QINT16",e[e.DT_QUINT16=16]="DT_QUINT16",e[e.DT_UINT16=17]="DT_UINT16",e[e.DT_COMPLEX128=18]="DT_COMPLEX128",e[e.DT_HALF=19]="DT_HALF",e[e.DT_RESOURCE=20]="DT_RESOURCE",e[e.DT_VARIANT=21]="DT_VARIANT",e[e.DT_UINT32=22]="DT_UINT32",e[e.DT_UINT64=23]="DT_UINT64",e[e.DT_FLOAT_REF=101]="DT_FLOAT_REF",e[e.DT_DOUBLE_REF=102]="DT_DOUBLE_REF",e[e.DT_INT32_REF=103]="DT_INT32_REF",e[e.DT_UINT8_REF=104]="DT_UINT8_REF",e[e.DT_INT16_REF=105]="DT_INT16_REF",e[e.DT_INT8_REF=106]="DT_INT8_REF",e[e.DT_STRING_REF=107]="DT_STRING_REF",e[e.DT_COMPLEX64_REF=108]="DT_COMPLEX64_REF",e[e.DT_INT64_REF=109]="DT_INT64_REF",e[e.DT_BOOL_REF=110]="DT_BOOL_REF",e[e.DT_QINT8_REF=111]="DT_QINT8_REF",e[e.DT_QUINT8_REF=112]="DT_QUINT8_REF",e[e.DT_QINT32_REF=113]="DT_QINT32_REF",e[e.DT_BFLOAT16_REF=114]="DT_BFLOAT16_REF",e[e.DT_QINT16_REF=115]="DT_QINT16_REF",e[e.DT_QUINT16_REF=116]="DT_QUINT16_REF",e[e.DT_UINT16_REF=117]="DT_UINT16_REF",e[e.DT_COMPLEX128_REF=118]="DT_COMPLEX128_REF",e[e.DT_HALF_REF=119]="DT_HALF_REF",e[e.DT_RESOURCE_REF=120]="DT_RESOURCE_REF",e[e.DT_VARIANT_REF=121]="DT_VARIANT_REF",e[e.DT_UINT32_REF=122]="DT_UINT32_REF",e[e.DT_UINT64_REF=123]="DT_UINT64_REF"})(Ta||(Ta={}));var Tk;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(Tk||(Tk={}));var k0={};function SH(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};k0[e]=n}function QN(e){return k0[e]}function TH(e){delete k0[e]}function k(e,t,n,a,r){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return wn(t.inputNames[s.inputIndexStart],n,a,r);if(s.type==="tensors")return t.inputNames.slice(o,l).map(d=>wn(d,n,a,r));let u=wn(t.inputNames.slice(o)[0],n,a,r),p=u.dataSync();return s.type==="number"?p[0]:v.toNestedArray(u.shape,p)}let i=t.attrParams[e];return i&&i.value}function wn(e,t,n,a){let[r,s]=Xn(e);if(a!=null){let o=a.getHashTableHandleByName(r);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[Rh(r,o)]);return i!==void 0?t[Rh(r,i)][s]:void 0}function NH(e,t,n){return t[Rh(e,n.currentContextId)]}function Sr(e,t){let[n,a,r]=Xn(e);return[Rh(n,t&&t.currentContextId),a,r]}function Rh(e,t){return t?`${e}-${t}`:e}function Xn(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let n=t[0],a=t.length===3?t[1]:void 0,r=Number(t[t.length-1]);return[n,r,a]}function sh(e,t,n){let a=k("pad",e,t,n);if(a==="explicit"){a=k("explicitPaddings",e,t,n);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=a[s*2],r[s][1]=a[s*2+1];return r}return a}function Tr(e){return e.kept?e:sr(e)}var e2={};Ae(e2,{json:()=>CH});var CH=[{tfOpName:"Add",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddV2",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AddN",category:"arithmetic",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"BiasAdd",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"Sub",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"RealDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Div",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"DivNoNan",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorDiv",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mul",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Maximum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Minimum",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Pow",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SquaredDifference",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Mod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"FloorMod",category:"arithmetic",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],t2={};Ae(t2,{json:()=>_H});var _H=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],n2={};Ae(n2,{json:()=>EH});var EH=[{tfOpName:"EmptyTensorList",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"maxNumElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"LoopCond",category:"control",inputs:[{start:0,name:"pred",type:"tensor"}]},{tfOpName:"Switch",category:"control",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"pred",type:"tensor"}]},{tfOpName:"Merge",category:"control",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}]},{tfOpName:"Enter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"frame_name",name:"frameName",type:"string"},{tfName:"is_constant",name:"isConstant",type:"bool"}]},{tfOpName:"Exit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NextIteration",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayV3",category:"control",inputs:[{start:0,name:"size",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"dynamic_size",name:"dynamicSize",type:"bool"},{tfName:"clear_after_read",name:"clearAfterRead",type:"bool"},{tfName:"identical_element_shapes",name:"identicalElementShapes",type:"bool"},{tfName:"tensor_array_name",name:"name",type:"string"}]},{tfOpName:"TensorArrayWriteV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayReadV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"TensorArrayGatherV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape",name:"elementShape",type:"shape"}]},{tfOpName:"TensorArrayScatterV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"tensor",type:"tensor"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArrayConcatV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"element_shape_except0",name:"elementShapeExcept0",type:"shape",notSupported:!0}]},{tfOpName:"TensorArraySplitV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"tensor",type:"tensor"},{start:2,name:"lengths",type:"number[]"},{start:3,name:"flowIn",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"TensorArraySizeV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"},{start:1,name:"flowIn",type:"number"}]},{tfOpName:"TensorArrayCloseV3",category:"control",inputs:[{start:0,name:"tensorArrayId",type:"tensor"}]},{tfOpName:"StatelessIf",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"If",category:"control",inputs:[{start:0,name:"cond",type:"tensor"},{start:1,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"then_branch",name:"thenBranch",type:"func"},{tfName:"else_branch",name:"elseBranch",type:"func"}]},{tfOpName:"StatelessWhile",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"While",category:"control",inputs:[{start:0,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"cond",name:"cond",type:"func"},{tfName:"body",name:"body",type:"func"}]},{tfOpName:"TensorListScatter",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListScatterV2",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"},{start:3,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGather",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"indices",type:"number[]"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListGetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListSetItem",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"index",type:"number"},{start:2,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListReserve",category:"control",inputs:[{start:0,name:"elementShape",type:"shape"},{start:1,name:"numElements",type:"number"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListFromTensor",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListStack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"},{tfName:"num_elements",name:"numElements",type:"dtype"}]},{tfOpName:"TensorListSplit",category:"control",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"elementShape",type:"shape"},{start:2,name:"lengths",type:"number[]"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcat",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListConcatV2",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}],attrs:[{tfName:"element_shape",name:"elementShape",type:"shape"},{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPopBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"elementShape",type:"shape"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListPushBack",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"tensor",type:"tensor"}],attrs:[{tfName:"element_dtype",name:"elementDType",type:"dtype"}]},{tfOpName:"TensorListLength",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"}]},{tfOpName:"TensorListResize",category:"control",inputs:[{start:0,name:"tensorListId",type:"tensor"},{start:1,name:"size",type:"number"}]}],a2={};Ae(a2,{json:()=>AH});var AH=[{tfOpName:"AvgPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[],notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPoolWithArgmax",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"include_batch_in_index",name:"includeBatchInIndex",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"AvgPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MaxPool3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"ksize",name:"kernelSize",type:"number[]"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Conv1D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"stride",name:"stride",type:"number"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NWC"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"dilation",name:"dilation",type:"number",defaultValue:1}]},{tfOpName:"Conv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"useCudnnOnGpu",name:"useCudnnOnGpu",type:"bool"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"_FusedConv2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"use_cudnn_on_gpu",name:"useCudnnOnGpu",type:"bool",defaultValue:!0},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2}]},{tfOpName:"Conv2DBackpropInput",category:"convolution",inputs:[{start:2,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:0,name:"outputShape",type:"number[]"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]",notSupported:!0}]},{tfOpName:"DepthwiseConv2d",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"DepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"FusedDepthwiseConv2dNative",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]",defaultValue:[1,1,1,1]},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"explicit_paddings",name:"explicitPaddings",type:"number[]",defaultValue:[]}]},{tfOpName:"Conv3D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"padding",name:"pad",type:"string"},{tfName:"data_format",name:"dataFormat",type:"string",defaultValue:"NHWC"},{tfName:"dilations",name:"dilations",type:"number[]"}]},{tfOpName:"Dilation2D",category:"convolution",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"filter",type:"tensor"}],attrs:[{tfName:"strides",name:"strides",type:"number[]"},{tfName:"rates",name:"dilations",type:"number[]"},{tfName:"padding",name:"pad",type:"string"}]}],r2={};Ae(r2,{json:()=>$H});var $H=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],s2={};Ae(s2,{json:()=>FH});var FH=[{tfOpName:"NonMaxSuppressionV2",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV3",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}]},{tfOpName:"NonMaxSuppressionV4",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"T_threshold",name:"threshold",type:"dtype",notSupported:!0},{tfName:"pad_to_max_output_size",name:"padToMaxOutputSize",type:"bool"}]},{tfOpName:"NonMaxSuppressionV5",category:"dynamic",inputs:[{start:0,name:"boxes",type:"tensor"},{start:1,name:"scores",type:"tensor"},{start:2,name:"maxOutputSize",type:"number"},{start:3,name:"iouThreshold",type:"number"},{start:4,name:"scoreThreshold",type:"number"},{start:5,name:"softNmsSigma",type:"number"}]},{tfOpName:"Where",category:"dynamic",inputs:[{start:0,name:"condition",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ListDiff",category:"dynamic",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],i2={};Ae(i2,{json:()=>RH});var RH=[{tfOpName:"LowerBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"TopKV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"k",type:"number"}],attrs:[{tfName:"sorted",name:"sorted",type:"bool"}]},{tfOpName:"UpperBound",category:"evaluation",inputs:[{start:0,name:"sortedSequence",type:"tensor"},{start:1,name:"values",type:"tensor"}]},{tfOpName:"Unique",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"UniqueV2",category:"evaluation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]}],o2={};Ae(o2,{json:()=>DH});var DH=[{tfOpName:"PlaceholderWithDefault",category:"graph",inputs:[{start:0,name:"default",type:"tensor"}],attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Placeholder",category:"graph",attrs:[{tfName:"shape",name:"shape",type:"shape"},{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"Const",category:"graph"},{tfOpName:"Identity",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IdentityN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Snapshot",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Rank",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Size",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"Shape",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"ShapeN",category:"graph",inputs:[{start:0,end:0,name:"x",type:"tensors"}]},{tfOpName:"Print",category:"graph",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"data",type:"tensors"}],attrs:[{tfName:"message",name:"message",type:"string"},{tfName:"first_n",name:"firstN",type:"number",notSupported:!0},{tfName:"summarize",name:"summarize",type:"number",defaultValue:3}]},{tfOpName:"NoOp",category:"graph",inputs:[]},{tfOpName:"StopGradient",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"FakeQuantWithMinMaxVars",category:"graph",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"min",name:"min",type:"number"},{tfName:"max",name:"max",type:"number"}]}],l2={};Ae(l2,{json:()=>MH});var MH=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],u2={};Ae(u2,{json:()=>PH});var PH=[{tfOpName:"ResizeBilinear",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ResizeNearestNeighbor",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"size",type:"number[]"}],attrs:[{tfName:"align_corners",name:"alignCorners",type:"bool"},{tfName:"half_pixel_centers",name:"halfPixelCenters",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"CropAndResize",category:"image",inputs:[{start:0,name:"image",type:"tensor"},{start:1,name:"boxes",type:"tensor"},{start:2,name:"boxInd",type:"tensor"},{start:3,name:"cropSize",type:"number[]"}],attrs:[{tfName:"method",name:"method",type:"string"},{tfName:"extrapolation_value",name:"extrapolationValue",type:"number"}]},{tfOpName:"ImageProjectiveTransformV3",category:"image",inputs:[{start:0,name:"images",type:"tensor"},{start:1,name:"transforms",type:"tensor"},{start:2,name:"outputShape",type:"number[]"},{start:3,name:"fillValue",type:"number"}],attrs:[{tfName:"interpolation",name:"interpolation",type:"string"},{tfName:"fill_mode",name:"fillMode",type:"string"}]}],p2={};Ae(p2,{json:()=>OH});var OH=[{tfOpName:"Equal",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"NotEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Greater",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"GreaterEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Less",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LessEqual",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalAnd",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalNot",category:"logical",inputs:[{start:0,name:"a",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LogicalOr",category:"logical",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Select",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SelectV2",category:"logical",inputs:[{start:0,name:"condition",type:"tensor"},{start:1,name:"a",type:"tensor"},{start:2,name:"b",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],c2={};Ae(c2,{json:()=>LH});var LH=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]}],d2={};Ae(d2,{json:()=>zH});var zH=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],h2={};Ae(h2,{json:()=>WH});var WH=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],m2={};Ae(m2,{json:()=>BH});var BH=[{tfOpName:"ConcatV2",category:"slice_join",inputs:[{start:0,end:-1,name:"tensors",type:"tensors"},{start:-1,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"Concat",category:"slice_join",inputs:[{start:1,end:0,name:"tensors",type:"tensors"},{start:0,name:"axis",type:"number"}],attrs:[{tfName:"N",name:"n",type:"number",defaultValue:2}]},{tfOpName:"GatherV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"axis",type:"number",defaultValue:0}],attrs:[{tfName:"batch_dims",name:"batchDims",type:"number",defaultValue:0}]},{tfOpName:"Gather",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",notSupported:!0}]},{tfOpName:"Reverse",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"dims",type:"bool[]"}]},{tfOpName:"ReverseV2",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}]},{tfOpName:"Slice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"size",type:"number[]"}]},{tfOpName:"StridedSlice",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"begin",type:"number[]"},{start:2,name:"end",type:"number[]"},{start:3,name:"strides",type:"number[]"}],attrs:[{tfName:"begin_mask",name:"beginMask",type:"number",defaultValue:0},{tfName:"end_mask",name:"endMask",type:"number",defaultValue:0},{tfName:"new_axis_mask",name:"newAxisMask",type:"number",defaultValue:0},{tfName:"ellipsis_mask",name:"ellipsisMask",type:"number",defaultValue:0},{tfName:"shrink_axis_mask",name:"shrinkAxisMask",type:"number",defaultValue:0}]},{tfOpName:"Pack",category:"slice_join",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0}]},{tfOpName:"Unpack",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"}],attrs:[{tfName:"axis",name:"axis",type:"number",defaultValue:0},{tfName:"num",name:"num",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Tile",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"reps",type:"number[]"}]},{tfOpName:"Split",category:"slice_join",inputs:[{start:0,name:"axis",type:"number",defaultValue:0},{start:1,name:"x",type:"tensor"}],attrs:[{tfName:"num_split",name:"numOrSizeSplits",type:"number",defaultValue:1}]},{tfOpName:"SplitV",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"numOrSizeSplits",type:"number[]"},{start:2,name:"axis",type:"number",defaultValue:0}]},{tfOpName:"ScatterNd",category:"slice_join",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"shape",type:"number[]"}]},{tfOpName:"GatherNd",category:"slice_join",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"indices",type:"tensor"}]},{tfOpName:"SparseToDense",category:"slice_join",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!1,notSupported:!0}]}],f2={};Ae(f2,{json:()=>VH});var VH=[{tfOpName:"SparseFillEmptyRows",category:"sparse",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"values",type:"tensor"},{start:2,name:"denseShape",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}]},{tfOpName:"SparseReshape",category:"sparse",inputs:[{start:0,name:"inputIndices",type:"tensor"},{start:1,name:"inputShape",type:"tensor"},{start:2,name:"newShape",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"SparseSegmentMean",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]},{tfOpName:"SparseSegmentSum",category:"sparse",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"segmentIds",type:"tensor"}]}],g2={};Ae(g2,{json:()=>UH});var UH=[{tfOpName:"FFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"IFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"RFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]},{tfOpName:"IRFFT",category:"spectral",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"fft_length",type:"number",notSupported:!0}]}],y2={};Ae(y2,{json:()=>GH});var GH=[{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],b2={};Ae(b2,{json:()=>HH});var HH=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],Nk=class{constructor(){let e=[e2,t2,n2,a2,r2,s2,i2,o2,l2,u2,p2,c2,d2,h2,m2,f2,g2,y2,b2],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,a)=>(n[a.tfOpName]=a,n),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let n=e.node,a=[],r=[],s=[],i=n.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?a.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let d=Object.keys(i);d.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[b,,x]=Sr(g),w=i[b];if(w.outputs!=null){let I=w.outputs.indexOf(x);if(I!==-1){let T=`${b}:${I}`;f.inputNames[y]=T}}f.inputs.push(w),w.children.push(f)})}),Object.keys(p).length===0?d.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(p).forEach(m=>{let[f]=Sr(m),g=i[f];g!=null&&(g.signatureKey=p[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=Sr(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=a;let c={};e.library!=null&&e.library.function!=null&&(c=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:a,signature:t,functions:c};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=QN(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(a=>a.startsWith("^")?a.slice(1):a),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((a,r)=>(a[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},a),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((a,r)=>{let s=r.type,i;switch(r.type){case"string":i=Ub(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Ub(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=Yb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Yb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=Hb(e.attr,r.tfName,r.defaultValue||0),i===void 0&&r.tfDeprecatedName&&(i=Hb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=Xb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Xb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=Gb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Gb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=Jb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Jb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=Kb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Kb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=Zb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Zb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=qb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=qb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=jb(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=jb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=Ck(e.attr,r.tfName,r.defaultValue),i===void 0&&r.tfDeprecatedName&&(i=Ck(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return a[r.name]={value:i,type:s},a},{})),n}mapFunction(e){let t=e.nodeDef,n=[],a=[],r={};t!=null&&(r=t.reduce((u,p)=>(u[p.name]=this.mapNode(p),p.op==="Const"&&a.push(u[p.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[p]=Sr(u.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:I0(u.type),type:"dtype"}},children:[]};d.signatureKey=u.name,s.push(d),r[p]=d}),Object.keys(r).forEach(u=>{let p=r[u];p.inputNames.forEach((d,c)=>{let[h,,m]=Sr(d),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;p.inputNames[c]=y}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,d]=Sr(o[u.name]),c=r[p];c!=null&&(c.defaultOutput=d,i.push(c))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:a,placeholders:n,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function qH(e){let t=H().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function x2(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):qH(e);return t?n:n.toLowerCase()}function Ub(e,t,n,a=!1){let r=e[t];return r!=null?x2(r.s,a):n}function Gb(e,t,n){let a=e[t];return a?a.b:n}function Hb(e,t,n){let a=e[t]||{},r=a.i!=null?a.i:a.f!=null?a.f:n;return typeof r=="number"?r:parseInt(r,10)}function I0(e){switch(typeof e=="string"&&(e=Ta[e]),e){case Ta.DT_FLOAT:case Ta.DT_HALF:return"float32";case Ta.DT_INT32:case Ta.DT_INT64:case Ta.DT_INT8:case Ta.DT_UINT8:return"int32";case Ta.DT_BOOL:return"bool";case Ta.DT_DOUBLE:return"float32";case Ta.DT_STRING:return"string";default:return null}}function Ck(e,t,n){let a=e[t];return a&&a.func?a.func.name:n}function qb(e,t,n){let a=e[t];return a&&a.type?I0(a.type):n}function jb(e,t,n){let a=e[t];return a&&a.list&&a.list.type?a.list.type.map(r=>I0(r)):n}function v2(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function Kb(e,t,n){let a=e[t];return a&&a.shape?v2(a.shape):n}function Xb(e,t,n){let a=e[t];return a?((a.list.f&&a.list.f.length?a.list.f:a.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):n}function Yb(e,t,n,a=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>x2(s,a)):n}function Zb(e,t,n){let a=e[t];return a&&a.list&&a.list.shape?a.list.shape.map(r=>v2(r)):n}function Jb(e,t,n){let a=e[t];return a&&a.list&&a.list.b?a.list.b:n}var jH=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(a=>this.getInput(a)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((a,r)=>(a[r]=this.getAttr(r),a),{}))}getInput(e){return wn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return wn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return Hb(this.node.rawAttrs,e,t);if(n.s!=null)return Ub(this.node.rawAttrs,e,t);if(n.b!=null)return Gb(this.node.rawAttrs,e,t);if(n.shape!=null)return Kb(this.node.rawAttrs,e,t);if(n.type!=null)return qb(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return Xb(this.node.rawAttrs,e,t);if(n.list.s!=null)return Yb(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Zb(this.node.rawAttrs,e,t);if(n.list.b!=null)return Jb(this.node.rawAttrs,e,t);if(n.list.type!=null)return jb(this.node.rawAttrs,e,t)}return t}},an={};Ae(an,{OP_SCOPE_SUFFIX:()=>Ix,abs:()=>Lt,acos:()=>Ex,acosh:()=>Ax,add:()=>X,addN:()=>tS,all:()=>$m,any:()=>Gp,argMax:()=>ri,argMin:()=>$x,asin:()=>Fx,asinh:()=>Rx,atan:()=>Dx,atan2:()=>Mx,atanh:()=>Px,avgPool:()=>ya,avgPool3d:()=>Lx,basicLSTMCell:()=>sS,batchNorm:()=>vs,batchNorm2d:()=>zx,batchNorm3d:()=>Wx,batchNorm4d:()=>Bx,batchToSpaceND:()=>Cc,bincount:()=>Vx,booleanMaskAsync:()=>HS,broadcastArgs:()=>iS,broadcastTo:()=>Ys,buffer:()=>Le,cast:()=>ie,ceil:()=>Ux,clipByValue:()=>tn,clone:()=>sr,complex:()=>Er,concat:()=>Ze,concat1d:()=>Gx,concat2d:()=>Hx,concat3d:()=>qx,concat4d:()=>jx,conv1d:()=>Fm,conv2d:()=>Rt,conv2dTranspose:()=>Rm,conv3d:()=>Xx,conv3dTranspose:()=>Yx,cos:()=>_c,cosh:()=>Dm,cosineWindow:()=>tf,cumprod:()=>jp,cumsum:()=>Mm,denseBincount:()=>Ih,depthToSpace:()=>Zx,depthwiseConv2d:()=>ws,diag:()=>lS,dilation2d:()=>Jx,div:()=>he,divNoNan:()=>Qx,dot:()=>ev,dropout:()=>Fv,einsum:()=>pS,elu:()=>Su,enclosingPowerOfTwo:()=>Rv,equal:()=>Jn,erf:()=>tv,euclideanNorm:()=>rv,exp:()=>yn,expandDims:()=>Qt,expm1:()=>sv,eye:()=>Pm,fft:()=>Oc,fill:()=>bn,floor:()=>Nu,floorDiv:()=>Am,fused:()=>ul,gather:()=>Cu,gatherND:()=>YS,greater:()=>Nn,greaterEqual:()=>$r,ifft:()=>ll,imag:()=>Ec,image:()=>Ea,inTopKAsync:()=>ZS,irfft:()=>Zm,isFinite:()=>iv,isInf:()=>ov,isNaN:()=>lv,leakyRelu:()=>Ac,less:()=>Om,lessEqual:()=>ks,linalg:()=>Pv,linspace:()=>fS,localResponseNormalization:()=>uv,log:()=>Qn,log1p:()=>$c,logSigmoid:()=>pv,logSoftmax:()=>zm,logSumExp:()=>Wm,logicalAnd:()=>$a,logicalNot:()=>Fc,logicalOr:()=>Bm,logicalXor:()=>cv,losses:()=>uT,lowerBound:()=>yS,matMul:()=>Re,max:()=>ha,maxPool:()=>Dt,maxPool3d:()=>dv,maxPoolWithArgmax:()=>bS,maximum:()=>dr,mean:()=>Ct,meshgrid:()=>xS,min:()=>rl,minimum:()=>_u,mirrorPad:()=>hv,mod:()=>mv,moments:()=>Rc,movingAverage:()=>qS,mul:()=>z,multiRNNCell:()=>vS,multinomial:()=>wS,neg:()=>bt,norm:()=>Tu,notEqual:()=>li,oneHot:()=>sl,ones:()=>Zn,onesLike:()=>ea,op:()=>L,outerProduct:()=>kS,pad:()=>ba,pad1d:()=>IS,pad2d:()=>SS,pad3d:()=>TS,pad4d:()=>NS,pool:()=>fv,pow:()=>Ar,prelu:()=>Mc,print:()=>Cx,prod:()=>gv,raggedGather:()=>CS,raggedRange:()=>_S,raggedTensorToTensor:()=>ES,rand:()=>AS,randomGamma:()=>DS,randomNormal:()=>Um,randomStandardNormal:()=>MS,randomUniform:()=>Eu,range:()=>ui,real:()=>il,reciprocal:()=>wv,relu:()=>Ke,relu6:()=>Gm,reshape:()=>W,reverse:()=>ga,reverse1d:()=>PS,reverse2d:()=>OS,reverse3d:()=>LS,reverse4d:()=>zS,rfft:()=>Lc,round:()=>Hm,rsqrt:()=>qm,scalar:()=>xe,scatterND:()=>KS,searchSorted:()=>Vm,selu:()=>jm,separableConv2d:()=>Is,setdiff1dAsync:()=>WS,sigmoid:()=>da,sign:()=>kv,signal:()=>lT,sin:()=>Km,sinh:()=>Xm,slice:()=>Ve,slice1d:()=>Pc,slice2d:()=>Ym,slice3d:()=>bo,slice4d:()=>ol,softmax:()=>Xa,softplus:()=>yo,spaceToBatchND:()=>Dc,sparse:()=>pT,sparseToDense:()=>XS,spectral:()=>oT,split:()=>zn,sqrt:()=>pn,square:()=>it,squaredDifference:()=>Jm,squeeze:()=>Ss,stack:()=>Ft,step:()=>xo,stridedSlice:()=>Iv,string:()=>cT,sub:()=>pe,sum:()=>fe,tan:()=>Sv,tanh:()=>ii,tensor:()=>fn,tensor1d:()=>je,tensor2d:()=>Aa,tensor3d:()=>zc,tensor4d:()=>Ra,tensor5d:()=>BS,tensor6d:()=>VS,tile:()=>Ln,topk:()=>Tv,transpose:()=>Ee,truncatedNormal:()=>Qm,unique:()=>Nv,unsortedSegmentSum:()=>ef,unstack:()=>lt,upperBound:()=>US,variable:()=>Cv,where:()=>gn,whereAsync:()=>_v,zeros:()=>It,zerosLike:()=>qe});var KH=(e,t,n,a=an)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[a.add(k("a",e,t,n),k("b",e,t,n))];case"AddN":return[a.addN(k("tensors",e,t,n))];case"FloorMod":case"Mod":return[a.mod(k("a",e,t,n),k("b",e,t,n))];case"Mul":return[a.mul(k("a",e,t,n),k("b",e,t,n))];case"RealDiv":case"Div":return[a.div(k("a",e,t,n),k("b",e,t,n))];case"DivNoNan":return[a.divNoNan(k("a",e,t,n),k("b",e,t,n))];case"FloorDiv":return[a.floorDiv(k("a",e,t,n),k("b",e,t,n))];case"Sub":return[a.sub(k("a",e,t,n),k("b",e,t,n))];case"Minimum":return[a.minimum(k("a",e,t,n),k("b",e,t,n))];case"Maximum":return[a.maximum(k("a",e,t,n),k("b",e,t,n))];case"Pow":return[a.pow(k("a",e,t,n),k("b",e,t,n))];case"SquaredDifference":return[a.squaredDifference(k("a",e,t,n),k("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},XH=(e,t,n,a=an)=>{switch(e.op){case"Abs":case"ComplexAbs":return[a.abs(k("x",e,t,n))];case"Acos":return[a.acos(k("x",e,t,n))];case"Acosh":return[a.acosh(k("x",e,t,n))];case"Asin":return[a.asin(k("x",e,t,n))];case"Asinh":return[a.asinh(k("x",e,t,n))];case"Atan":return[a.atan(k("x",e,t,n))];case"Atan2":return[a.atan2(k("x",e,t,n),k("y",e,t,n))];case"Atanh":return[a.atanh(k("x",e,t,n))];case"Ceil":return[a.ceil(k("x",e,t,n))];case"Complex":return[a.complex(k("real",e,t,n),k("imag",e,t,n))];case"Cos":return[a.cos(k("x",e,t,n))];case"Cosh":return[a.cosh(k("x",e,t,n))];case"Elu":return[a.elu(k("x",e,t,n))];case"Erf":return[a.erf(k("x",e,t,n))];case"Exp":return[a.exp(k("x",e,t,n))];case"Expm1":return[a.expm1(k("x",e,t,n))];case"Floor":return[a.floor(k("x",e,t,n))];case"Log":return[a.log(k("x",e,t,n))];case"Log1p":return[a.log1p(k("x",e,t,n))];case"Imag":return[a.imag(k("x",e,t,n))];case"Neg":return[a.neg(k("x",e,t,n))];case"Reciprocal":return[a.reciprocal(k("x",e,t,n))];case"Real":return[a.real(k("x",e,t,n))];case"Relu":return[a.relu(k("x",e,t,n))];case"Round":return[a.round(k("x",e,t,n))];case"Selu":return[a.selu(k("x",e,t,n))];case"Sigmoid":return[a.sigmoid(k("x",e,t,n))];case"Sin":return[a.sin(k("x",e,t,n))];case"Sign":return[a.sign(k("x",e,t,n))];case"Sinh":return[a.sinh(k("x",e,t,n))];case"Softplus":return[a.softplus(k("x",e,t,n))];case"Sqrt":return[a.sqrt(k("x",e,t,n))];case"Square":return[a.square(k("x",e,t,n))];case"Tanh":return[a.tanh(k("x",e,t,n))];case"Tan":return[a.tan(k("x",e,t,n))];case"ClipByValue":return[a.clipByValue(k("x",e,t,n),k("clipValueMin",e,t,n),k("clipValueMax",e,t,n))];case"Relu6":return[a.relu6(k("x",e,t,n))];case"Rsqrt":return[a.rsqrt(wn(e.inputNames[0],t,n))];case"Prod":return[a.prod(k("x",e,t,n),k("axes",e,t,n))];case"LeakyRelu":return[a.leakyRelu(k("x",e,t,n),k("alpha",e,t,n))];case"Prelu":return[a.prelu(k("x",e,t,n),k("alpha",e,t,n))];case"IsNan":return[a.isNaN(wn(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function _a(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){v.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let a=0;a<e.length;a++){let r=e[a],s=t[a];v.assert(r<0||s<0||r===s,()=>n+` Shapes ${e} and ${t} must match`)}}}function _k(e){return!(typeof e=="number"||e.some(t=>t<0))}function Ip(e,t,n){let a=Qb(e,n),r=!_k(a);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${a}`);if(r&&t.forEach(s=>{a=Qb(s.shape,a)}),!_k(a))throw new Error(`Non-fully-defined elementShape: ${a}`);return a}function Qb(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let a=0;a<e.length;++a){let r=e[a],s=t[a];if(r>=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[a]=r>=0?r:s}return n}var YH=class{constructor(e,t,n,a,r,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=a,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=xe(0),Gt(this.idTensor)}get id(){return this.idTensor.id}get closed(){return this.closed_}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.tensor.id))&&t.tensor.dispose()}),this.tensors=[],this.closed_=!0,this.idTensor.dispose()}size(){return this.tensors.length}read(e){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||e>=this.size())throw new Error(`Tried to read from index ${e}, but array size is: ${this.size()}`);let t=this.tensors[e];if(t.cleared)throw new Error(`TensorArray ${this.name}: Could not read index ${e} twice because it was cleared after a previous read (perhaps try setting clear_after_read = false?).`);return this.clearAfterRead&&(t.cleared=!0),t.read=!0,t.tensor}readMany(e){return e.map(t=>this.read(t))}write(e,t){if(this.closed_)throw new Error(`TensorArray ${this.name} has already been closed.`);if(e<0||!this.dynamicSize&&e>=this.maxSize)throw new Error(`Tried to write to index ${e}, but array is not resizeable and size is: ${this.maxSize}`);let n=this.tensors[e]||{};if(t.dtype!==this.dtype)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e},
|
|
because the value dtype is ${t.dtype}, but TensorArray dtype is ${this.dtype}.`);if(this.size()===0&&(this.elementShape==null||this.elementShape.length===0)&&(this.elementShape=t.shape),_a(this.elementShape,t.shape,`TensorArray ${this.name}: Could not write to TensorArray index ${e}.`),n.read)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been read.`);if(n.written)throw new Error(`TensorArray ${this.name}: Could not write to TensorArray index ${e}, because it has already been written.`);n.tensor=t,Gt(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,a)=>this.write(n,t[a]))}gather(e,t){if(t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let a=0;a<this.size();a++)e.push(a)}if(e.length===0)return fn([],[0].concat(this.elementShape));let n=this.readMany(e);return _a(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),Ft(n,0)}concat(e){if(e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(this.size()===0)return fn([],[0].concat(this.elementShape));let t=[];for(let a=0;a<this.size();a++)t.push(a);let n=this.readMany(t);return _a(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),Ze(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,lt(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,a=e.map(o=>(n+=o,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let r=n===0?0:t.size/n,s=[];P(()=>{t=W(t,[1,n,r]);for(let o=0;o<e.length;++o){let l=[0,o===0?0:a[o-1],0],u=[1,e[o],r];s[o]=W(Ve(t,l,u),this.elementShape)}return s});let i=[];for(let o=0;o<e.length;o++)i[o]=o;this.writeMany(i,s)}},ml=class{constructor(e,t,n,a=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(r=>{if(n!==r.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${r.dtype}`);_a(t,r.shape,"TensorList shape mismatch: "),Gt(r)}),this.idTensor=xe(0),this.maxNumElements=a,Gt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new ml([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);_a(e,this.elementShape,"TensorList shape mismatch: ");let a=Ip(this.elementShape,this.tensors,e);return P(()=>{let r=this.tensors.map(s=>W(s,a));return Ft(r,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Ip(this.elementShape,this.tensors,e),a=this.tensors.pop();return a.kept=!1,_a(a.shape,e,"TensorList shape mismatch: "),W(a,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(_a(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Gt(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new ml([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let n=0;n<Math.min(this.tensors.length,e);++n)t.tensors[n]=this.tensors[n];return t}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);_a(this.tensors[e].shape,t,"TensorList shape mismatch: ");let a=Ip(this.elementShape,this.tensors,t);return W(this.tensors[e],a)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);_a(this.elementShape,t.shape,"TensorList shape mismatch: "),Gt(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);_a(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let a=Ip(this.elementShape,this.tensors,n);return e.length===0?fn([],[0].concat(a)):P(()=>{let r=e.map(s=>W(this.tensors[s],a));return Ft(r,0)})}concat(e,t){if(e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);_a(this.elementShape,t,"TensorList shape mismatch: ");let n=Ip(this.elementShape,this.tensors,t);return this.size()===0?fn([],[0].concat(n)):P(()=>{let a=this.tensors.map(r=>W(r,n));return Ze(a,0)})}};function ZH(e,t,n){let a=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let r=e.shape.slice(1);_a(r,t,"TensorList shape mismatch: ");let s=lt(e);return new ml(s,t,a)}function JH(e,t,n,a){return new ml([],e,t,a)}function QH(e,t,n,a){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(a!=null&&a!==-1&&r>=a)throw new Error(`Max index must be < array size (${r} vs. ${a})`);let s=new ml([],n,e.dtype,a),i=lt(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function e6(e,t,n){let a=0,r=t.map(p=>(a+=p,a));if(a!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${a}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=Qb(s,n),o=a===0?0:e.size/a,l=P(()=>{let p=[];e=W(e,[1,a,o]);for(let d=0;d<t.length;++d){let c=[0,d===0?0:r[d-1],0],h=[1,t[d],o];p[d]=W(Ve(e,c,h),i)}return e.dispose(),p}),u=new ml([],n,e.dtype,t.length);for(let p=0;p<l.length;p++)u.setItem(p,l[p]);return u}var t6=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let a=k("thenBranch",e,t,n),r=k("elseBranch",e,t,n),s=k("cond",e,t,n),i=k("args",e,t,n);return(await s.data())[0]?n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let a=k("body",e,t,n),r=k("cond",e,t,n),s=k("args",e,t,n),i=await n.functionMap[r].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map(p=>p.id),l=await i[0].data();i.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&p.dispose()});let u=s;for(;l[0];){let p=u;u=await n.functionMap[a].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let d=u.map(h=>h.id);p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&d.indexOf(h.id)===-1&&h.dispose()});let c=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await c[0].data(),c.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&d.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let a=k("pred",e,t,n);return[Tr(a)]}case"Switch":{let a=k("pred",e,t,n),r=k("data",e,t,n);return r.kept||(r=Tr(r)),(await a.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let a=e.inputNames.find(r=>wn(r,t,n)!==void 0);if(a){let r=wn(a,t,n);return[Tr(r)]}return}case"Enter":{let a=k("frameName",e,t,n),r=k("tensor",e,t,n);return n.enterFrame(a),[Tr(r)]}case"Exit":{let a=k("tensor",e,t,n);return n.exitFrame(),[Tr(a)]}case"NextIteration":{let a=k("tensor",e,t,n);return n.nextIteration(),[Tr(a)]}case"TensorArrayV3":{let a=k("size",e,t,n),r=k("dtype",e,t,n),s=k("elementShape",e,t,n),i=k("dynamicSize",e,t,n),o=k("clearAfterRead",e,t,n),l=k("identicalElementShapes",e,t,n),u=k("name",e,t,n),p=new YH(u,r,a,s,l,i,o);return n.addTensorArray(p),[p.idTensor,xe(1)]}case"TensorArrayWriteV3":{let a=k("tensorArrayId",e,t,n),r=k("index",e,t,n),s=k("tensor",e,t,n),i=n.getTensorArray(a.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let a=k("tensorArrayId",e,t,n),r=k("index",e,t,n);return[n.getTensorArray(a.id).read(r)]}case"TensorArrayGatherV3":{let a=k("tensorArrayId",e,t,n),r=k("indices",e,t,n),s=k("dtype",e,t,n);return[n.getTensorArray(a.id).gather(r,s)]}case"TensorArrayScatterV3":{let a=k("tensorArrayId",e,t,n),r=k("indices",e,t,n),s=k("tensor",e,t,n),i=n.getTensorArray(a.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let a=k("tensorArrayId",e,t,n),r=n.getTensorArray(a.id),s=k("dtype",e,t,n);return[r.concat(s)]}case"TensorArraySplitV3":{let a=k("tensorArrayId",e,t,n),r=k("tensor",e,t,n),s=k("lengths",e,t,n),i=n.getTensorArray(a.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let a=k("tensorArrayId",e,t,n),r=n.getTensorArray(a.id);return[xe(r.size(),"int32")]}case"TensorArrayCloseV3":{let a=k("tensorArrayId",e,t,n),r=n.getTensorArray(a.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let a=k("tensorListId",e,t,n),r=k("index",e,t,n),s=k("tensor",e,t,n),i=n.getTensorList(a.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let a=k("tensorListId",e,t,n),r=k("index",e,t,n),s=k("elementShape",e,t,n),i=k("elementDType",e,t,n);return[n.getTensorList(a.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let a=k("indices",e,t,n),r=k("tensor",e,t,n),s=k("elementShape",e,t,n),i=k("numElements",e,t,n),o=QH(r,a,s,i);return n.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let a=k("elementShape",e,t,n),r=k("elementDType",e,t,n),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=k(s,e,t,n),o=e.op==="TensorListReserve"?-1:i,l=JH(a,r,i,o);return n.addTensorList(l),[l.idTensor]}case"TensorListGather":{let a=k("tensorListId",e,t,n),r=k("indices",e,t,n),s=k("elementShape",e,t,n),i=k("elementDType",e,t,n);return[n.getTensorList(a.id).gather(r,i,s)]}case"TensorListStack":{let a=k("tensorListId",e,t,n),r=k("elementShape",e,t,n),s=k("elementDType",e,t,n),i=k("numElements",e,t,n);return[n.getTensorList(a.id).stack(r,s,i)]}case"TensorListFromTensor":{let a=k("tensor",e,t,n),r=k("elementShape",e,t,n),s=k("elementDType",e,t,n),i=ZH(a,r,s);return n.addTensorList(i),[i.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let a=k("tensorListId",e,t,n),r=n.getTensorList(a.id),s=k("dtype",e,t,n),i=k("elementShape",e,t,n);return[r.concat(s,i)]}case"TensorListPushBack":{let a=k("tensorListId",e,t,n),r=k("tensor",e,t,n),s=n.getTensorList(a.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let a=k("tensorListId",e,t,n),r=k("elementShape",e,t,n),s=k("elementDType",e,t,n);return[n.getTensorList(a.id).popBack(r,s)]}case"TensorListSplit":{let a=k("tensor",e,t,n),r=k("elementShape",e,t,n),s=k("lengths",e,t,n),i=e6(a,s,r);return n.addTensorList(i),[i.idTensor]}case"TensorListLength":{let a=k("tensorListId",e,t,n),r=n.getTensorList(a.id);return[xe(r.size(),"int32")]}case"TensorListResize":{let a=k("tensorListId",e,t,n),r=k("size",e,t,n),s=n.getTensorList(a.id).resize(r);return n.addTensorList(s),[s.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Ek(e,t,n){let[a,r]=k("fusedOps",e,t,n),s=a==="biasadd",i=!s,o=r==="prelu",l=a==="fusedbatchnorm",u=k("numArgs",e,t,n);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let p=k("strides",e,t,n),d=sh(e,t,n),c=k("dataFormat",e,t,n).toUpperCase(),h=k("dilations",e,t,n),[m,f]=k("args",e,t,n);i&&(f=m,m=void 0);let g=k("leakyreluAlpha",e,t,n);return{stride:p,pad:d,dataFormat:c,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var n6=(e,t,n,a=an)=>{switch(e.op){case"Conv1D":{let r=k("stride",e,t,n),s=k("pad",e,t,n),i=k("dataFormat",e,t,n).toUpperCase(),o=k("dilation",e,t,n);return[a.conv1d(k("x",e,t,n),k("filter",e,t,n),r,s,i,o)]}case"Conv2D":{let r=k("strides",e,t,n),s=sh(e,t,n),i=k("dataFormat",e,t,n).toUpperCase(),o=k("dilations",e,t,n);return[a.conv2d(k("x",e,t,n),k("filter",e,t,n),[r[1],r[2]],s,i,[o[1],o[2]])]}case"_FusedConv2D":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:d}=Ek(e,t,n);return[a.fused.conv2d({x:k("x",e,t,n),filter:k("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:d})]}case"FusedDepthwiseConv2dNative":{let{stride:r,pad:s,dataFormat:i,dilations:o,biasArg:l,preluArg:u,activationFunc:p,leakyreluAlpha:d}=Ek(e,t,n);return[a.fused.depthwiseConv2d({x:k("x",e,t,n),filter:k("filter",e,t,n),strides:[r[1],r[2]],pad:s,dataFormat:i,dilations:[o[1],o[2]],bias:l,activation:p,preluActivationWeights:u,leakyreluAlpha:d})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let r=k("outputShape",e,t,n),s=k("strides",e,t,n),i=sh(e,t,n);return[a.conv2dTranspose(k("x",e,t,n),k("filter",e,t,n),r,[s[1],s[2]],i)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let r=k("strides",e,t,n),s=sh(e,t,n),i=k("dilations",e,t,n),o=k("dataFormat",e,t,n).toUpperCase();return[a.depthwiseConv2d(k("input",e,t,n),k("filter",e,t,n),[r[1],r[2]],s,o,[i[1],i[2]])]}case"Conv3D":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("dataFormat",e,t,n).toUpperCase(),o=k("dilations",e,t,n);return[a.conv3d(k("x",e,t,n),k("filter",e,t,n),[r[1],r[2],r[3]],s,i,[o[1],o[2],o[3]])]}case"AvgPool":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("kernelSize",e,t,n);return[a.avgPool(k("x",e,t,n),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPool":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("kernelSize",e,t,n);return[a.maxPool(k("x",e,t,n),[i[1],i[2]],[r[1],r[2]],s)]}case"MaxPoolWithArgmax":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("kernelSize",e,t,n),o=k("includeBatchInIndex",e,t,n),{result:l,indexes:u}=a.maxPoolWithArgmax(k("x",e,t,n),[i[1],i[2]],[r[1],r[2]],s,o);return[l,u]}case"AvgPool3D":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("kernelSize",e,t,n);return[a.avgPool3d(k("x",e,t,n),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"MaxPool3D":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("kernelSize",e,t,n);return[a.maxPool3d(k("x",e,t,n),[i[1],i[2],i[3]],[r[1],r[2],r[3]],s)]}case"Dilation2D":{let r=k("strides",e,t,n),s=k("pad",e,t,n),i=k("dilations",e,t,n),o=r[1],l=r[2],u=i[1],p=i[2];return[a.dilation2d(k("x",e,t,n),k("filter",e,t,n),[o,l],s,[u,p],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},a6=(e,t,n,a=an)=>{switch(e.op){case"Fill":{let r=k("shape",e,t,n),s=k("dtype",e,t,n),i=k("value",e,t,n);return[a.fill(r,i,s)]}case"LinSpace":{let r=k("start",e,t,n),s=k("stop",e,t,n),i=k("num",e,t,n);return[a.linspace(r,s,i)]}case"Multinomial":{let r=k("logits",e,t,n),s=k("numSamples",e,t,n),i=k("seed",e,t,n);return[a.multinomial(r,s,i)]}case"OneHot":{let r=k("indices",e,t,n),s=k("depth",e,t,n),i=k("onValue",e,t,n),o=k("offValue",e,t,n),l=k("dtype",e,t,n);return[a.oneHot(r,s,i,o,l)]}case"Ones":return[a.ones(k("shape",e,t,n),k("dtype",e,t,n))];case"OnesLike":return[a.onesLike(k("x",e,t,n))];case"RandomStandardNormal":return[a.randomStandardNormal(k("shape",e,t,n),k("dtype",e,t,n),k("seed",e,t,n))];case"RandomUniform":return[a.randomUniform(k("shape",e,t,n),k("minval",e,t,n),k("maxval",e,t,n),k("dtype",e,t,n))];case"Range":{let r=k("start",e,t,n),s=k("stop",e,t,n),i=k("step",e,t,n);return[a.range(r,s,i,k("dtype",e,t,n))]}case"TruncatedNormal":{let r=k("shape",e,t,n),s=k("mean",e,t,n),i=k("stdDev",e,t,n),o=k("seed",e,t,n);return[a.truncatedNormal(r,s,i,k("dtype",e,t,n),o)]}case"Zeros":return[a.zeros(k("shape",e,t,n),k("dtype",e,t,n))];case"ZerosLike":return[a.zerosLike(k("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function mb(e,t,n){let a=k("boxes",e,t,n),r=k("scores",e,t,n),s=k("maxOutputSize",e,t,n),i=k("iouThreshold",e,t,n),o=k("scoreThreshold",e,t,n),l=k("softNmsSigma",e,t,n);return{boxes:a,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var r6=async(e,t,n,a,r=an)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=mb(e,t,n),d=await r.image.nonMaxSuppressionWithScoreAsync(s,i,o,l,u,p);return[d.selectedIndices,d.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=mb(e,t,n),p=k("padToMaxOutputSize",e,t,n),d=await r.image.nonMaxSuppressionPaddedAsync(s,i,o,l,u,p);return[d.selectedIndices,d.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u}=mb(e,t,n);return[await r.image.nonMaxSuppressionAsync(s,i,o,l,u)]}case"Where":{let s=r.cast(k("condition",e,t,n),"bool"),i=[await r.whereAsync(s)];return s.dispose(),i}case"ListDiff":return r.setdiff1dAsync(k("x",e,t,n),k("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},s6=(e,t,n,a=an)=>{switch(e.op){case"LowerBound":{let r=k("sortedSequence",e,t,n),s=k("values",e,t,n);return[a.lowerBound(r,s)]}case"TopKV2":{let r=k("x",e,t,n),s=k("k",e,t,n),i=k("sorted",e,t,n),o=a.topk(r,s,i);return[o.values,o.indices]}case"UpperBound":{let r=k("sortedSequence",e,t,n),s=k("values",e,t,n);return[a.upperBound(r,s)]}case"Unique":{let r=k("x",e,t,n),s=a.unique(r);return[s.values,s.indices]}case"UniqueV2":{let r=k("x",e,t,n),s=k("axis",e,t,n),i=a.unique(r,s);return[i.values,i.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},i6=(e,t,n,a=an)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,n);return[wn(e.name,t,n)||r];case"Placeholder":return[wn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,n);return[Tr(p)]}case"IdentityN":return k("x",e,t,n).map(p=>Tr(p));case"Snapshot":let s=k("x",e,t,n);return[Tr(s)];case"Shape":return[a.tensor1d(k("x",e,t,n).shape,"int32")];case"ShapeN":return k("x",e,t,n).map(p=>a.tensor1d(p.shape));case"Size":return[a.scalar(k("x",e,t,n).size,"int32")];case"Rank":return[a.scalar(k("x",e,t,n).rank,"int32")];case"NoOp":return[a.scalar(1)];case"Print":let i=k("x",e,t,n),o=k("data",e,t,n),l=k("message",e,t,n),u=k("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(l);for(let p=0;p<o.length;p++)console.log(Array.prototype.slice.call(o[p].dataSync()).slice(0,u));return[i];default:throw TypeError(`Node type ${e.op} is not implemented`)}},o6=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=xe(0),this.tensorMap=new Map,Gt(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(e=>e.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return xe(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(a=>a.dispose()),this.tensorMap.clear(),P(()=>{let a=lt(t),r=n.length,s=a.length;v.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i<r;i++){let o=n[i],l=a[i];Gt(l),this.tensorMap.set(o,l)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return P(()=>{let a=[];for(let r=0;r<n.length;r++){let s=n[r],i=this.findWithDefault(s,t);a.push(i)}return Ft(a)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},l6=async(e,t,n,a)=>{switch(e.op){case"HashTable":case"HashTableV2":{let r=a.getHashTableHandleByName(e.name);if(r!=null)return[r];{let s=k("keyDType",e,t,n),i=k("valueDType",e,t,n),o=new o6(s,i);return a.addHashTable(e.name,o),[o.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let r=k("tableHandle",e,t,n,a),s=k("keys",e,t,n),i=k("values",e,t,n);return[await a.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=k("tableHandle",e,t,n,a),s=k("keys",e,t,n),i=k("defaultValue",e,t,n);return[await a.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=k("tableHandle",e,t,n,a);return[a.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},u6=(e,t,n,a=an)=>{switch(e.op){case"ResizeBilinear":{let r=k("images",e,t,n),s=k("size",e,t,n),i=k("alignCorners",e,t,n),o=k("halfPixelCenters",e,t,n);return[a.image.resizeBilinear(r,[s[0],s[1]],i,o)]}case"ResizeNearestNeighbor":{let r=k("images",e,t,n),s=k("size",e,t,n),i=k("alignCorners",e,t,n),o=k("halfPixelCenters",e,t,n);return[a.image.resizeNearestNeighbor(r,[s[0],s[1]],i,o)]}case"CropAndResize":{let r=k("image",e,t,n),s=k("boxes",e,t,n),i=k("boxInd",e,t,n),o=k("cropSize",e,t,n),l=k("method",e,t,n),u=k("extrapolationValue",e,t,n);return[a.image.cropAndResize(r,s,i,o,l,u)]}case"ImageProjectiveTransformV3":{let r=k("images",e,t,n),s=k("transforms",e,t,n),i=k("outputShape",e,t,n),o=k("fillValue",e,t,n),l=k("interpolation",e,t,n),u=k("fillMode",e,t,n);return[a.image.transform(r,s,l.toLowerCase(),u.toLowerCase(),o,i)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},p6=(e,t,n,a=an)=>{switch(e.op){case"Equal":return[a.equal(k("a",e,t,n),k("b",e,t,n))];case"NotEqual":return[a.notEqual(k("a",e,t,n),k("b",e,t,n))];case"Greater":return[a.greater(k("a",e,t,n),k("b",e,t,n))];case"GreaterEqual":return[a.greaterEqual(k("a",e,t,n),k("b",e,t,n))];case"Less":return[a.less(k("a",e,t,n),k("b",e,t,n))];case"LessEqual":return[a.lessEqual(k("a",e,t,n),k("b",e,t,n))];case"LogicalAnd":return[a.logicalAnd(k("a",e,t,n),k("b",e,t,n))];case"LogicalNot":return[a.logicalNot(k("a",e,t,n))];case"LogicalOr":return[a.logicalOr(k("a",e,t,n),k("b",e,t,n))];case"Select":case"SelectV2":return[a.where(k("condition",e,t,n),k("a",e,t,n),k("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},c6=(e,t,n,a=an)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[a.matMul(k("a",e,t,n),k("b",e,t,n),k("transposeA",e,t,n),k("transposeB",e,t,n))];case"Einsum":return[a.einsum(k("equation",e,t,n),...k("tensors",e,t,n))];case"Transpose":return[a.transpose(k("x",e,t,n),k("perm",e,t,n))];case"_FusedMatMul":let[r,s]=k("fusedOps",e,t,n),i=r==="biasadd",o=s==="prelu",l=k("numArgs",e,t,n),u=k("leakyreluAlpha",e,t,n);if(i){if(o&&l!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&l!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[p,d]=k("args",e,t,n);return[a.fused.matMul({a:k("a",e,t,n),b:k("b",e,t,n),transposeA:k("transposeA",e,t,n),transposeB:k("transposeB",e,t,n),bias:p,activation:s,preluActivationWeights:d,leakyreluAlpha:u})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},d6=(e,t,n,a=an)=>{switch(e.op){case"EuclideanNorm":return[a.euclideanNorm(k("x",e,t,n),k("axis",e,t,n),k("keepDims",e,t,n))];case"FusedBatchNorm":case"FusedBatchNormV2":return[a.batchNorm(k("x",e,t,n),k("mean",e,t,n),k("variance",e,t,n),k("offset",e,t,n),k("scale",e,t,n),k("epsilon",e,t,n))];case"FusedBatchNormV3":return[a.batchNorm(k("x",e,t,n),k("mean",e,t,n),k("variance",e,t,n),k("offset",e,t,n),k("scale",e,t,n),k("epsilon",e,t,n))];case"LRN":return[a.localResponseNormalization(k("x",e,t,n),k("radius",e,t,n),k("bias",e,t,n),k("alpha",e,t,n),k("beta",e,t,n))];case"Softmax":return[a.softmax(k("x",e,t,n))];case"LogSoftmax":return[a.logSoftmax(k("x",e,t,n))];case"SparseToDense":return[a.sparseToDense(k("sparseIndices",e,t,n),k("outputShape",e,t,n),k("sparseValues",e,t,n),k("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},h6=(e,t,n,a=an)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:r,outputDenseValues:s}=a.raggedGather(k("paramsNestedSplits",e,t,n),k("paramsDenseValues",e,t,n),k("indices",e,t,n),k("outputRaggedRank",e,t,n));return r.concat(s)}case"RaggedRange":{let{rtNestedSplits:r,rtDenseValues:s}=a.raggedRange(k("starts",e,t,n),k("limits",e,t,n),k("splits",e,t,n));return[r,s]}case"RaggedTensorToTensor":return[a.raggedTensorToTensor(k("shape",e,t,n),k("values",e,t,n),k("defaultValue",e,t,n),k("rowPartitionTensors",e,t,n),k("rowPartitionTypes",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},m6=(e,t,n,a=an)=>{switch(e.op){case"Max":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.max(k("x",e,t,n),o,l)]}case"Mean":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.mean(k("x",e,t,n),o,l)]}case"Min":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.min(k("x",e,t,n),o,l)]}case"Sum":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.sum(k("x",e,t,n),o,l)]}case"All":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.all(k("x",e,t,n),o,l)]}case"Any":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.any(k("x",e,t,n),o,l)]}case"ArgMax":{let o=k("axis",e,t,n);return[a.argMax(k("x",e,t,n),o)]}case"ArgMin":{let o=k("axis",e,t,n);return[a.argMin(k("x",e,t,n),o)]}case"Prod":{let o=k("axis",e,t,n),l=k("keepDims",e,t,n);return[a.prod(k("x",e,t,n),o,l)]}case"Cumprod":{let o=k("axis",e,t,n),l=k("exclusive",e,t,n),u=k("reverse",e,t,n);return[a.cumprod(k("x",e,t,n),o,l,u)]}case"Cumsum":{let o=k("axis",e,t,n),l=k("exclusive",e,t,n),u=k("reverse",e,t,n);return[a.cumsum(k("x",e,t,n),o,l,u)]}case"Bincount":let r=k("x",e,t,n),s=k("weights",e,t,n),i=k("size",e,t,n);return[a.bincount(r,s,i)];case"DenseBincount":{let o=k("x",e,t,n),l=k("weights",e,t,n),u=k("size",e,t,n),p=k("binaryOutput",e,t,n);return[a.denseBincount(o,l,u,p)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},f6=(e,t,n,a=an)=>{switch(e.op){case"ConcatV2":case"Concat":{let r=k("n",e,t,n),s=k("axis",e,t,n),i=k("tensors",e,t,n);return i=i.slice(0,r),[a.concat(i,s)]}case"Gather":{let r=k("x",e,t,n),s=k("indices",e,t,n);return[a.gather(r,a.cast(s,"int32"),0)]}case"GatherV2":{let r=k("axis",e,t,n),s=k("batchDims",e,t,n),i=k("x",e,t,n),o=k("indices",e,t,n);return[a.gather(i,a.cast(o,"int32"),r,s)]}case"Reverse":{let r=k("dims",e,t,n),s=[];for(let o=0;o<r.length;o++)r[o]&&s.push(o);let i=k("x",e,t,n);return[a.reverse(i,s)]}case"ReverseV2":{let r=k("axis",e,t,n),s=k("x",e,t,n);return[a.reverse(s,r)]}case"Slice":{let r=k("begin",e,t,n),s=k("size",e,t,n);return[a.slice(k("x",e,t,n),r,s)]}case"StridedSlice":{let r=k("begin",e,t,n),s=k("end",e,t,n),i=k("strides",e,t,n),o=k("beginMask",e,t,n),l=k("endMask",e,t,n),u=k("ellipsisMask",e,t,n),p=k("newAxisMask",e,t,n),d=k("shrinkAxisMask",e,t,n),c=k("x",e,t,n);return[a.stridedSlice(c,r,s,i,o,l,u,p,d)]}case"Pack":return P(()=>{let r=k("axis",e,t,n),s=k("tensors",e,t,n),i=s[0].shape,o=a.squeeze(s[0]).shape,l=s.map(u=>{let p=v.arraysEqual(u.shape,i);if(!p&&!v.arraysEqual(a.squeeze(u).shape,o))throw new Error("the input tensors shape does not match");return p?u:a.reshape(u,i)});return[a.stack(l,r)]});case"Unpack":{let r=k("axis",e,t,n),s=k("tensor",e,t,n);return a.unstack(s,r)}case"Tile":{let r=k("reps",e,t,n);return[a.tile(k("x",e,t,n),r)]}case"Split":case"SplitV":{let r=k("axis",e,t,n),s=k("numOrSizeSplits",e,t,n),i=k("x",e,t,n);return a.split(i,s,r)}case"ScatterNd":{let r=k("indices",e,t,n),s=k("values",e,t,n),i=k("shape",e,t,n);return[a.scatterND(r,s,i)]}case"GatherNd":{let r=k("x",e,t,n),s=k("indices",e,t,n);return[a.gatherND(r,s)]}case"SparseToDense":{let r=k("sparseIndices",e,t,n),s=k("outputShape",e,t,n),i=k("sparseValues",e,t,n),o=k("defaultValue",e,t,n);return[a.sparseToDense(r,i,s,i.dtype===o.dtype?o:a.cast(o,i.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},g6=(e,t,n,a=an)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:r,outputValues:s,emptyRowIndicator:i,reverseIndexMap:o}=a.sparse.sparseFillEmptyRows(k("indices",e,t,n),k("values",e,t,n),k("denseShape",e,t,n),k("defaultValue",e,t,n));return[r,s,i,o]}case"SparseReshape":{let{outputIndices:r,outputShape:s}=a.sparse.sparseReshape(k("inputIndices",e,t,n),k("inputShape",e,t,n),k("newShape",e,t,n));return[r,s]}case"SparseSegmentMean":return[a.sparse.sparseSegmentMean(k("data",e,t,n),k("indices",e,t,n),k("segmentIds",e,t,n))];case"SparseSegmentSum":return[a.sparse.sparseSegmentSum(k("data",e,t,n),k("indices",e,t,n),k("segmentIds",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},y6=(e,t,n,a=an)=>{switch(e.op){case"FFT":return[a.fft(k("x",e,t,n))];case"IFFT":return[a.ifft(k("x",e,t,n))];case"RFFT":return[a.rfft(k("x",e,t,n))];case"IRFFT":return[a.irfft(k("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},b6=(e,t,n,a=an)=>{switch(e.op){case"StringNGrams":{let{nGrams:r,nGramsSplits:s}=a.string.stringNGrams(k("data",e,t,n),k("dataSplits",e,t,n),k("separator",e,t,n),k("nGramWidths",e,t,n),k("leftPad",e,t,n),k("rightPad",e,t,n),k("padWidth",e,t,n),k("preserveShortSequences",e,t,n));return[r,s]}case"StringSplit":{let{indices:r,values:s,shape:i}=a.string.stringSplit(k("input",e,t,n),k("delimiter",e,t,n),k("skipEmpty",e,t,n));return[r,s,i]}case"StringToHashBucketFast":return[a.string.stringToHashBucketFast(k("input",e,t,n),k("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},x6=(e,t,n,a=an)=>{switch(e.op){case"Cast":return[a.cast(k("x",e,t,n),k("dtype",e,t,n))];case"ExpandDims":{let r=k("axis",e,t,n);return[a.expandDims(k("x",e,t,n),r)]}case"Squeeze":{let r=k("axis",e,t,n);return[a.squeeze(k("x",e,t,n),r)]}case"Reshape":return[a.reshape(k("x",e,t,n),k("shape",e,t,n))];case"MirrorPad":return[a.mirrorPad(k("x",e,t,n),k("padding",e,t,n),k("mode",e,t,n))];case"PadV2":case"Pad":return[a.pad(k("x",e,t,n),k("padding",e,t,n),k("constantValue",e,t,n))];case"SpaceToBatchND":{let r=k("blockShape",e,t,n),s=k("paddings",e,t,n);return[a.spaceToBatchND(k("x",e,t,n),r,s)]}case"BatchToSpaceND":{let r=k("blockShape",e,t,n),s=k("crops",e,t,n);return[a.batchToSpaceND(k("x",e,t,n),r,s)]}case"DepthToSpace":{let r=k("blockSize",e,t,n),s=k("dataFormat",e,t,n).toUpperCase();return[a.depthToSpace(k("x",e,t,n),r,s)]}case"BroadcastTo":return[a.broadcastTo(k("x",e,t,n),k("shape",e,t,n))];case"BroadcastArgs":return[a.broadcastArgs(k("s0",e,t,n),k("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Ak(e,t,n,a,r=P){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>KH(i,o,l));case"basic_math":return r(()=>XH(i,o,l));case"control":return t6(i,o,l);case"convolution":return r(()=>n6(i,o,l));case"creation":return r(()=>a6(i,o,l));case"dynamic":return r6(i,o,l);case"evaluation":return r(()=>s6(i,o,l));case"image":return r(()=>u6(i,o,l));case"graph":return r(()=>i6(i,o,l));case"logical":return r(()=>p6(i,o,l));case"matrices":return r(()=>c6(i,o,l));case"normalization":return r(()=>d6(i,o,l));case"ragged":return r(()=>h6(i,o,l));case"reduction":return r(()=>m6(i,o,l));case"slice_join":return r(()=>f6(i,o,l));case"sparse":return r(()=>g6(i,o,l));case"spectral":return r(()=>y6(i,o,l));case"string":return r(()=>b6(i,o,l));case"transformation":return r(()=>x6(i,o,l));case"hash_table":return l6(i,o,l,a);case"custom":let u=QN(i.op);if(u&&u.customExecutor)return u.customExecutor(new jH(i,o,l));throw TypeError(`Custom op ${i.op} is not registered.`);default:throw TypeError(`Unknown op '${i.op}'. File an issue at https://github.com/tensorflow/tfjs/issues so we can add it, or register a custom execution with tf.registerOp()`)}})(e,t,n);return v.isPromise(s)?s.then(i=>[].concat(i)):[].concat(s)}var $k=class{constructor(e={},t={},n={},a={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=a,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function Fk(e,t,n,a){let r=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(c=>Xn(c)[0]),p=[];a!=null&&(p=a.map(c=>Xn(c.name)[0]));let d=[...t];for(;d.length>0;){let c=d.pop();if((w2(c)||S6(c)||T6(c))&&i==null&&(i=c,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(c.name),n[c.name]==null&&u.indexOf(c.name)===-1&&p.indexOf(c.name)===-1){if(c.inputs.length===0){s.push(c.name);continue}c.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),d.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function v6(e,t,n){let{usedNodes:a,inputs:r}=n,s=[],i=Object.keys(r).map(p=>Xn(p)[0]).map(p=>e.nodes[p]),o=e.initNodes;i.forEach(p=>{a.has(p.name)&&s.push(p)}),e.weights.forEach(p=>{a.has(p.name)&&s.push(p)}),o!=null&&o.forEach(p=>{a.has(p.name)&&s.push(p)});let l=new Set,u=[];for(;s.length>0;){let p=s.pop();l.add(p.name),t[p.name]||u.push(p),p.children.forEach(d=>{!l.has(d.name)&&a.has(d.name)&&d.inputs.every(c=>l.has(c.name))&&s.push(d)})}return u}var w6=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],k6=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],I6=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function w2(e){return w6.indexOf(e.op)>=0}function S6(e){return k6.indexOf(e.op)>=0}function T6(e){return I6.indexOf(e.op)>=0}var ex=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new ex(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(a=>a.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(r=>r.name).sort(),a=t.map(r=>r.name).sort();return n.join(this.SEPERATOR)+"--"+a.join(this.SEPERATOR)}compile(e,t){let n=Fk(e,t,this.weightMap,this._initNodes),{missingInputs:a,dynamicNode:r,syncInputs:s}=n;if(r!=null)throw new Error(`This execution contains the node '${r.name}', which has the dynamic op '${r.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(a.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${a}]`)}return v6(this.graph,this.weightMap,n)}cloneAndKeepTensor(e){if(e==null)return null;let t=e.clone();return Gt(t),t}cloneTensorList(e){return e?e.map(t=>this.cloneAndKeepTensor(t)):null}cloneTensorMap(e){return Object.fromEntries(Object.entries(e).map(([t,n])=>[t,this.cloneTensorList(n)]))}execute(e,t){this.disposeIntermediateTensors(),e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let a=n.map(p=>this.graph.nodes[Xn(p)[0]]),r=t.map(p=>Xn(p)[0]),s=r.map(p=>this.graph.nodes[p]);s.length===0&&(s=this._outputs);let i=this.getCompilationKey(a,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));try{this.keepIntermediateTensors=H().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(p){this.keepIntermediateTensors=!1,console.warn(p.message)}let l={},u={};return P(()=>{let p=new $k(this.weightMap,l,u,this.functionExecutorMap),d=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(e).forEach(m=>{let[f,g]=Xn(m),y=[];y[g]=e[m],d[f]=y,this.keepIntermediateTensors&&(this.clonedTensorsMap[f]=this.cloneTensorList(y))});let c=this.getFrozenTensorIds(d),h={};for(let m=0;m<o.length;m++){let f=o[m];if(!d[f.name]){let g=Ak(f,d,p,this._resourceManager);if(v.isPromise(g))throw new Error(`The execution of the op '${f.op}' returned a promise. Please use model.executeAsync() instead.`);d[f.name]=g,this.keepIntermediateTensors&&(this.clonedTensorsMap[f.name]=this.cloneTensorList(g)),this.checkTensorForDisposal(f.name,f,d,p,c,r,h)}}return this.parent==null&&p.dispose(c),t.map(m=>wn(m,d,p))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(a=>a.id)));return new Set(t)}checkTensorForDisposal(e,t,n,a,r,s,i){t.category==="control"||s.indexOf(e)!==-1||(n[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=NH(o.name,n,a);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!r.has(u.id)){let p=i[u.id];p===1?(u.dispose(),delete i[u.id]):p!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(e=>{for(let t of e)t&&!t.isDisposed&&t.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(e,t,n=!1,a={},r={}){this.disposeIntermediateTensors(),n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepIntermediateTensors=H().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let s=new $k(this.weightMap,a,r,this.functionExecutorMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(e,s,t,n),o=t.map(d=>wn(d,i,s)),l=o.map(d=>d.id),u=Object.keys(e).map(d=>e[d].id),p=new Set([...l,...u,...this.weightIds]);return Object.values(i).forEach(d=>{d.forEach(c=>{c&&!c.isDisposed&&!p.has(c.id)&&c.dispose()})}),this.parent==null&&s.dispose(p),o}async executeFunctionAsync(e,t,n){let a=e.reduce((r,s,i)=>(r[this.inputs[i].name]=s,r),{});return this._executeAsync(a,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,a){let r=Object.keys(e),s=r.map(b=>this.graph.nodes[Xn(b)[0]]),i=n.map(b=>Xn(b)[0]),o=i.map(b=>this.graph.nodes[b]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:p,syncInputs:d}=Fk(e,o,this.weightMap,this._initNodes),c=[...s,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(b=>{let[x,w]=Xn(b),I=[];I[w]=e[b],h[x]=I});let m={},f=this.getFrozenTensorIds(h),g={};for(;c.length>0;){let b=this.processStack(s,c,t,h,g,f,i,m,l);await Promise.all(b)}p==null&&!a&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=o.filter(b=>!w2(b)&&!wn(b.name,h,t)).map(b=>b.name);if(y.length>0){let b="";throw p!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${r}]. Consider providing the following inputs: [${u}]. ${b}`)}return h}processStack(e,t,n,a,r,s,i,o,l){let u=[];for(;t.length>0;){let p=t.pop();n.currentContext=p.contexts;let d="";if(p.node.op==="Enter"&&k("isConstant",p.node,a,n)&&([d]=Sr(p.node.name,n)),a[p.node.name]==null){let c=Ak(p.node,a,n,this._resourceManager);d||([d]=Sr(p.node.name,n));let h=n.currentContext;v.isPromise(c)?u.push(c.then(m=>(a[d]=m,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(m)),n.currentContext=h,this.checkTensorForDisposal(d,p.node,a,n,s,i,o),this.processChildNodes(p.node,t,n,a,r,l),m))):(a[d]=c,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(c)),this.checkTensorForDisposal(d,p.node,a,n,s,i,o),this.processChildNodes(p.node,t,n,a,r,l))}else this.processChildNodes(p.node,t,n,a,r,l)}return u}processChildNodes(e,t,n,a,r,s){e.children.forEach(i=>{let[o]=Sr(i.name,n);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!wn(l,a,n))&&(r[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!wn(l,a,n))&&(r[o]=!0,t.push({contexts:n.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[a]=Xn(t),r=this.graph.nodes[a];if(r.attrParams.shape&&r.attrParams.shape.value){let s=r.attrParams.shape.value,i=s.length===n.shape.length&&n.shape.every((o,l)=>s[l]===-1||s[l]===o);v.assert(i,()=>`The shape of dict['${r.name}'] provided in model.execute(dict) must be [${s}], but was [${n.shape}]`)}r.attrParams.dtype&&r.attrParams.dtype.value&&v.assert(n.dtype===r.attrParams.dtype.value,()=>`The dtype of dict['${r.name}'] provided in model.execute(dict) must be ${r.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){var t,n;let a={};for(let r in e){let s=(n=(t=this._signature)===null||t===void 0?void 0:t.inputs)===null||n===void 0?void 0:n[r];s!=null?a[s.name]=e[r]:a[r]=e[r]}return a}checkInputs(e){let t=Object.keys(e).filter(n=>{let[a]=Xn(n);return this.graph.nodes[a]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>{var n,a;let r=(a=(n=this._signature)===null||n===void 0?void 0:n.outputs)===null||a===void 0?void 0:a[t];return r!=null?r.name:t},{})}checkOutputs(e){e.forEach(t=>{let[n]=Xn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},N6=class{constructor(e={},t={}){this.hashTableNameToHandle=e,this.hashTableMap=t}addHashTable(e,t){this.hashTableNameToHandle[e]=t.handle,this.hashTableMap[t.id]=t}getHashTableHandleByName(e){return this.hashTableNameToHandle[e]}getHashTableById(e){return this.hashTableMap[e]}dispose(){for(let e in this.hashTableMap)this.hashTableMap[e].clearAndClose(),delete this.hashTableMap[e];for(let e in this.hashTableNameToHandle)this.hashTableNameToHandle[e].dispose(),delete this.hashTableNameToHandle[e]}},C6="?tfjs-format=file",_6="model.json",S0=class{constructor(e,t={},n=Ht){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=n,t==null&&(this.loadOptions={}),this.resourceManager=new N6}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return v.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let r=this.artifacts.userDefinedMetadata;r.signature!=null&&(n=r.signature),r.structuredOutputKeys!=null&&(this.structuredOutputKeys=r.structuredOutputKeys)}this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let a=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new ex(Nk.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(a),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=Nk.Instance.transformGraph(e.modelInitializer);this.initializer=new ex(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let n=this.io.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof Ne?[e]:e,n={};return t.forEach((a,r)=>n[this.structuredOutputKeys[r]]=a),n}return e}predict(e,t){let n=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(n)}async predictAsync(e,t){let n=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(n)}normalizeInputs(e){var t;if(!(e instanceof Ne)&&!Array.isArray(e)){let r=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(r!=null)for(let s in r){let i=r[s];i.resourceId!=null&&(e[s]=this.resourceIdToCapturedInput[i.resourceId])}return e}e=Array.isArray(e)?e:[e];let n=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+n!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-n} non-resource placeholders, while there are ${e.length} input tensors provided.`);let a=0;return this.inputNodes.reduce((r,s)=>{var i,o,l;let u=(l=(o=(i=this.signature)===null||i===void 0?void 0:i.inputs)===null||o===void 0?void 0:o[s])===null||l===void 0?void 0:l.resourceId;return u!=null?r[s]=this.resourceIdToCapturedInput[u]:r[s]=e[a++],r},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,n=Object.keys(t);for(let a=0;a<n.length;a++){let r=n[a],s=t[r];this.resourceIdToCapturedInput[s.resourceId]=e[a]}}}execute(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(this.executeInitializerGraph()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&_e(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function E6(e,t={},n=Ht){if(e==null)throw new Error("modelUrl in loadGraphModel() cannot be null. Please provide a url or an IOHandler that loads the model");t==null&&(t={}),t.fromTFHub&&typeof e=="string"&&(e=$6(e));let a=new S0(e,t,n);return await a.load(),a}function A6(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[a,r]=e;if(!a)throw new Error("modelJSON must be the first element of the array");if(!r||!(r instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in a))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in a))throw new Error("Model JSON is missing 'weightsManifest'");let s=Ht.getWeightSpecs(a.weightsManifest),i=Ht.getModelArtifactsForJSONSync(a,s,r);t=Ht.fromMemorySync(i)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Ht.fromMemorySync(e);else throw new Error("Unknown model format");let n=new S0(t);return n.load(),n}function $6(e){return e.endsWith("/")||(e=e+"/"),`${e}${_6}${C6}`}var F6="4.2.0",k2={};Ae(k2,{CSVDataset:()=>$2,Dataset:()=>Ru,FileDataSource:()=>L2,TextLineDataset:()=>A2,URLDataSource:()=>z2,array:()=>tq,csv:()=>dq,func:()=>hq,generator:()=>mq,microphone:()=>gq,version_data:()=>yq,webcam:()=>fq,zip:()=>nq});var R6=hs(Gh()),D6=hs(Gh());function M6(e,t){return Dh(e,t)}function Dh(e,t,n=new Map,a=new Set){if(e==null)return null;if(typeof Blob=="function"&&e instanceof Blob)return e.slice();if(a.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let r=t(e);if(r.recurse&&r.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(r.recurse)if(fl(e)){let s=Array.isArray(e)?[]:{};a.add(e);for(let i in e){let o=e[i],l=Dh(o,t,n,a);s[i]=l}return a.delete(e),e.__proto__&&(s.__proto__=e.__proto__),s}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,r.value),r.value}function P6(e,t=S2){return I2(e,t)}function I2(e,t,n=new Set){let a=e[0];if(n.has(a))throw new Error("Circular references are not supported.");let r=t(e);if(r.recurse&&r.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(r.recurse)if(fl(a)){let s=Array.isArray(a)?[]:{};n.add(a);for(let i in a){let o=e.map(u=>u[i]),l=I2(o,t,n);s[i]=l}return n.delete(a),s}else throw new Error(`Can't recurse into non-iterable type: ${a}`);else return r.value}function S2(e){return e===null?null:fl(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function T2(e,t){let n=new Map;Dh(e,t,n);for(let a of Array.from(n.keys())){let r=n.get(a);if(v.isPromise(r)){let s=await r;n.set(a,s)}}return Dh(e,t,n)}function fl(e){let t=!1;if(H().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=yI();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Ne)&&!(e instanceof Promise)&&!t)}function O6(e){return e==null||L6(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Ne||v.isTypedArray(e)}function L6(e){return e===null||typeof e!="object"&&typeof e!="function"}function z6(e){return M6(e,W6)}function W6(e){return e instanceof Ne?{value:e.clone(),recurse:!1}:fl(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var N2=class{constructor(e){if(this.capacity=e,this.begin=0,this.end=0,e==null)throw new RangeError("Can't create a ring buffer of unknown capacity.");if(e<1)throw new RangeError("Can't create ring buffer of capacity < 1.");this.data=new Array(e),this.doubledCapacity=2*e}wrap(e){for(;e<0;)e+=this.doubledCapacity;return e%this.doubledCapacity}get(e){if(e<0)throw new RangeError("Can't get item at a negative index.");return this.data[e%this.capacity]}set(e,t){if(e<0)throw new RangeError("Can't set item at a negative index.");this.data[e%this.capacity]=t}length(){let e=this.end-this.begin;return e<0&&(e=this.doubledCapacity+e),e}isFull(){return this.length()===this.capacity}isEmpty(){return this.length()===0}push(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.set(this.end,e),this.end=this.wrap(this.end+1)}pushAll(e){for(let t of e)this.push(t)}pop(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");this.end=this.wrap(this.end-1);let e=this.get(this.end);return this.set(this.end,void 0),e}unshift(e){if(this.isFull())throw new RangeError("Ring buffer is full.");this.begin=this.wrap(this.begin-1),this.set(this.begin,e)}shift(){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let e=this.get(this.begin);return this.set(this.begin,void 0),this.begin=this.wrap(this.begin+1),e}shuffleExcise(e){if(this.isEmpty())throw new RangeError("Ring buffer is empty.");let t=this.wrap(this.begin+e),n=this.get(t);return this.set(t,this.pop()),n}},T0=class extends N2{constructor(){super(T0.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let a=0;a<n;a++)t[a]=this.get(this.wrap(this.begin+a));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};T0.INITIAL_CAPACITY=32;function C2(e){return new U6(e)}function N0(e){return new G6(e)}function B6(e,t){return new _2(e,t)}function V6(e,t=Jr.FAIL){return new Q6(e,t)}var nn=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new Z6(this,e)}filter(e){return new X6(this,e)}map(e){return new Y6(this,e)}mapAsync(e){return new Rk(this,e)}serialMapAsync(e){return new Rk(this,e).serial()}flatmap(e){return new J6(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile(t=>t===!0)}rowMajorBatch(e,t=!0){return new K6(this,e,t)}columnMajorBatch(e,t=!0,n=S2){return this.rowMajorBatch(e,t).map(a=>P6(a,n))}concatenate(e,t){return new _2(C2([this,e]),t)}take(e){return e<0||e==null?this:new j6(this,e)}skip(e){return e<0||e==null?this:new q6(this,e)}prefetch(e){return new E2(this,e)}shuffle(e,t){return new eq(this,e,t)}serial(){return new H6(this)}},U6=class extends nn{constructor(e){super(),this.items=e,this.trav=0}summary(){return`Array of ${this.items.length} items`}async next(){if(this.trav>=this.items.length)return{value:null,done:!0};let e=this.items[this.trav];return this.trav++,{value:z6(e),done:!1}}},G6=class extends nn{constructor(e){super(),this.nextFn=e}summary(){return"Function call"}async next(){try{return this.nextFn()}catch(e){throw e.message=`Error thrown while iterating through a dataset: ${e.message}`,e}}},H6=class extends nn{constructor(e){super(),this.upstream=e,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Serial`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){return this.upstream.next()}},q6=class extends nn{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;_e(e.value)}return this.upstream.next()}},j6=class extends nn{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},K6=class extends nn{constructor(e,t,n=!0){super(),this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},X6=class extends nn{constructor(e,t){super(),this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;_e(e.value)}}},Y6=class extends nn{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Map`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Ua.getTensorsInContainer(e.value),n=this.transform(e.value),a=Ua.getTensorsInContainer(n);for(let r of t)Ua.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},Z6=class extends nn{constructor(e,t){super(),this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},Rk=class extends nn{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> AsyncMap`}async next(){let e=await this.upstream.next();if(e.done)return{value:null,done:!0};let t=Ua.getTensorsInContainer(e.value),n=await this.transform(e.value),a=Ua.getTensorsInContainer(n);for(let r of t)Ua.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},C0=class extends nn{constructor(){super(),this.outputQueue=new T0,this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.outputQueue.length()===0;)if(!await this.pump())return{value:null,done:!0};return{value:this.outputQueue.shift(),done:!1}}},J6=class extends C0{constructor(e,t){super(),this.upstream=e,this.transform=t}summary(){return`${this.upstream.summary()} -> Flatmap`}async pump(){let e=await this.upstream.next();if(e.done)return!1;let t=Ua.getTensorsInContainer(e.value),n=this.transform(e.value),a=Ua.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let r of t)Ua.isTensorInList(r,a)||r.dispose();return!0}},_2=class extends nn{constructor(e,t){super(),this.baseErrorHandler=t,this.lastRead=null,this.iterator=null,this.moreIterators=e}summary(){return"TODO: fill in upstream of chained summaries -> Chained"}async next(){return this.lastRead=this.readFromChain(this.lastRead),this.lastRead}async readFromChain(e){if(await e,this.iterator==null){let n=await this.moreIterators.next();if(n.done)return{value:null,done:!0};this.iterator=n.value,this.baseErrorHandler!=null&&(this.iterator=this.iterator.handleErrors(this.baseErrorHandler))}let t=await this.iterator.next();return t.done?(this.iterator=null,this.readFromChain(e)):t}},Jr;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(Jr||(Jr={}));var Q6=class extends nn{constructor(e,t=Jr.FAIL){super(),this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function a(s){return s instanceof nn?{value:s.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let r=await T2(this.iterators,a);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case Jr.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case Jr.SHORTEST:return{value:null,done:!0};case Jr.LONGEST:default:}return this.count++,{value:r,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},E2=class extends nn{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new N2(t)}summary(){return`${this.upstream.summary()} -> Prefetch`}refill(){for(;!this.buffer.isFull();){let e=this.upstream.next();this.buffer.push(e)}}next(){return this.refill(),this.buffer.shift()}},eq=class extends E2{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=D6.alea(n||v.now().toString()),this.lastRead=Promise.resolve({value:null,done:!1})}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}randomInt(e){return Math.floor(this.random()*e)}chooseIndex(){return this.randomInt(this.buffer.length())}async serialNext(){for(this.upstreamExhausted||this.refill();!this.buffer.isEmpty();){let e=this.chooseIndex(),t=await this.buffer.shuffleExcise(e);if(t.done)this.upstreamExhausted=!0;else return this.refill(),t}return{value:null,done:!0}}},Ru=class{constructor(){this.size=null}batch(e,t=!0){let n=this;v.assert(e>0,()=>`batchSize needs to be positive, but it is
|
|
${e}`);let a;return this.size===1/0||this.size==null?a=this.size:t?a=Math.ceil(this.size/e):a=Math.floor(this.size/e),Kn(async()=>(await n.iterator()).columnMajorBatch(e,t,aq),a)}concatenate(e){let t=this,n;return this.size===1/0||e.size===1/0?n=1/0:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,Kn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===1/0?n=1/0:n=null,Kn(async()=>(await t.iterator()).filter(a=>P(()=>e(a))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Kn(async()=>(await t.iterator()).map(n=>P(()=>e(n))),this.size)}mapAsync(e){let t=this;return Kn(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return Kn(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=1/0:n=null,Kn(async()=>{let a=N0(async()=>({value:await t.iterator(),done:!1}));return B6(a.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size<e||e===void 0||e<0)?n=0:n=null,Kn(async()=>(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let a=this,r=R6.alea(t||v.now().toString());return Kn(async()=>{let s=r.int32();return n&&(s+=r.int32()),(await a.iterator()).shuffle(e,s.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,Kn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};Ru.MAX_BUFFER_SIZE=1e4;function Kn(e,t=null){return new class extends Ru{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function tq(e){return Kn(async()=>C2(e),e.length)}function nq(e){if(!fl(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n<e.length;n++)t=t==null?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=t==null?e[n].size:Math.min(t,e[n].size);return Kn(async()=>{let n=await T2(e,a=>{if(a instanceof Ru)return{value:a.iterator(),recurse:!1};if(fl(a))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return V6(n,Jr.SHORTEST)},t)}function aq(e){if(e===null)return null;let t=e[0];return O6(t)?{value:rq(e),recurse:!1}:{value:null,recurse:!0}}function rq(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Ne?Ft(e):fn(e)}var A2=class extends Ru{constructor(e){super(),this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
|
|
`).map(e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e))}},Zd='"',Sp=Symbol("out"),Dk=Symbol("field"),Jd=Symbol("quote"),fb=Symbol("quoteafterquote"),Mk=Symbol("quoteinquote"),$2=class extends Ru{constructor(e,t){super(),this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new A2(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(v.assert(t.delimiter==null,()=>"Delimiter should not be provided when delimWhitespace is true."),this.delimWhitespace=!0,this.delimiter=" "):this.delimiter=t.delimiter?t.delimiter:","}async columnNames(){return this.columnNamesValidated||await this.setColumnNames(),this.configuredColumnsOnly?Object.keys(this.columnConfigs):this.fullColumnNames}async setColumnNames(){let e=await this.maybeReadHeaderLine();if(!this.fullColumnNames&&!e)throw new Error("Column names must be provided if there is no header line.");this.fullColumnNames&&e&&v.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((a,r)=>(a[r]=a[r]+1||1,a),{}),n=Object.keys(t).filter(a=>t[a]>1);if(v.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let a of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(a)===-1)throw new Error('The key "'+a+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},a={};for(let r=0;r<this.fullColumnNames.length;r++){let s=this.fullColumnNames[r],i=this.columnConfigs?this.columnConfigs[s]:null;if(!(this.configuredColumnsOnly&&!i)){let o=t[r],l=null;if(o==="")if(i&&i.default!==void 0)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let u=Number(o);if(isNaN(u))i&&i.dtype==="bool"?l=this.getBoolean(o):l=o;else if(!i||!i.dtype)l=u;else switch(i.dtype){case"float32":l=u;break;case"int32":l=Math.floor(u);break;case"bool":l=this.getBoolean(o);break;default:l=u}}i&&i.isLabel?a[s]=l:n[s]=l}}return Object.keys(a).length===0?n:{xs:n,ys:a}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],a=0,r=e.length,s=Sp;for(let i=0;i<r;i++)switch(s){case Sp:switch(e.charAt(i)){case Zd:a=i+1,s=Jd;break;case this.delimiter:if(a=i+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),s=Sp;break;default:s=Dk,a=i;break}break;case Dk:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(a,i)),s=Sp,a=i+1;break;default:}break;case Jd:switch(e.charAt(i)){case Zd:s=fb;break;default:}break;case fb:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(a,i-1)),s=Sp,a=i+1;break;case Zd:s=Jd;break;default:s=Mk;break}break;case Mk:switch(e.charAt(i)){case Zd:s=Jd;break;default:}break;default:}if(s===fb?n.push(e.substring(a,r-1)):n.push(e.substring(a)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},F2=class extends nn{constructor(e){super(),this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);if(this.fftSize<0||t<4||t>14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(!H().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let t=new F2(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let a=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(a,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let a=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(a,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(a=>{let r=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&a({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(r),a({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((a,r)=>n.set(a,r*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(v.sizeFromShape(t));return n.set(e,n.length-e.length),fn(n,t)}},R2=class extends nn{constructor(e,t){if(super(),this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=je([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,a=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,r=(1-n)/2,s=(1-a)/2,i=r+n,o=a+s;this.cropBox=Aa([s,r,o,i],[1,4])}else this.cropBox=Aa([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(!H().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new R2(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&v.assert(this.webcamConfig.facingMode==="user"||this.webcamConfig.facingMode==="environment",()=>`Invalid webcam facing mode: ${this.webcamConfig.facingMode}. Please provide 'user' or 'environment'`);try{this.stream=await navigator.mediaDevices.getUserMedia({video:{deviceId:this.webcamConfig.deviceId,facingMode:this.webcamConfig.facingMode?this.webcamConfig.facingMode:"user",width:this.webcamVideoElement.width,height:this.webcamVideoElement.height}})}catch(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=vo.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return P(()=>{let t=Qt(ie(e,"float32"),0),n;n=Ea.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let a=n.shape;return W(n,a.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},D2=class{},M2=class extends nn{split(e){return new sq(this,e)}},sq=class extends M2{constructor(e,t){super(),this.upstream=e,this.impl=new iq(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},iq=class extends C0{constructor(e,t){super(),this.upstream=e,this.separator=t,this.carryover=""}summary(){return`${this.upstream.summary()} -> Split('${this.separator}')`}async pump(){let e=await this.upstream.next();if(e.done)return this.carryover===""?!1:(this.outputQueue.push(this.carryover),this.carryover="",!0);let t=e.value.split(this.separator);t[0]=this.carryover+t[0];for(let n of t.slice(0,-1))this.outputQueue.push(n);return this.carryover=t[t.length-1],!0}},oq=class extends nn{decodeUTF8(){return new lq(this)}},lq=class extends M2{constructor(e){super(),this.upstream=e,this.impl=new uq(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},uq=class extends C0{constructor(e){if(super(),this.upstream=e,H().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=yI();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return H().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},P2=class extends oq{constructor(e,t={}){super(),this.file=e,this.options=t,v.assert(e instanceof Uint8Array||(H().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let a=new FileReader;a.onload=s=>{let i=a.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(i)},a.onabort=s=>t(new Error("Aborted")),a.onerror=s=>t(new Error(s.type));let r=this.file.slice(this.offset,n);a.readAsArrayBuffer(r)}this.offset=n}),done:!1}}};async function pq(e,t={},n){let a,r;typeof e=="string"?a=e:(a=e.url,r=cq(e));let s=await(n||v.fetch)(a,r);if(s.ok){let i=new Uint8Array(await s.arrayBuffer());return new P2(i,t)}else throw new Error(s.statusText)}var cq=e=>({method:e.method,headers:e.headers,body:e.body,mode:e.mode,credentials:e.credentials,cache:e.cache,redirect:e.redirect,referrer:e.referrer,integrity:e.integrity});function O2(e){return typeof e=="string"&&e.slice(0,7)==="file://"}var L2=class extends D2{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(O2(this.input)&&H().get("IS_NODE")){let e=yx();this.input=e.readFileSync(this.input.slice(7))}return new P2(this.input,this.options)}},z2=class extends D2{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return O2(this.url)?new L2(this.url,this.fileOptions).iterator():pq(this.url,this.fileOptions)}};function dq(e,t={}){return new $2(new z2(e),t)}function hq(e){let t=N0(e);return Kn(async()=>t)}function mq(e){return Kn(async()=>{let t=await e();return N0(()=>t.next())})}async function fq(e,t){return R2.create(e,t)}async function gq(e){return F2.create(e)}var yq="4.2.0";function ge(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&v.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var bq=hr.whereImpl,_0=class extends ac{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Hh(this,Ca())}nextDataId(){return _0.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,H().get("IS_NODE")&&N.warn(`
|
|
============================
|
|
Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details.
|
|
============================`));let a={id:this.nextDataId()};return this.data.set(a,{values:e,dtype:n,refCount:1}),a}makeTensorInfo(e,t,n){let a;if(t==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let r=n.map(s=>v.encodeString(s));a=this.write(r,e,t)}else a=this.write(n,e,t);return{dataId:a,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,a,r){this.data.set(e,{values:t,dtype:a,refCount:r})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let a=this.readSync(n.real.dataId),r=this.readSync(n.imag.dataId);return N.mergeRealAndImagArrays(a,r)}return v.convertBackendValuesAndArrayBuffer(this.data.get(e).values,t)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let n=t.map(a=>v.decodeString(a));return Le(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Le(e.shape,e.dtype,t)}makeOutput(e,t,n){return Ca().makeTensorFromTensorInfo(this.makeTensorInfo(t,n,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){ge([e],"where");let t=this.readSync(e.dataId);return bq(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};_0.nextDataId=0;var W2={};Ae(W2,{addImpl:()=>U2,bincountImpl:()=>A0,bincountReduceImpl:()=>G2,castImpl:()=>V2,ceilImpl:()=>H2,concatImpl:()=>$0,equalImpl:()=>q2,expImpl:()=>K2,expm1Impl:()=>Y2,floorImpl:()=>Z2,gatherNdImpl:()=>J2,gatherV2Impl:()=>Q2,greaterEqualImpl:()=>tC,greaterImpl:()=>eC,lessEqualImpl:()=>aC,lessImpl:()=>nC,linSpaceImpl:()=>rC,logImpl:()=>sC,maxImpl:()=>iC,maximumImpl:()=>oC,minimumImpl:()=>lC,multiplyImpl:()=>F0,negImpl:()=>uC,notEqualImpl:()=>pC,prodImpl:()=>cC,raggedGatherImpl:()=>dC,raggedRangeImpl:()=>hC,raggedTensorToTensorImpl:()=>mC,rangeImpl:()=>D0,rsqrtImpl:()=>fC,scatterImpl:()=>Zo,sigmoidImpl:()=>dj,simpleAbsImpl:()=>B2,sliceImpl:()=>Ph,sparseFillEmptyRowsImpl:()=>yC,sparseReshapeImpl:()=>bC,sparseSegmentReductionImpl:()=>M0,sqrtImpl:()=>fj,squaredDifferenceImpl:()=>xC,stridedSliceImpl:()=>vC,stringNGramsImpl:()=>P0,stringSplitImpl:()=>O0,stringToHashBucketFastImpl:()=>L0,subImpl:()=>wC,tileImpl:()=>kC,topKImpl:()=>SC,transposeImpl:()=>R0,uniqueImpl:()=>TC});function B2(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var xq=e=>{let{x:t}=e.inputs,n=e.backend;ge(t,"abs");let a=new Float32Array(v.sizeFromShape(t.shape)),r=n.data.get(t.dataId).values;return a=B2(r),n.makeOutput(a,t.shape,t.dtype)},vq={kernelName:wl,backendName:"cpu",kernelFunc:xq};function Vt(e){return(t,n,a,r,s)=>{let i=N.assertAndGetBroadcastShape(t,n),o=i.length,l=v.computeStrides(i),u=v.sizeFromShape(i),p=v.getTypedArrayFromDType(s,u),d=t.length,c=n.length,h=v.computeStrides(t),m=v.computeStrides(n),f=N.getBroadcastDims(t,i),g=N.getBroadcastDims(n,i);if(f.length+g.length===0)for(let y=0;y<p.length;++y)p[y]=e(a[y%a.length],r[y%r.length]);else for(let y=0;y<p.length;++y){let b=v.indexToLoc(y,o,l),x=b.slice(-d);f.forEach(C=>x[C]=0);let w=v.locToIndex(x,d,h),I=b.slice(-c);g.forEach(C=>I[C]=0);let T=v.locToIndex(I,c,m);p[y]=e(a[w],r[T])}return[p,i]}}function Yn(e){let{inputs:t,backend:n}=e,{real:a,imag:r}=t,s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,o=n.makeTensorInfo(a.shape,"complex64"),l=n.data.get(o.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(a.shape,"float32",s),imag:n.makeTensorInfo(r.shape,"float32",i)},o}var wq={kernelName:Qh,backendName:"cpu",kernelFunc:Yn};function Mh(e,t,n="float32"){if(n==="complex64"){let r=Mh(e,t,"float32"),s=Mh(e,t,"float32");return Yn({inputs:{real:r,imag:s},backend:e})}let a=v.makeZerosTypedArray(v.sizeFromShape(t),n);return e.makeTensorInfo(t,n,a)}function pr(e){let{inputs:t,backend:n}=e,{x:a}=t;return n.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var kq={kernelName:Pi,backendName:"cpu",kernelFunc:pr};function ci(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.data.get(a.dataId).complexTensorInfos.real,s=n.data.get(r.dataId).values;return n.makeTensorInfo(r.shape,r.dtype,s)}var Iq={kernelName:wm,backendName:"cpu",kernelFunc:ci};function V2(e,t,n,a){if(a==="int32"){let r=Int32Array.from(e);return[t,"int32",r]}if(a==="bool"){let r=v.toTypedArray([0],n),[s,i]=Vt((o,l)=>o!==l?1:0)(t,[],e,r,"bool");return[i,"bool",s]}throw new Error(`Error in Cast: failed to cast ${n} to ${a}`)}function cs(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return pr({inputs:{x:r},backend:n});let p=Mh(n,r.shape,r.dtype),d=cs({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),c=Yn({inputs:{real:d,imag:p},backend:n});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),c}if(r.dtype==="complex64"){let p=ci({inputs:{input:r},backend:n}),d=cs({inputs:{x:p},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(p),d}if(!v.hasEncodingLoss(r.dtype,s)){let p=pr({inputs:{x:r},backend:n});return{dataId:p.dataId,shape:p.shape,dtype:s}}let i=n.data.get(r.dataId).values,[o,l,u]=V2(i,r.shape,r.dtype,s);return n.makeTensorInfo(o,l,u)}var Sq={kernelName:wi,backendName:"cpu",kernelFunc:cs};function rn(e,t,n,a){return n==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;ge([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,d=i.dtype==="string"?N.fromUint8ToStringArray(u):u,c=i.dtype==="string"?N.fromUint8ToStringArray(p):p,h=a||i.dtype,[m,f]=t(i.shape,o.shape,d,c,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=cs({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),p=l.data.get(u.dataId),d=p.complexTensorInfos.real,c=p.complexTensorInfos.imag,h=l.data.get(d.dataId).values,m=l.data.get(c.dataId).values,f=cs({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,x=l.data.get(y.dataId).values,w=l.data.get(b.dataId).values,[I,T,C]=n(i.shape,o.shape,h,m,x,w),E=l.makeTensorInfo(C,"float32",I),$=l.makeTensorInfo(C,"float32",T),R=Yn({inputs:{real:E,imag:$},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(E),l.disposeIntermediateTensorInfo($),R}else{let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,d=a||i.dtype,[c,h]=t(i.shape,o.shape,u,p,d);return l.makeTensorInfo(h,d,c)}}}function E0(e){return(t,n,a,r,s,i)=>{let o=N.assertAndGetBroadcastShape(t,n),l=v.sizeFromShape(o),u=o.length,p=v.computeStrides(o),d=v.getTypedArrayFromDType("float32",l),c=v.getTypedArrayFromDType("float32",l),h=N.getBroadcastDims(t,o),m=N.getBroadcastDims(n,o),f=N.mergeRealAndImagArrays(a,r),g=N.mergeRealAndImagArrays(s,i),y=t.length,b=v.computeStrides(t),x=n.length,w=v.computeStrides(n);if(h.length+m.length===0)for(let I=0;I<d.length;I++){let T=I%f.length,C=I%g.length,E=e(f[T*2],f[T*2+1],g[C*2],g[C*2+1]);d[I]=E.real,c[I]=E.imag}else for(let I=0;I<d.length;I++){let T=v.indexToLoc(I,u,p),C=T.slice(-y);h.forEach(S=>C[S]=0);let E=v.locToIndex(C,y,b),$=T.slice(-x);m.forEach(S=>$[S]=0);let R=v.locToIndex($,x,w),F=e(f[E*2],f[E*2+1],g[R*2],g[R*2+1]);d[I]=F.real,c[I]=F.imag}return[d,c,o]}}var U2=Vt((e,t)=>e+t),Tq=E0((e,t,n,a)=>({real:e+n,imag:t+a})),gl=rn(fs,U2,Tq),Nq={kernelName:fs,backendName:"cpu",kernelFunc:gl};function A0(e,t,n,a,r){let s=v.sizeFromShape(a),i=v.makeZerosTypedArray(r,n);for(let o=0;o<e.length;o++){let l=e[o];if(l<0)throw new Error("Input x must be non-negative!");l>=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function G2(e,t,n,a=!1){let r=e.shape[0],s=e.shape[1],i=Le([r,n],t.dtype);for(let o=0;o<r;o++)for(let l=0;l<s;l++){let u=e.get(o,l);if(u<0)throw new Error("Input x must be non-negative!");u>=n||(a?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function Ts(e){return(t,n,a)=>{let r=v.getTypedArrayFromDType(n,t.length);for(let s=0;s<t.length;++s)r[s]=e(t[s],a);return r}}function rt(e,t,n){return({inputs:a,attrs:r,backend:s})=>{let{x:i}=a;if(ge(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=v.sizeFromShape(i.shape),p=n||i.dtype,d=v.getArrayFromDType(p,u);for(let c=0;c<u;++c)d[c]=t(l[c],r);return o.makeTensorInfo(i.shape,p,d)}}function Du(e,t,n){return({inputs:a,attrs:r,backend:s})=>{let{x:i}=a;if(ge(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=n||i.dtype,p=t(l,u,r);return o.makeTensorInfo(i.shape,u,p)}}var H2=Ts(e=>Math.ceil(e)),Cq=Du(ki,H2),_q={kernelName:ki,backendName:"cpu",kernelFunc:Cq};function $0(e,t,n,a){let r=v.getArrayFromDType(n,v.sizeFromShape(t));if(a&&n!=="string"){let s=0;e.forEach(i=>{let o=v.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=n==="string"?N.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;u<i.shape[0];++u){let p=u*t[1]+s;for(let d=0;d<i.shape[1];++d)r[p+d]=o[l++]}s+=i.shape[1]})}return r}var q2=Vt((e,t)=>e===t?1:0),j2=rn(Ol,q2,null,"bool"),Eq={kernelName:Ol,backendName:"cpu",kernelFunc:j2},K2=Ts(e=>Math.exp(e)),X2=Du($i,K2,"float32"),Aq={kernelName:$i,backendName:"cpu",kernelFunc:X2},Y2=Ts(e=>Math.expm1(e)),$q=Du(zl,Y2),Fq={kernelName:zl,backendName:"cpu",kernelFunc:$q},Z2=Ts(e=>Math.floor(e)),Rq=Du(Fi,Z2),Dq={kernelName:Fi,backendName:"cpu",kernelFunc:Rq};function J2(e,t,n,a,r,s,i,o,l){let u=Le([a,s],n);for(let p=0;p<a;p++){let d=[],c=0;for(let h=0;h<r;h++){let m=e[p*r+h];c+=m*i[h],d.push(m)}if(c<0||c>=l/s)throw new Error(`Invalid indices: ${d} does not index into ${o}`);for(let h=0;h<s;h++)u.values[p*s+h]=t.get(...t.indexToLoc(c*s+h))}return u}function Q2(e,t,n){let a=Le(n,e.dtype);for(let r=0;r<a.size;++r){let s=a.indexToLoc(r).slice(),i=s[0],o=s[2],l=t.locToIndex([i,o]);s[2]=t.values[l];let u=e.locToIndex(s);0<=u&&u<e.values.length&&(a.values[r]=e.values[u])}return a}var eC=Vt((e,t)=>e>t?1:0),Mq=rn(Ul,eC,null,"bool"),Pq={kernelName:Ul,backendName:"cpu",kernelFunc:Mq},tC=Vt((e,t)=>e>=t?1:0),Oq=rn(Mi,tC,null,"bool"),Lq={kernelName:Mi,backendName:"cpu",kernelFunc:Oq},nC=Vt((e,t)=>e<t?1:0),zq=rn(ql,nC,null,"bool"),Wq={kernelName:ql,backendName:"cpu",kernelFunc:zq},aC=Vt((e,t)=>e<=t?1:0),Bq=rn(jl,aC,null,"bool"),Vq={kernelName:jl,backendName:"cpu",kernelFunc:Bq};function rC(e,t,n){let a=(t-e)/(n-1),r=v.makeZerosTypedArray(n,"float32");r[0]=e;for(let s=1;s<r.length;s++)r[s]=r[s-1]+a;return r}var sC=Ts(e=>Math.log(e)),Uq=Du(zi,sC),Gq={kernelName:zi,backendName:"cpu",kernelFunc:Uq};function iC(e,t,n,a){let r=v.getTypedArrayFromDType(a,v.sizeFromShape(n));for(let s=0;s<r.length;++s){let i=s*t,o=e[i];for(let l=0;l<t;++l){let u=e[i+l];(Number.isNaN(u)||u>o)&&(o=u)}r[s]=o}return r}var oC=Vt((e,t)=>Math.max(e,t)),Hq=rn(Bi,oC),qq={kernelName:Bi,backendName:"cpu",kernelFunc:Hq},lC=Vt((e,t)=>Math.min(e,t)),jq=rn(Hi,lC),Kq={kernelName:Hi,backendName:"cpu",kernelFunc:jq},F0=Vt((e,t)=>e*t),Xq=E0((e,t,n,a)=>({real:e*n-t*a,imag:e*a+t*n})),Cf=rn(ji,F0,Xq),Yq={kernelName:ji,backendName:"cpu",kernelFunc:Cf};function uC(e,t,n){let a=v.createScalarValue(-1,n);return F0([],t,a,e,n)}function Zq(e){let{inputs:t,backend:n}=e,{x:a}=t;ge(a,"neg");let r=n.data.get(a.dataId).values,[s,i]=uC(r,a.shape,a.dtype);return n.makeTensorInfo(i,a.dtype,s)}var Jq={kernelName:Ql,backendName:"cpu",kernelFunc:Zq},pC=Vt((e,t)=>e!==t?1:0),Qq=rn(eu,pC,null,"bool"),ej={kernelName:eu,backendName:"cpu",kernelFunc:Qq};function R0(e,t,n,a,r){let s=t.length,i=v.sizeFromShape(t),o=v.computeStrides(t),l=v.computeStrides(r),u=v.getTypedArrayFromDType(n,v.sizeFromShape(r));for(let p=0;p<i;++p){let d=v.indexToLoc(p,s,o),c=new Array(d.length);for(let m=0;m<c.length;m++)c[m]=d[a[m]];let h=v.locToIndex(c,s,l);u[h]=e[p]}return u}function Vn(e){let{inputs:t,attrs:n,backend:a}=e,{x:r}=t,{perm:s}=n;ge(r,"transpose");let i=r.shape.length,o=new Array(i);for(let p=0;p<o.length;p++)o[p]=r.shape[s[p]];let l=a.data.get(r.dataId).values,u=R0(l,r.shape,r.dtype,s,o);return{dataId:a.write(u,o,r.dtype),shape:o,dtype:r.dtype}}var tj={kernelName:Cr,backendName:"cpu",kernelFunc:Vn};function cC(e,t,n,a){let[r,s]=N.computeOutAndReduceShapes(e,a),i=ma(t,"int32"),o=v.makeZerosTypedArray(v.sizeFromShape(r),i),l=v.sizeFromShape(s);for(let u=0;u<o.length;++u){let p=u*l,d=1;for(let c=0;c<l;++c)d*=n[p+c];o[u]=d}return{outVals:o,outShape:r,outDtype:i}}function nj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;ge(r,"prod");let o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=N.getAxesPermutation(l,o),p=l,d=r,c=[];u!=null&&(d=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),c.push(d),p=N.getInnerMostAxes(p.length,o));let h=n.data.get(d.dataId).values,{outVals:m,outShape:f,outDtype:g}=cC(d.shape,d.dtype,h,p),y=f;return i&&(y=N.expandShapeToKeepDim(f,l)),c.forEach(b=>n.disposeIntermediateTensorInfo(b)),n.makeTensorInfo(y,g,m)}var aj={kernelName:Ji,backendName:"cpu",kernelFunc:nj};function rj(e,t,n){e.forEach((a,r)=>{if(a<0||a>=n){let s=v.indexToLoc(r,t.length,v.computeStrides(t)).join(",");throw new Error(`indices[${s}] = ${a} is not in [0, ${n})`)}})}function sj(e,t){for(let n=0;n<e.length;++n){let a=e[n],r=n===e.length-1?t:e[n+1].length;if(a.length===0)throw new Error("Ragged splits may not be empty");if(a[0]<0)throw new Error("Ragged splits must be non-negative");if(a[a.length-1]>r)throw new Error("Ragged splits must not point past values");for(let s=1;s<a.length;++s)if(a[s-1]>a[s])throw new Error("Ragged splits must be sorted in ascending order")}}function ij(e,t,n,a){let r=[],s=0,i=t.length-1+n.length,o=new Array(i).fill(null).map(()=>[0]);sj(n,a);let l=1;for(let u=0;u<t.length-1;++u){l*=t[u];let p=t[u+1];for(let d=1;d<l+1;++d)o[u].push(d*p)}for(let u=0;u<e.length;++u){let p=e[u],d=e[u]+1;for(let c=0;c<n.length;++c){let h=n[c],m=c+t.length-1;if(m>=0){let f=o[m],g=f[f.length-1]-h[p];for(let y=p;y<d;++y)o[m].push(h[y+1]+g)}p=h[p],d=h[d]}d!==p&&(r.push([p,d]),s+=d-p)}return{outSplits:o,valueSlices:r,numValues:s}}function oj(e){let t=[];for(let n=0;n<e.length;++n){let a=e[n].length,r=v.getArrayFromDType("int32",a);t.push(r),e[n].forEach((s,i)=>r[i]=s)}return t}function Pk(e,t){let n=e.slice(0,t);for(;n.length<t;)n.push(1);for(let a=t;a<e.length;a++)n[t-1]*=e[a];return n}function lj(e,t,n,a,r,s){let i=Pk(t,2)[1],o=Pk(s,2)[1],l=0;for(let u of n)for(let p=u[0];p<u[1];++p){for(let d=0;d<a;++d)r[l*o+d]=e[p*i+d];++l}}function uj(e,t,n,a,r){let s=t.slice();s[0]=r;let i=v.getArrayFromDType(n,v.sizeFromShape(s)),o=e.length,l=o===0?0:o/t[0];return lj(e,t,a,l,i,s),[i,s]}function dC(e,t,n,a,r,s,i,o){if(e.length===0)throw new Error("paramsNestedSplits must be non empty");if(t[0].length===0)throw new Error("Split tensors must not be scalars");let l=t[0][0]-1;if(rj(s,i,l),a.length===0)throw new Error("params.rank must be nonzero");let u=a[0],{outSplits:p,valueSlices:d,numValues:c}=ij(s,i,e,u),h=oj(p),m=uj(n,a,r,d,c);return[h,m[0],m[1]]}var Ok=2147483647;function hC(e,t,n,a,r,s,i){if(t.length>1)throw new Error("starts must be a scalar or vector");if(r.length>1)throw new Error("limits must be a scalar or vector");if(i.length>1)throw new Error("deltas must be a scalar or vector");let o=t.length===0,l=r.length===0,u=i.length===0,p=[];o||p.push(t[0]),l||p.push(r[0]),u||p.push(i[0]);for(let g=1;g<p.length;++g)if(p[g]!==p[g-1])throw new Error("starts, limits, and deltas must have the same shape");let d=p.length===0?1:p[0],c=v.getArrayFromDType("int32",d+1);c[0]=0;for(let g=0;g<d;++g){let y=o?e[0]:e[g],b=l?a[0]:a[g],x=u?s[0]:s[g];if(x===0)throw new Error("Requires delta != 0");let w;if(x>0&&b<y||x<0&&b>y)w=0;else if(w=Math.ceil(Math.abs((b-y)/x)),w>Ok)throw new Error(`Requires ((limit - start) / delta) <= ${Ok}`);c[g+1]=c[g]+w}let h=c[d],m=v.getArrayFromDType(n,h),f=0;for(let g=0;g<d;++g){let y=c[g+1]-c[g],b=o?e[0]:e[g],x=u?s[0]:s[g];for(let w=0;w<y;++w)m[f++]=b,b+=x}return[c,m]}var Sa=N.RowPartitionType,tx=class{constructor(e,t,n,a,r,s,i,o,l,u){this.shape=e,this.shapeShape=t,this.values=n,this.valuesShape=a,this.valuesDType=r,this.defaultValue=s,this.defaultValueShape=i,this.rowPartitionValues=o,this.rowPartitionValuesShapes=l,this.rowPartitionTypes=N.getRowPartitionTypesHelper(u),this.raggedRank=N.getRaggedRank(this.rowPartitionTypes)}getRowPartitionTypeByDimension(e){return this.rowPartitionTypes[0]===Sa.FIRST_DIM_SIZE?this.rowPartitionTypes[e+1]:this.rowPartitionTypes[e]}getRowPartitionTensor(e){return this.rowPartitionTypes[0]===Sa.FIRST_DIM_SIZE?this.rowPartitionValues[e+1]:this.rowPartitionValues[e]}getMaxWidth(e){let t=this.getRowPartitionTensor(e-1);switch(this.getRowPartitionTypeByDimension(e-1)){case Sa.VALUE_ROWIDS:return tx.getMaxWidthValueRowID(t);case Sa.ROW_SPLITS:return tx.getMaxWidthRowSplit(t);default:throw new Error(`Cannot handle partition type ${Sa[this.getRowPartitionTypeByDimension(e-1)]}`)}}static getMaxWidthRowSplit(e){let t=e.length;if(t===0||t===1)return 0;let n=0;for(let a=0;a<t-1;++a){let r=e[a+1]-e[a];r>n&&(n=r)}return n}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let n=0,a=e[0],r=0;for(let s=1;s<t;++s){let i=e[s];i!==a&&(a=i,r=Math.max(s-n,r),n=s)}return Math.max(t-n,r)}tensorShapeFromTensor(e,t,n=!0){if(t.length===0){if(e[0]===-1)return[];throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1.")}return zk(e,n)}calculateOutputSize(e){let t=this.valuesShape,n=this.defaultValueShape;N.validateDefaultValueShape(n,t);let a=this.tensorShapeFromTensor(this.shape,this.shapeShape),r=N.combineRaggedTensorToTensorShapes(this.raggedRank,a,t);r[0]<0&&(r[0]=e);for(let s=1;s<=this.raggedRank;++s)r[s]<0&&(r[s]=this.getMaxWidth(s));return r}calculateFirstParentOutputIndex(e,t,n){let a=Math.min(e,n),r=[],s=0;for(let i=0;i<a;++i,s+=t)r.push(s);for(let i=a;i<e;++i)r.push(-1);return v.assert(r.length===e,()=>"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,n,a){let r=e.length,s=[];for(let i=0;i<r-1;++i){let o=e[i+1]-e[i],l=Math.min(a,o),u=t[i];u===-1&&(l=0);for(let p=0;p<l;++p)s.push(u),u+=n;for(let p=0;p<o-l;++p)s.push(-1)}if(r>0&&s.length!==e[r-1])throw new Error("Invalid row split size.");return s}calculateOutputIndexValueRowID(e,t,n,a){let r=e.length,s=[];if(r===0)return[];let i=0,o=e[0];if(o>=t.length)throw new Error(`Got currentValueRowId=${o}, which is not less than ${t.length}`);let l=t[o];s.push(l);for(let u=1;u<r;++u){let p=e[u];if(p===o)l>=0&&(++i,i<a?l+=n:l=-1);else{if(i=0,o=p,p>=t.length)throw new Error(`Got nextValueRowId=${p} which is not less than ${t.length}`);l=t[p]}s.push(l)}if(s.length!==e.length)throw new Error("Invalid row ids.");return s}calculateOutputIndex(e,t,n,a){let r=this.getRowPartitionTensor(e),s=this.getRowPartitionTypeByDimension(e);switch(s){case Sa.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,n,a);case Sa.ROW_SPLITS:if(r.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${r.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(r,t,n,a);default:throw new Error(`Unsupported partition type: ${Sa[s]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case Sa.FIRST_DIM_SIZE:return e[0];case Sa.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Sa.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Sa[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let e=this.getFirstDimensionSize(),t=this.calculateOutputSize(e),n=new Array(this.raggedRank+1);n[n.length-1]=1;for(let s=n.length-2;s>=0;--s)n[s]=n[s+1]*t[s+1];let a=zk(t,!1),r=v.getArrayFromDType(this.valuesDType,v.sizeFromShape(a));if(n[0]*t[0]>0){let s=this.calculateFirstParentOutputIndex(e,n[0],t[0]);for(let i=1;i<=this.raggedRank;++i)s=this.calculateOutputIndex(i-1,s,n[i],t[i]);this.setOutput(this.raggedRank,s,r,a)}return[a,r]}setOutput(e,t,n,a){if(n.length===0)return;let r=this.values,s=n,i=a.slice();i=i.slice(e+1);let o=v.sizeFromShape(i),l=t.length,u=this.defaultValue;if(u.length!==o&&u.length!==1){let h=this.defaultValueShape;P(()=>{let m=W(u,h);u=Ys(m,i).dataSync()})}let p=0,d=0,c=0;for(let h=0;h<=l;++h){let m=h<l?t[h]:-1;if(m===c){++c;continue}if(d<c){let f=r.subarray(p*o),g=s.subarray(d*o),y=(c-d)*o;Lk(g,f,y)}if(h>=l){let f=n.length;m=Math.floor(f/o)}if(m>c)if(this.defaultValue.length===1)s.subarray(c*o,m*o).fill(this.defaultValue[0]),c=m;else for(;m>c;){let f=s.slice(c*o);Lk(f,u,o),++c}m<0?(p=h+1,d=c):(p=h,d=c,c=d+1)}}};function Lk(e,t,n){for(let a=0;a<n;a++)e[a]=t[a]}function zk(e,t){let n=[];for(let a of e){if(a<0){if(!t)throw new Error(`Dimension ${a} must be >= 0`);if(a<-1)throw new Error(`Dimension ${a} must be >= -1`);a=-1}n.push(a)}return n}function mC(e,t,n,a,r,s,i,o,l,u){return new tx(e,t,n,a,r,s,i,o,l,u).compute()}function D0(e,t,n,a){let r=e===t,s=e<t&&n<0,i=t<e&&n>1;if(r||s||i)return v.makeZerosTypedArray(0,a);let o=Math.abs(Math.ceil((t-e)/n)),l=v.makeZerosTypedArray(o,a);t<e&&n===1&&(n=-1),l[0]=e;for(let u=1;u<l.length;u++)l[u]=l[u-1]+n;return l}var fC=Ts(e=>1/Math.sqrt(e)),pj=Du(io,fC),cj={kernelName:io,backendName:"cpu",kernelFunc:pj};function Zo(e,t,n,a,r,s,i,o,l,u){let p=[a/r,r],d=e.values,c=t.values;if(a===0)return Le(n,t.dtype);let h=Le(p,t.dtype);typeof l=="string"||typeof l=="number"?h.values.fill(l):typeof l=="boolean"&&h.values.fill(+l);for(let m=0;m<s;m++){let f=[],g=0;for(let y=0;y<i;y++){let b=d[m*i+y];f.push(b),g+=b*o[y]}if(g<0||g>=a/r)throw new Error(`Invalid indices: ${f} does not index into ${n}`);for(let y=0;y<r;y++)u?h.values[g*r+y]+=c[m*r+y]:h.values[g*r+y]=t.rank===0?c[0]:c[m*r+y]}return h}var dj=Ts(e=>1/(1+Math.exp(-e))),gC=rt(lo,e=>1/(1+Math.exp(-e))),hj={kernelName:lo,backendName:"cpu",kernelFunc:gC};function Ph(e,t,n,a,r){let s=Kt.isSliceContinous(a,t,n),i=v.sizeFromShape(n),o=v.computeStrides(a);if(s){let d=Kt.computeFlatOffset(t,o);return r==="string"?e.slice(d,d+i):e.subarray(d,d+i)}let l=r==="string"?N.fromUint8ToStringArray(e):e,u=Le(a,r,l),p=Le(n,r);for(let d=0;d<p.size;++d){let c=p.indexToLoc(d),h=c.map((m,f)=>m+t[f]);p.set(u.get(...h),...c)}return r==="string"?N.fromStringArrayToUint8(p.values):p.values}function di(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a;ge(r,"slice");let[o,l]=Kt.parseSliceParams(r,s,i);Kt.assertParamsValid(r,o,l);let u=n.data.get(r.dataId).values,p=Ph(u,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,p)}var mj={kernelName:pu,backendName:"cpu",kernelFunc:di};function yC(e,t,n,a,r,s,i){let o=t[0],l=s[0],u=new Array(l),p=new Array(o),d=t[1];if(l===0){if(o!==0)throw new Error(N.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(n,0),y=v.getArrayFromDType(r,0);return[g,[0,d],y,u,p]}let c=!0,h=0,m=new Array(l).fill(0);for(let g=0;g<o;++g){let y=e[g*d];if(y<0)throw new Error(N.getSparseFillEmptyRowsNegativeIndexErrorMessage(g,y));if(y>=l)throw new Error(N.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],c=c&&y>=h,h=y}let f=!0;for(let g=0;g<l;++g){let y=m[g]===0;u[g]=y,f=f&&!y,m[g]=Math.max(m[g],1),g>0&&(m[g]+=m[g-1])}if(f&&c){let g=e,y=a;for(let b=0;b<o;++b)p[b]=b;return[g,[o,d],y,u,p]}else{let g=m[l-1],y=v.getArrayFromDType(n,g*d),b=v.getArrayFromDType(r,g),x=new Array(l).fill(0);for(let w=0;w<o;++w){let I=e[w*d],T=x[I],C=(I===0?0:m[I-1])+T;x[I]++;for(let E=0;E<d;++E)y[C*d+E]=e[w*d+E];b[C]=a[w],p[w]=C}for(let w=0;w<l;++w)if(x[w]===0){let I=w===0?0:m[w-1];y[I*d+0]=w;for(let T=1;T<d;++T)y[I*d+T]=0;b[I]=i}return[y,[g,d],b,u,p]}}function bC(e,t,n,a,r){let s=v.sizeFromShape(a),i=t[0],o=r.length,l=[],u=1,p=-1;for(let f=0;f<o;++f){let g=r[f];if(g===-1){if(p!==-1)throw new Error(N.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(p,f));p=f,l.push(1)}else{if(g<0)throw new Error(N.getSparseReshapeNegativeOutputDimErrorMessage(f,g));u*=g,l.push(g)}}if(p!==-1){if(u<=0)throw new Error(N.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());let f=Math.trunc(s/u);if(u*f!==s)throw new Error(N.getSparseReshapeInputOutputMultipleErrorMessage(a,l));l[p]=f}if(v.sizeFromShape(l)!==s)throw new Error(N.getSparseReshapeInputOutputMismatchErrorMessage(a,l));let d=a.length,c=[];if(d>0){c[d-1]=1;for(let f=d-2;f>=0;--f)c[f]=c[f+1]*a[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=v.getArrayFromDType(n,i*o);for(let f=0;f<i;++f){let g=0;for(let y=0;y<d;++y)g+=e[f*d+y]*c[y];for(let y=0;y<o;++y)m[f*o+y]=Math.trunc(g/h[y]),g%=h[y]}return[m,[i,o],l]}function M0(e,t,n,a,r,s=!1,i=0){let o=a.length,l=[t[0],e.length/t[0]],u=l[1],p=o>0?r[o-1]+1:0;if(p<0)throw new Error(N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=t.slice();d[0]=p;let c=d.reduce((b,x)=>b*x,1),h=v.getArrayFromDType(n,c);if(o===0)return p>0&&h.fill(i),[h,d];if(p<=0)throw new Error(N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let b=0;if(f<o){if(b=r[f],y===b){++f;continue}if(y>=b)throw new Error(N.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(N.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let x=m;x<f;++x){let w=a[x];if(w<0||w>=l[0])throw new Error(N.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,a[x],l[0]));for(let I=0;I<u;I++)h[y*u+I]+=e[w*u+I]}if(s)for(let x=0;x<u;x++)h[y*u+x]/=f-m;if(m=f,++f,g=y+1,y=b,f>o)break}return g<p&&h.fill(i,g*u,p*u),[h,d]}var fj=Ts(e=>Math.sqrt(e)),gj=rt(uo,e=>Math.sqrt(e)),yj={kernelName:uo,backendName:"cpu",kernelFunc:gj},xC=Vt((e,t)=>{let n=e-t;return n*n}),bj=rn(ho,xC),xj={kernelName:ho,backendName:"cpu",kernelFunc:bj};function vC(e,t,n,a){let r=Le(e,t.dtype);for(let s=0;s<r.size;s++){let i=r.indexToLoc(s),o=new Array(i.length);for(let l=0;l<o.length;l++)o[l]=i[l]*n[l]+a[l];r.set(t.get(...o),...i)}return r}var vj=class{constructor(e,t,n,a,r,s){this.separator=v.encodeString(e),this.nGramWidths=t,this.leftPad=v.encodeString(n),this.rightPad=v.encodeString(a),this.padWidth=r,this.preserveShort=s}getPadWidth(e){return Math.min(this.padWidth<0?e-1:this.padWidth,e-1)}getNumNGrams(e,t){let n=this.getPadWidth(t);return Math.max(0,e+2*n-t+1)}createNGrams(e,t,n,a,r,s){for(let i=0;i<r;++i){let o=this.getPadWidth(s),l=Math.max(0,o-i),u=Math.max(0,o-(r-(i+1))),p=s-(l+u),d=t+(l>0?0:i-o),c=0;c+=l*this.leftPad.length;for(let y=0;y<p;++y)c+=e[d+y].length;c+=u*this.rightPad.length;let h=l+u+p-1;c+=h*this.separator.length,n[a+i]=new Uint8Array(c);let m=n[a+i],f=0,g=y=>y.forEach(b=>m[f++]=b);for(let y=0;y<l;++y)g(this.leftPad),g(this.separator);for(let y=0;y<p-1;++y)g(e[d+y]),g(this.separator);if(p>0){g(e[d+p-1]);for(let y=0;y<u;++y)g(this.separator),g(this.rightPad)}else{for(let y=0;y<u-1;++y)g(this.rightPad),g(this.separator);g(this.rightPad)}}}compute(e,t){let n=e.length,a=t.length;if(a>0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l<a;++l){let u=t[l]>=o;if(u=u&&t[l]<=n,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${n}]`);o=t[l]}if(o!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${o}`)}let r=a-1,s=v.getArrayFromDType("int32",a);if(n===0||a===0){let o=new Array(n);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(p=>{u+=this.getNumNGrams(l,p)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o<r;++o){let l=t[o],u=s[o];if(this.nGramWidths.forEach(p=>{let d=t[o+1]-t[o],c=this.getNumNGrams(d,p);this.createNGrams(e,l,i,u,c,p),u+=c}),this.preserveShort&&u===s[o]){let p=t[o+1]-t[o];if(p===0)continue;let d=p+2*this.padWidth,c=1;this.createNGrams(e,l,i,u,c,d)}}return[i,s]}};function P0(e,t,n,a,r,s,i,o){return new vj(n,a,r,s,i,o).compute(e,t)}function wj(e,t,n,a){if(!e.length)return;if(t.length===0){for(let s=0;s<e.length;++s)a.push(e.subarray(s,s+1));return}if(t.length===1){let s=t[0],i=e.indexOf(s);for(;i!==-1;){let o=e.subarray(0,i);(!n||o.length!==0)&&a.push(o),e=e.subarray(i+1),i=e.indexOf(s)}(!n||e.length!==0)&&a.push(e);return}let r=0;for(let s=0;s<e.length+1;s++)if(s===e.length||t.indexOf(e[s])!==-1){let i=e.subarray(r,s);(!n||i.length!==0)&&a.push(i),r=s+1}}function O0(e,t,n){let a=e.length,r=[],s=0,i=0,o=new Array(a);for(let c=0;c<a;++c){let h=r.length;wj(e[c],t,n,r);let m=r.length-h;o[c]=m,s+=m,i=Math.max(i,m)}let l=v.getArrayFromDType("int32",s*2),u=new Array(s),p=[a,i],d=0;for(let c=0;c<a;++c)for(let h=0;h<o[c];++h)l[d*2]=c,l[d*2+1]=h,u[d]=r[d],++d;return[l,u,p]}function L0(e,t){let n=v.getArrayFromDType("int32",e.length);for(let a=0;a<e.length;++a)n[a]=v.fingerPrint64(e[a]).modulo(t).getLowBitsUnsigned();return n}var wC=Vt((e,t)=>e-t),kj=E0((e,t,n,a)=>({real:e-n,imag:t-a})),z0=rn(mo,wC,kj),Ij={kernelName:mo,backendName:"cpu",kernelFunc:z0};function kC(e,t){let n=new Array(e.rank);for(let r=0;r<n.length;r++)n[r]=e.shape[r]*t[r];let a=Le(n,e.dtype);for(let r=0;r<a.values.length;++r){let s=a.indexToLoc(r),i=new Array(e.rank);for(let l=0;l<i.length;l++)i[l]=s[l]%e.shape[l];let o=e.locToIndex(i);a.values[r]=e.values[o]}return a}var _p=(e,t)=>{let n=t.value-e.value;return n===0?e.index-t.index:n};function IC(e,t,n=0,a=e.length-1){for(;a>n;){if(a-n>600){let o=a-n+1,l=t-n+1,u=Math.log(o),p=.5*Math.exp(2*u/3),d=.5*Math.sqrt(u*p*(o-p)/o)*Math.sign(l-o/2),c=Math.max(n,Math.floor(t-l*p/o+d)),h=Math.min(a,Math.floor(t+(o-l)*p/o+d));IC(e,t,c,h)}let r=e[t],s=n,i=a;for(v.swap(e,n,t),_p(e[a],r)>0&&v.swap(e,n,a);s<i;){for(v.swap(e,s,i),s++,i--;_p(e[s],r)<0;)s=s+1;for(;_p(e[i],r)>0;)i=i-1}_p(e[n],r)===0?v.swap(e,n,i):(i=i+1,v.swap(e,i,a)),i<=t&&(n=i+1),t<=i&&(a=i-1)}}function SC(e,t,n,a,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=v.getTypedArrayFromDType(n,i*a),u=v.getTypedArrayFromDType("int32",i*a);for(let d=0;d<i;d++){let c=d*o,h=e.subarray(c,c+o),m=new Array(h.length);h.forEach((b,x)=>m[x]={value:b,index:x}),a<m.length&&(IC(m,a),m=m.slice(0,a)),r&&m.sort(_p);let f=d*a,g=l.subarray(f,f+a),y=u.subarray(f,f+a);for(let b=0;b<a;b++)g[b]=m[b].value,y[b]=m[b].index}let p=t.slice();return p[p.length-1]=a,[Le(p,n,l),Le(p,"int32",u)]}function TC(e,t,n,a){let r=v.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let m=0;m<r;m++)s[0]*=n[m];s[1]=n[r];for(let m=r+1;m<n.length;m++)s[2]*=n[m];let i={},o=new Int32Array(n[r]),l=new jt(s,a,e),u=[],p=s[0]===1&&s[2]===1;for(let m=0;m<n[r];m++){let f;if(p)f=e[m].toString();else{let g=[];for(let y=0;y<s[0];y++)for(let b=0;b<s[2];b++)g.push(l.get(y,m,b));f=g.join(",")}if(i[f]!==void 0)o[m]=i[f];else{let g=Object.keys(i).length;i[f]=g,o[m]=g,u.push(m)}}let d=s.slice();d[1]=Object.keys(i).length;let c=new jt(d,a);u.forEach((m,f)=>{for(let g=0;g<s[0];g++)for(let y=0;y<s[2];y++)c.set(l.get(g,m,y),g,f,y)});let h=n.slice();return h[r]=d[1],{outputValues:c.values,outputShape:h,indices:o}}Em("cpu",()=>new _0,1);var NC=rt(Ai,e=>e>=0?e:Math.exp(e)-1),Sj={kernelName:Ai,backendName:"cpu",kernelFunc:NC};function CC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a;ge([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=n.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;u<o.length;u++)l[u]=o[u]<0?s*o[u]:o[u];return n.makeTensorInfo(r.shape,"float32",l)}var Tj={kernelName:Li,backendName:"cpu",kernelFunc:CC},Nj=Vt((e,t)=>e<0?t*e:e);function _C(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t;ge([a,r],"prelu");let s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,[o,l]=Nj(a.shape,r.shape,s,i,"float32");return n.makeTensorInfo(l,"float32",o)}var Cj={kernelName:Zi,backendName:"cpu",kernelFunc:_C},EC=rt(eo,e=>Math.max(0,e)),_j={kernelName:eo,backendName:"cpu",kernelFunc:EC},AC=rt(ao,e=>Math.min(Math.max(0,e),6)),Ej={kernelName:ao,backendName:"cpu",kernelFunc:AC};function Oh(e,t,n,a,r){if(n==="linear")return pr({inputs:{x:t},backend:e});if(n==="relu")return EC({inputs:{x:t},backend:e});if(n==="elu")return NC({inputs:{x:t},backend:e});if(n==="relu6")return AC({inputs:{x:t},backend:e});if(n==="prelu")return _C({inputs:{x:t,alpha:a},backend:e});if(n==="leakyrelu")return CC({inputs:{x:t},backend:e,attrs:{alpha:r}});if(n==="sigmoid")return gC({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function ft(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{shape:s}=a,i=v.sizeFromShape(r.shape),o=v.inferFromImplicitShape(s,i),l=v.sizeFromShape(o);v.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),n.incRef(r.dataId);let u=n.data.get(r.dataId);if(u.complexTensorInfos!=null){let p=u.complexTensorInfos.real,d=u.complexTensorInfos.imag;p.shape=o,d.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var Aj={kernelName:iu,backendName:"cpu",kernelFunc:ft};function $C(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;ge([r,s],"matMul");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],d=o?s.shape[u-1]:s.shape[u-2],c=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),b=Iu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([c,h]);v.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,p,c]:[g,c,p],w=o?[y,h,d]:[y,d,h],I=ft({inputs:{x:r},backend:n,attrs:{shape:x}}),T=ft({inputs:{x:s},backend:n,attrs:{shape:w}}),C=i?I.shape[1]:I.shape[2],E=i?I.shape[2]:I.shape[1],$=o?T.shape[1]:T.shape[2],R=Math.max(g,y),F=n.data.get(I.dataId).values,S=n.data.get(T.dataId).values,M=v.computeStrides(I.shape),B=v.computeStrides(T.shape),[U,G,j]=i?[M[0],1,M[1]]:[M[0],M[1],1],[K,Z,J]=o?[1,B[1],B[0]]:[B[1],1,B[0]],ee=E*$,ae=Le([R,E,$],I.dtype),te=ae.values,re=n.blockSize;for(let se=0;se<R;se++){let be=se%g,ue=se%y;for(let ye=0;ye<E;ye+=re){let ke=Math.min(ye+re,E);for(let Se=0;Se<$;Se+=re){let We=Math.min(Se+re,$);for(let Ge=0;Ge<C;Ge+=re){let pt=Math.min(Ge+re,C);for(let at=ye;at<ke;at++)for(let Qe=Se;Qe<We;Qe++){let et=0;for(let De=Ge;De<pt;De++){let dt=F[be*U+at*G+De*j],Hn=S[De*K+Qe*Z+ue*J];et+=dt*Hn}te[se*ee+(at*$+Qe)]+=et}}}}}return n.disposeIntermediateTensorInfo(I),n.disposeIntermediateTensorInfo(T),n.makeTensorInfo(b,ae.dtype,ae.values)}var $j={kernelName:vi,backendName:"cpu",kernelFunc:$C};function Fj(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a,c,h,m,f=[];c=$C({inputs:{a:r,b:s},attrs:{transposeA:l,transposeB:u},backend:n}),i&&(h=gl({inputs:{a:c,b:i},backend:n}),f.push(c),c=h),p&&(m=Oh(n,c,p,o,d),f.push(c),c=m);for(let g of f)n.disposeIntermediateTensorInfo(g);return c}var Rj={kernelName:Qs,backendName:"cpu",kernelFunc:Fj},Dj=rt(kl,e=>Math.acos(e)),Mj={kernelName:kl,backendName:"cpu",kernelFunc:Dj},Pj=rt(Il,e=>Math.acosh(e)),Oj={kernelName:Il,backendName:"cpu",kernelFunc:Pj};function Lj(e){let{inputs:t,backend:n}=e,a=t;ge(t,"addN");let r=a.map(o=>n.data.get(o.dataId).values),s=Le(a[0].shape,a[0].dtype),i=s.values;for(let o=0;o<a.length;o++){let l=r[o];for(let u=0;u<i.length;u++)i[u]+=l[u]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}var zj={kernelName:yi,backendName:"cpu",kernelFunc:Lj};function Wj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;ge(r,"all");let o=v.parseAxisParam(s,r.shape),l=o,u=N.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=N.getInnerMostAxes(l.length,r.shape.length)),N.assertAxesAreInnerMostDims("all",l,p.shape.length);let[d,c]=N.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(c),m=v.makeZerosTypedArray(v.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let w=0;w<h;++w){let I=f[b+w];x=x&&I}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=N.expandShapeToKeepDim(d,o),b=ft({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var Bj={kernelName:Sl,backendName:"cpu",kernelFunc:Wj};function Vj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;ge(r,"any");let o=v.parseAxisParam(s,r.shape),l=o,u=N.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=N.getInnerMostAxes(l.length,r.shape.length)),N.assertAxesAreInnerMostDims("any",l,p.shape.length);let[d,c]=N.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(c),m=v.makeZerosTypedArray(v.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let w=0;w<h;++w){let I=f[b+w];x=x||I}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=N.expandShapeToKeepDim(d,o),b=ft({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var Uj={kernelName:Tl,backendName:"cpu",kernelFunc:Vj};function Gj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a;ge(r,"argMax");let i=v.parseAxisParam(s,r.shape),o=N.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Vn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=N.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],N.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[p,d]=N.computeOutAndReduceShapes(l.shape,i),c=v.sizeFromShape(p),h=v.makeZerosTypedArray(c,"int32"),m=v.sizeFromShape(d),f=n.data.get(l.dataId).values;for(let g=0;g<h.length;++g){let y=g*m,b=f[y],x=0;for(let w=0;w<m;++w){let I=f[y+w];I>b&&(b=I,x=w)}h[g]=x}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var Hj={kernelName:bi,backendName:"cpu",kernelFunc:Gj};function qj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a;ge(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=N.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Vn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=N.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],N.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,d]=N.computeOutAndReduceShapes(l.shape,i),c=v.sizeFromShape(p),h=v.makeZerosTypedArray(c,"int32"),m=v.sizeFromShape(d),f=n.data.get(l.dataId).values;for(let g=0;g<h.length;++g){let y=g*m,b=f[y],x=0;for(let w=0;w<m;++w){let I=f[y+w];I<b&&(b=I,x=w)}h[g]=x}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var jj={kernelName:rc,backendName:"cpu",kernelFunc:qj},Kj=rt(Nl,e=>Math.asin(e)),Xj={kernelName:Nl,backendName:"cpu",kernelFunc:Kj},Yj=rt(Cl,e=>Math.asinh(e)),Zj={kernelName:Cl,backendName:"cpu",kernelFunc:Yj},Jj=rt(_l,e=>Math.atan(e)),Qj={kernelName:_l,backendName:"cpu",kernelFunc:Jj},e5=Vt((e,t)=>Math.atan2(e,t)),t5=rn(Al,e5),n5={kernelName:Al,backendName:"cpu",kernelFunc:t5},a5=rt(El,e=>Math.atanh(e)),r5={kernelName:El,backendName:"cpu",kernelFunc:a5};function W0(e,t,n,a,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,c=r.padInfo.top,h=r.padInfo.left,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=Le(r.outShape,n),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],b=r.outShape[2]*r.outShape[3],x=r.outShape[3];for(let w=0;w<r.batchSize;++w){let I=w*y,T=w*a[0];for(let C=0;C<r.inChannels;++C)for(let E=0;E<r.outHeight;++E){let $=E*i-c,R=Math.max(0,$),F=Math.min(r.inHeight,p+$),S=I+E*b;for(let M=0;M<r.outWidth;++M){let B=M*o-h,U=Math.max(0,B),G=Math.min(r.inWidth,d+B),j=m,K=0,Z=0;for(let ee=R;ee<F;ee+=l){let ae=T+ee*a[1];for(let te=U;te<G;te+=u){let re=ae+te*a[2],se=e[re+C];s==="max"&&se>j?j=se:s==="avg"&&(K+=se,Z++)}if(isNaN(j))break}let J=S+M*x+C;g[J]=s==="avg"?K/Z:j}}}return f}function FC(e,t,n,a,r=!1,s=!1){let i=Le(a.outShape,"int32"),o=a.strideHeight,l=a.strideWidth,u=a.dilationHeight,p=a.dilationWidth,d=a.effectiveFilterHeight,c=a.effectiveFilterWidth,h=a.padInfo.top,m=a.padInfo.left,f=Le(t,n,e);for(let g=0;g<a.batchSize;++g)for(let y=0;y<a.inChannels;++y)for(let b=0;b<a.outHeight;++b){let x=b*o-h,w=x;for(;w<0;)w+=u;let I=Math.min(a.inHeight,d+x);for(let T=0;T<a.outWidth;++T){let C=T*l-m,E=C;for(;E<0;)E+=p;let $=Math.min(a.inWidth,c+C),R=Number.NEGATIVE_INFINITY,F=-1;for(let S=w;S<I;S+=u){let M=S-x;for(let B=E;B<$;B+=p){let U=B-C,G=f.get(g,S,B,y);G>R&&(R=G,r?F=s?((g*a.inHeight+S)*a.inWidth+B)*a.inChannels+y:(S*a.inWidth+B)*a.inChannels+y:F=M*c+U)}}i.set(F,g,b,T,y)}}return i}function RC(e,t,n,a,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,p=r.dilationHeight,d=r.dilationWidth,c=r.effectiveFilterDepth,h=r.effectiveFilterHeight,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,x=Le(r.outShape,n),w=x.values,I=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],T=r.outShape[2]*r.outShape[3]*r.outShape[4],C=r.outShape[3]*r.outShape[4],E=r.outShape[4];for(let $=0;$<r.batchSize;++$){let R=$*I,F=$*a[0];for(let S=0;S<r.inChannels;++S)for(let M=0;M<r.outDepth;++M){let B=M*i-f,U=B;for(;U<0;)U+=u;let G=Math.min(r.inDepth,c+B),j=R+M*T;for(let K=0;K<r.outHeight;++K){let Z=K*o-g,J=Z;for(;J<0;)J+=p;let ee=Math.min(r.inHeight,h+Z),ae=j+K*C;for(let te=0;te<r.outWidth;++te){let re=te*l-y,se=re;for(;se<0;)se+=d;let be=Math.min(r.inWidth,m+re),ue=ae+te*E,ye=b,ke=0,Se=0;for(let Ge=U;Ge<G;Ge+=u){let pt=F+Ge*a[1];for(let at=J;at<ee;at+=p){let Qe=pt+at*a[2];for(let et=se;et<be;et+=d){let De=Qe+et*a[3],dt=e[De+S];if(s==="max"&&dt>ye?ye=dt:s==="avg"&&(ke+=dt,Se++),isNaN(ye))break}if(isNaN(ye))break}if(isNaN(ye))break}let We=ue+S;w[We]=s==="avg"?ke/Math.max(Se,1):ye}}}}return x}function s5(e,t){let n=Le(t.outShape,"int32"),a=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,p=t.effectiveFilterHeight,d=t.effectiveFilterWidth,c=t.padInfo.front,h=t.padInfo.top,m=t.padInfo.left;for(let f=0;f<t.batchSize;++f)for(let g=0;g<t.inChannels;++g)for(let y=0;y<t.outDepth;++y){let b=y*a-c,x=b;for(;x<0;)x+=i;let w=Math.min(t.inDepth,u+b);for(let I=0;I<t.outHeight;++I){let T=I*r-h,C=T;for(;C<0;)C+=o;let E=Math.min(t.inHeight,p+T);for(let $=0;$<t.outWidth;++$){let R=$*s-m,F=R;for(;F<0;)F+=l;let S=Math.min(t.inWidth,d+R),M=Number.NEGATIVE_INFINITY,B=-1;for(let U=x;U<w;U+=i){let G=U-b;for(let j=C;j<E;j+=o){let K=j-T;for(let Z=F;Z<S;Z+=l){let J=Z-R,ee=e.get(f,U,j,Z,g);ee>=M&&(M=ee,B=G*p*d+K*p+J)}}}n.set(B,f,y,I,$,g)}}}return n}function i5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;ge(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(N.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=N.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))d=pr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=W0(c,r.shape,r.dtype,h,p,"avg");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var o5={kernelName:xi,backendName:"cpu",kernelFunc:i5};function l5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;ge(r,"avgPool3d");let p=N.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=RC(d,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return n.makeTensorInfo(c.shape,"float32",c.values)}var u5={kernelName:sc,backendName:"cpu",kernelFunc:l5};function p5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;ge([r,s],"avgPool3DGrad");let p=N.computePool3DInfo(s.shape,i,o,1,l,u),d=p.strideDepth,c=p.strideHeight,h=p.strideWidth,m=p.filterDepth,f=p.filterHeight,g=p.filterWidth,y=p.dilationDepth,b=p.dilationHeight,x=p.dilationWidth,w=p.effectiveFilterDepth,I=p.effectiveFilterHeight,T=p.effectiveFilterWidth,C=w-1-p.padInfo.front,E=T-1-p.padInfo.left,$=I-1-p.padInfo.top,R=Le(s.shape,"float32"),F=1/(m*f*g),S=n.bufferSync(r);for(let M=0;M<p.batchSize;++M)for(let B=0;B<p.inChannels;++B)for(let U=0;U<p.inDepth;++U)for(let G=0;G<p.inHeight;++G)for(let j=0;j<p.inWidth;++j){let K=U-C,Z=G-$,J=j-E,ee=0;for(let ae=0;ae<w;ae+=y){let te=(K+ae)/d;if(!(te<0||te>=p.outDepth||Math.floor(te)!==te))for(let re=0;re<I;re+=b){let se=(Z+re)/c;if(!(se<0||se>=p.outHeight||Math.floor(se)!==se))for(let be=0;be<T;be+=x){let ue=(J+be)/h;if(ue<0||ue>=p.outWidth||Math.floor(ue)!==ue)continue;let ye=S.get(M,te,se,ue,B);ee+=ye}}}R.set(ee*F,M,U,G,j,B)}return n.makeTensorInfo(R.shape,R.dtype,R.values)}var c5={kernelName:Yh,backendName:"cpu",kernelFunc:p5};function d5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;ge([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=N.computePool2DInfo(i.shape,o,l,1,u),d=p.strideHeight,c=p.strideWidth,h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.effectiveFilterHeight,b=p.effectiveFilterWidth,x=b-1-p.padInfo.left,w=y-1-p.padInfo.top,I=Le(i.shape,"float32"),T=1/(h*m),C=n.data.get(r.dataId).values,E=Le(r.shape,"float32",C);for(let $=0;$<p.batchSize;++$)for(let R=0;R<p.inChannels;++R)for(let F=0;F<p.inHeight;++F)for(let S=0;S<p.inWidth;++S){let M=F-w,B=S-x,U=0;for(let G=0;G<y;G+=f){let j=(M+G)/d;if(!(j<0||j>=p.outHeight||Math.floor(j)!==j))for(let K=0;K<b;K+=g){let Z=(B+K)/c;if(Z<0||Z>=p.outWidth||Math.floor(Z)!==Z)continue;let J=E.get($,j,Z,R);U+=J}}I.set(U*T,$,F,S,R)}return n.makeTensorInfo(I.shape,I.dtype,I.values)}var h5={kernelName:Xh,backendName:"cpu",kernelFunc:d5};function m5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;v.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),ge([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=a;u==null&&(u=.001);let p=n.data.get(r.dataId).values,d=n.data.get(o.dataId).values,c=n.data.get(l.dataId).values,h=s?n.data.get(s.dataId).values:new Float32Array([1]),m=i?n.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(p.length),g=m.length,y=h.length,b=c.length,x=d.length,w=0,I=0,T=0,C=0;for(let E=0;E<p.length;++E)f[E]=m[w++]+(p[E]-d[I++])*h[T++]/Math.sqrt(c[C++]+u),w>=g&&(w=0),I>=x&&(I=0),T>=y&&(T=0),C>=b&&(C=0);return n.makeTensorInfo(r.shape,r.dtype,f)}var f5={kernelName:Di,backendName:"cpu",kernelFunc:m5};function g5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a;ge([r],"batchToSpaceND");let o=s.reduce((y,b)=>y*b),l=N.getReshaped(r.shape,s,o),u=N.getPermuted(l.length,s.length),p=N.getReshapedPermuted(r.shape,s,o),d=N.getSliceBeginCoords(i,s.length),c=N.getSliceSize(p,i,s.length),h=ft({inputs:{x:r},backend:n,attrs:{shape:l}}),m=Vn({inputs:{x:h},backend:n,attrs:{perm:u}}),f=ft({inputs:{x:m},backend:n,attrs:{shape:p}}),g=di({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),g}var y5={kernelName:$l,backendName:"cpu",kernelFunc:g5};function b5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i}=a,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,u=A0(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var x5={kernelName:Zh,backendName:"cpu",kernelFunc:b5};function v5(e){let{inputs:t,backend:n}=e,{s0:a,s1:r}=t,s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,o=N.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var w5={kernelName:Jh,backendName:"cpu",kernelFunc:v5},k5=rt(gs,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),I5={kernelName:gs,backendName:"cpu",kernelFunc:k5},S5=e=>{let{x:t}=e.inputs,n=e.backend,a=new Float32Array(v.sizeFromShape(t.shape)),r=n.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let u=0;u<o.length;u++){let p=o[u],d=l[u];a[u]=Math.hypot(p,d)}return n.makeOutput(a,t.shape,"float32")},T5={kernelName:ic,backendName:"cpu",kernelFunc:S5};function yl(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.data.get(a.dataId).complexTensorInfos.imag,s=n.data.get(r.dataId).values;return n.makeTensorInfo(r.shape,r.dtype,s)}var N5={kernelName:cm,backendName:"cpu",kernelFunc:yl};function bl(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(f=>f.shape);N.assertParamsConsistent(i,s);let o=N.computeOutShape(t.map(f=>f.shape),s);if(v.sizeFromShape(o)===0)return n.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(f=>v.sizeFromShape(f.shape)>0);if(l.length===1)return pr({inputs:{x:l[0]},backend:n});if(l[0].dtype==="complex64"){let f=l.map(w=>ci({inputs:{input:w},backend:n})),g=l.map(w=>yl({inputs:{input:w},backend:n})),y=bl({inputs:f,backend:n,attrs:{axis:s}}),b=bl({inputs:g,backend:n,attrs:{axis:s}}),x=Yn({inputs:{real:y,imag:b},backend:n});return f.forEach(w=>n.disposeIntermediateTensorInfo(w)),g.forEach(w=>n.disposeIntermediateTensorInfo(w)),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(b),x}let u=l.map(f=>{let g=[-1,v.sizeFromShape(f.shape.slice(s))];return ft({inputs:{x:f},backend:n,attrs:{shape:g}})}),p=u.map(f=>({vals:n.data.get(f.dataId).values,shape:f.shape}));o=N.computeOutShape(u.map(f=>f.shape),1);let d=u[0].shape[0]===1,c=$0(p,o,t[0].dtype,d),h=N.computeOutShape(l.map(f=>f.shape),s),m=n.makeTensorInfo(h,t[0].dtype,c);return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var C5={kernelName:Fl,backendName:"cpu",kernelFunc:bl};function DC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a;ge([r,s],"conv2d");let d=N.convertConv2DDataFormat(l),c=N.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,d),h=c.filterHeight,m=c.filterWidth,f=c.dilationHeight,g=c.dilationWidth,y=c.padInfo.left,b=c.padInfo.top,x=c.dataFormat==="channelsLast",w=new jt(c.outShape,r.dtype),I=v.computeStrides(r.shape),T=v.computeStrides(s.shape),C=I[0],E=x?I[1]:I[2],$=x?I[2]:1,R=x?1:I[1],F=w.strides[0],S=x?w.strides[1]:w.strides[2],M=x?w.strides[2]:1,B=x?1:w.strides[1],U=n.data.get(r.dataId).values,G=n.data.get(s.dataId).values,j=w.values;for(let K=0;K<c.batchSize;++K){let Z=K*C,J=K*F;for(let ee=0;ee<c.outHeight;++ee){let ae=J+ee*S,te=ee*c.strideHeight-b;for(let re=0;re<h;++re){let se=te+re*f;if(se<0||se>=c.inHeight)continue;let be=re*T[0],ue=Z+se*E;for(let ye=0;ye<c.outWidth;++ye){let ke=ae+ye*M,Se=ye*c.strideWidth-y;for(let We=0;We<m;++We){let Ge=Se+We*g;if(Ge<0||Ge>=c.inWidth)continue;let pt=be+We*T[1],at=ue+Ge*$,Qe=pt;for(let et=0;et<c.inChannels;++et){let De=U[at+et*R];for(let dt=0;dt<c.outChannels;++dt)j[ke+dt*B]+=De*G[Qe+dt];Qe+=c.outChannels}}}}}}return n.makeTensorInfo(w.shape,w.dtype,j)}var _5={kernelName:Ii,backendName:"cpu",kernelFunc:DC};function E5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=a;ge([r,s],"conv2dBackpropFilter");let d=N.convertConv2DDataFormat(l),c=N.computeConv2DInfo(r.shape,p,i,1,o,u,!1,d),{strideHeight:h,strideWidth:m,filterHeight:f,filterWidth:g}=c,y=c.dataFormat==="channelsLast",b=new jt(c.filterShape,"float32"),x=c.padInfo.left,w=c.padInfo.top,I=n.data.get(r.dataId).values,T=n.data.get(s.dataId).values,C=new jt(r.shape,r.dtype,I),E=new jt(s.shape,s.dtype,T);for(let $=0;$<f;++$){let R=Math.max(0,Math.ceil((w-$)/h)),F=Math.min(c.outHeight,(c.inHeight+w-$)/h);for(let S=0;S<g;++S){let M=Math.max(0,Math.ceil((x-S)/m)),B=Math.min(c.outWidth,(c.inWidth+x-S)/m);for(let U=0;U<c.inChannels;++U)for(let G=0;G<c.outChannels;++G){let j=0;for(let K=0;K<c.batchSize;++K)for(let Z=R;Z<F;++Z){let J=$+Z*h-w;for(let ee=M;ee<B;++ee){let ae=S+ee*m-x;y?j+=C.get(K,J,ae,U)*E.get(K,Z,ee,G):j+=C.get(K,U,J,ae)*E.get(K,G,Z,ee)}}b.set(j,$,S,U,G)}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var A5={kernelName:em,backendName:"cpu",kernelFunc:E5};function $5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=a;ge([r,s],"conv2dBackpropInput");let d=v.computeStrides(s.shape),c=v.computeStrides(r.shape),h=N.convertConv2DDataFormat(u),m=N.computeConv2DInfo(i,s.shape,o,1,l,p,!1,h),f=new jt(m.inShape,"float32"),g=f.values,y=n.data.get(r.dataId).values,b=n.data.get(s.dataId).values,[x,w,I]=d,{batchSize:T,filterHeight:C,filterWidth:E,inChannels:$,inHeight:R,inWidth:F,outChannels:S,outHeight:M,outWidth:B,strideHeight:U,strideWidth:G}=m;h=m.dataFormat;let j=C-1-m.padInfo.top,K=E-1-m.padInfo.left,Z=h==="channelsLast",J=f.strides[0],ee=Z?f.strides[1]:f.strides[2],ae=Z?f.strides[2]:1,te=Z?1:f.strides[1],re=c[0],se=Z?c[1]:c[2],be=Z?c[2]:1,ue=Z?1:c[1];for(let ye=0;ye<T;++ye)for(let ke=0;ke<$;++ke)for(let Se=0;Se<R;++Se){let We=Se-j,Ge=Math.max(0,Math.ceil(We/U)),pt=Math.min(M,(C+We)/U);for(let at=0;at<F;++at){let Qe=at-K,et=Math.max(0,Math.ceil(Qe/G)),De=Math.min(B,(E+Qe)/G),dt=0;for(let Pt=Ge;Pt<pt;++Pt){let sa=Pt*U-We;for(let on=et;on<De;++on){let Fn=on*G-Qe,ia=re*ye+se*Pt+be*on,Rn=x*(C-1-sa)+w*(E-1-Fn)+I*ke;for(let st=0;st<S;++st){let Dn=y[ia+ue*st],qn=b[Rn+st];dt+=Dn*qn}}}let Hn=J*ye+ee*Se+ae*at+te*ke;g[Hn]=dt}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var F5={kernelName:Si,backendName:"cpu",kernelFunc:$5};function R5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a;ge([r,s],"conv3d");let u=N.computeConv3DInfo(r.shape,s.shape,i,l,o),{filterDepth:p,filterHeight:d,filterWidth:c,dilationDepth:h,dilationHeight:m,dilationWidth:f,padInfo:g}=u,y=g.front,b=g.left,x=g.top,w=new jt(u.outShape,r.dtype),I=n.data.get(r.dataId).values,T=n.data.get(s.dataId).values,C=w.values,E=v.computeStrides(r.shape),$=v.computeStrides(s.shape);for(let R=0;R<u.batchSize;++R){let F=R*E[0],S=R*w.strides[0];for(let M=0;M<u.outDepth;++M){let B=S+M*w.strides[1],U=M*u.strideDepth-y;for(let G=0;G<p;++G){let j=U+G*h;if(j<0||j>=u.inDepth)continue;let K=G*$[0],Z=F+j*E[1];for(let J=0;J<u.outHeight;++J){let ee=B+J*w.strides[2],ae=J*u.strideHeight-x;for(let te=0;te<d;++te){let re=ae+te*m;if(re<0||re>=u.inHeight)continue;let se=K+te*$[1],be=Z+re*E[2];for(let ue=0;ue<u.outWidth;++ue){let ye=ee+ue*u.outChannels,ke=ue*u.strideWidth-b;for(let Se=0;Se<c;++Se){let We=ke+Se*f;if(We<0||We>=u.inWidth)continue;let Ge=se+Se*$[2],pt=be+We*u.inChannels,at=Ge;for(let Qe=0;Qe<u.inChannels;++Qe){let et=I[pt+Qe];for(let De=0;De<u.outChannels;++De)C[ye+De]+=et*T[at+De];at+=u.outChannels}}}}}}}}return n.makeTensorInfo(w.shape,w.dtype,w.values)}var D5={kernelName:oc,backendName:"cpu",kernelFunc:R5};function M5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=a;ge([r,s],"conv3dBackpropFilterV2");let u=v.computeStrides(r.shape),p=v.computeStrides(s.shape),d=N.computeConv3DInfo(r.shape,l,i,1,o),c=d.strideDepth,h=d.strideHeight,m=d.strideWidth,f=d.filterDepth,g=d.filterHeight,y=d.filterWidth,b=new jt(d.filterShape,"float32"),x=b.values,[w,I,T,C]=b.strides,E=n.data.get(s.dataId).values,[$,R,F,S]=p,M=n.data.get(r.dataId).values,[B,U,G,j]=u,K=d.padInfo.front,Z=d.padInfo.left,J=d.padInfo.top;for(let ee=0;ee<f;++ee){let ae=Math.max(0,Math.ceil((K-ee)/c)),te=Math.min(d.outDepth,(d.inDepth+K-ee)/c),re=ee*w;for(let se=0;se<g;++se){let be=Math.max(0,Math.ceil((J-se)/h)),ue=Math.min(d.outHeight,(d.inHeight+J-se)/h),ye=se*I+re;for(let ke=0;ke<y;++ke){let Se=Math.max(0,Math.ceil((Z-ke)/m)),We=Math.min(d.outWidth,(d.inWidth+Z-ke)/m),Ge=ke*T+ye;for(let pt=0;pt<d.inChannels;++pt){let at=pt*C+Ge;for(let Qe=0;Qe<d.outChannels;++Qe){let et=0;for(let De=0;De<d.batchSize;++De){let dt=De*B,Hn=De*$;for(let Pt=ae;Pt<te;++Pt){let sa=(ee+Pt*c-K)*U+dt,on=Pt*R+Hn;for(let Fn=be;Fn<ue;++Fn){let ia=(se+Fn*h-J)*G+sa,Rn=Fn*F+on;for(let st=Se;st<We;++st){let Dn=(ke+st*m-Z)*j+ia,qn=st*S+Rn;et+=M[Dn+pt]*E[qn+Qe]}}}}x[at+Qe]=et}}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var P5={kernelName:tm,backendName:"cpu",kernelFunc:M5};function O5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=a;ge([r],"conv3dBackpropInputV2");let u=v.computeStrides(r.shape),p=v.computeStrides(s.shape),d=N.computeConv3DInfo(l,s.shape,o,1,i),c=new jt(d.inShape,"float32"),h=c.values,[m,f,g,y]=c.strides,b=n.data.get(r.dataId).values,[x,w,I,T]=u,C=n.data.get(s.dataId).values,[E,$,R,F]=p,{batchSize:S,filterDepth:M,filterHeight:B,filterWidth:U,inChannels:G,inDepth:j,inHeight:K,inWidth:Z,outChannels:J,outDepth:ee,outHeight:ae,outWidth:te,strideDepth:re,strideHeight:se,strideWidth:be}=d,ue=M-1-d.padInfo.front,ye=B-1-d.padInfo.top,ke=U-1-d.padInfo.left;for(let Se=0;Se<S;++Se)for(let We=0;We<G;++We)for(let Ge=0;Ge<j;++Ge){let pt=Ge-ue,at=Math.max(0,Math.ceil(pt/re)),Qe=Math.min(ee,(M+pt)/re);for(let et=0;et<K;++et){let De=et-ye,dt=Math.max(0,Math.ceil(De/se)),Hn=Math.min(ae,(B+De)/se);for(let Pt=0;Pt<Z;++Pt){let sa=Pt-ke,on=Math.max(0,Math.ceil(sa/be)),Fn=Math.min(te,(U+sa)/be),ia=0;for(let Rn=at;Rn<Qe;++Rn){let st=Rn*re-pt;for(let Dn=dt;Dn<Hn;++Dn){let qn=Dn*se-De;for(let br=on;br<Fn;++br){let zo=br*be-sa,Qa=x*Se+w*Rn+I*Dn+T*br,dp=E*(M-1-st)+$*(B-1-qn)+R*(U-1-zo)+F*We;for(let ka=0;ka<J;++ka){let Ur=b[Qa+ka],Zt=C[dp+ka];ia+=Ur*Zt}}}}h[m*Se+f*Ge+g*et+y*Pt+We]=ia}}}return n.makeTensorInfo(c.shape,c.dtype,c.values)}var L5={kernelName:nm,backendName:"cpu",kernelFunc:O5},z5=rt(Ti,e=>Math.cos(e)),W5={kernelName:Ti,backendName:"cpu",kernelFunc:z5},B5=rt(Ni,e=>Math.cosh(e)),V5={kernelName:Ni,backendName:"cpu",kernelFunc:B5};function U5(e){let{inputs:t,backend:n,attrs:a}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=a,[p,d,c,h]=r.shape,m=s.shape[0],[f,g]=o,y=Le([m,f,g,h],"float32"),b=n.data.get(s.dataId).values,x=n.data.get(i.dataId).values,w=n.data.get(r.dataId).values,I=v.computeStrides(r.shape),T=v.computeStrides(y.shape);for(let C=0;C<m;C++){let E=C*4,$=b[E],R=b[E+1],F=b[E+2],S=b[E+3],M=x[C];if(M>=p)continue;let B=f>1?(F-$)*(d-1)/(f-1):0,U=g>1?(S-R)*(c-1)/(g-1):0;for(let G=0;G<f;G++){let j=f>1?$*(d-1)+G*B:.5*($+F)*(d-1);if(j<0||j>d-1){for(let K=0;K<g;K++)for(let Z=0;Z<h;Z++){let J=Z+K*T[2]+G*T[1]+C*T[0];y.values[J]=u}continue}if(l==="bilinear"){let K=Math.floor(j),Z=Math.ceil(j),J=j-K;for(let ee=0;ee<g;ee++){let ae=g>1?R*(c-1)+ee*U:.5*(R+S)*(c-1);if(ae<0||ae>c-1){for(let be=0;be<h;be++){let ue=be+ee*T[2]+G*T[1]+C*T[0];y.values[ue]=u}continue}let te=Math.floor(ae),re=Math.ceil(ae),se=ae-te;for(let be=0;be<h;be++){let ue=be+te*I[2]+K*I[1]+M*I[0],ye=w[ue];ue=be+re*I[2]+K*I[1]+M*I[0];let ke=w[ue];ue=be+te*I[2]+Z*I[1]+M*I[0];let Se=w[ue];ue=be+re*I[2]+Z*I[1]+M*I[0];let We=w[ue],Ge=ye+(ke-ye)*se,pt=Se+(We-Se)*se;ue=be+ee*T[2]+G*T[1]+C*T[0],y.values[ue]=Ge+(pt-Ge)*J}}}else for(let K=0;K<g;++K){let Z=g>1?R*(c-1)+K*U:.5*(R+S)*(c-1);if(Z<0||Z>c-1){for(let ae=0;ae<h;ae++){let te=ae+K*T[2]+G*T[1]+C*T[0];y.values[te]=u}continue}let J=Math.round(Z),ee=Math.round(j);for(let ae=0;ae<h;ae++){let te=ae+J*I[2]+ee*I[1]+M*I[0],re=ae+K*T[2]+G*T[1]+C*T[0];y.values[re]=w[te]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var G5={kernelName:Dl,backendName:"cpu",kernelFunc:U5};function H5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;ge(r,"cumprod");let l=N.getAxesPermutation([s],r.shape.length),u=r;l!=null&&(u=Vn({inputs:{x:r},backend:n,attrs:{perm:l}}));let p=N.getInnerMostAxes(1,r.shape.length)[0];if(p!==u.shape.length-1)throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${p}`);let d=ma(u.dtype,"int32"),c=v.makeOnesTypedArray(v.sizeFromShape(u.shape),d),h=n.data.get(u.dataId).values,m=u.shape[u.shape.length-1],f=o?(y,b)=>y+m-b-1:(y,b)=>y+b;for(let y=0;y<h.length;y+=m)for(let b=0;b<m;b++){let x=f(y,b);if(b===0)c[x]=i?1:h[x];else{let w=f(y,b-1);c[x]=i?h[w]*c[w]:h[x]*c[w]}}let g=n.makeTensorInfo(u.shape,d,c);if(l!=null){let y=N.getUndoAxesPermutation(l),b=Vn({inputs:{x:g},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),b}return g}var q5={kernelName:Rl,backendName:"cpu",kernelFunc:H5};function j5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;ge(r,"cumsum");let l=N.getAxesPermutation([s],r.shape.length),u=r;l!=null&&(u=Vn({inputs:{x:r},backend:n,attrs:{perm:l}}));let p=N.getInnerMostAxes(1,r.shape.length)[0];if(p!==u.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${p}`);let d=ma(u.dtype,"int32"),c=v.makeZerosTypedArray(v.sizeFromShape(u.shape),d),h=n.data.get(u.dataId).values,m=u.shape[u.shape.length-1],f=o?(y,b)=>y+m-b-1:(y,b)=>y+b;for(let y=0;y<h.length;y+=m)for(let b=0;b<m;b++){let x=f(y,b);if(b===0)c[x]=i?0:h[x];else{let w=f(y,b-1);c[x]=i?h[w]+c[w]:h[x]+c[w]}}let g=n.makeTensorInfo(u.shape,d,c);if(l!=null){let y=N.getUndoAxesPermutation(l),b=Vn({inputs:{x:g},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),b}return g}var K5={kernelName:Ci,backendName:"cpu",kernelFunc:j5};function X5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=a;if(r.shape.length===1){let l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=A0(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=n.bufferSync(r),u=n.bufferSync(s),p=G2(l,u,i,o);return n.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var Y5={kernelName:am,backendName:"cpu",kernelFunc:X5};function Z5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockSize:s,dataFormat:i}=a;v.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],p=r.shape[3],d=l*s,c=u*s,h=p/(s*s),m=n.data.get(r.dataId).values,f=new Float32Array(o*d*c*h),g=0;for(let y=0;y<o;++y)for(let b=0;b<d;++b){let x=Math.floor(b/s),w=b%s;for(let I=0;I<c;++I){let T=Math.floor(I/s),C=I%s,E=(w*s+C)*h;for(let $=0;$<h;++$){let R=$+E+p*(T+u*(x+l*y));f[g++]=m[R]}}}return n.makeTensorInfo([o,d,c,h],r.dtype,f)}var J5={kernelName:Ml,backendName:"cpu",kernelFunc:Z5};function MC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=a;ge([r,s],"depthwiseConv2DNative");let p=v.computeStrides(r.shape),d=v.computeStrides(s.shape),c=l;c==null&&(c=[1,1]),v.assert(N.eitherStridesOrDilationsAreOne(i,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let h=N.computeConv2DInfo(r.shape,s.shape,i,c,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:b}=h,x=b.left,w=b.top,I=h.outChannels/h.inChannels,T=new jt(h.outShape,r.dtype),C=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values,$=T.values;for(let R=0;R<h.batchSize;++R){let F=R*p[0],S=R*T.strides[0];for(let M=0;M<h.outHeight;++M){let B=S+M*T.strides[1],U=M*h.strideHeight-w;for(let G=0;G<m;++G){let j=U+G*g;if(j<0||j>=h.inHeight)continue;let K=G*d[0],Z=F+j*p[1];for(let J=0;J<h.outWidth;++J){let ee=B+J*T.strides[2],ae=J*h.strideWidth-x;for(let te=0;te<f;++te){let re=ae+te*y;if(re<0||re>=h.inWidth)continue;let se=K+te*d[1],be=Z+re*h.inChannels,ue=ee,ye=se;for(let ke=0;ke<h.inChannels;++ke){let Se=C[be+ke];for(let We=0;We<I;++We)$[ue+We]+=Se*E[ye+We];ue+=I,ye+=I}}}}}}return n.makeTensorInfo(T.shape,T.dtype,T.values)}var Q5={kernelName:_i,backendName:"cpu",kernelFunc:MC};function eK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=a;ge([r,s],"depthwiseConv2dNativeBackpropFilter");let d=N.computeConv2DInfo(r.shape,p,i,o,l,u,!0),{strideHeight:c,strideWidth:h,filterHeight:m,filterWidth:f}=d,g=new jt(d.filterShape,"float32"),y=d.padInfo.left,b=d.padInfo.top,x=d.outChannels/d.inChannels,w=n.data.get(r.dataId).values,I=new jt(r.shape,r.dtype,w),T=n.data.get(s.dataId).values,C=new jt(s.shape,s.dtype,T);for(let E=0;E<m;++E){let $=Math.max(0,Math.ceil((b-E)/c)),R=Math.min(d.outHeight,(d.inHeight+b-E)/c);for(let F=0;F<f;++F){let S=Math.max(0,Math.ceil((y-F)/h)),M=Math.min(d.outWidth,(d.inWidth+y-F)/h);for(let B=0;B<d.outChannels;++B){let U=Math.trunc(B/x),G=B%x,j=0;for(let K=0;K<d.batchSize;++K)for(let Z=$;Z<R;++Z){let J=E+Z*c-b;for(let ee=S;ee<M;++ee){let ae=F+ee*h-y;j+=I.get(K,J,ae,U)*C.get(K,Z,ee,B)}}g.set(j,E,F,U,G)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var tK={kernelName:rm,backendName:"cpu",kernelFunc:eK};function nK(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=a;ge([r,s],"depthwiseConv2DNativeBackpropInput");let d=v.computeStrides(r.shape),c=v.computeStrides(s.shape),h=N.computeConv2DInfo(p,s.shape,i,o,l,u,!0),m=new jt(h.inShape,"float32"),f=m.values,[g,y,b]=m.strides,x=n.data.get(r.dataId).values,[w,I,T]=d,C=n.data.get(s.dataId).values,[E,$,R]=c,{batchSize:F,filterHeight:S,filterWidth:M,inChannels:B,inHeight:U,inWidth:G,outChannels:j,outHeight:K,outWidth:Z,strideHeight:J,strideWidth:ee}=h,ae=S-1-h.padInfo.top,te=M-1-h.padInfo.left,re=j/B;for(let se=0;se<F;++se)for(let be=0;be<B;++be)for(let ue=0;ue<U;++ue){let ye=ue-ae,ke=Math.max(0,Math.ceil(ye/J)),Se=Math.min(K,(S+ye)/J);for(let We=0;We<G;++We){let Ge=We-te,pt=Math.max(0,Math.ceil(Ge/ee)),at=Math.min(Z,(M+Ge)/ee),Qe=0;for(let et=ke;et<Se;++et){let De=et*J-ye;for(let dt=pt;dt<at;++dt){let Hn=dt*ee-Ge,Pt=w*se+I*et+T*dt,sa=E*(S-1-De)+$*(M-1-Hn)+R*be;for(let on=0;on<re;++on){let Fn=be*re+on,ia=x[Pt+Fn],Rn=C[sa+on];Qe+=ia*Rn}}}f[g*se+y*ue+b*We+be]=Qe}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var aK={kernelName:sm,backendName:"cpu",kernelFunc:nK};function rK(e){let{inputs:t,backend:n}=e,{x:a}=t,r=v.sizeFromShape(a.shape),s=n.data.get(a.dataId).values,i=Le([r,r],a.dtype),o=i.values;for(let u=0;u<s.length;u++)o[u*r+u]=s[u];let l=[...a.shape,...a.shape];return n.makeTensorInfo(l,i.dtype,i.values)}var sK={kernelName:im,backendName:"cpu",kernelFunc:rK},iK={kernelName:lc,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r}=e,{strides:s,pad:i,dilations:o}=n,l=t,u=l.data.get(a.dataId).values,p=a.shape.length,d=l.data.get(r.dataId).values,c=r.shape.length,{batchSize:h,inHeight:m,inWidth:f,inChannels:g,outHeight:y,outWidth:b,padInfo:x,strideHeight:w,strideWidth:I,filterHeight:T,filterWidth:C,dilationHeight:E,dilationWidth:$,outShape:R}=N.computeDilation2DInfo(a.shape,r.shape,s,i,"NHWC",o),F=v.sizeFromShape(R),S=R.length,M=v.getArrayFromDType(a.dtype,F);for(let B=0;B<h;++B)for(let U=0;U<y;++U){let G=U*w-x.top;for(let j=0;j<b;++j){let K=j*I-x.left;for(let Z=0;Z<g;++Z){let J=Number.MIN_SAFE_INTEGER;for(let ae=0;ae<T;++ae){let te=G+ae*E;if(te>=0&&te<m)for(let re=0;re<C;++re){let se=K+re*$;if(se>=0&&se<f){let be=v.locToIndex([B,te,se,Z],p,v.computeStrides(a.shape)),ue=v.locToIndex([ae,re,Z],c,v.computeStrides(r.shape)),ye=u[be]+d[ue];ye>J&&(J=ye)}}}let ee=v.locToIndex([B,U,j,Z],S,v.computeStrides(R));M[ee]=J}}}return{dataId:l.write(v.toTypedArray(M,a.dtype),R,a.dtype),shape:R,dtype:a.dtype}}},oK={kernelName:gh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,p=v.toNestedArray(a.shape,u.data.get(a.dataId).values),d=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:c,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:w,filterHeight:I,filterWidth:T,dilationHeight:C,dilationWidth:E,outShape:$}=N.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===$.length,()=>`Error in ${gh}, dy must have the same rank as output ${$.length}, but got ${s.rank}`);let R=v.toNestedArray($,u.data.get(s.dataId).values),F=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S<c;++S)for(let M=0;M<g;++M){let B=M*x-b.top;for(let U=0;U<y;++U){let G=U*w-b.left;for(let j=0;j<f;++j){let K=Number.MIN_SAFE_INTEGER,Z=0,J=0;for(let ee=0;ee<I;++ee){let ae=B+ee*C;if(ae>=0&&ae<h)for(let te=0;te<T;++te){let re=G+te*E;if(re>=0&&re<m){let se=p[S][ae][re][j]+d[ee][te][j];se>K&&(K=se,Z=ee,J=te)}}}F[Z][J][j]+=R[S][M][U][j]}}}return{dataId:u.write(v.toTypedArray(F,a.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},lK={kernelName:fh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,p=v.toNestedArray(a.shape,u.data.get(a.dataId).values),d=v.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:c,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:w,filterHeight:I,filterWidth:T,dilationHeight:C,dilationWidth:E,outShape:$}=N.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===$.length,()=>`Error in ${fh}, dy must have the same rank as output ${$.length}, but got ${s.rank}`);let R=v.toNestedArray($,u.data.get(s.dataId).values),F=v.makeZerosNestedTypedArray(a.shape,a.dtype);for(let S=0;S<c;++S)for(let M=0;M<g;++M){let B=M*x-b.top;for(let U=0;U<y;++U){let G=U*w-b.left;for(let j=0;j<f;++j){let K=Number.MIN_SAFE_INTEGER,Z=B<0?0:B,J=G<0?0:G;for(let ee=0;ee<I;++ee){let ae=B+ee*C;if(ae>=0&&ae<h)for(let te=0;te<T;++te){let re=G+te*E;if(re>=0&&re<m){let se=p[S][ae][re][j]+d[ee][te][j];se>K&&(K=se,Z=ae,J=re)}}}F[S][Z][J][j]+=R[S][M][U][j]}}}return{dataId:u.write(v.toTypedArray(F,a.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}};function Zc(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;ge(r,"sum");let o;r.dtype==="bool"?o=cs({inputs:{x:r},backend:n,attrs:{dtype:"int32"}}):o=pr({inputs:{x:r},backend:n});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=N.getAxesPermutation(u,l),d=u,c=o;p!=null&&(c=Vn({inputs:{x:o},backend:n,attrs:{perm:p}}),d=N.getInnerMostAxes(d.length,l)),N.assertAxesAreInnerMostDims("sum",d,c.shape.length);let[h,m]=N.computeOutAndReduceShapes(c.shape,d),f=N.upcastType(c.dtype,"int32"),g=Mh(n,h,f),y=v.sizeFromShape(m),b=n.data.get(g.dataId).values,x=n.data.get(c.dataId).values;for(let w=0;w<b.length;++w){let I=w*y,T=0;for(let C=0;C<y;++C)T+=x[I+C];b[w]=T}if(i){let w=N.expandShapeToKeepDim(g.shape,u),I=g;g=ft({inputs:{x:g},backend:n,attrs:{shape:w}}),n.disposeIntermediateTensorInfo(I)}return n.disposeIntermediateTensorInfo(o),p!=null&&n.disposeIntermediateTensorInfo(c),g}var uK={kernelName:po,backendName:"cpu",kernelFunc:Zc};function pK(e){let{inputs:t,backend:n,attrs:a}=e,{equation:r}=a,s=t,{allDims:i,summedDims:o,idDims:l}=N.decodeEinsumEquation(r,s.length);N.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=N.getEinsumComputePath(o,l),d=p.length,c=null,h=i.length,m=[];for(let f=0;f<d;++f){for(let g of p[f]){let{permutationIndices:y,expandDims:b}=N.getEinsumPermutation(h,l[g]),x;N.isIdentityPermutation(y)?x=s[g]:(x=Vn({inputs:{x:s[g]},backend:n,attrs:{perm:y}}),m.push(x));let w=x.shape.slice();for(let I=0;I<b.length;++I)w.splice(b[I],0,1);v.arraysEqual(x.shape,w)||(x=ft({inputs:{x},backend:n,attrs:{shape:w}}),m.push(x)),c===null?c=x:(c=Cf({inputs:{a:x,b:c},backend:n}),m.push(c))}f<d-1&&(u[f]>=0&&(c=Zc({inputs:{x:c},backend:n,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(c)),h--)}for(let f of m)f!==c&&n.disposeIntermediateTensorInfo(f);return c}var cK={kernelName:om,backendName:"cpu",kernelFunc:pK};function dK(e){let{inputs:t,backend:n}=e,{dy:a,y:r}=t;ge([a,r],"eluGrad");let s=new Float32Array(v.sizeFromShape(r.shape)),i=n.data.get(r.dataId).values,o=n.data.get(a.dataId).values;for(let l=0;l<i.length;++l){let u=i[l];u>=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return n.makeTensorInfo(r.shape,"float32",s)}var hK={kernelName:lm,backendName:"cpu",kernelFunc:dK},mK=N.ERF_P,fK=N.ERF_A1,gK=N.ERF_A2,yK=N.ERF_A3,bK=N.ERF_A4,xK=N.ERF_A5,vK=rt(Pl,e=>{let t=Math.sign(e),n=Math.abs(e),a=1/(1+mK*n);return t*(1-((((xK*a+bK)*a+yK)*a+gK)*a+fK)*a*Math.exp(-n*n))}),wK={kernelName:Pl,backendName:"cpu",kernelFunc:vK};function Lh(e){let{inputs:t,backend:n,attrs:a}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),ft({inputs:{x:r},backend:n,attrs:{shape:o}})}var kK={kernelName:Ll,backendName:"cpu",kernelFunc:Lh},IK=Vt((e,t)=>e/t),B0=rn(Ei,IK),nx={kernelName:Ei,backendName:"cpu",kernelFunc:B0};function PC(e,t,n){let a=e.shape,r=a[0],s=a[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],p=v.sizeFromShape(u),d=v.getTypedArrayFromDType("float32",p),c=v.getTypedArrayFromDType("float32",p);for(let g=0;g<r;g++){let y=di({inputs:{x:o},backend:n,attrs:{begin:[g,0],size:[1,s]}}),b=di({inputs:{x:l},backend:n,attrs:{begin:[g,0],size:[1,s]}}),x=Yn({inputs:{real:y,imag:b},backend:n}),{real:w,imag:I}=SK(x,t,n),T=N.mergeRealAndImagArrays(w,I);for(let C=0;C<s;C++){let E=N.getComplexWithIndex(T,C);d[g*s+C]=E.real,c[g*s+C]=E.imag}n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(x)}let h=n.makeTensorInfo(u,"float32",d),m=n.makeTensorInfo(u,"float32",c),f=Yn({inputs:{real:h,imag:m},backend:n});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),f}function SK(e,t,n){let a=v.sizeFromShape(e.shape),r=n.data.get(e.dataId),s=n.data.get(r.complexTensorInfos.real.dataId).values,i=n.data.get(r.complexTensorInfos.imag.dataId).values;if(TK(a)){let o=ax(s,i,a,t,n),l=[e.shape[0],e.shape[1]];if(t){let u=n.makeTensorInfo(l,"float32",o.real),p=n.makeTensorInfo(l,"float32",o.imag),d=n.makeTensorInfo([],"float32",v.createScalarValue(a,"float32")),c=pr({inputs:{x:d},backend:n}),h=nx.kernelFunc({inputs:{a:u,b:d},backend:n}),m=nx.kernelFunc({inputs:{a:p,b:c},backend:n}),f=n.data.get(h.dataId).values,g=n.data.get(m.dataId).values;return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),{real:f,imag:g}}return o}else{let o=N.mergeRealAndImagArrays(s,i),l=NK(o,a,t);return N.splitRealAndImagArrays(l)}}function TK(e){return(e&e-1)===0}function ax(e,t,n,a,r){if(n===1)return{real:e,imag:t};let s=N.mergeRealAndImagArrays(e,t),i=n/2,o=N.complexWithEvenIndex(s),l=o.real,u=o.imag,p=[l.length],d=r.makeTensorInfo(p,"float32",l),c=r.makeTensorInfo(p,"float32",u),h=Yn({inputs:{real:d,imag:c},backend:r}),m=N.complexWithOddIndex(s),f=m.real,g=m.imag,y=[f.length],b=r.makeTensorInfo(y,"float32",f),x=r.makeTensorInfo(y,"float32",g),w=Yn({inputs:{real:b,imag:x},backend:r}),I=ax(l,u,i,a,r),T=I.real,C=I.imag,E=[T.length],$=r.makeTensorInfo(E,"float32",T),R=r.makeTensorInfo(E,"float32",C),F=Yn({inputs:{real:$,imag:R},backend:r}),S=ax(f,g,i,a,r),M=S.real,B=S.imag,U=[M.length],G=r.makeTensorInfo(U,"float32",M),j=r.makeTensorInfo(U,"float32",B),K=Yn({inputs:{real:G,imag:j},backend:r}),Z=N.exponents(n,a),J=[Z.real.length],ee=r.makeTensorInfo(J,"float32",Z.real),ae=r.makeTensorInfo(J,"float32",Z.imag),te=Yn({inputs:{real:ee,imag:ae},backend:r}),re=Cf({inputs:{a:te,b:K},backend:r}),se=gl({inputs:{a:F,b:re},backend:r}),be=z0({inputs:{a:F,b:re},backend:r}),ue=ci({inputs:{input:se},backend:r}),ye=ci({inputs:{input:be},backend:r}),ke=yl({inputs:{input:se},backend:r}),Se=yl({inputs:{input:be},backend:r}),We=bl({inputs:[ue,ye],backend:r,attrs:{axis:0}}),Ge=bl({inputs:[ke,Se],backend:r,attrs:{axis:0}}),pt=r.data.get(We.dataId).values,at=r.data.get(Ge.dataId).values;return r.disposeIntermediateTensorInfo(d),r.disposeIntermediateTensorInfo(c),r.disposeIntermediateTensorInfo(h),r.disposeIntermediateTensorInfo(b),r.disposeIntermediateTensorInfo(x),r.disposeIntermediateTensorInfo(w),r.disposeIntermediateTensorInfo($),r.disposeIntermediateTensorInfo(R),r.disposeIntermediateTensorInfo(F),r.disposeIntermediateTensorInfo(G),r.disposeIntermediateTensorInfo(j),r.disposeIntermediateTensorInfo(K),r.disposeIntermediateTensorInfo(ee),r.disposeIntermediateTensorInfo(ae),r.disposeIntermediateTensorInfo(te),r.disposeIntermediateTensorInfo(re),r.disposeIntermediateTensorInfo(se),r.disposeIntermediateTensorInfo(be),r.disposeIntermediateTensorInfo(ue),r.disposeIntermediateTensorInfo(ke),r.disposeIntermediateTensorInfo(ye),r.disposeIntermediateTensorInfo(Se),r.disposeIntermediateTensorInfo(We),r.disposeIntermediateTensorInfo(Ge),{real:pt,imag:at}}function NK(e,t,n){let a=new Float32Array(t*2);for(let r=0;r<t;r++){let s=0,i=0;for(let o=0;o<t;o++){let l=N.exponent(r*o,t,n),u=N.getComplexWithIndex(e,o);s+=u.real*l.real-u.imag*l.imag,i+=u.real*l.imag+u.imag*l.real}n&&(s/=t,i/=t),N.assignToTypedArray(a,s,i,r)}return a}function CK(e){let{inputs:t,backend:n}=e,{input:a}=t,r=v.sizeFromShape(a.shape),s=a.shape[a.shape.length-1],i=r/s,o=ft({inputs:{x:a},backend:n,attrs:{shape:[i,s]}}),l=PC(o,!1,n),u=ft({inputs:{x:l},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var _K={kernelName:um,backendName:"cpu",kernelFunc:CK};function V0(e){let{backend:t,attrs:n}=e,{shape:a,value:r,dtype:s}=n,i=s||v.inferDtype(r),o=v.getArrayFromDType(i,v.sizeFromShape(a));return AK(o,r,i),t.makeTensorInfo(a,i,o)}var EK={kernelName:uc,backendName:"cpu",kernelFunc:V0};function AK(e,t,n){e.fill(t)}var $K={kernelName:Wl,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,r=n,s=v.getTypedArrayFromDType(a.dtype,v.sizeFromShape(a.shape)),[i,o,l,u]=a.shape,p=r.data.get(a.dataId).values;for(let d=0;d<i;d++){let c=d*l*o*u;for(let h=0;h<o;h++){let m=h*(l*u);for(let f=0;f<l;f++){let g=f*u;for(let y=0;y<u;y++){let b=Math.round(l-f-1),x=c+m+g+y,w=p[x];if(b>=0&&b<l){let I=b*u,T=c+m+I+y;w=p[T]}s[x]=w}}}}return{dataId:r.write(s,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},FK=Vt((e,t)=>Math.floor(e/t)),RK=rn(Ri,FK,null,"int32"),DK={kernelName:Ri,backendName:"cpu",kernelFunc:RK};function MK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=DC({inputs:{x:r,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c}});if(i){let g=f;if(p==="NCHW"&&i.shape.length===1&&i.shape[0]!==1){let y=ft({inputs:{x:i},backend:n,attrs:{shape:[i.shape[0],1,1]}});f=gl({inputs:{a:f,b:y},backend:n}),n.disposeIntermediateTensorInfo(y)}else f=gl({inputs:{a:f,b:i},backend:n});n.disposeIntermediateTensorInfo(g)}if(h){let g=f;if(p==="NCHW"&&h==="prelu"&&o.shape.length===1&&o.shape[0]!==1){let y=ft({inputs:{x:o},backend:n,attrs:{shape:[o.shape[0],1,1]}});f=Oh(n,f,h,y,m),n.disposeIntermediateTensorInfo(y)}else f=Oh(n,f,h,o,m);n.disposeIntermediateTensorInfo(g)}return f}var PK={kernelName:ei,backendName:"cpu",kernelFunc:MK};function OK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=MC({inputs:{x:r,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c}});if(i){let g=f;f=gl({inputs:{a:f,b:i},backend:n}),n.disposeIntermediateTensorInfo(g)}if(h){let g=f;f=Oh(n,f,h,o,m),n.disposeIntermediateTensorInfo(g)}return f}var LK={kernelName:ti,backendName:"cpu",kernelFunc:OK};function zK(e){let{inputs:t,backend:n}=e,{params:a,indices:r}=t,s=v.sizeFromShape(a.shape),i=r.shape,o=i[i.length-1],[l,u,p,d]=N.prepareAndValidate(a,r);if(u===0)return n.makeTensorInfo(l,a.dtype,[]);let c=n.data.get(r.dataId).values,h=n.bufferSync(a),m=J2(c,h,a.dtype,u,o,p,d,a.shape,s);return n.makeTensorInfo(l,a.dtype,m.values)}var WK={kernelName:Vl,backendName:"cpu",kernelFunc:zK};function BK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=a;ge([r,s],"gatherV2");let l=v.parseAxisParam(i,r.shape)[0],u=n.data.get(s.dataId).values,p=r.shape[l];for(let w=0;w<u.length;++w){let I=u[w];v.assert(I<=p-1&&I>=0,()=>`GatherV2: the index value ${I} is not in [0, ${p-1}]`)}let d=o;o==null&&(d=0);let c=v.sizeFromShape(s.shape),h=N.segment_util.collectGatherOpShapeInfo(r,s,l,d),m=ft({inputs:{x:r},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=ft({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,c/h.batchSize]}}),g=[h.batchSize,h.outerSize,c/h.batchSize,h.sliceSize],y=n.bufferSync(f),b=n.bufferSync(m),x=Q2(b,y,g);return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),n.makeTensorInfo(h.outputShape,x.dtype,x.values)}var VK={kernelName:Bl,backendName:"cpu",kernelFunc:BK};function UK(e){let{inputs:t,backend:n}=e,{input:a}=t,r=v.sizeFromShape(a.shape),s=a.shape[a.shape.length-1],i=r/s,o=ft({inputs:{x:a},backend:n,attrs:{shape:[i,s]}}),l=PC(o,!0,n),u=ft({inputs:{x:l},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var GK={kernelName:pm,backendName:"cpu",kernelFunc:UK},HK=rt(Gl,e=>Number.isFinite(e)?1:0,"bool"),qK={kernelName:Gl,backendName:"cpu",kernelFunc:HK},jK=rt(Hl,e=>Math.abs(e)===1/0?1:0,"bool"),KK={kernelName:Hl,backendName:"cpu",kernelFunc:jK},XK=rt(Oi,e=>Number.isNaN(e)?1:0,"bool"),YK={kernelName:Oi,backendName:"cpu",kernelFunc:XK};function ZK(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=rC(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var JK={kernelName:dm,backendName:"cpu",kernelFunc:ZK},QK=rt(Kl,e=>Math.log1p(e)),e8={kernelName:Kl,backendName:"cpu",kernelFunc:QK},t8=Vt((e,t)=>e&&t),n8=rn(Xl,t8,null,"bool"),a8={kernelName:Xl,backendName:"cpu",kernelFunc:n8},r8=rt(Yl,e=>e?0:1,"bool"),s8={kernelName:Yl,backendName:"cpu",kernelFunc:r8},i8=Vt((e,t)=>e||t),o8=rn(Zl,i8,null,"bool"),l8={kernelName:Zl,backendName:"cpu",kernelFunc:o8};function u8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a;ge(r,"LRN");let u=r.shape[3],p=u-1,d=n.data.get(r.dataId).values,c=v.sizeFromShape(r.shape),h=new Float32Array(c);function m(f){let g=f%u,y=f-g+Math.max(0,g-s),b=f-g+Math.min(g+s,p),x=0;for(;y<=b;y++){let w=d[y];x+=w*w}return x}for(let f=0;f<c;f++){let g=m(f),y=d[f]*Math.pow(i+o*g,-l);h[f]=y}return n.makeTensorInfo(r.shape,r.dtype,h)}var p8={kernelName:pc,backendName:"cpu",kernelFunc:u8};function c8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=a;ge(i,"LRNGrad");let d=v.sizeFromShape(i.shape),c=i.shape[3],h=n.data.get(i.dataId).values,m=n.data.get(r.dataId).values,f=n.data.get(s.dataId).values,g=new Float32Array(d),y=d;for(let b=0;b<y;b++){let x=b%c,w=b-x+Math.max(0,x-o),I=b-x+Math.min(c,x+o+1),T=0;for(let C=w;C<I;C++)T+=Math.pow(m[C],2);T=u*T+l;for(let C=w;C<I;C++){let E=-2*u*p*m[C]*f[b]/T;b===C&&(E+=Math.pow(T,-p)),E*=h[b],g[C]+=E}}return n.makeTensorInfo(i.shape,r.dtype,g)}var d8={kernelName:hm,backendName:"cpu",kernelFunc:c8};function OC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=a,o=n,l=r.shape,u=l.length,p=v.parseAxisParam(s,l),d=p,c=N.getAxesPermutation(d,u),h=o.data.get(r.dataId).values;if(c!=null){let w=new Array(u);for(let I=0;I<w.length;I++)w[I]=l[c[I]];h=R0(h,l,r.dtype,c,w),d=N.getInnerMostAxes(d.length,u),l=w}ge(r,"max"),N.assertAxesAreInnerMostDims("max",d,u);let[m,f]=N.computeOutAndReduceShapes(l,d),g=v.sizeFromShape(f),y=iC(h,g,m,r.dtype),b=o.write(y,m,r.dtype),x=m;return i&&(x=N.expandShapeToKeepDim(m,p)),{dataId:b,shape:x,dtype:r.dtype}}var h8={kernelName:Wi,backendName:"cpu",kernelFunc:OC};function m8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;ge(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(N.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=N.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))d=pr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=W0(c,r.shape,r.dtype,h,p,"max");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var f8={kernelName:Vi,backendName:"cpu",kernelFunc:m8};function g8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;ge(r,"maxPool3d");let p=N.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=RC(d,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return n.makeTensorInfo(c.shape,"float32",c.values)}var y8={kernelName:cc,backendName:"cpu",kernelFunc:g8};function b8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;ge([r,s],"maxPool3DGrad");let p=N.computePool3DInfo(s.shape,i,o,1,l,u),d=n.bufferSync(s),c=s5(d,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,y=p.dilationHeight,b=p.dilationWidth,x=p.effectiveFilterDepth,w=p.effectiveFilterHeight,I=p.effectiveFilterWidth,T=x-1-p.padInfo.front,C=I-1-p.padInfo.left,E=w-1-p.padInfo.top,$=Le(s.shape,"float32"),R=n.bufferSync(r);for(let F=0;F<p.batchSize;++F)for(let S=0;S<p.inChannels;++S)for(let M=0;M<p.inDepth;++M)for(let B=0;B<p.inHeight;++B)for(let U=0;U<p.inWidth;++U){let G=M-T,j=B-E,K=U-C,Z=0;for(let J=0;J<x;J+=g){let ee=(G+J)/h;if(!(ee<0||ee>=p.outDepth||Math.floor(ee)!==ee))for(let ae=0;ae<w;ae+=y){let te=(j+ae)/m;if(!(te<0||te>=p.outHeight||Math.floor(te)!==te))for(let re=0;re<I;re+=b){let se=(K+re)/f;if(se<0||se>=p.outWidth||Math.floor(se)!==se)continue;let be=x*w*I-1-c.get(F,ee,te,se,S),ue=J*w*I+ae*I+re,ye=be===ue?1:0;if(ye===0)continue;let ke=R.get(F,ee,te,se,S);Z+=ke*ye}}}$.set(Z,F,M,B,U,S)}return n.makeTensorInfo($.shape,$.dtype,$.values)}var x8={kernelName:fm,backendName:"cpu",kernelFunc:b8};function v8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;ge([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=N.computePool2DInfo(o.shape,l,u,1,p,d),h=n.data.get(o.dataId).values,m=Le(c.outShape,o.dtype,FC(h,o.shape,o.dtype,c).values),f=c.strideHeight,g=c.strideWidth,y=c.dilationHeight,b=c.dilationWidth,x=c.effectiveFilterHeight,w=c.effectiveFilterWidth,I=w-1-c.padInfo.left,T=x-1-c.padInfo.top,C=Le(o.shape,"float32"),E=n.data.get(r.dataId).values,$=Le(r.shape,"float32",E);for(let R=0;R<c.batchSize;++R)for(let F=0;F<c.inChannels;++F)for(let S=0;S<c.inHeight;++S)for(let M=0;M<c.inWidth;++M){let B=S-T,U=M-I,G=0;for(let j=0;j<x;j+=y){let K=(B+j)/f;if(!(K<0||K>=c.outHeight||Math.floor(K)!==K))for(let Z=0;Z<w;Z+=b){let J=(U+Z)/g;if(J<0||J>=c.outWidth||Math.floor(J)!==J)continue;let ee=x*w-1-m.get(R,K,J,F),ae=j*w+Z,te=ee===ae?1:0;if(te===0)continue;let re=$.get(R,K,J,F);G+=re*te}}C.set(G,R,S,M,F)}return n.makeTensorInfo(C.shape,C.dtype,C.values)}var w8={kernelName:mm,backendName:"cpu",kernelFunc:v8};function k8(e,t,n,a,r){let s=v.computeStrides(t),i=W0(e,t,n,s,r,"max"),o=FC(e,t,n,r,!0,a);return[i.values,o.values]}var I8={kernelName:gm,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;ge(a,"MaxPoolWithArgmax");let u=l.data.get(a.dataId).values,p=N.computePool2DInfo(a.shape,r,s,[1,1],i),[d,c]=k8(u,a.shape,a.dtype,o,p),h=l.write(d,p.outShape,a.dtype),m=l.write(c,p.outShape,a.dtype);return[{dataId:h,shape:p.outShape,dtype:a.dtype},{dataId:m,shape:p.outShape,dtype:"int32"}]}};function S8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=v.parseAxisParam(s,r.shape),l=N.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([u]));p.push(d);let c=cs({inputs:{x:r},backend:n,attrs:{dtype:"float32"}});p.push(c);let h=B0({inputs:{a:c,b:d},backend:n});p.push(h);let m=Zc({inputs:{x:h},backend:n,attrs:{axis:s,keepDims:i}});return p.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var T8={kernelName:Ui,backendName:"cpu",kernelFunc:S8};function N8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;ge(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=N.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=N.getInnerMostAxes(l.length,r.shape.length)),N.assertAxesAreInnerMostDims("min",l,p.shape.length);let[d,c]=N.computeOutAndReduceShapes(p.shape,l),h=v.sizeFromShape(c),m=v.makeZerosTypedArray(v.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let w=0;w<h;++w){let I=f[b+w];(Number.isNaN(I)||I<x)&&(x=I)}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=N.expandShapeToKeepDim(d,o),b=ft({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var C8={kernelName:Gi,backendName:"cpu",kernelFunc:N8};function _8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,mode:i}=a;ge(r,"mirrorPad");let o=s.map((b,x)=>b[0]+r.shape[x]+b[1]),l=s.map(b=>b[0]),u=s.map((b,x)=>b[0]+r.shape[x]),p=i==="reflect"?0:1,d=n.data.get(r.dataId).values,c=r.shape.length,h=v.computeStrides(r.shape),m=v.sizeFromShape(o),f=o.length,g=v.computeStrides(o),y=v.getTypedArrayFromDType(r.dtype,m);for(let b=0;b<m;b++){let x=v.indexToLoc(b,f,g);for(let I=0;I<f;I++)x[I]<l[I]?x[I]=l[I]*2-x[I]-p:x[I]>=u[I]&&(x[I]=(u[I]-1)*2-x[I]+p);x=x.map((I,T)=>I-l[T]);let w=v.locToIndex(x,c,h);y[b]=d[w]}return{dataId:n.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var E8={kernelName:qi,backendName:"cpu",kernelFunc:_8},A8=Vt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),$8=rn(Jl,A8),F8={kernelName:Jl,backendName:"cpu",kernelFunc:$8},R8=hs(Gh());function LC(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{dim:s}=a,i=r.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=v.parseAxisParam([o],r.shape),u=OC({inputs:{x:r},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),p=N.expandShapeToKeepDim(u.shape,l),d=ft({inputs:{x:u},backend:n,attrs:{shape:p}}),c=z0({inputs:{a:r,b:d},backend:n}),h=X2({inputs:{x:c},backend:n}),m=Zc({inputs:{x:h},backend:n,attrs:{axis:l,keepDims:!1}}),f=ft({inputs:{x:m},backend:n,attrs:{shape:p}}),g=B0({inputs:{a:h,b:f},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),g}var D8={kernelName:co,backendName:"cpu",kernelFunc:LC};function M8(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a;ge(r,"multinomial");let l=o?r:LC({inputs:{logits:r},backend:n,attrs:{dim:-1}}),u=l.shape[0],p=l.shape[1],d=n.data.get(l.dataId).values,c=[u,s],h=v.makeZerosTypedArray(v.sizeFromShape(c),"int32");for(let m=0;m<u;++m){let f=m*p,g=new Float32Array(p-1);g[0]=d[f];for(let x=1;x<g.length;++x)g[x]=g[x-1]+d[f+x];let y=R8.alea(i.toString()),b=m*s;for(let x=0;x<s;++x){let w=y();h[b+x]=g.length;for(let I=0;I<g.length;I++)if(w<g[I]){h[b+x]=I;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(c,"int32",h)}var P8={kernelName:ym,backendName:"cpu",kernelFunc:M8},O8=hr.nonMaxSuppressionV3Impl;function L8(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=a;ge(r,"NonMaxSuppression");let u=n.data.get(r.dataId).values,p=n.data.get(s.dataId).values,{selectedIndices:d}=O8(u,p,i,o,l);return n.makeTensorInfo([d.length],"int32",new Int32Array(d))}var z8={kernelName:tu,backendName:"cpu",kernelFunc:L8},W8=hr.nonMaxSuppressionV4Impl;function B8(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=a;ge(r,"NonMaxSuppressionPadded");let p=n.data.get(r.dataId).values,d=n.data.get(s.dataId).values,{selectedIndices:c,validOutputs:h}=W8(p,d,i,o,l,u);return[n.makeTensorInfo([c.length],"int32",new Int32Array(c)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var V8={kernelName:nu,backendName:"cpu",kernelFunc:B8},U8=hr.nonMaxSuppressionV5Impl;function G8(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=a;ge(r,"NonMaxSuppressionWithScore");let p=n.data.get(r.dataId).values,d=n.data.get(s.dataId).values,c=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=U8(p,d,c,h,m,f);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var H8={kernelName:au,backendName:"cpu",kernelFunc:G8};function q8(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=a;ge(r,"oneHot");let u=v.sizeFromShape(r.shape),p=new Float32Array(u*i);p.fill(l);let d=n.data.get(r.dataId).values;for(let c=0;c<u;++c)d[c]>=0&&d[c]<i&&(p[c*i+d[c]]=o);return n.makeTensorInfo([...r.shape,i],s,p)}var j8={kernelName:Ki,backendName:"cpu",kernelFunc:q8};function zh(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(a.dtype==="complex64"){let r=ci({inputs:{input:a},backend:n}),s=zh({inputs:{x:r},backend:n}),i=yl({inputs:{input:a},backend:n}),o=zh({inputs:{x:i},backend:n}),l=Yn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return V0({backend:n,attrs:{shape:a.shape,value:0,dtype:a.dtype}})}var K8={kernelName:wu,backendName:"cpu",kernelFunc:zh};function zC(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(a.dtype==="complex64"){let r=ci({inputs:{input:a},backend:n}),s=zC({inputs:{x:r},backend:n}),i=yl({inputs:{input:a},backend:n}),o=zh({inputs:{x:i},backend:n}),l=Yn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return V0({backend:n,attrs:{shape:a.shape,value:1,dtype:a.dtype}})}var X8={kernelName:ru,backendName:"cpu",kernelFunc:zC};function WC(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return Lh({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=Lh({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=bl({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var Y8={kernelName:su,backendName:"cpu",kernelFunc:WC};function Z8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,constantValue:i}=a;ge(r,"pad");let o=s.map((y,b)=>y[0]+r.shape[b]+y[1]),l=s.map(y=>y[0]),u=n.data.get(r.dataId).values,p=v.sizeFromShape(r.shape),d=r.shape.length,c=v.computeStrides(r.shape),h=v.sizeFromShape(o),m=o.length,f=v.computeStrides(o),g=v.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;y<p;y++){let b=v.indexToLoc(y,d,c).map((w,I)=>w+l[I]),x=v.locToIndex(b,m,f);g[x]=u[y]}return{dataId:n.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var BC={kernelName:Xi,backendName:"cpu",kernelFunc:Z8},J8=Vt((e,t)=>Math.pow(e,t)),Q8=rn(Yi,J8),eX={kernelName:Yi,backendName:"cpu",kernelFunc:Q8};function tX(e){let{inputs:t,backend:n,attrs:a}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=a,l=r.map(y=>n.data.get(y.dataId).values),u=r.map(y=>y.shape),p=n.data.get(s.dataId).values,d=n.data.get(i.dataId).values,[c,h,m]=dC(l,u,p,s.shape,s.dtype,d,i.shape,o),f=c.map(y=>n.makeTensorInfo([y.length],"int32",y)),g=n.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var nX={kernelName:bm,backendName:"cpu",kernelFunc:tX};function aX(e){let{inputs:t,backend:n}=e,{starts:a,limits:r,deltas:s}=t,i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,[u,p]=hC(i,a.shape,a.dtype,o,r.shape,l,s.shape),d=n.makeTensorInfo([u.length],"int32",u),c=n.makeTensorInfo([p.length],a.dtype,p);return[d,c]}var rX={kernelName:xm,backendName:"cpu",kernelFunc:aX};function sX(e){let{inputs:t,backend:n,attrs:a}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=a,u=n.data.get(r.dataId).values,p=n.data.get(s.dataId).values,d=n.data.get(i.dataId).values,c=o.map(g=>n.data.get(g.dataId).values),h=o.map(g=>g.shape),[m,f]=mC(u,r.shape,p,s.shape,s.dtype,d,i.shape,c,h,l);return n.makeTensorInfo(m,s.dtype,f)}var iX={kernelName:vm,backendName:"cpu",kernelFunc:sX};function oX(e){let{backend:t,attrs:n}=e,{start:a,stop:r,dtype:s,step:i}=n,o=D0(a,r,i,s);return t.makeTensorInfo([o.length],s,o)}var lX={kernelName:dc,backendName:"cpu",kernelFunc:oX},uX=rt(Qi,e=>1/e),pX={kernelName:Qi,backendName:"cpu",kernelFunc:uX};function cX(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a;ge(r,"resizeBilinear");let l=v.computeStrides(r.shape),[u,p]=o,[d,c,h,m]=r.shape,f=n.data.get(r.dataId).values,g=new Float32Array(v.sizeFromShape([d,u,p,m])),y=[s&&u>1?c-1:c,s&&p>1?h-1:h],b=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=0,w=y[0]/b[0],I=y[1]/b[1];for(let T=0;T<d;T++)for(let C=0;C<u;C++){let E;i?E=w*(C+.5)-.5:E=w*C;let $=Math.max(0,Math.floor(E)),R=E-$,F=Math.min(c-1,Math.ceil(E)),S=T*l[0]+$*l[1],M=T*l[0]+F*l[1];for(let B=0;B<p;B++){let U;i?U=I*(B+.5)-.5:U=I*B;let G=Math.max(0,Math.floor(U)),j=U-G,K=Math.min(h-1,Math.ceil(U)),Z=S+G*l[2],J=M+G*l[2],ee=S+K*l[2],ae=M+K*l[2];for(let te=0;te<m;te++){let re=f[Z+te],se=f[J+te],be=f[ee+te],ue=f[ae+te],ye=re+(be-re)*j,ke=se+(ue-se)*j,Se=ye+(ke-ye)*R;g[x++]=Se}}}return n.makeTensorInfo([d,u,p,m],"float32",g)}var dX={kernelName:no,backendName:"cpu",kernelFunc:cX};function hX(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a;ge([s,r],"resizeBilinearGrad");let o=v.computeStrides(r.shape),[l,u,p,d]=r.shape,[,c,h]=s.shape,m=new Float32Array(l*u*p*d),f=[i&&c>1?u-1:u,i&&h>1?p-1:p],g=[i&&c>1?c-1:c,i&&h>1?h-1:h],y=f[0]/g[0],b=f[1]/g[1],x=n.data.get(s.dataId).values,w=0;for(let I=0;I<l;I++){let T=I*o[0];for(let C=0;C<c;C++){let E=C*y,$=Math.floor(E),R=Math.min(Math.ceil(E),u-1),F=T+$*o[1],S=T+R*o[1],M=E-$,B=1-M;for(let U=0;U<h;U++){let G=U*b,j=Math.floor(G),K=Math.min(Math.ceil(G),p-1),Z=G-j,J=1-Z,ee=F+j*o[2],ae=F+K*o[2],te=S+j*o[2],re=S+K*o[2],se=B*J,be=B*Z,ue=M*J,ye=M*Z;for(let ke=0;ke<d;ke++){let Se=x[w++];m[ee+ke]+=Se*se,m[ae+ke]+=Se*be,m[te+ke]+=Se*ue,m[re+ke]+=Se*ye}}}}return n.makeTensorInfo([l,p,u,d],"float32",m)}var mX={kernelName:Im,backendName:"cpu",kernelFunc:hX};function fX(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a;ge(r,"resizeNearestNeighbor");let l=v.computeStrides(r.shape),[u,p]=o,[d,c,h,m]=r.shape,f=n.data.get(r.dataId).values,g=new Float32Array(d*u*p*m),y=[s&&u>1?c-1:c,s&&p>1?h-1:h],b=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=y[0]/b[0],w=y[1]/b[1],I=0;for(let T=0;T<d;T++){let C=T*l[0];for(let E=0;E<u;E++){let $=i?x*(E+.5):x*E,R=Math.min(c-1,s?Math.round($):Math.floor($));i&&(R=Math.max(0,R));let F=C+R*l[1];for(let S=0;S<p;S++){let M=i?w*(S+.5):w*S,B=Math.min(h-1,s?Math.round(M):Math.floor(M));i&&(B=Math.max(0,B));let U=F+B*l[2];for(let G=0;G<m;G++){let j=f[U+G];g[I++]=j}}}}return n.makeTensorInfo([d,u,p,m],r.dtype,g)}var gX={kernelName:to,backendName:"cpu",kernelFunc:fX};function yX(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a;ge([s,r],"resizeNearestNeighborGrad");let o=v.computeStrides(r.shape),l=v.computeStrides(s.shape),[u,p,d,c]=r.shape,[,h,m]=s.shape,f=new Float32Array(u*p*d*c),g=n.data.get(s.dataId).values,y=[i&&h>1?p-1:p,i&&m>1?d-1:d],b=[i&&h>1?h-1:h,i&&m>1?m-1:m],x=y[0]/b[0],w=y[1]/b[1],I=1/x,T=1/w,C=Math.ceil(I)*2+2,E=Math.ceil(T)*2+2;for(let $=0;$<u;$++){let R=$*o[0];for(let F=0;F<p;F++){let S=R+F*o[1],M=Math.floor(F*I),B=Math.floor(M-C/2);for(let U=0;U<d;U++){let G=S+U*o[2],j=Math.floor(U*T),K=Math.floor(j-E/2);for(let Z=0;Z<c;Z++){let J=0;for(let ee=0;ee<C;ee++){let ae=ee+B;if(ae<0||ae>=h)continue;let te=R+ae*l[1],re=ae*x,se=Math.min(p-1,i?Math.round(re):Math.floor(re));if(F===se)for(let be=0;be<E;be++){let ue=be+K;if(ue<0||ue>=m)continue;let ye=te+ue*l[2],ke=ue*w,Se=Math.min(d-1,i?Math.round(ke):Math.floor(ke));U===Se&&(J+=g[ye+Z])}}f[G+Z]=J}}}}return n.makeTensorInfo(r.shape,r.dtype,f)}var bX={kernelName:km,backendName:"cpu",kernelFunc:yX};function xX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a;ge(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return pr({inputs:{x:r},backend:n});let l=new jt(r.shape,r.dtype),u=n.bufferSync(r);for(let p=0;p<l.size;p++){let d=l.indexToLoc(p),c=d.slice();o.forEach(h=>c[h]=r.shape[h]-1-c[h]),l.set(u.get(...c),...d)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var vX={kernelName:ro,backendName:"cpu",kernelFunc:xX},wX={kernelName:ku,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,{radians:r,fillValue:s,center:i}=t,o=n,l=v.getTypedArrayFromDType(a.dtype,v.sizeFromShape(a.shape)),[u,p,d,c]=a.shape,[h,m]=N.getImageCenter(i,p,d),f=255,g=Math.sin(r),y=Math.cos(r),b=o.data.get(a.dataId).values;for(let x=0;x<u;x++){let w=x*d*p*c;for(let I=0;I<p;I++){let T=I*(d*c);for(let C=0;C<d;C++){let E=C*c;for(let $=0;$<c;$++){let R=[u,I,C,$],F=R[2],S=R[1],M=(F-h)*y-(S-m)*g,B=(F-h)*g+(S-m)*y;M=Math.round(M+h),B=Math.round(B+m);let U=s;if(typeof s!="number"&&($===3?U=f:U=s[$]),M>=0&&M<d&&B>=0&&B<p){let j=B*(d*c),K=M*c,Z=w+j+K+$;U=b[Z]}let G=w+T+E+$;l[G]=U}}}}return{dataId:o.write(l,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},kX=rt(so,e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),IX={kernelName:so,backendName:"cpu",kernelFunc:kX};function SX(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r,updates:s}=t,{shape:i}=a,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:d}=N.calculateShapes(s,r,i),c=!0,h=n.bufferSync(r),m=n.bufferSync(s),f=Zo(h,m,i,d,u,l,o,p,0,c);return n.makeTensorInfo(i,f.dtype,f.values)}var TX={kernelName:ou,backendName:"cpu",kernelFunc:SX};function NX(e,t){let n=0,a=e.length,r=0;for(;n<a;)r=Math.floor((n+a)/2),e[r]<t?n=r+1:a=r;return a}function CX(e,t){let n=0,a=e.length,r=0;for(;n<a;)r=Math.floor((n+a)/2),e[r]<=t?n=r+1:a=r;return a}function _X(e,t,n,a,r,s){let i=v.getArrayFromDType("int32",n*r);for(let o=0;o<n;++o){let l=e.slice(o*a,(o+1)*a),u=o*r;for(let p=0;p<r;++p)i[u+p]=s==="left"?NX(l,t[p+u]):CX(l,t[p+u])}return i}function EX(e){let{inputs:t,backend:n,attrs:a}=e,{sortedSequence:r,values:s}=t,{side:i}=a,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,u=_X(o,l,r.shape[0],r.shape[1],s.shape[1],i);return n.makeTensorInfo(s.shape,"int32",u)}var AX={kernelName:Sm,backendName:"cpu",kernelFunc:EX};function $X(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t;ge([a,r,s],"select");let i=a.shape.length,o=n.data.get(a.dataId).values,l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=ma(r.dtype,s.dtype),d=v.makeZerosTypedArray(v.sizeFromShape(r.shape),p),c=0,h=i===0||i>1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let m=0;m<o.length;m++)for(let f=0;f<h;f++)o[m]===1?d[c++]=l[m]:d[c++]=u[m];return n.makeTensorInfo(r.shape,p,d)}var FX={kernelName:lu,backendName:"cpu",kernelFunc:$X},RX=N.SELU_SCALEALPHA,DX=N.SELU_SCALE,MX=rt(uu,e=>e>=0?DX*e:RX*(Math.exp(e)-1)),PX={kernelName:uu,backendName:"cpu",kernelFunc:MX},OX=rt(du,e=>e<0?-1:e>0?1:0),LX={kernelName:du,backendName:"cpu",kernelFunc:OX},zX=rt(oo,e=>Math.sin(e)),WX={kernelName:oo,backendName:"cpu",kernelFunc:zX},BX=rt(cu,e=>Math.sinh(e)),VX={kernelName:cu,backendName:"cpu",kernelFunc:BX},UX=11920928955078125e-23,Wk=Math.log(UX)+2,GX=rt(hu,e=>{let t=e>-Wk,n=e<Wk,a=Math.exp(e),r;return n?r=a:t?r=e:r=Math.log(1+a),r}),HX={kernelName:hu,backendName:"cpu",kernelFunc:GX};function qX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a;ge([r],"spaceToBatchND");let o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g<r.shape.length;++g)l.push([0,0]);let u=BC.kernelFunc({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),p=N.getReshaped(u.shape,s,o,!1),d=N.getPermuted(p.length,s.length,!1),c=N.getReshapedPermuted(u.shape,s,o,!1),h=ft({inputs:{x:u},backend:n,attrs:{shape:p}}),m=Vn({inputs:{x:h},backend:n,attrs:{perm:d}}),f=ft({inputs:{x:m},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),f}var jX={kernelName:mu,backendName:"cpu",kernelFunc:qX};function KX(e){let{inputs:t,backend:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
|
|
${s.shape}`);if(a.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw:
|
|
${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
|
|
${i.shape}`);let o=n.data.get(a.dataId).values,l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values[0],[d,c,h,m,f]=yC(o,a.shape,a.dtype,l,r.dtype,u,p);return[n.makeTensorInfo(c,a.dtype,d),n.makeTensorInfo([c[0]],r.dtype,h),n.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),n.makeTensorInfo([f.length],a.dtype,new Int32Array(f))]}var XX={kernelName:hc,backendName:"cpu",kernelFunc:KX};function YX(e){let{inputs:t,backend:n}=e,{inputIndices:a,inputShape:r,newShape:s}=t;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.data.get(r.dataId).values),o=n.data.get(a.dataId).values,l=Array.from(n.data.get(s.dataId).values),[u,p,d]=bC(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var ZX={kernelName:gu,backendName:"cpu",kernelFunc:YX};function JX(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,[u,p]=M0(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var QX={kernelName:mc,backendName:"cpu",kernelFunc:JX};function eY(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,[u,p]=M0(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var tY={kernelName:fc,backendName:"cpu",kernelFunc:eY};function nY(e){let{inputs:t,backend:n,attrs:a}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=a,{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=N.calculateShapes(s,r,o),h=!1,m=n.bufferSync(r),f;switch(s.dtype){case"bool":{let g=n.bufferSync(s),y=Boolean(n.data.get(i.dataId).values[0]);f=Zo(m,g,o,c,p,u,l,d,y,h);break}case"float32":{let g=n.bufferSync(s),y=n.data.get(i.dataId).values[0];f=Zo(m,g,o,c,p,u,l,d,y,h);break}case"int32":{let g=n.bufferSync(s),y=n.data.get(i.dataId).values[0];f=Zo(m,g,o,c,p,u,l,d,y,h);break}case"string":{let g=n.bufferSync(s),y=v.decodeString(n.data.get(i.dataId).values[0]);f=Zo(m,g,o,c,p,u,l,d,y,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return n.makeTensorInfo(o,f.dtype,f.values)}var aY={kernelName:Tm,backendName:"cpu",kernelFunc:nY};function rY(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=N.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(d=>{let c=[...p];c[o]=d;let h=di({inputs:{x:r},backend:n,attrs:{begin:u,size:c}});return u[o]+=d,h})}var sY={kernelName:fu,backendName:"cpu",kernelFunc:rY},iY={kernelName:gc,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,a=t;ge(n,"square");let r=a.data.get(n.dataId).values,s=new Float32Array(r.length);for(let i=0;i<r.length;++i){let o=r[i];s[i]=o*o}return{dataId:a.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},oY=rt(bs,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),lY={kernelName:bs,backendName:"cpu",kernelFunc:oY};function uY(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a;ge(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:w}=Kt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=ft({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Kt.computeOutShape(b,x,w),C=di({inputs:{x:r},backend:n,attrs:{begin:b,size:T}});I=ft({inputs:{x:C},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(C)}else{let T=n.bufferSync(r),C=vC(h,T,w,b);I=n.makeTensorInfo(m,C.dtype,C.values)}return I}var pY={kernelName:yu,backendName:"cpu",kernelFunc:uY};function cY(e){let{inputs:t,backend:n,attrs:a}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=a,{data:p,dataSplits:d}=t,c=n.data.get(p.dataId).values,h=n.data.get(d.dataId).values,[m,f]=P0(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var dY={kernelName:yc,backendName:"cpu",kernelFunc:cY};function hY(e){let{inputs:t,backend:n,attrs:a}=e,{skipEmpty:r}=a,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values[0],[u,p,d]=O0(o,l,r),c=p.length;return[n.makeTensorInfo([c,2],"int32",u),n.makeTensorInfo([c],"string",p),n.makeTensorInfo([2],"int32",new Int32Array(d))]}var mY={kernelName:bc,backendName:"cpu",kernelFunc:hY};function fY(e){let{inputs:t,backend:n,attrs:a}=e,{numBuckets:r}=a,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=n.data.get(s.dataId).values,o=L0(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var gY={kernelName:xc,backendName:"cpu",kernelFunc:fY},yY=rt(fo,e=>Math.tan(e)),bY={kernelName:fo,backendName:"cpu",kernelFunc:yY},xY=rt(go,e=>Math.tanh(e)),vY={kernelName:go,backendName:"cpu",kernelFunc:xY};function wY(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reps:s}=a;ge(r,"tile");let i=kC(n.bufferSync(r),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var kY={kernelName:ys,backendName:"cpu",kernelFunc:wY};function IY(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{k:s,sorted:i}=a;ge(r,"topk");let o=n.data.get(r.dataId).values,[l,u]=SC(o,r.shape,r.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var SY={kernelName:bu,backendName:"cpu",kernelFunc:IY};function TY(e){let{inputs:t,attrs:n,backend:a}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=v.computeStrides(r.shape),b=y[0],x=y[1],w=y[2],I=v.computeStrides(g),T=I[0],C=I[1],E=I[2],$=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));$.fill(l);let R=a.data.get(r.dataId).values,F=a.data.get(s.dataId).values;for(let S=0;S<p;++S){let M=s.shape[0]===1?F:F.subarray(S*8,S*8+8);for(let B=0;B<m;++B)for(let U=0;U<f;++U)for(let G=0;G<h;++G){let j,K=M[6]*U+M[7]*B+1;if(K===0)continue;let Z=(M[0]*U+M[1]*B+M[2])/K,J=(M[3]*U+M[4]*B+M[5])/K,ee=Bk(Z,c,o),ae=Bk(J,d,o);switch(i){case"nearest":j=$Y(R,d,c,b,x,w,S,ae,ee,G,l);break;case"bilinear":j=FY(R,d,c,b,x,w,S,ae,ee,G,l);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${i}`)}let te=S*T+B*C+U*E+G;$[te]=j}return a.makeTensorInfo(g,r.dtype,$)}return{dataId:a.write($,g,r.dtype),shape:r.shape,dtype:r.dtype}}var NY={kernelName:xu,backendName:"cpu",kernelFunc:TY};function Bk(e,t,n){switch(n){case"reflect":return CY(e,t);case"wrap":return _Y(e,t);case"nearest":return AY(e,t);case"constant":default:return EY(e,t)}}function CY(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let a=2*t;n<a&&(n=a*Math.trunc(-n/a)+n),n=n<-t?n+a:-n-1}else if(n>t-1)if(t<=1)n=0;else{let a=2*t;n-=a*Math.trunc(n/a),n>=t&&(n=a-n-1)}return v.clamp(0,n,t-1)}function _Y(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let a=t-1;n+=t*(Math.trunc(-n/a)+1)}else if(n>t-1)if(t<=1)n=0;else{let a=t-1;n-=t*Math.trunc(n/a)}return v.clamp(0,n,t-1)}function EY(e,t){return e}function AY(e,t){return v.clamp(0,e,t-1)}function Ep(e,t,n,a,r,s,i,o,l,u,p){let d=i*a+o*r+l*s+u;return 0<=o&&o<t&&0<=l&&l<n?e[d]:p}function $Y(e,t,n,a,r,s,i,o,l,u,p){let d=Math.round(o),c=Math.round(l);return Ep(e,t,n,a,r,s,i,d,c,u,p)}function FY(e,t,n,a,r,s,i,o,l,u,p){let d=Math.floor(o),c=Math.floor(l),h=d+1,m=c+1,f=(m-l)*Ep(e,t,n,a,r,s,i,d,c,u,p)+(l-c)*Ep(e,t,n,a,r,s,i,d,m,u,p),g=(m-l)*Ep(e,t,n,a,r,s,i,h,c,u,p)+(l-c)*Ep(e,t,n,a,r,s,i,h,m,u,p);return(h-o)*f+(o-d)*g}function RY(e){let{inputs:t,attrs:n,backend:a}=e,{axis:r}=n,{x:s}=t;ge(s,"unique");let i=a.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:u}=TC(i,r,s.shape,s.dtype);return[a.makeTensorInfo(l,s.dtype,o),a.makeTensorInfo([u.length],"int32",u)]}var DY={kernelName:Nm,backendName:"cpu",kernelFunc:RY};function MY(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r.shape.length,o=r.shape[s],l=new Array(i-1),u=0;for(let h=0;h<i;h++)h!==s&&(l[u++]=r.shape[h]);let p=new Array(i).fill(0),d=r.shape.slice();d[s]=1;let c=new Array(o);for(let h=0;h<c.length;h++){p[s]=h;let m=di({inputs:{x:r},backend:n,attrs:{begin:p,size:d}});c[h]=ft({inputs:{x:m},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(m)}return c}var PY={kernelName:vu,backendName:"cpu",kernelFunc:MY};function OY(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,segmentIds:s}=t,{numSegments:i}=a;ge(r,"unsortedSegmentSum");let o=r.shape.length,l=s.shape.length,u=[],p=[],d=o-l,c=s;for(let m=0;m<d;++m){let f=Lh({inputs:{input:c},backend:n,attrs:{dim:m+1}});c=f,p.push(f)}for(let m=0;m<i;++m){let f=v.createScalarValue(m,"int32"),g=n.makeTensorInfo([],"int32",f),y=j2({inputs:{a:g,b:c},backend:n}),b=cs({inputs:{x:y},backend:n,attrs:{dtype:"float32"}}),x=Cf({inputs:{a:b,b:r},backend:n}),w=Zc({inputs:{x},backend:n,attrs:{axis:0,keepDims:!1}});u.push(w),p.push(g),p.push(y),p.push(b),p.push(x),p.push(w)}let h=WC({inputs:u,backend:n,attrs:{axis:0}});return p.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var LY={kernelName:vc,backendName:"cpu",kernelFunc:OY},zY=[Rj,vq,Mj,Oj,Nq,zj,Bj,Uj,Hj,jj,Xj,Zj,Qj,n5,r5,o5,u5,c5,h5,$j,f5,y5,x5,w5,Sq,_q,I5,wq,T5,C5,_5,A5,F5,D5,P5,L5,W5,V5,G5,q5,K5,Y5,J5,Q5,tK,aK,sK,iK,oK,lK,cK,Sj,hK,Eq,wK,Aq,kK,Fq,_K,EK,$K,Dq,DK,PK,LK,WK,VK,Pq,Lq,kq,GK,N5,qK,KK,YK,Tj,Wq,Vq,JK,Gq,e8,a8,s8,l8,p8,d8,h8,qq,f8,y8,x8,w8,I8,T8,C8,Kq,E8,F8,P8,Yq,Jq,z8,V8,H8,ej,j8,X8,Y8,BC,eX,Cj,aj,nX,rX,iX,lX,Iq,nx,pX,_j,Ej,Aj,dX,mX,gX,bX,vX,wX,IX,cj,TX,AX,FX,PX,hj,LX,WX,VX,mj,D8,HX,jX,XX,ZX,QX,tY,aY,sY,yj,iY,xj,lY,pY,dY,mY,gY,Ij,uK,bY,vY,kY,SY,NY,tj,DY,PY,LY,K8];for(let e of zY)wc(e);var VC={};Ae(VC,{assertNotComplex:()=>Pu,bindCanvasToFramebuffer:()=>YY,bindColorTextureToFramebuffer:()=>oh,bindTextureToProgramUniformSampler:()=>r_,bindTextureUnit:()=>t_,bindVertexBufferToProgramAttribute:()=>rx,callAndCheck:()=>ce,canBeRepresented:()=>GC,createFragmentShader:()=>jC,createFramebuffer:()=>e_,createProgram:()=>KC,createStaticIndexBuffer:()=>ZC,createStaticVertexBuffer:()=>YC,createTexture:()=>JC,createVertexShader:()=>qC,getBatchDim:()=>hi,getExtensionOrThrow:()=>Ap,getFramebufferErrorMessage:()=>s_,getMaxTexturesInShader:()=>u_,getNumChannels:()=>KY,getProgramUniformLocation:()=>a_,getProgramUniformLocationOrThrow:()=>n_,getRowsCols:()=>mi,getShapeAs3D:()=>Fp,getTextureShapeFromLogicalShape:()=>o_,getWebGLDisjointQueryTimerVersion:()=>p_,getWebGLErrorMessage:()=>HC,getWebGLMaxTextureSize:()=>l_,hasExtension:()=>ca,isCapableOfRenderingToFloatTexture:()=>c_,isDownloadFloatTextureEnabled:()=>d_,isReshapeFree:()=>Jp,isWebGLFenceEnabled:()=>h_,isWebGLVersionEnabled:()=>ix,linkProgram:()=>XC,logShaderSourceAndInfoLog:()=>G0,resetMaxTextureSize:()=>ZY,resetMaxTexturesInShader:()=>JY,unbindColorTextureFromFramebuffer:()=>sx,unbindTextureUnit:()=>XY,validateFramebuffer:()=>$p,validateProgram:()=>ih,validateTextureSize:()=>QC});var js={},Qd={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function UC(e,t){js[e]=t}function Ka(e,t){if(!(e in js)||t!=null){let a=BY(e,t);if(a!==null)js[e]=a;else return console.log("Could not get context for WebGL version",e),null}let n=js[e];return n==null||n.isContextLost()?(delete js[e],Ka(e)):(n.disable(n.DEPTH_TEST),n.disable(n.STENCIL_TEST),n.disable(n.BLEND),n.disable(n.DITHER),n.disable(n.POLYGON_OFFSET_FILL),n.disable(n.SAMPLE_COVERAGE),n.enable(n.SCISSOR_TEST),n.enable(n.CULL_FACE),n.cullFace(n.BACK),js[e])}function WY(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function BY(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=t==null?WY(e):t;return n.addEventListener("webglcontextlost",a=>{a.preventDefault(),delete js[e]},!1),H().getBool("SOFTWARE_WEBGL_ENABLED")&&(Qd.failIfMajorPerformanceCaveat=!1),e===1?n.getContext("webgl",Qd)||n.getContext("experimental-webgl",Qd):n.getContext("webgl2",Qd)}var Zp;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Zp||(Zp={}));var pa;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(pa||(pa={}));var un;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(un||(un={}));function Jc(e,t){return[t,e]}function VY(e,t){return e*t}function eh(e){let t=v.sizeFromShape(e),n=Math.ceil(t/4);return v.sizeToSquarishShape(n)}function Mu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function UY(e,t){let[n,a]=Mu(e,t);return n*a*4}function U0(e,t){let n=e,a,r,s,i,o,l,u,p,d,c;return H().getNumber("WEBGL_VERSION")===2?(a=n.R32F,r=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,u=4,p=1,d=n.HALF_FLOAT,c=n.FLOAT,l=n.RGBA8):(a=e.RGBA,r=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,u=4,p=4,d=t!=null?t.HALF_FLOAT_OES:null,c=e.FLOAT,l=e.RGBA),{internalFormatFloat:a,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:p,textureTypeHalfFloat:d,textureTypeFloat:c}}function ce(e,t){let n=t();return H().getBool("DEBUG")&&GY(e),n}function GY(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+HC(e,t))}var HY=596e-10,qY=65504;function GC(e){return!!(H().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||HY<Math.abs(e)&&Math.abs(e)<qY)}function HC(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function Ap(e,t){return Dr(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function qC(e,t){let n=Dr(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ce(e,()=>e.shaderSource(n,t)),ce(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function jC(e,t){let n=Dr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ce(e,()=>e.shaderSource(n,t)),ce(e,()=>e.compileShader(n)),H().get("ENGINE_COMPILE_ONLY"))return n;if(e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw G0(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var jY=/ERROR: [0-9]+:([0-9]+):/g;function G0(e,t){let n=jY.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let a=+n[1],r=e.split(`
|
|
`),s=r.length.toString().length+2,i=r.map((d,c)=>v.rightPad((c+1).toString(),s)+d),o=0;for(let d=0;d<i.length;d++)o=Math.max(i[d].length,o);let l=i.slice(0,a-1),u=i.slice(a-1,a),p=i.slice(a);console.log(l.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${v.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(p.join(`
|
|
`))}function KC(e){return Dr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function XC(e,t){if(ce(e,()=>e.linkProgram(t)),!H().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function ih(e,t){if(ce(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function YC(e,t){let n=Dr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ce(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function ZC(e,t){let n=Dr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ce(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function KY(){return H().getNumber("WEBGL_VERSION")===2?1:4}function JC(e){return Dr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function QC(e,t){let n=H().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let a=`[${e}x${t}]`;throw new Error("Requested texture size "+a+" is invalid.")}if(e>n||t>n){let a=`[${e}x${t}]`,r=`[${n}x${n}]`;throw new Error("Requested texture size "+a+" greater than WebGL maximum on this browser / GPU "+r+".")}}function e_(e){return Dr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function rx(e,t,n,a,r,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ce(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ce(e,()=>e.enableVertexAttribArray(o)),!0)}function t_(e,t,n){i_(e,n),ce(e,()=>e.activeTexture(e.TEXTURE0+n)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function XY(e,t){i_(e,t),ce(e,()=>e.activeTexture(e.TEXTURE0+t)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function n_(e,t,n){return Dr(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function a_(e,t,n){return e.getUniformLocation(t,n)}function r_(e,t,n,a){ce(e,()=>t_(e,t,a)),ce(e,()=>e.uniform1i(n,a))}function YY(e){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ce(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function oh(e,t,n){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function sx(e,t){ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ce(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function $p(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+s_(e,t))}function s_(e,t){switch(t){case e.FRAMEBUFFER_INCOMPLETE_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT:return"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT";case e.FRAMEBUFFER_INCOMPLETE_DIMENSIONS:return"FRAMEBUFFER_INCOMPLETE_DIMENSIONS";case e.FRAMEBUFFER_UNSUPPORTED:return"FRAMEBUFFER_UNSUPPORTED";default:return`unknown error ${t}`}}function Dr(e,t,n){let a=ce(e,()=>t());if(a==null)throw new Error(n);return a}function i_(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,a=t+e.TEXTURE0;if(a<e.TEXTURE0||a>n){let r=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${r}.`)}}function hi(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function mi(e){if(e.length===0)throw Error("Cannot get rows and columns of an empty shape array.");return[e.length>1?e[e.length-2]:1,e[e.length-1]]}function Fp(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[hi(e),...mi(e)]),t}function o_(e,t=!1){let n=H().getNumber("WEBGL_MAX_TEXTURE_SIZE"),a=H().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");a===1/0&&H().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(a=n/2),t&&(n=n*2,a=a*2,e=e.map((o,l)=>l>=e.length-2?v.nearestLargerEven(e[l]):e[l]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let r=v.sizeFromShape(e),s=null;e.length<=1&&r<=n?s=[1,r]:e.length===2&&e[0]<=n&&e[1]<=n?s=e:e.length===3&&e[0]*e[1]<=n&&e[2]<=n?s=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=n&&e[1]*e[2]<=n?s=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n?s=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n&&(s=[e[0],e[1]*e[2]*e[3]]);let i=s!=null&&Math.max(...s)>a&&Math.min(...s)<=(t?2:1)&&Math.min(...s)>0;if(s==null||i)if(t){let o=hi(e),l=2,u=2;e.length&&([l,u]=mi(e)),r=o*(l/2)*(u/2),s=v.sizeToSquarishShape(r).map(p=>p*2)}else s=v.sizeToSquarishShape(r);return s}function th(e){return e%2===0}function Jp(e,t){if(e=e.slice(-2),t=t.slice(-2),v.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],a=t.slice(-1)[0];if(n===a||th(n)&&th(a)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&th(e[0])&&th(t[0])}var lh,uh;function l_(e){if(lh==null){let t=Ka(e);lh=t.getParameter(t.MAX_TEXTURE_SIZE)}return lh}function ZY(){lh=null}function JY(){uh=null}function u_(e){if(uh==null){let t=Ka(e);uh=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,uh)}function p_(e){if(e===0)return 0;let t,n=Ka(e);return ca(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:ca(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function ca(e,t){return e.getExtension(t)!=null}function ix(e){try{if(Ka(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function c_(e){if(e===0)return!1;let t=Ka(e);if(e===1){if(!ca(t,"OES_texture_float"))return!1}else if(!ca(t,"EXT_color_buffer_float"))return!1;return ox(t)}function d_(e){if(e===0)return!1;let t=Ka(e);if(e===1){if(!ca(t,"OES_texture_float")||!ca(t,"WEBGL_color_buffer_float"))return!1}else{if(ca(t,"EXT_color_buffer_float"))return ox(t);let n="EXT_color_buffer_half_float";if(ca(t,n)){let a=t.getExtension(n);return QY(t,a)}return!1}return ox(t)}function ox(e){let t=U0(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let a=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,a,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(s),i}function QY(e,t){let n=U0(e,t),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,r,s,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(i),o}function h_(e){return e!==2?!1:Ka(e).fenceSync!=null}function Pu(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&v.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var ve=H();ve.registerFlag("HAS_WEBGL",()=>ve.getNumber("WEBGL_VERSION")>0);ve.registerFlag("WEBGL_VERSION",()=>ix(2)?2:ix(1)?1:0);ve.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);ve.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>ve.get("WEBGL_VERSION")===2);ve.registerFlag("WEBGL_CPU_FORWARD",()=>!0);ve.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);ve.registerFlag("WEBGL_PACK",()=>ve.getBool("HAS_WEBGL"));ve.registerFlag("WEBGL_PACK_NORMALIZATION",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_CLIP",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_PACK_REDUCE",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_LAZILY_UNPACK",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_CONV_IM2COL",()=>ve.getBool("WEBGL_PACK"));ve.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>l_(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>u_(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=ve.getNumber("WEBGL_VERSION");return e===0?0:p_(e)});ve.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>ve.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Sc.isMobile());ve.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>c_(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>ve.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:ve.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));ve.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>d_(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_FENCE_API_ENABLED",()=>h_(ve.getNumber("WEBGL_VERSION")));ve.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>ve.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);ve.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});ve.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Sc.isMobile()?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});ve.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);ve.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);ve.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);ve.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);ve.registerFlag("WEBGL_EXP_CONV",()=>!1);ve.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>ve.getBool("IS_TEST"));ve.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);ve.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);ve.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);ve.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function Cn(){let e,t,n,a,r,s,i,o,l,u;return H().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",a="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=H().getBool("WEBGL2_ISNAN_CUSTOM")?`
|
|
bool isnan_custom(float val) {
|
|
uint floatToUint = floatBitsToUint(val);
|
|
return (floatToUint & 0x7fffffffu) > 0x7f800000u;
|
|
}
|
|
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan_custom(val.x),
|
|
isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));
|
|
}
|
|
|
|
#define isnan(value) isnan_custom(value)
|
|
`:"",l="",u=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(e="",t="attribute",n="varying",a="varying",r="texture2D",s="gl_FragColor",i="",o=`
|
|
#define isnan(value) isnan_custom(value)
|
|
bool isnan_custom(float val) {
|
|
return (val > 0. || val < 1. || val == 0.) ? false : true;
|
|
}
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
|
|
}
|
|
`,l=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,u=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:e,attribute:t,varyingVs:n,varyingFs:a,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function So(e,t,n="index"){let a=v.computeStrides(t);return a.map((r,s)=>{let i=`int ${e[s]} = ${n} / ${r}`,o=s===a.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function _f(e,t,n="index"){let a=v.computeStrides(t);return a.map((r,s)=>{let i=`int ${e[s]} = ${n} / outShapeStrides[${s}]`,o=s===a.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function eZ(e,t){let n=e.length,a=e.map(s=>`${t}[${s}]`),r=new Array(n-1);r[n-2]=a[n-1];for(let s=n-3;s>=0;--s)r[s]=`(${r[s+1]} * ${a[s+1]})`;return r}function tZ(e,t,n="index"){let a=e.map((s,i)=>i),r=eZ(a,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${n} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${n} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function H0(e){let t=v.computeStrides(e).map(n=>n.toString());return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
|
|
}
|
|
`}function q0(){return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;
|
|
}
|
|
`}var m_=`
|
|
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;
|
|
}
|
|
`,{getBroadcastDims:f_}=N;function nZ(e,t,n){let a=[];if(e.forEach(c=>{let h=v.sizeFromShape(c.shapeInfo.logicalShape);if(c.shapeInfo.isUniform?a.push(`uniform float ${c.name}${h>1?`[${h}]`:""};`):(a.push(`uniform sampler2D ${c.name};`),a.push(`uniform int offset${c.name};`)),n.enableShapeUniforms){let{uniformShape:m}=j0(n.packedInputs,c.shapeInfo.logicalShape,c.shapeInfo.texShape);switch(m.length){case 1:a.push(`uniform int ${c.name}Shape;`);break;case 2:a.push(`uniform ivec2 ${c.name}Shape;`);break;case 3:a.push(`uniform ivec3 ${c.name}Shape;`);break;case 4:a.push(`uniform ivec4 ${c.name}Shape;`);break;default:break}a.push(`uniform ivec2 ${c.name}TexShape;`)}}),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:a.push("uniform int outShape;");break;case 2:a.push("uniform ivec2 outShape;"),a.push("uniform int outShapeStrides;");break;case 3:a.push("uniform ivec3 outShape;"),a.push("uniform ivec2 outShapeStrides;");break;case 4:a.push("uniform ivec4 outShape;"),a.push("uniform ivec3 outShapeStrides;");break;default:break}a.push("uniform ivec2 outTexShape;")}n.customUniforms&&n.customUniforms.forEach(c=>{a.push(`uniform ${c.type} ${c.name}${c.arrayIndex?`[${c.arrayIndex}]`:""};`)});let r=a.join(`
|
|
`),s=e.map(c=>aZ(c,t,n.packedInputs,n.enableShapeUniforms)).join(`
|
|
`),i=t.texShape,o=Cn(),l=iZ(o),u,p,d=uZ(o);return t.isPacked?(u=rZ(t.logicalShape,i,n.enableShapeUniforms),p=lZ(o)):(u=sZ(t.logicalShape,i,n.enableShapeUniforms),p=oZ(o)),n.packedInputs&&(d+=hZ),[d,l,p,r,u,s,n.userCode].join(`
|
|
`)}function Ou(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return TZ(e,t);case 1:return CZ(e,t);case 2:return EZ(e,t);case 3:return $Z(e,t);case 4:return RZ(e,t);case 5:return DZ(e);case 6:return MZ(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function g_(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return SZ(e);case 1:return NZ(e,t);case 2:return _Z(e,t);case 3:return AZ(e,t);default:return FZ(e,t)}}function aZ(e,t,n=!1,a){let r="";n?r+=g_(e,a):r+=Ou(e,a);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(n?r+=PZ(e,t):r+=OZ(e,t)),r}function rZ(e,t,n){switch(e.length){case 0:return y_();case 1:return mZ(e,t,n);case 2:return kZ(e,t,n);case 3:return gZ(e,t,n);default:return bZ(e,t,n)}}function sZ(e,t,n){switch(e.length){case 0:return y_();case 1:return fZ(e,t,n);case 2:return IZ(e,t,n);case 3:return yZ(e,t,n);case 4:return xZ(e,t,n);case 5:return vZ(e,t);case 6:return wZ(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function iZ(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function oZ(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function lZ(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function uZ(e){return`${e.version}
|
|
precision highp float;
|
|
precision highp int;
|
|
precision highp sampler2D;
|
|
${e.varyingFs} vec2 resultUV;
|
|
${e.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;
|
|
${e.defineSpecialNaN}
|
|
${e.defineSpecialInf}
|
|
${e.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);
|
|
}
|
|
|
|
${pZ}
|
|
${cZ}
|
|
${dZ}
|
|
`}var pZ=`
|
|
vec2 uvFromFlat(int texNumR, int texNumC, int index) {
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
vec2 packedUVfrom1D(int texNumR, int texNumC, int index) {
|
|
int texelIndex = index / 2;
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,cZ=`
|
|
vec2 packedUVfrom2D(int texelsInLogicalRow, int texNumR,
|
|
int texNumC, int row, int col) {
|
|
int texelIndex = (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = texelIndex / texNumC;
|
|
int texC = texelIndex - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,dZ=`
|
|
vec2 packedUVfrom3D(int texNumR, int texNumC,
|
|
int texelsInBatch, int texelsInLogicalRow, int b,
|
|
int row, int col) {
|
|
int index = b * texelsInBatch + (row / 2) * texelsInLogicalRow + (col / 2);
|
|
int texR = index / texNumC;
|
|
int texC = index - texR * texNumC;
|
|
return (vec2(texC, texR) + halfCR) / vec2(texNumC, texNumR);
|
|
}
|
|
`,hZ=`
|
|
float getChannel(vec4 frag, vec2 innerDims) {
|
|
vec2 modCoord = mod(innerDims, 2.);
|
|
return modCoord.x == 0. ?
|
|
(modCoord.y == 0. ? frag.r : frag.g) :
|
|
(modCoord.y == 0. ? frag.b : frag.a);
|
|
}
|
|
float getChannel(vec4 frag, int dim) {
|
|
float modCoord = mod(float(dim), 2.);
|
|
return modCoord == 0. ? frag.r : frag.g;
|
|
}
|
|
`;function y_(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function mZ(e,t,n){let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return a[0]===1?n?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ${a[1]}.0);
|
|
}
|
|
`:a[1]===1?n?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ${a[0]}.0);
|
|
}
|
|
`:n?`
|
|
int getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
return 2 * (resTexRC.x * ${a[1]} + resTexRC.y);
|
|
}
|
|
`}function fZ(e,t,n){return t[0]===1?n?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * float(outTexShape[1]));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return int(resultUV.x * ${t[1]}.0);
|
|
}
|
|
`:t[1]===1?n?`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * float(outTexShape[0]));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return int(resultUV.y * ${t[0]}.0);
|
|
}
|
|
`:n?`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
return resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
return resTexRC.x * ${t[1]} + resTexRC.y;
|
|
}
|
|
`}function gZ(e,t,n){if(n)return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));
|
|
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
|
|
int b = index / texelsInBatch;
|
|
index -= b * texelsInBatch;
|
|
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`;let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),s=r*Math.ceil(e[1]/2);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
|
|
int b = index / ${s};
|
|
index -= b * ${s};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`}function yZ(e,t,n){if(n)return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
${_f(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`;let a=So(["r","c","d"],e);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${a}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}function bZ(e,t,n){if(n)return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
|
|
int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));
|
|
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));
|
|
int texelsInBatchN = texelsInBatch * outShape[1];
|
|
|
|
int b2 = index / texelsInBatchN;
|
|
index -= b2 * texelsInBatchN;
|
|
|
|
int b = index / texelsInBatch;
|
|
index -= b * texelsInBatch;
|
|
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec4(b2, b, r, c);
|
|
}
|
|
`;let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),s=r*Math.ceil(e[e.length-2]/2),i=s,o="",l="b, r, c";for(let u=2;u<e.length-1;u++)i*=e[e.length-u-1],o=`
|
|
int b${u} = index / ${i};
|
|
index -= b${u} * ${i};
|
|
`+o,l=`b${u}, `+l;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
|
|
${o}
|
|
|
|
int b = index / ${s};
|
|
index -= b * ${s};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec${e.length}(${l});
|
|
}
|
|
`}function xZ(e,t,n){if(n)return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
${_f(["r","c","d","d2"],e)}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`;let a=So(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${a}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function vZ(e,t){let n=So(["r","c","d","d2","d3"],e);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
|
|
${t[1]}));
|
|
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}function wZ(e,t){let n=So(["r","c","d","d2","d3","d4"],e);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}function kZ(e,t,n){let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(v.arraysEqual(e,t))return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${a[0]}, ${a[1]}));
|
|
}
|
|
`;let r=Math.ceil(e[1]/2);return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function IZ(e,t,n){return v.arraysEqual(e,t)?n?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
|
|
}
|
|
`:e[1]===1?n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:e[0]===1?n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
int r = index / outShape[1];
|
|
int c = index - r * outShape[1];
|
|
return ivec2(r, c);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
int r = index / ${e[1]};
|
|
int c = index - r * ${e[1]};
|
|
return ivec2(r, c);
|
|
}
|
|
`}function To(e){return`offset${e}`}function SZ(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),a=Cn();return`
|
|
vec4 ${n}() {
|
|
return ${a.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function TZ(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`float ${a}() {return ${n};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return`
|
|
float ${a}() {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let i=To(n);if(t)return`
|
|
float ${a}() {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let[o,l]=e.shapeInfo.texShape;return`
|
|
float ${a}() {
|
|
vec2 uv = uvFromFlat(${o}, ${l}, ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function NZ(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=e.shapeInfo.texShape,s=Cn();if(t)return`
|
|
vec4 ${a}(int index) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom1D(
|
|
packedTexShape[0], packedTexShape[1], index);
|
|
return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`;let i=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)];return`
|
|
vec4 ${a}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${i[0]}, ${i[1]}, index);
|
|
return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`}function CZ(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int index) {
|
|
${Lu(e)}
|
|
}
|
|
`;let r=e.shapeInfo.texShape,s=r[0],i=r[1];if(i===1&&s===1)return`
|
|
float ${a}(int index) {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let o=To(n);return i===1?t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${n}TexShape[0]));
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / ${s}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:s===1?t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2((float(index + ${o}) + 0.5) / float(${n}TexShape[1]), 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2((float(index + ${o}) + 0.5) / ${i}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index + ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = uvFromFlat(${s}, ${i}, index + ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function _Z(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=Cn();if(s!=null&&v.arraysEqual(n,s))return t?`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`:`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}.0, ${i}.0);
|
|
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`;if(t)return`
|
|
vec4 ${r}(int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${a}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],p=Math.ceil(n[1]/2);return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${p}, ${u[0]}, ${u[1]}, row, col);
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`}function EZ(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape;if(s!=null&&v.arraysEqual(n,s)){if(t)return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let c=s[0],h=s[1];return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}let{newShape:i,keptDims:o}=v.squeezeShape(n),l=i;if(l.length<n.length){let c=zu(e,l),h=["row","col"];return`
|
|
${Ou(c,t)}
|
|
float ${r}(int row, int col) {
|
|
return ${r}(${Wu(h,o)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${n[1]}, 1)));
|
|
${Lu(e)}
|
|
}
|
|
`;let u=s[0],p=s[1],d=To(a);return p===1?t?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${a}Shape[1], 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / float(${a}TexShape[0]));
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:u===1?t?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${a}Shape[1], 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / float(${a}TexShape[1]), 0.5);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${p}.0, 0.5);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:t?`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a}Shape[1] + col + ${d};
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${n[1]} + col + ${d};
|
|
vec2 uv = uvFromFlat(${u}, ${p}, index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function AZ(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(n[0]===1){let c=n.slice(1),h=[1,2],m=zu(e,c),f=["b","row","col"];return`
|
|
${g_(m,t)}
|
|
vec4 ${r}(int b, int row, int col) {
|
|
return ${r}(${Wu(f,h)});
|
|
}
|
|
`}let o=Cn();if(t)return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${a}Shape[2]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${a}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom3D(
|
|
packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);
|
|
return ${o.texture2D}(${a}, uv);
|
|
}
|
|
`;let l=i[0],u=i[1],p=Math.ceil(n[2]/2),d=p*Math.ceil(n[1]/2);return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${l}, ${u}, ${d}, ${p}, b, row, col);
|
|
return ${o.texture2D}(${a}, uv);
|
|
}
|
|
`}function $Z(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=n[1]*n[2],i=n[2],{newShape:o,keptDims:l}=v.squeezeShape(n),u=o;if(u.length<n.length){let f=zu(e,u),g=["row","col","depth"];return`
|
|
${Ou(f,t)}
|
|
float ${r}(int row, int col, int depth) {
|
|
return ${r}(${Wu(g,l)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${s}, ${i}, 1)));
|
|
${Lu(e)}
|
|
}
|
|
`;let p=e.shapeInfo.texShape,d=p[0],c=p[1],h=e.shapeInfo.flatOffset;if(c===s&&h==null)return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
int stride1 = ${a}Shape[2];
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(stride1, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${i}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${c}.0, ${d}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;if(c===i&&h==null)return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${a}Shape[1], 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${n[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${c}.0, ${d}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let m=To(a);return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int stride0 = ${a}Shape[1] * ${a}Shape[2];
|
|
int stride1 = ${a}Shape[2];
|
|
int index = row * stride0 + col * stride1 + depth + ${m};
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${s} + col * ${i} + depth + ${m};
|
|
vec2 uv = uvFromFlat(${d}, ${c}, index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function FZ(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=Cn();if(t)return`
|
|
vec4 ${a}(int b2, int b, int row, int col) {
|
|
int valuesPerRow = int(ceil(float(${n}Shape[3]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${n}Shape[2]) / 2.0));
|
|
int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);
|
|
texelsInBatch *= ${n}Shape[1];
|
|
index = b2 * texelsInBatch + index;
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
int texR = index / packedTexShape[1];
|
|
int texC = index - texR * packedTexShape[1];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${r.texture2D}(${n}, uv);
|
|
}
|
|
`;let s=e.shapeInfo.logicalShape,i=s.length,o=e.shapeInfo.texShape,l=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)],u=l[0],p=l[1],d=Math.ceil(s[i-1]/2),c=d*Math.ceil(s[i-2]/2),h="int b, int row, int col",m=`b * ${c} + (row / 2) * ${d} + (col / 2)`;for(let f=2;f<i-1;f++)h=`int b${f}, `+h,c*=s[i-f-1],m=`b${f} * ${c} + `+m;return`
|
|
vec4 ${a}(${h}) {
|
|
int index = ${m};
|
|
int texR = index / ${p};
|
|
int texC = index - texR * ${p};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${p}, ${u});
|
|
return ${r.texture2D}(${n}, uv);
|
|
}
|
|
`}function RZ(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=n[3],i=n[2]*s,o=n[1]*i,{newShape:l,keptDims:u}=v.squeezeShape(n);if(l.length<n.length){let b=zu(e,l),x=["row","col","depth","depth2"];return`
|
|
${Ou(b,t)}
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
return ${r}(${Wu(x,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, 1)));
|
|
${Lu(e)}
|
|
}
|
|
`;let p=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,c=d[0],h=d[1],m=`int stride2 = ${a}Shape[3];`,f=`int stride1 = ${a}Shape[2] * stride2;`,g=`int stride0 = ${a}Shape[1] * stride1;`;if(h===o&&p==null)return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
${m}
|
|
${f}
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(stride1, stride2, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${i}, ${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;if(h===s&&p==null)return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${a}Shape[1] * ${a}Shape[2], ${a}Shape[2], 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${n[1]*n[2]}, ${n[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let y=To(a);return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
${m}
|
|
${f}
|
|
${g}
|
|
int index = row * stride0 + col * stride1 +
|
|
depth * stride2 + depth2;
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index + ${y});
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} +
|
|
depth * ${s} + depth2;
|
|
vec2 uv = uvFromFlat(${c}, ${h}, index + ${y});
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function DZ(e){let t=e.shapeInfo.logicalShape,n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=t[4],s=t[3]*r,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:u}=v.squeezeShape(t);if(l.length<t.length){let f=zu(e,l),g=["row","col","depth","depth2","depth3"];return`
|
|
${Ou(f)}
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${a}(${Wu(g,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, ${r})) +
|
|
depth3;
|
|
${Lu(e)}
|
|
}
|
|
`;let p=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,c=d[0],h=d[1];if(h===o&&p==null)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${i}, ${s}, ${r}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===r&&p==null)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=To(n);return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} + depth * ${s} +
|
|
depth2 * ${r} + depth3 + ${m};
|
|
vec2 uv = uvFromFlat(${c}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function MZ(e){let t=e.shapeInfo.logicalShape,n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:r,keptDims:s}=v.squeezeShape(t);if(r.length<t.length){let g=zu(e,r),y=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${Ou(g)}
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${a}(${Wu(y,s)});
|
|
}
|
|
`}let i=t[5],o=t[4]*i,l=t[3]*o,u=t[2]*l,p=t[1]*u;if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${p}, ${u}, ${l}, ${o})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${i}, 1)));
|
|
${Lu(e)}
|
|
}
|
|
`;let d=e.shapeInfo.flatOffset,c=e.shapeInfo.texShape,h=c[0],m=c[1];if(m===p&&d==null)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${u}, ${l}, ${o}, ${i})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${m}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(m===i&&d==null)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${m}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=To(n);return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${p} + col * ${u} + depth * ${l} +
|
|
depth2 * ${o} + depth3 * ${i} + depth4 + ${f};
|
|
vec2 uv = uvFromFlat(${h}, ${m}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Lu(e){let t=e.name,n=v.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function PZ(e,t){let n=e.name,a=n.charAt(0).toUpperCase()+n.slice(1),r="get"+a+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=f_(e.shapeInfo.logicalShape,t.logicalShape),l=gt(i),u=i-s,p,d=["x","y","z","w","u","v"];s===0?p="":i<2&&o.length>=1?p="coords = 0;":p=o.map(g=>`coords.${d[g+u]} = 0;`).join(`
|
|
`);let c="";i<2&&s>0?c="coords":c=e.shapeInfo.logicalShape.map((g,y)=>`coords.${d[y+u]}`).join(", ");let h="return outputValue;",m=v.sizeFromShape(e.shapeInfo.logicalShape)===1,f=v.sizeFromShape(t.logicalShape)===1;if(s===1&&!m&&!f)h=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(m&&!f)i===1?h=`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:h=`
|
|
return vec4(outputValue.x);
|
|
`;else if(o.length){let g=s-2,y=s-1;o.indexOf(g)>-1&&o.indexOf(y)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return`
|
|
vec4 ${r}() {
|
|
${l} coords = getOutputCoords();
|
|
${p}
|
|
vec4 outputValue = get${a}(${c});
|
|
${h}
|
|
}
|
|
`}function OZ(e,t){let n=e.name,a=n.charAt(0).toUpperCase()+n.slice(1),r="get"+a+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&v.arraysEqual(i,s))return`
|
|
float ${r}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let u=gt(l),p=f_(e.shapeInfo.logicalShape,t.logicalShape),d=l-o,c,h=["x","y","z","w","u","v"];o===0?c="":l<2&&p.length>=1?c="coords = 0;":c=p.map(f=>`coords.${h[f+d]} = 0;`).join(`
|
|
`);let m="";return l<2&&o>0?m="coords":m=e.shapeInfo.logicalShape.map((f,g)=>`coords.${h[g+d]}`).join(", "),`
|
|
float ${r}() {
|
|
${u} coords = getOutputCoords();
|
|
${c}
|
|
return get${a}(${m});
|
|
}
|
|
`}function gt(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function j0(e,t,n){let{newShape:a,keptDims:r}=v.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):a,l=!e&&s>1&&!v.arraysEqual(t,n)&&a.length<s||i;return{useSqueezeShape:l,uniformShape:l?o:t,keptDims:r}}function zu(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function Wu(e,t){return t.map(n=>e[n]).join(", ")}function LZ(e,t,n,a){let r=n.map((p,d)=>{let c={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(c.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[d],shapeInfo:c}}),s=r.map(p=>p.shapeInfo),i={logicalShape:a.shape,texShape:a.texData.texShape,isUniform:!1,isPacked:a.texData.isPacked,flatOffset:null},o=nZ(r,i,t),l=jC(e.gl,o),u=e.createProgram(l);return H().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},b_(e,t,u))}function b_(e,t,n){let a={},r={},s={},i=[],o,l,u,p=null,d=null;d=e.getUniformLocation(n,"NAN",!1),H().getNumber("WEBGL_VERSION")===1&&(p=e.getUniformLocation(n,"INFINITY",!1));let c=!1;for(let h=0;h<t.variableNames.length;h++){let m=t.variableNames[h];a[m]=e.getUniformLocation(n,m,c),a[`offset${m}`]=e.getUniformLocation(n,`offset${m}`,c),t.enableShapeUniforms&&(r[`${m}Shape`]=e.getUniformLocation(n,`${m}Shape`,c),s[`${m}TexShape`]=e.getUniformLocation(n,`${m}TexShape`,c))}return t.enableShapeUniforms&&(o=e.getUniformLocation(n,"outShape",c),u=e.getUniformLocation(n,"outShapeStrides",c),l=e.getUniformLocation(n,"outTexShape",c)),t.customUniforms&&t.customUniforms.forEach((h,m)=>{i[m]=e.getUniformLocation(n,h.name,c)}),{uniformLocations:a,customUniformLocations:i,infLoc:p,nanLoc:d,inShapesLocations:r,inTexShapesLocations:s,outShapeLocation:o,outShapeStridesLocation:u,outTexShapeLocation:l}}function Vk(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,a)=>{let r=n.logicalShape,s=t[a],i=s.shape;if(!v.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(n.isUniform&&s.isUniform)return;let o=n.texShape,l=s.isUniform?null:s.texData.texShape;if(!v.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function zZ(e,t,n,a,r){t.program.enableShapeUniforms||(Vk(t.inShapeInfos,n),Vk([t.outShapeInfo],[a]));let s=a.texData.texture,i=a.texData.texShape;a.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),H().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((l,u)=>{let p=t.program.variableNames[u],d=t.uniformLocations[p],c=t.uniformLocations[`offset${p}`],h=t.inShapesLocations[`${p}Shape`],m=t.inTexShapesLocations[`${p}TexShape`];if(h){let{uniformShape:f}=j0(t.program.packedInputs,l.shape,l.texData.texShape);switch(f.length){case 1:e.gl.uniform1iv(h,new Int32Array(f));break;case 2:e.gl.uniform2iv(h,new Int32Array(f));break;case 3:e.gl.uniform3iv(h,new Int32Array(f));break;case 4:e.gl.uniform4iv(h,new Int32Array(f));break;default:break}}if(m&&e.gl.uniform2i(m,l.texData.texShape[0],l.texData.texShape[1]),d!=null){if(l.isUniform){if(v.sizeFromShape(l.shape)<2)e.gl.uniform1f(d,l.uniformValues[0]);else{let f=l.uniformValues;f instanceof Float32Array||(f=new Float32Array(f)),e.gl.uniform1fv(d,f)}return}l.texData.slice!=null&&c!=null&&e.gl.uniform1i(c,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture.texture,d,u)}});let o=t.outShapeLocation;if(o)switch(a.shape.length){case 1:e.gl.uniform1iv(o,new Int32Array(a.shape));break;case 2:e.gl.uniform2iv(o,new Int32Array(a.shape));break;case 3:e.gl.uniform3iv(o,new Int32Array(a.shape));break;case 4:e.gl.uniform4iv(o,new Int32Array(a.shape));break;default:break}if(t.outShapeStridesLocation){let l=v.computeStrides(a.shape);switch(a.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,a.texData.texShape[0],a.texData.texShape[1]),t.program.customUniforms&&r&&t.program.customUniforms.forEach((l,u)=>{let p=t.customUniformLocations[u],d=r[u];if(l.type==="float")e.gl.uniform1fv(p,d);else if(l.type==="vec2")e.gl.uniform2fv(p,d);else if(l.type==="vec3")e.gl.uniform3fv(p,d);else if(l.type==="vec4")e.gl.uniform4fv(p,d);else if(l.type==="int")e.gl.uniform1iv(p,d);else if(l.type==="ivec2")e.gl.uniform2iv(p,d);else if(l.type==="ivec3")e.gl.uniform3iv(p,d);else if(l.type==="ivec4")e.gl.uniform4iv(p,d);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function WZ(e,t,n){let a="";t.concat(n).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:p,keptDims:d}=j0(e.packedInputs,i.shape,l),c="",h="",m="";if(p.length===1&&e.packedInputs){let I=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];c=`${I[0]>1}_${I[1]>1}`}else if(p.length===2&&!e.packedInputs)h=`${p[0]>1}_${p[1]>1}`;else if(p.length>2&&!e.packedInputs){let I=v.computeStrides(p);m=`${I[0]===l[1]}_${I[I.length-1]===l[1]}`}let f=i.shape.length,g=p.length===2&&v.arraysEqual(i.shape,l),y=v.sizeFromShape(i.shape)===1,b=N.getBroadcastDims(i.shape,n.shape),x=!e.packedInputs&&f===n.shape.length&&v.arraysEqual(l,n.texData.texShape),w=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;a+=`${f}_${x}_${u?d:""}_${p.length}_${y}_${b}_${g}_${c}_${h}_${m}_${w}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;a+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+a+"_"+r+`${H().getNumber("WEBGL_VERSION")}`,s}function _n(e){return H().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var BZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Zp.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Cn();this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?_f(["r","c","d"],e):So(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));
|
|
int index = 4 * (resTexRC.x * texShape[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);
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},VZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Zp.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=Cn();this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?_f(["r","c","d"],e):So(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(texShape[0], texShape[1]));
|
|
int index = 4 * (resTexRC.x * texShape[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));
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},UZ=class{constructor(e){this.variableNames=["A"],this.outTexUsage=pa.DOWNLOAD;let t=Cn();this.outputShape=e,this.userCode=`
|
|
${m_}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},GZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=pa.DOWNLOAD;let t=Cn();this.outputShape=e,this.userCode=`
|
|
${m_}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},HZ={R:0,G:1,B:2,A:3},Uk=class{constructor(e,t=!1,n="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let a=Cn();this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length);let r="result";t&&(r="floor(result * 255. + 0.5)");let s="";for(let i=0;i<n.length;i++){let o=n[i];s+=`
|
|
if(offset == ${i}) {
|
|
result = values[${HZ[o]}];
|
|
}`}this.userCode=`
|
|
${this.enableShapeUniforms?q0():H0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int flatIndex = getFlatIndex(coords);
|
|
float result = 0.;
|
|
int offset = imod(flatIndex, ${n.length});
|
|
|
|
flatIndex = idiv(flatIndex, ${n.length}, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
if (r < texShape[0]) {
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
vec4 values = ${a.texture2D}(A, uv);
|
|
${s}
|
|
}
|
|
${a.output} = vec4(${r}, 0., 0., 0.);
|
|
}
|
|
`}},qZ=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=Cn();this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length);let a="",r="result";t&&(r="floor(result * 255. + 0.5)");for(let s=0;s<=1;s++)for(let i=0;i<=1;i++){let o=s*2+i;a+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${i} < ${this.enableShapeUniforms?"outShape[2]":`${e[2]}`}) {
|
|
localCoords[2] += ${i};
|
|
if (localCoords[1] + ${s} < ${this.enableShapeUniforms?"outShape[1]":`${e[1]}`}) {
|
|
localCoords[1] += ${s};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
values = ${n.texture2D}(A, uv);
|
|
|
|
if (offset == 0) {
|
|
result[${o}] = values[0];
|
|
} else if (offset == 1) {
|
|
result[${o}] = values[1];
|
|
} else if (offset == 2) {
|
|
result[${o}] = values[2];
|
|
} else {
|
|
result[${o}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${this.enableShapeUniforms?q0():H0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${a}
|
|
|
|
${n.output} = ${r};
|
|
}
|
|
`}},x_={};Ae(x_,{bindVertexProgramAttributeStreams:()=>__,createBufferFromOutputTexture:()=>$_,createFloat16MatrixTexture:()=>S_,createFloat16PackedMatrixTexture:()=>C_,createFloat32MatrixTexture:()=>I_,createIndexBuffer:()=>k_,createPackedMatrixTexture:()=>N_,createUnsignedBytesMatrixTexture:()=>T_,createVertexBuffer:()=>w_,createVertexShader:()=>v_,downloadByteEncodedFloatMatrixFromOutputTexture:()=>R_,downloadFloat32MatrixFromBuffer:()=>F_,downloadMatrixFromPackedOutputTexture:()=>M_,downloadPackedMatrixFromBuffer:()=>D_,getInternalFormatForFloat16MatrixTexture:()=>X0,getInternalFormatForFloat16PackedMatrixTexture:()=>J0,getInternalFormatForFloat32MatrixTexture:()=>K0,getInternalFormatForPackedMatrixTexture:()=>Z0,getInternalFormatForUnsignedBytesMatrixTexture:()=>Y0,uploadDenseMatrixToTexture:()=>E_,uploadPixelDataToTexture:()=>A_});function v_(e){let t=Cn(),n=`${t.version}
|
|
precision highp float;
|
|
${t.attribute} vec3 clipSpacePos;
|
|
${t.attribute} vec2 uv;
|
|
${t.varyingVs} vec2 resultUV;
|
|
|
|
void main() {
|
|
gl_Position = vec4(clipSpacePos, 1);
|
|
resultUV = uv;
|
|
}`;return qC(e,n)}function w_(e){let t=new Float32Array([-1,1,0,0,1,-1,-1,0,0,0,1,1,0,1,1,1,-1,0,1,0]);return YC(e,t)}function k_(e){let t=new Uint16Array([0,1,2,2,1,3]);return ZC(e,t)}function Qc(e,t,n,a,r,s){QC(t,n);let i=JC(e),o=e.TEXTURE_2D;return ce(e,()=>e.bindTexture(o,i)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ce(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),H().getNumber("WEBGL_VERSION")===1?ce(e,()=>e.texImage2D(o,0,a,t,n,0,r,s,null)):ce(e,()=>e.texStorage2D(o,1,a,t,n)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[n,t]}}function K0(e){return e.internalFormatFloat}function I_(e,t,n,a){let[r,s]=Jc(t,n);return Qc(e,r,s,K0(a),a.textureFormatFloat,e.FLOAT)}function X0(e){return e.internalFormatHalfFloat}function S_(e,t,n,a){let[r,s]=Jc(t,n);return Qc(e,r,s,X0(a),a.textureFormatFloat,a.textureTypeHalfFloat)}function Y0(e){return e.downloadTextureFormat}function T_(e,t,n,a){let[r,s]=Jc(t,n);return Qc(e,r,s,Y0(a),e.RGBA,e.UNSIGNED_BYTE)}function Z0(e){return e.internalFormatPackedFloat}function N_(e,t,n,a){let[r,s]=Mu(t,n);return Qc(e,r,s,Z0(a),e.RGBA,e.FLOAT)}function J0(e){return e.internalFormatPackedHalfFloat}function C_(e,t,n,a){let[r,s]=Mu(t,n);return Qc(e,r,s,J0(a),e.RGBA,a.textureTypeHalfFloat)}function __(e,t,n){return ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),rx(e,t,"clipSpacePos",n,3,20,0)&&rx(e,t,"uv",n,2,20,12)}function E_(e,t,n,a,r,s){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(n*a*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*a*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),H().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,a,e.RGBA,o,i)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,a,0,e.RGBA,o,i)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function A_(e,t,n){ce(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?H().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):H().getNumber("WEBGL_VERSION")===2?ce(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n)):ce(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ce(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function $_(e,t,n,a){let r=e.createBuffer();ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*n;return ce(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ce(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ce(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function F_(e,t,n){let a=e,r=new Float32Array(n);return a.bindBuffer(a.PIXEL_PACK_BUFFER,t),a.getBufferSubData(a.PIXEL_PACK_BUFFER,0,r),a.bindBuffer(a.PIXEL_PACK_BUFFER,null),r}function R_(e,t,n,a){let[r,s]=Jc(t,n),i=4,o=new Uint8Array(VY(t*n,i));return ce(e,()=>e.readPixels(0,0,r,s,a.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function D_(e,t,n,a,r,s,i,o){let l=e,u=new Float32Array(UY(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function M_(e,t,n){let a=new Float32Array(t*n*4);return ce(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,a)),a}var ph=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=H().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,UC(t,e)):this.gl=Ka(t),e=this.gl,H().getNumber("WEBGL_VERSION")===2){let r=e;this.createVertexArray=()=>ce(r,()=>r.createVertexArray()),this.bindVertexArray=s=>ce(r,()=>r.bindVertexArray(s)),this.deleteVertexArray=s=>ce(r,()=>r.deleteVertexArray(s)),this.getVertexArray=()=>ce(r,()=>r.getParameter(r.VERTEX_ARRAY_BINDING))}else if(e!=null){let r=e.getExtension("OES_vertex_array_object");if(r==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>ce(e,()=>r.createVertexArrayOES()),this.bindVertexArray=s=>ce(e,()=>r.bindVertexArrayOES(s)),this.deleteVertexArray=s=>ce(e,()=>r.deleteVertexArrayOES(s)),this.getVertexArray=()=>ce(e,()=>e.getParameter(r.VERTEX_ARRAY_BINDING_OES))}let n="WEBGL_color_buffer_float",a="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),H().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Ap(this.gl,r),ca(this.gl,s))this.textureHalfFloatExtension=Ap(this.gl,s);else if(H().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),ca(this.gl,a))this.colorBufferHalfFloatExtension=Ap(this.gl,a);else if(H().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",ca(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(ca(this.gl,a))this.colorBufferHalfFloatExtension=this.gl.getExtension(a);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=w_(this.gl),this.indexBuffer=k_(this.gl),this.framebuffer=e_(this.gl),this.textureConfig=U0(this.gl,this.textureHalfFloatExtension)}get debug(){return H().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ce(e,()=>e.finish()),ce(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ce(e,()=>e.deleteFramebuffer(this.framebuffer)),ce(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ce(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ce(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),I_(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),S_(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),T_(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),A_(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,a){this.throwIfDisposed(),E_(this.gl,e,t,n,a,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),C_(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),N_(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(sx(this.gl,this.framebuffer),this.outputTexture=null),ce(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>R_(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,a,r,s){return D_(this.gl,e,t,n,a,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return F_(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let a=$_(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),a}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(H().getBool("WEBGL_FENCE_API_ENABLED")){let a=e,r=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let s=a.clientWaitSync(r,0,0);return s===a.ALREADY_SIGNALED||s===a.CONDITION_SATISFIED},t=r}else H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>M_(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=v_(t));let n=KC(t);ce(t,()=>t.attachShader(n,this.vertexShader)),ce(t,()=>t.attachShader(n,e)),XC(t,n);let a;return a=Object.assign(n,{vao:this.createVertexArray()}),this.bindVertexArray(a.vao),ce(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),console.assert(__(t,a,this.vertexBuffer),"gpgpu_util.bindVertexProgramAttributeStreams not fully successful."),this.debug&&ih(t,a),this.setProgram(a),a}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(ce(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&(this.bindVertexArray(this.program.vao),this.debug&&ih(this.gl,this.program)),ce(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?n_(this.gl,e,t):a_(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ce(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),r_(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[a,r]=Mu(t,n);this.setOutputMatrixTextureDriver(e,a,r)}setOutputMatrixWriteRegion(e,t,n,a){this.setOutputMatrixWriteRegionDriver(n,e,a,t)}setOutputPackedMatrixWriteRegion(e,t,n,a){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&ih(this.gl,this.program),$p(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}ce(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ce(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Ap(this.gl,H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,a=this.getQueryTimerExtensionWebGL2(),r=n.createQuery();return n.beginQuery(a.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await v.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,a=this.getQueryTimerExtensionWebGL2(),r=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),a=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),a&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=jZ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let n;"setTimeoutCustom"in H().platform&&(n=H().platform.setTimeoutCustom.bind(H().platform)),v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,n)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),oh(this.gl,e,this.framebuffer),this.debug&&$p(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(oh(this.gl,this.outputTexture,this.framebuffer),this.debug&&$p(this.gl)):sx(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let a=this.gl;oh(a,e,this.framebuffer),this.debug&&$p(a),this.outputTexture=e,ce(a,()=>a.viewport(0,0,t,n)),ce(a,()=>a.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,a){this.throwIfDisposed(),ce(this.gl,()=>this.gl.scissor(e,t,n,a))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function jZ(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{addImpl:KZ,bincountImpl:P_,bincountReduceImpl:XZ,castImpl:YZ,ceilImpl:ZZ,concatImpl:JZ,equalImpl:QZ,expImpl:e7,expm1Impl:t7,floorImpl:n7,gatherNdImpl:a7,gatherV2Impl:r7,greaterImpl:s7,greaterEqualImpl:i7,lessImpl:o7,lessEqualImpl:l7,linSpaceImpl:u7,logImpl:p7,maxImpl:c7,maximumImpl:d7,minimumImpl:h7,multiplyImpl:m7,negImpl:f7,notEqualImpl:g7,prodImpl:y7,raggedGatherImpl:b7,raggedRangeImpl:x7,raggedTensorToTensorImpl:v7,rangeImpl:w7,rsqrtImpl:k7,scatterImpl:I7,sigmoidImpl:S7,simpleAbsImpl:O_,sliceImpl:T7,sparseFillEmptyRowsImpl:N7,sparseReshapeImpl:C7,sparseSegmentReductionImpl:L_,sqrtImpl:_7,stridedSliceImpl:E7,stringNGramsImpl:A7,stringSplitImpl:$7,stringToHashBucketFastImpl:F7,subImpl:R7,tileImpl:D7,topKImpl:M7,transposeImpl:Q0,uniqueImpl:P7}=W2;function z_(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function kn(e,t){return t===1?[e]:z_(e,t)}function O7(e,t){if(e===1)return"rc";let n="";for(let a=0;a<e;a++)n+=t[a],a<e-1&&(n+=",");return n}var L7=class{constructor(e){if(this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.enableShapeUniforms=_n(this.outputShape.length),this.rank===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let t=kn("rc",this.rank),n=gt(this.rank),a=this.getOutOfBoundsCondition(t),r=this.getSetup(t),s=this.getOutput(t);this.userCode=`
|
|
void main() {
|
|
${n} rc = getOutputCoords();
|
|
|
|
if(${a}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${r}
|
|
|
|
setOutput(vec4(${s}));
|
|
}
|
|
}
|
|
`}}getSourceCoordsArr(e){let t=[];for(let n=0;n<=1;n++)for(let a=0;a<=1;a++){let r=`${n===0?"r":"rp1"}, ${a===0?"c":"cp1"}`;for(let s=2;s<this.rank;s++)r=`${e[e.length-1-s]},`+r;t.push(r)}return t}getOutOfBoundsCondition(e){if(this.rank===1)return`rc > ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let t="";for(let n=this.rank-2;n<this.rank;n++)t+=`${e[n]} >= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n<this.rank-1&&(t+="||");return t}getSetup(e){if(this.rank===1)return"";let t=e.slice(-2),n=this.enableShapeUniforms?`outShape[${this.rank} - 1]`:this.outputShape[this.rank-1],a=this.enableShapeUniforms?`outShape[${this.rank} - 2]`:this.outputShape[this.rank-2];return`
|
|
int r = ${t[0]};
|
|
int c = ${t[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${n};
|
|
bool rEdge = rp1 >= ${a};
|
|
`}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),
|
|
cEdge ? 0. : getA(${t[1]}),
|
|
rEdge ? 0. : getA(${t[2]}),
|
|
rEdge || cEdge ? 0. : getA(${t[3]})`}},W_=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length);let n="";for(let a=0;a<4;a++){let r="thisRC = rc;";a%2===1&&(r+="thisRC.z += 1;"),a>1&&(r+="thisRC.y += 1;"),n+=`
|
|
${r}
|
|
${a>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[${a}] =
|
|
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
|
|
${a>0?"}":""}
|
|
`}this.userCode=`
|
|
${z7(t,this.enableShapeUniforms)}
|
|
${this.enableShapeUniforms?q0():H0(e)}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
ivec3 thisRC;
|
|
int rows = ${this.enableShapeUniforms?"outShape[1]":e[1]};
|
|
int cols = ${this.enableShapeUniforms?"outShape[2]":e[2]};
|
|
|
|
${n}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function z7(e,t){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${t?tZ(["r","c","d"],"inputShape"):So(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var W7=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let a=Hk(t,n),r=qk(e,a,n);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=Gk(e,a,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}let i;return a===un.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):a===un.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):a===un.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):a===un.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):a===un.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,a){if(this.freeTextures==null)return;let r=Hk(n,a),s=qk(t,r,a);s in this.freeTextures||(this.freeTextures[s]=[]);let i=Gk(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,a),o=H().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function B7(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;if(t===n.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function Gk(e,t,n,a,r){let s=V7(t,a),i;if(r){let[l,u]=Mu(e[0],e[1]);i=l*u}else{let[l,u]=Jc(e[0],e[1]);i=l*u}let o=B7(n,s);return i*o}function V7(e,t){switch(e){case un.PACKED_2X2_FLOAT32:return Z0(t);case un.PACKED_2X2_FLOAT16:return J0(t);case un.UNPACKED_FLOAT32:return K0(t);case un.UNPACKED_FLOAT16:return X0(t);case un.PACKED_4X1_UNSIGNED_BYTE:return Y0(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function U7(e){return H().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?un.PACKED_2X2_FLOAT32:un.UNPACKED_FLOAT32:e?un.PACKED_2X2_FLOAT16:un.UNPACKED_FLOAT16}function Hk(e,t){if(e===pa.UPLOAD)return un.PACKED_2X2_FLOAT32;if(e===pa.RENDER||e==null)return U7(t);if(e===pa.DOWNLOAD||e===pa.PIXELS)return un.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function qk(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var rr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length),this.userCode=`
|
|
float unaryOperation(float x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},Ma="if (isnan(x)) return x;",G7="return x;",jk="return abs(x);",H7="return (x >= 0.0) ? x : (exp(x) - 1.0);",q7=Ma+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,j7=Ma+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,Kr="return x;",K7="return 1.0 / (1.0 + exp(-1.0 * x));",X7="return x;",Y7=`
|
|
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;
|
|
`,Z7=`
|
|
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;
|
|
`,J7=`
|
|
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;
|
|
`,Q7="return 1.0 / (1.0 + exp(-1.0 * x));",Qr=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length),this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},eJ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length);let t=e.length,n=kn("rc",t),a=gt(t),r=O7(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`
|
|
void main() {
|
|
${a} rc = getOutputCoords();
|
|
vec4 packedInput = getA(${r});
|
|
|
|
setOutput(getChannel(packedInput, ${i}));
|
|
}
|
|
`}},tJ=hr.whereImpl,nJ=1e-7,aJ=1e-4,gb={};function rJ(e){return e in gb||(gb[e]={}),gb[e]}var sJ=H().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),iJ=600;function oJ(){return H().global.screen==null?1024:H().global.screen.height*H().global.screen.width*window.devicePixelRatio*iJ/1024/1024}var Ef=class extends ac{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!H().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof ph)t=e;else{let n=Ka(H().getNumber("WEBGL_VERSION"),e);t=new ph(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Ka(H().getNumber("WEBGL_VERSION"));t=new ph(n),this.binaryCache=rJ(H().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new W7(this.gpgpu),this.numMBBeforeWarning=oJ(),this.texData=new Hh(this,Ca())}nextDataId(){return Ef.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,n,a,r,s){let i=this.makeTensorInfo(t,n),o=this.texData.get(i.dataId);o.isPacked=!1,o.texture={texture:e,texShape:[a,r]},o.texShape=[a,r];let l=Fp(t),u=new Uk(l,!1,s),p=this.runWebGLProgram(u,[i],n,[[a,r]]);return p.shape=t,o.texture=null,this.disposeIntermediateTensorInfo(i),p.dataId}write(e,t,n){if((H().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||H().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let a={id:this.nextDataId()};return this.texData.set(a,{shape:t,dtype:n,values:e,usage:pa.UPLOAD,refCount:1}),a}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,a,r){if(H().getBool("DEBUG")&&this.checkNumericalProblems(t),a==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:a,values:t,usage:pa.UPLOAD,refCount:r})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:a,complexTensorInfos:r,slice:s,shape:i,isPacked:o}=t;if(s!=null){let d;o?d=new Qr(i,Kr):d=new rr(i,Kr);let c=this.runWebGLProgram(d,[{dataId:e,shape:i,dtype:a}],a),h=this.readSync(c.dataId);return this.disposeIntermediateTensorInfo(c),h}if(n!=null)return this.convertAndCacheOnCPU(e);if(a==="string")return n;let l=this.activeTimers!=null,u;l&&(u=v.now());let p;if(a==="complex64"){let d=this.readSync(r.real.dataId),c=this.readSync(r.imag.dataId);p=N.mergeRealAndImagArrays(d,c)}else p=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=v.now()-u),this.convertAndCacheOnCPU(e,p)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(m=>h.push(m))}let t=this.texData.get(e),{values:n,shape:a,slice:r,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(r!=null){let h;o?h=new Qr(a,Kr):h=new rr(a,Kr);let m=this.runWebGLProgram(h,[{dataId:e,shape:a,dtype:s}],s),f=this.read(m.dataId);return this.disposeIntermediateTensorInfo(m),f}if(n!=null)return this.convertAndCacheOnCPU(e);if(H().getBool("DEBUG")&&!H().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&H().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&H().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...eh(a))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(s==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),m=h[0],f=h[1];p=N.mergeRealAndImagArrays(m,f)}else if(l==null)p=this.getValuesFromTexture(e);else{let h=v.sizeFromShape(a);p=this.gpgpu.downloadFloat32MatrixFromBuffer(l,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let h=this.gpgpu.gl;ce(h,()=>h.deleteBuffer(l))}let d=this.convertAndCacheOnCPU(e,p),c=this.pendingRead.get(e);return this.pendingRead.delete(e),c.forEach(h=>h(d)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Ca().removeDataId(e,this),this.pendingDeletes--),d}readToGPU(e,t={}){let n=this.texData.get(e),{values:a,shape:r,slice:s,dtype:i,isPacked:o,texture:l}=n;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(s!=null){let c;o?c=new Qr(r,Kr):c=new rr(r,Kr);let h=this.runWebGLProgram(c,[{dataId:e,shape:r,dtype:i}],i),m=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),m}if(l==null)throw a!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),p=Ca().makeTensorFromTensorInfo(u),d=this.texData.get(u.dataId);return Object.assign({tensorRef:p},d.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let n=t.map(a=>v.decodeString(a));return Le(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Le(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!GC(n))throw H().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:a}=this.texData.get(e),r=v.sizeFromShape(t);if(H().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let d=this.decode(e),c=this.texData.get(d.dataId),h=this.gpgpu.downloadMatrixFromPackedTexture(c.texture.texture,...eh(t)).subarray(0,r);return this.disposeIntermediateTensorInfo(d),h}let s=H().getBool("WEBGL_PACK")&&a===!0,i=s?Fp(t):t,o=s?new GZ(i):new UZ(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),u=this.texData.get(l.dataId),p=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(u.texture.texture,u.texShape[0],u.texShape[1]).subarray(0,r);return this.disposeIntermediateTensorInfo(l),p}timerAvailable(){return H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}time(e){let t=this.activeTimers,n=[],a=!1;this.programTimersStack==null?(this.programTimersStack=n,a=!0):this.activeTimers.push(n),this.activeTimers=n,e();let r=v.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=v.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,a&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(r);i.kernelMs=v.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(H().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:a,usage:r,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(a,n),this.textureManager.releaseTexture(t,a,r,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=sJ){return H().getBool("WEBGL_CPU_FORWARD")&&e.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){N.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return tJ(e.shape,t)}packedUnaryOp(e,t,n){let a=new Qr(e.shape,t),r=this.compileAndRun(a,[e],n);return Ca().makeTensorFromTensorInfo(r)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let a=O_(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,a)}if(H().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,jk,e.dtype);let t=new rr(e.shape,jk),n=this.compileAndRun(t,[e]);return Ca().makeTensorFromTensorInfo(n)}makeTensorInfo(e,t,n){let a;if(t==="string"&&n!=null&&n.length>0&&v.isString(n[0])){let r=n.map(s=>v.encodeString(s));a=this.write(r,e,t)}else a=this.write(n,e,t);return this.texData.get(a).usage=null,{dataId:a,shape:e,dtype:t}}makeOutput(e,t,n){return Ca().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,n),this)}unpackTensor(e){let t=new eJ(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new L7(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[hi(e.shape),...mi(e.shape)],a={dtype:e.dtype,shape:n,dataId:e.dataId},r=[hi(t),...mi(t)],s=new W_(r,n),i=!0,o=[n],l=this.runWebGLProgram(s,[a],e.dtype,o,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e,t){let n=this.texData.get(e),{isPacked:a,shape:r,dtype:s}=n;if(t!=null){let d=v.sizeFromShape(r),c=t[0]*t[1]*4;v.assert(d<=c,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Fp(r),o;a?o=new VZ(i):o=new BZ(i);let l=!0,u=[t!=null?t:eh(i)],p=this.runWebGLProgram(o,[{shape:i,dtype:s,dataId:e}],s,u,l,t);return{dtype:s,shape:r,dataId:p.dataId}}runWebGLProgram(e,t,n,a,r=!1,s){let i=this.makeTensorInfo(e.outputShape,n),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===Zp.DENSE){let g=s!=null?s:eh(e.outputShape);o.texShape=g.map(y=>y*2)}if(e.outTexUsage!=null&&(o.usage=e.outTexUsage),v.sizeFromShape(i.shape)===0)return o.values=v.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let y=this.texData.get(g.dataId);if(y.texture==null){if(!e.packedInputs&&v.sizeFromShape(g.shape)<=H().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:y.values};e.packedInputs&&(y.isPacked=!0,y.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!y.isPacked!=!!e.packedInputs)g=y.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),y=this.texData.get(g.dataId);else if(y.isPacked&&!Jp(y.shape,g.shape)){let b=g,x=g.shape;g.shape=y.shape,g=this.packedReshape(g,x),l.push(g),y=this.texData.get(g.dataId),b.shape=x}return{shape:g.shape,texData:y,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:o,isUniform:!1},d=WZ(e,u,p),c=this.getAndSaveBinary(d,()=>LZ(this.gpgpu,e,u,p)),h=this.activeTimers!=null,m;h&&(m=this.startTimer()),H().get("ENGINE_COMPILE_ONLY")||zZ(this.gpgpu,c,u,p,a),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(m=this.endTimer(m),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(m)}));let f=H().get("WEBGL_FLUSH_THRESHOLD");if(f>0){let g=v.now();g-this.lastGlFlushTime>f&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!H().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&r===!1){let g=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),g}return i}compileAndRun(e,t,n,a,r=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,a,r)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(H().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=P(()=>{if(!H().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=H().getBool("DEBUG");H().set("DEBUG",!1);let t=this.abs(xe(1e-8)).dataSync()[0];if(H().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?nJ:aJ}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:a,values:r,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=v.now());let p=t.texShape;if(p==null&&(p=o_(n,o),t.texShape=p),r!=null){let d=Fp(n),c,h=p[1],m=p[0],f=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!f)&&([h,m]=Mu(p[0],p[1])),o?c=new qZ(d,f):c=new Uk(d,f);let g=f?[m,h]:p,y=this.makeTensorInfo(g,a),b=this.texData.get(y.dataId);f?b.usage=pa.PIXELS:b.usage=pa.UPLOAD,b.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),h,m,r);let x=[[m,h]],w=!0,I=this.runWebGLProgram(c,[y],a,x,w),T=this.texData.get(I.dataId);t.texShape=T.texShape,t.isPacked=T.isPacked,t.usage=T.usage,H().get("ENGINE_COMPILE_ONLY")?this.disposeData(I.dataId):(t.texture=T.texture,t.values=null,this.texData.delete(I.dataId)),this.disposeIntermediateTensorInfo(y),l&&(this.uploadWaitMs+=v.now()-u)}else{let d=this.acquireTexture(p,i,a,o);t.texture=d}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:a}=n;return t!=null&&(n.values=lJ(t,a)),n.values}acquireTexture(e,t,n,a){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let r=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${r} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,a)}computeBytes(e,t){return e[0]*e[1]*v.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let n=new Promise(a=>{try{this.checkCompletion_(t),a(!0)}catch(r){throw r}});e.push(n)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await qv(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(G0(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:n,infLoc:a,nanLoc:r,inShapesLocations:s,inTexShapesLocations:i,outShapeLocation:o,outShapeStridesLocation:l,outTexShapeLocation:u}=b_(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=n,e.infLoc=a,e.nanLoc=r,e.inShapesLocations=s,e.inTexShapesLocations=i,e.outShapeLocation=o,e.outShapeStridesLocation=l,e.outTexShapeLocation=u}}createTensorFromGPUData(e,t,n){e.channels=e.channels||"RGBA";let{texture:a,height:r,width:s,channels:i}=e,o=Ca().backend;if(!o.gpgpu.gl.isTexture(a))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let l=o.writeTexture(a,t,n,r,s,i);return Ca().makeTensorFromDataId(l,t,n,o)}};Ef.nextDataId=0;function lJ(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let a=0;a<n.length;++a)n[a]=Math.round(e[a]);return n}else throw new Error(`Unknown dtype ${t}`)}var uJ="4.2.0";function B_(){H().set("WEBGL_FORCE_F16_TEXTURES",!0)}Sc.isBrowser()&&Em("webgl",()=>new Ef,2);var pJ={forceHalfFloat:B_},e1=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,xl=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=N.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=_n(this.outputShape.length),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},ed=`
|
|
result.r = isNaN.r ? NAN : result.r;
|
|
result.g = isNaN.g ? NAN : result.g;
|
|
result.b = isNaN.b ? NAN : result.b;
|
|
result.a = isNaN.a ? NAN : result.a;
|
|
`,td=class{constructor(e,t,n,a=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=N.assertAndGetBroadcastShape(t,n);let r=this.outputShape.length;this.enableShapeUniforms=_n(r);let s="";if(a)if(r===0||v.sizeFromShape(this.outputShape)===1)s=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(s=`
|
|
${gt(r)} coords = getOutputCoords();
|
|
`,r===1)this.enableShapeUniforms?s+=`
|
|
result.y = (coords + 1) >= outShape ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`:s+=`
|
|
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{let i=kn("coords",r);this.enableShapeUniforms?s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[r-2]} + 1) >= outShape[${r} - 2];
|
|
bool nextColOutOfBounds =
|
|
(${i[r-1]} + 1) >= outShape[${r} - 1];
|
|
result.y = nextColOutOfBounds ? 0. : result.y;
|
|
result.z = nextRowOutOfBounds ? 0. : result.z;
|
|
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
|
|
`:s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[r-2]} + 1) >= ${this.outputShape[r-2]};
|
|
bool nextColOutOfBounds =
|
|
(${i[r-1]} + 1) >= ${this.outputShape[r-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) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
vec4 a = getAAtOutCoords();
|
|
vec4 b = getBAtOutCoords();
|
|
|
|
vec4 result = binaryOperation(a, b);
|
|
${s}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function ta(e){let{inputs:t,backend:n}=e,{x:a}=t;return n.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var cJ={kernelName:Pi,backendName:"webgl",kernelFunc:ta};function Ns(e){let{inputs:t,backend:n}=e,{real:a,imag:r}=t,s=n.makeTensorInfo(a.shape,"complex64"),i=n.texData.get(s.dataId),o=ta({inputs:{x:a},backend:n}),l=ta({inputs:{x:r},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var dJ={kernelName:Qh,backendName:"webgl",kernelFunc:Ns},V_="return (a < 0.) ? b * a : a;",U_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function hJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a,i=n.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=H().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new td(U_,r.shape,i.shape):new xl(V_,r.shape,i.shape),l=n.runWebGLProgram(o,[r,i],"float32");return n.disposeIntermediateTensorInfo(i),l}var mJ={kernelName:Li,backendName:"webgl",kernelFunc:hJ},G_="return (a < 0.) ? b * a : a;",H_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function fJ(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=H().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new td(H_,a.shape,r.shape):new xl(G_,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],"float32")}var gJ={kernelName:Zi,backendName:"webgl",kernelFunc:fJ},Bu="if (isnan(x)) return x;";function Ye({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:a}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=a||i.dtype;if(o.shouldExecuteOnCPU([i])&&n!=null){let d=o.texData.get(i.dataId),c=n(d.values,l);return o.makeTensorInfo(i.shape,l,c)}let u=H().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new Qr(i.shape,t):p=new rr(i.shape,e),o.runWebGLProgram(p,[i],l)}}function cn({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:a=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,p=o;if(a&&l.dtype==="complex64"){let m=p.texData.get(l.dataId),f=p.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(x=>{let[w,I]=x,T={dataId:w.dataId,dtype:w.dtype,shape:l.shape},C={dataId:I.dataId,dtype:I.dtype,shape:u.shape},E=new xl(e,l.shape,u.shape);return p.runWebGLProgram(E,[T,C],ma(w.dtype,I.dtype))}),b=Ns({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),b}let d=s||ma(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let m=p.texData.get(l.dataId).values,f=p.texData.get(u.dataId).values,g=l.dtype==="string"?N.fromUint8ToStringArray(m):m,y=l.dtype==="string"?N.fromUint8ToStringArray(f):f,[b,x]=r(l.shape,u.shape,g,y,d),w=p.makeTensorInfo(x,d),I=p.texData.get(w.dataId);return I.values=b,w}let c=H().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return c?h=new td(t,l.shape,u.shape,n):h=new xl(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],d)}}function Qp(e,t=!1){if(e==="linear")return t?X7:G7;if(e==="relu")return t?Z7:q7;if(e==="elu")return t?Y7:H7;if(e==="relu6")return t?J7:j7;if(e==="prelu")return t?H_:G_;if(e==="leakyrelu")return t?U_:V_;if(e==="sigmoid")return t?Q7:K7;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var q_=class{constructor(e,t,n,a=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=_n(this.outputShape.length);let u=a?e[1]:e[2],p=Math.ceil(u/2),d=a?"i * 2, rc.y":"rc.y, i * 2",c=r?"rc.z, i * 2":"i * 2, rc.z",h=a?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${i}
|
|
}`:l?f=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${i}
|
|
}`:f=`vec4 activation(vec4 x) {
|
|
${i}
|
|
}`,g="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let b="rc.x",x="rc.x";e[0]<t[0]?b=`imod(rc.x, ${e[0]})`:t[0]<e[0]&&(x=`imod(rc.x, ${t[0]})`),this.userCode=`
|
|
${f}
|
|
// Don't use uniform for sharedDimensionPacked for performance.
|
|
const float sharedDimension = ${p}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
int batchA = ${b};
|
|
int batchB = ${x};
|
|
for (int i = 0; i < ${p}; i++) {
|
|
vec4 a = getMatrixA(batchA, ${d});
|
|
vec4 b = getMatrixB(batchB, ${c});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${h[0]} * ${m[0]});
|
|
result += (${h[1]} * ${m[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${y}
|
|
|
|
${g}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},Kk={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},Xk=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=N.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`}},Yk="return a * b;";function t1(e){let{inputs:t,backend:n}=e,{a,b:r}=t,s=N.upcastType(a.dtype,r.dtype);if(a.dtype==="complex64"){let o=n.texData.get(a.dataId),l=n.texData.get(r.dataId),u=new Xk(Kk.REAL,a.shape,r.shape),p=new Xk(Kk.IMAG,a.shape,r.shape),d=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:a.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:r.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:r.shape}],c=n.runWebGLProgram(u,d,"float32"),h=n.runWebGLProgram(p,d,"float32"),m=Ns({inputs:{real:c,imag:h},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),m}if(n.shouldExecuteOnCPU([a,r])){let o=n.texData.get(a.dataId),l=n.texData.get(r.dataId),[u,p]=m7(a.shape,r.shape,o.values,l.values,s),d=n.makeTensorInfo(p,s),c=n.texData.get(d.dataId);return c.values=u,d}let i;return H().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new td(Yk,a.shape,r.shape):i=new xl(Yk,a.shape,r.shape),n.runWebGLProgram(i,[a,r],s)}var yJ={kernelName:ji,backendName:"webgl",kernelFunc:t1};function bJ(e,t,n){let a=[hi(e.shape),...mi(e.shape)],r={dtype:e.dtype,shape:a,dataId:e.dataId},s=[hi(t),...mi(t)],i=new W_(s,a),o=!0,l=[a],u=n.runWebGLProgram(i,[r],e.dtype,l,o);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function de(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{shape:s}=a,i=n,o=v.sizeFromShape(r.shape),l=v.inferFromImplicitShape(s,o),u=v.sizeFromShape(l);v.assert(o===u,()=>`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let p=i.texData.get(r.dataId);return p.isPacked&&!Jp(r.shape,l)&&!(p.texture!==null&&Jp(p.shape,l))?bJ(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var xJ={kernelName:iu,backendName:"webgl",kernelFunc:de},Zk=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:a,inSize:r,outSize:s}=e;this.outputShape=[a,s];let i=Math.floor(n/4)*4,o=n%4,l="sumValue += dot(values, ones);";if(t!=null){let p=1/t;l=`sumValue += dot(values * ${v.isInt(p)?p.toPrecision(2):p}, ones);`}let u="";r%n>0&&(u=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return 0.0;
|
|
}
|
|
`),this.userCode=`
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${u}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${i}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${l}
|
|
}
|
|
|
|
int inIdx = inOffset + ${i};
|
|
if (${o===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${l}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},vJ=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:a,inSize:r,outSize:s}=e;this.outputShape=[a,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let 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");let u=Math.floor(n/4)*4,p=n%4,d=`
|
|
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 = ${o}(values, minMaxValue);
|
|
if (${t==="min"} || ${t==="max"}) {
|
|
minMaxValue = ${o}(values, minMaxValue);
|
|
bvec4 isNaN = isnan(values);
|
|
if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {
|
|
minMaxValue = vec4(NAN);
|
|
}
|
|
}
|
|
}
|
|
`,c="vec4";t==="all"?(i="1.0",d=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,c="bvec4"):t==="any"&&(i="0.0",d=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,c="bvec4");let h="";r%n>0&&(h=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return initializationValue;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${i};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${h}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
vec4 minMaxValue = vec4(${i});
|
|
float prodValue = 1.0;
|
|
float sumValue = 0.0;
|
|
float allValue = 1.0;
|
|
float anyValue = 0.0;
|
|
|
|
for (int i = 0; i < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${d}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${p===1}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===2}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===3}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function wJ(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],a=N.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:a,outSize:Math.ceil(n/a)})}return t}function No(e,t,n,a){let r=wJ(e.shape),s=e;for(let i=0;i<r.length;i++){let{inSize:o,windowSize:l,outSize:u}=r[i],p,d;n==="mean"?p=i===0?new Zk({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},o):new Zk({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u}):p=new vJ({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},n),d=s,s=a.runWebGLProgram(p,[s],t),d.dataId!==e.dataId&&a.disposeIntermediateTensorInfo(d)}return s}var kJ=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[t[s]];this.outputShape=n,this.rank=n.length;let a=gt(this.rank),r=IJ(t);this.userCode=`
|
|
void main() {
|
|
${a} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function IJ(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],a=new Array(t);for(let r=0;r<e.length;r++)a[e[r]]=n[r];return a.join()}var SJ=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let u=0;u<n.length;u++)n[u]=e[t[u]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let a=gt(this.rank),r=z_("rc",this.rank),s=new Array(this.rank);for(let u=0;u<t.length;u++)s[t[u]]=r[u];let i=`vec2(${s.slice(-2).join()})`,o=`++${r[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`
|
|
void main() {
|
|
${a} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${l};
|
|
if(${o}) {
|
|
result[1] = ${l};
|
|
}
|
|
--${r[this.rank-1]};
|
|
if(++${r[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${l};
|
|
if(${o}) {
|
|
result[3] = ${l};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function Af(e,t,n){let a=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new SJ(e.shape,t):new kJ(e.shape,t);return n.runWebGLProgram(a,[e],e.dtype)}function TJ(e,t,n,a){let r=t,s=e.shape.length,i=v.parseAxisParam(r,e.shape),o=i,l=N.getAxesPermutation(o,s),u=l!=null,p=e;u&&(p=Af(e,l,a),o=N.getInnerMostAxes(o.length,s)),N.assertAxesAreInnerMostDims("sum",o,s);let[d,c]=N.computeOutAndReduceShapes(p.shape,o),h=d;n&&(h=N.expandShapeToKeepDim(d,i));let m=v.sizeFromShape(c),f=v.sizeFromShape(e.shape)/m,g=de({inputs:{x:p},attrs:{shape:[f,m]},backend:a}),y=_m(e.dtype),b=No(g,y,"sum",a),x=de({inputs:{x:b},attrs:{shape:h},backend:a});return a.disposeIntermediateTensorInfo(g),a.disposeIntermediateTensorInfo(b),u&&a.disposeIntermediateTensorInfo(p),x}function $f(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;return TJ(r,s,i,n)}var NJ={kernelName:po,backendName:"webgl",kernelFunc:$f};function In(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{perm:s}=a,i=n,o=r.shape.length,l=new Array(o);for(let p=0;p<l.length;p++)l[p]=r.shape[s[p]];let u;if(i.shouldExecuteOnCPU([r])){let p=i.texData.get(r.dataId).values,d=Q0(p,r.shape,r.dtype,s,l);u=i.makeTensorInfo(l,r.dtype);let c=i.texData.get(u.dataId);c.values=d}else u=Af(r,s,i);return u}var CJ={kernelName:Cr,backendName:"webgl",kernelFunc:In},j_=1e3;function Wh({a:e,b:t,transposeA:n,transposeB:a,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,p=t.shape.length,d=n?e.shape[u-2]:e.shape[u-1],c=a?t.shape[p-1]:t.shape[p-2],h=n?e.shape[u-1]:e.shape[u-2],m=a?t.shape[p-2]:t.shape[p-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=v.sizeFromShape(f),b=v.sizeFromShape(g),x=Iu.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);v.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${a} must match.`);let w=n?[y,d,h]:[y,h,d],I=a?[b,m,c]:[b,c,m],T=de({inputs:{x:e},backend:r,attrs:{shape:w}}),C=de({inputs:{x:t},backend:r,attrs:{shape:I}}),E=[T,C],$=Math.max(y,b),R=n?T.shape[1]:T.shape[2],F=s!=null,S=i!=null,M=l==="leakyrelu",B=l!=null?Qp(l,!0):null,U=F||S||M||B!=null,G;if((h===1||m===1)&&R>j_&&U===!1){let K=T,Z=C;n&&(K=In({inputs:{x:T},backend:r,attrs:{perm:[0,2,1]}}),E.push(K)),a&&(Z=In({inputs:{x:C},backend:r,attrs:{perm:[0,2,1]}}),E.push(Z));let J=m!==1,ee=m===1,ae=K;J&&(ae=de({inputs:{x:K},backend:r,attrs:{shape:[$,R,1]}}),E.push(ae));let te=m===1?2:1,re=Z;ee&&(re=de({inputs:{x:Z},backend:r,attrs:{shape:[$,1,R]}}),E.push(re));let se=t1({inputs:{a:ae,b:re},backend:r});G=$f({inputs:{x:se},backend:r,attrs:{axis:te,keepDims:!0}}),E.push(se)}else{let K=ma(e.dtype,t.dtype),Z=new q_(w,I,[$,h,m],n,a,F,B,S,M),J=[T,C];if(s!=null&&J.push(s),S&&J.push(i),M){let ee=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));J.push(ee),E.push(ee)}G=r.runWebGLProgram(Z,J,K)}let j=de({inputs:{x:G},backend:r,attrs:{shape:x}});E.push(G);for(let K of E)r.disposeIntermediateTensorInfo(K);return j}function _J(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a;return Wh({a:r,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:d,activation:p})}var EJ={kernelName:Qs,backendName:"webgl",kernelFunc:_J},Jk="return abs(x);";function AJ(e){let{inputs:t,backend:n}=e,{x:a}=t;if(n.shouldExecuteOnCPU([a])&&a.dtype!=="complex64"){let s=n.texData.get(a.dataId),i=O_(s.values);return n.makeTensorInfo(a.shape,a.dtype,i)}let r;return H().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Qr(a.shape,Jk):r=new rr(a.shape,Jk),n.runWebGLProgram(r,[a],a.dtype)}var $J={kernelName:wl,backendName:"webgl",kernelFunc:AJ},FJ=Ma+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,RJ=Ye({opSnippet:FJ}),DJ={kernelName:kl,backendName:"webgl",kernelFunc:RJ},MJ=Ma+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,PJ=Ye({opSnippet:MJ}),OJ={kernelName:Il,backendName:"webgl",kernelFunc:PJ},Qk="return a + b;",LJ=cn({opSnippet:Qk,packedOpSnippet:Qk,supportsComplex:!0,cpuKernelImpl:KZ}),zJ={kernelName:fs,backendName:"webgl",kernelFunc:LJ},WJ=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let n=[];this.variableNames.forEach(r=>{n.push(`float v${r} = get${r}AtOutCoords();`)});let a=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
float result = ${a};
|
|
setOutput(result);
|
|
}
|
|
`}},BJ=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let n=[];this.variableNames.forEach(r=>{n.push(`vec4 v${r} = get${r}AtOutCoords();`)});let a=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
vec4 result = ${a};
|
|
setOutput(result);
|
|
}
|
|
`}};function ch(e){let{inputs:t,backend:n}=e,a=t;if(a.length===1)return ta({inputs:{x:a[0]},backend:n});if(a.length>H().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(a.length/2),l=ch({inputs:a.slice(0,o),backend:n}),u=ch({inputs:a.slice(o),backend:n});return ch({inputs:[l,u],backend:n})}let r=a.map(o=>o.dtype).reduce((o,l)=>ma(o,l)),s=a.map(o=>o.shape),i=H().getBool("WEBGL_PACK")?new BJ(a[0].shape,s):new WJ(a[0].shape,s);return n.runWebGLProgram(i,a,r)}var VJ={kernelName:yi,backendName:"webgl",kernelFunc:ch};function UJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=N.getAxesPermutation(u,o),d=r;p!=null&&(d=In({inputs:{x:r},backend:n,attrs:{perm:p}}),u=N.getInnerMostAxes(u.length,o)),N.assertAxesAreInnerMostDims("all",u,o);let[c,h]=N.computeOutAndReduceShapes(d.shape,u),m=v.sizeFromShape(h),f=de({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"all",n),y;if(i){let b=N.expandShapeToKeepDim(c,l);y=de({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=de({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var GJ={kernelName:Sl,backendName:"webgl",kernelFunc:UJ};function HJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=N.getAxesPermutation(u,o),d=r;p!=null&&(d=In({inputs:{x:r},backend:n,attrs:{perm:p}}),u=N.getInnerMostAxes(u.length,o)),N.assertAxesAreInnerMostDims("any",u,o);let[c,h]=N.computeOutAndReduceShapes(d.shape,u),m=v.sizeFromShape(h),f=de({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"any",n),y;if(i){let b=N.expandShapeToKeepDim(c,l);y=de({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=de({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var qJ={kernelName:Tl,backendName:"webgl",kernelFunc:HJ},jJ=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:a,batchSize:r,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=n?"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 * ${a};
|
|
|
|
int bestIndex = inOffset;
|
|
float bestValue = getA(batch, bestIndex);
|
|
|
|
for (int i = 0; i < ${a}; i++) {
|
|
int inIdx = ${o};
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate ${i} bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`}},KJ=class{constructor(e,t,n,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,v.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),a||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=gt(o),u=kn("coords",o),p,d;if(s===1){d=o+1;let C=gt(d);p=`
|
|
${C} sourceLocR = ${C}(${u.join()}, 0);
|
|
++${u[o-1]};
|
|
${C} sourceLocG = ${C}(${u.join()}, 0);
|
|
++${u[o-2]};
|
|
${C} sourceLocA = ${C}(${u.join()}, 0);
|
|
--${u[o-1]};
|
|
${C} sourceLocB = ${C}(${u.join()}, 0);
|
|
--${u[o-2]};`}else d=o,p=`
|
|
${l} sourceLocR = coords;
|
|
++${u[o-1]};
|
|
${l} sourceLocG = coords;
|
|
++${u[o-2]};
|
|
${l} sourceLocA = coords;
|
|
--${u[o-1]};
|
|
${l} sourceLocB = coords;
|
|
--${u[o-2]};`;let c=["x","y","z","w","u","v"].slice(0,d),h="."+c[d-1],m=c.map(C=>"int "+C),f=kn("sourceLocR",d-1).concat("inIdx.r"),g=kn("sourceLocG",d-1).concat("inIdx.g"),y=kn("sourceLocB",d-1).concat("inIdx.b"),b=kn("sourceLocA",d-1).concat("inIdx.a"),x=n==="max"?"greaterThan":"lessThan",w=a?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${f.join()}),
|
|
getBestIndicesAChannel(${g.join()}),
|
|
getBestIndicesAChannel(${y.join()}),
|
|
getBestIndicesAChannel(${b.join()})));`,I=`vec4(
|
|
getAChannel(${f.join()}),
|
|
hasNextCol ? getAChannel(${g.join()}) : 0.,
|
|
hasNextRow ? getAChannel(${y.join()}) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,T=a?"":`
|
|
float getBestIndicesAChannel(${m.join()}) {
|
|
return getChannel(getBestIndicesA(${c.join()}),
|
|
vec2(${c.slice(-2).join()}));
|
|
}`;this.userCode=`
|
|
float getAChannel(${m.join()}) {
|
|
return getChannel(getA(${c.join()}),
|
|
vec2(${c.slice(-2).join()}));
|
|
}
|
|
${T}
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
bool hasNextCol = ${u[o-1]} < ${i[o-1]-1};
|
|
bool hasNextRow = ${u[o-2]} < ${i[o-2]-1};
|
|
${p}
|
|
ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h},
|
|
sourceLocB${h}, sourceLocA${h}) * ${t};
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = ${I};
|
|
|
|
for (int i = 0; i < ${t}; i++) {
|
|
inIdx = srcIdx;
|
|
${w}
|
|
vec4 candidate = ${I};
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(${x}(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);
|
|
}
|
|
`}};function K_(e,t,n,a=null){let r=t.shape[0],s=t.shape[1];a!=null&&(r=a.shape[0],s=a.shape[1]);let i=N.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new jJ(o,n,a==null),u=[t];a!=null&&u.push(a);let p=e.runWebGLProgram(l,u,"int32");if(p.shape[1]===1)return p;let d=K_(e,t,n,p);return e.disposeIntermediateTensorInfo(p),d}function X_(e,t,n,a=null){let r=a!=null?a.shape:t.shape,s=r[r.length-1],i=N.computeOptimalWindowSize(s),o=new KJ(r,i,n,a==null),l=a==null?[t]:[t,a],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let p=X_(e,t,n,u);return e.disposeIntermediateTensorInfo(u),p}return u}function Y_(e,t,n,a){let r=[n];if(N.assertAxesAreInnerMostDims("arg"+a.charAt(0).toUpperCase()+a.slice(1),r,t.shape.length),!H().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,p]=N.computeOutAndReduceShapes(l.shape,r),d=v.sizeFromShape(p),c=de({inputs:{x:l},backend:e,attrs:{shape:[-1,d]}});s.push(c);let h=K_(e,c,a);s.push(h);let m=de({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return X_(e,t,a)}function XJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=v.parseAxisParam(s,r.shape),o=N.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=In({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=N.getInnerMostAxes(i.length,l.shape.length)),N.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=Y_(n,l,i[0],"max");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var YJ={kernelName:bi,backendName:"webgl",kernelFunc:XJ};function ZJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=v.parseAxisParam(s,r.shape),o=N.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=In({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=N.getInnerMostAxes(i.length,l.shape.length)),N.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=Y_(n,l,i[0],"min");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var JJ={kernelName:rc,backendName:"webgl",kernelFunc:ZJ},QJ=Ma+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,e9=Ye({opSnippet:QJ}),t9={kernelName:Nl,backendName:"webgl",kernelFunc:e9},n9=Ma+"return log(x + sqrt(x * x + 1.0));",a9=Ye({opSnippet:n9}),r9={kernelName:Cl,backendName:"webgl",kernelFunc:a9},s9=Ma+`
|
|
return atan(x);
|
|
`,i9=Ye({opSnippet:s9}),o9={kernelName:_l,backendName:"webgl",kernelFunc:i9},l9=e1+`
|
|
return atan(a, b);
|
|
`,u9=`
|
|
vec4 result = atan(a, b);
|
|
bvec4 isNaNA = isnan(a);
|
|
bvec4 isNaNB = isnan(b);
|
|
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
|
|
`+ed+`
|
|
return result;
|
|
`,p9=cn({opSnippet:l9,packedOpSnippet:u9}),c9={kernelName:Al,backendName:"webgl",kernelFunc:p9},d9=Ma+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,h9=Ye({opSnippet:d9}),m9={kernelName:El,backendName:"webgl",kernelFunc:h9},ec=class{constructor(e,t,n,a=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterHeight,d=e.effectiveFilterWidth,c=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),n){let C=">=";this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${c}, ${h});
|
|
|
|
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
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
float avgValue = 0.0;
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d};
|
|
wC += ${u}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.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 ${C} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${a?r?f:g:`wR * ${d} + wC`};
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let b="max",x=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(x="avgValue / max(count, 1.0)");let w=Math.floor(s/4)*4,I=s%4,T=`
|
|
if (${m}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${b}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${c}, ${h});
|
|
const float initializationValue = ${y};
|
|
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 >= ${e.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(${y});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${w}; 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)
|
|
);
|
|
|
|
${T}
|
|
}
|
|
|
|
int xC = xCCorner + ${w};
|
|
if (${I===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${I===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${I===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
}
|
|
}
|
|
setOutput(${x});
|
|
}
|
|
`}},n1=class{constructor(e,t,n,a=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,d=e.dilationWidth,c=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let b=t==="avg",x="0.0";if(b||(x="-1.0 / 1e-20"),n){let $=">=";this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${f}, ${g}, ${y});
|
|
|
|
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 < ${c};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${p}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${m};
|
|
wC += ${d}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.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 = ${a?r?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${h} * ${m} +
|
|
wR * ${m} + wC`};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let w="max",I=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(I="avgValue / max(count, 1.0)");let T=Math.floor(s/4)*4,C=s%4,E=`
|
|
if (${b}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${w}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${f}, ${g}, ${y});
|
|
const float initializationValue = ${x};
|
|
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 >= ${e.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(${x});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < ${c};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${p}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${T}; 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)
|
|
);
|
|
|
|
${E}
|
|
}
|
|
|
|
int xC = xCCorner + ${T};
|
|
if (${C===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${d}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===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
|
|
);
|
|
|
|
${E}
|
|
}
|
|
}
|
|
}
|
|
setOutput(${I});
|
|
}
|
|
`}};function f9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;Pu(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(N.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=N.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return ta({inputs:{x:r},backend:n});let d=new ec(p,"avg",!1);return n.runWebGLProgram(d,[r],"float32")}var g9={kernelName:xi,backendName:"webgl",kernelFunc:f9};function y9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a,p=[1,1,1],d=N.computePool3DInfo(r.shape,s,i,p,o,l,u),c=new n1(d,"avg",!1);return n.runWebGLProgram(c,[r],"float32")}var b9={kernelName:sc,backendName:"webgl",kernelFunc:y9},x9=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,p=l-1-e.padInfo.left,d=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${u}, ${p});
|
|
const float avgMultiplier = float(${d});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${o};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${l};
|
|
wC+= ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},v9=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,a=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterDepth,d=e.effectiveFilterHeight,c=e.effectiveFilterWidth,h=p-1-e.padInfo.front,m=d-1-e.padInfo.top,f=c-1-e.padInfo.left,g=1/(t*n*a);this.userCode=`
|
|
const ivec3 pads = ivec3(${h}, ${m}, ${f});
|
|
const float avgMultiplier = float(${g});
|
|
|
|
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 < ${p};
|
|
wD += ${o}) {
|
|
float dyD = float(dyDCorner + wD) / ${r}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${d};
|
|
wR += ${l}) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${c};
|
|
wC += ${u}) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function w9(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=a,d=[1,1,1],c=N.computePool3DInfo(i.shape,o,l,d,u,p),h=new v9(c);return n.runWebGLProgram(h,[r],i.dtype)}var k9={kernelName:Yh,backendName:"webgl",kernelFunc:w9};function I9(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;Pu([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=N.computePool2DInfo(i.shape,o,l,1,u),d=new x9(p);return n.runWebGLProgram(d,[r],i.dtype)}var S9={kernelName:Xh,backendName:"webgl",kernelFunc:I9};function T9(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;return Wh({a:r,b:s,transposeA:i,transposeB:o,backend:n})}var N9={kernelName:vi,backendName:"webgl",kernelFunc:T9},C9=class{constructor(e,t,n,a,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let i="0.0";a!=null&&(N.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(N.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = ${i};
|
|
float scale = ${o};
|
|
float inv = scale * inversesqrt(variance + float(${s}));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`}},_9=class{constructor(e,t,n,a,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";a!=null&&(N.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(N.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 offset = ${i};
|
|
vec4 scale = ${o};
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(${s}));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`}},E9=({inputs:e,backend:t,attrs:n})=>{let{x:a,mean:r,variance:s,offset:i,scale:o}=e;v.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),v.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),v.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let u=[a,r,s],p=null;i!=null&&(p=i.shape,u.push(i));let d=null;o!=null&&(d=o.shape,u.push(o));let c=H().getBool("WEBGL_PACK_NORMALIZATION")?new _9(a.shape,r.shape,s.shape,p,d,l):new C9(a.shape,r.shape,s.shape,p,d,l);return t.runWebGLProgram(c,u,u[0].dtype)},A9={kernelName:Di,backendName:"webgl",kernelFunc:E9},$9=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=gt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=F9(this.rank),a,r=e.map((s,i)=>`sourceLoc.${lx[i]} = start[${i}] + coords.${lx[i]};`);a=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${r.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
void main() {
|
|
${a}
|
|
setOutput(getSource(${n}));
|
|
}
|
|
`}},lx=["x","y","z","w","u","v"];function F9(e){if(e===1)return"sourceLoc";if(e<=6)return lx.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var R9=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=gt(this.rank),n=kn("coords",this.rank),a=kn("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${a.slice(-2).join()})`,s=`getChannel(getSource(${a.join()}), ${r})`,i=`
|
|
result.x = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${a[this.rank-1]};
|
|
result.y = ${s};
|
|
--${a[this.rank-1]};
|
|
}
|
|
`,o=this.rank===1?"":`
|
|
--${n[this.rank-1]};
|
|
if (++${n[this.rank-2]} < ${e[this.rank-2]}) {
|
|
++${a[this.rank-2]};
|
|
result.z = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${a[this.rank-1]};
|
|
result.w = ${s};
|
|
}
|
|
}
|
|
`,l=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((u,p)=>`start[${p}]`).join()});`:e.map((u,p)=>`${a[p]} = ${n[p]} + start[${p}];`).join(`
|
|
`);this.userCode=`
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${l}
|
|
vec4 result = vec4(0.);
|
|
${i}
|
|
${o}
|
|
setOutput(result);
|
|
}
|
|
`}};function D9(e,t,n,a){let r=a.texData.get(e.dataId),s=a.makeTensorInfo(n,e.dtype),i=a.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=Kt.computeFlatOffset(t,v.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=a.dataRefCount.get(i.slice.origDataId)||1;return a.dataRefCount.set(i.slice.origDataId,l+1),s}function Vu(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a,[o,l]=Kt.parseSliceParams(r,s,i);if(Kt.assertParamsValid(r,o,l),v.sizeFromShape(l)===0)return n.makeTensorInfo(l,r.dtype,[]);if(n.shouldExecuteOnCPU([r])||r.dtype==="string"){let d=n.texData.get(r.dataId),c=T7(d.values,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,c)}let{isPacked:u}=n.texData.get(r.dataId),p=Kt.isSliceContinous(r.shape,o,l);if(u||!p){let d=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new R9(l):new $9(l),c=[o];return n.runWebGLProgram(d,[r],r.dtype,c)}return n.uploadToGPU(r.dataId),D9(r,o,l,n)}var M9={kernelName:pu,backendName:"webgl",kernelFunc:Vu},P9=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a;v.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((b,x)=>b*x),l=N.getReshaped(r.shape,s,o),u=N.getPermuted(l.length,s.length),p=N.getReshapedPermuted(r.shape,s,o),d=N.getSliceBeginCoords(i,s.length),c=N.getSliceSize(p,i,s.length),h=[],m=de({inputs:{x:r},backend:n,attrs:{shape:l}}),f=In({inputs:{x:m},backend:n,attrs:{perm:u}}),g=de({inputs:{x:f},backend:n,attrs:{shape:p}}),y=Vu({inputs:{x:g},backend:n,attrs:{begin:d,size:c}});return h.push(m),h.push(f),h.push(g),h.forEach(b=>n.disposeIntermediateTensorInfo(b)),y},O9={kernelName:$l,backendName:"webgl",kernelFunc:P9};function L9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i}=a,o=n.readSync(r.dataId),l=n.readSync(s.dataId),u=P_(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var z9={kernelName:Zh,backendName:"webgl",kernelFunc:L9};function W9(e){let{inputs:t,backend:n}=e,{s0:a,s1:r}=t,s=n.readSync(a.dataId),i=n.readSync(r.dataId),o=N.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var B9={kernelName:Jh,backendName:"webgl",kernelFunc:W9},V9="return float(a != b);",Z_=cn({opSnippet:V9,cpuKernelImpl:g7,dtype:"bool"}),U9={kernelName:eu,backendName:"webgl",kernelFunc:Z_};function nd(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return ta({inputs:{x:r.complexTensorInfos.real},backend:n})}var G9={kernelName:wm,backendName:"webgl",kernelFunc:nd},H9="return float(int(x));";function q9(e,t){let n=new rr(e.shape,H9),a=t.runWebGLProgram(n,[e],"int32");return{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}function ux(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return ta({inputs:{x:r},backend:n});let i=It(r.shape),o=ux({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),l=Ns({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=nd({inputs:{input:r},backend:n}),o=ux({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=ta({inputs:{x:r},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(n.shouldExecuteOnCPU([r])){let i=n.texData.get(r.dataId).values,[o,l,u]=YZ(i,r.shape,r.dtype,s);return n.makeTensorInfo(o,l,u)}if(s==="int32")return q9(r,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=Z_({inputs:{a:r,b:i},backend:n});return n.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var j9={kernelName:wi,backendName:"webgl",kernelFunc:ux},eI="return ceil(x);",K9=Ye({opSnippet:eI,packedOpSnippet:eI,cpuKernelImpl:ZZ}),X9={kernelName:ki,backendName:"webgl",kernelFunc:K9},Y9=class{constructor(e){this.variableNames=["A"],this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=`
|
|
|
|
void main() {
|
|
float value = getAAtOutCoords();
|
|
if (isnan(value)) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, minVal, maxVal));
|
|
}
|
|
`}},Z9=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"minVal",type:"float"},{name:"maxVal",type:"float"}],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 value = getAAtOutCoords();
|
|
|
|
if (any(isnan(value))) {
|
|
setOutput(value);
|
|
return;
|
|
}
|
|
|
|
setOutput(clamp(value, vec4(minVal), vec4(maxVal)));
|
|
}
|
|
`}};function J9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o;H().getBool("WEBGL_PACK_CLIP")?o=new Z9(r.shape):o=new Y9(r.shape);let l=[[s],[i]];return n.runWebGLProgram(o,[r],r.dtype,l)}var Q9={kernelName:gs,backendName:"webgl",kernelFunc:J9},eQ=class{constructor(e){this.variableNames=["real","imag"],this.outputShape=e,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))
|
|
);
|
|
}
|
|
`}};function tI(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function tQ(e){let{inputs:t,backend:n}=e,{x:a}=t,r=n.texData.get(a.dataId),s=new eQ(a.shape),i=[tI(a,r.complexTensorInfos.real),tI(a,r.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var nQ={kernelName:ic,backendName:"webgl",kernelFunc:tQ},aQ=class{constructor(e){this.outputShape=[],this.outputShape=N.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s<t.length;s++)t[s]=t[s-1]+e[s][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let s=1;s<t.length;s++){let i=t[s-1];n.push(`else if (yC < ${t[s]}) setOutput(getT${s}(yR, yC-${i}));`)}let a=t.length,r=t[t.length-1];n.push(`else setOutput(getT${a}(yR, yC-${r}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},rQ=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=N.computeOutShape(e,t);let n=this.outputShape,a=n.length,r=gt(a),s=kn("coords",a),i=["x","y","z","w","u","v"].slice(0,a);this.variableNames=e.map((m,f)=>`T${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m<o.length;m++)o[m]=o[m-1]+e[m][t];let l=i[t],u=i.slice(-2),p=i.join(),d=`if (${l} < ${o[0]}) {
|
|
return getChannel(
|
|
getT0(${p}), vec2(${u.join()}));
|
|
}`;for(let m=1;m<o.length;m++){let f=o[m-1];d+=`
|
|
if (${l} < ${o[m]} && ${l} >= ${o[m-1]}) {
|
|
return getChannel(
|
|
getT${m}(${nh(i,l,f)}),
|
|
vec2(${nh(u,l,f)}));
|
|
}`}let c=o.length,h=o[o.length-1];d+=`
|
|
return getChannel(
|
|
getT${c}(${nh(i,l,h)}),
|
|
vec2(${nh(u,l,h)}));`,this.userCode=`
|
|
float getValue(${i.map(m=>"int "+m)}) {
|
|
${d}
|
|
}
|
|
|
|
void main() {
|
|
${r} coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(${s}), 0., 0., 0.);
|
|
|
|
${s[a-1]} = ${s[a-1]} + 1;
|
|
if (${s[a-1]} < ${n[a-1]}) {
|
|
result.g = getValue(${s});
|
|
}
|
|
|
|
${s[a-2]} = ${s[a-2]} + 1;
|
|
if (${s[a-2]} < ${n[a-2]}) {
|
|
result.a = getValue(${s});
|
|
}
|
|
|
|
${s[a-1]} = ${s[a-1]} - 1;
|
|
if (${s[a-2]} < ${n[a-2]} &&
|
|
${s[a-1]} < ${n[a-1]}) {
|
|
result.b = getValue(${s});
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function nh(e,t,n){let a=e.indexOf(t);return e.map((r,s)=>s===a?`${r} - ${n}`:r).join()}function Ff(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return ta({inputs:{x:r.complexTensorInfos.imag},backend:n})}var sQ={kernelName:cm,backendName:"webgl",kernelFunc:Ff};function Rp(e,t,n){let a=e[0].dtype;if(a==="complex64"){let h=e.map(b=>nd({inputs:{input:b},backend:n})),m=e.map(b=>Ff({inputs:{input:b},backend:n})),f=Rp(h,t,n),g=Rp(m,t,n),y=Ns({inputs:{real:f,imag:g},backend:n});return h.forEach(b=>n.disposeIntermediateTensorInfo(b)),m.forEach(b=>n.disposeIntermediateTensorInfo(b)),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),y}let r=n.shouldExecuteOnCPU(e);if(a==="string"&&(r=!0),r){let h=e.map(w=>{let I=[-1,v.sizeFromShape(w.shape.slice(t))];return de({inputs:{x:w},backend:n,attrs:{shape:I}})}),m=h.map(w=>({vals:n.readSync(w.dataId),shape:w.shape})),f=N.computeOutShape(h.map(w=>w.shape),1),g=h[0].shape[0]===1,y=JZ(m,f,a,g),b=N.computeOutShape(e.map(w=>w.shape),t),x=n.makeTensorInfo(b,a,y);return h.forEach(w=>n.disposeIntermediateTensorInfo(w)),x}let s=e.filter(h=>v.sizeFromShape(h.shape)>0),i=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&s[0].shape.length>1;if(s.length===1){let h=i?new rr(e[0].shape,Kr):new Qr(e[0].shape,Kr);return n.runWebGLProgram(h,e,a)}let o=H().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(s.length>o){let h=[];for(let f=0;f<s.length;f+=o){let g=s.slice(f,f+o);h.push(Rp(g,t,n))}let m=Rp(h,t,n);for(let f of h)n.disposeIntermediateTensorInfo(f);return m}if(i){let h=new rQ(s.map(m=>m.shape),t);return n.runWebGLProgram(h,s,a)}let{tensors2D:l,outShape:u}=iQ(s,t,n),p=new aQ(l.map(h=>h.shape)),d=n.runWebGLProgram(p,l,a);l.forEach(h=>n.disposeIntermediateTensorInfo(h));let c=de({inputs:{x:d},attrs:{shape:u},backend:n});return n.disposeIntermediateTensorInfo(d),c}function iQ(e,t,n){let a=N.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>de({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:n})),outShape:a}}function J_(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a,s=v.parseAxisParam(r,t[0].shape)[0],i=t.map(u=>u.shape);N.assertParamsConsistent(i,s);let o=N.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(o)===0)return n.makeTensorInfo(o,t[0].dtype,[]);let l=t.filter(u=>v.sizeFromShape(u.shape)>0);return l.length===1?ta({inputs:{x:l[0]},backend:n}):Rp(l,s,n)}var oQ={kernelName:Fl,backendName:"webgl",kernelFunc:J_},Q_=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,p=e.dilationWidth,d=e.filterHeight,c=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,b=f?3:1,x="",w="";n&&(a?x=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?x=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:x=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,w="result = activation(result);");let I=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${x}
|
|
|
|
const ivec2 strides = ivec2(${o}, ${l});
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${b}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${g}], coords[${y}]) * 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 < ${d}; wR++) {
|
|
int xR = xRCorner + wR * ${u};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${c}; wC++) {
|
|
int xC = xCCorner + wC * ${p};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${h}; 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 (${f}) {
|
|
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 (${m===1}) {
|
|
|
|
if (${f}) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, ${h}) *
|
|
getW(wR, wC, ${h}, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, ${h}, xR, xC) *
|
|
getW(wR, wC, ${h}, d2);
|
|
}
|
|
|
|
} else if (${m===2}) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, ${h}, d2),
|
|
getW(wR, wC, ${h} + 1, d2)
|
|
);
|
|
|
|
if (${f}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, ${h}),
|
|
getX(batch, xR, xC, ${h} + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, ${h}, xR, xC),
|
|
getX(batch, ${h} + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (${m===3}) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, ${h}, d2),
|
|
getW(wR, wC, ${h} + 1, d2),
|
|
getW(wR, wC, ${h} + 2, d2)
|
|
);
|
|
|
|
if (${f}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, ${h}),
|
|
getX(batch, xR, xC, ${h} + 1),
|
|
getX(batch, xR, xC, ${h} + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, ${h}, xR, xC),
|
|
getX(batch, ${h} + 1, xR, xC),
|
|
getX(batch, ${h} + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${I}
|
|
${w}
|
|
setOutput(result);
|
|
}
|
|
`}},lQ=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,a=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.filterDepth,d=e.filterHeight,c=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(${r}, ${s}, ${i});
|
|
const ivec3 pads = ivec3(${t}, ${n}, ${a});
|
|
|
|
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 < ${p}; wF++) {
|
|
int xF = xFCorner + wF * ${o};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${d}; wR++) {
|
|
int xR = xRCorner + wR * ${l};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${c}; wC++) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${h}; d1 += 4) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xF, xR, xC, d1),
|
|
getX(batch, xF, xR, xC, d1 + 1),
|
|
getX(batch, xF, xR, xC, d1 + 2),
|
|
getX(batch, xF, xR, xC, d1 + 3)
|
|
);
|
|
vec4 wValues = vec4(
|
|
getW(wF, wR, wC, d1, d2),
|
|
getW(wF, wR, wC, d1 + 1, d2),
|
|
getW(wF, wR, wC, d1 + 2, d2),
|
|
getW(wF, wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
if (${m===1}) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, ${h}) *
|
|
getW(wF, wR, wC, ${h}, d2);
|
|
} else if (${m===2}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xF, xR, xC, ${h}),
|
|
getX(batch, xF, xR, xC, ${h} + 1)
|
|
);
|
|
vec2 wValues = vec2(
|
|
getW(wF, wR, wC, ${h}, d2),
|
|
getW(wF, wR, wC, ${h} + 1, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else if (${m===3}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xF, xR, xC, ${h}),
|
|
getX(batch, xF, xR, xC, ${h} + 1),
|
|
getX(batch, xF, xR, xC, ${h} + 2)
|
|
);
|
|
vec3 wValues = vec3(
|
|
getW(wF, wR, wC, ${h}, d2),
|
|
getW(wF, wR, wC, ${h} + 1, d2),
|
|
getW(wF, wR, wC, ${h} + 2, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},eE=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=_n(this.outputShape.length);let s=e.padInfo.left,i=e.strideWidth,o=e.dilationWidth,l=e.filterHeight,u=e.filterWidth,p=u,d=`
|
|
int xR; int xC; int xCOffset;
|
|
vec4 wTexel; vec4 previous; vec4 final;`;for(let f=0;f<u;f++)d+=`
|
|
vec4 xTexelC${f*2};
|
|
int xTexelC${f*2}Ready;
|
|
vec4 xTexelC${f*2+1};
|
|
int xTexelC${f*2+1}Ready;
|
|
vec4 xC${f};`;d+=`
|
|
for (int r = 0; r < ${l}; r++) {
|
|
for (int d1 = 0; d1 < ${e.inChannels}; d1 += 2) {
|
|
`;for(let f=0;f<u;f++)d+=`
|
|
xTexelC${f*2} = vec4(0.0);
|
|
xTexelC${f*2}Ready = 0;
|
|
xTexelC${f*2+1} = vec4(0.0);
|
|
xTexelC${f*2+1}Ready = 0;
|
|
xC${f} = vec4(0.0);`;d+=`
|
|
xR = xRCorner + r * dilations[0];
|
|
if (xR >=0 && xR < inDims[0]) {
|
|
`;for(let f=0;f<(p+1)/2;f++){let g=f*2;if(d+=`
|
|
xC = xCCorner + ${g*o};
|
|
`,i===1){if(g<u&&(s%2===1?(d+=`
|
|
xCOffset = xC + 1;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
`,o===1&&g>0?d+=`
|
|
xC${g} = vec4(xTexelC${g-2}.zw, xTexelC${g}.xy);
|
|
`:d+=`
|
|
xCOffset = xC + 1 - 2;
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
previous.zw = vec2(0.0);
|
|
}
|
|
|
|
xC${g} = vec4(previous.zw, xTexelC${g}.xy);
|
|
} else {
|
|
xC${g} = vec4(0.0, 0.0, xTexelC${g}.xy);
|
|
}
|
|
`):d+=`
|
|
if (xC >= 0 && xC < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
xC${g} = xTexelC${g};
|
|
`,g+1<u)){let y=s%2===0?v.nearestLargerEven(o):o;o%2===0&&s%2===1||o%2!==0&&s%2!==1?(d+=`
|
|
xCOffset = xC + imod(pads[1], 2) + ${y};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
`,o>1?d+=`
|
|
xCOffset -= 2;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
xC${g+1} = vec4(previous.zw, xTexelC${g+1}.xy);
|
|
} else {
|
|
xC${g+1} = vec4(0.0, 0.0, xTexelC${g+1}.xy);
|
|
}
|
|
`:d+=`
|
|
xC${g+1} = vec4(xTexelC${g}.zw, xTexelC${g+1}.xy);
|
|
`):y===1?d+=`
|
|
xC${g+1} = xTexelC${g};
|
|
`:d+=`
|
|
xCOffset = xC + ${y};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g+1} = xTexelC${g+1};
|
|
`}}else g<u&&(s%2===1?(d+=`
|
|
xCOffset = xC + 1 - strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xCOffset, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xC + 1, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xC + 2 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g} = vec4(xTexelC${g}.zw, xTexelC${g+1}.zw);
|
|
`,g+1<u&&(d+=`
|
|
final = vec4(0.0);
|
|
xCOffset = xC + 1 + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xC${g+1} = vec4(xTexelC${g+1}.xy, final.xy);
|
|
`)):(d+=`
|
|
if(xC >= 0 && xC < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
xCOffset = xC + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g} = vec4(
|
|
xTexelC${g}.xy, xTexelC${g+1}.xy);
|
|
`,g+1<u&&(d+=`
|
|
xC${g+1} = vec4(xTexelC${g}.zw, xTexelC${g+1}.zw);
|
|
`)));g<u&&(d+=`
|
|
wTexel = getW(r, ${g}, d1, d2);
|
|
dotProd += xC${g}.xxzz * vec4(wTexel.xy, wTexel.xy);
|
|
if(d1 + 1 < ${e.inChannels}) {
|
|
dotProd += xC${g}.yyww * vec4(wTexel.zw, wTexel.zw);
|
|
}
|
|
`,g+1<u&&(d+=`
|
|
wTexel = getW(r, ${g+1}, d1, d2);
|
|
dotProd += xC${g+1}.xxzz * vec4(wTexel.xy, wTexel.xy);
|
|
if(d1 + 1 < ${e.inChannels}) {
|
|
dotProd += xC${g+1}.yyww * vec4(wTexel.zw, wTexel.zw);
|
|
}
|
|
`))}d+=`
|
|
}
|
|
`,d+=`
|
|
}
|
|
`,d+=`
|
|
}
|
|
`;let c="",h="";n&&(a?c=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?c=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:c=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,h="result = activation(result);");let m=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${c}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
|
|
vec4 dotProd = vec4(0.000000000000001);
|
|
|
|
${d}
|
|
|
|
vec4 result = dotProd - vec4(0.000000000000001);
|
|
${m}
|
|
${h}
|
|
setOutput(result);
|
|
}
|
|
`}},uQ=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=_n(this.outputShape.length);let{dataFormat:n}=t,a=Cn(),r=n==="channelsLast",s=r?1:2,i=r?2:3,o=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${e[2]} && pos < ${e[1]}) {`,l="";for(let u=0;u<=1;u++)for(let p=0;p<=1;p++)l+=`
|
|
blockIndex = rc.z + ${p};
|
|
pos = rc.y + ${u};
|
|
|
|
${o}
|
|
offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];
|
|
d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);
|
|
|
|
if(d0 < inputShape[${s}] && d0 >= 0) {
|
|
// Use custom imod instead mod. On Intel GPU, mod may generate
|
|
// unexpected value.
|
|
// https://github.com/tensorflow/tfjs/issues/5447
|
|
offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];
|
|
d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /
|
|
inChannels);
|
|
|
|
if(d1 < inputShape[${i}] && d1 >= 0) {
|
|
|
|
ch = imod(pos, inChannels);
|
|
|
|
if (${r}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${u*2+p}] = getChannel(
|
|
getA(rc.x, d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${u*2+p}] = getChannel(
|
|
getA(rc.x, ch, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;this.userCode=`
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0);
|
|
|
|
int blockIndex, pos, offsetY, d0, offsetX, d1, ch;
|
|
vec2 innerDims;
|
|
|
|
${l}
|
|
|
|
${a.output} = result;
|
|
}
|
|
`}};function Bh(e,t){let n=e.length;return n>=3?t?[...e.slice(0,-3),e[n-3]*e[n-2],e[n-1]]:[...e.slice(0,-3),e[n-3],e[n-2]*e[n-1]]:!t&&n===1&&e[0]>1?[e[0],1]:null}function tE({x:e,filter:t,convInfo:n,backend:a,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=a.texData.get(e.dataId),p=n.inChannels,d=l[0]*l[1]*l[2],c=n.outChannels,h=n.dataFormat==="channelsLast",m=!1,f=!1,g,y=[];if(s!=null){let b=Bh(s.shape,h);b!=null&&(s=de({inputs:{x:s},backend:a,attrs:{shape:b}}),y.push(s))}if(r!=null){let b=Bh(r.shape,h);b!=null&&(r=de({inputs:{x:r},backend:a,attrs:{shape:b}}),y.push(r))}if(!((d===1||c===1)&&p>j_)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let b=l[0]*l[1]*(l[2]+1),x={dataId:e.dataId,shape:[1,b,n.inChannels],dtype:e.dtype},w=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(Jp(u.shape,x.shape),()=>`packed reshape ${u.shape} to ${x.shape} isn't free`);let I=de({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}});y.push(I);let T=Wh({a:x,b:I,backend:a,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),C=a.texData.get(T.dataId);v.assert(C.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=w,C.shape=n.outShape,g=ta({inputs:{x:T},backend:a}),g.shape=n.outShape,y.push(T)}else{let b=n.outHeight*n.outWidth,x=de({inputs:{x:e},backend:a,attrs:{shape:h?[n.batchSize,b,n.inChannels]:[n.batchSize,n.inChannels,b]}}),w=de({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}}),I=Wh({a:h?x:w,b:h?w:x,transposeA:!h,transposeB:f,backend:a,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=de({inputs:{x:I},backend:a,attrs:{shape:n.outShape}}),y.push(x),y.push(w),y.push(I)}for(let b of y)a.disposeIntermediateTensorInfo(b);return g}function nE({x:e,filter:t,convInfo:n,backend:a,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,outWidth:d,outHeight:c,dataFormat:h}=n,m=h==="channelsLast",f=l*u*p,g=c*d,y=[n.batchSize,f,g],b=!0,x=!1,w=[];if(s!=null){let K=Bh(s.shape,m);K!=null&&(s=de({inputs:{x:s},backend:a,attrs:{shape:K}}),w.push(s))}if(r!=null){let K=Bh(r.shape,m);K!=null&&(r=de({inputs:{x:r},backend:a,attrs:{shape:K}}),w.push(r))}let I=de({inputs:{x:t},backend:a,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});w.push(I);let T=new uQ(y,n),C=[e.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],E=a.runWebGLProgram(T,[e],"float32",C),$=de({inputs:{x:E},backend:a,attrs:{shape:y}});w.push(E),w.push($);let R=r!=null,F=s!=null,S=o==="leakyrelu",M=o?Qp(o,!0):null,B=new q_(m?$.shape:I.shape,m?I.shape:$.shape,m?[n.batchSize,g,n.outChannels]:[n.batchSize,n.outChannels,g],b,x,R,M,F,S),U=m?[$,I]:[I,$];if(r&&U.push(r),F&&U.push(s),S){let K=a.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));U.push(K),w.push(K)}let G=a.runWebGLProgram(B,U,"float32"),j=de({inputs:{x:G},backend:a,attrs:{shape:n.outShape}});w.push(G);for(let K of w)a.disposeIntermediateTensorInfo(K);return j}function pQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a,d=N.convertConv2DDataFormat(l),c=N.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,d),h;if(c.filterHeight===1&&c.filterWidth===1&&c.dilationHeight===1&&c.dilationWidth===1&&c.strideHeight===1&&c.strideWidth===1&&(c.padInfo.type==="SAME"||c.padInfo.type==="VALID"))h=tE({x:r,filter:s,convInfo:c,backend:n});else if(c.strideWidth<=2&&d==="channelsLast"&&H().getBool("WEBGL_EXP_CONV")){let f=new eE(c),g=[[c.padInfo.top,c.padInfo.left],[c.strideHeight,c.strideWidth],[c.dilationHeight,c.dilationWidth],[c.inHeight,c.inWidth]];h=n.runWebGLProgram(f,[r,s],"float32",g)}else if(H().getBool("WEBGL_CONV_IM2COL"))h=nE({x:r,filter:s,convInfo:c,backend:n});else{let f=new Q_(c);h=n.runWebGLProgram(f,[r,s],"float32")}let m=de({inputs:{x:h},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(h),m}var cQ={kernelName:Ii,backendName:"webgl",kernelFunc:pQ},dQ=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,a=e.padInfo.top,r=e.padInfo.left,s=e.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 < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${a};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${r};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
if (${s}) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},hQ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,u=s?2:3,p=s?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[${p}];
|
|
|
|
ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - 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) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
|
|
if (${s}) {
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
} else {
|
|
float xValue = getDy(batch, d2, idyR, idyC);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},mQ=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,a=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.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 < ${e.batchSize}; b++) {
|
|
for (int yF = 0; yF < ${e.outDepth}; yF++) {
|
|
int xF = wF + yF * ${t} - ${r};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${n} - ${s};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${a} - ${i};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yF, yR, yC, d2);
|
|
float xValue = getX(b, xF, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},fQ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,a=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=a-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${o}, ${l}, ${u});
|
|
|
|
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) / ${r}.0;
|
|
|
|
if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyF = int(dyF);
|
|
|
|
int wFPerm = ${t} - 1 - wF;
|
|
|
|
for (int wR = 0; wR < ${n}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${n} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${a}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${a} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
float xValue = getDy(batch, idyF, idyR, idyC, d2);
|
|
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function gQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=a,d=N.convertConv2DDataFormat(l),c=N.computeConv2DInfo(r.shape,p,i,1,o,u,!1,d),h=new dQ(c);return n.runWebGLProgram(h,[r,s],"float32")}var yQ={kernelName:em,backendName:"webgl",kernelFunc:gQ};function bQ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=a,d=N.convertConv2DDataFormat(u),c=N.computeConv2DInfo(i,s.shape,o,1,l,p,!1,d),h=new hQ(c);return n.runWebGLProgram(h,[r,s],"float32")}var xQ={kernelName:Si,backendName:"webgl",kernelFunc:bQ};function vQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=N.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new lQ(u);return n.runWebGLProgram(p,[r,s],"float32")}var wQ={kernelName:oc,backendName:"webgl",kernelFunc:vQ};function kQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=a,u=N.computeConv3DInfo(r.shape,l,i,1,o),p=new mQ(u);return n.runWebGLProgram(p,[r,s],"float32")}var IQ={kernelName:tm,backendName:"webgl",kernelFunc:kQ};function SQ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=a,u=N.computeConv3DInfo(l,s.shape,o,1,i),p=new fQ(u);return n.runWebGLProgram(p,[r,s],"float32")}var TQ={kernelName:nm,backendName:"webgl",kernelFunc:SQ},NQ=Bu+`
|
|
return cos(x);
|
|
`,CQ=Ye({opSnippet:NQ}),_Q={kernelName:Ti,backendName:"webgl",kernelFunc:CQ},EQ=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,AQ=Ye({opSnippet:EQ}),$Q={kernelName:Ni,backendName:"webgl",kernelFunc:AQ},FQ=class{constructor(e,t,n,a,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[p,d]=n;this.outputShape=[u,p,d,l];let c=a==="bilinear"?1:0,[h,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[b,x,w]=d>1?[`${(o-1)/(d-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=`
|
|
const float height_ratio = float(${f});
|
|
const float width_ratio = float(${b});
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int y = coords[1];
|
|
int x = coords[2];
|
|
int d = coords[3];
|
|
|
|
// get box vals
|
|
float y1 = getBoxes(b,0);
|
|
float x1 = getBoxes(b,1);
|
|
float y2 = getBoxes(b,2);
|
|
float x2 = getBoxes(b,3);
|
|
|
|
// get image in batch index
|
|
int bInd = round(getBoxInd(b));
|
|
if(bInd < 0 || bInd >= ${s}) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = ${g};
|
|
float width_scale = ${x};
|
|
|
|
float in_y = ${y};
|
|
if( in_y < 0.0 || in_y > ${h} ) {
|
|
setOutput(float(${r}));
|
|
return;
|
|
}
|
|
float in_x = ${w};
|
|
if( in_x < 0.0 || in_x > ${m} ) {
|
|
setOutput(float(${r}));
|
|
return;
|
|
}
|
|
|
|
vec2 sourceFracIndexCR = vec2(in_x,in_y);
|
|
if(${c} == 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);
|
|
}
|
|
}
|
|
`}},RQ=e=>{let{inputs:t,backend:n,attrs:a}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=a,p=new FQ(r.shape,s.shape,o,l,u);return n.runWebGLProgram(p,[r,s,i],"float32")},DQ={kernelName:Dl,backendName:"webgl",kernelFunc:RQ},tc;(function(e){e.Prod="*",e.Sum="+"})(tc||(tc={}));var nI=class{constructor(e,t,n,a){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let r=this.outputShape.length,s=this.op===tc.Prod?"1.0":"0.0",i=n?s:`getX(${aI(r,"coords",this.op)})`,o=this.outputShape[this.outputShape.length-1],l="",u="";n?(l=a?`end != ${o-1}`:"end != 0",u=a?"end + 1":"end - 1"):(l=a?`end + pow2 < ${o}`:"end >= pow2",u=a?"end + pow2":"end - pow2"),this.userCode=`
|
|
void main() {
|
|
${gt(r)} coords = getOutputCoords();
|
|
int end = ${rI(r,"coords",this.op)};
|
|
float val = ${i};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${l}) {
|
|
int idx = ${u};
|
|
${rI(r,"coords",this.op)} = idx;
|
|
val ${this.op}= getX(${aI(r,"coords",this.op)});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}};function aI(e,t,n){if(e===1)return`${t}`;if(e===2)return`${t}.x, ${t}.y`;if(e===3)return`${t}.x, ${t}.y, ${t}.z`;if(e===4)return`${t}.x, ${t}.y, ${t}.z, ${t}.w`;throw new Error(`Cumulative ${n} for rank ${e} is not yet supported`)}function rI(e,t,n){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw new Error(`Cumulative ${n} for rank ${e} is not yet supported`)}function aE(e,t,n,a,r,s){let i=t.shape.length,o=N.getAxesPermutation([a],i),l=t;o!=null&&(l=In({inputs:{x:t},backend:n,attrs:{perm:o}}));let u=N.getInnerMostAxes(1,i)[0];if(u!==i-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${a}`);let p=l.shape[u],d=ta({inputs:{x:l},backend:n});for(let c=0;c<=Math.ceil(Math.log2(p))-1;c++){let h=new nI(e,l.shape,!1,s),m=[[c]],f=d;d=n.runWebGLProgram(h,[d],d.dtype,m),n.disposeIntermediateTensorInfo(f)}if(r){let c=new nI(e,l.shape,r,s),h=d;d=n.runWebGLProgram(c,[d],d.dtype),n.disposeIntermediateTensorInfo(h)}if(o!=null){let c=N.getUndoAxesPermutation(o),h=In({inputs:{x:d},backend:n,attrs:{perm:c}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(l),h}return d}function MQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;return aE(tc.Prod,r,n,s,i,o)}var PQ={kernelName:Rl,backendName:"webgl",kernelFunc:MQ};function OQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;return aE(tc.Sum,r,n,s,i,o)}var LQ={kernelName:Ci,backendName:"webgl",kernelFunc:OQ};function zQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=a;if(r.shape.length===1){let l=n.readSync(r.dataId),u=n.readSync(s.dataId),p=P_(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=n.bufferSync(r),u=n.bufferSync(s),p=XZ(l,u,i,o);return n.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var WQ={kernelName:am,backendName:"webgl",kernelFunc:zQ},BQ=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=[],this.outputShape=e,this.blockSize=t,this.dataFormat=n,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 / ${t};
|
|
int offset_h = imod(h, ${t});
|
|
int in_w = w / ${t};
|
|
int offset_w = imod(w, ${t});
|
|
int offset_d = (offset_h * ${t} + offset_w) *
|
|
${this.getOutputDepthSize()};
|
|
int in_d = d + offset_d;
|
|
|
|
float result = ${this.getInputSamplingString()};
|
|
setOutput(result);
|
|
}
|
|
`}getHeightCoordString(){return this.dataFormat==="NHWC"?"coords[1]":"coords[2]"}getWidthCoordString(){return this.dataFormat==="NHWC"?"coords[2]":"coords[3]"}getDepthCoordString(){return this.dataFormat==="NHWC"?"coords[3]":"coords[1]"}getOutputDepthSize(){return this.dataFormat==="NHWC"?this.outputShape[3]:this.outputShape[1]}getInputSamplingString(){return this.dataFormat==="NHWC"?"getX(b, in_h, in_w, in_d)":"getX(b, in_d, in_h, in_w)"}};function VQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockSize:s,dataFormat:i}=a,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],d=l*s,c=u*s,h=p/(s*s),m=i==="NHWC"?[o,d,c,h]:[o,h,d,c],f=new BQ(m,s,i);return n.runWebGLProgram(f,[r],r.dtype)}var UQ={kernelName:Ml,backendName:"webgl",kernelFunc:VQ},rE=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=_n(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";n&&(a?l=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?l=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:l=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,u="result = activation(result);");let p=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${l}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${o};
|
|
int q = d2 - d1 * ${o};
|
|
|
|
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 < ${s}; wR++) {
|
|
int xR = xRCorner + wR * dilations[0];
|
|
|
|
if (xR < 0 || xR >= inDims[0]) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${i}; wC++) {
|
|
int xC = xCCorner + wC * dilations[1];
|
|
|
|
if (xC < 0 || xC >= inDims[1]) {
|
|
continue;
|
|
}
|
|
|
|
float xVal = getX(batch, xR, xC, d1);
|
|
float wVal = getW(wR, wC, d1, q);
|
|
dotProd += xVal * wVal;
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${p}
|
|
${u}
|
|
setOutput(result);
|
|
}
|
|
`}},sE=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=_n(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,p=e.filterWidth,d=p,c=`
|
|
int xR; int xC; int xCOffset;
|
|
vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g<p;g++)c+=`
|
|
vec4 xTexelC${g*2};
|
|
int xTexelC${g*2}Ready;
|
|
vec4 xTexelC${g*2+1};
|
|
int xTexelC${g*2+1}Ready;
|
|
vec4 xC${g};`;c+=`
|
|
for (int r = 0; r < ${u}; r++) {
|
|
`;for(let g=0;g<p;g++)c+=`
|
|
xTexelC${g*2} = vec4(0.0);
|
|
xTexelC${g*2}Ready = 0;
|
|
xTexelC${g*2+1} = vec4(0.0);
|
|
xTexelC${g*2+1}Ready = 0;
|
|
xC${g} = vec4(0.0);`;c+=`
|
|
xR = xRCorner + r * dilations[0];
|
|
if (xR >=0 && xR < inDims[0]) {
|
|
`;for(let g=0;g<(d+1)/2;g++){let y=g*2;if(c+=`
|
|
xC = xCCorner + ${y*l};
|
|
`,o===1){if(y<p&&(i%2===1?(c+=`
|
|
xCOffset = xC + 1;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
`,l===1&&y>0?c+=`
|
|
xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy);
|
|
`:c+=`
|
|
xCOffset = xC + 1 - 2;
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
previous.zw = vec2(0.0);
|
|
}
|
|
|
|
xC${y} = vec4(previous.zw, xTexelC${y}.xy);
|
|
} else {
|
|
xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy);
|
|
}
|
|
`):c+=`
|
|
if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
xC${y} = xTexelC${y};
|
|
`,y+1<p)){let b=i%2===0?v.nearestLargerEven(l):l;l%2===0&&i%2===1||l%2!==0&&i%2!==1?(c+=`
|
|
xCOffset = xC + imod(pads[1], 2) + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
`,l>1?c+=`
|
|
xCOffset -= 2;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
xC${y+1} = vec4(previous.zw, xTexelC${y+1}.xy);
|
|
} else {
|
|
xC${y+1} = vec4(0.0, 0.0, xTexelC${y+1}.xy);
|
|
}
|
|
`:c+=`
|
|
xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy);
|
|
`):b===1?c+=`
|
|
xC${y+1} = xTexelC${y};
|
|
`:c+=`
|
|
xCOffset = xC + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y+1} = xTexelC${y+1};
|
|
`}}else y<p&&(i%2===1?(c+=`
|
|
xCOffset = xC + 1 - strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xCOffset, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xC + 1, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xC + 2 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw);
|
|
`,y+1<p&&(c+=`
|
|
final = vec4(0.0);
|
|
xCOffset = xC + 1 + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy);
|
|
`)):(c+=`
|
|
if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
xCOffset = xC + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y} = vec4(
|
|
xTexelC${y}.xy, xTexelC${y+1}.xy);
|
|
`,y+1<p&&(c+=`
|
|
xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw);
|
|
`)));y<p&&(c+=`
|
|
wTexel = getW(r, ${y}, d1, q);
|
|
dotProd += xC${y} * vec4(wTexel.xz, wTexel.xz);
|
|
`,y+1<p&&(c+=`
|
|
wTexel = getW(r, ${y+1}, d1, q);
|
|
dotProd += xC${y+1} * vec4(wTexel.xz, wTexel.xz);
|
|
`))}c+=`
|
|
}
|
|
`,c+=`
|
|
}
|
|
`;let h="",m="";n&&(a?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:h=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,m="result = activation(result);");let f=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${h}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${s};
|
|
int q = d2 - d1 * ${s};
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
|
|
vec4 dotProd = vec4(0.000000000000001);
|
|
|
|
${c}
|
|
|
|
vec4 result = dotProd - vec4(0.000000000000001);
|
|
${f}
|
|
${m}
|
|
setOutput(result);
|
|
}
|
|
`}};function GQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=a,p=l;p==null&&(p=[1,1]),v.assert(N.eitherStridesOrDilationsAreOne(i,p),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let d=N.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),c;H().getBool("WEBGL_PACK_DEPTHWISECONV")&&d.strideWidth<=2&&d.outChannels/d.inChannels===1?c=new sE(d):c=new rE(d);let h=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];return n.runWebGLProgram(c,[r,s],"float32",h)}var HQ={kernelName:_i,backendName:"webgl",kernelFunc:GQ},qQ=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,a=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int dm = coords.w;
|
|
int d2 = d1 * ${s} + dm;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
// TO DO: Vec4 over the batch size
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${a};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${r};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},jQ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
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) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
// TO DO: Vec4 over the channelMul
|
|
for (int dm = 0; dm < ${o}; dm++) {
|
|
int d2 = d1 * ${o} + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function KQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=a,d=N.computeConv2DInfo(r.shape,p,i,o,l,u,!0),c=new qQ(d);return n.runWebGLProgram(c,[r,s],"float32")}var XQ={kernelName:rm,backendName:"webgl",kernelFunc:KQ};function YQ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=a,d=N.computeConv2DInfo(p,s.shape,i,o,l,u,!0),c=new jQ(d);return n.runWebGLProgram(c,[r,s],"float32")}var ZQ={kernelName:sm,backendName:"webgl",kernelFunc:YQ},JQ=class{constructor(e){this.variableNames=["X"],this.outputShape=[e,e],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
float val = coords[0] == coords[1] ? getX(coords[0]) : 0.0;
|
|
setOutput(val);
|
|
}
|
|
`}};function QQ(e){let{inputs:t,backend:n}=e,{x:a}=t,r=[...a.shape,...a.shape],s=v.sizeFromShape(a.shape),i=de({inputs:{x:a},backend:n,attrs:{shape:[s]}}),o=new JQ(s),l=n.runWebGLProgram(o,[i],i.dtype),u=de({inputs:{x:l},backend:n,attrs:{shape:r}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var eee={kernelName:im,backendName:"webgl",kernelFunc:QQ},tee=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:a,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:p,left:d}=a;this.userCode=`
|
|
const ivec2 strides = ivec2(${r}, ${s});
|
|
const ivec2 pads = ivec2(${p}, ${d});
|
|
const float neg_infinity = -3.4e38;
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.w;
|
|
ivec2 outTopLeftCorner =
|
|
coords.yz * strides - pads;
|
|
int hBeg = outTopLeftCorner.x;
|
|
int wBeg = outTopLeftCorner.y;
|
|
|
|
float curVal = neg_infinity;
|
|
for (int h = 0; h < ${i}; h++) {
|
|
int hIn = hBeg + h * ${l};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${o}; w++) {
|
|
int wIn = wBeg + w * ${u};
|
|
|
|
if (wIn >= 0 && wIn < ${n}) {
|
|
float xVal = getX(batch, hIn, wIn, d1);
|
|
float wVal = getW(h, w, d1);
|
|
|
|
float val = xVal + wVal;
|
|
if (val > curVal) {
|
|
curVal = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = curVal;
|
|
setOutput(result);
|
|
}
|
|
`}};function nee(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=N.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,d=new tee(u);p=n.runWebGLProgram(d,[r,s],"float32");let c=de({inputs:{x:p},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(p),c}var aee={kernelName:lc,backendName:"webgl",kernelFunc:nee};function ree(e){let{inputs:t,backend:n,attrs:a}=e,{equation:r}=a,s=t,{allDims:i,summedDims:o,idDims:l}=N.decodeEinsumEquation(r,s.length);N.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=N.getEinsumComputePath(o,l),d=p.length,c=null,h=i.length,m=[];for(let f=0;f<d;++f){for(let g of p[f]){let{permutationIndices:y,expandDims:b}=N.getEinsumPermutation(h,l[g]),x;N.isIdentityPermutation(y)?x=s[g]:(x=In({inputs:{x:s[g]},backend:n,attrs:{perm:y}}),m.push(x));let w=x.shape.slice();for(let I=0;I<b.length;++I)w.splice(b[I],0,1);v.arraysEqual(x.shape,w)||(x=de({inputs:{x},backend:n,attrs:{shape:w}}),m.push(x)),c===null?c=x:(c=t1({inputs:{a:x,b:c},backend:n}),m.push(c))}f<d-1&&(u[f]>=0&&(c=$f({inputs:{x:c},backend:n,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(c)),h--)}for(let f of m)f!==c&&n.disposeIntermediateTensorInfo(f);return c}var see={kernelName:om,backendName:"webgl",kernelFunc:ree},iee="return (x >= 0.0) ? x : (exp(x) - 1.0);",oee=`
|
|
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;
|
|
`,lee=Ye({opSnippet:iee,packedOpSnippet:oee}),uee={kernelName:Ai,backendName:"webgl",kernelFunc:lee},pee="return (b >= 1.0) ? a : a * (b + 1.0);",cee=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,dee=e=>{let{inputs:t,backend:n}=e,{dy:a,y:r}=t,s=H().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new td(cee,a.shape,r.shape):new xl(pee,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],a.dtype)},hee={kernelName:lm,backendName:"webgl",kernelFunc:dee},mee=`
|
|
return vec4(equal(a, b));
|
|
`,fee="return float(a == b);",gee=cn({opSnippet:fee,packedOpSnippet:mee,dtype:"bool",cpuKernelImpl:QZ}),yee={kernelName:Ol,backendName:"webgl",kernelFunc:gee},bee=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${N.ERF_P};
|
|
float a1 = ${N.ERF_A1};
|
|
float a2 = ${N.ERF_A2};
|
|
float a3 = ${N.ERF_A3};
|
|
float a4 = ${N.ERF_A4};
|
|
float a5 = ${N.ERF_A5};
|
|
|
|
float sign = sign(x);
|
|
x = abs(x);
|
|
float t = 1.0 / (1.0 + p * x);
|
|
return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));
|
|
`,xee=Ye({opSnippet:bee}),vee={kernelName:Pl,backendName:"webgl",kernelFunc:xee},wee=Bu+`
|
|
return exp(x);
|
|
`,kee=`
|
|
vec4 result = exp(x);
|
|
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;
|
|
`,iE=Ye({opSnippet:wee,packedOpSnippet:kee,cpuKernelImpl:e7,dtype:"float32"}),Iee={kernelName:$i,backendName:"webgl",kernelFunc:iE};function px(e){let{inputs:t,attrs:n,backend:a}=e,{dim:r}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(v.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),de({inputs:{x:s},backend:a,attrs:{shape:o}})}var See={kernelName:Ll,backendName:"webgl",kernelFunc:px},sI="return exp(x) - 1.0;",Tee=Ye({opSnippet:sI,packedOpSnippet:sI,cpuKernelImpl:t7}),Nee={kernelName:zl,backendName:"webgl",kernelFunc:Tee},iI=class{constructor(e,t,n){this.variableNames=["real","imag"];let a=t[1];this.outputShape=t;let r=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${a}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=`
|
|
const float exponentMultiplier = ${r};
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
${i}
|
|
}
|
|
|
|
float mulMatDFT(int batch, int index) {
|
|
float indexRatio = float(index) / float(${a});
|
|
float exponentMultiplierTimesIndexRatio =
|
|
exponentMultiplier * indexRatio;
|
|
|
|
float result = 0.0;
|
|
|
|
for (int i = 0; i < ${a}; i++) {
|
|
// x = (-2|2 * PI / N) * index * i;
|
|
float x = exponentMultiplierTimesIndexRatio * float(i);
|
|
float expR = cos(x);
|
|
float expI = sin(x);
|
|
float real = getReal(batch, i);
|
|
float imag = getImag(batch, i);
|
|
|
|
result +=
|
|
unaryOpComplex(real, expR, imag, expI) / ${s};
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`}};function oE(e,t,n){let a=n.texData.get(e.dataId),r=v.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=de({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}),l=o.shape,u=new iI("real",l,t),p=new iI("imag",l,t),d=[{dataId:a.complexTensorInfos.real.dataId,dtype:a.complexTensorInfos.real.dtype,shape:l},{dataId:a.complexTensorInfos.imag.dataId,dtype:a.complexTensorInfos.imag.dtype,shape:l}],c=n.runWebGLProgram(u,d,"float32"),h=n.runWebGLProgram(p,d,"float32"),m=Ns({inputs:{real:c,imag:h},backend:n});n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h);let f=de({inputs:{x:m},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(m),f}function Cee(e){let{inputs:t,backend:n}=e,{input:a}=t;return oE(a,!1,n)}var _ee={kernelName:um,backendName:"webgl",kernelFunc:Cee},Eee=class{constructor(e,t){this.outputShape=[],this.customUniforms=[{name:"value",type:"float"}],this.variableNames=["x"],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
// Input can be obtained from uniform value.
|
|
setOutput(value);
|
|
}
|
|
`}};function ad(e){let{backend:t,attrs:n}=e,{shape:a,value:r}=n,{dtype:s}=n;if(s=s||v.inferDtype(r),s==="string"){let i=v.getArrayFromDType(s,v.sizeFromShape(a));return i.fill(r),t.makeTensorInfo(a,s,i)}else{let i=new Eee(a,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var Aee={kernelName:uc,backendName:"webgl",kernelFunc:ad},$ee=class{constructor(e){this.variableNames=["Image"],this.outputShape=[];let t=e[2];this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
|
|
int coordX = ${t} - x - 1;
|
|
float outputValue;
|
|
if(coordX >= 0 && coordX < ${t}) {
|
|
outputValue = getImage(coords[0], coords[1], coordX, coords[3]);
|
|
} else {
|
|
outputValue = getImage(coords[0], coords[1], coords[2], coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},Fee={kernelName:Wl,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,a=t,r=new $ee(n.shape);return a.runWebGLProgram(r,[n],n.dtype)}},oI="return floor(x);",Ree=Ye({opSnippet:oI,packedOpSnippet:oI,cpuKernelImpl:n7}),Dee={kernelName:Fi,backendName:"webgl",kernelFunc:Ree},Mee=`
|
|
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;
|
|
}
|
|
`,Pee=`
|
|
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);
|
|
`,Oee=cn({opSnippet:Mee,packedOpSnippet:Pee,dtype:"int32"}),Lee={kernelName:Ri,backendName:"webgl",kernelFunc:Oee},zee=class{constructor(e){this.variableNames=["A"];let t=Cn(),[n,a]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${a}.0, ${n}.0);
|
|
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
setOutput(floor(value * 255.0 + 0.5));
|
|
}
|
|
`}},Wee=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=Cn(),[n,a]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for(int row=0; row<=1; row++) {
|
|
for(int col=0; col<=1; col++) {
|
|
texC = coords[1] + row;
|
|
depth = coords[2] + col;
|
|
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}.0, ${n}.0);
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
result[row * 2 + col] = floor(value * 255.0 + 0.5);
|
|
}
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},Bee={kernelName:yh,backendName:"webgl",kernelFunc:Vee},Ko,yb=H().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Vee(e){let{inputs:t,backend:n,attrs:a}=e,{pixels:r}=t,{numChannels:s}=a,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[u,l],d=[u,l,s];if(o||i){let f=H().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ko==null||f!==yb)&&(yb=f,Ko=document.createElement("canvas").getContext("2d",{willReadFrequently:yb})),Ko.canvas.width=l,Ko.canvas.height=u,Ko.drawImage(r,0,0,l,u),r=Ko.canvas}let c=n.makeTensorInfo(p,"int32");n.texData.get(c.dataId).usage=pa.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(c.dataId),r);let h=H().getBool("WEBGL_PACK")?new Wee(d):new zee(d),m=n.runWebGLProgram(h,[c],"int32");return n.disposeData(c.dataId),m}function Uee(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=N.convertConv2DDataFormat(p),g=N.computeConv2DInfo(r.shape,s.shape,l,d,u,c,!1,f),y,b=[],x=i!=null,w=o!=null,I=h==="leakyrelu",T=()=>{let E=[r,s],$=(R,F)=>{if(F==="NCHW"&&R.shape.length===1&&R.shape[0]!==1){let S=de({inputs:{x:R},backend:n,attrs:{shape:[R.shape[0],1,1]}});return b.push(S),S}return R};if(x&&E.push($(i,p)),w&&E.push($(o,p)),I){let R=n.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));E.push(R),b.push(R)}return E};if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=tE({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&H().getBool("WEBGL_EXP_CONV")){let E=h?Qp(h,!0):null,$=new eE(g,x,E,w,I),R=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],F=T();y=n.runWebGLProgram($,F,"float32",R)}else if(H().getBool("WEBGL_CONV_IM2COL"))y=nE({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let E=h?Qp(h,!1):null,$=new Q_(g,x,E,w,I),R=T();y=n.runWebGLProgram($,R,"float32")}let C=de({inputs:{x:y},backend:n,attrs:{shape:g.outShape}});return b.push(y),b.forEach(E=>n.disposeIntermediateTensorInfo(E)),C}var Gee={kernelName:ei,backendName:"webgl",kernelFunc:Uee};function Hee(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:d,activation:c,leakyreluAlpha:h}=a,m=[],f=p;f==null&&(f=[1,1]),v.assert(N.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=N.computeConv2DInfo(r.shape,s.shape,l,f,u,d,!0),y=H().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=c?Qp(c,y):null,x=[r,s],w=i!=null,I=o!=null,T=c==="leakyrelu";if(w&&x.push(i),I&&x.push(o),T){let R=n.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));x.push(R),m.push(R)}let C;y?C=new sE(g,w,b,I,T):C=new rE(g,w,b,I,T);let E=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],$=n.runWebGLProgram(C,x,"float32",E);return m.forEach(R=>n.disposeIntermediateTensorInfo(R)),$}var qee={kernelName:ti,backendName:"webgl",kernelFunc:Hee},jee=class{constructor(e,t,n,a){this.sliceDim=e,this.strides=t,this.paramsShape=a,this.variableNames=["x","indices"],this.outputShape=n;let r=gt(n.length),s=`
|
|
int index;`;for(let i=0;i<this.sliceDim;i++)s+=`
|
|
index = round(getIndices(coords[0], ${i}));
|
|
out_of_bounds = out_of_bounds || index < 0;
|
|
out_of_bounds = out_of_bounds || index >= ${this.paramsShape[i]};
|
|
flattenIndex += index * ${this.strides[i]};`;this.userCode=`
|
|
void main() {
|
|
${r} coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
bool out_of_bounds = false;
|
|
|
|
${s}
|
|
|
|
setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1]));
|
|
}
|
|
`}};function Kee(e){let{inputs:t,backend:n}=e,{params:a,indices:r}=t,s=r.shape,i=s[s.length-1],o=v.sizeFromShape(a.shape),[l,u,p,d]=N.prepareAndValidate(a,r),c=de({inputs:{x:r},backend:n,attrs:{shape:[u,i]}}),h=de({inputs:{x:a},backend:n,attrs:{shape:[v.sizeFromShape(a.shape)/p,p]}});if(n.shouldExecuteOnCPU([a,r])||a.dtype==="string"){let y=n.readSync(r.dataId),b=n.bufferSync(a),x=a7(y,b,a.dtype,u,i,p,d,a.shape,o);return n.makeTensorInfo(l,a.dtype,x.values)}let m=new jee(i,d,[u,p],a.shape),f=n.runWebGLProgram(m,[h,c],h.dtype),g=de({inputs:{x:f},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),g}var Xee={kernelName:Vl,backendName:"webgl",kernelFunc:Kee},Yee=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=gt(this.rank),a=Zee(e,2);this.userCode=`
|
|
void main() {
|
|
${n} resRC = getOutputCoords();
|
|
int index = int(getIndices(resRC.x, resRC.z));
|
|
float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;
|
|
setOutput(inBounds * getA(${a}));
|
|
}
|
|
`}};function Zee(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let r=0;r<e.length;r++)r===2?a.push("index"):a.push(`${n[r]}`);return a.join()}function lE(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=a,l=v.parseAxisParam(i,r.shape)[0];if(H().get("DEBUG")){let b=n.readSync(s.dataId),x=r.shape[l];for(let w=0;w<b.length;++w){let I=b[w];v.assert(I<=x-1&&I>=0,()=>`GatherV2: the index value ${I} is not in [0, ${x-1}]`)}}let u=N.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),d=[],c=de({inputs:{x:r},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=de({inputs:{x:s},backend:n,attrs:{shape:[u.batchSize,p/u.batchSize]}});d.push(c),d.push(h);let m=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(n.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let b=n.bufferSync(h),x=n.bufferSync(c),w=r7(x,b,m);return d.forEach(I=>n.disposeIntermediateTensorInfo(I)),n.makeTensorInfo(u.outputShape,w.dtype,w.values)}let f=new Yee(c.shape,m),g=n.runWebGLProgram(f,[c,h],c.dtype);d.push(g);let y=de({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return d.forEach(b=>n.disposeIntermediateTensorInfo(b)),y}var Jee={kernelName:Bl,backendName:"webgl",kernelFunc:lE},Qee="return float(a > b);",ete=`
|
|
return vec4(greaterThan(a, b));
|
|
`,tte=cn({opSnippet:Qee,packedOpSnippet:ete,cpuKernelImpl:s7,dtype:"bool"}),nte={kernelName:Ul,backendName:"webgl",kernelFunc:tte},ate="return float(a >= b);",rte=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,ste=cn({opSnippet:ate,packedOpSnippet:rte,dtype:"bool",cpuKernelImpl:i7}),ite={kernelName:Mi,backendName:"webgl",kernelFunc:ste};function ote(e){let{inputs:t,backend:n}=e,{input:a}=t;return oE(a,!0,n)}var lte={kernelName:pm,backendName:"webgl",kernelFunc:ote},ute="return float(!isnan(x) && !isinf(x));",pte=Ye({opSnippet:ute,dtype:"bool"}),cte={kernelName:Gl,backendName:"webgl",kernelFunc:pte},dte="return float(isinf(x));",hte=Ye({opSnippet:dte,dtype:"bool"}),mte={kernelName:Hl,backendName:"webgl",kernelFunc:hte},fte="return float(isnan(x));",gte=Ye({opSnippet:fte,dtype:"bool"}),yte={kernelName:Oi,backendName:"webgl",kernelFunc:gte},bte="return float(a < b);",xte=`
|
|
return vec4(lessThan(a, b));
|
|
`,vte=cn({opSnippet:bte,packedOpSnippet:xte,cpuKernelImpl:o7,dtype:"bool"}),wte={kernelName:ql,backendName:"webgl",kernelFunc:vte},kte="return float(a <= b);",Ite=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,Ste=cn({opSnippet:kte,packedOpSnippet:Ite,cpuKernelImpl:l7,dtype:"bool"}),Tte={kernelName:jl,backendName:"webgl",kernelFunc:Ste};function Nte(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=u7(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var Cte={kernelName:dm,backendName:"webgl",kernelFunc:Nte},_te=Bu+`
|
|
return x < 0.0 ? 0./0. : log(x);
|
|
`,Ete=`
|
|
vec4 result = log(x);
|
|
bvec4 isNaN = isnan(x);
|
|
result.r = isNaN.r ? x.r : (x.r < 0.0 ? 0./0. : result.r);
|
|
result.g = isNaN.g ? x.g : (x.g < 0.0 ? 0./0. : result.g);
|
|
result.b = isNaN.b ? x.b : (x.b < 0.0 ? 0./0. : result.b);
|
|
result.a = isNaN.a ? x.a : (x.a < 0.0 ? 0./0. : result.a);
|
|
return result;
|
|
`,Ate=Ye({opSnippet:_te,packedOpSnippet:Ete,cpuKernelImpl:p7}),$te={kernelName:zi,backendName:"webgl",kernelFunc:Ate},Fte=Bu+`
|
|
return log(1.0 + x);
|
|
`,Rte=Ye({opSnippet:Fte}),Dte={kernelName:Kl,backendName:"webgl",kernelFunc:Rte},Mte="return float(a >= 1.0 && b >= 1.0);",Pte=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,Ote=cn({opSnippet:Mte,packedOpSnippet:Pte,dtype:"bool"}),Lte={kernelName:Xl,backendName:"webgl",kernelFunc:Ote},zte="return float(!(x >= 1.0));",Wte=Ye({opSnippet:zte}),Bte={kernelName:Yl,backendName:"webgl",kernelFunc:Wte},Vte="return float(a >= 1.0 || b >= 1.0);",Ute=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,Gte=cn({opSnippet:Vte,packedOpSnippet:Ute,dtype:"bool"}),Hte={kernelName:Zl,backendName:"webgl",kernelFunc:Gte},qte=class{constructor(e,t,n,a,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${a}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,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 <= ${i}) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * ${o};
|
|
setOutput(val);
|
|
}
|
|
`}},jte=class{constructor(e,t,n,a,r){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${a}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,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(${i}));
|
|
|
|
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 * ${o};
|
|
setOutput(result);
|
|
}
|
|
`}},Kte=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a,u=H().getBool("WEBGL_PACK_NORMALIZATION")?new jte(r.shape,s,i,o,l):new qte(r.shape,s,i,o,l);return n.runWebGLProgram(u,[r],r.dtype)},Xte={kernelName:pc,backendName:"webgl",kernelFunc:Kte},Yte=class{constructor(e,t,n,a,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=a,this.beta=r,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(${a}) * norm + float(${n});
|
|
|
|
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(${a})
|
|
* float(${r})
|
|
* getInputImage(b, r, c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * ${r});
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}},Zte=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=a,d=new Yte(r.shape,o,l,u,p);return n.runWebGLProgram(d,[r,s,i],r.dtype)},Jte={kernelName:hm,backendName:"webgl",kernelFunc:Zte};function Qte(e,t,n,a){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=de({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=No(i,e.dtype,"max",a),l=de({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}function uE(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=a,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=N.getAxesPermutation(u,o),d=p!=null,c=n.shouldExecuteOnCPU([r]),h=r;if(d){if(c){let b=n.texData.get(h.dataId).values,x=new Array(o);for(let T=0;T<x.length;T++)x[T]=r.shape[p[T]];let w=Q0(b,r.shape,r.dtype,p,x);h=n.makeTensorInfo(x,r.dtype);let I=n.texData.get(h.dataId);I.values=w}else h=Af(r,p,n);u=N.getInnerMostAxes(u.length,o)}N.assertAxesAreInnerMostDims("max",u,o);let[m,f]=N.computeOutAndReduceShapes(h.shape,u),g=m;i&&(g=N.expandShapeToKeepDim(m,l));let y;if(c){let b=n.texData.get(h.dataId).values,x=c7(b,v.sizeFromShape(f),g,r.dtype);y=n.makeTensorInfo(g,r.dtype);let w=n.texData.get(y.dataId);w.values=x}else y=Qte(h,f,g,n);return d&&n.disposeIntermediateTensorInfo(h),y}var ene={kernelName:Wi,backendName:"webgl",kernelFunc:uE},tne=e1+`
|
|
return max(a, b);
|
|
`,nne=`
|
|
vec4 result = vec4(max(a, b));
|
|
bvec4 isNaNA = isnan(a);
|
|
bvec4 isNaNB = isnan(b);
|
|
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
|
|
`+ed+`
|
|
return result;
|
|
`,ane=cn({opSnippet:tne,packedOpSnippet:nne,cpuKernelImpl:d7}),rne={kernelName:Bi,backendName:"webgl",kernelFunc:ane};function sne(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;Pu(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(N.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=N.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return ta({inputs:{x:r},backend:n});let d=new ec(p,"max",!1);return n.runWebGLProgram(d,[r],r.dtype)}var ine={kernelName:Vi,backendName:"webgl",kernelFunc:sne};function one(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=a,p=[1,1,1],d=N.computePool3DInfo(r.shape,s,i,p,o,u,l),c=new n1(d,"max",!1);return n.runWebGLProgram(c,[r],r.dtype)}var lne={kernelName:cc,backendName:"webgl",kernelFunc:one},une=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,a=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
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 < ${r};
|
|
wR += ${a}) {
|
|
float dyR = float(dyRCorner + wR) / ${t}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${s}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${n}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.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 * ${s} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},pne=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,a=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,p=o-1-e.padInfo.front,d=l-1-e.padInfo.top,c=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=`
|
|
const ivec3 pads = ivec3(${p}, ${d}, ${c});
|
|
|
|
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 < ${o};
|
|
wD += ${r}) {
|
|
float dyD = float(dyDCorner + wD) / ${t}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${l};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${n}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${u};
|
|
wC += ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
int maxPosValue = ${h} -
|
|
int(getMaxPos(batch, idyD, idyR, idyC, ch));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue =
|
|
wD * ${l} * ${u} +
|
|
wR * ${u} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function cne(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=a,d=[1,1,1],c=N.computePool3DInfo(i.shape,o,l,d,u,p),h=new n1(c,"max",!0),m=n.runWebGLProgram(h,[i],i.dtype),f=new pne(c),g=n.runWebGLProgram(f,[r,m],i.dtype);return n.disposeIntermediateTensorInfo(m),g}var dne={kernelName:fm,backendName:"webgl",kernelFunc:cne};function hne(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;Pu([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=N.computePool2DInfo(o.shape,l,u,1,p,d),h=!0,m=new ec(c,"max",h),f=n.runWebGLProgram(m,[o],o.dtype),g=new une(c),y=n.runWebGLProgram(g,[r,f],o.dtype);return n.disposeIntermediateTensorInfo(f),y}var mne={kernelName:mm,backendName:"webgl",kernelFunc:hne};function fne(e,t,n,a){let r=new ec(n,"max",!1),s=a.runWebGLProgram(r,[e],"float32");r=new ec(n,"max",!0,!0,t);let i=a.runWebGLProgram(r,[e],"float32");return[s,i]}var gne={kernelName:gm,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;v.assert(a.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${a.shape.length}.`);let u=[1,1];v.assert(N.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=N.computePool2DInfo(a.shape,r,s,u,i),[d,c]=fne(a,o,p,l);return[d,c]}};function yne(e,t,n,a){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=de({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=No(i,"float32","mean",a),l=de({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}var bne={kernelName:Ui,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{keepDims:r,axis:s}=t,i=n,o=a.shape.length,l=v.parseAxisParam(s,a.shape),u=l,p=N.getAxesPermutation(u,o),d=p!=null,c=i.shouldExecuteOnCPU([a]),h=[],m=a;if(d){if(c){let x=i.texData.get(m.dataId).values,w=new Array(o);for(let C=0;C<w.length;C++)w[C]=a.shape[p[C]];let I=Q0(x,a.shape,a.dtype,p,w);m=i.makeTensorInfo(w,a.dtype);let T=i.texData.get(m.dataId);T.values=I}else m=Af(a,p,i);h.push(m),u=N.getInnerMostAxes(u.length,o)}N.assertAxesAreInnerMostDims("sum",u,o);let[f,g]=N.computeOutAndReduceShapes(m.shape,u),y=f;r&&(y=N.expandShapeToKeepDim(f,l));let b=yne(m,g,y,i);for(let x of h)i.disposeIntermediateTensorInfo(x);return b}};function xne(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=v.parseAxisParam(s,r.shape),u=l,p=N.getAxesPermutation(u,o),d=r;p!=null&&(d=In({inputs:{x:r},backend:n,attrs:{perm:p}}),u=N.getInnerMostAxes(u.length,r.shape.length)),N.assertAxesAreInnerMostDims("min",u,o);let[c,h]=N.computeOutAndReduceShapes(d.shape,u),m=v.sizeFromShape(h),f=de({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"min",n),y;if(i){let b=N.expandShapeToKeepDim(c,l);y=de({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=de({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var vne={kernelName:Gi,backendName:"webgl",kernelFunc:xne},wne=e1+`
|
|
return min(a, b);
|
|
`,kne=`
|
|
vec4 result = vec4(min(a, b));
|
|
bvec4 isNaNA = isnan(a);
|
|
bvec4 isNaNB = isnan(b);
|
|
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
|
|
`+ed+`
|
|
return result;
|
|
`,Ine=cn({opSnippet:wne,packedOpSnippet:kne,cpuKernelImpl:h7}),Sne={kernelName:Hi,backendName:"webgl",kernelFunc:Ine},Tne=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((u,p)=>u[0]+e[p]+u[1]);let a=e.length,r=gt(a),s=t.map(u=>u[0]).join(","),i=t.map((u,p)=>u[0]+e[p]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a),l=n==="reflect"?0:1;if(a===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start) {
|
|
outC = start * 2 - outC - ${l};
|
|
} else if(outC >= end) {
|
|
outC = (end - 1) * 2 - outC + ${l};
|
|
}
|
|
setOutput(getX(outC - start));
|
|
}
|
|
`;return}this.userCode=`
|
|
${r} start = ${r}(${s});
|
|
${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outC = getOutputCoords();
|
|
for (int i = 0; i < ${a}; i++) {
|
|
if (outC[i] < start[i]) {
|
|
outC[i] = start[i] * 2 - outC[i] - ${l};
|
|
} else if(outC[i] >= end[i]) {
|
|
outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};
|
|
}
|
|
}
|
|
${r} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}},Nne=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let a=e.length,r=gt(a),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=kn("rc",a),l=kn("source",a),u=`${o[a-1]} < ${this.outputShape[a-1]}`,p=a===1?"source":`vec2(${l.slice(-2).join()})`,d=n==="reflect"?0:1,c="";if(a===1){let h=`
|
|
${r} source = rc;
|
|
if (source < start) {
|
|
source = start * 2 - source - ${d};
|
|
} else if (source >= end) {
|
|
source = (end - 1) * 2 - source + ${d};
|
|
}
|
|
source -= start;
|
|
`;c=`
|
|
${r} rc = outputLoc;
|
|
${h}
|
|
result[0] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
`}else{let h=`
|
|
${r} source = rc;
|
|
${r} lt = ${r}(lessThan(source, start));
|
|
${r} gte = ${r}(greaterThanEqual(source, end));
|
|
${r} orig = 1 - (lt + gte);
|
|
source = orig * source +
|
|
lt * (start * 2 - source - ${d}) +
|
|
gte * ((end - 1) * 2 - source + ${d});
|
|
source -= start;
|
|
`;c=`
|
|
${r} rc = outputLoc;
|
|
${h}
|
|
result[0] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
rc = outputLoc;
|
|
${o[a-2]} += 1;
|
|
if(${o[a-2]} < ${this.outputShape[a-2]}) {
|
|
${h}
|
|
result[2] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[3] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
const ${r} start = ${r}(${s});
|
|
const ${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${c}
|
|
setOutput(result);
|
|
}
|
|
`}},Cne=({inputs:e,backend:t,attrs:n})=>{let{x:a}=e,{paddings:r,mode:s}=n,i=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Nne(a.shape,r,s):new Tne(a.shape,r,s);return t.runWebGLProgram(i,[a],a.dtype)},_ne={kernelName:qi,backendName:"webgl",kernelFunc:Cne},Ene=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,Ane=`
|
|
vec4 result = mod(a, b);
|
|
bvec4 isNaN = equal(b, vec4(0.0));
|
|
`+ed+`
|
|
return result;
|
|
`,$ne=cn({opSnippet:Ene,packedOpSnippet:Ane}),Fne={kernelName:Jl,backendName:"webgl",kernelFunc:$ne},Rne=class{constructor(e,t,n){this.variableNames=["probs"],this.customUniforms=[{name:"seed",type:"float"}],this.outputShape=[e,n],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
|
|
float r = random(seed);
|
|
float cdf = 0.0;
|
|
|
|
for (int i = 0; i < ${t-1}; i++) {
|
|
cdf += getProbs(batch, i);
|
|
|
|
if (r < cdf) {
|
|
setOutput(float(i));
|
|
return;
|
|
}
|
|
}
|
|
|
|
// If no other event happened, last event happened.
|
|
setOutput(float(${t-1}));
|
|
}
|
|
`}},Dne=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,Mne=`
|
|
// 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;
|
|
`,pE=cn({opSnippet:Dne,packedOpSnippet:Mne,checkOutOfBounds:!0}),Pne={kernelName:Ei,backendName:"webgl",kernelFunc:pE},lI="return a - b;",cE=cn({opSnippet:lI,packedOpSnippet:lI,supportsComplex:!0,cpuKernelImpl:R7}),One={kernelName:mo,backendName:"webgl",kernelFunc:cE};function dE(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{dim:s}=a,i=v.parseAxisParam([s],r.shape),o=uE({inputs:{x:r},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=N.expandShapeToKeepDim(o.shape,i),u=de({inputs:{x:o},backend:n,attrs:{shape:l}}),p=cE({inputs:{a:r,b:u},backend:n}),d=iE({inputs:{x:p},backend:n}),c=$f({inputs:{x:d},backend:n,attrs:{axis:i,keepDims:!1}}),h=de({inputs:{x:c},backend:n,attrs:{shape:l}}),m=pE({inputs:{a:d,b:h},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),m}var Lne={kernelName:co,backendName:"webgl",kernelFunc:dE};function zne(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a,l=o?r:dE({inputs:{logits:r},backend:n,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],d=new Rne(u,p,s),c=[[i]],h=n.runWebGLProgram(d,[l],"int32",c);return o||n.disposeIntermediateTensorInfo(l),h}var Wne={kernelName:ym,backendName:"webgl",kernelFunc:zne},Bne=Ma+`
|
|
return -x;
|
|
`,Vne=`
|
|
vec4 result = -x;
|
|
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;
|
|
`;function Une(e){let{inputs:t,backend:n}=e,{x:a}=t;if(n.shouldExecuteOnCPU([a])){let s=n.texData.get(a.dataId),[i,o]=f7(s.values,a.shape,a.dtype);return n.makeTensorInfo(o,a.dtype,i)}let r;return H().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Qr(a.shape,Vne):r=new rr(a.shape,Bne),n.runWebGLProgram(r,[a],a.dtype)}var Gne={kernelName:Ql,backendName:"webgl",kernelFunc:Une},Hne=hr.nonMaxSuppressionV3Impl;function qne(e){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=a,u=n.readSync(r.dataId),p=n.readSync(s.dataId),{selectedIndices:d}=Hne(u,p,i,o,l);return n.makeTensorInfo([d.length],"int32",new Int32Array(d))}var jne={kernelName:tu,backendName:"webgl",kernelFunc:qne},Kne=hr.nonMaxSuppressionV4Impl;function Xne(e){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=a,p=n.readSync(r.dataId),d=n.readSync(s.dataId),{selectedIndices:c,validOutputs:h}=Kne(p,d,i,o,l,u);return[n.makeTensorInfo([c.length],"int32",new Int32Array(c)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var Yne={kernelName:nu,backendName:"webgl",kernelFunc:Xne},Zne=hr.nonMaxSuppressionV5Impl;function Jne(e){N.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=a,p=n.readSync(r.dataId),d=n.readSync(s.dataId),c=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=Zne(p,d,c,h,m,f);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var Qne={kernelName:au,backendName:"webgl",kernelFunc:Jne},eae=class{constructor(e,t,n,a){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int index = round(getIndices(coords.x));
|
|
setOutput(mix(float(${a}), float(${n}),
|
|
float(index == coords.y)));
|
|
}
|
|
`}},tae=e=>{let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=a,u=v.sizeFromShape(r.shape),p=new eae(u,i,o,l),d=de({inputs:{x:r},backend:n,attrs:{shape:[u]}}),c=n.runWebGLProgram(p,[d],s);n.disposeIntermediateTensorInfo(d);let h=[...r.shape,i],m=de({inputs:{x:c},backend:n,attrs:{shape:h}});return n.disposeIntermediateTensorInfo(c),m},nae={kernelName:Ki,backendName:"webgl",kernelFunc:tae};function Vh(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="complex64"){let r=nd({inputs:{input:a},backend:n}),s=Vh({inputs:{x:r},backend:n}),i=Ff({inputs:{input:a},backend:n}),o=Vh({inputs:{x:i},backend:n}),l=Ns({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return ad({attrs:{shape:a.shape,dtype:a.dtype,value:a.dtype==="string"?"":0},backend:n})}var aae={kernelName:wu,backendName:"webgl",kernelFunc:Vh};function hE(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(a.dtype==="complex64"){let r=nd({inputs:{input:a},backend:n}),s=hE({inputs:{x:r},backend:n}),i=Ff({inputs:{input:a},backend:n}),o=Vh({inputs:{x:i},backend:n}),l=Ns({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return ad({attrs:{shape:a.shape,dtype:a.dtype,value:1},backend:n})}var rae={kernelName:ru,backendName:"webgl",kernelFunc:hE};function sae(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return px({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=px({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=J_({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var iae={kernelName:su,backendName:"webgl",kernelFunc:sae},oae=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let a=e.length,r=gt(a),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a);if(a===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(value);
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`;return}this.userCode=`
|
|
${r} start = ${r}(${s});
|
|
${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(value);
|
|
} else {
|
|
${r} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
}
|
|
`}},lae=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let a=e.length,r=gt(a),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=kn("rc",a),l=kn("source",a),u=`${o[a-1]} < ${this.outputShape[a-1]}`,p=a===1?"source":`vec2(${l.slice(-2).join()})`,d=[`${r} rc = outputLoc;`,`${o[a-1]} += 1;
|
|
if(${u}) {
|
|
`,a===1?"":`}
|
|
rc = outputLoc;
|
|
${o[a-2]} += 1;
|
|
if(${o[a-2]} < ${this.outputShape[a-2]}) {`,a===1?"":` ${o[a-1]} += 1;
|
|
if(${u}) {`],c=a===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let m=0,f=a===1?2:4;m<f;m++)h+=`
|
|
${d[m]}
|
|
if (${c}) {
|
|
result[${m}] = float(value);
|
|
} else {
|
|
${r} source = rc - start;
|
|
result[${m}] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
`;h+=a===1?"} ":"}}",this.userCode=`
|
|
const ${r} start = ${r}(${s});
|
|
const ${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${h}
|
|
setOutput(result);
|
|
}
|
|
`}},mE=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,constantValue:i}=a;if(v.sizeFromShape(r.shape)===0){let u=s.map((p,d)=>p[0]+r.shape[d]+p[1]);return ad({backend:n,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new lae(r.shape,s,i):new oae(r.shape,s,i),l=[[i]];return n.runWebGLProgram(o,[r],r.dtype,l)},uae={kernelName:Xi,backendName:"webgl",kernelFunc:mE},pae=`
|
|
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);
|
|
`,cae=`
|
|
// 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;
|
|
|
|
bvec4 isNaN1 = lessThan(a, vec4(0.0));
|
|
bvec4 isNaN2 = lessThan(floor(b), b);
|
|
bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w);
|
|
`+ed+`
|
|
return result;
|
|
`,dae=cn({opSnippet:pae,packedOpSnippet:cae}),hae={kernelName:Yi,backendName:"webgl",kernelFunc:dae};function mae(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=[],u=v.parseAxisParam(s,r.shape),p=u,d=N.getAxesPermutation(p,o),c=r;d!=null&&(c=In({inputs:{x:r},backend:n,attrs:{perm:d}}),p=N.getInnerMostAxes(p.length,o),l.push(c)),N.assertAxesAreInnerMostDims("prod",p,o);let h;if(n.shouldExecuteOnCPU([c])){let m=n.texData.get(c.dataId).values,{outVals:f,outShape:g,outDtype:y}=y7(c.shape,c.dtype,m,p);h=n.makeTensorInfo(g,y,f)}else{let[m,f]=N.computeOutAndReduceShapes(c.shape,p),g=v.sizeFromShape(f),y=de({inputs:{x:c},backend:n,attrs:{shape:[-1,g]}}),b=_m(r.dtype),x=No(y,b,"prod",n);h=de({inputs:{x},backend:n,attrs:{shape:m}}),l.push(y),l.push(x)}if(i){l.push(h);let m=N.expandShapeToKeepDim(h.shape,u);h=de({inputs:{x:h},backend:n,attrs:{shape:m}})}return l.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var fae={kernelName:Ji,backendName:"webgl",kernelFunc:mae};function gae(e){let{inputs:t,backend:n,attrs:a}=e,{paramsNestedSplits:r,paramsDenseValues:s,indices:i}=t,{outputRaggedRank:o}=a,l=r.map(y=>n.readSync(y.dataId)),u=r.map(y=>y.shape),p=n.readSync(s.dataId),d=n.readSync(i.dataId),[c,h,m]=b7(l,u,p,s.shape,s.dtype,d,i.shape,o),f=c.map(y=>n.makeTensorInfo([y.length],"int32",y)),g=n.makeTensorInfo(m,s.dtype,h);return f.concat([g])}var yae={kernelName:bm,backendName:"webgl",kernelFunc:gae};function bae(e){let{inputs:t,backend:n}=e,{starts:a,limits:r,deltas:s}=t,i=n.readSync(a.dataId),o=n.readSync(r.dataId),l=n.readSync(s.dataId),[u,p]=x7(i,a.shape,a.dtype,o,r.shape,l,s.shape),d=n.makeTensorInfo([u.length],"int32",u),c=n.makeTensorInfo([p.length],a.dtype,p);return[d,c]}var xae={kernelName:xm,backendName:"webgl",kernelFunc:bae};function vae(e){let{inputs:t,backend:n,attrs:a}=e,{shape:r,values:s,defaultValue:i,rowPartitionTensors:o}=t,{rowPartitionTypes:l}=a,u=n.readSync(r.dataId),p=n.readSync(s.dataId),d=n.readSync(i.dataId),c=o.map(g=>n.readSync(g.dataId)),h=o.map(g=>g.shape),[m,f]=v7(u,r.shape,p,s.shape,s.dtype,d,i.shape,c,h,l);return n.makeTensorInfo(m,s.dtype,f)}var wae={kernelName:vm,backendName:"webgl",kernelFunc:vae},fE=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=w7(a,r,s,i);return t.makeTensorInfo([o.length],i,o)},kae={kernelName:dc,backendName:"webgl",kernelFunc:fE},Iae="return 1.0 / x;",Sae=Ye({opSnippet:Iae}),Tae={kernelName:Qi,backendName:"webgl",kernelFunc:Sae},Nae=Ma+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,Cae=`
|
|
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;
|
|
`,_ae=Ye({opSnippet:Nae,packedOpSnippet:Cae}),Eae={kernelName:eo,backendName:"webgl",kernelFunc:_ae},Aae=Ma+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,$ae=`
|
|
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;
|
|
`,Fae=Ye({opSnippet:Aae,packedOpSnippet:$ae}),Rae={kernelName:ao,backendName:"webgl",kernelFunc:Fae},Dae=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d;r?d="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));
|
|
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);
|
|
}
|
|
`}},Mae=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d;r?d="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]},
|
|
${u[1]/p[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the four integer indices.
|
|
ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));
|
|
ivec3 sourceCeilRC = ivec3(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-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);
|
|
}
|
|
`}};function Pae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=H().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Mae(r.shape,l,u,s,i):new Dae(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],"float32")}var Oae={kernelName:no,backendName:"webgl",kernelFunc:Pae},Lae=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,a,r]=t,[,s,i]=e,o=[n&&s>1?a-1:a,n&&i>1?r-1:r],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],d=1/u,c=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(c)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${p});
|
|
|
|
const float invHeightScale = float(${d});
|
|
const float invWidthScale = float(${c});
|
|
|
|
const int winHeight = int(${h});
|
|
const int winWidth = int(${m});
|
|
|
|
// 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 >= ${s}) {
|
|
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 >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float dxR = float(dyR) * heightScale;
|
|
int topDxRIndex = int(floor(dxR));
|
|
int bottomDxRIndex = int(min(ceil(dxR), ${a-1}.0));
|
|
float dxRLerp = dxR - float(topDxRIndex);
|
|
float inverseDxRLerp = 1.0 - dxRLerp;
|
|
|
|
float dxC = float(dyC) * widthScale;
|
|
int leftDxCIndex = int(floor(dxC));
|
|
int rightDxCIndex = int(min(ceil(dxC), ${r-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);
|
|
}
|
|
`}};function zae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new Lae(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var Wae={kernelName:Im,backendName:"webgl",kernelFunc:zae},Bae=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d=a?"0.5":"0.0",c;r?c="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${c};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestRC = ivec2(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d})));
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}},Vae=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d=a?"0.5":"0.0",c;r?c="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]},
|
|
${u[1]/p[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${c};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec3 sourceNearestRC = ivec3(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d})));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-1};
|
|
|
|
vec4 newValue = vec4(
|
|
getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function Uae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=H().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Vae(r.shape,l,u,s,i):new Bae(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],r.dtype)}var Gae={kernelName:to,backendName:"webgl",kernelFunc:Uae},Hae=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,a,r]=t,[,s,i]=e,o=[n&&s>1?a-1:a,n&&i>1?r-1:r],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],d=1/u,c=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(c)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${p});
|
|
|
|
const float invHeightScale = float(${d});
|
|
const float invWidthScale = float(${c});
|
|
|
|
const int winHeight = int(${h});
|
|
const int winWidth = int(${m});
|
|
|
|
// 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 >= ${s}) {
|
|
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 >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float sourceFracRow =
|
|
float(${o[0]}) *
|
|
(float(dyR) / float(${l[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${o[1]}) *
|
|
(float(dyC) / float(${l[1]}));
|
|
|
|
int sourceNearestRow = int(min(
|
|
float(int(${a}) - 1),
|
|
${n} ? float(round(sourceFracRow)) :
|
|
float(floor(sourceFracRow))));
|
|
|
|
int sourceNearestCol = int(min(
|
|
float(int(${r}) - 1),
|
|
${n} ? float(round(sourceFracCol)) :
|
|
float(floor(sourceFracCol))));
|
|
|
|
if (r == sourceNearestRow && c == sourceNearestCol) {
|
|
accumulator += getDy(b, dyR, dyC, d);
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function qae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new Hae(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var jae={kernelName:km,backendName:"webgl",kernelFunc:qae},Kae=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=`
|
|
void main() {
|
|
int coord = getOutputCoords();
|
|
setOutput(getX(${e[0]} - coord - 1));
|
|
}
|
|
`;return}let a=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>a(o)).join(","),s=gt(n);this.userCode=`
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${r}));
|
|
}
|
|
`}},Xae=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let a=kn("rc",n),r=`${a[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${a[n-2]} + 1 < ${this.outputShape[n-2]}`,i=gt(n);n===1?this.userCode=`
|
|
void main(){
|
|
int rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = getChannel(getX(${e[0]} - rc - 1),
|
|
${e[0]} - rc - 1);
|
|
if(${r}){
|
|
result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),
|
|
${e[0]} - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:this.userCode=`
|
|
void main() {
|
|
${i} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = ${o(a.slice())};
|
|
if(${r}){
|
|
result.g = ${l(a.slice())};
|
|
}
|
|
if(${s}) {
|
|
result.b = ${u(a.slice())};
|
|
if(${r}) {
|
|
result.a = ${p(a.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function o(h){return d(h)}function l(h){return h[n-1]="("+h[n-1]+" + 1)",d(h)}function u(h){return h[n-2]="("+h[n-2]+" + 1)",d(h)}function p(h){return h[n-1]="("+h[n-1]+" + 1)",h[n-2]="("+h[n-2]+" + 1)",d(h)}function d(h){let m=e.map((y,b)=>c(b,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function c(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function Yae(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a,i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return ta({inputs:{x:r},backend:n});let l=H().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Xae(r.shape,o):new Kae(r.shape,o);return n.runWebGLProgram(l,[r],r.dtype)}var Zae={kernelName:ro,backendName:"webgl",kernelFunc:Yae},Jae=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=e[1],a=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=`
|
|
vec3 fill = vec3(${t.join(",")});
|
|
float outputValue = fill[coords[3]];`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
float coordXFloat = (float(x) - params[0]) * params[3] -
|
|
(float(y) - params[1]) * params[2];
|
|
float coordYFloat = (float(x) - params[0]) * params[2] +
|
|
(float(y) - params[1]) * params[3];
|
|
int coordX = int(round(coordXFloat + params[0]));
|
|
int coordY = int(round(coordYFloat + params[1]));
|
|
${r}
|
|
if(coordX >= 0 && coordX < ${a} && coordY >= 0 && coordY < ${n}) {
|
|
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},Qae={kernelName:ku,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,{radians:r,fillValue:s,center:i}=t,o=n,l=new Jae(a.shape,s),[u,p]=N.getImageCenter(i,a.shape[1],a.shape[2]),d=[[u,p,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[a],a.dtype,d)}},ere=`
|
|
// 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;
|
|
}
|
|
}
|
|
`,tre=Ye({opSnippet:ere}),nre={kernelName:so,backendName:"webgl",kernelFunc:tre},are="return inversesqrt(x);",rre=Ye({opSnippet:are,cpuKernelImpl:k7}),sre={kernelName:io,backendName:"webgl",kernelFunc:rre},gE=class{constructor(e,t,n,a,r,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=gt(r.length),l=gt(s.length),u="";n===1?u="i":n===2&&(u="i, j");let p=`getIndices(${u})`,d="";a===1?d="i":a===2&&(d="i, coords[1]");let c=`getUpdates(${d})`,h=t>1?"strides[j]":"strides";this.userCode=`
|
|
${o} strides = ${o}(${r});
|
|
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
float sum = 0.0;
|
|
bool found = false;
|
|
for (int i = 0; i < ${e}; i++) {
|
|
int flattenedIndex = 0;
|
|
for (int j = 0; j < ${t}; j++) {
|
|
int index = round(${p});
|
|
flattenedIndex += index * ${h};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${c};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function ire(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r,updates:s}=t,{shape:i}=a,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:d}=N.calculateShapes(s,r,i),c=[d/u,u];if(d===0)return n.makeTensorInfo(i,r.dtype);let h=de({inputs:{x:r},backend:n,attrs:{shape:[l,o]}}),m=de({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),f=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new gE(l,o,h.shape.length,m.shape.length,p,c),y=n.runWebGLProgram(g,[m,h,f],m.dtype),b=de({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(f),b}var ore={kernelName:ou,backendName:"webgl",kernelFunc:ire},lre=class{constructor(e,t,n,a){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,n];let r="while (left < right) {",s=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,i=H().getNumber("WEBGL_VERSION")===2?r:s,o=a==="left"?"<":"<=";this.userCode=`
|
|
int findBound(int batch, float value) {
|
|
int left = 0;
|
|
int right = numInputs;
|
|
int mid;
|
|
${i}
|
|
mid = (left + right) / 2;
|
|
if (getSortedSequence(batch, mid) ${o} value) {
|
|
left = mid + 1;
|
|
} else {
|
|
right = mid;
|
|
}
|
|
}
|
|
return right;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int valueIndex = coords[1];
|
|
|
|
float value = getValues(batch, valueIndex);
|
|
|
|
setOutput(float(findBound(batch, value)));
|
|
}
|
|
`}};function ure(e){let{inputs:t,backend:n,attrs:a}=e,{sortedSequence:r,values:s}=t,{side:i}=a,o=new lre(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return n.runWebGLProgram(o,[r,s],"int32",l)}var pre={kernelName:Sm,backendName:"webgl",kernelFunc:ure},cre=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let a,r;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)r="resRC",a="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u<t.length;u++)l.push(`${i[u]}`),u<e&&o.push(`${i[u]}`);a=o.join(),r=l.join()}let s=gt(n);this.userCode=`
|
|
void main() {
|
|
${s} resRC = getOutputCoords();
|
|
float cVal = getC(${a});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${r}));
|
|
} else {
|
|
setOutput(getB(${r}));
|
|
}
|
|
}
|
|
`}};function dre(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=new cre(a.shape.length,r.shape,r.shape.length);return n.runWebGLProgram(i,[a,r,s],ma(r.dtype,s.dtype))}var hre={kernelName:lu,backendName:"webgl",kernelFunc:dre},mre=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${N.SELU_SCALEALPHA};
|
|
float scale = ${N.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,fre=Ye({opSnippet:mre}),gre={kernelName:uu,backendName:"webgl",kernelFunc:fre},yre=Bu+`
|
|
return 1.0 / (1.0 + exp(-1.0 * x));
|
|
`,bre=`
|
|
vec4 result = 1.0 / (1.0 + exp(-1.0 * x));
|
|
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;
|
|
`,xre=Ye({opSnippet:yre,packedOpSnippet:bre,cpuKernelImpl:S7}),vre={kernelName:lo,backendName:"webgl",kernelFunc:xre},wre=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,kre=Ye({opSnippet:wre}),Ire={kernelName:du,backendName:"webgl",kernelFunc:kre},Sre=Bu+`
|
|
return sin(x);
|
|
`,Tre=Ye({opSnippet:Sre}),Nre={kernelName:oo,backendName:"webgl",kernelFunc:Tre},Cre=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,_re=Ye({opSnippet:Cre}),Ere={kernelName:cu,backendName:"webgl",kernelFunc:_re},Are=`
|
|
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;
|
|
`,$re=Ye({opSnippet:Are}),Fre={kernelName:hu,backendName:"webgl",kernelFunc:$re},Rre=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a;v.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,b)=>y*b),l=[[0,0]];l.push(...i);for(let y=1+s.length;y<r.shape.length;++y)l.push([0,0]);let u=[],p=mE({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),d=N.getReshaped(p.shape,s,o,!1),c=N.getPermuted(d.length,s.length,!1),h=N.getReshapedPermuted(p.shape,s,o,!1),m=de({inputs:{x:p},backend:n,attrs:{shape:d}}),f=In({inputs:{x:m},backend:n,attrs:{perm:c}}),g=de({inputs:{x:f},backend:n,attrs:{shape:h}});return u.push(p),u.push(m),u.push(f),u.forEach(y=>n.disposeIntermediateTensorInfo(y)),g},Dre={kernelName:mu,backendName:"webgl",kernelFunc:Rre};function Mre(e){let{inputs:t,backend:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
|
|
${s.shape}`);if(a.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw:
|
|
${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
|
|
${i.shape}`);let o=n.readSync(a.dataId),l=n.readSync(r.dataId),u=n.readSync(s.dataId),p=n.readSync(i.dataId)[0],[d,c,h,m,f]=N7(o,a.shape,a.dtype,l,r.dtype,u,p);return[n.makeTensorInfo(c,a.dtype,d),n.makeTensorInfo([c[0]],r.dtype,h),n.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),n.makeTensorInfo([f.length],a.dtype,new Int32Array(f))]}var Pre={kernelName:hc,backendName:"webgl",kernelFunc:Mre};function Ore(e){let{inputs:t,backend:n}=e,{inputIndices:a,inputShape:r,newShape:s}=t;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.readSync(r.dataId)),o=n.readSync(a.dataId),l=Array.from(n.readSync(s.dataId)),[u,p,d]=C7(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var Lre={kernelName:gu,backendName:"webgl",kernelFunc:Ore};function zre(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);let i=n.readSync(a.dataId),o=n.readSync(r.dataId),l=n.readSync(s.dataId),[u,p]=L_(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var Wre={kernelName:mc,backendName:"webgl",kernelFunc:zre};function Bre(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);let i=n.readSync(a.dataId),o=n.readSync(r.dataId),l=n.readSync(s.dataId),[u,p]=L_(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var Vre={kernelName:fc,backendName:"webgl",kernelFunc:Bre};function Ure(e){let{inputs:t,backend:n,attrs:a}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=a,{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=N.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let y=n.bufferSync(r),b=n.bufferSync(s),x=v.decodeString(n.readSync(i.dataId)[0]),w=I7(y,b,o,c,p,u,l,d,x,h);return n.makeTensorInfo(o,w.dtype,w.values)}let m=new gE(u,l,r.shape.length,s.shape.length,d,[c,1],h),f=n.runWebGLProgram(m,[s,r,i],s.dtype),g=de({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),g}var Gre={kernelName:Tm,backendName:"webgl",kernelFunc:Ure};function Hre(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=v.parseAxisParam(i,r.shape)[0],l=N.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),d=r.shape.slice();return l.map(c=>{let h=[...d];h[o]=c;let m=Vu({inputs:{x:r},backend:n,attrs:{begin:p,size:h}});return p[o]+=c,m})}var qre={kernelName:fu,backendName:"webgl",kernelFunc:Hre},uI="return sqrt(x);",jre=Ye({opSnippet:uI,packedOpSnippet:uI,cpuKernelImpl:_7}),Kre={kernelName:uo,backendName:"webgl",kernelFunc:jre},Xre="return x * x;",Yre=Ye({opSnippet:Xre}),Zre={kernelName:gc,backendName:"webgl",kernelFunc:Yre},pI="return (a - b) * (a - b);",Jre=cn({opSnippet:pI,packedOpSnippet:pI}),Qre={kernelName:ho,backendName:"webgl",kernelFunc:Jre};function ese({inputs:e,attrs:t,backend:n}){let{x:a}=e,r=Ma+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,s=new rr(a.shape,r);return n.runWebGLProgram(s,[a],a.dtype)}var tse={kernelName:bs,backendName:"webgl",kernelFunc:ese},nse=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let a=n.length,r=gt(n.length),s=gt(n.length),i="";if(a===1)i="coords * strides + begin";else{let o=0;i=n.map((l,u)=>(o++,n.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=`
|
|
${r} begin = ${r}(${e});
|
|
${r} strides = ${r}(${t});
|
|
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}};function ase(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:w}=Kt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=de({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let C=Kt.computeOutShape(b,x,w),E=Vu({inputs:{x:r},backend:n,attrs:{begin:b,size:C}});I=de({inputs:{x:E},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(E)}else if(n.shouldExecuteOnCPU([r])){let C=n.readSync(r.dataId),E=Le(r.shape,r.dtype,C),$=E7(h,E,w,b);I=n.makeTensorInfo(m,r.dtype,$.values)}else{let C=new nse(b,w,h);I=n.runWebGLProgram(C,[r],r.dtype)}let T=de({inputs:{x:I},backend:n,attrs:{shape:m}});return n.disposeIntermediateTensorInfo(I),T}var rse={kernelName:yu,backendName:"webgl",kernelFunc:ase};function sse(e){let{inputs:t,backend:n,attrs:a}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=a,{data:p,dataSplits:d}=t,c=n.readSync(p.dataId),h=n.readSync(d.dataId),[m,f]=A7(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var ise={kernelName:yc,backendName:"webgl",kernelFunc:sse};function ose(e){let{inputs:t,backend:n,attrs:a}=e,{skipEmpty:r}=a,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.readSync(s.dataId),l=n.readSync(i.dataId)[0],[u,p,d]=$7(o,l,r),c=p.length;return[n.makeTensorInfo([c,2],"int32",u),n.makeTensorInfo([c],"string",p),n.makeTensorInfo([2],"int32",new Int32Array(d))]}var lse={kernelName:bc,backendName:"webgl",kernelFunc:ose};function use(e){let{inputs:t,backend:n,attrs:a}=e,{numBuckets:r}=a,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=n.readSync(s.dataId),o=F7(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var pse={kernelName:xc,backendName:"webgl",kernelFunc:use},cse="return tan(x);",dse=Ye({opSnippet:cse}),hse={kernelName:fo,backendName:"webgl",kernelFunc:dse},mse=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,fse=Ye({opSnippet:mse}),gse={kernelName:go,backendName:"webgl",kernelFunc:fse},yse=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[s]*t[s];this.outputShape=n,this.rank=n.length;let a=gt(this.rank),r=bse(e);this.userCode=`
|
|
void main() {
|
|
${a} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function bse(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],a=[];for(let r=0;r<e.length;r++)a.push(`imod(${n[r]}, ${e[r]})`);return a.join()}function yE(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reps:s}=a;if(r.dtype==="string"||r.shape.length>5){let o=n.readSync(r.dataId),l=r.dtype==="string"?o.map(d=>v.decodeString(d)):o,u=Le(r.shape,r.dtype,l),p=D7(u,s);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new yse(r.shape,s);return n.runWebGLProgram(i,[r],r.dtype)}var xse={kernelName:ys,backendName:"webgl",kernelFunc:yE},vse=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"negativeInf",type:"float"},{name:"dir",type:"int"},{name:"inc",type:"int"}],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int elemIdx = coords[1];
|
|
|
|
// We compare elements pair-wise within a group of size 2 * inc.
|
|
// The comparing rule for each group alternates between ascending
|
|
// and descending. Within each group, we compare each pair at
|
|
// positions i and i+inc. To decide whether an element at position i
|
|
// is x0 or x1, we mod it by 2 * inc, if the result is smaller than
|
|
// inc, it is in the first half of the group, we denote it as x0,
|
|
// otherwise we denote it as x1.
|
|
// For example, as shown in the Bitonic top K paper referenced above,
|
|
// Figure5(a) shows that element[1] is in the
|
|
// second half of the group when group size is 2, but it is in the
|
|
// first half of the group when group size is 4.
|
|
|
|
bool isFirstInPair = imod(elemIdx, 2 * inc) < inc;
|
|
int i = isFirstInPair ? elemIdx : elemIdx - inc;
|
|
|
|
int i0 = firstPass == 1 ? i : int(getIndices(batch, i));
|
|
int i1 = firstPass == 1 ? i + inc : int(getIndices(batch, i + inc));
|
|
float x0 = i0 < n ? getX(batch, i0) : negativeInf;
|
|
float x1 = i1 < n ? getX(batch, i1) : negativeInf;
|
|
|
|
// Denotes which direction indices are in (ascending or descending).
|
|
bool reverse = imod(elemIdx, 2 * dir) >= dir;
|
|
bool isGreater = x0 > x1 || (x0 == x1 && i1 > i0);
|
|
if (reverse == isGreater) { // Elements in opposite order of direction
|
|
int iTemp = i0;
|
|
i0 = i1;
|
|
i1 = iTemp;
|
|
}
|
|
if (isFirstInPair) {
|
|
setOutput(float(i0));
|
|
} else {
|
|
setOutput(float(i1));
|
|
}
|
|
}
|
|
`}},wse=class{constructor(e){this.variableNames=["x","indices"],this.customUniforms=[{name:"n",type:"int"},{name:"firstPass",type:"int"},{name:"k",type:"int"}],this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
// Takes max of indices (0, k), (1, k + 1), (2, k + 2) ...
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int elemIdx = coords[1];
|
|
|
|
// The output size is half of the previous size.
|
|
// If the previous sequence is | | | | _ _ _ _ | | | | _ _ _ _ (k=4),
|
|
// we only need to output the indices at positions |, the indices at
|
|
// positions _ can be thrown away, see Figure5(b) After Phase 2
|
|
// (Merge phase) in the Bitonic Top K paper referenced above.
|
|
// For example, the paper shows we only need to output the orange bars.
|
|
// The output sequence should look like this | | | | | | | |.
|
|
// Because the sequence is halved, to map the output index back
|
|
// to the previous sequence to find the corresponding value,
|
|
// we need to double the index. When we double the index,
|
|
// we basically interpolate a position, so 2i looks like
|
|
// | _ | _ | _ | _ | _ | _ | _. We move the | to the first k position
|
|
// of each 2k positions by - elemIdx % k. E.g. for output at
|
|
// index 4,5,6,7, we want to get the corresponding element at
|
|
// original index 8,9,10,11, for output at index 8,9,10,11,
|
|
// we want to get the corresponding element at original index
|
|
// 16,17,18,19, so on and so forth.
|
|
|
|
int i = elemIdx < k ? elemIdx : (elemIdx * 2 - imod(elemIdx, k));
|
|
int i0 = firstPass == 1 ? i : int(getIndices(batch, i));
|
|
int i1 = firstPass == 1 ? i + k : int(getIndices(batch, i + k));
|
|
|
|
float x0 = getX(batch, i0);
|
|
float x1 = i1 < n ? getX(batch, i1) : x0;
|
|
|
|
setOutput(x0 >= x1 ? float(i0) : float(i1));
|
|
}
|
|
`}};function Bs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function cI(e){let t=1;for(;t<e;)t*=2;return t}function kse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{k:s,sorted:i}=a,o=H().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"),l=H().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"),u=r.shape,p=u[u.length-1];if(n.shouldExecuteOnCPU([r])||p<o||s>l){let $=n.readSync(r.dataId),[R,F]=M7($,u,r.dtype,s,i);return[n.makeTensorInfo(R.shape,R.dtype,R.values),n.makeTensorInfo(F.shape,F.dtype,F.values)]}if(s===0)return u[u.length-1]=0,[n.makeTensorInfo(u,r.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(p===1)return[r,ad({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let d=n.texData.get(r.dataId),c=d!==null&&d.isPacked,h=c?n.unpackTensor(r):r,m=v.sizeFromShape(u)/p,f=de({inputs:{x:h},attrs:{shape:[m,p]},backend:n});c&&Bs(n,h);let g=cI(s),y=cI(p),b=null,x=()=>b===null?[f,f]:[f,b],w=($,R,F)=>{let S=x(),M=new vse(F),B=[[p],[b===null?1:0],[Number.NEGATIVE_INFINITY],[$],[R]],U=b;b=n.runWebGLProgram(M,S,"int32",B),Bs(n,U)};for(let $=1;$<g;$*=2){let R=$*2;for(let F=$;F>=1;F/=2)w(R,F,[m,y])}for(let $=y;$>g;$/=2){let R=x(),F=new wse([m,$/2]),S=[[p],[b===null?1:0],[g]],M=b;b=n.runWebGLProgram(F,R,"int32",S),Bs(n,M);let B=g/2,U=B*2;for(let G=B;G>=1;G/=2)w(U,G,b.shape)}let I=b;b=Vu({inputs:{x:b},backend:n,attrs:{begin:0,size:[m,s]}}),Bs(n,I);let T=lE({inputs:{x:f,indices:b},backend:n,attrs:{axis:1,batchDims:1}});Bs(n,f);let C=u.slice(0,-1);C.push(s),I=b,b=de({inputs:{x:b},attrs:{shape:C},backend:n}),Bs(n,I);let E=T;return T=de({inputs:{x:T},attrs:{shape:C},backend:n}),Bs(n,E),[T,b]}var Ise={kernelName:bu,backendName:"webgl",kernelFunc:kse},Sse=class{constructor(e,t,n,a,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=n==="nearest"?1:2,o;switch(a){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=`
|
|
float mapCoord(float outCoord, float len) {
|
|
float inCoord = outCoord;
|
|
if(${o} == 2) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
if (inCoord < sz2) {
|
|
inCoord = sz2 * float(int(float(-inCoord / sz2))) +
|
|
inCoord;
|
|
}
|
|
inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
inCoord -= sz2 * float(int(float(inCoord / sz2)));
|
|
if (inCoord >= len) {
|
|
inCoord = sz2 - inCoord - 1.0;
|
|
}
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 3) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord -= len * float(int(float(inCoord / sz)));
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 4) {
|
|
return clamp(outCoord, 0.0, len - 1.0);
|
|
} else {
|
|
return outCoord;
|
|
}
|
|
}
|
|
|
|
float readWithFillValue(int batch, int coordY, int coordX,
|
|
int channel) {
|
|
float outputValue;
|
|
if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {
|
|
outputValue = getImage(batch, coordY, coordX, channel);
|
|
} else {
|
|
outputValue = float(${r});
|
|
}
|
|
return outputValue;
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
float outputValue;
|
|
int batch = coords[0];
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
int channel = coords[3];
|
|
float xf = float(x);
|
|
float yf = float(y);
|
|
float a1 = getTransforms(batch, 0);
|
|
float a2 = getTransforms(batch, 1);
|
|
float a3 = getTransforms(batch, 2);
|
|
float b1 = getTransforms(batch, 3);
|
|
float b2 = getTransforms(batch, 4);
|
|
float b3 = getTransforms(batch, 5);
|
|
float c1 = getTransforms(batch, 6);
|
|
float c2 = getTransforms(batch, 7);
|
|
float projection = c1 * xf + c2 * yf + 1.0;
|
|
if (projection == 0.0) {
|
|
outputValue = float(${r});
|
|
} else {
|
|
float inX = (a1 * xf + a2 * yf + a3) / projection;
|
|
float inY = (b1 * xf + b2 * yf + b3) / projection;
|
|
float mapX = mapCoord(inX, float(${t}));
|
|
float mapY = mapCoord(inY, float(${e}));
|
|
|
|
if (${i} == 1) {
|
|
int coordY = int(round(mapY));
|
|
int coordX = int(round(mapX));
|
|
outputValue = readWithFillValue(batch, coordY, coordX,
|
|
channel);
|
|
} else {
|
|
float yFloor = floor(mapY);
|
|
float xFloor = floor(mapX);
|
|
float yCeil = yFloor + 1.0;
|
|
float xCeil = xFloor + 1.0;
|
|
float valueYFloor = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yFloor), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yFloor), int(xCeil), channel);
|
|
float valueYCeil = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yCeil), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yCeil), int(xCeil), channel);
|
|
outputValue = (yCeil - mapY) * valueYFloor +
|
|
(mapY - yFloor) * valueYCeil;
|
|
}
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}};function Tse(e){let{inputs:t,backend:n,attrs:a}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=new Sse(d,c,i,o,l,g);return n.runWebGLProgram(y,[r,s],"float32")}var Nse={kernelName:xu,backendName:"webgl",kernelFunc:Tse};function Cse(e){let{inputs:t,attrs:n,backend:a}=e,{axis:r}=n,{x:s}=t;Pu(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=a.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=P7(i,r,s.shape,s.dtype);return[a.makeTensorInfo(l,s.dtype,o),a.makeTensorInfo([u.length],"int32",u)]}var _se={kernelName:Nm,backendName:"webgl",kernelFunc:Cse};function Ese(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let f=0;f<o;f++)f!==s&&(u[p++]=i.shape[f]);let d=[],c=new Array(o).fill(0),h=i.shape.slice();h[s]=1;let m=new Array(l);for(let f=0;f<m.length;f++){c[s]=f;let g=Vu({inputs:{x:i},backend:n,attrs:{begin:c,size:h}}),y=de({inputs:{x:g},backend:n,attrs:{shape:u}});m[f]=y,d.push(g)}return d.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var Ase={kernelName:vu,backendName:"webgl",kernelFunc:Ese},$se=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,a=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/n);this.outputShape=[a,i];let o="0.0",l="sumValue",u=Math.floor(n/4)*4,p=n%4,d=`
|
|
sumValue += dot(values, segFilter);
|
|
`,c="";r%n>0&&(c=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return initializationValue;
|
|
}
|
|
`);let h="";r%n>0&&(h=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${o};
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${c}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
${h}
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
${s})) * float(${n}));
|
|
int currentSeg = int(mod(float(outIdx), float(${s})));
|
|
|
|
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 (${p===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 (${p===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 (${p===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(${l});
|
|
}
|
|
`}};function Fse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,segmentIds:s}=t,{numSegments:i}=a,o=r.shape.length,l=[],u=0,p=N.getAxesPermutation([u],o),d=r;p!=null&&(d=In({inputs:{x:r},backend:n,attrs:{perm:p}}),l.push(d),u=N.getInnerMostAxes(1,o)[0]);let c=N.segment_util.computeOutShape(d.shape,u,i),h=v.sizeFromShape([d.shape[u]]),m=de({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});l.push(m);let f=_m(r.dtype),g=(w,I,T,C,E)=>{let $=w.shape[0],R=w.shape[1],F=N.segment_util.segOpComputeOptimalWindowSize(R,E),S={windowSize:F,inSize:R,batchSize:$,numSegments:E},M=new $se(S,I),B=n.compileAndRun(M,[w,T],C);if(l.push(B),B.shape[1]===E)return B;let U=fE({backend:n,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),G=yE({inputs:{x:U},backend:n,attrs:{reps:[R/F]}});return l.push(U),l.push(G),g(B,I,G,C,E)},y=g(m,"unsortedSegmentSum",s,f,i),b=de({inputs:{x:y},backend:n,attrs:{shape:c}}),x=b;if(p!=null){l.push(b);let w=N.getUndoAxesPermutation(p);x=In({inputs:{x},backend:n,attrs:{perm:w}})}return l.forEach(w=>n.disposeIntermediateTensorInfo(w)),x}var Rse={kernelName:vc,backendName:"webgl",kernelFunc:Fse},Dse=[EJ,$J,DJ,OJ,zJ,VJ,GJ,qJ,YJ,JJ,t9,r9,o9,c9,m9,g9,b9,k9,S9,N9,A9,O9,z9,B9,j9,X9,Q9,dJ,nQ,oQ,cQ,yQ,xQ,wQ,IQ,TQ,_Q,$Q,DQ,PQ,LQ,WQ,UQ,HQ,XQ,ZQ,eee,aee,see,uee,hee,yee,vee,Iee,See,Nee,_ee,Aee,Fee,Dee,Lee,Bee,Gee,qee,Xee,Jee,nte,ite,cJ,lte,sQ,cte,mte,yte,mJ,wte,Tte,Cte,$te,Dte,Lte,Bte,Hte,Xte,Jte,ene,rne,ine,lne,dne,mne,gne,bne,vne,Sne,_ne,Fne,Wne,yJ,Gne,jne,Yne,Qne,U9,nae,rae,iae,uae,hae,gJ,fae,yae,xae,wae,kae,G9,Pne,Tae,Eae,Rae,xJ,Oae,Wae,Gae,jae,Zae,Qae,nre,sre,ore,pre,hre,gre,vre,Ire,Nre,Ere,M9,Lne,Fre,Dre,Pre,Lre,Wre,Vre,Gre,qre,Kre,Zre,Qre,tse,rse,ise,lse,pse,One,NJ,hse,gse,xse,Ise,Nse,CJ,_se,Ase,Rse,aae];for(let e of Dse)wc(e);var At;(function(e){e[e.float32=0]="float32",e[e.int32=1]="int32",e[e.bool=2]="bool",e[e.string=3]="string",e[e.complex64=4]="complex64"})(At||(At={}));var nc;(function(e){e[e.linear=0]="linear",e[e.relu=1]="relu",e[e.relu6=2]="relu6",e[e.prelu=3]="prelu",e[e.leakyrelu=4]="leakyrelu",e[e.sigmoid=5]="sigmoid",e[e.elu=6]="elu"})(nc||(nc={}));var bE;function Mse(e){bE=e.wasm.cwrap(Qs,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Pse(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a,c=n.dataIdMap.get(r.dataId).id,h=n.dataIdMap.get(s.dataId).id,m=0;if(i!=null){let E=n.dataIdMap.get(i.dataId);if(E.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${E.shape.length}.`);m=E.id}let f=o==null?0:n.dataIdMap.get(o.dataId).id,g=nc[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],b=u?s.shape[1]:s.shape[2],x=Iu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),w=n.makeOutput([...x,y,b],r.dtype),I=n.dataIdMap.get(w.dataId).id,T=new Uint8Array(new Int32Array(r.shape).buffer),C=new Uint8Array(new Int32Array(s.shape).buffer);return bE(c,T,r.shape.length,h,C,s.shape.length,l,u,g,m,f,d||0,I),w}var Ose={kernelName:Qs,backendName:"wasm",setupFunc:Mse,kernelFunc:Pse};function Ut(e,t){let n;function a(s){n=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),p=i.dataIdMap.get(u.dataId).id;return v.sizeFromShape(u.shape)===0||n(l,At[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:r}}var Lse=Ut(wl);function dn(e,t,n){let a;function r(i){a=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:p}=l,d=o.dataIdMap.get(u.dataId).id,c=o.dataIdMap.get(p.dataId).id,h=n!=null?n:u.dtype,m=N.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(v.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),b=o.dataIdMap.get(f.dataId).id;return a(d,g,u.shape.length,c,y,p.shape.length,At[u.dtype],b),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var zse=!0,Wse=dn(fs,zse),xE;function Bse(e){xE=e.wasm.cwrap(yi,null,["array","number","number","number"])}function Vse(e){let{inputs:t,backend:n}=e,a=n.makeOutput(t[0].shape,t[0].dtype);if(v.sizeFromShape(a.shape)===0)return a;let r=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=n.dataIdMap.get(a.dataId).id;return xE(s,r.length,At[a.dtype],i),a}var Use={kernelName:yi,backendName:"wasm",setupFunc:Bse,kernelFunc:Vse};function Rf(e){let{inputs:{x:t},backend:n}=e;if(t.dtype==="string")return fn(n.readSync(t.dataId),t.shape,t.dtype);let a=n.makeOutput(t.shape,t.dtype),r=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(a).set(r),a}var Gse={kernelName:Pi,backendName:"wasm",kernelFunc:Rf},vE;function Hse(e){vE=e.wasm.cwrap(Cr,null,["number","array","number","number","number","array","number"])}function ds(e){let{inputs:t,backend:n,attrs:a}=e,[r,s]=jse(t.x.shape,a.perm),i=!0;for(let m=0;m<s.length;m++)s[m]!==m&&(i=!1);let o=qse(t.x.shape,a.perm),l={dataId:t.x.dataId,shape:r,dtype:t.x.dtype};if(i){let m=Rf({inputs:t,backend:n});return m.shape=o,m}let u=n.makeOutput(o,l.dtype),p=n.dataIdMap.get(l.dataId).id,d=n.dataIdMap.get(u.dataId).id,c=new Uint8Array(new Int32Array(s).buffer),h=new Uint8Array(new Int32Array(l.shape).buffer);return vE(p,h,l.shape.length,At[l.dtype],d,c,s.length),u}function qse(e,t){let n=new Array(e.length);for(let a=0;a<n.length;a++)n[a]=e[t[a]];return n}function jse(e,t){let n=[],a=[];for(let r=0;r<e.length;++r)e[r]!==1&&n.push(e[r]),e[t[r]]!==1&&a.push(t[r]);for(let r=0;r<a.length;++r){let s=-1;for(let i=0;i<a.length;++i)a[i]>=r&&(s===-1||a[s]>a[i])&&(s=i);a[s]=r}return[n,a]}var Kse={kernelName:Cr,backendName:"wasm",kernelFunc:ds,setupFunc:Hse};function Cs(e,t,n){let a=e.shape,r=e.shape.length,s=v.parseAxisParam(t,a),i=s,o=N.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let c=0;c<p.length;c++)p[c]=a[o[c]];i=N.getInnerMostAxes(i.length,r),l=ds({inputs:{x:e},attrs:{perm:o},backend:n});let d=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==d&&(u=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:u}}var wE;function Xse(e){wE=e.wasm.cwrap(Sl,null,["number, number, number"])}function Yse(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=Cs(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;N.assertAxesAreInnerMostDims("all",p,h);let[m,f]=N.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;wE(o,g,b)}if(c&&t.disposeData(u.dataId),s){let b=N.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var Zse={kernelName:Sl,backendName:"wasm",setupFunc:Xse,kernelFunc:Yse},kE;function Jse(e){kE=e.wasm.cwrap(Tl,null,["number, number, number"])}function Qse(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=Cs(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;N.assertAxesAreInnerMostDims("any",p,h);let[m,f]=N.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;kE(o,g,b)}if(c&&t.disposeData(u.dataId),s){let b=N.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var eie={kernelName:Tl,backendName:"wasm",setupFunc:Jse,kernelFunc:Qse},IE;function tie(e){IE=e.wasm.cwrap(bi,null,["number","number","number","number","number"])}function nie(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r}=a,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=i,l=s,{transposed:u,axes:p,inputWasTransposed:d}=Cs(s,r,t);if(d){let y=t.dataIdMap.get(u.dataId).id;y!==i&&(l=u,o=y)}let c=l.shape.slice(0,-1),h=t.makeOutput(c,"int32"),m=t.dataIdMap.get(h.dataId).id,f=v.sizeFromShape(h.shape),g=l.shape[p[0]];return IE(o,At[l.dtype],f,g,m),d&&t.disposeData(u.dataId),h}var aie={kernelName:bi,backendName:"wasm",kernelFunc:nie,setupFunc:tie},SE;function rie(e){SE=e.wasm.cwrap(xi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function sie(e){let{inputs:t,attrs:n,backend:a}=e,r=t.x,s=a.dataIdMap.get(r.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=N.computePool2DInfo(r.shape,i,o,1,l,u),d=p.filterHeight,c=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.strideHeight,b=p.strideWidth,x=p.inChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);if(p.dilationWidth!==1||p.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${p.dilationHeight}, ${p.dilationWidth}].`);let w=a.makeOutput(p.outShape,"float32"),I=a.dataIdMap.get(w.dataId).id;return SE(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,y,b,x,I),w}var iie={kernelName:xi,backendName:"wasm",setupFunc:rie,kernelFunc:sie};function Wn(e){let{inputs:t,attrs:n}=e,{x:a}=t,{shape:r}=n,s=v.sizeFromShape(a.shape),i=v.inferFromImplicitShape(r,s);return v.assert(s===v.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${a.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(a.dataId),{dataId:a.dataId,shape:i,dtype:a.dtype}}var oie={kernelName:iu,backendName:"wasm",kernelFunc:Wn},TE;function lie(e){TE=e.wasm.cwrap(vi,null,["number","array","number","number","array","number","number","number","number"])}function uie(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],d=o?s.shape[u-1]:s.shape[u-2],c=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=v.sizeFromShape(m),y=v.sizeFromShape(f),b=Iu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([c,h]);v.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,p,c]:[g,c,p],w=o?[y,h,d]:[y,d,h],I=Wn({inputs:{x:r},backend:n,attrs:{shape:x}}),T=Wn({inputs:{x:s},backend:n,attrs:{shape:w}}),C=n.dataIdMap.get(I.dataId).id,E=n.dataIdMap.get(T.dataId).id,$=i?I.shape[2]:I.shape[1],R=o?T.shape[1]:T.shape[2],F=Math.max(g,y),S=n.makeOutput([F,$,R],I.dtype),M=n.dataIdMap.get(S.dataId).id,B=new Uint8Array(new Int32Array(I.shape).buffer),U=new Uint8Array(new Int32Array(T.shape).buffer);return TE(C,B,I.shape.length,E,U,T.shape.length,i,o,M),n.disposeData(I.dataId),n.disposeData(T.dataId),S.shape=b,S}var pie={kernelName:vi,backendName:"wasm",setupFunc:lie,kernelFunc:uie};function fi(e){let{inputs:{x:t},attrs:{begin:n,size:a},backend:r}=e,[s,i]=Kt.parseSliceParams(t,n,a),o=Kt.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),p=v.computeStrides(t.shape),d=r.dataIdMap.get(u.dataId);if(o){let m=Kt.computeFlatOffset(s,p);return t.dtype==="string"?d.stringBytes=l.slice(m,m+v.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+v.sizeFromShape(i))),u}if(t.dtype==="string"){let m=Ph(l,s,i,t.shape,t.dtype);return d.stringBytes=m,u}let c=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)cie(l,p[0],c,s,i);else if(h===3)die(l,p[0],p[1],c,s,i);else if(h===4)hie(l,p[0],p[1],p[2],c,s,i);else{let m=Ph(l,s,i,t.shape,t.dtype);c.set(m)}return u}function cie(e,t,n,a,r){let s=0,i=a[0],o=a[1],l=i+r[0];for(let u=i;u<l;u++){let p=u*t+o;n.set(e.subarray(p,p+r[1]),s),s+=r[1]}}function die(e,t,n,a,r,s){let i=0,o=r[0],l=r[1],u=r[2],p=o+s[0],d=l+s[1];for(let c=o;c<p;c++)for(let h=l;h<d;h++){let m=c*t+h*n+u;a.set(e.subarray(m,m+s[2]),i),i+=s[2]}}function hie(e,t,n,a,r,s,i){let o=0,l=s[0],u=s[1],p=s[2],d=l+i[0],c=u+i[1],h=p+i[2],m=s[3];for(let f=l;f<d;f++)for(let g=u;g<c;g++)for(let y=p;y<h;y++){let b=f*t+g*n+y*a+m;r.set(e.subarray(b,b+i[3]),o),o+=i[3]}}var mie={kernelName:pu,backendName:"wasm",kernelFunc:fi};function fie(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a,o=s.reduce((y,b)=>y*b),l=N.getReshaped(r.shape,s,o),u=N.getPermuted(l.length,s.length),p=N.getReshapedPermuted(r.shape,s,o),d=N.getSliceBeginCoords(i,s.length),c=N.getSliceSize(p,i,s.length),h=Wn({inputs:{x:r},backend:n,attrs:{shape:l}}),m=ds({inputs:{x:h},backend:n,attrs:{perm:u}}),f=Wn({inputs:{x:m},backend:n,attrs:{shape:p}}),g=fi({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeData(h.dataId),n.disposeData(m.dataId),n.disposeData(h.dataId),g}var gie={kernelName:$l,backendName:"wasm",kernelFunc:fie};function Uu(e){let{inputs:{x:t},attrs:{dtype:n},backend:a}=e,r=a.makeOutput(t.shape,n),s=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(r).set(s),r}var yie={kernelName:wi,backendName:"wasm",kernelFunc:Uu},bie=Ut(ki),NE;function xie(e){NE=e.wasm.cwrap(gs,null,["number","number","number","number"])}function vie(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o=n.dataIdMap.get(r.dataId).id,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(l.dataId).id;return NE(o,s,i,u),l}var wie={kernelName:gs,backendName:"wasm",setupFunc:xie,kernelFunc:vie};function CE(e){let{inputs:t,backend:n}=e,a=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=t.map(h=>h.shape);N.assertParamsConsistent(r,a);let s=N.computeOutShape(t.map(h=>h.shape),a),i=t.filter(h=>v.sizeFromShape(h.shape)>0);if(i.length===1)return Rf({inputs:{x:i[0]},backend:n});let o=n.makeOutput(s,t[0].dtype);if(v.sizeFromShape(s)===0)return o;if(i[0].dtype==="string"){let h=i.map(x=>{let w=[-1,v.sizeFromShape(x.shape.slice(a))];return Wn({inputs:{x},backend:n,attrs:{shape:w}})}),m=h.map(x=>({vals:n.readSync(x.dataId),shape:x.shape}));s=N.computeOutShape(h.map(x=>x.shape),1);let f=h[0].shape[0]===1,g=$0(m,s,t[0].dtype,f),y=N.computeOutShape(i.map(x=>x.shape),a);o.shape=y;let b=n.dataIdMap.get(o.dataId);return b.stringBytes=N.fromStringArrayToUint8(g),h.forEach(x=>n.disposeData(x.dataId)),o}let l=v.sizeFromShape(i[0].shape.slice(0,a)),u=0,p=i.map(h=>{let m=v.sizeFromShape(h.shape.slice(a));return u+=m,m}),d=i.map(h=>n.typedArrayFromHeap(h)),c=n.typedArrayFromHeap(o);for(let h=0;h<l;h++){let m=h*u;for(let f=0;f<d.length;f++){let g=p[f],y=h*g,b=d[f].subarray(y,y+g);c.set(b,m),m+=g}}return o}var kie={kernelName:Fl,backendName:"wasm",kernelFunc:CE},_E;function Iie(e){_E=e.wasm.cwrap(Ii,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Sie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s}=t,i=a.dataIdMap.get(r.dataId).id,o=a.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:d,dataFormat:c}=n,h=N.convertConv2DDataFormat(c),m=N.computeConv2DInfo(r.shape,s.shape,l,u,p,d,!1,h),f=m.filterHeight,g=m.filterWidth,y=m.padInfo.top,b=m.padInfo.right,x=m.padInfo.bottom,w=m.padInfo.left,I=m.dilationHeight,T=m.dilationWidth,C=m.strideHeight,E=m.strideWidth,$=m.inChannels,R=m.outChannels,F=m.padInfo.type==="SAME"?1:0;if(m.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${m.dataFormat}'. Please use 'channelsLast'.`);let S=a.makeOutput(m.outShape,"float32"),M=a.dataIdMap.get(S.dataId).id;return _E(i,r.shape[0],r.shape[1],r.shape[2],o,f,g,y,b,x,w,F,I,T,C,E,$,R,M),S}var Tie={kernelName:Ii,backendName:"wasm",setupFunc:Iie,kernelFunc:Sie},EE;function Nie(e){EE=e.wasm.cwrap(Si,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Cie(e){let{backend:t,inputs:n,attrs:a}=e,{dy:r,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,inputShape:p}=a,d=1,c=N.convertConv2DDataFormat(l),h=N.computeConv2DInfo(p,s.shape,i,d,o,u,!1,c),{batchSize:m,filterHeight:f,filterWidth:g,inChannels:y,inHeight:b,inWidth:x,outChannels:w,outHeight:I,outWidth:T,strideHeight:C,strideWidth:E}=h,$=f-1-h.padInfo.top,R=g-1-h.padInfo.left,F=h.dataFormat==="channelsLast",S=v.computeStrides(h.inShape),M=v.computeStrides(r.shape),[B,U,G]=v.computeStrides(s.shape),j=S[0],K=F?S[1]:S[2],Z=F?S[2]:1,J=F?1:S[1],ee=M[0],ae=F?M[1]:M[2],te=F?M[2]:1,re=F?1:M[1],se=t.makeOutput(h.inShape,"float32"),be=t.dataIdMap.get(se.dataId).id,ue=t.dataIdMap.get(r.dataId).id,ye=t.dataIdMap.get(s.dataId).id;return EE(ue,ye,m,f,g,b,x,y,I,T,w,C,E,$,R,B,U,G,j,K,Z,J,ee,ae,te,re,be),se}var _ie={kernelName:Si,backendName:"wasm",setupFunc:Nie,kernelFunc:Cie},Eie=Ut(Ti),Aie=Ut(Ni),cx;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(cx||(cx={}));var AE;function $ie(e){AE=e.wasm.cwrap(Dl,null,["number","number","number","number","array","number","number","number","number","number"])}function Fie(e){let{backend:t,inputs:n,attrs:a}=e,{method:r,extrapolationValue:s,cropSize:i}=a,{image:o,boxes:l,boxInd:u}=n,p=l.shape[0],[d,c]=i,h=[p,d,c,o.shape[3]],m=t.dataIdMap.get(o.dataId),f;o.dtype!=="float32"&&(f=Uu({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(f.dataId));let g=m.id,y=t.dataIdMap.get(l.dataId).id,b=t.dataIdMap.get(u.dataId).id,x=t.makeOutput(h,"float32"),w=t.dataIdMap.get(x.dataId).id,I=new Uint8Array(new Int32Array(o.shape).buffer);return AE(g,y,b,p,I,d,c,cx[r],s,w),f!=null&&t.disposeData(f.dataId),x}var Rie={kernelName:Dl,backendName:"wasm",setupFunc:$ie,kernelFunc:Fie},$E;function Die(e){$E=e.wasm.cwrap(Rl,null,["number","number","number","number","number","number"])}function Mie(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=N.getAxesPermutation([s],l),p=r;u!==null&&(p=ds({inputs:{x:r},attrs:{perm:u},backend:n}));let d=N.getInnerMostAxes(1,l)[0];N.assertAxesAreInnerMostDims("cumprod",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;$E(m,i?1:0,o?1:0,h,f,At[r.dtype]);let g=c;if(u!==null){let y=N.getUndoAxesPermutation(u);g=ds({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var Pie={kernelName:Rl,backendName:"wasm",setupFunc:Die,kernelFunc:Mie},FE;function Oie(e){FE=e.wasm.cwrap(Ci,null,["number","number","number","number","number","number"])}function Lie(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length;v.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=N.getAxesPermutation([s],l),p=r;u!==null&&(p=ds({inputs:{x:r},attrs:{perm:u},backend:n}));let d=N.getInnerMostAxes(1,l)[0];N.assertAxesAreInnerMostDims("cumsum",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;FE(m,i?1:0,o?1:0,h,f,At[r.dtype]);let g=c;if(u!==null){let y=N.getUndoAxesPermutation(u);g=ds({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var zie={kernelName:Ci,backendName:"wasm",setupFunc:Oie,kernelFunc:Lie},RE;function Wie(e){RE=e.wasm.cwrap(Ml,null,["number","number","number","array","number","array","array","number","number"])}function Bie(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{blockSize:s,dataFormat:i}=a,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],d=l*s,c=u*s,h=p/(s*s),m=i==="NHWC"?[o,d,c,h]:[o,h,d,c],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),b=new Uint8Array(new Int32Array(m).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),w=t.dataIdMap.get(f.dataId).id;return RE(g,s,i==="NHWC"?1:0,y,r.shape.length-1,b,x,m.length,w),f}var Vie={kernelName:Ml,backendName:"wasm",setupFunc:Wie,kernelFunc:Bie},DE;function Uie(e){DE=e.wasm.cwrap(_i,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Gie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s}=t,i=a.dataIdMap.get(r.dataId).id,o=a.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:d}=n,c=u==null?[1,1]:u,h=N.computeConv2DInfo(r.shape,s.shape,l,c,p,d,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,b=h.padInfo.bottom,x=h.padInfo.left,w=h.dilationHeight,I=h.dilationWidth,T=h.strideHeight,C=h.strideWidth,E=h.inChannels,$=h.outChannels,R=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let F=a.makeOutput(h.outShape,"float32"),S=a.dataIdMap.get(F.dataId).id;return DE(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,b,x,R,w,I,T,C,E,$,S),F}var Hie={kernelName:_i,backendName:"wasm",setupFunc:Uie,kernelFunc:Gie},qie=Ut(Ai),jie=!1,Kie=dn(Ol,jie,"bool"),Xie=Ut($i,"float32");function dx(e){let{inputs:t,attrs:n,backend:a}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(v.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Wn({inputs:{x:r},backend:a,attrs:{shape:o}})}var Yie={kernelName:Ll,backendName:"wasm",kernelFunc:dx};function ME(e){let{attrs:{shape:t,value:n,dtype:a},backend:r}=e,s=r.makeOutput(t,a);return r.typedArrayFromHeap(s).fill(n),s}var Zie={kernelName:uc,backendName:"wasm",kernelFunc:ME},PE;function Jie(e){PE=e.wasm.cwrap(Wl,null,["number","number","number","number","number","number"])}function Qie(e){let{inputs:t,backend:n}=e,{image:a}=t,r=n.makeOutput(a.shape,a.dtype),s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,[o,l,u,p]=a.shape;return PE(s,o,l,u,p,i),r}var eoe={kernelName:Wl,backendName:"wasm",kernelFunc:Qie,setupFunc:Jie},toe=Ut(Fi),noe=!1,aoe=dn(Ri,noe),OE;function roe(e){OE=e.wasm.cwrap(Di,null,["number","number","number","number","number","number","number"])}function soe(e){let{backend:t,inputs:n,attrs:a}=e,{varianceEpsilon:r}=a,{x:s,mean:i,variance:o,offset:l,scale:u}=n,p=t.dataIdMap.get(s.dataId).id,d=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(v.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return OE(p,d,c,h,m,r,g),f}var ioe={kernelName:Di,backendName:"wasm",setupFunc:roe,kernelFunc:soe},LE;function ooe(e){LE=e.wasm.cwrap(ei,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function loe(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=N.computeConv2DInfo(r.shape,s.shape,l,p,u,c),g=nc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,w=0;if(i!=null){let te=a.dataIdMap.get(i.dataId);if(te.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${te.shape.length}.`);if(te.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${te.shape}) does not match the number of output channels (${x})`);w=te.id}let I=f.filterHeight,T=f.filterWidth,C=f.padInfo.top,E=f.padInfo.right,$=f.padInfo.bottom,R=f.padInfo.left,F=f.dilationHeight,S=f.dilationWidth,M=f.strideHeight,B=f.strideWidth,U=f.inChannels,G=f.padInfo.type==="SAME"?1:0,j=f.batchSize,K=f.inHeight,Z=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let J=a.makeOutput(f.outShape,"float32"),ee=a.dataIdMap.get(J.dataId).id,ae=o==null?0:a.dataIdMap.get(o.dataId).id;return LE(y,j,K,Z,b,I,T,w,C,E,$,R,G,F,S,M,B,U,x,g,ae,m||0,ee),J}var uoe={kernelName:ei,backendName:"wasm",setupFunc:ooe,kernelFunc:loe},zE;function poe(e){zE=e.wasm.cwrap(ti,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function coe(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=N.computeConv2DInfo(r.shape,s.shape,l,p,u,c,!0),g=nc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,w=0;if(i!=null){let te=a.dataIdMap.get(i.dataId);if(te.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${te.shape.length}.`);if(te.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${te.shape}) does not match the number of output channels (${x})`);w=te.id}let I=f.filterHeight,T=f.filterWidth,C=f.padInfo.top,E=f.padInfo.right,$=f.padInfo.bottom,R=f.padInfo.left,F=f.dilationHeight,S=f.dilationWidth,M=f.strideHeight,B=f.strideWidth,U=f.inChannels,G=f.padInfo.type==="SAME"?1:0,j=f.batchSize,K=f.inHeight,Z=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let J=a.makeOutput(f.outShape,"float32"),ee=a.dataIdMap.get(J.dataId).id,ae=o==null?0:a.dataIdMap.get(o.dataId).id;return zE(y,j,K,Z,b,I,T,w,C,E,$,R,G,F,S,M,B,U,x,g,ae,m||0,ee),J}var doe={kernelName:ti,backendName:"wasm",setupFunc:poe,kernelFunc:coe},WE;function hoe(e){WE=e.wasm.cwrap(Vl,null,["number","number","number","number","number","number","array","number"])}function moe(e){let{backend:t,inputs:n}=e,{params:a,indices:r}=n,[s,i,o,l]=Hv.prepareAndValidate(a,r),u=t.makeOutput(s,a.dtype);if(i===0)return u;let p=r.shape,d=p[p.length-1],c=t.dataIdMap.get(a.dataId).id,h=t.dataIdMap.get(r.dataId).id,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return WE(c,At[a.dtype],h,i,d,o,m,f),u}var foe={kernelName:Vl,backendName:"wasm",setupFunc:hoe,kernelFunc:moe},BE;function goe(e){BE=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function yoe(e){let{backend:t,inputs:n,attrs:a}=e,{x:r,indices:s}=n,{axis:i,batchDims:o}=a,l=v.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),p=r.shape[l];for(let C=0;C<u.length;++C){let E=u[C];v.assert(E<=p-1&&E>=0,()=>`GatherV2: the index value ${E} is not in [0, ${p-1}]`)}let d=N.segment_util.collectGatherOpShapeInfo(r,s,l,o),c=Wn({inputs:{x:r},attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=Wn({inputs:{x:s},attrs:{shape:[d.batchSize,h/d.batchSize]},backend:t}),f=[d.batchSize,d.outerSize,h/d.batchSize,d.sliceSize],g=t.makeOutput(f,r.dtype);if(v.sizeFromShape(r.shape)===0)return g;let y=c.shape.length-1,b=t.dataIdMap.get(c.dataId).id,x=t.dataIdMap.get(m.dataId).id,w=t.dataIdMap.get(g.dataId).id,I=new Uint8Array(new Int32Array(v.computeStrides(c.shape)).buffer),T=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return BE(b,At[r.dtype],I,y,x,d.batchSize,T,w),t.disposeData(c.dataId),t.disposeData(m.dataId),g.shape=d.outputShape,g}var boe={kernelName:Bl,backendName:"wasm",setupFunc:goe,kernelFunc:yoe},xoe=!1,voe=dn(Ul,xoe,"bool"),woe=!1,koe=dn(Mi,woe,"bool"),Ioe=Ut(Oi,"bool"),VE;function Soe(e){VE=e.wasm.cwrap(Li,null,["number","number","number","number"])}function Toe(e){let{inputs:{x:t},attrs:{alpha:n},backend:a}=e,r=a.dataIdMap.get(t.dataId).id,s=a.makeOutput(t.shape,"float32");if(v.sizeFromShape(t.shape)!==0){let i=a.dataIdMap.get(s.dataId).id;VE(r,At[t.dtype],n,i)}return s}var Noe={kernelName:Li,backendName:"wasm",setupFunc:Soe,kernelFunc:Toe},Coe=!1,_oe=dn(ql,Coe,"bool"),Eoe=!1,Aoe=dn(jl,Eoe,"bool"),$oe=Ut(zi),Foe=!1,Roe=dn(Xl,Foe,"bool"),Doe=Ut(Yl),Moe=!1,Poe=dn(Zl,Moe,"bool"),Ooe=!1,Loe=dn(FI,Ooe,"bool"),UE;function zoe(e){UE=e.wasm.cwrap(Wi,null,["number","number","number","number"])}function Woe(e){let{backend:t,inputs:n,attrs:a}=e,{reductionIndices:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=Cs(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;N.assertAxesAreInnerMostDims("max",p,h);let[m,f]=N.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;UE(o,At[i.dtype],g,b)}if(c&&t.disposeData(u.dataId),s){let b=N.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var Boe={kernelName:Wi,backendName:"wasm",setupFunc:zoe,kernelFunc:Woe},Voe=!1,Uoe=dn(Bi,Voe),GE;function Goe(e){GE=e.wasm.cwrap(Vi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Hoe(e){let{inputs:t,attrs:n,backend:a}=e,r=t.x,s=a.dataIdMap.get(r.dataId).id;v.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=N.computePool2DInfo(r.shape,i,o,1,l,u),d=p.filterHeight,c=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,b=p.dilationWidth,x=p.strideHeight,w=p.strideWidth,I=p.inChannels,T=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let C=a.makeOutput(p.outShape,"float32"),E=a.dataIdMap.get(C.dataId).id;return GE(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,y,b,x,w,I,T,E),C}var qoe={kernelName:Vi,backendName:"wasm",setupFunc:Goe,kernelFunc:Hoe},HE;function joe(e){HE=e.wasm.cwrap(Ui,null,["number, number, number"])}function Koe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Cs(i,r,t),m=d;if(h){let w=t.dataIdMap.get(p.dataId).id;w!==o&&(u=p,l=w,m=N.getInnerMostAxes(m.length,u.shape.length))}N.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=N.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=Uu({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(b.dataId).id);let x=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let w=t.dataIdMap.get(x.dataId).id;HE(l,y,w)}if(h&&t.disposeData(p.dataId),s){let w=N.expandShapeToKeepDim(x.shape,c);x.shape=w}return u.dtype!=="float32"&&t.disposeData(b.dataId),x}var Xoe={kernelName:Ui,backendName:"wasm",setupFunc:joe,kernelFunc:Koe},qE;function Yoe(e){qE=e.wasm.cwrap(Gi,null,["number","number","number","number"])}function Zoe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Cs(i,r,t);if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x)}let m=u.shape.length;N.assertAxesAreInnerMostDims("min",d,m);let[f,g]=N.computeOutAndReduceShapes(u.shape,d),y=v.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;qE(l,At[i.dtype],y,x)}if(h&&t.disposeData(p.dataId),s){let x=N.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Joe={kernelName:Gi,backendName:"wasm",setupFunc:Yoe,kernelFunc:Zoe},Qoe=!1,ele=dn(Hi,Qoe),hx;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(hx||(hx={}));var jE;function tle(e){jE=e.wasm.cwrap(qi,null,["number","array","number","number","array","array","number","number"])}function nle(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,mode:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return jE(i,u,t.shape.length,At[t.dtype],c,h,hx[r],l),o}var ale={kernelName:qi,backendName:"wasm",kernelFunc:nle,setupFunc:tle},rle=!0,sle=dn(ji,rle),ile=Ut(Ql);function a1(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),a=n[0],r=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:a,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var KE;function ole(e){KE=e.wasm.cwrap(tu,"number",["number","number","number","number","number"])}function lle(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=a,{boxes:o,scores:l}=n,u=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(l.dataId).id,d=KE(u,p,s,r,i),{pSelectedIndices:c,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=a1(t,d);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",c)}var ule={kernelName:tu,backendName:"wasm",setupFunc:ole,kernelFunc:lle},XE;function ple(e){XE=e.wasm.cwrap(nu,"number",["number","number","number","number","number","bool"])}function cle(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=XE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=a1(t,c);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([],"int32",g);return[y,b]}var dle={kernelName:nu,backendName:"wasm",setupFunc:ple,kernelFunc:cle},YE;function hle(e){YE=e.wasm.cwrap(au,"number",["number","number","number","number","number","number"])}function mle(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=YE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=a1(t,c);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([m],"float32",f);return[y,b]}var fle={kernelName:au,backendName:"wasm",setupFunc:hle,kernelFunc:mle},gle=!1,yle=dn(eu,gle,"bool"),ZE;function ble(e){ZE=e.wasm.cwrap(Ki,null,["number","number","number","number","number"])}function xle(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{dtype:s,depth:i,onValue:o,offValue:l}=a,u=n.makeOutput([...r.shape,i],s),p=n.dataIdMap.get(u.dataId).id,d=n.dataIdMap.get(r.dataId).id;return ZE(d,i,o,l,p),u}var vle={kernelName:Ki,backendName:"wasm",setupFunc:ble,kernelFunc:xle};function wle(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(1),a}var kle={kernelName:ru,backendName:"wasm",kernelFunc:wle};function Ile(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return dx({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{v.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),v.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=dx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=CE({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeData(p.dataId)),u}var Sle={kernelName:su,backendName:"wasm",kernelFunc:Ile},JE;function Tle(e){JE=e.wasm.cwrap(Xi,null,["number","array","number","number","array","array","number","number"])}function Nle(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,constantValue:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]);if(v.sizeFromShape(t.shape)===0)return ME({backend:n,attrs:{shape:s,value:r,dtype:t.dtype}});let i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return JE(i,u,t.shape.length,At[t.dtype],c,h,r,l),o}var QE={kernelName:Xi,backendName:"wasm",kernelFunc:Nle,setupFunc:Tle},Cle=!1,_le=dn(Yi,Cle),eA;function Ele(e){eA=e.wasm.cwrap(Zi,null,["number","number","number"])}function Ale(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,o=s,l=a,u=l;l.dtype!=="float32"&&(u=Uu({backend:n,inputs:{x:a},attrs:{dtype:"float32"}}),o=n.dataIdMap.get(u.dataId).id);let p=n.makeOutput(a.shape,"float32"),d=n.dataIdMap.get(p.dataId).id;return eA(o,i,d),l.dtype!=="float32"&&n.disposeData(u.dataId),p}var $le={kernelName:Zi,backendName:"wasm",setupFunc:Ele,kernelFunc:Ale},tA;function Fle(e){tA=e.wasm.cwrap(Ji,null,["number","number","number","number"])}function Rle(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Cs(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=N.getInnerMostAxes(m.length,u.shape.length))}N.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=N.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;tA(l,y,At[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=N.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Dle={kernelName:Ji,backendName:"wasm",setupFunc:Fle,kernelFunc:Rle},Mle=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=D0(a,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Ple={kernelName:dc,backendName:"wasm",kernelFunc:Mle},Ole=!0,Lle=dn(Ei,Ole),zle=Ut(Qi),Wle=Ut(eo),Ble=Ut(ao),nA;function Vle(e){nA=e.wasm.cwrap(no,null,["number","number","number","number","number","number","number","number","number","number"])}function Ule(e){let{backend:t,inputs:n,attrs:a}=e,{images:r}=n,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,[p,d,c,h]=r.shape,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=Uu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,b=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return b;let x=t.dataIdMap.get(b.dataId).id;return nA(y,p,d,c,h,l,u,s?1:0,i?1:0,x),g!=null&&t.disposeData(g.dataId),b}var Gle={kernelName:no,backendName:"wasm",setupFunc:Vle,kernelFunc:Ule},aA;function Hle(e){aA=e.wasm.cwrap(to,null,["number","number","number","number","number","number","number","number","number","number"])}function qle(e){let{backend:t,inputs:n,attrs:a}=e,{images:r}=n,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,[p,d,c,h]=r.shape,m=[p,l,u,h],f=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return f;let g=t.dataIdMap.get(r.dataId),y;g.dtype!=="float32"&&(y=Uu({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(y.dataId));let b=g.id,x=t.dataIdMap.get(f.dataId).id;return aA(b,p,d,c,h,l,u,s?1:0,i?1:0,x),y!=null&&t.disposeData(y.dataId),f}var jle={kernelName:to,backendName:"wasm",setupFunc:Hle,kernelFunc:qle},rA;function Kle(e){rA=e.wasm.cwrap(ro,null,["number","array","number","array","number","number"])}function Xle(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a,i=v.parseAxisParam(s,r.shape);if(r.shape.length===0)return Rf({inputs:{x:r},backend:n});let o=n.makeOutput(r.shape,r.dtype),l=n.dataIdMap.get(r.dataId).id,u=n.dataIdMap.get(o.dataId).id,p=new Uint8Array(new Int32Array(i).buffer),d=new Uint8Array(new Int32Array(r.shape).buffer);rA(l,p,i.length,d,r.shape.length,u);let c=Wn({inputs:{x:o},attrs:{shape:r.shape},backend:n});return n.disposeData(o.dataId),c}var Yle={kernelName:ro,backendName:"wasm",kernelFunc:Xle,setupFunc:Kle},sA;function Zle(e){sA=e.wasm.cwrap(ku,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Jle(e){let{inputs:t,backend:n,attrs:a}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=a,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(r.dataId).id,p=n.dataIdMap.get(l.dataId).id,[d,c,h,m]=r.shape,[f,g]=N.getImageCenter(o,c,h),y=i===0,b=255,x=typeof i=="number"?[i,i,i,y?0:b]:[...i,b],w=new Uint8Array(new Int32Array(x).buffer);return sA(u,d,c,h,m,s,f,g,w,x.length,p),l}var Qle={kernelName:ku,backendName:"wasm",kernelFunc:Jle,setupFunc:Zle},eue=Ut(so),tue=Ut(io),iA;function nue(e){iA=e.wasm.cwrap(ou,null,["number","number","number","number","number","number","array","number","number"])}function aue(e){let{backend:t,inputs:n,attrs:a}=e,{indices:r,updates:s}=n,{shape:i}=a,o=t.makeOutput(i,s.dtype);if(v.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=Ev.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(d).buffer),g=t.dataIdMap.get(o.dataId).id;return iA(h,m,At[s.dtype],l,u,p,f,c,g),o}var rue={kernelName:ou,backendName:"wasm",setupFunc:nue,kernelFunc:aue},oA;function sue(e){oA=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function iue(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=n.dataIdMap.get(a.dataId).id,o=n.dataIdMap.get(r.dataId).id,l=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(r.shape,r.dtype),p=n.dataIdMap.get(u.dataId).id,d=a.shape.length,c=r.shape.length,h=d===0||d>1||c===1?1:v.sizeFromShape(r.shape.slice(1));return oA(i,o,l,h,p),u}var oue={kernelName:lu,backendName:"wasm",kernelFunc:iue,setupFunc:sue},lA;function lue(e){lA=e.wasm.cwrap(lo,null,["number","number"])}function uue(e){let{backend:t,inputs:{x:n}}=e,a=t.dataIdMap.get(n.dataId).id,r=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(r.dataId).id;return v.sizeFromShape(r.shape)===0||lA(a,s),r}var pue={kernelName:"Sigmoid",backendName:"wasm",setupFunc:lue,kernelFunc:uue},cue=Ut(oo),uA;function due(e){uA=e.wasm.cwrap(co,null,["number","number","number","number"])}function hue(e){let{backend:t,inputs:{logits:n},attrs:{dim:a}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[a],l=v.sizeFromShape(n.shape)/o;return v.sizeFromShape(s.shape)===0||uA(r,i,o,l),s}var mue={kernelName:co,backendName:"wasm",setupFunc:due,kernelFunc:hue};function fue(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a,o=v.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g<r.shape.length;++g)l.push([0,0]);let u=QE.kernelFunc({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),p=N.getReshaped(u.shape,s,o,!1),d=N.getPermuted(p.length,s.length,!1),c=N.getReshapedPermuted(u.shape,s,o,!1),h=Wn({inputs:{x:u},backend:n,attrs:{shape:p}}),m=ds({inputs:{x:h},backend:n,attrs:{perm:d}}),f=Wn({inputs:{x:m},backend:n,attrs:{shape:c}});return n.disposeData(u.dataId),n.disposeData(h.dataId),n.disposeData(m.dataId),f}var gue={kernelName:mu,backendName:"wasm",kernelFunc:fue},pA;function yue(e){pA=e.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function bue(e){let{backend:t,inputs:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=n,o=a.shape[0],l=a.shape[1],u=t.readSync(s.dataId)[0],p=[o+u,l],d=t.dataIdMap.get(a.dataId).id,c=t.dataIdMap.get(r.dataId).id,h=t.dataIdMap.get(i.dataId).id,m=t.makeOutput(p,a.dtype),f=t.dataIdMap.get(m.dataId).id,g=t.makeOutput(p.slice(0,1),r.dtype),y=t.dataIdMap.get(g.dataId).id,b=t.makeOutput([u],"bool"),x=t.dataIdMap.get(b.dataId).id,w=t.makeOutput([o],a.dtype),I=t.dataIdMap.get(w.dataId).id,T=t.makeOutput([4],"int32"),C=t.dataIdMap.get(T.dataId).id,E=pA(d,c,At[r.dtype],o,u,l,h,f,y,x,I,C),$=t.readSync(T.dataId),R;switch($[0]){case 1:{R=N.getSparseFillEmptyRowsIndicesDenseShapeMismatch($[1]);break}case 2:{R=N.getSparseFillEmptyRowsNegativeIndexErrorMessage($[1],$[2]);break}case 3:R=N.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage($[1],$[2],$[3]);break;default:R=""}if(t.disposeData(T.dataId),R)throw t.disposeData(m.dataId),t.disposeData(g.dataId),t.disposeData(b.dataId),t.disposeData(w.dataId),new Error(R);let F=m,S=g;return E!==p[0]&&(F=fi({inputs:{x:m},attrs:{begin:0,size:[E,l]},backend:t}),S=fi({inputs:{x:g},attrs:{begin:0,size:E},backend:t}),t.disposeData(m.dataId),t.disposeData(g.dataId)),[F,S,b,w]}var xue={kernelName:hc,backendName:"wasm",setupFunc:yue,kernelFunc:bue},cA;function vue(e){cA=e.wasm.cwrap(gu,null,["number","number","number","number","number","number","number"])}function wue(e){let{backend:t,inputs:n}=e,{inputIndices:a,inputShape:r,newShape:s}=n;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(a.dataId).id,o=t.dataIdMap.get(r.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=a.shape[0],p=v.sizeFromShape(s.shape),d=t.makeOutput([u,p],a.dtype),c=t.dataIdMap.get(d.dataId).id,h=t.makeOutput([p],s.dtype),m=t.dataIdMap.get(h.dataId).id,f=t.makeOutput([3],"int32"),g=t.dataIdMap.get(f.dataId).id;cA(i,o,l,u,c,m,g);let y=t.readSync(f.dataId),b;switch(y[0]){case 0:{b=N.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(y[1],y[2]);break}case 1:{b=N.getSparseReshapeNegativeOutputDimErrorMessage(y[1],y[2]);break}case 2:b=N.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let x=Array.from(t.readSync(r.dataId)),w=Array.from(t.readSync(h.dataId));b=N.getSparseReshapeInputOutputMultipleErrorMessage(x,w);break}case 4:{let x=Array.from(t.readSync(r.dataId)),w=Array.from(t.readSync(h.dataId));b=N.getSparseReshapeInputOutputMismatchErrorMessage(x,w);break}default:b=""}if(t.disposeData(f.dataId),b)throw t.disposeData(d.dataId),t.disposeData(h.dataId),new Error(b);return[d,h]}var kue={kernelName:gu,backendName:"wasm",setupFunc:vue,kernelFunc:wue},dA;function hA(e){dA=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function mA(e,t){let{backend:n,inputs:a}=e,{data:r,indices:s,segmentIds:i}=a,o=s.shape[0],l=n.readSync(i.dataId,o-1,o)[0],u=o>0?l+1:0;if(u<0)throw new Error(N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=r.shape.slice();p[0]=u;let d=n.dataIdMap.get(r.dataId).id,c=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(i.dataId).id,m=n.makeOutput(p,r.dtype),f=n.dataIdMap.get(m.dataId).id,g=n.makeOutput([4],"int32"),y=n.dataIdMap.get(g.dataId).id;dA(d,At[r.dtype],r.shape[0],c,h,f,y,t,0);let b=n.readSync(g.dataId),x;switch(b[0]){case 0:{x=N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=N.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=N.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b[1],b[2]);break;case 3:x=N.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(b[1],b[2],b[3]);break;default:x=""}if(n.disposeData(g.dataId),x)throw n.disposeData(m.dataId),new Error(x);return m}function Iue(e){return mA(e,!0)}var Sue={kernelName:mc,backendName:"wasm",setupFunc:hA,kernelFunc:Iue};function Tue(e){return mA(e,!1)}var Nue={kernelName:fc,backendName:"wasm",setupFunc:hA,kernelFunc:Tue};function Cue(e){let{inputs:t,attrs:n,backend:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=v.parseAxisParam(i,r.shape)[0],l=N.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(d=>{let c=[...p];c[o]=d;let h=fi({inputs:{x:r},attrs:{begin:u,size:c},backend:a});return u[o]+=d,h})}var _ue={kernelName:fu,backendName:"wasm",kernelFunc:Cue},Eue=Ut(uo),Aue=Ut(gc),$ue=!0,Fue=dn(ho,$ue),fA;function Rue(e){fA=e.wasm.cwrap(bs,null,["number","number","number","number"])}function Due(e){let{backend:t,inputs:n,attrs:a}=e,{alpha:r}=a,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return fA(i,r,At[s.dtype],l),o}var Mue={kernelName:bs,backendName:"wasm",setupFunc:Rue,kernelFunc:Due},gA;function Pue(e){gA=e.wasm.cwrap(yu,null,["number","array","number","array","array","array","array","array","number","number"])}function Oue(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:w}=Kt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=Wn({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=Kt.computeOutShape(b,x,w),C=fi({inputs:{x:r},backend:t,attrs:{begin:b,size:T}});I=Wn({inputs:{x:C},backend:t,attrs:{shape:m}}),t.disposeData(C.dataId)}else{let T=t.makeOutput(h,"float32"),C=t.dataIdMap.get(r.dataId).id,E=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),$=new Uint8Array(new Int32Array(b).buffer),R=new Uint8Array(new Int32Array(x).buffer),F=new Uint8Array(new Int32Array(w).buffer),S=new Uint8Array(new Int32Array(h).buffer),M=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),B=t.dataIdMap.get(T.dataId).id;gA(C,E,r.shape.length,$,R,F,S,M,h.length,B),I=Wn({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}return I}var Lue={kernelName:yu,backendName:"wasm",setupFunc:Pue,kernelFunc:Oue};function zue(e){let{backend:t,inputs:n,attrs:a}=e,{data:r,dataSplits:s}=n,{separator:i,nGramWidths:o,leftPad:l,rightPad:u,padWidth:p,preserveShortSequences:d}=a,c=t.readSync(r.dataId),h=t.readSync(s.dataId),[m,f]=P0(c,h,i,o,l,u,p,d),g=t.makeOutput([m.length],"string"),y=t.dataIdMap.get(g.dataId);y.stringBytes=m;let b=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(b).set(f),[g,b]}var Wue={kernelName:yc,backendName:"wasm",kernelFunc:zue};function Bue(e){let{backend:t,inputs:n,attrs:a}=e,{input:r,delimiter:s}=n,{skipEmpty:i}=a,o=t.readSync(r.dataId),l=t.readSync(s.dataId),[u,p,d]=O0(o,l[0],i),c=p.length,h=t.makeOutput([c,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([c],"string"),f=t.dataIdMap.get(m.dataId);f.stringBytes=p;let g=t.makeOutput([2],"int32");return t.typedArrayFromHeap(g).set(d),[h,m,g]}var Vue={kernelName:bc,backendName:"wasm",kernelFunc:Bue};function Uue(e){let{backend:t,inputs:n,attrs:a}=e,{input:r}=n,{numBuckets:s}=a,i=t.readSync(r.dataId),o=L0(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Gue={kernelName:xc,backendName:"wasm",kernelFunc:Uue},Hue=!0,que=dn(mo,Hue),yA;function jue(e){yA=e.wasm.cwrap(po,null,["number","number","number","number"])}function Kue(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=Cs(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=N.getInnerMostAxes(m.length,u.shape.length))}N.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=N.computeOutAndReduceShapes(u.shape,m),y=v.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;yA(l,y,At[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=N.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Xue={kernelName:po,backendName:"wasm",setupFunc:jue,kernelFunc:Kue},Yue=Ut(fo),Zue=Ut(go),bA;function Jue(e){bA=e.wasm.cwrap(ys,null,["number","array","number","array","number","number"])}function Que(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,s=n.dataIdMap.get(r.dataId).id,{reps:i}=a,o=new Array(r.shape.length);for(let c=0;c<o.length;c++)o[c]=r.shape[c]*i[c];let l=new Uint8Array(new Int32Array(r.shape).buffer),u=new Uint8Array(new Int32Array(o).buffer),p=n.makeOutput(o,r.dtype),d=n.dataIdMap.get(p.dataId).id;return bA(s,l,r.shape.length,u,o.length,At[p.dtype],d),p}var epe={kernelName:ys,backendName:"wasm",setupFunc:Jue,kernelFunc:Que},xA;function tpe(e){xA=e.wasm.cwrap(bu,null,["number","array","number","number","number","bool","number","number"])}var npe=({inputs:e,backend:t,attrs:n})=>{let{x:a}=e,{k:r,sorted:s}=n,i=t.dataIdMap.get(a.dataId).id,o=new Uint8Array(new Int32Array(a.shape).buffer),l=a.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,a.dtype),p=t.dataIdMap.get(u.dataId).id,d=t.makeOutput(l,"int32"),c=t.dataIdMap.get(d.dataId).id;return xA(i,o,a.shape.length,At[a.dtype],r,s,p,c),[u,d]},ape={kernelName:bu,backendName:"wasm",setupFunc:tpe,kernelFunc:npe},vA;function rpe(e){vA=e.wasm.cwrap(xu,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function spe(e){let{backend:t,inputs:n,attrs:a}=e,{image:r,transforms:s}=n,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),b=new Uint8Array(new Int32Array(v.computeStrides(g)).buffer),x=t.makeOutput(g,r.dtype),w=t.dataIdMap.get(x.dataId).id,I=t.dataIdMap.get(r.dataId).id,T=t.dataIdMap.get(s.dataId).id,C=i==="nearest"?1:2,E;switch(o){case"constant":E=1;break;case"reflect":E=2;break;case"wrap":E=3;break;case"nearest":E=4;break;default:E=1;break}return vA(I,T,s.shape[0]>1,p,m,f,h,c,d,y,r.shape.length-1,b,g.length-1,C,E,l,w),x}var ipe={kernelName:xu,backendName:"wasm",setupFunc:rpe,kernelFunc:spe};function ope(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h<o;h++)h!==s&&(l[u++]=r.shape[h]);let p=new Array(i),d=new Array(o).fill(0),c=r.shape.slice();c[s]=1;for(let h=0;h<p.length;h++)d[s]=h,p[h]=fi({inputs:{x:r},attrs:{begin:d,size:c},backend:n});return p.map(({dataId:h,dtype:m})=>({dataId:h,dtype:m,shape:l}))}var lpe={kernelName:vu,backendName:"wasm",kernelFunc:ope};function upe(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(0),a}var ppe={kernelName:wu,backendName:"wasm",kernelFunc:upe},cpe=[Ose,Lse,Wse,Use,Zse,eie,aie,iie,pie,gie,yie,bie,wie,kie,Tie,_ie,Eie,Aie,Rie,Pie,zie,Vie,Hie,qie,Kie,Xie,Yie,Zie,eoe,toe,aoe,ioe,uoe,doe,foe,boe,voe,koe,Gse,Ioe,Noe,_oe,Aoe,$oe,Roe,Doe,Poe,Loe,Boe,Uoe,qoe,Xoe,Joe,ele,ale,sle,ile,ule,dle,fle,yle,vle,kle,Sle,QE,_le,$le,Dle,Ple,Lle,zle,Wle,Ble,oie,Gle,jle,Yle,Qle,eue,tue,rue,oue,pue,cue,mie,mue,gue,xue,kue,Sue,Nue,_ue,Eue,Aue,Fue,Mue,Lue,Wue,Vue,Gue,que,Xue,Yue,Zue,epe,ape,ipe,Kse,lpe,ppe];for(let e of cpe)wc(e);var mx=H();mx.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]))}catch(e){return!1}});mx.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(mx.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var dI=hs(SF()),dpe=hs(TF()),hI=hs(NF()),mI=dI.default||dI,hpe=hI.default||hI,wA=class extends ac{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(kA),fx=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Hh(this,Ca())}write(e,t,n){let a={id:this.dataIdNextNumber++};return this.move(a,e,t,n,1),a}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=v.now();return e(),{kernelMs:v.now()-t}}move(e,t,n,a,r){let s=this.dataIdNextNumber++;if(a==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:n,dtype:a,memoryOffset:null,refCount:r});return}let i=v.sizeFromShape(n),o=i*v.bytesPerElement(a),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:a,refCount:r}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e,t,n){let{memoryOffset:a,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(n==null||n>=i.length)?i:i.slice(t,n);t=t||0,n=n||v.sizeFromShape(s);let o=v.bytesPerElement(r),l=this.wasm.HEAPU8.slice(a+t*o,a+n*o);return gpe(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let a;if(n==null)a=this.write(null,e,t);else{let r=this.dataIdNextNumber++;a={id:r},this.dataIdMap.set(a,{id:r,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=v.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,n)}return{dataId:a,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let a=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(n),s=v.sizeFromShape(e);switch(t){case"float32":return new Float32Array(a,r,s);case"int32":return new Int32Array(a,r,s);case"bool":return new Uint8Array(a,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function mpe(e){return(t,n)=>(v.fetch(e,{credentials:"same-origin"}).then(a=>{a.ok||t.env.a(`failed to load wasm binary file at '${e}'`),a.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{n(s.instance,s.module)})})}),{})}function fI(e,t,n){if(Uh!=null)return Uh;let a="tfjs-backend-wasm.wasm";return e&&t?a="tfjs-backend-wasm-threaded-simd.wasm":e&&(a="tfjs-backend-wasm-simd.wasm"),Op!=null&&Op[a]!=null?Op[a]:n+a}async function fpe(){let[e,t]=await Promise.all([H().getAsync("WASM_HAS_SIMD_SUPPORT"),H().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,a)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=dpe.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?fI(e,t,Dp!=null?Dp:l):l+o},r1&&(r.instantiateWasm=mpe(fI(e,t,Dp!=null?Dp:"")));let s=!1;r.onAbort=()=>{s||Lp||(Lp=!0,a({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))};let i;t&&e&&Uh==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+mI.toString()],{type:"text/javascript"}),i=mI(r)):i=hpe(r),i.then(o=>{s=!0,Lp=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},n({wasm:o})}).catch(a)})}function gpe(e,t){switch(t){case"float32":return new Float32Array(e);case"int32":return new Int32Array(e);case"bool":return new Uint8Array(e);default:throw new Error(`Unknown dtype ${t}`)}}var ype=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Uh=null,Dp=null,Op={},Lp=!1,r1=!1;function bpe(e,t=!1){if(_x("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Lp)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Uh=e,r1=t}function xpe(e,t=!1){if(Lp)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPaths()` before you call `tf.setBackend()` or `tf.ready()`");if(typeof e=="string")Dp=e;else{Op=e;let n=ype.filter(a=>Op[a]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}r1=t}var kA=-1,fx=-1;function vpe(e){kA=e}function wpe(){if(fx===-1)throw new Error("WASM backend not initialized.");return fx}var kpe="4.2.0",Ipe=2;Em("wasm",async()=>{let{wasm:e}=await fpe();return new wA(e)},Ipe);var gI="4.2.0",Spe="4.2.0",Tpe="4.2.0",Npe="4.2.0",Cpe="4.2.0",_pe={tfjs:gI,"tfjs-core":gI,"tfjs-converter":Spe,"tfjs-backend-cpu":Tpe,"tfjs-backend-webgl":Npe,"tfjs-backend-wasm":Cpe};var UA={};tb(UA,{AnchorPosition:()=>h1,DrawBox:()=>od,DrawBoxOptions:()=>Lf,DrawFaceLandmarks:()=>Yf,DrawFaceLandmarksOptions:()=>Xf,DrawTextField:()=>zr,DrawTextFieldOptions:()=>Yu,drawContour:()=>Mr,drawDetections:()=>Mpe,drawFaceExpressions:()=>Ppe,drawFaceLandmarks:()=>Lpe});function Mr(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:a,y:r},s)=>{let i=t[s];e.moveTo(i.x,i.y),e.lineTo(a,r)}),n){let a=t[t.length-1],r=t[0];if(!a||!r)return;e.moveTo(a.x,a.y),e.lineTo(r.x,r.y)}e.stroke()}var IA={};tb(IA,{computeReshapedDimensions:()=>o1,getCenterPoint:()=>Eo,isDimensions:()=>Mf,isEven:()=>Df,isFloat:()=>i1,isTensor:()=>Co,isTensor1D:()=>Epe,isTensor2D:()=>s1,isTensor3D:()=>Pr,isTensor4D:()=>va,isValidNumber:()=>Za,isValidProbablitiy:()=>Gu,range:()=>fr,round:()=>_o});var En=class{constructor(t,n){if(!Za(t)||!Za(n))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:t,height:n})}`);this._width=t,this._height=n}get width(){return this._width}get height(){return this._height}reverse(){return new En(1/this.width,1/this.height)}};function Co(e,t){return e instanceof Ne&&e.shape.length===t}function Epe(e){return Co(e,1)}function s1(e){return Co(e,2)}function Pr(e){return Co(e,3)}function va(e){return Co(e,4)}function i1(e){return e%1!==0}function Df(e){return e%2===0}function _o(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Mf(e){return e&&e.width&&e.height}function o1({width:e,height:t},n){let a=n/Math.max(t,e);return new En(Math.round(e*a),Math.round(t*a))}function Eo(e){return e.reduce((t,n)=>t.add(n),new Oe(0,0)).div(new Oe(e.length,e.length))}function fr(e,t,n){return Array(e).fill(0).map((a,r)=>t+r*n)}function Za(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function Gu(e){return Za(e)&&e>=0&&e<=1}var Oe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Oe(this.x+t.x,this.y+t.y)}sub(t){return new Oe(this.x-t.x,this.y-t.y)}mul(t){return new Oe(this.x*t.x,this.y*t.y)}div(t){return new Oe(this.x/t.x,this.y/t.y)}abs(){return new Oe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Oe(Math.floor(this.x),Math.floor(this.y))}};var ut=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(Za)}static assertIsValidBox(t,n,a=!1){if(!ut.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!a&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let a=t||{},r=[a.left,a.top,a.right,a.bottom].every(Za),s=[a.x,a.y,a.width,a.height].every(Za);if(!s&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(a)}`);let[i,o,l,u]=s?[a.x,a.y,a.width,a.height]:[a.left,a.top,a.right-a.left,a.bottom-a.top];ut.assertIsValidBox({x:i,y:o,width:l,height:u},"Box.constructor",n),this._x=i,this._y=o,this._width=l,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Oe(this.left,this.top)}get topRight(){return new Oe(this.right,this.top)}get bottomLeft(){return new Oe(this.left,this.bottom)}get bottomRight(){return new Oe(this.right,this.bottom)}round(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new ut({x:t,y:n,width:a,height:r})}floor(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new ut({x:t,y:n,width:a,height:r})}toSquare(){let{x:t,y:n,width:a,height:r}=this,s=Math.abs(a-r);return a<r&&(t-=s/2,a+=s),r<a&&(n-=s/2,r+=s),new ut({x:t,y:n,width:a,height:r})}rescale(t){let n=Mf(t)?t.width:t,a=Mf(t)?t.height:t;return new ut({x:this.x*n,y:this.y*a,width:this.width*n,height:this.height*a})}pad(t,n){let[a,r,s,i]=[this.x-t/2,this.y-n/2,this.width+t,this.height+n];return new ut({x:a,y:r,width:s,height:i})}clipAtImageBorders(t,n){let{x:a,y:r,right:s,bottom:i}=this,o=Math.max(a,0),l=Math.max(r,0),u=s-o,p=i-l,d=Math.min(u,t-o),c=Math.min(p,n-l);return new ut({x:o,y:l,width:d,height:c}).floor()}shift(t,n){let{width:a,height:r}=this,s=this.x+t,i=this.y+n;return new ut({x:s,y:i,width:a,height:r})}padAtBorders(t,n){let a=this.width+1,r=this.height+1,s=1,i=1,o=a,l=r,u=this.left,p=this.top,d=this.right,c=this.bottom;return d>n&&(o=-d+n+a,d=n),c>t&&(l=-c+t+r,c=t),u<1&&(l=2-u,u=1),p<1&&(l=2-p,p=1),{dy:i,edy:l,dx:s,edx:o,y:p,ey:c,x:u,ex:d,w:a,h:r}}calibrate(t){return new ut({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Hu=class extends ut{constructor(t,n,a,r,s=!1){super({left:t,top:n,right:a,bottom:r},s)}};var _s=class{constructor(t,n,a,r,s){this._imageDims=new En(s.width,s.height),this._score=t,this._classScore=n,this._className=a,this._box=new ut(r).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new ut(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new _s(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var xt=class extends _s{constructor(t,n,a){super(t,t,"",n,a)}forSize(t,n){let{score:a,relativeBox:r,imageDims:s}=super.forSize(t,n);return new xt(a,r,s)}};function SA(e,t,n=!0){let a=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),r=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),s=a*r;return n?s/(e.area+t.area-s):s/Math.min(e.area,t.area)}function TA(e){let t=e.map(o=>o.x),n=e.map(o=>o.y),a=t.reduce((o,l)=>l<o?l:o,1/0),r=n.reduce((o,l)=>l<o?l:o,1/0),s=t.reduce((o,l)=>o<l?l:o,0),i=n.reduce((o,l)=>o<l?l:o,0);return new Hu(a,r,s,i)}function NA(e,t,n,a=!0){let r=t.map((i,o)=>({score:i,boxIndex:o})).sort((i,o)=>i.score-o.score).map(i=>i.boxIndex),s=[];for(;r.length>0;){let i=r.pop();s.push(i);let o=r,l=[];for(let u=0;u<o.length;u++){let p=o[u],d=e[i],c=e[p];l.push(SA(d,c,a))}r=r.filter((u,p)=>l[p]<=n)}return s}function gr(e,t){return P(()=>{let[n,a,r]=t,s=bn([...e.shape.slice(0,3),1],n,"float32"),i=bn([...e.shape.slice(0,3),1],a,"float32"),o=bn([...e.shape.slice(0,3),1],r,"float32"),l=Ze([s,i,o],3);return pe(e,l)})}function CA(e,t=!1){return P(()=>{let[n,a]=e.shape.slice(1);if(n===a)return e;let r=Math.abs(n-a),s=Math.round(r*(t?.5:1)),i=n>a?2:1,o=c=>{let h=e.shape.slice();return h[i]=c,bn(h,0,"float32")},l=o(s),u=r-l.shape[i],d=[t&&u?o(u):null,e,l].filter(c=>!!c).map(c=>ie(c,"float32"));return Ze(d,i)})}function Aye(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let a=Math.floor(Math.random()*(n+1)),r=t[n];t[n]=t[a],t[a]=r}return t}function Pf(e){return 1/(1+Math.exp(-e))}function Fye(e){return Math.log(e/(1-e))}var qu=class extends ut{constructor(t,n,a,r,s=!1){super({x:t,y:n,width:a,height:r},s)}};var Ape=.5,$pe=.43,Fpe=.45,wa=class{constructor(t,n,a=new Oe(0,0)){let{width:r,height:s}=n;this._imgDims=new En(r,s),this._shift=a,this._positions=t.map(i=>i.mul(new Oe(r,s)).add(a))}get shift(){return new Oe(this._shift.x,this._shift.y)}get imageWidth(){return this._imgDims.width}get imageHeight(){return this._imgDims.height}get positions(){return this._positions}get relativePositions(){return this._positions.map(t=>t.sub(this._shift).div(new Oe(this.imageWidth,this.imageHeight)))}forSize(t,n){return new this.constructor(this.relativePositions,{width:t,height:n})}shiftBy(t,n){return new this.constructor(this.relativePositions,this._imgDims,new Oe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let s=t instanceof xt?t.box.floor():new ut(t);return this.shiftBy(s.x,s.y).align(null,n)}let{useDlibAlignment:a,minBoxPadding:r}={useDlibAlignment:!1,minBoxPadding:.2,...n};return a?this.alignDlib():this.alignMinBbox(r)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,a,r]=t,s=d=>r.sub(d).magnitude(),i=(s(n)+s(a))/2,o=Math.floor(i/Fpe),l=Eo(t),u=Math.floor(Math.max(0,l.x-Ape*o)),p=Math.floor(Math.max(0,l.y-$pe*o));return new qu(u,p,Math.min(o,this.imageWidth+u),Math.min(o,this.imageHeight+p))}alignMinBbox(t){let n=TA(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var _A=class extends wa{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],Eo([t[3],t[4]])]}};var ju=class extends wa{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(Eo)}};var rd=class{constructor(t,n){this._label=t,this._distance=n}get label(){return this._label}get distance(){return this._distance}toString(t=!0){return`${this.label}${t?` (${_o(this.distance)})`:""}`}};var sd=class extends ut{constructor(n,a){super(n);this._label=a}static assertIsValidLabeledBox(n,a){if(ut.assertIsValidBox(n,a),!Za(n.label))throw new Error(`${a} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var Or=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(a=>!(a instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(a=>new Float32Array(a));return new Or(t.label,n)}};var EA=class extends sd{constructor(n,a,r,s){super(n,a);this._score=r,this._classScore=s}static assertIsValidPredictedBox(n,a){if(sd.assertIsValidLabeledBox(n,a),!Gu(n.score)||!Gu(n.classScore))throw new Error(`${a} - expected properties score (${n.score}) and (${n.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function Lr(e){return e.detection instanceof xt}function Ku(e,t){return{...e,...{detection:t}}}function l1(){let e=window.fetch;if(!e)throw new Error("fetch - missing fetch implementation for browser environment");return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),createVideoElement:()=>document.createElement("video"),fetch:e,readFile:()=>{throw new Error("readFile - filesystem not available for browser environment")}}}function id(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function Of(e){let t="";if(!e&&id())try{e=aF("fs")}catch(a){t=a.toString()}return{readFile:e?a=>new Promise((r,s)=>{e.readFile(a,(i,o)=>i?s(i):r(o))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function u1(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,a=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,o=Of();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:a,createImageElement:r,createVideoElement:s,fetch:i,...o}}function p1(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var sn;function Rpe(){if(!sn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return sn}function c1(e){sn=e}function d1(){return p1()?c1(l1()):id()?c1(u1()):null}function Dpe(e){if(sn||d1(),!sn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=sn.Canvas,Image:n=sn.Image}=e;sn.Canvas=t,sn.Image=n,sn.createCanvasElement=e.createCanvasElement||(()=>new t),sn.createImageElement=e.createImageElement||(()=>new n),sn.ImageData=e.ImageData||sn.ImageData,sn.Video=e.Video||sn.Video,sn.fetch=e.fetch||sn.fetch,sn.readFile=e.readFile||sn.readFile}var tt={getEnv:Rpe,setEnv:c1,initialize:d1,createBrowserEnv:l1,createFileSystem:Of,createNodejsEnv:u1,monkeyPatch:Dpe,isBrowser:p1,isNodejs:id};d1();function Xu(e){return!tt.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function aa(e){let{Canvas:t,CanvasRenderingContext2D:n}=tt.getEnv();if(e instanceof n)return e;let a=Xu(e);if(!(a instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let r=a.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}var h1=(r=>(r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT",r))(h1||{}),Yu=class{constructor(t={}){let{anchorPosition:n,backgroundColor:a,fontColor:r,fontSize:s,fontStyle:i,padding:o}=t;this.anchorPosition=n||"TOP_LEFT",this.backgroundColor=a||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=o||4}},zr=class{constructor(t,n,a={}){this.text=typeof t=="string"?[t]:t instanceof zr?t.text:t,this.anchor=n,this.options=new Yu(a)}measureWidth(t){let{padding:n}=this.options;return this.text.map(a=>t.measureText(a).width).reduce((a,r)=>a<r?r:a,0)+2*n}measureHeight(){let{fontSize:t,padding:n}=this.options;return this.text.length*t+2*n}getUpperLeft(t,n){let{anchorPosition:a}=this.options,r=a==="BOTTOM_RIGHT"||a==="TOP_RIGHT",s=a==="BOTTOM_LEFT"||a==="BOTTOM_RIGHT",i=this.measureWidth(t),o=this.measureHeight(),l=r?this.anchor.x-i:this.anchor.x,u=s?this.anchor.y-o:this.anchor.y;if(n){let{width:p,height:d}=n,c=Math.max(Math.min(l,p-i),0),h=Math.max(Math.min(u,d-o),0);return{x:c,y:h}}return{x:l,y:u}}draw(t){let n=Xu(t),a=aa(n),{backgroundColor:r,fontColor:s,fontSize:i,fontStyle:o,padding:l}=this.options;a.font=`${i}px ${o}`;let u=this.measureWidth(a),p=this.measureHeight();a.fillStyle=r;let d=this.getUpperLeft(a,n);a.fillRect(d.x,d.y,u,p),a.fillStyle=s,this.text.forEach((c,h)=>{let m=l+d.x,f=l+d.y+(h+1)*i;a.fillText(c,m,f)})}};var Lf=class{constructor(t={}){let{boxColor:n,lineWidth:a,label:r,drawLabelOptions:s}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=a||2,this.label=r;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new Yu({...i,...s})}},od=class{constructor(t,n={}){this.box=new ut(t),this.options=new Lf(n)}draw(t){let n=aa(t),{boxColor:a,lineWidth:r}=this.options,{x:s,y:i,width:o,height:l}=this.box;n.strokeStyle=a,n.lineWidth=r,n.strokeRect(s,i,o,l);let{label:u}=this.options;u&&new zr([u],{x:s-r/2,y:i},this.options.drawLabelOptions).draw(t)}};function Mpe(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof xt?a.score:Lr(a)?a.detection.score:void 0,s=a instanceof xt?a.box:Lr(a)?a.detection.box:new ut(a),i=r?`${_o(r)}`:void 0;new od(s,{label:i}).draw(e)})}function zf(e){let{Image:t,Video:n}=tt.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function AA(e){return new Promise((t,n)=>{(e instanceof tt.getEnv().Canvas||zf(e))&&t(null);function a(s){s.currentTarget&&(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),n(s))}function r(s){s.currentTarget&&(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),t(s))}e.addEventListener("load",r),e.addEventListener("error",a)})}function $A(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let a=new FileReader;a.onload=()=>{typeof a.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let r=tt.getEnv().createImageElement();r.onload=()=>t(r),r.onerror=n,r.src=a.result},a.onerror=n,a.readAsDataURL(e)})}function Zu(e){let{Image:t,Video:n}=tt.getEnv();return e instanceof t?new En(e.naturalWidth,e.naturalHeight):e instanceof n?new En(e.videoWidth,e.videoHeight):new En(e.width,e.height)}function Ju({width:e,height:t}){let{createCanvasElement:n}=tt.getEnv(),a=n();return a.width=e,a.height=t,a}function Wf(e,t){let{ImageData:n}=tt.getEnv();if(!(e instanceof n)&&!zf(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:a,height:r}=t||Zu(e),s=Ju({width:a,height:r});return e instanceof n?aa(s).putImageData(e,0,0):aa(s).drawImage(e,0,0,a,r),s}async function FA(e,t){let n=t||tt.getEnv().createCanvasElement(),[a,r,s]=e.shape.slice(va(e)?1:0),i=P(()=>e.as3D(a,r,s).toInt());return await vo.toPixels(i,n),i.dispose(),n}function m1(e){let{Image:t,Canvas:n,Video:a}=tt.getEnv();return e instanceof t||e instanceof n||e instanceof a}function RA(e,t,n=!1){let{Image:a,Canvas:r}=tt.getEnv();if(!(e instanceof a||e instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Ju({width:1,height:1});let s=Zu(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=Ju({width:t,height:t}),p=e instanceof r?e:Wf(e),d=Math.abs(o-l)/2,c=n&&o<l?d:0,h=n&&l<o?d:0;return p.width>0&&p.height>0&&aa(u).drawImage(p,c,h,o,l),u}var Wr=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((a,r)=>{if(Pr(a)){this._imageTensors[r]=a,this._inputDimensions[r]=a.shape;return}if(va(a)){let i=a.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=a,this._inputDimensions[r]=a.shape.slice(1);return}let s=a instanceof tt.getEnv().Canvas?a:Wf(a);this._canvases[r]=s,this._inputDimensions[r]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return fr(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),a=this.getInputHeight(t);return o1({width:n,height:a},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,P(()=>{let a=fr(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof Ne){let o=va(i)?i:Qt(i);return o=CA(o,n),(o.shape[1]!==t||o.shape[2]!==t)&&(o=Ea.resizeBilinear(o,[t,t],!1,!1)),o.as3D(t,t,3)}if(i instanceof tt.getEnv().Canvas)return vo.fromPixels(RA(i,t,n));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return Ft(a.map(s=>ie(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function vt(e){if(e instanceof Wr)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=r=>Array.isArray(e)?` at input index ${r}:`:"",a=t.map(Xu);return a.forEach((r,s)=>{if(!m1(r)&&!Pr(r)&&!va(r))throw typeof t[s]=="string"?new Error(`toNetInput -${n(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${n(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(va(r)){let i=r.shape[0];if(i!==1)throw new Error(`toNetInput -${n(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(a.map(r=>m1(r)&&AA(r))),new Wr(a,Array.isArray(e))}async function ld(e,t){let{Canvas:n}=tt.getEnv(),a=e;if(!(e instanceof n)){let i=await vt(e);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let o=i.getInput(0);a=o instanceof n?o:await FA(o)}let r=aa(a);return t.map(i=>i instanceof xt?i.forSize(a.width,a.height).box.floor():i).map(i=>i.clipAtImageBorders(a.width,a.height)).map(({x:i,y:o,width:l,height:u})=>{let p=Ju({width:l,height:u});return l>0&&u>0&&aa(p).putImageData(r.getImageData(i,o,l,u),0,0),p})}async function ud(e,t){if(!Pr(e)&&!va(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(va(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return P(()=>{let[n,a,r]=e.shape.slice(va(e)?1:0);return t.map(o=>o instanceof xt?o.forSize(a,n).box:o).map(o=>o.clipAtImageBorders(a,n)).filter(o=>o.width>0&&o.height>0).map(({x:o,y:l,width:u,height:p})=>bo(e.as3D(n,a,r),[l,o,0],[p,u,r]))})}async function Es(e,t){let{fetch:n}=tt.getEnv(),a=await n(e,t);if(!(a.status<400))throw new Error(`failed to fetch: (${a.status}) ${a.statusText}, from url: ${a.url}`);return a}async function yve(e){let t=await Es(e),n=await t.blob();if(!n.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${n.type}, for url: ${t.url}`);return $A(n)}async function DA(e){return(await Es(e)).json()}async function kve(e){return new Float32Array(await(await Es(e)).arrayBuffer())}function MA(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let a=tt.getEnv().createVideoElement();a.oncanplay=()=>t(a),a.onerror=n,a.playsInline=!0,a.muted=!0,a.src=URL.createObjectURL(e),a.play()})}async function _ve(e){let t=await Es(e),n=await t.blob();if(!n.type.startsWith("video/"))throw new Error(`fetchVideo - expected blob type to be of type video/*, instead have: ${n.type}, for url: ${t.url}`);return MA(n)}function Bf(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let a=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(a,"");let r=e.split("/").filter(o=>o),s=e.endsWith(".json")?r[r.length-1]:n,i=a+(e.endsWith(".json")?r.slice(0,r.length-1):r).join("/");return i=e.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function PA(e,t){let{manifestUri:n,modelBaseUri:a}=Bf(e,t),r=await DA(n);return Ht.loadWeights(r,a)}function Mve(e,t,n=!1){let{width:a,height:r}=n?Zu(t):t;return e.width=a,e.height=r,{width:a,height:r}}var hn=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:a}=this.traversePropertyPath(t);return n[a]}reassignParamFromPath(t,n){let{obj:a,objProp:r}=this.traversePropertyPath(t);a[r].dispose(),a[r]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof ss)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof ss))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let a=fn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,a)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await PA(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=tt.getEnv(),{manifestUri:a,modelBaseUri:r}=Bf(t,this.getDefaultModelName()),s=u=>Promise.all(u.map(p=>n(p).then(d=>d.buffer))),i=Ht.weightsLoaderFactory(s),o=JSON.parse((await n(a)).toString()),l=await i(o,r);this.loadFromWeightMap(l)}loadFromWeightMap(t){let{paramMappings:n,params:a}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=a}extractWeights(t){let{paramMappings:n,params:a}=this.extractParams(t);this._paramMappings=n,this._params=a}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:a,objProp:r}=n;if(!a||!r||!(a[r]instanceof Ne))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:a,objProp:r}}};function Gn(e,t,n){return P(()=>{let a=Is(e,t.depthwise_filter,t.pointwise_filter,n,"same");return a=X(a,t.bias),a})}function Vf(e,t,n=!1){return P(()=>{let a=Ke(n?X(Rt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Gn(e,t.conv0,[2,2])),r=Gn(a,t.conv1,[1,1]),s=Ke(X(a,r)),i=Gn(s,t.conv2,[1,1]);return Ke(X(a,X(r,i)))})}function pd(e,t,n=!1,a=!0){return P(()=>{let r=Ke(n?X(Rt(e,t.conv0.filters,a?[2,2]:[1,1],"same"),t.conv0.bias):Gn(e,t.conv0,a?[2,2]:[1,1])),s=Gn(r,t.conv1,[1,1]),i=Ke(X(r,s)),o=Gn(i,t.conv2,[1,1]),l=Ke(X(r,X(s,o))),u=Gn(l,t.conv3,[1,1]);return Ke(X(r,X(s,X(o,u))))})}function Ao(e,t,n="same",a=!1){return P(()=>{let r=X(Rt(e,t.filters,[1,1],n),t.bias);return a?Ke(r):r})}function An(e,t){Object.keys(e).forEach(n=>{t.some(a=>a.originalPath===n)||e[n].dispose()})}function Qu(e,t){return(n,a,r,s)=>{let i=Ra(e(n*a*r*r),[r,r,n,a]),o=je(e(a));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function Uf(e,t){return(n,a,r)=>{let s=Aa(e(n*a),[n,a]),i=je(e(a));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/bias`}),{weights:s,bias:i}}}var cd=class{constructor(t,n,a){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=a}};function ep(e,t){return(n,a,r)=>{let s=Ra(e(9*n),[3,3,n,1]),i=Ra(e(n*a),[1,1,n,a]),o=je(e(a));return t.push({paramPath:`${r}/depthwise_filter`},{paramPath:`${r}/pointwise_filter`},{paramPath:`${r}/bias`}),new cd(s,i,o)}}function tp(e){return t=>{let n=e(`${t}/depthwise_filter`,4),a=e(`${t}/pointwise_filter`,4),r=e(`${t}/bias`,1);return new cd(n,a,r)}}function ra(e,t){return(n,a,r)=>{let s=e[n];if(!Co(s,a))throw new Error(`expected weightMap[${n}] to be a Tensor${a}D, instead have ${s}`);return t.push({originalPath:n,paramPath:r||n}),s}}function $n(e){let t=e;function n(r){let s=t.slice(0,r);return t=t.slice(r),s}function a(){return t}return{extractWeights:n,getRemainingWeights:a}}function Gf(e,t){let n=Qu(e,t),a=ep(e,t);function r(i,o,l,u=!1){let p=u?n(i,o,3,`${l}/conv0`):a(i,o,`${l}/conv0`),d=a(o,o,`${l}/conv1`),c=a(o,o,`${l}/conv2`);return{conv0:p,conv1:d,conv2:c}}function s(i,o,l,u=!1){let{conv0:p,conv1:d,conv2:c}=r(i,o,l,u),h=a(o,o,`${l}/conv3`);return{conv0:p,conv1:d,conv2:c,conv3:h}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:s}}function OA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock4Params:r}=Gf(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2"),l=r(128,256,"dense3");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o,dense3:l}}}function Hf(e){return t=>{let n=e(`${t}/filters`,4),a=e(`${t}/bias`,1);return{filters:n,bias:a}}}function qf(e,t){let n=ra(e,t),a=Hf(n),r=tp(n);function s(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`);return{conv0:u,conv1:p,conv2:d}}function i(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`),c=r(`${o}/conv3`);return{conv0:u,conv1:p,conv2:d,conv3:c}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function LA(e){let t=[],{extractDenseBlock4Params:n}=qf(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return An(e,t),{params:a,paramMappings:t}}var np=class extends hn{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return P(()=>{let a=ie(t.toBatchTensor(112,!0),"float32"),s=gr(a,[122.782,117.001,104.298]).div(255),i=pd(s,n.dense0,!0);return i=pd(i,n.dense1),i=pd(i,n.dense2),i=pd(i,n.dense3),i=ya(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await vt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return LA(t)}extractParams(t){return OA(t)}};function dd(e,t){return P(()=>X(Re(e,t.weights),t.bias))}function zA(e,t,n){let a=[],{extractWeights:r,getRemainingWeights:s}=$n(e),o=Uf(r,a)(t,n,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:a,params:{fc:o}}}function WA(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:a("fc")};return An(e,t),{params:r,paramMappings:t}}function jf(e){let t={},n={};return Object.keys(e).forEach(a=>{let r=a.startsWith("fc")?n:t;r[a]=e[a]}),{featureExtractorMap:t,classifierMap:n}}var ap=class extends hn{constructor(n,a){super(n);this._faceFeatureExtractor=a}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return P(()=>{let r=n instanceof Wr?this.faceFeatureExtractor.forwardInput(n):n;return dd(r.as2D(r.shape[0],-1),a.fc)})}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return zA(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=jf(n);return this.faceFeatureExtractor.loadFromWeightMap(a),WA(r)}extractParams(n){let a=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*a+r,i=n.slice(0,n.length-s),o=n.slice(n.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(o)}};var BA=["neutral","happy","sad","angry","fearful","disgusted","surprised"],As=class{constructor(t){this.neutral=0;this.happy=0;this.sad=0;this.angry=0;this.fearful=0;this.disgusted=0;this.surprised=0;if(t.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${t.length}`);BA.forEach((n,a)=>{this[n]=t[a]})}asSortedArray(){return BA.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var Kf=class extends ap{constructor(t=new np){super("FaceExpressionNet",t)}forwardInput(t){return P(()=>Xa(this.runNet(t)))}async forward(t){return this.forwardInput(await vt(t))}async predictExpressions(t){let n=await vt(t),a=await this.forwardInput(n),r=await Promise.all(lt(a).map(async i=>{let o=i.dataSync();return i.dispose(),o}));a.dispose();let s=r.map(i=>new As(i));return n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function VA(e){return e.expressions instanceof As}function f1(e,t){return{...e,...{expressions:t}}}function Ppe(e,t,n=.1,a){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof As?s:VA(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let l=i.asSortedArray().filter(d=>d.probability>n),u=Lr(s)?s.detection.box.bottomLeft:a||new Oe(0,0);new zr(l.map(d=>`${d.expression} (${_o(d.probability)})`),u).draw(e)})}function rp(e){return Lr(e)&&e.landmarks instanceof wa&&e.unshiftedLandmarks instanceof wa&&e.alignedRect instanceof xt}function Ope(e){let t=l=>l*180/Math.PI,n=(l,u)=>Math.sqrt((l._x-u._x)**2+(l._y-u._y)**2),a={roll:void 0,pitch:void 0,yaw:void 0},r=(l,u,p)=>{let d=Math.floor(l._x-u._x),c=Math.floor(u._x-p._x);return d-c},s=(l,u)=>{let p=Math.hypot(u._x-l._x,u._y-l._y),d=u._y-l._y,c=Math.asin(d/p),h=t(c),m=Math.floor(90-h),f=u._x-l._x<0?-1:1;return m*f},i=(l,u,p)=>{let d=n(l,p),c={_x:(l._x+p._x)/2,_y:(l._y+p._y)/2},h=n(u,c),m=Math.atan(h/d),f=Math.floor(t(m)),g=c._y-u._y<0?-1:1;return f*g};if(!e||!e._positions||e._positions.length!==68)return a;let o=e._positions;return a.roll=s(o[27],o[66]),a.pitch=i(o[14],o[30],o[2]),a.yaw=r(o[14],o[33],o[2]),a}function hd(e,t){let{box:n}=e.detection,a=t.shiftBy(n.x,n.y),r=a.align(),{imageDims:s}=e.detection,i=new xt(e.detection.score,r.rescale(s.reverse()),s),o=Ope(t);return{...e,...{landmarks:a,unshiftedLandmarks:t,alignedRect:i,angle:o}}}var Xf=class{constructor(t={}){let{drawLines:n=!0,drawPoints:a=!0,lineWidth:r,lineColor:s,pointSize:i,pointColor:o}=t;this.drawLines=n,this.drawPoints=a,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=o||"rgba(255, 0, 255, 1)"}},Yf=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new Xf(n)}draw(t){let n=aa(t),{drawLines:a,drawPoints:r,lineWidth:s,lineColor:i,pointSize:o,pointColor:l}=this.options;if(a&&this.faceLandmarks instanceof ju&&(n.strokeStyle=i,n.lineWidth=s,Mr(n,this.faceLandmarks.getJawOutline()),Mr(n,this.faceLandmarks.getLeftEyeBrow()),Mr(n,this.faceLandmarks.getRightEyeBrow()),Mr(n,this.faceLandmarks.getNose()),Mr(n,this.faceLandmarks.getLeftEye(),!0),Mr(n,this.faceLandmarks.getRightEye(),!0),Mr(n,this.faceLandmarks.getMouth(),!0)),r){n.strokeStyle=l,n.fillStyle=l;let u=p=>{n.beginPath(),n.arc(p.x,p.y,o,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Lpe(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof wa?a:rp(a)?a.landmarks:void 0;if(!r)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new Yf(r).draw(e)})}var GA="1.7.9";function Bpe(e,t){let n=Qu(e,t),a=ep(e,t);function r(i,o,l){let u=a(i,o,`${l}/separable_conv0`),p=a(o,o,`${l}/separable_conv1`),d=n(i,o,1,`${l}/expansion_conv`);return{separable_conv0:u,separable_conv1:p,expansion_conv:d}}function s(i,o){let l=a(i,i,`${o}/separable_conv0`),u=a(i,i,`${o}/separable_conv1`),p=a(i,i,`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:n,extractSeparableConvParams:a,extractReductionBlockParams:r,extractMainBlockParams:s}}function HA(e,t){let n=[],{extractWeights:a,getRemainingWeights:r}=$n(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=Bpe(a,n),u=s(3,32,3,"entry_flow/conv_in"),p=o(32,64,"entry_flow/reduction_block_0"),d=o(64,128,"entry_flow/reduction_block_1"),c={conv_in:u,reduction_block_0:p,reduction_block_1:d},h={};fr(t,0,1).forEach(y=>{h[`main_block_${y}`]=l(128,`middle_flow/main_block_${y}`)});let m=o(128,256,"exit_flow/reduction_block"),f=i(256,512,"exit_flow/separable_conv"),g={reduction_block:m,separable_conv:f};if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:n,params:{entry_flow:c,middle_flow:h,exit_flow:g}}}function Vpe(e,t){let n=ra(e,t),a=Hf(n),r=tp(n);function s(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=a(`${o}/expansion_conv`);return{separable_conv0:l,separable_conv1:u,expansion_conv:p}}function i(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=r(`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}}function qA(e,t){let n=[],{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}=Vpe(e,n),o=a("entry_flow/conv_in"),l=s("entry_flow/reduction_block_0"),u=s("entry_flow/reduction_block_1"),p={conv_in:o,reduction_block_0:l,reduction_block_1:u},d={};fr(t,0,1).forEach(f=>{d[`main_block_${f}`]=i(`middle_flow/main_block_${f}`)});let c=s("exit_flow/reduction_block"),h=r("exit_flow/separable_conv"),m={reduction_block:c,separable_conv:h};return An(e,n),{params:{entry_flow:p,middle_flow:d,exit_flow:m},paramMappings:n}}function jA(e,t,n){return X(Rt(e,t.filters,n,"same"),t.bias)}function g1(e,t,n=!0){let a=n?Ke(e):e;return a=Gn(a,t.separable_conv0,[1,1]),a=Gn(Ke(a),t.separable_conv1,[1,1]),a=Dt(a,[3,3],[2,2],"same"),a=X(a,jA(e,t.expansion_conv,[2,2])),a}function Upe(e,t){let n=Gn(Ke(e),t.separable_conv0,[1,1]);return n=Gn(Ke(n),t.separable_conv1,[1,1]),n=Gn(Ke(n),t.separable_conv2,[1,1]),n=X(n,e),n}var Zf=class extends hn{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:a}=this;if(!a)throw new Error("TinyXception - load model before inference");return P(()=>{let r=ie(n.toBatchTensor(112,!0),"float32"),i=gr(r,[122.782,117.001,104.298]).div(255),o=Ke(jA(i,a.entry_flow.conv_in,[2,2]));return o=g1(o,a.entry_flow.reduction_block_0,!1),o=g1(o,a.entry_flow.reduction_block_1),fr(this._numMainBlocks,0,1).forEach(l=>{o=Upe(o,a.middle_flow[`main_block_${l}`])}),o=g1(o,a.exit_flow.reduction_block),o=Ke(Gn(o,a.exit_flow.separable_conv,[1,1])),o})}async forward(n){return this.forwardInput(await vt(n))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(n){return qA(n,this._numMainBlocks)}extractParams(n){return HA(n,this._numMainBlocks)}};function KA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),r=Uf(n,t),s=r(512,1,"fc/age"),i=r(512,2,"fc/gender");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function XA(e){let t=[],n=ra(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:{age:a("fc/age"),gender:a("fc/gender")}};return An(e,t),{params:r,paramMappings:t}}var y1=(n=>(n.FEMALE="female",n.MALE="male",n))(y1||{});var Jf=class extends hn{constructor(n=new Zf(2)){super("AgeGenderNet");this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return P(()=>{let r=n instanceof Wr?this.faceFeatureExtractor.forwardInput(n):n,s=ya(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),i=dd(s,a.fc.age).as1D(),o=dd(s,a.fc.gender);return{age:i,gender:o}})}forwardInput(n){return P(()=>{let{age:a,gender:r}=this.runNet(n);return{age:a,gender:Xa(r)}})}async forward(n){return this.forwardInput(await vt(n))}async predictAgeAndGender(n){let a=await vt(n),r=await this.forwardInput(a),s=lt(r.age),i=lt(r.gender),o=s.map((u,p)=>({ageTensor:u,genderTensor:i[p]})),l=await Promise.all(o.map(async({ageTensor:u,genderTensor:p})=>{let d=u.dataSync()[0],c=p.dataSync()[0],h=c>.5,m=h?"male":"female",f=h?c:1-c;return u.dispose(),p.dispose(),{age:d,gender:m,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),a.isBatchInput?l:l[0]}getDefaultModelName(){return"age_gender_model"}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return KA(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=jf(n);return this.faceFeatureExtractor.loadFromWeightMap(a),XA(r)}extractParams(n){let r=n.slice(0,n.length-1539),s=n.slice(n.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var sp=class extends ap{postProcess(t,n,a){let r=a.map(({width:i,height:o})=>{let l=n/Math.max(o,i);return{width:i*l,height:o*l}}),s=r.length;return P(()=>{let i=(d,c)=>Ft([bn([68],d,"float32"),bn([68],c,"float32")],1).as2D(1,136).as1D(),o=(d,c)=>{let{width:h,height:m}=r[d];return c(h,m)?Math.abs(h-m)/2:0},l=d=>o(d,(c,h)=>c<h),u=d=>o(d,(c,h)=>h<c);return t.mul(bn([s,136],n,"float32")).sub(Ft(Array.from(Array(s),(d,c)=>i(l(c),u(c))))).div(Ft(Array.from(Array(s),(d,c)=>i(r[c].width,r[c].height))))})}forwardInput(t){return P(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([a,r])=>({height:a,width:r})))})}async forward(t){return this.forwardInput(await vt(t))}async detectLandmarks(t){let n=await vt(t),a=P(()=>lt(this.forwardInput(n))),r=await Promise.all(a.map(async(s,i)=>{let o=Array.from(s.dataSync()),l=o.filter((p,d)=>Df(d)),u=o.filter((p,d)=>!Df(d));return new ju(Array(68).fill(0).map((p,d)=>new Oe(l[d],u[d])),{height:n.getInputHeight(i),width:n.getInputWidth(i)})}));return a.forEach(s=>s.dispose()),n.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}};var ip=class extends sp{constructor(t=new np){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function YA(e){let t=[],{extractDenseBlock3Params:n}=qf(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return An(e,t),{params:a,paramMappings:t}}function ZA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractDenseBlock3Params:r}=Gf(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o}}}var Qf=class extends hn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return P(()=>{let a=ie(t.toBatchTensor(112,!0),"float32"),s=gr(a,[122.782,117.001,104.298]).div(255),i=Vf(s,n.dense0,!0);return i=Vf(i,n.dense1),i=Vf(i,n.dense2),i=ya(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await vt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return YA(t)}extractParams(t){return ZA(t)}};var eg=class extends sp{constructor(t=new Qf){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var JA=class extends ip{};function QA(e,t){return X(z(e,t.weights),t.biases)}function b1(e,t,n,a,r="same"){let{filters:s,bias:i}=t.conv,o=Rt(e,s,n,r);return o=X(o,i),o=QA(o,t.scale),a?Ke(o):o}function e$(e,t){return b1(e,t,[1,1],!0)}function x1(e,t){return b1(e,t,[1,1],!1)}function tg(e,t){return b1(e,t,[2,2],!0,"valid")}function Gpe(e,t){function n(o,l,u){let p=e(o),d=p.length/(l*u*u);if(i1(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${p.length}, numFilters: ${l}, filterSize: ${u}`);return P(()=>Ee(Ra(p,[l,d,u,u]),[2,3,1,0]))}function a(o,l,u,p){let d=n(o,l,u),c=je(e(l));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/bias`}),{filters:d,bias:c}}function r(o,l){let u=je(e(o)),p=je(e(o));return t.push({paramPath:`${l}/weights`},{paramPath:`${l}/biases`}),{weights:u,biases:p}}function s(o,l,u,p){let d=a(o,l,u,`${p}/conv`),c=r(l,`${p}/scale`);return{conv:d,scale:c}}function i(o,l,u,p,d=!1){let c=s((d?.5:1)*o,l,u,`${p}/conv1`),h=s(o,l,u,`${p}/conv2`);return{conv1:c,conv2:h}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function t$(e){let{extractWeights:t,getRemainingWeights:n}=$n(e),a=[],{extractConvLayerParams:r,extractResidualLayerParams:s}=Gpe(t,a),i=r(4704,32,7,"conv32_down"),o=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),u=s(9216,32,3,"conv32_3"),p=s(36864,64,3,"conv64_down",!0),d=s(36864,64,3,"conv64_1"),c=s(36864,64,3,"conv64_2"),h=s(36864,64,3,"conv64_3"),m=s(147456,128,3,"conv128_down",!0),f=s(147456,128,3,"conv128_1"),g=s(147456,128,3,"conv128_2"),y=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),w=s(589824,256,3,"conv256_down_out"),I=P(()=>Ee(Aa(t(256*128),[128,256]),[1,0]));if(a.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:i,conv32_1:o,conv32_2:l,conv32_3:u,conv64_down:p,conv64_1:d,conv64_2:c,conv64_3:h,conv128_down:m,conv128_1:f,conv128_2:g,conv256_down:y,conv256_1:b,conv256_2:x,conv256_down_out:w,fc:I},paramMappings:a}}function Hpe(e,t){let n=ra(e,t);function a(i){let o=n(`${i}/scale/weights`,1),l=n(`${i}/scale/biases`,1);return{weights:o,biases:l}}function r(i){let o=n(`${i}/conv/filters`,4),l=n(`${i}/conv/bias`,1),u=a(i);return{conv:{filters:o,bias:l},scale:u}}function s(i){return{conv1:r(`${i}/conv1`),conv2:r(`${i}/conv2`)}}return{extractConvLayerParams:r,extractResidualLayerParams:s}}function n$(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:a}=Hpe(e,t),r=n("conv32_down"),s=a("conv32_1"),i=a("conv32_2"),o=a("conv32_3"),l=a("conv64_down"),u=a("conv64_1"),p=a("conv64_2"),d=a("conv64_3"),c=a("conv128_down"),h=a("conv128_1"),m=a("conv128_2"),f=a("conv256_down"),g=a("conv256_1"),y=a("conv256_2"),b=a("conv256_down_out"),{fc:x}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!s1(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let w={conv32_down:r,conv32_1:s,conv32_2:i,conv32_3:o,conv64_down:l,conv64_1:u,conv64_2:p,conv64_3:d,conv128_down:c,conv128_1:h,conv128_2:m,conv256_down:f,conv256_1:g,conv256_2:y,conv256_down_out:b,fc:x};return An(e,t),{params:w,paramMappings:t}}function Ja(e,t){let n=e$(e,t.conv1);return n=x1(n,t.conv2),n=X(n,e),n=Ke(n),n}function md(e,t){let n=tg(e,t.conv1);n=x1(n,t.conv2);let a=ya(e,2,2,"valid"),r=It(a.shape),s=a.shape[3]!==n.shape[3];if(a.shape[1]!==n.shape[1]||a.shape[2]!==n.shape[2]){let o=[...n.shape];o[1]=1;let l=It(o);n=Ze([n,l],1);let u=[...n.shape];u[2]=1;let p=It(u);n=Ze([n,p],2)}return a=s?Ze([a,r],3):a,n=X(a,n),n=Ke(n),n}var op=class extends hn{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return P(()=>{let a=ie(t.toBatchTensor(150,!0),"float32"),s=gr(a,[122.782,117.001,104.298]).div(255),i=tg(s,n.conv32_down);i=Dt(i,3,2,"valid"),i=Ja(i,n.conv32_1),i=Ja(i,n.conv32_2),i=Ja(i,n.conv32_3),i=md(i,n.conv64_down),i=Ja(i,n.conv64_1),i=Ja(i,n.conv64_2),i=Ja(i,n.conv64_3),i=md(i,n.conv128_down),i=Ja(i,n.conv128_1),i=Ja(i,n.conv128_2),i=md(i,n.conv256_down),i=Ja(i,n.conv256_1),i=Ja(i,n.conv256_2),i=md(i,n.conv256_down_out);let o=i.mean([1,2]);return Re(o,n.fc)})}async forward(t){return this.forwardInput(await vt(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let n=await vt(t),a=P(()=>lt(this.forwardInput(n))),r=await Promise.all(a.map(i=>i.data()));return a.forEach(i=>i.dispose()),n.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return n$(t)}extractParams(t){return t$(t)}};function oIe(e){let t=new op;return t.extractWeights(e),t}function v1(e,t){return{...e,...{descriptor:t}}}function cIe(e){return typeof e.age=="number"}function w1(e,t){return{...e,...{age:t}}}function fIe(e){return(e.gender==="male"||e.gender==="female")&&Gu(e.genderProbability)}function k1(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function qpe(e,t){function n(l,u){let p=Ra(e(9*l),[3,3,l,1]),d=je(e(l)),c=je(e(l)),h=je(e(l)),m=je(e(l));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:p,batch_norm_scale:d,batch_norm_offset:c,batch_norm_mean:h,batch_norm_variance:m}}function a(l,u,p,d,c){let h=Ra(e(l*u*p*p),[p,p,l,u]),m=je(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${c?"batch_norm_offset":"bias"}`}),{filters:h,bias:m}}function r(l,u,p,d){let{filters:c,bias:h}=a(l,u,p,d,!0);return{filters:c,batch_norm_offset:h}}function s(l,u,p){let d=n(l,`${p}/depthwise_conv`),c=r(l,u,1,`${p}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:c}}function i(){let l=r(3,32,3,"mobilenetv1/conv_0"),u=s(32,64,"mobilenetv1/conv_1"),p=s(64,128,"mobilenetv1/conv_2"),d=s(128,128,"mobilenetv1/conv_3"),c=s(128,256,"mobilenetv1/conv_4"),h=s(256,256,"mobilenetv1/conv_5"),m=s(256,512,"mobilenetv1/conv_6"),f=s(512,512,"mobilenetv1/conv_7"),g=s(512,512,"mobilenetv1/conv_8"),y=s(512,512,"mobilenetv1/conv_9"),b=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),w=s(512,1024,"mobilenetv1/conv_12"),I=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,conv_8:g,conv_9:y,conv_10:b,conv_11:x,conv_12:w,conv_13:I}}function o(){let l=r(1024,256,1,"prediction_layer/conv_0"),u=r(256,512,3,"prediction_layer/conv_1"),p=r(512,128,1,"prediction_layer/conv_2"),d=r(128,256,3,"prediction_layer/conv_3"),c=r(256,128,1,"prediction_layer/conv_4"),h=r(128,256,3,"prediction_layer/conv_5"),m=r(256,64,1,"prediction_layer/conv_6"),f=r(64,128,3,"prediction_layer/conv_7"),g=a(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),y=a(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),b=a(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=a(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),w=a(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),I=a(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),T=a(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),C=a(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),E=a(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),$=a(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),R=a(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),F=a(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,box_predictor_0:{box_encoding_predictor:g,class_predictor:y},box_predictor_1:{box_encoding_predictor:b,class_predictor:x},box_predictor_2:{box_encoding_predictor:w,class_predictor:I},box_predictor_3:{box_encoding_predictor:T,class_predictor:C},box_predictor_4:{box_encoding_predictor:E,class_predictor:$},box_predictor_5:{box_encoding_predictor:R,class_predictor:F}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:o}}function a$(e){let t=[],{extractWeights:n,getRemainingWeights:a}=$n(e),{extractMobilenetV1Params:r,extractPredictionLayerParams:s}=qpe(n,t),i=r(),o=s(),u={extra_dim:zc(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:{mobilenetv1:i,prediction_layer:o,output_layer:u},paramMappings:t}}function jpe(e,t){let n=ra(e,t);function a(u,p,d){let c=n(`${u}/Conv2d_${p}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${p}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:c,batch_norm_offset:h}}function r(u){let p=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,c=`${p}/depthwise_conv`,h=`${p}/pointwise_conv`,m=n(`${d}/depthwise_weights`,4,`${c}/filters`),f=n(`${d}/BatchNorm/gamma`,1,`${c}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${c}/batch_norm_offset`),y=n(`${d}/BatchNorm/moving_mean`,1,`${c}/batch_norm_mean`),b=n(`${d}/BatchNorm/moving_variance`,1,`${c}/batch_norm_variance`);return{depthwise_conv:{filters:m,batch_norm_scale:f,batch_norm_offset:g,batch_norm_mean:y,batch_norm_variance:b},pointwise_conv:a("MobilenetV1",u,h)}}function s(){return{conv_0:a("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:r(1),conv_2:r(2),conv_3:r(3),conv_4:r(4),conv_5:r(5),conv_6:r(6),conv_7:r(7),conv_8:r(8),conv_9:r(9),conv_10:r(10),conv_11:r(11),conv_12:r(12),conv_13:r(13)}}function i(u,p){let d=n(`${u}/weights`,4,`${p}/filters`),c=n(`${u}/biases`,1,`${p}/bias`);return{filters:d,bias:c}}function o(u){let p=i(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=i(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:p,class_predictor:d}}function l(){return{conv_0:a("Prediction",0,"prediction_layer/conv_0"),conv_1:a("Prediction",1,"prediction_layer/conv_1"),conv_2:a("Prediction",2,"prediction_layer/conv_2"),conv_3:a("Prediction",3,"prediction_layer/conv_3"),conv_4:a("Prediction",4,"prediction_layer/conv_4"),conv_5:a("Prediction",5,"prediction_layer/conv_5"),conv_6:a("Prediction",6,"prediction_layer/conv_6"),conv_7:a("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:o(0),box_predictor_1:o(1),box_predictor_2:o(2),box_predictor_3:o(3),box_predictor_4:o(4),box_predictor_5:o(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:l}}function r$(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:a}=jpe(e,t),r=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Pr(r))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${r}`);let s={mobilenetv1:n(),prediction_layer:a(),output_layer:{extra_dim:r}};return An(e,t),{params:s,paramMappings:t}}function Pa(e,t,n){return P(()=>{let a=Rt(e,t.filters,n,"same");return a=X(a,t.batch_norm_offset),tn(a,0,6)})}var Kpe=.0010000000474974513;function Xpe(e,t,n){return P(()=>{let a=ws(e,t.filters,n,"same");return a=vs(a,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Kpe),tn(a,0,6)})}function Ype(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function s$(e,t){return P(()=>{let n,a=Pa(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let o=i+1,l=Ype(o);a=Xpe(a,s.depthwise_conv,l),a=Pa(a,s.pointwise_conv,[1,1]),o===11&&(n=a)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:a,conv11:n}})}function Zpe(e,t,n){let a=e.arraySync(),r=Math.min(a[t][0],a[t][2]),s=Math.min(a[t][1],a[t][3]),i=Math.max(a[t][0],a[t][2]),o=Math.max(a[t][1],a[t][3]),l=Math.min(a[n][0],a[n][2]),u=Math.min(a[n][1],a[n][3]),p=Math.max(a[n][0],a[n][2]),d=Math.max(a[n][1],a[n][3]),c=(i-r)*(o-s),h=(p-l)*(d-u);if(c<=0||h<=0)return 0;let m=Math.max(r,l),f=Math.max(s,u),g=Math.min(i,p),y=Math.min(o,d),b=Math.max(g-m,0)*Math.max(y-f,0);return b/(c+h-b)}function i$(e,t,n,a,r){let s=e.shape[0],i=Math.min(n,s),o=t.map((p,d)=>({score:p,boxIndex:d})).filter(p=>p.score>r).sort((p,d)=>d.score-p.score),l=p=>p<=a?1:0,u=[];return o.forEach(p=>{if(u.length>=i)return;let d=p.score;for(let c=u.length-1;c>=0;--c){let h=Zpe(e,p.boxIndex,u[c]);if(h!==0&&(p.score*=l(h),p.score<=r))break}d===p.score&&u.push(p.boxIndex)}),u}function Jpe(e){let t=lt(Ee(e,[1,0])),n=[pe(t[2],t[0]),pe(t[3],t[1])],a=[X(t[0],he(n[0],2)),X(t[1],he(n[1],2))];return{sizes:n,centers:a}}function Qpe(e,t){let{sizes:n,centers:a}=Jpe(e),r=lt(Ee(t,[1,0])),s=he(z(yn(he(r[2],5)),n[0]),2),i=X(z(he(r[0],10),n[0]),a[0]),o=he(z(yn(he(r[3],5)),n[1]),2),l=X(z(he(r[1],10),n[1]),a[1]);return Ee(Ft([pe(i,s),pe(l,o),X(i,s),X(l,o)]),[1,0])}function o$(e,t,n){return P(()=>{let a=e.shape[0],r=Qpe(W(Ln(n.extra_dim,[a,1,1]),[-1,4]),W(e,[-1,4]));r=W(r,[a,r.shape[0]/a,4]);let s=da(Ve(t,[0,0,1],[-1,-1,-1])),i=Ve(s,[0,0,0],[-1,-1,1]);i=W(i,[a,i.shape[1]]);let o=lt(r),l=lt(i);return{boxes:o,scores:l}})}function $o(e,t){return P(()=>{let n=e.shape[0],a=W(Ao(e,t.box_encoding_predictor),[n,-1,1,4]),r=W(Ao(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:a,classPrediction:r}})}function l$(e,t,n){return P(()=>{let a=Pa(e,n.conv_0,[1,1]),r=Pa(a,n.conv_1,[2,2]),s=Pa(r,n.conv_2,[1,1]),i=Pa(s,n.conv_3,[2,2]),o=Pa(i,n.conv_4,[1,1]),l=Pa(o,n.conv_5,[2,2]),u=Pa(l,n.conv_6,[1,1]),p=Pa(u,n.conv_7,[2,2]),d=$o(t,n.box_predictor_0),c=$o(e,n.box_predictor_1),h=$o(r,n.box_predictor_2),m=$o(i,n.box_predictor_3),f=$o(l,n.box_predictor_4),g=$o(p,n.box_predictor_5),y=Ze([d.boxPredictionEncoding,c.boxPredictionEncoding,h.boxPredictionEncoding,m.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding],1),b=Ze([d.classPrediction,c.classPrediction,h.classPrediction,m.classPrediction,f.classPrediction,g.classPrediction],1);return{boxPredictions:y,classPredictions:b}})}var Oa=class{constructor({minConfidence:t,maxResults:n}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=t||.5,this._maxResults=n||100,typeof this._minConfidence!="number"||this._minConfidence<=0||this._minConfidence>=1)throw new Error(`${this._name} - expected minConfidence to be a number between 0 and 1`);if(typeof this._maxResults!="number")throw new Error(`${this._name} - expected maxResults to be a number`)}get minConfidence(){return this._minConfidence}get maxResults(){return this._maxResults}};var Fo=class extends hn{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return P(()=>{let a=ie(t.toBatchTensor(512,!1),"float32"),r=pe(he(a,127.5),1),s=s$(r,n.mobilenetv1),{boxPredictions:i,classPredictions:o}=l$(s.out,s.conv11,n.prediction_layer);return o$(i,o,n.output_layer)})}async forward(t){return this.forwardInput(await vt(t))}async locateFaces(t,n={}){let{maxResults:a,minConfidence:r}=new Oa(n),s=await vt(t),{boxes:i,scores:o}=this.forwardInput(s),l=i[0],u=o[0];for(let x=1;x<i.length;x++)i[x].dispose(),o[x].dispose();let p=Array.from(u.dataSync()),c=i$(l,p,a,.5,r),h=s.getReshapedInputDimensions(0),m=s.inputSize,f=m/h.width,g=m/h.height,y=l.arraySync(),b=c.map(x=>{let[w,I]=[Math.max(0,y[x][0]),Math.min(1,y[x][2])].map(E=>E*g),[T,C]=[Math.max(0,y[x][1]),Math.min(1,y[x][3])].map(E=>E*f);return new xt(p[x],new qu(T,w,C-T,I-w),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return l.dispose(),u.dispose(),b}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return r$(t)}extractParams(t){return a$(t)}};function ece(e){let t=new Fo;return t.extractWeights(e),t}function oSe(e){return ece(e)}var u$=class extends Fo{};var p$=.4,c$=[new Oe(.738768,.874946),new Oe(2.42204,2.65704),new Oe(4.30971,7.04493),new Oe(10.246,4.59428),new Oe(12.6868,11.8741)],d$=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],h$=[117.001,114.697,97.404],m$="tiny_yolov2_model",f$="tiny_yolov2_separable_conv_model";var ng=e=>typeof e=="number";function g$(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!ng(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>ng(t.x)&&ng(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(ng)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function lp(e){return P(()=>{let t=z(e,xe(.10000000149011612));return X(Ke(pe(e,t)),t)})}function Br(e,t){return P(()=>{let n=ba(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Rt(n,t.conv.filters,[1,1],"valid"),n=pe(n,t.bn.sub),n=z(n,t.bn.truediv),n=X(n,t.conv.bias),lp(n)})}function Vr(e,t){return P(()=>{let n=ba(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Is(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=X(n,t.bias),lp(n)})}function tce(e,t){let n=Qu(e,t);function a(i,o){let l=je(e(i)),u=je(e(i));return t.push({paramPath:`${o}/sub`},{paramPath:`${o}/truediv`}),{sub:l,truediv:u}}function r(i,o,l){let u=n(i,o,3,`${l}/conv`),p=a(o,`${l}/bn`);return{conv:u,bn:p}}let s=ep(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}}function y$(e,t,n,a){let{extractWeights:r,getRemainingWeights:s}=$n(e),i=[],{extractConvParams:o,extractConvWithBatchNormParams:l,extractSeparableConvParams:u}=tce(r,i),p;if(t.withSeparableConvs){let[d,c,h,m,f,g,y,b,x]=a,w=t.isFirstLayerConv2d?o(d,c,3,"conv0"):u(d,c,"conv0"),I=u(c,h,"conv1"),T=u(h,m,"conv2"),C=u(m,f,"conv3"),E=u(f,g,"conv4"),$=u(g,y,"conv5"),R=b?u(y,b,"conv6"):void 0,F=x?u(b,x,"conv7"):void 0,S=o(x||b||y,5*n,1,"conv8");p={conv0:w,conv1:I,conv2:T,conv3:C,conv4:E,conv5:$,conv6:R,conv7:F,conv8:S}}else{let[d,c,h,m,f,g,y,b,x]=a,w=l(d,c,"conv0"),I=l(c,h,"conv1"),T=l(h,m,"conv2"),C=l(m,f,"conv3"),E=l(f,g,"conv4"),$=l(g,y,"conv5"),R=l(y,b,"conv6"),F=l(b,x,"conv7"),S=o(x,5*n,1,"conv8");p={conv0:w,conv1:I,conv2:T,conv3:C,conv4:E,conv5:$,conv6:R,conv7:F,conv8:S}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:p,paramMappings:i}}function nce(e,t){let n=ra(e,t);function a(o){let l=n(`${o}/sub`,1),u=n(`${o}/truediv`,1);return{sub:l,truediv:u}}function r(o){let l=n(`${o}/filters`,4),u=n(`${o}/bias`,1);return{filters:l,bias:u}}function s(o){let l=r(`${o}/conv`),u=a(`${o}/bn`);return{conv:l,bn:u}}let i=tp(n);return{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function b$(e,t){let n=[],{extractConvParams:a,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}=nce(e,n),i;if(t.withSeparableConvs){let o=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?a("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:o>7?s("conv6"):void 0,conv7:o>8?s("conv7"):void 0,conv8:a("conv8")}}else i={conv0:r("conv0"),conv1:r("conv1"),conv2:r("conv2"),conv3:r("conv3"),conv4:r("conv4"),conv5:r("conv5"),conv6:r("conv6"),conv7:r("conv7"),conv8:a("conv8")};return An(e,n),{params:i,paramMappings:n}}var yr=class{constructor({inputSize:t,scoreThreshold:n}={}){this._name="TinyYolov2Options";if(this._inputSize=t||416,this._scoreThreshold=n||.5,typeof this._inputSize!="number"||this._inputSize%32!==0)throw new Error(`${this._name} - expected inputSize to be a number divisible by 32`);if(typeof this._scoreThreshold!="number"||this._scoreThreshold<=0||this._scoreThreshold>=1)throw new Error(`${this._name} - expected scoreThreshold to be a number between 0 and 1`)}get inputSize(){return this._inputSize}get scoreThreshold(){return this._scoreThreshold}};var I1=class extends hn{constructor(n){super("TinyYolov2");g$(n),this._config=n}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(n,a){let r=Br(n,a.conv0);return r=Dt(r,[2,2],[2,2],"same"),r=Br(r,a.conv1),r=Dt(r,[2,2],[2,2],"same"),r=Br(r,a.conv2),r=Dt(r,[2,2],[2,2],"same"),r=Br(r,a.conv3),r=Dt(r,[2,2],[2,2],"same"),r=Br(r,a.conv4),r=Dt(r,[2,2],[2,2],"same"),r=Br(r,a.conv5),r=Dt(r,[2,2],[1,1],"same"),r=Br(r,a.conv6),r=Br(r,a.conv7),Ao(r,a.conv8,"valid",!1)}runMobilenet(n,a){let r=this.config.isFirstLayerConv2d?lp(Ao(n,a.conv0,"valid",!1)):Vr(n,a.conv0);return r=Dt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv1),r=Dt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv2),r=Dt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv3),r=Dt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv4),r=Dt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv5),r=Dt(r,[2,2],[1,1],"same"),r=a.conv6?Vr(r,a.conv6):r,r=a.conv7?Vr(r,a.conv7):r,Ao(r,a.conv8,"valid",!1)}forwardInput(n,a){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return P(()=>{let s=ie(n.toBatchTensor(a,!1),"float32");return s=this.config.meanRgb?gr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(n,a){return this.forwardInput(await vt(n),a)}async detect(n,a={}){let{inputSize:r,scoreThreshold:s}=new yr(a),i=await vt(n),o=await this.forwardInput(i,r),l=P(()=>lt(o)[0].expandDims()),u={width:i.getInputWidth(0),height:i.getInputHeight(0)},p=await this.extractBoxes(l,i.getReshapedInputDimensions(0),s);o.dispose(),l.dispose();let d=p.map(y=>y.box),c=p.map(y=>y.score),h=p.map(y=>y.classScore),m=p.map(y=>this.config.classes[y.label]);return NA(d.map(y=>y.rescale(r)),c,this.config.iouThreshold,!0).map(y=>new _s(c[y],h[y],m[y],d[y],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return b$(n,this.config)}extractParams(n){let a=this.config.filterSizes||I1.DEFAULT_FILTER_SIZES,r=a?a.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return y$(n,this.config,this.boxEncodingSize,a)}async extractBoxes(n,a,r){let{width:s,height:i}=a,o=Math.max(s,i),l=o/s,u=o/i,p=n.shape[1],d=this.config.anchors.length,[c,h,m]=P(()=>{let b=n.reshape([p,p,d,this.boxEncodingSize]),x=b.slice([0,0,0,0],[p,p,d,4]),w=b.slice([0,0,0,4],[p,p,d,1]),I=this.withClassScores?Xa(b.slice([0,0,0,5],[p,p,d,this.config.classes.length]),3):xe(0);return[x,w,I]}),f=[],g=await h.array(),y=await c.array();for(let b=0;b<p;b++)for(let x=0;x<p;x++)for(let w=0;w<d;w++){let I=Pf(g[b][x][w][0]);if(!r||I>r){let T=(x+Pf(y[b][x][w][0]))/p*l,C=(b+Pf(y[b][x][w][1]))/p*u,E=Math.exp(y[b][x][w][2])*this.config.anchors[w].x/p*l,$=Math.exp(y[b][x][w][3])*this.config.anchors[w].y/p*u,R=T-E/2,F=C-$/2,S={row:b,col:x,anchor:w},{classScore:M,label:B}=this.withClassScores?await this.extractPredictedClass(m,S):{classScore:1,label:0};f.push({box:new Hu(R,F,R+E,F+$),score:I,classScore:I*M,label:B,...S})}}return c.dispose(),h.dispose(),m.dispose(),f}async extractPredictedClass(n,a){let{row:r,col:s,anchor:i}=a,o=await n.array();return Array(this.config.classes.length).fill(0).map((l,u)=>o[r][s][i][u]).map((l,u)=>({classScore:l,label:u})).reduce((l,u)=>l.classScore>u.classScore?l:u)}},Ro=I1;Ro.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var up=class extends Ro{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:p$,classes:["face"],...t?{anchors:d$,meanRgb:h$}:{anchors:c$,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new xt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?f$:m$}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function JSe(e,t=!0){let n=new up(t);return n.extractWeights(e),n}var ag=class extends yr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var La=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Do(e,t,n,a,r=({alignedRect:s})=>s){let s=e.map(l=>rp(l)?r(l):l.detection),i=a||(t instanceof Ne?await ud(t,s):await ld(t,s)),o=await n(i);return i.forEach(l=>l instanceof Ne&&l.dispose()),o}async function pp(e,t,n,a,r){return Do([e],t,async s=>n(s[0]),a,r)}var x$=.4,v$=[new Oe(1.603231,2.094468),new Oe(6.041143,7.080126),new Oe(2.882459,3.518061),new Oe(4.266906,5.178857),new Oe(9.041765,10.66308)],w$=[117.001,114.697,97.404];var cp=class extends Ro{constructor(){let t={withSeparableConvs:!0,iouThreshold:x$,classes:["face"],anchors:v$,meanRgb:w$,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new xt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var nt={ssdMobilenetv1:new Fo,tinyFaceDetector:new cp,tinyYolov2:new up,faceLandmark68Net:new ip,faceLandmark68TinyNet:new eg,faceRecognitionNet:new op,faceExpressionNet:new Kf,ageGenderNet:new Jf},ace=(e,t)=>nt.ssdMobilenetv1.locateFaces(e,t),_Te=(e,t)=>nt.tinyFaceDetector.locateFaces(e,t),ETe=(e,t)=>nt.tinyYolov2.locateFaces(e,t),rce=e=>nt.faceLandmark68Net.detectLandmarks(e),ATe=e=>nt.faceLandmark68TinyNet.detectLandmarks(e),$Te=e=>nt.faceRecognitionNet.computeFaceDescriptor(e),FTe=e=>nt.faceExpressionNet.predictExpressions(e),RTe=e=>nt.ageGenderNet.predictAgeAndGender(e),sce=e=>nt.ssdMobilenetv1.load(e),DTe=e=>nt.tinyFaceDetector.load(e),MTe=e=>nt.tinyYolov2.load(e),PTe=e=>nt.faceLandmark68Net.load(e),OTe=e=>nt.faceLandmark68TinyNet.load(e),LTe=e=>nt.faceRecognitionNet.load(e),zTe=e=>nt.faceExpressionNet.load(e),WTe=e=>nt.ageGenderNet.load(e),BTe=sce,VTe=ace,UTe=rce;var rg=class extends La{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Mo=class extends rg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>nt.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return t.map((a,r)=>f1(a,n[r]))}withAgeAndGender(){return new Oo(this,this.input)}},Po=class extends rg{async run(){let t=await this.parentTask;if(!t)return;let n=await pp(t,this.input,a=>nt.faceExpressionNet.predictExpressions(a),this.extractedFaces);return f1(t,n)}withAgeAndGender(){return new Lo(this,this.input)}},$s=class extends Mo{withAgeAndGender(){return new Rs(this,this.input)}withFaceDescriptors(){return new Ms(this,this.input)}},Fs=class extends Po{withAgeAndGender(){return new Ds(this,this.input)}withFaceDescriptor(){return new Ps(this,this.input)}};var sg=class extends La{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Oo=class extends sg{async run(){let t=await this.parentTask,n=await Do(t,this.input,async a=>Promise.all(a.map(r=>nt.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return t.map((a,r)=>{let{age:s,gender:i,genderProbability:o}=n[r];return w1(k1(a,i,o),s)})}withFaceExpressions(){return new Mo(this,this.input)}},Lo=class extends sg{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:a,genderProbability:r}=await pp(t,this.input,s=>nt.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return w1(k1(t,a,r),n)}withFaceExpressions(){return new Po(this,this.input)}},Rs=class extends Oo{withFaceExpressions(){return new $s(this,this.input)}withFaceDescriptors(){return new Ms(this,this.input)}},Ds=class extends Lo{withFaceExpressions(){return new Fs(this,this.input)}withFaceDescriptor(){return new Ps(this,this.input)}};var ig=class extends La{constructor(n,a){super();this.parentTask=n;this.input=a}},Ms=class extends ig{async run(){let t=await this.parentTask;return(await Do(t,this.input,a=>Promise.all(a.map(r=>nt.faceRecognitionNet.computeFaceDescriptor(r))),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}))).map((a,r)=>v1(t[r],a))}withFaceExpressions(){return new $s(this,this.input)}withAgeAndGender(){return new Rs(this,this.input)}},Ps=class extends ig{async run(){let t=await this.parentTask;if(!t)return;let n=await pp(t,this.input,a=>nt.faceRecognitionNet.computeFaceDescriptor(a),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}));return v1(t,n)}withFaceExpressions(){return new Fs(this,this.input)}withAgeAndGender(){return new Ds(this,this.input)}};var og=class extends La{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?nt.faceLandmark68TinyNet:nt.faceLandmark68Net}},lg=class extends og{async run(){let t=await this.parentTask,n=t.map(i=>i.detection),a=this.input instanceof Ne?await ud(this.input,n):await ld(this.input,n),r=await Promise.all(a.map(i=>this.landmarkNet.detectLandmarks(i)));return a.forEach(i=>i instanceof Ne&&i.dispose()),t.filter((i,o)=>r[o]).map((i,o)=>hd(i,r[o]))}withFaceExpressions(){return new $s(this,this.input)}withAgeAndGender(){return new Rs(this,this.input)}withFaceDescriptors(){return new Ms(this,this.input)}},ug=class extends og{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,a=this.input instanceof Ne?await ud(this.input,[n]):await ld(this.input,[n]),r=await this.landmarkNet.detectLandmarks(a[0]);return a.forEach(s=>s instanceof Ne&&s.dispose()),hd(t,r)}withFaceExpressions(){return new Fs(this,this.input)}withAgeAndGender(){return new Ds(this,this.input)}withFaceDescriptor(){return new Ps(this,this.input)}};var pg=class extends La{constructor(n,a=new Oa){super();this.input=n;this.options=a}},fd=class extends pg{async run(){let{input:t,options:n}=this,a;if(n instanceof ag)a=nt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof Oa)a=nt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof yr)a=nt.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return a}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(a=>t(a.map(r=>Ku({},r)))).catch(a=>n(a))})}withFaceLandmarks(t=!1){return new lg(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Mo(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Oo(this.runAndExtendWithFaceDetections(),this.input)}},cg=class extends pg{async run(){let t=await new fd(this.input,this.options),n=t[0];return t.forEach(a=>{a.score>n.score&&(n=a)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?Ku({},n):void 0)})}withFaceLandmarks(t=!1){return new ug(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Po(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Lo(this.runAndExtendWithFaceDetection(),this.input)}};function WNe(e,t=new Oa){return new cg(e,t)}function S1(e,t=new Oa){return new fd(e,t)}async function ice(e,t){return S1(e,new Oa(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function qNe(e,t={}){return S1(e,new yr(t)).withFaceLandmarks().withFaceDescriptors()}var jNe=ice;function k$(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),a=Array.from(t);return Math.sqrt(n.map((r,s)=>r-a[s]).reduce((r,s)=>r+s*s,0))}var dg=class{constructor(t,n=.6){this._distanceThreshold=n;let a=Array.isArray(t)?t:[t];if(!a.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1,s=()=>`person ${r++}`;this._labeledDescriptors=a.map(i=>{if(i instanceof Or)return i;if(i instanceof Float32Array)return new Or(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new Or(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(a=>k$(a,t)).reduce((a,r)=>a+r,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:a})=>new rd(a,this.computeMeanDistance(t,n))).reduce((n,a)=>n.distance<a.distance?n:a)}findBestMatch(t){let n=this.matchDescriptor(t);return n.distance<this._distanceThreshold?n:new rd("unknown",n.distance)}toJSON(){return{distanceThreshold:this._distanceThreshold,labeledDescriptors:this._labeledDescriptors.map(t=>t.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(a=>Or.fromJSON(a));return new dg(n,t.distanceThreshold)}};function c2e(e){let t=new cp;return t.extractWeights(e),t}function oce(e,t){let{width:n,height:a}=new En(t.width,t.height);if(n<=0||a<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:a})}`);if(Array.isArray(e))return e.map(r=>oce(r,{width:n,height:a}));if(rp(e)){let r=e.detection.forSize(n,a),s=e.unshiftedLandmarks.forSize(r.box.width,r.box.height);return hd(Ku(e,r),s)}return Lr(e)?Ku(e,e.detection.forSize(n,a)):e instanceof wa||e instanceof xt?e.forSize(n,a):e}var k2e=GA;export{Jf as AgeGenderNet,Hu as BoundingBox,ut as Box,La as ComposableTask,Ms as ComputeAllFaceDescriptorsTask,ig as ComputeFaceDescriptorsTaskBase,Ps as ComputeSingleFaceDescriptorTask,lg as DetectAllFaceLandmarksTask,fd as DetectAllFacesTask,og as DetectFaceLandmarksTaskBase,pg as DetectFacesTaskBase,ug as DetectSingleFaceLandmarksTask,cg as DetectSingleFaceTask,En as Dimensions,BA as FACE_EXPRESSION_LABELS,xt as FaceDetection,u$ as FaceDetectionNet,Kf as FaceExpressionNet,As as FaceExpressions,ip as FaceLandmark68Net,eg as FaceLandmark68TinyNet,JA as FaceLandmarkNet,wa as FaceLandmarks,_A as FaceLandmarks5,ju as FaceLandmarks68,rd as FaceMatch,dg as FaceMatcher,op as FaceRecognitionNet,y1 as Gender,sd as LabeledBox,Or as LabeledFaceDescriptors,Wr as NetInput,hn as NeuralNetwork,_s as ObjectDetection,Oe as Point,EA as PredictedBox,qu as Rect,Fo as SsdMobilenetv1,Oa as SsdMobilenetv1Options,cp as TinyFaceDetector,ag as TinyFaceDetectorOptions,up as TinyYolov2,yr as TinyYolov2Options,jNe as allFaces,ice as allFacesSsdMobilenetv1,qNe as allFacesTinyYolov2,AA as awaitMediaLoaded,$A as bufferToImage,$Te as computeFaceDescriptor,Ju as createCanvas,Wf as createCanvasFromMedia,oSe as createFaceDetectionNet,oIe as createFaceRecognitionNet,ece as createSsdMobilenetv1,c2e as createTinyFaceDetector,JSe as createTinyYolov2,S1 as detectAllFaces,rce as detectFaceLandmarks,ATe as detectFaceLandmarksTiny,UTe as detectLandmarks,WNe as detectSingleFace,UA as draw,tt as env,k$ as euclideanDistance,w1 as extendWithAge,v1 as extendWithFaceDescriptor,Ku as extendWithFaceDetection,f1 as extendWithFaceExpressions,hd as extendWithFaceLandmarks,k1 as extendWithGender,ud as extractFaceTensors,ld as extractFaces,yve as fetchImage,DA as fetchJson,kve as fetchNetWeights,Es as fetchOrThrow,_ve as fetchVideo,aa as getContext2dOrThrow,Zu as getMediaDimensions,FA as imageTensorToCanvas,RA as imageToSquare,Fye as inverseSigmoid,SA as iou,m1 as isMediaElement,zf as isMediaLoaded,cIe as isWithAge,Lr as isWithFaceDetection,VA as isWithFaceExpressions,rp as isWithFaceLandmarks,fIe as isWithGender,WTe as loadAgeGenderModel,BTe as loadFaceDetectionModel,zTe as loadFaceExpressionModel,PTe as loadFaceLandmarkModel,OTe as loadFaceLandmarkTinyModel,LTe as loadFaceRecognitionModel,sce as loadSsdMobilenetv1Model,DTe as loadTinyFaceDetectorModel,MTe as loadTinyYolov2Model,PA as loadWeightMap,VTe as locateFaces,Mve as matchDimensions,TA as minBbox,nt as nets,NA as nonMaxSuppression,gr as normalize,CA as padToSquare,RTe as predictAgeAndGender,FTe as recognizeFaceExpressions,oce as resizeResults,Xu as resolveInput,Aye as shuffleArray,Pf as sigmoid,ace as ssdMobilenetv1,ze as tf,_Te as tinyFaceDetector,ETe as tinyYolov2,vt as toNetInput,IA as utils,g$ as validateConfig,k2e as version};
|
|
//# sourceMappingURL=face-api.esm.js.map
|