/* Face-API homepage: author: ' */ "use strict";var faceapi=(()=>{var Ey=Object.defineProperty;var FF=Object.getOwnPropertyDescriptor;var DF=Object.getOwnPropertyNames;var RF=Object.prototype.hasOwnProperty;var MF=(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 Nh=(e,t)=>{for(var n in t)Ey(e,n,{get:t[n],enumerable:!0})},PF=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of DF(t))!RF.call(e,r)&&r!==n&&Ey(e,r,{get:()=>t[r],enumerable:!(a=FF(t,r))||a.enumerable});return e};var OF=e=>PF(Ey({},"__esModule",{value:!0}),e);var Hce={};Nh(Hce,{AgeGenderNet:()=>Rd,BoundingBox:()=>Mo,Box:()=>lt,ComposableTask:()=>ka,ComputeAllFaceDescriptorsTask:()=>jr,ComputeFaceDescriptorsTaskBase:()=>Ld,ComputeSingleFaceDescriptorTask:()=>qr,DetectAllFaceLandmarksTask:()=>Wd,DetectAllFacesTask:()=>Ep,DetectFaceLandmarksTaskBase:()=>zd,DetectFacesTaskBase:()=>Vd,DetectSingleFaceLandmarksTask:()=>Bd,DetectSingleFaceTask:()=>Ud,Dimensions:()=>bn,FACE_EXPRESSION_LABELS:()=>q1,FaceDetection:()=>xt,FaceDetectionNet:()=>ek,FaceExpressionNet:()=>Dd,FaceExpressions:()=>Ur,FaceLandmark68Net:()=>Go,FaceLandmark68TinyNet:()=>Md,FaceLandmarkNet:()=>Z1,FaceLandmarks:()=>ra,FaceLandmarks5:()=>D1,FaceLandmarks68:()=>Oo,FaceMatch:()=>fp,FaceMatcher:()=>Gd,FaceRecognitionNet:()=>Ho,Gender:()=>Lg,LabeledBox:()=>gp,LabeledFaceDescriptors:()=>wr,NetInput:()=>Ir,NeuralNetwork:()=>on,ObjectDetection:()=>Wr,Point:()=>Pe,PredictedBox:()=>R1,Rect:()=>Po,SsdMobilenetv1:()=>Rs,SsdMobilenetv1Options:()=>wa,TinyFaceDetector:()=>Yo,TinyFaceDetectorOptions:()=>Od,TinyYolov2:()=>Ko,TinyYolov2Options:()=>rr,allFaces:()=>Vce,allFacesSsdMobilenetv1:()=>OA,allFacesTinyYolov2:()=>Bce,awaitMediaLoaded:()=>B1,bufferToImage:()=>V1,computeFaceDescriptor:()=>Cce,createCanvas:()=>Bo,createCanvasFromMedia:()=>Ed,createFaceDetectionNet:()=>vce,createFaceRecognitionNet:()=>uce,createSsdMobilenetv1:()=>kA,createTinyFaceDetector:()=>Uce,createTinyYolov2:()=>Ice,detectAllFaces:()=>qg,detectFaceLandmarks:()=>MA,detectFaceLandmarksTiny:()=>Nce,detectLandmarks:()=>zce,detectSingleFace:()=>Wce,draw:()=>X1,env:()=>et,euclideanDistance:()=>ak,extendWithAge:()=>Vg,extendWithFaceDescriptor:()=>Bg,extendWithFaceDetection:()=>Lo,extendWithFaceExpressions:()=>Rg,extendWithFaceLandmarks:()=>Sp,extendWithGender:()=>Ug,extractFaceTensors:()=>xp,extractFaces:()=>yp,fetchImage:()=>Xpe,fetchJson:()=>H1,fetchNetWeights:()=>Ype,fetchOrThrow:()=>Vr,fetchVideo:()=>Zpe,getContext2dOrThrow:()=>Kn,getMediaDimensions:()=>Wo,imageTensorToCanvas:()=>U1,imageToSquare:()=>G1,inverseSigmoid:()=>Vpe,iou:()=>E1,isMediaElement:()=>Ng,isMediaLoaded:()=>_d,isWithAge:()=>pce,isWithFaceDetection:()=>kr,isWithFaceExpressions:()=>K1,isWithFaceLandmarks:()=>Uo,isWithGender:()=>cce,loadAgeGenderModel:()=>Pce,loadFaceDetectionModel:()=>Oce,loadFaceExpressionModel:()=>Mce,loadFaceLandmarkModel:()=>Fce,loadFaceLandmarkTinyModel:()=>Dce,loadFaceRecognitionModel:()=>Rce,loadSsdMobilenetv1Model:()=>PA,loadTinyFaceDetectorModel:()=>$ce,loadTinyYolov2Model:()=>Ace,loadWeightMap:()=>j1,locateFaces:()=>Lce,matchDimensions:()=>Jpe,minBbox:()=>$1,nets:()=>tt,nonMaxSuppression:()=>A1,normalize:()=>nr,padToSquare:()=>F1,predictAgeAndGender:()=>Ece,recognizeFaceExpressions:()=>_ce,resizeResults:()=>LA,resolveInput:()=>zo,shuffleArray:()=>Bpe,sigmoid:()=>Sd,ssdMobilenetv1:()=>RA,tf:()=>Le,tinyFaceDetector:()=>Tce,tinyYolov2:()=>Sce,toNetInput:()=>vt,utils:()=>_1,validateConfig:()=>tk,version:()=>Gce});var Le={};Nh(Le,{Abs:()=>Ul,Acos:()=>Gl,Acosh:()=>Hl,AdadeltaOptimizer:()=>Vf,AdagradOptimizer:()=>Uf,AdamOptimizer:()=>Gf,AdamaxOptimizer:()=>Hf,Add:()=>xs,AddN:()=>Ti,All:()=>jl,Any:()=>ql,ArgMax:()=>Si,ArgMin:()=>Sc,Asin:()=>Kl,Asinh:()=>Xl,Atan:()=>Yl,Atan2:()=>Jl,Atanh:()=>Zl,AvgPool:()=>Ni,AvgPool3D:()=>Nc,AvgPool3DGrad:()=>Dm,AvgPoolGrad:()=>Fm,BackendWasm:()=>Z$,BatchMatMul:()=>Ci,BatchToSpaceND:()=>Ql,Bincount:()=>Rm,BroadcastArgs:()=>Mm,BroadcastTo:()=>hT,Callback:()=>_2,CallbackList:()=>FN,Cast:()=>_i,Ceil:()=>Ei,ClipByValue:()=>vs,Complex:()=>Pm,ComplexAbs:()=>Cc,Concat:()=>eu,Conv2D:()=>$i,Conv2DBackpropFilter:()=>Om,Conv2DBackpropInput:()=>Ai,Conv3D:()=>_c,Conv3DBackpropFilterV2:()=>Lm,Conv3DBackpropInputV2:()=>zm,Cos:()=>Fi,Cosh:()=>Di,CropAndResize:()=>nu,Cumprod:()=>tu,Cumsum:()=>Ri,CustomCallback:()=>RN,DataStorage:()=>Em,DenseBincount:()=>Wm,DepthToSpace:()=>au,DepthwiseConv2dNative:()=>Mi,DepthwiseConv2dNativeBackpropFilter:()=>Bm,DepthwiseConv2dNativeBackpropInput:()=>Vm,Diag:()=>Um,Dilation2D:()=>Ec,Dilation2DBackpropFilter:()=>em,Dilation2DBackpropInput:()=>Qh,ENV:()=>Xx,EarlyStopping:()=>E2,Einsum:()=>Gm,Elu:()=>Oi,EluGrad:()=>Hm,Environment:()=>cT,Equal:()=>su,Erf:()=>ru,Exp:()=>Li,ExpandDims:()=>iu,Expm1:()=>ou,FFT:()=>jm,Fill:()=>$c,FlipLeftRight:()=>lu,Floor:()=>zi,FloorDiv:()=>Wi,FromPixels:()=>tm,FusedBatchNorm:()=>Bi,FusedConv2D:()=>ui,FusedDepthwiseConv2D:()=>pi,GPGPUContext:()=>Kh,GatherNd:()=>pu,GatherV2:()=>uu,GraphModel:()=>H0,Greater:()=>cu,GreaterEqual:()=>Vi,History:()=>DN,IFFT:()=>qm,Identity:()=>Ui,Imag:()=>Km,InputSpec:()=>zt,IsFinite:()=>du,IsInf:()=>hu,IsNan:()=>mu,KernelBackend:()=>Tc,LRN:()=>Ac,LRNGrad:()=>Ym,LayerVariable:()=>SN,LayersModel:()=>Fr,LeakyRelu:()=>Gi,Less:()=>fu,LessEqual:()=>gu,LinSpace:()=>Xm,Log:()=>Hi,Log1p:()=>bu,LogSoftmax:()=>fT,LogicalAnd:()=>yu,LogicalNot:()=>xu,LogicalOr:()=>vu,LogicalXor:()=>mT,LowerBound:()=>CD,MathBackendWebGL:()=>gg,Max:()=>ji,MaxPool:()=>Ki,MaxPool3D:()=>Fc,MaxPool3DGrad:()=>Jm,MaxPoolGrad:()=>Zm,MaxPoolWithArgmax:()=>Qm,Maximum:()=>qi,Mean:()=>Xi,Min:()=>Yi,Minimum:()=>Zi,MirrorPad:()=>Ji,Mod:()=>wu,MomentumOptimizer:()=>jf,Multinomial:()=>ef,Multiply:()=>Qi,Neg:()=>ku,NonMaxSuppressionV3:()=>Tu,NonMaxSuppressionV4:()=>Su,NonMaxSuppressionV5:()=>Nu,NotEqual:()=>Iu,OP_SCOPE_SUFFIX:()=>Qx,OneHot:()=>eo,OnesLike:()=>Cu,Optimizer:()=>Pr,OptimizerConstructors:()=>Qr,Pack:()=>_u,PadV2:()=>to,Pool:()=>_D,Pow:()=>no,Prelu:()=>ao,Prod:()=>ro,RMSPropOptimizer:()=>qf,RNN:()=>xr,RaggedTensorToTensor:()=>tf,Range:()=>Dc,Rank:()=>qy,Real:()=>nf,RealDiv:()=>Pi,Reciprocal:()=>Eu,Reduction:()=>In,Relu:()=>so,Relu6:()=>lo,Reshape:()=>$u,ResizeBilinear:()=>oo,ResizeBilinearGrad:()=>rf,ResizeNearestNeighbor:()=>io,ResizeNearestNeighborGrad:()=>af,Reverse:()=>uo,RotateWithOffset:()=>ju,Round:()=>po,Rsqrt:()=>co,SGDOptimizer:()=>od,ScatterNd:()=>Au,SearchSorted:()=>sf,Select:()=>Fu,Selu:()=>Du,Sequential:()=>Ml,Sigmoid:()=>mo,Sign:()=>Pu,Sin:()=>ho,Sinh:()=>Mu,Slice:()=>Ru,Softmax:()=>bo,Softplus:()=>Ou,SpaceToBatchND:()=>Lu,SparseFillEmptyRows:()=>Rc,SparseReshape:()=>Wu,SparseSegmentMean:()=>Mc,SparseSegmentSum:()=>Pc,SparseToDense:()=>of,SplitV:()=>zu,Sqrt:()=>fo,Square:()=>Oc,SquaredDifference:()=>yo,Step:()=>ks,StridedSlice:()=>Bu,StringNGrams:()=>Lc,StringSplit:()=>zc,StringToHashBucketFast:()=>Wc,Sub:()=>xo,Sum:()=>go,SymbolicTensor:()=>ja,Tan:()=>vo,Tanh:()=>wo,Tensor:()=>$e,TensorBuffer:()=>jt,Tile:()=>ws,TopK:()=>Vu,Transform:()=>Uu,Transpose:()=>Ar,Unique:()=>lf,Unpack:()=>Gu,UnsortedSegmentSum:()=>Bc,UpperBound:()=>ED,Variable:()=>us,ZerosLike:()=>Hu,_FusedMatMul:()=>li,abs:()=>Lt,acos:()=>hv,acosh:()=>mv,add:()=>Q,addN:()=>rS,all:()=>hf,any:()=>dc,argMax:()=>hi,argMin:()=>fv,asin:()=>gv,asinh:()=>bv,atan:()=>yv,atan2:()=>xv,atanh:()=>vv,avgPool:()=>ba,avgPool3d:()=>kv,backend:()=>WT,backend_util:()=>C,basicLSTMCell:()=>lS,batchNorm:()=>Ss,batchNorm2d:()=>Iv,batchNorm3d:()=>Tv,batchNorm4d:()=>Sv,batchToSpaceND:()=>Yc,bincount:()=>Nv,booleanMaskAsync:()=>US,broadcastArgs:()=>uS,broadcastTo:()=>ri,broadcast_util:()=>qu,browser:()=>ko,buffer:()=>ze,callbacks:()=>jH,cast:()=>le,ceil:()=>Cv,clipByValue:()=>tn,clone:()=>cr,complex:()=>Dr,concat:()=>Qe,concat1d:()=>_v,concat2d:()=>Ev,concat3d:()=>$v,concat4d:()=>Av,constraints:()=>_N,conv1d:()=>mf,conv2d:()=>Dt,conv2dTranspose:()=>ff,conv3d:()=>Dv,conv3dTranspose:()=>Rv,copyRegisteredKernels:()=>DD,cos:()=>Zc,cosh:()=>gf,cosineWindow:()=>Of,cumprod:()=>hc,cumsum:()=>bf,customGrad:()=>mr,data:()=>Q2,denseBincount:()=>cS,deprecationWarn:()=>iv,depthToSpace:()=>Mv,depthwiseConv2d:()=>Ns,deregisterOp:()=>XH,device_util:()=>Hc,diag:()=>dS,dilation2d:()=>Pv,disableDeprecationWarnings:()=>oM,dispose:()=>Me,disposeVariables:()=>lM,div:()=>fe,divNoNan:()=>Ov,dot:()=>Lv,dropout:()=>cw,einsum:()=>hS,elu:()=>Ku,enableDebugMode:()=>iM,enableProdMode:()=>sM,enclosingPowerOfTwo:()=>dw,engine:()=>ir,env:()=>X,equal:()=>ea,erf:()=>zv,euclideanNorm:()=>Vv,exp:()=>gn,expandDims:()=>mn,expm1:()=>Uv,eye:()=>yf,fft:()=>sd,fill:()=>$n,findBackend:()=>fM,findBackendFactory:()=>gM,floor:()=>Yu,floorDiv:()=>df,forceHalfFloat:()=>gE,fused:()=>Fl,gather:()=>Zu,gatherND:()=>qS,gather_util:()=>ov,getBackend:()=>hM,getGradient:()=>Hy,getKernel:()=>nm,getKernelsForBackend:()=>am,getThreadsCount:()=>_pe,gpgpu_util:()=>K_,grad:()=>WO,grads:()=>BO,greater:()=>jn,greaterEqual:()=>Cs,ifft:()=>Al,imag:()=>qc,image:()=>Er,inTopKAsync:()=>KS,initializers:()=>EN,input:()=>KN,io:()=>Nn,irfft:()=>Df,isFinite:()=>Gv,isInf:()=>Hv,isNaN:()=>jv,keep:()=>Qt,kernel_impls:()=>yr,layers:()=>$N,leakyRelu:()=>Jc,less:()=>xf,lessEqual:()=>_s,linalg:()=>fw,linspace:()=>yS,loadGraphModel:()=>J6,loadGraphModelSync:()=>Q6,loadLayersModel:()=>nG,localResponseNormalization:()=>qv,log:()=>ta,log1p:()=>Qc,logSigmoid:()=>Kv,logSoftmax:()=>wf,logSumExp:()=>kf,logicalAnd:()=>$a,logicalNot:()=>ed,logicalOr:()=>If,logicalXor:()=>Xv,losses:()=>iN,lowerBound:()=>vS,matMul:()=>Re,math:()=>zT,max:()=>_a,maxPool:()=>Mt,maxPool3d:()=>Yv,maxPoolWithArgmax:()=>wS,maximum:()=>br,mean:()=>_t,memory:()=>im,meshgrid:()=>kS,metrics:()=>S2,min:()=>mc,minimum:()=>Ju,mirrorPad:()=>Zv,mod:()=>Jv,model:()=>eG,models:()=>N2,moments:()=>td,movingAverage:()=>GS,mul:()=>W,multiRNNCell:()=>IS,multinomial:()=>TS,neg:()=>kt,nextFrame:()=>gw,norm:()=>Xu,notEqual:()=>gi,oneHot:()=>Cl,ones:()=>Qn,onesLike:()=>na,op:()=>z,outerProduct:()=>SS,pad:()=>ya,pad1d:()=>NS,pad2d:()=>CS,pad3d:()=>_S,pad4d:()=>ES,pool:()=>Qv,pow:()=>Rr,prelu:()=>ad,print:()=>av,prod:()=>ew,profile:()=>uM,raggedTensorToTensor:()=>$S,rand:()=>AS,randomGamma:()=>FS,randomNormal:()=>Sf,randomStandardNormal:()=>DS,randomUniform:()=>Qu,range:()=>El,ready:()=>dM,real:()=>_l,reciprocal:()=>aw,registerBackend:()=>cf,registerCallbackConstructor:()=>aG,registerGradient:()=>gT,registerKernel:()=>Vc,registerOp:()=>KH,regularizers:()=>C2,relu:()=>Xe,relu6:()=>Nf,removeBackend:()=>mM,reshape:()=>B,reverse:()=>ga,reverse1d:()=>RS,reverse2d:()=>MS,reverse3d:()=>PS,reverse4d:()=>OS,rfft:()=>id,round:()=>Cf,rsqrt:()=>_f,scalar:()=>ke,scatterND:()=>HS,scatter_util:()=>lv,searchSorted:()=>Tf,selu:()=>Ef,separableConv2d:()=>Es,sequential:()=>tG,serialization:()=>se,setBackend:()=>cM,setPlatform:()=>bM,setThreadsCount:()=>Cpe,setWasmPath:()=>Spe,setWasmPaths:()=>Npe,setWebGLContext:()=>y_,setdiff1dAsync:()=>LS,sigmoid:()=>ha,sign:()=>rw,signal:()=>sN,sin:()=>$f,sinh:()=>Af,slice:()=>He,slice1d:()=>rd,slice2d:()=>Ff,slice3d:()=>To,slice4d:()=>$l,slice_util:()=>qt,softmax:()=>Qa,softplus:()=>Io,spaceToBatchND:()=>nd,sparse:()=>oN,sparseToDense:()=>jS,spectral:()=>rN,split:()=>Vn,sqrt:()=>un,square:()=>ut,squaredDifference:()=>Rf,squeeze:()=>$s,stack:()=>Rt,step:()=>So,stridedSlice:()=>sw,string:()=>lN,sub:()=>ce,sum:()=>ye,sumOutType:()=>pf,tan:()=>iw,tanh:()=>mi,tensor:()=>Bn,tensor1d:()=>Ke,tensor2d:()=>Ea,tensor3d:()=>Kc,tensor4d:()=>Fa,tensor5d:()=>zS,tensor6d:()=>WS,tensor_util:()=>qa,test_util:()=>tS,tidy:()=>O,tile:()=>Wn,time:()=>pM,topk:()=>ow,train:()=>Xs,transpose:()=>Ae,truncatedNormal:()=>Mf,unique:()=>lw,unregisterGradient:()=>FD,unregisterKernel:()=>AD,unsortedSegmentSum:()=>Pf,unstack:()=>mt,upcastType:()=>ma,upperBound:()=>BS,util:()=>v,valueAndGrad:()=>VO,valueAndGrads:()=>UO,variable:()=>uw,variableGrads:()=>xS,version:()=>zpe,version_converter:()=>tj,version_core:()=>XM,version_layers:()=>Lw,version_wasm:()=>Epe,version_webgl:()=>vJ,webgl:()=>wJ,webgl_util:()=>b_,where:()=>fn,whereAsync:()=>pw,zeros:()=>It,zerosLike:()=>qe});var LF=Object.create,Gx=Object.defineProperty,zF=Object.getOwnPropertyDescriptor,WF=Object.getOwnPropertyNames,BF=Object.getPrototypeOf,VF=Object.prototype.hasOwnProperty,Bt=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Fe=(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 WF(t))!VF.call(e,r)&&r!==n&&Gx(e,r,{get:()=>t[r],enumerable:!(a=zF(t,r))||a.enumerable});return e},bs=(e,t,n)=>(n=e!=null?LF(BF(e)):{},UF(t||!e||!e.__esModule?Gx(n,"default",{value:e,enumerable:!0}):n,e)),GF=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(T){}function a(T,P,U){this.low=T|0,this.high=P|0,this.unsigned=!!U}a.prototype.__isLong__,Object.defineProperty(a.prototype,"__isLong__",{value:!0});function r(T){return(T&&T.__isLong__)===!0}a.isLong=r;var s={},i={};function o(T,P){var U,j,q;return P?(T>>>=0,(q=0<=T&&T<256)&&(j=i[T],j)?j:(U=u(T,(T|0)<0?-1:0,!0),q&&(i[T]=U),U)):(T|=0,(q=-128<=T&&T<128)&&(j=s[T],j)?j:(U=u(T,T<0?-1:0,!1),q&&(s[T]=U),U))}a.fromInt=o;function l(T,P){if(isNaN(T))return P?w:x;if(P){if(T<0)return w;if(T>=g)return A}else{if(T<=-b)return M;if(T+1>=b)return $}return T<0?l(-T,P).neg():u(T%f|0,T/f|0,P)}a.fromNumber=l;function u(T,P,U){return new a(T,P,U)}a.fromBits=u;var p=Math.pow;function d(T,P,U){if(T.length===0)throw Error("empty string");if(T==="NaN"||T==="Infinity"||T==="+Infinity"||T==="-Infinity")return x;if(typeof P=="number"?(U=P,P=!1):P=!!P,U=U||10,U<2||360)throw Error("interior hyphen");if(j===0)return d(T.substring(1),P,U).neg();for(var q=l(p(U,8)),K=x,Y=0;Y>>0:this.low},D.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},D.toString=function(T){if(T=T||10,T<2||36>>0,J=re.toString(T);if(K=te,K.isZero())return J+Y;for(;J.length<6;)J="0"+J;Y=""+J+Y}},D.getHighBits=function(){return this.high},D.getHighBitsUnsigned=function(){return this.high>>>0},D.getLowBits=function(){return this.low},D.getLowBitsUnsigned=function(){return this.low>>>0},D.getNumBitsAbs=function(){if(this.isNegative())return this.eq(M)?64:this.neg().getNumBitsAbs();for(var T=this.high!=0?this.high:this.low,P=31;P>0&&(T&1<=0},D.isOdd=function(){return(this.low&1)===1},D.isEven=function(){return(this.low&1)===0},D.equals=function(T){return r(T)||(T=c(T)),this.unsigned!==T.unsigned&&this.high>>>31===1&&T.high>>>31===1?!1:this.high===T.high&&this.low===T.low},D.eq=D.equals,D.notEquals=function(T){return!this.eq(T)},D.neq=D.notEquals,D.ne=D.notEquals,D.lessThan=function(T){return this.comp(T)<0},D.lt=D.lessThan,D.lessThanOrEqual=function(T){return this.comp(T)<=0},D.lte=D.lessThanOrEqual,D.le=D.lessThanOrEqual,D.greaterThan=function(T){return this.comp(T)>0},D.gt=D.greaterThan,D.greaterThanOrEqual=function(T){return this.comp(T)>=0},D.gte=D.greaterThanOrEqual,D.ge=D.greaterThanOrEqual,D.compare=function(T){if(r(T)||(T=c(T)),this.eq(T))return 0;var P=this.isNegative(),U=T.isNegative();return P&&!U?-1:!P&&U?1:this.unsigned?T.high>>>0>this.high>>>0||T.high===this.high&&T.low>>>0>this.low>>>0?-1:1:this.sub(T).isNegative()?-1:1},D.comp=D.compare,D.negate=function(){return!this.unsigned&&this.eq(M)?M:this.not().add(I)},D.neg=D.negate,D.add=function(T){r(T)||(T=c(T));var P=this.high>>>16,U=this.high&65535,j=this.low>>>16,q=this.low&65535,K=T.high>>>16,Y=T.high&65535,te=T.low>>>16,re=T.low&65535,J=0,ie=0,ae=0,oe=0;return oe+=q+re,ae+=oe>>>16,oe&=65535,ae+=j+te,ie+=ae>>>16,ae&=65535,ie+=U+Y,J+=ie>>>16,ie&=65535,J+=P+K,J&=65535,u(ae<<16|oe,J<<16|ie,this.unsigned)},D.subtract=function(T){return r(T)||(T=c(T)),this.add(T.neg())},D.sub=D.subtract,D.multiply=function(T){if(this.isZero())return x;if(r(T)||(T=c(T)),n){var P=n.mul(this.low,this.high,T.low,T.high);return u(P,n.get_high(),this.unsigned)}if(T.isZero())return x;if(this.eq(M))return T.isOdd()?M:x;if(T.eq(M))return this.isOdd()?M:x;if(this.isNegative())return T.isNegative()?this.neg().mul(T.neg()):this.neg().mul(T).neg();if(T.isNegative())return this.mul(T.neg()).neg();if(this.lt(y)&&T.lt(y))return l(this.toNumber()*T.toNumber(),this.unsigned);var U=this.high>>>16,j=this.high&65535,q=this.low>>>16,K=this.low&65535,Y=T.high>>>16,te=T.high&65535,re=T.low>>>16,J=T.low&65535,ie=0,ae=0,oe=0,ue=0;return ue+=K*J,oe+=ue>>>16,ue&=65535,oe+=q*J,ae+=oe>>>16,oe&=65535,oe+=K*re,ae+=oe>>>16,oe&=65535,ae+=j*J,ie+=ae>>>16,ae&=65535,ae+=q*re,ie+=ae>>>16,ae&=65535,ae+=K*te,ie+=ae>>>16,ae&=65535,ie+=U*J+j*re+q*te+K*Y,ie&=65535,u(oe<<16|ue,ie<<16|ae,this.unsigned)},D.mul=D.multiply,D.divide=function(T){if(r(T)||(T=c(T)),T.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&T.low===-1&&T.high===-1)return this;var P=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,T.low,T.high);return u(P,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?w:x;var U,j,q;if(this.unsigned){if(T.unsigned||(T=T.toUnsigned()),T.gt(this))return w;if(T.gt(this.shru(1)))return N;q=w}else{if(this.eq(M)){if(T.eq(I)||T.eq(_))return M;if(T.eq(M))return I;var K=this.shr(1);return U=K.div(T).shl(1),U.eq(x)?T.isNegative()?I:_:(j=this.sub(T.mul(U)),q=U.add(j.div(T)),q)}else if(T.eq(M))return this.unsigned?w:x;if(this.isNegative())return T.isNegative()?this.neg().div(T.neg()):this.neg().div(T).neg();if(T.isNegative())return this.div(T.neg()).neg();q=x}for(j=this;j.gte(T);){U=Math.max(1,Math.floor(j.toNumber()/T.toNumber()));for(var Y=Math.ceil(Math.log(U)/Math.LN2),te=Y<=48?1:p(2,Y-48),re=l(U),J=re.mul(T);J.isNegative()||J.gt(j);)U-=te,re=l(U,this.unsigned),J=re.mul(T);re.isZero()&&(re=I),q=q.add(re),j=j.sub(J)}return q},D.div=D.divide,D.modulo=function(T){if(r(T)||(T=c(T)),n){var P=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,T.low,T.high);return u(P,n.get_high(),this.unsigned)}return this.sub(this.div(T).mul(T))},D.mod=D.modulo,D.rem=D.modulo,D.not=function(){return u(~this.low,~this.high,this.unsigned)},D.and=function(T){return r(T)||(T=c(T)),u(this.low&T.low,this.high&T.high,this.unsigned)},D.or=function(T){return r(T)||(T=c(T)),u(this.low|T.low,this.high|T.high,this.unsigned)},D.xor=function(T){return r(T)||(T=c(T)),u(this.low^T.low,this.high^T.high,this.unsigned)},D.shiftLeft=function(T){return r(T)&&(T=T.toInt()),(T&=63)===0?this:T<32?u(this.low<>>32-T,this.unsigned):u(0,this.low<>>T|this.high<<32-T,this.high>>T,this.unsigned):u(this.high>>T-32,this.high>=0?0:-1,this.unsigned)},D.shr=D.shiftRight,D.shiftRightUnsigned=function(T){if(r(T)&&(T=T.toInt()),T&=63,T===0)return this;var P=this.high;if(T<32){var U=this.low;return u(U>>>T|P<<32-T,P>>>T,this.unsigned)}else return T===32?u(P,0,this.unsigned):u(P>>>T-32,0,this.unsigned)},D.shru=D.shiftRightUnsigned,D.shr_u=D.shiftRightUnsigned,D.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},D.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},D.toBytes=function(T){return T?this.toBytesLE():this.toBytesBE()},D.toBytesLE=function(){var T=this.high,P=this.low;return[P&255,P>>>8&255,P>>>16&255,P>>>24,T&255,T>>>8&255,T>>>16&255,T>>>24]},D.toBytesBE=function(){var T=this.high,P=this.low;return[T>>>24,T>>>16&255,T>>>8&255,T&255,P>>>24,P>>>16&255,P>>>8&255,P&255]},a.fromBytes=function(T,P,U){return U?a.fromBytesLE(T,P):a.fromBytesBE(T,P)},a.fromBytesLE=function(T,P){return new a(T[0]|T[1]<<8|T[2]<<16|T[3]<<24,T[4]|T[5]<<8|T[6]<<16|T[7]<<24,P)},a.fromBytesBE=function(T,P){return new a(T[4]<<24|T[5]<<16|T[6]<<8|T[7],T[0]<<24|T[1]<<16|T[2]<<8|T[3],P)}}),HF=Bt(()=>{}),jF=Bt(()=>{}),qF=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>>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)}),KF=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>>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)}),XF=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>>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)}),YF=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;h0;--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)}),ZF=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,b,y=[],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>>15,m^=m<<4,m^=m>>>13,g>=0&&(b=b+1640531527|0,h=y[g&127]^=m+b,f=h==0?f+1:0);for(f>=128&&(y[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=y[f+34&127],h=y[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,y[f]=m^h;d.w=b,d.X=y,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)}),JF=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>>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)}),QF=Bt(()=>{}),eD=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,N,_){var $=[];N=N==!0?{entropy:!0}:N||{};var A=y(b(N.entropy?[I,w(a)]:I==null?x():I,3),$),M=new f($),D=function(){for(var T=M.g(i),P=u,U=0;T=d;)T/=2,P/=2,U>>>=1;return(T+U)/P};return D.int32=function(){return M.g(4)|0},D.quick=function(){return M.g(4)/4294967296},D.double=D,y(w(M.S),a),(N.pass||_||function(T,P,U,j){return j&&(j.S&&g(j,M),T.state=function(){return g(M,{})}),U?(r[l]=T,P):T})(D,A,"global"in N?N.global:this==r,N.state)}function f(I){var N,_=I.length,$=this,A=0,M=$.i=$.j=0,D=$.S=[];for(_||(I=[_++]);A{var n=qF(),a=KF(),r=XF(),s=YF(),i=ZF(),o=JF(),l=eD();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),eT=Bt(()=>{}),Hx=Bt(()=>{}),Yh=Bt(()=>{}),tD=Bt(()=>{}),nD=Bt(()=>{}),aD=Bt(()=>{}),rD=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 Ne.buffer!=xn&&Oa(Ne.buffer),jd}function i(){return Ne.buffer!=xn&&Oa(Ne.buffer),qd}function o(){return Ne.buffer!=xn&&Oa(Ne.buffer),Ap}function l(){return Ne.buffer!=xn&&Oa(Ne.buffer),Kd}function u(){return Ne.buffer!=xn&&Oa(Ne.buffer),Xd}function p(){return Ne.buffer!=xn&&Oa(Ne.buffer),Yd}function d(){return Ne.buffer!=xn&&Oa(Ne.buffer),Zd}var c=typeof r!="undefined"?r:{},h,m;c.ready=new Promise(function(S,F){h=S,m=F});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},c),b=[],y="./this.program",x=(S,F)=>{throw F},w=typeof window=="object",I=typeof importScripts=="function",N=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",_=c.ENVIRONMENT_IS_PTHREAD||!1,$="";function A(S){return c.locateFile?c.locateFile(S,$):$+S}var M,D,T,P;function U(S){S instanceof Bp||J("exiting due to exception: "+S)}var j,q,K;if(N){I?$=Yh().dirname($)+"/":$=__dirname+"/",K=()=>{q||(j=Hx(),q=Yh())},M=function(F,V){return K(),F=q.normalize(F),j.readFileSync(F,V?void 0:"utf8")},T=F=>{var V=M(F,!0);return V.buffer||(V=new Uint8Array(V)),V},D=(F,V,Z)=>{K(),F=q.normalize(F),j.readFile(F,function(pe,me){pe?Z(pe):V(me.buffer)})},process.argv.length>1&&(y=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),process.on("uncaughtException",function(F){if(!(F instanceof Bp))throw F}),process.on("unhandledRejection",function(F){throw F}),x=(F,V)=>{if(Bs())throw process.exitCode=F,V;U(V),process.exit(F)},c.inspect=function(){return"[Emscripten Module object]"};let S;try{S=tD()}catch(F){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),F}global.Worker=S.Worker}else(w||I)&&(I?$=self.location.href:typeof document!="undefined"&&document.currentScript&&($=document.currentScript.src),typeof a!="undefined"&&a&&($=a),$.indexOf("blob:")!==0?$=$.substr(0,$.replace(/[?#].*/,"").lastIndexOf("/")+1):$="",N||(M=S=>{var F=new XMLHttpRequest;return F.open("GET",S,!1),F.send(null),F.responseText},I&&(T=S=>{var F=new XMLHttpRequest;return F.open("GET",S,!1),F.responseType="arraybuffer",F.send(null),new Uint8Array(F.response)}),D=(S,F,V)=>{var Z=new XMLHttpRequest;Z.open("GET",S,!0),Z.responseType="arraybuffer",Z.onload=()=>{if(Z.status==200||Z.status==0&&Z.response){F(Z.response);return}V()},Z.onerror=V,Z.send(null)}),P=S=>document.title=S);N&&typeof performance=="undefined"&&(global.performance=nD().performance);var Y=console.log.bind(console),te=console.warn.bind(console);N&&(K(),Y=S=>j.writeSync(1,S+` `),te=S=>j.writeSync(2,S+` `));var re=c.print||Y,J=c.printErr||te;Object.assign(c,g),g=null,c.arguments&&(b=c.arguments),c.thisProgram&&(y=c.thisProgram),c.quit&&(x=c.quit);var ie=4;function ae(S){ae.shown||(ae.shown={}),ae.shown[S]||(ae.shown[S]=1,J(S))}function oe(S,F){if(typeof WebAssembly.Function=="function"){for(var V={i:"i32",j:"i64",f:"f32",d:"f64"},Z={parameters:[],results:F[0]=="v"?[]:[V[F[0]]]},pe=1;pe{Ee=S},Be=Atomics.load,je=Atomics.store,st=Atomics.compareExchange,nt;c.wasmBinary&&(nt=c.wasmBinary);var at=c.noExitRuntime||!0;typeof WebAssembly!="object"&&al("no native wasm support detected");var Ne,ft,dt=!1,yn;function Yt(S,F){S||al(F)}function Mn(S){var F=c["_"+S];return F}function Ut(S,F,V,Z,pe){var me={string:function(ua){var hl=0;if(ua!=null&&ua!==0){var Tk=(ua.length<<2)+1;hl=dl(Tk),zs(ua,hl,Tk)}return hl},array:function(ua){var hl=dl(ua.length);return Tr(ua,hl),hl}};function ve(ua){return F==="string"?oa(ua):F==="boolean"?Boolean(ua):ua}var Ce=Mn(S),Ct=[],Ba=0;if(Z)for(var Va=0;Va(V.buffer instanceof SharedArrayBuffer&&(V=new Uint8Array(V)),F.decode.call(F,V))}var Gt=typeof TextDecoder!="undefined"?new Pn("utf8"):void 0;function ia(S,F,V){for(var Z=F+V,pe=F;S[pe]&&!(pe>=Z);)++pe;if(pe-F>16&&S.subarray&&Gt)return Gt.decode(S.subarray(F,pe));for(var me="";F>10,56320|Ba&1023)}}return me}function oa(S,F){return S?ia(i(),S,F):""}function Kr(S,F,V,Z){if(!(Z>0))return 0;for(var pe=V,me=V+Z-1,ve=0;ve=55296&&Ce<=57343){var Ct=S.charCodeAt(++ve);Ce=65536+((Ce&1023)<<10)|Ct&1023}if(Ce<=127){if(V>=me)break;F[V++]=Ce}else if(Ce<=2047){if(V+1>=me)break;F[V++]=192|Ce>>6,F[V++]=128|Ce&63}else if(Ce<=65535){if(V+2>=me)break;F[V++]=224|Ce>>12,F[V++]=128|Ce>>6&63,F[V++]=128|Ce&63}else{if(V+3>=me)break;F[V++]=240|Ce>>18,F[V++]=128|Ce>>12&63,F[V++]=128|Ce>>6&63,F[V++]=128|Ce&63}}return F[V]=0,V-pe}function zs(S,F,V){return Kr(S,i(),F,V)}function Hd(S){for(var F=0,V=0;V=55296&&Z<=57343&&(Z=65536+((Z&1023)<<10)|S.charCodeAt(++V)&1023),Z<=127?++F:Z<=2047?F+=2:Z<=65535?F+=3:F+=4}return F}var Xr=typeof TextDecoder!="undefined"?new Pn("utf-16le"):void 0;function Tr(S,F){s().set(S,F)}function $p(S,F,V){for(var Z=0;Z>0]=S.charCodeAt(Z);V||(s()[F>>0]=0)}function tl(S,F){return S%F>0&&(S+=F-S%F),S}var xn,jd,qd,Ap,Kd,Xd,rk,Yd,Zd;_&&(xn=c.buffer);function Oa(S){xn=S,c.HEAP8=jd=new Int8Array(S),c.HEAP16=Ap=new Int16Array(S),c.HEAP32=Xd=new Int32Array(S),c.HEAPU8=qd=new Uint8Array(S),c.HEAPU16=Kd=new Uint16Array(S),c.HEAPU32=rk=new Uint32Array(S),c.HEAPF32=Yd=new Float32Array(S),c.HEAPF64=Zd=new Float64Array(S)}var Jd=c.INITIAL_MEMORY||16777216;if(_)Ne=c.wasmMemory,xn=c.buffer;else if(c.wasmMemory)Ne=c.wasmMemory;else if(Ne=new WebAssembly.Memory({initial:Jd/65536,maximum:32768,shared:!0}),!(Ne.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"),N&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Ne&&(xn=Ne.buffer),Jd=xn.byteLength,Oa(xn);var la,nl=[],Yr=[],Kg=[],Qd=[],Ws=!1,Xg=!1,eh=0;function Bs(){return at||eh>0}function vn(){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)sk(c.preRun.shift());rh(nl)}function Fp(){Ws=!0,!_&&rh(Yr)}function Yg(){_||(_e.terminateAllThreads(),Xg=!0)}function Zg(){if(!_){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)Dp(c.postRun.shift());rh(Qd)}}function sk(S){nl.unshift(S)}function ik(S){Yr.unshift(S)}function Dp(S){Qd.unshift(S)}var Zr=0,th=null,La=null;function Rp(S){Zr++,c.monitorRunDependencies&&c.monitorRunDependencies(Zr)}function ok(S){if(Zr--,c.monitorRunDependencies&&c.monitorRunDependencies(Zr),Zr==0&&(th!==null&&(clearInterval(th),th=null),La)){var F=La;La=null,F()}}c.preloadedImages={},c.preloadedAudios={};function al(S){_?postMessage({cmd:"onAbort",arg:S}):c.onAbort&&c.onAbort(S),S="Aborted("+S+")",J(S),dt=!0,yn=1,S+=". Build with -s ASSERTIONS=1 for more info.";var F=new WebAssembly.RuntimeError(S);throw m(F),F}var Jg="data:application/octet-stream;base64,";function Mp(S){return S.startsWith(Jg)}function nh(S){return S.startsWith("file://")}var wn;wn="tfjs-backend-wasm-threaded-simd.wasm",Mp(wn)||(wn=A(wn));function ah(S){try{if(S==wn&&nt)return new Uint8Array(nt);if(T)return T(S);throw"both async and sync fetching of the wasm failed"}catch(F){al(F)}}function rl(){if(!nt&&(w||I)){if(typeof fetch=="function"&&!nh(wn))return fetch(wn,{credentials:"same-origin"}).then(function(S){if(!S.ok)throw"failed to load wasm binary file at '"+wn+"'";return S.arrayBuffer()}).catch(function(){return ah(wn)});if(D)return new Promise(function(S,F){D(wn,function(V){S(new Uint8Array(V))},F)})}return Promise.resolve().then(function(){return ah(wn)})}function Qg(){var S={env:gh,wasi_snapshot_preview1:gh};function F(ve,Ce){var Ct=ve.exports;if(c.asm=Ct,ib(c.asm.emscripten_tls_init),la=c.asm.__indirect_function_table,ik(c.asm.__wasm_call_ctors),ft=Ce,!_){var Ba=_e.unusedWorkers.length;_e.unusedWorkers.forEach(function(Va){_e.loadWasmModuleToWorker(Va,function(){--Ba||ok("wasm-instantiate")})})}}_||Rp("wasm-instantiate");function V(ve){F(ve.instance,ve.module)}function Z(ve){return rl().then(function(Ce){return WebAssembly.instantiate(Ce,S)}).then(function(Ce){return Ce}).then(ve,function(Ce){J("failed to asynchronously prepare wasm: "+Ce),al(Ce)})}function pe(){return!nt&&typeof WebAssembly.instantiateStreaming=="function"&&!Mp(wn)&&!nh(wn)&&typeof fetch=="function"?fetch(wn,{credentials:"same-origin"}).then(function(ve){var Ce=WebAssembly.instantiateStreaming(ve,S);return Ce.then(V,function(Ct){return J("wasm streaming compile failed: "+Ct),J("falling back to ArrayBuffer instantiation"),Z(V)})}):Z(V)}if(c.instantiateWasm)try{var me=c.instantiateWasm(S,F);return me}catch(ve){return J("Module.instantiateWasm callback failed with error: "+ve),!1}return pe().catch(m),{}}var lk,uk,eb={};function rh(S){for(;S.length>0;){var F=S.shift();if(typeof F=="function"){F(c);continue}var V=F.func;typeof V=="number"?F.arg===void 0?il(V)():il(V)(F.arg):V(F.arg===void 0?null:F.arg)}}function sl(S){var F=Cy(),V=S();return wh(F),V}function zA(S){return S}function pk(S){var F=/\b_Z[\w\d_]+/g;return S.replace(F,function(V){var Z=V;return V===Z?V:Z+" ["+V+"]"})}function tb(S){u()[S>>2]=0;var F=_e.pthreads[S];delete _e.pthreads[S],F.worker.terminate(),Ny(S),_e.runningWorkers.splice(_e.runningWorkers.indexOf(F.worker),1),F.worker.pthread=void 0}function nb(S){var F=_e.pthreads[S];F.worker.postMessage({cmd:"cancel"})}function sh(S){var F=_e.pthreads[S];if(F){u()[S>>2]=0;var V=F.worker;_e.returnWorkerToPool(V)}}function ih(S){_F(S)}function ab(S){if(S instanceof Bp||S=="unwind")return yn;x(1,S)}var _e={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){_?_e.initWorker():_e.initMainThread()},initMainThread:function(){for(var S=8,F=0;F>2]=0;try{S()}finally{u()[Ik>>2]=1}},receiveObjectTransfer:function(S){},threadInit:function(){for(var S in _e.tlsInitFunctions)_e.tlsInitFunctions[S]()},loadWasmModuleToWorker:function(S,F){S.onmessage=V=>{var Z=V.data,pe=Z.cmd;if(S.pthread&&(_e.currentProxiedOperationCallerThread=S.pthread.threadInfoStruct),Z.targetThread&&Z.targetThread!=vh()){var me=_e.pthreads[Z.targetThread];me?me.worker.postMessage(Z,Z.transferList):J('Internal error! Worker sent a message "'+pe+'" to target pthread '+Z.targetThread+", but that thread no longer exists!"),_e.currentProxiedOperationCallerThread=void 0;return}pe==="processQueuedMainThreadWork"?yk():pe==="spawnThread"?lh(Z):pe==="cleanupThread"?sh(Z.thread):pe==="killThread"?tb(Z.thread):pe==="cancelThread"?nb(Z.thread):pe==="loaded"?(S.loaded=!0,F&&F(S),S.runPthread&&(S.runPthread(),delete S.runPthread)):pe==="print"?re("Thread "+Z.threadId+": "+Z.text):pe==="printErr"?J("Thread "+Z.threadId+": "+Z.text):pe==="alert"?alert("Thread "+Z.threadId+": "+Z.text):Z.target==="setimmediate"?S.postMessage(Z):pe==="onAbort"?c.onAbort&&c.onAbort(Z.arg):J("worker sent an unknown command "+pe),_e.currentProxiedOperationCallerThread=void 0},S.onerror=V=>{var Z="worker sent an error!";throw J(Z+" "+V.filename+":"+V.lineno+": "+V.message),V},N&&(S.on("message",function(V){S.onmessage({data:V})}),S.on("error",function(V){S.onerror(V)}),S.on("detachedExit",function(){})),S.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||a,wasmMemory:Ne,wasmModule:ft})},allocateUnusedWorker:function(){var S=A("tfjs-backend-wasm-threaded-simd.worker.js");_e.unusedWorkers.push(new Worker(S))},getNewWorker:function(){return _e.unusedWorkers.length==0&&(_e.allocateUnusedWorker(),_e.loadWasmModuleToWorker(_e.unusedWorkers[0])),_e.unusedWorkers.pop()}};function rb(){var S=vh(),F=u()[S+44>>2],V=u()[S+48>>2],Z=F-V;kk(F,Z),wh(F)}c.establishStackSpace=rb;function oh(S){if(_)return Gs(1,0,S);try{ih(S)}catch(F){ab(F)}}var Vs=[];function il(S){var F=Vs[S];return F||(S>=Vs.length&&(Vs.length=S+1),Vs[S]=F=la.get(S)),F}function sb(S,F){return il(S)(F)}c.invokeEntryPoint=sb;function ck(){var S=new Error;if(!S.stack){try{throw new Error}catch(F){S=F}if(!S.stack)return"(no stack trace available)"}return S.stack.toString()}function ib(S,F,V){_e.tlsInitFunctions.push(S)}function dk(S,F){la.set(S,F),Vs[S]=F}var Us;N?Us=()=>{var S=process.hrtime();return S[0]*1e3+S[1]/1e6}:_?Us=()=>performance.now()-c.__performance_now_clock_drift:Us=()=>performance.now();var ob=!0;function lb(S){return u()[bk()>>2]=S,S}function ub(S,F){var V;if(S===0)V=Date.now();else if((S===1||S===4)&&ob)V=Us();else return lb(28),-1;return u()[F>>2]=V/1e3|0,u()[F+4>>2]=V%1e3*1e3*1e3|0,0}function pb(S,F){return ub(S,F)}function cb(S){xk(S,!I,1,!w),_e.threadInit()}function db(S){_?postMessage({cmd:"cleanupThread",thread:S}):sh(S)}function lh(S){var F=_e.getNewWorker();if(!F)return 6;_e.runningWorkers.push(F);var V=_e.pthreads[S.pthread_ptr]={worker:F,threadInfoStruct:S.pthread_ptr};F.pthread=V;var Z={cmd:"run",start_routine:S.startRoutine,arg:S.arg,threadInfoStruct:S.pthread_ptr};return F.runPthread=()=>{Z.time=performance.now(),F.postMessage(Z,S.transferList)},F.loaded&&(F.runPthread(),delete F.runPthread),0}function hb(S,F,V,Z){if(typeof SharedArrayBuffer=="undefined")return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var pe=[],me=0;if(_&&(pe.length===0||me))return vk(687865856,S,F,V,Z);if(me)return me;var ve={startRoutine:V,pthread_ptr:S,arg:Z,transferList:pe};return _?(ve.cmd="spawnThread",postMessage(ve,pe),0):lh(ve)}function mb(){return 2097152}function fb(S,F){if(S==F)postMessage({cmd:"processQueuedMainThreadWork"});else if(_)postMessage({targetThread:S,cmd:"processThreadQueue"});else{var V=_e.pthreads[S],Z=V&&V.worker;if(!Z)return;Z.postMessage({cmd:"processThreadQueue"})}return 1}function gb(){al("")}function bb(){N||I||ae("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function uh(){return 2147483648}function yb(S,F,V){i().copyWithin(S,F,F+V)}function xb(){return N?aD().cpus().length:navigator.hardwareConcurrency}function Gs(S,F){var V=arguments.length-2,Z=arguments;return sl(function(){for(var pe=V,me=dl(pe*8),ve=me>>3,Ce=0;Ce>3,pe=0;pe>>16),Oa(Ne.buffer),1}catch(F){}}function kb(S){var F=i().length;if(S=S>>>0,S<=F)return!1;var V=uh();if(S>V)return!1;for(var Z=1;Z<=4;Z*=2){var pe=F*(1+.2/Z);pe=Math.min(pe,S+100663296);var me=Math.min(V,tl(Math.max(S,pe),65536)),ve=wb(me);if(ve)return!0}return!1}var Ue={inEventHandler:0,removeAllEventListeners:function(){for(var S=Ue.eventHandlers.length-1;S>=0;--S)Ue._removeHandler(S);Ue.eventHandlers=[],Ue.deferredCalls=[]},registerRemoveEventListeners:function(){Ue.removeEventListenersRegistered||(Kg.push(Ue.removeAllEventListeners),Ue.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(S,F,V){function Z(ve,Ce){if(ve.length!=Ce.length)return!1;for(var Ct in ve)if(ve[Ct]!=Ce[Ct])return!1;return!0}for(var pe in Ue.deferredCalls){var me=Ue.deferredCalls[pe];if(me.targetFunction==S&&Z(me.argsList,V))return}Ue.deferredCalls.push({targetFunction:S,precedence:F,argsList:V}),Ue.deferredCalls.sort(function(ve,Ce){return ve.precedence>2]=V,u()[me+4>>2]=Z,u()[me+8>>2]=pe,Sy(S,637534208,F,Z,me)})},getTargetThreadForEventCallback:function(S){switch(S){case 1:return 0;case 2:return _e.currentProxiedOperationCallerThread;default:return S}},getNodeNameForTarget:function(S){return S?S==window?"#window":S==screen?"#screen":S&&S.nodeName?S.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function Ib(S){var F=Hd(S)+1,V=Ty(F);return zs(S,V,F),V}function Tb(S,F,V,Z){sl(function(){var pe=dl(12),me=0;F&&(me=Ib(F)),u()[pe>>2]=me,u()[pe+4>>2]=V,u()[pe+8>>2]=Z,Sy(S,657457152,0,me,pe)})}function Sb(S,F,V,Z){F=F?oa(F):"",Tb(S,F,V,Z)}function Nb(S){return S>2?oa(S):S}var Cb=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function _b(S){S=Nb(S);var F=Cb[S]||(typeof document!="undefined"?document.querySelector(S):void 0);return F}function Op(S){return _b(S)}function ph(S,F,V){var Z=Op(S);if(!Z)return-4;if(Z.canvasSharedPtr&&(u()[Z.canvasSharedPtr>>2]=F,u()[Z.canvasSharedPtr+4>>2]=V),Z.offscreenCanvas||!Z.controlTransferredOffscreen){Z.offscreenCanvas&&(Z=Z.offscreenCanvas);var pe=!1;if(Z.GLctxObject&&Z.GLctxObject.GLctx){var me=Z.GLctxObject.GLctx.getParameter(2978);pe=me[0]===0&&me[1]===0&&me[2]===Z.width&&me[3]===Z.height}Z.width=F,Z.height=V,pe&&Z.GLctxObject.GLctx.viewport(0,0,F,V)}else if(Z.canvasSharedPtr){var ve=u()[Z.canvasSharedPtr+8>>2];return Sb(ve,S,F,V),1}else return-4;return 0}function ch(S,F,V){return _?Gs(2,1,S,F,V):ph(S,F,V)}function Eb(S,F,V){var Z=Op(S);return Z?ph(S,F,V):ch(S,F,V)}function $b(){throw"unwind"}function Ab(S){var F=S.getExtension("ANGLE_instanced_arrays");if(F)return S.vertexAttribDivisor=function(V,Z){F.vertexAttribDivisorANGLE(V,Z)},S.drawArraysInstanced=function(V,Z,pe,me){F.drawArraysInstancedANGLE(V,Z,pe,me)},S.drawElementsInstanced=function(V,Z,pe,me,ve){F.drawElementsInstancedANGLE(V,Z,pe,me,ve)},1}function Fb(S){var F=S.getExtension("OES_vertex_array_object");if(F)return S.createVertexArray=function(){return F.createVertexArrayOES()},S.deleteVertexArray=function(V){F.deleteVertexArrayOES(V)},S.bindVertexArray=function(V){F.bindVertexArrayOES(V)},S.isVertexArray=function(V){return F.isVertexArrayOES(V)},1}function Db(S){var F=S.getExtension("WEBGL_draw_buffers");if(F)return S.drawBuffers=function(V,Z){F.drawBuffersWEBGL(V,Z)},1}function Rb(S){return!!(S.multiDrawWebgl=S.getExtension("WEBGL_multi_draw"))}var Nt={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(S){Nt.lastError||(Nt.lastError=S)},getNewId:function(S){for(var F=Nt.counter++,V=S.length;V>2]:-1;pe+=oa(u()[V+me*4>>2],ve<0?void 0:ve)}return pe},createContext:function(S,F){S.getContextSafariWebGL2Fixed||(S.getContextSafariWebGL2Fixed=S.getContext,S.getContext=function(pe,me){var ve=S.getContextSafariWebGL2Fixed(pe,me);return pe=="webgl"==ve instanceof WebGLRenderingContext?ve:null});var V=S.getContext("webgl",F);if(!V)return 0;var Z=Nt.registerContext(V,F);return Z},registerContext:function(S,F){var V=Ty(8);u()[V+4>>2]=vh();var Z={handle:V,attributes:F,version:F.majorVersion,GLctx:S};return S.canvas&&(S.canvas.GLctxObject=Z),Nt.contexts[V]=Z,(typeof F.enableExtensionsByDefault=="undefined"||F.enableExtensionsByDefault)&&Nt.initExtensions(Z),V},makeContextCurrent:function(S){return Nt.currentContext=Nt.contexts[S],c.ctx=fh=Nt.currentContext&&Nt.currentContext.GLctx,!(S&&!fh)},getContext:function(S){return Nt.contexts[S]},deleteContext:function(S){Nt.currentContext===Nt.contexts[S]&&(Nt.currentContext=null),typeof Ue=="object"&&Ue.removeAllHandlersOnTarget(Nt.contexts[S].GLctx.canvas),Nt.contexts[S]&&Nt.contexts[S].GLctx.canvas&&(Nt.contexts[S].GLctx.canvas.GLctxObject=void 0),gk(Nt.contexts[S].handle),Nt.contexts[S]=null},initExtensions:function(S){if(S||(S=Nt.currentContext),!S.initExtensionsDone){S.initExtensionsDone=!0;var F=S.GLctx;Ab(F),Fb(F),Db(F),F.disjointTimerQueryExt=F.getExtension("EXT_disjoint_timer_query"),Rb(F);var V=F.getSupportedExtensions()||[];V.forEach(function(Z){!Z.includes("lose_context")&&!Z.includes("debug")&&F.getExtension(Z)})}}},Mb=["default","low-power","high-performance"];function Pb(S,F){var V=F>>2,Z=u()[V+6],pe={alpha:!!u()[V+0],depth:!!u()[V+1],stencil:!!u()[V+2],antialias:!!u()[V+3],premultipliedAlpha:!!u()[V+4],preserveDrawingBuffer:!!u()[V+5],powerPreference:Mb[Z],failIfMajorPerformanceCaveat:!!u()[V+7],majorVersion:u()[V+8],minorVersion:u()[V+9],enableExtensionsByDefault:u()[V+10],explicitSwapControl:u()[V+11],proxyContextToMainThread:u()[V+12],renderViaOffscreenBackBuffer:u()[V+13]},me=Op(S);if(!me||pe.explicitSwapControl)return 0;var ve=Nt.createContext(me,pe);return ve}function Ob(S,F){return Pb(S,F)}var ol={mappings:{},buffers:[null,[],[]],printChar:function(S,F){var V=ol.buffers[S];F===0||F===10?((S===1?re:J)(ia(V,0)),V.length=0):V.push(F)},varargs:void 0,get:function(){ol.varargs+=4;var S=u()[ol.varargs-4>>2];return S},getStr:function(S){var F=oa(S);return F},get64:function(S,F){return S}};function dh(S){return _?Gs(3,1,S):0}function hh(S,F,V,Z,pe){if(_)return Gs(4,1,S,F,V,Z,pe)}function mh(S,F,V,Z){if(_)return Gs(5,1,S,F,V,Z);for(var pe=0,me=0;me>2],Ce=u()[F+4>>2];F+=8;for(var Ct=0;Ct>2]=pe,0}function Lb(S){De(S)}_e.init();var fh,zb=[null,oh,ch,dh,hh,mh],hk=!1,gh={__clock_gettime:pb,__emscripten_init_main_thread_js:cb,__emscripten_thread_cleanup:db,__pthread_create_js:hb,_emscripten_default_pthread_stack_size:mb,_emscripten_notify_thread_queue:fb,abort:gb,emscripten_check_blocking_allowed:bb,emscripten_get_heap_max:uh,emscripten_get_now:Us,emscripten_memcpy_big:yb,emscripten_num_logical_cores:xb,emscripten_receive_on_main_thread_js:vb,emscripten_resize_heap:kb,emscripten_set_canvas_element_size:Eb,emscripten_unwind_to_js_event_loop:$b,emscripten_webgl_create_context:Ob,exit:ih,fd_close:dh,fd_seek:hh,fd_write:mh,memory:Ne||c.wasmMemory,setTempRet0:Lb},mk=Qg(),Wb=c.___wasm_call_ctors=function(){return(Wb=c.___wasm_call_ctors=c.asm.__wasm_call_ctors).apply(null,arguments)},Bb=c._init=function(){return(Bb=c._init=c.asm.init).apply(null,arguments)},Vb=c._init_with_threads_count=function(){return(Vb=c._init_with_threads_count=c.asm.init_with_threads_count).apply(null,arguments)},Ub=c._get_threads_count=function(){return(Ub=c._get_threads_count=c.asm.get_threads_count).apply(null,arguments)},Gb=c._register_tensor=function(){return(Gb=c._register_tensor=c.asm.register_tensor).apply(null,arguments)},Hb=c._dispose_data=function(){return(Hb=c._dispose_data=c.asm.dispose_data).apply(null,arguments)},jb=c._dispose=function(){return(jb=c._dispose=c.asm.dispose).apply(null,arguments)},qb=c._Abs=function(){return(qb=c._Abs=c.asm.Abs).apply(null,arguments)},Kb=c._Add=function(){return(Kb=c._Add=c.asm.Add).apply(null,arguments)},Xb=c._AddN=function(){return(Xb=c._AddN=c.asm.AddN).apply(null,arguments)},Yb=c._All=function(){return(Yb=c._All=c.asm.All).apply(null,arguments)},Zb=c._Any=function(){return(Zb=c._Any=c.asm.Any).apply(null,arguments)},Jb=c._ArgMax=function(){return(Jb=c._ArgMax=c.asm.ArgMax).apply(null,arguments)},Qb=c._AvgPool=function(){return(Qb=c._AvgPool=c.asm.AvgPool).apply(null,arguments)},ey=c._BatchMatMul=function(){return(ey=c._BatchMatMul=c.asm.BatchMatMul).apply(null,arguments)},ty=c._Ceil=function(){return(ty=c._Ceil=c.asm.Ceil).apply(null,arguments)},ny=c._ClipByValue=function(){return(ny=c._ClipByValue=c.asm.ClipByValue).apply(null,arguments)},ay=c._Conv2D=function(){return(ay=c._Conv2D=c.asm.Conv2D).apply(null,arguments)},ry=c._Conv2DBackpropInput=function(){return(ry=c._Conv2DBackpropInput=c.asm.Conv2DBackpropInput).apply(null,arguments)},sy=c._Cos=function(){return(sy=c._Cos=c.asm.Cos).apply(null,arguments)},iy=c._Cosh=function(){return(iy=c._Cosh=c.asm.Cosh).apply(null,arguments)},oy=c._CropAndResize=function(){return(oy=c._CropAndResize=c.asm.CropAndResize).apply(null,arguments)},ly=c._Cumprod=function(){return(ly=c._Cumprod=c.asm.Cumprod).apply(null,arguments)},uy=c._Cumsum=function(){return(uy=c._Cumsum=c.asm.Cumsum).apply(null,arguments)},py=c._DepthToSpace=function(){return(py=c._DepthToSpace=c.asm.DepthToSpace).apply(null,arguments)},cy=c._DepthwiseConv2dNative=function(){return(cy=c._DepthwiseConv2dNative=c.asm.DepthwiseConv2dNative).apply(null,arguments)},dy=c._Elu=function(){return(dy=c._Elu=c.asm.Elu).apply(null,arguments)},hy=c._Equal=function(){return(hy=c._Equal=c.asm.Equal).apply(null,arguments)},my=c._Exp=function(){return(my=c._Exp=c.asm.Exp).apply(null,arguments)},fy=c._FlipLeftRight=function(){return(fy=c._FlipLeftRight=c.asm.FlipLeftRight).apply(null,arguments)},gy=c._Floor=function(){return(gy=c._Floor=c.asm.Floor).apply(null,arguments)},by=c._FloorDiv=function(){return(by=c._FloorDiv=c.asm.FloorDiv).apply(null,arguments)},yy=c._FusedBatchNorm=function(){return(yy=c._FusedBatchNorm=c.asm.FusedBatchNorm).apply(null,arguments)},xy=c._FusedConv2D=function(){return(xy=c._FusedConv2D=c.asm.FusedConv2D).apply(null,arguments)},bh=c._FusedDepthwiseConv2D=function(){return(bh=c._FusedDepthwiseConv2D=c.asm.FusedDepthwiseConv2D).apply(null,arguments)},yh=c._Gather=function(){return(yh=c._Gather=c.asm.Gather).apply(null,arguments)},Lp=c._GatherNd=function(){return(Lp=c._GatherNd=c.asm.GatherNd).apply(null,arguments)},vy=c._Greater=function(){return(vy=c._Greater=c.asm.Greater).apply(null,arguments)},wy=c._GreaterEqual=function(){return(wy=c._GreaterEqual=c.asm.GreaterEqual).apply(null,arguments)},ll=c._LeakyRelu=function(){return(ll=c._LeakyRelu=c.asm.LeakyRelu).apply(null,arguments)},zp=c._Less=function(){return(zp=c._Less=c.asm.Less).apply(null,arguments)},Wp=c._LessEqual=function(){return(Wp=c._LessEqual=c.asm.LessEqual).apply(null,arguments)},fk=c._Log=function(){return(fk=c._Log=c.asm.Log).apply(null,arguments)},ul=c._LogicalAnd=function(){return(ul=c._LogicalAnd=c.asm.LogicalAnd).apply(null,arguments)},pl=c._LogicalNot=function(){return(pl=c._LogicalNot=c.asm.LogicalNot).apply(null,arguments)},ky=c._LogicalOr=function(){return(ky=c._LogicalOr=c.asm.LogicalOr).apply(null,arguments)},G=c._LogicalXor=function(){return(G=c._LogicalXor=c.asm.LogicalXor).apply(null,arguments)},ee=c._Max=function(){return(ee=c._Max=c.asm.Max).apply(null,arguments)},de=c._MaxPool=function(){return(de=c._MaxPool=c.asm.MaxPool).apply(null,arguments)},Te=c._Maximum=function(){return(Te=c._Maximum=c.asm.Maximum).apply(null,arguments)},Je=c._Mean=function(){return(Je=c._Mean=c.asm.Mean).apply(null,arguments)},rt=c._Min=function(){return(rt=c._Min=c.asm.Min).apply(null,arguments)},Ge=c._Minimum=function(){return(Ge=c._Minimum=c.asm.Minimum).apply(null,arguments)},Ve=c._MirrorPad=function(){return(Ve=c._MirrorPad=c.asm.MirrorPad).apply(null,arguments)},Ot=c._Multiply=function(){return(Ot=c._Multiply=c.asm.Multiply).apply(null,arguments)},za=c._Neg=function(){return(za=c._Neg=c.asm.Neg).apply(null,arguments)},Wa=c._NonMaxSuppressionV3=function(){return(Wa=c._NonMaxSuppressionV3=c.asm.NonMaxSuppressionV3).apply(null,arguments)},cl=c._NonMaxSuppressionV4=function(){return(cl=c._NonMaxSuppressionV4=c.asm.NonMaxSuppressionV4).apply(null,arguments)},Hs=c._NonMaxSuppressionV5=function(){return(Hs=c._NonMaxSuppressionV5=c.asm.NonMaxSuppressionV5).apply(null,arguments)},Iy=c._NotEqual=function(){return(Iy=c._NotEqual=c.asm.NotEqual).apply(null,arguments)},On=c._OneHot=function(){return(On=c._OneHot=c.asm.OneHot).apply(null,arguments)},Jr=c._PadV2=function(){return(Jr=c._PadV2=c.asm.PadV2).apply(null,arguments)},xh=c._Pow=function(){return(xh=c._Pow=c.asm.Pow).apply(null,arguments)},WA=c._Prelu=function(){return(WA=c._Prelu=c.asm.Prelu).apply(null,arguments)},BA=c._Prod=function(){return(BA=c._Prod=c.asm.Prod).apply(null,arguments)},VA=c._RealDiv=function(){return(VA=c._RealDiv=c.asm.RealDiv).apply(null,arguments)},UA=c._Relu=function(){return(UA=c._Relu=c.asm.Relu).apply(null,arguments)},GA=c._Relu6=function(){return(GA=c._Relu6=c.asm.Relu6).apply(null,arguments)},HA=c._ResizeBilinear=function(){return(HA=c._ResizeBilinear=c.asm.ResizeBilinear).apply(null,arguments)},jA=c._ResizeNearestNeighbor=function(){return(jA=c._ResizeNearestNeighbor=c.asm.ResizeNearestNeighbor).apply(null,arguments)},qA=c._Reverse=function(){return(qA=c._Reverse=c.asm.Reverse).apply(null,arguments)},KA=c._RotateWithOffset=function(){return(KA=c._RotateWithOffset=c.asm.RotateWithOffset).apply(null,arguments)},XA=c._Round=function(){return(XA=c._Round=c.asm.Round).apply(null,arguments)},YA=c._Rsqrt=function(){return(YA=c._Rsqrt=c.asm.Rsqrt).apply(null,arguments)},ZA=c._ScatterNd=function(){return(ZA=c._ScatterNd=c.asm.ScatterNd).apply(null,arguments)},JA=c._SelectV2=function(){return(JA=c._SelectV2=c.asm.SelectV2).apply(null,arguments)},QA=c._Sigmoid=function(){return(QA=c._Sigmoid=c.asm.Sigmoid).apply(null,arguments)},eF=c._Sin=function(){return(eF=c._Sin=c.asm.Sin).apply(null,arguments)},tF=c._Softmax=function(){return(tF=c._Softmax=c.asm.Softmax).apply(null,arguments)},nF=c._SparseFillEmptyRows=function(){return(nF=c._SparseFillEmptyRows=c.asm.SparseFillEmptyRows).apply(null,arguments)},aF=c._SparseReshape=function(){return(aF=c._SparseReshape=c.asm.SparseReshape).apply(null,arguments)},rF=c._SparseSegmentReduction=function(){return(rF=c._SparseSegmentReduction=c.asm.SparseSegmentReduction).apply(null,arguments)},sF=c._Sqrt=function(){return(sF=c._Sqrt=c.asm.Sqrt).apply(null,arguments)},iF=c._Square=function(){return(iF=c._Square=c.asm.Square).apply(null,arguments)},oF=c._SquaredDifference=function(){return(oF=c._SquaredDifference=c.asm.SquaredDifference).apply(null,arguments)},lF=c._Step=function(){return(lF=c._Step=c.asm.Step).apply(null,arguments)},uF=c._StridedSlice=function(){return(uF=c._StridedSlice=c.asm.StridedSlice).apply(null,arguments)},pF=c._Sub=function(){return(pF=c._Sub=c.asm.Sub).apply(null,arguments)},cF=c._Sum=function(){return(cF=c._Sum=c.asm.Sum).apply(null,arguments)},dF=c._Tan=function(){return(dF=c._Tan=c.asm.Tan).apply(null,arguments)},hF=c._Tanh=function(){return(hF=c._Tanh=c.asm.Tanh).apply(null,arguments)},mF=c._Tile=function(){return(mF=c._Tile=c.asm.Tile).apply(null,arguments)},fF=c._TopK=function(){return(fF=c._TopK=c.asm.TopK).apply(null,arguments)},gF=c._Transform=function(){return(gF=c._Transform=c.asm.Transform).apply(null,arguments)},bF=c._Transpose=function(){return(bF=c._Transpose=c.asm.Transpose).apply(null,arguments)},yF=c.__FusedMatMul=function(){return(yF=c.__FusedMatMul=c.asm._FusedMatMul).apply(null,arguments)},Ty=c._malloc=function(){return(Ty=c._malloc=c.asm.malloc).apply(null,arguments)},gk=c._free=function(){return(gk=c._free=c.asm.free).apply(null,arguments)},xF=c._emscripten_tls_init=function(){return(xF=c._emscripten_tls_init=c.asm.emscripten_tls_init).apply(null,arguments)},bk=c.___errno_location=function(){return(bk=c.___errno_location=c.asm.__errno_location).apply(null,arguments)},vh=c._pthread_self=function(){return(vh=c._pthread_self=c.asm.pthread_self).apply(null,arguments)},yk=c._emscripten_main_thread_process_queued_calls=function(){return(yk=c._emscripten_main_thread_process_queued_calls=c.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},vF=c.__emscripten_thread_crashed=function(){return(vF=c.__emscripten_thread_crashed=c.asm._emscripten_thread_crashed).apply(null,arguments)},xk=c.__emscripten_thread_init=function(){return(xk=c.__emscripten_thread_init=c.asm._emscripten_thread_init).apply(null,arguments)},wF=c._emscripten_current_thread_process_queued_calls=function(){return(wF=c._emscripten_current_thread_process_queued_calls=c.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},kF=c._emscripten_main_browser_thread_id=function(){return(kF=c._emscripten_main_browser_thread_id=c.asm.emscripten_main_browser_thread_id).apply(null,arguments)},IF=c._emscripten_sync_run_in_main_thread_2=function(){return(IF=c._emscripten_sync_run_in_main_thread_2=c.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},vk=c._emscripten_sync_run_in_main_thread_4=function(){return(vk=c._emscripten_sync_run_in_main_thread_4=c.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},wk=c._emscripten_run_in_main_runtime_thread_js=function(){return(wk=c._emscripten_run_in_main_runtime_thread_js=c.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},Sy=c._emscripten_dispatch_to_thread_=function(){return(Sy=c._emscripten_dispatch_to_thread_=c.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},Ny=c.__emscripten_thread_free_data=function(){return(Ny=c.__emscripten_thread_free_data=c.asm._emscripten_thread_free_data).apply(null,arguments)},TF=c.__emscripten_thread_exit=function(){return(TF=c.__emscripten_thread_exit=c.asm._emscripten_thread_exit).apply(null,arguments)},SF=c._memalign=function(){return(SF=c._memalign=c.asm.memalign).apply(null,arguments)},kk=c._emscripten_stack_set_limits=function(){return(kk=c._emscripten_stack_set_limits=c.asm.emscripten_stack_set_limits).apply(null,arguments)},Cy=c.stackSave=function(){return(Cy=c.stackSave=c.asm.stackSave).apply(null,arguments)},wh=c.stackRestore=function(){return(wh=c.stackRestore=c.asm.stackRestore).apply(null,arguments)},dl=c.stackAlloc=function(){return(dl=c.stackAlloc=c.asm.stackAlloc).apply(null,arguments)},NF=c.dynCall_iijjiiii=function(){return(NF=c.dynCall_iijjiiii=c.asm.dynCall_iijjiiii).apply(null,arguments)},CF=c.dynCall_jiji=function(){return(CF=c.dynCall_jiji=c.asm.dynCall_jiji).apply(null,arguments)},Ik=c.__emscripten_allow_main_runtime_queued_calls=21672;c.cwrap=Zt,c.keepRuntimeAlive=Bs,c.PThread=_e,c.PThread=_e,c.wasmMemory=Ne,c.ExitStatus=Bp;var kh;function Bp(S){this.name="ExitStatus",this.message="Program terminated with exit("+S+")",this.status=S}La=function S(){kh||_y(),kh||(La=S)};function _y(S){if(S=S||b,Zr>0)return;if(_){h(c),Fp(),postMessage({cmd:"loaded"});return}if(vn(),Zr>0)return;function F(){kh||(kh=!0,c.calledRun=!0,!dt&&(Fp(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),Zg()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),F()},1)):F()}c.run=_y;function _F(S,F){if(yn=S,!F&&_)throw oh(S),"unwind";Bs()||Yg(),EF(S)}function EF(S){yn=S,Bs()||(_e.terminateAllThreads(),c.onExit&&c.onExit(S),dt=!0),x(S,new Bp(S))}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();_y();var Ih;f&&(Ih={uncaughtException:process.listeners("uncaughtException").filter(function(S){return!f.uncaughtException.indexOf(S)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(S){return!f.unhandledRejection.indexOf(S)>-1})});var Th;if(typeof WasmBackendModule!="undefined")Th=WasmBackendModule;else if(typeof r!="undefined")Th=r;else throw new Error("Could not find wasm module in post.js");if(Ih){var $F=Th._dispose;Th._dispose=function(){$F(),Ih.uncaughtException.forEach(function(S){process.removeListener("uncaughtException",S)}),Ih.unhandledRejection.forEach(function(S){process.removeListener("unhandledRejection",S)})}}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)}),sD=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",function(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"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}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.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;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).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}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==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`}),iD=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(G,ee){i=G,o=ee});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=(G,ee)=>{throw ee},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function b(G){return s.locateFile?s.locateFile(G,g):g+G}var y,x,w,I;function N(G){G instanceof zp||D("exiting due to exception: "+G)}var _,$,A;f?(m?g=Yh().dirname(g)+"/":g=__dirname+"/",A=()=>{$||(_=Hx(),$=Yh())},y=function(G,ee){return A(),G=$.normalize(G),_.readFileSync(G,ee?void 0:"utf8")},w=G=>{var ee=y(G,!0);return ee.buffer||(ee=new Uint8Array(ee)),ee},x=(G,ee,de)=>{A(),G=$.normalize(G),_.readFile(G,function(Te,Je){Te?de(Te):ee(Je.buffer)})},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof zp))throw G}),process.on("unhandledRejection",function(G){throw G}),c=(G,ee)=>{if(Ap())throw process.exitCode=G,ee;N(ee),process.exit(G)},s.inspect=function(){return"[Emscripten Module object]"}):(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="",y=G=>{var ee=new XMLHttpRequest;return ee.open("GET",G,!1),ee.send(null),ee.responseText},m&&(w=G=>{var ee=new XMLHttpRequest;return ee.open("GET",G,!1),ee.responseType="arraybuffer",ee.send(null),new Uint8Array(ee.response)}),x=(G,ee,de)=>{var Te=new XMLHttpRequest;Te.open("GET",G,!0),Te.responseType="arraybuffer",Te.onload=()=>{if(Te.status==200||Te.status==0&&Te.response){ee(Te.response);return}de()},Te.onerror=de,Te.send(null)},I=G=>document.title=G);var M=s.print||console.log.bind(console),D=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 T=4;function P(G){P.shown||(P.shown={}),P.shown[G]||(P.shown[G]=1,D(G))}function U(G,ee){if(typeof WebAssembly.Function=="function"){for(var de={i:"i32",j:"i64",f:"f32",d:"f64"},Te={parameters:[],results:ee[0]=="v"?[]:[de[ee[0]]]},Je=1;Je{te=G},J;s.wasmBinary&&(J=s.wasmBinary);var ie=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Ws("no native wasm support detected");var ae,oe=!1,ue;function we(G,ee){G||Ws(ee)}function be(G){var ee=s["_"+G];return ee}function Ie(G,ee,de,Te,Je){var rt={string:function(On){var Jr=0;if(On!=null&&On!==0){var xh=(On.length<<2)+1;Jr=Lp(xh),at(On,Jr,xh)}return Jr},array:function(On){var Jr=Lp(On.length);return dt(On,Jr),Jr}};function Ge(On){return ee==="string"?st(On):ee==="boolean"?Boolean(On):On}var Ve=be(G),Ot=[],za=0;if(Te)for(var Wa=0;Wa=Te);)++Je;if(Je-ee>16&&G.subarray&&Be)return Be.decode(G.subarray(ee,Je));for(var rt="";ee>10,56320|za&1023)}}return rt}function st(G,ee){return G?je(Zt,G,ee):""}function nt(G,ee,de,Te){if(!(Te>0))return 0;for(var Je=de,rt=de+Te-1,Ge=0;Ge=55296&&Ve<=57343){var Ot=G.charCodeAt(++Ge);Ve=65536+((Ve&1023)<<10)|Ot&1023}if(Ve<=127){if(de>=rt)break;ee[de++]=Ve}else if(Ve<=2047){if(de+1>=rt)break;ee[de++]=192|Ve>>6,ee[de++]=128|Ve&63}else if(Ve<=65535){if(de+2>=rt)break;ee[de++]=224|Ve>>12,ee[de++]=128|Ve>>6&63,ee[de++]=128|Ve&63}else{if(de+3>=rt)break;ee[de++]=240|Ve>>18,ee[de++]=128|Ve>>12&63,ee[de++]=128|Ve>>6&63,ee[de++]=128|Ve&63}}return ee[de]=0,de-Je}function at(G,ee,de){return nt(G,Zt,ee,de)}function Ne(G){for(var ee=0,de=0;de=55296&&Te<=57343&&(Te=65536+((Te&1023)<<10)|G.charCodeAt(++de)&1023),Te<=127?++ee:Te<=2047?ee+=2:Te<=65535?ee+=3:ee+=4}return ee}var ft=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function dt(G,ee){Ut.set(G,ee)}function yn(G,ee,de){for(var Te=0;Te>0]=G.charCodeAt(Te);de||(Ut[ee>>0]=0)}function Yt(G,ee){return G%ee>0&&(G+=ee-G%ee),G}var Mn,Ut,Zt,Pa,Pn,Gt,ia,oa,Kr;function zs(G){Mn=G,s.HEAP8=Ut=new Int8Array(G),s.HEAP16=Pa=new Int16Array(G),s.HEAP32=Gt=new Int32Array(G),s.HEAPU8=Zt=new Uint8Array(G),s.HEAPU16=Pn=new Uint16Array(G),s.HEAPU32=ia=new Uint32Array(G),s.HEAPF32=oa=new Float32Array(G),s.HEAPF64=Kr=new Float64Array(G)}var Hd=s.INITIAL_MEMORY||16777216,Xr,Tr=[],$p=[],tl=[],xn=!1,jd=!1,qd=0;function Ap(){return ie||qd>0}function Kd(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Zd(s.preRun.shift());Dp(Tr)}function Xd(){xn=!0,Dp($p)}function rk(){jd=!0}function Yd(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Jd(s.postRun.shift());Dp(tl)}function Zd(G){Tr.unshift(G)}function Oa(G){$p.unshift(G)}function Jd(G){tl.unshift(G)}var la=0,nl=null,Yr=null;function Kg(G){la++,s.monitorRunDependencies&&s.monitorRunDependencies(la)}function Qd(G){if(la--,s.monitorRunDependencies&&s.monitorRunDependencies(la),la==0&&(nl!==null&&(clearInterval(nl),nl=null),Yr)){var ee=Yr;Yr=null,ee()}}s.preloadedImages={},s.preloadedAudios={};function Ws(G){s.onAbort&&s.onAbort(G),G="Aborted("+G+")",D(G),oe=!0,ue=1,G+=". Build with -s ASSERTIONS=1 for more info.";var ee=new WebAssembly.RuntimeError(G);throw o(ee),ee}var Xg="data:application/octet-stream;base64,";function eh(G){return G.startsWith(Xg)}function Bs(G){return G.startsWith("file://")}var vn;vn="tfjs-backend-wasm.wasm",eh(vn)||(vn=b(vn));function Fp(G){try{if(G==vn&&J)return new Uint8Array(J);if(w)return w(G);throw"both async and sync fetching of the wasm failed"}catch(ee){Ws(ee)}}function Yg(){if(!J&&(h||m)){if(typeof fetch=="function"&&!Bs(vn))return fetch(vn,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+vn+"'";return G.arrayBuffer()}).catch(function(){return Fp(vn)});if(x)return new Promise(function(G,ee){x(vn,function(de){G(new Uint8Array(de))},ee)})}return Promise.resolve().then(function(){return Fp(vn)})}function Zg(){var G={env:sl,wasi_snapshot_preview1:sl};function ee(Ge,Ve){var Ot=Ge.exports;s.asm=Ot,ae=s.asm.memory,zs(ae.buffer),Xr=s.asm.__indirect_function_table,Oa(s.asm.__wasm_call_ctors),Qd("wasm-instantiate")}Kg("wasm-instantiate");function de(Ge){ee(Ge.instance)}function Te(Ge){return Yg().then(function(Ve){return WebAssembly.instantiate(Ve,G)}).then(function(Ve){return Ve}).then(Ge,function(Ve){D("failed to asynchronously prepare wasm: "+Ve),Ws(Ve)})}function Je(){return!J&&typeof WebAssembly.instantiateStreaming=="function"&&!eh(vn)&&!Bs(vn)&&typeof fetch=="function"?fetch(vn,{credentials:"same-origin"}).then(function(Ge){var Ve=WebAssembly.instantiateStreaming(Ge,G);return Ve.then(de,function(Ot){return D("wasm streaming compile failed: "+Ot),D("falling back to ArrayBuffer instantiation"),Te(de)})}):Te(de)}if(s.instantiateWasm)try{var rt=s.instantiateWasm(G,ee);return rt}catch(Ge){return D("Module.instantiateWasm callback failed with error: "+Ge),!1}return Je().catch(o),{}}var sk,ik;function Dp(G){for(;G.length>0;){var ee=G.shift();if(typeof ee=="function"){ee(s);continue}var de=ee.func;typeof de=="number"?ee.arg===void 0?Rp(de)():Rp(de)(ee.arg):de(ee.arg===void 0?null:ee.arg)}}function Zr(G){return G}function th(G){var ee=/\b_Z[\w\d_]+/g;return G.replace(ee,function(de){var Te=de;return de===Te?de:Te+" ["+de+"]"})}var La=[];function Rp(G){var ee=La[G];return ee||(G>=La.length&&(La.length=G+1),La[G]=ee=Xr.get(G)),ee}function ok(){var G=new Error;if(!G.stack){try{throw new Error}catch(ee){G=ee}if(!G.stack)return"(no stack trace available)"}return G.stack.toString()}function al(G,ee){Xr.set(G,ee),La[G]=ee}function Jg(){Ws("")}function Mp(){return 2147483648}function nh(G,ee,de){Zt.copyWithin(G,ee,ee+de)}function wn(G){try{return ae.grow(G-Mn.byteLength+65535>>>16),zs(ae.buffer),1}catch(ee){}}function ah(G){var ee=Zt.length;G=G>>>0;var de=Mp();if(G>de)return!1;for(var Te=1;Te<=4;Te*=2){var Je=ee*(1+.2/Te);Je=Math.min(Je,G+100663296);var rt=Math.min(de,Yt(Math.max(G,Je),65536)),Ge=wn(rt);if(Ge)return!0}return!1}var rl={mappings:{},buffers:[null,[],[]],printChar:function(G,ee){var de=rl.buffers[G];ee===0||ee===10?((G===1?M:D)(je(de,0)),de.length=0):de.push(ee)},varargs:void 0,get:function(){rl.varargs+=4;var G=Gt[rl.varargs-4>>2];return G},getStr:function(G){var ee=st(G);return ee},get64:function(G,ee){return G}};function Qg(G){return 0}function lk(G,ee,de,Te,Je){}function uk(G,ee,de,Te){for(var Je=0,rt=0;rt>2],Ve=Gt[ee+4>>2];ee+=8;for(var Ot=0;Ot>2]=Je,0}function eb(G){re(G)}var rh=!1,sl={abort:Jg,emscripten_get_heap_max:Mp,emscripten_memcpy_big:nh,emscripten_resize_heap:ah,fd_close:Qg,fd_seek:lk,fd_write:uk,setTempRet0:eb},zA=Zg(),pk=s.___wasm_call_ctors=function(){return(pk=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},tb=s._init=function(){return(tb=s._init=s.asm.init).apply(null,arguments)},nb=s._init_with_threads_count=function(){return(nb=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},sh=s._get_threads_count=function(){return(sh=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},ih=s._register_tensor=function(){return(ih=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},ab=s._dispose_data=function(){return(ab=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},_e=s._dispose=function(){return(_e=s._dispose=s.asm.dispose).apply(null,arguments)},rb=s._Abs=function(){return(rb=s._Abs=s.asm.Abs).apply(null,arguments)},oh=s._Add=function(){return(oh=s._Add=s.asm.Add).apply(null,arguments)},Vs=s._AddN=function(){return(Vs=s._AddN=s.asm.AddN).apply(null,arguments)},il=s._All=function(){return(il=s._All=s.asm.All).apply(null,arguments)},sb=s._Any=function(){return(sb=s._Any=s.asm.Any).apply(null,arguments)},ck=s._ArgMax=function(){return(ck=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},ib=s._AvgPool=function(){return(ib=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},dk=s._BatchMatMul=function(){return(dk=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Us=s._Ceil=function(){return(Us=s._Ceil=s.asm.Ceil).apply(null,arguments)},ob=s._ClipByValue=function(){return(ob=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},lb=s._Conv2D=function(){return(lb=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},ub=s._Conv2DBackpropInput=function(){return(ub=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},pb=s._Cos=function(){return(pb=s._Cos=s.asm.Cos).apply(null,arguments)},cb=s._Cosh=function(){return(cb=s._Cosh=s.asm.Cosh).apply(null,arguments)},db=s._CropAndResize=function(){return(db=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},lh=s._Cumprod=function(){return(lh=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},hb=s._Cumsum=function(){return(hb=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},mb=s._DepthToSpace=function(){return(mb=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},fb=s._DepthwiseConv2dNative=function(){return(fb=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},gb=s._Elu=function(){return(gb=s._Elu=s.asm.Elu).apply(null,arguments)},bb=s._Equal=function(){return(bb=s._Equal=s.asm.Equal).apply(null,arguments)},uh=s._Exp=function(){return(uh=s._Exp=s.asm.Exp).apply(null,arguments)},yb=s._FlipLeftRight=function(){return(yb=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},xb=s._Floor=function(){return(xb=s._Floor=s.asm.Floor).apply(null,arguments)},Gs=s._FloorDiv=function(){return(Gs=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},Pp=s._FusedBatchNorm=function(){return(Pp=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},vb=s._FusedConv2D=function(){return(vb=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},wb=s._FusedDepthwiseConv2D=function(){return(wb=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},kb=s._Gather=function(){return(kb=s._Gather=s.asm.Gather).apply(null,arguments)},Ue=s._GatherNd=function(){return(Ue=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},Ib=s._Greater=function(){return(Ib=s._Greater=s.asm.Greater).apply(null,arguments)},Tb=s._GreaterEqual=function(){return(Tb=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},Sb=s._LeakyRelu=function(){return(Sb=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},Nb=s._Less=function(){return(Nb=s._Less=s.asm.Less).apply(null,arguments)},Cb=s._LessEqual=function(){return(Cb=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},_b=s._Log=function(){return(_b=s._Log=s.asm.Log).apply(null,arguments)},Op=s._LogicalAnd=function(){return(Op=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},ph=s._LogicalNot=function(){return(ph=s._LogicalNot=s.asm.LogicalNot).apply(null,arguments)},ch=s._LogicalOr=function(){return(ch=s._LogicalOr=s.asm.LogicalOr).apply(null,arguments)},Eb=s._LogicalXor=function(){return(Eb=s._LogicalXor=s.asm.LogicalXor).apply(null,arguments)},$b=s._Max=function(){return($b=s._Max=s.asm.Max).apply(null,arguments)},Ab=s._MaxPool=function(){return(Ab=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},Fb=s._Maximum=function(){return(Fb=s._Maximum=s.asm.Maximum).apply(null,arguments)},Db=s._Mean=function(){return(Db=s._Mean=s.asm.Mean).apply(null,arguments)},Rb=s._Min=function(){return(Rb=s._Min=s.asm.Min).apply(null,arguments)},Nt=s._Minimum=function(){return(Nt=s._Minimum=s.asm.Minimum).apply(null,arguments)},Mb=s._MirrorPad=function(){return(Mb=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},Pb=s._Multiply=function(){return(Pb=s._Multiply=s.asm.Multiply).apply(null,arguments)},Ob=s._Neg=function(){return(Ob=s._Neg=s.asm.Neg).apply(null,arguments)},ol=s._NonMaxSuppressionV3=function(){return(ol=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},dh=s._NonMaxSuppressionV4=function(){return(dh=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},hh=s._NonMaxSuppressionV5=function(){return(hh=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},mh=s._NotEqual=function(){return(mh=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Lb=s._OneHot=function(){return(Lb=s._OneHot=s.asm.OneHot).apply(null,arguments)},fh=s._PadV2=function(){return(fh=s._PadV2=s.asm.PadV2).apply(null,arguments)},zb=s._Pow=function(){return(zb=s._Pow=s.asm.Pow).apply(null,arguments)},hk=s._Prelu=function(){return(hk=s._Prelu=s.asm.Prelu).apply(null,arguments)},gh=s._Prod=function(){return(gh=s._Prod=s.asm.Prod).apply(null,arguments)},mk=s._RealDiv=function(){return(mk=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},Wb=s._Relu=function(){return(Wb=s._Relu=s.asm.Relu).apply(null,arguments)},Bb=s._Relu6=function(){return(Bb=s._Relu6=s.asm.Relu6).apply(null,arguments)},Vb=s._ResizeBilinear=function(){return(Vb=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},Ub=s._ResizeNearestNeighbor=function(){return(Ub=s._ResizeNearestNeighbor=s.asm.ResizeNearestNeighbor).apply(null,arguments)},Gb=s._Reverse=function(){return(Gb=s._Reverse=s.asm.Reverse).apply(null,arguments)},Hb=s._RotateWithOffset=function(){return(Hb=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},jb=s._Round=function(){return(jb=s._Round=s.asm.Round).apply(null,arguments)},qb=s._Rsqrt=function(){return(qb=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Kb=s._ScatterNd=function(){return(Kb=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},Xb=s._SelectV2=function(){return(Xb=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},Yb=s._Sigmoid=function(){return(Yb=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},Zb=s._Sin=function(){return(Zb=s._Sin=s.asm.Sin).apply(null,arguments)},Jb=s._Softmax=function(){return(Jb=s._Softmax=s.asm.Softmax).apply(null,arguments)},Qb=s._SparseFillEmptyRows=function(){return(Qb=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},ey=s._SparseReshape=function(){return(ey=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},ty=s._SparseSegmentReduction=function(){return(ty=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},ny=s._Sqrt=function(){return(ny=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},ay=s._Square=function(){return(ay=s._Square=s.asm.Square).apply(null,arguments)},ry=s._SquaredDifference=function(){return(ry=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},sy=s._Step=function(){return(sy=s._Step=s.asm.Step).apply(null,arguments)},iy=s._StridedSlice=function(){return(iy=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},oy=s._Sub=function(){return(oy=s._Sub=s.asm.Sub).apply(null,arguments)},ly=s._Sum=function(){return(ly=s._Sum=s.asm.Sum).apply(null,arguments)},uy=s._Tan=function(){return(uy=s._Tan=s.asm.Tan).apply(null,arguments)},py=s._Tanh=function(){return(py=s._Tanh=s.asm.Tanh).apply(null,arguments)},cy=s._Tile=function(){return(cy=s._Tile=s.asm.Tile).apply(null,arguments)},dy=s._TopK=function(){return(dy=s._TopK=s.asm.TopK).apply(null,arguments)},hy=s._Transform=function(){return(hy=s._Transform=s.asm.Transform).apply(null,arguments)},my=s._Transpose=function(){return(my=s._Transpose=s.asm.Transpose).apply(null,arguments)},fy=s.__FusedMatMul=function(){return(fy=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},gy=s._malloc=function(){return(gy=s._malloc=s.asm.malloc).apply(null,arguments)},by=s._free=function(){return(by=s._free=s.asm.free).apply(null,arguments)},yy=s.___errno_location=function(){return(yy=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},xy=s._emscripten_main_thread_process_queued_calls=function(){return(xy=s._emscripten_main_thread_process_queued_calls=s.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},bh=s.stackSave=function(){return(bh=s.stackSave=s.asm.stackSave).apply(null,arguments)},yh=s.stackRestore=function(){return(yh=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},Lp=s.stackAlloc=function(){return(Lp=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},vy=s.dynCall_iijjiiii=function(){return(vy=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},wy=s.dynCall_jiji=function(){return(wy=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Ee;var ll;function zp(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}Yr=function G(){ll||Wp(),ll||(Yr=G)};function Wp(G){if(G=G||p,la>0||(Kd(),la>0))return;function ee(){ll||(ll=!0,s.calledRun=!0,!oe&&(Xd(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),Yd()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),ee()},1)):ee()}s.run=Wp;function fk(G){ue=G,Ap()||(s.onExit&&s.onExit(G),oe=!0),c(G,new zp(G))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();Wp();var ul;l&&(ul={uncaughtException:process.listeners("uncaughtException").filter(function(G){return!l.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(G){return!l.unhandledRejection.indexOf(G)>-1})});var pl;if(typeof r!="undefined")pl=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")pl=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(ul){var ky=pl._dispose;pl._dispose=function(){ky(),ul.uncaughtException.forEach(function(G){process.removeListener("uncaughtException",G)}),ul.unhandledRejection.forEach(function(G){process.removeListener("unhandledRejection",G)})}}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)}),Em=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}},Tc=class{refCount(e){return pa("refCount")}incRef(e){return pa("incRef")}timerAvailable(){return!0}time(e){return pa("time")}read(e){return pa("read")}readSync(e){return pa("readSync")}readToGPU(e,t){return pa("readToGPU")}numDataIds(){return pa("numDataIds")}disposeData(e,t){return pa("disposeData")}write(e,t,n){return pa("write")}move(e,t,n,a,r){return pa("move")}memory(){return pa("memory")}floatPrecision(){return pa("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return pa("dispose")}};function pa(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 tT(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,Zh(e,t,n)}function oD(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--,Zh(e,n,a),Zh(t,n,a)}function oc(e,t,n){return Math.max(e,Math.min(t,n))}function lD(e){return e%2===0?e:e+1}function Zh(e,t,n){let a=e[t];e[t]=e[n],e[n]=a}function uD(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function Ii(e){R(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function oi(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||hn(e)&&!n)for(let a=0;a0,n){return new Promise((a,r)=>{let s=0,i=()=>{if(e()){a();return}s++;let o=t(s);if(n!=null&&s>=n){r();return}setTimeout(i,o)};i()})}function bD(e,t){let n=1,a=-1;for(let s=0;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 Aa(e,t){let n=t.length;return e=e==null?t.map((a,r)=>r):[].concat(e),R(e.every(a=>a>=-n&&a`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),R(e.every(a=>Tl(a)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(a=>a<0?n+a:a)}function nT(e,t){let n=[],a=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:Aa(t,e).sort(),i=0;for(let o=0;oo)&&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 aT(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 rT(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 sT(e,t){for(let n=0;nt+=n.length),t}function ns(e){return typeof e=="string"||e instanceof String}function lT(e){return typeof e=="boolean"}function uT(e){return typeof e=="number"}function $m(e){return Array.isArray(e)?$m(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":uT(e)?"float32":ns(e)?"string":lT(e)?"bool":"float32"}function ls(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Jh(e,t){for(let n=t;n=0;--a)n[a]=n[a+1]*e[a+1];return n}function pT(e,t,n,a=!1){let r=new Array;if(t.length===1){let s=t[0]*(a?2:1);for(let i=0;il*u)*(a?2:1);for(let l=0;lr*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 pT(0,e,t,n)}function jx(e,t){let n=Am(e,t);for(let a=0;aa*r,1);if(t==null||t==="float32")return vl(e,new Float32Array(n));if(t==="int32")return vl(e,new Int32Array(n));if(t==="bool")return vl(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function qx(e){e.forEach(t=>{R(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function vD(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{let[n,a]=t.split(":");this.urlFlags[n]=TD(n,a)})}};function kD(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...a)=>(ID(t,a[0],a[1]),a.join("="))),t}function ID(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function TD(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 X(){return Xx}var Xx=null;function SD(e){Xx=e}var $y;function dT(){if($y==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");$y=e}return $y}function ND(){let e=dT();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function Yx(e,t){let n=ND();if(n.has(e))return n.get(e);{let a=t();return n.set(e,a),n.get(e)}}var Ul="Abs",Gl="Acos",Hl="Acosh",xs="Add",Ti="AddN",jl="All",ql="Any",Si="ArgMax",Sc="ArgMin",Kl="Asin",Xl="Asinh",Yl="Atan",Zl="Atanh",Jl="Atan2",Ni="AvgPool",Fm="AvgPoolGrad",Nc="AvgPool3D",Dm="AvgPool3DGrad",Ci="BatchMatMul",Ql="BatchToSpaceND",Rm="Bincount",hT="BroadcastTo",Mm="BroadcastArgs",_i="Cast",Ei="Ceil",vs="ClipByValue",Pm="Complex",Cc="ComplexAbs",eu="Concat",$i="Conv2D",Om="Conv2DBackpropFilter",Ai="Conv2DBackpropInput",_c="Conv3D",Lm="Conv3DBackpropFilterV2",zm="Conv3DBackpropInputV2",Fi="Cos",Di="Cosh",tu="Cumprod",Ri="Cumsum",nu="CropAndResize",Wm="DenseBincount",au="DepthToSpace",Mi="DepthwiseConv2dNative",Bm="DepthwiseConv2dNativeBackpropFilter",Vm="DepthwiseConv2dNativeBackpropInput",Um="Diag",Ec="Dilation2D",Qh="Dilation2DBackpropInput",em="Dilation2DBackpropFilter",Pi="RealDiv",Gm="Einsum",Oi="Elu",Hm="EluGrad",ru="Erf",su="Equal",Li="Exp",iu="ExpandDims",ou="Expm1",jm="FFT",$c="Fill",lu="FlipLeftRight",zi="Floor",Wi="FloorDiv",Bi="FusedBatchNorm",uu="GatherV2",pu="GatherNd",cu="Greater",Vi="GreaterEqual",Ui="Identity",qm="IFFT",Km="Imag",du="IsFinite",hu="IsInf",mu="IsNan",Gi="LeakyRelu",fu="Less",gu="LessEqual",Xm="LinSpace",Hi="Log",bu="Log1p",yu="LogicalAnd",xu="LogicalNot",vu="LogicalOr",mT="LogicalXor",fT="LogSoftmax",CD="LowerBound",Ac="LRN",Ym="LRNGrad",ji="Max",qi="Maximum",Ki="MaxPool",Zm="MaxPoolGrad",Fc="MaxPool3D",Jm="MaxPool3DGrad",Qm="MaxPoolWithArgmax",Xi="Mean",Yi="Min",Zi="Minimum",Ji="MirrorPad",wu="Mod",ef="Multinomial",Qi="Multiply",ku="Neg",Iu="NotEqual",Tu="NonMaxSuppressionV3",Su="NonMaxSuppressionV4",Nu="NonMaxSuppressionV5",Cu="OnesLike",eo="OneHot",_u="Pack",to="PadV2",_D="Pool",no="Pow",ao="Prelu",ro="Prod",tf="RaggedTensorToTensor",Dc="Range",nf="Real",Eu="Reciprocal",so="Relu",$u="Reshape",io="ResizeNearestNeighbor",af="ResizeNearestNeighborGrad",oo="ResizeBilinear",rf="ResizeBilinearGrad",lo="Relu6",uo="Reverse",po="Round",co="Rsqrt",Au="ScatterNd",sf="SearchSorted",Fu="Select",Du="Selu",Ru="Slice",ho="Sin",Mu="Sinh",Pu="Sign",mo="Sigmoid",Ou="Softplus",fo="Sqrt",go="Sum",Lu="SpaceToBatchND",zu="SplitV",bo="Softmax",Rc="SparseFillEmptyRows",Wu="SparseReshape",Mc="SparseSegmentMean",Pc="SparseSegmentSum",of="SparseToDense",yo="SquaredDifference",Oc="Square",Bu="StridedSlice",Lc="StringNGrams",zc="StringSplit",Wc="StringToHashBucketFast",xo="Sub",vo="Tan",wo="Tanh",ws="Tile",Vu="TopK",Uu="Transform",Ar="Transpose",lf="Unique",Gu="Unpack",Bc="UnsortedSegmentSum",ED="UpperBound",Hu="ZerosLike",ks="Step",tm="FromPixels",ju="RotateWithOffset",li="_FusedMatMul",ui="FusedConv2D",pi="FusedDepthwiseConv2D";function ts(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(...e)}function $D(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.log(...e)}var Sl=Yx("kernelRegistry",()=>new Map),lc=Yx("gradRegistry",()=>new Map);function nm(e,t){let n=Zx(e,t);return Sl.get(n)}function Hy(e){return lc.get(e)}function am(e){let t=Sl.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 Vc(e){let{kernelName:t,backendName:n}=e,a=Zx(t,n);Sl.has(a)&&ts(`The kernel '${t}' for backend '${n}' is already registered`),Sl.set(a,e)}function gT(e){let{kernelName:t}=e;lc.has(t)&&X().getBool("DEBUG")&&ts(`Overriding the gradient for '${t}'`),lc.set(t,e)}function AD(e,t){let n=Zx(e,t);if(!Sl.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Sl.delete(n)}function FD(e){if(!lc.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);lc.delete(e)}function DD(e,t){am(e).forEach(n=>{let a=Object.assign({},n,{backendName:t});Vc(a)})}function Zx(e,t){return`${t}_${e}`}var v={};Fe(v,{arraysEqual:()=>ys,assert:()=>R,assertNonNegativeIntegerDimensions:()=>qx,assertNonNull:()=>Ii,assertShapesMatch:()=>_n,bytesFromStringArray:()=>oT,bytesPerElement:()=>Gy,checkConversionForErrors:()=>sT,clamp:()=>oc,computeStrides:()=>Vl,createScalarValue:()=>zD,createShuffledIndices:()=>fD,decodeString:()=>rm,distSquared:()=>cD,encodeString:()=>Gc,fetch:()=>BD,fingerPrint64:()=>LD,flatten:()=>oi,getArrayFromDType:()=>rT,getTypedArrayFromDType:()=>aT,hasEncodingLoss:()=>yD,hexToLong:()=>Uc,indexToLoc:()=>wD,inferDtype:()=>$m,inferFromImplicitShape:()=>bD,isBoolean:()=>lT,isFunction:()=>ls,isInt:()=>Tl,isNumber:()=>uT,isPromise:()=>Kx,isScalarShape:()=>dD,isString:()=>ns,isTypedArray:()=>hn,isValidDtype:()=>iT,locToIndex:()=>vD,makeOnesTypedArray:()=>jx,makeZerosNestedTypedArray:()=>xD,makeZerosTypedArray:()=>Am,nearestDivisor:()=>Jh,nearestLargerEven:()=>lD,now:()=>uc,parseAxisParam:()=>Aa,randUniform:()=>pD,repeatedTry:()=>gD,rightPad:()=>ac,shuffle:()=>tT,shuffleCombo:()=>oD,sizeFromShape:()=>bt,sizeToSquarishShape:()=>mD,squeezeShape:()=>nT,sum:()=>uD,swap:()=>Zh,tanh:()=>hD,toNestedArray:()=>vl,toTypedArray:()=>uf});var Nk=bs(GF()),Ys=Nk.default||Nk;function Uc(e){return Ys.fromString(e,!0,16)}var bT=Uc("c3a5c85c97cb3127"),Ks=Uc("b492b66fbe98f273"),kn=Uc("9ae16a3b2f90404f");function jy(e){return e.xor(e.shru(47))}function yT(e,t,n){let a=e.slice(t,t+n);return Ys.fromBytes(Array.from(a),!0,!0)}function gt(e,t){return yT(e,t,8)}function Ck(e,t){return yT(e,t,4)}function Jt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function ss(e,t,n=Uc("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 RD(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 Ch(e,t,n,a){return RD(gt(e,t),gt(e,t+8),gt(e,t+16),gt(e,t+24),n,a)}function MD(e,t=e.length){if(t>=8){let n=kn.add(t*2),a=gt(e,0).add(kn),r=gt(e,t-8),s=Jt(r,37).mul(n).add(a),i=Jt(a,25).add(r).mul(n);return ss(s,i,n)}if(t>=4){let n=kn.add(t*2),a=Ck(e,0);return ss(a.shl(3).add(t),Ck(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 jy(kn.mul(s).xor(bT.mul(i))).mul(kn)}return kn}function PD(e,t=e.length){let n=kn.add(t*2),a=gt(e,0).mul(Ks),r=gt(e,8),s=gt(e,t-8).mul(n),i=gt(e,t-16).mul(kn);return ss(Jt(a.add(r),43).add(Jt(s,30)).add(i),a.add(Jt(r.add(kn),18)).add(s),n)}function OD(e,t=e.length){let n=kn.add(t*2),a=gt(e,0).mul(kn),r=gt(e,8),s=gt(e,t-8).mul(n),i=gt(e,t-16).mul(kn),o=Jt(a.add(r),43).add(Jt(s,30)).add(i),l=ss(o,a.add(Jt(r.add(kn),18)).add(s),n),u=gt(e,16).mul(n),p=gt(e,24),d=o.add(gt(e,t-32)).mul(n),c=l.add(gt(e,t-24)).mul(n);return ss(Jt(u.add(p),43).add(Jt(d,30)).add(c),u.add(Jt(p.add(a),18)).add(d),n)}function LD(e,t=e.length){let n=Ys.fromNumber(81,!0);if(t<=32)return t<=16?MD(e,t):PD(e,t);if(t<=64)return OD(e,t);let a=n,r=n.mul(Ks).add(113),s=jy(r.mul(kn).add(113)).mul(kn),i=[Ys.UZERO,Ys.UZERO],o=[Ys.UZERO,Ys.UZERO];a=a.mul(kn).add(gt(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(gt(e,l+8)),37).mul(Ks),r=Jt(r.add(i[1]).add(gt(e,l+48)),42).mul(Ks),a=a.xor(o[1]),r=r.add(i[0]).add(gt(e,l+40)),s=Jt(s.add(o[0]),33).mul(Ks),i=Ch(e,l,i[1].mul(Ks),a.add(o[0])),o=Ch(e,l+32,s.add(o[1]),r.add(gt(e,l+16))),[s,a]=[a,s],l+=64;while(l!==u);let d=Ks.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(gt(e,l+8)),37).mul(d),r=Jt(r.add(i[1]).add(gt(e,l+48)),42).mul(d),a=a.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(gt(e,l+40))),s=Jt(s.add(o[0]),33).mul(d),i=Ch(e,l,i[1].mul(d),a.add(o[0])),o=Ch(e,l+32,s.add(o[1]),r.add(gt(e,l+16))),[s,a]=[a,s],ss(ss(i[0],o[0],d).add(jy(r).mul(bT)).add(s),ss(i[1],o[1],d).add(a),d)}function zD(e,t){return t==="string"?Gc(e):uf([e],t)}function WD(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function uf(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=oi(e)),X().getBool("DEBUG")&&sT(e,t),WD(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{a=n()},s,i=uc();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of a)o.dataSync();s=Promise.resolve({kernelMs:uc()-i})}if(X().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o{UD(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 UD(e,t,n){if(t!=="float32")return!1;for(let a=0;a0?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 HD(e,t,n){let a={},r={};for(let l=0;la[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=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(!ys(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 _k=20,Up=3,Ay=7;function qD(e,t,n,a){let r=Vl(t),s=KD(e,t,n,r),i=t.length,o=Wh(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 KD(e,t,n,a){let r=bt(t),s=a[a.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Kp(e):e;if(o>1)for(let u=0;u_k){let g=Up*i,b=Array.from(e.slice(0,g)),y=Array.from(e.slice((o-Up)*i,o*i));return n==="complex64"&&(b=Kp(b),y=Kp(y)),["["+b.map((x,w)=>qp(x,r[w],n)).join(", ")+", ..., "+y.map((x,w)=>qp(x,r[o-Up+w],n)).join(", ")+"]"]}let f=n==="complex64"?Kp(e):Array.from(e);return["["+f.map((g,b)=>qp(g,r[b],n)).join(", ")+"]"]}let u=t.slice(1),p=a.slice(1),d=a[0]*i,c=[];if(o>_k){for(let f=0;f`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||rT(t,this.size),this.strides=Vl(e)}set(e,...t){t.length===0&&(t=[0]),R(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;arm(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(),Ua().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Ua().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>rm(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 Ua().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Ua().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return bl.print(this,e)}clone(){return this.throwIfDisposed(),bl.clone(this)}toString(e=!1){let t=this.dataSync();return qD(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),bl.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Ua().makeVariable(this,e,t,n)}};Object.defineProperty($e,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function ne(){return Yx("Tensor",()=>$e)}ne();var us=class extends $e{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(!ys(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Ua().disposeTensor(this),this.dataId=e.dataId,Ua().incRef(this,null)}dispose(){Ua().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(us,Symbol.hasInstance,{value:e=>e instanceof $e&&e.assign!=null&&e.assign instanceof Function});var qa={};Fe(qa,{assertTypesMatch:()=>vT,getTensorsInContainer:()=>Jx,isTensorInList:()=>eR,makeTypesMatch:()=>$t});var qy;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(qy||(qy={}));var Ky;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Ky||(Ky={}));var Xy;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(Xy||(Xy={}));var Yy;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Yy||(Yy={}));var Zy;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Zy||(Zy={}));var QD={float32:Yy,int32:Ky,bool:Xy,complex64:Zy};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 QD[e][t]}function pf(e){return ma(e,"int32")}function $t(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 vT(e,t){R(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function eR(e,t){return t.some(n=>n.id===e.id)}function Jx(e){let t=[];return wT(e,t,new Set),t}function wT(e,t,n){if(e==null)return;if(e instanceof $e){t.push(e);return}if(!tR(e))return;let a=e;for(let r in a){let s=a[r];n.has(s)||(n.add(s),wT(s,t,n))}}function tR(e){return Array.isArray(e)||typeof e=="object"}function Fy(e){return e.kernelName!=null}var Ek=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()}},pc=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new Ek}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.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){am(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 Tc)&&typeof n.then=="function"){let a=++this.pendingBackendInitId,r=n.then(s=>a(athis.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;tthis.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 pc.nextTensorId++}nextVariableId(){return pc.nextVariableId++}clone(e){let t=L.runKernel(Ui,{x:e}),n={x:e},a=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return L.runKernel(_i,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,nm(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=Fy(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(Fy(e)){let{kernelName:h,inputs:m,attrs:f}=e;this.backendName==null&&this.backend;let g=nm(h,this.backendName);R(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let b=this.backend.numDataIds();o=g.kernelFunc({inputs:m,attrs:f,backend:this.backend});let y=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,b,y);let x=y.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=Fy(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=Hy(e);if(a!=null){let r=a.inputsToSave||[],s=a.outputsToSave||[],i;a.saveAllInputs?(R(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"&&ns(e[0])&&(r=e.map(o=>Gc(o)));let s=a.write(r,t,n),i=new $e(t,n,s,this.nextTensorId());if(this.trackTensor(i,a),n==="string"){let o=this.state.tensorInfo.get(s),l=oT(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 $e(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 us(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*Gy(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 us||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*Gy(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=Hy(e);o!=null&&(a=o.gradFunc),a!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let d=n[p],c=Am(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=Jx(e),n=new Set(t.map(r=>r.id));for(let r=0;r{!r.kept&&r.scopeId===a.id&&this.track(r)})}gradients(e,t,n,a=!1){if(R(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));R(r instanceof $e,()=>"The result y returned by f() must be a tensor.");let s=HD(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?nR(r.shape):n,jD(i,s,l=>this.tidy(l),aR);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 R(ls(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{R(t.every(i=>i instanceof $e),()=>"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),R(n.value instanceof $e,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),R(ls(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];R(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(...)."),R(u.every(d=>d instanceof $e),()=>"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=uc(),n=await this.backend.time(e);return n.wallMs=uc()-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 Ek;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}};pc.nextTensorId=0;pc.nextVariableId=0;function nR(e){let t=jx(bt(e),"float32");return L.makeTensor(t,e,"float32")}function kT(){let e=dT();if(e._tfengine==null){let t=new cT(e);e._tfengine=new pc(t)}return SD(e._tfengine.ENV),YD(()=>e._tfengine),e._tfengine}var L=kT();function aR(e,t){let n={a:e,b:t};return L.runKernel(xs,n)}var Hc={};Fe(Hc,{isBrowser:()=>IT,isMobile:()=>iR,mockIsMobile:()=>sR});function rR(){return typeof navigator!="undefined"&&navigator!=null}var Jy;function sR(e){Jy=e}function iR(e){if(Jy!==void 0)return Jy;if(e||rR()){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 IT(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var fa=X();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",()=>IT());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("ENGINE_COMPILE_ONLY",()=>!1);fa.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);function hr(e,t){let n=e;if(hn(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let a=[];for(;Array.isArray(n)||hn(n)&&t!=="string";)a.push(n.length),n=n[0];return Array.isArray(e)&&X().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&TT(e,a,[]),a}function TT(e,t,n){if(n=n||[],!Array.isArray(e)&&!hn(e)){R(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}R(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),R(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=0&&(r=a),$k(a,r,t,n),e==null||!hn(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=hr(e,r);!hn(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?uf(e,r):oi(e,[],!0);return L.makeTensor(i,s,r)}function cc(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)=>E(r,`${t}[${s}]`,n,a))}var Qx="__op";function z(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+Qx;let r=(...s)=>{L.startScope(n);try{let i=a(...s);return Kx(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:n,configurable:!0}),r}function oR(e,t){let n=E(e,"real","complex"),a=E(t,"imag","complex");_n(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 L.runKernel(Pm,r)}var Dr=z({complex_:oR});function Is(e,t,n,a){if(a==null&&(a=$m(e)),a==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!hn(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){qx(t);let r=bt(t),s=bt(n);R(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!hn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=a!=="string"?uf(e,a):oi(e,[],!0),L.makeTensor(e,t,a)}function Bn(e,t,n){let a=hr(e,n);return Is(e,t,a,n)}var Qy={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},sm=4;async function lR(e,t){let n=[],a=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i{let c=await l.bytes(),h=c.reduce((g,b)=>g+b.length,0)+sm*c.length,m=new Uint8Array(h),f=0;for(let g=0;g{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 ev=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function Ak(e){return ev?Buffer.byteLength(e):new Blob([e]).size}function pR(e){if(ev)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let a=0,r=t.length;a{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 Fk(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 NT(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.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}async function nv(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){let[a,r]=await t(e.weightsManifest);n.weightSpecs=a,n.weightData=r}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),n}function jc(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:Ak(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:Ak(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function dR(){let e=n=>{let a=n<<13,r=0;for(;(a&8388608)===0;)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 hR(){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 fR(){let e=dR(),t=hR(),n=mR();return a=>{let r=new ArrayBuffer(4*a.length),s=new Uint32Array(r);for(let i=0;i>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var Ft=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Ft.instance==null&&(Ft.instance=new Ft),Ft.instance}static registerSaveRouter(e){Ft.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Ft.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Ft.getHandlers(e,"save")}static getLoadHandlers(e,t){return Ft.getHandlers(e,"load",t)}static getHandlers(e,t,n){let a=[];return(t==="load"?Ft.getInstance().loadRouters:Ft.getInstance().saveRouters).forEach(r=>{let s=r(e,n);s!==null&&a.push(s)}),a}},gR=e=>Ft.registerSaveRouter(e),bR=e=>Ft.registerLoadRouter(e),yR=e=>Ft.getSaveHandlers(e),xR=(e,t)=>Ft.getLoadHandlers(e,t),ex="tensorflowjs",tx=1,ei="models_store",as="model_info_store";function CT(){if(!X().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 nx(e){let t=e.result;t.createObjectStore(ei,{keyPath:"modelPath"}),t.createObjectStore(as,{keyPath:"modelPath"})}var ci=class{constructor(e){if(this.indexedDB=CT(),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(ex,tx);r.onupgradeneeded=()=>nx(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(ei,"readonly"),o=i.objectStore(ei).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=jc(t),o=s.transaction(as,"readwrite"),l=o.objectStore(as),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;u.onsuccess=()=>{p=s.transaction(ei,"readwrite");let d=p.objectStore(ei).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>n({modelArtifactsInfo:i}),d.onerror=c=>{l=o.objectStore(as);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)})}};ci.URL_SCHEME="indexeddb://";var _T=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ci.URL_SCHEME)?vR(e.slice(ci.URL_SCHEME.length)):null;Ft.registerSaveRouter(_T);Ft.registerLoadRouter(_T);function vR(e){return new ci(e)}function wR(e){return e.startsWith(ci.URL_SCHEME)?e.slice(ci.URL_SCHEME.length):e}var kR=class{constructor(){this.indexedDB=CT()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(ex,tx);n.onupgradeneeded=()=>nx(n),n.onsuccess=()=>{let a=n.result,r=a.transaction(as,"readonly"),s=r.objectStore(as).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=wR(e),new Promise((t,n)=>{let a=this.indexedDB.open(ex,tx);a.onupgradeneeded=()=>nx(a),a.onsuccess=()=>{let r=a.result,s=r.transaction(as,"readwrite"),i=s.objectStore(as),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(ei,"readwrite");let d=l.objectStore(ei).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)})}},_r="/",yl="tensorflowjs_models",ET="info",IR="model_topology",TR="weight_specs",SR="weight_data",NR="model_metadata";function $T(e){return{info:[yl,e,ET].join(_r),topology:[yl,e,IR].join(_r),weightSpecs:[yl,e,TR].join(_r),weightData:[yl,e,SR].join(_r),modelMetadata:[yl,e,NR].join(_r)}}function AT(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function CR(e){let t=e.split(_r);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(_r)}function _R(e){return e.startsWith(di.URL_SCHEME)?e.slice(di.URL_SCHEME.length):e}var di=class{constructor(e){if(!X().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=$T(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=jc(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,pR(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,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:a}}catch(r){throw AT(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.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=cR(s),t}};di.URL_SCHEME="localstorage://";var FT=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(di.URL_SCHEME)?ER(e.slice(di.URL_SCHEME.length)):null;Ft.registerSaveRouter(FT);Ft.registerLoadRouter(FT);function ER(e){return new di(e)}var $R=class{constructor(){R(X().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),R(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=yl+_r,n=_r+ET;for(let a=0;a"scheme must not be undefined or null."),e.endsWith(wl)&&(e=e.slice(0,e.indexOf(wl))),R(e.length>0,()=>"scheme must not be an empty string.");let n=Ln.getInstance();R(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=Ln.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(Ln.getInstance().managers)}};function Bh(e){if(e.indexOf(wl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${Ln.getSchemes().join(",")}`);return{scheme:e.split(wl)[0],path:e.split(wl)[1]}}async function DT(e,t,n=!1){R(e!==t,()=>`Old path and new path are the same: '${e}'`);let a=Ft.getLoadHandlers(e);R(a.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),R(a.length<2,()=>`Copying failed because more than one (${a.length}) load handlers for source URL ${e}.`);let r=a[0],s=Ft.getSaveHandlers(t);R(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),R(s.length<2,()=>`Copying failed because more than one (${a.length}) save handlers for destination URL ${t}.`);let i=s[0],o=Bh(e).scheme,l=Bh(e).path,u=o===Bh(e).scheme,p=await r.load();n&&u&&await Ln.getManager(o).removeModel(l);let d=await i.save(p);return n&&!u&&await Ln.getManager(o).removeModel(l),d.modelArtifactsInfo}async function AR(){let e=Ln.getSchemes(),t={};for(let n of e){let a=await Ln.getManager(n).listModels();for(let r in a){let s=n+wl+r;t[s]=a[r]}}return t}async function FR(e){let t=Bh(e);return Ln.getManager(t.scheme).removeModel(t.path)}async function DR(e,t){return DT(e,t,!1)}async function RR(e,t){return DT(e,t,!0)}var MR=class{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)}};if(X().get("IS_BROWSER")){X().setPlatform("browser",new MR);try{Ln.registerManager(di.URL_SCHEME,new $R)}catch(e){}try{Ln.registerManager(ci.URL_SCHEME,new kR)}catch(e){}}var PR={importFetch:()=>HF()},Dy,OR=class{constructor(){this.util=jF(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return X().global.fetch!=null?X().global.fetch(e,t):(Dy==null&&(Dy=PR.importFetch()),Dy(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)}};X().get("IS_NODE")&&!X().get("IS_BROWSER")&&X().setPlatform("node",new OR);function ze(e,t="float32",n){return t=t||"float32",qx(e),new jt(e,t,n)}function LR(e,t){let n=E(e,"x","cast");if(!iT(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 L.runKernel(_i,a,r)}var le=z({cast_:LR});function zR(e){let t={x:E(e,"x","clone","string_or_numeric")};return L.runKernel(Ui,t)}var cr=z({clone_:zR});function av(e,t=!1){console.log(e.toString(t))}kT();var WR={buffer:ze,cast:le,clone:cr,print:av};ZD(WR);var Nn={};Fe(Nn,{browserFiles:()=>qR,browserHTTPRequest:()=>JR,concatenateArrayBuffers:()=>tv,copyModel:()=>DR,decodeWeights:()=>ST,encodeWeights:()=>lR,fromMemory:()=>eM,fromMemorySync:()=>LT,getLoadHandlers:()=>xR,getModelArtifactsForJSON:()=>nv,getModelArtifactsInfoForJSON:()=>jc,getSaveHandlers:()=>yR,http:()=>sv,isHTTPScheme:()=>ax,listModels:()=>AR,loadWeights:()=>KR,moveModel:()=>RR,registerLoadRouter:()=>bR,registerSaveRouter:()=>gR,removeModel:()=>FR,weightsLoaderFactory:()=>MT,withSaveHandler:()=>tM,withSaveHandlerSync:()=>nM});var BR="model",VR=".json",UR=".weights.bin";function Dk(e){return new Promise(t=>setTimeout(t)).then(e)}var Nl=class{constructor(e){if(!X().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(Nl.URL_SCHEME)&&(e=e.slice(Nl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=BR),this.modelJsonFileName=e+VR,this.weightDataFileName=e+UR}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=NT(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 Dk(()=>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 Dk(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:jc(e)}}}};Nl.URL_SCHEME="downloads://";var GR=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=nv(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,tv(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=>Fk(r.name)),a={};for(let r of e)r.paths.forEach(s=>{let i=Fk(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}},HR=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(Nl.URL_SCHEME)?jR(e.slice(Nl.URL_SCHEME.length)):null;Ft.registerSaveRouter(HR);function jR(e="model"){return new Nl(e)}function qR(e){return new GR(e)}function Rk(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){R(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){R(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),R(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),R(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function RT(e,t){t==null&&(t={});let n=t.fetchFunc==null?X().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 Rk(a,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await Rk(i,t.onProgress,o,l)}async function KR(e,t="",n,a){return MT(r=>RT(r,{requestInit:a}))(e,t,n)}function MT(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 b="quantization"in g?g.quantization.dtype:g.dtype,y=Qy[b]*bt(g.shape),x=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:y})};a!=null?a.forEach((w,I)=>{w===g.name&&(x(),i[I]=!0)}):x(),o.push(g.name),f+=y})}),!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{let w=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),I=ST(w,[x.manifestEntry]);for(let N in I)d[N]=I[N]}),c+=m}),d}}var XR="application/octet-stream",YR="application/json",rv=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?(R(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=X().platform.fetch,R(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&R(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=NT(e,n);t.body.append("model.json",new Blob([JSON.stringify(a)],{type:YR}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:XR}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:jc(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 nv(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,a]=ZR(t),r=this.weightPathPrefix||n,s=[];for(let u of e)s.push(...u.weights);let 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 RT(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,tv(l)]}};rv.URL_SCHEME_REGEX=/^https?:\/\//;function ZR(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),a=e.substring(0,t),r=n>t?e.substring(n):"";return[a+"/",r]}function ax(e){return e.match(rv.URL_SCHEME_REGEX)!=null}var PT=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(a=>ax(a)):n=ax(e),n)return sv(e,t)}return null};Ft.registerSaveRouter(PT);Ft.registerLoadRouter(PT);function sv(e,t){return new rv(e,t)}function JR(e,t){return sv(e,t)}var Ry=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},OT=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},QR=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function eM(e,t,n,a){let r=arguments;return new QR(LT(...r))}function LT(e,t,n,a){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new Ry(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 Ry({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 Ry({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:a}))}function tM(e){return new OT(e)}function nM(e){return new OT(e)}var zT={};Fe(zT,{confusionMatrix:()=>IM});function aM(e,t,n=!1,a=!1){let r=E(e,"a","matMul"),s=E(t,"b","matMul");[r,s]=$t(r,s);let i={a:r,b:s},o={transposeA:n,transposeB:a};return L.runKernel(Ci,i,o)}var Re=z({matMul_:aM});function rM(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(e,"indices","oneHot","int32")},i={dtype:r,depth:t,onValue:n,offValue:a};return L.runKernel(eo,s,i)}var Cl=z({oneHot_:rM});function sM(){X().set("PROD",!0)}function iM(){X().set("DEBUG",!0)}function oM(){X().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function iv(e){X().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}JD(iv);function lM(){L.disposeVariables()}function ir(){return L}function im(){return L.memory()}function uM(e){return L.profile(e)}function O(e,t){return L.tidy(e,t)}function Me(e){Jx(e).forEach(t=>t.dispose())}function Qt(e){return L.keep(e)}function pM(e){return L.time(e)}function cM(e){return L.setBackend(e)}function dM(){return L.ready()}function hM(){return L.backendName}function mM(e){L.removeBackend(e)}function fM(e){return L.findBackend(e)}function gM(e){return L.findBackendFactory(e)}function cf(e,t,n=1){return L.registerBackend(e,t,n)}function WT(){return L.backend}function bM(e,t){X().setPlatform(e,t)}function yM(e){let t={input:E(e,"input","imag")};return L.runKernel(Km,t)}var qc=z({imag_:yM});function xM(e){let t={x:E(e,"x","neg")};return L.runKernel(ku,t)}var kt=z({neg_:xM});function vM(e){let t={input:E(e,"input","real")};return L.runKernel(nf,t)}var _l=z({real_:vM});function wM(e,t,n){let a=E(e,"x","transpose");if(t==null&&(t=a.shape.map((i,o)=>o).reverse()),R(a.rank===t.length,()=>`Error in transpose: rank of input ${a.rank} must match length of perm ${t}.`),t.forEach(i=>{R(i>=0&&i`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"?O(()=>{let i=_l(a),o=qc(a);return i=L.runKernel(Ar,{x:i},s),o=L.runKernel(Ar,{x:o},s),n&&(o=kt(o)),Dr(i,o)}):L.runKernel(Ar,r,s)}var Ae=z({transpose_:wM});function kM(e,t,n){let a=E(e,"labels","confusionMatrix"),r=E(t,"predictions","confusionMatrix");R(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),R(a.rank===1,()=>`Expected the rank of labels to be 1, but got ${a.rank}`),R(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),R(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.`),R(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=Cl(le(a,"int32"),n),i=Cl(le(r,"int32"),n),o=Ae(s),l=Re(o,i);return le(l,"int32")}var IM=z({confusionMatrix_:kM}),qu={};Fe(qu,{assertAndGetBroadcastShape:()=>ct,getBroadcastDims:()=>BT,getReductionAxes:()=>Wt});function BT(e,t){let n=e.length,a=[];for(let r=0;r1&&i===1&&a.unshift(s)}return a}function Wt(e,t){let n=[];for(let a=0;a1)&&n.unshift(s)}return n}function ct(e,t){let n=[],a=Math.max(e.length,t.length);for(let r=0;r$M,fromPixelsAsync:()=>_M,toPixels:()=>EM});function Kc(e,t,n){if(Ii(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let a=hr(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 Is(e,t,a,n)}var js;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(nm(tm,L.backendName)!=null){let c={pixels:e},h={numChannels:t};return L.runKernel(tm,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(js==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")js=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else js=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});js.canvas.width=l,js.canvas.height=u,js.drawImage(e,0,0,l,u),p=js.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;h4||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;u1)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 $M=z({fromPixels_:VT}),ov={};Fe(ov,{prepareAndValidate:()=>UT});function UT(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(bt(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;dd/u),1].slice(0,s);return[l,i,u,p]}var lv={};Fe(lv,{calculateShapes:()=>GT,validateInput:()=>pv,validateUpdateShape:()=>uv});function uv(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.rank1?t.shape[a-1]:1,s=n.length,i=1;for(let d=r;dFM,computeFlatOffset:()=>OM,computeOutShape:()=>RM,getNormalizedAxes:()=>MM,isSliceContinous:()=>PM,maskToAxes:()=>DM,parseSliceParams:()=>QT,sliceInfo:()=>LM,startForAxis:()=>ZT,startIndicesWithElidedDims:()=>KT,stopForAxis:()=>JT,stopIndicesWithElidedDims:()=>XT,stridesForAxis:()=>YT,stridesWithElidedDims:()=>HT});var rx=-2,AM=-1;function FM(e,t,n){let a=e.shape.length;R(a===t.length,()=>`Error in slice${a}D: Length of begin ${t} must match the rank of the array (${a}).`),R(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`Error in slice${a}D: begin[${r}] + size[${r}] (${t[r]+n[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function DM(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function RM(e,t,n){let a=[];for(let r=0;r0){let h=t[0],m=n+1;p=KT(i,h,m,a,e),d=XT(o,h,m,r,e),c=HT(s,h,m,e)}else for(let h=0;h-1)s[o]=0;else{let l=jT(t,n,o),u=a[l];e&1<-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=jT(t,n,o),u=a[l];e&1<0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),i=oc(0,i,l-1),i}function JT(e,t,n,a,r,s){let i=t[r],o=n[r]||1;(e&1<0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),o>0?i=oc(0,i,l):i=oc(-1,i,l-1),i}function PM(e,t,n){let a=n.length;for(let r=0;r1){a=r;break}for(let r=a+1;r0||n[r]!==e[r])return!1;return!0}function OM(e,t){let n=e.length>0?e[e.length-1]:1;for(let a=0;a{R(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.lengthi>=0?i:(R(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 LM(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)!==0)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 y=0;y0?0:-1,c.strides[y]>0?w:w-1];if(x&&c.strides[y]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&c.strides[y]===1;let _=!!(c.beginMask&1<=w)throw Error(`slice index ${c.begin[y]} of dimension ${y} out of bounds.`)}else c.begin[y]=Mk(c.begin[y],0,c.strides[y],w,I,N),c.end[y]=Mk(c.end[y],1,c.strides[y],w,I,N);let M=c.strides[y]===1&&c.begin[y]===0&&c.end[y]===w;h=h&&M,m=m&&(y===0&&c.strides[y]===1||M)}else h=h&&c.strides[y]===1&&_,m=m&&(y===0&&c.strides[y]===1||_);let $,A=!1;if(c.beginValid&&c.endValid?($=c.end[y]-c.begin[y],A=!0):x?($=1,A=!0):_&&w>=0&&(c.strides[y]<0?$=-w:$=w,A=!0),A){let M;$===0||$<0!=c.strides[y]<0?M=0:M=Math.trunc($/c.strides[y])+($%c.strides[y]!==0?1:0),g.push(M)}else g.push(-1)}for(let y=0;y=0?b.push(g[x]):x===rx&&b.push(1)}return{finalShapeSparse:b.filter((y,x)=>c.finalShapeGatherIndices[x]!==rx),finalShape:b,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:c.begin,end:c.end,strides:c.strides}}function zM(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;a0?s[t]:s[t+1&1];{let i=e<0?a+e:e;return is[1]?s[1]:i}}var se={};Fe(se,{Serializable:()=>eS,SerializationMap:()=>Zs,registerClass:()=>Ts});var eS=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Zs=class{constructor(){this.classNameMap={}}static getMap(){return Zs.instance==null&&(Zs.instance=new Zs),Zs.instance}static register(e){Zs.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Ts(e){R(e.className!=null,()=>"Class being registered does not have the static className property defined."),R(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),R(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Zs.register(e)}var tS={};Fe(tS,{TEST_EPSILON_FLOAT16:()=>nS,createVideoElement:()=>qM,encodeStrings:()=>aS,expectArrayBuffersEqual:()=>jM,expectArraysClose:()=>BM,expectArraysEqual:()=>UM,expectNumbersClose:()=>GM,expectPromiseToFail:()=>VM,expectValuesInRange:()=>HM,play:()=>KM,testEpsilon:()=>cv});var WM=.001,nS=.1;function BM(e,t,n){return n==null&&(n=cv()),sx(e,t,(a,r)=>dv(a,r,n))}function cv(){return L.backend.floatPrecision()===32?WM:nS}function sx(e,t,n){let a=!0;if((hn(e)||hn(t))&&(a=!1),hn(e)&&hn(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=hr(e),o=hr(t);if(!ys(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=hn(e)?e:oi(e),s=hn(t)?t:oi(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;it.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function UM(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return ns(e)||ns(e[0])||ns(t)||ns(t[0])?sx(e,n,(a,r)=>a==r):sx(e,t,(a,r)=>dv(a,r,0))}function GM(e,t,n){if(n==null&&(n=cv()),!dv(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function dv(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function HM(e,t,n){for(let a=0;an)throw new Error(`Value out of range:${e[a]} low: ${t}, high: ${n}`)}function jM(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{t.addEventListener("loadeddata",a=>n(t)),t.load()})}async function KM(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var XM="3.20.0";function YM(e,t){let n=E(e,"a","add"),a=E(t,"b","add");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(xs,r)}var Q=z({add_:YM});function ZM(e,t){let n=E(e,"a","floorDiv"),a=E(t,"b","floorDiv");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Wi,r)}var df=z({floorDiv_:ZM});function JM(e,t){let n=E(e,"a","div"),a=E(t,"b","div");if([n,a]=$t(n,a),n.dtype==="int32"&&a.dtype==="int32")return df(n,a);let r={a:n,b:a},s={};return L.runKernel(Pi,r,s)}var fe=z({div_:JM});function QM(e,t){let n=E(e,"a","mul"),a=E(t,"b","mul");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Qi,r)}var W=z({mul_:QM});function eP(e){let t=E(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return L.runKernel(Cc,n)}else{let n={x:t};return L.runKernel(Ul,n)}}var Lt=z({abs_:eP});function tP(e){let t={x:E(e,"x","acos")};return L.runKernel(Gl,t)}var hv=z({acos_:tP});function nP(e){let t={x:E(e,"x","acosh")};return L.runKernel(Hl,t)}var mv=z({acosh_:nP});function aP(e){R(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),R(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>E(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(!ys(r.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let a=t;return L.runKernel(Ti,a)}var rS=z({addN_:aP});function rP(e,t=null,n=!1){let a={x:E(e,"x","all","bool")},r={axis:t,keepDims:n};return L.runKernel(jl,a,r)}var hf=z({all_:rP});function sP(e,t=null,n=!1){let a={x:E(e,"x","any","bool")},r={axis:t,keepDims:n};return L.runKernel(ql,a,r)}var dc=z({any_:sP});function iP(e,t=0){let n={x:E(e,"x","argMax")},a={axis:t};return L.runKernel(Si,n,a)}var hi=z({argMax_:iP});function oP(e,t=0){let n={x:E(e,"x","argMin")},a={axis:t};return L.runKernel(Sc,n,a)}var fv=z({argMin_:oP});function lP(e){let t={x:E(e,"x","asin")};return L.runKernel(Kl,t)}var gv=z({asin_:lP});function uP(e){let t={x:E(e,"x","asinh")};return L.runKernel(Xl,t)}var bv=z({asinh_:uP});function pP(e){let t={x:E(e,"x","atan")};return L.runKernel(Yl,t)}var yv=z({atan_:pP});function cP(e,t){let n=E(e,"a","atan2"),a=E(t,"b","atan2");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Jl,r)}var xv=z({atan2_:cP});function dP(e){let t={x:E(e,"x","atanh")};return L.runKernel(Zl,t)}var vv=z({atanh_:dP});function hP(e,t,n,a,r="NHWC",s){let i=e[3],o=[...t,i],l=oS(r);return Xc(e,o,n,s,a,null,null,l)}function sS(e,t,n,a,r,s,i="channelsLast"){let[o,l]=om(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 Xc(e,u,n,a,r,s,!1,i)}function mP(e,t,n,a,r,s,i="NDHWC"){let[o,l,u]=ix(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 iS(e,p,n,a,r,!1,d,s)}function Xc(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]=om(n),[b,y]=om(a),x=kl(c,b),w=kl(h,y),{padInfo:I,outHeight:N,outWidth:_}=bP(r,u,p,f,g,x,w,s,o),$=i?m*d:m,A;return o==="channelsFirst"?A=[l,$,N,_]:o==="channelsLast"&&(A=[l,N,_,$]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:d,outHeight:N,outWidth:_,outChannels:$,padInfo:I,strideHeight:f,strideWidth:g,filterHeight:c,filterWidth:h,effectiveFilterHeight:x,effectiveFilterWidth:w,dilationHeight:b,dilationWidth:y,inShape:e,outShape:A,filterShape:t}}function iS(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,[b,y,x]=ix(n),[w,I,N]=ix(a),_=kl(h,w),$=kl(m,I),A=kl(f,N),{padInfo:M,outDepth:D,outHeight:T,outWidth:P}=yP(r,u,p,d,b,y,x,_,$,A,o),U=s?g*c:g,j;return i==="channelsFirst"?j=[l,U,D,T,P]:i==="channelsLast"&&(j=[l,D,T,P,U]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:d,inChannels:c,outDepth:D,outHeight:T,outWidth:P,outChannels:U,padInfo:M,strideDepth:b,strideHeight:y,strideWidth:x,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:_,effectiveFilterHeight:$,effectiveFilterWidth:A,dilationDepth:w,dilationHeight:I,dilationWidth:N,inShape:e,outShape:j,filterShape:t}}function fP(e,t,n,a,r){a==null&&(a=wv(e,t,n));let s=e[0],i=e[1],o=ai((s-t+2*a)/n+1,r),l=ai((i-t+2*a)/n+1,r);return[o,l]}function gP(e,t,n,a,r,s){r==null&&(r=wv(e,t,a));let i=e[0],o=e[1],l=e[2],u=ai((i-t+2*r)/a+1,s),p=ai((o-t+2*r)/a+1,s),d=ai((l-t+2*r)/a+1,s);return[u,p,d,n]}function wv(e,t,n,a=1){let r=kl(t,a);return Math.floor((e[0]*(n-1)-n+r)/2)}function om(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function ix(e){return typeof e=="number"?[e,e,e]:e}function kl(e,t){return t<=1?e:e+(e-1)*(t-1)}function bP(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=fP([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),b=h-g;u={top:m,bottom:f,left:g,right:b,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=ai((t-s+c+h)/a+1,o),d=ai((n-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:d}}function yP(e,t,n,a,r,s,i,o,l,u,p){let d,c,h,m;if(typeof e=="number"){d={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=gP([t,n,a,1],o,1,r,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,b=(m-1)*i+u-a,y=Math.floor(f/2),x=f-y,w=Math.floor(g/2),I=g-w,N=Math.floor(b/2),_=b-N;d={top:w,bottom:I,left:N,right:_,front:y,back:x,type:"SAME"}}else if(e==="valid")d={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},c=Math.ceil((t-o+1)/r),h=Math.ceil((n-l+1)/s),m=Math.ceil((a-u+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:d,outDepth:c,outHeight:h,outWidth:m}}function ai(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 ps(e){let[t,n,a]=om(e);return t===1&&n===1&&a===1}function gr(e,t){return ps(e)||ps(t)}function oS(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function En(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")R(Tl(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=>{R(Tl(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 xP(e,t){let n={x:E(e,"x","reshape","string_or_numeric")},a={shape:t};return L.runKernel($u,n,a)}var B=z({reshape_:xP});function vP(e,t,n,a,r){let s=E(e,"x","avgPool","float32"),i=1;R(gr(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=B(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),En("avgPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=L.runKernel(Ni,u,p);return d=le(d,s.dtype),l?B(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var ba=z({avgPool_:vP});function wP(e,t,n,a,r,s="NDHWC"){let i=E(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=B(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),R(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),En("avgPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=L.runKernel(Nc,u,p);return d=le(d,o.dtype),l?B(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var kv=z({avgPool3d_:wP});function kP(e,t=0){R(e.length>=1,()=>"Pass at least one tensor to concat");let n=cc(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 cr(n[0]);let a=n,r={axis:t};return L.runKernel(eu,a,r)}var Qe=z({concat_:kP});function IP(e){let t={x:E(e,"x","sigmoid","float32")};return L.runKernel(mo,t)}var ha=z({sigmoid_:IP});function TP(e,t,n){let a=E(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 L.runKernel(Ru,r,s)}var He=z({slice_:TP});function SP(e){let t={x:E(e,"x","tanh","float32")};return L.runKernel(wo,t)}var mi=z({tanh_:SP});function NP(e,t,n,a,r,s){let i=E(e,"forgetBias","basicLSTMCell"),o=E(t,"lstmKernel","basicLSTMCell"),l=E(n,"lstmBias","basicLSTMCell"),u=E(a,"data","basicLSTMCell"),p=E(r,"c","basicLSTMCell"),d=E(s,"h","basicLSTMCell"),c=Qe([u,d],1),h=Re(c,o),m=Q(h,l),f=m.shape[0],g=m.shape[1]/4,b=[f,g],y=He(m,[0,0],b),x=He(m,[0,g],b),w=He(m,[0,g*2],b),I=He(m,[0,g*3],b),N=Q(W(ha(y),mi(x)),W(p,ha(Q(i,w)))),_=W(mi(N),ha(I));return[N,_]}var lS=z({basicLSTMCell_:NP});function CP(e,t,n){let a=E(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);R(a.rank>=1+t.length,()=>`input rank is ${a.rank} but should be > than blockShape.length ${t.length}`),R(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),R(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 L.runKernel(Ql,s,i)}var Yc=z({batchToSpaceND_:CP});function _P(e){let t;return e.rank===0||e.rank===1?t=B(e,[1,1,1,e.size]):e.rank===2?t=B(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=B(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function EP(e,t,n,a,r,s){s==null&&(s=.001);let i=E(e,"x","batchNorm"),o=E(t,"mean","batchNorm"),l=E(n,"variance","batchNorm"),u;r!=null&&(u=E(r,"scale","batchNorm"));let p;a!=null&&(p=E(a,"offset","batchNorm")),R(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),R(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),R(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:_P(i),scale:u,offset:p,mean:o,variance:l},c={varianceEpsilon:s},h=L.runKernel(Bi,d,c);return B(h,i.shape)}var Ss=z({batchNorm_:EP});function $P(e,t,n,a,r,s){let i=E(e,"x","batchNorm"),o=E(t,"mean","batchNorm"),l=E(n,"variance","batchNorm"),u;r!=null&&(u=E(r,"scale","batchNorm"));let p;return a!=null&&(p=E(a,"offset","batchNorm")),R(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),R(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),R(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Ss(i,o,l,p,u,s)}var Iv=z({batchNorm2d_:$P});function AP(e,t,n,a,r,s){let i=E(e,"x","batchNorm"),o=E(t,"mean","batchNorm"),l=E(n,"variance","batchNorm"),u;r!=null&&(u=E(r,"scale","batchNorm"));let p;return a!=null&&(p=E(a,"offset","batchNorm")),R(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),R(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),R(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Ss(i,o,l,p,u,s)}var Tv=z({batchNorm3d_:AP});function FP(e,t,n,a,r,s){let i=E(e,"x","batchNorm"),o=E(t,"mean","batchNorm"),l=E(n,"variance","batchNorm"),u;r!=null&&(u=E(r,"scale","batchNorm"));let p;return a!=null&&(p=E(a,"offset","batchNorm")),R(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),R(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),R(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Ss(i,o,l,p,u,s)}var Sv=z({batchNorm4d_:FP});function DP(e,t,n){let a=E(e,"x","bincount"),r=E(t,"weights","bincount");R(a.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${a.dtype}`),R(n>=0,()=>`size must be non-negative, but got ${n}.`),R(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 L.runKernel(Rm,s,i)}var Nv=z({bincount_:DP});function RP(e,t){let n=E(e,"s0","broadcastArgs","int32"),a=E(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 L.runKernel(Mm,r)}var uS=z({broadcastArgs_:RP});function MP(e,t){let n=E(e,"broadcastTo","x"),a=n.shape;if(t.some(l=>!(l>0)||l%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.lengthn.rank){let l=n.shape.slice();for(;l.length=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 cr(n);let i={x:n},o={reps:s};return L.runKernel(ws,i,o)}var ri=z({broadcastTo_:MP});function PP(e){let t={x:E(e,"x","ceil","float32")};return L.runKernel(Ei,t)}var Cv=z({ceil_:PP});function OP(e,t,n){let a=E(e,"x","clipByValue");R(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let r={x:a},s={clipValueMin:t,clipValueMax:n};return L.runKernel(vs,r,s)}var tn=z({clipByValue_:OP});function LP(e){return Qe(e,0)}var _v=z({concat1d_:LP});function zP(e,t){return Qe(e,t)}var Ev=z({concat2d_:zP});function WP(e,t){return Qe(e,t)}var $v=z({concat3d_:WP});function BP(e,t){return Qe(e,t)}var Av=z({concat4d_:BP});function VP(e,t,n,a,r="NHWC",s=[1,1],i){let o=E(e,"x","conv2d","float32"),l=E(t,"filter","conv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=B(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),R(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),En("conv2d",a,i);let d=r==="NHWC"?u.shape[3]:u.shape[1];R(d===l.shape[2],()=>`Error in conv2d: depth of input (${d}) must match input depth for filter ${l.shape[2]}.`),R(gr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let c={x:u,filter:l},h={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel($i,c,h);return p?B(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Dt=z({conv2d_:VP});function UP(e,t,n,a,r="NWC",s=1,i){let o=E(e,"x","conv1d"),l=E(t,"filter","conv1d"),u=o,p=!1;o.rank===2&&(p=!0,u=B(o,[1,o.shape[0],o.shape[1]])),R(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),R(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),En("conv1d",a,i),R(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),R(gr(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),R(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let d=B(l,[1,l.shape[0],l.shape[1],l.shape[2]]),c=B(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Dt(c,d,[1,n],a,"NHWC",[1,s],i);return p?B(h,[h.shape[2],h.shape[3]]):B(h,[h.shape[0],h.shape[2],h.shape[3]])}var mf=z({conv1d_:UP});function GP(e,t,n,a,r,s="NHWC",i){R(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=B(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),R(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),R(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),R(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];R(p===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${n.shape[2]}.`),R(d===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${d}) must match output depth for filter ${n.shape[3]}.`),En("conv2dDerInput",r,i);let c={dy:l,filter:n},h={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(Ai,c,h);return u?B(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Fv=z({conv2DBackpropInput_:GP});function HP(e,t,n,a,r,s){let i=E(e,"x","conv2dTranspose"),o=E(t,"filter","conv2dTranspose");return Fv(n,i,o,a,r,"NHWC",s)}var ff=z({conv2dTranspose_:HP});function jP(e,t,n,a,r="NDHWC",s=[1,1,1]){let i=E(e,"x","conv3d"),o=E(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=B(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),R(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),R(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),R(gr(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),R(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`);let p={x:l,filter:o},d={strides:n,pad:a,dataFormat:r,dilations:s},c=L.runKernel(_c,p,d);return u?B(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var Dv=z({conv3d_:jP});function qP(e,t,n,a,r){R(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=B(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];R(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),R(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),R(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),R(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),R(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=L.runKernel(zm,p,d);return o?B(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var pS=z({conv3DBackpropInput_:qP});function KP(e,t,n,a,r){let s=E(e,"x","conv3dTranspose"),i=E(t,"filter","conv3dTranspose");return pS(n,s,i,a,r)}var Rv=z({conv3dTranspose_:KP});function XP(e){let t={x:E(e,"x","cos","float32")};return L.runKernel(Fi,t)}var Zc=z({cos_:XP});function YP(e){let t={x:E(e,"x","cosh","float32")};return L.runKernel(Di,t)}var gf=z({cosh_:YP});function ZP(e,t=0,n=!1,a=!1){let r={x:E(e,"x","cumprod")},s={axis:t,exclusive:n,reverse:a};return L.runKernel(tu,r,s)}var hc=z({cumprod_:ZP});function JP(e,t=0,n=!1,a=!1){let r={x:E(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:a};return L.runKernel(Ri,r,s)}var bf=z({cumsum_:JP});function QP(e,t,n,a=!1){let r=E(e,"x","denseBincount"),s=E(t,"weights","denseBincount");R(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),R(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),R(n>=0,()=>`size must be non-negative, but got ${n}.`),R(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 L.runKernel(Wm,i,o)}var cS=z({denseBincount_:QP});function eO(e,t,n="NHWC"){let a=E(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];R(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),R(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${r} and ${t} for depthToSpace with input shape ${a.shape}`),R(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape ${a.shape}`),R(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 L.runKernel(au,o,l)}var Mv=z({depthToSpace_:eO});function tO(e,t,n,a,r="NHWC",s=[1,1],i){let o=E(e,"x","depthwiseConv2d","float32"),l=E(t,"filter","depthwiseConv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=B(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),R(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];R(d===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${d}) must match the inChannels dimension in filter ${l.shape[2]}.`),En("depthwiseConv2d",a,i);let c={x:u,filter:l},h={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(Mi,c,h);return p?B(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Ns=z({depthwiseConv2d_:tO});function nO(e){let t={x:E(e,"x","diag")};return L.runKernel(Um,t)}var dS=z({diag_:nO});function aO(e,t,n,a,r=[1,1],s="NHWC"){let i=E(e,"x","dilation2d"),o=E(t,"filter","dilation2d");R(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),R(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),R(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=B(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);let p={x:l,filter:o},d={strides:n,pad:a,dilations:r},c=L.runKernel(Ec,p,d);return u?B(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var Pv=z({dilation2d_:aO});function rO(e,t){let n=E(e,"a","equal","string_or_numeric"),a=E(t,"b","equal","string_or_numeric");[n,a]=$t(n,a),ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(su,r)}var ea=z({equal_:rO});function sO(e,t,n){let a=E(t,"a","where"),r=E(n,"b","where"),s=E(e,"condition","where","bool"),i=ct(ct(s.shape,a.shape),r.shape),o=ri(s,i),l=ri(a,i),u=ri(r,i),p={condition:o,t:l,e:u};return L.runKernel(Fu,p)}var fn=z({where_:sO});function iO(e){let t={x:E(e,"x","zerosLike")};return L.runKernel(Hu,t)}var qe=z({zerosLike_:iO});function oO(e,t){let n=E(e,"a","div"),a=E(t,"b","div");[n,a]=$t(n,a);let r=fe(n,a),s=qe(r),i=ea(a,s);return fn(i,s,r)}var Ov=z({divNoNan_:oO});function lO(e,t){let n=E(e,"t1","dot"),a=E(t,"t2","dot");R((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(R(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),n.rank===1&&a.rank===1){let i=B(n,[1,-1]),o=B(a,[-1,1]),l=Re(i,o);return B(l,[])}else if(n.rank===1&&a.rank===2){let i=B(n,[1,-1]),o=B(a,[a.shape[0],a.shape[1]]),l=Re(i,o);return B(l,[l.size])}else if(n.rank===2&&a.rank===1){let i=B(a,[-1,1]),o=Re(n,i);return B(o,[o.size])}else{let i=B(a,[a.shape[0],a.shape[1]]);return Re(n,i)}}var Lv=z({dot_:lO});function uO(e,...t){let n=t.map((r,s)=>E(r,`tensors${s}`,"einsum")),a={equation:e};return L.runKernel(Gm,n,a)}var hS=z({einsum_:uO});function pO(e){let t={x:E(e,"x","elu","float32")};return L.runKernel(Oi,t)}var Ku=z({elu_:pO});function cO(e){let t=E(e,"x","erf");R(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=le(t,"float32"));let n={x:t};return L.runKernel(ru,n)}var zv=z({erf_:cO});function Wv(e,t){for(let n=0;ne[s]);return[n,r]}function fi(e,t){let n=t.map(a=>1);return mS(e,n,t)}function dO(e,t,n){R(Wv(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function gS(e,t){if(Wv(e,t))return null;let n=[];for(let a=0;an.push(a)),n}function Bv(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function hO(e,t){let n=[];for(let a=t-e;a"Axis must be <= rank of the tensor");let a={input:n},r={dim:t};return L.runKernel(iu,a,r)}var mn=z({expandDims_:IO});function TO(e){let t={x:E(e,"x","expm1")};return L.runKernel(ou,t)}var Uv=z({expm1_:TO});function SO(e,t){let n=E(e,"x","tile","string_or_numeric");R(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 L.runKernel(ws,a,r)}var Wn=z({tile_:SO});function NO(e,t,n,a="float32"){t==null&&(t=e);let r=ze([e,t],a),s=e<=t?e:t;for(let o=0;o`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${s.rank}.`),R(Tl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=B(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=L.runKernel(Ac,l,u);return o?B(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var qv=z({localResponseNormalization_:OO});function LO(e){let t={x:E(e,"x","log","float32")};return L.runKernel(Hi,t)}var ta=z({log_:LO});function zO(e){let t={x:E(e,"x","log1p")};return L.runKernel(bu,t)}var Qc=z({log1p_:zO});function WO(e){return R(ls(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let a=E(t,"x","tf.grad","string_or_numeric"),r=n!=null?E(n,"dy","tf.grad"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(a),[a],r);return r!=null&&_n(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),vf(i),i[0]})}}function BO(e){return R(ls(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{R(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let a=cc(t,"args","tf.grads","string_or_numeric"),r=n!=null?E(n,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...a),a,r);return r!=null&&_n(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),vf(i),i})}}function VO(e){return R(ls(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{R(t instanceof $e,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),R(n==null||n instanceof $e,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:a,value:r}=L.gradients(()=>e(t),[t],n);return vf(a),{grad:a[0],value:r}}}function UO(e){return R(ls(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{R(Array.isArray(t)&&t.every(r=>r instanceof $e),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),R(n==null||n instanceof $e,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let a=L.gradients(()=>e(...t),t,n);return n!=null&&_n(a.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),vf(a.grads),a}}function xS(e,t){R(ls(e),()=>"The f passed in variableGrads(f) must be a function"),R(t==null||Array.isArray(t)&&t.every(u=>u instanceof us),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in L.registeredVariables)t.push(L.registeredVariables[u])}let a=n?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),R(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}=L.gradients(e,t,null,s);R(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()."),R(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 mr(e){return L.customGrad(e)}function vf(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 GO(e){let t={x:E(e,"x","softplus")};return L.runKernel(Ou,t)}var Io=z({softplus_:GO});function HO(e){let t=E(e,"x","logSigmoid");return mr(n=>({value:kt(Io(kt(n))),gradFunc:a=>W(a,ha(kt(n)))}))(t)}var Kv=z({logSigmoid_:HO});function jO(e,t){let n=E(e,"a","sub"),a=E(t,"b","sub");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(xo,r)}var ce=z({sub_:jO});function qO(e,t=-1){let n=E(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 mr((a,r)=>{let s=_a(a,t,!0),i=ce(a,s),o=ce(le(i,"float32"),ta(ye(gn(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,d=!0,c=gn(p);return ce(l,W(ye(l,t,d),c))}}})(n)}var wf=z({logSoftmax_:qO});function KO(e,t=null,n=!1){let a=E(e,"x","logSumExp"),r=Aa(t,a.shape),s=_a(a,r,!0),i=ce(a,s),o=gn(i),l=ye(o,r),u=ta(l),p=Q(B(s,u.shape),u);if(n){let d=fi(p.shape,r);return B(p,d)}return p}var kf=z({logSumExp_:KO});function XO(e,t){let n=E(e,"a","logicalAnd","bool"),a=E(t,"b","logicalAnd","bool");ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(yu,r)}var $a=z({logicalAnd_:XO});function YO(e){let t={x:E(e,"x","logicalNot","bool")};return L.runKernel(xu,t)}var ed=z({logicalNot_:YO});function ZO(e,t){let n=E(e,"a","logicalOr","bool"),a=E(t,"b","logicalOr","bool");ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(vu,r)}var If=z({logicalOr_:ZO});function JO(e,t){let n=E(e,"a","logicalXor","bool"),a=E(t,"b","logicalXor","bool");return ct(n.shape,a.shape),$a(If(e,t),ed($a(e,t)))}var Xv=z({logicalXor_:JO}),_h=2147483648;function QO(e,t,n="left"){let a=E(e,"sortedSequence","searchSorted"),r=E(t,"values","searchSorted"),s=a.shape[a.shape.length-1],i=r.shape[r.shape.length-1],o=B(a,[-1,s]),l=B(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(bt(l.shape)>=_h)throw new Error(`values tensor size must less than ${_h}`);if(o.shape[1]>=_h)throw new Error(`trailing dim_size must less than ${_h} for int32 output type, was ${o.shape[1]}`);let u={sortedSequence:o,values:l},p={side:n};return L.runKernel(sf,u,p)}var Tf=z({searchSorted_:QO});function vS(e,t){return Tf(e,t,"left")}function e3(e,t,n,a,r){let s=E(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=B(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),R(gr(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),En("maxPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=L.runKernel(Ki,u,p);return l?B(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Mt=z({maxPool_:e3});function t3(e,t=[1,1,1],n,a,r,s="NDHWC"){let i=E(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=B(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),R(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),En("maxPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=L.runKernel(Fc,u,p);return l?B(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Yv=z({maxPool3d_:t3});function n3(e,t,n,a,r=!1){let s={x:E(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:a,includeBatchInIndex:r},o=L.runKernel(Qm,s,i);return{result:o[0],indexes:o[1]}}var wS=z({maxPoolWithArgmax_:n3});function a3(e,t){let n=E(e,"a","maximum"),a=E(t,"b","maximum");[n,a]=$t(n,a),n.dtype==="bool"&&(n=le(n,"int32"),a=le(a,"int32")),ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(qi,r)}var br=z({maximum_:a3});function r3(e,t=null,n=!1){let a={x:E(e,"x","mean")},r={axis:t,keepDims:n};return L.runKernel(Xi,a,r)}var _t=z({mean_:r3});function It(e,t="float32"){if(t==="complex64"){let a=It(e,"float32"),r=It(e,"float32");return Dr(a,r)}let n=Am(bt(e),t);return L.makeTensor(n,e,t)}function Qn(e,t="float32"){if(t==="complex64"){let a=Qn(e,"float32"),r=It(e,"float32");return Dr(a,r)}let n=jx(bt(e),t);return L.makeTensor(n,e,t)}function kS(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(e,"x","meshgrid",e instanceof $e?e.dtype:"float32");if(t===void 0)return[a];let r=E(t,"y","meshgrid",t instanceof $e?t.dtype:"float32"),s=bt(a.shape),i=bt(r.shape);return n==="xy"?(a=B(a,[1,-1]),r=B(r,[-1,1]),[Re(Qn([i,1],a.dtype),a),Re(r,Qn([1,s],r.dtype))]):(a=B(a,[-1,1]),r=B(r,[1,-1]),[Re(a,Qn([1,i],a.dtype)),Re(Qn([s,1],r.dtype),r)])}function s3(e,t){let n=E(e,"a","minimum"),a=E(t,"b","minimum");[n,a]=$t(n,a),n.dtype==="bool"&&(n=le(n,"int32"),a=le(a,"int32")),ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(Zi,r)}var Ju=z({minimum_:s3});function i3(e,t,n){R(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let a=E(e,"x","mirrorPad");if(a.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");R(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"Invalid number of paddings. Must be length of 2 each."),R(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 L.runKernel(Ji,i,s)}var Zv=z({mirrorPad_:i3});function o3(e,t){let n=E(e,"a","mod"),a=E(t,"b","mod");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(wu,r)}var Jv=z({mod_:o3});function l3(e,t=null,n=!1){e=E(e,"x","moments");let a=Aa(t,e.shape),r=_t(e,a,n),s=r.shape;n||(s=fi(r.shape,a));let i=ut(ce(le(e,"float32"),B(r,s))),o=_t(i,a,n);return{mean:r,variance:o}}var td=z({moments_:l3});function u3(e,t,n,a){let r=E(t,"data","multiRNNCell"),s=cc(n,"c","multiRNNCell"),i=cc(a,"h","multiRNNCell"),o=r,l=[];for(let d=0;d2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?B(r,[1,-1]):r},l={numSamples:t,seed:n,normalized:a},u=L.runKernel(ef,o,l);return i===1?B(u,[u.size]):u}var TS=z({multinomial_:p3});function c3(e,t){let n=E(e,"a","notEqual","string_or_numeric"),a=E(t,"b","notEqual","string_or_numeric");[n,a]=$t(n,a),ct(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(Iu,r)}var gi=z({notEqual_:c3});function d3(e){let t={x:E(e,"x","onesLike")};return L.runKernel(Cu,t)}var na=z({onesLike_:d3});function h3(e,t){let n=E(e,"v1","outerProduct"),a=E(t,"v2","outerProduct");R(n.rank===1&&a.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${a.rank}.`);let r=B(n,[-1,1]),s=B(a,[1,-1]);return Re(r,s)}var SS=z({outerProduct_:h3});function m3(e,t,n=0){let a=E(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 L.runKernel(to,s,r)}var ya=z({pad_:m3});function f3(e,t,n=0){return R(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ya(e,[t],n)}var NS=z({pad1d_:f3});function g3(e,t,n=0){return R(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ya(e,t,n)}var CS=z({pad2d_:g3});function b3(e,t,n=0){return R(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."),ya(e,t,n)}var _S=z({pad3d_:b3});function y3(e,t,n=0){return R(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."),ya(e,t,n)}var ES=z({pad4d_:y3});function x3(e,t,n){let a=E(e,"x","spaceToBatchND");R(a.rank>=1+t.length,()=>`input rank ${a.rank} should be > than [blockShape] ${t.length}`),R(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),R(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 L.runKernel(Lu,r,s)}var nd=z({spaceToBatchND_:x3});function v3(e,t,n,a,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),a===0&&(a="valid");let o=E(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=B(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(gr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=sS(l.shape,t,s,r,a),d=[p.dilationHeight,p.dilationWidth],c;a==="same"?c=k3([p.filterHeight,p.filterWidth],d):c=[[0,0],[0,0]];let h=d[0]===1&&d[1]===1,[m,f]=w3([p.inHeight,p.inWidth],d,c),g=h?a:"valid",b=h?l:nd(l,d,m),y=(n==="avg"?()=>ba(b,t,s,g,i):()=>Mt(b,t,s,g,i))(),x=h?y:Yc(y,d,f);return u?B(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function w3(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 k3(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 Qv=z({pool_:v3});function I3(e,t){let n=E(e,"x","prelu"),a=E(t,"alpha","prelu"),r={x:n,alpha:a};return L.runKernel(ao,r)}var ad=z({prelu_:I3});function T3(e,t=null,n=!1){let a=E(e,"x","prod");a.dtype==="bool"&&(a=le(a,"int32"));let r={x:a},s={axis:t,keepDims:n};return L.runKernel(ro,r,s)}var ew=z({prod_:T3});function S3(e,t,n,a,r){let s=E(e,"shape","raggedTensorToTensor","int32"),i=E(t,"values","raggedTensorToTensor"),o=E(n,"defaultValue","raggedTensorToTensor",i.dtype),l=a.map((d,c)=>E(d,`tensors${c}`,"raggedTensorToTensor","int32")),u={shape:s,values:i,defaultValue:o,rowPartitionTensors:l},p={rowPartitionTypes:r};return L.runKernel(tf,u,p)}var $S=z({raggedTensorToTensor_:S3});function N3(e,t,n){let a=bt(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=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}},C3=class{constructor(e,t,n,a){this.alpha=e,this.beta=1/t,this.dtype=n;let r=a||Math.random();this.randu=tw.alea(r.toString()),this.randn=new nw(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(),rthis.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=tw.alea(a)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function E3(e,t,n=1,a="float32",r){if(n==null&&(n=1),a==null&&(a="float32"),a!=="float32"&&a!=="int32")throw new Error(`Unsupported data type ${a}`);let s=new C3(t,n,a,r),i=ze(e,a);for(let o=0;o`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),ga(t,0)}var RS=z({reverse1d_:O3});function L3(e,t){let n=E(e,"x","reverse");return R(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),ga(n,t)}var MS=z({reverse2d_:L3});function z3(e,t){let n=E(e,"x","reverse");return R(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),ga(n,t)}var PS=z({reverse3d_:z3});function W3(e,t){let n=E(e,"x","reverse");return R(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),ga(n,t)}var OS=z({reverse4d_:W3});function B3(e){let t={x:E(e,"x","round")};return L.runKernel(po,t)}var Cf=z({round_:B3});function V3(e){let t={x:E(e,"x","rsqrt","float32")};return L.runKernel(co,t)}var _f=z({rsqrt_:V3});function U3(e){let t={x:E(e,"x","selu")};return L.runKernel(Du,t)}var Ef=z({selu_:U3});function G3(e,t,n,a,r,s=[1,1],i="NHWC"){let o=E(e,"x","separableConv2d"),l=E(t,"depthwiseFilter","separableConv2d"),u=E(n,"pointwiseFilter","separableConv2d"),p=o,d=!1;if(o.rank===3&&(d=!0,p=B(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");R(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),R(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),R(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),R(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),R(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];R(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=Ns(p,l,a,r,i,s),f=Dt(m,u,1,"valid",i);return d?B(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Es=z({separableConv2d_:G3});async function H3(e,t){let n=E(e,"x","setdiff1d"),a=E(t,"y","setdiff1d");R(n.dtype===a.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${a.dtype}).`),R(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),R(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`slice1d expects a rank-1 tensor, but got a rank-${a.rank} tensor`),He(a,[t],[n])}var rd=z({slice1d_:X3});function Y3(e,t,n){let a=E(e,"x","slice2d");return R(a.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${a.rank} tensor`),He(a,t,n)}var Ff=z({slice2d_:Y3});function Z3(e,t,n){let a=E(e,"x","slice3d");return R(a.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${a.rank} tensor`),He(a,t,n)}var To=z({slice3d_:Z3});function J3(e,t,n){let a=E(e,"x","slice4d");return R(a.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${a.rank} tensor`),He(a,t,n)}var $l=z({slice4d_:J3});function Q3(e,t=-1){let n=E(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 L.runKernel(bo,a,r)}var Qa=z({softmax_:Q3});function eL(e){R(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(jm,t)}var sd=z({fft_:eL});function tL(e){R(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(qm,t)}var Al=z({ifft_:tL});function nL(e){let t=e.shape[e.shape.length-1],n=e.size/t,a;if(t<=2){let r=B(e,[n,t]);a=Al(r)}else{let r=[n,2*(t-1)],s=B(_l(e),[n,t]),i=B(qc(e),[n,t]),o=ga(He(s,[0,1],[n,t-2]),1),l=W(ga(He(i,[0,1],[n,t-2]),1),ke(-1)),u=Qe([s,o],1),p=Qe([i,l],1),d=B(Dr(u,p),[r[0],r[1]]);a=Al(d)}if(a=_l(a),e.rank===3&&e.shape[0]!==0){let r=a,s=e.shape[0];a=B(a,[s,a.shape[0]/s,a.shape[1]]),r.dispose()}return a}var Df=z({irfft_:nL});function aL(e,t,n=0){let a={x:E(e,"x","split")},r={numOrSizeSplits:t,axis:n};return L.runKernel(zu,a,r)}var Vn=z({split_:aL});function rL(e,t){R(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&&t0),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=He(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=Qe([e,It(m)],e.shape.length-1),n=t}else r=e;let s=qe(r),i=B(Dr(r,s),[a,n]),o=sd(i),l=Math.floor(n/2)+1,u=_l(o),p=qc(o),d=Vn(u,[l,n-l],u.shape.length-1),c=Vn(p,[l,n-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,B(Dr(d[0],c[0]),h)}var id=z({rfft_:rL});function sL(e,t){let n=E(e,"a","squaredDifference"),a=E(t,"b","squaredDifference");[n,a]=$t(n,a),ct(n.shape,a.shape);let r={a:n,b:a},s={};return L.runKernel(yo,r,s)}var Rf=z({squaredDifference_:sL});function iL(e,t){let n=E(e,"x","squeeze","string_or_numeric");return B(n,nT(n.shape,t).newShape)}var $s=z({squeeze_:iL});function oL(e,t=0){let n=cc(e,"tensors","stack","string_or_numeric");R(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&R(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let a=n,r={axis:t};return L.runKernel(_u,a,r)}var Rt=z({stack_:oL});function lL(e,t=0){let n={x:E(e,"x","step")},a={alpha:t};return L.runKernel(ks,n,a)}var So=z({step_:lL});function uL(e,t,n,a,r=0,s=0,i=0,o=0,l=0){let u={x:E(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:a,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return L.runKernel(Bu,u,p)}var sw=z({stridedSlice_:uL});function pL(e){let t={x:E(e,"x","tan","float32")};return L.runKernel(vo,t)}var iw=z({tan_:pL});function Ke(e,t){Ii(e);let n=hr(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return Is(e,null,n,t)}function Ea(e,t,n){if(Ii(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let a=hr(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 Is(e,t,a,n)}function Fa(e,t,n){if(Ii(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let a=hr(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 Is(e,t,a,n)}function zS(e,t,n){if(Ii(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let a=hr(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 Is(e,t,a,n)}function WS(e,t,n){if(Ii(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let a=hr(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,Is(e,t,a,n)}function cL(e,t=1,n=!0){let a=E(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]=L.runKernel(Vu,s,i);return{values:o,indices:l}}var ow=z({topk_:cL});function dL(e,t=0,n=1,a,r){if(a!=null&&a==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new nw(t,n,a,!0,r),i=ze(e,a);for(let o=0;o0,()=>"The input tensor must be at least 1D");let a={x:n},r={axis:t},[s,i]=L.runKernel(lf,a,r);return{values:s,indices:i}}var lw=z({unique_:hL});function mL(e,t,n){let a=E(e,"x","unsortedSegmentSum"),r=E(t,"segmentIds","unsortedSegmentSum","int32");R(Tl(n),()=>"numSegments must be of dtype int");let s={x:a,segmentIds:r},i={numSegments:n};return L.runKernel(Bc,s,i)}var Pf=z({unsortedSegmentSum_:mL});function fL(e,t=0){let n=E(e,"x","unstack","string_or_numeric");R(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let a={value:n},r={axis:t};return L.runKernel(Gu,a,r)}var mt=z({unstack_:fL});function BS(e,t){return Tf(e,t,"right")}function uw(e,t=!0,n,a){return L.makeVariable(e,t,n,a)}function VS(e,t){let n=[];for(let s=0;s0,()=>"mask cannot be scalar"),_n(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"Shape mismatch in v and x");let l=ke(1),u=ce(l,o),p=W(ce(i,s),u);if(r){R(a!=null,()=>"When using zeroDebias: true, step is required.");let d=E(a,"step","movingAverage");p=fe(p,ce(l,Rr(o,d)))}return Q(s,p)}var GS=z({movingAverage_:yL});function xL(e,t,n){let a=E(e,"indices","scatterND","int32"),r=E(t,"updates","scatterND");pv(r,a,n);let s={indices:a,updates:r},i={shape:n};return L.runKernel(Au,s,i)}var HS=z({scatterND_:xL});function vL(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 wL(e,t,n,a=0){let r=E(e,"sparseIndices","sparseToDense","int32"),s=E(t,"sparseValues","sparseToDense","string_or_numeric"),i=E(a,"defaultValue","sparseToDense",s.dtype);vL(r,s,n,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:n};return L.runKernel(of,o,l)}var jS=z({sparseToDense_:wL});function kL(e,t){let n=E(t,"indices","gatherND","int32"),a={params:E(e,"x","gatherND","string_or_numeric"),indices:n};return L.runKernel(pu,a)}var qS=z({gatherND_:kL});function IL(e,t){if(t==null)return e.shape.slice();if(ys(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let a=0;a`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),R(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof $e?r.clone():r;let s=IL(r,n),i=1-t,o=fe(Yu(Q(Qu(s,0,1,"float32",a),i)),i);return W(r,o)}var cw=z({dropout_:TL});function dw(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Of(e,t,n){let a=1-e%2,r=new Float32Array(e);for(let s=0;s1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${a.rank}`),R(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}`),_n(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];R(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=aT("bool",l);for(let d=0;dg.value-f.value),p[d]=0;for(let f=0;f_L,depthwiseConv2d:()=>FL,matMul:()=>RL});function NL(e,t,n,a,r,s="NHWC",i){let o=e;e.rank===3&&(o=B(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=B(t,[1,t.shape[0],t.shape[1],t.shape[2]])),R(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),R(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),R(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];R(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),R(p===n[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${n[3]}).`),En("conv2dDerFilter",r,i);let d={x:o,dy:l},c={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:n};return L.runKernel(Om,d,c)}var hw=z({conv2DBackpropFilter_:NL});function Lf(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return W(e,So(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function zf(e,t){let n=t,a=Wt(e.shape,t.shape);return a.length>0&&(n=ye(n,a)),B(n,e.shape)}function Wf(e,t,n,a){if(t==="linear")return e;if(t==="relu")return Xe(e);if(t==="elu")return Ku(e);if(t==="relu6")return Nf(e);if(t==="prelu")return ad(e,n);if(t==="leakyrelu")return Jc(e,a);if(t==="sigmoid")return ha(e);throw new Error(`Unknown fused activation ${t}.`)}var Bf=(e,t)=>!(e>0)||t==="linear";function CL({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",Bf(L.state.gradientDepth,l)===!1){R(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 N=Dt(e,t,n,a,r,s,i);return o!=null&&(N=Q(N,o)),Wf(N,l,u,p)}let d=E(e,"x","conv2d","float32"),c=E(t,"filter","conv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=B(d,[1,d.shape[0],d.shape[1],d.shape[2]])),R(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),R(c.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${c.rank}.`),En("fused conv2d",a,i);let f=r==="NHWC"?h.shape[3]:h.shape[1];R(c.shape[2]===f,()=>`Error in conv2d: depth of input (${f}) must match input depth for filter ${c.shape[2]}.`),R(gr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let g=Xc(h.shape,c.shape,n,s,a,i),b;o!=null&&(b=E(o,"bias","fused conv2d"),[b]=$t(b,d),r==="NHWC"?ct(g.outShape,b.shape):(R(b.shape.length<=1,()=>`Error in fused conv2d: only supports scalar or 1-D Tensor bias for NCHW format but got the bias of rank-${b.shape.length}.`),R(b.shape.length===0||b.shape[0]===g.outChannels||b.shape[0]===1,()=>`Error in fused conv2d: bias shape (${b.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let y;if(u!=null){let N=u.shape;if(R(N.length<=1||N.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-${N.length}.`),N.length===1)R(N[0]===1||N[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${N}) is not compatible with the number of output channels (${g.outChannels}).`);else if(N.length===3)try{ct(N,g.outShape)}catch(_){let $=`Error in fused conv2d: PReLU activation weights (${N}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error($)}y=E(u,"prelu weights","fused conv2d")}let x=(N,_)=>{R(r==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${r} but only NHWC is currently supported.`);let[$,A,M,D]=_,T=Lf(N,M,l);R(ps(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let P=Fv(A.shape,T,$,n,a),U=hw(A,T,$.shape,n,a),j=[P,U];if(D!=null){let q=zf(D,T);j.push(q)}return j},w={x:h,filter:c,bias:b,preluActivationWeights:y},I={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?mr((N,_,$)=>{let A=L.runKernel(ui,w,I);return $([_,N,A]),m&&(A=B(A,[A.shape[1],A.shape[2],A.shape[3]])),{value:A,gradFunc:x}})(h,c):mr((N,_,$,A)=>{let M=L.runKernel(ui,w,I);return A([_,N,M,$]),m&&(M=B(M,[M.shape[1],M.shape[2],M.shape[3]])),{value:M,gradFunc:x}})(h,c,b)}var _L=z({fusedConv2d_:CL});function EL(e,t,n,a,r,s=[1,1],i){let o=e;e.rank===3&&(o=B(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=B(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 L.runKernel(Bm,u,p)}var XS=z({depthwiseConv2dNativeBackpropFilter_:EL});function $L(e,t,n,a,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=B(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=L.runKernel(Vm,u,p);return l?B(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var YS=z({depthwiseConv2dNativeBackpropInput_:$L});function AL({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(Bf(L.state.gradientDepth,l)===!1){let I=Ns(e,t,n,a,r,s,i);return o!=null&&(I=Q(I,o)),Wf(I,l,u,p)}let d=E(e,"x","depthwiseConv2d","float32"),c=E(t,"filter","depthwiseConv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=B(d,[1,d.shape[0],d.shape[1],d.shape[2]])),R(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),R(c.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${c.rank}.`),R(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]),R(gr(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),En("fused depthwiseConv2d",a,i);let f=Xc(h.shape,c.shape,n,s,a,i,!0),g;o!=null&&(g=E(o,"bias","fused conv2d"),[g]=$t(g,d),ct(f.outShape,g.shape));let b;u!=null&&(b=E(u,"prelu weights","fused depthwiseConv2d"));let y=(I,N)=>{R(ps(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[_,$,A,M]=N,D=Lf(I,A,l),T=YS($.shape,D,_,n,a,s,i),P=XS($,D,_.shape,n,a,s,i);if(M!=null){let U=zf(g,D);return[T,P,U]}return[T,P]},x={x:h,filter:c,bias:g,preluActivationWeights:b},w={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?mr((I,N,_)=>{let $=L.runKernel(pi,x,w);return _([N,I,$]),m&&($=B($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:y}})(h,c):mr((I,N,_,$)=>{let A=L.runKernel(pi,x,w);return $([N,I,A,_]),m&&(A=B(A,[A.shape[1],A.shape[2],A.shape[3]])),{value:A,gradFunc:y}})(h,c,g)}var FL=z({fusedDepthwiseConv2d_:AL});function DL({a:e,b:t,transposeA:n=!1,transposeB:a=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o=.2}){if(Bf(L.state.gradientDepth,s)===!1){let M=Re(e,t,n,a);return r!=null&&(M=Q(M,r)),Wf(M,s,i,o)}let l=E(e,"a","fused matMul"),u=E(t,"b","fused matMul");[l,u]=$t(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=bt(m),b=bt(f);R(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 y=ct(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([c,h]),x=n?B(l,[g,p,c]):B(l,[g,c,p]),w=a?B(u,[b,h,d]):B(u,[b,d,h]),I;r!=null&&(I=E(r,"bias","fused matMul"),[I]=$t(I,l),ct(y,I.shape));let N;i!=null&&(N=E(i,"prelu weights","fused matMul"));let _=(M,D)=>{let[T,P,U,j]=D,q=Lf(B(M,U.shape),U,s),K,Y;if(!n&&!a?(K=Re(q,P,!1,!0),Y=Re(T,q,!0,!1)):!n&&a?(K=Re(q,P,!1,!1),Y=Re(q,T,!0,!1)):n&&!a?(K=Re(P,q,!1,!0),Y=Re(T,q,!1,!1)):(K=Re(P,q,!0,!0),Y=Re(q,T,!0,!0)),r!=null){let te=zf(j,q);return[K,Y,te]}else return[K,Y]},$={a:x,b:w,bias:I,preluActivationWeights:N},A={transposeA:n,transposeB:a,activation:s,leakyreluAlpha:o};return r==null?mr((M,D,T)=>{let P=L.runKernel(li,$,A);return T([M,D,P]),{value:B(P,y),gradFunc:_}})(x,w):mr((M,D,T,P)=>{let U=L.runKernel(li,$,A);return P([M,D,U,T]),{value:B(U,y),gradFunc:_}})(x,w,I)}var RL=z({fusedMatMul_:DL});function ML(e){return Of(e,.54,.46)}var PL=z({hammingWindow_:ML});function OL(e){return Of(e,.5,.5)}var ZS=z({hannWindow_:OL});function LL(e,t,n,a=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(He(e,s,t)),s+=n;if(a)for(;s`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),R(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),R(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),R(a.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${a.length}.`),R(a[0]>=1&&a[1]>=1,()=>`cropSize must be atleast [1,1], but was ${a}`),R(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 L.runKernel(nu,p,d)}var VL=z({cropAndResize_:BL});function UL(e){let t=E(e,"image","flipLeftRight","float32");R(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return L.runKernel(lu,n,{})}var GL=z({flipLeftRight_:UL});function HL(e){let t=E(e,"image","grayscaleToRGB"),n=t.rank-1,a=t.shape[n];R(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),R(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,Wn(t,r)}var jL=z({grayscaleToRGB_:HL});function qL(e,t,n=0,a=.5){let r=E(e,"image","rotateWithOffset","float32");R(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 L.runKernel(ju,s,i)}var KL=z({rotateWithOffset_:qL});function ep(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),R(0<=a&&a<=1,()=>`iouThreshold must be in [0, 1], but was '${a}'`),R(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),R(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),R(t.rank===1,()=>"scores must be a 1D tensor"),R(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),R(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:a,scoreThreshold:r,softNmsSigma:s}}function XL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=E(e,"boxes","nonMaxSuppression","float32"),i=E(t,"scores","nonMaxSuppression","float32"),o=ep(s,i,n,a,r);n=o.maxOutputSize,a=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:a,scoreThreshold:r};return L.runKernel(Tu,{boxes:s,scores:i},l)}var YL=z({nonMaxSuppression_:XL});function ZL(e,t,n){let a=JL(e,t,n),r=a<0?-(a+1):a;e.splice(r,0,t)}function JL(e,t,n){return ez(e,t,n||QL)}function QL(e,t){return e>t?1:e>>1);let o=n(t,e[s]);o>0?a=s+1:(r=s,i=!o)}return i?a:-a-1}function QS(e,t,n,a,r){return mw(e,t,n,a,r,0)}function eN(e,t,n,a,r,s){return mw(e,t,n,a,r,0,!1,s,!0)}function tN(e,t,n,a,r,s){return mw(e,t,n,a,r,s,!0)}function mw(e,t,n,a,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;gr&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(Pk);let p=s>0?-.5/s:0,d=[],c=[];for(;d.length0;){let g=u.pop(),{score:b,boxIndex:y,suppressBeginIndex:x}=g;if(b=x;--I){let N=tz(e,y,d[I]);if(N>=a){w=!0;break}if(g.score=g.score*nz(a,p,N),g.score<=r)break}g.suppressBeginIndex=d.length,w||(g.score===b?(d.push(y),c.push(g.score)):g.score>r&&ZL(u,g,Pk))}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 tz(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),b=Math.min(o,d),y=Math.min(l,c),x=Math.max(b-f,0)*Math.max(y-g,0);return x/(h+m-x)}function nz(e,t,n){let a=Math.exp(t*n*n);return n<=e?a:0}function Pk(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function az(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=E(e,"boxes","nonMaxSuppressionAsync"),i=E(t,"scores","nonMaxSuppressionAsync"),o=ep(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}=QS(u,p,n,a,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),Ke(d,"int32")}var rz=az;function sz(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=E(e,"boxes","nonMaxSuppression"),o=E(t,"scores","nonMaxSuppression"),l=ep(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=L.runKernel(Nu,u,p);return{selectedIndices:d[0],selectedScores:d[1]}}var iz=z({nonMaxSuppressionWithScore_:sz});async function oz(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=E(e,"boxes","nonMaxSuppressionAsync"),o=E(t,"scores","nonMaxSuppressionAsync"),l=ep(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}=tN(p,d,n,a,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ke(c,"int32"),selectedScores:Ke(h)}}var lz=oz;function uz(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=E(e,"boxes","nonMaxSuppression"),o=E(t,"scores","nonMaxSuppression"),l=ep(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=L.runKernel(Su,c,h);return{selectedIndices:m[0],validOutputs:m[1]}}var pz=z({nonMaxSuppressionPadded_:uz});async function cz(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=E(e,"boxes","nonMaxSuppressionAsync"),o=E(t,"scores","nonMaxSuppressionAsync"),l=ep(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}=eN(c,h,u,p,d,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:Ke(m,"int32"),validOutputs:ke(f,"int32")}}var dz=cz;function hz(e,t,n=!1,a=!1){let r=E(e,"images","resizeBilinear");R(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),R(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),R(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=B(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=L.runKernel(oo,o,l);return i?B(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var nN=z({resizeBilinear_:hz});function mz(e,t,n=!1,a=!1){let r=E(e,"images","resizeNearestNeighbor");R(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),R(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),R(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),R(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=B(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=L.runKernel(io,o,l);return i?B(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var aN=z({resizeNearestNeighbor_:mz});function fz(e,t="binary",n=!1,a=.5){let r=E(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=W(Ke([a]),255),p,d,c,h;if(R(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),R(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]}.`),R(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),R(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,d,c]=Vn(r,[1,1,1],-1);let f=W(p,s),g=W(d,i),b=W(c,o);h=Q(Q(f,g),b)}else h=e;if(t==="otsu"){let f=Nv(le(Cf(h),"int32"),Bn([]),256);u=gz(f,l)}let m=n?_s(h,u):jn(h,u);return le(W(m,255),"int32")}function gz(e,t){let n=Ke([-1]),a=Ke([0]),r=Ke([0]),s,i,o,l,u,p;for(let d=0;d`Error in transform: image must be rank 4,but got rank ${i.rank}.`),R(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"),R(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 L.runKernel(Uu,l,u)}var xz=z({transform_:yz});function vz(e,t,n){R(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),R(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let a=E(e,"a","bandPart");R(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=B(El(0,s,1,"int32"),[-1,1]),l=El(0,i,1,"int32"),u=ce(o,l),p=$a(_s(u,ke(+t,"int32")),Cs(u,ke(-n,"int32"))),d=It([s,i],a.dtype);return B(Rt(mt(B(a,[-1,s,i])).map(c=>fn(p,c,d))),r)}var wz=z({bandPart_:vz});function kz(e){let t;if(Array.isArray(e)){t=!1,R(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`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=Vn(e,e.shape[0],0).map(r=>$s(r,[0]));R(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{let s=a[r];if(r>0)for(let i=0;i=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return Ok(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),a=mt(B(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];a.forEach(l=>{let[u,p]=Ok(l,t);r.push(u),s.push(p)});let i=B(Rt(r,0),e.shape),o=B(Rt(s,0),e.shape);return[i,o]}}function Ok(e,t=!1){return L.tidy(()=>{R(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=yf(n),s=cr(e),i=Ea([[1]],[1,1]),o=cr(i),l=n>=a?a:n;for(let u=0;u{let h=He(s,[u,u],[n-u,1]),m=Xu(h),f=He(s,[u,u],[1,1]),g=fn(jn(f,0),Ea([[-1]]),Ea([[1]])),b=ce(f,W(g,m)),y=fe(h,b);y.shape[0]===1?o=cr(i):o=Qe([i,He(y,[1,0],[y.shape[0]-1,y.shape[1]])],0);let x=kt(fe(Re(g,b),m)),w=He(s,[u,0],[n-u,a]),I=W(x,o),N=Ae(o);if(u===0)s=ce(w,Re(I,Re(N,w)));else{let A=ce(w,Re(I,Re(N,w)));s=Qe([He(s,[0,0],[u,a]),A],0)}let _=Ae(I),$=He(r,[0,u],[n,r.shape[1]-u]);if(u===0)r=ce($,Re(Re($,o),_));else{let A=ce($,Re(Re($,o),_));r=Qe([He(r,[0,0],[n,u]),A],1)}return[o,s,r]}),Me([p,d,c])}return!t&&n>a&&(r=He(r,[0,0],[n,a]),s=He(s,[0,0],[a,a])),[r,s]})}var Sz=z({qr_:Tz}),In;(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"})(In||(In={}));function Nz(e,t,n=In.SUM_BY_NONZERO_WEIGHTS){let a=E(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=E(t,"weights","computeWeightedLoss"));let s=r==null?a:W(a,r);if(n===In.NONE)return s;if(n===In.SUM)return ye(s);if(n===In.MEAN){if(r==null)return _t(s);{let i=a.size/r.size,o=fe(ye(s),ye(r));return i>1?fe(o,ke(i)):o}}if(n===In.SUM_BY_NONZERO_WEIGHTS){if(r==null)return fe(ye(s),ke(a.size));{let i=W(r,Qn(a.shape)),o=le(ye(gi(i,ke(0))),"float32");return fe(ye(s),o)}}throw Error(`Unknown reduction: ${n}`)}var Mr=z({computeWeightedLoss_:Nz});function Cz(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=E(e,"labels","absoluteDifference"),s=E(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=E(n,"weights","absoluteDifference")),_n(r.shape,s.shape,"Error in absoluteDifference: ");let o=Lt(ce(r,s));return Mr(o,i,a)}var _z=z({absoluteDifference_:Cz});function Ez(e,t,n,a,r=In.SUM_BY_NONZERO_WEIGHTS){let s=E(e,"labels","cosineDistance"),i=E(t,"predictions","cosineDistance"),o=null;a!=null&&(o=E(a,"weights","cosineDistance")),_n(s.shape,i.shape,"Error in cosineDistance: ");let l=ke(1),u=ce(l,ye(W(s,i),n,!0));return Mr(u,o,r)}var $z=z({cosineDistance_:Ez});function Az(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=E(e,"labels","hingeLoss"),s=E(t,"predictions","hingeLoss"),i=null;n!=null&&(i=E(n,"weights","hingeLoss")),_n(r.shape,s.shape,"Error in hingeLoss: ");let o=ke(1);r=ce(W(ke(2),r),o);let l=Xe(ce(o,W(r,s)));return Mr(l,i,a)}var Fz=z({hingeLoss_:Az});function Dz(e,t,n,a=1,r=In.SUM_BY_NONZERO_WEIGHTS){let s=E(e,"labels","huberLoss"),i=E(t,"predictions","huberLoss"),o=null;n!=null&&(o=E(n,"weights","huberLoss")),_n(s.shape,i.shape,"Error in huberLoss: ");let l=ke(a),u=Lt(ce(i,s)),p=Ju(u,l),d=ce(u,p),c=Q(W(ke(.5),ut(p)),W(l,d));return Mr(c,o,r)}var Rz=z({huberLoss_:Dz});function Mz(e,t,n,a=1e-7,r=In.SUM_BY_NONZERO_WEIGHTS){let s=E(e,"labels","logLoss"),i=E(t,"predictions","logLoss"),o=null;n!=null&&(o=E(n,"weights","logLoss")),_n(s.shape,i.shape,"Error in logLoss: ");let l=ke(1),u=ke(a),p=kt(W(s,ta(Q(i,u)))),d=W(ce(l,s),ta(Q(ce(l,i),u))),c=ce(p,d);return Mr(c,o,r)}var Pz=z({logLoss_:Mz});function Oz(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=E(e,"labels","meanSquaredError"),s=E(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=E(n,"weights","meanSquaredError")),_n(r.shape,s.shape,"Error in meanSquaredError: ");let o=Rf(r,s);return Mr(o,i,a)}var Lz=z({meanSquaredError_:Oz});function zz(e,t){let n=E(e,"labels","sigmoidCrossEntropyWithLogits"),a=E(t,"logits","sigmoidCrossEntropyWithLogits");_n(n.shape,a.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=Xe(a),s=W(a,n),i=Qc(gn(kt(Lt(a))));return Q(ce(r,s),i)}function Wz(e,t,n,a=0,r=In.SUM_BY_NONZERO_WEIGHTS){let s=E(e,"multiClassLabels","sigmoidCrossEntropy"),i=E(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=E(n,"weights","sigmoidCrossEntropy")),_n(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),a>0){let u=ke(a),p=ke(1),d=ke(.5);s=Q(W(s,ce(p,u)),W(d,u))}let l=zz(s,i);return Mr(l,o,r)}var Bz=z({sigmoidCrossEntropy_:Wz});function Vz(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 mr((a,r,s)=>{let i=kf(r,[n],!0),o=ce(le(r,"float32"),i);s([a,o]);let l=kt(W(o,a));return{value:ye(l,[n]),gradFunc:(u,p)=>{let[d,c]=p,h=fi(u.shape,[n]);return[W(B(u,h),ce(le(d,"float32"),gn(c))),W(B(u,h),ce(gn(c),le(d,"float32")))]}}})(e,t)}function Uz(e,t,n,a=0,r=In.SUM_BY_NONZERO_WEIGHTS){let s=E(e,"onehotLabels","softmaxCrossEntropy"),i=E(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=E(n,"weights","softmaxCrossEntropy")),_n(s.shape,i.shape,"Error in softmaxCrossEntropy: "),a>0){let u=ke(a),p=ke(1),d=ke(s.shape[1]);s=Q(W(s,ce(p,u)),fe(u,d))}let l=Vz(s,i);return Mr(l,o,r)}var Gz=z({softmaxCrossEntropy_:Uz});function Hz(e,t,n,a){let r=E(e,"indices","sparseFillEmptyRows","int32"),s=E(t,"values","sparseFillEmptyRows"),i=E(n,"denseShape","sparseFillEmptyRows","int32"),o=E(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=L.runKernel(Rc,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var jz=z({sparseFillEmptyRows_:Hz});function qz(e,t,n){let a=E(e,"inputIndices","sparseReshape","int32"),r=E(t,"inputShape","sparseReshape","int32"),s=E(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=L.runKernel(Wu,i);return{outputIndices:o[0],outputShape:o[1]}}var Kz=z({sparseReshape_:qz});function Xz(e,t,n){let a=E(e,"data","sparseSegmentMean"),r=E(t,"indices","sparseSegmentMean","int32"),s=E(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 L.runKernel(Mc,i)}var Yz=z({sparseSegmentMean_:Xz});function Zz(e,t,n){let a=E(e,"data","sparseSegmentSum"),r=E(t,"indices","sparseSegmentSum","int32"),s=E(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 L.runKernel(Pc,i)}var Jz=z({sparseSegmentSum_:Zz});function Qz(e,t,n,a,r,s,i,o){let l=E(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=E(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=L.runKernel(Lc,d,p);return{nGrams:c[0],nGramsSplits:c[1]}}var eW=z({stringNGrams_:Qz});function tW(e,t,n=!0){let a=E(e,"input","stringSplit","string"),r=E(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=L.runKernel(zc,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var nW=z({stringSplit_:tW});function aW(e,t){let n=E(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 L.runKernel(Wc,r,a)}var rW=z({stringToHashBucketFast_:aW}),rN={fft:sd,ifft:Al,rfft:id,irfft:Df},sN={hammingWindow:PL,hannWindow:ZS,frame:JS,stft:WL},Er={flipLeftRight:GL,grayscaleToRGB:jL,resizeNearestNeighbor:aN,resizeBilinear:nN,rotateWithOffset:KL,cropAndResize:VL,nonMaxSuppression:YL,nonMaxSuppressionAsync:rz,nonMaxSuppressionWithScore:iz,nonMaxSuppressionWithScoreAsync:lz,nonMaxSuppressionPadded:pz,nonMaxSuppressionPaddedAsync:dz,threshold:bz,transform:xz},fw={bandPart:wz,gramSchmidt:Iz,qr:Sz},iN={absoluteDifference:_z,computeWeightedLoss:Mr,cosineDistance:$z,hingeLoss:Fz,huberLoss:Rz,logLoss:Pz,meanSquaredError:Lz,sigmoidCrossEntropy:Bz,softmaxCrossEntropy:Gz},oN={sparseFillEmptyRows:jz,sparseReshape:Kz,sparseSegmentMean:Yz,sparseSegmentSum:Jz},lN={stringNGrams:eW,stringSplit:nW,stringToHashBucketFast:rW},Pr=class extends eS{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 Me(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 xS(e,t)}dispose(){this.iterations_!=null&&Me(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ke(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(Pr,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Vf=class extends Pr{constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t],r=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:O(()=>qe(a).variable(r))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:O(()=>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;O(()=>{let l=Q(W(i,this.rho),W(ut(s),1-this.rho)),u=W(fe(un(Q(o,this.epsilon)),un(Q(i,this.epsilon))),s),p=Q(W(o,this.rho),W(ut(u),1-this.rho));i.assign(l),o.assign(p);let d=Q(W(u,-this.learningRate),a);a.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Me(this.accumulatedGrads.map(e=>e.variable)),Me(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)}};Vf.className="Adadelta";Ts(Vf);var Uf=class extends Pr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:O(()=>$n(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;O(()=>{let i=Q(s,ut(r));s.assign(i);let o=Q(W(fe(r,un(Q(i,L.backend.epsilon()))),-this.learningRate),a);a.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Me(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)}};Uf.className="Adagrad";Ts(Uf);var Gf=class extends Pr{constructor(e,t,n,a=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=a,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],O(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(n).variable()}),a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=ce(1,this.accBeta1),a=ce(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:O(()=>qe(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:O(()=>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=Q(W(u,this.beta1),W(l,1-this.beta1)),c=Q(W(p,this.beta2),W(ut(l),1-this.beta2)),h=fe(d,n),m=fe(c,a);u.assign(d),p.assign(c);let f=Q(W(fe(h,Q(un(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(W(this.accBeta1,this.beta1)),this.accBeta2.assign(W(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Me(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Me(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),O(()=>{this.accBeta1.assign(Rr(this.beta1,this.iterations_+1)),this.accBeta2.assign(Rr(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)}};Gf.className="Adam";Ts(Gf);var Hf=class extends Pr{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=[],O(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=ce(1,this.accBeta1),a=fe(-this.learningRate,Q(W(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.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=Q(W(u,this.beta1),W(l,1-this.beta1)),c=W(p,this.beta2),h=Lt(l),m=br(c,h);u.assign(d),p.assign(m);let f=Q(W(fe(a,n),fe(d,Q(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(Q(this.iteration,1)),this.accBeta1.assign(W(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Me(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Me(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}};Hf.className="Adamax";Ts(Hf);var od=class extends Pr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}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=L.registeredVariables[t];O(()=>{let s=Q(W(this.c,a),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Qt(ke(-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)}};od.className="SGD";Ts(od);var jf=class extends od{constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${t}/momentum`,variable:O(()=>qe(a).variable(!1))});let r=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&O(()=>{let i,o=Q(W(this.m,r),s);this.useNesterov?i=Q(W(this.c,Q(s,W(o,this.m))),a):i=Q(W(this.c,o),a),r.assign(o),a.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Me(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)}};jf.className="Momentum";Ts(jf);var qf=class extends Pr{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=L.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:O(()=>qe(a).variable(r))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:O(()=>qe(a).variable(r))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:O(()=>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;O(()=>{let l=Q(W(i,this.decay),W(ut(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[n].variable,p=Q(W(u,this.decay),W(s,1-this.decay)),d=fe(W(s,this.learningRate),un(ce(l,Q(ut(p),this.epsilon)))),c=Q(W(o,this.momentum),d);i.assign(l),u.assign(p),o.assign(c);let h=ce(a,c);a.assign(h)}else{let u=Q(W(i,this.decay),W(ut(s),1-this.decay)),p=Q(W(o,this.momentum),fe(W(s,this.learningRate),un(Q(u,this.epsilon))));i.assign(u),o.assign(p);let d=ce(a,p);a.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Me(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Me(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Me(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)}};qf.className="RMSProp";Ts(qf);var Qr=class{static sgd(e){return new od(e)}static momentum(e,t,n=!1){return new jf(e,t,n)}static rmsprop(e,t=.9,n=0,a=null,r=!1){return new qf(e,t,n,a,r)}static adam(e=.001,t=.9,n=.999,a=null){return new Gf(e,t,n,a)}static adadelta(e=.001,t=.95,n=null){return new Vf(e,t,n)}static adamax(e=.002,t=.9,n=.999,a=null,r=0){return new Hf(e,t,n,a,r)}static adagrad(e,t=.1){return new Uf(e,t)}},Xs={sgd:Qr.sgd,momentum:Qr.momentum,adadelta:Qr.adadelta,adagrad:Qr.adagrad,rmsprop:Qr.rmsprop,adamax:Qr.adamax,adam:Qr.adam},sW=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function gw(){return new Promise(e=>sW(()=>e()))}var C={};Fe(C,{ERF_A1:()=>vW,ERF_A2:()=>wW,ERF_A3:()=>kW,ERF_A4:()=>IW,ERF_A5:()=>TW,ERF_P:()=>xW,PARALLELIZE_THRESHOLD:()=>bw,RowPartitionType:()=>or,SELU_SCALE:()=>pN,SELU_SCALEALPHA:()=>uN,applyActivation:()=>Wf,assertAndGetBroadcastShape:()=>ct,assertAxesAreInnerMostDims:()=>dO,assertParamsConsistent:()=>iW,assignToTypedArray:()=>$W,axesAreInnerMostDims:()=>Wv,calculateShapes:()=>GT,checkEinsumDimSizes:()=>PW,checkPadOnDimRoundingMode:()=>En,combineLocations:()=>mS,combineRaggedTensorToTensorShapes:()=>lW,complexWithEvenIndex:()=>CW,complexWithOddIndex:()=>_W,computeConv2DInfo:()=>Xc,computeConv3DInfo:()=>iS,computeDefaultPad:()=>wv,computeDilation2DInfo:()=>hP,computeOptimalWindowSize:()=>dW,computeOutAndReduceShapes:()=>fS,computeOutShape:()=>oW,computePool2DInfo:()=>sS,computePool3DInfo:()=>mP,convertConv2DDataFormat:()=>oS,decodeEinsumEquation:()=>RW,eitherStridesOrDilationsAreOne:()=>gr,expandShapeToKeepDim:()=>fi,exponent:()=>FW,exponents:()=>AW,fromStringArrayToUint8:()=>aB,fromUint8ToStringArray:()=>nB,getAxesPermutation:()=>gS,getBroadcastDims:()=>BT,getComplexWithIndex:()=>EW,getEinsumComputePath:()=>OW,getEinsumPermutation:()=>MW,getFusedBiasGradient:()=>zf,getFusedDyActivation:()=>Lf,getImageCenter:()=>hW,getInnerMostAxes:()=>hO,getPermuted:()=>fW,getRaggedRank:()=>pW,getReductionAxes:()=>Wt,getReshaped:()=>mW,getReshapedPermuted:()=>gW,getRowPartitionTypesHelper:()=>uW,getSliceBeginCoords:()=>bW,getSliceSize:()=>yW,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>BW,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>VW,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>UW,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>jW,getSparseReshapeInputOutputMismatchErrorMessage:()=>KW,getSparseReshapeInputOutputMultipleErrorMessage:()=>qW,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>GW,getSparseReshapeNegativeOutputDimErrorMessage:()=>HW,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>JW,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>XW,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>YW,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>ZW,getUndoAxesPermutation:()=>Bv,isIdentityPermutation:()=>LW,log:()=>$D,mergeRealAndImagArrays:()=>SW,prepareAndValidate:()=>UT,prepareSplitSize:()=>WW,segment_util:()=>cN,shouldFuse:()=>Bf,slice_util:()=>qt,splitRealAndImagArrays:()=>NW,tupleValuesAreOne:()=>ps,upcastType:()=>ma,validateDefaultValueShape:()=>cW,validateInput:()=>pv,validateUpdateShape:()=>uv,warn:()=>ts});function iW(e,t){let n=e[0].length;e.forEach((r,s)=>{R(r.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),R(t>=0&&t`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`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 oW(e,t){let n=e[0].slice();for(let a=1;a=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 uW(e){let t={FIRST_DIM_SIZE:or.FIRST_DIM_SIZE,VALUE_ROWIDS:or.VALUE_ROWIDS,ROW_LENGTHS:or.ROW_LENGTHS,ROW_SPLITS:or.ROW_SPLITS,ROW_LIMITS:or.ROW_LIMITS,ROW_STARTS:or.ROW_STARTS},n=[];for(let a of e)if(a in t)n.push(t[a]);else break;return n}function pW(e){return e.length===0?0:e[0]===or.FIRST_DIM_SIZE?e.length-1:e.length}function cW(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=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 bw=30;function dW(e){return e<=bw?e:Jh(e,Math.floor(Math.sqrt(e)))}function hW(e,t,n){let a=n*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[a,r]}function mW(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=t*2+1||i%2===1?s.push(i):r.push(i);a.push(...r),a.push(0),a.push(...s)}return a}function gW(e,t,n,a=!0){let r=[];a?r.push(e[0]/n):r.push(e[0]*n);for(let s=1;s/g,Lk=",",zk="...";function RW(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(DW,"").length)/My.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 ("${My}").`);let[a,r]=e.split(My);R(a.indexOf(zk)===-1,()=>`The ellipsis notation ("${zk}") is not supported yet.`);let s=a.split(Lk),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;cm.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;cr!==-1),{permutationIndices:n,expandDims:a}}function PW(e,t,n){let a=new Array(e);for(let r=0;r`Expected dimension ${a[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function OW(e,t){let n=e,a=[],r=0;e.length===0&&n.push(-1),r=e.length+1;for(let i=0;it===n)}function zW(e,t){let n=[];for(let a=0;a"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);R(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}R(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 BW(e){return`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${e}`}function VW(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function UW(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function GW(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function HW(e,t){return`size ${e} must be non-negative, not ${t}`}function jW(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function qW(e,t){let n=bt(e),a=bt(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 KW(e,t){let n=bt(e),a=bt(t);return`Input to reshape is a tensor with ${n} dense values, but the requested shape has ${a}. inputShape=${e} outputShape=${t}`}function XW(){return"segment ids must be >= 0"}function YW(){return"segment ids are not increasing"}function ZW(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function JW(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var cN={};Fe(cN,{collectGatherOpShapeInfo:()=>tB,computeOutShape:()=>eB,segOpComputeOptimalWindowSize:()=>QW});function QW(e,t){let n=!1,a;for(e<=bw?(a=e,n=!0):a=Jh(e,Math.floor(Math.sqrt(e)));!n;)a>t||a===e?n=!0:a=Jh(e,a+1);return a}function eB(e,t,n){let a=[],r=e.length;for(let s=0;sr))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(nrm(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function aB(e){return e.map(t=>Gc(t))}var yr={};Fe(yr,{nonMaxSuppressionV3Impl:()=>QS,nonMaxSuppressionV4Impl:()=>eN,nonMaxSuppressionV5Impl:()=>tN,whereImpl:()=>VS});var dN={kernelName:Ul,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,So(le(n,"float32"),-1))}}},rB={kernelName:Gl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=ut(le(n,"float32")),r=un(ce(ke(1),a));return kt(fe(e,r))}}}},sB={kernelName:Hl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=un(ce(ut(le(n,"float32")),1));return fe(e,a)}}}},iB={kernelName:xs,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=e,i=Wt(n.shape,r);return i.length>0&&(s=ye(s,i)),B(s,n.shape)},b:()=>{let s=e,i=Wt(a.shape,r);return i.length>0&&(s=ye(s,i)),B(s,a.shape)}}}},oB={kernelName:Ti,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((a,r)=>{n[r]=()=>e.clone()}),n}},lB={kernelName:Si,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},uB={kernelName:Sc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},pB={kernelName:Kl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,un(ce(ke(1),ut(le(n,"float32")))))}}},cB={kernelName:Xl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=un(Q(ke(1),ut(le(n,"float32"))));return fe(e,a)}}}},dB={kernelName:Jl,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=Q(ut(n),ut(a)),i=W(e,fe(a,s)),o=Wt(n.shape,r);return o.length>0&&(i=ye(i,o)),B(i,n.shape)},b:()=>{let s=Q(ut(n),ut(a)),i=kt(W(e,fe(n,s))),o=Wt(a.shape,r);return o.length>0&&(i=ye(i,o)),B(i,a.shape)}}}},hB={kernelName:Yl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,Q(ut(le(n,"float32")),1))}}},mB={kernelName:Zl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ce(ke(1),ut(le(n,"float32"))))}}};function fB(e,t,n,a,r,s){let i=E(e,"dy","avgPool3dGrad"),o=E(t,"input","avgPool3dGrad"),l=i,u=o,p=!1;o.rank===4&&(p=!0,l=B(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=B(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),R(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),R(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),En("avgPool3dGrad",r,s);let d={dy:l,input:u},c={filterSize:n,strides:a,pad:r,dimRoundingMode:s},h=L.runKernel(Dm,d,c);return p?B(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var gB=z({avgPool3dGrad_:fB}),bB={kernelName:Nc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>gB(e,a,r,s,i,o)}}};function yB(e,t,n,a,r){let s=E(e,"dy","avgPoolGrad"),i=E(t,"input","avgPoolGrad");R(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=B(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=B(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),R(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=L.runKernel(Fm,p,d);return u?B(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var xB=z({avgPoolGrad_:yB}),vB={kernelName:Ni,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i}=n;return{x:()=>xB(e,a,r,s,i)}}},wB={kernelName:Ci,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)}}},kB={kernelName:Ql,gradFunc:(e,t,n)=>{let{blockShape:a,crops:r}=n;return{x:()=>nd(e,a,r)}}},IB={kernelName:hT,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;l1&&o.push(l);return{x:()=>ye(e,o,!0)}}},TB={kernelName:_i,gradFunc:e=>({x:()=>e.clone()})},SB={kernelName:Ei,gradFunc:e=>({x:()=>qe(e)})},NB={kernelName:vs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{clipValueMin:r,clipValueMax:s}=n;return{x:()=>fn($a(Cs(a,r),_s(a,s)),e,qe(e))}}},CB={kernelName:Cc,inputsToSave:["x"],gradFunc:dN.gradFunc},_B={kernelName:eu,saveAllInputs:!0,gradFunc:(e,t,n)=>{let a=t.map(o=>o.shape),{axis:r}=n,s=Aa(r,t[0].shape)[0],i=a.map(o=>o[s]);return Vn(e,i,s).map(o=>()=>o)}},EB={kernelName:$i,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return R(ps(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>Fv(a.shape,e,r,i,o,l),filter:()=>hw(a,e,r.shape,i,o,l)}}},$B={kernelName:Ai,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Dt(e,r,s,i,o,1,l),filter:()=>hw(e,a,r.shape,s,i,o,l)}}};function AB(e,t,n,a,r){let s=e;e.rank===4&&(s=B(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=B(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),R(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),R(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),R(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),R(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),R(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 L.runKernel(Lm,o,l)}var FB=z({conv3DBackpropFilter_:AB}),DB={kernelName:_c,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s}=n;R(ps(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:()=>pS(i.shape,e,o,r,s),filter:()=>FB(i,e,o.shape,r,s)}}},RB={kernelName:Fi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(kt($f(le(n,"float32"))),e)}}},MB={kernelName:Di,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(Af(le(n,"float32")),e)}}},PB={kernelName:Ri,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r,exclusive:s,reverse:i}=n;return{x:()=>{let o=gS([r],a.rank),l=bf(e,r,s,!i);return o!=null&&(l=Ae(l,o)),l}}}},OB={kernelName:Mi,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s,dimRoundingMode:i}=n,o=a==null?[1,1]:a;R(ps(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,u]=t;return R(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),R(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),R(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]}.`),R(gr(r,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${r} and dilations '${o}'.`),En("depthwiseConv2d",s,i),{x:()=>YS(l.shape,e,u,r,s,o,i),filter:()=>XS(l,e,u.shape,r,s,o,i)}}},LB={kernelName:Ec,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:()=>L.runKernel(Qh,s,n),filter:()=>L.runKernel(em,i,n)}}},zB={kernelName:Oi,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,a={dy:e,y:n};return{x:()=>L.runKernel(Hm,a)}}},WB={kernelName:ru,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=W(gn(kt(ut(n))),2/Math.sqrt(Math.PI));return{x:()=>W(e,a)}}},BB={kernelName:Li,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n)}}},VB={kernelName:iu,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>B(e,n.shape)}}},UB={kernelName:ou,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,gn(n))}}},GB={kernelName:zi,gradFunc:e=>({x:()=>qe(e)})},HB={kernelName:Wi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=fe(e,le(a,"float32")),i=Wt(n.shape,r);return i.length>0?B(ye(s,i),n.shape):s},b:()=>{let s=W(e,le(n,"float32")),i=Wt(a.shape,r);i.length>0&&(s=B(ye(s,i),a.shape));let o=ut(a);return kt(fe(s,le(o,"float32")))}}}},jB={kernelName:Bi,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:a}=n,[r,s,i,o]=t,l=o==null?ke(1):o,u=Wt(s.shape,r.shape),p=[];if(s.rank===1){for(let f=0;fs.rank===1?B(W(W(e,Wn(B(h,[1,1,1,s.shape[0]]),p)),l),r.shape):B(W(W(e,h),l),r.shape),mean:()=>{let f=W(W(h,ke(-1)),c);return s.rank===1&&(f=ye(f,u)),B(f,s.shape)},variance:()=>{let f=W(W(m,d),c);return s.rank===1&&(f=ye(f,u)),B(f,s.shape)},scale:()=>{let f=W(d,h),g=W(e,f);return s.rank===1&&(g=ye(g,u)),B(g,s.shape)},offset:()=>{let f=e;return s.rank===1&&(f=ye(f,u)),B(f,s.shape)}}}},qB={kernelName:uu,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[a,r]=t,{axis:s}=n,i=Aa(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=Wk(0,p),m=Wk(p+1,p+1+c),f=Bk([u,[l],d]),g=B(e,f),b=B(r,[l]),y=Bk([[p],h,m]),x=Ae(g,y),w=Pf(x,b,a.shape[i]),I=Bv(y);return w=Ae(w,I),w},indices:()=>r}}};function Wk(e,t){let n=[];for(let a=e;a{let[n,a]=t;return{a:()=>qe(n),b:()=>qe(a)}}},XB={kernelName:Ui,gradFunc:e=>({x:()=>le(e,"float32")})},YB={kernelName:du,gradFunc:e=>({x:()=>qe(e)})},ZB={kernelName:hu,gradFunc:e=>({x:()=>qe(e)})},JB={kernelName:mu,gradFunc:e=>({x:()=>qe(e)})},QB={kernelName:Gi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{alpha:r}=n,s=jn(a,0);return{x:()=>fn(s,e,W(e,r))}}},e4={kernelName:bu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,Q(n,1))}}},t4={kernelName:Hi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,le(n,"float32"))}}},n4={kernelName:fT,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n;return{logits:()=>{let s=gn(a);return ce(e,W(ye(e,r,!0),s))}}}};function a4(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 L.runKernel(Ym,o,l)}var r4=z({localResponseNormalizationBackprop_:a4}),s4={kernelName:Ac,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>r4(a,r,e,s,i,o,l)}}};function hN(e,t,n,a){return t.rankW(e,le(ea(n,t),e.dtype))}}var Vk={kernelName:ji,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{reductionIndices:r}=a,s=t[0],i=t[1],o=Aa(r,s.shape),l=hN(e,i,s,o);return{x:()=>l.x()}}},i4={kernelName:qi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>W(e,le(Cs(n,a),"float32")),b:()=>W(e,le(xf(n,a),"float32"))}}};function o4(e,t,n,a,r,s,i){let o=E(e,"dy","maxPool3dGrad"),l=E(t,"input","maxPool3dGrad"),u=E(n,"output","maxPool3dGrad"),p=o,d=l,c=u,h=!1;l.rank===4&&(h=!0,p=B(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),d=B(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),c=B(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),R(p.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${p.rank}.`),R(d.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${d.rank}.`),R(c.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${c.rank}.`),En("maxPool3dGrad",s,i);let m={dy:p,input:d,output:c},f={filterSize:a,strides:r,pad:s,dimRoundingMode:i},g=L.runKernel(Jm,m,f);return h?B(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var l4=z({maxPool3dGrad_:o4}),u4={kernelName:Fc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>l4(e,a,r,s,i,o,l)}}};function p4(e,t,n,a,r,s,i){let o=E(e,"dy","maxPoolGrad"),l=E(t,"input","maxPoolGrad"),u=E(n,"output","maxPoolGrad");R(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),R(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),R(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),En("maxPoolGrad",s,i);let p={dy:o,input:l,output:u},d={filterSize:a,strides:r,pad:s,dimRoundingMode:i};return L.runKernel(Zm,p,d)}var c4=z({maxPoolGrad_:p4}),d4={kernelName:Ki,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>c4(e,a,r,s,i,o)}}},h4={kernelName:Xi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n,s=Aa(r,a.shape),i=fS(a.shape,s)[1],o=bt(i);return{x:()=>{let l=a.shape.slice();s.forEach(p=>{l[p]=1});let u=B(e,l);return fe(W(u,Qn(a.shape,"float32")),o)}}}},m4={kernelName:Yi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{axis:r}=a,[s,i]=t,o=Aa(r,s.shape),l=hN(e,i,s,o);return{x:()=>l.x()}}},f4={kernelName:Zi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>W(e,le(_s(n,a),"float32")),b:()=>W(e,le(jn(n,a),"float32"))}}},g4={kernelName:Ji,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>He(e,s,a.shape)}}},b4={kernelName:wu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=Wt(n.shape,r);return s.length>0?B(ye(e,s),n.shape):e},b:()=>{let s=W(e,kt(Yu(fe(n,a)))),i=Wt(a.shape,r);return i.length>0?B(ye(s,i),a.shape):s}}}},y4={kernelName:Qi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=W(e,le(a,"float32")),i=Wt(n.shape,r);return i.length>0?B(ye(s,i),n.shape):s},b:()=>{let s=W(e,le(n,"float32")),i=Wt(a.shape,r);return i.length>0?B(ye(s,i),a.shape):s}}}},x4={kernelName:ku,gradFunc:e=>({x:()=>kt(e)})},v4={kernelName:eo,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>It(n.shape,"float32")}}},w4={kernelName:Cu,gradFunc:e=>({x:()=>qe(e)})},k4={kernelName:_u,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:a}=n;return mt(e,a).map(r=>()=>r)}},Uk={kernelName:to,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>He(e,s,a.shape)}}},I4={kernelName:no,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,a,r]=t,s=n,i=a,o=ct(s.shape,i.shape);return{a:()=>{let l=le(i,"float32"),u=W(e,W(l,Rr(s,ce(l,ke(1))))),p=Wt(s.shape,o);return p.length>0&&(u=ye(u,p)),B(u,s.shape)},b:()=>{let l=jn(s,0),u=fn(l,ta(s),qe(s)),p=W(e,W(r,u)),d=Wt(i.shape,o);return d.length>0&&(p=ye(p,d)),B(p,i.shape)}}}},T4={kernelName:ao,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,a]=t,r=jn(n,0);return{x:()=>fn(r,e,W(e,a)),alpha:()=>{let s=fn(r,qe(e),W(e,n)),i=Wt(a.shape,e.shape);return i.length>0&&(s=ye(s,i)),B(s,a.shape)}}}};function S4(e,t,n){let a=e.shape.slice();a[n]=1;let r=B(t,a),s=hc(e,n,!0,!1),i=hc(e,n,!0,!0),o=W(s,i);return W(r,o)}function N4(e,t,n){let a=e.shape.length,r=a-n.length,s=C.getAxesPermutation(n,a),i=e;s!=null&&(i=Ae(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=S4(u,t,r);if(p=p.reshape(i.shape),s!=null){let d=C.getUndoAxesPermutation(s);p=Ae(p,d)}return p}var C4={kernelName:ro,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:()=>N4(a,e,s)}}},_4={kernelName:Pi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=fe(e,le(a,"float32")),i=Wt(n.shape,r);return i.length>0?B(ye(s,i),n.shape):s},b:()=>{let s=W(e,le(n,"float32")),i=Wt(a.shape,r);i.length>0&&(s=B(ye(s,i),a.shape));let o=ut(a);return kt(fe(s,le(o,"float32")))}}}},E4={kernelName:Eu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,kt(ut(n)))}}},$4={kernelName:lo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=W(_s(n,6),So(n));return{x:()=>W(e,le(a,"float32"))}}},A4={kernelName:so,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,le(So(n),"float32"))}}},F4={kernelName:$u,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,n.shape)}}},D4={kernelName:oo,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>L.runKernel(rf,r,n)}}},R4={kernelName:io,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>L.runKernel(af,r,n)}}},M4={kernelName:uo,gradFunc:(e,t,n)=>{let{dims:a}=n,r=Aa(a,e.shape);return{x:()=>ga(e,r)}}},P4={kernelName:po,gradFunc:e=>({x:()=>qe(e)})},O4={kernelName:co,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>kt(fe(e,W(Rr(n,1.5),2)))}}},L4={kernelName:Fu,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>le(qe(n),"float32"),t:()=>W(e,le(n,e.dtype)),e:()=>W(e,le(ed(n),e.dtype))}}},z4={kernelName:Du,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=jn(n,ke(0)),r=ke(uN),s=ke(pN),i=W(e,s),o=W(W(e,r),gn(le(n,"float32")));return fn(a,i,o)}}}},W4={kernelName:mo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(n,ce(ke(1),n)))}}},B4={kernelName:Pu,gradFunc:e=>({x:()=>qe(e)})},V4={kernelName:ho,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(Zc(le(n,"float32")),e)}}},U4={kernelName:Mu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(gf(le(n,"float32")),e)}}},G4={kernelName:Ru,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{begin:r,size:s}=n,i=a.shape,[o,l]=QT(a,r,s),u=[];for(let p=0;pya(e,u)}}},H4={kernelName:bo,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{dim:r}=n,s=!0,i=W(e,a);return{logits:()=>ce(i,W(ye(i,[r],s),a))}}},j4={kernelName:Ou,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,ha(n))}}},Gk={kernelName:Lu,gradFunc:(e,t,n)=>{let{blockShape:a,paddings:r}=n;return{x:()=>Yc(e,a,r)}}},Hk={kernelName:zu,gradFunc:(e,t,n)=>{let{axis:a}=n;return{x:()=>Qe(e,a)}}},q4={kernelName:fo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,W(un(le(n,"float32")),2))}}},K4={kernelName:Oc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(le(n,"float32"),2))}}},X4={kernelName:yo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ke(2);return{a:()=>W(e,W(r,ce(n,a))),b:()=>W(e,W(r,ce(a,n)))}}},Y4={kernelName:ks,gradFunc:e=>({x:()=>qe(e)})},Z4={kernelName:xo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ct(n.shape,a.shape);return{a:()=>{let s=e,i=Wt(n.shape,r);return i.length>0&&(s=ye(s,i)),B(s,n.shape)},b:()=>{let s=e,i=Wt(a.shape,r);return i.length>0&&(s=ye(s,i)),B(kt(s),a.shape)}}}},J4={kernelName:go,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,r=a.shape.slice(),{axis:s}=n;Aa(s,a.shape).forEach(l=>{r[l]=1});let i=B(e,r),o=W(i,Qn(a.shape,"float32"));return{x:()=>o}}},Q4={kernelName:vo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ut(Zc(n)))}}},eV={kernelName:wo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(ce(ke(1),ut(n)),e)}}},tV={kernelName:ws,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{let a=n,{perm:r}=a,s=Bv(r);return{x:()=>Ae(e,s)}}},aV={kernelName:Gu,gradFunc:(e,t,n)=>{let a=n,{axis:r}=a;return{value:()=>Rt(e,r)}}},rV={kernelName:Bc,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>sV(e,n)}}};function sV(e,t){let n=br(t,qe(t)),a=Zu(e,n),r=Cs(t,ke(0,"int32")),s=a.rank-r.rank;for(let o=0;o({x:()=>qe(e)})},oV=[dN,rB,sB,iB,oB,lB,uB,pB,cB,dB,hB,mB,bB,vB,wB,kB,IB,TB,SB,NB,CB,_B,$B,EB,DB,RB,MB,PB,OB,LB,_4,zB,WB,BB,VB,UB,HB,GB,jB,qB,KB,XB,YB,ZB,JB,QB,e4,t4,n4,s4,Vk,Vk,i4,u4,d4,h4,m4,f4,g4,b4,y4,x4,v4,w4,k4,Uk,Uk,I4,T4,C4,E4,$4,A4,F4,D4,R4,M4,P4,O4,L4,z4,W4,B4,V4,U4,G4,H4,j4,Gk,Gk,Hk,Hk,q4,X4,K4,Y4,Z4,J4,Q4,eV,tV,nV,aV,rV,iV];for(let e of oV)gT(e);ne().prototype.abs=function(){return this.throwIfDisposed(),Lt(this)};ne().prototype.acos=function(){return this.throwIfDisposed(),hv(this)};ne().prototype.acosh=function(){return this.throwIfDisposed(),mv(this)};ne().prototype.add=function(e){return this.throwIfDisposed(),Q(this,e)};ne().prototype.all=function(e,t){return this.throwIfDisposed(),hf(this,e,t)};ne().prototype.any=function(e,t){return this.throwIfDisposed(),dc(this,e,t)};ne().prototype.argMax=function(e){return this.throwIfDisposed(),hi(this,e)};ne().prototype.argMin=function(e){return this.throwIfDisposed(),fv(this,e)};ne().prototype.asScalar=function(){return this.throwIfDisposed(),R(this.size===1,()=>"The array must have only 1 element."),B(this,[])};ne().prototype.asType=function(e){return this.throwIfDisposed(),le(this,e)};ne().prototype.as1D=function(){return this.throwIfDisposed(),B(this,[this.size])};ne().prototype.as2D=function(e,t){return this.throwIfDisposed(),B(this,[e,t])};ne().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),B(this,[e,t,n])};ne().prototype.as4D=function(e,t,n,a){return this.throwIfDisposed(),B(this,[e,t,n,a])};ne().prototype.as5D=function(e,t,n,a,r){return this.throwIfDisposed(),B(this,[e,t,n,a,r])};ne().prototype.asin=function(){return this.throwIfDisposed(),gv(this)};ne().prototype.asinh=function(){return this.throwIfDisposed(),bv(this)};ne().prototype.atan=function(){return this.throwIfDisposed(),yv(this)};ne().prototype.atan2=function(e){return this.throwIfDisposed(),xv(this,e)};ne().prototype.atanh=function(){return this.throwIfDisposed(),vv(this)};ne().prototype.avgPool=function(e,t,n,a){return this.throwIfDisposed(),ba(this,e,t,n,a)};ne().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Yc(this,e,t)};ne().prototype.batchNorm=function(e,t,n,a,r){return this.throwIfDisposed(),Ss(this,e,t,n,a,r)};ne().prototype.broadcastTo=function(e){return this.throwIfDisposed(),ri(this,e)};ne().prototype.cast=function(e){return this.throwIfDisposed(),le(this,e)};ne().prototype.ceil=function(){return this.throwIfDisposed(),Cv(this)};ne().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),tn(this,e,t)};ne().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof $e&&(e=[e]),Qe([this,...e],t)};ne().prototype.conv1d=function(e,t,n,a,r,s){return this.throwIfDisposed(),mf(this,e,t,n,a,r,s)};ne().prototype.conv2dTranspose=function(e,t,n,a,r){return this.throwIfDisposed(),ff(this,e,t,n,a,r)};ne().prototype.conv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Dt(this,e,t,n,a,r,s)};ne().prototype.cos=function(){return this.throwIfDisposed(),Zc(this)};ne().prototype.cosh=function(){return this.throwIfDisposed(),gf(this)};ne().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),hc(this,e,t,n)};ne().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),bf(this,e,t,n)};ne().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),Mv(this,e,t)};ne().prototype.depthwiseConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Ns(this,e,t,n,a,r,s)};ne().prototype.dilation2d=function(e,t,n,a,r){return this.throwIfDisposed(),Pv(this,e,t,n,a,r)};ne().prototype.divNoNan=function(e){return this.throwIfDisposed(),Ov(this,e)};ne().prototype.div=function(e){return this.throwIfDisposed(),fe(this,e)};ne().prototype.dot=function(e){return this.throwIfDisposed(),Lv(this,e)};ne().prototype.elu=function(){return this.throwIfDisposed(),Ku(this)};ne().prototype.equal=function(e){return this.throwIfDisposed(),ea(this,e)};ne().prototype.erf=function(){return this.throwIfDisposed(),zv(this)};ne().prototype.euclideanNorm=function(e,t){return this.throwIfDisposed(),Vv(this,e,t)};ne().prototype.exp=function(){return this.throwIfDisposed(),gn(this)};ne().prototype.expandDims=function(e){return this.throwIfDisposed(),mn(this,e)};ne().prototype.expm1=function(){return this.throwIfDisposed(),Uv(this)};ne().prototype.fft=function(){return this.throwIfDisposed(),sd(this)};ne().prototype.flatten=function(){return this.throwIfDisposed(),B(this,[this.size])};ne().prototype.floor=function(){return this.throwIfDisposed(),Yu(this)};ne().prototype.floorDiv=function(e){return this.throwIfDisposed(),df(this,e)};ne().prototype.gather=function(e,t){return this.throwIfDisposed(),Zu(this,e,t)};ne().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Cs(this,e)};ne().prototype.greater=function(e){return this.throwIfDisposed(),jn(this,e)};ne().prototype.ifft=function(){return this.throwIfDisposed(),Al(this)};ne().prototype.irfft=function(){return this.throwIfDisposed(),Df(this)};ne().prototype.isFinite=function(){return this.throwIfDisposed(),Gv(this)};ne().prototype.isInf=function(){return this.throwIfDisposed(),Hv(this)};ne().prototype.isNaN=function(){return this.throwIfDisposed(),jv(this)};ne().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Jc(this,e)};ne().prototype.lessEqual=function(e){return this.throwIfDisposed(),_s(this,e)};ne().prototype.less=function(e){return this.throwIfDisposed(),xf(this,e)};ne().prototype.localResponseNormalization=function(e,t,n,a){return this.throwIfDisposed(),qv(this,e,t,n,a)};ne().prototype.logSigmoid=function(){return this.throwIfDisposed(),Kv(this)};ne().prototype.logSoftmax=function(e){return this.throwIfDisposed(),wf(this,e)};ne().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),kf(this,e,t)};ne().prototype.log=function(){return this.throwIfDisposed(),ta(this)};ne().prototype.log1p=function(){return this.throwIfDisposed(),Qc(this)};ne().prototype.logicalAnd=function(e){return this.throwIfDisposed(),$a(this,e)};ne().prototype.logicalNot=function(){return this.throwIfDisposed(),ed(this)};ne().prototype.logicalOr=function(e){return this.throwIfDisposed(),If(this,e)};ne().prototype.logicalXor=function(e){return this.throwIfDisposed(),Xv(this,e)};ne().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Re(this,e,t,n)};ne().prototype.maxPool=function(e,t,n,a){return this.throwIfDisposed(),Mt(this,e,t,n,a)};ne().prototype.max=function(e,t){return this.throwIfDisposed(),_a(this,e,t)};ne().prototype.maximum=function(e){return this.throwIfDisposed(),br(this,e)};ne().prototype.mean=function(e,t){return this.throwIfDisposed(),_t(this,e,t)};ne().prototype.min=function(e,t){return this.throwIfDisposed(),mc(this,e,t)};ne().prototype.minimum=function(e){return this.throwIfDisposed(),Ju(this,e)};ne().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),Zv(this,e,t)};ne().prototype.mod=function(e){return this.throwIfDisposed(),Jv(this,e)};ne().prototype.mul=function(e){return this.throwIfDisposed(),W(this,e)};ne().prototype.neg=function(){return this.throwIfDisposed(),kt(this)};ne().prototype.norm=function(e,t,n){return this.throwIfDisposed(),Xu(this,e,t,n)};ne().prototype.notEqual=function(e){return this.throwIfDisposed(),gi(this,e)};ne().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),Cl(this,e,t,n)};ne().prototype.onesLike=function(){return this.throwIfDisposed(),na(this)};ne().prototype.pad=function(e,t){return this.throwIfDisposed(),ya(this,e,t)};ne().prototype.pool=function(e,t,n,a,r,s){return this.throwIfDisposed(),Qv(this,e,t,n,a,r,s)};ne().prototype.pow=function(e){return this.throwIfDisposed(),Rr(this,e)};ne().prototype.prelu=function(e){return this.throwIfDisposed(),ad(this,e)};ne().prototype.prod=function(e,t){return this.throwIfDisposed(),ew(this,e,t)};ne().prototype.reciprocal=function(){return this.throwIfDisposed(),aw(this)};ne().prototype.relu=function(){return this.throwIfDisposed(),Xe(this)};ne().prototype.relu6=function(){return this.throwIfDisposed(),Nf(this)};ne().prototype.reshapeAs=function(e){return this.throwIfDisposed(),B(this,e.shape)};ne().prototype.reshape=function(e){return this.throwIfDisposed(),B(this,e)};ne().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),nN(this,e,t,n)};ne().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),aN(this,e,t,n)};ne().prototype.reverse=function(e){return this.throwIfDisposed(),ga(this,e)};ne().prototype.rfft=function(){return this.throwIfDisposed(),id(this)};ne().prototype.round=function(){return this.throwIfDisposed(),Cf(this)};ne().prototype.rsqrt=function(){return this.throwIfDisposed(),_f(this)};ne().prototype.selu=function(){return this.throwIfDisposed(),Ef(this)};ne().prototype.separableConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Es(this,e,t,n,a,r,s)};ne().prototype.sigmoid=function(){return this.throwIfDisposed(),ha(this)};ne().prototype.sign=function(){return this.throwIfDisposed(),rw(this)};ne().prototype.sin=function(){return this.throwIfDisposed(),$f(this)};ne().prototype.sinh=function(){return this.throwIfDisposed(),Af(this)};ne().prototype.slice=function(e,t){return this.throwIfDisposed(),He(this,e,t)};ne().prototype.softmax=function(e){return this.throwIfDisposed(),Qa(this,e)};ne().prototype.softplus=function(){return this.throwIfDisposed(),Io(this)};ne().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),nd(this,e,t)};ne().prototype.split=function(e,t){return this.throwIfDisposed(),Vn(this,e,t)};ne().prototype.sqrt=function(){return this.throwIfDisposed(),un(this)};ne().prototype.square=function(){return this.throwIfDisposed(),ut(this)};ne().prototype.squaredDifference=function(e){return this.throwIfDisposed(),Rf(this,e)};ne().prototype.squeeze=function(e){return this.throwIfDisposed(),$s(this,e)};ne().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof $e?[this,e]:[this,...e];return Rt(n,t)};ne().prototype.step=function(e){return this.throwIfDisposed(),So(this,e)};ne().prototype.stridedSlice=function(e,t,n,a,r,s,i,o){return this.throwIfDisposed(),sw(this,e,t,n,a,r,s,i,o)};ne().prototype.sub=function(e){return this.throwIfDisposed(),ce(this,e)};ne().prototype.sum=function(e,t){return this.throwIfDisposed(),ye(this,e,t)};ne().prototype.tan=function(){return this.throwIfDisposed(),iw(this)};ne().prototype.tanh=function(){return this.throwIfDisposed(),mi(this)};ne().prototype.tile=function(e){return this.throwIfDisposed(),Wn(this,e)};ne().prototype.toBool=function(){return this.throwIfDisposed(),le(this,"bool")};ne().prototype.toFloat=function(){return this.throwIfDisposed(),le(this,"float32")};ne().prototype.toInt=function(){return this.throwIfDisposed(),le(this,"int32")};ne().prototype.topk=function(e,t){return this.throwIfDisposed(),ow(this,e,t)};ne().prototype.transpose=function(e){return this.throwIfDisposed(),Ae(this,e)};ne().prototype.unique=function(e){return this.throwIfDisposed(),lw(this,e)};ne().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),Pf(this,e,t)};ne().prototype.unstack=function(e){return this.throwIfDisposed(),mt(this,e)};ne().prototype.where=function(e,t){return this.throwIfDisposed(),fn(e,this,t)};ne().prototype.zerosLike=function(){return this.throwIfDisposed(),qe(this)};var Sr=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Sr.prototype)}},Ha=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Ha.prototype)}},H=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,H.prototype)}},Oe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Oe.prototype)}},mN=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,mN.prototype)}},fN=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;tn.toUpperCase())}var Ia={};function yw(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function ox(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>ox(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:ox(a))}}}function ld(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 H(`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 H(`${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 H(`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];ox(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 lV(e,t){return et?1:0}function Eh(e,t){return-1*lV(e,t)}function is(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function uV(e){if(e==null)throw new H(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function No(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new H(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function xw(e,t,n=0,a=1/0){return lr(n>=0),lr(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 ${gN(e)}.`)}function gN(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>gN(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function pV(e,t,n){let a=n!=null?n():v.now(),r;return(...s)=>{let i=n!=null?n():v.now();return i-a0){let n=`${e}_${t}`;return ml.set(n,1),n}else return e}var xV=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function kN(e){return!!e.match(xV)}function vV(e){return e===parseInt(e.toString(),10)}function os(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let a=1;for(let r=t;rt&&(t=a)}return t}function Ya(e,t){if(t{if(e.shape.length!==2)throw new H(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=ud(e,1);return lx(n,[1,t,1])})}function kV(e){let t=[os(e.shape)];return B(e,t)}function IV(e){if(e.rank<=1)throw new H(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],os(e.shape,1)];return B(e,t)}function ii(e,t,n){return O(()=>{switch(e.rank){case 1:return rd(e,t,n);case 2:return Ff(e,[t,0],[n,e.shape[1]]);case 3:return To(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return $l(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return He(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return He(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 H(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Oy(e,t,n){return O(()=>{switch(e.rank){case 1:return rd(e,t,n);case 2:return Ff(e,[0,t],[e.shape[0],n]);case 3:return To(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return $l(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new H(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Ah(e,t,n,a){return O(()=>{switch(e.rank){case 1:return rd(e,t,n);case 2:switch(a){case 1:return ii(e,t,n);case 2:return Oy(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}case 3:switch(a){case 1:return ii(e,t,n);case 2:return To(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return Oy(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}case 4:switch(a){case 1:return ii(e,t,n);case 2:return $l(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return $l(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return Oy(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}default:throw new H(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function vw(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),Qe(e,t)}function Kk(e,t){switch(e.rank){case 1:return _v([e,t]);case 2:return Ev([e,t],0);case 3:return $v([e,t],0);case 4:return Av([e,t],0);default:throw new H(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function lx(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new H(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Wn(e,t)}function Yf(e,t=0,n=1,a,r){return Sf(e,t,n,a,r)}function dr(e,t,n,a){if(e.rank<2||t.rank<2)throw new Oe(`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 Oe(`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 Fl.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:a?ux(e.rank,a,Za()):null,activation:n});{let r=e.shape.slice(),s=r.pop();e=B(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=B(Ae(t,p),[l,-1]);let d=[...r,...u],c=!1,h=!1;return B(Fl.matMul({a:e,b:t,transposeA:c,transposeB:h,bias:a?ux(e.rank,a,Za()):null,activation:n}),d)}}function IN(e,t,n){return O(()=>(Array.isArray(t)?t=Ke(t,"int32"):t=le(t,"int32"),Zu(e,t,n)))}function pd(e){return W(e,e)}function ux(e,t,n){let a=t.shape;if(t.rank!==1&&t.rank!==e)throw new H(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return a.length===1?B(t,[1,a[0],1,1,1]):B(t,[1,a[3],a[0],a[1],a[2]]);if(n==="channelsLast")return a.length===1?B(t,[1,1,1,1,a[0]]):B(t,[1].concat(a))}else if(e===4){if(n==="channelsFirst")return a.length===1?B(t,[1,a[0],1,1]):B(t,[1,a[2],a[0],a[1]]);if(n==="channelsLast")return a.length===1?B(t,[1,1,1,a[0]]):B(t,[1].concat(a))}else if(e===3){if(n==="channelsFirst")return a.length===1?B(t,[1,a[0],1]):B(t,[1,a[1],a[0]]);if(n==="channelsLast")return a.length===1?B(t,[1,1,a[0]]):B(t,[1].concat(a))}else if(e<3)return t;throw new H(`Unsupported input rank by biasAdd: ${t.rank}`)}function er(e,t,n){return O(()=>(n==null&&(n=Za()),Pt(n),Q(e,ux(e.rank,t,n))))}function TV(e,t=1){if(t!==1)throw new Oe(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Ku(e)}function SV(e){return O(()=>fe(e,Q(Lt(e),1)))}function TN(e,t,n,a){return O(()=>cw(e,t,n,a))}function NV(e){return O(()=>{let t=Q(.5,W(.2,e));return tn(t,0,1)})}function cd(e,t,n=!1){return n?e():t()}var CV=["fanIn","fanOut","fanAvg"],_V=["normal","uniform","truncatedNormal"];function EV(e){No(CV,"FanMode",e)}function $V(e){No(_V,"Distribution",e)}var Da=class extends se.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},ww=class extends Da{apply(e,t){return It(e,t)}};ww.className="Zeros";se.registerClass(ww);var Zf=class extends Da{apply(e,t){return Qn(e,t)}};Zf.className="Ones";se.registerClass(Zf);var kw=class extends Da{constructor(e){if(super(),typeof e!="object")throw new H(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new H(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return O(()=>W(ke(this.value),Qn(e,t)))}getConfig(){return{value:this.value}}};kw.className="Constant";se.registerClass(kw);var Iw=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 Qu(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};Iw.className="RandomUniform";se.registerClass(Iw);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 Oe(`randomNormal does not support dType ${t}.`);return Yf(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Tw.className="RandomNormal";se.registerClass(Tw);var Sw=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 Oe(`truncatedNormal does not support dType ${t}.`);return Mf(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Sw.className="TruncatedNormal";se.registerClass(Sw);var Nw=class extends Da{constructor(e){super(),this.gain=e.gain!=null?e.gain:1}apply(e,t){return O(()=>{if(e.length!==2||e[0]!==e[1])throw new H("Identity matrix initializer can only be used for 2D square matrices.");return W(this.gain,yf(e[0]))})}getConfig(){return{gain:this.gain}}};Nw.className="Identity";se.registerClass(Nw);function AV(e,t="channelsLast"){let n,a;if(Pt(t),e.length===2)n=e[0],a=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let r=os(e,2);n=e[1]*r,a=e[0]*r}else if(t==="channelsLast"){let r=os(e,0,e.length-2);n=e[e.length-2]*r,a=e[e.length-1]*r}}else{let r=os(e);n=Math.sqrt(r),a=Math.sqrt(r)}return[n,a]}var Gn=class extends Da{constructor(e){if(super(),e.scale<0)throw new H(`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,$V(this.distribution),this.seed=e.seed}apply(e,t){let n=AV(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 Oe(`${this.getClassName()} does not support dType ${t}.`);return Mf(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return Qu(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Gn.className="VarianceScaling";se.registerClass(Gn);var Jf=class extends Gn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};Jf.className="GlorotUniform";se.registerClass(Jf);var Qf=class extends Gn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};Qf.className="GlorotNormal";se.registerClass(Qf);var eg=class extends Gn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};eg.className="HeNormal";se.registerClass(eg);var tg=class extends Gn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};tg.className="HeUniform";se.registerClass(tg);var ng=class extends Gn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};ng.className="LeCunNormal";se.registerClass(ng);var ag=class extends Gn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Gn.className}};ag.className="LeCunNormal";se.registerClass(ag);var Cw=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 Oe("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return O(()=>{if(e.length<2)throw new Oe("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=Yf(n,0,1,"float32"),r=fw.gramSchmidt(a);return e[0]>e[1]&&(r=Ae(r)),W(this.gain,r)})}getConfig(){return{gain:this.gain,seed:this.seed}}};Cw.className="Orthogonal";se.registerClass(Cw);var Xk={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 Yk(e,t={}){return ld(e,se.SerializationMap.getMap().classNameMap,t,"initializer")}function Et(e){return yw(e)}function Tt(e){if(typeof e=="string"){let t=e in Xk?Xk[e]:e;if(t==="GlorotNormal")return new Qf;if(t==="GlorotUniform")return new Jf;if(t==="HeNormal")return new eg;if(t==="HeUniform")return new tg;if(t==="LeCunNormal")return new ng;if(t==="LeCunUniform")return new ag;{let n={};return n.className=t,n.config={},Yk(n)}}else return e instanceof Da?e:Yk(e)}function px(e){return Array.isArray(e)&&Array.isArray(e[0])}function lm(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function We(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new H(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function it(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new H(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function um(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 Zk="Variable",SN=class{constructor(e,t="float32",n=Zk,a=!0,r=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=yN(),n=n==null?Zk:n,this.originalName=vN(n),this.name=wN(this.originalName),this.trainable_=a,this.constraint=r,this.val=uw(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),FV(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 FV(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function cx(e){return e.map(t=>t.read())}function _w(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||{}}},ja=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=yN(),s!=null&&(this.originalName=vN(s),this.name=wN(this.originalName)),this.rank=t.length}},DV=0,rg=class{constructor(e,t){this.callArgs=t,this.id=DV++,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}}},RV=0,Ye=class extends se.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=RV++,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=Nr(n)+"_"+Kf(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 Ha(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new H(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return zn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return zn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new Sr(`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 Sr(`Layer ${this.name} is not connected, no input to return.`);return zn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new Sr(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new Sr(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return zn(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=wt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=wt(this.inputSpec);if(e.length!==t.length)throw new H(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;nr.maxNDim)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${r.maxNDim}, found ndim=${s}`);if(r.minNDim!=null&&s=0?i[l]:i[i.length+l];if(u!=null&&[u,null].indexOf(p)===-1)throw new H(`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{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of wt(e))s.push(i.shape);this.build(zn(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=wt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=zn(o),this.activityRegularizer!=null)throw new Oe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=MV(e),i=this.computeOutputShape(s),o,l=PV(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 ja(l,u,this,wt(e),t,this.name,p)):o=new ja(l,i,this,wt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new Oe("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 Sr(`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 Sr(`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 Ha(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return um(this.weights)}build(e){this.built=!0}getWeights(e=!1){return cx(e?this.trainableWeights:this.weights)}setWeights(e){O(()=>{let t=this.weights;if(t.length!==e.length)throw new H(`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=cx(t);for(let r=0;rr.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=wt(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=wt(e);t=wt(t),n=wt(n),a=wt(a),r=lm(r),s=lm(s);let l=[],u=[],p=[];for(let d of o)l.push(d.sourceLayer),u.push(d.nodeIndex),p.push(d.tensorIndex);new rg({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;de.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 MV(e){e=wt(e);let t=[];for(let n of e)t.push(n.shape);return zn(t)}function PV(e){return"float32"}function NN(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;sm.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=pm.get(p),c;if(d==null){let m=zV(i,t);d=m.sorted,c=m.recipientCounts,pm.put(p,d),cm.put(p,c)}c={},r||Object.assign(c,cm.get(p));let h=new ti(t);for(let m=0;ma.maxNumTensors&&(a.maxNumTensors=A),A0,()=>"Expected at least one fetch, got none");let n=[],a={};if(e.length===1){let r=Jk(e[0],t);n=r.sorted,a=r.recipientMap}else{let r=new Set;for(let s of e){let{sorted:i,recipientMap:o}=Jk(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:WV(a)}}function WV(e){let t={};for(let n in e)t[n]=e[n].size;return t}function Jk(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 BV(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let a=0;a100,LV);var _N={};Fe(_N,{maxNorm:()=>UV,minMaxNorm:()=>jV,nonNeg:()=>HV,unitNorm:()=>GV});function Ew(e,t){return O(()=>un(ye(W(e,e),t,!0)))}var dd=class extends se.Serializable{getConfig(){return{}}},$w=class extends dd{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 O(()=>{let t=Ew(e,this.axis),n=tn(t,0,this.maxValue);return W(e,fe(n,Q(Ht(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};$w.className="MaxNorm";se.registerClass($w);var Aw=class extends dd{constructor(e){super(),this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return O(()=>fe(e,Q(Ht(),Ew(e,this.axis))))}getConfig(){return{axis:this.axis}}};Aw.className="UnitNorm";se.registerClass(Aw);var Fw=class extends dd{apply(e){return Xe(e)}};Fw.className="NonNeg";se.registerClass(Fw);var Dw=class extends dd{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 O(()=>{let t=Ew(e,this.axis),n=Q(W(this.rate,tn(t,this.minValue,this.maxValue)),W(1-this.rate,t));return W(e,fe(n,Q(Ht(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};Dw.className="MinMaxNorm";se.registerClass(Dw);var Qk={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Kt(e){return yw(e)}function eI(e,t={}){return ld(e,se.SerializationMap.getMap().classNameMap,t,"constraint")}function Xt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in Qk?Qk[e]:e,config:{}};return eI(t)}else return e instanceof dd?e:eI(e)}function UV(e){return new $w(e)}function GV(e){return new Aw(e)}function HV(){return new Fw}function jV(e){return new Dw(e)}var EN={};Fe(EN,{constant:()=>XV,glorotNormal:()=>nU,glorotUniform:()=>tU,heNormal:()=>aU,heUniform:()=>rU,identity:()=>QV,leCunNormal:()=>sU,leCunUniform:()=>iU,ones:()=>KV,orthogonal:()=>oU,randomNormal:()=>ZV,randomUniform:()=>YV,truncatedNormal:()=>JV,varianceScaling:()=>eU,zeros:()=>qV});function qV(){return new ww}function KV(){return new Zf}function XV(e){return new kw(e)}function YV(e){return new Iw(e)}function ZV(e){return new Tw(e)}function JV(e){return new Sw(e)}function QV(e){return new Nw(e)}function eU(e){return new Gn(e)}function tU(e){return new Jf(e)}function nU(e){return new Qf(e)}function aU(e){return new eg(e)}function rU(e){return new tg(e)}function sU(e){return new ng(e)}function iU(e){return new ag(e)}function oU(e){return new Cw(e)}var $N={};Fe($N,{Layer:()=>Ye,RNN:()=>xr,RNNCell:()=>bd,activation:()=>DG,add:()=>VG,alphaDropout:()=>SH,average:()=>UG,averagePooling1d:()=>W0,averagePooling2d:()=>B0,averagePooling3d:()=>V0,avgPool1d:()=>JG,avgPool2d:()=>eH,avgPool3d:()=>nH,avgPooling1d:()=>QG,avgPooling2d:()=>tH,avgPooling3d:()=>aH,batchNormalization:()=>XG,bidirectional:()=>bH,concatenate:()=>GG,conv1d:()=>TG,conv2d:()=>SG,conv2dTranspose:()=>NG,conv3d:()=>CG,conv3dTranspose:()=>_G,convLstm2d:()=>hH,convLstm2dCell:()=>mH,cropping2D:()=>$G,dense:()=>RG,depthwiseConv2d:()=>FG,dot:()=>KG,dropout:()=>MG,elu:()=>yG,embedding:()=>BG,flatten:()=>OG,gaussianDropout:()=>TH,gaussianNoise:()=>IH,globalAveragePooling1d:()=>rH,globalAveragePooling2d:()=>sH,globalMaxPool1d:()=>xH,globalMaxPool2d:()=>vH,globalMaxPooling1d:()=>w2,globalMaxPooling2d:()=>k2,gru:()=>oH,gruCell:()=>lH,input:()=>KN,inputLayer:()=>bG,layerNormalization:()=>YG,leakyReLU:()=>vG,lstm:()=>uH,lstmCell:()=>pH,masking:()=>NH,maxPool1d:()=>wH,maxPool2d:()=>kH,maxPooling1d:()=>I2,maxPooling2d:()=>T2,maxPooling3d:()=>iH,maximum:()=>HG,minimum:()=>jG,multiply:()=>qG,permute:()=>WG,prelu:()=>wG,reLU:()=>xG,repeatVector:()=>LG,reshape:()=>zG,rnn:()=>fH,separableConv2d:()=>EG,simpleRNN:()=>cH,simpleRNNCell:()=>dH,softmax:()=>kG,spatialDropout1d:()=>PG,stackedRNNCells:()=>gH,thresholdedReLU:()=>IG,timeDistributed:()=>yH,upSampling2d:()=>AG,zeroPadding2d:()=>ZG});async function es(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;sQ(this.totals[a],W(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:O(()=>{let a=W(fe(1,this.seen),this.totals[n]);t[n]=a,this.totals[n].dispose(),Qt(t[n])}))}},DN=class extends Rl{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;inew RN(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 H("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 PN(e,t,n,a,r,s,i,o,l){let u=new DN,p=[new uU,...Na.createCallbacks(t)];e!=null&&p.push(...e),p.push(u);let d=new FN(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 Ka(e,t={},n=!1){return ld(e,se.SerializationMap.getMap().classNameMap,t,"layer",n)}function dm(e,t){return O(()=>{e.dtype!=="float32"&&(e=le(e,"float32"));let n=ye(pd(e),t,!0),a=$n(n.shape,Ht()),r=un(br(n,a));return fe(e,r)})}function Co(e,t){return O(()=>_t(pd(ce(t,e)),-1))}function sg(e,t){return O(()=>_t(Lt(ce(t,e)),-1))}function np(e,t){return O(()=>{let n=ce(e,t),a=tn(Lt(e),Ht(),Number.MAX_VALUE),r=Lt(fe(n,a));return W(100,_t(r,-1))})}function pU(e,t){return O(()=>{let n=tn(t,Ht(),Number.MAX_VALUE),a=ta(Q(1,n)),r=tn(e,Ht(),Number.MAX_VALUE),s=ta(Q(1,r));return _t(pd(ce(a,s)),-1)})}function cU(e,t){return O(()=>{let n=br(0,ce(1,W(e,t)));return _t(pd(n),-1)})}function dU(e,t){return O(()=>{let n=br(0,ce(1,W(e,t)));return _t(n,-1)})}function hU(e,t){return O(()=>{let n=ye(W(e,t),-1),a=_a(W(ce(1,e),t),-1);return br(0,Q(1,ce(a,n)))})}function mU(e,t){return O(()=>{let n=Math.log(2),a=ce(t,e),r=ce(Q(a,Io(W(-2,a))),n);return _t(r,-1)})}function fc(e,t,n=!1){return O(()=>{if(n)t=Qa(t);else{let a=ye(t,t.shape.length-1,!0);t=fe(t,a)}return t=tn(t,Ht(),1-Ht()),kt(ye(W(le(e,"float32"),ta(t)),t.shape.length-1))})}function hm(e,t,n=!1){return O(()=>{let a=le(Yu(kV(e)),"int32");t=tn(t,Ht(),1-Ht());let r=t.shape,s=B(Cl(a,r[r.length-1]),r);return fc(s,t,n)})}function fU(e,t){if(!v.arraysEqual(e.shape,t.shape))throw new H(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return O(()=>{let n=Xe(t),a=kt(Lt(t));return Q(ce(n,W(t,e)),Qc(gn(a)))})}function ig(e,t){return O(()=>{let n;return n=tn(t,Ht(),1-Ht()),n=ta(fe(n,ce(1,n))),_t(fU(e,n),-1)})}function gU(e,t){return O(()=>{let n=tn(e,Ht(),1),a=tn(t,Ht(),1);return ye(W(e,ta(fe(n,a))),-1)})}function bU(e,t){return O(()=>{let n=ta(Q(Ht(),t));return _t(ce(t,W(e,n)),-1)})}function Rw(e,t){return O(()=>{let n=dm(e,-1),a=dm(t,-1),r=W(n,a);return kt(ye(r,-1))})}var mm={meanSquaredError:Co,meanAbsoluteError:sg,meanAbsolutePercentageError:np,meanSquaredLogarithmicError:pU,squaredHinge:cU,hinge:dU,categoricalHinge:hU,logcosh:mU,categoricalCrossentropy:fc,sparseCategoricalCrossentropy:hm,binaryCrossentropy:ig,kullbackLeiblerDivergence:gU,poisson:bU,cosineProximity:Rw};function Ly(e){if(typeof e=="string"){if(e in mm)return mm[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 H(t)}else return e}function Mw(e,t){return O(()=>{let n=W(.5,na(t)),a=Xf(jn(t,n),e.dtype);return _t(ea(e,a),-1)})}function Pw(e,t){return O(()=>Xf(ea(hi(e,-1),hi(t,-1)),"float32"))}function ON(e,t){return O(()=>le(ye($a(ea(e,1),ea(t,1))),"float32"))}function yU(e,t){return O(()=>le(ye($a(ea(e,1),ea(t,0))),"float32"))}function xU(e,t){return O(()=>le(ye($a(ea(e,0),ea(t,1))),"float32"))}function LN(e,t){return O(()=>{let n=ON(e,t),a=xU(e,t),r=Q(n,a);return le(fn(jn(r,0),fe(n,r),0),"float32")})}function vU(e,t){return O(()=>{let n=ON(e,t),a=yU(e,t),r=Q(n,a);return le(fn(jn(r,0),fe(n,r),0),"float32")})}function zN(e,t){return ig(e,t)}function WN(e,t){return e.rank===t.rank&&(e=$s(e,[e.rank-1])),t=hi(t,-1),t.dtype!==e.dtype&&(t=le(t,e.dtype)),le(ea(e,t),"float32")}var wU=Co,kU=Co,IU=sg,TU=sg,SU=np,NU=np,Ow=fc,CU=Rw,BN=hm,fm={binaryAccuracy:Mw,categoricalAccuracy:Pw,precision:LN,categoricalCrossentropy:Ow,sparseCategoricalCrossentropy:BN,mse:wU,MSE:kU,mae:IU,MAE:TU,mape:SU,MAPE:NU,cosine:CU};function _U(e){if(typeof e=="string"&&e in fm)return fm[e];if(typeof e!="string"&&e!=null)return e;throw new H(`Unknown metric ${e}`)}function Fh(e){if(lr(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(mm))if(mm[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(fm))if(fm[n]===e){t=n;break}return t!==void 0?t:e.name}}function EU(e){let t={Adagrad:()=>Xs.adagrad(.01),Adadelta:()=>Xs.adadelta(1,.95,Ht()),Adam:()=>Xs.adam(.001,.9,.999,Ht()),Adamax:()=>Xs.adamax(.002,.9,.999,Ht(),0),RMSProp:()=>Xs.rmsprop(.001,.9,0,Ht()),SGD:()=>Xs.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 H(`Unknown Optimizer ${e}`)}function nI(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!dx(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 dx(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"||!dx(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!dx(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function $U(e,t,n,a=console.log){let r=FU(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)),gm(s,n,a),a("=".repeat(t));let o=e.layers;for(let p=0;p1||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 gm(e,t,n=console.log){let a="";for(let r=0;r0&&(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 DU(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()];gm(o,t,n)}function RU(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;cb.name)}`);is(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(b=>b.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let b of this.outputs){let y=b.sourceLayer,x=b.nodeIndex,w=b.tensorIndex;this.outputLayers.push(y),this.outputLayersNodeIndices.push(x),this.outputLayersTensorIndices.push(w)}for(let b of this.inputs){let y=b.sourceLayer,x=b.nodeIndex,w=b.tensorIndex;lr(x===0,"input layer has >1 nodes"),lr(w===0,"input layer has >1 tensors"),this.inputLayers.push(y),this.inputLayersNodeIndices.push(x),this.inputLayersTensorIndices.push(w)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let b=0;bb.shape),this.internalOutputShapes=this.outputs.map(b=>b.shape);let t={},n={},a={},r={},s={},i=[],o=(b,y,x,w,I,N)=>{(w==null||I==null||N==null)&&(w=b.sourceLayer,I=b.nodeIndex,N=b.tensorIndex);let _=w.inboundNodes[I];if(x.indexOf(_)!==-1)throw new Ha(`The tensor ${b.name} at layer "${w.name}" is part of a cycle.`);if(y.indexOf(_)!==-1)return;this.containerNodes.add(sr.nodeKey(w,I)),w.id in s||(s[w.id]=Object.keys(s).length),x.indexOf(_)===-1&&x.push(_);let $=_.inboundLayers.length;for(let A=0;A<$;A++){let M=_.inputTensors[A],D=_.inboundLayers[A],T=_.nodeIndices[A],P=_.tensorIndices[A];o(M,y,x,D,T,P)}for(y.push(_);x.indexOf(_)>=0;)x.splice(x.indexOf(_),1);i.push(_)},l=[],u=[];for(let b of this.outputs)o(b,l,u);let p=i.slice().reverse();for(let b of p){n[b.id]=b,b.id in t||(t[b.id]=0);let y=t[b.id],x=a[b.outboundLayer.id]==null?0:a[b.outboundLayer.id];y=Math.max(y,x),a[b.outboundLayer.id]=y,r[b.outboundLayer.id]=b.outboundLayer,t[b.id]=y;for(let w=0;wparseInt(b,10)).sort(Eh);this.layers=[];for(let b of h){let y=c[b];y.sort((x,w)=>{let I=s[x.id],N=s[w.id];return IN?1:0});for(let x of y)x instanceof sr&&this.internalContainerRefs.push(x),this.layers.push(x)}this.layersByDepth=c,h=Object.keys(d).map(b=>parseInt(b,10)).sort(Eh);let m=this.inputs.slice(),f=[];for(let b of h)for(let y of d[b]){let x=y.outboundLayer;if(x!=null){for(let w of y.inputTensors)if(m.indexOf(w)===-1)throw new Ha(`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 y.outputTensors)m.push(w);f.push(x.name)}}this.nodesByDepth=d;let g=this.layers.map(b=>b.name);for(let b of g){let y=g.filter(x=>x===b).length;if(y!==1)throw new Ha(`The name "${b}" is used ${y} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new rg({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(b=>null),outputMasks:this.outputs.map(b=>null),inputShapes:this.inputs.map(b=>b.shape),outputShapes:this.outputs.map(b=>b.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 H("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 H(`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 H(`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 H(`${s.length} of ${a} weights are not set: ${s}`)}_w(r)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${Lw}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=hx(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return O(()=>{e=wt(e);let n=new ti;for(let a=0;a{e=wt(e);let n;return t==null?n=bi(null,e.length):n=wt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=lm(e);if(t.length!==this.inputLayers.length)throw new H(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;iparseInt(i,10)).sort(Eh);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;mparseInt(o,10)).sort(Eh);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,b,y;if(u.callArgs!=null&&(m=u.callArgs),h.length===1){let[x,w]=h[0];m.mask==null&&(m.mask=w),b=wt(p.call(x,m)),y=wt(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),b=wt(p.call(f,m)),y=wt(p.computeMask(f,g));if(p.activityRegularizer)throw new Oe("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let x=0;x{let e=[];for(let t of this.layers)for(let n=0;n0){let m=[];for(let f=0;f0&&f.apply(zn(b),y)}function l(f){let g=f.name,b=Ka(f,t.customObjects!=null?t.customObjects:{});b.setFastWeightInitDuringBuild(a),r[g]=b,f.inboundNodes.forEach(y=>{if(!(y instanceof Array))throw new H(`Corrupted configuration, expected array for nodeData: ${y}`);i(b,y)})}let u=t.name,p=t.layers;for(let f of p)l(f);for(;!uV(s);)for(let f of p){let g=r[f.name];if(g.name in s){let b=s[g.name];delete s[g.name];for(let y of b)o(g,y)}}let d=[],c=[],h=t.inputLayers;for(let f of h){let g=f[0],b=f[1],y=f[2];lr(g in r);let x=r[g].inboundNodes[b].outputTensors;d.push(x[y])}let m=t.outputLayers;for(let f of m){let g=f[0],b=f[1],y=f[2];lr(g in r);let x=r[g].inboundNodes[b].outputTensors;c.push(x[y])}return new e({inputs:d,outputs:c,name:u})}get stateful(){if(this._stateful)throw new H("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(){O(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function MU(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 UN(e,t){return MU(e,t,"classWeight")}async function GN(e,t,n,a){if(t!=null||a!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let r=O(()=>{if(e.shape.length===1)return cr(e);if(e.shape.length===2){if(e.shape[1]>1)return hi(e,1);if(e.shape[1]===1)return B(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());Me(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])}),Ke(i,"float32")}else return null}function PU(e,t){return W(e,t)}var OU=32;function HN(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=aI("input",e.inputNames,n),i=aI("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`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`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 aI(e,t,n){if(n instanceof $e)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 H(`The feature data generated by the dataset lacks the required ${e} key '${r}'.`);a.push(n[r])}return a}}function LU(e){if(e.length===3)throw new Oe("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function zU(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(rI(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=LU(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=MN(n.callbacks,n.yieldEvery),d=n.verbose==null?1:n.verbose,{callbackList:c,history:h}=PN(p,d,n.epochs,null,null,WU(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.batchesPerEpoch:x.done){if(r){let w;rI(n.validationData)?w=wt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):w=wt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?OU:n.validationBatchSize,verbose:0}));for(let I=0;I0)throw new Oe("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=BU(t)?t:await t.iterator(),o=0,l=0;for(;!a||l{if(u.value){let{xs:p,ys:d}=HN(e,u.value),c=p.concat(d),h=O(()=>r(c));if(Me(c),l===0)for(let f=0;fQ(s[f],W(m,g))),l>0&&Me(b)}Me(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;u0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Yp(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(a=>ii(a,t,n-t)):ii(e,t,n-t)}function zw(e,t){return O(()=>e==null?null:Array.isArray(e)?e.map(n=>zw(n,t)):IN(e,t.dtype==="int32"?t:le(t,"int32")))}function fx(e,t){let n=[],a=0,r=null;for(;a=e&&(r=e),n.push([a,r]),a=r;return n}async function UU(e,t,n,a,r,s,i,o,l,u,p,d,c,h,m){r==null&&(r=32),s==null&&(s=1),p==null&&(p=!0),c==null&&(c=0);let f=!1;if(l!=null&&u!=null&&(f=!0),m!=null&&(f=!0,h==null))throw new H("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=e.checkNumSamples(n,r,h,"steps_per_epoch"),b;g!=null&&(b=Ya(0,g)),i==null&&(i=1);let{callbackList:y,history:x}=PN(o,i,s,c,g,h,r,f,d);y.setModel(e),e.history=x,await y.onTrainBegin(),e.stopTraining_=!1;for(let w=c;w{let M=_[$][0],D=_[$][1],T=ii(N,M,D-M);A.batch=$,A.size=D-M;let P=zw(n,T),U=t(P);for(let j=0;j0){if(g=!0,a.validationData.length===2)l=a.validationData[0],u=a.validationData[1];else throw a.validationData.length===3?new Oe("validationData including sample weights is not supported yet."):new H(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${a.validationData} is invalid.`);let $=!0,A=await e.standardizeUserData(l,u,null,null,$,h);p=A[0],d=A[1],b=p.concat(d)}else if(a.validationSplit!=null&&a.validationSplit>0&&a.validationSplit<1){g=!0;let $=Math.floor(r[0].shape[0]*(1-a.validationSplit)),A=r[0].shape[0];p=Yp(r,$,A),i=r,r=Yp(r,0,$),d=Yp(s,$,A),o=s,s=Yp(s,0,$),b=p.concat(d)}else a.validationSteps!=null&&(g=!0);let y=r.concat(s).concat(c);e.checkTrainableWeightsConsistency();let x=e.makeTrainFunction(),w=e.getDedupedMetricsNames(),I,N;g?(e.makeTestFunction(),I=e.testFunction,N=w.slice().concat(w.map($=>"val_"+$))):(I=null,b=[],N=w.slice());let _=MN(a.callbacks,a.yieldEvery);return await UU(e,x,y,w,h,a.epochs,a.verbose,_,I,b,a.shuffle,N,a.initialEpoch,null,null)}finally{e.isTraining=!1,Ga(r,t),Ga(s,n),Ga(i,t),Ga(o,n),Ga(p,l),Ga(d,u),c!=null&&Me(c)}}function jN(e){let t=[];e instanceof $e&&(e=[e]);for(let n=0;nn.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 $e)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 HU(e){return e instanceof $e}function gx(e){return Array.isArray(e)}function sI(e){return!HU(e)&&!gx(e)}function iI(e,t,n,a=!0,r=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(gx(e)&&e.length>0)i=!0;else if(sI(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new H(`Error when checking model ${r} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(sI(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new H(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(gx(e)){if(e=e,e.length!==t.length)throw new H(`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 H(`The model ${r} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=jN(s),n!=null)for(let i=0;i=0&&u!==p)throw new H(`${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 jU(e,t,n){let a=is(e.map(s=>s.shape[0]));a.sort();let r=is(t.map(s=>s.shape[0]));if(r.sort(),a.length>1)throw new H(`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 H(`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 H(`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 qU(e,t,n){let a=[Co,ig,fc];for(let r=0;r1)throw new H(`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[]);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 XU="layers-model",Fr=class extends sr{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new H("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).");$U(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 Pr))throw new H("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 H(`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(Ly(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new H(`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=>Ly(s))}else{let s=Ly(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s{for(let s=0;s1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let a=KU(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])};si("metric",()=>{for(let s=0;s{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]===ig?["accuracy","acc"].indexOf(c)!==-1?p=Mw:["crossentropy","ce"].indexOf(c)!==-1&&(p=zN):this.lossFunctions[s]===hm?["accuracy","acc"].indexOf(c)!==-1?p=WN:["crossentropy","ce"].indexOf(c)!==-1&&(p=BN):["accuracy","acc"].indexOf(c)!==-1?p=Pw:["crossentropy","ce"].indexOf(c)!==-1&&(p=Ow);let f;["accuracy","acc"].indexOf(c)!==-1?f="acc":["crossentropy","ce"].indexOf(c)!==-1&&(f="ce"),d=p,u=l+f}else d=_U(c),u=l+Fh(c);let h;si(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;mx(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 zn(l)}finally{Ga(s[0],e),Ga(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),VU(this,e,t)}checkNumSamples(e,t,n,a="steps"){let r;if(n!=null){if(r=null,t!=null)throw new H(`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 H(`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 H("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),a=n?t:[t],r=this.retrieveSymbolicTensors(a),s=new ti;if(e instanceof $e&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new H(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;oi.name);for(let i=0;i0){let a=[];throw t.forEach((r,s)=>{r==null&&a.push(e[s])}),new H(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(a)}`)}return t}predictLoop(e,t=32,n=!1){return O(()=>{let a=this.checkNumSamples(e);if(n)throw new Oe("Verbose predictLoop() is not implemented yet.");let r=fx(a,t),s=this.outputs.map(i=>[]);for(let i=0;i{let o=r[i][0],l=r[i][1],u=Yp(e,o,l),p=[];if(Array.isArray(u))for(let c=0;cs[l].push(o));return zn(s.map(i=>Qe(i,0)))})}predict(e,t={}){let n=jN(e);oI(n,this.inputNames,this.feedInputShapes,!1);try{let a=t.batchSize==null?32:t.batchSize;return mx(a),this.predictLoop(n,a)}finally{Ga(n,e)}}predictOnBatch(e){oI(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 Ha("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let r=[];for(let s=0;s0&&e[0].shape[0]%a!==0)throw new H(`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=UN(a,this.outputNames);l=[];for(let p=0;p{let s=this.checkNumSamples(t,n,r,"steps"),i=[];if(a>0)throw new Oe("Verbose mode is not implemented yet.");if(r!=null)throw new Oe("steps mode in testLoop() is not implemented yet");{let o=fx(s,n),l=Ke(Ya(0,s));for(let u=0;u1&&(r+=`_${jk(e.slice(0,n),a)}`),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;h1&&h{c=Q(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=>O(()=>{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;lNr(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]=Nr(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[Nr(Fh(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Nr(Fh(e)));{let e={};for(let t in this.metrics)e[t]=Nr(Fh(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=gc(e.optimizer_config),n=Ka(t),a;if(typeof e.loss=="string")a=Js(e.loss);else if(Array.isArray(e.loss))a=e.loss.map(s=>Js(s));else if(e.loss!=null){a={};for(let s in e.loss)a[s]=Js(e.loss[s])}let r;if(Array.isArray(e.metrics))r=e.metrics.map(s=>Js(s));else if(e.metrics!=null){r={};for(let s in e.metrics)r[s]=Js(e.metrics[s])}this.compile({loss:a,metrics:r,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=Nn.getSaveHandlers(e);if(i.length===0)throw new H(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new H(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new H("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Nn.encodeWeights(this.getNamedWeights(t)),a=!1,r=null,s={modelTopology:this.toJSON(r,a),format:XU,generatedBy:`TensorFlow.js tfjs-layers v${Lw}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await Nn.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=Nn.concatenateArrayBuffers([n.data,o])}return this.userDefinedMetadata!=null&&(nI(this.userDefinedMetadata,this.name,!0),s.userDefinedMetadata=this.userDefinedMetadata),s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){nI(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Fr.className="Model";se.registerClass(Fr);var qN=class extends Fr{};qN.className="Functional";se.registerClass(qN);async function YU(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let a=gc(n),r=Ka(a,t);if(e.weightsManifest!=null){let s=await Nn.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),Me(s)}return r}async function ZU(e,t){if(t==null&&(t={}),typeof e=="string"){let n=Nn.getLoadHandlers(e,t);if(n.length===0)n.push(Nn.browserHTTPRequest(e,t));else if(n.length>1)throw new H(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return JU(e,void 0,t)}async function JU(e,t,n){if(n==null&&(n={}),e.load==null)throw new H("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=Ka(gc(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 H("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:p}=QU(a.weightData,a.weightSpecs);o.loadWeights(u,s),o.optimizer!=null&&p.length>0&&await o.optimizer.setWeights(p),Me(u),Me(p.map(d=>d.tensor))}return o}function QU(e,t){let n=Nn.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 Ml=class extends Fr{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Kf("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 H(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Ml||e instanceof Fr,n;if(t){if(n=e,n.outputs.length!==1)throw new H("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 H("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 H("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let a=CN({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 H(`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 H("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=NN(this.outputs[0])}this.inboundNodes=[],new rg({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:bi(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(it(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 Fr({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 Ha("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 Ha("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 Ha("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 Ha("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 H("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 Ml))throw new Oe(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of r){let l=Ka(o,void 0,a);a&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new H("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 H("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}}};Ml.className="Sequential";se.registerClass(Ml);function eG(e){return new Fr(e)}function tG(e){return new Ml(e)}function nG(e,t){return t==null&&(t={}),ZU(e,t)}function KN(e){return CN(e)}function aG(e,t){Na.registerCallbackConstructor(e,t)}var qn=class extends se.Serializable{getConfig(){return{}}},XN=class extends qn{apply(e,t=1){return TV(e,t)}};XN.className="elu";se.registerClass(XN);var YN=class extends qn{apply(e){return Ef(e)}};YN.className="selu";se.registerClass(YN);var ZN=class extends qn{apply(e){return Xe(e)}};ZN.className="relu";se.registerClass(ZN);var JN=class extends qn{apply(e){return O(()=>Ju(6,Xe(e)))}};JN.className="relu6";se.registerClass(JN);var QN=class extends qn{apply(e){return e}};QN.className="linear";se.registerClass(QN);var e2=class extends qn{apply(e){return ha(e)}};e2.className="sigmoid";se.registerClass(e2);var t2=class extends qn{apply(e){return NV(e)}};t2.className="hardSigmoid";se.registerClass(t2);var n2=class extends qn{apply(e){return Io(e)}};n2.className="softplus";se.registerClass(n2);var a2=class extends qn{apply(e){return SV(e)}};a2.className="softsign";se.registerClass(a2);var r2=class extends qn{apply(e){return mi(e)}};r2.className="tanh";se.registerClass(r2);var Ww=class extends qn{apply(e,t=-1){return Qa(e,t)}};Ww.className="softmax";se.registerClass(Ww);var s2=class extends qn{apply(e,t=-1){return wf(e,t)}};s2.className="logSoftmax";se.registerClass(s2);var i2=class extends qn{apply(e,t=1){return O(()=>W(ha(W(e,t)),e))}};i2.className="swish";se.registerClass(i2);var o2=class extends qn{apply(e){return O(()=>W(e,mi(Io(e))))}};o2.className="mish";se.registerClass(o2);function ds(e){return e.getClassName()}function zy(e,t={}){return ld(e,se.SerializationMap.getMap().classNameMap,t,"activation")}function hs(e){if(e==null){let t={};return t.className="linear",t.config={},zy(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},zy(t)}else return e instanceof qn?e:zy(e)}function Bw(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 l2=class extends se.Serializable{},hd=class extends l2{constructor(e){super(),Bw(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 O(()=>{let t=It([1]);return this.hasL1&&(t=Q(t,ye(W(this.l1,Lt(e))))),this.hasL2&&(t=Q(t,ye(W(this.l2,pd(e))))),B(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};hd.className="L1L2";se.registerClass(hd);function rG(e){return Bw(e),new hd({l1:e!=null?e.l1:null,l2:0})}function sG(e){return Bw(e),new hd({l2:e!=null?e.l2:null,l1:0})}var lI={l1l2:"L1L2"};function ht(e){return yw(e)}function uI(e,t={}){return ld(e,se.SerializationMap.getMap().classNameMap,t,"regularizer")}function St(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in lI?lI[e]:e,config:{}};return uI(t)}else return e instanceof l2?e:uI(e)}var Vw=class extends Ye{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=We(e);let n=Xe(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}};Vw.className="ReLU";se.registerClass(Vw);var Uw=class extends Ye{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=We(e);return Jc(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};Uw.className="LeakyReLU";se.registerClass(Uw);var Gw=class extends Ye{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=Tt(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=St(e.alphaRegularizer),this.alphaConstraint=Xt(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 H(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=it(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(Pt(t),t==="channelsFirst"?Ae(e,[0,2,3,1]):e))}function u2(e,t){return O(()=>(Pt(t),t==="channelsFirst"?Ae(e,[0,2,3,4,1]):e))}function iG(e,t,n,a=1,r="valid",s,i=1){return O(()=>{if(s==null&&(s=Za()),Pt(s),e.shape.length!==3)throw new H(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new H(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new H(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=Ae(e,[0,2,1])),r==="causal")throw new Oe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=mf(e,t,a,r==="same"?"same":"valid","NWC",i);return n!=null&&(o=er(o,n)),o})}function pI(e,t,n,a=[1,1],r="valid",s,i,o=null){return O(()=>{if(s==null&&(s=Za()),Pt(s),e.rank!==3&&e.rank!==4)throw new H(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new H(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=Kw(e,s);if(r==="causal")throw new Oe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=Fl.conv2d({x:l,filter:t,strides:a,pad:r==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=Ae(l,[0,3,1,2])),l})}function oG(e,t,n,a=[1,1,1],r="valid",s,i){return O(()=>{if(s==null&&(s=Za()),Pt(s),e.rank!==4&&e.rank!==5)throw new H(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new H(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=u2(e,s);if(r==="causal")throw new Oe("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=Dv(o,t,a,r==="same"?"same":"valid","NDHWC",i),n!=null&&(o=er(o,n)),s==="channelsFirst"&&(o=Ae(o,[0,4,1,2,3])),o})}var Xw=class extends Ye{constructor(e,t){if(super(t),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",Xw.verifyArgs(t),this.rank=e,en(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Oe(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Il(t.kernelSize,e,"kernelSize"),this.strides=Il(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,Pt(this.dataFormat),this.activation=hs(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=Tt(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Xt(t.biasConstraint),this.biasRegularizer=St(t.biasRegularizer),this.activityRegularizer=St(t.activityRegularizer),this.dilationRate=Il(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new H(`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 H(`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 H(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(lr("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!xw(e.kernelSize,"number",1,3))throw new H(`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:ds(this.activation),useBias:this.useBias,biasInitializer:Et(this.biasInitializer),biasRegularizer:ht(this.biasRegularizer),activityRegularizer:ht(this.activityRegularizer),biasConstraint:Kt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},md=class extends Xw{constructor(e,t){super(e,t),this.kernel=null,md.verifyArgs(t),this.filters=t.filters,en(this.filters,"filters"),this.kernelInitializer=Tt(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Xt(t.kernelConstraint),this.kernelRegularizer=St(t.kernelRegularizer)}build(e){e=it(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new H(`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 O(()=>{e=We(e);let n,a=this.bias==null?null:this.bias.read(),r=bN(this.activation.getClassName());if(r!=null&&this.rank===2)n=pI(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate,r);else{if(this.rank===1)n=iG(e,this.kernel.read(),a,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=pI(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=oG(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Oe("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=it(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let r=0;r 0 but got ${JSON.stringify(e.filters)}`)}},fd=class extends md{constructor(e){super(2,e),fd.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!xw(e.kernelSize,"number",1,2))throw new H(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};fd.className="Conv2D";se.registerClass(fd);var gd=class extends md{constructor(e){super(3,e),gd.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 H(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};gd.className="Conv3D";se.registerClass(gd);var Yw=class extends fd{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new H(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=it(e),e.length!==4)throw new H("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 H("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 O(()=>{let n=We(e);if(n.shape.length!==4)throw new H(`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=ur(o,d,u,this.padding),m=ur(l,c,p,this.padding),f=[r,h,m,this.filters];this.dataFormat!=="channelsLast"&&(n=Ae(n,[0,2,3,1]));let g=ff(n,this.kernel.read(),f,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(g=Ae(g,[0,3,1,2])),this.bias!=null&&(g=er(g,this.bias.read(),this.dataFormat)),this.activation!=null&&(g=this.activation.apply(g)),g})}computeOutputShape(e){e=it(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]=ur(t[a],o,s,this.padding),t[r]=ur(t[r],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Yw.className="Conv2DTranspose";se.registerClass(Yw);var Zw=class extends gd{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new H(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=it(e),e.length!==5)throw new H("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 H("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 O(()=>{let n=We(e);if(n.shape.length!==5)throw new H(`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],b=ur(l,m,d,this.padding),y=ur(u,f,c,this.padding),x=ur(p,g,h,this.padding),w=[r,b,y,x,this.filters];this.dataFormat!=="channelsLast"&&(n=Ae(n,[0,2,3,4,1]));let I=Rv(n,this.kernel.read(),w,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(I=Ae(I,[0,4,1,2,3])),this.bias!==null&&(I=er(I,this.bias.read(),this.dataFormat)),this.activation!==null&&(I=this.activation.apply(I)),I})}computeOutputShape(e){e=it(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]=ur(t[a],u,i,this.padding),t[r]=ur(t[r],p,o,this.padding),t[s]=ur(t[s],d,l,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Zw.className="Conv3DTranspose";se.registerClass(Zw);var p2=class extends md{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 H("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new H("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 H(`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=Tt(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=St(t.depthwiseRegularizer),this.depthwiseConstraint=Xt(t.depthwiseConstraint),this.pointwiseInitializer=Tt(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=St(t.pointwiseRegularizer),this.pointwiseConstraint=Xt(t.pointwiseConstraint)}build(e){if(e=it(e),e.length{e=We(e);let n;if(this.rank===1)throw new Oe("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Ae(e,[0,2,3,1])),n=Es(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=er(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Ae(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=Et(this.depthwiseInitializer),e.pointwiseInitializer=Et(this.pointwiseInitializer),e.depthwiseRegularizer=ht(this.depthwiseRegularizer),e.pointwiseRegularizer=ht(this.pointwiseRegularizer),e.depthwiseConstraint=Kt(this.depthwiseConstraint),e.pointwiseConstraint=Kt(this.pointwiseConstraint),e}};p2.className="SeparableConv";var Jw=class extends p2{constructor(e){super(2,e)}};Jw.className="SeparableConv2D";se.registerClass(Jw);var og=class extends md{constructor(e){super(1,e),og.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"&&!xw(e.kernelSize,"number",1,1))throw new H(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};og.className="Conv1D";se.registerClass(og);var Qw=class extends Ye{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 O(()=>{if(e=We(e),this.dataFormat==="channelsLast"){let n=Ah(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return Ah(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=Ah(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return Ah(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}};Qw.className="Cropping2D";se.registerClass(Qw);var e0=class extends Ye{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,Pt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,bV(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 O(()=>{let n=We(e),a=n.shape;if(this.dataFormat==="channelsFirst"){n=Ae(n,[0,2,3,1]);let r=this.size[0]*a[2],s=this.size[1]*a[3],i=this.interpolation==="nearest"?Er.resizeNearestNeighbor(n,[r,s]):Er.resizeBilinear(n,[r,s]);return Ae(i,[0,3,1,2])}else{let r=this.size[0]*a[1],s=this.size[1]*a[2];return this.interpolation==="nearest"?Er.resizeNearestNeighbor(n,[r,s]):Er.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}};e0.className="UpSampling2D";se.registerClass(e0);function lG(e,t,n=[1,1],a="valid",r,s){return O(()=>{r==null&&(r=Za()),Pt(r);let i=Kw(e,r);if(e.rank!==4)throw new H(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new H(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=Ns(i,t,n,a==="same"?"same":"valid","NHWC",s),r==="channelsFirst"&&(i=Ae(i,[0,3,1,2])),i})}var t0=class extends Xw{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=Tt(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Xt(e.depthwiseConstraint),this.depthwiseRegularizer=St(e.depthwiseRegularizer)}build(e){if(e=it(e),e.length<4)throw new H(`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 H(`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 O(()=>{e=We(e);let n=lG(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=er(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=it(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=Xa(t,this.kernelSize[0],this.padding,this.strides[0]),s=Xa(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=Et(this.depthwiseInitializer),e.depthwiseRegularizer=ht(this.depthwiseRegularizer),e.depthwiseConstraint=Kt(this.depthwiseRegularizer),e}};t0.className="DepthwiseConv2D";se.registerClass(t0);function c2(e,t,n,a){if(Array.isArray(e)){if(t!=null||n!=null)throw new H("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 d2(e,t,n,a=!1,r,s,i=!1,o=!1){return O(()=>{let l=t.shape.length;if(l<3)throw new H(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(Ya(2,l));if(t=Ae(t,u),s!=null)throw new Oe("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=le(le(r,"bool"),"float32"),r.rank===l-1&&(r=mn(r,-1)),r=Ae(r,u)),a&&(t=ga(t,0),r!=null&&(r=ga(r,0)));let p=[],d,c=n,h=t.shape[0],m=mt(t),f;r!=null&&(f=mt(r));for(let b=0;be(y,c));if(r==null)d=x[0],c=x[1];else{let w=O(()=>{let I=f[b],N=ce(na(I),I),_=Q(W(x[0],I),W(c[0],N)),$=c.map((A,M)=>Q(W(x[1][M],I),W(A,N)));return{output:_,newStates:$}});d=w.output,c=w.newStates}o&&p.push(d)}let g;return o&&(g=Rt(p,1)),[d,g,c]})}var xr=class extends Ye{constructor(e){super(e);let t;if(e.cell==null)throw new H("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new pg({cells:e.cell}):t=e.cell,t.stateSize==null)throw new H("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 Ya(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){px(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 O(()=>{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;ns.shape[s.shape.length-1]),r))throw new H(`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){O(()=>{if(!this.stateful)throw new Sr("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new H("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)Me(this.states_),this.keptStates!=null&&(Me(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 H(`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()):Me(this.states_);for(let a=0;aQt(a.clone()))})}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=c2(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 ja){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 O(()=>{let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;e=We(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 H(`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=d2((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 O(()=>{let t=It(e.shape);return t=ye(t,[1,2]),t=ud(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?lx(t,[1,n]):t):this.cell.stateSize>1?[lx(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()===xr.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let a=t.cell,r=Ka(a,n);return new e(Object.assign(t,{cell:r}))}};xr.className="RNN";se.registerClass(xr);var bd=class extends Ye{},lg=class extends bd{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=hs(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=Tt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Tt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Tt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=St(e.kernelRegularizer),this.recurrentRegularizer=St(e.recurrentRegularizer),this.biasRegularizer=St(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Dl([1,cs([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Dl([1,cs([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=it(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 O(()=>{if(e=e,e.length!==2)throw new H(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let a=t.training==null?!1:t.training;0na(e),rate:this.dropout,training:a,dropoutFunc:this.dropoutFunc})),0na(n),rate:this.recurrentDropout,training:a,dropoutFunc:this.dropoutFunc}));let r,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?r=dr(W(e,s),this.kernel.read()):r=dr(e,this.kernel.read()),this.bias!=null&&(r=er(r,this.bias.read())),i!=null&&(n=W(n,i));let o=Q(r,dr(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:ds(this.activation),useBias:this.useBias,kernelInitializer:Et(this.kernelInitializer),recurrentInitializer:Et(this.recurrentInitializer),biasInitializer:Et(this.biasInitializer),kernelRegularizer:ht(this.kernelRegularizer),recurrentRegularizer:ht(this.recurrentRegularizer),biasRegularizer:ht(this.biasRegularizer),activityRegularizer:ht(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),recurrentConstraint:Kt(this.recurrentConstraint),biasConstraint:Kt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};lg.className="SimpleRNNCell";se.registerClass(lg);var n0=class extends xr{constructor(e){e.cell=new lg(e),super(e)}call(e,t){return O(()=>{this.cell.dropoutMask!=null&&(Me(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Me(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)}};n0.className="SimpleRNN";se.registerClass(n0);var ug=class extends bd{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 H("GRUCell does not support reset_after parameter set to true.");this.units=e.units,en(this.units,"units"),this.activation=hs(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=hs(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=Tt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Tt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Tt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=St(e.kernelRegularizer),this.recurrentRegularizer=St(e.recurrentRegularizer),this.biasRegularizer=St(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Dl([1,cs([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Dl([1,cs([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=it(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 O(()=>{if(e=e,e.length!==2)throw new H(`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],0na(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0na(a),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let r=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0{this.cell.dropoutMask!=null&&(Me(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Me(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)}};a0.className="GRU";se.registerClass(a0);var yd=class extends bd{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=hs(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=hs(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=Tt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=Tt(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=Tt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=St(e.kernelRegularizer),this.recurrentRegularizer=St(e.recurrentRegularizer),this.biasRegularizer=St(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Dl([1,cs([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Dl([1,cs([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=it(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 Zf().apply([s]),p=r.apply([s*2]);return Kk(Kk(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 O(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new H(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let a=e[1],r=e[2];e=e[0],0na(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0na(a),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,u,p;0{this.cell.dropoutMask!=null&&(Me(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Me(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)}};r0.className="LSTM";se.registerClass(r0);var pg=class extends bd{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 O(()=>{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{si(`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({},e,n)}static fromConfig(e,t,n={}){let a=[];for(let r of t.cells)a.push(Ka(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 cx(e)}setWeights(e){let t=[];for(let n of this.cells){let a=n.weights.length,r=e.splice(a);for(let s=0;ss!=null?s(t(),n):TN(t(),n),o=()=>cd(i,t,a);return!r||r<=1?Qt(o().clone()):Array(r).fill(void 0).map(o).map(l=>Qt(l.clone()))}var uG=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{if(this.cell.dropoutMask!=null&&(Me(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(Me(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new H("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 O(()=>{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){O(()=>{if(!this.stateful)throw new Sr("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 H("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)Me(this.states_),this.keptStates!=null&&(Me(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 H(`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()):Me(this.states_);for(let s=0;sQt(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=Xa(l,a[0],r,s[0],i[0]),d=Xa(u,a[1],r,s[1],i[1]);return[...e.slice(0,2),...o?[n,p,d]:[p,d,n]]}};h2.className="ConvRNN2D";var cg=class extends yd{constructor(e){let{filters:t,kernelSize:n,strides:a,padding:r,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t})),this.filters=t,en(this.filters,"filters"),this.kernelSize=Il(n,2,"kernelSize"),this.kernelSize.forEach(o=>en(o,"kernelSize")),this.strides=Il(a||1,2,"strides"),this.strides.forEach(o=>en(o,"strides")),this.padding=r||"valid",xa(this.padding),this.dataFormat=s||"channelsLast",Pt(this.dataFormat),this.dilationRate=Il(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>en(o,"dilationRate"))}build(e){var t;e=it(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new H(`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=Qn([u]),m=l.apply([u*2]);return vw([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 O(()=>{if(e.length!==3)throw new H(`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;0na(a),rate:this.dropout,training:n,count:i,dropoutFunc:this.dropoutFunc}));let o=this.dropoutMask,l=(te,re,J)=>!re||!re[J]?te:W(re[J],te),u=l(a,o,0),p=l(a,o,1),d=l(a,o,2),c=l(a,o,3);0na(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),b=l(r,h,3),y=3,[x,w,I,N]=Vn(this.kernel.read(),i,y),[_,$,A,M]=this.useBias?Vn(this.bias.read(),i):[null,null,null,null];u=this.inputConv(u,x,_,this.padding),p=this.inputConv(p,w,$,this.padding),d=this.inputConv(d,I,A,this.padding),c=this.inputConv(c,N,M,this.padding);let[D,T,P,U]=Vn(this.recurrentKernel.read(),i,y);m=this.recurrentConv(m,D),f=this.recurrentConv(f,T),g=this.recurrentConv(g,P),b=this.recurrentConv(b,U);let j=this.recurrentActivation.apply(Q(u,m)),q=this.recurrentActivation.apply(Q(p,f)),K=Q(W(q,s),W(j,this.activation.apply(Q(d,g)))),Y=W(this.recurrentActivation.apply(Q(c,b)),this.activation.apply(K));return[Y,Y,K]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=uG(e,["units"]),a={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,a)}inputConv(e,t,n,a){let r=Dt(e,t,this.strides,a||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?er(r,n,this.dataFormat):r}recurrentConv(e,t){return Dt(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};cg.className="ConvLSTM2DCell";se.registerClass(cg);var s0=class extends h2{constructor(e){let t=new cg(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};s0.className="ConvLSTM2D";se.registerClass(s0);var dg=class extends Ye{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.invokeCallHook(e,t);let n=We(e);if(0TN(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()}};dg.className="Dropout";se.registerClass(dg);var i0=class extends dg{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};i0.className="SpatialDropout1D";se.registerClass(i0);var o0=class extends Ye{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=hs(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=Tt(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=Tt(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Xt(e.kernelConstraint),this.biasConstraint=Xt(e.biasConstraint),this.kernelRegularizer=St(e.kernelRegularizer),this.biasRegularizer=St(e.biasRegularizer),this.activityRegularizer=St(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=it(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=it(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=We(e),a=bN(this.activation.getClassName()),r;return a!=null?r=dr(n,this.kernel.read(),a,this.bias?this.bias.read():null):(r=dr(n,this.kernel.read()),this.bias!=null&&(r=er(r,this.bias.read())),this.activation!=null&&(r=this.activation.apply(r))),r})}getConfig(){let e={units:this.units,activation:ds(this.activation),useBias:this.useBias,kernelInitializer:Et(this.kernelInitializer),biasInitializer:Et(this.biasInitializer),kernelRegularizer:ht(this.kernelRegularizer),biasRegularizer:ht(this.biasRegularizer),activityRegularizer:ht(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),biasConstraint:Kt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};o0.className="Dense";se.registerClass(o0);var l0=class extends Ye{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=it(e);for(let t of e.slice(1))if(t==null)throw new H(`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],os(e,1)]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=We(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let a=[0];for(let r=2;r{this.invokeCallHook(e,t);let n=We(e);return this.activation.apply(n)})}getConfig(){let e={activation:ds(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};u0.className="Activation";se.registerClass(u0);var p0=class extends Ye{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 O(()=>(e=We(e),wV(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};p0.className="RepeatVector";se.registerClass(p0);var c0=class extends Ye{constructor(e){super(e),this.targetShape=e.targetShape;for(let t=0;t{this.invokeCallHook(e,t);let n=We(e),a=n.shape,r=a.slice(0,1).concat(this.fixUnknownDimension(a.slice(1),this.targetShape));return B(n,r)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};c0.className="Reshape";se.registerClass(c0);var d0=class extends Ye{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=Ya(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=it(e);let t=e.slice();return this.dims.forEach((n,a)=>{t[a+1]=e[n]}),t}call(e,t){return Ae(We(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};d0.className="Permute";se.registerClass(d0);var h0=class extends Ye{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=We(e),a=-1;return dc(gi(n,this.maskValue),a)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=We(e),a=-1,r=!0,s=dc(gi(n,this.maskValue),a,r);return W(n,le(s,n.dtype))})}};h0.className="Masking";se.registerClass(h0);var m0=class extends Ye{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(wt(e.inputLength))}this.inputDim=e.inputDim,en(this.inputDim,"inputDim"),this.outputDim=e.outputDim,en(this.outputDim,"outputDim"),this.embeddingsInitializer=Tt(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=St(e.embeddingsRegularizer),this.activityRegularizer=St(e.activityRegularizer),this.embeddingsConstraint=Xt(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 O(()=>this.maskZero?(e=We(e),gi(e,qe(e))):null)}computeOutputShape(e){if(e=it(e),this.inputLength==null)return[...e,this.outputDim];let t=wt(this.inputLength);if(t.length!==e.length-1)throw new H(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let a=0;a{this.invokeCallHook(e,t);let n=We(e);n.dtype!=="int32"&&(n=Xf(n,"int32"));let a=IN(this.embeddings.read(),B(n,[n.size]));return B(a,it(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:Et(this.embeddingsInitializer),embeddingsRegularizer:ht(this.embeddingsRegularizer),activityRegularizer:ht(this.activityRegularizer),embeddingsConstraint:Kt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};m0.className="Embedding";se.registerClass(m0);var _o=class extends Ye{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Oe}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length1)throw new H(`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;rr.length);e.indexOf(null)===-1&&is(a).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return O(()=>{if(e=e,this.reshapeRequired){let n=[],a=e.map(r=>r.rank);if(a.indexOf(null)===-1){let r=cs(a);for(let s of e){let i=s.rank;for(let o=0;o1){let u=Ya(1,l).concat([0]);n.push(Ae(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=B(Ae(B(s,[-1,u]),[1,0]),p)}else if(i>1){let o=[i-1].concat(Ya(0,i-1));s=Ae(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{if(t==null)return null;if(!Array.isArray(t))throw new H("`mask` should be an Array");if(!Array.isArray(e))throw new H("`inputs` should be an Array");if(t.length!==e.length)throw new H(`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:mn(a,0));let n=t[0];for(let a=1;a{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0].clone();for(let n=1;n{let t=e[0];for(let n=1;n{let t=e[0];for(let n=1;n1)throw new H("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return O(()=>vw(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new H("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 H("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new H("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new H(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return O(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let a=[];for(let s=0;s3||t.shape.length>3)throw new Oe("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 Oe("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 O(()=>{let i;if(a>r){i=a-r;let l=[];for(let u=0;ua){i=r-a;let l=[];for(let u=0;u0){let l;a>r?l=a+r-3:l=a-1;let u=[];for(let p=l;p"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 Oe("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 H(`Dimension incompatibility: ${t[a[0]]} !== ${n[a[1]]}`)}mergeFunction(e){if(e.length!==2)throw new H(`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)=>Gp(r,e[s].shape.length)):a=[Gp(this.axes,t.shape.length),Gp(this.axes,n.shape.length)],this.normalize&&(t=dm(t,a[0]),n=dm(n,a[1])),pG(t,n,a)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Gp(this.axes,e.length),Gp(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 Oe("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}};w0.className="Dot";se.registerClass(w0);var k0=class extends Ye{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 O(()=>{this.invokeCallHook(e,t);let n=We(e);return cd(()=>Q(Yf(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};k0.className="GaussianNoise";se.registerClass(k0);var I0=class extends Ye{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 O(()=>{this.invokeCallHook(e,t);let n=We(e);return this.rate>0&&this.rate<1?cd(()=>{let a=Math.sqrt(this.rate/(1-this.rate));return W(n,Yf(n.shape,1,a))},()=>n,t.training||!1):n})}};I0.className="GaussianDropout";se.registerClass(I0);var T0=class extends Ye{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||We(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 O(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return cd(()=>{let a=We(e),r=1.6732632423543772,s=1.0507009873554805,i=-r*s,o=Cs(Qu(n),this.rate);o=Xf(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,u=-l*i*this.rate,p=Q(W(a,o),W(Q(o,-1),i));return Q(W(p,l),u)},()=>We(e),t.training||!1)}return e})}};T0.className="AlphaDropout";se.registerClass(T0);function bc(e,t,n,a,r,s=.001){let i;if(e.rank===2)i=Iv(e,t,n,a,r,s);else if(e.rank===3)i=Tv(e,t,n,a,r,s);else if(e.rank===4)i=Sv(e,t,n,a,r,s);else throw new Oe(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function cG(e,t,n,a,r=.001){return O(()=>{let s=td(e,a),i=s.mean,o=s.variance;return[bc(e,i,o,n,t,r),i,o]})}function dG(e,t,n,a,r=.001){return O(()=>{let s=td(e,a),i=s.mean,o=s.variance,l=[];for(let h of Ya(0,e.rank))a.indexOf(h)!==-1?l.push(1):l.push(e.shape[h]);let u=B(i,l),p=B(o,l),d=t==null?null:B(t,l),c=n==null?null:B(n,l);return[bc(e,u,p,c,d,r),i,o]})}function hG(e,t,n,a,r=.001){return v.arraysEqual(a.slice().sort(),Ya(0,e.rank-1))?cG(e,t,n,a,r):dG(e,t,n,a,r)}var S0=class extends Ye{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=Tt(e.betaInitializer||"zeros"),this.gammaInitializer=Tt(e.gammaInitializer||"ones"),this.movingMeanInitializer=Tt(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=Tt(e.movingVarianceInitializer||"ones"),this.betaConstraint=Xt(e.betaConstraint),this.gammaConstraint=Xt(e.gammaConstraint),this.betaRegularizer=St(e.betaRegularizer),this.gammaRegularizer=St(e.gammaRegularizer)}build(e){e=it(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new H(`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 O(()=>{let n=t.training==null?!1:t.training,a=We(e),r=a.shape,s=r.length,i=Ya(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=bi(1,s);l[o]=r[o];let u=i.slice();u.sort();let p=!v.arraysEqual(u,Ya(0,s).slice(0,s-1)),d=()=>{if(p){let g=B(this.movingMean.read(),l),b=B(this.movingVariance.read(),l),y=this.center?B(this.beta.read(),l):null,x=this.scale?B(this.gamma.read(),l):null;return bc(a,g,b,y,x,this.epsilon)}else return bc(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]=hG(a,this.gamma.read(),this.beta.read(),i,this.epsilon),f=(g,b,y)=>{O(()=>{let x=1-y,w=g.read(),I=W(ce(w,b),x);g.write(ce(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:Et(this.betaInitializer),gammaInitializer:Et(this.gammaInitializer),movingMeanInitializer:Et(this.movingMeanInitializer),movingVarianceInitializer:Et(this.movingVarianceInitializer),betaRegularizer:ht(this.betaRegularizer),gammaRegularizer:ht(this.gammaRegularizer),betaConstraint:Kt(this.betaConstraint),gammaConstraint:Kt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};S0.className="BatchNormalization";se.registerClass(S0);var N0=class extends Ye{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=Tt(e.betaInitializer||"zeros"),this.gammaInitializer=Tt(e.gammaInitializer||"ones"),this.betaRegularizer=St(e.betaRegularizer),this.gammaRegularizer=St(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=it(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let r=0;r=t)throw new Error(`Invalid axis: ${r}`);if(this.axis.length!==is(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=We(e),a=n.shape,r=a.length;return O(()=>{let{mean:s,variance:i}=td(n,this.axis,!0),o=bi(1,r);for(let h of this.axis)o[h]=a[h];let l=h=>h!=null&&h.shape.length!==r?B(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{if(e.rank!==4)throw new H(`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 H("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=Za()),n!=="channelsLast"&&n!=="channelsFirst")throw new H(`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]],ya(e,a)})}var C0=class extends Ye{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?Za():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 H(`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 H(`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 H(`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=it(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 O(()=>mG(We(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};C0.className="ZeroPadding2D";se.registerClass(C0);function hg(e,t,n,a,r,s){return O(()=>{Pt(r),xN(s),xa(a),n==null&&(n=[1,1]),a==null&&(a="valid"),r==null&&(r=Za()),s==null&&(s="max"),e=Kw(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=Mt(e,t,n,o):i=ba(e,t,n,o),r==="channelsFirst"&&(i=Ae(i,[0,3,1,2])),i})}function m2(e,t,n,a,r,s){return O(()=>{Pt(r),xN(s),xa(a),n==null&&(n=[1,1,1]),a==null&&(a="valid"),r==null&&(r=Za()),s==null&&(s="max"),e=u2(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=Yv(e,t,n,o):i=kv(e,t,n,o),r==="channelsFirst"&&(i=Ae(i,[0,4,1,2,3])),i})}var f2=class extends Ye{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 H(`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 H(`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=it(e);let t=Xa(e[1],this.poolSize[0],this.padding,this.strides[0]);return[e[0],t,e[2]]}call(e,t){return O(()=>{this.invokeCallHook(e,t),e=ud(We(e),2);let n=this.poolingFunction(We(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return $s(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},_0=class extends f2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),hg(e,t,n,a,r,"max")}};_0.className="MaxPooling1D";se.registerClass(_0);var E0=class extends f2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),hg(e,t,n,a,r,"avg")}};E0.className="AveragePooling1D";se.registerClass(E0);var g2=class extends Ye{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 H(`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,Pt(this.dataFormat),xa(this.padding),this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){e=it(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Xa(t,this.poolSize[0],this.padding,this.strides[0]),n=Xa(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 O(()=>(this.invokeCallHook(e,t),this.poolingFunction(We(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}},$0=class extends g2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),hg(e,t,n,a,r,"max")}};$0.className="MaxPooling2D";se.registerClass($0);var A0=class extends g2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),hg(e,t,n,a,r,"avg")}};A0.className="AveragePooling2D";se.registerClass(A0);var b2=class extends Ye{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 H(`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,Pt(this.dataFormat),xa(this.padding),this.inputSpec=[new zt({ndim:5})]}computeOutputShape(e){e=it(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=Xa(t,this.poolSize[0],this.padding,this.strides[0]),n=Xa(n,this.poolSize[1],this.padding,this.strides[1]),a=Xa(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 O(()=>(this.invokeCallHook(e,t),this.poolingFunction(We(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}},F0=class extends b2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),m2(e,t,n,a,r,"max")}};F0.className="MaxPooling3D";se.registerClass(F0);var D0=class extends b2{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Pt(r),xa(a),m2(e,t,n,a,r,"avg")}};D0.className="AveragePooling3D";se.registerClass(D0);var y2=class extends Ye{constructor(e){super(e),this.inputSpec=[new zt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Oe}},R0=class extends y2{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=We(e);return _t(n,1)})}};R0.className="GlobalAveragePooling1D";se.registerClass(R0);var M0=class extends y2{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=We(e);return _a(n,1)})}};M0.className="GlobalMaxPooling1D";se.registerClass(M0);var x2=class extends Ye{constructor(e){super(e),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(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 Oe}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},P0=class extends x2{call(e,t){return O(()=>{let n=We(e);return this.dataFormat==="channelsLast"?_t(n,[1,2]):_t(n,[2,3])})}};P0.className="GlobalAveragePooling2D";se.registerClass(P0);var O0=class extends x2{call(e,t){return O(()=>{let n=We(e);return this.dataFormat==="channelsLast"?_a(n,[1,2]):_a(n,[2,3])})}};O0.className="GlobalMaxPooling2D";se.registerClass(O0);var v2=class extends Ye{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=Ka(a,n);delete t.layer;let s={layer:r};return Object.assign(s,t),new e(s)}},L0=class extends v2{constructor(e){super(e),this.supportsMasking=!0}build(e){if(e=it(e),e.length<3)throw new H(`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=it(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 O(()=>(e=We(e),d2((n,a)=>[We(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};L0.className="TimeDistributed";se.registerClass(L0);function fG(e){No(gV,"BidirectionalMergeMode",e)}var gG="concat",z0=class extends v2{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Ka(n),t.goBackwards=t.goBackwards!==!0;let a={};if(a.className=e.layer.getClassName(),a.config=t,this.backwardLayer=Ka(a),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?gG:e.mergeMode,fG(this.mergeMode),e.weights)throw new Oe("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()):zn(a)}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=c2(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 H("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 Oe("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof ja;for(let l of s)if(l instanceof ja!==o)throw new H("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 O(()=>{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=vw([a,r]):this.mergeMode==="sum"?i=Q(a,r):this.mergeMode==="ave"?i=W(.5,Q(a,r)):this.mergeMode==="mul"?i=W(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){si(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),si(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=Ka(t.layer);if(delete t.layer,t.numConstants!=null)throw new Oe("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let a=t;return a.layer=n,new e(a)}};z0.className="Bidirectional";se.registerClass(z0);function bG(e){return new tp(e)}function yG(e){return new Hw(e)}function xG(e){return new Vw(e)}function vG(e){return new Uw(e)}function wG(e){return new Gw(e)}function kG(e){return new qw(e)}function IG(e){return new jw(e)}function TG(e){return new og(e)}function SG(e){return new fd(e)}function NG(e){return new Yw(e)}function CG(e){return new gd(e)}function _G(e){return new Zw(e)}function EG(e){return new Jw(e)}function $G(e){return new Qw(e)}function AG(e){return new e0(e)}function FG(e){return new t0(e)}function DG(e){return new u0(e)}function RG(e){return new o0(e)}function MG(e){return new dg(e)}function PG(e){return new i0(e)}function OG(e){return new l0(e)}function LG(e){return new p0(e)}function zG(e){return new c0(e)}function WG(e){return new d0(e)}function BG(e){return new m0(e)}function VG(e){return new f0(e)}function UG(e){return new b0(e)}function GG(e){return new v0(e)}function HG(e){return new y0(e)}function jG(e){return new x0(e)}function qG(e){return new g0(e)}function KG(e){return new w0(e)}function XG(e){return new S0(e)}function YG(e){return new N0(e)}function ZG(e){return new C0(e)}function W0(e){return new E0(e)}function JG(e){return W0(e)}function QG(e){return W0(e)}function B0(e){return new A0(e)}function eH(e){return B0(e)}function tH(e){return B0(e)}function V0(e){return new D0(e)}function nH(e){return V0(e)}function aH(e){return V0(e)}function rH(e){return new R0(e)}function sH(e){return new P0(e)}function w2(e){return new M0(e)}function k2(e){return new O0(e)}function I2(e){return new _0(e)}function T2(e){return new $0(e)}function iH(e){return new F0(e)}function oH(e){return new a0(e)}function lH(e){return new ug(e)}function uH(e){return new r0(e)}function pH(e){return new yd(e)}function cH(e){return new n0(e)}function dH(e){return new lg(e)}function hH(e){return new s0(e)}function mH(e){return new cg(e)}function fH(e){return new xr(e)}function gH(e){return new pg(e)}function bH(e){return new z0(e)}function yH(e){return new L0(e)}var xH=w2,vH=k2,wH=I2,kH=T2;function IH(e){return new k0(e)}function TH(e){return new I0(e)}function SH(e){return new T0(e)}function NH(e){return new h0(e)}var S2={};Fe(S2,{MAPE:()=>OH,MSE:()=>WH,binaryAccuracy:()=>CH,binaryCrossentropy:()=>_H,categoricalAccuracy:()=>$H,categoricalCrossentropy:()=>AH,cosineProximity:()=>RH,mape:()=>LH,meanAbsoluteError:()=>MH,meanAbsolutePercentageError:()=>PH,meanSquaredError:()=>zH,mse:()=>BH,precision:()=>FH,recall:()=>DH,sparseCategoricalAccuracy:()=>EH});function CH(e,t){return Mw(e,t)}function _H(e,t){return zN(e,t)}function EH(e,t){return WN(e,t)}function $H(e,t){return Pw(e,t)}function AH(e,t){return Ow(e,t)}function FH(e,t){return LN(e,t)}function DH(e,t){return vU(e,t)}function RH(e,t){return Rw(e,t)}function MH(e,t){return sg(e,t)}function PH(e,t){return np(e,t)}function OH(e,t){return np(e,t)}function LH(e,t){return np(e,t)}function zH(e,t){return Co(e,t)}function WH(e,t){return Co(e,t)}function BH(e,t){return Co(e,t)}var N2={};Fe(N2,{modelFromJSON:()=>YU});var C2={};Fe(C2,{l1:()=>UH,l1l2:()=>VH,l2:()=>GH});function VH(e){return new hd(e)}function UH(e){return rG(e)}function GH(e){return sG(e)}var _2=class extends Rl{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof Fr))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Dh(e,t){return et}var E2=class extends _2{constructor(e){if(super(),e==null&&(e={}),e.restoreBestWeights)throw new Oe("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=Dh:this.mode==="max"?this.monitorFunc=cI:this.monitor.indexOf("acc")!==-1?this.monitorFunc=cI:this.monitorFunc=Dh,this.monitorFunc===Dh&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Dh?1/0:-1/0}async onEpochEnd(e,t){await es(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 HH(e){return new E2(e)}var jH={earlyStopping:HH},qH=X();qH.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 Sa;(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"})(Sa||(Sa={}));var dI;(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={}))})(dI||(dI={}));var U0={};function KH(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};U0[e]=n}function $2(e){return U0[e]}function XH(e){delete U0[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 Tn(t.inputNames[s.inputIndexStart],n,a,r);if(s.type==="tensors")return t.inputNames.slice(o,l).map(d=>Tn(d,n,a,r));let u=Tn(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 Tn(e,t,n,a){let[r,s]=Zn(e);if(a!=null){let o=a.getHashTableHandleByName(r);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[bm(r,o)]);return i!==void 0?t[bm(r,i)][s]:void 0}function YH(e,t,n){return t[bm(e,n.currentContextId)]}function pr(e,t){let[n,a,r]=Zn(e);return[bm(n,t&&t.currentContextId),a,r]}function bm(e,t){return t?`${e}-${t}`:e}function Zn(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 Vh(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 Cr(e){return e.kept?e:cr(e)}var A2={};Fe(A2,{json:()=>ZH});var ZH=[{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}]}],F2={};Fe(F2,{json:()=>JH});var JH=[{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}]}],D2={};Fe(D2,{json:()=>QH});var QH=[{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"}]}],R2={};Fe(R2,{json:()=>e6});var e6=[{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"}]}],M2={};Fe(M2,{json:()=>t6});var t6=[{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"}]}],P2={};Fe(P2,{json:()=>n6});var n6=[{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}]}],O2={};Fe(O2,{json:()=>a6});var a6=[{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"}]}],L2={};Fe(L2,{json:()=>r6});var r6=[{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"}]}],z2={};Fe(z2,{json:()=>s6});var s6=[{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"}]}],W2={};Fe(W2,{json:()=>i6});var i6=[{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"}]}],B2={};Fe(B2,{json:()=>o6});var o6=[{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}]}],V2={};Fe(V2,{json:()=>l6});var l6=[{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"}]}],U2={};Fe(U2,{json:()=>u6});var u6=[{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}]}],G2={};Fe(G2,{json:()=>p6});var p6=[{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"}]}],H2={};Fe(H2,{json:()=>c6});var c6=[{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}]}],j2={};Fe(j2,{json:()=>d6});var d6=[{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"}]}],q2={};Fe(q2,{json:()=>h6});var h6=[{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}]}],K2={};Fe(K2,{json:()=>m6});var m6=[{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"}]}],X2={};Fe(X2,{json:()=>f6});var f6=[{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:[]}],hI=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[A2,F2,D2,R2,M2,P2,O2,L2,z2,W2,B2,V2,U2,G2,H2,j2,q2,K2,X2],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,a)=>(n[a.tfOpName]=a,n),{})}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,b)=>{let[y,,x]=pr(g),w=i[y];if(w.outputs!=null){let I=w.outputs.indexOf(x);if(I!==-1){let N=`${y}:${I}`;f.inputNames[b]=N}}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]=pr(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]=pr(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=$2(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=bx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=bx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=Tx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Tx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=xx(e.attr,r.tfName,r.defaultValue||0),i===void 0&&!!r.tfDeprecatedName&&(i=xx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=Ix(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Ix(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=yx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=yx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=Nx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Nx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=kx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=kx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=Sx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Sx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=vx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=vx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=wx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=wx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=mI(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=mI(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]=pr(u.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:G0(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]=pr(d),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let b=`${h}:${g}`;p.inputNames[c]=b}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,d]=pr(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 g6(e){let t=X().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 Y2(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):g6(e);return t?n:n.toLowerCase()}function bx(e,t,n,a=!1){let r=e[t];return r!=null?Y2(r.s,a):n}function yx(e,t,n){let a=e[t];return a?a.b:n}function xx(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 G0(e){switch(typeof e=="string"&&(e=Sa[e]),e){case Sa.DT_FLOAT:case Sa.DT_HALF:return"float32";case Sa.DT_INT32:case Sa.DT_INT64:case Sa.DT_INT8:case Sa.DT_UINT8:return"int32";case Sa.DT_BOOL:return"bool";case Sa.DT_DOUBLE:return"float32";case Sa.DT_STRING:return"string";default:return null}}function mI(e,t,n){let a=e[t];return a&&a.func?a.func.name:n}function vx(e,t,n){let a=e[t];return a&&a.type?G0(a.type):n}function wx(e,t,n){let a=e[t];return a&&a.list&&a.list.type?a.list.type.map(r=>G0(r)):n}function Z2(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function kx(e,t,n){let a=e[t];return a&&a.shape?Z2(a.shape):n}function Ix(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 Tx(e,t,n,a=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>Y2(s,a)):n}function Sx(e,t,n){let a=e[t];return a&&a.list&&a.list.shape?a.list.shape.map(r=>Z2(r)):n}function Nx(e,t,n){let a=e[t];return a&&a.list&&a.list.b?a.list.b:n}var b6=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 Tn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return Tn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return xx(this.node.rawAttrs,e,t);if(n.s!=null)return bx(this.node.rawAttrs,e,t);if(n.b!=null)return yx(this.node.rawAttrs,e,t);if(n.shape!=null)return kx(this.node.rawAttrs,e,t);if(n.type!=null)return vx(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return Ix(this.node.rawAttrs,e,t);if(n.list.s!=null)return Tx(this.node.rawAttrs,e,t);if(n.list.shape!=null)return Sx(this.node.rawAttrs,e,t);if(n.list.b!=null)return Nx(this.node.rawAttrs,e,t);if(n.list.type!=null)return wx(this.node.rawAttrs,e,t)}return t}},pn={};Fe(pn,{OP_SCOPE_SUFFIX:()=>Qx,abs:()=>Lt,acos:()=>hv,acosh:()=>mv,add:()=>Q,addN:()=>rS,all:()=>hf,any:()=>dc,argMax:()=>hi,argMin:()=>fv,asin:()=>gv,asinh:()=>bv,atan:()=>yv,atan2:()=>xv,atanh:()=>vv,avgPool:()=>ba,avgPool3d:()=>kv,basicLSTMCell:()=>lS,batchNorm:()=>Ss,batchNorm2d:()=>Iv,batchNorm3d:()=>Tv,batchNorm4d:()=>Sv,batchToSpaceND:()=>Yc,bincount:()=>Nv,booleanMaskAsync:()=>US,broadcastArgs:()=>uS,broadcastTo:()=>ri,buffer:()=>ze,cast:()=>le,ceil:()=>Cv,clipByValue:()=>tn,clone:()=>cr,complex:()=>Dr,concat:()=>Qe,concat1d:()=>_v,concat2d:()=>Ev,concat3d:()=>$v,concat4d:()=>Av,conv1d:()=>mf,conv2d:()=>Dt,conv2dTranspose:()=>ff,conv3d:()=>Dv,conv3dTranspose:()=>Rv,cos:()=>Zc,cosh:()=>gf,cosineWindow:()=>Of,cumprod:()=>hc,cumsum:()=>bf,denseBincount:()=>cS,depthToSpace:()=>Mv,depthwiseConv2d:()=>Ns,diag:()=>dS,dilation2d:()=>Pv,div:()=>fe,divNoNan:()=>Ov,dot:()=>Lv,dropout:()=>cw,einsum:()=>hS,elu:()=>Ku,enclosingPowerOfTwo:()=>dw,equal:()=>ea,erf:()=>zv,euclideanNorm:()=>Vv,exp:()=>gn,expandDims:()=>mn,expm1:()=>Uv,eye:()=>yf,fft:()=>sd,fill:()=>$n,floor:()=>Yu,floorDiv:()=>df,fused:()=>Fl,gather:()=>Zu,gatherND:()=>qS,greater:()=>jn,greaterEqual:()=>Cs,ifft:()=>Al,imag:()=>qc,image:()=>Er,inTopKAsync:()=>KS,irfft:()=>Df,isFinite:()=>Gv,isInf:()=>Hv,isNaN:()=>jv,leakyRelu:()=>Jc,less:()=>xf,lessEqual:()=>_s,linalg:()=>fw,linspace:()=>yS,localResponseNormalization:()=>qv,log:()=>ta,log1p:()=>Qc,logSigmoid:()=>Kv,logSoftmax:()=>wf,logSumExp:()=>kf,logicalAnd:()=>$a,logicalNot:()=>ed,logicalOr:()=>If,logicalXor:()=>Xv,losses:()=>iN,lowerBound:()=>vS,matMul:()=>Re,max:()=>_a,maxPool:()=>Mt,maxPool3d:()=>Yv,maxPoolWithArgmax:()=>wS,maximum:()=>br,mean:()=>_t,meshgrid:()=>kS,min:()=>mc,minimum:()=>Ju,mirrorPad:()=>Zv,mod:()=>Jv,moments:()=>td,movingAverage:()=>GS,mul:()=>W,multiRNNCell:()=>IS,multinomial:()=>TS,neg:()=>kt,norm:()=>Xu,notEqual:()=>gi,oneHot:()=>Cl,ones:()=>Qn,onesLike:()=>na,op:()=>z,outerProduct:()=>SS,pad:()=>ya,pad1d:()=>NS,pad2d:()=>CS,pad3d:()=>_S,pad4d:()=>ES,pool:()=>Qv,pow:()=>Rr,prelu:()=>ad,print:()=>av,prod:()=>ew,raggedTensorToTensor:()=>$S,rand:()=>AS,randomGamma:()=>FS,randomNormal:()=>Sf,randomStandardNormal:()=>DS,randomUniform:()=>Qu,range:()=>El,real:()=>_l,reciprocal:()=>aw,relu:()=>Xe,relu6:()=>Nf,reshape:()=>B,reverse:()=>ga,reverse1d:()=>RS,reverse2d:()=>MS,reverse3d:()=>PS,reverse4d:()=>OS,rfft:()=>id,round:()=>Cf,rsqrt:()=>_f,scalar:()=>ke,scatterND:()=>HS,searchSorted:()=>Tf,selu:()=>Ef,separableConv2d:()=>Es,setdiff1dAsync:()=>LS,sigmoid:()=>ha,sign:()=>rw,signal:()=>sN,sin:()=>$f,sinh:()=>Af,slice:()=>He,slice1d:()=>rd,slice2d:()=>Ff,slice3d:()=>To,slice4d:()=>$l,softmax:()=>Qa,softplus:()=>Io,spaceToBatchND:()=>nd,sparse:()=>oN,sparseToDense:()=>jS,spectral:()=>rN,split:()=>Vn,sqrt:()=>un,square:()=>ut,squaredDifference:()=>Rf,squeeze:()=>$s,stack:()=>Rt,step:()=>So,stridedSlice:()=>sw,string:()=>lN,sub:()=>ce,sum:()=>ye,tan:()=>iw,tanh:()=>mi,tensor:()=>Bn,tensor1d:()=>Ke,tensor2d:()=>Ea,tensor3d:()=>Kc,tensor4d:()=>Fa,tensor5d:()=>zS,tensor6d:()=>WS,tile:()=>Wn,topk:()=>ow,transpose:()=>Ae,truncatedNormal:()=>Mf,unique:()=>lw,unsortedSegmentSum:()=>Pf,unstack:()=>mt,upperBound:()=>BS,variable:()=>uw,where:()=>fn,whereAsync:()=>pw,zeros:()=>It,zerosLike:()=>qe});var y6=(e,t,n,a=pn)=>{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`)}},x6=(e,t,n,a=pn)=>{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(Tn(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(Tn(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Ca(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;an+` Shapes ${e} and ${t} must match`)}}}function fI(e){return!(typeof e=="number"||e.some(t=>t<0))}function Hp(e,t,n){let a=Cx(e,n),r=!fI(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=Cx(s.shape,a)}),!fI(a))throw new Error(`Non-fully-defined elementShape: ${a}`);return a}function Cx(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=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[a]=r>=0?r:s}return n}var v6=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=ke(0),Qt(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),Ca(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,Qt(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.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,mt(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=[];O(()=>{t=B(t,[1,n,r]);for(let o=0;o{if(n!==r.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${r.dtype}`);Ca(t,r.shape,"TensorList shape mismatch: "),Qt(r)}),this.idTensor=ke(0),this.maxNumElements=a,Qt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Pl([...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.`);Ca(e,this.elementShape,"TensorList shape mismatch: ");let a=Hp(this.elementShape,this.tensors,e);return O(()=>{let r=this.tensors.map(s=>B(s,a));return Rt(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=Hp(this.elementShape,this.tensors,e),a=this.tensors.pop();return a.kept=!1,Ca(a.shape,e,"TensorList shape mismatch: "),B(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(Ca(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Qt(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 Pl([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let n=0;nthis.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.`);Ca(this.tensors[e].shape,t,"TensorList shape mismatch: ");let a=Hp(this.elementShape,this.tensors,t);return B(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.`);Ca(this.elementShape,t.shape,"TensorList shape mismatch: "),Qt(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}`);Ca(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let a=Hp(this.elementShape,this.tensors,n);return e.length===0?Bn([],[0].concat(a)):O(()=>{let r=e.map(s=>B(this.tensors[s],a));return Rt(r,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Ca(this.elementShape,t,"TensorList shape mismatch: ");let n=Hp(this.elementShape,this.tensors,t);return this.size()===0?Bn([],[0].concat(n)):O(()=>{let a=this.tensors.map(r=>B(r,n));return Qe(a,0)})}};function w6(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);Ca(r,t,"TensorList shape mismatch: ");let s=mt(e);return new Pl(s,t,a)}function k6(e,t,n,a){return new Pl([],e,t,a)}function I6(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 Pl([],n,e.dtype,a),i=mt(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function T6(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=Cx(s,n),o=a===0?0:e.size/a,l=O(()=>{let p=[];e=B(e,[1,a,o]);for(let d=0;d{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[Cr(a)]}case"Switch":{let a=k("pred",e,t,n),r=k("data",e,t,n);return r.kept||(r=Cr(r)),(await a.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let a=e.inputNames.find(r=>Tn(r,t,n)!==void 0);if(a){let r=Tn(a,t,n);return[Cr(r)]}return}case"Enter":{let a=k("frameName",e,t,n),r=k("tensor",e,t,n);return n.enterFrame(a),[Cr(r)]}case"Exit":{let a=k("tensor",e,t,n);return n.exitFrame(),[Cr(a)]}case"NextIteration":{let a=k("tensor",e,t,n);return n.nextIteration(),[Cr(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 v6(u,r,a,s,l,i,o);return n.addTensorArray(p),[p.idTensor,ke(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[ke(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=I6(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=k6(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=w6(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=T6(a,s,r);return n.addTensorList(i),[i.idTensor]}case"TensorListLength":{let a=k("tensorListId",e,t,n),r=n.getTensorList(a.id);return[ke(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 gI(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=Vh(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=pn)=>{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=Vh(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}=gI(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}=gI(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=Vh(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=Vh(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`)}},C6=(e,t,n,a=pn)=>{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 Wy(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 _6=async(e,t,n,a,r=pn)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:s,scores:i,maxOutputSize:o,iouThreshold:l,scoreThreshold:u,softNmsSigma:p}=Wy(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}=Wy(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}=Wy(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`)}},E6=(e,t,n,a=pn)=>{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`)}},$6=(e,t,n,a=pn)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let r=k("default",e,t,n);return[Tn(e.name,t,n)||r];case"Placeholder":return[Tn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let p=k("x",e,t,n);return[Cr(p)]}case"IdentityN":return k("x",e,t,n).map(p=>Cr(p));case"Snapshot":let s=k("x",e,t,n);return[Cr(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;pe.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return ke(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(),O(()=>{let a=mt(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{let a=[];for(let r=0;r{switch(e.op){case"HashTable":case"HashTableV2":{let r=k("keyDType",e,t,n),s=k("valueDType",e,t,n),i=new A6(r,s);return a.addHashTable(e.name,i),[i.handle]}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`)}},D6=(e,t,n,a=pn)=>{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`)}},R6=(e,t,n,a=pn)=>{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`)}},M6=(e,t,n,a=pn)=>{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`)}},P6=(e,t,n,a=pn)=>{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`)}},O6=(e,t,n,a=pn)=>{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`)}},L6=(e,t,n,a=pn)=>{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{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`)}},z6=(e,t,n,a=pn)=>{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`)}},W6=(e,t,n,a=pn)=>{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=pn)=>{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`)}},V6=(e,t,n,a=pn)=>{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 bI(e,t,n,a,r=O){let s=((i,o,l)=>{switch(i.category){case"arithmetic":return r(()=>y6(i,o,l));case"basic_math":return r(()=>x6(i,o,l));case"control":return S6(i,o,l);case"convolution":return r(()=>N6(i,o,l));case"creation":return r(()=>C6(i,o,l));case"dynamic":return _6(i,o,l);case"evaluation":return r(()=>E6(i,o,l));case"image":return r(()=>D6(i,o,l));case"graph":return r(()=>$6(i,o,l));case"logical":return r(()=>R6(i,o,l));case"matrices":return r(()=>M6(i,o,l));case"normalization":return r(()=>P6(i,o,l));case"reduction":return r(()=>O6(i,o,l));case"slice_join":return r(()=>L6(i,o,l));case"sparse":return r(()=>z6(i,o,l));case"spectral":return r(()=>W6(i,o,l));case"string":return r(()=>B6(i,o,l));case"transformation":return r(()=>V6(i,o,l));case"hash_table":return F6(i,o,l,a);case"custom":let u=$2(i.op);if(u&&u.customExecutor)return u.customExecutor(new b6(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 yI=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;tt.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 xI(e,t,n,a){let r=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(c=>Zn(c)[0]),p=[];a!=null&&(p=a.map(c=>Zn(c.name)[0]));let d=[...t];for(;d.length>0;){let c=d.pop();if((J2(c)||q6(c)||K6(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 U6(e,t,n){let{usedNodes:a,inputs:r}=n,s=[],i=Object.keys(r).map(p=>Zn(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 G6=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],H6=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],j6=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function J2(e){return G6.indexOf(e.op)>=0}function q6(e){return H6.indexOf(e.op)>=0}function K6(e){return j6.indexOf(e.op)>=0}var _x=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!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 _x(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=xI(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 U6(this.graph,this.weightMap,n)}execute(e,t){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[Zn(p)[0]]),r=t.map(p=>Zn(p)[0]),s=r.map(p=>this.graph.nodes[p]);this.resetIntermediateTensors(),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));let l={},u={};return O(()=>{let p=new yI(this.weightMap,l,u,this.functionExecutorMap),d=Object.assign({},this.weightMap);Object.keys(e).forEach(m=>{let[f,g]=Zn(m),b=[];b[g]=e[m],d[f]=b});let c=this.getFrozenTensorIds(d),h={};for(let m=0;mTn(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=YH(o.name,n,a);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!r.has(u.id)){let p=i[u.id];if(p===1){if(!this.keepTensorForDebug)u.dispose();else{let[d,c]=pr(t.name,a);this.intermediateTensors[d]?this.intermediateTensors[d][c]=u:(this.intermediateTensors[d]=[],this.intermediateTensors[d][c]=u)}delete i[u.id]}else p!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(t=>{t&&!t.kept&&!t.isDisposed&&!this.keepIds.has(t.id)&&t.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,n=!1,a={},r={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=X().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(u){console.warn(u.message)}this.resetIntermediateTensors();let s=new yI(this.weightMap,a,r,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,s,t,n);let i=t.map(u=>Tn(u,this.tensorsMap,s)),o=i.map(u=>u.id),l=Object.keys(e).map(u=>e[u].id);return this.keepIds=new Set([...o,...l,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&s.dispose(this.keepIds),i}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(y=>this.graph.nodes[Zn(y)[0]]),i=n.map(y=>Zn(y)[0]),o=i.map(y=>this.graph.nodes[y]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:p,syncInputs:d}=xI(e,o,this.weightMap,this._initNodes),c=[...s,...this.graph.weights,...this._initNodes||[]].map(y=>({node:y,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(y=>{let[x,w]=Zn(y),I=[];I[w]=e[y],h[x]=I});let m={},f=this.getFrozenTensorIds(h),g={};for(;c.length>0;){let y=this.processStack(s,c,t,h,g,f,i,m,l);await Promise.all(y)}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 b=o.filter(y=>!J2(y)&&!Tn(y.name,h,t)).map(y=>y.name);if(b.length>0){let y="";throw p!=null&&(y=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${r}]. Consider providing the following inputs: [${u}]. ${y}`)}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]=pr(p.node.name,n)),a[p.node.name]==null){let c=bI(p.node,a,n,this._resourceManager);d||([d]=pr(p.node.name,n));let h=n.currentContext;v.isPromise(c)?u.push(c.then(m=>(a[d]=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.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]=pr(i.name,n);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!Tn(l,a,n))&&(r[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!Tn(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]=Zn(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){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let a=this._signature.inputs[n];t[a.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[a]=Zn(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=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=Zn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},X6=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]}},Y6="?tfjs-format=file",Z6="model.json",H0=class{constructor(e,t={},n=Nn){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=n,t==null&&(this.loadOptions={}),this.resourceManager=new X6}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 _x(hI.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=hI.Instance.transformGraph(e.modelInitializer);this.initializer=new _x(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}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)}predict(e,t){let n=this.execute(e,this.outputNodes);if(this.structuredOutputKeys){let a=n instanceof $e?[n]:n,r={};return a.forEach((s,i)=>r[this.structuredOutputKeys[i]]=s),r}return n}normalizeInputs(e){if(!(e instanceof $e)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,a)=>(t[n]=e[a],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){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){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.resourceManager.dispose()}};async function J6(e,t={},n=Nn){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=ej(e));let a=new H0(e,t,n);return await a.load(),a}function Q6(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide a url or an IOHandler that loads the model");if(!e.load)throw new Error(`modelUrl IO Handler ${e} has no load function`);let t=new H0(e);return t.load(),t}function ej(e){return e.endsWith("/")||(e=e+"/"),`${e}${Z6}${Y6}`}var tj="3.20.0",Q2={};Fe(Q2,{CSVDataset:()=>lC,Dataset:()=>ap,FileDataSource:()=>fC,TextLineDataset:()=>oC,URLDataSource:()=>gC,array:()=>Tj,csv:()=>Mj,func:()=>Pj,generator:()=>Oj,microphone:()=>zj,version_data:()=>Wj,webcam:()=>Lj,zip:()=>Sj});var nj=bs(_m()),aj=bs(_m());function rj(e,t){return ym(e,t)}function ym(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(Ol(e)){let s=Array.isArray(e)?[]:{};a.add(e);for(let i in e){let o=e[i],l=ym(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 sj(e,t=tC){return eC(e,t)}function eC(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(Ol(a)){let s=Array.isArray(a)?[]:{};n.add(a);for(let i in a){let o=e.map(u=>u[i]),l=eC(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 tC(e){return e===null?null:Ol(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function nC(e,t){let n=new Map;ym(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 ym(e,t,n)}function Ol(e){let t=!1;if(X().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=eT();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof $e)&&!(e instanceof Promise)&&!t)}function ij(e){return e==null||oj(e)||Array.isArray(e)||typeof e=="object"&&e instanceof $e||v.isTypedArray(e)}function oj(e){return e===null||typeof e!="object"&&typeof e!="function"}function lj(e){return rj(e,uj)}function uj(e){return e instanceof $e?{value:e.clone(),recurse:!1}:Ol(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var aC=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}},j0=class extends aC{constructor(){super(j0.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;at===!0)}rowMajorBatch(e,t=!0){return new bj(this,e,t)}columnMajorBatch(e,t=!0,n=tC){return this.rowMajorBatch(e,t).map(a=>sj(a,n))}concatenate(e,t){return new sC(rC([this,e]),t)}take(e){return e<0||e==null?this:new gj(this,e)}skip(e){return e<0||e==null?this:new fj(this,e)}prefetch(e){return new iC(this,e)}shuffle(e,t){return new Ij(this,e,t)}serial(){return new mj(this)}},dj=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:lj(e),done:!1}}},hj=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}}},mj=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()}},fj=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++ Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},bj=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.length0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},yj=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;Me(e.value)}}},xj=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=qa.getTensorsInContainer(e.value),n=this.transform(e.value),a=qa.getTensorsInContainer(n);for(let r of t)qa.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},vj=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}}}},vI=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=qa.getTensorsInContainer(e.value),n=await this.transform(e.value),a=qa.getTensorsInContainer(n);for(let r of t)qa.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},K0=class extends nn{constructor(){super(),this.outputQueue=new j0,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}}},wj=class extends K0{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=qa.getTensorsInContainer(e.value),n=this.transform(e.value),a=qa.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let r of t)qa.isTensorInList(r,a)||r.dispose();return!0}},sC=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}},rs;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(rs||(rs={}));var kj=class extends nn{constructor(e,t=rs.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 nC(this.iterators,a);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case rs.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case rs.SHORTEST:return{value:null,done:!0};case rs.LONGEST:default:}return this.count++,{value:r,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},iC=class extends nn{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new aC(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()}},Ij=class extends iC{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=aj.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}}},ap=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),Yn(async()=>(await n.iterator()).columnMajorBatch(e,t,Nj),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,Yn(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,Yn(async()=>(await t.iterator()).filter(a=>O(()=>e(a))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Yn(async()=>(await t.iterator()).map(n=>O(()=>e(n))),this.size)}mapAsync(e){let t=this;return Yn(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 Yn(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,Yn(async()=>{let a=q0(async()=>({value:await t.iterator(),done:!1}));return pj(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(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=nj.alea(t||v.now().toString());return Yn(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,Yn(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()}};ap.MAX_BUFFER_SIZE=1e4;function Yn(e,t=null){return new class extends ap{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function Tj(e){return Yn(async()=>rC(e),e.length)}function Sj(e){if(!Ol(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{let n=await nC(e,a=>{if(a instanceof ap)return{value:a.iterator(),recurse:!1};if(Ol(a))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return cj(n,rs.SHORTEST)},t)}function Nj(e){if(e===null)return null;let t=e[0];return ij(t)?{value:Cj(e),recurse:!1}:{value:null,recurse:!0}}function Cj(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof $e?Rt(e):Bn(e)}var oC=class extends ap{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))}},Rh='"',jp=Symbol("out"),wI=Symbol("field"),Mh=Symbol("quote"),By=Symbol("quoteafterquote"),kI=Symbol("quoteinquote"),lC=class extends ap{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 oC(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;r14||!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(!X().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let t=new uC(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),Bn(n,t)}},pC=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=Ke([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=Ea([s,r,o,i],[1,4])}else this.cropBox=Ea([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(!X().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 pC(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=ko.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 O(()=>{let t=mn(le(e,"float32"),0),n;n=Er.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let a=n.shape;return B(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.")}},cC=class{},dC=class extends nn{split(e){return new _j(this,e)}},_j=class extends dC{constructor(e,t){super(),this.upstream=e,this.impl=new Ej(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Ej=class extends K0{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}},$j=class extends nn{decodeUTF8(){return new Aj(this)}},Aj=class extends dC{constructor(e){super(),this.upstream=e,this.impl=new Fj(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},Fj=class extends K0{constructor(e){if(super(),this.upstream=e,X().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=eT();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 X().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},hC=class extends $j{constructor(e,t={}){super(),this.file=e,this.options=t,v.assert(e instanceof Uint8Array||(X().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 Dj(e,t={},n){let a,r;typeof e=="string"?a=e:(a=e.url,r=Rj(e));let s=await(n||v.fetch)(a,r);if(s.ok){let i=new Uint8Array(await s.arrayBuffer());return new hC(i,t)}else throw new Error(s.statusText)}var Rj=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 mC(e){return typeof e=="string"&&e.slice(0,7)==="file://"}var fC=class extends cC{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(mC(this.input)&&X().get("IS_NODE")){let e=Hx();this.input=e.readFileSync(this.input.slice(7))}return new hC(this.input,this.options)}},gC=class extends cC{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return mC(this.url)?new fC(this.url,this.fileOptions).iterator():Dj(this.url,this.fileOptions)}};function Mj(e,t={}){return new lC(new gC(e),t)}function Pj(e){let t=q0(e);return Yn(async()=>t)}function Oj(e){return Yn(async()=>{let t=await e();return q0(()=>t.next())})}async function Lj(e,t){return pC.create(e,t)}async function zj(e){return uC.create(e)}var Wj="3.20.0";function xe(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 Bj=yr.whereImpl,X0=class extends Tc{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Em(this,ir())}nextDataId(){return X0.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,X().get("IS_NODE")&&C.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 C.mergeRealAndImagArrays(a,r)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let n=t.map(a=>v.decodeString(a));return ze(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return ze(e.shape,e.dtype,t)}makeOutput(e,t,n){return ir().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){xe([e],"where");let t=this.readSync(e.dataId);return Bj(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};X0.nextDataId=0;var bC={};Fe(bC,{addImpl:()=>vC,bincountImpl:()=>Z0,bincountReduceImpl:()=>wC,castImpl:()=>xC,ceilImpl:()=>kC,concatImpl:()=>J0,equalImpl:()=>IC,expImpl:()=>SC,expm1Impl:()=>CC,floorImpl:()=>_C,gatherNdImpl:()=>EC,gatherV2Impl:()=>$C,greaterEqualImpl:()=>FC,greaterImpl:()=>AC,lessEqualImpl:()=>RC,lessImpl:()=>DC,linSpaceImpl:()=>MC,logImpl:()=>PC,maxImpl:()=>OC,maximumImpl:()=>LC,minimumImpl:()=>zC,multiplyImpl:()=>Q0,negImpl:()=>WC,notEqualImpl:()=>BC,prodImpl:()=>VC,raggedTensorToTensorImpl:()=>UC,rangeImpl:()=>t1,rsqrtImpl:()=>GC,scatterImpl:()=>xl,sigmoidImpl:()=>Eq,simpleAbsImpl:()=>yC,sliceImpl:()=>vm,sparseFillEmptyRowsImpl:()=>jC,sparseReshapeImpl:()=>qC,sparseSegmentReductionImpl:()=>n1,sqrtImpl:()=>Fq,squaredDifferenceImpl:()=>KC,stridedSliceImpl:()=>XC,stringNGramsImpl:()=>a1,stringSplitImpl:()=>r1,stringToHashBucketFastImpl:()=>s1,subImpl:()=>YC,tileImpl:()=>ZC,topKImpl:()=>QC,transposeImpl:()=>e1,uniqueImpl:()=>e_});function yC(e){let t=new Float32Array(e.length);for(let n=0;n{let{x:t}=e.inputs,n=e.backend;xe(t,"abs");let a=new Float32Array(v.sizeFromShape(t.shape)),r=n.data.get(t.dataId).values;return a=yC(r),n.makeOutput(a,t.shape,t.dtype)},Uj={kernelName:Ul,backendName:"cpu",kernelFunc:Vj};function Vt(e){return(t,n,a,r,s)=>{let i=C.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=C.getBroadcastDims(t,i),g=C.getBroadcastDims(n,i);if(f.length+g.length===0)for(let b=0;bx[_]=0);let w=v.locToIndex(x,d,h),I=y.slice(-c);g.forEach(_=>I[_]=0);let N=v.locToIndex(I,c,m);p[b]=e(a[w],r[N])}return[p,i]}}function Jn(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 Gj={kernelName:Pm,backendName:"cpu",kernelFunc:Jn};function xm(e,t,n="float32"){if(n==="complex64"){let r=xm(e,t,"float32"),s=xm(e,t,"float32");return Jn({inputs:{real:r,imag:s},backend:e})}let a=v.makeZerosTypedArray(v.sizeFromShape(t),n);return e.makeTensorInfo(t,n,a)}function fr(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 Hj={kernelName:Ui,backendName:"cpu",kernelFunc:fr};function yi(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 jj={kernelName:nf,backendName:"cpu",kernelFunc:yi};function xC(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 fs(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return fr({inputs:{x:r},backend:n});let p=xm(n,r.shape,r.dtype),d=fs({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),c=Jn({inputs:{real:d,imag:p},backend:n});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),c}if(r.dtype==="complex64"){let p=yi({inputs:{input:r},backend:n}),d=fs({inputs:{x:p},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(p),d}if(!v.hasEncodingLoss(r.dtype,s)){let p=fr({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]=xC(i,r.shape,r.dtype,s);return n.makeTensorInfo(o,l,u)}var qj={kernelName:_i,backendName:"cpu",kernelFunc:fs};function an(e,t,n,a){return n==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;xe([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,d=i.dtype==="string"?C.fromUint8ToStringArray(u):u,c=i.dtype==="string"?C.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=fs({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=fs({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),b=g.complexTensorInfos.real,y=g.complexTensorInfos.imag,x=l.data.get(b.dataId).values,w=l.data.get(y.dataId).values,[I,N,_]=n(i.shape,o.shape,h,m,x,w),$=l.makeTensorInfo(_,"float32",I),A=l.makeTensorInfo(_,"float32",N),M=Jn({inputs:{real:$,imag:A},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo($),l.disposeIntermediateTensorInfo(A),M}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 Y0(e){return(t,n,a,r,s,i)=>{let o=C.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=C.getBroadcastDims(t,o),m=C.getBroadcastDims(n,o),f=C.mergeRealAndImagArrays(a,r),g=C.mergeRealAndImagArrays(s,i),b=t.length,y=v.computeStrides(t),x=n.length,w=v.computeStrides(n);if(h.length+m.length===0)for(let I=0;I_[T]=0);let $=v.locToIndex(_,b,y),A=N.slice(-x);m.forEach(T=>A[T]=0);let M=v.locToIndex(A,x,w),D=e(f[$*2],f[$*2+1],g[M*2],g[M*2+1]);d[I]=D.real,c[I]=D.imag}return[d,c,o]}}var vC=Vt((e,t)=>e+t),Kj=Y0((e,t,n,a)=>({real:e+n,imag:t+a})),Ll=an(xs,vC,Kj),Xj={kernelName:xs,backendName:"cpu",kernelFunc:Ll};function Z0(e,t,n,a,r){let s=v.sizeFromShape(a),i=v.makeZerosTypedArray(r,n);for(let o=0;o=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function wC(e,t,n,a=!1){let r=e.shape[0],s=e.shape[1],i=ze([r,n],t.dtype);for(let o=0;o=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 As(e){return(t,n,a)=>{let r=v.getTypedArrayFromDType(n,t.length);for(let s=0;s{let{x:i}=a;if(xe(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{let{x:i}=a;if(xe(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 kC=As(e=>Math.ceil(e)),Yj=rp(Ei,kC),Zj={kernelName:Ei,backendName:"cpu",kernelFunc:Yj};function J0(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"?C.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;ue===t?1:0),TC=an(su,IC,null,"bool"),Jj={kernelName:su,backendName:"cpu",kernelFunc:TC},SC=As(e=>Math.exp(e)),NC=rp(Li,SC,"float32"),Qj={kernelName:Li,backendName:"cpu",kernelFunc:NC},CC=As(e=>Math.expm1(e)),eq=rp(ou,CC),tq={kernelName:ou,backendName:"cpu",kernelFunc:eq},_C=As(e=>Math.floor(e)),nq=rp(zi,_C),aq={kernelName:zi,backendName:"cpu",kernelFunc:nq};function EC(e,t,n,a,r,s,i,o,l){let u=ze([a,s],n);for(let p=0;p=l/s)throw new Error(`Invalid indices: ${d} does not index into ${o}`);for(let h=0;he>t?1:0),rq=an(cu,AC,null,"bool"),sq={kernelName:cu,backendName:"cpu",kernelFunc:rq},FC=Vt((e,t)=>e>=t?1:0),iq=an(Vi,FC,null,"bool"),oq={kernelName:Vi,backendName:"cpu",kernelFunc:iq},DC=Vt((e,t)=>ee<=t?1:0),pq=an(gu,RC,null,"bool"),cq={kernelName:gu,backendName:"cpu",kernelFunc:pq};function MC(e,t,n){let a=(t-e)/(n-1),r=v.makeZerosTypedArray(n,"float32");r[0]=e;for(let s=1;sMath.log(e)),dq=rp(Hi,PC),hq={kernelName:Hi,backendName:"cpu",kernelFunc:dq};function OC(e,t,n,a){let r=v.getTypedArrayFromDType(a,v.sizeFromShape(n));for(let s=0;so)&&(o=u)}r[s]=o}return r}var LC=Vt((e,t)=>Math.max(e,t)),mq=an(qi,LC),fq={kernelName:qi,backendName:"cpu",kernelFunc:mq},zC=Vt((e,t)=>Math.min(e,t)),gq=an(Zi,zC),bq={kernelName:Zi,backendName:"cpu",kernelFunc:gq},Q0=Vt((e,t)=>e*t),yq=Y0((e,t,n,a)=>({real:e*n-t*a,imag:e*a+t*n})),mg=an(Qi,Q0,yq),xq={kernelName:Qi,backendName:"cpu",kernelFunc:mg};function WC(e,t,n){let a=v.createScalarValue(-1,n);return Q0([],t,a,e,n)}function vq(e){let{inputs:t,backend:n}=e,{x:a}=t;xe(a,"neg");let r=n.data.get(a.dataId).values,[s,i]=WC(r,a.shape,a.dtype);return n.makeTensorInfo(i,a.dtype,s)}var wq={kernelName:ku,backendName:"cpu",kernelFunc:vq},BC=Vt((e,t)=>e!==t?1:0),kq=an(Iu,BC,null,"bool"),Iq={kernelName:Iu,backendName:"cpu",kernelFunc:kq};function e1(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;pn.disposeIntermediateTensorInfo(y)),n.makeTensorInfo(b,g,m)}var Nq={kernelName:ro,backendName:"cpu",kernelFunc:Sq},Ta=C.RowPartitionType,Ex=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=C.getRowPartitionTypesHelper(u),this.raggedRank=C.getRaggedRank(this.rowPartitionTypes)}getRowPartitionTypeByDimension(e){return this.rowPartitionTypes[0]===Ta.FIRST_DIM_SIZE?this.rowPartitionTypes[e+1]:this.rowPartitionTypes[e]}getRowPartitionTensor(e){return this.rowPartitionTypes[0]===Ta.FIRST_DIM_SIZE?this.rowPartitionValues[e+1]:this.rowPartitionValues[e]}getMaxWidth(e){let t=this.getRowPartitionTensor(e-1);switch(this.getRowPartitionTypeByDimension(e-1)){case Ta.VALUE_ROWIDS:return Ex.getMaxWidthValueRowID(t);case Ta.ROW_SPLITS:return Ex.getMaxWidthRowSplit(t);default:throw new Error(`Cannot handle partition type ${Ta[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;an&&(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"Final length of result must be equal to firstDimension."),r}calculateOutputIndexRowSplit(e,t,n,a){let r=e.length,s=[];for(let i=0;i0&&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=0&&(++i,i=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 Ta.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(r,t,n,a);case Ta.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: ${Ta[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 Ta.FIRST_DIM_SIZE:return e[0];case Ta.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Ta.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Ta[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=TI(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;O(()=>{let m=B(u,h);u=ri(m,i).dataSync()})}let p=0,d=0,c=0;for(let h=0;h<=l;++h){let m=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);II(f,u,o),++c}m<0?(p=h+1,d=c):(p=h,d=c,c=d+1)}}};function II(e,t,n){for(let a=0;a= 0`);if(a<-1)throw new Error(`Dimension ${a} must be >= -1`);a=-1}n.push(a)}return n}function UC(e,t,n,a,r,s,i,o,l,u){return new Ex(e,t,n,a,r,s,i,o,l,u).compute()}function t1(e,t,n,a){let r=e===t,s=e1;if(r||s||i)return v.makeZerosTypedArray(0,a);let o=Math.abs(Math.ceil((t-e)/n)),l=v.makeZerosTypedArray(o,a);t1/Math.sqrt(e)),Cq=rp(co,GC),_q={kernelName:co,backendName:"cpu",kernelFunc:Cq};function xl(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 ze(n,t.dtype);let h=ze(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=a/r)throw new Error(`Invalid indices: ${f} does not index into ${n}`);for(let b=0;b1/(1+Math.exp(-e))),HC=ot(mo,e=>1/(1+Math.exp(-e))),$q={kernelName:mo,backendName:"cpu",kernelFunc:HC};function vm(e,t,n,a,r){let s=qt.isSliceContinous(a,t,n),i=v.sizeFromShape(n),o=v.computeStrides(a);if(s){let d=qt.computeFlatOffset(t,o);return r==="string"?e.slice(d,d+i):e.subarray(d,d+i)}let l=r==="string"?C.fromUint8ToStringArray(e):e,u=ze(a,r,l),p=ze(n,r);for(let d=0;dm+t[f]);p.set(u.get(...h),...c)}return r==="string"?C.fromStringArrayToUint8(p.values):p.values}function xi(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a;xe(r,"slice");let[o,l]=qt.parseSliceParams(r,s,i);qt.assertParamsValid(r,o,l);let u=n.data.get(r.dataId).values,p=vm(u,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,p)}var Aq={kernelName:Ru,backendName:"cpu",kernelFunc:xi};function jC(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(C.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=v.getArrayFromDType(n,0),b=v.getArrayFromDType(r,0);return[g,[0,d],b,u,p]}let c=!0,h=0,m=new Array(l).fill(0);for(let g=0;g=l)throw new Error(C.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,b,l));++m[b],c=c&&b>=h,h=b}let f=!0;for(let g=0;g0&&(m[g]+=m[g-1])}if(f&&c){let g=e,b=a;for(let y=0;y0){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;f0?r[o-1]+1:0;if(p<0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=t.slice();d[0]=p;let c=d.reduce((y,x)=>y*x,1),h=v.getArrayFromDType(n,c);if(o===0)return p>0&&h.fill(i),[h,d];if(p<=0)throw new Error(C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,b=r[m];for(;;){let y=0;if(f=y)throw new Error(C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(b<0||b>=p)throw new Error(C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b,p));b>g&&h.fill(i,g*u,b*u);for(let x=m;x=l[0])throw new Error(C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,a[x],l[0]));for(let I=0;Io)break}return gMath.sqrt(e)),Dq=ot(fo,e=>Math.sqrt(e)),Rq={kernelName:fo,backendName:"cpu",kernelFunc:Dq},KC=Vt((e,t)=>{let n=e-t;return n*n}),Mq=an(yo,KC),Pq={kernelName:yo,backendName:"cpu",kernelFunc:Mq};function XC(e,t,n,a){let r=ze(e,t.dtype);for(let s=0;s0?0:i-o),c=0;c+=l*this.leftPad.length;for(let g=0;gg.forEach(b=>h[m++]=b);for(let g=0;g0){f(e[d+p-1]);for(let g=0;g0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;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{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 a1(e,t,n,a,r,s,i,o){return new Oq(n,a,r,s,i,o).compute(e,t)}function Lq(e,t,n,a){if(!e.length)return;if(t.length===0){for(let s=0;se-t),zq=Y0((e,t,n,a)=>({real:e-n,imag:t-a})),i1=an(xo,YC,zq),Wq={kernelName:xo,backendName:"cpu",kernelFunc:i1};function ZC(e,t){let n=new Array(e.rank);for(let r=0;r{let n=t.value-e.value;return n===0?e.index-t.index:n};function JC(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));JC(e,t,c,h)}let r=e[t],s=n,i=a;for(v.swap(e,n,t),Zp(e[a],r)>0&&v.swap(e,n,a);s0;)i=i-1}Zp(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 QC(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;dm[x]={value:y,index:x}),a{for(let g=0;gnew X0,1);var t_=ot(Oi,e=>e>=0?e:Math.exp(e)-1),Bq={kernelName:Oi,backendName:"cpu",kernelFunc:t_};function n_(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a;xe([r],"leakyRelu");let i=v.sizeFromShape(r.shape),o=n.data.get(r.dataId).values,l=v.getTypedArrayFromDType("float32",i);for(let u=0;ue<0?t*e:e);function a_(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t;xe([a,r],"prelu");let s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,[o,l]=Uq(a.shape,r.shape,s,i,"float32");return n.makeTensorInfo(l,"float32",o)}var Gq={kernelName:ao,backendName:"cpu",kernelFunc:a_},r_=ot(so,e=>Math.max(0,e)),Hq={kernelName:so,backendName:"cpu",kernelFunc:r_},s_=ot(lo,e=>Math.min(Math.max(0,e),6)),jq={kernelName:lo,backendName:"cpu",kernelFunc:s_};function wm(e,t,n,a,r){if(n==="linear")return fr({inputs:{x:t},backend:e});if(n==="relu")return r_({inputs:{x:t},backend:e});if(n==="elu")return t_({inputs:{x:t},backend:e});if(n==="relu6")return s_({inputs:{x:t},backend:e});if(n==="prelu")return a_({inputs:{x:t,alpha:a},backend:e});if(n==="leakyrelu")return n_({inputs:{x:t},backend:e,attrs:{alpha:r}});if(n==="sigmoid")return HC({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function yt(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 qq={kernelName:$u,backendName:"cpu",kernelFunc:yt};function i_(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;xe([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),b=v.sizeFromShape(f),y=qu.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?[b,h,d]:[b,d,h],I=yt({inputs:{x:r},backend:n,attrs:{shape:x}}),N=yt({inputs:{x:s},backend:n,attrs:{shape:w}}),_=i?I.shape[1]:I.shape[2],$=i?I.shape[2]:I.shape[1],A=o?N.shape[1]:N.shape[2],M=Math.max(g,b),D=n.data.get(I.dataId).values,T=n.data.get(N.dataId).values,P=v.computeStrides(I.shape),U=v.computeStrides(N.shape),[j,q,K]=i?[P[0],1,P[1]]:[P[0],P[1],1],[Y,te,re]=o?[1,U[1],U[0]]:[U[1],1,U[0]],J=$*A,ie=ze([M,$,A],I.dtype),ae=ie.values,oe=n.blockSize;for(let ue=0;ueMath.acos(e)),Jq={kernelName:Gl,backendName:"cpu",kernelFunc:Zq},Qq=ot(Hl,e=>Math.acosh(e)),e5={kernelName:Hl,backendName:"cpu",kernelFunc:Qq};function t5(e){let{inputs:t,backend:n}=e,a=t;xe(t,"addN");let r=a.map(o=>n.data.get(o.dataId).values),s=ze(a[0].shape,a[0].dtype),i=s.values;for(let o=0;oy&&(y=I,x=w)}h[g]=x}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var l5={kernelName:Si,backendName:"cpu",kernelFunc:o5};function u5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a;xe(r,"argMin");let i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Hn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],C.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,d]=C.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;gn.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var p5={kernelName:Sc,backendName:"cpu",kernelFunc:u5},c5=ot(Kl,e=>Math.asin(e)),d5={kernelName:Kl,backendName:"cpu",kernelFunc:c5},h5=ot(Xl,e=>Math.asinh(e)),m5={kernelName:Xl,backendName:"cpu",kernelFunc:h5},f5=ot(Yl,e=>Math.atan(e)),g5={kernelName:Yl,backendName:"cpu",kernelFunc:f5},b5=Vt((e,t)=>Math.atan2(e,t)),y5=an(Jl,b5),x5={kernelName:Jl,backendName:"cpu",kernelFunc:y5},v5=ot(Zl,e=>Math.atanh(e)),w5={kernelName:Zl,backendName:"cpu",kernelFunc:v5};function o1(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=ze(r.outShape,n),g=f.values,b=r.outShape[1]*r.outShape[2]*r.outShape[3],y=r.outShape[2]*r.outShape[3],x=r.outShape[3];for(let w=0;wK?K=ue:s==="avg"&&(Y+=ue,te++)}if(isNaN(K))break}let re=T+P*x+_;g[re]=s==="avg"?Y/te:K}}}return f}function o_(e,t,n,a,r=!1,s=!1){let i=ze(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=ze(t,n,e);for(let g=0;gM&&(M=q,r?D=s?((g*a.inHeight+T)*a.inWidth+U)*a.inChannels+b:(T*a.inWidth+U)*a.inChannels+b:D=P*c+j)}}i.set(D,g,y,N,b)}}return i}function l_(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,b=r.padInfo.left,y=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,x=ze(r.outShape,n),w=x.values,I=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],N=r.outShape[2]*r.outShape[3]*r.outShape[4],_=r.outShape[3]*r.outShape[4],$=r.outShape[4];for(let A=0;AIe?Ie=dt:s==="avg"&&(Ee+=dt,De++),isNaN(Ie))break}if(isNaN(Ie))break}if(isNaN(Ie))break}let Be=be+T;w[Be]=s==="avg"?Ee/De:Ie}}}}return x}function k5(e,t){let n=ze(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=P&&(P=J,U=q*p*d+Y*p+re)}}}n.set(U,f,b,I,A,g)}}}return n}function I5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;xe(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))d=fr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=o1(c,r.shape,r.dtype,h,p,"avg");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var T5={kernelName:Ni,backendName:"cpu",kernelFunc:I5};function S5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;xe(r,"avgPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=l_(d,r.shape,r.dtype,v.computeStrides(r.shape),p,"avg");return n.makeTensorInfo(c.shape,"float32",c.values)}var N5={kernelName:Nc,backendName:"cpu",kernelFunc:S5};function C5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;xe([r,s],"avgPool3DGrad");let p=C.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,b=p.dilationDepth,y=p.dilationHeight,x=p.dilationWidth,w=p.effectiveFilterDepth,I=p.effectiveFilterHeight,N=p.effectiveFilterWidth,_=w-1-p.padInfo.front,$=N-1-p.padInfo.left,A=I-1-p.padInfo.top,M=ze(s.shape,"float32"),D=1/(m*f*g),T=n.bufferSync(r);for(let P=0;P=p.outDepth||Math.floor(ae)!==ae))for(let oe=0;oe=p.outHeight||Math.floor(ue)!==ue))for(let we=0;we=p.outWidth||Math.floor(be)!==be||(J+=T.get(P,ae,ue,be,U))}}}M.set(J*D,P,j,q,K,U)}return n.makeTensorInfo(M.shape,M.dtype,M.values)}var _5={kernelName:Dm,backendName:"cpu",kernelFunc:C5};function E5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;xe([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=C.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,b=p.effectiveFilterHeight,y=p.effectiveFilterWidth,x=y-1-p.padInfo.left,w=b-1-p.padInfo.top,I=ze(i.shape,"float32"),N=1/(h*m),_=n.data.get(r.dataId).values,$=ze(r.shape,"float32",_);for(let A=0;A=p.outHeight||Math.floor(K)!==K))for(let Y=0;Y=p.outWidth||Math.floor(te)!==te||(j+=$.get(A,K,te,M))}}I.set(j*N,A,D,T,M)}return n.makeTensorInfo(I.shape,I.dtype,I.values)}var $5={kernelName:Fm,backendName:"cpu",kernelFunc:E5};function A5(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."),xe([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,b=h.length,y=c.length,x=d.length,w=0,I=0,N=0,_=0;for(let $=0;$=g&&(w=0),I>=x&&(I=0),N>=b&&(N=0),_>=y&&(_=0);return n.makeTensorInfo(r.shape,r.dtype,f)}var F5={kernelName:Bi,backendName:"cpu",kernelFunc:A5};function D5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a;xe([r],"batchToSpaceND");let o=s.reduce((b,y)=>b*y),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),d=C.getSliceBeginCoords(i,s.length),c=C.getSliceSize(p,i,s.length),h=yt({inputs:{x:r},backend:n,attrs:{shape:l}}),m=Hn({inputs:{x:h},backend:n,attrs:{perm:u}}),f=yt({inputs:{x:m},backend:n,attrs:{shape:p}}),g=xi({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),g}var R5={kernelName:Ql,backendName:"cpu",kernelFunc:D5};function M5(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=Z0(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var P5={kernelName:Rm,backendName:"cpu",kernelFunc:M5};function O5(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=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var L5={kernelName:Mm,backendName:"cpu",kernelFunc:O5},z5=ot(vs,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax: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;uf.shape),s);if(v.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(f=>v.sizeFromShape(f.shape)>0);if(o.length===1)return fr({inputs:{x:o[0]},backend:n});let l=o.map(f=>f.shape);if(C.assertParamsConsistent(l,s),o[0].dtype==="complex64"){let f=o.map(w=>yi({inputs:{input:w},backend:n})),g=o.map(w=>zl({inputs:{input:w},backend:n})),b=Wl({inputs:f,backend:n,attrs:{axis:s}}),y=Wl({inputs:g,backend:n,attrs:{axis:s}}),x=Jn({inputs:{real:b,imag:y},backend:n});return f.forEach(w=>n.disposeIntermediateTensorInfo(w)),g.forEach(w=>n.disposeIntermediateTensorInfo(w)),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(y),x}let u=o.map(f=>{let g=v.sizeFromShape(f.shape.slice(s));return yt({inputs:{x:f},backend:n,attrs:{shape:[-1,g]}})}),p=u.map(f=>({vals:n.data.get(f.dataId).values,shape:f.shape}));i=C.computeOutShape(u.map(f=>f.shape),1);let d=u[0].shape[0]===1,c=J0(p,i,t[0].dtype,d),h=C.computeOutShape(o.map(f=>f.shape),s),m=n.makeTensorInfo(h,t[0].dtype,c);return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var G5={kernelName:eu,backendName:"cpu",kernelFunc:Wl};function u_(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;xe([r,s],"conv2d");let d=C.convertConv2DDataFormat(l),c=C.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,d),h=c.filterHeight,m=c.filterWidth,f=c.dilationHeight,g=c.dilationWidth,b=c.padInfo.left,y=c.padInfo.top,x=c.dataFormat==="channelsLast",w=new jt(c.outShape,r.dtype),I=v.computeStrides(r.shape),N=v.computeStrides(s.shape),_=I[0],$=x?I[1]:I[2],A=x?I[2]:1,M=x?1:I[1],D=w.strides[0],T=x?w.strides[1]:w.strides[2],P=x?w.strides[2]:1,U=x?1:w.strides[1],j=n.data.get(r.dataId).values,q=n.data.get(s.dataId).values,K=w.values;for(let Y=0;Y=c.inHeight)continue;let we=oe*N[0],be=te+ue*$;for(let Ie=0;Ie=c.inWidth)continue;let st=we+Be*N[1],nt=be+je*A,at=st;for(let Ne=0;Ne=u.inDepth)continue;let Y=q*A[0],te=D+K*$[1];for(let re=0;re=u.inHeight)continue;let ue=Y+ae*A[1],we=te+oe*$[2];for(let be=0;be=u.inWidth)continue;let je=ue+De*A[2],st=we+Be*u.inChannels,nt=je;for(let at=0;atMath.cos(e)),aK={kernelName:Fi,backendName:"cpu",kernelFunc:nK},rK=ot(Di,e=>Math.cosh(e)),sK={kernelName:Di,backendName:"cpu",kernelFunc:rK};function iK(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,b=ze([m,f,g,h],"float32"),y=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),N=v.computeStrides(b.shape);for(let _=0;_=p)continue;let U=f>1?(D-A)*(d-1)/(f-1):0,j=g>1?(T-M)*(c-1)/(g-1):0;for(let q=0;q1?A*(d-1)+q*U:.5*(A+D)*(d-1);if(K<0||K>d-1){for(let Y=0;Y1?M*(c-1)+J*j:.5*(M+T)*(c-1);if(ie<0||ie>c-1){for(let we=0;we1?M*(c-1)+Y*j:.5*(M+T)*(c-1);if(te<0||te>c-1){for(let ie=0;ieb+m-y-1:(b,y)=>b+y;for(let b=0;bb+m-y-1:(b,y)=>b+y;for(let b=0;b`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 b=0;b`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let h=C.computeConv2DInfo(r.shape,s.shape,i,c,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:b,padInfo:y}=h,x=y.left,w=y.top,I=h.outChannels/h.inChannels,N=new jt(h.outShape,r.dtype),_=n.data.get(r.dataId).values,$=n.data.get(s.dataId).values,A=N.values;for(let M=0;M=h.inHeight)continue;let Y=q*d[0],te=D+K*p[1];for(let re=0;re=h.inWidth)continue;let ue=Y+ae*d[1],we=te+oe*h.inChannels,be=J,Ie=ue;for(let Ee=0;Ee{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:b,outWidth:y,padInfo:x,strideHeight:w,strideWidth:I,filterHeight:N,filterWidth:_,dilationHeight:$,dilationWidth:A,outShape:M}=C.computeDilation2DInfo(a.shape,r.shape,s,i,"NHWC",o),D=v.sizeFromShape(M),T=M.length,P=v.getArrayFromDType(a.dtype,D);for(let U=0;U=0&&ae=0&&uere&&(re=Ie)}}}let J=v.locToIndex([U,j,K,te],T,v.computeStrides(M));P[J]=re}}}return{dataId:l.write(v.toTypedArray(P,a.dtype),M,a.dtype),shape:M,dtype:a.dtype}}},TK={kernelName:em,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:b,padInfo:y,strideHeight:x,strideWidth:w,filterHeight:I,filterWidth:N,dilationHeight:_,dilationWidth:$,outShape:A}=C.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===A.length,()=>`Error in ${em}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let M=v.toNestedArray(A,u.data.get(s.dataId).values),D=v.makeZerosNestedTypedArray(r.shape,r.dtype);for(let T=0;T=0&&ie=0&&oeY&&(Y=ue,te=J,re=ae)}}}D[te][re][K]+=M[T][P][j][K]}}}return{dataId:u.write(v.toTypedArray(D,a.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},SK={kernelName:Qh,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:b,padInfo:y,strideHeight:x,strideWidth:w,filterHeight:I,filterWidth:N,dilationHeight:_,dilationWidth:$,outShape:A}=C.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);v.assert(s.rank===A.length,()=>`Error in ${Qh}, dy must have the same rank as output ${A.length}, but got ${s.rank}`);let M=v.toNestedArray(A,u.data.get(s.dataId).values),D=v.makeZerosNestedTypedArray(a.shape,a.dtype);for(let T=0;T=0&&ie=0&&oeY&&(Y=ue,te=ie,re=oe)}}}D[T][te][re][K]+=M[T][P][j][K]}}}return{dataId:u.write(v.toTypedArray(D,a.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}};function xd(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"sum");let o;r.dtype==="bool"?o=fs({inputs:{x:r},backend:n,attrs:{dtype:"int32"}}):o=fr({inputs:{x:r},backend:n});let l=o.shape.length,u=v.parseAxisParam(s,o.shape),p=C.getAxesPermutation(u,l),d=u,c=o;p!=null&&(c=Hn({inputs:{x:o},backend:n,attrs:{perm:p}}),d=C.getInnerMostAxes(d.length,l)),C.assertAxesAreInnerMostDims("sum",d,c.shape.length);let[h,m]=C.computeOutAndReduceShapes(c.shape,d),f=C.upcastType(c.dtype,"int32"),g=xm(n,h,f),b=v.sizeFromShape(m),y=n.data.get(g.dataId).values,x=n.data.get(c.dataId).values;for(let w=0;w=0&&(c=xd({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 _K={kernelName:Gm,backendName:"cpu",kernelFunc:CK};function EK(e){let{inputs:t,backend:n}=e,{dy:a,y:r}=t;xe([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=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return n.makeTensorInfo(r.shape,"float32",s)}var $K={kernelName:Hm,backendName:"cpu",kernelFunc:EK},AK=C.ERF_P,FK=C.ERF_A1,DK=C.ERF_A2,RK=C.ERF_A3,MK=C.ERF_A4,PK=C.ERF_A5,OK=ot(ru,e=>{let t=Math.sign(e),n=Math.abs(e),a=1/(1+AK*n);return t*(1-((((PK*a+MK)*a+RK)*a+DK)*a+FK)*a*Math.exp(-n*n))}),LK={kernelName:ru,backendName:"cpu",kernelFunc:OK};function km(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),yt({inputs:{x:r},backend:n,attrs:{shape:o}})}var zK={kernelName:iu,backendName:"cpu",kernelFunc:km},WK=Vt((e,t)=>e/t),l1=an(Pi,WK),$x={kernelName:Pi,backendName:"cpu",kernelFunc:l1};function c_(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{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=0&&yMath.floor(e/t)),YK=an(Wi,XK,null,"int32"),ZK={kernelName:Wi,backendName:"cpu",kernelFunc:YK};function JK(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=u_({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 b=yt({inputs:{x:i},backend:n,attrs:{shape:[i.shape[0],1,1]}});f=Ll({inputs:{a:f,b},backend:n}),n.disposeIntermediateTensorInfo(b)}else f=Ll({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 b=yt({inputs:{x:o},backend:n,attrs:{shape:[o.shape[0],1,1]}});f=wm(n,f,h,b,m),n.disposeIntermediateTensorInfo(b)}else f=wm(n,f,h,o,m);n.disposeIntermediateTensorInfo(g)}return f}var QK={kernelName:ui,backendName:"cpu",kernelFunc:JK};function e8(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=p_({inputs:{x:r,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c}});if(i){let g=f;f=Ll({inputs:{a:f,b:i},backend:n}),n.disposeIntermediateTensorInfo(g)}if(h){let g=f;f=wm(n,f,h,o,m),n.disposeIntermediateTensorInfo(g)}return f}var t8={kernelName:pi,backendName:"cpu",kernelFunc:e8};function n8(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]=C.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=EC(c,h,a.dtype,u,o,p,d,a.shape,s);return n.makeTensorInfo(l,a.dtype,m.values)}var a8={kernelName:pu,backendName:"cpu",kernelFunc:n8};function r8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=a;xe([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=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=C.segment_util.collectGatherOpShapeInfo(r,s,l,d),m=yt({inputs:{x:r},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=yt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,c/h.batchSize]}}),g=[h.batchSize,h.outerSize,c/h.batchSize,h.sliceSize],b=n.bufferSync(f),y=n.bufferSync(m),x=$C(y,b,g);return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),n.makeTensorInfo(h.outputShape,x.dtype,x.values)}var s8={kernelName:uu,backendName:"cpu",kernelFunc:r8};function i8(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=yt({inputs:{x:a},backend:n,attrs:{shape:[i,s]}}),l=c_(o,!0,n),u=yt({inputs:{x:l},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var o8={kernelName:qm,backendName:"cpu",kernelFunc:i8},l8=ot(du,e=>Number.isFinite(e)?1:0,"bool"),u8={kernelName:du,backendName:"cpu",kernelFunc:l8},p8=ot(hu,e=>Math.abs(e)===1/0?1:0,"bool"),c8={kernelName:hu,backendName:"cpu",kernelFunc:p8},d8=ot(mu,e=>Number.isNaN(e)?1:0,"bool"),h8={kernelName:mu,backendName:"cpu",kernelFunc:d8};function m8(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=MC(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var f8={kernelName:Xm,backendName:"cpu",kernelFunc:m8},g8=ot(bu,e=>Math.log1p(e)),b8={kernelName:bu,backendName:"cpu",kernelFunc:g8},y8=Vt((e,t)=>e&&t),x8=an(yu,y8,null,"bool"),v8={kernelName:yu,backendName:"cpu",kernelFunc:x8},w8=ot(xu,e=>e?0:1,"bool"),k8={kernelName:xu,backendName:"cpu",kernelFunc:w8},I8=Vt((e,t)=>e||t),T8=an(vu,I8,null,"bool"),S8={kernelName:vu,backendName:"cpu",kernelFunc:T8};function N8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a;xe(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,b=f-g+Math.max(0,g-s),y=f-g+Math.min(g+s,p),x=0;for(;b<=y;b++){let w=d[b];x+=w*w}return x}for(let f=0;f`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))d=fr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=v.computeStrides(r.shape),m=o1(c,r.shape,r.dtype,h,p,"max");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var F8={kernelName:Ki,backendName:"cpu",kernelFunc:A8};function D8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;xe(r,"maxPool3d");let p=C.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=l_(d,r.shape,r.dtype,v.computeStrides(r.shape),p,"max");return n.makeTensorInfo(c.shape,"float32",c.values)}var R8={kernelName:Fc,backendName:"cpu",kernelFunc:D8};function M8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;xe([r,s],"maxPool3DGrad");let p=C.computePool3DInfo(s.shape,i,o,1,l,u),d=n.bufferSync(s),c=k5(d,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,b=p.dilationHeight,y=p.dilationWidth,x=p.effectiveFilterDepth,w=p.effectiveFilterHeight,I=p.effectiveFilterWidth,N=x-1-p.padInfo.front,_=I-1-p.padInfo.left,$=w-1-p.padInfo.top,A=ze(s.shape,"float32"),M=n.bufferSync(r);for(let D=0;D=p.outDepth||Math.floor(J)!==J))for(let ie=0;ie=p.outHeight||Math.floor(ae)!==ae))for(let oe=0;oe=p.outWidth||Math.floor(ue)!==ue)continue;let we=x*w*I-1-c.get(D,J,ae,ue,T),be=re*w*I+ie*I+oe,Ie=we===be?1:0;Ie!==0&&(te+=M.get(D,J,ae,ue,T)*Ie)}}}A.set(te,D,P,U,j,T)}return n.makeTensorInfo(A.shape,A.dtype,A.values)}var P8={kernelName:Jm,backendName:"cpu",kernelFunc:M8};function O8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;xe([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=C.computePool2DInfo(o.shape,l,u,1,p,d),h=n.data.get(o.dataId).values,m=ze(c.outShape,o.dtype,o_(h,o.shape,o.dtype,c).values),f=c.strideHeight,g=c.strideWidth,b=c.dilationHeight,y=c.dilationWidth,x=c.effectiveFilterHeight,w=c.effectiveFilterWidth,I=w-1-c.padInfo.left,N=x-1-c.padInfo.top,_=ze(o.shape,"float32"),$=n.data.get(r.dataId).values,A=ze(r.shape,"float32",$);for(let M=0;M=c.outHeight||Math.floor(Y)!==Y))for(let te=0;te=c.outWidth||Math.floor(re)!==re)continue;let J=x*w-1-m.get(M,Y,re,D),ie=K*w+te,ae=J===ie?1:0;ae!==0&&(q+=A.get(M,Y,re,D)*ae)}}_.set(q,M,T,P,D)}return n.makeTensorInfo(_.shape,_.dtype,_.values)}var L8={kernelName:Zm,backendName:"cpu",kernelFunc:O8};function z8(e,t,n,a,r){let s=v.computeStrides(t),i=o1(e,t,n,s,r,"max"),o=o_(e,t,n,r,!0,a);return[i.values,o.values]}var W8={kernelName:Qm,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;xe(a,"MaxPoolWithArgmax");let u=l.data.get(a.dataId).values,p=C.computePool2DInfo(a.shape,r,s,[1,1],i),[d,c]=z8(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 B8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=v.parseAxisParam(s,r.shape),l=C.computeOutAndReduceShapes(r.shape,o)[1],u=v.sizeFromShape(l),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([u]));p.push(d);let c=fs({inputs:{x:r},backend:n,attrs:{dtype:"float32"}});p.push(c);let h=l1({inputs:{a:c,b:d},backend:n});p.push(h);let m=xd({inputs:{x:h},backend:n,attrs:{axis:s,keepDims:i}});return p.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var V8={kernelName:Xi,backendName:"cpu",kernelFunc:B8};function U8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"min");let o=v.parseAxisParam(s,r.shape),l=o,u=C.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Hn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=C.getInnerMostAxes(l.length,r.shape.length)),C.assertAxesAreInnerMostDims("min",l,p.shape.length);let[d,c]=C.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 b=0;by[0]+r.shape[x]+y[1]),l=s.map(y=>y[0]),u=s.map((y,x)=>y[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),b=v.getTypedArrayFromDType(r.dtype,m);for(let y=0;y=u[I]&&(x[I]=(u[I]-1)*2-x[I]+p);x=x.map((I,N)=>I-l[N]);let w=v.locToIndex(x,c,h);b[y]=d[w]}return{dataId:n.write(b,o,r.dtype),shape:o,dtype:r.dtype}}var j8={kernelName:Ji,backendName:"cpu",kernelFunc:H8},q8=Vt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),K8=an(wu,q8),X8={kernelName:wu,backendName:"cpu",kernelFunc:K8},Y8=bs(_m());function h_(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=d_({inputs:{x:r},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),p=C.expandShapeToKeepDim(u.shape,l),d=yt({inputs:{x:u},backend:n,attrs:{shape:p}}),c=i1({inputs:{a:r,b:d},backend:n}),h=NC({inputs:{x:c},backend:n}),m=xd({inputs:{x:h},backend:n,attrs:{axis:l,keepDims:!1}}),f=yt({inputs:{x:m},backend:n,attrs:{shape:p}}),g=l1({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 Z8={kernelName:bo,backendName:"cpu",kernelFunc:h_};function J8(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a;xe(r,"multinomial");let l=o?r:h_({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=0&&d[c]{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=km({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=Wl({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var hX={kernelName:_u,backendName:"cpu",kernelFunc:f_};function mX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,constantValue:i}=a;xe(r,"pad");let o=s.map((b,y)=>b[0]+r.shape[y]+b[1]),l=s.map(b=>b[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 b=0;bw+l[I]),x=v.locToIndex(y,m,f);g[x]=u[b]}return{dataId:n.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var g_={kernelName:to,backendName:"cpu",kernelFunc:mX},fX=Vt((e,t)=>Math.pow(e,t)),gX=an(no,fX),bX={kernelName:no,backendName:"cpu",kernelFunc:gX};function yX(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]=UC(u,r.shape,p,s.shape,s.dtype,d,i.shape,c,h,l);return n.makeTensorInfo(m,s.dtype,f)}var xX={kernelName:tf,backendName:"cpu",kernelFunc:yX};function vX(e){let{backend:t,attrs:n}=e,{start:a,stop:r,dtype:s,step:i}=n,o=t1(a,r,i,s);return t.makeTensorInfo([o.length],s,o)}var wX={kernelName:Dc,backendName:"cpu",kernelFunc:vX},kX=ot(Eu,e=>1/e),IX={kernelName:Eu,backendName:"cpu",kernelFunc:kX};function TX(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a;xe(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])),b=[s&&u>1?c-1:c,s&&p>1?h-1:h],y=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=0,w=b[0]/y[0],I=b[1]/y[1];for(let N=0;N1?u-1:u,i&&h>1?p-1:p],g=[i&&c>1?c-1:c,i&&h>1?h-1:h],b=f[0]/g[0],y=f[1]/g[1],x=n.data.get(s.dataId).values,w=0;for(let I=0;I1?c-1:c,s&&p>1?h-1:h],y=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=b[0]/y[0],w=b[1]/y[1],I=0;for(let N=0;N1?p-1:p,i&&m>1?d-1:d],y=[i&&h>1?h-1:h,i&&m>1?m-1:m],x=b[0]/y[0],w=b[1]/y[1],I=1/x,N=1/w,_=Math.ceil(I)*2+2,$=Math.ceil(N)*2+2;for(let A=0;A=h)continue;let ae=M+ie*l[1],oe=ie*x,ue=Math.min(p-1,i?Math.round(oe):Math.floor(oe));if(D===ue)for(let we=0;we<$;we++){let be=we+Y;if(be<0||be>=m)continue;let Ie=ae+be*l[2],Ee=be*w,De=Math.min(d-1,i?Math.round(Ee):Math.floor(Ee));j===De&&(re+=g[Ie+te])}}f[q+te]=re}}}}return n.makeTensorInfo(r.shape,r.dtype,f)}var AX={kernelName:af,backendName:"cpu",kernelFunc:$X};function FX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a;xe(r,"reverse");let i=r.shape.length,o=v.parseAxisParam(s,r.shape);if(i===0)return fr({inputs:{x:r},backend:n});let l=new jt(r.shape,r.dtype),u=n.bufferSync(r);for(let p=0;pc[h]=r.shape[h]-1-c[h]),l.set(u.get(...c),...d)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var DX={kernelName:uo,backendName:"cpu",kernelFunc:FX},RX={kernelName:ju,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]=C.getImageCenter(i,p,d),f=255,g=Math.sin(r),b=Math.cos(r),y=o.data.get(a.dataId).values;for(let x=0;x=0&&P=0&&U{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),PX={kernelName:po,backendName:"cpu",kernelFunc:MX};function OX(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}=C.calculateShapes(s,r,i),c=!0,h=n.bufferSync(r),m=n.bufferSync(s),f=xl(h,m,i,d,u,l,o,p,0,c);return n.makeTensorInfo(i,f.dtype,f.values)}var LX={kernelName:Au,backendName:"cpu",kernelFunc:OX};function zX(e,t){let n=0,a=e.length,r=0;for(;n1||r.shape.length===1?1:v.sizeFromShape(r.shape.slice(1));for(let m=0;me>=0?qX*e:jX*(Math.exp(e)-1)),XX={kernelName:Du,backendName:"cpu",kernelFunc:KX},YX=ot(Pu,e=>e<0?-1:e>0?1:0),ZX={kernelName:Pu,backendName:"cpu",kernelFunc:YX},JX=ot(ho,e=>Math.sin(e)),QX={kernelName:ho,backendName:"cpu",kernelFunc:JX},e7=ot(Mu,e=>Math.sinh(e)),t7={kernelName:Mu,backendName:"cpu",kernelFunc:e7},n7=11920928955078125e-23,SI=Math.log(n7)+2,a7=ot(Ou,e=>{let t=e>-SI,n=eNumber(g)))),n.makeTensorInfo([f.length],a.dtype,new Int32Array(f))]}var l7={kernelName:Rc,backendName:"cpu",kernelFunc:o7};function u7(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]=qC(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var p7={kernelName:Wu,backendName:"cpu",kernelFunc:u7};function c7(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]=n1(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var d7={kernelName:Mc,backendName:"cpu",kernelFunc:c7};function h7(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]=n1(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var m7={kernelName:Pc,backendName:"cpu",kernelFunc:h7};function f7(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}=C.calculateShapes(s,r,o),h=!1,m=n.bufferSync(r),f;switch(s.dtype){case"bool":{let g=n.bufferSync(s),b=Boolean(n.data.get(i.dataId).values[0]);f=xl(m,g,o,c,p,u,l,d,b,h);break}case"float32":{let g=n.bufferSync(s),b=n.data.get(i.dataId).values[0];f=xl(m,g,o,c,p,u,l,d,b,h);break}case"int32":{let g=n.bufferSync(s),b=n.data.get(i.dataId).values[0];f=xl(m,g,o,c,p,u,l,d,b,h);break}case"string":{let g=n.bufferSync(s),b=v.decodeString(n.data.get(i.dataId).values[0]);f=xl(m,g,o,c,p,u,l,d,b,h);break}default:throw new Error(`Unsupported type ${s.dtype}`)}return n.makeTensorInfo(o,f.dtype,f.values)}var g7={kernelName:of,backendName:"cpu",kernelFunc:f7};function b7(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=C.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=xi({inputs:{x:r},backend:n,attrs:{begin:u,size:c}});return u[o]+=d,h})}var y7={kernelName:zu,backendName:"cpu",kernelFunc:b7},x7={kernelName:Oc,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,a=t;xe(n,"square");let r=a.data.get(n.dataId).values,s=new Float32Array(r.length);for(let i=0;i{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),w7={kernelName:ks,backendName:"cpu",kernelFunc:v7};function k7(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;xe(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:b,begin:y,end:x,strides:w}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=yt({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||b){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let N=qt.computeOutShape(y,x,w),_=xi({inputs:{x:r},backend:n,attrs:{begin:y,size:N}});I=yt({inputs:{x:_},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(_)}else{let N=n.bufferSync(r),_=XC(h,N,w,y);I=n.makeTensorInfo(m,_.dtype,_.values)}return I}var I7={kernelName:Bu,backendName:"cpu",kernelFunc:k7};function T7(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]=a1(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var S7={kernelName:Lc,backendName:"cpu",kernelFunc:T7};function N7(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]=r1(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 C7={kernelName:zc,backendName:"cpu",kernelFunc:N7};function _7(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=s1(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var E7={kernelName:Wc,backendName:"cpu",kernelFunc:_7},$7=ot(vo,e=>Math.tan(e)),A7={kernelName:vo,backendName:"cpu",kernelFunc:$7},F7=ot(wo,e=>Math.tanh(e)),D7={kernelName:wo,backendName:"cpu",kernelFunc:F7};function R7(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reps:s}=a;xe(r,"tile");let i=ZC(n.bufferSync(r),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var M7={kernelName:ws,backendName:"cpu",kernelFunc:R7};function P7(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{k:s,sorted:i}=a;xe(r,"topk");let o=n.data.get(r.dataId).values,[l,u]=QC(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 O7={kernelName:Vu,backendName:"cpu",kernelFunc:P7};function L7(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],b=v.computeStrides(r.shape),y=b[0],x=b[1],w=b[2],I=v.computeStrides(g),N=I[0],_=I[1],$=I[2],A=v.getTypedArrayFromDType(r.dtype,v.sizeFromShape(g));A.fill(l);let M=a.data.get(r.dataId).values,D=a.data.get(s.dataId).values;for(let T=0;Tt-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 B7(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 V7(e,t){return e}function U7(e,t){return v.clamp(0,e,t-1)}function Jp(e,t,n,a,r,s,i,o,l,u,p){let d=i*a+o*r+l*s+u;return 0<=o&&on.disposeIntermediateTensorInfo(m)),h}var Z7={kernelName:Bc,backendName:"cpu",kernelFunc:Y7},J7=[Yq,Uj,Jq,e5,Xj,n5,r5,i5,l5,p5,d5,m5,g5,x5,w5,T5,N5,_5,$5,Kq,F5,R5,P5,L5,qj,Zj,W5,Gj,V5,G5,H5,q5,X5,Z5,Q5,tK,aK,sK,oK,uK,cK,hK,fK,gK,yK,vK,kK,IK,TK,SK,_K,Bq,$K,Jj,LK,Qj,zK,tq,HK,jK,KK,aq,ZK,QK,t8,a8,s8,sq,oq,Hj,o8,U5,u8,c8,h8,Vq,uq,cq,f8,hq,b8,v8,k8,S8,C8,E8,$8,fq,F8,R8,P8,L8,W8,V8,G8,bq,j8,X8,Q8,xq,wq,nX,sX,lX,Iq,pX,dX,hX,g_,bX,Gq,Nq,xX,wX,jj,$x,IX,Hq,jq,qq,SX,CX,EX,AX,DX,RX,PX,_q,LX,UX,HX,XX,$q,ZX,QX,t7,Aq,Z8,r7,i7,l7,p7,d7,m7,g7,y7,Rq,x7,Pq,w7,I7,S7,C7,E7,Wq,NK,A7,D7,M7,O7,z7,Tq,q7,X7,Z7,cX];for(let e of J7)Vc(e);var b_={};Fe(b_,{assertNotComplex:()=>ip,bindCanvasToFramebuffer:()=>uY,bindColorTextureToFramebuffer:()=>Gh,bindTextureToProgramUniformSampler:()=>D_,bindTextureUnit:()=>$_,bindVertexBufferToProgramAttribute:()=>Fx,callAndCheck:()=>ge,canBeRepresented:()=>x_,createFragmentShader:()=>k_,createFramebuffer:()=>E_,createProgram:()=>I_,createStaticIndexBuffer:()=>N_,createStaticVertexBuffer:()=>S_,createTexture:()=>C_,createVertexShader:()=>w_,getBatchDim:()=>vi,getExtensionOrThrow:()=>Qp,getFramebufferErrorMessage:()=>R_,getMaxTexturesInShader:()=>L_,getNumChannels:()=>oY,getProgramUniformLocation:()=>F_,getProgramUniformLocationOrThrow:()=>A_,getRowsCols:()=>wi,getShapeAs3D:()=>Hh,getTextureShapeFromLogicalShape:()=>P_,getWebGLDisjointQueryTimerVersion:()=>z_,getWebGLErrorMessage:()=>v_,getWebGLMaxTextureSize:()=>O_,hasExtension:()=>da,isCapableOfRenderingToFloatTexture:()=>W_,isDownloadFloatTextureEnabled:()=>B_,isReshapeFree:()=>xc,isWebGLFenceEnabled:()=>V_,isWebGLVersionEnabled:()=>Rx,linkProgram:()=>T_,logShaderSourceAndInfoLog:()=>c1,resetMaxTextureSize:()=>pY,resetMaxTexturesInShader:()=>cY,unbindColorTextureFromFramebuffer:()=>Dx,unbindTextureUnit:()=>lY,validateFramebuffer:()=>ec,validateProgram:()=>Uh,validateTextureSize:()=>__});var Qs={},Ph={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function y_(e,t){Qs[e]=t}function Ja(e,t){if(!(e in Qs)||t!=null){let a=eY(e,t);if(a!==null)Qs[e]=a;else return console.log("Could not get context for WebGL version",e),null}let n=Qs[e];return n==null||n.isContextLost()?(delete Qs[e],Ja(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),Qs[e])}function Q7(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 eY(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=t==null?Q7(e):t;return n.addEventListener("webglcontextlost",a=>{a.preventDefault(),delete Qs[e]},!1),X().getBool("SOFTWARE_WEBGL_ENABLED")&&(Ph.failIfMajorPerformanceCaveat=!1),e===1?n.getContext("webgl",Ph)||n.getContext("experimental-webgl",Ph):n.getContext("webgl2",Ph)}var yc;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(yc||(yc={}));var ca;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(ca||(ca={}));var ln;(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"})(ln||(ln={}));function vd(e,t){return[t,e]}function tY(e,t){return e*t}function Oh(e){let t=v.sizeFromShape(e),n=Math.ceil(t/4);return v.sizeToSquarishShape(n)}function sp(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function nY(e,t){let[n,a]=sp(e,t);return n*a*4}function p1(e,t){let n=e,a,r,s,i,o,l,u,p,d,c;return X().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 ge(e,t){let n=t();return X().getBool("DEBUG")&&aY(e),n}function aY(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+v_(e,t))}var rY=596e-10,sY=65504;function x_(e){return!!(X().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||rYe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function w_(e,t){let n=Or(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ge(e,()=>e.shaderSource(n,t)),ge(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 k_(e,t){let n=Or(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ge(e,()=>e.shaderSource(n,t)),ge(e,()=>e.compileShader(n)),X().get("ENGINE_COMPILE_ONLY"))return n;if(e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw c1(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var iY=/ERROR: [0-9]+:([0-9]+):/g;function c1(e,t){let n=iY.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;de.createProgram(),"Unable to create WebGLProgram.")}function T_(e,t){if(ge(e,()=>e.linkProgram(t)),!X().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 Uh(e,t){if(ge(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function S_(e,t){let n=Or(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ge(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function N_(e,t){let n=Or(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ge(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ge(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function oY(){return X().getNumber("WEBGL_VERSION")===2?1:4}function C_(e){return Or(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function __(e,t){let n=X().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 Or(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function Fx(e,t,n,a,r,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ge(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ge(e,()=>e.enableVertexAttribArray(o)),!0)}function $_(e,t,n){M_(e,n),ge(e,()=>e.activeTexture(e.TEXTURE0+n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function lY(e,t){M_(e,t),ge(e,()=>e.activeTexture(e.TEXTURE0+t)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function A_(e,t,n){return Or(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function F_(e,t,n){return e.getUniformLocation(t,n)}function D_(e,t,n,a){ge(e,()=>$_(e,t,a)),ge(e,()=>e.uniform1i(n,a))}function uY(e){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ge(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ge(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function Gh(e,t,n){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ge(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function Dx(e,t){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ge(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function ec(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+R_(e,t))}function R_(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 Or(e,t,n){let a=ge(e,()=>t());if(a==null)throw new Error(n);return a}function M_(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,a=t+e.TEXTURE0;if(an){let r=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${r}.`)}}function vi(e,t=2){return v.sizeFromShape(e.slice(0,e.length-t))}function wi(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 Hh(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[vi(e),...wi(e)]),t}function P_(e,t=!1){let n=X().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((r,s)=>s>=e.length-2?v.nearestLargerEven(e[s]):e[s]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=v.squeezeShape(e).newShape);let a=v.sizeFromShape(e);if(e.length<=1&&a<=n)return[1,a];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let r=vi(e),s=2,i=2;return e.length&&([s,i]=wi(e)),a=r*(s/2)*(i/2),v.sizeToSquarishShape(a).map(o=>o*2)}return v.sizeToSquarishShape(a)}function Lh(e){return e%2===0}function xc(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||Lh(n)&&Lh(a)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Lh(e[0])&&Lh(t[0])}var jh,qh;function O_(e){if(jh==null){let t=Ja(e);jh=t.getParameter(t.MAX_TEXTURE_SIZE)}return jh}function pY(){jh=null}function cY(){qh=null}function L_(e){if(qh==null){let t=Ja(e);qh=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,qh)}function z_(e){if(e===0)return 0;let t,n=Ja(e);return da(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:da(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function da(e,t){return e.getExtension(t)!=null}function Rx(e){try{if(Ja(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function W_(e){if(e===0)return!1;let t=Ja(e);if(e===1){if(!da(t,"OES_texture_float"))return!1}else if(!da(t,"EXT_color_buffer_float"))return!1;return Mx(t)}function B_(e){if(e===0)return!1;let t=Ja(e);if(e===1){if(!da(t,"OES_texture_float")||!da(t,"WEBGL_color_buffer_float"))return!1}else{if(da(t,"EXT_color_buffer_float"))return Mx(t);let n="EXT_color_buffer_half_float";if(da(t,n)){let a=t.getExtension(n);return dY(t,a)}return!1}return Mx(t)}function Mx(e){let t=p1(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 dY(e,t){let n=p1(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 V_(e){return e!==2?!1:Ja(e).fenceSync!=null}function ip(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 Se=X();Se.registerFlag("HAS_WEBGL",()=>Se.getNumber("WEBGL_VERSION")>0);Se.registerFlag("WEBGL_VERSION",()=>Rx(2)?2:Rx(1)?1:0);Se.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Se.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Se.get("WEBGL_VERSION")===2);Se.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Se.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Se.registerFlag("WEBGL_PACK",()=>Se.getBool("HAS_WEBGL"));Se.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_CLIP",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_PACK_REDUCE",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_LAZILY_UNPACK",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_CONV_IM2COL",()=>Se.getBool("WEBGL_PACK"));Se.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>O_(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>L_(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Se.getNumber("WEBGL_VERSION");return e===0?0:z_(e)});Se.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Se.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Hc.isMobile());Se.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>W_(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Se.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Se.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Se.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>B_(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_FENCE_API_ENABLED",()=>V_(Se.getNumber("WEBGL_VERSION")));Se.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Se.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Se.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}.`)});Se.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Hc.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}.`)});Se.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Se.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Se.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Se.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);Se.registerFlag("WEBGL_EXP_CONV",()=>!1);Se.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>Se.getBool("IS_TEST"));function An(){let e,t,n,a,r,s,i,o,l,u;return X().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",a="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=` 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 Eo(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 fg(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 hY(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 mY(e,t,n="index"){let a=e.map((s,i)=>i),r=hY(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 d1(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 h1(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `}var U_=` 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:G_}=C;function fY(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}=m1(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=>gY(c,t,n.packedInputs,n.enableShapeUniforms)).join(` `),i=t.texShape,o=An(),l=xY(o),u,p,d=kY(o);return t.isPacked?(u=bY(t.logicalShape,i,n.enableShapeUniforms),p=wY(o)):(u=yY(t.logicalShape,i,n.enableShapeUniforms),p=vY(o)),n.packedInputs&&(d+=NY),[d,l,p,r,u,s,n.userCode].join(` `)}function op(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return LY(e,t);case 1:return WY(e,t);case 2:return VY(e,t);case 3:return GY(e,t);case 4:return jY(e,t);case 5:return qY(e);case 6:return KY(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function H_(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return OY(e);case 1:return zY(e,t);case 2:return BY(e,t);case 3:return UY(e,t);default:return HY(e,t)}}function gY(e,t,n=!1,a){let r="";n?r+=H_(e,a):r+=op(e,a);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(n?r+=XY(e,t):r+=YY(e,t)),r}function bY(e,t,n){switch(e.length){case 0:return j_();case 1:return CY(e,t,n);case 2:return MY(e,t,n);case 3:return EY(e,t,n);default:return AY(e,t,n)}}function yY(e,t,n){switch(e.length){case 0:return j_();case 1:return _Y(e,t,n);case 2:return PY(e,t,n);case 3:return $Y(e,t,n);case 4:return FY(e,t,n);case 5:return DY(e,t);case 6:return RY(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function xY(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } `}function vY(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } `}function wY(e){return` void setOutput(vec4 val) { ${e.output} = val; } `}function kY(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); } ${IY} ${TY} ${SY} `}var IY=` 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); } `,TY=` 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); } `,SY=` 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); } `,NY=` 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 j_(){return` int getOutputCoords() { return 0; } `}function CY(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 _Y(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 EY(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 $Y(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; ${fg(["r","c","d"],e)} return ivec3(r, c, d); } `;let a=Eo(["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 AY(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=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,b)=>`coords.${d[b+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,b=s-1;o.indexOf(g)>-1&&o.indexOf(b)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(b)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${r}() { ${l} coords = getOutputCoords(); ${p} vec4 outputValue = get${a}(${c}); ${h} } `}function YY(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=pt(l),p=G_(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 pt(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 m1(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.lengthe[n]).join(", ")}function ZY(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=fY(r,i,t),l=k_(e.gl,o),u=e.createProgram(l);return X().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},q_(e,t,u))}function q_(e,t,n){let a={},r={},s={},i=[],o,l,u,p=null,d=null;d=e.getUniformLocation(n,"NAN",!1),X().getNumber("WEBGL_VERSION")===1&&(p=e.getUniformLocation(n,"INFINITY",!1));let c=!1;for(let h=0;h{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 CI(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 JY(e,t,n,a,r){t.program.enableShapeUniforms||(CI(t.inShapeInfos,n),CI([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),X().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}=m1(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 QY(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}=m1(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),b=v.sizeFromShape(i.shape)===1,y=C.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}_${b}_${y}_${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+`${X().getNumber("WEBGL_VERSION")}`,s}function Fn(e){return X().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var eZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=yc.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=An();this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?fg(["r","c","d"],e):Eo(["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; } `}},tZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=yc.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=An();this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?fg(["r","c","d"],e):Eo(["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; } `}},nZ=class{constructor(e){this.variableNames=["A"],this.outTexUsage=ca.DOWNLOAD;let t=An();this.outputShape=e,this.userCode=` ${U_} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } `}},aZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ca.DOWNLOAD;let t=An();this.outputShape=e,this.userCode=` ${U_} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } `}},rZ=class{constructor(e,t=!1){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=An();this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length);let a="result";t&&(a="floor(result * 255. + 0.5)"),this.userCode=` ${this.enableShapeUniforms?h1():d1(e)} void main() { ivec3 coords = getOutputCoords(); int flatIndex = getFlatIndex(coords); int 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]); vec4 values = ${n.texture2D}(A, uv); float result; if(offset == 0) { result = values[0]; } else if(offset == 1) { result = values[1]; } else if(offset == 2) { result = values[2]; } else { result = values[3]; } ${n.output} = vec4(${a}, 0., 0., 0.); } `}},sZ=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=An();this.outputShape=e,this.enableShapeUniforms=Fn(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?h1():d1(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}; } `}},K_={};Fe(K_,{bindVertexProgramAttributeStreams:()=>aE,createBufferFromOutputTexture:()=>iE,createFloat16MatrixTexture:()=>Q_,createFloat16PackedMatrixTexture:()=>nE,createFloat32MatrixTexture:()=>J_,createIndexBuffer:()=>Z_,createPackedMatrixTexture:()=>tE,createUnsignedBytesMatrixTexture:()=>eE,createVertexBuffer:()=>Y_,createVertexShader:()=>X_,downloadByteEncodedFloatMatrixFromOutputTexture:()=>lE,downloadFloat32MatrixFromBuffer:()=>oE,downloadMatrixFromPackedOutputTexture:()=>pE,downloadPackedMatrixFromBuffer:()=>uE,getInternalFormatForFloat16MatrixTexture:()=>g1,getInternalFormatForFloat16PackedMatrixTexture:()=>x1,getInternalFormatForFloat32MatrixTexture:()=>f1,getInternalFormatForPackedMatrixTexture:()=>y1,getInternalFormatForUnsignedBytesMatrixTexture:()=>b1,uploadDenseMatrixToTexture:()=>rE,uploadPixelDataToTexture:()=>sE});function X_(e){let t=An(),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 w_(e,n)}function Y_(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 S_(e,t)}function Z_(e){let t=new Uint16Array([0,1,2,2,1,3]);return N_(e,t)}function wd(e,t,n,a,r,s){__(t,n);let i=C_(e),o=e.TEXTURE_2D;return ge(e,()=>e.bindTexture(o,i)),ge(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ge(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ge(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ge(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),X().getNumber("WEBGL_VERSION")===1?ge(e,()=>e.texImage2D(o,0,a,t,n,0,r,s,null)):ge(e,()=>e.texStorage2D(o,1,a,t,n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[n,t]}}function f1(e){return e.internalFormatFloat}function J_(e,t,n,a){let[r,s]=vd(t,n);return wd(e,r,s,f1(a),a.textureFormatFloat,e.FLOAT)}function g1(e){return e.internalFormatHalfFloat}function Q_(e,t,n,a){let[r,s]=vd(t,n);return wd(e,r,s,g1(a),a.textureFormatFloat,a.textureTypeHalfFloat)}function b1(e){return e.downloadTextureFormat}function eE(e,t,n,a){let[r,s]=vd(t,n);return wd(e,r,s,b1(a),e.RGBA,e.UNSIGNED_BYTE)}function y1(e){return e.internalFormatPackedFloat}function tE(e,t,n,a){let[r,s]=sp(t,n);return wd(e,r,s,y1(a),e.RGBA,e.FLOAT)}function x1(e){return e.internalFormatPackedHalfFloat}function nE(e,t,n,a){let[r,s]=sp(t,n);return wd(e,r,s,x1(a),e.RGBA,a.textureTypeHalfFloat)}function aE(e,t,n){return ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),Fx(e,t,"clipSpacePos",n,3,20,0)&&Fx(e,t,"uv",n,2,20,12)}function rE(e,t,n,a,r,s){ge(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),X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,a,e.RGBA,o,i)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,a,0,e.RGBA,o,i)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function sE(e,t,n){ge(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function iE(e,t,n,a){let r=e.createBuffer();ge(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*n;return ge(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ge(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ge(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function oE(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 lE(e,t,n,a){let[r,s]=vd(t,n),i=4,o=new Uint8Array(tY(t*n,i));return ge(e,()=>e.readPixels(0,0,r,s,a.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function uE(e,t,n,a,r,s,i,o){let l=e,u=new Float32Array(nY(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 pE(e,t,n){let a=new Float32Array(t*n*4);return ge(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,a)),a}var Kh=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=X().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,y_(t,e)):this.gl=Ja(t);let n="WEBGL_color_buffer_float",a="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),X().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Qp(this.gl,r),da(this.gl,s))this.textureHalfFloatExtension=Qp(this.gl,s);else if(X().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),da(this.gl,a))this.colorBufferHalfFloatExtension=Qp(this.gl,a);else if(X().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",da(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(da(this.gl,a))this.colorBufferHalfFloatExtension=this.gl.getExtension(a);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=Y_(this.gl),this.indexBuffer=Z_(this.gl),this.framebuffer=E_(this.gl),this.textureConfig=p1(this.gl,this.textureHalfFloatExtension)}get debug(){return X().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;ge(e,()=>e.finish()),ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ge(e,()=>e.deleteFramebuffer(this.framebuffer)),ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ge(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ge(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),J_(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),Q_(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),eE(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),sE(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,a){this.throwIfDisposed(),rE(this.gl,e,t,n,a,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),nE(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),tE(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(Dx(this.gl,this.framebuffer),this.outputTexture=null),ge(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>lE(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,a,r,s){return uE(this.gl,e,t,n,a,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return oE(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let a=iE(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(X().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 X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>pE(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=X_(t));let n=I_(t);return ge(t,()=>t.attachShader(n,this.vertexShader)),ge(t,()=>t.attachShader(n,e)),T_(t,n),this.debug&&Uh(t,n),this.vertexAttrsAreBound||(this.setProgram(n),this.vertexAttrsAreBound=aE(t,this.program,this.vertexBuffer)),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&ge(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Uh(this.gl,this.program),ge(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?A_(this.gl,e,t):F_(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ge(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(),D_(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[a,r]=sp(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&&Uh(this.gl,this.program),ec(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),ge(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ge(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Qp(this.gl,X().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(X().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(X().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,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,X().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=iZ(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){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&v.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Gh(this.gl,e,this.framebuffer),this.debug&&ec(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Gh(this.gl,this.outputTexture,this.framebuffer),this.debug&&ec(this.gl)):Dx(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;Gh(a,e,this.framebuffer),this.debug&&ec(a),this.outputTexture=e,ge(a,()=>a.viewport(0,0,t,n)),ge(a,()=>a.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,a){this.throwIfDisposed(),ge(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 iZ(e){let t=0;for(;t`${e}.${n}`)}function Sn(e,t){return t===1?[e]:mE(e,t)}function KZ(e,t){if(e===1)return"rc";let n="";for(let a=0;a ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let t="";for(let n=this.rank-2;n= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n= ${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]})`}},fE=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=Fn(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=` ${YZ(t,this.enableShapeUniforms)} ${this.enableShapeUniforms?h1():d1(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 YZ(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { ${t?mY(["r","c","d"],"inputShape"):Eo(["r","c","d"],e)} return ivec3(r, c, d); } `}var ZZ=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=EI(t,n),r=$I(e,a,n);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=_I(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===ln.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):a===ln.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):a===ln.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):a===ln.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):a===ln.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=EI(n,a),s=$I(t,r,a);s in this.freeTextures||(this.freeTextures[s]=[]);let i=_I(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,a),o=X().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 JZ(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 _I(e,t,n,a,r){let s=QZ(t,a),i;if(r){let[l,u]=sp(e[0],e[1]);i=l*u}else{let[l,u]=vd(e[0],e[1]);i=l*u}let o=JZ(n,s);return i*o}function QZ(e,t){switch(e){case ln.PACKED_2X2_FLOAT32:return y1(t);case ln.PACKED_2X2_FLOAT16:return x1(t);case ln.UNPACKED_FLOAT32:return f1(t);case ln.UNPACKED_FLOAT16:return g1(t);case ln.PACKED_4X1_UNSIGNED_BYTE:return b1(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function eJ(e){return X().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?ln.PACKED_2X2_FLOAT32:ln.UNPACKED_FLOAT32:e?ln.PACKED_2X2_FLOAT16:ln.UNPACKED_FLOAT16}function EI(e,t){if(e===ca.UPLOAD)return ln.PACKED_2X2_FLOAT32;if(e===ca.RENDER||e==null)return eJ(t);if(e===ca.DOWNLOAD||e===ca.PIXELS)return ln.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function $I(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var $r=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } void main() { float x = getAAtOutCoords(); float y = unaryOperation(x); setOutput(y); } `}},Ra="if (isnan(x)) return x;",tJ="return x;",AI="return abs(x);",nJ="return (x >= 0.0) ? x : (exp(x) - 1.0);",aJ=Ra+` return (x < 0.0) ? 0.0 : x; `,rJ=Ra+` return (x < 0.0) ? 0.0 : min(6.0, x); `,fl="return x;",sJ="return 1.0 / (1.0 + exp(-1.0 * x));",iJ="return x;",oJ=` 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; `,lJ=` 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; `,uJ=` 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; `,pJ="return 1.0 / (1.0 + exp(-1.0 * x));",ni=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}},cJ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=Fn(this.outputShape.length);let t=e.length,n=Sn("rc",t),a=pt(t),r=KZ(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})); } `}},dJ=yr.whereImpl,hJ=1e-7,mJ=1e-4,Vy={};function fJ(e){return e in Vy||(Vy[e]={}),Vy[e]}var gJ=X().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),bJ=600;function yJ(){return X().global.screen==null?1024:X().global.screen.height*X().global.screen.width*window.devicePixelRatio*bJ/1024/1024}var gg=class extends Tc{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,!X().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Kh)t=e;else{let n=Ja(X().getNumber("WEBGL_VERSION"),e);t=new Kh(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Ja(X().getNumber("WEBGL_VERSION"));t=new Kh(n),this.binaryCache=fJ(X().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new ZZ(this.gpgpu),this.numMBBeforeWarning=yJ(),this.texData=new Em(this,ir())}nextDataId(){return gg.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}write(e,t,n){if((X().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||X().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:ca.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(X().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:ca.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 ni(i,fl):d=new $r(i,fl);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=C.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 ni(a,fl):h=new $r(a,fl);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(X().getBool("DEBUG")&&!X().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&X().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"&&X().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...Oh(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=C.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;ge(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)&&ir().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 ni(r,fl):c=new $r(r,fl);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=ir().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 ze(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return ze(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t0}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(X().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 X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:v.now(),endMs:null}}endTimer(e){return X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=v.now(),e)}async getQueryTime(e){if(X().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=gJ){return X().getBool("WEBGL_CPU_FORWARD")&&e.every(n=>this.texData.get(n.dataId).texture==null&&v.sizeFromShape(n.shape)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 ir().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,n),this)}unpackTensor(e){let t=new cJ(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new XZ(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[vi(e.shape),...wi(e.shape)],a={dtype:e.dtype,shape:n,dataId:e.dataId},r=[vi(t),...wi(t)],s=new fE(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=Hh(r),o;a?o=new tZ(i):o=new eZ(i);let l=!0,u=[t!=null?t:Oh(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===yc.DENSE){let g=s!=null?s:Oh(e.outputShape);o.texShape=g.map(b=>b*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 b=this.texData.get(g.dataId);if(b.texture==null){if(!e.packedInputs&&v.sizeFromShape(g.shape)<=X().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!b.isPacked!=!!e.packedInputs)g=b.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),b=this.texData.get(g.dataId);else if(b.isPacked&&!xc(b.shape,g.shape)){let y=g,x=g.shape;g.shape=b.shape,g=this.packedReshape(g,x),l.push(g),b=this.texData.get(g.dataId),y.shape=x}return{shape:g.shape,texData:b,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:o,isUniform:!1},d=QY(e,u,p),c=this.getAndSaveBinary(d,()=>ZY(this.gpgpu,e,u,p)),h=this.activeTimers!=null,m;h&&(m=this.startTimer()),X().get("ENGINE_COMPILE_ONLY")||JY(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=X().get("WEBGL_FLUSH_THRESHOLD");if(f>0){let g=v.now();g-this.lastGlFlushTime>f&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!X().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||(X().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=O(()=>{if(!X().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=X().getBool("DEBUG");X().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(X().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?hJ:mJ}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=P_(n,o),t.texShape=p),r!=null){let d=Hh(n),c,h=p[1],m=p[0],f=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!f)&&([h,m]=sp(p[0],p[1])),o?c=new sZ(d,f):c=new rZ(d,f);let g=f?[m,h]:p,b=this.makeTensorInfo(g,a),y=this.texData.get(b.dataId);f?y.usage=ca.PIXELS:y.usage=ca.UPLOAD,y.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),h,m,r);let x=[[m,h]],w=!0,I=this.runWebGLProgram(c,[b],a,x,w),N=this.texData.get(I.dataId);t.texShape=N.texShape,t.isPacked=N.isPacked,t.usage=N.usage,X().get("ENGINE_COMPILE_ONLY")?this.disposeData(I.dataId):(t.texture=N.texture,t.values=null,this.texData.delete(I.dataId)),this.disposeIntermediateTensorInfo(b),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 this.releaseGPUData(e),t!=null&&(n.values=xJ(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 gw(),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?(c1(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}=q_(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}}};gg.nextDataId=0;function xJ(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;anew gg,2);var wJ={forceHalfFloat:gE},bE=` if (isnan(a)) return a; if (isnan(b)) return b; `,Bl=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=C.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=Fn(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}},bg=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `,kd=class{constructor(e,t,n,a=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=C.assertAndGetBroadcastShape(t,n);let r=this.outputShape.length;this.enableShapeUniforms=Fn(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=` ${pt(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=Sn("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 aa(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 kJ={kernelName:Ui,backendName:"webgl",kernelFunc:aa};function Fs(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=aa({inputs:{x:a},backend:n}),l=aa({inputs:{x:r},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var IJ={kernelName:Pm,backendName:"webgl",kernelFunc:Fs},yE="return (a < 0.) ? b * a : a;",xE=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function TJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a,i=n.makeTensorInfo([],"float32",v.createScalarValue(s,"float32")),o=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new kd(xE,r.shape,i.shape):new Bl(yE,r.shape,i.shape),l=n.runWebGLProgram(o,[r,i],"float32");return n.disposeIntermediateTensorInfo(i),l}var SJ={kernelName:Gi,backendName:"webgl",kernelFunc:TJ},vE="return (a < 0.) ? b * a : a;",wE=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function NJ(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new kd(wE,a.shape,r.shape):new Bl(vE,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],"float32")}var CJ={kernelName:ao,backendName:"webgl",kernelFunc:NJ},cp="if (isnan(x)) return x;",_J=` if (isnan(a)) return a; if (isnan(b)) return b; `,EJ=` result.r = isNaN.r > 0. ? NAN : result.r; result.g = isNaN.g > 0. ? NAN : result.g; result.b = isNaN.b > 0. ? NAN : result.b; result.a = isNaN.a > 0. ? NAN : result.a; `;function Ze({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=X().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new ni(i.shape,t):p=new $r(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,b]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(x=>{let[w,I]=x,N={dataId:w.dataId,dtype:w.dtype,shape:l.shape},_={dataId:I.dataId,dtype:I.dtype,shape:u.shape},$=new Bl(e,l.shape,u.shape);return p.runWebGLProgram($,[N,_],ma(w.dtype,I.dtype))}),y=Fs({inputs:{real:g,imag:b},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(b),y}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"?C.fromUint8ToStringArray(m):m,b=l.dtype==="string"?C.fromUint8ToStringArray(f):f,[y,x]=r(l.shape,u.shape,g,b,d),w=p.makeTensorInfo(x,d),I=p.texData.get(w.dataId);return I.values=y,w}let c=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return c?h=new kd(t,l.shape,u.shape,n):h=new Bl(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],d)}}function vc(e,t=!1){if(e==="linear")return t?iJ:tJ;if(e==="relu")return t?lJ:aJ;if(e==="elu")return t?oJ:nJ;if(e==="relu6")return t?uJ:rJ;if(e==="prelu")return t?wE:vE;if(e==="leakyrelu")return t?xE:yE;if(e==="sigmoid")return t?pJ:sJ;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var kE=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=Fn(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 b=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let y="rc.x",x="rc.x";e[0]`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&&!xc(r.shape,l)&&!(p.texture!==null&&xc(p.shape,l))?AJ(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var FJ={kernelName:$u,backendName:"webgl",kernelFunc:he},MI=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); } `}},DJ=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 RJ(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=C.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:a,outSize:Math.ceil(n/a)})}return t}function Ao(e,t,n,a){let r=RJ(e.shape),s=e;for(let i=0;i6)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;r6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let a=pt(this.rank),r=mE("rc",this.rank),s=new Array(this.rank);for(let u=0;u`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?[b,d,h]:[b,h,d],I=a?[y,m,c]:[y,c,m],N=he({inputs:{x:e},backend:r,attrs:{shape:w}}),_=he({inputs:{x:t},backend:r,attrs:{shape:I}}),$=[N,_],A=Math.max(b,y),M=n?N.shape[1]:N.shape[2],D=s!=null,T=i!=null,P=l==="leakyrelu",U=l!=null?vc(l,!0):null,j=D||T||P||U!=null,q;if((h===1||m===1)&&M>IE&&j===!1){let Y=N,te=_;n&&(Y=Cn({inputs:{x:N},backend:r,attrs:{perm:[0,2,1]}}),$.push(Y)),a&&(te=Cn({inputs:{x:_},backend:r,attrs:{perm:[0,2,1]}}),$.push(te));let re=m!==1,J=m===1,ie=Y;re&&(ie=he({inputs:{x:Y},backend:r,attrs:{shape:[A,M,1]}}),$.push(ie));let ae=m===1?2:1,oe=te;J&&(oe=he({inputs:{x:te},backend:r,attrs:{shape:[A,1,M]}}),$.push(oe));let ue=w1({inputs:{a:ie,b:oe},backend:r});q=xg({inputs:{x:ue},backend:r,attrs:{axis:ae,keepDims:!0}}),$.push(ue)}else{let Y=ma(e.dtype,t.dtype),te=new kE(w,I,[A,h,m],n,a,D,U,T,P),re=[N,_];if(s!=null&&re.push(s),T&&re.push(i),P){let J=r.makeTensorInfo([],"float32",v.createScalarValue(o,"float32"));re.push(J),$.push(J)}q=r.runWebGLProgram(te,re,Y)}let K=he({inputs:{x:q},backend:r,attrs:{shape:x}});$.push(q);for(let Y of $)r.disposeIntermediateTensorInfo(Y);return K}function BJ(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 Tm({a:r,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:d,activation:p})}var VJ={kernelName:li,backendName:"webgl",kernelFunc:BJ},PI="return abs(x);";function UJ(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=dE(s.values);return n.makeTensorInfo(a.shape,a.dtype,i)}let r;return X().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new ni(a.shape,PI):r=new $r(a.shape,PI),n.runWebGLProgram(r,[a],a.dtype)}var GJ={kernelName:Ul,backendName:"webgl",kernelFunc:UJ},HJ=Ra+` if (abs(x) > 1.) { return NAN; } return acos(x); `,jJ=Ze({opSnippet:HJ}),qJ={kernelName:Gl,backendName:"webgl",kernelFunc:jJ},KJ=Ra+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,XJ=Ze({opSnippet:KJ}),YJ={kernelName:Hl,backendName:"webgl",kernelFunc:XJ},OI="return a + b;",ZJ=cn({opSnippet:OI,packedOpSnippet:OI,supportsComplex:!0,cpuKernelImpl:oZ}),JJ={kernelName:xs,backendName:"webgl",kernelFunc:ZJ},QJ=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); } `}},e9=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 Xh(e){let{inputs:t,backend:n}=e,a=t;if(a.length===1)return aa({inputs:{x:a[0]},backend:n});if(a.length>X().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(a.length/2),l=Xh({inputs:a.slice(0,o),backend:n}),u=Xh({inputs:a.slice(o),backend:n});return Xh({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=X().getBool("WEBGL_PACK")?new e9(a[0].shape,s):new QJ(a[0].shape,s);return n.runWebGLProgram(i,a,r)}var t9={kernelName:Ti,backendName:"webgl",kernelFunc:Xh};function n9(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=C.getAxesPermutation(u,o),d=r;p!=null&&(d=Cn({inputs:{x:r},backend:n,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("all",u,o);let[c,h]=C.computeOutAndReduceShapes(d.shape,u),m=v.sizeFromShape(h),f=he({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=Ao(f,f.dtype,"all",n),b;if(i){let y=C.expandShapeToKeepDim(c,l);b=he({inputs:{x:g},backend:n,attrs:{shape:y}})}else b=he({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),b}var a9={kernelName:jl,backendName:"webgl",kernelFunc:n9};function r9(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=C.getAxesPermutation(u,o),d=r;p!=null&&(d=Cn({inputs:{x:r},backend:n,attrs:{perm:p}}),u=C.getInnerMostAxes(u.length,o)),C.assertAxesAreInnerMostDims("any",u,o);let[c,h]=C.computeOutAndReduceShapes(d.shape,u),m=v.sizeFromShape(h),f=he({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=Ao(f,f.dtype,"any",n),b;if(i){let y=C.expandShapeToKeepDim(c,l);b=he({inputs:{x:g},backend:n,attrs:{shape:y}})}else b=he({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),b}var s9={kernelName:ql,backendName:"webgl",kernelFunc:r9},i9=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)); } `}},o9=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=pt(o),u=Sn("coords",o),p,d;if(s===1){d=o+1;let _=pt(d);p=` ${_} sourceLocR = ${_}(${u.join()}, 0); ++${u[o-1]}; ${_} sourceLocG = ${_}(${u.join()}, 0); ++${u[o-2]}; ${_} sourceLocA = ${_}(${u.join()}, 0); --${u[o-1]}; ${_} sourceLocB = ${_}(${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(_=>"int "+_),f=Sn("sourceLocR",d-1).concat("inIdx.r"),g=Sn("sourceLocG",d-1).concat("inIdx.g"),b=Sn("sourceLocB",d-1).concat("inIdx.b"),y=Sn("sourceLocA",d-1).concat("inIdx.a"),x=n==="max"?"greaterThan":"lessThan",w=a?"":` inIdx = round(vec4(getBestIndicesAChannel(${f.join()}), getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${b.join()}), getBestIndicesAChannel(${y.join()})));`,I=`vec4( getAChannel(${f.join()}), hasNextCol ? getAChannel(${g.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${y.join()}) : 0.)`,N=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()})); } ${N} 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 TE(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=C.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new i9(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=TE(e,t,n,p);return e.disposeIntermediateTensorInfo(p),d}function SE(e,t,n,a=null){let r=a!=null?a.shape:t.shape,s=r[r.length-1],i=C.computeOptimalWindowSize(s),o=new o9(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=SE(e,t,n,u);return e.disposeIntermediateTensorInfo(u),p}return u}function NE(e,t,n,a){let r=[n];if(C.assertAxesAreInnerMostDims("arg"+a.charAt(0).toUpperCase()+a.slice(1),r,t.shape.length),!X().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]=C.computeOutAndReduceShapes(l.shape,r),d=v.sizeFromShape(p),c=he({inputs:{x:l},backend:e,attrs:{shape:[-1,d]}});s.push(c);let h=TE(e,c,a);s.push(h);let m=he({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return SE(e,t,a)}function l9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Cn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=NE(n,l,i[0],"max");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var u9={kernelName:Si,backendName:"webgl",kernelFunc:l9};function p9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=v.parseAxisParam(s,r.shape),o=C.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Cn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=C.getInnerMostAxes(i.length,l.shape.length)),C.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=NE(n,l,i[0],"min");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var c9={kernelName:Sc,backendName:"webgl",kernelFunc:p9},d9=Ra+` if (abs(x) > 1.) { return NAN; } return asin(x); `,h9=Ze({opSnippet:d9}),m9={kernelName:Kl,backendName:"webgl",kernelFunc:h9},f9=Ra+"return log(x + sqrt(x * x + 1.0));",g9=Ze({opSnippet:f9}),b9={kernelName:Xl,backendName:"webgl",kernelFunc:g9},y9=Ra+` return atan(x); `,x9=Ze({opSnippet:y9}),v9={kernelName:Yl,backendName:"webgl",kernelFunc:x9},w9=_J+` return atan(a, b); `,k9=` vec4 result = atan(a, b); vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0)); `+EJ+` return result; `,I9=cn({opSnippet:w9,packedOpSnippet:k9}),T9={kernelName:Jl,backendName:"webgl",kernelFunc:I9},S9=Ra+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,N9=Ze({opSnippet:S9}),C9={kernelName:Zl,backendName:"webgl",kernelFunc:N9},wc=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`,b="0.0";if(m||(b="-1.0 / 1e-20"),n){let _=">=";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 ${_} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${a?r?f:g:`wR * ${d} + wC`}; } } } setOutput(float(minMaxPosition)); } `;return}let y="max",x=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(x="avgValue / count");let w=Math.floor(s/4)*4,I=s%4,N=` if (${m}) { avgValue += dot(values, ones); } else { minMaxValue = ${y}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${i}, ${o}); const ivec2 pads = ivec2(${c}, ${h}); const float initializationValue = ${b}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float count = 0.0; float getValue(int batch, int xR, int xC, int d) { if (xC < 0 || xC >= ${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(${b}); 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) ); ${N} } int xC = xCCorner + ${w}; if (${I===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); ${N} } else if (${I===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${u}, d), initializationValue, initializationValue ); ${N} } 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 ); ${N} } } setOutput(${x}); } `}},k1=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,b=e.padInfo.left;this.outputShape=e.outShape;let y=t==="avg",x="0.0";if(y||(x="-1.0 / 1e-20"),n){let A=">=";this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); const ivec3 pads = ivec3(${f}, ${g}, ${b}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int ch = coords.u; ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xDCorner = xCorner.x; int xRCorner = xCorner.y; int xCCorner = xCorner.z; // max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch). // ? = to be determined float minMaxValue = 0.0; float minMaxValueFound = 0.0; int minMaxPosition = 0; for (int wD = 0; wD < ${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 ${A} 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 / count");let N=Math.floor(s/4)*4,_=s%4,$=` if (${y}) { avgValue += dot(values, ones); } else { minMaxValue = ${w}(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(${i}, ${o}, ${l}); const ivec3 pads = ivec3(${f}, ${g}, ${b}); 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 < ${N}; 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) ); ${$} } int xC = xCCorner + ${N}; if (${_===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); ${$} } else if (${_===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${d}, ch), initializationValue, initializationValue ); ${$} } else if (${_===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 ); ${$} } } setOutput(${I}); } } `}};function _9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;ip(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;v.assert(C.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return aa({inputs:{x:r},backend:n});let d=new wc(p,"avg",!1);return n.runWebGLProgram(d,[r],"float32")}var E9={kernelName:Ni,backendName:"webgl",kernelFunc:_9};function $9(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=C.computePool3DInfo(r.shape,s,i,p,o,l,u),c=new k1(d,"avg",!1);return n.runWebGLProgram(c,[r],"float32")}var A9={kernelName:Nc,backendName:"webgl",kernelFunc:$9},F9=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); } `}},D9=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 R9(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=C.computePool3DInfo(i.shape,o,l,d,u,p),h=new D9(c);return n.runWebGLProgram(h,[r],i.dtype)}var M9={kernelName:Dm,backendName:"webgl",kernelFunc:R9};function P9(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;ip([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=C.computePool2DInfo(i.shape,o,l,1,u),d=new F9(p);return n.runWebGLProgram(d,[r],i.dtype)}var O9={kernelName:Fm,backendName:"webgl",kernelFunc:P9};function L9(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;return Tm({a:r,b:s,transposeA:i,transposeB:o,backend:n})}var z9={kernelName:Ci,backendName:"webgl",kernelFunc:L9},W9=class{constructor(e,t,n,a,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,n);let i="0.0";a!=null&&(C.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(C.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))); } `}},B9=class{constructor(e,t,n,a,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],C.assertAndGetBroadcastShape(e,t),C.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";a!=null&&(C.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(C.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); } `}},V9=({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=X().getBool("WEBGL_PACK_NORMALIZATION")?new B9(a.shape,r.shape,s.shape,p,d,l):new W9(a.shape,r.shape,s.shape,p,d,l);return t.runWebGLProgram(c,u,u[0].dtype)},U9={kernelName:Bi,backendName:"webgl",kernelFunc:V9},G9=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=pt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=H9(this.rank),a,r=e.map((s,i)=>`sourceLoc.${Px[i]} = start[${i}] + coords.${Px[i]};`);a=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${r.join(` `)} `,this.userCode=` void main() { ${a} setOutput(getSource(${n})); } `}},Px=["x","y","z","w","u","v"];function H9(e){if(e===1)return"sourceLoc";if(e<=6)return Px.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var j9=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=pt(this.rank),n=Sn("coords",this.rank),a=Sn("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 q9(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=qt.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 dp(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a,[o,l]=qt.parseSliceParams(r,s,i);if(qt.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=PZ(d.values,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,c)}let{isPacked:u}=n.texData.get(r.dataId),p=qt.isSliceContinous(r.shape,o,l);if(u||!p){let d=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new j9(l):new G9(l),c=[o];return n.runWebGLProgram(d,[r],r.dtype,c)}return n.uploadToGPU(r.dataId),q9(r,o,l,n)}var K9={kernelName:Ru,backendName:"webgl",kernelFunc:dp},X9=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((y,x)=>y*x),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),d=C.getSliceBeginCoords(i,s.length),c=C.getSliceSize(p,i,s.length),h=[],m=he({inputs:{x:r},backend:n,attrs:{shape:l}}),f=Cn({inputs:{x:m},backend:n,attrs:{perm:u}}),g=he({inputs:{x:f},backend:n,attrs:{shape:p}}),b=dp({inputs:{x:g},backend:n,attrs:{begin:d,size:c}});return h.push(m),h.push(f),h.push(g),h.forEach(y=>n.disposeIntermediateTensorInfo(y)),b},Y9={kernelName:Ql,backendName:"webgl",kernelFunc:X9};function Z9(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=cE(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var J9={kernelName:Rm,backendName:"webgl",kernelFunc:Z9};function Q9(e){let{inputs:t,backend:n}=e,{s0:a,s1:r}=t,s=n.readSync(a.dataId),i=n.readSync(r.dataId),o=C.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var eQ={kernelName:Mm,backendName:"webgl",kernelFunc:Q9},tQ="return float(a != b);",CE=cn({opSnippet:tQ,cpuKernelImpl:EZ,dtype:"bool"}),nQ={kernelName:Iu,backendName:"webgl",kernelFunc:CE};function Id(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return aa({inputs:{x:r.complexTensorInfos.real},backend:n})}var aQ={kernelName:nf,backendName:"webgl",kernelFunc:Id},rQ="return float(int(x));";function sQ(e,t){let n=new $r(e.shape,rQ),a=t.runWebGLProgram(n,[e],"int32");return{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}function Ox(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return aa({inputs:{x:r},backend:n});let i=It(r.shape),o=Ox({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),l=Fs({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=Id({inputs:{input:r},backend:n}),o=Ox({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!v.hasEncodingLoss(r.dtype,s)){let i=aa({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]=uZ(i,r.shape,r.dtype,s);return n.makeTensorInfo(o,l,u)}if(s==="int32")return sQ(r,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",v.getTypedArrayFromDType("bool",1)),o=CE({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 iQ={kernelName:_i,backendName:"webgl",kernelFunc:Ox},LI="return ceil(x);",oQ=Ze({opSnippet:LI,packedOpSnippet:LI,cpuKernelImpl:pZ}),lQ={kernelName:Ei,backendName:"webgl",kernelFunc:oQ},uQ=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)); } `}},pQ=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 cQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o;X().getBool("WEBGL_PACK_CLIP")?o=new pQ(r.shape):o=new uQ(r.shape);let l=[[s],[i]];return n.runWebGLProgram(o,[r],r.dtype,l)}var dQ={kernelName:vs,backendName:"webgl",kernelFunc:cQ},hQ=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 zI(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function mQ(e){let{inputs:t,backend:n}=e,{x:a}=t,r=n.texData.get(a.dataId),s=new hQ(a.shape),i=[zI(a,r.complexTensorInfos.real),zI(a,r.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var fQ={kernelName:Cc,backendName:"webgl",kernelFunc:mQ},gQ=class{constructor(e){this.outputShape=[],this.outputShape=C.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${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m= ${o[m-1]}) { return getChannel( getT${m}(${zh(i,l,f)}), vec2(${zh(u,l,f)})); }`}let c=o.length,h=o[o.length-1];d+=` return getChannel( getT${c}(${zh(i,l,h)}), vec2(${zh(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 zh(e,t,n){let a=e.indexOf(t);return e.map((r,s)=>s===a?`${r} - ${n}`:r).join()}function vg(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return aa({inputs:{x:r.complexTensorInfos.imag},backend:n})}var yQ={kernelName:Km,backendName:"webgl",kernelFunc:vg};function tc(e,t,n){let a=e[0].dtype;if(a==="complex64"){let d=e.map(g=>Id({inputs:{input:g},backend:n})),c=e.map(g=>vg({inputs:{input:g},backend:n})),h=tc(d,t,n),m=tc(c,t,n),f=Fs({inputs:{real:h,imag:m},backend:n});return d.forEach(g=>n.disposeIntermediateTensorInfo(g)),c.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),f}let r=n.shouldExecuteOnCPU(e);if(a==="string"&&(r=!0),r){let d=e.map(y=>{let x=v.sizeFromShape(y.shape.slice(t));return he({inputs:{x:y},backend:n,attrs:{shape:[-1,x]}})}),c=d.map(y=>({vals:n.readSync(y.dataId),shape:y.shape})),h=C.computeOutShape(d.map(y=>y.shape),1),m=d[0].shape[0]===1,f=cZ(c,h,a,m),g=C.computeOutShape(e.map(y=>y.shape),t),b=n.makeTensorInfo(g,a,f);return d.forEach(y=>n.disposeIntermediateTensorInfo(y)),b}let s=X().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(e.length>s){let d=[];for(let h=0;h1){let d=new bQ(e.map(c=>c.shape),t);return n.runWebGLProgram(d,e,a)}let{tensors2D:i,outShape:o}=xQ(e,t,n),l=new gQ(i.map(d=>d.shape)),u=n.runWebGLProgram(l,i,a);i.forEach(d=>n.disposeIntermediateTensorInfo(d));let p=he({inputs:{x:u},attrs:{shape:o},backend:n});return n.disposeIntermediateTensorInfo(u),p}function xQ(e,t,n){let a=C.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>he({inputs:{x:r},attrs:{shape:[-1,v.sizeFromShape(r.shape.slice(t))]},backend:n})),outShape:a}}function _E(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a,s=v.parseAxisParam(r,t[0].shape)[0],i=C.computeOutShape(t.map(u=>u.shape),s);if(v.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(u=>v.sizeFromShape(u.shape)>0);if(o.length===1)return aa({inputs:{x:o[0]},backend:n});let l=o.map(u=>u.shape);return C.assertParamsConsistent(l,s),tc(o,s,n)}var vQ={kernelName:eu,backendName:"webgl",kernelFunc:_E},EE=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,b=f?2:3,y=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[${y}]; ivec2 xRCCorner = ivec2(coords[${g}], coords[${b}]) * 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); } `}},wQ=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); } `}},$E=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=Fn(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=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= 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= 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); `):b===1?d+=` xC${g+1} = xTexelC${g}; `:d+=` xCOffset = xC + ${b}; 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= 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= 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= 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 Sm(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 AE({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,b=[];if(s!=null){let y=Sm(s.shape,h);y!=null&&(s=he({inputs:{x:s},backend:a,attrs:{shape:y}}),b.push(s))}if(r!=null){let y=Sm(r.shape,h);y!=null&&(r=he({inputs:{x:r},backend:a,attrs:{shape:y}}),b.push(r))}if(!((d===1||c===1)&&p>IE)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&v.arraysEqual(u.shape.slice(-3),l.slice(-3))){let y=l[0]*l[1]*(l[2]+1),x={dataId:e.dataId,shape:[1,y,n.inChannels],dtype:e.dtype},w=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,v.assert(xc(u.shape,x.shape),()=>`packed reshape ${u.shape} to ${x.shape} isn't free`);let I=he({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}});b.push(I);let N=Tm({a:x,b:I,backend:a,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),_=a.texData.get(N.dataId);v.assert(_.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=w,_.shape=n.outShape,g=aa({inputs:{x:N},backend:a}),g.shape=n.outShape,b.push(N)}else{let y=n.outHeight*n.outWidth,x=he({inputs:{x:e},backend:a,attrs:{shape:h?[n.batchSize,y,n.inChannels]:[n.batchSize,n.inChannels,y]}}),w=he({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}}),I=Tm({a:h?x:w,b:h?w:x,transposeA:!h,transposeB:f,backend:a,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=he({inputs:{x:I},backend:a,attrs:{shape:n.outShape}}),b.push(x),b.push(w),b.push(I)}for(let y of b)a.disposeIntermediateTensorInfo(y);return g}function FE({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,b=[n.batchSize,f,g],y=!0,x=!1,w=[];if(s!=null){let Y=Sm(s.shape,m);Y!=null&&(s=he({inputs:{x:s},backend:a,attrs:{shape:Y}}),w.push(s))}if(r!=null){let Y=Sm(r.shape,m);Y!=null&&(r=he({inputs:{x:r},backend:a,attrs:{shape:Y}}),w.push(r))}let I=he({inputs:{x:t},backend:a,attrs:{shape:[1,f,v.sizeFromShape(t.shape)/f]}});w.push(I);let N=new kQ(b,n),_=[e.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],$=a.runWebGLProgram(N,[e],"float32",_),A=he({inputs:{x:$},backend:a,attrs:{shape:b}});w.push($),w.push(A);let M=r!=null,D=s!=null,T=o==="leakyrelu",P=o?vc(o,!0):null,U=new kE(m?A.shape:I.shape,m?I.shape:A.shape,m?[n.batchSize,g,n.outChannels]:[n.batchSize,n.outChannels,g],y,x,M,P,D,T),j=m?[A,I]:[I,A];if(r&&j.push(r),D&&j.push(s),T){let Y=a.makeTensorInfo([],"float32",v.createScalarValue(i,"float32"));j.push(Y),w.push(Y)}let q=a.runWebGLProgram(U,j,"float32"),K=he({inputs:{x:q},backend:a,attrs:{shape:n.outShape}});w.push(q);for(let Y of w)a.disposeIntermediateTensorInfo(Y);return K}function IQ(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=C.convertConv2DDataFormat(l),c=C.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=AE({x:r,filter:s,convInfo:c,backend:n});else if(c.strideWidth<=2&&d==="channelsLast"&&X().getBool("WEBGL_EXP_CONV")){let f=new $E(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(X().getBool("WEBGL_CONV_IM2COL"))h=FE({x:r,filter:s,convInfo:c,backend:n});else{let f=new EE(c);h=n.runWebGLProgram(f,[r,s],"float32")}let m=he({inputs:{x:h},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(h),m}var TQ={kernelName:$i,backendName:"webgl",kernelFunc:IQ},SQ=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); } `}},NQ=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); } `}},CQ=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); } `}},_Q=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 EQ(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=C.convertConv2DDataFormat(l),c=C.computeConv2DInfo(r.shape,p,i,1,o,u,!1,d),h=new SQ(c);return n.runWebGLProgram(h,[r,s],"float32")}var $Q={kernelName:Om,backendName:"webgl",kernelFunc:EQ};function AQ(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=C.convertConv2DDataFormat(u),c=C.computeConv2DInfo(i,s.shape,o,1,l,p,!1,d),h=new NQ(c);return n.runWebGLProgram(h,[r,s],"float32")}var FQ={kernelName:Ai,backendName:"webgl",kernelFunc:AQ};function DQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=C.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new wQ(u);return n.runWebGLProgram(p,[r,s],"float32")}var RQ={kernelName:_c,backendName:"webgl",kernelFunc:DQ};function MQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=a,u=C.computeConv3DInfo(r.shape,l,i,1,o),p=new CQ(u);return n.runWebGLProgram(p,[r,s],"float32")}var PQ={kernelName:Lm,backendName:"webgl",kernelFunc:MQ};function OQ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=a,u=C.computeConv3DInfo(l,s.shape,o,1,i),p=new _Q(u);return n.runWebGLProgram(p,[r,s],"float32")}var LQ={kernelName:zm,backendName:"webgl",kernelFunc:OQ},zQ=cp+` return cos(x); `,WQ=Ze({opSnippet:zQ}),BQ={kernelName:Fi,backendName:"webgl",kernelFunc:WQ},VQ=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,UQ=Ze({opSnippet:VQ}),GQ={kernelName:Di,backendName:"webgl",kernelFunc:UQ},HQ=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,b]=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}`],[y,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(${y}); 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 = ${b}; 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); } } `}},jQ=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 HQ(r.shape,s.shape,o,l,u);return n.runWebGLProgram(p,[r,s,i],"float32")},qQ={kernelName:nu,backendName:"webgl",kernelFunc:jQ},kc;(function(e){e.Prod="*",e.Sum="+"})(kc||(kc={}));var WI=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===kc.Prod?"1.0":"0.0",i=n?s:`getX(${BI(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() { ${pt(r)} coords = getOutputCoords(); int end = ${VI(r,"coords",this.op)}; float val = ${i}; int pow2 = int(pow(2.0, index)); if (${l}) { int idx = ${u}; ${VI(r,"coords",this.op)} = idx; val ${this.op}= getX(${BI(r,"coords",this.op)}); } setOutput(val); } `}};function BI(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 VI(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 DE(e,t,n,a,r,s){let i=t.shape.length,o=C.getAxesPermutation([a],i),l=t;o!=null&&(l=Cn({inputs:{x:t},backend:n,attrs:{perm:o}}));let u=C.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=aa({inputs:{x:l},backend:n});for(let c=0;c<=Math.ceil(Math.log2(p))-1;c++){let h=new WI(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 WI(e,l.shape,r,s),h=d;d=n.runWebGLProgram(c,[d],d.dtype),n.disposeIntermediateTensorInfo(h)}if(o!=null){let c=C.getUndoAxesPermutation(o),h=Cn({inputs:{x:d},backend:n,attrs:{perm:c}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(l),h}return d}function KQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;return DE(kc.Prod,r,n,s,i,o)}var XQ={kernelName:tu,backendName:"webgl",kernelFunc:KQ};function YQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;return DE(kc.Sum,r,n,s,i,o)}var ZQ={kernelName:Ri,backendName:"webgl",kernelFunc:YQ};function JQ(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=cE(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=lZ(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 QQ={kernelName:Wm,backendName:"webgl",kernelFunc:JQ},eee=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 tee(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 eee(m,s,i);return n.runWebGLProgram(f,[r],r.dtype)}var nee={kernelName:au,backendName:"webgl",kernelFunc:tee},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=Fn(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); } `}},ME=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=Fn(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=0 && xR < inDims[0]) { `;for(let g=0;g<(d+1)/2;g++){let b=g*2;if(c+=` xC = xCCorner + ${b*l}; `,o===1){if(b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = 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${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } `,l===1&&b>0?c+=` xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.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${b} = vec4(previous.zw, xTexelC${b}.xy); } else { xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy); } `):c+=` if (xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } xC${b} = xTexelC${b}; `,b+1= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+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${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } `,l>1?c+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); xC${b+1} = vec4(previous.zw, xTexelC${b+1}.xy); } else { xC${b+1} = vec4(0.0, 0.0, xTexelC${b+1}.xy); } `:c+=` xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy); `):y===1?c+=` xC${b+1} = xTexelC${b}; `:c+=` xCOffset = xC + ${y}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } xC${b+1} = xTexelC${b+1}; `}}else b= 0 && xCOffset < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = 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${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+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${b+1}.zw = vec2(0.0); } xTexelC${b+1}Ready = 1; } xC${b} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw); `,b+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${b+1} = vec4(xTexelC${b+1}.xy, final.xy); `)):(c+=` if(xC >= 0 && xC < inDims[1] && xTexelC${b}Ready == 0) { xTexelC${b} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${b}.zw = vec2(0.0); } xTexelC${b}Ready = 1; } xCOffset = xC + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${b+1}Ready == 0) { xTexelC${b+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${b+1}.zw = vec2(0.); } xTexelC${b+1}Ready = 1; } xC${b} = vec4( xTexelC${b}.xy, xTexelC${b+1}.xy); `,b+1`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let d=C.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),c;X().getBool("WEBGL_PACK_DEPTHWISECONV")&&d.strideWidth<=2&&d.outChannels/d.inChannels===1?c=new ME(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 ree={kernelName:Mi,backendName:"webgl",kernelFunc:aee},see=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); } `}},iee=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 oee(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=C.computeConv2DInfo(r.shape,p,i,o,l,u,!0),c=new see(d);return n.runWebGLProgram(c,[r,s],"float32")}var lee={kernelName:Bm,backendName:"webgl",kernelFunc:oee};function uee(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=C.computeConv2DInfo(p,s.shape,i,o,l,u,!0),c=new iee(d);return n.runWebGLProgram(c,[r,s],"float32")}var pee={kernelName:Vm,backendName:"webgl",kernelFunc:uee},cee=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 dee(e){let{inputs:t,backend:n}=e,{x:a}=t,r=[...a.shape,...a.shape],s=v.sizeFromShape(a.shape),i=he({inputs:{x:a},backend:n,attrs:{shape:[s]}}),o=new cee(s),l=n.runWebGLProgram(o,[i],i.dtype),u=he({inputs:{x:l},backend:n,attrs:{shape:r}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var hee={kernelName:Um,backendName:"webgl",kernelFunc:dee},mee=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 fee(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=C.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,d=new mee(u);p=n.runWebGLProgram(d,[r,s],"float32");let c=he({inputs:{x:p},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(p),c}var gee={kernelName:Ec,backendName:"webgl",kernelFunc:fee};function bee(e){let{inputs:t,backend:n,attrs:a}=e,{equation:r}=a,s=t,{allDims:i,summedDims:o,idDims:l}=C.decodeEinsumEquation(r,s.length);C.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=C.getEinsumComputePath(o,l),d=p.length,c=null,h=i.length,m=[];for(let f=0;f=0&&(c=xg({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 yee={kernelName:Gm,backendName:"webgl",kernelFunc:bee},xee="return (x >= 0.0) ? x : (exp(x) - 1.0);",vee=` 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; `,wee=Ze({opSnippet:xee,packedOpSnippet:vee}),kee={kernelName:Oi,backendName:"webgl",kernelFunc:wee},Iee="return (b >= 1.0) ? a : a * (b + 1.0);",Tee=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,See=e=>{let{inputs:t,backend:n}=e,{dy:a,y:r}=t,s=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new kd(Tee,a.shape,r.shape):new Bl(Iee,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],a.dtype)},Nee={kernelName:Hm,backendName:"webgl",kernelFunc:See},Cee=` return vec4(equal(a, b)); `,_ee="return float(a == b);",Eee=cn({opSnippet:_ee,packedOpSnippet:Cee,dtype:"bool",cpuKernelImpl:dZ}),$ee={kernelName:su,backendName:"webgl",kernelFunc:Eee},Aee=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = ${C.ERF_P}; float a1 = ${C.ERF_A1}; float a2 = ${C.ERF_A2}; float a3 = ${C.ERF_A3}; float a4 = ${C.ERF_A4}; float a5 = ${C.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)); `,Fee=Ze({opSnippet:Aee}),Dee={kernelName:ru,backendName:"webgl",kernelFunc:Fee},Ree=cp+` return exp(x); `,Mee=` 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; `,PE=Ze({opSnippet:Ree,packedOpSnippet:Mee,cpuKernelImpl:hZ,dtype:"float32"}),Pee={kernelName:Li,backendName:"webgl",kernelFunc:PE};function Lx(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),he({inputs:{x:s},backend:a,attrs:{shape:o}})}var Oee={kernelName:iu,backendName:"webgl",kernelFunc:Lx},UI="return exp(x) - 1.0;",Lee=Ze({opSnippet:UI,packedOpSnippet:UI,cpuKernelImpl:mZ}),zee={kernelName:ou,backendName:"webgl",kernelFunc:Lee},GI=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=he({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}),l=o.shape,u=new GI("real",l,t),p=new GI("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=Fs({inputs:{real:c,imag:h},backend:n});n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h);let f=he({inputs:{x:m},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(m),f}function Wee(e){let{inputs:t,backend:n}=e,{input:a}=t;return OE(a,!1,n)}var Bee={kernelName:jm,backendName:"webgl",kernelFunc:Wee},Vee=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 Td(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 Vee(a,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var Uee={kernelName:$c,backendName:"webgl",kernelFunc:Td},Gee=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); } `}},Hee={kernelName:lu,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,a=t,r=new Gee(n.shape);return a.runWebGLProgram(r,[n],n.dtype)}},HI="return floor(x);",jee=Ze({opSnippet:HI,packedOpSnippet:HI,cpuKernelImpl:fZ}),qee={kernelName:zi,backendName:"webgl",kernelFunc:jee},Kee=` 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; } `,Xee=` 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); `,Yee=cn({opSnippet:Kee,packedOpSnippet:Xee,dtype:"int32"}),Zee={kernelName:Wi,backendName:"webgl",kernelFunc:Yee},Jee=class{constructor(e){this.variableNames=["A"];let t=An(),[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)); } `}},Qee=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=An(),[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; } `}},ete={kernelName:tm,backendName:"webgl",kernelFunc:tte},gl,Uy=X().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function tte(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=X().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(gl==null||f!==Uy)&&(Uy=f,gl=document.createElement("canvas").getContext("2d",{willReadFrequently:Uy})),gl.canvas.width=l,gl.canvas.height=u,gl.drawImage(r,0,0,l,u),r=gl.canvas}let c=n.makeTensorInfo(p,"int32");n.texData.get(c.dataId).usage=ca.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(c.dataId),r);let h=X().getBool("WEBGL_PACK")?new Qee(d):new Jee(d),m=n.runWebGLProgram(h,[c],"int32");return n.disposeData(c.dataId),m}function nte(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=C.convertConv2DDataFormat(p),g=C.computeConv2DInfo(r.shape,s.shape,l,d,u,c,!1,f),b,y=[],x=i!=null,w=o!=null,I=h==="leakyrelu",N=()=>{let $=[r,s],A=(M,D)=>{if(D==="NCHW"&&M.shape.length===1&&M.shape[0]!==1){let T=he({inputs:{x:M},backend:n,attrs:{shape:[M.shape[0],1,1]}});return y.push(T),T}return M};if(x&&$.push(A(i,p)),w&&$.push(A(o,p)),I){let M=n.makeTensorInfo([],"float32",v.createScalarValue(m,"float32"));$.push(M),y.push(M)}return $};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"))b=AE({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(g.strideWidth<=2&&f==="channelsLast"&&X().getBool("WEBGL_EXP_CONV")){let $=h?vc(h,!0):null,A=new $E(g,x,$,w,I),M=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],D=N();b=n.runWebGLProgram(A,D,"float32",M)}else if(X().getBool("WEBGL_CONV_IM2COL"))b=FE({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let $=h?vc(h,!1):null,A=new EE(g,x,$,w,I),M=N();b=n.runWebGLProgram(A,M,"float32")}let _=he({inputs:{x:b},backend:n,attrs:{shape:g.outShape}});return y.push(b),y.forEach($=>n.disposeIntermediateTensorInfo($)),_}var ate={kernelName:ui,backendName:"webgl",kernelFunc:nte};function rte(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(C.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=C.computeConv2DInfo(r.shape,s.shape,l,f,u,d,!0),b=X().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,y=c?vc(c,b):null,x=[r,s],w=i!=null,I=o!=null,N=c==="leakyrelu";if(w&&x.push(i),I&&x.push(o),N){let M=n.makeTensorInfo([],"float32",v.createScalarValue(h,"float32"));x.push(M),m.push(M)}let _;b?_=new ME(g,w,y,I,N):_=new RE(g,w,y,I,N);let $=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],A=n.runWebGLProgram(_,x,"float32",$);return m.forEach(M=>n.disposeIntermediateTensorInfo(M)),A}var ste={kernelName:pi,backendName:"webgl",kernelFunc:rte},ite=class{constructor(e,t,n,a){this.sliceDim=e,this.strides=t,this.paramsShape=a,this.variableNames=["x","indices"],this.outputShape=n;let r=pt(t.length),s=pt(n.length),i=this.sliceDim>1?"strides[j]":"strides",o=pt(a.length),l=a.length>1?"paramsShape[j]":"paramsShape";this.userCode=` ${r} strides = ${r}(${this.strides}); ${o} paramsShape = ${o}(${this.paramsShape}); void main() { ${s} coords = getOutputCoords(); int flattenIndex = 0; bool out_of_bounds = false; for (int j = 0; j < ${this.sliceDim}; j++) { int index = round(getIndices(coords[0], j)); out_of_bounds = out_of_bounds || index < 0; out_of_bounds = out_of_bounds || index >= ${l}; flattenIndex += index * ${i}; } setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1])); } `}};function ote(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]=C.prepareAndValidate(a,r),c=he({inputs:{x:r},backend:n,attrs:{shape:[u,i]}}),h=he({inputs:{x:a},backend:n,attrs:{shape:[v.sizeFromShape(a.shape)/p,p]}});if(n.shouldExecuteOnCPU([a,r])||a.dtype==="string"){let b=n.readSync(r.dataId),y=n.bufferSync(a),x=gZ(b,y,a.dtype,u,i,p,d,a.shape,o);return n.makeTensorInfo(l,a.dtype,x.values)}let m=new ite(i,d,[u,p],a.shape),f=n.runWebGLProgram(m,[h,c],h.dtype),g=he({inputs:{x:f},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),g}var lte={kernelName:pu,backendName:"webgl",kernelFunc:ote},ute=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=pt(this.rank),a=pte(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 pte(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let r=0;r=0,()=>`GatherV2: the index value ${I} is not in [0, ${x-1}]`)}}let u=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=v.sizeFromShape(s.shape),d=[],c=he({inputs:{x:r},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=he({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 y=n.bufferSync(h),x=n.bufferSync(c),w=bZ(x,y,m);return d.forEach(I=>n.disposeIntermediateTensorInfo(I)),n.makeTensorInfo(u.outputShape,w.dtype,w.values)}let f=new ute(c.shape,m),g=n.runWebGLProgram(f,[c,h],c.dtype);d.push(g);let b=he({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return d.forEach(y=>n.disposeIntermediateTensorInfo(y)),b}var cte={kernelName:uu,backendName:"webgl",kernelFunc:LE},dte="return float(a > b);",hte=` return vec4(greaterThan(a, b)); `,mte=cn({opSnippet:dte,packedOpSnippet:hte,cpuKernelImpl:yZ,dtype:"bool"}),fte={kernelName:cu,backendName:"webgl",kernelFunc:mte},gte="return float(a >= b);",bte=` return vec4(greaterThanEqual(a, b)); `,yte=cn({opSnippet:gte,packedOpSnippet:bte,dtype:"bool",cpuKernelImpl:xZ}),xte={kernelName:Vi,backendName:"webgl",kernelFunc:yte};function vte(e){let{inputs:t,backend:n}=e,{input:a}=t;return OE(a,!0,n)}var wte={kernelName:qm,backendName:"webgl",kernelFunc:vte},kte="return float(!isnan(x) && !isinf(x));",Ite=Ze({opSnippet:kte,dtype:"bool"}),Tte={kernelName:du,backendName:"webgl",kernelFunc:Ite},Ste="return float(isinf(x));",Nte=Ze({opSnippet:Ste,dtype:"bool"}),Cte={kernelName:hu,backendName:"webgl",kernelFunc:Nte},_te="return float(isnan(x));",Ete=Ze({opSnippet:_te,dtype:"bool"}),$te={kernelName:mu,backendName:"webgl",kernelFunc:Ete},Ate="return float(a < b);",Fte=` return vec4(lessThan(a, b)); `,Dte=cn({opSnippet:Ate,packedOpSnippet:Fte,cpuKernelImpl:vZ,dtype:"bool"}),Rte={kernelName:fu,backendName:"webgl",kernelFunc:Dte},Mte="return float(a <= b);",Pte=` return vec4(lessThanEqual(a, b)); `,Ote=cn({opSnippet:Mte,packedOpSnippet:Pte,cpuKernelImpl:wZ,dtype:"bool"}),Lte={kernelName:gu,backendName:"webgl",kernelFunc:Ote};function zte(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=kZ(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var Wte={kernelName:Xm,backendName:"webgl",kernelFunc:zte},Bte=cp+` return x < 0.0 ? 0./0. : log(x); `,Vte=` 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; `,Ute=Ze({opSnippet:Bte,packedOpSnippet:Vte,cpuKernelImpl:IZ}),Gte={kernelName:Hi,backendName:"webgl",kernelFunc:Ute},Hte=cp+` return log(1.0 + x); `,jte=Ze({opSnippet:Hte}),qte={kernelName:bu,backendName:"webgl",kernelFunc:jte},Kte="return float(a >= 1.0 && b >= 1.0);",Xte=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,Yte=cn({opSnippet:Kte,packedOpSnippet:Xte,dtype:"bool"}),Zte={kernelName:yu,backendName:"webgl",kernelFunc:Yte},Jte="return float(!(x >= 1.0));",Qte=Ze({opSnippet:Jte}),ene={kernelName:xu,backendName:"webgl",kernelFunc:Qte},tne="return float(a >= 1.0 || b >= 1.0);",nne=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,ane=cn({opSnippet:tne,packedOpSnippet:nne,dtype:"bool"}),rne={kernelName:vu,backendName:"webgl",kernelFunc:ane},sne=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); } `}},ine=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); } `}},one=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a,u=X().getBool("WEBGL_PACK_NORMALIZATION")?new ine(r.shape,s,i,o,l):new sne(r.shape,s,i,o,l);return n.runWebGLProgram(u,[r],r.dtype)},lne={kernelName:Ac,backendName:"webgl",kernelFunc:one},une=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); } `}},pne=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 une(r.shape,o,l,u,p);return n.runWebGLProgram(d,[r,s,i],r.dtype)},cne={kernelName:Ym,backendName:"webgl",kernelFunc:pne};function dne(e,t,n,a){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=he({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=Ao(i,e.dtype,"max",a),l=he({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}function zE(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=C.getAxesPermutation(u,o),d=p!=null,c=n.shouldExecuteOnCPU([r]),h=r;if(d){if(c){let y=n.texData.get(h.dataId).values,x=new Array(o);for(let N=0;N`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=C.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&v.arraysEqual(p.inShape,p.outShape))return aa({inputs:{x:r},backend:n});let d=new wc(p,"max",!1);return n.runWebGLProgram(d,[r],r.dtype)}var xne={kernelName:Ki,backendName:"webgl",kernelFunc:yne};function vne(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=C.computePool3DInfo(r.shape,s,i,p,o,u,l),c=new k1(d,"max",!1);return n.runWebGLProgram(c,[r],r.dtype)}var wne={kernelName:Fc,backendName:"webgl",kernelFunc:vne},kne=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); } `}},Ine=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 Tne(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=C.computePool3DInfo(i.shape,o,l,d,u,p),h=new k1(c,"max",!0),m=n.runWebGLProgram(h,[i],i.dtype),f=new Ine(c),g=n.runWebGLProgram(f,[r,m],i.dtype);return n.disposeIntermediateTensorInfo(m),g}var Sne={kernelName:Jm,backendName:"webgl",kernelFunc:Tne};function Nne(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;ip([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=C.computePool2DInfo(o.shape,l,u,1,p,d),h=!0,m=new wc(c,"max",h),f=n.runWebGLProgram(m,[o],o.dtype),g=new kne(c),b=n.runWebGLProgram(g,[r,f],o.dtype);return n.disposeIntermediateTensorInfo(f),b}var Cne={kernelName:Zm,backendName:"webgl",kernelFunc:Nne};function _ne(e,t,n,a){let r=new wc(n,"max",!1),s=a.runWebGLProgram(r,[e],"float32");r=new wc(n,"max",!0,!0,t);let i=a.runWebGLProgram(r,[e],"float32");return[s,i]}var Ene={kernelName:Qm,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(C.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=C.computePool2DInfo(a.shape,r,s,u,i),[d,c]=_ne(a,o,p,l);return[d,c]}};function $ne(e,t,n,a){let r=v.sizeFromShape(t),s=v.sizeFromShape(e.shape)/r,i=he({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=Ao(i,"float32","mean",a),l=he({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}var Ane={kernelName:Xi,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=C.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 _=0;_u[0]+e[p]+u[1]);let a=e.length,r=pt(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})); } `}},zne=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=pt(a),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=Sn("rc",a),l=Sn("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); } `}},Wne=({inputs:e,backend:t,attrs:n})=>{let{x:a}=e,{paddings:r,mode:s}=n,i=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new zne(a.shape,r,s):new Lne(a.shape,r,s);return t.runWebGLProgram(i,[a],a.dtype)},Bne={kernelName:Ji,backendName:"webgl",kernelFunc:Wne},Vne=`if (b == 0.0) return NAN; return mod(a, b);`,Une=` vec4 result = mod(a, b); vec4 isNaN = vec4(equal(b, vec4(0.0))); `+bg+` return result; `,Gne=cn({opSnippet:Vne,packedOpSnippet:Une}),Hne={kernelName:wu,backendName:"webgl",kernelFunc:Gne},jne=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})); } `}},qne=` if (a == b) { return 1.0; }; return a / b;`,Kne=` // 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; `,WE=cn({opSnippet:qne,packedOpSnippet:Kne,checkOutOfBounds:!0}),Xne={kernelName:Pi,backendName:"webgl",kernelFunc:WE},jI="return a - b;",BE=cn({opSnippet:jI,packedOpSnippet:jI,supportsComplex:!0,cpuKernelImpl:GZ}),Yne={kernelName:xo,backendName:"webgl",kernelFunc:BE};function VE(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{dim:s}=a,i=v.parseAxisParam([s],r.shape),o=zE({inputs:{x:r},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=C.expandShapeToKeepDim(o.shape,i),u=he({inputs:{x:o},backend:n,attrs:{shape:l}}),p=BE({inputs:{a:r,b:u},backend:n}),d=PE({inputs:{x:p},backend:n}),c=xg({inputs:{x:d},backend:n,attrs:{axis:i,keepDims:!1}}),h=he({inputs:{x:c},backend:n,attrs:{shape:l}}),m=WE({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 Zne={kernelName:bo,backendName:"webgl",kernelFunc:VE};function Jne(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a,l=o?r:VE({inputs:{logits:r},backend:n,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],d=new jne(u,p,s),c=[[i]],h=n.runWebGLProgram(d,[l],"int32",c);return o||n.disposeIntermediateTensorInfo(l),h}var Qne={kernelName:ef,backendName:"webgl",kernelFunc:Jne},eae=Ra+` return -x; `,tae=` 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 nae(e){let{inputs:t,backend:n}=e,{x:a}=t;if(n.shouldExecuteOnCPU([a])){let s=n.texData.get(a.dataId),[i,o]=_Z(s.values,a.shape,a.dtype);return n.makeTensorInfo(o,a.dtype,i)}let r;return X().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new ni(a.shape,tae):r=new $r(a.shape,eae),n.runWebGLProgram(r,[a],a.dtype)}var aae={kernelName:ku,backendName:"webgl",kernelFunc:nae},rae=yr.nonMaxSuppressionV3Impl;function sae(e){C.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}=rae(u,p,i,o,l);return n.makeTensorInfo([d.length],"int32",new Int32Array(d))}var iae={kernelName:Tu,backendName:"webgl",kernelFunc:sae},oae=yr.nonMaxSuppressionV4Impl;function lae(e){C.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}=oae(p,d,i,o,l,u);return[n.makeTensorInfo([c.length],"int32",new Int32Array(c)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var uae={kernelName:Su,backendName:"webgl",kernelFunc:lae},pae=yr.nonMaxSuppressionV5Impl;function cae(e){C.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:b}=pae(p,d,c,h,m,f);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([b.length],"float32",new Float32Array(b))]}var dae={kernelName:Nu,backendName:"webgl",kernelFunc:cae},hae=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))); } `}},mae=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 hae(u,i,o,l),d=he({inputs:{x:r},backend:n,attrs:{shape:[u]}}),c=n.runWebGLProgram(p,[d],s);n.disposeIntermediateTensorInfo(d);let h=[...r.shape,i],m=he({inputs:{x:c},backend:n,attrs:{shape:h}});return n.disposeIntermediateTensorInfo(c),m},fae={kernelName:eo,backendName:"webgl",kernelFunc:mae};function Nm(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="complex64"){let r=Id({inputs:{input:a},backend:n}),s=Nm({inputs:{x:r},backend:n}),i=vg({inputs:{input:a},backend:n}),o=Nm({inputs:{x:i},backend:n}),l=Fs({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return Td({attrs:{shape:a.shape,dtype:a.dtype,value:a.dtype==="string"?"":0},backend:n})}var gae={kernelName:Hu,backendName:"webgl",kernelFunc:Nm};function UE(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=Id({inputs:{input:a},backend:n}),s=UE({inputs:{x:r},backend:n}),i=vg({inputs:{input:a},backend:n}),o=Nm({inputs:{x:i},backend:n}),l=Fs({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return Td({attrs:{shape:a.shape,dtype:a.dtype,value:1},backend:n})}var bae={kernelName:Cu,backendName:"webgl",kernelFunc:UE};function yae(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return Lx({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=Lx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=_E({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var xae={kernelName:_u,backendName:"webgl",kernelFunc:yae},vae=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=pt(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})); } } `}},wae=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=pt(a),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=Sn("rc",a),l=Sn("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{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 Td({backend:n,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new wae(r.shape,s,i):new vae(r.shape,s,i),l=[[i]];return n.runWebGLProgram(o,[r],r.dtype,l)},kae={kernelName:to,backendName:"webgl",kernelFunc:GE},Iae=` 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); `,Tae=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b)); `+bg+` return result; `,Sae=cn({opSnippet:Iae,packedOpSnippet:Tae}),Nae={kernelName:no,backendName:"webgl",kernelFunc:Sae};function Cae(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=C.getAxesPermutation(p,o),c=r;d!=null&&(c=Cn({inputs:{x:r},backend:n,attrs:{perm:d}}),p=C.getInnerMostAxes(p.length,o),l.push(c)),C.assertAxesAreInnerMostDims("prod",p,o);let h;if(n.shouldExecuteOnCPU([c])){let m=n.texData.get(c.dataId).values,{outVals:f,outShape:g,outDtype:b}=$Z(c.shape,c.dtype,m,p);h=n.makeTensorInfo(g,b,f)}else{let[m,f]=C.computeOutAndReduceShapes(c.shape,p),g=v.sizeFromShape(f),b=he({inputs:{x:c},backend:n,attrs:{shape:[-1,g]}}),y=pf(r.dtype),x=Ao(b,y,"prod",n);h=he({inputs:{x},backend:n,attrs:{shape:m}}),l.push(b),l.push(x)}if(i){l.push(h);let m=C.expandShapeToKeepDim(h.shape,u);h=he({inputs:{x:h},backend:n,attrs:{shape:m}})}return l.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var _ae={kernelName:ro,backendName:"webgl",kernelFunc:Cae};function Eae(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]=AZ(u,r.shape,p,s.shape,s.dtype,d,i.shape,c,h,l);return n.makeTensorInfo(m,s.dtype,f)}var $ae={kernelName:tf,backendName:"webgl",kernelFunc:Eae},HE=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=FZ(a,r,s,i);return t.makeTensorInfo([o.length],i,o)},Aae={kernelName:Dc,backendName:"webgl",kernelFunc:HE},Fae="return 1.0 / x;",Dae=Ze({opSnippet:Fae}),Rae={kernelName:Eu,backendName:"webgl",kernelFunc:Dae},Mae=Ra+` return (x < 0.0) ? 0.0 : x; `,Pae=` 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; `,Oae=Ze({opSnippet:Mae,packedOpSnippet:Pae}),Lae={kernelName:so,backendName:"webgl",kernelFunc:Oae},zae=Ra+` return (x < 0.0) ? 0.0 : min(6.0, x); `,Wae=` 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; `,Bae=Ze({opSnippet:zae,packedOpSnippet:Wae}),Vae={kernelName:lo,backendName:"webgl",kernelFunc:Bae},Uae=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); } `}},Gae=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 Hae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=X().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Gae(r.shape,l,u,s,i):new Uae(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],"float32")}var jae={kernelName:oo,backendName:"webgl",kernelFunc:Hae},qae=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 Kae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new qae(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var Xae={kernelName:rf,backendName:"webgl",kernelFunc:Kae},Yae=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); } `}},Zae=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 Jae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=X().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Zae(r.shape,l,u,s,i):new Yae(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],r.dtype)}var Qae={kernelName:io,backendName:"webgl",kernelFunc:Jae},ere=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 tre(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new ere(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var nre={kernelName:af,backendName:"webgl",kernelFunc:tre},are=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=pt(n);this.userCode=` void main() { ${s} coords = getOutputCoords(); setOutput(getX(${r})); } `}},rre=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=Sn("rc",n),r=`${a[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${a[n-2]} + 1 < ${this.outputShape[n-2]}`,i=pt(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((b,y)=>c(y,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 sre(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 aa({inputs:{x:r},backend:n});let l=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new rre(r.shape,o):new are(r.shape,o);return n.runWebGLProgram(l,[r],r.dtype)}var ire={kernelName:uo,backendName:"webgl",kernelFunc:sre},ore=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); } `}},lre={kernelName:ju,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,{radians:r,fillValue:s,center:i}=t,o=n,l=new ore(a.shape,s),[u,p]=C.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)}},ure=` // 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; } } `,pre=Ze({opSnippet:ure}),cre={kernelName:po,backendName:"webgl",kernelFunc:pre},dre="return inversesqrt(x);",hre=Ze({opSnippet:dre,cpuKernelImpl:DZ}),mre={kernelName:co,backendName:"webgl",kernelFunc:hre},jE=class{constructor(e,t,n,a,r,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=pt(r.length),l=pt(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 fre(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}=C.calculateShapes(s,r,i),c=[d/u,u];if(d===0)return n.makeTensorInfo(i,r.dtype);let h=he({inputs:{x:r},backend:n,attrs:{shape:[l,o]}}),m=he({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),f=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new jE(l,o,h.shape.length,m.shape.length,p,c),b=n.runWebGLProgram(g,[m,h,f],m.dtype),y=he({inputs:{x:b},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(f),y}var gre={kernelName:Au,backendName:"webgl",kernelFunc:fre},bre=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=X().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 yre(e){let{inputs:t,backend:n,attrs:a}=e,{sortedSequence:r,values:s}=t,{side:i}=a,o=new bre(r.shape[0],r.shape[1],s.shape[1],i),l=[[r.shape[1]]];return n.runWebGLProgram(o,[r,s],"int32",l)}var xre={kernelName:sf,backendName:"webgl",kernelFunc:yre},vre=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= 1.0) { setOutput(getA(${r})); } else { setOutput(getB(${r})); } } `}};function wre(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=new vre(a.shape.length,r.shape,r.shape.length);return n.runWebGLProgram(i,[a,r,s],ma(r.dtype,s.dtype))}var kre={kernelName:Fu,backendName:"webgl",kernelFunc:wre},Ire=` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 float scaleAlpha = ${C.SELU_SCALEALPHA}; float scale = ${C.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,Tre=Ze({opSnippet:Ire}),Sre={kernelName:Du,backendName:"webgl",kernelFunc:Tre},Nre=cp+` return 1.0 / (1.0 + exp(-1.0 * x)); `,Cre=` 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; `,_re=Ze({opSnippet:Nre,packedOpSnippet:Cre,cpuKernelImpl:MZ}),Ere={kernelName:mo,backendName:"webgl",kernelFunc:_re},$re=` if (isnan(x)) { return 0.0; } return sign(x); `,Are=Ze({opSnippet:$re}),Fre={kernelName:Pu,backendName:"webgl",kernelFunc:Are},Dre=cp+` return sin(x); `,Rre=Ze({opSnippet:Dre}),Mre={kernelName:ho,backendName:"webgl",kernelFunc:Rre},Pre=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,Ore=Ze({opSnippet:Pre}),Lre={kernelName:Mu,backendName:"webgl",kernelFunc:Ore},zre=` 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; `,Wre=Ze({opSnippet:zre}),Bre={kernelName:Ou,backendName:"webgl",kernelFunc:Wre},Vre=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((b,y)=>b*y),l=[[0,0]];l.push(...i);for(let b=1+s.length;bn.disposeIntermediateTensorInfo(b)),g},Ure={kernelName:Lu,backendName:"webgl",kernelFunc:Vre};function Gre(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]=OZ(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 Hre={kernelName:Rc,backendName:"webgl",kernelFunc:Gre};function jre(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]=LZ(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var qre={kernelName:Wu,backendName:"webgl",kernelFunc:jre};function Kre(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]=hE(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var Xre={kernelName:Mc,backendName:"webgl",kernelFunc:Kre};function Yre(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]=hE(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var Zre={kernelName:Pc,backendName:"webgl",kernelFunc:Yre};function Jre(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}=C.calculateShapes(s,r,o),h=!1;if(s.dtype==="string"){let b=n.bufferSync(r),y=n.bufferSync(s),x=v.decodeString(n.readSync(i.dataId)[0]),w=RZ(b,y,o,c,p,u,l,d,x,h);return n.makeTensorInfo(o,w.dtype,w.values)}let m=new jE(u,l,r.shape.length,s.shape.length,d,[c,1],h),f=n.runWebGLProgram(m,[s,r,i],s.dtype),g=he({inputs:{x:f},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(f),g}var Qre={kernelName:of,backendName:"webgl",kernelFunc:Jre};function ese(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=C.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=dp({inputs:{x:r},backend:n,attrs:{begin:p,size:h}});return p[o]+=c,m})}var tse={kernelName:zu,backendName:"webgl",kernelFunc:ese},qI="return sqrt(x);",nse=Ze({opSnippet:qI,packedOpSnippet:qI,cpuKernelImpl:zZ}),ase={kernelName:fo,backendName:"webgl",kernelFunc:nse},rse="return x * x;",sse=Ze({opSnippet:rse}),ise={kernelName:Oc,backendName:"webgl",kernelFunc:sse},KI="return (a - b) * (a - b);",ose=cn({opSnippet:KI,packedOpSnippet:KI}),lse={kernelName:yo,backendName:"webgl",kernelFunc:ose};function use({inputs:e,attrs:t,backend:n}){let{x:a}=e,r=Ra+` return x > 0.0 ? 1.0 : float(${t.alpha}); `,s=new $r(a.shape,r);return n.runWebGLProgram(s,[a],a.dtype)}var pse={kernelName:ks,backendName:"webgl",kernelFunc:use},cse=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let a=n.length,r=pt(n.length),s=pt(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 dse(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:b,begin:y,end:x,strides:w}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=he({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||b){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let _=qt.computeOutShape(y,x,w),$=dp({inputs:{x:r},backend:n,attrs:{begin:y,size:_}});I=he({inputs:{x:$},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo($)}else if(n.shouldExecuteOnCPU([r])){let _=n.readSync(r.dataId),$=ze(r.shape,r.dtype,_),A=WZ(h,$,w,y);I=n.makeTensorInfo(m,r.dtype,A.values)}else{let _=new cse(y,w,h);I=n.runWebGLProgram(_,[r],r.dtype)}let N=he({inputs:{x:I},backend:n,attrs:{shape:m}});return n.disposeIntermediateTensorInfo(I),N}var hse={kernelName:Bu,backendName:"webgl",kernelFunc:dse};function mse(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]=BZ(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var fse={kernelName:Lc,backendName:"webgl",kernelFunc:mse};function gse(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]=VZ(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 bse={kernelName:zc,backendName:"webgl",kernelFunc:gse};function yse(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=UZ(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var xse={kernelName:Wc,backendName:"webgl",kernelFunc:yse},vse="return tan(x);",wse=Ze({opSnippet:vse}),kse={kernelName:vo,backendName:"webgl",kernelFunc:wse},Ise=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,Tse=Ze({opSnippet:Ise}),Sse={kernelName:wo,backendName:"webgl",kernelFunc:Tse},Nse=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s5)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;r5){let o=n.readSync(r.dataId),l=r.dtype==="string"?o.map(d=>v.decodeString(d)):o,u=ze(r.shape,r.dtype,l),p=HZ(u,s);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new Nse(r.shape,s);return n.runWebGLProgram(i,[r],r.dtype)}var _se={kernelName:ws,backendName:"webgl",kernelFunc:qE},Ese=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)); } } `}},$se=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 qs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function XI(e){let t=1;for(;tl){let A=n.readSync(r.dataId),[M,D]=jZ(A,u,r.dtype,s,i);return[n.makeTensorInfo(M.shape,M.dtype,M.values),n.makeTensorInfo(D.shape,D.dtype,D.values)]}if(s===0)return u[u.length-1]=0,[n.makeTensorInfo(u,r.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(p===1)return[r,Td({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=he({inputs:{x:h},attrs:{shape:[m,p]},backend:n});c&&qs(n,h);let g=XI(s),b=XI(p),y=null,x=()=>y===null?[f,f]:[f,y],w=(A,M,D)=>{let T=x(),P=new Ese(D),U=[[p],[y===null?1:0],[Number.NEGATIVE_INFINITY],[A],[M]],j=y;y=n.runWebGLProgram(P,T,"int32",U),qs(n,j)};for(let A=1;A=1;D/=2)w(M,D,[m,b])}for(let A=b;A>g;A/=2){let M=x(),D=new $se([m,A/2]),T=[[p],[y===null?1:0],[g]],P=y;y=n.runWebGLProgram(D,M,"int32",T),qs(n,P);let U=g/2,j=U*2;for(let q=U;q>=1;q/=2)w(j,q,y.shape)}let I=y;y=dp({inputs:{x:y},backend:n,attrs:{begin:0,size:[m,s]}}),qs(n,I);let N=LE({inputs:{x:f,indices:y},backend:n,attrs:{axis:1,batchDims:1}});qs(n,f);let _=u.slice(0,-1);_.push(s),I=y,y=he({inputs:{x:y},attrs:{shape:_},backend:n}),qs(n,I);let $=N;return N=he({inputs:{x:N},attrs:{shape:_},backend:n}),qs(n,$),[N,y]}var Fse={kernelName:Vu,backendName:"webgl",kernelFunc:Ase},Dse=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 Rse(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],b=new Dse(d,c,i,o,l,g);return n.runWebGLProgram(b,[r,s],"float32")}var Mse={kernelName:Uu,backendName:"webgl",kernelFunc:Rse};function Pse(e){let{inputs:t,attrs:n,backend:a}=e,{axis:r}=n,{x:s}=t;ip(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}=qZ(i,r,s.shape,s.dtype);return[a.makeTensorInfo(l,s.dtype,o),a.makeTensorInfo([u.length],"int32",u)]}var Ose={kernelName:lf,backendName:"webgl",kernelFunc:Pse};function Lse(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;fn.disposeIntermediateTensorInfo(f)),m}var zse={kernelName:Gu,backendName:"webgl",kernelFunc:Lse},Wse=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 Bse(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=C.getAxesPermutation([u],o),d=r;p!=null&&(d=Cn({inputs:{x:r},backend:n,attrs:{perm:p}}),l.push(d),u=C.getInnerMostAxes(1,o)[0]);let c=C.segment_util.computeOutShape(d.shape,u,i),h=v.sizeFromShape([d.shape[u]]),m=he({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});l.push(m);let f=pf(r.dtype),g=(w,I,N,_,$)=>{let A=w.shape[0],M=w.shape[1],D=C.segment_util.segOpComputeOptimalWindowSize(M,$),T={windowSize:D,inSize:M,batchSize:A,numSegments:$},P=new Wse(T,I),U=n.compileAndRun(P,[w,N],_);if(l.push(U),U.shape[1]===$)return U;let j=HE({backend:n,attrs:{start:0,stop:$,step:1,dtype:"float32"}}),q=qE({inputs:{x:j},backend:n,attrs:{reps:[M/D]}});return l.push(j),l.push(q),g(U,I,q,_,$)},b=g(m,"unsortedSegmentSum",s,f,i),y=he({inputs:{x:b},backend:n,attrs:{shape:c}}),x=y;if(p!=null){l.push(y);let w=C.getUndoAxesPermutation(p);x=Cn({inputs:{x},backend:n,attrs:{perm:w}})}return l.forEach(w=>n.disposeIntermediateTensorInfo(w)),x}var Vse={kernelName:Bc,backendName:"webgl",kernelFunc:Bse},Use=[VJ,GJ,qJ,YJ,JJ,t9,a9,s9,u9,c9,m9,b9,v9,T9,C9,E9,A9,M9,O9,z9,U9,Y9,J9,eQ,iQ,lQ,dQ,IJ,fQ,vQ,TQ,$Q,FQ,RQ,PQ,LQ,BQ,GQ,qQ,XQ,ZQ,QQ,nee,ree,lee,pee,hee,gee,yee,kee,Nee,$ee,Dee,Pee,Oee,zee,Bee,Uee,Hee,qee,Zee,ete,ate,ste,lte,cte,fte,xte,kJ,wte,yQ,Tte,Cte,$te,SJ,Rte,Lte,Wte,Gte,qte,Zte,ene,rne,lne,cne,hne,bne,xne,wne,Sne,Cne,Ene,Ane,Dne,One,Bne,Hne,Qne,$J,aae,iae,uae,dae,nQ,fae,bae,xae,kae,Nae,CJ,_ae,$ae,Aae,aQ,Xne,Rae,Lae,Vae,FJ,jae,Xae,Qae,nre,ire,lre,cre,mre,gre,xre,kre,Sre,Ere,Fre,Mre,Lre,K9,Zne,Bre,Ure,Hre,qre,Xre,Zre,Qre,tse,ase,ise,lse,pse,hse,fse,bse,xse,Yne,zJ,kse,Sse,_se,Fse,Mse,WJ,Ose,zse,Vse,gae];for(let e of Use)Vc(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 Ic;(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"})(Ic||(Ic={}));var KE;function Gse(e){KE=e.wasm.cwrap(li,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Hse(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 $=n.dataIdMap.get(i.dataId);if($.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${$.shape.length}.`);m=$.id}let f=o==null?0:n.dataIdMap.get(o.dataId).id,g=Ic[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let b=l?r.shape[2]:r.shape[1],y=u?s.shape[1]:s.shape[2],x=qu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),w=n.makeOutput([...x,b,y],r.dtype),I=n.dataIdMap.get(w.dataId).id,N=new Uint8Array(new Int32Array(r.shape).buffer),_=new Uint8Array(new Int32Array(s.shape).buffer);return KE(c,N,r.shape.length,h,_,s.shape.length,l,u,g,m,f,d||0,I),w}var jse={kernelName:li,backendName:"wasm",setupFunc:Gse,kernelFunc:Hse};function rn(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 qse=rn(Ul);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=C.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),b=new Uint8Array(new Int32Array(p.shape).buffer),y=o.dataIdMap.get(f.dataId).id;return a(d,g,u.shape.length,c,b,p.shape.length,At[u.dtype],y),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Kse=!0,Xse=dn(xs,Kse),XE;function Yse(e){XE=e.wasm.cwrap(Ti,null,["array","number","number","number"])}function Zse(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 Jse={kernelName:Ti,backendName:"wasm",setupFunc:Yse,kernelFunc:Zse};function wg(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype),r=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(a).set(r),a}var Qse={kernelName:Ui,backendName:"wasm",kernelFunc:wg},YE;function eie(e){YE=e.wasm.cwrap(Ar,null,["number","array","number","number","number","array","number"])}function gs(e){let{inputs:t,backend:n,attrs:a}=e,[r,s]=nie(t.x.shape,a.perm),i=!0;for(let m=0;m=r&&(s===-1||a[s]>a[i])&&(s=i);a[s]=r}return[n,a]}var aie={kernelName:Ar,backendName:"wasm",kernelFunc:gs,setupFunc:eie};function Ds(e,t,n){let a=e.shape,r=e.shape.length,s=v.parseAxisParam(t,a),i=s,o=C.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let c=0;c`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 gie={kernelName:$u,backendName:"wasm",kernelFunc:Un},t$;function bie(e){t$=e.wasm.cwrap(Ci,null,["number","array","number","number","array","number","number","number","number"])}function yie(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),b=v.sizeFromShape(f),y=qu.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?[b,h,d]:[b,d,h],I=Un({inputs:{x:r},backend:n,attrs:{shape:x}}),N=Un({inputs:{x:s},backend:n,attrs:{shape:w}}),_=n.dataIdMap.get(I.dataId).id,$=n.dataIdMap.get(N.dataId).id,A=i?I.shape[2]:I.shape[1],M=o?N.shape[1]:N.shape[2],D=Math.max(g,b),T=n.makeOutput([D,A,M],I.dtype),P=n.dataIdMap.get(T.dataId).id,U=new Uint8Array(new Int32Array(I.shape).buffer),j=new Uint8Array(new Int32Array(N.shape).buffer);return t$(_,U,I.shape.length,$,j,N.shape.length,i,o,P),n.disposeData(I.dataId),n.disposeData(N.dataId),T.shape=y,T}var xie={kernelName:Ci,backendName:"wasm",setupFunc:bie,kernelFunc:yie};function ki(e){let{inputs:{x:t},attrs:{begin:n,size:a},backend:r}=e,[s,i]=qt.parseSliceParams(t,n,a),o=qt.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=qt.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=vm(l,s,i,t.shape,t.dtype);return d.stringBytes=m,u}let c=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)vie(l,p[0],c,s,i);else if(h===3)wie(l,p[0],p[1],c,s,i);else if(h===4)kie(l,p[0],p[1],p[2],c,s,i);else{let m=vm(l,s,i,t.shape,t.dtype);c.set(m)}return u}function vie(e,t,n,a,r){let s=0,i=a[0],o=a[1],l=i+r[0];for(let u=i;ub*y),l=C.getReshaped(r.shape,s,o),u=C.getPermuted(l.length,s.length),p=C.getReshapedPermuted(r.shape,s,o),d=C.getSliceBeginCoords(i,s.length),c=C.getSliceSize(p,i,s.length),h=Un({inputs:{x:r},backend:n,attrs:{shape:l}}),m=gs({inputs:{x:h},backend:n,attrs:{perm:u}}),f=Un({inputs:{x:m},backend:n,attrs:{shape:p}}),g=ki({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 Sie={kernelName:Ql,backendName:"wasm",kernelFunc:Tie};function hp(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 Nie={kernelName:_i,backendName:"wasm",kernelFunc:hp},Cie=rn(Ei),n$;function _ie(e){n$=e.wasm.cwrap(vs,null,["number","number","number","number"])}function Eie(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 n$(o,s,i,u),l}var $ie={kernelName:vs,backendName:"wasm",setupFunc:_ie,kernelFunc:Eie};function a$(e){let{inputs:t,backend:n}=e,a=v.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=C.computeOutShape(t.map(h=>h.shape),a),s=t.filter(h=>v.sizeFromShape(h.shape)>0);if(s.length===1)return wg({inputs:{x:s[0]},backend:n});let i=n.makeOutput(r,t[0].dtype);if(v.sizeFromShape(r)===0)return i;let o=s.map(h=>h.shape);if(C.assertParamsConsistent(o,a),s[0].dtype==="string"){let h=s.map(x=>{let w=v.sizeFromShape(x.shape.slice(a));return Un({inputs:{x},backend:n,attrs:{shape:[-1,w]}})}),m=h.map(x=>({vals:n.readSync(x.dataId),shape:x.shape}));r=C.computeOutShape(h.map(x=>x.shape),1);let f=h[0].shape[0]===1,g=J0(m,r,t[0].dtype,f),b=C.computeOutShape(s.map(x=>x.shape),a);i.shape=b;let y=n.dataIdMap.get(i.dataId);return y.stringBytes=C.fromStringArrayToUint8(g),h.forEach(x=>n.disposeData(x.dataId)),i}let l=v.sizeFromShape(s[0].shape.slice(0,a)),u=0,p=s.map(h=>{let m=v.sizeFromShape(h.shape.slice(a));return u+=m,m}),d=s.map(h=>n.typedArrayFromHeap(h)),c=n.typedArrayFromHeap(i);for(let h=0;h`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=C.getAxesPermutation([s],l),p=r;u!==null&&(p=gs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=C.getInnerMostAxes(1,l)[0];C.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;o$(m,i?1:0,o?1:0,h,f,At[r.dtype]);let g=c;if(u!==null){let b=C.getUndoAxesPermutation(u);g=gs({inputs:{x:c},attrs:{perm:b},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var Hie={kernelName:tu,backendName:"wasm",setupFunc:Uie,kernelFunc:Gie},l$;function jie(e){l$=e.wasm.cwrap(Ri,null,["number","number","number","number","number","number"])}function qie(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=C.getAxesPermutation([s],l),p=r;u!==null&&(p=gs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=C.getInnerMostAxes(1,l)[0];C.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;l$(m,i?1:0,o?1:0,h,f,At[r.dtype]);let g=c;if(u!==null){let b=C.getUndoAxesPermutation(u);g=gs({inputs:{x:c},attrs:{perm:b},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var Kie={kernelName:Ri,backendName:"wasm",setupFunc:jie,kernelFunc:qie},u$;function Xie(e){u$=e.wasm.cwrap(au,null,["number","number","number","array","number","array","array","number","number"])}function Yie(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,b=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),y=new Uint8Array(new Int32Array(m).buffer),x=new Uint8Array(new Int32Array(v.computeStrides(m)).buffer),w=t.dataIdMap.get(f.dataId).id;return u$(g,s,i==="NHWC"?1:0,b,r.shape.length-1,y,x,m.length,w),f}var Zie={kernelName:au,backendName:"wasm",setupFunc:Xie,kernelFunc:Yie},p$;function Jie(e){p$=e.wasm.cwrap(Mi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qie(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=C.computeConv2DInfo(r.shape,s.shape,l,c,p,d,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,b=h.padInfo.right,y=h.padInfo.bottom,x=h.padInfo.left,w=h.dilationHeight,I=h.dilationWidth,N=h.strideHeight,_=h.strideWidth,$=h.inChannels,A=h.outChannels,M=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 D=a.makeOutput(h.outShape,"float32"),T=a.dataIdMap.get(D.dataId).id;return p$(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,b,y,x,M,w,I,N,_,$,A,T),D}var eoe={kernelName:Mi,backendName:"wasm",setupFunc:Jie,kernelFunc:Qie},toe=rn(Oi),noe=!1,aoe=dn(su,noe,"bool"),roe=rn(Li,"float32");function Wx(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),Un({inputs:{x:r},backend:a,attrs:{shape:o}})}var soe={kernelName:iu,backendName:"wasm",kernelFunc:Wx};function c$(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 ioe={kernelName:$c,backendName:"wasm",kernelFunc:c$},d$;function ooe(e){d$=e.wasm.cwrap(lu,null,["number","number","number","number","number","number"])}function loe(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 d$(s,o,l,u,p,i),r}var uoe={kernelName:lu,backendName:"wasm",kernelFunc:loe,setupFunc:ooe},poe=rn(zi),coe=!1,doe=dn(Wi,coe),h$;function hoe(e){h$=e.wasm.cwrap(Bi,null,["number","number","number","number","number","number","number"])}function moe(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 h$(p,d,c,h,m,r,g),f}var foe={kernelName:Bi,backendName:"wasm",setupFunc:hoe,kernelFunc:moe},m$;function goe(e){m$=e.wasm.cwrap(ui,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 boe(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=C.computeConv2DInfo(r.shape,s.shape,l,p,u,c),g=Ic[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let b=a.dataIdMap.get(r.dataId).id,y=a.dataIdMap.get(s.dataId).id,x=f.outChannels,w=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);w=ae.id}let I=f.filterHeight,N=f.filterWidth,_=f.padInfo.top,$=f.padInfo.right,A=f.padInfo.bottom,M=f.padInfo.left,D=f.dilationHeight,T=f.dilationWidth,P=f.strideHeight,U=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Y=f.inHeight,te=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),J=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return m$(b,K,Y,te,y,I,N,w,_,$,A,M,q,D,T,P,U,j,x,g,ie,m||0,J),re}var yoe={kernelName:ui,backendName:"wasm",setupFunc:goe,kernelFunc:boe},f$;function xoe(e){f$=e.wasm.cwrap(pi,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 voe(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=C.computeConv2DInfo(r.shape,s.shape,l,p,u,c,!0),g=Ic[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let b=a.dataIdMap.get(r.dataId).id,y=a.dataIdMap.get(s.dataId).id,x=f.outChannels,w=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);w=ae.id}let I=f.filterHeight,N=f.filterWidth,_=f.padInfo.top,$=f.padInfo.right,A=f.padInfo.bottom,M=f.padInfo.left,D=f.dilationHeight,T=f.dilationWidth,P=f.strideHeight,U=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Y=f.inHeight,te=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),J=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return f$(b,K,Y,te,y,I,N,w,_,$,A,M,q,D,T,P,U,j,x,g,ie,m||0,J),re}var woe={kernelName:pi,backendName:"wasm",setupFunc:xoe,kernelFunc:voe},g$;function koe(e){g$=e.wasm.cwrap(pu,null,["number","number","number","number","number","number","array","number"])}function Ioe(e){let{backend:t,inputs:n}=e,{params:a,indices:r}=n,[s,i,o,l]=ov.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 g$(c,At[a.dtype],h,i,d,o,m,f),u}var Toe={kernelName:pu,backendName:"wasm",setupFunc:koe,kernelFunc:Ioe},b$;function Soe(e){b$=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Noe(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 _=0;_=0,()=>`GatherV2: the index value ${$} is not in [0, ${p-1}]`)}let d=C.segment_util.collectGatherOpShapeInfo(r,s,l,o),c=Un({inputs:{x:r},attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]},backend:t}),h=v.sizeFromShape(s.shape),m=Un({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 b=c.shape.length-1,y=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),N=new Uint8Array(new Int32Array(v.computeStrides(f)).buffer);return b$(y,At[r.dtype],I,b,x,d.batchSize,N,w),t.disposeData(c.dataId),t.disposeData(m.dataId),g.shape=d.outputShape,g}var Coe={kernelName:uu,backendName:"wasm",setupFunc:Soe,kernelFunc:Noe},_oe=!1,Eoe=dn(cu,_oe,"bool"),$oe=!1,Aoe=dn(Vi,$oe,"bool"),y$;function Foe(e){y$=e.wasm.cwrap(Gi,null,["number","number","number","number"])}function Doe(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;y$(r,At[t.dtype],n,i)}return s}var Roe={kernelName:Gi,backendName:"wasm",setupFunc:Foe,kernelFunc:Doe},Moe=!1,Poe=dn(fu,Moe,"bool"),Ooe=!1,Loe=dn(gu,Ooe,"bool"),zoe=rn(Hi),Woe=!1,Boe=dn(yu,Woe,"bool"),Voe=rn(xu),Uoe=!1,Goe=dn(vu,Uoe,"bool"),Hoe=!1,joe=dn(mT,Hoe,"bool"),x$;function qoe(e){x$=e.wasm.cwrap(ji,null,["number","number","number","number"])}function Koe(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}=Ds(i,r,t);if(c){let y=t.dataIdMap.get(u.dataId).id;l=u,o=y}let h=l.shape.length;C.assertAxesAreInnerMostDims("max",p,h);let[m,f]=C.computeOutAndReduceShapes(l.shape,p),g=v.sizeFromShape(f),b=t.makeOutput(m,i.dtype);if(v.sizeFromShape(l.shape)!==0){let y=t.dataIdMap.get(b.dataId).id;x$(o,At[i.dtype],g,y)}if(c&&t.disposeData(u.dataId),s){let y=C.expandShapeToKeepDim(b.shape,d);b.shape=y}return b}var Xoe={kernelName:ji,backendName:"wasm",setupFunc:qoe,kernelFunc:Koe},Yoe=!1,Zoe=dn(qi,Yoe),v$;function Joe(e){v$=e.wasm.cwrap(Ki,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qoe(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=C.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,b=p.dilationHeight,y=p.dilationWidth,x=p.strideHeight,w=p.strideWidth,I=p.inChannels,N=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let _=a.makeOutput(p.outShape,"float32"),$=a.dataIdMap.get(_.dataId).id;return v$(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,b,y,x,w,I,N,$),_}var ele={kernelName:Ki,backendName:"wasm",setupFunc:Joe,kernelFunc:Qoe},w$;function tle(e){w$=e.wasm.cwrap(Xi,null,["number, number, number"])}function nle(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}=Ds(i,r,t),m=d;if(h){let w=t.dataIdMap.get(p.dataId).id;w!==o&&(u=p,l=w,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),b=v.sizeFromShape(g),y=u;u.dtype!=="float32"&&(y=hp({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(y.dataId).id);let x=t.makeOutput(f,"float32");if(v.sizeFromShape(u.shape)!==0){let w=t.dataIdMap.get(x.dataId).id;w$(l,b,w)}if(h&&t.disposeData(p.dataId),s){let w=C.expandShapeToKeepDim(x.shape,c);x.shape=w}return u.dtype!=="float32"&&t.disposeData(y.dataId),x}var ale={kernelName:Xi,backendName:"wasm",setupFunc:tle,kernelFunc:nle},k$;function rle(e){k$=e.wasm.cwrap(Yi,null,["number","number","number","number"])}function sle(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}=Ds(i,r,t);if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x)}let m=u.shape.length;C.assertAxesAreInnerMostDims("min",d,m);let[f,g]=C.computeOutAndReduceShapes(u.shape,d),b=v.sizeFromShape(g),y=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;k$(l,At[i.dtype],b,x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var ile={kernelName:Yi,backendName:"wasm",setupFunc:rle,kernelFunc:sle},ole=!1,lle=dn(Zi,ole),Bx;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(Bx||(Bx={}));var I$;function ule(e){I$=e.wasm.cwrap(Ji,null,["number","array","number","number","array","array","number","number"])}function ple(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 I$(i,u,t.shape.length,At[t.dtype],c,h,Bx[r],l),o}var cle={kernelName:Ji,backendName:"wasm",kernelFunc:ple,setupFunc:ule},dle=!0,hle=dn(Qi,dle),mle=rn(ku);function I1(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 T$;function fle(e){T$=e.wasm.cwrap(Tu,"number",["number","number","number","number","number"])}function gle(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=T$(u,p,s,r,i),{pSelectedIndices:c,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=I1(t,d);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",c)}var ble={kernelName:Tu,backendName:"wasm",setupFunc:fle,kernelFunc:gle},S$;function yle(e){S$=e.wasm.cwrap(Su,"number",["number","number","number","number","number","bool"])}function xle(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=S$(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=I1(t,c);t.wasm._free(f);let b=t.makeOutput([m],"int32",h),y=t.makeOutput([],"int32",g);return[b,y]}var vle={kernelName:Su,backendName:"wasm",setupFunc:yle,kernelFunc:xle},N$;function wle(e){N$=e.wasm.cwrap(Nu,"number",["number","number","number","number","number","number"])}function kle(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=N$(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=I1(t,c);t.wasm._free(g);let b=t.makeOutput([m],"int32",h),y=t.makeOutput([m],"float32",f);return[b,y]}var Ile={kernelName:Nu,backendName:"wasm",setupFunc:wle,kernelFunc:kle},Tle=!1,Sle=dn(Iu,Tle,"bool"),C$;function Nle(e){C$=e.wasm.cwrap(eo,null,["number","number","number","number","number"])}function Cle(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 C$(d,i,o,l,p),u}var _le={kernelName:eo,backendName:"wasm",setupFunc:Nle,kernelFunc:Cle};function Ele(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(1),a}var $le={kernelName:Cu,backendName:"wasm",kernelFunc:Ele};function Ale(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return Wx({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=Wx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=a$({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeData(p.dataId)),u}var Fle={kernelName:_u,backendName:"wasm",kernelFunc:Ale},_$;function Dle(e){_$=e.wasm.cwrap(to,null,["number","array","number","number","array","array","number","number"])}function Rle(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 c$({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 _$(i,u,t.shape.length,At[t.dtype],c,h,r,l),o}var E$={kernelName:to,backendName:"wasm",kernelFunc:Rle,setupFunc:Dle},Mle=!1,Ple=dn(no,Mle),$$;function Ole(e){$$=e.wasm.cwrap(ao,null,["number","number","number"])}function Lle(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=hp({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 $$(o,i,d),l.dtype!=="float32"&&n.disposeData(u.dataId),p}var zle={kernelName:ao,backendName:"wasm",setupFunc:Ole,kernelFunc:Lle},A$;function Wle(e){A$=e.wasm.cwrap(ro,null,["number","number","number","number"])}function Ble(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}=Ds(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),b=v.sizeFromShape(g),y=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;A$(l,b,At[y.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var Vle={kernelName:ro,backendName:"wasm",setupFunc:Wle,kernelFunc:Ble},Ule=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=t1(a,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Gle={kernelName:Dc,backendName:"wasm",kernelFunc:Ule},Hle=!0,jle=dn(Pi,Hle),qle=rn(so),Kle=rn(lo),F$;function Xle(e){F$=e.wasm.cwrap(oo,null,["number","number","number","number","number","number","number","number","number","number"])}function Yle(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=hp({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let b=f.id,y=t.makeOutput(m,"float32");if(v.sizeFromShape(r.shape)===0)return y;let x=t.dataIdMap.get(y.dataId).id;return F$(b,p,d,c,h,l,u,s?1:0,i?1:0,x),g!=null&&t.disposeData(g.dataId),y}var Zle={kernelName:oo,backendName:"wasm",setupFunc:Xle,kernelFunc:Yle},D$;function Jle(e){D$=e.wasm.cwrap(io,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),b;g.dtype!=="float32"&&(b=hp({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(b.dataId));let y=g.id,x=t.dataIdMap.get(f.dataId).id;return D$(y,p,d,c,h,l,u,s?1:0,i?1:0,x),b!=null&&t.disposeData(b.dataId),f}var eue={kernelName:io,backendName:"wasm",setupFunc:Jle,kernelFunc:Qle},R$;function tue(e){R$=e.wasm.cwrap(uo,null,["number","array","number","array","number","number"])}function nue(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 wg({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);R$(l,p,i.length,d,r.shape.length,u);let c=Un({inputs:{x:o},attrs:{shape:r.shape},backend:n});return n.disposeData(o.dataId),c}var aue={kernelName:uo,backendName:"wasm",kernelFunc:nue,setupFunc:tue},M$;function rue(e){M$=e.wasm.cwrap(ju,null,["number","number","number","number","number","number","number","number","array","number","number"])}function sue(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]=C.getImageCenter(o,c,h),b=i===0,y=255,x=typeof i=="number"?[i,i,i,b?0:y]:[...i,y],w=new Uint8Array(new Int32Array(x).buffer);return M$(u,d,c,h,m,s,f,g,w,x.length,p),l}var iue={kernelName:ju,backendName:"wasm",kernelFunc:sue,setupFunc:rue},oue=rn(po),lue=rn(co),P$;function uue(e){P$=e.wasm.cwrap(Au,null,["number","number","number","number","number","number","array","number","number"])}function pue(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}=lv.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 P$(h,m,At[s.dtype],l,u,p,f,c,g),o}var cue={kernelName:Au,backendName:"wasm",setupFunc:uue,kernelFunc:pue},O$;function due(e){O$=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function hue(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 O$(i,o,l,h,p),u}var mue={kernelName:Fu,backendName:"wasm",kernelFunc:hue,setupFunc:due},L$;function fue(e){L$=e.wasm.cwrap(mo,null,["number","number"])}function gue(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||L$(a,s),r}var bue={kernelName:"Sigmoid",backendName:"wasm",setupFunc:fue,kernelFunc:gue},yue=rn(ho),z$;function xue(e){z$=e.wasm.cwrap(bo,null,["number","number","number","number"])}function vue(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||z$(r,i,o,l),s}var wue={kernelName:bo,backendName:"wasm",setupFunc:xue,kernelFunc:vue};function kue(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;g0?l+1:0;if(u<0)throw new Error(C.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"),b=n.dataIdMap.get(g.dataId).id;V$(d,At[r.dtype],r.shape[0],c,h,f,b,t,0);let y=n.readSync(g.dataId),x;switch(y[0]){case 0:{x=C.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=C.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=C.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y[1],y[2]);break;case 3:x=C.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(y[1],y[2],y[3]);break;default:x=""}if(n.disposeData(g.dataId),x)throw n.disposeData(m.dataId),new Error(x);return m}function $ue(e){return G$(e,!0)}var Aue={kernelName:Mc,backendName:"wasm",setupFunc:U$,kernelFunc:$ue};function Fue(e){return G$(e,!1)}var Due={kernelName:Pc,backendName:"wasm",setupFunc:U$,kernelFunc:Fue};function Rue(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=C.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=ki({inputs:{x:r},attrs:{begin:u,size:c},backend:a});return u[o]+=d,h})}var Mue={kernelName:zu,backendName:"wasm",kernelFunc:Rue},Pue=rn(fo),Oue=rn(Oc),Lue=!0,zue=dn(yo,Lue),H$;function Wue(e){H$=e.wasm.cwrap(ks,null,["number","number","number","number"])}function Bue(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 H$(i,r,At[s.dtype],l),o}var Vue={kernelName:ks,backendName:"wasm",setupFunc:Wue,kernelFunc:Bue},j$;function Uue(e){j$=e.wasm.cwrap(Bu,null,["number","array","number","array","array","array","array","array","number","number"])}function Gue(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:b,begin:y,end:x,strides:w}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),I;if(f)I=Un({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||b){v.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let N=qt.computeOutShape(y,x,w),_=ki({inputs:{x:r},backend:t,attrs:{begin:y,size:N}});I=Un({inputs:{x:_},backend:t,attrs:{shape:m}}),t.disposeData(_.dataId)}else{let N=t.makeOutput(h,"float32"),_=t.dataIdMap.get(r.dataId).id,$=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),A=new Uint8Array(new Int32Array(y).buffer),M=new Uint8Array(new Int32Array(x).buffer),D=new Uint8Array(new Int32Array(w).buffer),T=new Uint8Array(new Int32Array(h).buffer),P=new Uint8Array(new Int32Array(v.computeStrides(h)).buffer),U=t.dataIdMap.get(N.dataId).id;j$(_,$,r.shape.length,A,M,D,T,P,h.length,U),I=Un({inputs:{x:N},backend:t,attrs:{shape:m}}),t.disposeData(N.dataId)}return I}var Hue={kernelName:Bu,backendName:"wasm",setupFunc:Uue,kernelFunc:Gue};function jue(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]=a1(c,h,i,o,l,u,p,d),g=t.makeOutput([m.length],"string"),b=t.dataIdMap.get(g.dataId);b.stringBytes=m;let y=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(y).set(f),[g,y]}var que={kernelName:Lc,backendName:"wasm",kernelFunc:jue};function Kue(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]=r1(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 Xue={kernelName:zc,backendName:"wasm",kernelFunc:Kue};function Yue(e){let{backend:t,inputs:n,attrs:a}=e,{input:r}=n,{numBuckets:s}=a,i=t.readSync(r.dataId),o=s1(i,s),l=t.makeOutput(r.shape,"int32");return t.typedArrayFromHeap(l).set(o),l}var Zue={kernelName:Wc,backendName:"wasm",kernelFunc:Yue},Jue=!0,Que=dn(xo,Jue),q$;function epe(e){q$=e.wasm.cwrap(go,null,["number","number","number","number"])}function tpe(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}=Ds(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=C.getInnerMostAxes(m.length,u.shape.length))}C.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=C.computeOutAndReduceShapes(u.shape,m),b=v.sizeFromShape(g),y=t.makeOutput(f,u.dtype);if(v.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(y.dataId).id;q$(l,b,At[y.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=C.expandShapeToKeepDim(y.shape,c);y.shape=x}return y}var npe={kernelName:go,backendName:"wasm",setupFunc:epe,kernelFunc:tpe},ape=rn(vo),rpe=rn(wo),K$;function spe(e){K$=e.wasm.cwrap(ws,null,["number","array","number","array","number","number"])}function ipe(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{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 X$(i,o,a.shape.length,At[a.dtype],r,s,p,c),[u,d]},ppe={kernelName:Vu,backendName:"wasm",setupFunc:lpe,kernelFunc:upe},Y$;function cpe(e){Y$=e.wasm.cwrap(Uu,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function dpe(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],b=new Uint8Array(new Int32Array(v.computeStrides(r.shape)).buffer),y=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,N=t.dataIdMap.get(s.dataId).id,_=i==="nearest"?1:2,$;switch(o){case"constant":$=1;break;case"reflect":$=2;break;case"wrap":$=3;break;case"nearest":$=4;break;default:$=1;break}return Y$(I,N,s.shape[0]>1,p,m,f,h,c,d,b,r.shape.length-1,y,g.length-1,_,$,l,w),x}var hpe={kernelName:Uu,backendName:"wasm",setupFunc:cpe,kernelFunc:dpe};function mpe(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({dataId:h,dtype:m,shape:l}))}var fpe={kernelName:Gu,backendName:"wasm",kernelFunc:mpe};function gpe(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(0),a}var bpe={kernelName:Hu,backendName:"wasm",kernelFunc:gpe},ype=[jse,qse,Xse,Jse,iie,uie,die,fie,xie,Sie,Nie,Cie,$ie,Aie,Rie,Oie,Lie,zie,Vie,Hie,Kie,Zie,eoe,toe,aoe,roe,soe,ioe,uoe,poe,doe,foe,yoe,woe,Toe,Coe,Eoe,Aoe,Qse,Roe,Poe,Loe,zoe,Boe,Voe,Goe,joe,Xoe,Zoe,ele,ale,ile,lle,cle,hle,mle,ble,vle,Ile,Sle,_le,$le,Fle,E$,Ple,zle,Vle,Gle,jle,qle,Kle,gie,Zle,eue,aue,iue,oue,lue,cue,mue,bue,yue,Iie,wue,Iue,Nue,Eue,Aue,Due,Mue,Pue,Oue,zue,Vue,Hue,que,Xue,Zue,Que,npe,ape,rpe,ope,ppe,hpe,aie,fpe,bpe];for(let e of ype)Vc(e);var Vx=X();Vx.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>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])));Vx.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Vx.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 YI=bs(rD()),xpe=bs(sD()),ZI=bs(iD()),JI=YI.default||YI,vpe=ZI.default||ZI,Z$=class extends Tc{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(J$),Ux=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Em(this,ir())}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 Ipe(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 wpe(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 QI(e,t,n){if(Cm!=null)return Cm;let a="tfjs-backend-wasm.wasm";return e&&t?a="tfjs-backend-wasm-threaded-simd.wasm":e&&(a="tfjs-backend-wasm-simd.wasm"),sc!=null&&sc[a]!=null?sc[a]:n+a}async function kpe(){let[e,t]=await Promise.all([X().getAsync("WASM_HAS_SIMD_SUPPORT"),X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,a)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=xpe.wasmWorkerContents.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?QI(e,t,nc!=null?nc:l):l+o},T1&&(r.instantiateWasm=wpe(QI(e,t,nc!=null?nc:"")));let s=!1;r.onAbort=()=>{s||ic||(ic=!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&&Cm==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+JI.toString()],{type:"text/javascript"}),i=JI(r)):i=vpe(r),i.then(o=>{s=!0,ic=!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 Ipe(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 Tpe=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],Cm=null,nc=null,sc={},ic=!1,T1=!1;function Spe(e,t=!1){if(iv("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),ic)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");Cm=e,T1=t}function Npe(e,t=!1){if(ic)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")nc=e;else{sc=e;let n=Tpe.filter(a=>sc[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.`)}T1=t}var J$=-1,Ux=-1;function Cpe(e){J$=e}function _pe(){if(Ux===-1)throw new Error("WASM backend not initialized.");return Ux}var Epe="3.20.0",$pe=2;cf("wasm",async()=>{let{wasm:e}=await kpe();return new Z$(e)},$pe);var Ape="3.20.0",Fpe="3.20.0",Dpe="3.20.0",Rpe="3.20.0",Mpe="3.20.0",Ppe="3.20.0",Ope="3.20.0",Lpe="3.20.0",zpe={tfjs:Ape,"tfjs-core":Fpe,"tfjs-data":Dpe,"tfjs-layers":Rpe,"tfjs-converter":Mpe,"tfjs-backend-cpu":Ppe,"tfjs-backend-webgl":Ope,"tfjs-backend-wasm":Lpe};var X1={};Nh(X1,{AnchorPosition:()=>W1,DrawBox:()=>Cd,DrawBoxOptions:()=>Sg,DrawFaceLandmarks:()=>Pg,DrawFaceLandmarksOptions:()=>Mg,DrawTextField:()=>Br,DrawTextFieldOptions:()=>bp,drawContour:()=>Lr,drawDetections:()=>Kpe,drawFaceExpressions:()=>Qpe,drawFaceLandmarks:()=>tce});function Lr(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 _1={};Nh(_1,{computeReshapedDimensions:()=>C1,getCenterPoint:()=>Ro,isDimensions:()=>Ig,isEven:()=>kg,isFloat:()=>N1,isTensor:()=>Fo,isTensor1D:()=>Wpe,isTensor2D:()=>S1,isTensor3D:()=>zr,isTensor4D:()=>va,isValidNumber:()=>tr,isValidProbablitiy:()=>mp,range:()=>vr,round:()=>Do});var bn=class{constructor(t,n){if(!tr(t)||!tr(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 bn(1/this.width,1/this.height)}};function Fo(e,t){return e instanceof $e&&e.shape.length===t}function Wpe(e){return Fo(e,1)}function S1(e){return Fo(e,2)}function zr(e){return Fo(e,3)}function va(e){return Fo(e,4)}function N1(e){return e%1!==0}function kg(e){return e%2===0}function Do(e,t=2){let n=10**t;return Math.floor(e*n)/n}function Ig(e){return e&&e.width&&e.height}function C1({width:e,height:t},n){let a=n/Math.max(t,e);return new bn(Math.round(e*a),Math.round(t*a))}function Ro(e){return e.reduce((t,n)=>t.add(n),new Pe(0,0)).div(new Pe(e.length,e.length))}function vr(e,t,n){return Array(e).fill(0).map((a,r)=>t+r*n)}function tr(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function mp(e){return tr(e)&&e>=0&&e<=1}var Pe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Pe(this.x+t.x,this.y+t.y)}sub(t){return new Pe(this.x-t.x,this.y-t.y)}mul(t){return new Pe(this.x*t.x,this.y*t.y)}div(t){return new Pe(this.x/t.x,this.y/t.y)}abs(){return new Pe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Pe(Math.floor(this.x),Math.floor(this.y))}};var lt=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(tr)}static assertIsValidBox(t,n,a=!1){if(!lt.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(tr),s=[a.x,a.y,a.width,a.height].every(tr);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];lt.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 Pe(this.left,this.top)}get topRight(){return new Pe(this.right,this.top)}get bottomLeft(){return new Pe(this.left,this.bottom)}get bottomRight(){return new Pe(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 lt({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 lt({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 an&&(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 lt({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 Mo=class extends lt{constructor(t,n,a,r,s=!1){super({left:t,top:n,right:a,bottom:r},s)}};var Wr=class{constructor(t,n,a,r,s){this._imageDims=new bn(s.width,s.height),this._score=t,this._classScore=n,this._className=a,this._box=new lt(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 lt(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Wr(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var xt=class extends Wr{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 E1(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 $1(e){let t=e.map(o=>o.x),n=e.map(o=>o.y),a=t.reduce((o,l)=>lloo({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;ul[p]<=n)}return s}function nr(e,t){return O(()=>{let[n,a,r]=t,s=$n([...e.shape.slice(0,3),1],n,"float32"),i=$n([...e.shape.slice(0,3),1],a,"float32"),o=$n([...e.shape.slice(0,3),1],r,"float32"),l=Qe([s,i,o],3);return ce(e,l)})}function F1(e,t=!1){return O(()=>{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,$n(h,0,"float32")},l=o(s),u=r-l.shape[i],d=[t&&u?o(u):null,e,l].filter(c=>!!c).map(c=>le(c,"float32"));return Qe(d,i)})}function Bpe(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 Sd(e){return 1/(1+Math.exp(-e))}function Vpe(e){return Math.log(e/(1-e))}var Po=class extends lt{constructor(t,n,a,r,s=!1){super({x:t,y:n,width:a,height:r},s)}};var Upe=.5,Gpe=.43,Hpe=.45,ra=class{constructor(t,n,a=new Pe(0,0)){let{width:r,height:s}=n;this._imgDims=new bn(r,s),this._shift=a,this._positions=t.map(i=>i.mul(new Pe(r,s)).add(a))}get shift(){return new Pe(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 Pe(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 Pe(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 lt(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/Hpe),l=Ro(t),u=Math.floor(Math.max(0,l.x-Upe*o)),p=Math.floor(Math.max(0,l.y-Gpe*o));return new Po(u,p,Math.min(o,this.imageWidth+u),Math.min(o,this.imageHeight+p))}alignMinBbox(t){let n=$1(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var D1=class extends ra{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],Ro([t[3],t[4]])]}};var Oo=class extends ra{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(Ro)}};var fp=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?` (${Do(this.distance)})`:""}`}};var gp=class extends lt{constructor(n,a){super(n);this._label=a}static assertIsValidLabeledBox(n,a){if(lt.assertIsValidBox(n,a),!tr(n.label))throw new Error(`${a} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var wr=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 wr(t.label,n)}};var R1=class extends gp{constructor(n,a,r,s){super(n,a);this._score=r,this._classScore=s}static assertIsValidPredictedBox(n,a){if(gp.assertIsValidLabeledBox(n,a),!mp(n.score)||!mp(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 kr(e){return e.detection instanceof xt}function Lo(e,t){return{...e,...{detection:t}}}function M1(){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 Nd(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function Tg(e){let t="";if(!e&&Nd())try{e=MF("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 P1(){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=Tg();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 O1(){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 jpe(){if(!sn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return sn}function L1(e){sn=e}function z1(){return O1()?L1(M1()):Nd()?L1(P1()):null}function qpe(e){if(sn||z1(),!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 et={getEnv:jpe,setEnv:L1,initialize:z1,createBrowserEnv:M1,createFileSystem:Tg,createNodejsEnv:P1,monkeyPatch:qpe,isBrowser:O1,isNodejs:Nd};z1();function zo(e){return!et.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Kn(e){let{Canvas:t,CanvasRenderingContext2D:n}=et.getEnv();if(e instanceof n)return e;let a=zo(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 W1=(r=>(r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT",r))(W1||{}),bp=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}},Br=class{constructor(t,n,a={}){this.text=typeof t=="string"?[t]:t instanceof Br?t.text:t,this.anchor=n,this.options=new bp(a)}measureWidth(t){let{padding:n}=this.options;return this.text.map(a=>t.measureText(a).width).reduce((a,r)=>a{let m=l+d.x,f=l+d.y+(h+1)*i;a.fillText(c,m,f)})}};var Sg=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 bp({...i,...s})}},Cd=class{constructor(t,n={}){this.box=new lt(t),this.options=new Sg(n)}draw(t){let n=Kn(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 Br([u],{x:s-r/2,y:i},this.options.drawLabelOptions).draw(t)}};function Kpe(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof xt?a.score:kr(a)?a.detection.score:void 0,s=a instanceof xt?a.box:kr(a)?a.detection.box:new lt(a),i=r?`${Do(r)}`:void 0;new Cd(s,{label:i}).draw(e)})}function _d(e){let{Image:t,Video:n}=et.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function B1(e){return new Promise((t,n)=>{(e instanceof et.getEnv().Canvas||_d(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 V1(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=et.getEnv().createImageElement();r.onload=()=>t(r),r.onerror=n,r.src=a.result},a.onerror=n,a.readAsDataURL(e)})}function Wo(e){let{Image:t,Video:n}=et.getEnv();return e instanceof t?new bn(e.naturalWidth,e.naturalHeight):e instanceof n?new bn(e.videoWidth,e.videoHeight):new bn(e.width,e.height)}function Bo({width:e,height:t}){let{createCanvasElement:n}=et.getEnv(),a=n();return a.width=e,a.height=t,a}function Ed(e,t){let{ImageData:n}=et.getEnv();if(!(e instanceof n)&&!_d(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:a,height:r}=t||Wo(e),s=Bo({width:a,height:r});return e instanceof n?Kn(s).putImageData(e,0,0):Kn(s).drawImage(e,0,0,a,r),s}async function U1(e,t){let n=t||et.getEnv().createCanvasElement(),[a,r,s]=e.shape.slice(va(e)?1:0),i=O(()=>e.as3D(a,r,s).toInt());return await ko.toPixels(i,n),i.dispose(),n}function Ng(e){let{Image:t,Canvas:n,Video:a}=et.getEnv();return e instanceof t||e instanceof n||e instanceof a}function G1(e,t,n=!1){let{Image:a,Canvas:r}=et.getEnv();if(!(e instanceof a||e instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Bo({width:1,height:1});let s=Wo(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=Bo({width:t,height:t}),p=e instanceof r?e:Ed(e),d=Math.abs(o-l)/2,c=n&&o0&&p.height>0&&Kn(u).drawImage(p,c,h,o,l),u}var Ir=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(zr(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 et.getEnv().Canvas?a:Ed(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 vr(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 C1({width:n,height:a},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let a=vr(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof $e){let o=va(i)?i:mn(i);return o=F1(o,n),(o.shape[1]!==t||o.shape[2]!==t)&&(o=Er.resizeBilinear(o,[t,t],!1,!1)),o.as3D(t,t,3)}if(i instanceof et.getEnv().Canvas)return ko.fromPixels(G1(i,t,n));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return Rt(a.map(s=>le(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function vt(e){if(e instanceof Ir)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(zo);return a.forEach((r,s)=>{if(!Ng(r)&&!zr(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=>Ng(r)&&B1(r))),new Ir(a,Array.isArray(e))}async function yp(e,t){let{Canvas:n}=et.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 U1(o)}let r=Kn(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=Bo({width:l,height:u});return l>0&&u>0&&Kn(p).putImageData(r.getImageData(i,o,l,u),0,0),p})}async function xp(e,t){if(!zr(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 O(()=>{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})=>To(e.as3D(n,a,r),[l,o,0],[p,u,r]))})}async function Vr(e,t){let{fetch:n}=et.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 Xpe(e){let t=await Vr(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 V1(n)}async function H1(e){return(await Vr(e)).json()}async function Ype(e){return new Float32Array(await(await Vr(e)).arrayBuffer())}function Q$(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let a=et.getEnv().createVideoElement();a.oncanplay=()=>t(a),a.onerror=n,a.playsInline=!0,a.muted=!0,a.src=URL.createObjectURL(e),a.play()})}async function Zpe(e){let t=await Vr(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 Q$(n)}function Cg(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 j1(e,t){let{manifestUri:n,modelBaseUri:a}=Cg(e,t),r=await H1(n);return Nn.loadWeights(r,a)}function Jpe(e,t,n=!1){let{width:a,height:r}=n?Wo(t):t;return e.width=a,e.height=r,{width:a,height:r}}var on=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 us)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof us))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let a=Bn(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 j1(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}=et.getEnv(),{manifestUri:a,modelBaseUri:r}=Cg(t,this.getDefaultModelName()),s=u=>Promise.all(u.map(p=>n(p).then(d=>d.buffer))),i=Nn.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 $e))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:a,objProp:r}}};function Xn(e,t,n){return O(()=>{let a=Es(e,t.depthwise_filter,t.pointwise_filter,n,"same");return a=Q(a,t.bias),a})}function _g(e,t,n=!1){return O(()=>{let a=Xe(n?Q(Dt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Xn(e,t.conv0,[2,2])),r=Xn(a,t.conv1,[1,1]),s=Xe(Q(a,r)),i=Xn(s,t.conv2,[1,1]);return Xe(Q(a,Q(r,i)))})}function $d(e,t,n=!1,a=!0){return O(()=>{let r=Xe(n?Q(Dt(e,t.conv0.filters,a?[2,2]:[1,1],"same"),t.conv0.bias):Xn(e,t.conv0,a?[2,2]:[1,1])),s=Xn(r,t.conv1,[1,1]),i=Xe(Q(r,s)),o=Xn(i,t.conv2,[1,1]),l=Xe(Q(r,Q(s,o))),u=Xn(l,t.conv3,[1,1]);return Xe(Q(r,Q(s,Q(o,u))))})}function Vo(e,t,n="same",a=!1){return O(()=>{let r=Q(Dt(e,t.filters,[1,1],n),t.bias);return a?Xe(r):r})}function Dn(e,t){Object.keys(e).forEach(n=>{t.some(a=>a.originalPath===n)||e[n].dispose()})}function vp(e,t){return(n,a,r,s)=>{let i=Fa(e(n*a*r*r),[r,r,n,a]),o=Ke(e(a));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function Eg(e,t){return(n,a,r)=>{let s=Ea(e(n*a),[n,a]),i=Ke(e(a));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/bias`}),{weights:s,bias:i}}}var Ad=class{constructor(t,n,a){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=a}};function wp(e,t){return(n,a,r)=>{let s=Fa(e(9*n),[3,3,n,1]),i=Fa(e(n*a),[1,1,n,a]),o=Ke(e(a));return t.push({paramPath:`${r}/depthwise_filter`},{paramPath:`${r}/pointwise_filter`},{paramPath:`${r}/bias`}),new Ad(s,i,o)}}function kp(e){return t=>{let n=e(`${t}/depthwise_filter`,4),a=e(`${t}/pointwise_filter`,4),r=e(`${t}/bias`,1);return new Ad(n,a,r)}}function sa(e,t){return(n,a,r)=>{let s=e[n];if(!Fo(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 Rn(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 $g(e,t){let n=vp(e,t),a=wp(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 eA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Rn(e),{extractDenseBlock4Params:r}=$g(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 Ag(e){return t=>{let n=e(`${t}/filters`,4),a=e(`${t}/bias`,1);return{filters:n,bias:a}}}function Fg(e,t){let n=sa(e,t),a=Ag(n),r=kp(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 tA(e){let t=[],{extractDenseBlock4Params:n}=Fg(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return Dn(e,t),{params:a,paramMappings:t}}var Ip=class extends on{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let a=le(t.toBatchTensor(112,!0),"float32"),s=nr(a,[122.782,117.001,104.298]).div(255),i=$d(s,n.dense0,!0);return i=$d(i,n.dense1),i=$d(i,n.dense2),i=$d(i,n.dense3),i=ba(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 tA(t)}extractParams(t){return eA(t)}};function Fd(e,t){return O(()=>Q(Re(e,t.weights),t.bias))}function nA(e,t,n){let a=[],{extractWeights:r,getRemainingWeights:s}=Rn(e),o=Eg(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 aA(e){let t=[],n=sa(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 Dn(e,t),{params:r,paramMappings:t}}function Dg(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 Tp=class extends on{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 O(()=>{let r=n instanceof Ir?this.faceFeatureExtractor.forwardInput(n):n;return Fd(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 nA(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=Dg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),aA(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 q1=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Ur=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}`);q1.forEach((n,a)=>{this[n]=t[a]})}asSortedArray(){return q1.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var Dd=class extends Tp{constructor(t=new Ip){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Qa(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(mt(a).map(async i=>{let o=i.dataSync();return i.dispose(),o}));a.dispose();let s=r.map(i=>new Ur(i));return n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function K1(e){return e.expressions instanceof Ur}function Rg(e,t){return{...e,...{expressions:t}}}function Qpe(e,t,n=.1,a){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof Ur?s:K1(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=kr(s)?s.detection.box.bottomLeft:a||new Pe(0,0);new Br(l.map(d=>`${d.expression} (${Do(d.probability)})`),u).draw(e)})}function Uo(e){return kr(e)&&e.landmarks instanceof ra&&e.unshiftedLandmarks instanceof ra&&e.alignedRect instanceof xt}function ece(e){let t=(o,l,u,p)=>Math.atan2(p-l,u-o)%Math.PI,n=o=>o*180/Math.PI,a={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return a;let r=e._positions;a.roll=-t(r[36]._x,r[36]._y,r[45]._x,r[45]._y),a.pitch=t(0,Math.abs(r[0]._x-r[30]._x)/r[30]._x,Math.PI,Math.abs(r[16]._x-r[30]._x)/r[30]._x);let s=r.reduce((o,l)=>oo>l._y?o:l._y,-1/0);return a.yaw=Math.PI*(e._imgDims._height/(i-s)/1.4-1),a}function Sp(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=ece(t);return{...e,...{landmarks:a,unshiftedLandmarks:t,alignedRect:i,angle:o}}}var Mg=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)"}},Pg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new Mg(n)}draw(t){let n=Kn(t),{drawLines:a,drawPoints:r,lineWidth:s,lineColor:i,pointSize:o,pointColor:l}=this.options;if(a&&this.faceLandmarks instanceof Oo&&(n.strokeStyle=i,n.lineWidth=s,Lr(n,this.faceLandmarks.getJawOutline()),Lr(n,this.faceLandmarks.getLeftEyeBrow()),Lr(n,this.faceLandmarks.getRightEyeBrow()),Lr(n,this.faceLandmarks.getNose()),Lr(n,this.faceLandmarks.getLeftEye(),!0),Lr(n,this.faceLandmarks.getRightEye(),!0),Lr(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 tce(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof ra?a:Uo(a)?a.landmarks:void 0;if(!r)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new Pg(r).draw(e)})}var rA="1.7.3";function rce(e,t){let n=vp(e,t),a=wp(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 sA(e,t){let n=[],{extractWeights:a,getRemainingWeights:r}=Rn(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=rce(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={};vr(t,0,1).forEach(b=>{h[`main_block_${b}`]=l(128,`middle_flow/main_block_${b}`)});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 sce(e,t){let n=sa(e,t),a=Ag(n),r=kp(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 iA(e,t){let n=[],{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}=sce(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={};vr(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 Dn(e,n),{params:{entry_flow:p,middle_flow:d,exit_flow:m},paramMappings:n}}function oA(e,t,n){return Q(Dt(e,t.filters,n,"same"),t.bias)}function Y1(e,t,n=!0){let a=n?Xe(e):e;return a=Xn(a,t.separable_conv0,[1,1]),a=Xn(Xe(a),t.separable_conv1,[1,1]),a=Mt(a,[3,3],[2,2],"same"),a=Q(a,oA(e,t.expansion_conv,[2,2])),a}function ice(e,t){let n=Xn(Xe(e),t.separable_conv0,[1,1]);return n=Xn(Xe(n),t.separable_conv1,[1,1]),n=Xn(Xe(n),t.separable_conv2,[1,1]),n=Q(n,e),n}var Og=class extends on{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:a}=this;if(!a)throw new Error("TinyXception - load model before inference");return O(()=>{let r=le(n.toBatchTensor(112,!0),"float32"),i=nr(r,[122.782,117.001,104.298]).div(255),o=Xe(oA(i,a.entry_flow.conv_in,[2,2]));return o=Y1(o,a.entry_flow.reduction_block_0,!1),o=Y1(o,a.entry_flow.reduction_block_1),vr(this._numMainBlocks,0,1).forEach(l=>{o=ice(o,a.middle_flow[`main_block_${l}`])}),o=Y1(o,a.exit_flow.reduction_block),o=Xe(Xn(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 iA(n,this._numMainBlocks)}extractParams(n){return sA(n,this._numMainBlocks)}};function lA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Rn(e),r=Eg(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 uA(e){let t=[],n=sa(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 Dn(e,t),{params:r,paramMappings:t}}var Lg=(n=>(n.FEMALE="female",n.MALE="male",n))(Lg||{});var Rd=class extends on{constructor(n=new Og(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 O(()=>{let r=n instanceof Ir?this.faceFeatureExtractor.forwardInput(n):n,s=ba(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),i=Fd(s,a.fc.age).as1D(),o=Fd(s,a.fc.gender);return{age:i,gender:o}})}forwardInput(n){return O(()=>{let{age:a,gender:r}=this.runNet(n);return{age:a,gender:Qa(r)}})}async forward(n){return this.forwardInput(await vt(n))}async predictAgeAndGender(n){let a=await vt(n),r=await this.forwardInput(a),s=mt(r.age),i=mt(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 lA(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=Dg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),uA(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 Np=class extends Tp{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 O(()=>{let i=(d,c)=>Rt([$n([68],d,"float32"),$n([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)=>co(d,(c,h)=>hi(l(c),u(c))))).div(Rt(Array.from(Array(s),(d,c)=>i(r[c].width,r[c].height))))})}forwardInput(t){return O(()=>{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=O(()=>mt(this.forwardInput(n))),r=await Promise.all(a.map(async(s,i)=>{let o=Array.from(s.dataSync()),l=o.filter((p,d)=>kg(d)),u=o.filter((p,d)=>!kg(d));return new Oo(Array(68).fill(0).map((p,d)=>new Pe(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 Go=class extends Np{constructor(t=new Ip){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function pA(e){let t=[],{extractDenseBlock3Params:n}=Fg(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return Dn(e,t),{params:a,paramMappings:t}}function cA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Rn(e),{extractDenseBlock3Params:r}=$g(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 zg=class extends on{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let a=le(t.toBatchTensor(112,!0),"float32"),s=nr(a,[122.782,117.001,104.298]).div(255),i=_g(s,n.dense0,!0);return i=_g(i,n.dense1),i=_g(i,n.dense2),i=ba(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 pA(t)}extractParams(t){return cA(t)}};var Md=class extends Np{constructor(t=new zg){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var Z1=class extends Go{};function dA(e,t){return Q(W(e,t.weights),t.biases)}function J1(e,t,n,a,r="same"){let{filters:s,bias:i}=t.conv,o=Dt(e,s,n,r);return o=Q(o,i),o=dA(o,t.scale),a?Xe(o):o}function hA(e,t){return J1(e,t,[1,1],!0)}function Q1(e,t){return J1(e,t,[1,1],!1)}function Wg(e,t){return J1(e,t,[2,2],!0,"valid")}function oce(e,t){function n(o,l,u){let p=e(o),d=p.length/(l*u*u);if(N1(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${p.length}, numFilters: ${l}, filterSize: ${u}`);return O(()=>Ae(Fa(p,[l,d,u,u]),[2,3,1,0]))}function a(o,l,u,p){let d=n(o,l,u),c=Ke(e(l));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/bias`}),{filters:d,bias:c}}function r(o,l){let u=Ke(e(o)),p=Ke(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 mA(e){let{extractWeights:t,getRemainingWeights:n}=Rn(e),a=[],{extractConvLayerParams:r,extractResidualLayerParams:s}=oce(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"),b=s(589824,256,3,"conv256_down",!0),y=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),w=s(589824,256,3,"conv256_down_out"),I=O(()=>Ae(Ea(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:b,conv256_1:y,conv256_2:x,conv256_down_out:w,fc:I},paramMappings:a}}function lce(e,t){let n=sa(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 fA(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:a}=lce(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"),b=a("conv256_2"),y=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:b,conv256_down_out:y,fc:x};return Dn(e,t),{params:w,paramMappings:t}}function ar(e,t){let n=hA(e,t.conv1);return n=Q1(n,t.conv2),n=Q(n,e),n=Xe(n),n}function Pd(e,t){let n=Wg(e,t.conv1);n=Q1(n,t.conv2);let a=ba(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=Qe([n,l],1);let u=[...n.shape];u[2]=1;let p=It(u);n=Qe([n,p],2)}return a=s?Qe([a,r],3):a,n=Q(a,n),n=Xe(n),n}var Ho=class extends on{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let a=le(t.toBatchTensor(150,!0),"float32"),s=nr(a,[122.782,117.001,104.298]).div(255),i=Wg(s,n.conv32_down);i=Mt(i,3,2,"valid"),i=ar(i,n.conv32_1),i=ar(i,n.conv32_2),i=ar(i,n.conv32_3),i=Pd(i,n.conv64_down),i=ar(i,n.conv64_1),i=ar(i,n.conv64_2),i=ar(i,n.conv64_3),i=Pd(i,n.conv128_down),i=ar(i,n.conv128_1),i=ar(i,n.conv128_2),i=Pd(i,n.conv256_down),i=ar(i,n.conv256_1),i=ar(i,n.conv256_2),i=Pd(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=O(()=>mt(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 fA(t)}extractParams(t){return mA(t)}};function uce(e){let t=new Ho;return t.extractWeights(e),t}function Bg(e,t){return{...e,...{descriptor:t}}}function pce(e){return typeof e.age=="number"}function Vg(e,t){return{...e,...{age:t}}}function cce(e){return(e.gender==="male"||e.gender==="female")&&mp(e.genderProbability)}function Ug(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function dce(e,t){function n(l,u){let p=Fa(e(9*l),[3,3,l,1]),d=Ke(e(l)),c=Ke(e(l)),h=Ke(e(l)),m=Ke(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=Fa(e(l*u*p*p),[p,p,l,u]),m=Ke(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"),b=s(512,512,"mobilenetv1/conv_9"),y=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:b,conv_10:y,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"),b=a(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=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"),N=a(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),_=a(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$=a(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),A=a(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),M=a(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),D=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:b},box_predictor_1:{box_encoding_predictor:y,class_predictor:x},box_predictor_2:{box_encoding_predictor:w,class_predictor:I},box_predictor_3:{box_encoding_predictor:N,class_predictor:_},box_predictor_4:{box_encoding_predictor:$,class_predictor:A},box_predictor_5:{box_encoding_predictor:M,class_predictor:D}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:o}}function gA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Rn(e),{extractMobilenetV1Params:r,extractPredictionLayerParams:s}=dce(n,t),i=r(),o=s(),u={extra_dim:Kc(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 hce(e,t){let n=sa(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`),b=n(`${d}/BatchNorm/moving_mean`,1,`${c}/batch_norm_mean`),y=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:b,batch_norm_variance:y},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 bA(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:a}=hce(e,t),r=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!zr(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 Dn(e,t),{params:s,paramMappings:t}}function Ma(e,t,n){return O(()=>{let a=Dt(e,t.filters,n,"same");return a=Q(a,t.batch_norm_offset),tn(a,0,6)})}var mce=.0010000000474974513;function fce(e,t,n){return O(()=>{let a=Ns(e,t.filters,n,"same");return a=Ss(a,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,mce),tn(a,0,6)})}function gce(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function yA(e,t){return O(()=>{let n,a=Ma(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=gce(o);a=fce(a,s.depthwise_conv,l),a=Ma(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 bce(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),b=Math.min(o,d),y=Math.max(g-m,0)*Math.max(b-f,0);return y/(c+h-y)}function xA(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=bce(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 yce(e){let t=mt(Ae(e,[1,0])),n=[ce(t[2],t[0]),ce(t[3],t[1])],a=[Q(t[0],fe(n[0],2)),Q(t[1],fe(n[1],2))];return{sizes:n,centers:a}}function xce(e,t){let{sizes:n,centers:a}=yce(e),r=mt(Ae(t,[1,0])),s=fe(W(gn(fe(r[2],5)),n[0]),2),i=Q(W(fe(r[0],10),n[0]),a[0]),o=fe(W(gn(fe(r[3],5)),n[1]),2),l=Q(W(fe(r[1],10),n[1]),a[1]);return Ae(Rt([ce(i,s),ce(l,o),Q(i,s),Q(l,o)]),[1,0])}function vA(e,t,n){return O(()=>{let a=e.shape[0],r=xce(B(Wn(n.extra_dim,[a,1,1]),[-1,4]),B(e,[-1,4]));r=B(r,[a,r.shape[0]/a,4]);let s=ha(He(t,[0,0,1],[-1,-1,-1])),i=He(s,[0,0,0],[-1,-1,1]);i=B(i,[a,i.shape[1]]);let o=mt(r),l=mt(i);return{boxes:o,scores:l}})}function jo(e,t){return O(()=>{let n=e.shape[0],a=B(Vo(e,t.box_encoding_predictor),[n,-1,1,4]),r=B(Vo(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:a,classPrediction:r}})}function wA(e,t,n){return O(()=>{let a=Ma(e,n.conv_0,[1,1]),r=Ma(a,n.conv_1,[2,2]),s=Ma(r,n.conv_2,[1,1]),i=Ma(s,n.conv_3,[2,2]),o=Ma(i,n.conv_4,[1,1]),l=Ma(o,n.conv_5,[2,2]),u=Ma(l,n.conv_6,[1,1]),p=Ma(u,n.conv_7,[2,2]),d=jo(t,n.box_predictor_0),c=jo(e,n.box_predictor_1),h=jo(r,n.box_predictor_2),m=jo(i,n.box_predictor_3),f=jo(l,n.box_predictor_4),g=jo(p,n.box_predictor_5),b=Qe([d.boxPredictionEncoding,c.boxPredictionEncoding,h.boxPredictionEncoding,m.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding],1),y=Qe([d.classPrediction,c.classPrediction,h.classPrediction,m.classPrediction,f.classPrediction,g.classPrediction],1);return{boxPredictions:b,classPredictions:y}})}var wa=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 Rs=class extends on{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let a=le(t.toBatchTensor(512,!1),"float32"),r=ce(fe(a,127.5),1),s=yA(r,n.mobilenetv1),{boxPredictions:i,classPredictions:o}=wA(s.out,s.conv11,n.prediction_layer);return vA(i,o,n.output_layer)})}async forward(t){return this.forwardInput(await vt(t))}async locateFaces(t,n={}){let{maxResults:a,minConfidence:r}=new wa(n),s=await vt(t),{boxes:i,scores:o}=this.forwardInput(s),l=i[0],u=o[0];for(let x=1;x{let[w,I]=[Math.max(0,b[x][0]),Math.min(1,b[x][2])].map($=>$*g),[N,_]=[Math.max(0,b[x][1]),Math.min(1,b[x][3])].map($=>$*f);return new xt(p[x],new Po(N,w,_-N,I-w),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return l.dispose(),u.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return bA(t)}extractParams(t){return gA(t)}};function kA(e){let t=new Rs;return t.extractWeights(e),t}function vce(e){return kA(e)}var ek=class extends Rs{};var IA=.4,TA=[new Pe(.738768,.874946),new Pe(2.42204,2.65704),new Pe(4.30971,7.04493),new Pe(10.246,4.59428),new Pe(12.6868,11.8741)],SA=[new Pe(1.603231,2.094468),new Pe(6.041143,7.080126),new Pe(2.882459,3.518061),new Pe(4.266906,5.178857),new Pe(9.041765,10.66308)],NA=[117.001,114.697,97.404],CA="tiny_yolov2_model",_A="tiny_yolov2_separable_conv_model";var Gg=e=>typeof e=="number";function tk(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(!Gg(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=>Gg(t.x)&&Gg(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(Gg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Cp(e){return O(()=>{let t=W(e,ke(.10000000149011612));return Q(Xe(ce(e,t)),t)})}function Gr(e,t){return O(()=>{let n=ya(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Dt(n,t.conv.filters,[1,1],"valid"),n=ce(n,t.bn.sub),n=W(n,t.bn.truediv),n=Q(n,t.conv.bias),Cp(n)})}function Hr(e,t){return O(()=>{let n=ya(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Es(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=Q(n,t.bias),Cp(n)})}function wce(e,t){let n=vp(e,t);function a(i,o){let l=Ke(e(i)),u=Ke(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=wp(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}}function EA(e,t,n,a){let{extractWeights:r,getRemainingWeights:s}=Rn(e),i=[],{extractConvParams:o,extractConvWithBatchNormParams:l,extractSeparableConvParams:u}=wce(r,i),p;if(t.withSeparableConvs){let[d,c,h,m,f,g,b,y,x]=a,w=t.isFirstLayerConv2d?o(d,c,3,"conv0"):u(d,c,"conv0"),I=u(c,h,"conv1"),N=u(h,m,"conv2"),_=u(m,f,"conv3"),$=u(f,g,"conv4"),A=u(g,b,"conv5"),M=y?u(b,y,"conv6"):void 0,D=x?u(y,x,"conv7"):void 0,T=o(x||y||b,5*n,1,"conv8");p={conv0:w,conv1:I,conv2:N,conv3:_,conv4:$,conv5:A,conv6:M,conv7:D,conv8:T}}else{let[d,c,h,m,f,g,b,y,x]=a,w=l(d,c,"conv0"),I=l(c,h,"conv1"),N=l(h,m,"conv2"),_=l(m,f,"conv3"),$=l(f,g,"conv4"),A=l(g,b,"conv5"),M=l(b,y,"conv6"),D=l(y,x,"conv7"),T=o(x,5*n,1,"conv8");p={conv0:w,conv1:I,conv2:N,conv3:_,conv4:$,conv5:A,conv6:M,conv7:D,conv8:T}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:p,paramMappings:i}}function kce(e,t){let n=sa(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=kp(n);return{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function $A(e,t){let n=[],{extractConvParams:a,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}=kce(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 Dn(e,n),{params:i,paramMappings:n}}var rr=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 nk=class extends on{constructor(n){super("TinyYolov2");tk(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=Gr(n,a.conv0);return r=Mt(r,[2,2],[2,2],"same"),r=Gr(r,a.conv1),r=Mt(r,[2,2],[2,2],"same"),r=Gr(r,a.conv2),r=Mt(r,[2,2],[2,2],"same"),r=Gr(r,a.conv3),r=Mt(r,[2,2],[2,2],"same"),r=Gr(r,a.conv4),r=Mt(r,[2,2],[2,2],"same"),r=Gr(r,a.conv5),r=Mt(r,[2,2],[1,1],"same"),r=Gr(r,a.conv6),r=Gr(r,a.conv7),Vo(r,a.conv8,"valid",!1)}runMobilenet(n,a){let r=this.config.isFirstLayerConv2d?Cp(Vo(n,a.conv0,"valid",!1)):Hr(n,a.conv0);return r=Mt(r,[2,2],[2,2],"same"),r=Hr(r,a.conv1),r=Mt(r,[2,2],[2,2],"same"),r=Hr(r,a.conv2),r=Mt(r,[2,2],[2,2],"same"),r=Hr(r,a.conv3),r=Mt(r,[2,2],[2,2],"same"),r=Hr(r,a.conv4),r=Mt(r,[2,2],[2,2],"same"),r=Hr(r,a.conv5),r=Mt(r,[2,2],[1,1],"same"),r=a.conv6?Hr(r,a.conv6):r,r=a.conv7?Hr(r,a.conv7):r,Vo(r,a.conv8,"valid",!1)}forwardInput(n,a){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let s=le(n.toBatchTensor(a,!1),"float32");return s=this.config.meanRgb?nr(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 rr(a),i=await vt(n),o=await this.forwardInput(i,r),l=O(()=>mt(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(b=>b.box),c=p.map(b=>b.score),h=p.map(b=>b.classScore),m=p.map(b=>this.config.classes[b.label]);return A1(d.map(b=>b.rescale(r)),c,this.config.iouThreshold,!0).map(b=>new Wr(c[b],h[b],m[b],d[b],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return $A(n,this.config)}extractParams(n){let a=this.config.filterSizes||nk.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 EA(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]=O(()=>{let y=n.reshape([p,p,d,this.boxEncodingSize]),x=y.slice([0,0,0,0],[p,p,d,4]),w=y.slice([0,0,0,4],[p,p,d,1]),I=this.withClassScores?Qa(y.slice([0,0,0,5],[p,p,d,this.config.classes.length]),3):ke(0);return[x,w,I]}),f=[],g=await h.array(),b=await c.array();for(let y=0;yr){let N=(x+Sd(b[y][x][w][0]))/p*l,_=(y+Sd(b[y][x][w][1]))/p*u,$=Math.exp(b[y][x][w][2])*this.config.anchors[w].x/p*l,A=Math.exp(b[y][x][w][3])*this.config.anchors[w].y/p*u,M=N-$/2,D=_-A/2,T={row:y,col:x,anchor:w},{classScore:P,label:U}=this.withClassScores?await this.extractPredictedClass(m,T):{classScore:1,label:0};f.push({box:new Mo(M,D,M+$,D+A),score:I,classScore:I*P,label:U,...T})}}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)}},qo=nk;qo.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Ko=class extends qo{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:IA,classes:["face"],...t?{anchors:SA,meanRgb:NA}:{anchors:TA,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?_A:CA}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function Ice(e,t=!0){let n=new Ko(t);return n.extractWeights(e),n}var Od=class extends rr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var ka=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Xo(e,t,n,a,r=({alignedRect:s})=>s){let s=e.map(l=>Uo(l)?r(l):l.detection),i=a||(t instanceof $e?await xp(t,s):await yp(t,s)),o=await n(i);return i.forEach(l=>l instanceof $e&&l.dispose()),o}async function _p(e,t,n,a,r){return Xo([e],t,async s=>n(s[0]),a,r)}var AA=.4,FA=[new Pe(1.603231,2.094468),new Pe(6.041143,7.080126),new Pe(2.882459,3.518061),new Pe(4.266906,5.178857),new Pe(9.041765,10.66308)],DA=[117.001,114.697,97.404];var Yo=class extends qo{constructor(){let t={withSeparableConvs:!0,iouThreshold:AA,classes:["face"],anchors:FA,meanRgb:DA,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 tt={ssdMobilenetv1:new Rs,tinyFaceDetector:new Yo,tinyYolov2:new Ko,faceLandmark68Net:new Go,faceLandmark68TinyNet:new Md,faceRecognitionNet:new Ho,faceExpressionNet:new Dd,ageGenderNet:new Rd},RA=(e,t)=>tt.ssdMobilenetv1.locateFaces(e,t),Tce=(e,t)=>tt.tinyFaceDetector.locateFaces(e,t),Sce=(e,t)=>tt.tinyYolov2.locateFaces(e,t),MA=e=>tt.faceLandmark68Net.detectLandmarks(e),Nce=e=>tt.faceLandmark68TinyNet.detectLandmarks(e),Cce=e=>tt.faceRecognitionNet.computeFaceDescriptor(e),_ce=e=>tt.faceExpressionNet.predictExpressions(e),Ece=e=>tt.ageGenderNet.predictAgeAndGender(e),PA=e=>tt.ssdMobilenetv1.load(e),$ce=e=>tt.tinyFaceDetector.load(e),Ace=e=>tt.tinyYolov2.load(e),Fce=e=>tt.faceLandmark68Net.load(e),Dce=e=>tt.faceLandmark68TinyNet.load(e),Rce=e=>tt.faceRecognitionNet.load(e),Mce=e=>tt.faceExpressionNet.load(e),Pce=e=>tt.ageGenderNet.load(e),Oce=PA,Lce=RA,zce=MA;var Hg=class extends ka{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Zo=class extends Hg{async run(){let t=await this.parentTask,n=await Xo(t,this.input,async a=>Promise.all(a.map(r=>tt.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return t.map((a,r)=>Rg(a,n[r]))}withAgeAndGender(){return new Qo(this,this.input)}},Jo=class extends Hg{async run(){let t=await this.parentTask;if(!t)return;let n=await _p(t,this.input,a=>tt.faceExpressionNet.predictExpressions(a),this.extractedFaces);return Rg(t,n)}withAgeAndGender(){return new el(this,this.input)}},Ms=class extends Zo{withAgeAndGender(){return new Os(this,this.input)}withFaceDescriptors(){return new jr(this,this.input)}},Ps=class extends Jo{withAgeAndGender(){return new Ls(this,this.input)}withFaceDescriptor(){return new qr(this,this.input)}};var jg=class extends ka{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Qo=class extends jg{async run(){let t=await this.parentTask,n=await Xo(t,this.input,async a=>Promise.all(a.map(r=>tt.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return t.map((a,r)=>{let{age:s,gender:i,genderProbability:o}=n[r];return Vg(Ug(a,i,o),s)})}withFaceExpressions(){return new Zo(this,this.input)}},el=class extends jg{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:a,genderProbability:r}=await _p(t,this.input,s=>tt.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return Vg(Ug(t,a,r),n)}withFaceExpressions(){return new Jo(this,this.input)}},Os=class extends Qo{withFaceExpressions(){return new Ms(this,this.input)}withFaceDescriptors(){return new jr(this,this.input)}},Ls=class extends el{withFaceExpressions(){return new Ps(this,this.input)}withFaceDescriptor(){return new qr(this,this.input)}};var Ld=class extends ka{constructor(n,a){super();this.parentTask=n;this.input=a}},jr=class extends Ld{async run(){let t=await this.parentTask;return(await Xo(t,this.input,a=>Promise.all(a.map(r=>tt.faceRecognitionNet.computeFaceDescriptor(r))),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}))).map((a,r)=>Bg(t[r],a))}withFaceExpressions(){return new Ms(this,this.input)}withAgeAndGender(){return new Os(this,this.input)}},qr=class extends Ld{async run(){let t=await this.parentTask;if(!t)return;let n=await _p(t,this.input,a=>tt.faceRecognitionNet.computeFaceDescriptor(a),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}));return Bg(t,n)}withFaceExpressions(){return new Ps(this,this.input)}withAgeAndGender(){return new Ls(this,this.input)}};var zd=class extends ka{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?tt.faceLandmark68TinyNet:tt.faceLandmark68Net}},Wd=class extends zd{async run(){let t=await this.parentTask,n=t.map(i=>i.detection),a=this.input instanceof $e?await xp(this.input,n):await yp(this.input,n),r=await Promise.all(a.map(i=>this.landmarkNet.detectLandmarks(i)));return a.forEach(i=>i instanceof $e&&i.dispose()),t.filter((i,o)=>r[o]).map((i,o)=>Sp(i,r[o]))}withFaceExpressions(){return new Ms(this,this.input)}withAgeAndGender(){return new Os(this,this.input)}withFaceDescriptors(){return new jr(this,this.input)}},Bd=class extends zd{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,a=this.input instanceof $e?await xp(this.input,[n]):await yp(this.input,[n]),r=await this.landmarkNet.detectLandmarks(a[0]);return a.forEach(s=>s instanceof $e&&s.dispose()),Sp(t,r)}withFaceExpressions(){return new Ps(this,this.input)}withAgeAndGender(){return new Ls(this,this.input)}withFaceDescriptor(){return new qr(this,this.input)}};var Vd=class extends ka{constructor(n,a=new wa){super();this.input=n;this.options=a}},Ep=class extends Vd{async run(){let{input:t,options:n}=this,a;if(n instanceof Od)a=tt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof wa)a=tt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof rr)a=tt.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=>Lo({},r)))).catch(a=>n(a))})}withFaceLandmarks(t=!1){return new Wd(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Zo(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Qo(this.runAndExtendWithFaceDetections(),this.input)}},Ud=class extends Vd{async run(){let t=await new Ep(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?Lo({},n):void 0)})}withFaceLandmarks(t=!1){return new Bd(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Jo(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new el(this.runAndExtendWithFaceDetection(),this.input)}};function Wce(e,t=new wa){return new Ud(e,t)}function qg(e,t=new wa){return new Ep(e,t)}async function OA(e,t){return qg(e,new wa(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Bce(e,t={}){return qg(e,new rr(t)).withFaceLandmarks().withFaceDescriptors()}var Vce=OA;function ak(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 Gd=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 wr)return i;if(i instanceof Float32Array)return new wr(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new wr(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(a=>ak(a,t)).reduce((a,r)=>a+r,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:a})=>new fp(a,this.computeMeanDistance(t,n))).reduce((n,a)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(a=>wr.fromJSON(a));return new Gd(n,t.distanceThreshold)}};function Uce(e){let t=new Yo;return t.extractWeights(e),t}function LA(e,t){let{width:n,height:a}=new bn(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=>LA(r,{width:n,height:a}));if(Uo(e)){let r=e.detection.forSize(n,a),s=e.unshiftedLandmarks.forSize(r.box.width,r.box.height);return Sp(Lo(e,r),s)}return kr(e)?Lo(e,e.detection.forSize(n,a)):e instanceof ra||e instanceof xt?e.forSize(n,a):e}var Gce=rA;return OF(Hce);})();