/* Face-API homepage: author: ' */ "use strict";var faceapi=(()=>{var dv=Object.defineProperty;var NR=Object.getOwnPropertyDescriptor;var _R=Object.getOwnPropertyNames;var ER=Object.prototype.hasOwnProperty;var AR=(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 Error('Dynamic require of "'+e+'" is not supported')});var $h=(e,t)=>{for(var n in t)dv(e,n,{get:t[n],enumerable:!0})},DR=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of _R(t))!ER.call(e,s)&&s!==n&&dv(e,s,{get:()=>t[s],enumerable:!(r=NR(t,s))||r.enumerable});return e};var $R=e=>DR(dv({},"__esModule",{value:!0}),e);var Jge={};$h(Jge,{AgeGenderNet:()=>Kp,BoundingBox:()=>iu,Box:()=>on,ComposableTask:()=>Ir,ComputeAllFaceDescriptorsTask:()=>Hs,ComputeFaceDescriptorsTaskBase:()=>Jp,ComputeSingleFaceDescriptorTask:()=>js,DetectAllFaceLandmarksTask:()=>eh,DetectAllFacesTask:()=>Hl,DetectFaceLandmarksTaskBase:()=>Qp,DetectFacesTaskBase:()=>nh,DetectSingleFaceLandmarksTask:()=>th,DetectSingleFaceTask:()=>rh,Dimensions:()=>Un,FACE_EXPRESSION_LABELS:()=>H0,FaceDetection:()=>Tt,FaceDetectionNet:()=>J0,FaceExpressionNet:()=>qp,FaceExpressions:()=>Vs,FaceLandmark68Net:()=>yu,FaceLandmark68TinyNet:()=>Xp,FaceLandmarkNet:()=>X0,FaceLandmarks:()=>or,FaceLandmarks5:()=>D0,FaceLandmarks68:()=>lu,FaceMatch:()=>Al,FaceMatcher:()=>tS,FaceRecognitionNet:()=>vu,Gender:()=>wg,LabeledBox:()=>Dl,LabeledFaceDescriptors:()=>Ba,NetInput:()=>xs,NeuralNetwork:()=>cn,ObjectDetection:()=>uu,Point:()=>Ue,PredictedBox:()=>$0,Rect:()=>cu,SsdMobilenetv1:()=>za,SsdMobilenetv1Options:()=>wr,TinyFaceDetector:()=>ku,TinyFaceDetectorOptions:()=>Zp,TinyYolov2:()=>wu,TinyYolov2Options:()=>Qr,allFaces:()=>Xge,allFacesSsdMobilenetv1:()=>jF,allFacesTinyYolov2:()=>Kge,awaitMediaLoaded:()=>B0,bufferToImage:()=>z0,computeFaceDescriptor:()=>Rge,createCanvas:()=>mu,createCanvasFromMedia:()=>Up,createFaceDetectionNet:()=>Nge,createFaceRecognitionNet:()=>gge,createSsdMobilenetv1:()=>DF,createTinyFaceDetector:()=>Yge,createTinyYolov2:()=>Age,detectAllFaces:()=>Dg,detectFaceLandmarks:()=>GF,detectFaceLandmarksTiny:()=>Fge,detectLandmarks:()=>jge,detectSingleFace:()=>qge,draw:()=>q0,env:()=>nt,euclideanDistance:()=>eS,extendWithAge:()=>Cg,extendWithFaceDescriptor:()=>Sg,extendWithFaceDetection:()=>du,extendWithFaceExpressions:()=>bg,extendWithFaceLandmarks:()=>zl,extendWithGender:()=>Tg,extractFaceTensors:()=>Rl,extractFaces:()=>Fl,fetchImage:()=>nge,fetchJson:()=>U0,fetchNetWeights:()=>rge,fetchOrThrow:()=>Ws,fetchVideo:()=>sge,getContext2dOrThrow:()=>Gn,getMediaDimensions:()=>fu,imageTensorToCanvas:()=>W0,imageToSquare:()=>V0,inverseSigmoid:()=>Xme,iou:()=>N0,isMediaElement:()=>cg,isMediaLoaded:()=>Vp,isWithAge:()=>bge,isWithFaceDetection:()=>vs,isWithFaceExpressions:()=>j0,isWithFaceLandmarks:()=>bu,isWithGender:()=>yge,loadAgeGenderModel:()=>Uge,loadFaceDetectionModel:()=>Gge,loadFaceExpressionModel:()=>Vge,loadFaceLandmarkModel:()=>Bge,loadFaceLandmarkTinyModel:()=>zge,loadFaceRecognitionModel:()=>Wge,loadSsdMobilenetv1Model:()=>HF,loadTinyFaceDetectorModel:()=>Mge,loadTinyYolov2Model:()=>Lge,loadWeightMap:()=>G0,locateFaces:()=>Hge,matchDimensions:()=>age,minBbox:()=>_0,nets:()=>rt,nonMaxSuppression:()=>E0,normalize:()=>Zr,padToSquare:()=>A0,predictAgeAndGender:()=>Oge,recognizeFaceExpressions:()=>Pge,resizeResults:()=>qF,resolveInput:()=>pu,shuffleArray:()=>Kme,sigmoid:()=>Bp,ssdMobilenetv1:()=>UF,tf:()=>Oe,tinyFaceDetector:()=>Dge,tinyYolov2:()=>$ge,toNetInput:()=>vt,utils:()=>T0,validateConfig:()=>Q0,version:()=>Zge});var Oe={};$h(Oe,{Abs:()=>cc,Acos:()=>Eo,Acosh:()=>Ao,AdadeltaOptimizer:()=>Yw,AdagradOptimizer:()=>Zw,AdamOptimizer:()=>Jw,AdamaxOptimizer:()=>Qw,Add:()=>Sa,AddN:()=>Do,All:()=>lc,Any:()=>dc,ArgMax:()=>pc,ArgMin:()=>hc,Asin:()=>$o,Asinh:()=>Fo,Atan:()=>Ro,Atan2:()=>Oo,Atanh:()=>Po,AvgPool:()=>Mo,AvgPool3D:()=>fc,AvgPool3DGrad:()=>zd,AvgPoolGrad:()=>Bd,BackendWasm:()=>oF,BatchMatMul:()=>Lo,BatchToSpaceND:()=>mc,Bincount:()=>gc,BitwiseAnd:()=>bc,BroadcastArgs:()=>Wd,BroadcastTo:()=>mC,Callback:()=>a_,CallbackList:()=>e2,Cast:()=>Bo,Ceil:()=>zo,ClipByValue:()=>Ca,Complex:()=>Mf,ComplexAbs:()=>Vd,Concat:()=>yc,Conv2D:()=>Wo,Conv2DBackpropFilter:()=>Lf,Conv2DBackpropInput:()=>Vo,Conv3D:()=>Uo,Conv3DBackpropFilterV2:()=>vc,Conv3DBackpropInputV2:()=>xc,Cos:()=>Go,Cosh:()=>Ho,CropAndResize:()=>Ic,Cumprod:()=>wc,Cumsum:()=>jo,CustomCallback:()=>n2,DataStorage:()=>Rf,DenseBincount:()=>Ud,DepthToSpace:()=>kc,DepthwiseConv2dNative:()=>qo,DepthwiseConv2dNativeBackpropFilter:()=>Bf,DepthwiseConv2dNativeBackpropInput:()=>zf,Diag:()=>Gd,Dilation2D:()=>Ko,Dilation2DBackpropFilter:()=>qu,Dilation2DBackpropInput:()=>ju,Draw:()=>Wf,ENV:()=>Fx,EarlyStopping:()=>o_,Einsum:()=>Vf,Elu:()=>Yo,EluGrad:()=>Sc,Environment:()=>hC,Equal:()=>Cc,Erf:()=>Zo,Exp:()=>Jo,ExpandDims:()=>Tc,Expm1:()=>Qo,FFT:()=>Uf,Fill:()=>Hd,FlipLeftRight:()=>Nc,Floor:()=>ei,FloorDiv:()=>ti,FromPixels:()=>of,FusedBatchNorm:()=>ni,FusedConv2D:()=>co,FusedDepthwiseConv2D:()=>lo,GPGPUContext:()=>tf,GatherNd:()=>Ec,GatherV2:()=>_c,GraphModel:()=>Bk,Greater:()=>Ac,GreaterEqual:()=>ri,History:()=>t2,IFFT:()=>Gf,Identity:()=>si,Imag:()=>Hf,InputSpec:()=>Bt,IsFinite:()=>ai,IsInf:()=>oi,IsNan:()=>ii,KernelBackend:()=>Md,LRN:()=>di,LRNGrad:()=>Mc,LayerVariable:()=>jN,LayersModel:()=>Es,LeakyRelu:()=>ui,Less:()=>Dc,LessEqual:()=>$c,LinSpace:()=>Fc,Log:()=>ci,Log1p:()=>li,LogSoftmax:()=>bC,LogicalAnd:()=>Rc,LogicalNot:()=>Pc,LogicalOr:()=>Oc,LogicalXor:()=>gC,LowerBound:()=>SP,MathBackendCPU:()=>Vk,MathBackendWebGL:()=>g0,MatrixBandPart:()=>CP,Max:()=>pi,MaxPool:()=>fi,MaxPool3D:()=>Lc,MaxPool3DGrad:()=>qd,MaxPoolGrad:()=>jd,MaxPoolWithArgmax:()=>Kd,Maximum:()=>hi,Mean:()=>mi,Min:()=>gi,Minimum:()=>bi,MirrorPad:()=>yi,Mod:()=>vi,MomentumOptimizer:()=>eI,Multinomial:()=>Bc,Multiply:()=>xi,Neg:()=>zc,NonMaxSuppressionV3:()=>Vc,NonMaxSuppressionV4:()=>Uc,NonMaxSuppressionV5:()=>Gc,NotEqual:()=>Wc,OP_SCOPE_SUFFIX:()=>Lx,OneHot:()=>wi,OnesLike:()=>Hc,Optimizer:()=>Os,OptimizerConstructors:()=>CN,Pack:()=>jc,PadV2:()=>Ii,Pool:()=>TP,Pow:()=>ki,Prelu:()=>Si,Prod:()=>Ci,RMSPropOptimizer:()=>tI,RNN:()=>Ms,RaggedGather:()=>jf,RaggedRange:()=>qf,RaggedTensorToTensor:()=>Kf,Range:()=>Xd,Rank:()=>Ev,Real:()=>Xf,RealDiv:()=>Xo,Reciprocal:()=>Ti,Reduction:()=>Sn,Relu:()=>Ni,Relu6:()=>Ai,Reshape:()=>qc,ResizeBilinear:()=>Ei,ResizeBilinearGrad:()=>Xc,ResizeNearestNeighbor:()=>_i,ResizeNearestNeighborGrad:()=>Kc,Reverse:()=>Di,RotateWithOffset:()=>ll,Round:()=>$i,Rsqrt:()=>Fi,SGDOptimizer:()=>Em,ScatterNd:()=>Yc,SearchSorted:()=>Jc,Select:()=>Qc,Selu:()=>Ri,Sequential:()=>Vm,Sigmoid:()=>Li,Sign:()=>Mi,Sin:()=>Pi,Sinh:()=>Oi,Slice:()=>el,Softmax:()=>Vi,Softplus:()=>Bi,SpaceToBatchND:()=>tl,SparseFillEmptyRows:()=>Yd,SparseReshape:()=>rl,SparseSegmentMean:()=>Zd,SparseSegmentSum:()=>Jd,SparseToDense:()=>sl,SplitV:()=>nl,Sqrt:()=>zi,Square:()=>Qd,SquaredDifference:()=>Ui,StaticRegexReplace:()=>ep,Step:()=>Na,StridedSlice:()=>al,StringNGrams:()=>tp,StringSplit:()=>np,StringToHashBucketFast:()=>rp,Sub:()=>Gi,Sum:()=>Wi,SymbolicTensor:()=>jr,Tan:()=>Hi,Tanh:()=>ji,Tensor:()=>Ne,TensorBuffer:()=>zt,TensorScatterUpdate:()=>Zc,Tile:()=>Ta,TopK:()=>ol,Transform:()=>il,Transpose:()=>_s,Unique:()=>sp,Unpack:()=>ul,UnsortedSegmentSum:()=>ap,UpperBound:()=>NP,Variable:()=>pa,ZerosLike:()=>cl,_FusedMatMul:()=>uo,abs:()=>Lt,acos:()=>Gx,acosh:()=>Hx,add:()=>X,addN:()=>GC,all:()=>em,any:()=>Sd,argMax:()=>mo,argMin:()=>jx,asin:()=>qx,asinh:()=>Kx,atan:()=>Xx,atan2:()=>Yx,atanh:()=>Zx,avgPool:()=>br,avgPool3d:()=>Qx,backend:()=>zx,backend_util:()=>T,basicLSTMCell:()=>KC,batchNorm:()=>Ea,batchNorm2d:()=>ew,batchNorm3d:()=>tw,batchNorm4d:()=>nw,batchToSpaceND:()=>pp,bincount:()=>rw,bitwiseAnd:()=>XC,booleanMaskAsync:()=>LT,broadcastArgs:()=>YC,broadcastTo:()=>ao,broadcast_util:()=>dl,browser:()=>Yi,buffer:()=>Me,callbacks:()=>I5,cast:()=>ae,ceil:()=>sw,clipByValue:()=>rn,clone:()=>us,complex:()=>As,concat:()=>tt,concat1d:()=>aw,concat2d:()=>ow,concat3d:()=>iw,concat4d:()=>uw,constraints:()=>YN,conv1d:()=>tm,conv2d:()=>Ft,conv2dTranspose:()=>nm,conv3d:()=>lw,conv3dTranspose:()=>dw,copyRegisteredKernels:()=>DP,cos:()=>hp,cosh:()=>rm,cosineWindow:()=>Sm,cumprod:()=>Nd,cumsum:()=>sm,customGrad:()=>ps,data:()=>A_,denseBincount:()=>df,deprecationWarn:()=>Bx,depthToSpace:()=>pw,depthwiseConv2d:()=>Aa,deregisterOp:()=>C5,device_util:()=>cp,diag:()=>JC,dilation2d:()=>hw,disableDeprecationWarnings:()=>cO,dispose:()=>_e,disposeVariables:()=>lO,div:()=>fe,divNoNan:()=>fw,dot:()=>mw,dropout:()=>Hw,einsum:()=>Qa,elu:()=>pl,enableDebugMode:()=>uO,enableProdMode:()=>iO,enclosingPowerOfTwo:()=>jw,engine:()=>Er,ensureShape:()=>eT,env:()=>G,equal:()=>tr,erf:()=>gw,euclideanNorm:()=>vw,exp:()=>fn,expandDims:()=>Gt,expm1:()=>xw,eye:()=>am,fft:()=>kp,fill:()=>vn,findBackend:()=>gO,findBackendFactory:()=>bO,floor:()=>fl,floorDiv:()=>Qf,forceHalfFloat:()=>eD,fused:()=>tc,gather:()=>ml,gatherND:()=>VT,gather_util:()=>sI,getBackend:()=>DC,getGradient:()=>Nv,getKernel:()=>wd,getKernelsForBackend:()=>uf,getThreadsCount:()=>Bme,gpgpu_util:()=>DA,grad:()=>XM,grads:()=>YM,greater:()=>En,greaterEqual:()=>Rs,ifft:()=>ec,imag:()=>fp,image:()=>er,inTopKAsync:()=>UT,initializers:()=>ZN,input:()=>g2,io:()=>jt,irfft:()=>ym,isFinite:()=>ww,isInf:()=>Iw,isNaN:()=>kw,keep:()=>Ht,kernel_impls:()=>gs,layers:()=>JN,leakyRelu:()=>mp,less:()=>Yu,lessEqual:()=>Da,linalg:()=>Xw,linspace:()=>aT,loadGraphModel:()=>Dq,loadGraphModelSync:()=>$q,loadLayersModel:()=>y6,localResponseNormalization:()=>Sw,log:()=>nr,log1p:()=>gp,logSigmoid:()=>Cw,logSoftmax:()=>im,logSumExp:()=>bp,logicalAnd:()=>$r,logicalNot:()=>yp,logicalOr:()=>um,logicalXor:()=>Tw,losses:()=>tN,lowerBound:()=>iT,matMul:()=>Fe,math:()=>pN,max:()=>hr,maxPool:()=>Rt,maxPool3d:()=>Nw,maxPoolWithArgmax:()=>uT,maximum:()=>ms,mean:()=>_t,memory:()=>lf,meshgrid:()=>cT,metrics:()=>n_,min:()=>Xu,minimum:()=>ga,mirrorPad:()=>_w,mod:()=>Ew,model:()=>w6,models:()=>r_,moments:()=>vp,movingAverage:()=>BT,mul:()=>z,multiRNNCell:()=>lT,multinomial:()=>dT,neg:()=>bt,nextFrame:()=>aI,norm:()=>hl,notEqual:()=>vo,oneHot:()=>Zu,ones:()=>On,onesLike:()=>rr,op:()=>B,outerProduct:()=>pT,pad:()=>yr,pad1d:()=>hT,pad2d:()=>fT,pad3d:()=>mT,pad4d:()=>gT,pool:()=>Aw,pow:()=>Ds,prelu:()=>wp,print:()=>Ux,prod:()=>Dw,profile:()=>dO,raggedGather:()=>bT,raggedRange:()=>yT,raggedTensorToTensor:()=>vT,rand:()=>xT,randomGamma:()=>ST,randomNormal:()=>lm,randomStandardNormal:()=>CT,randomUniform:()=>$a,randomUniformInt:()=>TT,range:()=>xo,ready:()=>fO,real:()=>Ju,reciprocal:()=>Ow,registerBackend:()=>Jf,registerCallbackConstructor:()=>k6,registerGradient:()=>yC,registerKernel:()=>op,registerOp:()=>S5,regularizers:()=>s_,relu:()=>Ke,relu6:()=>dm,removeBackend:()=>mO,reshape:()=>W,reverse:()=>gr,reverse1d:()=>NT,reverse2d:()=>_T,reverse3d:()=>ET,reverse4d:()=>AT,rfft:()=>Sp,round:()=>pm,rsqrt:()=>hm,scalar:()=>xe,scatterND:()=>zT,scatter_util:()=>xm,searchSorted:()=>cm,selu:()=>fm,separableConv2d:()=>Fa,sequential:()=>I6,serialization:()=>re,setBackend:()=>hO,setPlatform:()=>yO,setThreadsCount:()=>Lme,setWasmPath:()=>Ome,setWasmPaths:()=>Mme,setWebGLContext:()=>tA,setdiff1dAsync:()=>DT,shared:()=>Uk,sigmoid:()=>pr,sign:()=>Mw,signal:()=>eN,sin:()=>mm,sinh:()=>gm,slice:()=>Ve,slice1d:()=>Ip,slice2d:()=>bm,slice3d:()=>Ki,slice4d:()=>Qu,slice_util:()=>Kt,softmax:()=>Kr,softplus:()=>qi,spaceToBatchND:()=>xp,sparse:()=>nN,sparseToDense:()=>WT,spectral:()=>QT,split:()=>Mn,sqrt:()=>hn,square:()=>lt,squaredDifference:()=>vm,squeeze:()=>Ra,stack:()=>Dt,step:()=>Xi,stridedSlice:()=>Lw,string:()=>rN,sub:()=>le,sum:()=>ge,sumOutType:()=>Zf,tan:()=>Bw,tanh:()=>bo,tensor:()=>yn,tensor1d:()=>He,tensor2d:()=>Dr,tensor3d:()=>Cp,tensor4d:()=>Rr,tensor5d:()=>$T,tensor6d:()=>FT,tensorScatterUpdate:()=>PT,tensor_util:()=>Wr,test_util:()=>wT,tidy:()=>O,tile:()=>Pn,time:()=>pO,topk:()=>Ww,train:()=>Za,transpose:()=>Re,truncatedNormal:()=>Im,unique:()=>Vw,unregisterGradient:()=>AP,unregisterKernel:()=>EP,unsortedSegmentSum:()=>km,unstack:()=>pt,upcastType:()=>fr,upperBound:()=>OT,util:()=>w,valueAndGrad:()=>ZM,valueAndGrads:()=>JM,variable:()=>Uw,variableGrads:()=>oT,version:()=>jme,version_converter:()=>Rq,version_core:()=>IV,version_cpu:()=>PK,version_layers:()=>_I,version_wasm:()=>zme,version_webgl:()=>See,webgl:()=>Cee,webgl_util:()=>eA,where:()=>nn,whereAsync:()=>Gw,zeros:()=>kt,zerosLike:()=>je});var FR=Object.create,Ex=Object.defineProperty,RR=Object.getOwnPropertyDescriptor,eC=Object.getOwnPropertyNames,PR=Object.getPrototypeOf,OR=Object.prototype.hasOwnProperty,Vt=(e,t)=>function(){return t||(0,e[eC(e)[0]])((t={exports:{}}).exports,t),t.exports},Ee=(e,t)=>{for(var n in t)Ex(e,n,{get:t[n],enumerable:!0})},MR=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of eC(t))!OR.call(e,s)&&s!==n&&Ex(e,s,{get:()=>t[s],enumerable:!(r=RR(t,s))||r.enumerable});return e},ka=(e,t,n)=>(n=e!=null?FR(PR(e)):{},MR(t||!e||!e.__esModule?Ex(n,"default",{value:e,enumerable:!0}):n,e)),LR=Vt({"node_modules/.pnpm/long@4.0.0/node_modules/long/src/long.js"(e,t){"use strict";t.exports=r;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(R){}function r(R,C,L){this.low=R|0,this.high=C|0,this.unsigned=!!L}r.prototype.__isLong__,Object.defineProperty(r.prototype,"__isLong__",{value:!0});function s(R){return(R&&R.__isLong__)===!0}r.isLong=s;var a={},o={};function i(R,C){var L,U,H;return C?(R>>>=0,(H=0<=R&&R<256)&&(U=o[R],U)?U:(L=c(R,(R|0)<0?-1:0,!0),H&&(o[R]=L),L)):(R|=0,(H=-128<=R&&R<128)&&(U=a[R],U)?U:(L=c(R,R<0?-1:0,!1),H&&(a[R]=L),L))}r.fromInt=i;function u(R,C){if(isNaN(R))return C?x:v;if(C){if(R<0)return x;if(R>=m)return $}else{if(R<=-b)return F;if(R+1>=b)return E}return R<0?u(-R,C).neg():c(R%g|0,R/g|0,C)}r.fromNumber=u;function c(R,C,L){return new r(R,C,L)}r.fromBits=c;var l=Math.pow;function p(R,C,L){if(R.length===0)throw Error("empty string");if(R==="NaN"||R==="Infinity"||R==="+Infinity"||R==="-Infinity")return v;if(typeof C=="number"?(L=C,C=!1):C=!!C,L=L||10,L<2||360)throw Error("interior hyphen");if(U===0)return p(R.substring(1),C,L).neg();for(var H=u(l(L,8)),K=v,q=0;q>>0:this.low},D.toNumber=function(){return this.unsigned?(this.high>>>0)*g+(this.low>>>0):this.high*g+(this.low>>>0)},D.toString=function(C){if(C=C||10,C<2||36>>0,se=ee.toString(C);if(q=J,q.isZero())return se+Z;for(;se.length<6;)se="0"+se;Z=""+se+Z}},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(F)?64:this.neg().getNumBitsAbs();for(var C=this.high!=0?this.high:this.low,L=31;L>0&&!(C&1<=0},D.isOdd=function(){return(this.low&1)===1},D.isEven=function(){return(this.low&1)===0},D.equals=function(C){return s(C)||(C=d(C)),this.unsigned!==C.unsigned&&this.high>>>31===1&&C.high>>>31===1?!1:this.high===C.high&&this.low===C.low},D.eq=D.equals,D.notEquals=function(C){return!this.eq(C)},D.neq=D.notEquals,D.ne=D.notEquals,D.lessThan=function(C){return this.comp(C)<0},D.lt=D.lessThan,D.lessThanOrEqual=function(C){return this.comp(C)<=0},D.lte=D.lessThanOrEqual,D.le=D.lessThanOrEqual,D.greaterThan=function(C){return this.comp(C)>0},D.gt=D.greaterThan,D.greaterThanOrEqual=function(C){return this.comp(C)>=0},D.gte=D.greaterThanOrEqual,D.ge=D.greaterThanOrEqual,D.compare=function(C){if(s(C)||(C=d(C)),this.eq(C))return 0;var L=this.isNegative(),U=C.isNegative();return L&&!U?-1:!L&&U?1:this.unsigned?C.high>>>0>this.high>>>0||C.high===this.high&&C.low>>>0>this.low>>>0?-1:1:this.sub(C).isNegative()?-1:1},D.comp=D.compare,D.negate=function(){return!this.unsigned&&this.eq(F)?F:this.not().add(k)},D.neg=D.negate,D.add=function(C){s(C)||(C=d(C));var L=this.high>>>16,U=this.high&65535,H=this.low>>>16,K=this.low&65535,q=C.high>>>16,Z=C.high&65535,J=C.low>>>16,ee=C.low&65535,se=0,te=0,oe=0,ne=0;return ne+=K+ee,oe+=ne>>>16,ne&=65535,oe+=H+J,te+=oe>>>16,oe&=65535,te+=U+Z,se+=te>>>16,te&=65535,se+=L+q,se&=65535,c(oe<<16|ne,se<<16|te,this.unsigned)},D.subtract=function(C){return s(C)||(C=d(C)),this.add(C.neg())},D.sub=D.subtract,D.multiply=function(C){if(this.isZero())return v;if(s(C)||(C=d(C)),n){var L=n.mul(this.low,this.high,C.low,C.high);return c(L,n.get_high(),this.unsigned)}if(C.isZero())return v;if(this.eq(F))return C.isOdd()?F:v;if(C.eq(F))return this.isOdd()?F:v;if(this.isNegative())return C.isNegative()?this.neg().mul(C.neg()):this.neg().mul(C).neg();if(C.isNegative())return this.mul(C.neg()).neg();if(this.lt(y)&&C.lt(y))return u(this.toNumber()*C.toNumber(),this.unsigned);var U=this.high>>>16,H=this.high&65535,K=this.low>>>16,q=this.low&65535,Z=C.high>>>16,J=C.high&65535,ee=C.low>>>16,se=C.low&65535,te=0,oe=0,ne=0,de=0;return de+=q*se,ne+=de>>>16,de&=65535,ne+=K*se,oe+=ne>>>16,ne&=65535,ne+=q*ee,oe+=ne>>>16,ne&=65535,oe+=H*se,te+=oe>>>16,oe&=65535,oe+=K*ee,te+=oe>>>16,oe&=65535,oe+=q*J,te+=oe>>>16,oe&=65535,te+=U*se+H*ee+K*J+q*Z,te&=65535,c(ne<<16|de,te<<16|oe,this.unsigned)},D.mul=D.multiply,D.divide=function(C){if(s(C)||(C=d(C)),C.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&C.low===-1&&C.high===-1)return this;var L=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,C.low,C.high);return c(L,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?x:v;var U,H,K;if(this.unsigned){if(C.unsigned||(C=C.toUnsigned()),C.gt(this))return x;if(C.gt(this.shru(1)))return S;K=x}else{if(this.eq(F)){if(C.eq(k)||C.eq(N))return F;if(C.eq(F))return k;var q=this.shr(1);return U=q.div(C).shl(1),U.eq(v)?C.isNegative()?k:N:(H=this.sub(C.mul(U)),K=U.add(H.div(C)),K)}else if(C.eq(F))return this.unsigned?x:v;if(this.isNegative())return C.isNegative()?this.neg().div(C.neg()):this.neg().div(C).neg();if(C.isNegative())return this.div(C.neg()).neg();K=v}for(H=this;H.gte(C);){U=Math.max(1,Math.floor(H.toNumber()/C.toNumber()));for(var Z=Math.ceil(Math.log(U)/Math.LN2),J=Z<=48?1:l(2,Z-48),ee=u(U),se=ee.mul(C);se.isNegative()||se.gt(H);)U-=J,ee=u(U,this.unsigned),se=ee.mul(C);ee.isZero()&&(ee=k),K=K.add(ee),H=H.sub(se)}return K},D.div=D.divide,D.modulo=function(C){if(s(C)||(C=d(C)),n){var L=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,C.low,C.high);return c(L,n.get_high(),this.unsigned)}return this.sub(this.div(C).mul(C))},D.mod=D.modulo,D.rem=D.modulo,D.not=function(){return c(~this.low,~this.high,this.unsigned)},D.and=function(C){return s(C)||(C=d(C)),c(this.low&C.low,this.high&C.high,this.unsigned)},D.or=function(C){return s(C)||(C=d(C)),c(this.low|C.low,this.high|C.high,this.unsigned)},D.xor=function(C){return s(C)||(C=d(C)),c(this.low^C.low,this.high^C.high,this.unsigned)},D.shiftLeft=function(C){return s(C)&&(C=C.toInt()),(C&=63)===0?this:C<32?c(this.low<>>32-C,this.unsigned):c(0,this.low<>>C|this.high<<32-C,this.high>>C,this.unsigned):c(this.high>>C-32,this.high>=0?0:-1,this.unsigned)},D.shr=D.shiftRight,D.shiftRightUnsigned=function(C){if(s(C)&&(C=C.toInt()),C&=63,C===0)return this;var L=this.high;if(C<32){var U=this.low;return c(U>>>C|L<<32-C,L>>>C,this.unsigned)}else return C===32?c(L,0,this.unsigned):c(L>>>C-32,0,this.unsigned)},D.shru=D.shiftRightUnsigned,D.shr_u=D.shiftRightUnsigned,D.toSigned=function(){return this.unsigned?c(this.low,this.high,!1):this},D.toUnsigned=function(){return this.unsigned?this:c(this.low,this.high,!0)},D.toBytes=function(C){return C?this.toBytesLE():this.toBytesBE()},D.toBytesLE=function(){var C=this.high,L=this.low;return[L&255,L>>>8&255,L>>>16&255,L>>>24,C&255,C>>>8&255,C>>>16&255,C>>>24]},D.toBytesBE=function(){var C=this.high,L=this.low;return[C>>>24,C>>>16&255,C>>>8&255,C&255,L>>>24,L>>>16&255,L>>>8&255,L&255]},r.fromBytes=function(C,L,U){return U?r.fromBytesLE(C,L):r.fromBytesBE(C,L)},r.fromBytesLE=function(C,L){return new r(C[0]|C[1]<<8|C[2]<<16|C[3]<<24,C[4]|C[5]<<8|C[6]<<16|C[7]<<24,L)},r.fromBytesBE=function(C,L){return new r(C[4]<<24|C[5]<<16|C[6]<<8|C[7],C[0]<<24|C[1]<<16|C[2]<<8|C[3],L)}}}),BR=Vt({"(disabled):node_modules/.pnpm/node-fetch@2.6.13/node_modules/node-fetch/browser.js"(){"use strict"}}),zR=Vt({"(disabled):util"(){"use strict"}}),WR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/alea.js"(e,t){"use strict";(function(n,r,s){function a(c){var l=this,p=u();l.next=function(){var d=2091639*l.s0+l.c*23283064365386963e-26;return l.s0=l.s1,l.s1=l.s2,l.s2=d-(l.c=d|0)},l.c=1,l.s0=p(" "),l.s1=p(" "),l.s2=p(" "),l.s0-=p(c),l.s0<0&&(l.s0+=1),l.s1-=p(c),l.s1<0&&(l.s1+=1),l.s2-=p(c),l.s2<0&&(l.s2+=1),p=null}function o(c,l){return l.c=c.c,l.s0=c.s0,l.s1=c.s1,l.s2=c.s2,l}function i(c,l){var p=new a(c),d=l&&l.state,h=p.next;return h.int32=function(){return p.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,d&&(typeof d=="object"&&o(d,p),h.state=function(){return o(p,{})}),h}function u(){var c=4022871197,l=function(p){p=String(p);for(var d=0;d>>0,h-=c,h*=c,c=h>>>0,h-=c,c+=h*4294967296}return(c>>>0)*23283064365386963e-26};return l}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.alea=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),VR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor128.js"(e,t){"use strict";(function(n,r,s){function a(u){var c=this,l="";c.x=0,c.y=0,c.z=0,c.w=0,c.next=function(){var d=c.x^c.x<<11;return c.x=c.y,c.y=c.z,c.z=c.w,c.w^=c.w>>>19^d^d>>>8},u===(u|0)?c.x=u:l+=u;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,g=(h+f)/(1<<21);while(g===0);return g},d.int32=l.next,d.quick=d,p&&(typeof p=="object"&&o(p,l),d.state=function(){return o(l,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor128=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),UR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorwow.js"(e,t){"use strict";(function(n,r,s){function a(u){var c=this,l="";c.next=function(){var d=c.x^c.x>>>2;return c.x=c.y,c.y=c.z,c.z=c.w,c.w=c.v,(c.d=c.d+362437|0)+(c.v=c.v^c.v<<4^(d^d<<1))|0},c.x=0,c.y=0,c.z=0,c.w=0,c.v=0,u===(u|0)?c.x=u:l+=u;for(var p=0;p>>4),c.next()}function o(u,c){return c.x=u.x,c.y=u.y,c.z=u.z,c.w=u.w,c.v=u.v,c.d=u.d,c}function i(u,c){var l=new a(u),p=c&&c.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,g=(h+f)/(1<<21);while(g===0);return g},d.int32=l.next,d.quick=d,p&&(typeof p=="object"&&o(p,l),d.state=function(){return o(l,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorwow=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),GR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xorshift7.js"(e,t){"use strict";(function(n,r,s){function a(u){var c=this;c.next=function(){var p=c.x,d=c.i,h,f,g;return h=p[d],h^=h>>>7,f=h^h<<24,h=p[d+1&7],f^=h^h>>>10,h=p[d+3&7],f^=h^h>>>3,h=p[d+4&7],f^=h^h<<7,h=p[d+7&7],h=h^h<<13,f^=h^h<<9,p[d]=f,c.i=d+1&7,f};function l(p,d){var h,f,g=[];if(d===(d|0))f=g[0]=d;else for(d=""+d,h=0;h0;--h)p.next()}l(c,u)}function o(u,c){return c.x=u.x.slice(),c.i=u.i,c}function i(u,c){u==null&&(u=+new Date);var l=new a(u),p=c&&c.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,g=(h+f)/(1<<21);while(g===0);return g},d.int32=l.next,d.quick=d,p&&(p.x&&o(p,l),d.state=function(){return o(l,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xorshift7=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),HR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/xor4096.js"(e,t){"use strict";(function(n,r,s){function a(u){var c=this;c.next=function(){var p=c.w,d=c.X,h=c.i,f,g;return c.w=p=p+1640531527|0,g=d[h+34&127],f=d[h=h+1&127],g^=g<<13,f^=f<<17,g^=g>>>15,f^=f>>>12,g=d[h]=g^f,c.i=h,g+(p^p>>>16)|0};function l(p,d){var h,f,g,m,b,y=[],v=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,v=Math.max(v,d.length)),g=0,m=-32;m>>15,f^=f<<4,f^=f>>>13,m>=0&&(b=b+1640531527|0,h=y[m&127]^=f+b,g=h==0?g+1:0);for(g>=128&&(y[(d&&d.length||0)&127]=-1),g=127,m=4*128;m>0;--m)f=y[g+34&127],h=y[g=g+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,y[g]=f^h;p.w=b,p.X=y,p.i=g}l(c,u)}function o(u,c){return c.i=u.i,c.w=u.w,c.X=u.X.slice(),c}function i(u,c){u==null&&(u=+new Date);var l=new a(u),p=c&&c.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,g=(h+f)/(1<<21);while(g===0);return g},d.int32=l.next,d.quick=d,p&&(p.X&&o(p,l),d.state=function(){return o(l,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.xor4096=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),jR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/lib/tychei.js"(e,t){"use strict";(function(n,r,s){function a(u){var c=this,l="";c.next=function(){var d=c.b,h=c.c,f=c.d,g=c.a;return d=d<<25^d>>>7^h,h=h-f|0,f=f<<24^f>>>8^g,g=g-d|0,c.b=d=d<<20^d>>>12^h,c.c=h=h-f|0,c.d=f<<16^h>>>16^g,c.a=g-d|0},c.a=0,c.b=0,c.c=-1640531527,c.d=1367130551,u===Math.floor(u)?(c.a=u/4294967296|0,c.b=u|0):l+=u;for(var p=0;p>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,g=(h+f)/(1<<21);while(g===0);return g},d.int32=l.next,d.quick=d,p&&(typeof p=="object"&&o(p,l),d.state=function(){return o(l,{})}),d}r&&r.exports?r.exports=i:s&&s.amd?s(function(){return i}):this.tychei=i})(e,typeof t=="object"&&t,typeof define=="function"&&define)}}),qR=Vt({"(disabled):crypto"(){"use strict"}}),KR=Vt({"node_modules/.pnpm/seedrandom@3.0.5/node_modules/seedrandom/seedrandom.js"(e,t){"use strict";(function(n,r,s){var a=256,o=6,i=52,u="random",c=s.pow(a,o),l=s.pow(2,i),p=l*2,d=a-1,h;function f(k,S,N){var E=[];S=S==!0?{entropy:!0}:S||{};var $=y(b(S.entropy?[k,x(r)]:k==null?v():k,3),E),F=new g(E),D=function(){for(var R=F.g(o),C=c,L=0;R=p;)R/=2,C/=2,L>>>=1;return(R+L)/C};return D.int32=function(){return F.g(4)|0},D.quick=function(){return F.g(4)/4294967296},D.double=D,y(x(F.S),r),(S.pass||N||function(R,C,L,U){return U&&(U.S&&m(U,F),R.state=function(){return m(F,{})}),L?(s[u]=R,C):R})(D,$,"global"in S?S.global:this==s,S.state)}function g(k){var S,N=k.length,E=this,$=0,F=E.i=E.j=0,D=E.S=[];for(N||(k=[N++]);${var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(s){s=s||{};function a(){return ce.buffer!=Le&&xt(ce.buffer),ot}function o(){return ce.buffer!=Le&&xt(ce.buffer),jn}function i(){return ce.buffer!=Le&&xt(ce.buffer),$t}function u(){return ce.buffer!=Le&&xt(ce.buffer),ln}function c(){return ce.buffer!=Le&&xt(ce.buffer),Sr}function l(){return ce.buffer!=Le&&xt(ce.buffer),wn}function p(){return ce.buffer!=Le&&xt(ce.buffer),qn}var d=typeof s!="undefined"?s:{},h,f;d.ready=new Promise(function(P,j){h=P,f=j});var g;typeof process!="undefined"&&process.listeners&&(g={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var m=Object.assign({},d),b=[],y="./this.program",v=(P,j)=>{throw j},x=typeof window=="object",k=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",N=d.ENVIRONMENT_IS_PTHREAD||!1,E="";function $(P){return d.locateFile?d.locateFile(P,E):E+P}var F,D,R,C;function L(P){if(P instanceof ja)return;J("exiting due to exception: "+P)}if(S){var U=Ax(),H=nC();k?E=H.dirname(E)+"/":E=__dirname+"/",F=(j,ue)=>(j=Eu(j)?new URL(j):H.normalize(j),U.readFileSync(j,ue?void 0:"utf8")),R=j=>{var ue=F(j,!0);return ue.buffer||(ue=new Uint8Array(ue)),ue},D=(j,ue,Se)=>{j=Eu(j)?new URL(j):H.normalize(j),U.readFile(j,function(Pe,$e){Pe?Se(Pe):ue($e.buffer)})},process.argv.length>1&&(y=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),process.on("uncaughtException",function(j){if(!(j instanceof ja))throw j}),process.on("unhandledRejection",function(j){throw j}),v=(j,ue)=>{if(Tr())throw process.exitCode=j,ue;L(ue),process.exit(j)},d.inspect=function(){return"[Emscripten Module object]"};let P;try{P=XR()}catch(j){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),j}global.Worker=P.Worker}else(x||k)&&(k?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof r!="undefined"&&r&&(E=r),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",S||(F=P=>{var j=new XMLHttpRequest;return j.open("GET",P,!1),j.send(null),j.responseText},k&&(R=P=>{var j=new XMLHttpRequest;return j.open("GET",P,!1),j.responseType="arraybuffer",j.send(null),new Uint8Array(j.response)}),D=(P,j,ue)=>{var Se=new XMLHttpRequest;Se.open("GET",P,!0),Se.responseType="arraybuffer",Se.onload=()=>{if(Se.status==200||Se.status==0&&Se.response){j(Se.response);return}ue()},Se.onerror=ue,Se.send(null)}),C=P=>document.title=P);S&&typeof performance=="undefined"&&(global.performance=YR().performance);var K=console.log.bind(console),q=console.warn.bind(console);S&&(K=P=>U.writeSync(1,P+` `),q=P=>U.writeSync(2,P+` `));var Z=d.print||K,J=d.printErr||q;Object.assign(d,m),m=null,d.arguments&&(b=d.arguments),d.thisProgram&&(y=d.thisProgram),d.quit&&(v=d.quit);var ee=4,se=Atomics.load,te=Atomics.store,oe=Atomics.compareExchange,ne;d.wasmBinary&&(ne=d.wasmBinary);var de=d.noExitRuntime||!0;typeof WebAssembly!="object"&&Ha("no native wasm support detected");var ce,we,ve=!1,Ce;function Ae(P,j){P||Ha(j)}var qe=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function at(P,j,ue){j>>>=0;for(var Se=j+ue,Pe=j;P[Pe]&&!(Pe>=Se);)++Pe;if(Pe-j>16&&P.buffer&&qe)return qe.decode(P.buffer instanceof SharedArrayBuffer?P.slice(j,Pe):P.subarray(j,Pe));for(var $e="";j>10,56320|cr&1023)}}return $e}function ft(P,j){return P>>>=0,P?at(o(),P,j):""}function st(P,j,ue,Se){if(ue>>>=0,!(Se>0))return 0;for(var Pe=ue,$e=ue+Se-1,me=0;me=55296&&Ie<=57343){var Nt=P.charCodeAt(++me);Ie=65536+((Ie&1023)<<10)|Nt&1023}if(Ie<=127){if(ue>=$e)break;j[ue++>>>0]=Ie}else if(Ie<=2047){if(ue+1>=$e)break;j[ue++>>>0]=192|Ie>>6,j[ue++>>>0]=128|Ie&63}else if(Ie<=65535){if(ue+2>=$e)break;j[ue++>>>0]=224|Ie>>12,j[ue++>>>0]=128|Ie>>6&63,j[ue++>>>0]=128|Ie&63}else{if(ue+3>=$e)break;j[ue++>>>0]=240|Ie>>18,j[ue++>>>0]=128|Ie>>12&63,j[ue++>>>0]=128|Ie>>6&63,j[ue++>>>0]=128|Ie&63}}return j[ue>>>0]=0,ue-Pe}function Je(P,j,ue){return st(P,o(),j,ue)}var Le,ot,jn,$t,kr,ln,Sr,wn,qn;N&&(Le=d.buffer);function xt(P){Le=P,d.HEAP8=ot=new Int8Array(P),d.HEAP16=$t=new Int16Array(P),d.HEAP32=ln=new Int32Array(P),d.HEAPU8=jn=new Uint8Array(P),d.HEAPU16=kr=new Uint16Array(P),d.HEAPU32=Sr=new Uint32Array(P),d.HEAPF32=wn=new Float32Array(P),d.HEAPF64=qn=new Float64Array(P)}var Fn=d.INITIAL_MEMORY||16777216;if(N)ce=d.wasmMemory,Le=d.buffer;else if(d.wasmMemory)ce=d.wasmMemory;else if(ce=new WebAssembly.Memory({initial:Fn/65536,maximum:65536,shared:!0}),!(ce.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"),S&&J("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and/or recent version)"),Error("bad memory");ce&&(Le=ce.buffer),Fn=Le.byteLength,xt(Le);var gn,es=[],qs=[],Cr=[],jl=!1;function Tr(){return de}function Ks(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)$g(d.preRun.shift());Kl(es)}function Jt(){jl=!0,!N&&Kl(qs)}function sh(){if(!N){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)nS(d.postRun.shift());Kl(Cr)}}function $g(P){es.unshift(P)}function Fg(P){qs.unshift(P)}function nS(P){Cr.unshift(P)}var Xs=0,_u=null,ws=null;function Rg(P){Xs++,d.monitorRunDependencies&&d.monitorRunDependencies(Xs)}function ah(P){if(Xs--,d.monitorRunDependencies&&d.monitorRunDependencies(Xs),Xs==0&&(_u!==null&&(clearInterval(_u),_u=null),ws)){var j=ws;ws=null,j()}}function Ha(P){d.onAbort&&d.onAbort(P),P="Aborted("+P+")",J(P),ve=!0,Ce=1,P+=". Build with -sASSERTIONS for more info.";var j=new WebAssembly.RuntimeError(P);throw f(j),j}var Pg="data:application/octet-stream;base64,";function oh(P){return P.startsWith(Pg)}function Eu(P){return P.startsWith("file://")}var bn;bn="tfjs-backend-wasm-threaded-simd.wasm",oh(bn)||(bn=$(bn));function ih(P){try{if(P==bn&&ne)return new Uint8Array(ne);if(R)return R(P);throw"both async and sync fetching of the wasm failed"}catch(j){Ha(j)}}function Og(){if(!ne&&(x||k)){if(typeof fetch=="function"&&!Eu(bn))return fetch(bn,{credentials:"same-origin"}).then(function(P){if(!P.ok)throw"failed to load wasm binary file at '"+bn+"'";return P.arrayBuffer()}).catch(function(){return ih(bn)});if(D)return new Promise(function(P,j){D(bn,function(ue){P(new Uint8Array(ue))},j)})}return Promise.resolve().then(function(){return ih(bn)})}function Mg(){var P={env:xh,wasi_snapshot_preview1:xh};function j(me,Ie){var Nt=me.exports;if(d.asm=Nt,jg(d.asm._emscripten_tls_init),gn=d.asm.__indirect_function_table,Fg(d.asm.__wasm_call_ctors),we=Ie,!N){var cr=De.unusedWorkers.length;De.unusedWorkers.forEach(function(ks){De.loadWasmModuleToWorker(ks,function(){--cr||ah("wasm-instantiate")})})}}N||Rg("wasm-instantiate");function ue(me){j(me.instance,me.module)}function Se(me){return Og().then(function(Ie){return WebAssembly.instantiate(Ie,P)}).then(function(Ie){return Ie}).then(me,function(Ie){J("failed to asynchronously prepare wasm: "+Ie),Ha(Ie)})}function Pe(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!oh(bn)&&!Eu(bn)&&!S&&typeof fetch=="function"?fetch(bn,{credentials:"same-origin"}).then(function(me){var Ie=WebAssembly.instantiateStreaming(me,P);return Ie.then(ue,function(Nt){return J("wasm streaming compile failed: "+Nt),J("falling back to ArrayBuffer instantiation"),Se(ue)})}):Se(ue)}if(d.instantiateWasm)try{var $e=d.instantiateWasm(P,j);return $e}catch(me){J("Module.instantiateWasm callback failed with error: "+me),f(me)}return Pe().catch(f),{}}var rS,sS,uh={};function ja(P){this.name="ExitStatus",this.message="Program terminated with exit("+P+")",this.status=P}function Lg(P){var j=De.pthreads[P];delete De.pthreads[P],j.terminate(),uv(P),De.runningWorkers.splice(De.runningWorkers.indexOf(j),1),j.pthread_ptr=0}function Bg(P){var j=De.pthreads[P];j.postMessage({cmd:"cancel"})}function ql(P){var j=De.pthreads[P];Ae(j),De.returnWorkerToPool(j)}function zg(P){var j=De.getNewWorker();if(!j)return 6;De.runningWorkers.push(j),De.pthreads[P.pthread_ptr]=j,j.pthread_ptr=P.pthread_ptr;var ue={cmd:"run",start_routine:P.startRoutine,arg:P.arg,pthread_ptr:P.pthread_ptr};return j.runPthread=()=>{S&&j.ref(),j.postMessage(ue,P.transferList),delete j.runPthread},j.loaded&&j.runPthread(),0}var ch={varargs:void 0,get:function(){ch.varargs+=4;var P=u()[ch.varargs-4>>>2];return P},getStr:function(P){var j=ft(P);return j}};function lh(P){if(N)return Ys(1,1,P);Ce=P,Tr()||(De.terminateAllThreads(),d.onExit&&d.onExit(P),ve=!0),v(P,new ja(P))}function Wg(P,j){if(Ce=P,!j&&N)throw ph(P),"unwind";lh(P)}var dh=Wg;function Vg(P){if(P instanceof ja||P=="unwind")return Ce;v(1,P)}var De={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){N?De.initWorker():De.initMainThread()},initMainThread:function(){for(var P=8;P--;)De.allocateUnusedWorker()},initWorker:function(){de=!1},setExitStatus:function(P){Ce=P},terminateAllThreads:function(){for(var P of Object.values(De.pthreads))De.returnWorkerToPool(P);for(var P of De.unusedWorkers)P.terminate();De.unusedWorkers=[]},returnWorkerToPool:function(P){var j=P.pthread_ptr;delete De.pthreads[j],De.unusedWorkers.push(P),De.runningWorkers.splice(De.runningWorkers.indexOf(P),1),P.pthread_ptr=0,S&&P.unref(),uv(j)},receiveObjectTransfer:function(P){},threadInitTLS:function(){De.tlsInitFunctions.forEach(P=>P())},loadWasmModuleToWorker:function(P,j){P.onmessage=$e=>{var me=$e.data,Ie=me.cmd;if(P.pthread_ptr&&(De.currentProxiedOperationCallerThread=P.pthread_ptr),me.targetThread&&me.targetThread!=Th()){var Nt=De.pthreads[me.targetThread];Nt?Nt.postMessage(me,me.transferList):J('Internal error! Worker sent a message "'+Ie+'" to target pthread '+me.targetThread+", but that thread no longer exists!"),De.currentProxiedOperationCallerThread=void 0;return}Ie==="processProxyingQueue"?Xl(me.queue):Ie==="spawnThread"?zg(me):Ie==="cleanupThread"?ql(me.thread):Ie==="killThread"?Lg(me.thread):Ie==="cancelThread"?Bg(me.thread):Ie==="loaded"?(P.loaded=!0,S&&P.unref(),j&&j(P),P.runPthread&&P.runPthread()):Ie==="print"?Z("Thread "+me.threadId+": "+me.text):Ie==="printErr"?J("Thread "+me.threadId+": "+me.text):Ie==="alert"?alert("Thread "+me.threadId+": "+me.text):me.target==="setimmediate"?P.postMessage(me):Ie==="callHandler"?d[me.handler](...me.args):Ie&&J("worker sent an unknown command "+Ie),De.currentProxiedOperationCallerThread=void 0},P.onerror=$e=>{var me="worker sent an error!";throw J(me+" "+$e.filename+":"+$e.lineno+": "+$e.message),$e},S&&(P.on("message",function($e){P.onmessage({data:$e})}),P.on("error",function($e){P.onerror($e)}),P.on("detachedExit",function(){}));var ue=[],Se=["onExit","onAbort","print","printErr"];for(var Pe of Se)d.hasOwnProperty(Pe)&&ue.push(Pe);P.postMessage({cmd:"load",handlers:ue,urlOrBlob:d.mainScriptUrlOrBlob||r,wasmMemory:ce,wasmModule:we})},allocateUnusedWorker:function(){var P,j=$("tfjs-backend-wasm-threaded-simd.worker.js");P=new Worker(j),De.unusedWorkers.push(P)},getNewWorker:function(){return De.unusedWorkers.length==0&&(De.allocateUnusedWorker(),De.loadWasmModuleToWorker(De.unusedWorkers[0])),De.unusedWorkers.pop()}};d.PThread=De;function Kl(P){for(;P.length>0;)P.shift()(d)}function Ug(){var P=Th(),j=u()[P+52>>>2],ue=u()[P+56>>>2],Se=j-ue;lS(j,Se),Nh(j)}d.establishStackSpace=Ug;function ph(P){if(N)return Ys(2,0,P);try{dh(P)}catch(j){Vg(j)}}var Au=[];function Gg(P){var j=Au[P];return j||(P>=Au.length&&(Au.length=P+1),Au[P]=j=gn.get(P)),j}function Hg(P,j){var ue=Gg(P)(j);Tr()?De.setExitStatus(ue):cS(ue)}d.invokeEntryPoint=Hg;function jg(P){De.tlsInitFunctions.push(P)}function qg(P){oS(P,!k,1,!x),De.threadInitTLS()}function Kg(P){N?postMessage({cmd:"cleanupThread",thread:P}):ql(P)}function hh(P,j,ue,Se){return N?Ys(3,1,P,j,ue,Se):fh(P,j,ue,Se)}function fh(P,j,ue,Se){if(typeof SharedArrayBuffer=="undefined")return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var Pe=[],$e=0;if(N&&(Pe.length===0||$e))return hh(P,j,ue,Se);if($e)return $e;var me={startRoutine:ue,pthread_ptr:P,arg:Se,transferList:Pe};return N?(me.cmd="spawnThread",postMessage(me,Pe),0):zg(me)}function Xg(){return 65536}var Yg=!0;function Zg(){return Yg}function Xl(P){Atomics.store(u(),P>>2,1),Th()&&uS(P),Atomics.compareExchange(u(),P>>2,1,0)}d.executeNotifiedProxyingQueue=Xl;function Jg(P,j,ue,Se){if(P==j)setTimeout(()=>Xl(Se));else if(N)postMessage({targetThread:P,cmd:"processProxyingQueue",queue:Se});else{var Pe=De.pthreads[P];if(!Pe)return;Pe.postMessage({cmd:"processProxyingQueue",queue:Se})}return 1}function Qg(P,j,ue){return-1}function eb(){Ha("")}function qa(P){qa.shown||(qa.shown={}),qa.shown[P]||(qa.shown[P]=1,S&&(P="warning: "+P),J(P))}function tb(){S||k||qa("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function nb(){return Date.now()}function mh(){return 4294901760}function rb(){return mh()}var Yl;S?Yl=()=>{var P=process.hrtime();return P[0]*1e3+P[1]/1e6}:Yl=()=>performance.timeOrigin+performance.now();function sb(P,j,ue){o().copyWithin(P>>>0,j>>>0,j+ue>>>0)}function ab(){return S?ZR().cpus().length:navigator.hardwareConcurrency}function ob(P){var j=cv(),ue=P();return Nh(j),ue}function Ys(P,j){var ue=arguments.length-2,Se=arguments;return ob(()=>{for(var Pe=ue,$e=_h(Pe*8),me=$e>>3,Ie=0;Ie>>0]=Nt}return iS(P,Pe,$e,j)})}var Zl=[];function ib(P,j,ue){Zl.length=j;for(var Se=ue>>3,Pe=0;Pe>>0];var $e=P<0,me=$e?uh[-P-1]:gb[P];return me.apply(null,Zl)}function ub(P){try{return ce.grow(P-Le.byteLength+65535>>>16),xt(ce.buffer),1}catch(j){}}function cb(P){var j=o().length;if(P=P>>>0,P<=j)return!1;var ue=mh();if(P>ue)return!1;let Se=(Nt,cr)=>Nt+(cr-Nt%cr)%cr;for(var Pe=1;Pe<=4;Pe*=2){var $e=j*(1+.2/Pe);$e=Math.min($e,P+100663296);var me=Math.min(ue,Se(Math.max(P,$e),65536)),Ie=ub(me);if(Ie)return!0}return!1}function lb(){throw"unwind"}function gh(P){return N?Ys(4,1,P):52}function bh(P,j,ue,Se,Pe){return N?Ys(5,1,P,j,ue,Se,Pe):70}var db=[null,[],[]];function pb(P,j){var ue=db[P];j===0||j===10?((P===1?Z:J)(at(ue,0)),ue.length=0):ue.push(j)}function yh(P,j,ue,Se){if(N)return Ys(6,1,P,j,ue,Se);for(var Pe=0,$e=0;$e>>2],Ie=c()[j+4>>>2];j+=8;for(var Nt=0;Nt>>0]);Pe+=Ie}return c()[Se>>>2]=Pe,0}function vh(P){var j=d["_"+P];return j}function hb(P,j){a().set(P,j>>>0)}function fb(P,j,ue,Se,Pe){var $e={string:Kn=>{var Ru=0;if(Kn!=null&&Kn!==0){var hS=(Kn.length<<2)+1;Ru=_h(hS),Je(Kn,Ru,hS)}return Ru},array:Kn=>{var Ru=_h(Kn.length);return hb(Kn,Ru),Ru}};function me(Kn){return j==="string"?ft(Kn):j==="boolean"?!!Kn:Kn}var Ie=vh(P),Nt=[],cr=0;if(Se)for(var ks=0;ksme==="number"||me==="boolean"),$e=j!=="string";return $e&&Pe&&!Se?vh(P):function(){return fb(P,j,ue,arguments,Se)}}De.init();var gb=[null,lh,ph,hh,gh,bh,yh],xh={__emscripten_init_main_thread_js:qg,__emscripten_thread_cleanup:Kg,__pthread_create_js:fh,_emscripten_default_pthread_stack_size:Xg,_emscripten_get_now_is_monotonic:Zg,_emscripten_notify_task_queue:Jg,_emscripten_set_offscreencanvas_size:Qg,abort:eb,emscripten_check_blocking_allowed:tb,emscripten_date_now:nb,emscripten_get_heap_max:rb,emscripten_get_now:Yl,emscripten_memcpy_big:sb,emscripten_num_logical_cores:ab,emscripten_receive_on_main_thread_js:ib,emscripten_resize_heap:cb,emscripten_unwind_to_js_event_loop:lb,exit:dh,fd_close:gh,fd_seek:bh,fd_write:yh,memory:ce||d.wasmMemory},aS=Mg(),bb=d.___wasm_call_ctors=function(){return(bb=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},yb=d._init=function(){return(yb=d._init=d.asm.init).apply(null,arguments)},vb=d._init_with_threads_count=function(){return(vb=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},xb=d._get_threads_count=function(){return(xb=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},wb=d._register_tensor=function(){return(wb=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},Ib=d._dispose_data=function(){return(Ib=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},kb=d._dispose=function(){return(kb=d._dispose=d.asm.dispose).apply(null,arguments)},Sb=d._Abs=function(){return(Sb=d._Abs=d.asm.Abs).apply(null,arguments)},Cb=d._Acos=function(){return(Cb=d._Acos=d.asm.Acos).apply(null,arguments)},Tb=d._Acosh=function(){return(Tb=d._Acosh=d.asm.Acosh).apply(null,arguments)},Nb=d._Add=function(){return(Nb=d._Add=d.asm.Add).apply(null,arguments)},_b=d._AddN=function(){return(_b=d._AddN=d.asm.AddN).apply(null,arguments)},Eb=d._All=function(){return(Eb=d._All=d.asm.All).apply(null,arguments)},Ab=d._Any=function(){return(Ab=d._Any=d.asm.Any).apply(null,arguments)},Db=d._ArgMax=function(){return(Db=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},$b=d._ArgMin=function(){return($b=d._ArgMin=d.asm.ArgMin).apply(null,arguments)},Fb=d._Asin=function(){return(Fb=d._Asin=d.asm.Asin).apply(null,arguments)},Rb=d._Asinh=function(){return(Rb=d._Asinh=d.asm.Asinh).apply(null,arguments)},Pb=d._Atan=function(){return(Pb=d._Atan=d.asm.Atan).apply(null,arguments)},Ob=d._Atan2=function(){return(Ob=d._Atan2=d.asm.Atan2).apply(null,arguments)},Mb=d._Atanh=function(){return(Mb=d._Atanh=d.asm.Atanh).apply(null,arguments)},Lb=d._AvgPool=function(){return(Lb=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Bb=d._AvgPool3D=function(){return(Bb=d._AvgPool3D=d.asm.AvgPool3D).apply(null,arguments)},zb=d._AvgPool3DGrad=function(){return(zb=d._AvgPool3DGrad=d.asm.AvgPool3DGrad).apply(null,arguments)},Wb=d._AvgPoolGrad=function(){return(Wb=d._AvgPoolGrad=d.asm.AvgPoolGrad).apply(null,arguments)},Vb=d._BatchMatMul=function(){return(Vb=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},Ub=d._Bincount=function(){return(Ub=d._Bincount=d.asm.Bincount).apply(null,arguments)},Gb=d._BitwiseAnd=function(){return(Gb=d._BitwiseAnd=d.asm.BitwiseAnd).apply(null,arguments)},Hb=d._Ceil=function(){return(Hb=d._Ceil=d.asm.Ceil).apply(null,arguments)},jb=d._ClipByValue=function(){return(jb=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},qb=d._Conv2D=function(){return(qb=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Kb=d._Conv2DBackpropInput=function(){return(Kb=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Xb=d._Conv3D=function(){return(Xb=d._Conv3D=d.asm.Conv3D).apply(null,arguments)},Yb=d._Conv3DBackpropFilterV2=function(){return(Yb=d._Conv3DBackpropFilterV2=d.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Zb=d._Conv3DBackpropInputV2=function(){return(Zb=d._Conv3DBackpropInputV2=d.asm.Conv3DBackpropInputV2).apply(null,arguments)},Jb=d._Cos=function(){return(Jb=d._Cos=d.asm.Cos).apply(null,arguments)},Qb=d._Cosh=function(){return(Qb=d._Cosh=d.asm.Cosh).apply(null,arguments)},ey=d._CropAndResize=function(){return(ey=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},ty=d._Cumprod=function(){return(ty=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},ny=d._Cumsum=function(){return(ny=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},ry=d._DenseBincount=function(){return(ry=d._DenseBincount=d.asm.DenseBincount).apply(null,arguments)},sy=d._DepthToSpace=function(){return(sy=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},ay=d._DepthwiseConv2dNative=function(){return(ay=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},oy=d._Diag=function(){return(oy=d._Diag=d.asm.Diag).apply(null,arguments)},iy=d._Dilation2D=function(){return(iy=d._Dilation2D=d.asm.Dilation2D).apply(null,arguments)},uy=d._Dilation2DBackpropFilter=function(){return(uy=d._Dilation2DBackpropFilter=d.asm.Dilation2DBackpropFilter).apply(null,arguments)},cy=d._Dilation2DBackpropInput=function(){return(cy=d._Dilation2DBackpropInput=d.asm.Dilation2DBackpropInput).apply(null,arguments)},ly=d._Elu=function(){return(ly=d._Elu=d.asm.Elu).apply(null,arguments)},dy=d._EluGrad=function(){return(dy=d._EluGrad=d.asm.EluGrad).apply(null,arguments)},py=d._Equal=function(){return(py=d._Equal=d.asm.Equal).apply(null,arguments)},hy=d._Erf=function(){return(hy=d._Erf=d.asm.Erf).apply(null,arguments)},fy=d._Exp=function(){return(fy=d._Exp=d.asm.Exp).apply(null,arguments)},my=d._Expm1=function(){return(my=d._Expm1=d.asm.Expm1).apply(null,arguments)},gy=d._FlipLeftRight=function(){return(gy=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},by=d._Floor=function(){return(by=d._Floor=d.asm.Floor).apply(null,arguments)},yy=d._FloorDiv=function(){return(yy=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},vy=d._FusedBatchNorm=function(){return(vy=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},xy=d._FusedConv2D=function(){return(xy=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},wy=d._FusedDepthwiseConv2D=function(){return(wy=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},Iy=d._Gather=function(){return(Iy=d._Gather=d.asm.Gather).apply(null,arguments)},ky=d._GatherNd=function(){return(ky=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},Sy=d._Greater=function(){return(Sy=d._Greater=d.asm.Greater).apply(null,arguments)},Cy=d._GreaterEqual=function(){return(Cy=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},Ty=d._IsFinite=function(){return(Ty=d._IsFinite=d.asm.IsFinite).apply(null,arguments)},Ny=d._IsInf=function(){return(Ny=d._IsInf=d.asm.IsInf).apply(null,arguments)},_y=d._IsNan=function(){return(_y=d._IsNan=d.asm.IsNan).apply(null,arguments)},Ey=d._LRN=function(){return(Ey=d._LRN=d.asm.LRN).apply(null,arguments)},Ay=d._LRNGrad=function(){return(Ay=d._LRNGrad=d.asm.LRNGrad).apply(null,arguments)},Dy=d._LeakyRelu=function(){return(Dy=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},$y=d._Less=function(){return($y=d._Less=d.asm.Less).apply(null,arguments)},Fy=d._LessEqual=function(){return(Fy=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},Ry=d._LinSpace=function(){return(Ry=d._LinSpace=d.asm.LinSpace).apply(null,arguments)},Py=d._Log=function(){return(Py=d._Log=d.asm.Log).apply(null,arguments)},Oy=d._Log1p=function(){return(Oy=d._Log1p=d.asm.Log1p).apply(null,arguments)},My=d._LogicalAnd=function(){return(My=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},Ly=d._LogicalNot=function(){return(Ly=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},By=d._LogicalOr=function(){return(By=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},zy=d._LogicalXor=function(){return(zy=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},Wy=d._Max=function(){return(Wy=d._Max=d.asm.Max).apply(null,arguments)},Vy=d._MaxPool=function(){return(Vy=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},Uy=d._MaxPool3D=function(){return(Uy=d._MaxPool3D=d.asm.MaxPool3D).apply(null,arguments)},Gy=d._MaxPool3DGrad=function(){return(Gy=d._MaxPool3DGrad=d.asm.MaxPool3DGrad).apply(null,arguments)},Hy=d._MaxPoolGrad=function(){return(Hy=d._MaxPoolGrad=d.asm.MaxPoolGrad).apply(null,arguments)},jy=d._MaxPoolWithArgmax=function(){return(jy=d._MaxPoolWithArgmax=d.asm.MaxPoolWithArgmax).apply(null,arguments)},qy=d._Maximum=function(){return(qy=d._Maximum=d.asm.Maximum).apply(null,arguments)},Ky=d._Mean=function(){return(Ky=d._Mean=d.asm.Mean).apply(null,arguments)},Xy=d._Min=function(){return(Xy=d._Min=d.asm.Min).apply(null,arguments)},Yy=d._Minimum=function(){return(Yy=d._Minimum=d.asm.Minimum).apply(null,arguments)},Zy=d._MirrorPad=function(){return(Zy=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},Jy=d._Mod=function(){return(Jy=d._Mod=d.asm.Mod).apply(null,arguments)},Qy=d._Multinomial=function(){return(Qy=d._Multinomial=d.asm.Multinomial).apply(null,arguments)},ev=d._Multiply=function(){return(ev=d._Multiply=d.asm.Multiply).apply(null,arguments)},tv=d._Neg=function(){return(tv=d._Neg=d.asm.Neg).apply(null,arguments)},nv=d._NonMaxSuppressionV3=function(){return(nv=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},rv=d._NonMaxSuppressionV4=function(){return(rv=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},wh=d._NonMaxSuppressionV5=function(){return(wh=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},Ih=d._NotEqual=function(){return(Ih=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},Jl=d._OneHot=function(){return(Jl=d._OneHot=d.asm.OneHot).apply(null,arguments)},sv=d._PadV2=function(){return(sv=d._PadV2=d.asm.PadV2).apply(null,arguments)},av=d._Pow=function(){return(av=d._Pow=d.asm.Pow).apply(null,arguments)},Du=d._Prelu=function(){return(Du=d._Prelu=d.asm.Prelu).apply(null,arguments)},kh=d._Prod=function(){return(kh=d._Prod=d.asm.Prod).apply(null,arguments)},$u=d._RealDiv=function(){return($u=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},Fu=d._Reciprocal=function(){return(Fu=d._Reciprocal=d.asm.Reciprocal).apply(null,arguments)},ov=d._Relu=function(){return(ov=d._Relu=d.asm.Relu).apply(null,arguments)},Y=d._Relu6=function(){return(Y=d._Relu6=d.asm.Relu6).apply(null,arguments)},ie=d._ResizeBilinear=function(){return(ie=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},ke=d._ResizeBilinearGrad=function(){return(ke=d._ResizeBilinearGrad=d.asm.ResizeBilinearGrad).apply(null,arguments)},Ye=d._ResizeNearestNeighbor=function(){return(Ye=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},wt=d._ResizeNearestNeighborGrad=function(){return(wt=d._ResizeNearestNeighborGrad=d.asm.ResizeNearestNeighborGrad).apply(null,arguments)},It=d._Reverse=function(){return(It=d._Reverse=d.asm.Reverse).apply(null,arguments)},Ge=d._RotateWithOffset=function(){return(Ge=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},We=d._Round=function(){return(We=d._Round=d.asm.Round).apply(null,arguments)},Mt=d._Rsqrt=function(){return(Mt=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},ur=d._ScatterNd=function(){return(ur=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},Is=d._SearchSorted=function(){return(Is=d._SearchSorted=d.asm.SearchSorted).apply(null,arguments)},Sh=d._SelectV2=function(){return(Sh=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},Ql=d._Selu=function(){return(Ql=d._Selu=d.asm.Selu).apply(null,arguments)},iv=d._Sigmoid=function(){return(iv=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},In=d._Sign=function(){return(In=d._Sign=d.asm.Sign).apply(null,arguments)},Zs=d._Sin=function(){return(Zs=d._Sin=d.asm.Sin).apply(null,arguments)},Ch=d._Sinh=function(){return(Ch=d._Sinh=d.asm.Sinh).apply(null,arguments)},KF=d._Softmax=function(){return(KF=d._Softmax=d.asm.Softmax).apply(null,arguments)},XF=d._Softplus=function(){return(XF=d._Softplus=d.asm.Softplus).apply(null,arguments)},YF=d._SparseFillEmptyRows=function(){return(YF=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},ZF=d._SparseReshape=function(){return(ZF=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},JF=d._SparseSegmentReduction=function(){return(JF=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},QF=d._SparseToDense=function(){return(QF=d._SparseToDense=d.asm.SparseToDense).apply(null,arguments)},eR=d._Sqrt=function(){return(eR=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},tR=d._Square=function(){return(tR=d._Square=d.asm.Square).apply(null,arguments)},nR=d._SquaredDifference=function(){return(nR=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},rR=d._Step=function(){return(rR=d._Step=d.asm.Step).apply(null,arguments)},sR=d._StridedSlice=function(){return(sR=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},aR=d._Sub=function(){return(aR=d._Sub=d.asm.Sub).apply(null,arguments)},oR=d._Sum=function(){return(oR=d._Sum=d.asm.Sum).apply(null,arguments)},iR=d._Tan=function(){return(iR=d._Tan=d.asm.Tan).apply(null,arguments)},uR=d._Tanh=function(){return(uR=d._Tanh=d.asm.Tanh).apply(null,arguments)},cR=d._TensorScatterUpdate=function(){return(cR=d._TensorScatterUpdate=d.asm.TensorScatterUpdate).apply(null,arguments)},lR=d._Tile=function(){return(lR=d._Tile=d.asm.Tile).apply(null,arguments)},dR=d._TopK=function(){return(dR=d._TopK=d.asm.TopK).apply(null,arguments)},pR=d._Transform=function(){return(pR=d._Transform=d.asm.Transform).apply(null,arguments)},hR=d._Transpose=function(){return(hR=d._Transpose=d.asm.Transpose).apply(null,arguments)},fR=d.__FusedMatMul=function(){return(fR=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},mR=d._malloc=function(){return(mR=d._malloc=d.asm.malloc).apply(null,arguments)},gR=d._free=function(){return(gR=d._free=d.asm.free).apply(null,arguments)},bR=d.__emscripten_tls_init=function(){return(bR=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Th=d._pthread_self=function(){return(Th=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},yR=d.___errno_location=function(){return(yR=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},oS=d.__emscripten_thread_init=function(){return(oS=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},vR=d.__emscripten_thread_crashed=function(){return(vR=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},xR=d._emscripten_main_thread_process_queued_calls=function(){return(xR=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},wR=d._emscripten_main_browser_thread_id=function(){return(wR=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},iS=d._emscripten_run_in_main_runtime_thread_js=function(){return(iS=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},IR=d._emscripten_dispatch_to_thread_=function(){return(IR=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},uS=d.__emscripten_proxy_execute_task_queue=function(){return(uS=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},uv=d.__emscripten_thread_free_data=function(){return(uv=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},cS=d.__emscripten_thread_exit=function(){return(cS=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},lS=d._emscripten_stack_set_limits=function(){return(lS=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},cv=d.stackSave=function(){return(cv=d.stackSave=d.asm.stackSave).apply(null,arguments)},Nh=d.stackRestore=function(){return(Nh=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},_h=d.stackAlloc=function(){return(_h=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},kR=d.dynCall_iijjiiii=function(){return(kR=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},SR=d.dynCall_jiji=function(){return(SR=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=Tr,d.wasmMemory=ce,d.cwrap=mb,d.ExitStatus=ja,d.PThread=De;var Eh;ws=function P(){Eh||dS(),Eh||(ws=P)};function dS(P){if(P=P||b,Xs>0)return;if(N){h(d),Jt(),startWorker(d);return}if(Ks(),Xs>0)return;function j(){Eh||(Eh=!0,d.calledRun=!0,!ve&&(Jt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),sh()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),j()},1)):j()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();dS();var Ah;g&&(Ah={uncaughtException:process.listeners("uncaughtException").filter(function(P){return!g.uncaughtException.indexOf(P)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(P){return!g.unhandledRejection.indexOf(P)>-1})});var Dh;if(typeof WasmBackendModule!="undefined")Dh=WasmBackendModule;else if(typeof s!="undefined")Dh=s;else throw new Error("Could not find wasm module in post.js");if(Ah){var CR=Dh._dispose;Dh._dispose=function(){CR(),Ah.uncaughtException.forEach(function(P){process.removeListener("uncaughtException",P)}),Ah.unhandledRejection.forEach(function(P){process.removeListener("unhandledRejection",P)})}}return s.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)}}),QR=Vt({"node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@4.16.0_@tensorflow+tfjs-core@4.16.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js"(e,t){"use strict";t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8")+"//# sourceURL="+f)},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}var initializedJS=false;var pendingNotifiedProxyingQueues=[];function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+" ");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=(info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports};self.onunhandledrejection=e=>{throw e.reason??e};self.startWorker=instance=>{Module=instance;postMessage({"cmd":"loaded"})};self.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;for(const handler of e.data.handlers){Module[handler]=function(){postMessage({cmd:"callHandler",handler:handler,args:[...arguments]})}}Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module)}else if(e.data.cmd==="run"){Module["__emscripten_thread_init"](e.data.pthread_ptr,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInitTLS();if(!initializedJS){pendingNotifiedProxyingQueues.forEach(queue=>{Module["executeNotifiedProxyingQueue"](queue)});pendingNotifiedProxyingQueues=[];initializedJS=true}try{Module["invokeEntryPoint"](e.data.start_routine,e.data.arg)}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processProxyingQueue"){if(initializedJS){Module["executeNotifiedProxyingQueue"](e.data.queue)}else{pendingNotifiedProxyingQueues.push(e.data.queue)}}else if(e.data.cmd){err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}};`}}),eP=Vt({"node_modules/.pnpm/@tensorflow+tfjs-backend-wasm@4.16.0_@tensorflow+tfjs-core@4.16.0/node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(e,t){"use strict";var n=(()=>{var r=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(r=r||__filename),function(s){s=s||{};var a=typeof s!="undefined"?s:{},o,i;a.ready=new Promise(function(Y,ie){o=Y,i=ie});var u;typeof process!="undefined"&&process.listeners&&(u={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var c=Object.assign({},a),l=[],p="./this.program",d=(Y,ie)=>{throw ie},h=typeof window=="object",f=typeof importScripts=="function",g=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",m="";function b(Y){return a.locateFile?a.locateFile(Y,m):m+Y}var y,v,x,k;function S(Y){if(Y instanceof _u)return;F("exiting due to exception: "+Y)}if(g){var N=Ax(),E=nC();f?m=E.dirname(m)+"/":m=__dirname+"/",y=(Y,ie)=>(Y=Ks(Y)?new URL(Y):E.normalize(Y),N.readFileSync(Y,ie?void 0:"utf8")),x=Y=>{var ie=y(Y,!0);return ie.buffer||(ie=new Uint8Array(ie)),ie},v=(Y,ie,ke)=>{Y=Ks(Y)?new URL(Y):E.normalize(Y),N.readFile(Y,function(Ye,wt){Ye?ke(Ye):ie(wt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),l=process.argv.slice(2),process.on("uncaughtException",function(Y){if(!(Y instanceof _u))throw Y}),process.on("unhandledRejection",function(Y){throw Y}),d=(Y,ie)=>{if(jn())throw process.exitCode=Y,ie;S(ie),process.exit(Y)},a.inspect=function(){return"[Emscripten Module object]"}}else(h||f)&&(f?m=self.location.href:typeof document!="undefined"&&document.currentScript&&(m=document.currentScript.src),r&&(m=r),m.indexOf("blob:")!==0?m=m.substr(0,m.replace(/[?#].*/,"").lastIndexOf("/")+1):m="",y=Y=>{var ie=new XMLHttpRequest;return ie.open("GET",Y,!1),ie.send(null),ie.responseText},f&&(x=Y=>{var ie=new XMLHttpRequest;return ie.open("GET",Y,!1),ie.responseType="arraybuffer",ie.send(null),new Uint8Array(ie.response)}),v=(Y,ie,ke)=>{var Ye=new XMLHttpRequest;Ye.open("GET",Y,!0),Ye.responseType="arraybuffer",Ye.onload=()=>{if(Ye.status==200||Ye.status==0&&Ye.response){ie(Ye.response);return}ke()},Ye.onerror=ke,Ye.send(null)},k=Y=>document.title=Y);var $=a.print||console.log.bind(console),F=a.printErr||console.warn.bind(console);Object.assign(a,c),c=null,a.arguments&&(l=a.arguments),a.thisProgram&&(p=a.thisProgram),a.quit&&(d=a.quit);var D=4,R;a.wasmBinary&&(R=a.wasmBinary);var C=a.noExitRuntime||!0;typeof WebAssembly!="object"&&Cr("no native wasm support detected");var L,U=!1,H;function K(Y,ie){Y||Cr(ie)}var q=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Z(Y,ie,ke){ie>>>=0;for(var Ye=ie+ke,wt=ie;Y[wt]&&!(wt>=Ye);)++wt;if(wt-ie>16&&Y.buffer&&q)return q.decode(Y.subarray(ie,wt));for(var It="";ie>10,56320|ur&1023)}}return It}function J(Y,ie){return Y>>>=0,Y?Z(ne,Y,ie):""}function ee(Y,ie,ke,Ye){if(ke>>>=0,!(Ye>0))return 0;for(var wt=ke,It=ke+Ye-1,Ge=0;Ge=55296&&We<=57343){var Mt=Y.charCodeAt(++Ge);We=65536+((We&1023)<<10)|Mt&1023}if(We<=127){if(ke>=It)break;ie[ke++>>>0]=We}else if(We<=2047){if(ke+1>=It)break;ie[ke++>>>0]=192|We>>6,ie[ke++>>>0]=128|We&63}else if(We<=65535){if(ke+2>=It)break;ie[ke++>>>0]=224|We>>12,ie[ke++>>>0]=128|We>>6&63,ie[ke++>>>0]=128|We&63}else{if(ke+3>=It)break;ie[ke++>>>0]=240|We>>18,ie[ke++>>>0]=128|We>>12&63,ie[ke++>>>0]=128|We>>6&63,ie[ke++>>>0]=128|We&63}}return ie[ke>>>0]=0,ke-wt}function se(Y,ie,ke){return ee(Y,ne,ie,ke)}var te,oe,ne,de,ce,we,ve,Ce,Ae;function qe(Y){te=Y,a.HEAP8=oe=new Int8Array(Y),a.HEAP16=de=new Int16Array(Y),a.HEAP32=we=new Int32Array(Y),a.HEAPU8=ne=new Uint8Array(Y),a.HEAPU16=ce=new Uint16Array(Y),a.HEAPU32=ve=new Uint32Array(Y),a.HEAPF32=Ce=new Float32Array(Y),a.HEAPF64=Ae=new Float64Array(Y)}var at=a.INITIAL_MEMORY||16777216,ft,st=[],Je=[],Le=[],ot=!1;function jn(){return C}function $t(){if(a.preRun)for(typeof a.preRun=="function"&&(a.preRun=[a.preRun]);a.preRun.length;)Sr(a.preRun.shift());ws(st)}function kr(){ot=!0,ws(Je)}function ln(){if(a.postRun)for(typeof a.postRun=="function"&&(a.postRun=[a.postRun]);a.postRun.length;)qn(a.postRun.shift());ws(Le)}function Sr(Y){st.unshift(Y)}function wn(Y){Je.unshift(Y)}function qn(Y){Le.unshift(Y)}var xt=0,Fn=null,gn=null;function es(Y){xt++,a.monitorRunDependencies&&a.monitorRunDependencies(xt)}function qs(Y){if(xt--,a.monitorRunDependencies&&a.monitorRunDependencies(xt),xt==0&&(Fn!==null&&(clearInterval(Fn),Fn=null),gn)){var ie=gn;gn=null,ie()}}function Cr(Y){a.onAbort&&a.onAbort(Y),Y="Aborted("+Y+")",F(Y),U=!0,H=1,Y+=". Build with -sASSERTIONS for more info.";var ie=new WebAssembly.RuntimeError(Y);throw i(ie),ie}var jl="data:application/octet-stream;base64,";function Tr(Y){return Y.startsWith(jl)}function Ks(Y){return Y.startsWith("file://")}var Jt;Jt="tfjs-backend-wasm.wasm",Tr(Jt)||(Jt=b(Jt));function sh(Y){try{if(Y==Jt&&R)return new Uint8Array(R);if(x)return x(Y);throw"both async and sync fetching of the wasm failed"}catch(ie){Cr(ie)}}function $g(){if(!R&&(h||f)){if(typeof fetch=="function"&&!Ks(Jt))return fetch(Jt,{credentials:"same-origin"}).then(function(Y){if(!Y.ok)throw"failed to load wasm binary file at '"+Jt+"'";return Y.arrayBuffer()}).catch(function(){return sh(Jt)});if(v)return new Promise(function(Y,ie){v(Jt,function(ke){Y(new Uint8Array(ke))},ie)})}return Promise.resolve().then(function(){return sh(Jt)})}function Fg(){var Y={env:ql,wasi_snapshot_preview1:ql};function ie(Ge,We){var Mt=Ge.exports;a.asm=Mt,L=a.asm.memory,qe(L.buffer),ft=a.asm.__indirect_function_table,wn(a.asm.__wasm_call_ctors),qs("wasm-instantiate")}es("wasm-instantiate");function ke(Ge){ie(Ge.instance)}function Ye(Ge){return $g().then(function(We){return WebAssembly.instantiate(We,Y)}).then(function(We){return We}).then(Ge,function(We){F("failed to asynchronously prepare wasm: "+We),Cr(We)})}function wt(){return!R&&typeof WebAssembly.instantiateStreaming=="function"&&!Tr(Jt)&&!Ks(Jt)&&!g&&typeof fetch=="function"?fetch(Jt,{credentials:"same-origin"}).then(function(Ge){var We=WebAssembly.instantiateStreaming(Ge,Y);return We.then(ke,function(Mt){return F("wasm streaming compile failed: "+Mt),F("falling back to ArrayBuffer instantiation"),Ye(ke)})}):Ye(ke)}if(a.instantiateWasm)try{var It=a.instantiateWasm(Y,ie);return It}catch(Ge){F("Module.instantiateWasm callback failed with error: "+Ge),i(Ge)}return wt().catch(i),{}}var nS,Xs;function _u(Y){this.name="ExitStatus",this.message="Program terminated with exit("+Y+")",this.status=Y}function ws(Y){for(;Y.length>0;)Y.shift()(a)}function Rg(){Cr("")}function ah(){return 4294901760}function Ha(){return ah()}function Pg(Y,ie,ke){ne.copyWithin(Y>>>0,ie>>>0,ie+ke>>>0)}function oh(Y){try{return L.grow(Y-te.byteLength+65535>>>16),qe(L.buffer),1}catch(ie){}}function Eu(Y){var ie=ne.length;Y=Y>>>0;var ke=ah();if(Y>ke)return!1;let Ye=(Mt,ur)=>Mt+(ur-Mt%ur)%ur;for(var wt=1;wt<=4;wt*=2){var It=ie*(1+.2/wt);It=Math.min(It,Y+100663296);var Ge=Math.min(ke,Ye(Math.max(Y,It),65536)),We=oh(Ge);if(We)return!0}return!1}var bn={varargs:void 0,get:function(){bn.varargs+=4;var Y=we[bn.varargs-4>>>2];return Y},getStr:function(Y){var ie=J(Y);return ie}};function ih(Y){return 52}function Og(Y,ie,ke,Ye,wt){return 70}var Mg=[null,[],[]];function rS(Y,ie){var ke=Mg[Y];ie===0||ie===10?((Y===1?$:F)(Z(ke,0)),ke.length=0):ke.push(ie)}function sS(Y,ie,ke,Ye){for(var wt=0,It=0;It>>2],We=ve[ie+4>>>2];ie+=8;for(var Mt=0;Mt>>0]);wt+=We}return ve[Ye>>>2]=wt,0}function uh(Y){var ie=a["_"+Y];return ie}function ja(Y,ie){oe.set(Y,ie>>>0)}function Lg(Y,ie,ke,Ye,wt){var It={string:In=>{var Zs=0;if(In!=null&&In!==0){var Ch=(In.length<<2)+1;Zs=Jl(Ch),se(In,Zs,Ch)}return Zs},array:In=>{var Zs=Jl(In.length);return ja(In,Zs),Zs}};function Ge(In){return ie==="string"?J(In):ie==="boolean"?!!In:In}var We=uh(Y),Mt=[],ur=0;if(Ye)for(var Is=0;IsGe==="number"||Ge==="boolean"),It=ie!=="string";return It&&wt&&!Ye?uh(Y):function(){return Lg(Y,ie,ke,arguments,Ye)}}var ql={abort:Rg,emscripten_get_heap_max:Ha,emscripten_memcpy_big:Pg,emscripten_resize_heap:Eu,fd_close:ih,fd_seek:Og,fd_write:sS},zg=Fg(),ch=a.___wasm_call_ctors=function(){return(ch=a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)},lh=a._init=function(){return(lh=a._init=a.asm.init).apply(null,arguments)},Wg=a._init_with_threads_count=function(){return(Wg=a._init_with_threads_count=a.asm.init_with_threads_count).apply(null,arguments)},dh=a._get_threads_count=function(){return(dh=a._get_threads_count=a.asm.get_threads_count).apply(null,arguments)},Vg=a._register_tensor=function(){return(Vg=a._register_tensor=a.asm.register_tensor).apply(null,arguments)},De=a._dispose_data=function(){return(De=a._dispose_data=a.asm.dispose_data).apply(null,arguments)},Kl=a._dispose=function(){return(Kl=a._dispose=a.asm.dispose).apply(null,arguments)},Ug=a._Abs=function(){return(Ug=a._Abs=a.asm.Abs).apply(null,arguments)},ph=a._Acos=function(){return(ph=a._Acos=a.asm.Acos).apply(null,arguments)},Au=a._Acosh=function(){return(Au=a._Acosh=a.asm.Acosh).apply(null,arguments)},Gg=a._Add=function(){return(Gg=a._Add=a.asm.Add).apply(null,arguments)},Hg=a._AddN=function(){return(Hg=a._AddN=a.asm.AddN).apply(null,arguments)},jg=a._All=function(){return(jg=a._All=a.asm.All).apply(null,arguments)},qg=a._Any=function(){return(qg=a._Any=a.asm.Any).apply(null,arguments)},Kg=a._ArgMax=function(){return(Kg=a._ArgMax=a.asm.ArgMax).apply(null,arguments)},hh=a._ArgMin=function(){return(hh=a._ArgMin=a.asm.ArgMin).apply(null,arguments)},fh=a._Asin=function(){return(fh=a._Asin=a.asm.Asin).apply(null,arguments)},Xg=a._Asinh=function(){return(Xg=a._Asinh=a.asm.Asinh).apply(null,arguments)},Yg=a._Atan=function(){return(Yg=a._Atan=a.asm.Atan).apply(null,arguments)},Zg=a._Atan2=function(){return(Zg=a._Atan2=a.asm.Atan2).apply(null,arguments)},Xl=a._Atanh=function(){return(Xl=a._Atanh=a.asm.Atanh).apply(null,arguments)},Jg=a._AvgPool=function(){return(Jg=a._AvgPool=a.asm.AvgPool).apply(null,arguments)},Qg=a._AvgPool3D=function(){return(Qg=a._AvgPool3D=a.asm.AvgPool3D).apply(null,arguments)},eb=a._AvgPool3DGrad=function(){return(eb=a._AvgPool3DGrad=a.asm.AvgPool3DGrad).apply(null,arguments)},qa=a._AvgPoolGrad=function(){return(qa=a._AvgPoolGrad=a.asm.AvgPoolGrad).apply(null,arguments)},tb=a._BatchMatMul=function(){return(tb=a._BatchMatMul=a.asm.BatchMatMul).apply(null,arguments)},nb=a._Bincount=function(){return(nb=a._Bincount=a.asm.Bincount).apply(null,arguments)},mh=a._BitwiseAnd=function(){return(mh=a._BitwiseAnd=a.asm.BitwiseAnd).apply(null,arguments)},rb=a._Ceil=function(){return(rb=a._Ceil=a.asm.Ceil).apply(null,arguments)},Yl=a._ClipByValue=function(){return(Yl=a._ClipByValue=a.asm.ClipByValue).apply(null,arguments)},sb=a._Conv2D=function(){return(sb=a._Conv2D=a.asm.Conv2D).apply(null,arguments)},ab=a._Conv2DBackpropInput=function(){return(ab=a._Conv2DBackpropInput=a.asm.Conv2DBackpropInput).apply(null,arguments)},ob=a._Conv3D=function(){return(ob=a._Conv3D=a.asm.Conv3D).apply(null,arguments)},Ys=a._Conv3DBackpropFilterV2=function(){return(Ys=a._Conv3DBackpropFilterV2=a.asm.Conv3DBackpropFilterV2).apply(null,arguments)},Zl=a._Conv3DBackpropInputV2=function(){return(Zl=a._Conv3DBackpropInputV2=a.asm.Conv3DBackpropInputV2).apply(null,arguments)},ib=a._Cos=function(){return(ib=a._Cos=a.asm.Cos).apply(null,arguments)},ub=a._Cosh=function(){return(ub=a._Cosh=a.asm.Cosh).apply(null,arguments)},cb=a._CropAndResize=function(){return(cb=a._CropAndResize=a.asm.CropAndResize).apply(null,arguments)},lb=a._Cumprod=function(){return(lb=a._Cumprod=a.asm.Cumprod).apply(null,arguments)},gh=a._Cumsum=function(){return(gh=a._Cumsum=a.asm.Cumsum).apply(null,arguments)},bh=a._DenseBincount=function(){return(bh=a._DenseBincount=a.asm.DenseBincount).apply(null,arguments)},db=a._DepthToSpace=function(){return(db=a._DepthToSpace=a.asm.DepthToSpace).apply(null,arguments)},pb=a._DepthwiseConv2dNative=function(){return(pb=a._DepthwiseConv2dNative=a.asm.DepthwiseConv2dNative).apply(null,arguments)},yh=a._Diag=function(){return(yh=a._Diag=a.asm.Diag).apply(null,arguments)},vh=a._Dilation2D=function(){return(vh=a._Dilation2D=a.asm.Dilation2D).apply(null,arguments)},hb=a._Dilation2DBackpropFilter=function(){return(hb=a._Dilation2DBackpropFilter=a.asm.Dilation2DBackpropFilter).apply(null,arguments)},fb=a._Dilation2DBackpropInput=function(){return(fb=a._Dilation2DBackpropInput=a.asm.Dilation2DBackpropInput).apply(null,arguments)},mb=a._Elu=function(){return(mb=a._Elu=a.asm.Elu).apply(null,arguments)},gb=a._EluGrad=function(){return(gb=a._EluGrad=a.asm.EluGrad).apply(null,arguments)},xh=a._Equal=function(){return(xh=a._Equal=a.asm.Equal).apply(null,arguments)},aS=a._Erf=function(){return(aS=a._Erf=a.asm.Erf).apply(null,arguments)},bb=a._Exp=function(){return(bb=a._Exp=a.asm.Exp).apply(null,arguments)},yb=a._Expm1=function(){return(yb=a._Expm1=a.asm.Expm1).apply(null,arguments)},vb=a._FlipLeftRight=function(){return(vb=a._FlipLeftRight=a.asm.FlipLeftRight).apply(null,arguments)},xb=a._Floor=function(){return(xb=a._Floor=a.asm.Floor).apply(null,arguments)},wb=a._FloorDiv=function(){return(wb=a._FloorDiv=a.asm.FloorDiv).apply(null,arguments)},Ib=a._FusedBatchNorm=function(){return(Ib=a._FusedBatchNorm=a.asm.FusedBatchNorm).apply(null,arguments)},kb=a._FusedConv2D=function(){return(kb=a._FusedConv2D=a.asm.FusedConv2D).apply(null,arguments)},Sb=a._FusedDepthwiseConv2D=function(){return(Sb=a._FusedDepthwiseConv2D=a.asm.FusedDepthwiseConv2D).apply(null,arguments)},Cb=a._Gather=function(){return(Cb=a._Gather=a.asm.Gather).apply(null,arguments)},Tb=a._GatherNd=function(){return(Tb=a._GatherNd=a.asm.GatherNd).apply(null,arguments)},Nb=a._Greater=function(){return(Nb=a._Greater=a.asm.Greater).apply(null,arguments)},_b=a._GreaterEqual=function(){return(_b=a._GreaterEqual=a.asm.GreaterEqual).apply(null,arguments)},Eb=a._IsFinite=function(){return(Eb=a._IsFinite=a.asm.IsFinite).apply(null,arguments)},Ab=a._IsInf=function(){return(Ab=a._IsInf=a.asm.IsInf).apply(null,arguments)},Db=a._IsNan=function(){return(Db=a._IsNan=a.asm.IsNan).apply(null,arguments)},$b=a._LRN=function(){return($b=a._LRN=a.asm.LRN).apply(null,arguments)},Fb=a._LRNGrad=function(){return(Fb=a._LRNGrad=a.asm.LRNGrad).apply(null,arguments)},Rb=a._LeakyRelu=function(){return(Rb=a._LeakyRelu=a.asm.LeakyRelu).apply(null,arguments)},Pb=a._Less=function(){return(Pb=a._Less=a.asm.Less).apply(null,arguments)},Ob=a._LessEqual=function(){return(Ob=a._LessEqual=a.asm.LessEqual).apply(null,arguments)},Mb=a._LinSpace=function(){return(Mb=a._LinSpace=a.asm.LinSpace).apply(null,arguments)},Lb=a._Log=function(){return(Lb=a._Log=a.asm.Log).apply(null,arguments)},Bb=a._Log1p=function(){return(Bb=a._Log1p=a.asm.Log1p).apply(null,arguments)},zb=a._LogicalAnd=function(){return(zb=a._LogicalAnd=a.asm.LogicalAnd).apply(null,arguments)},Wb=a._LogicalNot=function(){return(Wb=a._LogicalNot=a.asm.LogicalNot).apply(null,arguments)},Vb=a._LogicalOr=function(){return(Vb=a._LogicalOr=a.asm.LogicalOr).apply(null,arguments)},Ub=a._LogicalXor=function(){return(Ub=a._LogicalXor=a.asm.LogicalXor).apply(null,arguments)},Gb=a._Max=function(){return(Gb=a._Max=a.asm.Max).apply(null,arguments)},Hb=a._MaxPool=function(){return(Hb=a._MaxPool=a.asm.MaxPool).apply(null,arguments)},jb=a._MaxPool3D=function(){return(jb=a._MaxPool3D=a.asm.MaxPool3D).apply(null,arguments)},qb=a._MaxPool3DGrad=function(){return(qb=a._MaxPool3DGrad=a.asm.MaxPool3DGrad).apply(null,arguments)},Kb=a._MaxPoolGrad=function(){return(Kb=a._MaxPoolGrad=a.asm.MaxPoolGrad).apply(null,arguments)},Xb=a._MaxPoolWithArgmax=function(){return(Xb=a._MaxPoolWithArgmax=a.asm.MaxPoolWithArgmax).apply(null,arguments)},Yb=a._Maximum=function(){return(Yb=a._Maximum=a.asm.Maximum).apply(null,arguments)},Zb=a._Mean=function(){return(Zb=a._Mean=a.asm.Mean).apply(null,arguments)},Jb=a._Min=function(){return(Jb=a._Min=a.asm.Min).apply(null,arguments)},Qb=a._Minimum=function(){return(Qb=a._Minimum=a.asm.Minimum).apply(null,arguments)},ey=a._MirrorPad=function(){return(ey=a._MirrorPad=a.asm.MirrorPad).apply(null,arguments)},ty=a._Mod=function(){return(ty=a._Mod=a.asm.Mod).apply(null,arguments)},ny=a._Multinomial=function(){return(ny=a._Multinomial=a.asm.Multinomial).apply(null,arguments)},ry=a._Multiply=function(){return(ry=a._Multiply=a.asm.Multiply).apply(null,arguments)},sy=a._Neg=function(){return(sy=a._Neg=a.asm.Neg).apply(null,arguments)},ay=a._NonMaxSuppressionV3=function(){return(ay=a._NonMaxSuppressionV3=a.asm.NonMaxSuppressionV3).apply(null,arguments)},oy=a._NonMaxSuppressionV4=function(){return(oy=a._NonMaxSuppressionV4=a.asm.NonMaxSuppressionV4).apply(null,arguments)},iy=a._NonMaxSuppressionV5=function(){return(iy=a._NonMaxSuppressionV5=a.asm.NonMaxSuppressionV5).apply(null,arguments)},uy=a._NotEqual=function(){return(uy=a._NotEqual=a.asm.NotEqual).apply(null,arguments)},cy=a._OneHot=function(){return(cy=a._OneHot=a.asm.OneHot).apply(null,arguments)},ly=a._PadV2=function(){return(ly=a._PadV2=a.asm.PadV2).apply(null,arguments)},dy=a._Pow=function(){return(dy=a._Pow=a.asm.Pow).apply(null,arguments)},py=a._Prelu=function(){return(py=a._Prelu=a.asm.Prelu).apply(null,arguments)},hy=a._Prod=function(){return(hy=a._Prod=a.asm.Prod).apply(null,arguments)},fy=a._RealDiv=function(){return(fy=a._RealDiv=a.asm.RealDiv).apply(null,arguments)},my=a._Reciprocal=function(){return(my=a._Reciprocal=a.asm.Reciprocal).apply(null,arguments)},gy=a._Relu=function(){return(gy=a._Relu=a.asm.Relu).apply(null,arguments)},by=a._Relu6=function(){return(by=a._Relu6=a.asm.Relu6).apply(null,arguments)},yy=a._ResizeBilinear=function(){return(yy=a._ResizeBilinear=a.asm.ResizeBilinear).apply(null,arguments)},vy=a._ResizeBilinearGrad=function(){return(vy=a._ResizeBilinearGrad=a.asm.ResizeBilinearGrad).apply(null,arguments)},xy=a._ResizeNearestNeighbor=function(){return(xy=a._ResizeNearestNeighbor=a.asm.ResizeNearestNeighbor).apply(null,arguments)},wy=a._ResizeNearestNeighborGrad=function(){return(wy=a._ResizeNearestNeighborGrad=a.asm.ResizeNearestNeighborGrad).apply(null,arguments)},Iy=a._Reverse=function(){return(Iy=a._Reverse=a.asm.Reverse).apply(null,arguments)},ky=a._RotateWithOffset=function(){return(ky=a._RotateWithOffset=a.asm.RotateWithOffset).apply(null,arguments)},Sy=a._Round=function(){return(Sy=a._Round=a.asm.Round).apply(null,arguments)},Cy=a._Rsqrt=function(){return(Cy=a._Rsqrt=a.asm.Rsqrt).apply(null,arguments)},Ty=a._ScatterNd=function(){return(Ty=a._ScatterNd=a.asm.ScatterNd).apply(null,arguments)},Ny=a._SearchSorted=function(){return(Ny=a._SearchSorted=a.asm.SearchSorted).apply(null,arguments)},_y=a._SelectV2=function(){return(_y=a._SelectV2=a.asm.SelectV2).apply(null,arguments)},Ey=a._Selu=function(){return(Ey=a._Selu=a.asm.Selu).apply(null,arguments)},Ay=a._Sigmoid=function(){return(Ay=a._Sigmoid=a.asm.Sigmoid).apply(null,arguments)},Dy=a._Sign=function(){return(Dy=a._Sign=a.asm.Sign).apply(null,arguments)},$y=a._Sin=function(){return($y=a._Sin=a.asm.Sin).apply(null,arguments)},Fy=a._Sinh=function(){return(Fy=a._Sinh=a.asm.Sinh).apply(null,arguments)},Ry=a._Softmax=function(){return(Ry=a._Softmax=a.asm.Softmax).apply(null,arguments)},Py=a._Softplus=function(){return(Py=a._Softplus=a.asm.Softplus).apply(null,arguments)},Oy=a._SparseFillEmptyRows=function(){return(Oy=a._SparseFillEmptyRows=a.asm.SparseFillEmptyRows).apply(null,arguments)},My=a._SparseReshape=function(){return(My=a._SparseReshape=a.asm.SparseReshape).apply(null,arguments)},Ly=a._SparseSegmentReduction=function(){return(Ly=a._SparseSegmentReduction=a.asm.SparseSegmentReduction).apply(null,arguments)},By=a._SparseToDense=function(){return(By=a._SparseToDense=a.asm.SparseToDense).apply(null,arguments)},zy=a._Sqrt=function(){return(zy=a._Sqrt=a.asm.Sqrt).apply(null,arguments)},Wy=a._Square=function(){return(Wy=a._Square=a.asm.Square).apply(null,arguments)},Vy=a._SquaredDifference=function(){return(Vy=a._SquaredDifference=a.asm.SquaredDifference).apply(null,arguments)},Uy=a._Step=function(){return(Uy=a._Step=a.asm.Step).apply(null,arguments)},Gy=a._StridedSlice=function(){return(Gy=a._StridedSlice=a.asm.StridedSlice).apply(null,arguments)},Hy=a._Sub=function(){return(Hy=a._Sub=a.asm.Sub).apply(null,arguments)},jy=a._Sum=function(){return(jy=a._Sum=a.asm.Sum).apply(null,arguments)},qy=a._Tan=function(){return(qy=a._Tan=a.asm.Tan).apply(null,arguments)},Ky=a._Tanh=function(){return(Ky=a._Tanh=a.asm.Tanh).apply(null,arguments)},Xy=a._TensorScatterUpdate=function(){return(Xy=a._TensorScatterUpdate=a.asm.TensorScatterUpdate).apply(null,arguments)},Yy=a._Tile=function(){return(Yy=a._Tile=a.asm.Tile).apply(null,arguments)},Zy=a._TopK=function(){return(Zy=a._TopK=a.asm.TopK).apply(null,arguments)},Jy=a._Transform=function(){return(Jy=a._Transform=a.asm.Transform).apply(null,arguments)},Qy=a._Transpose=function(){return(Qy=a._Transpose=a.asm.Transpose).apply(null,arguments)},ev=a.__FusedMatMul=function(){return(ev=a.__FusedMatMul=a.asm._FusedMatMul).apply(null,arguments)},tv=a._malloc=function(){return(tv=a._malloc=a.asm.malloc).apply(null,arguments)},nv=a._free=function(){return(nv=a._free=a.asm.free).apply(null,arguments)},rv=a.___errno_location=function(){return(rv=a.___errno_location=a.asm.__errno_location).apply(null,arguments)},wh=a.stackSave=function(){return(wh=a.stackSave=a.asm.stackSave).apply(null,arguments)},Ih=a.stackRestore=function(){return(Ih=a.stackRestore=a.asm.stackRestore).apply(null,arguments)},Jl=a.stackAlloc=function(){return(Jl=a.stackAlloc=a.asm.stackAlloc).apply(null,arguments)},sv=a.dynCall_iijjiiii=function(){return(sv=a.dynCall_iijjiiii=a.asm.dynCall_iijjiiii).apply(null,arguments)},av=a.dynCall_jiji=function(){return(av=a.dynCall_jiji=a.asm.dynCall_jiji).apply(null,arguments)};a.cwrap=Bg;var Du;gn=function Y(){Du||kh(),Du||(gn=Y)};function kh(Y){if(Y=Y||l,xt>0||($t(),xt>0))return;function ie(){Du||(Du=!0,a.calledRun=!0,!U&&(kr(),o(a),a.onRuntimeInitialized&&a.onRuntimeInitialized(),ln()))}a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),ie()},1)):ie()}if(a.preInit)for(typeof a.preInit=="function"&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();kh();var $u;u&&($u={uncaughtException:process.listeners("uncaughtException").filter(function(Y){return!u.uncaughtException.indexOf(Y)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(Y){return!u.unhandledRejection.indexOf(Y)>-1})});var Fu;if(typeof s!="undefined")Fu=s;else if(typeof WasmBackendModuleThreadedSimd!="undefined")Fu=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if($u){var ov=Fu._dispose;Fu._dispose=function(){ov(),$u.uncaughtException.forEach(function(Y){process.removeListener("uncaughtException",Y)}),$u.unhandledRejection.forEach(function(Y){process.removeListener("unhandledRejection",Y)})}}return s.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)}}),tP=1e-7,nP=1e-4,Rf=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}},Md=class{refCount(e){return Xn("refCount")}incRef(e){return Xn("incRef")}timerAvailable(){return!0}time(e){return Xn("time")}read(e){return Xn("read")}readSync(e){return Xn("readSync")}readToGPU(e,t){return Xn("readToGPU")}numDataIds(){return Xn("numDataIds")}disposeData(e,t){return Xn("disposeData")}write(e,t,n){return Xn("write")}move(e,t,n,r,s){return Xn("move")}createTensorFromGPUData(e,t,n){return Xn("createTensorFromGPUData")}memory(){return Xn("memory")}floatPrecision(){return Xn("floatPrecision")}epsilon(){return this.floatPrecision()===32?tP:nP}dispose(){return Xn("dispose")}};function Xn(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 rC(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,rf(e,t,n)}function rP(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,r=0;for(;n>0;)r=Math.random()*n|0,n--,rf(e,n,r),rf(t,n,r)}function vd(e,t,n){return Math.max(e,Math.min(t,n))}function sP(e){return e%2===0?e:e+1}function rf(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function aP(e){let t=0;for(let n=0;nn+` Shapes ${e} and ${t} must match`)}function _o(e){A(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ut(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n0,n,r){return new Promise((s,a)=>{let o=0,i=()=>{if(e()){s();return}o++;let u=t(o);if(n!=null&&o>=n){a();return}r!=null?r(i,u):setTimeout(i,u)};i()})}function hP(e,t){let n=1,r=-1;for(let a=0;a=0)n*=e[a];else if(e[a]===-1){if(r!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${r} and dim ${a}`);r=a}else if(e[a]<0)throw Error(`Shapes can not be < 0. Found ${e[a]} at dim ${a}`);if(r===-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 s=e.slice();return s[r]=t/n,s}function Fr(e,t){let n=t.length;return e=e==null?t.map((r,s)=>s):[].concat(e),A(e.every(r=>r>=-n&&r`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),A(e.every(r=>Hu(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function aC(e,t){let n=[],r=[],s=t!=null&&Array.isArray(t)&&t.length===0,a=t==null||s?null:Fr(t,e).sort(),o=0;for(let i=0;ii)&&e[i]===1&&(n.push(e[i]),r.push(i)),a[o]<=i&&o++}e[i]!==1&&(n.push(e[i]),r.push(i))}return{newShape:n,keptDims:r}}function oC(e,t){return Dx(e,t)}function Dx(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 iC(e,t){for(let n=0;nt+=n.length),t}function ra(e){return typeof e=="string"||e instanceof String}function lC(e){return typeof e=="boolean"}function dC(e){return typeof e=="number"}function Ld(e){return Array.isArray(e)?Ld(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":dC(e)?"float32":ra(e)?"string":lC(e)?"bool":"float32"}function la(e){return!!(e&&e.constructor&&e.call&&e.apply)}function af(e,t){for(let n=t;n=0;--r)n[r]=n[r+1]*e[r+1];return n}function pC(e,t,n,r=!1){let s=new Array;if(t.length===1){let a=t[0]*(r?2:1);for(let o=0;ou*c)*(r?2:1);for(let u=0;us*a)*(n?2:1);if(r===0)return[];if(r!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return pC(0,e,t,n)}function mP(e,t){if(Array.isArray(e))return e;if(t==="float32")return e instanceof Float32Array?e:new Float32Array(e);if(t==="int32")return e instanceof Int32Array?e:new Int32Array(e);if(t==="bool"||t==="string")return Uint8Array.from(new Int32Array(e));throw new Error(`Unknown dtype ${t}`)}function $x(e,t){let n=Pf(e,t);for(let r=0;rr*s,1);if(t==null||t==="float32")return Wu(e,new Float32Array(n));if(t==="int32")return Wu(e,new Int32Array(n));if(t==="bool")return Wu(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function ar(e){e.forEach(t=>{A(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function bP(e,t,n){if(t===0)return 0;if(t===1)return e[0];let r=e[e.length-1];for(let s=0;s{let[r,s]=n.split(":");this.urlFlags[r]=wP(r,s)})}};function vP(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(xP(t,r[0],r[1]),r.join("="))),t}function xP(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function wP(e,t){let n=t.toLowerCase();return n==="true"||n==="false"?n==="true":`${+n}`===n?+n:t}function G(){return Fx}var Fx=null;function IP(e){Fx=e}var pv;function fC(){if(pv==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");pv=e}return pv}function kP(){let e=fC();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function Rx(e,t){let n=kP();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var cc="Abs",Eo="Acos",Ao="Acosh",Sa="Add",Do="AddN",lc="All",dc="Any",pc="ArgMax",hc="ArgMin",$o="Asin",Fo="Asinh",Ro="Atan",Po="Atanh",Oo="Atan2",Mo="AvgPool",Bd="AvgPoolGrad",fc="AvgPool3D",zd="AvgPool3DGrad",Lo="BatchMatMul",mc="BatchToSpaceND",gc="Bincount",bc="BitwiseAnd",mC="BroadcastTo",Wd="BroadcastArgs",Bo="Cast",zo="Ceil",Ca="ClipByValue",Mf="Complex",Vd="ComplexAbs",yc="Concat",Wo="Conv2D",Lf="Conv2DBackpropFilter",Vo="Conv2DBackpropInput",Uo="Conv3D",vc="Conv3DBackpropFilterV2",xc="Conv3DBackpropInputV2",Go="Cos",Ho="Cosh",wc="Cumprod",jo="Cumsum",Ic="CropAndResize",Ud="DenseBincount",kc="DepthToSpace",qo="DepthwiseConv2dNative",Bf="DepthwiseConv2dNativeBackpropFilter",zf="DepthwiseConv2dNativeBackpropInput",Gd="Diag",Ko="Dilation2D",ju="Dilation2DBackpropInput",qu="Dilation2DBackpropFilter",Wf="Draw",Xo="RealDiv",Vf="Einsum",Yo="Elu",Sc="EluGrad",Zo="Erf",Cc="Equal",Jo="Exp",Tc="ExpandDims",Qo="Expm1",Uf="FFT",Hd="Fill",Nc="FlipLeftRight",ei="Floor",ti="FloorDiv",ni="FusedBatchNorm",_c="GatherV2",Ec="GatherNd",Ac="Greater",ri="GreaterEqual",si="Identity",Gf="IFFT",Hf="Imag",ai="IsFinite",oi="IsInf",ii="IsNan",ui="LeakyRelu",Dc="Less",$c="LessEqual",Fc="LinSpace",ci="Log",li="Log1p",Rc="LogicalAnd",Pc="LogicalNot",Oc="LogicalOr",gC="LogicalXor",bC="LogSoftmax",SP="LowerBound",di="LRN",Mc="LRNGrad",CP="MatrixBandPart",pi="Max",hi="Maximum",fi="MaxPool",jd="MaxPoolGrad",Lc="MaxPool3D",qd="MaxPool3DGrad",Kd="MaxPoolWithArgmax",mi="Mean",gi="Min",bi="Minimum",yi="MirrorPad",vi="Mod",Bc="Multinomial",xi="Multiply",zc="Neg",Wc="NotEqual",Vc="NonMaxSuppressionV3",Uc="NonMaxSuppressionV4",Gc="NonMaxSuppressionV5",Hc="OnesLike",wi="OneHot",jc="Pack",Ii="PadV2",TP="Pool",ki="Pow",Si="Prelu",Ci="Prod",jf="RaggedGather",qf="RaggedRange",Kf="RaggedTensorToTensor",Xd="Range",Xf="Real",Ti="Reciprocal",Ni="Relu",qc="Reshape",_i="ResizeNearestNeighbor",Kc="ResizeNearestNeighborGrad",Ei="ResizeBilinear",Xc="ResizeBilinearGrad",Ai="Relu6",Di="Reverse",$i="Round",Fi="Rsqrt",Yc="ScatterNd",Zc="TensorScatterUpdate",Jc="SearchSorted",Qc="Select",Ri="Selu",el="Slice",Pi="Sin",Oi="Sinh",Mi="Sign",Li="Sigmoid",Bi="Softplus",zi="Sqrt",Wi="Sum",tl="SpaceToBatchND",nl="SplitV",Vi="Softmax",Yd="SparseFillEmptyRows",rl="SparseReshape",Zd="SparseSegmentMean",Jd="SparseSegmentSum",sl="SparseToDense",Ui="SquaredDifference",Qd="Square",ep="StaticRegexReplace",al="StridedSlice",tp="StringNGrams",np="StringSplit",rp="StringToHashBucketFast",Gi="Sub",Hi="Tan",ji="Tanh",Ta="Tile",ol="TopK",il="Transform",_s="Transpose",sp="Unique",ul="Unpack",ap="UnsortedSegmentSum",NP="UpperBound",cl="ZerosLike",Na="Step",of="FromPixels",ll="RotateWithOffset",uo="_FusedMatMul",co="FusedConv2D",lo="FusedDepthwiseConv2D";function na(...e){G().getBool("IS_TEST")||G().getBool("PROD")||console.warn(...e)}function _P(...e){G().getBool("IS_TEST")||G().getBool("PROD")||console.log(...e)}var Ku=Rx("kernelRegistry",()=>new Map),xd=Rx("gradRegistry",()=>new Map);function wd(e,t){let n=Px(e,t);return Ku.get(n)}function Nv(e){return xd.get(e)}function uf(e){let t=Ku.entries(),n=[];for(;;){let{done:r,value:s}=t.next();if(r)break;let[a,o]=s,[i]=a.split("_");i===e&&n.push(o)}return n}function op(e){let{kernelName:t,backendName:n}=e,r=Px(t,n);Ku.has(r)&&na(`The kernel '${t}' for backend '${n}' is already registered`),Ku.set(r,e)}function yC(e){let{kernelName:t}=e;xd.has(t)&&G().getBool("DEBUG")&&na(`Overriding the gradient for '${t}'`),xd.set(t,e)}function EP(e,t){let n=Px(e,t);if(!Ku.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);Ku.delete(n)}function AP(e){if(!xd.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);xd.delete(e)}function DP(e,t){uf(e).forEach(r=>{let s=Object.assign({},r,{backendName:t});op(s)})}function Px(e,t){return`${t}_${e}`}var w={};Ee(w,{arraysEqual:()=>$s,arraysEqualWithNull:()=>sC,assert:()=>A,assertNonNegativeIntegerDimensions:()=>ar,assertNonNull:()=>_o,assertShapesMatch:()=>Nn,bytesFromStringArray:()=>cC,bytesPerElement:()=>sf,checkConversionForErrors:()=>iC,clamp:()=>vd,computeStrides:()=>uc,convertBackendValuesAndArrayBuffer:()=>mP,createScalarValue:()=>MP,createShuffledIndices:()=>dP,decodeString:()=>cf,distSquared:()=>iP,encodeString:()=>up,fetch:()=>BP,fingerPrint64:()=>OP,flatten:()=>da,getArrayFromDType:()=>Dx,getTypedArrayFromDType:()=>oC,hasEncodingLoss:()=>fP,hexToLong:()=>ip,indexToLoc:()=>yP,inferDtype:()=>Ld,inferFromImplicitShape:()=>hP,isBoolean:()=>lC,isFunction:()=>la,isInt:()=>Hu,isNumber:()=>dC,isPromise:()=>Of,isScalarShape:()=>uP,isString:()=>ra,isTypedArray:()=>en,isValidDtype:()=>uC,locToIndex:()=>bP,makeOnesTypedArray:()=>$x,makeZerosNestedTypedArray:()=>gP,makeZerosTypedArray:()=>Pf,nearestDivisor:()=>af,nearestLargerEven:()=>sP,now:()=>Id,parseAxisParam:()=>Fr,randUniform:()=>oP,repeatedTry:()=>pP,rightPad:()=>md,shuffle:()=>rC,shuffleCombo:()=>rP,sizeFromShape:()=>ut,sizeToSquarishShape:()=>lP,squeezeShape:()=>aC,sum:()=>aP,swap:()=>rf,tanh:()=>cP,toNestedArray:()=>Wu,toTypedArray:()=>Yf});function vC(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}var mS=ka(LR()),Ja=mS.default||mS;function ip(e){return Ja.fromString(e,!0,16)}var xC=ip("c3a5c85c97cb3127"),Ya=ip("b492b66fbe98f273"),kn=ip("9ae16a3b2f90404f");function _v(e){return e.xor(e.shru(47))}function wC(e,t,n){let r=e.slice(t,t+n);return Ja.fromBytes(Array.from(r),!0,!0)}function gt(e,t){return wC(e,t,8)}function gS(e,t){return wC(e,t,4)}function Qt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function ia(e,t,n=ip("9ddfea08eb382d69")){let r=e.xor(t).mul(n);r=r.xor(r.shru(47));let s=t.xor(r).mul(n);return s=s.xor(s.shru(47)),s=s.mul(n),s}function $P(e,t,n,r,s,a){s=s.add(e),a=Qt(a.add(s).add(r),21);let o=s;return s=s.add(t),s=s.add(n),a=a.add(Qt(s,44)),[s.add(r),a.add(o)]}function Fh(e,t,n,r){return $P(gt(e,t),gt(e,t+8),gt(e,t+16),gt(e,t+24),n,r)}function FP(e,t=e.length){if(t>=8){let n=kn.add(t*2),r=gt(e,0).add(kn),s=gt(e,t-8),a=Qt(s,37).mul(n).add(r),o=Qt(r,25).add(s).mul(n);return ia(a,o,n)}if(t>=4){let n=kn.add(t*2),r=gS(e,0);return ia(r.shl(3).add(t),gS(e,t-4),n)}if(t>0){let n=e[0],r=e[t>>1],s=e[t-1],a=n+(r<<8),o=t+(s<<2);return _v(kn.mul(a).xor(xC.mul(o))).mul(kn)}return kn}function RP(e,t=e.length){let n=kn.add(t*2),r=gt(e,0).mul(Ya),s=gt(e,8),a=gt(e,t-8).mul(n),o=gt(e,t-16).mul(kn);return ia(Qt(r.add(s),43).add(Qt(a,30)).add(o),r.add(Qt(s.add(kn),18)).add(a),n)}function PP(e,t=e.length){let n=kn.add(t*2),r=gt(e,0).mul(kn),s=gt(e,8),a=gt(e,t-8).mul(n),o=gt(e,t-16).mul(kn),i=Qt(r.add(s),43).add(Qt(a,30)).add(o),u=ia(i,r.add(Qt(s.add(kn),18)).add(a),n),c=gt(e,16).mul(n),l=gt(e,24),p=i.add(gt(e,t-32)).mul(n),d=u.add(gt(e,t-24)).mul(n);return ia(Qt(c.add(l),43).add(Qt(p,30)).add(d),c.add(Qt(l.add(r),18)).add(p),n)}function OP(e,t=e.length){let n=Ja.fromNumber(81,!0);if(t<=32)return t<=16?FP(e,t):RP(e,t);if(t<=64)return PP(e,t);let r=n,s=n.mul(Ya).add(113),a=_v(s.mul(kn).add(113)).mul(kn),o=[Ja.UZERO,Ja.UZERO],i=[Ja.UZERO,Ja.UZERO];r=r.mul(kn).add(gt(e,0));let u=0,c=(t-1>>6)*64,l=c+(t-1&63)-63;do r=Qt(r.add(s).add(o[0]).add(gt(e,u+8)),37).mul(Ya),s=Qt(s.add(o[1]).add(gt(e,u+48)),42).mul(Ya),r=r.xor(i[1]),s=s.add(o[0]).add(gt(e,u+40)),a=Qt(a.add(i[0]),33).mul(Ya),o=Fh(e,u,o[1].mul(Ya),r.add(i[0])),i=Fh(e,u+32,a.add(i[1]),s.add(gt(e,u+16))),[a,r]=[r,a],u+=64;while(u!==c);let p=Ya.add(a.and(255).shl(1));return u=l,i[0]=i[0].add(t-1&63),o[0]=o[0].add(i[0]),i[0]=i[0].add(o[0]),r=Qt(r.add(s).add(o[0]).add(gt(e,u+8)),37).mul(p),s=Qt(s.add(o[1]).add(gt(e,u+48)),42).mul(p),r=r.xor(i[1].mul(9)),s=s.add(o[0].mul(9).add(gt(e,u+40))),a=Qt(a.add(i[0]),33).mul(p),o=Fh(e,u,o[1].mul(p),r.add(i[0])),i=Fh(e,u+32,a.add(i[1]),s.add(gt(e,u+16))),[a,r]=[r,a],ia(ia(o[0],i[0],p).add(_v(s).mul(xC)).add(a),ia(o[1],i[1],p).add(r),p)}function MP(e,t){return t==="string"?up(e):Yf([e],t)}function LP(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Yf(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=da(e)),G().getBool("DEBUG")&&iC(e,t),LP(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 r=0;r{r=n()},a,o=Id();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let u of r)u.dataSync();a=Promise.resolve({kernelMs:Id()-o})}if(G().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let u=0;u{WP(l,c.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:a.then(u=>u.kernelMs),extraInfo:a.then(u=>u.getExtraProfileInfo!=null?u.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:r,inputs:s,extraInfo:a}=e;n.forEach(o=>{Promise.all([o.data(),r,a]).then(i=>{this.logger.logKernelProfile(t,o,i[0],i[1],s,i[2])})})}};function WP(e,t,n){if(t!=="float32")return!1;for(let r=0;r0?f:""} `}}console.log(`%c${i} %c${o} %c${u}D ${l} %c${c} %c${p} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function UP(e,t,n){let r={},s={};for(let u=0;ur[g.id]=!0),h=!0,s[c.id]=!0;break}if(h)break}}let a={};a[n.id]=!0;let o={};for(let u=e.length-1;u>=0;u--){let c=e[u],l=c.inputs;for(let p=0;p=0;s--){let a=t[s],o=[];if(a.outputs.forEach(u=>{let c=e[u.id];c!=null?o.push(c):o.push(null)}),a.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${a.kernelName}.`);let i=a.gradient(o);for(let u in a.inputs){if(!(u in i))throw new Error(`Cannot backprop through input ${u}. Available gradients found: ${Object.keys(i)}.`);let c=n(()=>i[u]());if(c.dtype!=="float32")throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input ${u} must have 'float32' dtype, but has '${c.dtype}'`);let l=a.inputs[u];if(!$s(c.shape,l.shape))throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input '${u}' has shape '${c.shape}', which does not match the shape of the input '${l.shape}'`);if(e[l.id]==null)e[l.id]=c;else{let p=e[l.id];e[l.id]=r(p,c),p.dispose()}}}}var bS=20,ed=3,hv=7;function HP(e,t,n,r){let s=uc(t),a=jP(e,t,n,s),o=t.length,i=Kh(e,t,n,s,a),u=["Tensor"];return r&&(u.push(` dtype: ${n}`),u.push(` rank: ${o}`),u.push(` shape: [${t}]`),u.push(" values:")),u.push(i.map(c=>" "+c).join(` `)),u.join(` `)}function jP(e,t,n,r){let s=ut(t),a=r[r.length-1],o=new Array(a).fill(0),i=t.length,u=n==="complex64"?od(e):e;if(i>1)for(let c=0;cbS){let m=ed*o,b=Array.from(e.slice(0,m)),y=Array.from(e.slice((i-ed)*o,i*o));return n==="complex64"&&(b=od(b),y=od(y)),["["+b.map((v,x)=>ad(v,s[x],n)).join(", ")+", ..., "+y.map((v,x)=>ad(v,s[i-ed+x],n)).join(", ")+"]"]}return["["+(n==="complex64"?od(e):Array.from(e)).map((m,b)=>ad(m,s[b],n)).join(", ")+"]"]}let c=t.slice(1),l=r.slice(1),p=r[0]*o,d=[];if(i>bS){for(let g=0;g0?d[0]+h:"");for(let g=1;g`Length of values '${r}' 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||Dx(t,this.size),this.strides=uc(e)}set(e,...t){t.length===0&&(t=[0]),A(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let r of e){if(r<0||r>=this.shape[t]){let s=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(s)}t++}let n=e[e.length-1];for(let r=0;rcf(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(),zr().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=zr().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>cf(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 zr().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(this.kerasMask&&this.kerasMask.dispose(),zr().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return Mu.print(this,e)}clone(){return this.throwIfDisposed(),Mu.clone(this)}toString(e=!1){let t=this.dataSync();return HP(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),Mu.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),zr().makeVariable(this,e,t,n)}};Object.defineProperty(Ne,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Q(){return Rx("Tensor",()=>Ne)}Q();var pa=class extends Ne{constructor(e,t,n,r){super(e.shape,e.dtype,e.dataId,r),this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!$s(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);zr().disposeTensor(this),this.dataId=e.dataId,zr().incRef(this,null)}dispose(){zr().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(pa,Symbol.hasInstance,{value:e=>e instanceof Ne&&e.assign!=null&&e.assign instanceof Function});var Wr={};Ee(Wr,{assertTypesMatch:()=>CC,getTensorsInContainer:()=>Ox,isTensorInList:()=>JP,makeTypesMatch:()=>At});var Ev;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Ev||(Ev={}));var Av;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Av||(Av={}));var Dv;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(Dv||(Dv={}));var $v;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})($v||($v={}));var Fv;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Fv||(Fv={}));var ZP={float32:$v,int32:Av,bool:Dv,complex64:Fv};function fr(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return ZP[e][t]}function Zf(e){return fr(e,"int32")}function kC(e){return e!=null&&typeof e=="object"&&"texture"in e&&e.texture instanceof WebGLTexture}function SC(e){return typeof GPUBuffer!="undefined"&&e!=null&&typeof e=="object"&&"buffer"in e&&e.buffer instanceof GPUBuffer}function At(e,t){if(e.dtype===t.dtype)return[e,t];let n=fr(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function CC(e,t){A(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function JP(e,t){return t.some(n=>n.id===e.id)}function Ox(e){let t=[];return TC(e,t,new Set),t}function TC(e,t,n){if(e==null)return;if(e instanceof Ne){t.push(e);return}if(!QP(e))return;let r=e;for(let s in r){let a=r[s];n.has(a)||(n.add(a),TC(a,t,n))}}function QP(e){return Array.isArray(e)||typeof e=="object"}function fv(e){return e.kernelName!=null}var yS=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()}},Mx=class Rv{constructor(t){this.ENV=t,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new yS}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let t=this.getSortedBackends();for(let n=0;n{n.setupFunc!=null&&n.setupFunc(this.backendInstance)})}disposeRegisteredKernels(t){uf(t).forEach(r=>{r.disposeFunc!=null&&r.disposeFunc(this.registry[t])})}initializeBackend(t){let n=this.registryFactory[t];if(n==null)throw new Error(`Cannot initialize backend ${t}, no registration found.`);try{let r=n.factory();if(r&&!(r instanceof Md)&&typeof r.then=="function"){let s=++this.pendingBackendInitId,a=r.then(o=>s(sthis.registryFactory[n].priority-this.registryFactory[t].priority)}initializeBackendsAndReturnBest(){let t=this.getSortedBackends();for(let n=0;nthis.startScope(r),()=>this.endScope(s),()=>(s=n(),s instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),s))}scopedRun(t,n,r){t();try{let s=r();return n(),s}catch(s){throw n(),s}}nextTensorId(){return Rv.nextTensorId++}nextVariableId(){return Rv.nextVariableId++}clone(t){let n=M.runKernel(si,{x:t}),r={x:t},s=o=>({x:()=>{let i="float32",u={x:o},c={dtype:i};return M.runKernel(Bo,u,c)}}),a=[];return this.addTapeNode(this.state.activeScope.name,r,[n],s,a,{}),n}runKernel(t,n,r){if(this.backendName==null&&this.backend,!(wd(t,this.backendName)!=null))throw new Error(`Kernel '${t}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:t,inputs:n,attrs:r})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(t,n,r){let s=this.backend.numDataIds(),a=0;r.forEach(u=>{a+=u.dtype==="complex64"?3:1});let o=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=s-n-a-o;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${t}'`)}runKernelFunc(t){let n,r=[],s=this.isTapeOn(),a=this.state.numBytes,o=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let u,c=fv(t)?t.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(fv(t)){let{kernelName:f,inputs:g,attrs:m}=t;this.backendName==null&&this.backend;let b=wd(f,this.backendName);A(b!=null,()=>`Cannot find registered kernel '${f}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();u=b.kernelFunc({inputs:g,attrs:m,backend:this.backend});let v=Array.isArray(u)?u:[u];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(f,y,v);let x=v.map(k=>k.rank!=null?k:this.makeTensorFromTensorInfo(k));if(s){let k=this.getTensorsForGradient(f,g,x);r=this.saveTensorsForBackwardMode(k)}return x}}else{let{forwardFunc:f}=t,g=m=>{s&&(r=m.map(b=>this.keep(this.clone(b))))};i=()=>{let m=this.backend.numDataIds();u=this.tidy(()=>f(this.backend,g));let b=Array.isArray(u)?u:[u];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(c,m,b),b}}let{inputs:l,attrs:p}=t,d=fv(t)?null:t.backwardsFunc,h;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?n=i():(h=this.profiler.profileKernel(c,l,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(h),n=h.outputs)}),s&&this.addTapeNode(c,l,n,d,r,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:c,bytesAdded:this.state.numBytes-a,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-o,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(f=>l[f]!=null?l[f].shape:null),outputShapes:n.map(f=>f.shape),kernelTimeMs:h.timeMs,extraInfo:h.extraInfo}),Array.isArray(u)?n:n[0]}saveTensorsForBackwardMode(t){return t.map(r=>this.keep(this.clone(r)))}getTensorsForGradient(t,n,r){let s=Nv(t);if(s!=null){let a=s.inputsToSave||[],o=s.outputsToSave||[],i;s.saveAllInputs?(A(Array.isArray(n),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(n).map(c=>n[c])):i=a.map(c=>n[c]);let u=r.filter((c,l)=>o[l]);return i.concat(u)}return[]}makeTensor(t,n,r,s){if(t==null)throw new Error("Values passed to engine.makeTensor() are null");r=r||"float32",s=s||this.backend;let a=t;r==="string"&&ra(t[0])&&(a=t.map(u=>up(u)));let o=s.write(a,n,r),i=new Ne(n,r,o,this.nextTensorId());if(this.trackTensor(i,s),r==="string"){let u=this.state.tensorInfo.get(o),c=cC(a);this.state.numBytes+=c-u.bytes,u.bytes=c}return i}makeTensorFromDataId(t,n,r,s){r=r||"float32";let a={dataId:t,shape:n,dtype:r};return this.makeTensorFromTensorInfo(a,s)}makeTensorFromTensorInfo(t,n){let{dataId:r,shape:s,dtype:a}=t,o=new Ne(s,a,r,this.nextTensorId());return this.trackTensor(o,n),o}makeVariable(t,n=!0,r,s){r=r||this.nextVariableId().toString(),s!=null&&s!==t.dtype&&(t=t.cast(s));let a=new pa(t,n,r,this.nextTensorId());if(this.state.registeredVariables[a.name]!=null)throw new Error(`Variable with name ${a.name} was already registered`);return this.state.registeredVariables[a.name]=a,this.incRef(a,this.backend),a}trackTensor(t,n){this.state.numTensors++,t.dtype==="string"&&this.state.numStringTensors++;let r=0;t.dtype!=="complex64"&&t.dtype!=="string"&&(r=t.size*sf(t.dtype)),this.state.numBytes+=r,this.state.tensorInfo.has(t.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(t.dataId,{backend:n||this.backend,dtype:t.dtype,shape:t.shape,bytes:r})),t instanceof pa||this.track(t)}incRef(t,n){this.trackTensor(t,n),this.backend.incRef(t.dataId)}removeDataId(t,n){this.state.tensorInfo.has(t)&&this.state.tensorInfo.get(t).backend===n&&(this.state.tensorInfo.delete(t),this.state.numDataBuffers--)}disposeTensor(t){if(!this.state.tensorInfo.has(t.dataId))return;let n=this.state.tensorInfo.get(t.dataId);if(this.state.numTensors--,t.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=n.bytes),t.dtype!=="complex64"&&t.dtype!=="string"){let r=t.size*sf(t.dtype);this.state.numBytes-=r}n.backend.disposeData(t.dataId)&&this.removeDataId(t.dataId,n.backend)}disposeVariables(){for(let t in this.state.registeredVariables){let n=this.state.registeredVariables[t];this.disposeVariable(n)}}disposeVariable(t){this.disposeTensor(t),this.state.registeredVariables[t.name]!=null&&delete this.state.registeredVariables[t.name]}memory(){let t=this.backend.memory();return t.numTensors=this.state.numTensors,t.numDataBuffers=this.state.numDataBuffers,t.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(t.unreliable=!0,t.reasons==null&&(t.reasons=[]),t.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),t}async profile(t){this.state.profiling=!0;let n=this.state.numBytes,r=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await t(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(s=>s.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-n,this.state.activeProfile.newTensors=this.state.numTensors-r;for(let s of this.state.activeProfile.kernels)s.kernelTimeMs=await s.kernelTimeMs,s.extraInfo=await s.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(t,n,r,s,a,o){let i={id:this.state.nextTapeNodeId++,kernelName:t,inputs:n,outputs:r,saved:a},u=Nv(t);u!=null&&(s=u.gradFunc),s!=null&&(i.gradient=c=>(c=c.map((l,p)=>{if(l==null){let d=r[p],h=Pf(d.size,d.dtype);return this.makeTensor(h,d.shape,d.dtype)}return l}),s(c.length>1?c:c[0],a,o))),this.state.activeTape.push(i)}keep(t){return t.kept=!0,t}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(t){let n={track:[],name:"unnamed scope",id:this.state.nextScopeId++};t&&(n.name=t),this.state.scopeStack.push(n),this.state.activeScope=n}endScope(t){let n=Ox(t),r=new Set(n.map(a=>a.id));for(let a=0;a{!a.kept&&a.scopeId===s.id&&this.track(a)})}gradients(t,n,r,s=!1){if(A(n.length>0,()=>"gradients() received an empty list of xs."),r!=null&&r.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${r.dtype}'`);let a=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",t));A(a instanceof Ne,()=>"The result y returned by f() must be a tensor.");let o=UP(this.state.activeTape,n,a);if(!s&&o.length===0&&n.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[a.id]=r==null?eO(a.shape):r,GP(i,o,c=>this.tidy(c),tO);let u=n.map(c=>i[c.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(c=>{for(let l of c.saved)l.dispose()}),this.state.activeTape=null),{value:a,grads:u}})}customGrad(t){return A(la(t),()=>"The f passed in customGrad(f) must be a function."),(...n)=>{A(n.every(i=>i instanceof Ne),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let r,s={};n.forEach((i,u)=>{s[u]=i});let a=(i,u)=>(r=t(...n,u),A(r.value instanceof Ne,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),A(la(r.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),r.value),o=(i,u)=>{let c=r.gradFunc(i,u),l=Array.isArray(c)?c:[c];A(l.length===n.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),A(l.every(d=>d instanceof Ne),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return l.forEach((d,h)=>{p[h]=()=>d}),p};return this.runKernelFunc({forwardFunc:a,backwardsFunc:o,inputs:s})}}readSync(t){return this.state.tensorInfo.get(t).backend.readSync(t)}read(t){return this.state.tensorInfo.get(t).backend.read(t)}readToGPU(t,n){return this.state.tensorInfo.get(t).backend.readToGPU(t,n)}async time(t){let n=Id(),r=await this.backend.time(t);return r.wallMs=Id()-n,r}track(t){return this.state.activeScope!=null&&(t.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(t)),t}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new yS;for(let t in this.registry)this.disposeRegisteredKernels(t),this.registry[t].dispose(),delete this.registry[t];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Mx.nextTensorId=0;Mx.nextVariableId=0;function eO(e){let t=$x(ut(e),"float32");return M.makeTensor(t,e,"float32")}function NC(){let e=fC();if(e._tfengine==null){let t=new hC(e);e._tfengine=new Mx(t)}return IP(e._tfengine.ENV),KP(()=>e._tfengine),e._tfengine}var M=NC();function tO(e,t){let n={a:e,b:t};return M.runKernel(Sa,n)}var cp={};Ee(cp,{isBrowser:()=>_C,isMobile:()=>sO,mockIsMobile:()=>rO});function nO(){return typeof navigator!="undefined"&&navigator!=null}var Pv;function rO(e){Pv=e}function sO(e){if(Pv!==void 0)return Pv;if(e||nO()){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 _C(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Bn=G();Bn.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.")});Bn.registerFlag("IS_BROWSER",()=>_C());Bn.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Bn.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Bn.registerFlag("IS_SAFARI",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Safari/.test(navigator.userAgent)&&/Apple/.test(navigator.vendor));Bn.registerFlag("PROD",()=>!1);Bn.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Bn.getBool("DEBUG"));Bn.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Bn.registerFlag("IS_TEST",()=>!1);Bn.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>Bn.getBool("DEBUG"));Bn.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Bn.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);Bn.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function ds(e,t){let n=e;if(en(e))return t==="string"?[]:[e.length];if(kC(e)){let s=e.channels||"RGBA";return[e.height,e.width*s.length]}else if(SC(e))return[e.buffer.size/(t==null?4:sf(t))];if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||en(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&G().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&EC(e,r,[]),r}function EC(e,t,n){if(n=n||[],!Array.isArray(e)&&!en(e)){A(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}A(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),A(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let r=t.slice(1);for(let s=0;s=0&&(s=r),vS(r,s,t,n),e==null||!en(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let u=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${u}'`)}let a=ds(e,s);!en(e)&&!Array.isArray(e)&&(e=[e]);let i=s!=="string"?Yf(e,s):da(e,[],!0);return M.makeTensor(i,a,s)}function kd(e,t,n,r="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((a,o)=>_(a,`${t}[${o}]`,n,r))}var Lx="__op";function B(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],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+Lx;let s=(...a)=>{M.startScope(n);try{let o=r(...a);return Of(o)&&console.error("Cannot return a Promise inside of tidy."),M.endScope(o),o}catch(o){throw M.endScope(null),o}};return Object.defineProperty(s,"name",{value:n,configurable:!0}),s}function aO(e,t){let n=_(e,"real","complex"),r=_(t,"imag","complex");Nn(n.shape,r.shape,`real and imag shapes, ${n.shape} and ${r.shape}, must match in call to tf.complex().`);let s={real:n,imag:r};return M.runKernel(Mf,s)}var As=B({complex_:aO});function _a(e,t,n,r){if(r==null)r=Ld(e);else if(r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(SC(e)||kC(e)){if(r!=="float32"&&r!=="int32")throw new Error(`Creating tensor from GPU data only supports 'float32'|'int32' dtype, while the dtype is ${r}.`);return M.backend.createTensorFromGPUData(e,t||n,r)}if(!en(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){ar(t);let s=ut(t),a=ut(n);A(s===a,()=>`Based on the provided shape, [${t}], the tensor should have ${s} values but has ${a}`);for(let o=0;o`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!en(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?Yf(e,r):da(e,[],!0),M.makeTensor(e,t,r)}function yn(e,t,n){let r=ds(e,n);return _a(e,t,r,n)}var po={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Fs=class AC{static join(t){return new AC(t).slice()}constructor(t){if(this.shards=[],this.previousShardIndex=0,t==null||(t instanceof Array||(t=[t]),t=t.map(r=>en(r)?r.buffer:r),t.length===0))return;this.bufferUniformSize=t[0].byteLength;let n=0;for(let r=0;r=this.byteLength)return-1;if(this.bufferUniformSize!=null)return this.previousShardIndex=Math.floor(t/this.bufferUniformSize),this.previousShardIndex;function n(s){return t=s.end?1:0}if(n(this.shards[this.previousShardIndex])===0)return this.previousShardIndex;let r=oO(this.shards,n);return r===-1?-1:(this.previousShardIndex=r,this.previousShardIndex)}};function oO(e,t){let n=0,r=e.length;for(;n<=r;){let s=Math.floor((r-n)/2)+n,a=t(e[s]);if(a===0)return s;a<0?r=s:n=s+1}return-1}function iO(){G().set("PROD",!0)}function uO(){G().set("DEBUG",!0)}function cO(){G().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Bx(e){G().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}YP(Bx);function lO(){M.disposeVariables()}function Er(){return M}function lf(){return M.memory()}function dO(e){return M.profile(e)}function O(e,t){return M.tidy(e,t)}function _e(e){Ox(e).forEach(n=>n.dispose())}function Ht(e){return M.keep(e)}function pO(e){return M.time(e)}function hO(e){return M.setBackend(e)}function fO(){return M.ready()}function DC(){return M.backendName}function mO(e){M.removeBackend(e)}function gO(e){return M.findBackend(e)}function bO(e){return M.findBackendFactory(e)}function Jf(e,t,n=1){return M.registerBackend(e,t,n)}function zx(){return M.backend}function yO(e,t){G().setPlatform(e,t)}var ha=4;async function vO(e,t){let n=[],r=[],s=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);for(let o=0;o{let d=await u.bytes(),h=d.reduce((m,b)=>m+b.length,0)+ha*d.length,f=new Uint8Array(h),g=0;for(let m=0;mn.slice(s+i,s+u));r[a.name]=FC(a,n.slice(s,s+o)),s+=o}return r}function xO(e,t){let n=ut(e.shape),r;if("quantization"in e){let s=e.quantization;r=po[s.dtype]}else if(e.dtype==="string"){let s=0;for(let a=0;a(s=await xS(r,s,l),s.slice(c,l)));s=await xS(r,s,o);let i=s.slice(0,o);s=s.slice(o);let u=FC(a,i);if(n[a.name]=u,DC()==="webgpu"){let c=zx();"uploadToGPU"in c&&ut(u.shape)>=G().get("WEBGPU_CPU_HANDOFF_SIZE_THRESHOLD")&&c.uploadToGPU(u.dataId)}}return n}function IO(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(a=>{if(t+=a.byteLength,n.push(a.byteLength===a.buffer.byteLength?a:new a.constructor(a)),!(a instanceof Float32Array||a instanceof Int32Array||a instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${a.constructor.name}`)});let r=new Uint8Array(t),s=0;return n.forEach(a=>{r.set(new Uint8Array(a.buffer),s),s+=a.byteLength}),r.buffer}var Wx=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function wS(e){return Wx?Buffer.byteLength(e,"utf8"):new Blob([e]).size}function kO(e){if(Wx)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,s=t.length;r{let r=n<<13,s=0;for(;!(r&8388608);)s-=8388608,r<<=1;return r&=-8388609,s+=947912704,r|s},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 NO(){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 _O(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function EO(){let e=TO(),t=NO(),n=_O();return r=>{let s=new ArrayBuffer(4*r.length),a=new Uint32Array(s);for(let o=0;o>10]+(i&1023)]+t[i>>10];a[o]=u}return new Float32Array(s)}}var mr=class Br{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Br.instance==null&&(Br.instance=new Br),Br.instance}static registerSaveRouter(t){Br.getInstance().saveRouters.push(t)}static registerLoadRouter(t){Br.getInstance().loadRouters.push(t)}static getSaveHandlers(t){return Br.getHandlers(t,"save")}static getLoadHandlers(t,n){return Br.getHandlers(t,"load",n)}static getHandlers(t,n,r){let s=[];return(n==="load"?Br.getInstance().loadRouters:Br.getInstance().saveRouters).forEach(o=>{let i=o(t,r);i!==null&&s.push(i)}),s}},AO=e=>mr.registerSaveRouter(e),DO=e=>mr.registerLoadRouter(e),$O=e=>mr.getSaveHandlers(e),FO=(e,t)=>mr.getLoadHandlers(e,t),Mv="tensorflowjs",Lv=1,ro="models_store",sa="model_info_store";function MC(){if(!G().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 Bv(e){let t=e.result;t.createObjectStore(ro,{keyPath:"modelPath"}),t.createObjectStore(sa,{keyPath:"modelPath"})}var ho=class{constructor(e){if(this.indexedDB=MC(),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,r)=>{let s=this.indexedDB.open(Mv,Lv);s.onupgradeneeded=()=>Bv(s),s.onsuccess=()=>{let a=s.result;if(t==null){let o=a.transaction(ro,"readonly"),u=o.objectStore(ro).get(this.modelPath);u.onsuccess=()=>{if(u.result==null)return a.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(u.result.modelArtifacts)},u.onerror=c=>(a.close(),r(u.error)),o.oncomplete=()=>a.close()}else{t.weightData=Fs.join(t.weightData);let o=lp(t),i=a.transaction(sa,"readwrite"),u=i.objectStore(sa),c;try{c=u.put({modelPath:this.modelPath,modelArtifactsInfo:o})}catch(p){return r(p)}let l;c.onsuccess=()=>{l=a.transaction(ro,"readwrite");let p=l.objectStore(ro),d;try{d=p.put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:o})}catch(h){return r(h)}d.onsuccess=()=>n({modelArtifactsInfo:o}),d.onerror=h=>{u=i.objectStore(sa);let f=u.delete(this.modelPath);f.onsuccess=()=>(a.close(),r(d.error)),f.onerror=g=>(a.close(),r(d.error))}},c.onerror=p=>(a.close(),r(c.error)),i.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>r(s.error)})}};ho.URL_SCHEME="indexeddb://";var LC=e=>G().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ho.URL_SCHEME)?RO(e.slice(ho.URL_SCHEME.length)):null;mr.registerSaveRouter(LC);mr.registerLoadRouter(LC);function RO(e){return new ho(e)}function PO(e){return e.startsWith(ho.URL_SCHEME)?e.slice(ho.URL_SCHEME.length):e}var OO=class{constructor(){this.indexedDB=MC()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Mv,Lv);n.onupgradeneeded=()=>Bv(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(sa,"readonly"),o=s.objectStore(sa).getAll();o.onsuccess=()=>{let i={};for(let u of o.result)i[u.modelPath]=u.modelArtifactsInfo;e(i)},o.onerror=i=>(r.close(),t(o.error)),s.oncomplete=()=>r.close()},n.onerror=r=>t(n.error)})}async removeModel(e){return e=PO(e),new Promise((t,n)=>{let r=this.indexedDB.open(Mv,Lv);r.onupgradeneeded=()=>Bv(r),r.onsuccess=()=>{let s=r.result,a=s.transaction(sa,"readwrite"),o=a.objectStore(sa),i=o.get(e),u;i.onsuccess=()=>{if(i.result==null)return s.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let c=o.delete(e),l=()=>{u=s.transaction(ro,"readwrite");let d=u.objectStore(ro).delete(e);d.onsuccess=()=>t(i.result.modelArtifactsInfo),d.onerror=h=>n(i.error)};c.onsuccess=l,c.onerror=p=>(l(),s.close(),n(i.error))}},i.onerror=c=>(s.close(),n(i.error)),a.oncomplete=()=>{u==null?s.close():u.oncomplete=()=>s.close()}},r.onerror=s=>n(r.error)})}},Ns="/",Lu="tensorflowjs_models",BC="info",MO="model_topology",LO="weight_specs",BO="weight_data",zO="model_metadata";function zC(e){return{info:[Lu,e,BC].join(Ns),topology:[Lu,e,MO].join(Ns),weightSpecs:[Lu,e,LO].join(Ns),weightData:[Lu,e,BO].join(Ns),modelMetadata:[Lu,e,zO].join(Ns)}}function WC(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function WO(e){let t=e.split(Ns);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Ns)}function VO(e){return e.startsWith(fo.URL_SCHEME)?e.slice(fo.URL_SCHEME.length):e}var fo=class{constructor(e){if(!G().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=zC(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),r=lp(e),s=Fs.join(e.weightData);try{this.LS.setItem(this.keys.info,JSON.stringify(r)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,kO(s));let a={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,initializerSignature:e.initializerSignature!=null?e.initializerSignature:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(a)),{modelArtifactsInfo:r}}catch(a){throw WC(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${r.modelTopologyBytes}, weightSpecsBytes=${r.weightSpecsBytes}, weightDataBytes=${r.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(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 r=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(r==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=r;let s=this.LS.getItem(this.keys.modelMetadata);if(s!=null){let o=JSON.parse(s);t.format=o.format,t.generatedBy=o.generatedBy,t.convertedBy=o.convertedBy,o.signature!=null&&(t.signature=o.signature),o.userDefinedMetadata!=null&&(t.userDefinedMetadata=o.userDefinedMetadata),o.modelInitializer!=null&&(t.modelInitializer=o.modelInitializer),o.initializerSignature!=null&&(t.initializerSignature=o.initializerSignature),o.trainingConfig!=null&&(t.trainingConfig=o.trainingConfig)}let a=this.LS.getItem(this.keys.weightData);if(a==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=SO(a),t}};fo.URL_SCHEME="localstorage://";var VC=e=>G().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(fo.URL_SCHEME)?UO(e.slice(fo.URL_SCHEME.length)):null;mr.registerSaveRouter(VC);mr.registerLoadRouter(VC);function UO(e){return new fo(e)}var GO=class{constructor(){A(G().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),A(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=Lu+Ns,n=Ns+BC;for(let r=0;r"scheme must not be undefined or null."),t.endsWith(Vu)&&(t=t.slice(0,t.indexOf(Vu))),A(t.length>0,()=>"scheme must not be an empty string.");let r=Js.getInstance();A(r.managers[t]==null,()=>`A model store manager is already registered for scheme '${t}'.`),r.managers[t]=n}static getManager(t){let n=Js.getInstance().managers[t];if(n==null)throw new Error(`Cannot find model manager for scheme '${t}'`);return n}static getSchemes(){return Object.keys(Js.getInstance().managers)}};function Xh(e){if(e.indexOf(Vu)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${fa.getSchemes().join(",")}`);return{scheme:e.split(Vu)[0],path:e.split(Vu)[1]}}async function UC(e,t,n=!1){A(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=mr.getLoadHandlers(e);A(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),A(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let s=r[0],a=mr.getSaveHandlers(t);A(a.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),A(a.length<2,()=>`Copying failed because more than one (${r.length}) save handlers for destination URL ${t}.`);let o=a[0],i=Xh(e).scheme,u=Xh(e).path,c=i===Xh(e).scheme,l=await s.load();n&&c&&await fa.getManager(i).removeModel(u);let p=await o.save(l);return n&&!c&&await fa.getManager(i).removeModel(u),p.modelArtifactsInfo}async function HO(){let e=fa.getSchemes(),t={};for(let n of e){let r=await fa.getManager(n).listModels();for(let s in r){let a=n+Vu+s;t[a]=r[s]}}return t}async function jO(e){let t=Xh(e);return fa.getManager(t.scheme).removeModel(t.path)}async function qO(e,t){return UC(e,t,!1)}async function KO(e,t){return UC(e,t,!0)}var XO=class{constructor(){this.messageName="setTimeoutCustom",this.functionRefs=[],this.handledMessageCount=0,this.hasEventListener=!1}fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}setTimeoutCustom(e,t){if(typeof window=="undefined"||!G().getBool("USE_SETTIMEOUTCUSTOM")){setTimeout(e,t);return}this.functionRefs.push(e),setTimeout(()=>{window.postMessage({name:this.messageName,index:this.functionRefs.length-1},"*")},t),this.hasEventListener||(this.hasEventListener=!0,window.addEventListener("message",n=>{if(n.source===window&&n.data.name===this.messageName){n.stopPropagation();let r=this.functionRefs[n.data.index];r(),this.handledMessageCount++,this.handledMessageCount===this.functionRefs.length&&(this.functionRefs=[],this.handledMessageCount=0)}},!0))}isTypedArray(e){return vC(e)}};if(G().get("IS_BROWSER")){G().setPlatform("browser",new XO);try{fa.registerManager(fo.URL_SCHEME,new GO)}catch(e){}try{fa.registerManager(ho.URL_SCHEME,new OO)}catch(e){}}var YO={importFetch:()=>BR()},mv,ZO=class{constructor(){this.util=zR(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return G().global.fetch!=null?G().global.fetch(e,t):(mv==null&&(mv=YO.importFetch()),mv(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}isTypedArray(e){return this.util.types.isFloat32Array(e)||this.util.types.isInt32Array(e)||this.util.types.isUint8Array(e)||this.util.types.isUint8ClampedArray(e)}};G().get("IS_NODE")&&!G().get("IS_BROWSER")&&G().setPlatform("node",new ZO);function Me(e,t="float32",n){return t=t||"float32",ar(e),new zt(e,t,n)}function JO(e,t){let n=_(e,"x","cast");if(!uC(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 r={x:n},s={dtype:t};return M.runKernel(Bo,r,s)}var ae=B({cast_:JO});function QO(e){let n={x:_(e,"x","clone","string_or_numeric")};return M.runKernel(si,n)}var us=B({clone_:QO});function Ux(e,t=!1){console.log(e.toString(t))}NC();var e3={buffer:Me,cast:ae,clone:us,print:Ux};XP(e3);function t3(e,t){let n=_(e,"a","add"),r=_(t,"b","add");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(Sa,s)}var X=B({add_:t3});function n3(e,t){let n=_(e,"a","floorDiv"),r=_(t,"b","floorDiv");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(ti,s)}var Qf=B({floorDiv_:n3});function r3(e,t){let n=_(e,"a","div"),r=_(t,"b","div");if([n,r]=At(n,r),n.dtype==="int32"&&r.dtype==="int32")return Qf(n,r);let s={a:n,b:r},a={};return M.runKernel(Xo,s,a)}var fe=B({div_:r3});function s3(e,t){let n=_(e,"a","mul"),r=_(t,"b","mul");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(xi,s)}var z=B({mul_:s3});function a3(e){let t=_(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return M.runKernel(Vd,n)}else{let n={x:t};return M.runKernel(cc,n)}}var Lt=B({abs_:a3});function o3(e){let n={x:_(e,"x","acos")};return M.runKernel(Eo,n)}var Gx=B({acos_:o3});function i3(e){let n={x:_(e,"x","acosh")};return M.runKernel(Ao,n)}var Hx=B({acosh_:i3});function u3(e){A(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),A(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((s,a)=>_(s,`tensors${a}`,"addN")),n=t[0];t.forEach(s=>{if(s.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(s=>{if(!$s(s.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return M.runKernel(Do,r)}var GC=B({addN_:u3});function c3(e,t=null,n=!1){let s={x:_(e,"x","all","bool")},a={axis:t,keepDims:n};return M.runKernel(lc,s,a)}var em=B({all_:c3});function l3(e,t=null,n=!1){let s={x:_(e,"x","any","bool")},a={axis:t,keepDims:n};return M.runKernel(dc,s,a)}var Sd=B({any_:l3});function d3(e,t=0){let r={x:_(e,"x","argMax")},s={axis:t};return M.runKernel(pc,r,s)}var mo=B({argMax_:d3});function p3(e,t=0){let r={x:_(e,"x","argMin")},s={axis:t};return M.runKernel(hc,r,s)}var jx=B({argMin_:p3});function h3(e){let n={x:_(e,"x","asin")};return M.runKernel($o,n)}var qx=B({asin_:h3});function f3(e){let n={x:_(e,"x","asinh")};return M.runKernel(Fo,n)}var Kx=B({asinh_:f3});function m3(e){let n={x:_(e,"x","atan")};return M.runKernel(Ro,n)}var Xx=B({atan_:m3});function g3(e,t){let n=_(e,"a","atan2"),r=_(t,"b","atan2");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(Oo,s)}var Yx=B({atan2_:g3});function b3(e){let n={x:_(e,"x","atanh")};return M.runKernel(Po,n)}var Zx=B({atanh_:b3});function y3(e,t,n,r,s="NHWC",a){let o=e[3],i=[...t,o],u=qC(s);return dp(e,i,n,a,r,null,null,u)}function HC(e,t,n,r,s,a,o="channelsLast"){let[i,u]=Cd(t),c;if(o==="channelsLast")c=[i,u,e[3],e[3]];else if(o==="channelsFirst")c=[i,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${o}`);return dp(e,c,n,r,s,a,!1,o)}function v3(e,t,n,r,s,a,o="NDHWC"){let[i,u,c]=zv(t),l,p;if(o==="NDHWC")p="channelsLast",l=[i,u,c,e[4],e[4]];else if(o==="NCDHW")p="channelsFirst",l=[i,u,c,e[1],e[1]];else throw new Error(`Unknown dataFormat ${o}`);return jC(e,l,n,r,s,!1,p,a)}function dp(e,t,n,r,s,a,o=!1,i="channelsLast"){let[u,c,l,p]=[-1,-1,-1,-1];if(i==="channelsLast")[u,c,l,p]=e;else if(i==="channelsFirst")[u,p,c,l]=e;else throw new Error(`Unknown dataFormat ${i}`);let[d,h,,f]=t,[g,m]=Cd(n),[b,y]=Cd(r),v=Uu(d,b),x=Uu(h,y),{padInfo:k,outHeight:S,outWidth:N}=I3(s,c,l,g,m,v,x,a,i),E=o?f*p:f,$;return i==="channelsFirst"?$=[u,E,S,N]:i==="channelsLast"&&($=[u,S,N,E]),{batchSize:u,dataFormat:i,inHeight:c,inWidth:l,inChannels:p,outHeight:S,outWidth:N,outChannels:E,padInfo:k,strideHeight:g,strideWidth:m,filterHeight:d,filterWidth:h,effectiveFilterHeight:v,effectiveFilterWidth:x,dilationHeight:b,dilationWidth:y,inShape:e,outShape:$,filterShape:t}}function jC(e,t,n,r,s,a=!1,o="channelsLast",i){let[u,c,l,p,d]=[-1,-1,-1,-1,-1];if(o==="channelsLast")[u,c,l,p,d]=e;else if(o==="channelsFirst")[u,d,c,l,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[h,f,g,,m]=t,[b,y,v]=zv(n),[x,k,S]=zv(r),N=Uu(h,x),E=Uu(f,k),$=Uu(g,S),{padInfo:F,outDepth:D,outHeight:R,outWidth:C}=k3(s,c,l,p,b,y,v,N,E,$,i),L=a?m*d:m,U;return o==="channelsFirst"?U=[u,L,D,R,C]:o==="channelsLast"&&(U=[u,D,R,C,L]),{batchSize:u,dataFormat:o,inDepth:c,inHeight:l,inWidth:p,inChannels:d,outDepth:D,outHeight:R,outWidth:C,outChannels:L,padInfo:F,strideDepth:b,strideHeight:y,strideWidth:v,filterDepth:h,filterHeight:f,filterWidth:g,effectiveFilterDepth:N,effectiveFilterHeight:E,effectiveFilterWidth:$,dilationDepth:x,dilationHeight:k,dilationWidth:S,inShape:e,outShape:U,filterShape:t}}function x3(e,t,n,r,s){r==null&&(r=Jx(e,t,n));let a=e[0],o=e[1],i=Td((a-t+2*r)/n+1,s),u=Td((o-t+2*r)/n+1,s);return[i,u]}function w3(e,t,n,r,s,a){s==null&&(s=Jx(e,t[0],r[0]));let o=[0,0,0,n];for(let i=0;i<3;i++)e[i]+2*s>=t[i]&&(o[i]=Td((e[i]-t[i]+2*s)/r[i]+1,a));return o}function Jx(e,t,n,r=1){let s=Uu(t,r);return Math.floor((e[0]*(n-1)-n+s)/2)}function Cd(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function zv(e){return typeof e=="number"?[e,e,e]:e}function Uu(e,t){return t<=1?e:e+(e-1)*(t-1)}function I3(e,t,n,r,s,a,o,i,u){let c,l,p;if(typeof e=="number"){c={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let h=x3([t,n],a,r,e,i);l=h[0],p=h[1]}else if(e==="same"){l=Math.ceil(t/r),p=Math.ceil(n/s);let d=Math.max(0,(l-1)*r+a-t),h=Math.max(0,(p-1)*s+o-n),f=Math.floor(d/2),g=d-f,m=Math.floor(h/2),b=h-m;c={top:f,bottom:g,left:m,right:b,type:"SAME"}}else if(e==="valid")c={top:0,bottom:0,left:0,right:0,type:"VALID"},l=Math.ceil((t-a+1)/r),p=Math.ceil((n-o+1)/s);else if(typeof e=="object"){let d=u==="channelsLast"?e[1][0]:e[2][0],h=u==="channelsLast"?e[1][1]:e[2][1],f=u==="channelsLast"?e[2][0]:e[3][0],g=u==="channelsLast"?e[2][1]:e[3][1];c={top:d,bottom:h,left:f,right:g,type:d===0&&h===0&&f===0&&g===0?"VALID":"EXPLICIT"},l=Td((t-a+d+h)/r+1,i),p=Td((n-o+f+g)/s+1,i)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:c,outHeight:l,outWidth:p}}function k3(e,t,n,r,s,a,o,i,u,c,l){let p,d,h,f;if(e==="valid"&&(e=0),typeof e=="number"){p={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let m=w3([t,n,r,1],[i,u,c],1,[s,a,o],e,l);d=m[0],h=m[1],f=m[2]}else if(e==="same"){d=Math.ceil(t/s),h=Math.ceil(n/a),f=Math.ceil(r/o);let g=(d-1)*s+i-t,m=(h-1)*a+u-n,b=(f-1)*o+c-r,y=Math.floor(g/2),v=g-y,x=Math.floor(m/2),k=m-x,S=Math.floor(b/2),N=b-S;p={top:x,bottom:k,left:S,right:N,front:y,back:v,type:"SAME"}}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:p,outDepth:d,outHeight:h,outWidth:f}}function Td(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 ma(e){let[t,n,r]=Cd(e);return t===1&&n===1&&r===1}function fs(e,t){return ma(e)||ma(t)}function go(e){return Cd(e).every(t=>t>0)}function qC(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function _n(e,t,n){if(n!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);if(typeof t=="number")A(Hu(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);else if(typeof t=="object")t.forEach(r=>{r.forEach(s=>{A(Hu(s),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${s}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function S3(e,t){let r={x:_(e,"x","reshape","string_or_numeric")},s={shape:t};return M.runKernel(qc,r,s)}var W=B({reshape_:S3});function C3(e,t,n,r,s){let a=_(e,"x","avgPool","float32"),o=1;A(fs(n,o),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`);let i=a,u=!1;a.rank===3&&(u=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),A(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),_n("avgPool",r,s);let c={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=M.runKernel(Mo,c,l);return p=ae(p,a.dtype),u?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var br=B({avgPool_:C3});function T3(e,t,n,r,s,a="NDHWC"){let o=_(e,"x","avgPool3d","float32"),i=o,u=!1;o.rank===4&&(u=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),A(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),A(a==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${a}`),A(typeof n=="number"&&n>0||Array.isArray(n)&&n[0]>0&&n[1]>0&&n[2]>0,()=>`Error in avgPool3d: Stride must be > 0, but got '${n}'`),_n("avgPool3d",r,s);let c={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:a},p=M.runKernel(fc,c,l);return p=ae(p,i.dtype),u?W(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Qx=B({avgPool3d_:T3});function N3(e,t=0){A(e.length>=1,()=>"Pass at least one tensor to concat");let n=kd(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(a=>{if(a.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor with dtype ${a.dtype}. `)}),n.length===1)return us(n[0]);let r=n,s={axis:t};return M.runKernel(yc,r,s)}var tt=B({concat_:N3});function _3(e,t,n=!1,r=!1){let s=_(e,"a","matMul"),a=_(t,"b","matMul");[s,a]=At(s,a);let o={a:s,b:a},i={transposeA:n,transposeB:r};return M.runKernel(Lo,o,i)}var Fe=B({matMul_:_3});function E3(e){let n={x:_(e,"x","sigmoid","float32")};return M.runKernel(Li,n)}var pr=B({sigmoid_:E3});function A3(e,t,n){let r=_(e,"x","slice","string_or_numeric");if(r.rank===0)throw new Error("Slicing scalar is not possible");let s={x:r},a={begin:t,size:n};return M.runKernel(el,s,a)}var Ve=B({slice_:A3});function D3(e){let n={x:_(e,"x","tanh","float32")};return M.runKernel(ji,n)}var bo=B({tanh_:D3});function $3(e,t,n,r,s,a){let o=_(e,"forgetBias","basicLSTMCell"),i=_(t,"lstmKernel","basicLSTMCell"),u=_(n,"lstmBias","basicLSTMCell"),c=_(r,"data","basicLSTMCell"),l=_(s,"c","basicLSTMCell"),p=_(a,"h","basicLSTMCell"),d=tt([c,p],1),h=Fe(d,i),f=X(h,u),g=f.shape[0],m=f.shape[1]/4,b=[g,m],y=Ve(f,[0,0],b),v=Ve(f,[0,m],b),x=Ve(f,[0,m*2],b),k=Ve(f,[0,m*3],b),S=X(z(pr(y),bo(v)),z(l,pr(X(o,x)))),N=z(bo(S),pr(k));return[S,N]}var KC=B({basicLSTMCell_:$3});function F3(e,t,n){let r=_(e,"x","batchToSpaceND"),s=t.reduce((i,u)=>i*u);A(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),A(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),A(r.shape[0]%s===0,()=>`input tensor batch is ${r.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${s}`);let a={x:r},o={blockShape:t,crops:n};return M.runKernel(mc,a,o)}var pp=B({batchToSpaceND_:F3});function R3(e){let t;return e.rank===0||e.rank===1?t=W(e,[1,1,1,e.size]):e.rank===2?t=W(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function P3(e,t,n,r,s,a){a==null&&(a=.001);let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),u=_(n,"variance","batchNorm"),c;s!=null&&(c=_(s,"scale","batchNorm"));let l;r!=null&&(l=_(r,"offset","batchNorm")),A(i.rank===u.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),A(l==null||i.rank===l.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),A(c==null||i.rank===c.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:R3(o),scale:c,offset:l,mean:i,variance:u},h={varianceEpsilon:a},f=M.runKernel(ni,d,h);return W(f,o.shape)}var Ea=B({batchNorm_:P3});function O3(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),u=_(n,"variance","batchNorm"),c;s!=null&&(c=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),A(o.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${o.rank}.`),A(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),A(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${u.rank}.`),c!=null&&A(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${c.rank}.`),l!=null&&A(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${l.rank}.`),Ea(o,i,u,l,c,a)}var ew=B({batchNorm2d_:O3});function M3(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),u=_(n,"variance","batchNorm"),c;s!=null&&(c=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),A(o.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${o.rank}.`),A(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),A(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${u.rank}.`),c!=null&&A(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${c.rank}.`),l!=null&&A(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${l.rank}.`),Ea(o,i,u,l,c,a)}var tw=B({batchNorm3d_:M3});function L3(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),u=_(n,"variance","batchNorm"),c;s!=null&&(c=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),A(o.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${o.rank}.`),A(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),A(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${u.rank}.`),c!=null&&A(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${c.rank}.`),l!=null&&A(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${l.rank}.`),Ea(o,i,u,l,c,a)}var nw=B({batchNorm4d_:L3});function B3(e,t,n){let r=_(e,"x","bincount"),s=_(t,"weights","bincount");A(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),A(n>=0,()=>`size must be non-negative, but got ${n}.`),A(s.size===r.size||s.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${r.shape}, weights shape: ${s.shape}.`);let a={x:r,weights:s},o={size:n};return M.runKernel(gc,a,o)}var rw=B({bincount_:B3});function z3(e,t){let n=_(e,"x","bitwiseAnd"),r=_(t,"y","bitwiseAnd");if(!$s(n.shape,r.shape))throw new Error(`BitwiseAnd: Tensors must have the same shape. x: ${n.shape}, y: ${r.shape}`);if(n.dtype!=="int32"||r.dtype!=="int32")throw new Error(`BitwiseAnd: Only supports 'int32' values in tensor, found type of x: ${n.dtype} and type of y: ${r.dtype}`);let s={a:n,b:r};return M.runKernel(bc,s)}var XC=B({bitwiseAnd_:z3});function W3(e,t){let n=_(e,"s0","broadcastArgs","int32"),r=_(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(r.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${r.rank}`);let s={s0:n,s1:r};return M.runKernel(Wd,s)}var YC=B({broadcastArgs_:W3});function V3(e,t){let n=_(e,"broadcastTo","x"),r=n.shape;if(ar(t),t.lengthn.rank){let c=n.shape.slice();for(;c.length=0;c--)if(s[c]===t[c])a[c]=1;else if(n.shape[c]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(a.map((c,l)=>c>1?l:-1).filter(c=>c>=0).length===0)return us(n);let i={x:n},u={reps:a};return M.runKernel(Ta,i,u)}var ao=B({broadcastTo_:V3});function U3(e){let n={x:_(e,"x","ceil","float32")};return M.runKernel(zo,n)}var sw=B({ceil_:U3});function vn(e,t,n){ar(e),n=n||Ld(t);let r={shape:e,value:t,dtype:n};return M.runKernel(Hd,{},r)}function G3(e,t,n){let r=_(e,"x","clipByValue");if(A(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`),t===n)return vn(r.shape,t,r.dtype);let s={x:r},a={clipValueMin:t,clipValueMax:n};return M.runKernel(Ca,s,a)}var rn=B({clipByValue_:G3});function H3(e){return tt(e,0)}var aw=B({concat1d_:H3});function j3(e,t){return tt(e,t)}var ow=B({concat2d_:j3});function q3(e,t){return tt(e,t)}var iw=B({concat3d_:q3});function K3(e,t){return tt(e,t)}var uw=B({concat4d_:K3});function X3(e,t,n,r,s="NHWC",a=[1,1],o){let i=_(e,"x","conv2d","float32"),u=_(t,"filter","conv2d","float32"),c=i,l=!1;i.rank===3&&(l=!0,c=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),A(c.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${c.rank}.`),A(u.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${u.rank}.`),_n("conv2d",r,o);let p=s==="NHWC"?c.shape[3]:c.shape[1];A(p===u.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${u.shape[2]}.`),A(fs(n,a),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),A(go(a),()=>"Error in conv2D: Dilated rates should be larger than 0."),A(go(n),()=>"Error in conv2D: Strides should be larger than 0.");let d={x:c,filter:u},h={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o},f=M.runKernel(Wo,d,h);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Ft=B({conv2d_:X3});function Y3(e,t,n,r,s="NWC",a=1,o){let i=_(e,"x","conv1d"),u=_(t,"filter","conv1d"),c=i,l=!1;i.rank===2&&(l=!0,c=W(i,[1,i.shape[0],i.shape[1]])),A(c.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${c.rank}.`),A(u.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${u.rank}.`),_n("conv1d",r,o),A(c.shape[2]===u.shape[1],()=>`Error in conv1d: depth of input (${c.shape[2]}) must match input depth for filter ${u.shape[1]}.`),A(fs(n,a),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${a}'`),A(go(a),()=>"Error in conv1D: Dilated rates should be larger than 0."),A(go(n),()=>"Error in conv1D: Stride should be larger than 0."),A(s==="NWC",()=>`Error in conv1d: got dataFormat of ${s} but only NWC is currently supported.`);let p=W(u,[1,u.shape[0],u.shape[1],u.shape[2]]),d=W(c,[c.shape[0],1,c.shape[1],c.shape[2]]),m=Ft(d,p,[1,n],r,"NHWC",[1,a],o);return l?W(m,[m.shape[2],m.shape[3]]):W(m,[m.shape[0],m.shape[2],m.shape[3]])}var tm=B({conv1d_:Y3});function Z3(e,t,n,r,s,a="NHWC",o){A(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let i=e,u=t,c=!1;t.rank===3&&(c=!0,u=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,e[0],e[1],e[2]]),A(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),A(u.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${u.rank}`),A(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let l=a==="NHWC"?i[3]:i[1],p=a==="NHWC"?u.shape[3]:u.shape[1];A(l===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[2]}.`),A(p===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${n.shape[3]}.`),_n("conv2dDerInput",s,o);let d={dy:u,filter:n},h={strides:r,pad:s,dataFormat:a,dimRoundingMode:o,inputShape:i},f=M.runKernel(Vo,d,h);return c?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var cw=B({conv2DBackpropInput_:Z3});function J3(e,t,n,r,s,a){let o=_(e,"x","conv2dTranspose"),i=_(t,"filter","conv2dTranspose");return cw(n,o,i,r,s,"NHWC",a)}var nm=B({conv2dTranspose_:J3});function Q3(e,t,n,r,s="NDHWC",a=[1,1,1]){let o=_(e,"x","conv3d"),i=_(t,"filter","conv3d"),u=o,c=!1;o.rank===4&&(c=!0,u=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),A(u.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${u.rank}.`),A(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),A(u.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${u.shape[4]}) must match input depth for filter ${i.shape[3]}.`),A(fs(n,a),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),A(s==="NDHWC",()=>`Error in conv3d: got dataFormat of ${s} but only NDHWC is currently supported.`),A(go(a),()=>"Error in conv3D: Dilated rates should be larger than 0."),A(go(n),()=>"Error in conv3D: Strides should be larger than 0.");let l={x:u,filter:i},p={strides:n,pad:r,dataFormat:s,dilations:a},d=M.runKernel(Uo,l,p);return c?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var lw=B({conv3d_:Q3});function eM(e,t,n,r,s){A(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let a=e,o=t,i=!1;t.rank===4&&(i=!0,o=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),a=[1,e[0],e[1],e[2],e[3]]);let u=a[4],c=o.shape[4];A(a.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${a.length}.`),A(o.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${o.rank}`),A(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),A(u===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${u}) must match input depth for filter ${n.shape[3]}.`),A(c===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${c}) must match output depth for filter ${n.shape[4]}.`);let l={dy:o,filter:n},p={pad:s,strides:r,inputShape:a},d=M.runKernel(xc,l,p);return i?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var ZC=B({conv3DBackpropInput_:eM});function tM(e,t,n,r,s){let a=_(e,"x","conv3dTranspose"),o=_(t,"filter","conv3dTranspose");return ZC(n,a,o,r,s)}var dw=B({conv3dTranspose_:tM});function nM(e){let n={x:_(e,"x","cos","float32")};return M.runKernel(Go,n)}var hp=B({cos_:nM});function rM(e){let n={x:_(e,"x","cosh","float32")};return M.runKernel(Ho,n)}var rm=B({cosh_:rM});function sM(e,t=0,n=!1,r=!1){let a={x:_(e,"x","cumprod")},o={axis:t,exclusive:n,reverse:r};return M.runKernel(wc,a,o)}var Nd=B({cumprod_:sM});function aM(e,t=0,n=!1,r=!1){let a={x:_(e,"x","cumsum")},o={axis:t,exclusive:n,reverse:r};return M.runKernel(jo,a,o)}var sm=B({cumsum_:aM});function oM(e,t,n,r=!1){let s=_(e,"x","denseBincount"),a=_(t,"weights","denseBincount");A(s.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${s.dtype}`),A(s.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${s.rank}.`),A(n>=0,()=>`size must be non-negative, but got ${n}.`),A(a.size===s.size||a.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${s.shape}, weights shape: ${a.shape}.`);let o={x:s,weights:a},i={size:n,binaryOutput:r};return M.runKernel(Ud,o,i)}var df=B({denseBincount_:oM});function iM(e,t,n="NHWC"){let r=_(e,"x","depthToSpace","float32"),s=n==="NHWC"?r.shape[1]:r.shape[2],a=n==="NHWC"?r.shape[2]:r.shape[3],o=n==="NHWC"?r.shape[3]:r.shape[1];A(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),A(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${s} and ${t} for depthToSpace with input shape ${r.shape}`),A(a*t>=0,()=>`Negative dimension size caused by overflow when multiplying ${a} and ${t} for depthToSpace with input shape ${r.shape}`),A(o%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${o} for depthToSpace with input shape ${r.shape}`);let i={x:r},u={blockSize:t,dataFormat:n};return M.runKernel(kc,i,u)}var pw=B({depthToSpace_:iM});function uM(e,t,n,r,s="NHWC",a=[1,1],o){let i=_(e,"x","depthwiseConv2d","float32"),u=_(t,"filter","depthwiseConv2d","float32"),c=i,l=!1;i.rank===3&&(l=!0,c=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),A(c.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${c.rank}.`),A(u.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${u.rank}.`);let p=s==="NHWC"?c.shape[3]:c.shape[1];A(p===u.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${p}) must match the inChannels dimension in filter ${u.shape[2]}.`),_n("depthwiseConv2d",r,o);let d={x:c,filter:u},h={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o},f=M.runKernel(qo,d,h);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Aa=B({depthwiseConv2d_:uM});function cM(e){let n={x:_(e,"x","diag")};return M.runKernel(Gd,n)}var JC=B({diag_:cM});function lM(e,t,n,r,s=[1,1],a="NHWC"){let o=_(e,"x","dilation2d"),i=_(t,"filter","dilation2d");A(o.rank===3||o.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${o.rank}.`),A(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),A(a==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${a}`);let u=o,c=!1;o.rank===3&&(u=W(o,[1,o.shape[0],o.shape[1],o.shape[2]]),c=!0),A(u.shape[3]===i.shape[2],()=>`Error in dilation2d: input and filter must have the same depth: ${u.shape[3]} vs ${i.shape[2]}`);let l={x:u,filter:i},p={strides:n,pad:r,dilations:s},d=M.runKernel(Ko,l,p);return c?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var hw=B({dilation2d_:lM}),dl={};Ee(dl,{assertAndGetBroadcastShape:()=>dt,getBroadcastDims:()=>QC,getReductionAxes:()=>Wt});function QC(e,t){let n=e.length,r=[];for(let s=0;s1&&o===1&&r.unshift(a)}return r}function Wt(e,t){let n=[];for(let r=0;r1)&&n.unshift(a)}return n}function dt(e,t){let n=Math.max(e.length,t.length),r=new Array(n);for(let s=0;s`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);let s=n.rank===1?n.size:n.shape[1],a=r.rank===1?r.size:r.shape[0];if(A(s===a,()=>`Error in dot: inner dimensions of inputs must match, but got ${s} and ${a}.`),n.rank===1&&r.rank===1){let o=W(n,[1,-1]),i=W(r,[-1,1]),u=Fe(o,i);return W(u,[])}else if(n.rank===1&&r.rank===2){let o=W(n,[1,-1]),i=W(r,[r.shape[0],r.shape[1]]),u=Fe(o,i);return W(u,[u.size])}else if(n.rank===2&&r.rank===1){let o=W(r,[-1,1]),i=Fe(n,o);return W(i,[i.size])}else{let o=W(r,[r.shape[0],r.shape[1]]);return Fe(n,o)}}var mw=B({dot_:mM});function gM(e,...t){let n=t.map((s,a)=>_(s,`tensors${a}`,"einsum")),r={equation:e};return M.runKernel(Vf,n,r)}var Qa=B({einsum_:gM});function bM(e){let n={x:_(e,"x","elu","float32")};return M.runKernel(Yo,n)}var pl=B({elu_:bM});function yM(e,t){let n=_(e,"x","ensureShape","string_or_numeric");if(!sC(n.shape,t))throw new Error(`EnsureShape: Shape of tensor ${n.shape} is not compatible with expected shape ${t}`);return e}var eT=B({ensureShape_:yM});function vM(e){let t=_(e,"x","erf");A(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=ae(t,"float32"));let n={x:t};return M.runKernel(Zo,n)}var gw=B({erf_:vM});function bw(e,t){for(let n=0;ne[a]);return[n,s]}function yo(e,t){let n=t.map(r=>1);return tT(e,n,t)}function xM(e,t,n){A(bw(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function rT(e,t){if(bw(e,t))return null;let n=[];for(let r=0;rn.push(r)),n}function yw(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function wM(e,t){let n=[];for(let r=t-e;r"Axis must be <= rank of the tensor");let r={input:n},s={dim:t};return M.runKernel(Tc,r,s)}var Gt=B({expandDims_:DM});function $M(e){let n={x:_(e,"x","expm1")};return M.runKernel(Qo,n)}var xw=B({expm1_:$M});function FM(e,t){let n=_(e,"x","tile","string_or_numeric");A(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let r={x:n},s={reps:t};return M.runKernel(Ta,r,s)}var Pn=B({tile_:FM});function RM(e,t,n,r="float32"){t==null&&(t=e);let s=Me([e,t],r),a=e<=t?e:t;for(let i=0;i`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${a.rank}.`),A(Hu(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let o=a,i=!1;a.rank===3&&(i=!0,o=W(a,[1,a.shape[0],a.shape[1],a.shape[2]]));let u={x:o},c={depthRadius:t,bias:n,alpha:r,beta:s},l=M.runKernel(di,u,c);return i?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Sw=B({localResponseNormalization_:jM});function qM(e){let n={x:_(e,"x","log","float32")};return M.runKernel(ci,n)}var nr=B({log_:qM});function KM(e){let n={x:_(e,"x","log1p")};return M.runKernel(li,n)}var gp=B({log1p_:KM});function XM(e){return A(la(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let r=_(t,"x","tf.grad","string_or_numeric"),s=n!=null?_(n,"dy","tf.grad"):null;return M.tidy(()=>{let{value:a,grads:o}=M.gradients(()=>e(r),[r],s);return s!=null&&Nn(a.shape,s.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),om(o),o[0]})}}function YM(e){return A(la(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{A(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=kd(t,"args","tf.grads","string_or_numeric"),s=n!=null?_(n,"dy","tf.grads"):null;return M.tidy(()=>{let{value:a,grads:o}=M.gradients(()=>e(...r),r,s);return s!=null&&Nn(a.shape,s.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),om(o),o})}}function ZM(e){return A(la(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{A(t instanceof Ne,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),A(n==null||n instanceof Ne,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:s}=M.gradients(()=>e(t),[t],n);return om(r),{grad:r[0],value:s}}}function JM(e){return A(la(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{A(Array.isArray(t)&&t.every(s=>s instanceof Ne),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),A(n==null||n instanceof Ne,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=M.gradients(()=>e(...t),t,n);return n!=null&&Nn(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),om(r.grads),r}}function oT(e,t){A(la(e),()=>"The f passed in variableGrads(f) must be a function"),A(t==null||Array.isArray(t)&&t.every(c=>c instanceof pa),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let c in M.registeredVariables)t.push(M.registeredVariables[c])}let r=n?t.filter(c=>!c.trainable):null,s=t.length;t=t.filter(c=>c.trainable),A(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${s} variables is trainable.`);let a=!0,{value:o,grads:i}=M.gradients(e,t,null,a);A(i.some(c=>c!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),A(o.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${o.rank} tensor`);let u={};return t.forEach((c,l)=>{i[l]!=null&&(u[c.name]=i[l])}),r!=null&&r.forEach(c=>u[c.name]=null),{value:o,grads:u}}function ps(e){return M.customGrad(e)}function om(e){if(e.filter(n=>n==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 QM(e){let n={x:_(e,"x","neg")};return M.runKernel(zc,n)}var bt=B({neg_:QM});function eL(e){let n={x:_(e,"x","softplus")};return M.runKernel(Bi,n)}var qi=B({softplus_:eL});function tL(e){let t=_(e,"x","logSigmoid");return ps(r=>({value:bt(qi(bt(r))),gradFunc:o=>z(o,pr(bt(r)))}))(t)}var Cw=B({logSigmoid_:tL});function nL(e,t){let n=_(e,"a","sub"),r=_(t,"b","sub");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(Gi,s)}var le=B({sub_:nL});function rL(e,t=-1){let n=_(e,"logits","logSoftmax");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Log Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and axis was ${t}`);return ps((s,a)=>{let i=hr(s,t,!0),u=le(s,i),c=le(ae(u,"float32"),nr(ge(fn(u),t,!0)));return a([c]),{value:c,gradFunc:(p,d)=>{let[h]=d,f=!0,g=fn(h);return le(p,z(ge(p,t,f),g))}}})(n)}var im=B({logSoftmax_:rL});function sL(e,t=null,n=!1){let r=_(e,"x","logSumExp"),s=Fr(t,r.shape),a=hr(r,s,!0),o=le(r,a),i=fn(o),u=ge(i,s),c=nr(u),l=X(W(a,c.shape),c);if(n){let p=yo(l.shape,s);return W(l,p)}return l}var bp=B({logSumExp_:sL});function aL(e,t){let n=_(e,"a","logicalAnd","bool"),r=_(t,"b","logicalAnd","bool");dt(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Rc,s)}var $r=B({logicalAnd_:aL});function oL(e){let n={x:_(e,"x","logicalNot","bool")};return M.runKernel(Pc,n)}var yp=B({logicalNot_:oL});function iL(e,t){let n=_(e,"a","logicalOr","bool"),r=_(t,"b","logicalOr","bool");dt(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Oc,s)}var um=B({logicalOr_:iL});function uL(e,t){let n=_(e,"a","logicalXor","bool"),r=_(t,"b","logicalXor","bool");return dt(n.shape,r.shape),$r(um(e,t),yp($r(e,t)))}var Tw=B({logicalXor_:uL}),Rh=2147483648;function cL(e,t,n="left"){let r=_(e,"sortedSequence","searchSorted"),s=_(t,"values","searchSorted"),a=r.shape[r.shape.length-1],o=s.shape[s.shape.length-1],i=W(r,[-1,a]),u=W(s,[-1,o]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==u.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(ut(u.shape)>=Rh)throw new Error(`values tensor size must less than ${Rh}`);if(i.shape[1]>=Rh)throw new Error(`trailing dim_size must less than ${Rh} for int32 output type, was ${i.shape[1]}`);let c={sortedSequence:i,values:u},l={side:n};return M.runKernel(Jc,c,l)}var cm=B({searchSorted_:cL});function iT(e,t){return cm(e,t,"left")}function lL(e,t,n,r,s){let a=_(e,"x","maxPool"),o=1,i=a,u=!1;a.rank===3&&(u=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),A(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),A(fs(n,o),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),_n("maxPool",r,s);let c={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=M.runKernel(fi,c,l);return u?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Rt=B({maxPool_:lL});function dL(e,t=[1,1,1],n,r,s,a="NDHWC"){let o=_(e,"x","maxPool3d"),i=o,u=!1;o.rank===4&&(u=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),A(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),A(a==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${a}`),_n("maxPool3d",r,s);let c={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:a},p=M.runKernel(Lc,c,l);return u?W(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Nw=B({maxPool3d_:dL});function pL(e,t,n,r,s=!1){let o={x:_(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:s},u=M.runKernel(Kd,o,i);return{result:u[0],indexes:u[1]}}var uT=B({maxPoolWithArgmax_:pL});function hL(e,t){let n=_(e,"a","maximum"),r=_(t,"b","maximum");[n,r]=At(n,r),n.dtype==="bool"&&(n=ae(n,"int32"),r=ae(r,"int32")),dt(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(hi,s)}var ms=B({maximum_:hL});function fL(e,t=null,n=!1){let s={x:_(e,"x","mean")},a={axis:t,keepDims:n};return M.runKernel(mi,s,a)}var _t=B({mean_:fL});function kt(e,t="float32"){if(ar(e),t==="complex64"){let r=kt(e,"float32"),s=kt(e,"float32");return As(r,s)}let n=Pf(ut(e),t);return M.makeTensor(n,e,t)}function On(e,t="float32"){if(ar(e),t==="complex64"){let r=On(e,"float32"),s=kt(e,"float32");return As(r,s)}let n=$x(ut(e),t);return M.makeTensor(n,e,t)}function cT(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 r=_(e,"x","meshgrid",e instanceof Ne?e.dtype:"float32");if(t===void 0)return[r];let s=_(t,"y","meshgrid",t instanceof Ne?t.dtype:"float32"),a=ut(r.shape),o=ut(s.shape);return n==="xy"?(r=W(r,[1,-1]),s=W(s,[-1,1]),[Fe(On([o,1],r.dtype),r),Fe(s,On([1,a],s.dtype))]):(r=W(r,[-1,1]),s=W(s,[1,-1]),[Fe(r,On([1,o],r.dtype)),Fe(On([a,1],s.dtype),s)])}function mL(e,t){let n=_(e,"a","minimum"),r=_(t,"b","minimum");[n,r]=At(n,r),n.dtype==="bool"&&(n=ae(n,"int32"),r=ae(r,"int32")),dt(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(bi,s)}var ga=B({minimum_:mL});function gL(e,t,n){A(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let r=_(e,"x","mirrorPad");if(r.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");A(t.length===r.rank,()=>`Padding doesn't match input. Must be ${r.rank}. Got ${t.length}.`);let s=n==="reflect"?1:0;for(let i=0;i"Invalid number of paddings. Must be length of 2 each."),A(t[i][0]>=0&&t[i][0]<=r.shape[i]-s&&t[i][1]>=0&&t[i][1]<=r.shape[i]-s,()=>`Padding in dimension ${i} cannot be greater than or equal to ${r.shape[i]-s} or less than 0 for input of shape ${r.shape}`);let a={paddings:t,mode:n},o={x:r};return M.runKernel(yi,o,a)}var _w=B({mirrorPad_:gL});function bL(e,t){let n=_(e,"a","mod"),r=_(t,"b","mod");[n,r]=At(n,r);let s={a:n,b:r};return M.runKernel(vi,s)}var Ew=B({mod_:bL});function yL(e,t=null,n=!1){e=_(e,"x","moments");let r=Fr(t,e.shape),s=_t(e,r,n),a=s.shape;n||(a=yo(s.shape,r));let o=lt(le(ae(e,"float32"),W(s,a))),i=_t(o,r,n);return{mean:s,variance:i}}var vp=B({moments_:yL});function vL(e,t,n,r){let s=_(t,"data","multiRNNCell"),a=kd(n,"c","multiRNNCell"),o=kd(r,"h","multiRNNCell"),i=s,u=[];for(let p=0;p2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${o}`);n=n||Math.random();let u={logits:o===1?W(s,[1,-1]):s},c={numSamples:t,seed:n,normalized:r},l=M.runKernel(Bc,u,c);return o===1?W(l,[l.size]):l}var dT=B({multinomial_:xL});function wL(e,t){let n=_(e,"a","notEqual","string_or_numeric"),r=_(t,"b","notEqual","string_or_numeric");[n,r]=At(n,r),dt(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Wc,s)}var vo=B({notEqual_:wL});function IL(e,t,n=1,r=0,s="int32"){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let o={indices:_(e,"indices","oneHot","int32")},i={dtype:s,depth:t,onValue:n,offValue:r};return M.runKernel(wi,o,i)}var Zu=B({oneHot_:IL});function kL(e){let n={x:_(e,"x","onesLike")};return M.runKernel(Hc,n)}var rr=B({onesLike_:kL});function SL(e,t){let n=_(e,"v1","outerProduct"),r=_(t,"v2","outerProduct");A(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);let s=W(n,[-1,1]),a=W(r,[1,-1]);return Fe(s,a)}var pT=B({outerProduct_:SL});function CL(e,t,n=0){let r=_(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let s={paddings:t,constantValue:n},a={x:r};return M.runKernel(Ii,a,s)}var yr=B({pad_:CL});function TL(e,t,n=0){return A(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),yr(e,[t],n)}var hT=B({pad1d_:TL});function NL(e,t,n=0){return A(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),yr(e,t,n)}var fT=B({pad2d_:NL});function _L(e,t,n=0){return A(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),yr(e,t,n)}var mT=B({pad3d_:_L});function EL(e,t,n=0){return A(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),yr(e,t,n)}var gT=B({pad4d_:EL});function AL(e,t,n){let r=_(e,"x","spaceToBatchND");A(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),A(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),A(r.shape.reduce((o,i,u)=>u>0&&u<=t.length?o&&(i+n[u-1][0]+n[u-1][1])%t[u-1]===0:o,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let s={x:r},a={blockShape:t,paddings:n};return M.runKernel(tl,s,a)}var xp=B({spaceToBatchND_:AL});function DL(e,t,n,r,s,a,o){s==null&&(s=[1,1]),a==null&&(a=1),r===0&&(r="valid");let i=_(e,"x","maxPool"),u=i,c=!1;i.rank===3&&(c=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),A(fs(a,s),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let l=HC(u.shape,t,a,s,r),p=[l.dilationHeight,l.dilationWidth],d;r==="same"?d=FL([l.filterHeight,l.filterWidth],p):d=[[0,0],[0,0]];let h=p[0]===1&&p[1]===1,[f,g]=$L([l.inHeight,l.inWidth],p,d),m=h?r:"valid",b=h?u:xp(u,p,f),v=(n==="avg"?()=>br(b,t,a,m,o):()=>Rt(b,t,a,m,o))(),x=h?v:pp(v,p,g);return c?W(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function $L(e,t,n){let r=n.map(l=>l[0]),s=n.map(l=>l[1]),a=e.concat(r,s),o=t.map((l,p)=>(l-a[p]%l)%l),i=s.map((l,p)=>l+o[p]),u=t.map((l,p)=>[r[p],i[p]]),c=t.map((l,p)=>[0,o[p]]);return[u,c]}function FL(e,t){let r=e.map((o,i)=>o+(o-1)*(t[i]-1)).map(o=>o-1),s=r.map(o=>Math.floor(o/2)),a=r.map((o,i)=>o-s[i]);return r.map((o,i)=>[s[i],a[i]])}var Aw=B({pool_:DL});function RL(e,t){let n=_(e,"x","prelu"),r=_(t,"alpha","prelu"),s={x:n,alpha:r};return M.runKernel(Si,s)}var wp=B({prelu_:RL});function PL(e,t=null,n=!1){let r=_(e,"x","prod");r.dtype==="bool"&&(r=ae(r,"int32"));let s={x:r},a={axis:t,keepDims:n};return M.runKernel(Ci,s,a)}var Dw=B({prod_:PL});function OL(e,t,n,r){let s=e.map((l,p)=>_(l,`tensors${p}`,"raggedGather","int32")),a=_(t,"paramsDenseValues","raggedGather"),o=_(n,"indices","raggedGather","int32"),i={paramsNestedSplits:s,paramsDenseValues:a,indices:o},u={outputRaggedRank:r},c=M.runKernel(jf,i,u);return{outputNestedSplits:c.slice(0,c.length-1),outputDenseValues:c[c.length-1]}}var bT=B({raggedGather_:OL});function ML(e,t,n){let r=_(e,"starts","raggedRange"),s=_(t,"limits","raggedRange",r.dtype),a=_(n,"deltas","raggedRange",r.dtype),o={starts:r,limits:s,deltas:a},i=M.runKernel(qf,o);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var yT=B({raggedRange_:ML});function LL(e,t,n,r,s){let a=_(e,"shape","raggedTensorToTensor","int32"),o=_(t,"values","raggedTensorToTensor"),i=_(n,"defaultValue","raggedTensorToTensor",o.dtype),u=r.map((p,d)=>_(p,`tensors${d}`,"raggedTensorToTensor","int32")),c={shape:a,values:o,defaultValue:i,rowPartitionTensors:u},l={rowPartitionTypes:s};return M.runKernel(Kf,c,l)}var vT=B({raggedTensorToTensor_:LL});function BL(e,t,n){ar(e);let r=ut(e),s=null;if(n==null||n==="float32")s=new Float32Array(r);else if(n==="int32")s=new Int32Array(r);else if(n==="bool")s=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let a=0;aIT,createVideoElement:()=>qL,encodeStrings:()=>kT,expectArrayBuffersEqual:()=>jL,expectArraysClose:()=>WL,expectArraysEqual:()=>UL,expectNumbersClose:()=>GL,expectPromiseToFail:()=>VL,expectValuesInRange:()=>HL,play:()=>KL,testEpsilon:()=>Fw});var zL=.001,IT=.1;function WL(e,t,n){return n==null&&(n=Fw()),Wv(e,t,(r,s)=>Rw(r,s,n))}function Fw(){return M.backend.floatPrecision()===32?zL:IT}function Wv(e,t,n){let r=!0;if((en(e)||en(t))&&(r=!1),en(e)&&en(t)&&(r=!0),r){let o=e.constructor.name,i=t.constructor.name;if(o!==i)throw new Error(`Arrays are of different type. Actual: ${o}. Expected: ${i}`)}if(Array.isArray(e)&&Array.isArray(t)){let o=ds(e),i=ds(t);if(!$s(o,i))throw new Error(`Arrays have different shapes. Actual: [${o}]. Expected: [${i}]`)}let s=en(e)?e:da(e),a=en(t)?t:da(t);if(s.length!==a.length)throw new Error(`Arrays have different lengths actual: ${s.length} vs expected: ${a.length}. Actual: ${s}. Expected: ${a}.`);for(let o=0;ot.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function UL(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return ra(e)||ra(e[0])||ra(t)||ra(t[0])?Wv(e,n,(r,s)=>r==s):Wv(e,t,(r,s)=>Rw(r,s,0))}function GL(e,t,n){if(n==null&&(n=Fw()),!Rw(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Rw(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function HL(e,t,n){for(let r=0;rn)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function jL(e,t){let n=new Float32Array(e),r=new Float32Array(t);if(n.length!==r.length)throw new Error(`Expected ArrayBuffer to be of length ${r.length}, but it was ${n.length}`);for(let s=0;s{t.addEventListener("loadeddata",r=>n(t)),t.load()})}async function KL(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var Pw=class{constructor(e,t,n,r,s){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=r,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let a=s||Math.random();this.random=$w.alea(a.toString())}nextValue(){if(!isNaN(this.nextVal)){let r=this.nextVal;return this.nextVal=NaN,r}let e,t,n=!1;for(;!n;){let r,s,a;do r=2*this.random()-1,s=2*this.random()-1,a=r*r+s*s;while(a>=1||a===0);let o=Math.sqrt(-2*Math.log(a)/a);e=this.mean+this.stdDev*r*o,t=this.mean+this.stdDev*s*o,(!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}},XL=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let s=r||Math.random();this.randu=$w.alea(s.toString()),this.randn=new Pw(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,r,s,a;for(;;){do r=this.randn.nextValue(),a=1+this.c*r;while(a<=0);if(a*=a*a,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-a+Math.log(a)),s=this.randu(),sthis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=$w.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function ZL(e,t,n=1,r="float32",s){if(ar(e),n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let a=new XL(t,n,r,s),o=Me(e,r);for(let i=0;i`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),gr(t,0)}var NT=B({reverse1d_:iB});function uB(e,t){let n=_(e,"x","reverse");return A(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),gr(n,t)}var _T=B({reverse2d_:uB});function cB(e,t){let n=_(e,"x","reverse");return A(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),gr(n,t)}var ET=B({reverse3d_:cB});function lB(e,t){let n=_(e,"x","reverse");return A(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),gr(n,t)}var AT=B({reverse4d_:lB});function dB(e){let n={x:_(e,"x","round")};return M.runKernel($i,n)}var pm=B({round_:dB});function pB(e){let n={x:_(e,"x","rsqrt","float32")};return M.runKernel(Fi,n)}var hm=B({rsqrt_:pB});function hB(e){let n={x:_(e,"x","selu")};return M.runKernel(Ri,n)}var fm=B({selu_:hB});function fB(e,t,n,r,s,a=[1,1],o="NHWC"){let i=_(e,"x","separableConv2d"),u=_(t,"depthwiseFilter","separableConv2d"),c=_(n,"pointwiseFilter","separableConv2d"),l=i,p=!1;if(i.rank===3&&(p=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),o==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");A(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),A(u.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${u.rank}.`),A(c.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${u.rank}.`),A(c.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${c.shape[0]}.`),A(c.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${c.shape[1]}.`);let d=u.shape[2],h=u.shape[3];A(c.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${c.shape[2]}.`);let f=Aa(l,u,r,s,o,a),m=Ft(f,c,1,"valid",o);return p?W(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Fa=B({separableConv2d_:fB});async function mB(e,t){let n=_(e,"x","setdiff1d"),r=_(t,"y","setdiff1d");A(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),A(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),A(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);let s=await n.data(),a=await r.data(),o=new Set(a),i=0;for(let l=0;l`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),Ve(r,[t],[n])}var Ip=B({slice1d_:vB});function xB(e,t,n){let r=_(e,"x","slice2d");return A(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),Ve(r,t,n)}var bm=B({slice2d_:xB});function wB(e,t,n){let r=_(e,"x","slice3d");return A(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),Ve(r,t,n)}var Ki=B({slice3d_:wB});function IB(e,t,n){let r=_(e,"x","slice4d");return A(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),Ve(r,t,n)}var Qu=B({slice4d_:IB});function kB(e,t=-1){let n=_(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let r={logits:n},s={dim:t};return M.runKernel(Vi,r,s)}var Kr=B({softmax_:kB});function SB(e){A(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return M.runKernel(Uf,t)}var kp=B({fft_:SB});function CB(e){A(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return M.runKernel(Gf,t)}var ec=B({ifft_:CB});function TB(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let s=W(e,[n,t]);r=ec(s)}else{let s=[n,2*(t-1)],a=W(Ju(e),[n,t]),o=W(fp(e),[n,t]),i=gr(Ve(a,[0,1],[n,t-2]),1),u=z(gr(Ve(o,[0,1],[n,t-2]),1),xe(-1)),c=tt([a,i],1),l=tt([o,u],1),p=W(As(c,l),[s[0],s[1]]);r=ec(p)}if(r=Ju(r),e.rank===3&&e.shape[0]!==0){let s=r,a=e.shape[0];r=W(r,[a,r.shape[0]/a,r.shape[1]]),s.dispose()}return r}var ym=B({irfft_:TB});function NB(e,t,n=0){let s={x:_(e,"x","split")},a={numOrSizeSplits:t,axis:n};return M.runKernel(nl,s,a)}var Mn=B({split_:NB});function _B(e,t){A(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],r=e.size/n,s;if(t!=null&&t0),g=e.shape.map(m=>m);g[e.shape.length-1]=t,s=Ve(e,f,g),n=t}else if(t!=null&&t>n){let f=e.shape.map(g=>g);f[e.shape.length-1]=t-n,s=tt([e,kt(f)],e.shape.length-1),n=t}else s=e;let a=je(s),o=W(As(s,a),[r,n]),i=kp(o),u=Math.floor(n/2)+1,c=Ju(i),l=fp(i),p=Mn(c,[u,n-u],c.shape.length-1),d=Mn(l,[u,n-u],l.shape.length-1),h=s.shape.slice();return h[s.shape.length-1]=u,W(As(p[0],d[0]),h)}var Sp=B({rfft_:_B});function EB(e,t){let n=_(e,"a","squaredDifference"),r=_(t,"b","squaredDifference");[n,r]=At(n,r),dt(n.shape,r.shape);let s={a:n,b:r},a={};return M.runKernel(Ui,s,a)}var vm=B({squaredDifference_:EB});function AB(e,t){let n=_(e,"x","squeeze","string_or_numeric");return W(n,aC(n.shape,t).newShape)}var Ra=B({squeeze_:AB});function DB(e,t=0){let n=kd(e,"tensors","stack","string_or_numeric");A(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&A(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,s={axis:t};return M.runKernel(jc,r,s)}var Dt=B({stack_:DB});function $B(e,t=0){let r={x:_(e,"x","step")},s={alpha:t};return M.runKernel(Na,r,s)}var Xi=B({step_:$B});function FB(e,t,n,r,s=0,a=0,o=0,i=0,u=0){let l={x:_(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:r,beginMask:s,endMask:a,ellipsisMask:o,newAxisMask:i,shrinkAxisMask:u};return M.runKernel(al,l,p)}var Lw=B({stridedSlice_:FB});function RB(e){let n={x:_(e,"x","tan","float32")};return M.runKernel(Hi,n)}var Bw=B({tan_:RB});function He(e,t){_o(e);let n=ds(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return _a(e,null,n,t)}function Dr(e,t,n){if(_o(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=ds(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return _a(e,t,r,n)}function Cp(e,t,n){if(_o(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=ds(e,n);if(r.length!==3&&r.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return _a(e,t,r,n)}function Rr(e,t,n){if(_o(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=ds(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return _a(e,t,r,n)}function $T(e,t,n){if(_o(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=ds(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return _a(e,t,r,n)}function FT(e,t,n){if(_o(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=ds(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,_a(e,t,r,n)}var xm={};Ee(xm,{calculateShapes:()=>RT,validateInput:()=>wm,validateUpdateShape:()=>zw});function zw(e,t,n){let r=t.rank>1?t.shape[t.rank-1]:1,s=t.rank>1?t.rank-1:1,a=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${r}, and batchDim: ${s}.`;if(n.rank1?t.shape[r-1]:1,a=n.length,o=1;for(let p=s;p= 0 but got ${t}`);if(t>s)throw new Error(`'k' passed to topk() must be <= the last dimension (${s}) but got ${t}`);let a={x:r},o={k:t,sorted:n},[i,u]=M.runKernel(ol,a,o);return{values:i,indices:u}}var Ww=B({topk_:OB});function MB(e,t=0,n=1,r,s){if(ar(e),r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let a=new Pw(t,n,r,!0,s),o=Me(e,r);for(let i=0;i0,()=>"The input tensor must be at least 1D");let r={x:n},s={axis:t},[a,o]=M.runKernel(sp,r,s);return{values:a,indices:o}}var Vw=B({unique_:LB});function BB(e,t,n){let r=_(e,"x","unsortedSegmentSum"),s=_(t,"segmentIds","unsortedSegmentSum","int32");A(Hu(n),()=>"numSegments must be of dtype int");let a={x:r,segmentIds:s},o={numSegments:n};return M.runKernel(ap,a,o)}var km=B({unsortedSegmentSum_:BB});function zB(e,t=0){let n=_(e,"x","unstack","string_or_numeric");A(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},s={axis:t};return M.runKernel(ul,r,s)}var pt=B({unstack_:zB});function OT(e,t){return cm(e,t,"right")}function Uw(e,t=!0,n,r){return M.makeVariable(e,t,n,r)}function MT(e,t){let n=[];for(let a=0;a0,()=>"mask cannot be scalar"),Nn(i.slice(a,a+o),s.shape,"mask's shape must match the first K dimensions of tensor's shape,");let u=1;for(let g=a;gi).reverse()),A(r.rank===t.length,()=>`Error in transpose: rank of input ${r.rank} must match length of perm ${t}.`),t.forEach(o=>{A(o>=0&&o`All entries in 'perm' must be between 0 and ${r.rank-1} but got ${t}`)}),r.rank<=1)return r.clone();let s={x:r},a={perm:t};return r.dtype==="complex64"?O(()=>{let o=Ju(r),i=fp(r);return o=M.runKernel(_s,{x:o},a),i=M.runKernel(_s,{x:i},a),n&&(i=bt(i)),As(o,i)}):M.runKernel(_s,s,a)}var Re=B({transpose_:UB});function GB(e,t,n,r,s=!0){let a=_(e,"v","movingAverage"),o=_(t,"x","movingAverage"),i=_(n,"decay","movingAverage");CC(a,o),A($s(a.shape,o.shape),()=>"Shape mismatch in v and x");let u=xe(1),c=le(u,i),l=z(le(o,a),c);if(s){A(r!=null,()=>"When using zeroDebias: true, step is required.");let p=_(r,"step","movingAverage");l=fe(l,le(u,Ds(i,p)))}return X(a,l)}var BT=B({movingAverage_:GB});function HB(e,t,n){ar(n);let r=_(e,"indices","scatterND","int32"),s=_(t,"updates","scatterND");wm(s,r,n);let a={indices:r,updates:s},o={shape:n};return M.runKernel(Yc,a,o)}var zT=B({scatterND_:HB});function jB(e,t,n,r){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 s=e.rank>0?e.shape[0]:1,a=e.rank>1?e.shape[1]:1;if(n.length!==a)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${a}.`);let o=t.size;if(!(t.rank===0||t.rank===1&&o===s))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${s}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function qB(e,t,n,r=0){ar(n);let s=_(e,"sparseIndices","sparseToDense","int32"),a=_(t,"sparseValues","sparseToDense","string_or_numeric"),o=_(r,"defaultValue","sparseToDense",a.dtype);jB(s,a,n,o);let i={sparseIndices:s,sparseValues:a,defaultValue:o},u={outputShape:n};return M.runKernel(sl,i,u)}var WT=B({sparseToDense_:qB});function KB(e,t){let n=_(t,"indices","gatherND","int32"),s={params:_(e,"x","gatherND","string_or_numeric"),indices:n};return M.runKernel(Ec,s)}var VT=B({gatherND_:KB});function XB(e,t){if(t==null)return e.shape.slice();if($s(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r`x has to be a floating point tensor since it's going to be scaled, but got a ${s.dtype} tensor instead.`),A(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Ne?s.clone():s;let a=XB(s,n),o=1-t,i=fe(fl(X($a(a,0,1,"float32",r),o)),o);return z(s,i)}var Hw=B({dropout_:YB});function jw(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Sm(e,t,n){let r=1-e%2,s=new Float32Array(e);for(let a=0;a1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),A(r.rank-1===s.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${s.rank}`),Nn(r.shape.slice(0,r.shape.length-1),s.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let a=r.shape[r.shape.length-1];A(n>0&&n<=a,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${a}), but got ${n}`);let o=await r.data(),i=await s.data(),[u,c]=[o.length/a,a],l=oC("bool",u);for(let p=0;pm.value-g.value),l[p]=0;for(let g=0;gez,depthwiseConv2d:()=>sz,matMul:()=>oz});function JB(e,t,n,r,s,a="NHWC",o){let i=e;e.rank===3&&(i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u=t;u.rank===3&&(u=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),A(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),A(u.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${u.shape}.`),A(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let c=a==="NHWC"?i.shape[3]:i.shape[1],l=a==="NHWC"?u.shape[3]:u.shape[1];A(c===n[2],()=>`Error in conv2dDerFilter: depth of input ${c}) must match input depth in filter (${n[2]}.`),A(l===n[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${n[3]}).`),_n("conv2dDerFilter",s,o);let p={x:i,dy:u},d={strides:r,pad:s,dataFormat:a,dimRoundingMode:o,filterShape:n};return M.runKernel(Lf,p,d)}var qw=B({conv2DBackpropFilter_:JB});function Cm(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return z(e,Xi(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function Tm(e,t){let n=t,r=Wt(e.shape,t.shape);return r.length>0&&(n=ge(n,r)),W(n,e.shape)}function Nm(e,t,n,r){if(t==="linear")return e;if(t==="relu")return Ke(e);if(t==="elu")return pl(e);if(t==="relu6")return dm(e);if(t==="prelu")return wp(e,n);if(t==="leakyrelu")return mp(e,r);if(t==="sigmoid")return pr(e);throw new Error(`Unknown fused activation ${t}.`)}var _m=(e,t)=>!(e>0)||t==="linear";function QB({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:a=[1,1],dimRoundingMode:o,bias:i,activation:u="linear",preluActivationWeights:c,leakyreluAlpha:l}){if(u=u||"linear",_m(M.state.gradientDepth,u)===!1){A(s==="NHWC",()=>`Error in fused conv2d: got dataFormat of ${s} but only NHWC is currently supported for the case of gradient depth is 0 and the activation is not linear.`);let S=Ft(e,t,n,r,s,a,o);return i!=null&&(S=X(S,i)),Nm(S,u,c,l)}let p=_(e,"x","conv2d","float32"),d=_(t,"filter","conv2d","float32"),h=p,f=!1;p.rank===3&&(f=!0,h=W(p,[1,p.shape[0],p.shape[1],p.shape[2]])),A(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),A(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),_n("fused conv2d",r,o);let g=s==="NHWC"?h.shape[3]:h.shape[1];A(d.shape[2]===g,()=>`Error in conv2d: depth of input (${g}) must match input depth for filter ${d.shape[2]}.`),A(fs(n,a),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`);let m=dp(h.shape,d.shape,n,a,r,o),b;i!=null&&(b=_(i,"bias","fused conv2d"),[b]=At(b,p),s==="NHWC"?dt(m.outShape,b.shape):(A(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}.`),A(b.shape.length===0||b.shape[0]===m.outChannels||b.shape[0]===1,()=>`Error in fused conv2d: bias shape (${b.shape}) is not compatible with the number of output channels (${m.outChannels})`)));let y;if(c!=null){let S=c.shape;if(A(S.length<=1||S.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-${S.length}.`),S.length===1)A(S[0]===1||S[0]===m.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the number of output channels (${m.outChannels}).`);else if(S.length===3)try{dt(S,m.outShape)}catch(N){let E=`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the output shape of the conv2d (${m.outShape}).`;throw Error(E)}y=_(c,"prelu weights","fused conv2d")}let v=(S,N)=>{A(s==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${s} but only NHWC is currently supported.`);let[E,$,F,D]=N,R=Cm(S,F,u);A(ma(a),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`);let C=cw($.shape,R,E,n,r),L=qw($,R,E.shape,n,r),U=[C,L];if(D!=null){let H=Tm(D,R);U.push(H)}return U},x={x:h,filter:d,bias:b,preluActivationWeights:y},k={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o,activation:u,leakyreluAlpha:l};return i==null?ps((N,E,$)=>{let F=M.runKernel(co,x,k);return $([E,N,F]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:v}})(h,d):ps((N,E,$,F)=>{let D=M.runKernel(co,x,k);return F([E,N,D,$]),f&&(D=W(D,[D.shape[1],D.shape[2],D.shape[3]])),{value:D,gradFunc:v}})(h,d,b)}var ez=B({fusedConv2d_:QB});function tz(e,t,n,r,s,a=[1,1],o){let i=e;e.rank===3&&(i=W(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let u=t;u.rank===3&&(u=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={x:i,dy:u},l={strides:r,pad:s,dimRoundingMode:o,dilations:a,filterShape:n};return M.runKernel(Bf,c,l)}var GT=B({depthwiseConv2dNativeBackpropFilter_:tz});function nz(e,t,n,r,s,a=[1,1],o){let i=t,u=!1;t.rank===3&&(u=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let c={dy:i,filter:n},l={strides:r,pad:s,dimRoundingMode:o,dilations:a,inputShape:e},p=M.runKernel(zf,c,l);return u?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var HT=B({depthwiseConv2dNativeBackpropInput_:nz});function rz({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:a=[1,1],dimRoundingMode:o,bias:i,activation:u="linear",preluActivationWeights:c,leakyreluAlpha:l}){if(_m(M.state.gradientDepth,u)===!1){let k=Aa(e,t,n,r,s,a,o);return i!=null&&(k=X(k,i)),Nm(k,u,c,l)}let p=_(e,"x","depthwiseConv2d","float32"),d=_(t,"filter","depthwiseConv2d","float32"),h=p,f=!1;p.rank===3&&(f=!0,h=W(p,[1,p.shape[0],p.shape[1],p.shape[2]])),A(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),A(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),A(h.shape[3]===d.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${d.shape[2]}.`),a==null&&(a=[1,1]),A(fs(n,a),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),_n("fused depthwiseConv2d",r,o);let g=dp(h.shape,d.shape,n,a,r,o,!0),m;i!=null&&(m=_(i,"bias","fused conv2d"),[m]=At(m,p),dt(g.outShape,m.shape));let b;c!=null&&(b=_(c,"prelu weights","fused depthwiseConv2d"));let y=(k,S)=>{A(ma(a),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${a}'`);let[N,E,$,F]=S,D=Cm(k,$,u),R=HT(E.shape,D,N,n,r,a,o),C=GT(E,D,N.shape,n,r,a,o);if(F!=null){let L=Tm(m,D);return[R,C,L]}return[R,C]},v={x:h,filter:d,bias:m,preluActivationWeights:b},x={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o,activation:u,leakyreluAlpha:l};return i==null?ps((S,N,E)=>{let $=M.runKernel(lo,v,x);return E([N,S,$]),f&&($=W($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:y}})(h,d):ps((S,N,E,$)=>{let F=M.runKernel(lo,v,x);return $([N,S,F,E]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:y}})(h,d,m)}var sz=B({fusedDepthwiseConv2d_:rz});function az({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:s,activation:a="linear",preluActivationWeights:o,leakyreluAlpha:i=.2}){if(_m(M.state.gradientDepth,a)===!1){let D=Fe(e,t,n,r);return s!=null&&(D=X(D,s)),Nm(D,a,o,i)}let u=_(e,"a","fused matMul"),c=_(t,"b","fused matMul");[u,c]=At(u,c);let l=n?u.shape[u.rank-2]:u.shape[u.rank-1],p=r?c.shape[c.rank-1]:c.shape[c.rank-2],d=n?u.shape[u.rank-1]:u.shape[u.rank-2],h=r?c.shape[c.rank-2]:c.shape[c.rank-1],f=u.shape.slice(0,-2),g=c.shape.slice(0,-2),m=ut(f),b=ut(g);A(l===p,()=>`Error in fused matMul: inner shapes (${l}) and (${p}) of Tensors with shapes ${u.shape} and ${c.shape} and transposeA=${n} and transposeB=${r} must match.`);let v=dt(u.shape.slice(0,-2),c.shape.slice(0,-2)).concat([d,h]),x=n?W(u,[m,l,d]):W(u,[m,d,l]),k=r?W(c,[b,h,p]):W(c,[b,p,h]),S;s!=null&&(S=_(s,"bias","fused matMul"),[S]=At(S,u),dt(v,S.shape));let N;o!=null&&(N=_(o,"prelu weights","fused matMul"));let E=(D,R)=>{let[C,L,U,H]=R,K=Cm(W(D,U.shape),U,a),q,Z;if(!n&&!r?(q=Fe(K,L,!1,!0),Z=Fe(C,K,!0,!1)):!n&&r?(q=Fe(K,L,!1,!1),Z=Fe(K,C,!0,!1)):n&&!r?(q=Fe(L,K,!1,!0),Z=Fe(C,K,!1,!1)):(q=Fe(L,K,!0,!0),Z=Fe(K,C,!0,!0)),s!=null){let J=Tm(H,K);return[q,Z,J]}else return[q,Z]},$={a:x,b:k,bias:S,preluActivationWeights:N},F={transposeA:n,transposeB:r,activation:a,leakyreluAlpha:i};return s==null?ps((R,C,L)=>{let U=M.runKernel(uo,$,F);return L([R,C,U]),{value:W(U,v),gradFunc:E}})(x,k):ps((R,C,L,U)=>{let H=M.runKernel(uo,$,F);return U([R,C,H,L]),{value:W(H,v),gradFunc:E}})(x,k,S)}var oz=B({fusedMatMul_:az});function iz(e){return Sm(e,.54,.46)}var uz=B({hammingWindow_:iz});function cz(e){return Sm(e,.5,.5)}var jT=B({hannWindow_:cz});function lz(e,t,n,r=!1,s=0){let a=0,o=[];for(;a+t<=e.size;)o.push(Ve(e,a,t)),a+=n;if(r)for(;a`Error in cropAndResize: image must be rank 4,but got rank ${o.rank}.`),A(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${c},4] but had shape ${i.shape}.`),A(u.rank===1&&u.shape[0]===c,()=>`Error in cropAndResize: boxInd must be have size [${c}] but had shape ${i.shape}.`),A(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),A(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),A(s==="bilinear"||s==="nearest",()=>`method must be bilinear or nearest, but was ${s}`);let l={image:o,boxes:i,boxInd:u},p={method:s,extrapolationValue:a,cropSize:r};return M.runKernel(Ic,l,p)}var fz=B({cropAndResize_:hz});function mz(e){let t=_(e,"image","flipLeftRight","float32");A(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return M.runKernel(Nc,n,{})}var gz=B({flipLeftRight_:mz});function bz(e){let t=_(e,"image","grayscaleToRGB"),n=t.rank-1,r=t.shape[n];A(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),A(r===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${r}.`);let s=new Array(t.rank);return s.fill(1,0,n),s[n]=3,Pn(t,s)}var yz=B({grayscaleToRGB_:bz});function vz(e){let t=_(e,"image","RGBToGrayscale"),n=t.rank-1,r=t.shape[n];A(t.rank>=2,()=>`Error in RGBToGrayscale: images must be at least rank 2, but got rank ${t.rank}.`),A(r===3,()=>`Error in RGBToGrayscale: last dimension of an RGB image should be size 3, but got size ${r}.`);let s=t.dtype,a=ae(t,"float32"),o=He([.2989,.587,.114]),i;switch(t.rank){case 2:i=Qa("ij,j->i",a,o);break;case 3:i=Qa("ijk,k->ij",a,o);break;case 4:i=Qa("ijkl,l->ijk",a,o);break;case 5:i=Qa("ijklm,m->ijkl",a,o);break;case 6:i=Qa("ijklmn,n->ijklm",a,o);break;default:throw new Error("Not a valid tensor rank.")}return i=Gt(i,-1),ae(i,s)}var xz=B({rgbToGrayscale_:vz});function wz(e,t,n=0,r=.5){let s=_(e,"image","rotateWithOffset","float32");A(s.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${s.rank}.`);let a={image:s},o={radians:t,fillValue:n,center:r};return M.runKernel(ll,a,o)}var Iz=B({rotateWithOffset_:wz});function gl(e,t,n,r,s,a){r==null&&(r=.5),s==null&&(s=Number.NEGATIVE_INFINITY),a==null&&(a=0);let o=e.shape[0];return n=Math.min(n,o),A(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),A(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),A(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),A(t.rank===1,()=>"scores must be a 1D tensor"),A(t.shape[0]===o,()=>`scores has incompatible shape with boxes. Expected ${o}, but was ${t.shape[0]}`),A(0<=a&&a<=1,()=>`softNmsSigma must be in [0, 1], but was '${a}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:a}}function kz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let a=_(e,"boxes","nonMaxSuppression","float32"),o=_(t,"scores","nonMaxSuppression","float32"),i=gl(a,o,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let u={maxOutputSize:n,iouThreshold:r,scoreThreshold:s};return M.runKernel(Vc,{boxes:a,scores:o},u)}var Sz=B({nonMaxSuppression_:kz});function Cz(e,t,n){let r=Tz(e,t,n),s=r<0?-(r+1):r;e.splice(s,0,t)}function Tz(e,t,n){return _z(e,t,n||Nz)}function Nz(e,t){return e>t?1:e>>1);let i=n(t,e[a]);i>0?r=a+1:(s=a,o=!i)}return o?r:-r-1}function KT(e,t,n,r,s){return Kw(e,t,n,r,s,0)}function XT(e,t,n,r,s,a){return Kw(e,t,n,r,s,0,!1,a,!0)}function YT(e,t,n,r,s,a){return Kw(e,t,n,r,s,a,!0)}function Kw(e,t,n,r,s,a,o=!1,i=!1,u=!1){let c=[];for(let m=0;ms&&c.push({score:t[m],boxIndex:m,suppressBeginIndex:0});c.sort(kS);let l=a>0?-.5/a:0,p=[],d=[];for(;p.length0;){let m=c.pop(),{score:b,boxIndex:y,suppressBeginIndex:v}=m;if(b=v;--k){let S=Ez(e,y,p[k]);if(S>=r){x=!0;break}if(m.score=m.score*Az(r,l,S),m.score<=s)break}m.suppressBeginIndex=p.length,x||(m.score===b?(p.push(y),d.push(m.score)):m.score>s&&Cz(c,m,kS))}let h=p.length,f=n-h;i&&f>0&&(p.push(...new Array(f).fill(0)),d.push(...new Array(f).fill(0)));let g={selectedIndices:p};return o&&(g.selectedScores=d),u&&(g.validOutputs=h),g}function Ez(e,t,n){let r=e.subarray(t*4,t*4+4),s=e.subarray(n*4,n*4+4),a=Math.min(r[0],r[2]),o=Math.min(r[1],r[3]),i=Math.max(r[0],r[2]),u=Math.max(r[1],r[3]),c=Math.min(s[0],s[2]),l=Math.min(s[1],s[3]),p=Math.max(s[0],s[2]),d=Math.max(s[1],s[3]),h=(i-a)*(u-o),f=(p-c)*(d-l);if(h<=0||f<=0)return 0;let g=Math.max(a,c),m=Math.max(o,l),b=Math.min(i,p),y=Math.min(u,d),v=Math.max(b-g,0)*Math.max(y-m,0);return v/(h+f-v)}function Az(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function kS(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function Dz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let a=_(e,"boxes","nonMaxSuppressionAsync"),o=_(t,"scores","nonMaxSuppressionAsync"),i=gl(a,o,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let u=await Promise.all([a.data(),o.data()]),c=u[0],l=u[1],{selectedIndices:p}=KT(c,l,n,r,s);return a!==e&&a.dispose(),o!==t&&o.dispose(),He(p,"int32")}var $z=Dz;function Fz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=0){let o=_(e,"boxes","nonMaxSuppression"),i=_(t,"scores","nonMaxSuppression"),u=gl(o,i,n,r,s,a);n=u.maxOutputSize,r=u.iouThreshold,s=u.scoreThreshold,a=u.softNmsSigma;let c={boxes:o,scores:i},l={maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:a},p=M.runKernel(Gc,c,l);return{selectedIndices:p[0],selectedScores:p[1]}}var Rz=B({nonMaxSuppressionWithScore_:Fz});async function Pz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=0){let o=_(e,"boxes","nonMaxSuppressionAsync"),i=_(t,"scores","nonMaxSuppressionAsync"),u=gl(o,i,n,r,s,a);n=u.maxOutputSize,r=u.iouThreshold,s=u.scoreThreshold,a=u.softNmsSigma;let c=await Promise.all([o.data(),i.data()]),l=c[0],p=c[1],{selectedIndices:d,selectedScores:h}=YT(l,p,n,r,s,a);return o!==e&&o.dispose(),i!==t&&i.dispose(),{selectedIndices:He(d,"int32"),selectedScores:He(h)}}var Oz=Pz;function Mz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=!1){let o=_(e,"boxes","nonMaxSuppression"),i=_(t,"scores","nonMaxSuppression"),u=gl(o,i,n,r,s,null),c=u.maxOutputSize,l=u.iouThreshold,p=u.scoreThreshold,d={boxes:o,scores:i},h={maxOutputSize:c,iouThreshold:l,scoreThreshold:p,padToMaxOutputSize:a},f=M.runKernel(Uc,d,h);return{selectedIndices:f[0],validOutputs:f[1]}}var Lz=B({nonMaxSuppressionPadded_:Mz});async function Bz(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=!1){let o=_(e,"boxes","nonMaxSuppressionAsync"),i=_(t,"scores","nonMaxSuppressionAsync"),u=gl(o,i,n,r,s,null),c=u.maxOutputSize,l=u.iouThreshold,p=u.scoreThreshold,[d,h]=await Promise.all([o.data(),i.data()]),{selectedIndices:f,validOutputs:g}=XT(d,h,c,l,p,a);return o!==e&&o.dispose(),i!==t&&i.dispose(),{selectedIndices:He(f,"int32"),validOutputs:xe(g,"int32")}}var zz=Bz;function Wz(e,t,n=!1,r=!1){let s=_(e,"images","resizeBilinear");A(s.rank===3||s.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${s.rank}.`),A(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),A(r===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let a=s,o=!1;s.rank===3&&(o=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:a},u={alignCorners:n,halfPixelCenters:r,size:t},c=M.runKernel(Ei,i,u);return o?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var ZT=B({resizeBilinear_:Wz});function Vz(e,t,n=!1,r=!1){let s=_(e,"images","resizeNearestNeighbor");A(s.rank===3||s.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${s.rank}.`),A(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),A(s.dtype==="float32"||s.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),A(r===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let a=s,o=!1;s.rank===3&&(o=!0,a=W(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let[]=t,i={images:a},u={alignCorners:n,halfPixelCenters:r,size:t},c=M.runKernel(_i,i,u);return o?W(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var JT=B({resizeNearestNeighbor_:Vz});function Uz(e,t="binary",n=!1,r=.5){let s=_(e,"image","threshold"),a=.2989,o=.587,i=.114,u=s.shape[0]*s.shape[1],c=z(He([r]),255),l,p,d,h;if(A(s.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${s.rank}.`),A(s.shape[2]===3||s.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${s.shape[2]}.`),A(s.dtype==="int32"||s.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${s.dtype}.`),A(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),s.shape[2]===3){[l,p,d]=Mn(s,[1,1,1],-1);let m=z(l,a),b=z(p,o),y=z(d,i);h=X(X(m,b),y)}else h=e;if(t==="otsu"){let m=rw(ae(pm(h),"int32"),yn([]),256);c=Gz(m,u)}let f=n?Da(h,c):En(h,c);return ae(z(f,255),"int32")}function Gz(e,t){let n=He([-1]),r=He([0]),s=He([0]),a,o,i,u,c,l;for(let p=0;p`Error in transform: image must be rank 4,but got rank ${o.rank}.`),A(i.rank===2&&(i.shape[0]===o.shape[0]||i.shape[0]===1)&&i.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),A(a==null||a.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${a}.`);let u={image:o,transforms:i},c={interpolation:n,fillMode:r,fillValue:s,outputShape:a};return M.runKernel(il,u,c)}var qz=B({transform_:jz});function Kz(e,t,n){let r=_(e,"a","bandPart");A(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let s=r.shape,[a,o]=r.shape.slice(-2),i,u;typeof t=="number"?(A(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),A(t<=a,()=>`bandPart(): numLower (${t}) must not be greater than the number of rows (${a}).`),i=_(t<0?a:t,"numLower","bandPart")):(A(t.dtype==="int32",()=>"bandPart(): numLower's dtype must be an int32."),i=nn(Yu(t,0),a,ga(t,a))),typeof n=="number"?(A(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`),A(n<=o,()=>`bandPart(): numUpper (${n}) must not be greater than the number of columns (${o}).`),u=_(n<0?o:n,"numUpper","bandPart")):(A(n.dtype==="int32",()=>"bandPart(): numUpper's dtype must be an int32."),u=nn(Yu(n,0),o,ga(n,o)));let c=W(xo(0,a,1,"int32"),[-1,1]),l=xo(0,o,1,"int32"),p=le(c,l),d=$r(Da(p,i),Rs(p,bt(u))),h=kt([a,o],r.dtype);return W(Dt(pt(W(r,[-1,a,o])).map(f=>nn(d,f,h))),s)}var Xz=B({bandPart_:Kz});function Yz(e){let t;if(Array.isArray(e)){t=!1,A(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let s=e[0].shape[0];for(let a=1;a`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[a].shape[0]} vs. ${s})`)}else t=!0,e=Mn(e,e.shape[0],0).map(s=>Ra(s,[0]));A(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],r=e;for(let s=0;s{let a=r[s];if(s>0)for(let o=0;o=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return SS(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((u,c)=>u*c),r=pt(W(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),s=[],a=[];r.forEach(u=>{let[c,l]=SS(u,t);s.push(c),a.push(l)});let o=W(Dt(s,0),e.shape),i=W(Dt(a,0),e.shape);return[o,i]}}function SS(e,t=!1){return M.tidy(()=>{A(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],r=e.shape[1],s=am(n),a=us(e),o=Dr([[1]],[1,1]),i=us(o),u=n>=r?r:n;for(let c=0;c{let h=Ve(a,[c,c],[n-c,1]),f=hl(h),g=Ve(a,[c,c],[1,1]),m=nn(En(g,0),Dr([[-1]]),Dr([[1]])),b=le(g,z(m,f)),y=fe(h,b);y.shape[0]===1?i=us(o):i=tt([o,Ve(y,[1,0],[y.shape[0]-1,y.shape[1]])],0);let v=bt(fe(Fe(m,b),f)),x=Ve(a,[c,0],[n-c,r]),k=z(v,i),S=Re(i);if(c===0)a=le(x,Fe(k,Fe(S,x)));else{let $=le(x,Fe(k,Fe(S,x)));a=tt([Ve(a,[0,0],[c,r]),$],0)}let N=Re(k),E=Ve(s,[0,c],[n,s.shape[1]-c]);if(c===0)s=le(E,Fe(Fe(E,i),N));else{let $=le(E,Fe(Fe(E,i),N));s=tt([Ve(s,[0,0],[n,c]),$],1)}return[i,a,s]}),_e([l,p,d])}return!t&&n>r&&(s=Ve(s,[0,0],[n,r]),a=Ve(a,[0,0],[r,r])),[s,a]})}var Qz=B({qr_:Jz}),Sn;(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"})(Sn||(Sn={}));function eW(e,t,n=Sn.SUM_BY_NONZERO_WEIGHTS){let r=_(e,"losses","computeWeightedLoss"),s=null;t!=null&&(s=_(t,"weights","computeWeightedLoss"));let a=s==null?r:z(r,s);if(n===Sn.NONE)return a;if(n===Sn.SUM)return ge(a);if(n===Sn.MEAN){if(s==null)return _t(a);{let o=r.size/s.size,i=fe(ge(a),ge(s));return o>1?fe(i,xe(o)):i}}if(n===Sn.SUM_BY_NONZERO_WEIGHTS){if(s==null)return fe(ge(a),xe(r.size));{let o=z(s,On(r.shape)),i=ae(ge(vo(o,xe(0))),"float32");return fe(ge(a),i)}}throw Error(`Unknown reduction: ${n}`)}var Ps=B({computeWeightedLoss_:eW});function tW(e,t,n,r=Sn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","absoluteDifference"),a=_(t,"predictions","absoluteDifference"),o=null;n!=null&&(o=_(n,"weights","absoluteDifference")),Nn(s.shape,a.shape,"Error in absoluteDifference: ");let i=Lt(le(s,a));return Ps(i,o,r)}var nW=B({absoluteDifference_:tW});function rW(e,t,n,r,s=Sn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","cosineDistance"),o=_(t,"predictions","cosineDistance"),i=null;r!=null&&(i=_(r,"weights","cosineDistance")),Nn(a.shape,o.shape,"Error in cosineDistance: ");let u=xe(1),c=le(u,ge(z(a,o),n,!0));return Ps(c,i,s)}var sW=B({cosineDistance_:rW});function aW(e,t,n,r=Sn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","hingeLoss"),a=_(t,"predictions","hingeLoss"),o=null;n!=null&&(o=_(n,"weights","hingeLoss")),Nn(s.shape,a.shape,"Error in hingeLoss: ");let i=xe(1);s=le(z(xe(2),s),i);let u=Ke(le(i,z(s,a)));return Ps(u,o,r)}var oW=B({hingeLoss_:aW});function iW(e,t,n,r=1,s=Sn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","huberLoss"),o=_(t,"predictions","huberLoss"),i=null;n!=null&&(i=_(n,"weights","huberLoss")),Nn(a.shape,o.shape,"Error in huberLoss: ");let u=xe(r),c=Lt(le(o,a)),l=ga(c,u),p=le(c,l),d=X(z(xe(.5),lt(l)),z(u,p));return Ps(d,i,s)}var uW=B({huberLoss_:iW});function cW(e,t,n,r=1e-7,s=Sn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","logLoss"),o=_(t,"predictions","logLoss"),i=null;n!=null&&(i=_(n,"weights","logLoss")),Nn(a.shape,o.shape,"Error in logLoss: ");let u=xe(1),c=xe(r),l=bt(z(a,nr(X(o,c)))),p=z(le(u,a),nr(X(le(u,o),c))),d=le(l,p);return Ps(d,i,s)}var lW=B({logLoss_:cW});function dW(e,t,n,r=Sn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","meanSquaredError"),a=_(t,"predictions","meanSquaredError"),o=null;n!=null&&(o=_(n,"weights","meanSquaredError")),Nn(s.shape,a.shape,"Error in meanSquaredError: ");let i=vm(s,a);return Ps(i,o,r)}var pW=B({meanSquaredError_:dW});function hW(e,t){let n=_(e,"labels","sigmoidCrossEntropyWithLogits"),r=_(t,"logits","sigmoidCrossEntropyWithLogits");Nn(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let s=Ke(r),a=z(r,n),o=gp(fn(bt(Lt(r))));return X(le(s,a),o)}function fW(e,t,n,r=0,s=Sn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"multiClassLabels","sigmoidCrossEntropy"),o=_(t,"logits","sigmoidCrossEntropy"),i=null;if(n!=null&&(i=_(n,"weights","sigmoidCrossEntropy")),Nn(a.shape,o.shape,"Error in sigmoidCrossEntropy: "),r>0){let c=xe(r),l=xe(1),p=xe(.5);a=X(z(a,le(l,c)),z(p,c))}let u=hW(a,o);return Ps(u,i,s)}var mW=B({sigmoidCrossEntropy_:fW});function gW(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 ps((s,a,o)=>{let u=bp(a,[n],!0),c=le(ae(a,"float32"),u);o([s,c]);let l=bt(z(c,s));return{value:ge(l,[n]),gradFunc:(h,f)=>{let[g,m]=f,b=yo(h.shape,[n]);return[z(W(h,b),le(ae(g,"float32"),fn(m))),z(W(h,b),le(fn(m),ae(g,"float32")))]}}})(e,t)}function bW(e,t,n,r=0,s=Sn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"onehotLabels","softmaxCrossEntropy"),o=_(t,"logits","softmaxCrossEntropy"),i=null;if(n!=null&&(i=_(n,"weights","softmaxCrossEntropy")),Nn(a.shape,o.shape,"Error in softmaxCrossEntropy: "),r>0){let c=xe(r),l=xe(1),p=xe(a.shape[1]);a=X(z(a,le(l,c)),fe(c,p))}let u=gW(a,o);return Ps(u,i,s)}var yW=B({softmaxCrossEntropy_:bW});function vW(e,t,n,r){let s=_(e,"indices","sparseFillEmptyRows","int32"),a=_(t,"values","sparseFillEmptyRows"),o=_(n,"denseShape","sparseFillEmptyRows","int32"),i=_(r,"defaultValue","sparseFillEmptyRows",a.dtype);if(s.rank!==2)throw new Error(`Indices should be Tensor2D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${a.shape}`);if(o.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${o.shape}`);if(i.rank!==0)throw new Error(`Default value should be a scalar but received shape ${i.shape}`);let u={indices:s,values:a,denseShape:o,defaultValue:i},c=M.runKernel(Yd,u);return{outputIndices:c[0],outputValues:c[1],emptyRowIndicator:c[2],reverseIndexMap:c[3]}}var xW=B({sparseFillEmptyRows_:vW});function wW(e,t,n){let r=_(e,"inputIndices","sparseReshape","int32"),s=_(t,"inputShape","sparseReshape","int32"),a=_(n,"newShape","sparseReshape","int32");if(r.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${a.shape}`);let o={inputIndices:r,inputShape:s,newShape:a},i=M.runKernel(rl,o);return{outputIndices:i[0],outputShape:i[1]}}var IW=B({sparseReshape_:wW});function kW(e,t,n){let r=_(e,"data","sparseSegmentMean"),s=_(t,"indices","sparseSegmentMean","int32"),a=_(n,"segmentIds","sparseSegmentMean","int32");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${a.shape}`);let o={data:r,indices:s,segmentIds:a};return M.runKernel(Zd,o)}var SW=B({sparseSegmentMean_:kW});function CW(e,t,n){let r=_(e,"data","sparseSegmentSum"),s=_(t,"indices","sparseSegmentSum","int32"),a=_(n,"segmentIds","sparseSegmentSum","int32");if(r.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.rank!==1)throw new Error(`Indices should be Tensor1D but received shape ${s.shape}`);if(a.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape ${a.shape}`);let o={data:r,indices:s,segmentIds:a};return M.runKernel(Jd,o)}var TW=B({sparseSegmentSum_:CW});function NW(e,t,n,r,s,a,o,i){let u=_(e,"data","stringNGrams","string");if(u.dtype!=="string")throw new Error("Data must be of datatype string");if(u.shape.length!==1)throw new Error(`Data must be a vector, saw: ${u.shape}`);let c=_(t,"dataSplits","stringNGrams");if(c.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let l={separator:n,nGramWidths:r,leftPad:s,rightPad:a,padWidth:o,preserveShortSequences:i},p={data:u,dataSplits:c},d=M.runKernel(tp,p,l);return{nGrams:d[0],nGramsSplits:d[1]}}var _W=B({stringNGrams_:NW});function EW(e,t,n=!0){let r=_(e,"input","stringSplit","string"),s=_(t,"delimiter","stringSplit","string");if(r.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${r.shape}`);if(s.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${s.shape}`);let a={skipEmpty:n},o={input:r,delimiter:s},i=M.runKernel(np,o,a);return{indices:i[0],values:i[1],shape:i[2]}}var AW=B({stringSplit_:EW});function DW(e,t){let n=_(e,"input","stringToHashBucketFast","string"),r={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let s={input:n};return M.runKernel(rp,s,r)}var $W=B({stringToHashBucketFast_:DW});function FW(e,t,n,r=!0){let s=_(e,"input","staticRegexReplace","string"),a={pattern:t,rewrite:n,replaceGlobal:r};return M.runKernel(ep,{x:s},a)}var RW=B({staticRegexReplace_:FW}),QT={fft:kp,ifft:ec,rfft:Sp,irfft:ym},eN={hammingWindow:uz,hannWindow:jT,frame:qT,stft:pz},er={flipLeftRight:gz,grayscaleToRGB:yz,resizeNearestNeighbor:JT,resizeBilinear:ZT,rgbToGrayscale:xz,rotateWithOffset:Iz,cropAndResize:fz,nonMaxSuppression:Sz,nonMaxSuppressionAsync:$z,nonMaxSuppressionWithScore:Rz,nonMaxSuppressionWithScoreAsync:Oz,nonMaxSuppressionPadded:Lz,nonMaxSuppressionPaddedAsync:zz,threshold:Hz,transform:qz},Xw={bandPart:Xz,gramSchmidt:Zz,qr:Qz},tN={absoluteDifference:nW,computeWeightedLoss:Ps,cosineDistance:sW,hingeLoss:oW,huberLoss:uW,logLoss:lW,meanSquaredError:pW,sigmoidCrossEntropy:mW,softmaxCrossEntropy:yW},nN={sparseFillEmptyRows:xW,sparseReshape:IW,sparseSegmentMean:SW,sparseSegmentSum:TW},rN={stringNGrams:_W,stringSplit:AW,stringToHashBucketFast:$W,staticRegexReplace:RW},re={};Ee(re,{Serializable:()=>sN,SerializationMap:()=>aN,getRegisteredName:()=>OW,registerClass:()=>oN});var PW=new Map,Vv=new Map,sN=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},aN=class Bu{constructor(){this.classNameMap={}}static getMap(){return Bu.instance==null&&(Bu.instance=new Bu),Bu.instance}static register(t){Bu.getMap().classNameMap[t.className]=[t,t.fromConfig]}};function oN(e,t,n){A(e.className!=null,()=>"Class being registered does not have the static className property defined."),A(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),A(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),typeof t=="undefined"&&(t="Custom"),typeof n=="undefined"&&(n=e.className);let r=n,s=t+">"+r;return aN.register(e),PW.set(s,e),Vv.set(e,s),e}function OW(e){return Vv.has(e)?Vv.get(e):e.className}var Os=class extends sN{minimize(e,t=!1,n){let{value:r,grads:s}=this.computeGradients(e,n);if(n!=null){let a=n.map(o=>({name:o.name,tensor:s[o.name]}));this.applyGradients(a)}else this.applyGradients(s);return _e(s),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return oT(e,t)}dispose(){this.iterations_!=null&&_e(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:xe(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Os,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var Yw=class extends Os{static get className(){return"Adadelta"}constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=M.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=M.registeredVariables[n],a=!1;this.accumulatedGrads[r]==null&&(this.accumulatedGrads[r]={originalName:`${n}/accum_grad`,variable:O(()=>je(s).variable(a))}),this.accumulatedUpdates[r]==null&&(this.accumulatedUpdates[r]={originalName:`${n}/accum_var`,variable:O(()=>je(s).variable(a))});let o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;let i=this.accumulatedGrads[r].variable,u=this.accumulatedUpdates[r].variable;O(()=>{let c=X(z(i,this.rho),z(lt(o),1-this.rho)),l=z(fe(hn(X(u,this.epsilon)),hn(X(i,this.epsilon))),o),p=X(z(u,this.rho),z(lt(l),1-this.rho));i.assign(c),u.assign(p);let d=X(z(l,-this.learningRate),s);s.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(_e(this.accumulatedGrads.map(e=>e.variable)),_e(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.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)}},Zw=class extends Os{static get className(){return"Adagrad"}constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=M.registeredVariables[n];this.accumulatedGrads[r]==null&&(this.accumulatedGrads[r]={originalName:`${n}/accumulator`,variable:O(()=>vn(s.shape,this.initialAccumulatorValue).variable(!1))});let a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;let o=this.accumulatedGrads[r].variable;O(()=>{let i=X(o,lt(a));o.assign(i);let u=X(z(fe(a,hn(X(i,M.backend.epsilon()))),-this.learningRate),s);s.assign(u)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&_e(this.accumulatedGrads.map(e=>e.variable))}async getWeights(){return[await this.saveIterations()].concat(this.accumulatedGrads.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulatedGrads=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,initialAccumulatorValue:this.initialAccumulatorValue}}static fromConfig(e,t){return new e(t.learningRate,t.initialAccumulatorValue)}},Jw=class extends Os{static get className(){return"Adam"}constructor(e,t,n,r=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],O(()=>{this.accBeta1=xe(t).variable(),this.accBeta2=xe(n).variable()}),r==null&&(this.epsilon=M.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=le(1,this.accBeta1),r=le(1,this.accBeta2);t.forEach((s,a)=>{let o=M.registeredVariables[s],i=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:O(()=>je(o).variable(i))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:O(()=>je(o).variable(i))});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,p=X(z(c,this.beta1),z(u,1-this.beta1)),d=X(z(l,this.beta2),z(lt(u),1-this.beta2)),h=fe(p,n),f=fe(d,r);c.assign(p),l.assign(d);let g=X(z(fe(h,X(hn(f),this.epsilon)),-this.learningRate),o);o.assign(g)}),this.accBeta1.assign(z(this.accBeta1,this.beta1)),this.accBeta2.assign(z(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&_e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&_e(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedFirstMoment,...this.accumulatedSecondMoment];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e),O(()=>{this.accBeta1.assign(Ds(this.beta1,this.iterations_+1)),this.accBeta2.assign(Ds(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.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)}},Qw=class extends Os{static get className(){return"Adamax"}constructor(e,t,n,r=null,s=0){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=s,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],O(()=>{this.iteration=xe(0).variable(),this.accBeta1=xe(t).variable()}),r==null&&(this.epsilon=M.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=le(1,this.accBeta1),r=fe(-this.learningRate,X(z(this.iteration,this.decay),1));t.forEach((s,a)=>{let o=M.registeredVariables[s],i=!1;this.accumulatedFirstMoment[a]==null&&(this.accumulatedFirstMoment[a]={originalName:`${s}/m`,variable:je(o).variable(i)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:je(o).variable(i)});let u=Array.isArray(e)?e[a].tensor:e[s];if(u==null)return;let c=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,p=X(z(c,this.beta1),z(u,1-this.beta1)),d=z(l,this.beta2),h=Lt(u),f=ms(d,h);c.assign(p),l.assign(f);let g=X(z(fe(r,n),fe(p,X(f,this.epsilon))),o);o.assign(g)}),this.iteration.assign(X(this.iteration,1)),this.accBeta1.assign(z(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&_e(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&_e(this.accumulatedWeightedInfNorm.map(e=>e.variable))}async getWeights(){throw new Error("getWeights() is not implemented for Adamax yet.")}async setWeights(e){throw new Error("setWeights() is not implemented for Adamax yet.")}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon,decay:this.decay}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon,t.decay)}},Em=class extends Os{static get className(){return"SGD"}constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=Array.isArray(e)?e[r].tensor:e[n];if(s==null)return;let a=M.registeredVariables[n];O(()=>{let o=X(z(this.c,s),a);a.assign(o)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Ht(xe(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}},eI=class extends Em{static get className(){return"Momentum"}constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=xe(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=M.registeredVariables[n];this.accumulations[r]==null&&(this.accumulations[r]={originalName:`${n}/momentum`,variable:O(()=>je(s).variable(!1))});let a=this.accumulations[r].variable,o=Array.isArray(e)?e[r].tensor:e[n];o!=null&&O(()=>{let i,u=X(z(this.m,a),o);this.useNesterov?i=X(z(this.c,X(o,z(u,this.m))),s):i=X(z(this.c,u),s),a.assign(u),s.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&_e(this.accumulations.map(e=>e.variable))}setMomentum(e){this.momentum=e}async getWeights(){return[await this.saveIterations()].concat(this.accumulations.map(e=>({name:e.originalName,tensor:e.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=!1;this.accumulations=e.map(n=>({originalName:n.name,variable:n.tensor.variable(t)}))}getConfig(){return{learningRate:this.learningRate,momentum:this.momentum,useNesterov:this.useNesterov}}static fromConfig(e,t){return new e(t.learningRate,t.momentum,t.useNesterov)}},tI=class extends Os{static get className(){return"RMSProp"}constructor(e,t=.9,n=0,r=null,s=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=s,r==null&&(this.epsilon=M.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(n=>n.name):Object.keys(e)).forEach((n,r)=>{let s=M.registeredVariables[n],a=!1;this.accumulatedMeanSquares[r]==null&&(this.accumulatedMeanSquares[r]={originalName:`${n}/rms`,variable:O(()=>je(s).variable(a))}),this.accumulatedMoments[r]==null&&(this.accumulatedMoments[r]={originalName:`${n}/momentum`,variable:O(()=>je(s).variable(a))}),this.accumulatedMeanGrads[r]==null&&this.centered&&(this.accumulatedMeanGrads[r]={originalName:`${n}/mg`,variable:O(()=>je(s).variable(a))});let o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;let i=this.accumulatedMeanSquares[r].variable,u=this.accumulatedMoments[r].variable;O(()=>{let c=X(z(i,this.decay),z(lt(o),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[r].variable,p=X(z(l,this.decay),z(o,1-this.decay)),d=fe(z(o,this.learningRate),hn(le(c,X(lt(p),this.epsilon)))),h=X(z(u,this.momentum),d);i.assign(c),l.assign(p),u.assign(h);let f=le(s,h);s.assign(f)}else{let l=X(z(i,this.decay),z(lt(o),1-this.decay)),p=X(z(u,this.momentum),fe(z(o,this.learningRate),hn(X(l,this.epsilon))));i.assign(l),u.assign(p);let d=le(s,p);s.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&_e(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&_e(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&_e(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.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)}},MW=[Yw,Zw,Jw,Qw,eI,tI,Em];function LW(){for(let e of MW)oN(e)}var jt={};Ee(jt,{CompositeArrayBuffer:()=>Fs,browserFiles:()=>HW,browserHTTPRequest:()=>ZW,concatenateArrayBuffers:()=>CO,copyModel:()=>qO,decodeWeights:()=>$C,decodeWeightsStream:()=>RC,encodeWeights:()=>vO,fromMemory:()=>QW,fromMemorySync:()=>dN,getLoadHandlers:()=>FO,getModelArtifactsForJSON:()=>Vx,getModelArtifactsForJSONSync:()=>OC,getModelArtifactsInfoForJSON:()=>lp,getSaveHandlers:()=>$O,getWeightSpecs:()=>Ov,http:()=>rI,isHTTPScheme:()=>Gv,listModels:()=>HO,loadWeights:()=>qW,moveModel:()=>KO,registerLoadRouter:()=>DO,registerSaveRouter:()=>AO,removeModel:()=>jO,weightsLoaderFactory:()=>uN,withSaveHandler:()=>eV,withSaveHandlerSync:()=>tV});var BW="model",zW=".json",WW=".weights.bin";function CS(e){return new Promise(t=>setTimeout(t)).then(e)}var pf=class Uv{constructor(t){if(!G().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");t.startsWith(Uv.URL_SCHEME)&&(t=t.slice(Uv.URL_SCHEME.length)),(t==null||t.length===0)&&(t=BW),this.modelJsonFileName=t+zW,this.weightDataFileName=t+WW}async save(t){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let n=Fs.join(t.weightData),r=window.URL.createObjectURL(new Blob([n],{type:"application/octet-stream"}));if(t.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let s=[{paths:["./"+this.weightDataFileName],weights:t.weightSpecs}],a=PC(t,s),o=window.URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),i=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(i.download=this.modelJsonFileName,i.href=o,await CS(()=>i.dispatchEvent(new MouseEvent("click"))),t.weightData!=null){let u=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;u.download=this.weightDataFileName,u.href=r,await CS(()=>u.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:lp(t)}}}};pf.URL_SCHEME="downloads://";var VW=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=r=>{let s=JSON.parse(r.target.result),a=s.modelTopology;if(a==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(s.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:a});return}let i=Vx(s,u=>this.loadWeights(u));e(i)},n.onerror=r=>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 a of e)t.push(...a.weights),n.push(...a.paths);let r=this.checkManifestAndWeightFiles(e),s=n.map(a=>this.loadWeightsFile(a,r[a]));return Promise.all(s).then(a=>[t,a])}loadWeightsFile(e,t){return new Promise((n,r)=>{let s=new FileReader;s.onload=a=>{let o=a.target.result;n(o)},s.onerror=a=>r(`Failed to weights data from file of path '${e}'.`),s.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map(s=>IS(s.name)),r={};for(let s of e)s.paths.forEach(a=>{let o=IS(a);if(t.indexOf(o)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${o}'`);if(t.push(o),n.indexOf(o)===-1)throw new Error(`Weight file with basename '${o}' is not provided.`);r[a]=this.weightsFiles[n.indexOf(o)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return r}},UW=e=>G().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(pf.URL_SCHEME)?GW(e.slice(pf.URL_SCHEME.length)):null;mr.registerSaveRouter(UW);function GW(e="model"){return new pf(e)}function HW(e){return new VW(e)}function TS(e,t,n,r){o(e),n=n==null?0:n,r=r==null?1:r,i(n,r);let s=0,a=u=>(u.then(c=>{let l=n+ ++s/e.length*(r-n);return t(l),c}),u);function o(u){A(u!=null&&Array.isArray(u)&&u.length>0,()=>"promises must be a none empty array")}function i(u,c){A(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${u}`),A(c>=0&&c<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${c}`),A(c>=u,()=>`startFraction must be no more than endFraction, but got startFraction ${u} and endFraction ${c}`)}return Promise.all(e.map(a))}async function iN(e,t){t==null&&(t={});let n=t.fetchFunc==null?G().platform.fetch:t.fetchFunc,r=e.map(p=>n(p,t.requestInit,{isBinary:!0})),i=(t.onProgress==null?await Promise.all(r):await TS(r,t.onProgress,0,.5)).map(p=>p.arrayBuffer());return t.onProgress==null?await Promise.all(i):await TS(i,t.onProgress,.5,1)}function jW(e,t){var n;let r=t.fetchFunc==null?G().platform.fetch:t.fetchFunc,s=0,a;return(n=t.onProgress)===null||n===void 0||n.call(t,0),new ReadableStream({pull:async o=>{for(var i;siN(o,{requestInit:r}))(e,t,n)}function uN(e){return async(t,n="",r)=>{let s=t.map(()=>!1),a={},o=r!=null?r.map(()=>!1):[],i=[];if(t.forEach((h,f)=>{let g=0;h.weights.forEach(m=>{let b="quantization"in m?m.quantization.dtype:m.dtype,y=po[b]*ut(m.shape),v=()=>{s[f]=!0,a[f]==null&&(a[f]=[]),a[f].push({manifestEntry:m,groupOffset:g,sizeBytes:y})};r!=null?r.forEach((x,k)=>{x===m.name&&(v(),o[k]=!0)}):v(),i.push(m.name),g+=y})}),!o.every(h=>h)){let h=r.filter((f,g)=>!o[g]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}. Manifest JSON has weights with names: ${i.join(", ")}.`)}let u=s.reduce((h,f,g)=>(f&&h.push(g),h),[]),c=[];u.forEach(h=>{t[h].paths.forEach(f=>{let g=n+(n.endsWith("/")?"":"/")+f;c.push(g)})});let l=await e(c),p={},d=0;return u.forEach(h=>{let f=t[h].paths.length,g=new Fs(l.slice(d,d+f));a[h].forEach(b=>{let y=g.slice(b.groupOffset,b.groupOffset+b.sizeBytes),v=$C(y,[b.manifestEntry]);for(let x in v)p[x]=v[x]}),d+=f}),p}}var KW="application/octet-stream",XW="application/json",nI=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(A(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=G().platform.fetch,A(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&A(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{},this.loadOptions=t}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r=PC(e,n);if(t.body.append("model.json",new Blob([JSON.stringify(r)],{type:XW}),"model.json"),e.weightData!=null){let a=Fs.join(e.weightData);t.body.append("model.weights.bin",new Blob([a],{type:KW}),"model.weights.bin")}let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:lp(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async loadModelJSON(){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(s){let a=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?a+=" 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.":a+=" Please make sure the server is serving valid JSON for this request.",new Error(a)}let n=t.modelTopology,r=t.weightsManifest;if(n==null&&r==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return t}async load(){if(this.loadOptions.streamWeights)return this.loadStream();let e=await this.loadModelJSON();return Vx(e,t=>this.loadWeights(t))}async loadStream(){let e=await this.loadModelJSON(),t=await this.getWeightUrls(e.weightsManifest),n=Ov(e.weightsManifest),r=()=>jW(t,this.loadOptions);return Object.assign(Object.assign({},e),{weightSpecs:n,getWeightStream:r})}async getWeightUrls(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=YW(t),s=this.weightPathPrefix||n,a=[],o=[];for(let i of e)for(let u of i.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(u)):a.push(s+u+r);return this.weightUrlConverter&&a.push(...await Promise.all(o)),a}async loadWeights(e){let t=await this.getWeightUrls(e),n=Ov(e),r=await iN(t,this.loadOptions);return[n,r]}};nI.URL_SCHEME_REGEX=/^https?:\/\//;function YW(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),s=n>t?e.substring(n):"";return[r+"/",s]}function Gv(e){return e.match(nI.URL_SCHEME_REGEX)!=null}var cN=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>Gv(r)):n=Gv(e),n)return rI(e,t)}return null};mr.registerSaveRouter(cN);mr.registerLoadRouter(cN);function rI(e,t){return new nI(e,t)}function ZW(e,t){return rI(e,t)}var gv=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},lN=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},JW=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function QW(e,t,n,r){let s=arguments;return new JW(dN(...s))}function dN(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new gv(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 gv({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 gv({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function eV(e){return new lN(e)}function tV(e){return new lN(e)}var pN={};Ee(pN,{confusionMatrix:()=>rV});function nV(e,t,n){let r=_(e,"labels","confusionMatrix"),s=_(t,"predictions","confusionMatrix");A(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),A(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),A(s.rank===1,()=>`Expected the rank of predictions to be 1, but got ${s.rank}`),A(r.shape[0]===s.shape[0],()=>`Mismatch in the number of examples: ${r.shape[0]} vs. ${s.shape[0]}. Labels and predictions should have the same number of elements.`),A(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let a=Zu(ae(r,"int32"),n),o=Zu(ae(s,"int32"),n),i=Re(a),u=Fe(i,o);return ae(u,"int32")}var rV=B({confusionMatrix_:nV}),Yi={};Ee(Yi,{draw:()=>dV,fromPixels:()=>pV,fromPixelsAsync:()=>uV,toPixels:()=>lV});var Ka,NS=!1;function hN(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,r=!1,s=!1,a=!1,o=!1,i=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)r=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)s=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)a=!0;else if(e.getContext!=null)o=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)i=!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(wd(of,M.backendName)!=null){let f={pixels:e},g={numChannels:t};return M.runKernel(of,f,g)}let[c,l]=s?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(o)p=e.getContext("2d").getImageData(0,0,c,l).data;else if(r||n)p=e.data;else if(a||s||i){if(Ka==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Ka=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Ka=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});Ka.canvas.width=c,Ka.canvas.height=l,Ka.drawImage(e,0,0,c,l),p=Ka.getImageData(0,0,c,l).data}let d;if(t===4)d=new Int32Array(p);else{let f=c*l;d=new Int32Array(f*t);for(let g=0;g4||t===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${t}`);if(e.dtype!=="float32"&&e.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${e.dtype}. Please use float32 or int32 tensors.`)}function cV(e){let t=(e==null?void 0:e.alpha)||1;if(t>1||t<0)throw new Error(`Alpha value ${t} is suppoed to be in range [0 - 1].`)}async function lV(e,t){let n=_(e,"img","toPixels");if(!(e instanceof Ne)){let c=n;n=ae(c,"int32"),c.dispose()}fN(n);let[r,s]=n.shape.slice(0,2),a=n.rank===2?1:n.shape[2],o=await n.data(),i=n.dtype==="float32"?255:1,u=new Uint8ClampedArray(s*r*4);for(let c=0;c1)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}.`);a===1?(l[0]=h*i,l[1]=h*i,l[2]=h*i):l[d]=h*i}let p=c*4;u[p+0]=Math.round(l[0]),u[p+1]=Math.round(l[1]),u[p+2]=Math.round(l[2]),u[p+3]=Math.round(l[3])}if(t!=null){NS||wd(Wf,M.backendName)!=null&&(console.warn("tf.browser.toPixels is not efficient to draw tensor on canvas. Please try tf.browser.draw instead."),NS=!0),t.width=s,t.height=r;let c=t.getContext("2d"),l=new ImageData(u,s,r);c.putImageData(l,0,0)}return n!==e&&n.dispose(),u}function dV(e,t,n){let r=_(e,"img","draw");if(!(e instanceof Ne)){let o=r;r=ae(o,"int32"),o.dispose()}fN(r),cV(n==null?void 0:n.imageOptions);let s={image:r},a={canvas:t,options:n};M.runKernel(Wf,s,a)}var pV=B({fromPixels_:hN}),sI={};Ee(sI,{prepareAndValidate:()=>mN});function mN(e,t){let n=e.shape.length,r=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(r<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${r}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[r-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[r-1]} vs. ${n}`);if(ut(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let s=t.shape,a=s[s.length-1],o=1;for(let p=0;pp/c),1].slice(0,a);return[u,o,c,l]}var Kt={};Ee(Kt,{assertParamsValid:()=>fV,computeFlatOffset:()=>vV,computeOutShape:()=>gV,getNormalizedAxes:()=>bV,isSliceContinous:()=>yV,maskToAxes:()=>mV,parseSliceParams:()=>SN,sliceInfo:()=>xV,startForAxis:()=>IN,startIndicesWithElidedDims:()=>vN,stopForAxis:()=>kN,stopIndicesWithElidedDims:()=>xN,stridesForAxis:()=>wN,stridesWithElidedDims:()=>gN});var Hv=-2,hV=-1;function fV(e,t,n){let r=e.shape.length;A(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),A(r===n.length,()=>`Error in slice${r}D: Length of size ${n} must match the rank of the array (${r}).`);for(let s=0;s`Error in slice${r}D: begin[${s}] + size[${s}] (${t[s]+n[s]}) would overflow input.shape[${s}] (${e.shape[s]})`)}function mV(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function gV(e,t,n){let r=[];for(let s=0;s0){let h=t[0],f=n+1;l=vN(o,h,f,r,e),p=xN(i,h,f,s,e),d=gN(a,h,f,e)}else for(let h=0;h-1)a[i]=0;else{let u=bN(t,n,i),c=r[u];e&1<-1)a[i]=Number.MAX_SAFE_INTEGER;else{let u=bN(t,n,i),c=r[u];e&1<0?o=Number.MIN_SAFE_INTEGER:o=Number.MAX_SAFE_INTEGER);let u=r[s];return o<0&&(o+=u),o=vd(0,o,u-1),o}function kN(e,t,n,r,s,a){let o=t[s],i=n[s]||1;(e&1<0?o=Number.MAX_SAFE_INTEGER:o=Number.MIN_SAFE_INTEGER);let u=r[s];return o<0&&(o+=u),i>0?o=vd(0,o,u):o=vd(-1,o,u-1),o}function yV(e,t,n){let r=n.length;for(let s=0;s1){r=s;break}for(let s=r+1;s0||n[s]!==e[s])return!1;return!0}function vV(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r{A(o!==-1,()=>"slice() does not support negative begin indexing.")});let a;return n==null?a=new Array(s).fill(-1):typeof n=="number"?a=[n,...new Array(s-1).fill(-1)]:n.lengtho>=0?o:(A(o===-1,()=>`Negative size values should be exactly -1 but got ${o} for the slice() size at index ${i}.`),e.shape[i]-r[i])),[r,a]}function xV(e,t,n,r,s,a,o,i,u){let c;if(r==null?(c=new Array(t.length),c.fill(1)):c=r,o!=null&&o&o-1)throw new Error("Multiple ellipses in slice is not allowed.");let l=!1,p={dims:c.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:n.slice(),strides:c.slice(),beginMask:s,endMask:a,ellipsisMask:o,newAxisMask:i,shrinkAxisMask:u};for(let v=0;v0?0:-1,d.strides[v]>0?k:k-1];if(x&&d.strides[v]<=0)throw Error("only stride 1 allowed on non-range indexing.");g=g&&d.strides[v]===1;let E=!!(d.beginMask&1<=k)throw Error(`slice index ${d.begin[v]} of dimension ${v} out of bounds.`)}else d.begin[v]=_S(d.begin[v],0,d.strides[v],k,S,N),d.end[v]=_S(d.end[v],1,d.strides[v],k,S,N);let D=d.strides[v]===1&&d.begin[v]===0&&d.end[v]===k;h=h&&D,f=f&&(v===0&&d.strides[v]===1||D)}else h=h&&d.strides[v]===1&&E,f=f&&(v===0&&d.strides[v]===1||E);let $,F=!1;if(d.beginValid&&d.endValid?($=d.end[v]-d.begin[v],F=!0):x?($=1,F=!0):E&&k>=0&&(d.strides[v]<0?$=-k:$=k,F=!0),F){let D;$===0||$<0!=d.strides[v]<0?D=0:D=Math.trunc($/d.strides[v])+($%d.strides[v]!==0?1:0),m.push(D)}else m.push(-1)}for(let v=0;v=0?b.push(m[x]):x===Hv&&b.push(1)}return{finalShapeSparse:b.filter((v,x)=>d.finalShapeGatherIndices[x]!==Hv),finalShape:b,isIdentity:h,sliceDim0:f,isSimpleSlice:g,begin:d.begin,end:d.end,strides:d.strides}}function wV(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 r=0;r0?a[t]:a[t+1&1];{let o=e<0?r+e:e;return oa[1]?a[1]:o}}var IV="4.16.0",CN=class{static sgd(e){return new Em(e)}static momentum(e,t,n=!1){return new eI(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,s=!1){return new tI(e,t,n,r,s)}static adam(e=.001,t=.9,n=.999,r=null){return new Jw(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new Yw(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,s=0){return new Qw(e,t,n,r,s)}static adagrad(e,t=.1){return new Zw(e,t)}},Za=CN,kV=typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e();function aI(){return new Promise(e=>kV(()=>e()))}var T={};Ee(T,{ERF_A1:()=>LV,ERF_A2:()=>BV,ERF_A3:()=>zV,ERF_A4:()=>WV,ERF_A5:()=>VV,ERF_P:()=>MV,PARALLELIZE_THRESHOLD:()=>oI,RowPartitionType:()=>rs,SELU_SCALE:()=>NN,SELU_SCALEALPHA:()=>TN,applyActivation:()=>Nm,assertAndGetBroadcastShape:()=>dt,assertAxesAreInnerMostDims:()=>xM,assertParamsConsistent:()=>SV,assignToTypedArray:()=>KV,axesAreInnerMostDims:()=>bw,calculateShapes:()=>RT,checkEinsumDimSizes:()=>e4,checkPadOnDimRoundingMode:()=>_n,combineLocations:()=>tT,combineRaggedTensorToTensorShapes:()=>TV,complexWithEvenIndex:()=>HV,complexWithOddIndex:()=>jV,computeConv2DInfo:()=>dp,computeConv3DInfo:()=>jC,computeDefaultPad:()=>Jx,computeDilation2DInfo:()=>y3,computeOptimalWindowSize:()=>AV,computeOutAndReduceShapes:()=>nT,computeOutShape:()=>CV,computePool2DInfo:()=>HC,computePool3DInfo:()=>v3,convertConv2DDataFormat:()=>qC,decodeEinsumEquation:()=>JV,eitherStridesOrDilationsAreOne:()=>fs,expandShapeToKeepDim:()=>yo,exponent:()=>YV,exponents:()=>XV,fromStringArrayToUint8:()=>w4,fromUint8ToStringArray:()=>x4,getAxesPermutation:()=>rT,getBroadcastDims:()=>QC,getComplexWithIndex:()=>qV,getEinsumComputePath:()=>t4,getEinsumPermutation:()=>QV,getFusedBiasGradient:()=>Tm,getFusedDyActivation:()=>Cm,getImageCenter:()=>DV,getInnerMostAxes:()=>wM,getPermuted:()=>FV,getRaggedRank:()=>_V,getReductionAxes:()=>Wt,getReshaped:()=>$V,getReshapedPermuted:()=>RV,getRowPartitionTypesHelper:()=>NV,getSliceBeginCoords:()=>PV,getSliceSize:()=>OV,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>a4,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>o4,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>i4,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>l4,getSparseReshapeInputOutputMismatchErrorMessage:()=>p4,getSparseReshapeInputOutputMultipleErrorMessage:()=>d4,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>u4,getSparseReshapeNegativeOutputDimErrorMessage:()=>c4,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>g4,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>h4,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>f4,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>m4,getUndoAxesPermutation:()=>yw,isIdentityPermutation:()=>n4,log:()=>_P,mergeRealAndImagArrays:()=>UV,prepareAndValidate:()=>mN,prepareSplitSize:()=>s4,segment_util:()=>_N,shouldFuse:()=>_m,slice_util:()=>Kt,splitRealAndImagArrays:()=>GV,stridesOrDilationsArePositive:()=>go,tupleValuesAreOne:()=>ma,upcastType:()=>fr,validateDefaultValueShape:()=>EV,validateInput:()=>wm,validateUpdateShape:()=>zw,warn:()=>na});function SV(e,t){let n=e[0].length;e.forEach((s,a)=>{A(s.length===n,()=>`Error in concat${n}D: rank of tensors[${a}] must be the same as the rank of the rest (${n})`)}),A(t>=0&&t`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let r=e[0];e.forEach((s,a)=>{for(let o=0;o`Error in concat${n}D: Shape of tensors[${a}] (${s}) does not match the shape of the rest (${r}) along the non-concatenated axis ${a}.`)})}function CV(e,t){let n=e[0].slice();for(let r=1;r=0)if(i>=0){if(i!==a)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.shape[${s+e}] = ${a} but shape[${s+e}] = ${i}`)}else r[o]=a}return r}function NV(e){let t={FIRST_DIM_SIZE:rs.FIRST_DIM_SIZE,VALUE_ROWIDS:rs.VALUE_ROWIDS,ROW_LENGTHS:rs.ROW_LENGTHS,ROW_SPLITS:rs.ROW_SPLITS,ROW_LIMITS:rs.ROW_LIMITS,ROW_STARTS:rs.ROW_STARTS},n=[];for(let r of e)if(r in t)n.push(t[r]);else break;return n}function _V(e){return e.length===0?0:e[0]===rs.FIRST_DIM_SIZE?e.length-1:e.length}function EV(e,t){if(e==null||t==null)return;let n=e.length,r=t.length;if(n>=r)throw new Error(`defaultValue.shape=${e} and ragged tensor flatValues.shape=${t}, are incompatible: defaultValue.rank = ${n} must be less than ragged tensor input flatValues.rank = ${r})`);for(let s=0;s=0&&o>=0&&a!==1&&a!==o)throw new Error(`defaultValue.shape=${e}, and ragged tensor input flatValues.shape=${t} are incompatible: defaultValue.shape[${s-e.length}] = ${a} but ragged tensor input.flatValues.shape[${s-e.length}] = ${o}`)}}var oI=30;function AV(e){return e<=oI?e:af(e,Math.floor(Math.sqrt(e)))}function DV(e,t,n){let r=n*(typeof e=="number"?e:e[0]),s=t*(typeof e=="number"?e:e[1]);return[r,s]}function $V(e,t,n,r=!0){let s=[];if(r)s=s.concat(t.slice(0)),s.push(e[0]/n),s=s.concat(e.slice(1));else{s=s.concat(e[0]);let a=t.length;for(let o=0;o=t*2+1||o%2===1?a.push(o):s.push(o);r.push(...s),r.push(0),r.push(...a)}return r}function RV(e,t,n,r=!0){let s=[];r?s.push(e[0]/n):s.push(e[0]*n);for(let a=1;a/g,ES=",",AS="...";function JV(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(ZV,"").length)/bv.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 ("${bv}").`);let[r,s]=e.split(bv);A(r.indexOf(AS)===-1,()=>`The ellipsis notation ("${AS}") is not supported yet.`);let a=r.split(ES),o=a.length;if(t!==o)throw new Error(`Expected ${o} input tensors, received ${t}`);if(o>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let i=[];for(let d=0;df.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);i.indexOf(h)===-1&&i.push(h)}for(let d=0;ds!==-1),{permutationIndices:n,expandDims:r}}function e4(e,t,n){let r=new Array(e);for(let s=0;s`Expected dimension ${r[t[s][o]]} at axis ${o} of input shaped ${JSON.stringify(a)}, but got dimension ${a[o]}`)}}function t4(e,t){let n=e,r=[],s=0;e.length===0&&n.push(-1),s=e.length+1;for(let o=0;ot===n)}function r4(e,t){let n=[];for(let r=0;r"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{let s=t.reduce((o,i)=>(i===-1&&(o+=1),o),0);A(s<=1,()=>"There should be only one negative value in split array.");let a=t.indexOf(-1);if(a!==-1){let o=t.reduce((i,u)=>u>0?i+u:i);t[a]=e.shape[n]-o}A(e.shape[n]===t.reduce((o,i)=>o+i),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}function a4(e){return`Received SparseTensor with denseShape[0] = 0 but indices.shape[0] = ${e}`}function o4(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function i4(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function u4(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function c4(e,t){return`size ${e} must be non-negative, not ${t}`}function l4(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function d4(e,t){let n=ut(e),r=ut(t);return`Input to reshape is a SparseTensor with ${n} dense values, but the requested shape requires a multiple of ${r}. inputShape=${e} outputShape= ${t}`}function p4(e,t){let n=ut(e),r=ut(t);return`Input to reshape is a tensor with ${n} dense values, but the requested shape has ${r}. inputShape=${e} outputShape=${t}`}function h4(){return"segment ids must be >= 0"}function f4(){return"segment ids are not increasing"}function m4(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function g4(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var _N={};Ee(_N,{collectGatherOpShapeInfo:()=>v4,computeOutShape:()=>y4,segOpComputeOptimalWindowSize:()=>b4});function b4(e,t){let n=!1,r;for(e<=oI?(r=e,n=!0):r=af(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=af(e,r+1);return r}function y4(e,t,n){let r=[],s=e.length;for(let a=0;as))throw new Error(`Expect batchDims in the range of [-${s}, ${s}], but got ${r}`);if(r<0&&(r+=s),r>a)throw new Error(`batchDims (${r}) must be less than rank(x) ( ${a}).`);if(ncf(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function w4(e){return e.map(t=>up(t))}var gs={};Ee(gs,{nonMaxSuppressionV3Impl:()=>KT,nonMaxSuppressionV4Impl:()=>XT,nonMaxSuppressionV5Impl:()=>YT,whereImpl:()=>MT});LW();var EN={kernelName:cc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,Xi(ae(n,"float32"),-1))}}},I4={kernelName:Eo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=lt(ae(n,"float32")),s=hn(le(xe(1),r));return bt(fe(e,s))}}}},k4={kernelName:Ao,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=hn(le(lt(ae(n,"float32")),1));return fe(e,r)}}}},S4={kernelName:Sa,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=e,u=Wt(n.shape,s);return u.length>0&&(i=ge(i,u)),W(i,n.shape)},b:()=>{let i=e,u=Wt(r.shape,s);return u.length>0&&(i=ge(i,u)),W(i,r.shape)}}}},C4={kernelName:Do,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,s)=>{n[s]=()=>e.clone()}),n}},T4={kernelName:pc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>je(n)}}},N4={kernelName:hc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>je(n)}}},_4={kernelName:$o,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,hn(le(xe(1),lt(ae(n,"float32")))))}}},E4={kernelName:Fo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=hn(X(xe(1),lt(ae(n,"float32"))));return fe(e,r)}}}},A4={kernelName:Oo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=X(lt(n),lt(r)),u=z(e,fe(r,i)),c=Wt(n.shape,s);return c.length>0&&(u=ge(u,c)),W(u,n.shape)},b:()=>{let i=X(lt(n),lt(r)),u=bt(z(e,fe(n,i))),c=Wt(r.shape,s);return c.length>0&&(u=ge(u,c)),W(u,r.shape)}}}},D4={kernelName:Ro,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,X(lt(ae(n,"float32")),1))}}},$4={kernelName:Po,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,le(xe(1),lt(ae(n,"float32"))))}}};function F4(e,t,n,r,s,a){let o=_(e,"dy","avgPool3dGrad"),i=_(t,"input","avgPool3dGrad"),u=o,c=i,l=!1;i.rank===4&&(l=!0,u=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),c=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),A(u.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${u.rank}.`),A(c.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${c.rank}.`),_n("avgPool3dGrad",s,a);let p={dy:u,input:c},d={filterSize:n,strides:r,pad:s,dimRoundingMode:a},h=M.runKernel(zd,p,d);return l?W(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var R4=B({avgPool3dGrad_:F4}),P4={kernelName:fc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:a,pad:o,dimRoundingMode:i}=n;return{x:()=>R4(e,r,s,a,o,i)}}};function O4(e,t,n,r,s){let a=_(e,"dy","avgPoolGrad"),o=_(t,"input","avgPoolGrad");A(o.rank===a.rank,()=>`Rank of input (${o.rank}) does not match rank of dy (${a.rank})`);let i=o,u=a,c=!1;o.rank===3&&(c=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2]]),u=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),A(u.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${u.rank}.`),A(i.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${i.rank}.`);let l={dy:u,input:i},p={filterSize:n,strides:r,pad:s},d=M.runKernel(Bd,l,p);return c?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var M4=B({avgPoolGrad_:O4}),L4={kernelName:Mo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:a,pad:o}=n;return{x:()=>M4(e,r,s,a,o)}}},B4={kernelName:Lo,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,s]=t,{transposeA:a,transposeB:o}=n;return!a&&!o?{a:()=>Fe(e,s,!1,!0),b:()=>Fe(r,e,!0,!1)}:!a&&o?{a:()=>Fe(e,s,!1,!1),b:()=>Fe(e,r,!0,!1)}:a&&!o?{a:()=>Fe(s,e,!1,!0),b:()=>Fe(r,e,!1,!1)}:{a:()=>Fe(s,e,!0,!0),b:()=>Fe(e,r,!0,!0)}}},z4={kernelName:mc,gradFunc:(e,t,n)=>{let{blockShape:r,crops:s}=n;return{x:()=>xp(e,r,s)}}},W4={kernelName:mC,gradFunc:(e,t,n)=>{let r=n,s=r.inputShape,a=r.shape,o=Array.from(a);for(let u=s.length-1;u>=0;u--)if(s[u]===a[u])o[u]=1;else if(s[u]!==1)throw new Error(`broadcastTo(): [${s}] cannot be broadcast to [${a}].`);let i=[];for(let u=0;u1&&i.push(u);return{x:()=>ge(e,i,!0)}}},V4={kernelName:Bo,gradFunc:e=>({x:()=>e.clone()})},U4={kernelName:zo,gradFunc:e=>({x:()=>je(e)})},G4={kernelName:Ca,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:s,clipValueMax:a}=n;return{x:()=>nn($r(Rs(r,s),Da(r,a)),e,je(e))}}},H4={kernelName:Vd,inputsToSave:["x"],gradFunc:EN.gradFunc},j4={kernelName:yc,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(u=>u.shape),{axis:s}=n,a=Fr(s,t[0].shape)[0],o=r.map(u=>u[a]);return Mn(e,o,a).map(u=>()=>u)}},q4={kernelName:Wo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{dilations:a,strides:o,pad:i,dataFormat:u}=n;return A(ma(a),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`),{x:()=>cw(r.shape,e,s,o,i,u),filter:()=>qw(r,e,s.shape,o,i,u)}}},K4={kernelName:Vo,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{strides:a,pad:o,dataFormat:i,dimRoundingMode:u}=n;return{dy:()=>Ft(e,s,a,o,i,1,u),filter:()=>qw(e,r,s.shape,a,o,i,u)}}};function X4(e,t,n,r,s){let a=e;e.rank===4&&(a=W(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let o=t;o.rank===4&&(o=W(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),A(a.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${a.shape}.`),A(o.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${o.shape}.`),A(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),A(a.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${a.shape[4]}) must match input depth in filter (${n[3]}.`),A(o.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${o.shape[4]}) must match output depth for filter (${n[4]}).`);let i={x:a,dy:o},u={strides:r,pad:s,filterShape:n};return M.runKernel(vc,i,u)}var Y4=B({conv3DBackpropFilter_:X4}),Z4={kernelName:Uo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:a}=n;A(ma(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);let[o,i]=t;return{x:()=>ZC(o.shape,e,i,s,a),filter:()=>Y4(o,e,i.shape,s,a)}}},J4={kernelName:Go,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(bt(mm(ae(n,"float32"))),e)}}},Q4={kernelName:Ho,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(gm(ae(n,"float32")),e)}}},eU={kernelName:jo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s,exclusive:a,reverse:o}=n;return{x:()=>{let i=rT([s],r.rank),u=sm(e,s,a,!o);return i!=null&&(u=Re(u,i)),u}}}},tU={kernelName:qo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:a,dimRoundingMode:o}=n,i=r==null?[1,1]:r;A(ma(i),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);let[u,c]=t;return A(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${u.rank}.`),A(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${c.rank}.`),A(u.shape[3]===c.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),A(fs(s,i),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${s} and dilations '${i}'.`),_n("depthwiseConv2d",a,o),{x:()=>HT(u.shape,e,c,s,a,i,o),filter:()=>GT(u,e,c.shape,s,a,i,o)}}},nU={kernelName:Ko,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,a={x:r,filter:s,dy:e},o={x:r,filter:s,dy:e};return{x:()=>M.runKernel(ju,a,n),filter:()=>M.runKernel(qu,o,n)}}},rU={kernelName:Yo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>M.runKernel(Sc,r)}}},sU={kernelName:Zo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=z(fn(bt(lt(n))),2/Math.sqrt(Math.PI));return{x:()=>z(e,r)}}},aU={kernelName:Jo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,n)}}},oU={kernelName:Tc,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>W(e,n.shape)}}},iU={kernelName:Qo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,fn(n))}}},uU={kernelName:ei,gradFunc:e=>({x:()=>je(e)})},cU={kernelName:ti,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=fe(e,ae(r,"float32")),u=Wt(n.shape,s);return u.length>0?W(ge(i,u),n.shape):i},b:()=>{let i=z(e,ae(n,"float32")),u=Wt(r.shape,s);u.length>0&&(i=W(ge(i,u),r.shape));let c=lt(r);return bt(fe(i,ae(c,"float32")))}}}},lU={kernelName:ni,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[s,a,o,i]=t,u=i==null?xe(1):i,c=Wt(a.shape,s.shape),l=[];if(a.rank===1){for(let x=0;xa.rank===1?W(z(z(e,Pn(W(h,[1,1,1,a.shape[0]]),l)),u),s.shape):W(z(z(e,h),u),s.shape),mean:()=>{let x=z(z(h,xe(-1)),d);return a.rank===1&&(x=ge(x,c)),W(x,a.shape)},variance:()=>{let x=z(z(f,p),d);return a.rank===1&&(x=ge(x,c)),W(x,a.shape)},scale:()=>{let x=z(p,h),k=z(e,x);return a.rank===1&&(k=ge(k,c)),W(k,a.shape)},offset:()=>{let x=e;return a.rank===1&&(x=ge(x,c)),W(x,a.shape)}}}},dU={kernelName:_c,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,s]=t,{axis:a,batchDims:o}=n,i=Fr(a,r.shape)[0],u=(c,l,p)=>()=>{let d=c.shape,h=l.size,f=d.slice(0,i),g=f.length,m=d.slice(a,d.length).slice(1),b=m.length,y=DS(0,g),v=DS(g+1,g+1+b),x=$S([f,[h],m]),k=W(p,x),S=W(l,[h]),N=$S([[g],y,v]),E=Re(k,N),$=km(E,S,c.shape[i]),F=yw(N);return $=Re($,F),$};if(o===1){let c=r.shape[0],l=r.split(c,0);return{x:()=>Dt(l.map((h,f)=>u(h,s.slice(f,1),e.slice(f,1))())).reshape(r.shape),indices:()=>s}}else return{x:u(r,s,e),indices:()=>s}}};function DS(e,t){let n=[];for(let r=e;r{let[n,r]=t;return{a:()=>je(n),b:()=>je(r)}}},hU={kernelName:si,gradFunc:e=>({x:()=>ae(e,"float32")})},fU={kernelName:ai,gradFunc:e=>({x:()=>je(e)})},mU={kernelName:oi,gradFunc:e=>({x:()=>je(e)})},gU={kernelName:ii,gradFunc:e=>({x:()=>je(e)})},bU={kernelName:ui,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:s}=n,a=En(r,0);return{x:()=>nn(a,e,z(e,s))}}},yU={kernelName:li,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,X(n,1))}}},vU={kernelName:ci,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ae(n,"float32"))}}},xU={kernelName:bC,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n;return{logits:()=>{let o=fn(r);return le(e,z(ge(e,s,!0),o))}}}};function wU(e,t,n,r=5,s=1,a=1,o=.5){let i={x:e,y:t,dy:n},u={depthRadius:r,bias:s,alpha:a,beta:o};return M.runKernel(Mc,i,u)}var IU=B({localResponseNormalizationBackprop_:wU}),kU={kernelName:di,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{depthRadius:a,bias:o,alpha:i,beta:u}=n;return{x:()=>IU(r,s,e,a,o,i,u)}}};function AN(e,t,n,r){return t.rankz(e,ae(tr(n,t),e.dtype))}}var FS={kernelName:pi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{reductionIndices:s}=r,a=t[0],o=t[1],i=Fr(s,a.shape),u=AN(e,o,a,i);return{x:()=>u.x()}}},SU={kernelName:hi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>z(e,ae(Rs(n,r),"float32")),b:()=>z(e,ae(Yu(n,r),"float32"))}}};function CU(e,t,n,r,s,a,o){let i=_(e,"dy","maxPool3dGrad"),u=_(t,"input","maxPool3dGrad"),c=_(n,"output","maxPool3dGrad"),l=i,p=u,d=c,h=!1;u.rank===4&&(h=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),p=W(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]]),d=W(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]])),A(l.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),A(p.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`),A(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),_n("maxPool3dGrad",a,o);let f={dy:l,input:p,output:d},g={filterSize:r,strides:s,pad:a,dimRoundingMode:o},m=M.runKernel(qd,f,g);return h?W(m,[m.shape[1],m.shape[2],m.shape[3],m.shape[4]]):m}var TU=B({maxPool3dGrad_:CU}),NU={kernelName:Lc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:u}=n;return{x:()=>TU(e,r,s,a,o,i,u)}}};function _U(e,t,n,r,s,a,o){let i=_(e,"dy","maxPoolGrad"),u=_(t,"input","maxPoolGrad"),c=_(n,"output","maxPoolGrad");A(u.rank===i.rank,()=>`Rank of input (${u.rank}) does not match rank of dy (${i.rank})`),A(i.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${i.rank}.`),A(u.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${u.rank}.`),_n("maxPoolGrad",a,o);let l={dy:i,input:u,output:c},p={filterSize:r,strides:s,pad:a,dimRoundingMode:o};return M.runKernel(jd,l,p)}var EU=B({maxPoolGrad_:_U}),AU={kernelName:fi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:a,strides:o,pad:i}=n;return{x:()=>EU(e,r,s,a,o,i)}}},DU={kernelName:mi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n,a=Fr(s,r.shape),i=nT(r.shape,a)[1],u=ut(i);return{x:()=>{let l=r.shape.slice();a.forEach(h=>{l[h]=1});let p=W(e,l);return fe(z(p,On(r.shape,"float32")),u)}}}},$U={kernelName:gi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:s}=r,[a,o]=t,i=Fr(s,a.shape),u=AN(e,o,a,i);return{x:()=>u.x()}}},FU={kernelName:bi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>z(e,ae(Da(n,r),"float32")),b:()=>z(e,ae(En(n,r),"float32"))}}},RU={kernelName:yi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,a=s.map(o=>o[0]);return{x:()=>Ve(e,a,r.shape)}}},PU={kernelName:vi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=Wt(n.shape,s);return i.length>0?W(ge(e,i),n.shape):e},b:()=>{let i=z(e,bt(fl(fe(n,r)))),u=Wt(r.shape,s);return u.length>0?W(ge(i,u),r.shape):i}}}},OU={kernelName:xi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=z(e,ae(r,"float32")),u=Wt(n.shape,s);return u.length>0?W(ge(i,u),n.shape):i},b:()=>{let i=z(e,ae(n,"float32")),u=Wt(r.shape,s);return u.length>0?W(ge(i,u),r.shape):i}}}},MU={kernelName:zc,gradFunc:e=>({x:()=>bt(e)})},LU={kernelName:wi,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>kt(n.shape,"float32")}}},BU={kernelName:Hc,gradFunc:e=>({x:()=>je(e)})},zU={kernelName:jc,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return pt(e,r).map(a=>()=>a)}},RS={kernelName:Ii,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,a=s.map(o=>o[0]);return{x:()=>Ve(e,a,r.shape)}}},WU={kernelName:ki,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,s]=t,a=n,o=r,i=dt(a.shape,o.shape);return{a:()=>{let l=ae(o,"float32"),p=z(e,z(l,Ds(a,le(l,xe(1))))),d=Wt(a.shape,i);return d.length>0&&(p=ge(p,d)),W(p,a.shape)},b:()=>{let l=En(a,0),p=nn(l,nr(a),je(a)),d=z(e,z(s,p)),h=Wt(o.shape,i);return h.length>0&&(d=ge(d,h)),W(d,o.shape)}}}},VU={kernelName:Si,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,s=En(n,0);return{x:()=>nn(s,e,z(e,r)),alpha:()=>{let a=nn(s,je(e),z(e,n)),o=Wt(r.shape,e.shape);return o.length>0&&(a=ge(a,o)),W(a,r.shape)}}}};function UU(e,t,n){let r=e.shape.slice();r[n]=1;let s=W(t,r),a=Nd(e,n,!0,!1),o=Nd(e,n,!0,!0),i=z(a,o);return z(s,i)}function GU(e,t,n){let r=e.shape.length,s=r-n.length,a=T.getAxesPermutation(n,r),o=e;a!=null&&(o=Re(e,a));let i=o.shape.slice(),c=i.splice(r-n.length,n.length).reduce((d,h)=>d*h,1);i.push(c);let l=o.reshape(i),p=UU(l,t,s);if(p=p.reshape(o.shape),a!=null){let d=T.getUndoAxesPermutation(a);p=Re(p,d)}return p}var HU={kernelName:Ci,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n,a=[];return s==null?a=r.shape.map((o,i)=>i):typeof s=="number"?a=[s]:a=s,{x:()=>GU(r,e,a)}}},jU={kernelName:Xo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=fe(e,ae(r,"float32")),u=Wt(n.shape,s);return u.length>0?W(ge(i,u),n.shape):i},b:()=>{let i=z(e,ae(n,"float32")),u=Wt(r.shape,s);u.length>0&&(i=W(ge(i,u),r.shape));let c=lt(r);return bt(fe(i,ae(c,"float32")))}}}},qU={kernelName:Ti,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,bt(lt(n)))}}},KU={kernelName:Ai,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=z(Da(n,6),Xi(n));return{x:()=>z(e,ae(r,"float32"))}}},XU={kernelName:Ni,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,ae(Xi(n),"float32"))}}},YU={kernelName:qc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n.shape)}}},ZU={kernelName:Ei,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>M.runKernel(Xc,s,n)}}},JU={kernelName:_i,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>M.runKernel(Kc,s,n)}}},QU={kernelName:Di,gradFunc:(e,t,n)=>{let{dims:r}=n,s=Fr(r,e.shape);return{x:()=>gr(e,s)}}},eG={kernelName:$i,gradFunc:e=>({x:()=>je(e)})},tG={kernelName:Fi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>bt(fe(e,z(Ds(n,1.5),2)))}}},nG={kernelName:Qc,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>ae(je(n),"float32"),t:()=>z(e,ae(n,e.dtype)),e:()=>z(e,ae(yp(n),e.dtype))}}},rG={kernelName:Ri,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=En(n,xe(0)),s=xe(TN),a=xe(NN),o=z(e,a),i=z(z(e,s),fn(ae(n,"float32")));return nn(r,o,i)}}}},sG={kernelName:Li,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,z(n,le(xe(1),n)))}}},aG={kernelName:Mi,gradFunc:e=>({x:()=>je(e)})},oG={kernelName:Pi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(hp(ae(n,"float32")),e)}}},iG={kernelName:Oi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(rm(ae(n,"float32")),e)}}},uG={kernelName:el,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:s,size:a}=n,o=r.shape,[i,u]=SN(r,s,a),c=[];for(let l=0;lyr(e,c)}}},cG={kernelName:Vi,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:s}=n,a=!0,o=z(e,r);return{logits:()=>le(o,z(ge(o,[s],a),r))}}},lG={kernelName:Bi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,pr(n))}}},PS={kernelName:tl,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:s}=n;return{x:()=>pp(e,r,s)}}},OS={kernelName:nl,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>tt(e,r)}}},dG={kernelName:zi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,z(hn(ae(n,"float32")),2))}}},pG={kernelName:Qd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(e,z(ae(n,"float32"),2))}}},hG={kernelName:Ui,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=xe(2);return{a:()=>z(e,z(s,le(n,r))),b:()=>z(e,z(s,le(r,n)))}}},fG={kernelName:Na,gradFunc:e=>({x:()=>je(e)})},mG={kernelName:Gi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=dt(n.shape,r.shape);return{a:()=>{let i=e,u=Wt(n.shape,s);return u.length>0&&(i=ge(i,u)),W(i,n.shape)},b:()=>{let i=e,u=Wt(r.shape,s);return u.length>0&&(i=ge(i,u)),W(bt(i),r.shape)}}}},gG={kernelName:Wi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,s=r.shape.slice(),{axis:a}=n;Fr(a,r.shape).forEach(c=>{s[c]=1});let i=W(e,s),u=z(i,On(r.shape,"float32"));return{x:()=>u}}},bG={kernelName:Hi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,lt(hp(n)))}}},yG={kernelName:ji,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>z(le(xe(1),lt(n)),e)}}},vG={kernelName:Ta,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:s}=n;return{x:()=>{let o=je(r);if(r.rank===1)for(let i=0;i{let r=n,{perm:s}=r,a=yw(s);return{x:()=>Re(e,a)}}},wG={kernelName:ul,gradFunc:(e,t,n)=>{let r=n,{axis:s}=r;return{value:()=>Dt(e,s)}}},IG={kernelName:ap,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>kG(e,n)}}};function kG(e,t){let n=ms(t,je(t)),r=ml(e,n),s=Rs(t,xe(0,"int32")),a=r.rank-s.rank;for(let i=0;i({x:()=>je(e)})},CG=[EN,I4,k4,S4,C4,T4,N4,_4,E4,A4,D4,$4,P4,L4,B4,z4,W4,V4,U4,G4,H4,j4,K4,q4,Z4,J4,Q4,eU,tU,nU,jU,rU,sU,aU,oU,iU,cU,uU,lU,dU,pU,hU,fU,mU,gU,bU,yU,vU,xU,kU,FS,FS,SU,NU,AU,DU,$U,FU,RU,PU,OU,MU,LU,BU,zU,RS,RS,WU,VU,HU,qU,KU,XU,YU,ZU,JU,QU,eG,tG,nG,rG,sG,aG,oG,iG,uG,cG,lG,PS,PS,OS,OS,dG,hG,pG,fG,mG,gG,bG,yG,vG,xG,wG,IG,SG];for(let e of CG)yC(e);Q().prototype.abs=function(){return this.throwIfDisposed(),Lt(this)};Q().prototype.acos=function(){return this.throwIfDisposed(),Gx(this)};Q().prototype.acosh=function(){return this.throwIfDisposed(),Hx(this)};Q().prototype.add=function(e){return this.throwIfDisposed(),X(this,e)};Q().prototype.all=function(e,t){return this.throwIfDisposed(),em(this,e,t)};Q().prototype.any=function(e,t){return this.throwIfDisposed(),Sd(this,e,t)};Q().prototype.argMax=function(e){return this.throwIfDisposed(),mo(this,e)};Q().prototype.argMin=function(e){return this.throwIfDisposed(),jx(this,e)};Q().prototype.asScalar=function(){return this.throwIfDisposed(),A(this.size===1,()=>"The array must have only 1 element."),W(this,[])};Q().prototype.asType=function(e){return this.throwIfDisposed(),ae(this,e)};Q().prototype.as1D=function(){return this.throwIfDisposed(),W(this,[this.size])};Q().prototype.as2D=function(e,t){return this.throwIfDisposed(),W(this,[e,t])};Q().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),W(this,[e,t,n])};Q().prototype.as4D=function(e,t,n,r){return this.throwIfDisposed(),W(this,[e,t,n,r])};Q().prototype.as5D=function(e,t,n,r,s){return this.throwIfDisposed(),W(this,[e,t,n,r,s])};Q().prototype.asin=function(){return this.throwIfDisposed(),qx(this)};Q().prototype.asinh=function(){return this.throwIfDisposed(),Kx(this)};Q().prototype.atan=function(){return this.throwIfDisposed(),Xx(this)};Q().prototype.atan2=function(e){return this.throwIfDisposed(),Yx(this,e)};Q().prototype.atanh=function(){return this.throwIfDisposed(),Zx(this)};Q().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),br(this,e,t,n,r)};Q().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),pp(this,e,t)};Q().prototype.batchNorm=function(e,t,n,r,s){return this.throwIfDisposed(),Ea(this,e,t,n,r,s)};Q().prototype.broadcastTo=function(e){return this.throwIfDisposed(),ao(this,e)};Q().prototype.cast=function(e){return this.throwIfDisposed(),ae(this,e)};Q().prototype.ceil=function(){return this.throwIfDisposed(),sw(this)};Q().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),rn(this,e,t)};Q().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Ne&&(e=[e]),tt([this,...e],t)};Q().prototype.conv1d=function(e,t,n,r,s,a){return this.throwIfDisposed(),tm(this,e,t,n,r,s,a)};Q().prototype.conv2dTranspose=function(e,t,n,r,s){return this.throwIfDisposed(),nm(this,e,t,n,r,s)};Q().prototype.conv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Ft(this,e,t,n,r,s,a)};Q().prototype.cos=function(){return this.throwIfDisposed(),hp(this)};Q().prototype.cosh=function(){return this.throwIfDisposed(),rm(this)};Q().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),Nd(this,e,t,n)};Q().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),sm(this,e,t,n)};Q().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),pw(this,e,t)};Q().prototype.depthwiseConv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Aa(this,e,t,n,r,s,a)};Q().prototype.dilation2d=function(e,t,n,r,s){return this.throwIfDisposed(),hw(this,e,t,n,r,s)};Q().prototype.divNoNan=function(e){return this.throwIfDisposed(),fw(this,e)};Q().prototype.div=function(e){return this.throwIfDisposed(),fe(this,e)};Q().prototype.dot=function(e){return this.throwIfDisposed(),mw(this,e)};Q().prototype.elu=function(){return this.throwIfDisposed(),pl(this)};Q().prototype.equal=function(e){return this.throwIfDisposed(),tr(this,e)};Q().prototype.erf=function(){return this.throwIfDisposed(),gw(this)};Q().prototype.euclideanNorm=function(e,t){return this.throwIfDisposed(),vw(this,e,t)};Q().prototype.exp=function(){return this.throwIfDisposed(),fn(this)};Q().prototype.expandDims=function(e){return this.throwIfDisposed(),Gt(this,e)};Q().prototype.expm1=function(){return this.throwIfDisposed(),xw(this)};Q().prototype.fft=function(){return this.throwIfDisposed(),kp(this)};Q().prototype.flatten=function(){return this.throwIfDisposed(),W(this,[this.size])};Q().prototype.floor=function(){return this.throwIfDisposed(),fl(this)};Q().prototype.floorDiv=function(e){return this.throwIfDisposed(),Qf(this,e)};Q().prototype.gather=function(e,t,n){return this.throwIfDisposed(),ml(this,e,t,n)};Q().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Rs(this,e)};Q().prototype.greater=function(e){return this.throwIfDisposed(),En(this,e)};Q().prototype.ifft=function(){return this.throwIfDisposed(),ec(this)};Q().prototype.irfft=function(){return this.throwIfDisposed(),ym(this)};Q().prototype.isFinite=function(){return this.throwIfDisposed(),ww(this)};Q().prototype.isInf=function(){return this.throwIfDisposed(),Iw(this)};Q().prototype.isNaN=function(){return this.throwIfDisposed(),kw(this)};Q().prototype.leakyRelu=function(e){return this.throwIfDisposed(),mp(this,e)};Q().prototype.lessEqual=function(e){return this.throwIfDisposed(),Da(this,e)};Q().prototype.less=function(e){return this.throwIfDisposed(),Yu(this,e)};Q().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),Sw(this,e,t,n,r)};Q().prototype.logSigmoid=function(){return this.throwIfDisposed(),Cw(this)};Q().prototype.logSoftmax=function(e){return this.throwIfDisposed(),im(this,e)};Q().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),bp(this,e,t)};Q().prototype.log=function(){return this.throwIfDisposed(),nr(this)};Q().prototype.log1p=function(){return this.throwIfDisposed(),gp(this)};Q().prototype.logicalAnd=function(e){return this.throwIfDisposed(),$r(this,e)};Q().prototype.logicalNot=function(){return this.throwIfDisposed(),yp(this)};Q().prototype.logicalOr=function(e){return this.throwIfDisposed(),um(this,e)};Q().prototype.logicalXor=function(e){return this.throwIfDisposed(),Tw(this,e)};Q().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Fe(this,e,t,n)};Q().prototype.maxPool=function(e,t,n,r){return this.throwIfDisposed(),Rt(this,e,t,n,r)};Q().prototype.max=function(e,t){return this.throwIfDisposed(),hr(this,e,t)};Q().prototype.maximum=function(e){return this.throwIfDisposed(),ms(this,e)};Q().prototype.mean=function(e,t){return this.throwIfDisposed(),_t(this,e,t)};Q().prototype.min=function(e,t){return this.throwIfDisposed(),Xu(this,e,t)};Q().prototype.minimum=function(e){return this.throwIfDisposed(),ga(this,e)};Q().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),_w(this,e,t)};Q().prototype.mod=function(e){return this.throwIfDisposed(),Ew(this,e)};Q().prototype.mul=function(e){return this.throwIfDisposed(),z(this,e)};Q().prototype.neg=function(){return this.throwIfDisposed(),bt(this)};Q().prototype.norm=function(e,t,n){return this.throwIfDisposed(),hl(this,e,t,n)};Q().prototype.notEqual=function(e){return this.throwIfDisposed(),vo(this,e)};Q().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),Zu(this,e,t,n)};Q().prototype.onesLike=function(){return this.throwIfDisposed(),rr(this)};Q().prototype.pad=function(e,t){return this.throwIfDisposed(),yr(this,e,t)};Q().prototype.pool=function(e,t,n,r,s,a){return this.throwIfDisposed(),Aw(this,e,t,n,r,s,a)};Q().prototype.pow=function(e){return this.throwIfDisposed(),Ds(this,e)};Q().prototype.prelu=function(e){return this.throwIfDisposed(),wp(this,e)};Q().prototype.prod=function(e,t){return this.throwIfDisposed(),Dw(this,e,t)};Q().prototype.reciprocal=function(){return this.throwIfDisposed(),Ow(this)};Q().prototype.relu=function(){return this.throwIfDisposed(),Ke(this)};Q().prototype.relu6=function(){return this.throwIfDisposed(),dm(this)};Q().prototype.reshapeAs=function(e){return this.throwIfDisposed(),W(this,e.shape)};Q().prototype.reshape=function(e){return this.throwIfDisposed(),W(this,e)};Q().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),ZT(this,e,t,n)};Q().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),JT(this,e,t,n)};Q().prototype.reverse=function(e){return this.throwIfDisposed(),gr(this,e)};Q().prototype.rfft=function(){return this.throwIfDisposed(),Sp(this)};Q().prototype.round=function(){return this.throwIfDisposed(),pm(this)};Q().prototype.rsqrt=function(){return this.throwIfDisposed(),hm(this)};Q().prototype.selu=function(){return this.throwIfDisposed(),fm(this)};Q().prototype.separableConv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Fa(this,e,t,n,r,s,a)};Q().prototype.sigmoid=function(){return this.throwIfDisposed(),pr(this)};Q().prototype.sign=function(){return this.throwIfDisposed(),Mw(this)};Q().prototype.sin=function(){return this.throwIfDisposed(),mm(this)};Q().prototype.sinh=function(){return this.throwIfDisposed(),gm(this)};Q().prototype.slice=function(e,t){return this.throwIfDisposed(),Ve(this,e,t)};Q().prototype.softmax=function(e){return this.throwIfDisposed(),Kr(this,e)};Q().prototype.softplus=function(){return this.throwIfDisposed(),qi(this)};Q().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),xp(this,e,t)};Q().prototype.split=function(e,t){return this.throwIfDisposed(),Mn(this,e,t)};Q().prototype.sqrt=function(){return this.throwIfDisposed(),hn(this)};Q().prototype.square=function(){return this.throwIfDisposed(),lt(this)};Q().prototype.squaredDifference=function(e){return this.throwIfDisposed(),vm(this,e)};Q().prototype.squeeze=function(e){return this.throwIfDisposed(),Ra(this,e)};Q().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Ne?[this,e]:[this,...e];return Dt(n,t)};Q().prototype.step=function(e){return this.throwIfDisposed(),Xi(this,e)};Q().prototype.stridedSlice=function(e,t,n,r,s,a,o,i){return this.throwIfDisposed(),Lw(this,e,t,n,r,s,a,o,i)};Q().prototype.sub=function(e){return this.throwIfDisposed(),le(this,e)};Q().prototype.sum=function(e,t){return this.throwIfDisposed(),ge(this,e,t)};Q().prototype.tan=function(){return this.throwIfDisposed(),Bw(this)};Q().prototype.tanh=function(){return this.throwIfDisposed(),bo(this)};Q().prototype.tile=function(e){return this.throwIfDisposed(),Pn(this,e)};Q().prototype.toBool=function(){return this.throwIfDisposed(),ae(this,"bool")};Q().prototype.toFloat=function(){return this.throwIfDisposed(),ae(this,"float32")};Q().prototype.toInt=function(){return this.throwIfDisposed(),ae(this,"int32")};Q().prototype.topk=function(e,t){return this.throwIfDisposed(),Ww(this,e,t)};Q().prototype.transpose=function(e){return this.throwIfDisposed(),Re(this,e)};Q().prototype.unique=function(e){return this.throwIfDisposed(),Vw(this,e)};Q().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),km(this,e,t)};Q().prototype.unstack=function(e){return this.throwIfDisposed(),pt(this,e)};Q().prototype.where=function(e,t){return this.throwIfDisposed(),nn(e,this,t)};Q().prototype.zerosLike=function(){return this.throwIfDisposed(),je(this)};var ea=class DN extends Error{constructor(t){super(t),Object.setPrototypeOf(this,DN.prototype)}},os=class $N extends Error{constructor(t){super(t),Object.setPrototypeOf(this,$N.prototype)}},V=class FN extends Error{constructor(t){super(t),Object.setPrototypeOf(this,FN.prototype)}},Be=class RN extends Error{constructor(t){super(t),Object.setPrototypeOf(this,RN.prototype)}},TG=class PN extends Error{constructor(t){super(t),Object.setPrototypeOf(this,PN.prototype)}},ON=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 Nr={};function iI(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function jv(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>jv(t));else{let t=Object.keys(e);for(let n of t){let r=e[n];r!=null&&typeof r=="object"&&(!Array.isArray(r)&&r.type==="ndarray"&&typeof r.value=="number"?e[n]=r.value:jv(r))}}}function Tp(e,t={},n={},r="object",s=!1){if(typeof e=="string"){let a=e,o;if(a in n)o=n[a];else if(a in Nr)o=Nr[a];else if(o=t[a],o==null)throw new V(`Unknown ${r}: ${e}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return o}else{let a=e;if(a.className==null||a.config==null)throw new V(`${r}: Improper config format: ${JSON.stringify(a)}. 'className' and 'config' must set.`);let o=a.className,i,u;if(o in n?[i,u]=n[o]:o in Nr?[i,u]=Nr.className:o in t&&([i,u]=t[o]),i==null)throw new V(`Unknown ${r}: ${o}. This may be due to one of the following reasons: 1. The ${r} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code. 2. The custom ${r} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(u!=null){let c={};for(let h of Object.keys(Nr))c[h]=Nr[h];for(let h of Object.keys(n))c[h]=n[h];let l=a.config;l.customObjects=c;let p=Object.assign({},Nr);for(let h of Object.keys(n))Nr[h]=n[h];jv(a.config);let d=u(i,a.config,n,s);return Nr=Object.assign({},p),d}else{let c=Object.assign({},Nr);for(let p of Object.keys(n))Nr[p]=n[p];let l=new i(a.config);return Nr=Object.assign({},c),l}}}function NG(e,t){return et?1:0}function Ph(e,t){return-1*NG(e,t)}function ua(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function _G(e){if(e==null)throw new V(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function Zi(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new V(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function uI(e,t,n=0,r=1/0){return ss(n>=0),ss(r>=n),Array.isArray(e)&&e.length>=n&&e.length<=r&&e.every(s=>typeof s===t)}function tn(e,t){Array.isArray(e)?(w.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>tn(n,`element ${r+1} of ${t}`))):w.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${MN(e)}.`)}function MN(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>MN(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function EG(e,t,n){let r=n!=null?n():w.now(),s;return(...o)=>{let i=n!=null?n():w.now();return i-r0){let n=`${e}_${t}`;return Pu.set(n,1),n}else return e}var LG=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function UN(e){return!!e.match(LG)}function BG(e){return e===parseInt(e.toString(),10)}function ca(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let s=t;st&&(t=r)}return t}function Gr(e,t){if(t{if(e.shape.length!==2)throw new V(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=Np(e,1);return qv(n,[1,t,1])})}function WG(e){let t=[ca(e.shape)];return W(e,t)}function VG(e){if(e.rank<=1)throw new V(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],ca(e.shape,1)];return W(e,t)}function io(e,t,n){return O(()=>{switch(e.rank){case 1:return Ip(e,t,n);case 2:return bm(e,[t,0],[n,e.shape[1]]);case 3:return Ki(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return Qu(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Ve(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Ve(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new V(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function vv(e,t,n){return O(()=>{switch(e.rank){case 1:return Ip(e,t,n);case 2:return bm(e,[0,t],[e.shape[0],n]);case 3:return Ki(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return Qu(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Mh(e,t,n,r){return O(()=>{switch(e.rank){case 1:return Ip(e,t,n);case 2:switch(r){case 1:return io(e,t,n);case 2:return vv(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return io(e,t,n);case 2:return Ki(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return vv(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return io(e,t,n);case 2:return Qu(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return Qu(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return vv(e,t,n);default:throw new V(`The axis is not within the rank of the tensor ${r}`)}default:throw new V(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function cI(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),tt(e,t)}function BS(e,t){switch(e.rank){case 1:return aw([e,t]);case 2:return ow([e,t],0);case 3:return iw([e,t],0);case 4:return uw([e,t],0);default:throw new V(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function qv(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new V(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Pn(e,t)}function Dm(e,t=0,n=1,r,s){return lm(e,t,n,r,s)}function ls(e,t,n,r){if(e.rank<2||t.rank<2)throw new Be(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let s=e.shape.slice(-1)[0],a=t.shape.slice(-2)[0];if(s!==a)throw new Be(`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 tc.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?Kv(e.rank,r,Hr()):null,activation:n});{let s=e.shape.slice(),a=s.pop();e=W(e,[-1,a]);let o=t.shape.slice(),i=o.pop(),u=o.pop(),c=[...o,i],l=Array.from({length:t.rank},(f,g)=>g===0?t.rank-2:g<=t.rank-2?g-1:g);t=W(Re(t,l),[u,-1]);let p=[...s,...c];return W(tc.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?Kv(e.rank,r,Hr()):null,activation:n}),p)}}function GN(e,t,n){return O(()=>(Array.isArray(t)?t=He(t,"int32"):t=ae(t,"int32"),ml(e,t,n)))}function _p(e){return z(e,e)}function Kv(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new V(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return r.length===1?W(t,[1,r[0],1,1,1]):W(t,[1,r[3],r[0],r[1],r[2]]);if(n==="channelsLast")return r.length===1?W(t,[1,1,1,1,r[0]]):W(t,[1].concat(r))}else if(e===4){if(n==="channelsFirst")return r.length===1?W(t,[1,r[0],1,1]):W(t,[1,r[2],r[0],r[1]]);if(n==="channelsLast")return r.length===1?W(t,[1,1,1,r[0]]):W(t,[1].concat(r))}else if(e===3){if(n==="channelsFirst")return r.length===1?W(t,[1,r[0],1]):W(t,[1,r[1],r[0]]);if(n==="channelsLast")return r.length===1?W(t,[1,1,r[0]]):W(t,[1].concat(r))}else if(e<3)return t;throw new V(`Unsupported input rank by biasAdd: ${t.rank}`)}function Xr(e,t,n){return O(()=>(n==null&&(n=Hr()),Pt(n),X(e,Kv(e.rank,t,n))))}function UG(e,t=1){if(t!==1)throw new Be(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return pl(e)}function GG(e){return O(()=>fe(e,X(Lt(e),1)))}function HN(e,t,n,r){return O(()=>Hw(e,t,n,r))}function HG(e){return O(()=>{let t=X(.5,z(.2,e));return rn(t,0,1)})}function Ep(e,t,n=!1){return n?e():t()}var jG=["fanIn","fanOut","fanAvg"],qG=["normal","uniform","truncatedNormal"];function KG(e){Zi(jG,"FanMode",e)}function XG(e){Zi(qG,"Distribution",e)}var Pr=class extends re.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},lI=class extends Pr{apply(e,t){return kt(e,t)}};lI.className="Zeros";re.registerClass(lI);var $m=class extends Pr{apply(e,t){return On(e,t)}};$m.className="Ones";re.registerClass($m);var dI=class extends Pr{constructor(e){if(super(),typeof e!="object")throw new V(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new V(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return O(()=>z(xe(this.value),On(e,t)))}getConfig(){return{value:this.value}}};dI.className="Constant";re.registerClass(dI);var pI=class extends Pr{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 $a(e,this.minval,this.maxval,t,this.seed)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};pI.className="RandomUniform";re.registerClass(pI);var hI=class extends Pr{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 Be(`randomNormal does not support dType ${t}.`);return Dm(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};hI.className="RandomNormal";re.registerClass(hI);var fI=class extends Pr{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 Be(`truncatedNormal does not support dType ${t}.`);return Im(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};fI.className="TruncatedNormal";re.registerClass(fI);var mI=class extends Pr{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 V("Identity matrix initializer can only be used for 2D square matrices.");return z(this.gain,am(e[0]))})}getConfig(){return{gain:this.gain}}};mI.className="Identity";re.registerClass(mI);function YG(e,t="channelsLast"){let n,r;if(Pt(t),e.length===2)n=e[0],r=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let s=ca(e,2);n=e[1]*s,r=e[0]*s}else if(t==="channelsLast"){let s=ca(e,0,e.length-2);n=e[e.length-2]*s,r=e[e.length-1]*s}}else{let s=ca(e);n=Math.sqrt(s),r=Math.sqrt(s)}return[n,r]}var zn=class extends Pr{constructor(e){if(super(),e.scale<0)throw new V(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,KG(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,XG(this.distribution),this.seed=e.seed}apply(e,t){let n=YG(e),r=n[0],s=n[1],a=this.scale;if(this.mode==="fanIn"?a/=Math.max(1,r):this.mode==="fanOut"?a/=Math.max(1,s):a/=Math.max(1,(r+s)/2),this.distribution==="normal"){let o=Math.sqrt(a);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Be(`${this.getClassName()} does not support dType ${t}.`);return Im(e,0,o,t,this.seed)}else{let o=Math.sqrt(3*a);return $a(e,-o,o,t,this.seed)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};zn.className="VarianceScaling";re.registerClass(zn);var Fm=class extends zn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Fm.className="GlorotUniform";re.registerClass(Fm);var Rm=class extends zn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Rm.className="GlorotNormal";re.registerClass(Rm);var Pm=class extends zn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Pm.className="HeNormal";re.registerClass(Pm);var Om=class extends zn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Om.className="HeUniform";re.registerClass(Om);var Mm=class extends zn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Mm.className="LeCunNormal";re.registerClass(Mm);var Lm=class extends zn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return zn.className}};Lm.className="LeCunUniform";re.registerClass(Lm);var gI=class extends Pr{constructor(e){super(),this.DEFAULT_GAIN=1,this.ELEMENTS_WARN_SLOW=2e3,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed}apply(e,t){return O(()=>{if(e.length<2)throw new Be("Shape must be at least 2D.");if(t!=="int32"&&t!=="float32"&&t!==void 0)throw new TypeError(`Unsupported data type ${t}.`);t=t;let n=w.sizeFromShape(e.slice(0,-1)),r=e[e.length-1],s=n*r;s>this.ELEMENTS_WARN_SLOW&&console.warn(`Orthogonal initializer is being called on a matrix with more than ${this.ELEMENTS_WARN_SLOW} (${s}) elements: Slowness may result.`);let a=[Math.max(r,n),Math.min(r,n)],o=Dm(a,0,1,t,this.seed),i=Xw.qr(o,!1),u=i[0],l=i[1].flatten().stridedSlice([0],[Math.min(r,n)*Math.min(r,n)],[Math.min(r,n)+1]);return u=z(u,l.sign()),nr*s);return t}var VS="Variable",jN=class{constructor(e,t="float32",n=VS,r=!0,s=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=BN(),n=n==null?VS:n,this.originalName=WN(n),this.name=VN(this.originalName),this.trainable_=r,this.constraint=s,this.val=Uw(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),ZG(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 ZG(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function Yv(e){return e.map(t=>t.read())}function bI(e){e.forEach(t=>{t[0].write(t[1])})}var Bt=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||{}}},jr=class{constructor(e,t,n,r,s,a,o){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=r,this.callArgs=s,this.outputTensorIndex=o,this.id=BN(),a!=null&&(this.originalName=WN(a),this.name=VN(this.originalName)),this.rank=t.length}},JG=0,Bm=class{constructor(e,t){this.callArgs=t,this.id=JG++,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}}},QG=0,ze=class extends re.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=QG++,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=Ss(n)+"_"+Am(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 s=null;e.batchSize!=null&&(s=e.batchSize),n=[s].concat(e.inputShape)}this.batchInputShape=n;let r=e.dtype;r==null&&(r=e.inputDType),r==null&&(r="float32"),this.dtype=r}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 os(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new V(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Rn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Rn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new ea(`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 ea(`Layer ${this.name} is not connected, no input to return.`);return Rn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new ea(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new ea(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Rn(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){let t=it(e);if(this.inputSpec==null||this.inputSpec.length===0)return;let n=it(this.inputSpec);if(t.length!==n.length)throw new V(`Layer ${this.name} expects ${n.length} inputs, but it received ${t.length} input tensors. Input received: ${e}`);for(let r=0;ra.maxNDim)throw new V(`Input ${r} is incompatible with layer ${this.name}: expected max_ndim=${a.maxNDim}, found ndim=${o}`);if(a.minNDim!=null&&o=0?i[c]:i[i.length+c];if(l!=null&&[l,null].indexOf(p)===-1)throw new V(`Input ${r} is incompatible with layer ${this.name}: expected axis ${c} of input shape to have value ${l} but got shape ${i}.`)}}if(a.shape!=null)for(let i=0;i{if(!this.built){this.assertInputCompatibility(e);let a=[];for(let o of it(e))a.push(o.shape);this.build(Rn(a)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&s&&(this._refCount=1)}if(this.assertInputCompatibility(e),s){let a=this.call(e,t);this.supportsMasking&&this.setMaskMetadata(e,a);let o=it(a),i=[];for(let u of o)n.indexOf(u)!==-1&&(u=u.clone()),i.push(u);if(a=Rn(i),this.activityRegularizer!=null)throw new Be("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return a}else{let a=eH(e),o=this.computeOutputShape(a),i,u=tH(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?a[0]:a),o!=null&&o.length>0&&Array.isArray(o[0])?i=o.map((c,l)=>new jr(u,c,this,it(e),t,this.name,l)):i=new jr(u,o,this,it(e),t,this.name),this.addInboundNode(e,i,null,null,a,o,t),this._refCount++,this.activityRegularizer!=null)throw new Be("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return i}})}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,r)=>{n!=null&&e[r]!=null&&e[r]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new ea(`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 ea(`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 os(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return ff(this.weights)}build(e){this.built=!0}getWeights(e=!1){return Yv(e?this.trainableWeights:this.weights)}setWeights(e){O(()=>{let t=this.weights;if(t.length!==e.length)throw new V(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],r=Yv(t);for(let s=0;ss.apply(c.read())),a==null&&(a=!0),a?this._trainableWeights.push(c):this._nonTrainableWeights.push(c),c}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=it(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}setMaskMetadata(e,t,n){if(!this.supportsMasking)return;let r=this.computeMask(e,n),s=it(t),a=it(r);if(s.length!==a.length)throw new Error(`${this.name} outputs ${s.length} tensors but ${s.length} masks for those tensors`);for(let o=0;oe.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 eH(e){e=it(e);let t=[];for(let n of e)t.push(n.shape);return Rn(t)}function tH(e){return"float32"}function qN(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let r=t.inboundNodes[n];if(r.inboundLayers.length===0)return r.inputTensors;{let s=[];for(let a=0;af.name),u=[],c=t.names();for(let f of i)c.indexOf(f)!==-1?u.push(t.getValue(f)):u.push(null);r!=null&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);let l=i.join(",")+"|"+t.names().sort().join(","),p=mf.get(l),d;if(p==null){let f=oH(o,t);p=f.sorted,d=f.recipientCounts,mf.put(l,p),gf.put(l,d)}d={},s||Object.assign(d,gf.get(l));let h=new zu(t);for(let f=0;fr.maxNumTensors&&(r.maxNumTensors=$),$0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let s=US(e[0],t);n=s.sorted,r=s.recipientMap}else{let s=new Set;for(let a of e){let{sorted:o,recipientMap:i}=US(a,t);for(let u of o)s.has(u.name)||(n.push(u),s.add(u.name));for(let u in i)r[u]==null&&(r[u]=new Set),i[u].forEach(c=>r[u].add(c))}}return{sorted:n,recipientCounts:iH(r)}}function iH(e){let t={};for(let n in e)t[n]=e[n].size;return t}function US(e,t){let n=new Set,r=[],s={};for(let i of t.names())n.add(i);let a=[],o=[];for(a.push(e);a.length>0;){let i=a[a.length-1];if(n.has(i.name)){a.pop();continue}let u=o[o.length-1]===a.length-1;if(i.inputs.length===0||u)a.pop(),r.push(i),n.add(i.name),u&&o.pop();else{o.push(a.length-1);for(let c of i.inputs)s[c.name]==null&&(s[c.name]=new Set),s[c.name].add(i.name),!n.has(c.name)&&a.push(c)}}return{sorted:r,recipientMap:s}}function uH(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;r100,aH);var YN={};Ee(YN,{maxNorm:()=>lH,minMaxNorm:()=>hH,nonNeg:()=>pH,unitNorm:()=>dH});function yI(e,t){return O(()=>hn(ge(z(e,e),t,!0)))}var Ap=class extends re.Serializable{getConfig(){return{}}},vI=class extends Ap{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=yI(e,this.axis),n=rn(t,0,this.maxValue);return z(e,fe(n,X(qt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};vI.className="MaxNorm";re.registerClass(vI);var xI=class extends Ap{constructor(e){super(),this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return O(()=>fe(e,X(qt(),yI(e,this.axis))))}getConfig(){return{axis:this.axis}}};xI.className="UnitNorm";re.registerClass(xI);var wI=class extends Ap{apply(e){return Ke(e)}};wI.className="NonNeg";re.registerClass(wI);var II=class extends Ap{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=yI(e,this.axis),n=X(z(this.rate,rn(t,this.minValue,this.maxValue)),z(1-this.rate,t));return z(e,fe(n,X(qt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};II.className="MinMaxNorm";re.registerClass(II);var GS={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Xt(e){return iI(e)}function HS(e,t={}){return Tp(e,re.SerializationMap.getMap().classNameMap,t,"constraint")}function Yt(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in GS?GS[e]:e,config:{}};return HS(n)}else return e instanceof Ap?e:HS(e)}function lH(e){return new vI(e)}function dH(e){return new xI(e)}function pH(){return new wI}function hH(e){return new II(e)}var ZN={};Ee(ZN,{constant:()=>gH,glorotNormal:()=>kH,glorotUniform:()=>IH,heNormal:()=>SH,heUniform:()=>CH,identity:()=>xH,leCunNormal:()=>TH,leCunUniform:()=>NH,ones:()=>mH,orthogonal:()=>_H,randomNormal:()=>yH,randomUniform:()=>bH,truncatedNormal:()=>vH,varianceScaling:()=>wH,zeros:()=>fH});function fH(){return new lI}function mH(){return new $m}function gH(e){return new dI(e)}function bH(e){return new pI(e)}function yH(e){return new hI(e)}function vH(e){return new fI(e)}function xH(e){return new mI(e)}function wH(e){return new zn(e)}function IH(e){return new Fm(e)}function kH(e){return new Rm(e)}function SH(e){return new Pm(e)}function CH(e){return new Om(e)}function TH(e){return new Mm(e)}function NH(e){return new Lm(e)}function _H(e){return new gI(e)}var JN={};Ee(JN,{Layer:()=>ze,RNN:()=>Ms,RNNCell:()=>$p,activation:()=>sj,add:()=>hj,alphaDropout:()=>Yj,average:()=>fj,averagePooling1d:()=>Rk,averagePooling2d:()=>Pk,averagePooling3d:()=>Ok,avgPool1d:()=>kj,avgPool2d:()=>Cj,avgPool3d:()=>Nj,avgPooling1d:()=>Sj,avgPooling2d:()=>Tj,avgPooling3d:()=>_j,batchNormalization:()=>xj,bidirectional:()=>Vj,categoryEncoding:()=>t5,centerCrop:()=>Qj,concatenate:()=>mj,conv1d:()=>X6,conv2d:()=>Y6,conv2dTranspose:()=>Z6,conv3d:()=>J6,conv3dTranspose:()=>Q6,convLstm2d:()=>Lj,convLstm2dCell:()=>Bj,cropping2D:()=>tj,dense:()=>aj,depthwiseConv2d:()=>rj,dot:()=>vj,dropout:()=>oj,elu:()=>U6,embedding:()=>pj,flatten:()=>uj,gaussianDropout:()=>Xj,gaussianNoise:()=>Kj,globalAveragePooling1d:()=>Ej,globalAveragePooling2d:()=>Aj,globalMaxPool1d:()=>Gj,globalMaxPool2d:()=>Hj,globalMaxPooling1d:()=>J2,globalMaxPooling2d:()=>Q2,gru:()=>$j,gruCell:()=>Fj,input:()=>g2,inputLayer:()=>V6,layerNormalization:()=>wj,leakyReLU:()=>H6,lstm:()=>Rj,lstmCell:()=>Pj,masking:()=>Zj,maxPool1d:()=>jj,maxPool2d:()=>qj,maxPooling1d:()=>e_,maxPooling2d:()=>t_,maxPooling3d:()=>Dj,maximum:()=>gj,minimum:()=>bj,multiply:()=>yj,permute:()=>dj,prelu:()=>j6,randomWidth:()=>n5,reLU:()=>G6,repeatVector:()=>cj,rescaling:()=>Jj,reshape:()=>lj,resizing:()=>e5,rnn:()=>zj,separableConv2d:()=>ej,simpleRNN:()=>Oj,simpleRNNCell:()=>Mj,softmax:()=>q6,spatialDropout1d:()=>ij,stackedRNNCells:()=>Wj,thresholdedReLU:()=>K6,timeDistributed:()=>Uj,upSampling2d:()=>nj,zeroPadding2d:()=>Ij});async function Qs(e){if(e==null)return;let t=[],n=[],r=[];for(let s in e){let a=e[s];if(typeof a!="number"){let o=a;t.push(o.data()),n.push(s),r.push(o)}}if(t.length>0){let s=await Promise.all(t);for(let a=0;aX(this.totals[r],z(s,n)));this.totals[r]=o,a!=null&&a.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 r=z(fe(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),Ht(t[n])}))}},t2=class extends rc{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 s in this.history){let a=this.history[s];for(let o=0;onew n2(r,t))}var kI=class ts{constructor(){}static registerCallbackConstructor(t,n){w.assert(t>=0&&Number.isInteger(t),()=>`Verbosity level is expected to be an integer >= 0, but got ${t}`),ts.checkForDuplicate(n),ts.constructors[t]==null&&(ts.constructors[t]=[]),ts.constructors[t].push(n)}static checkForDuplicate(t){for(let n in ts.constructors)ts.constructors[+n].forEach(s=>{if(s===t)throw new V("Duplicate callback constructor.")})}static clear(){ts.constructors={}}static createCallbacks(t){let n=[];for(let r in ts.constructors){let s=+r;t>=s&&n.push(...ts.constructors[s])}return n.map(r=>new r)}};kI.constructors={};function s2(e,t,n,r,s,a,o,i,u){let c=new t2,l=[new AH,...kI.createCallbacks(t)];e!=null&&l.push(...e),l.push(c);let p=new e2(l);return p.setParams({epochs:n,initialEpoch:r,samples:s,steps:a,batchSize:o,verbose:t,doValidation:i,metrics:u}),{callbackList:p,history:c}}function Vr(e,t={},n=!1){return Tp(e,re.SerializationMap.getMap().classNameMap,t,"layer",n)}function bf(e,t){return O(()=>{e.dtype!=="float32"&&(e=ae(e,"float32"));let n=ge(_p(e),t,!0),r=vn(n.shape,qt()),s=hn(ms(n,r));return fe(e,s)})}function Ji(e,t){return O(()=>_t(_p(le(t,e)),-1))}function zm(e,t){return O(()=>_t(Lt(le(t,e)),-1))}function yl(e,t){return O(()=>{let n=le(e,t),r=rn(Lt(e),qt(),Number.MAX_VALUE),s=Lt(fe(n,r));return z(100,_t(s,-1))})}function DH(e,t){return O(()=>{let n=rn(t,qt(),Number.MAX_VALUE),r=nr(X(1,n)),s=rn(e,qt(),Number.MAX_VALUE),a=nr(X(1,s));return _t(_p(le(r,a)),-1)})}function $H(e,t){return O(()=>{let n=ms(0,le(1,z(e,t)));return _t(_p(n),-1)})}function FH(e,t){return O(()=>{let n=ms(0,le(1,z(e,t)));return _t(n,-1)})}function RH(e,t){return O(()=>{let n=ge(z(e,t),-1),r=hr(z(le(1,e),t),-1);return ms(0,X(1,le(r,n)))})}function PH(e,t){return O(()=>{let n=Math.log(2),r=le(t,e),s=le(X(r,qi(z(-2,r))),n);return _t(s,-1)})}function _d(e,t,n=!1){return O(()=>{if(n)t=Kr(t);else{let r=ge(t,t.shape.length-1,!0);t=fe(t,r)}return t=rn(t,qt(),1-qt()),bt(ge(z(ae(e,"float32"),nr(t)),t.shape.length-1))})}function yf(e,t,n=!1){return O(()=>{let r=ae(fl(WG(e)),"int32");t=rn(t,qt(),1-qt());let s=t.shape,a=W(Zu(r,s[s.length-1]),s);return _d(a,t,n)})}function OH(e,t){if(!w.arraysEqual(e.shape,t.shape))throw new V(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return O(()=>{let n=Ke(t),r=bt(Lt(t));return X(le(n,z(t,e)),gp(fn(r)))})}function Wm(e,t){return O(()=>{let n;return n=rn(t,qt(),1-qt()),n=nr(fe(n,le(1,n))),_t(OH(e,n),-1)})}function MH(e,t){return O(()=>{let n=rn(e,qt(),1),r=rn(t,qt(),1);return ge(z(e,nr(fe(n,r))),-1)})}function LH(e,t){return O(()=>{let n=nr(X(qt(),t));return _t(le(t,z(e,n)),-1)})}function SI(e,t){return O(()=>{let n=bf(e,-1),r=bf(t,-1),s=z(n,r);return bt(ge(s,-1))})}var vf={meanSquaredError:Ji,meanAbsoluteError:zm,meanAbsolutePercentageError:yl,meanSquaredLogarithmicError:DH,squaredHinge:$H,hinge:FH,categoricalHinge:RH,logcosh:PH,categoricalCrossentropy:_d,sparseCategoricalCrossentropy:yf,binaryCrossentropy:Wm,kullbackLeiblerDivergence:MH,poisson:LH,cosineProximity:SI};function xv(e){if(typeof e=="string"){if(e in vf)return vf[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new V(t)}else return e}function CI(e,t){return O(()=>{let n=z(.5,rr(t)),r=cs(En(t,n),e.dtype);return _t(tr(e,r),-1)})}function TI(e,t){return O(()=>cs(tr(mo(e,-1),mo(t,-1)),"float32"))}function a2(e,t){return O(()=>ae(ge($r(tr(e,1),tr(t,1))),"float32"))}function BH(e,t){return O(()=>ae(ge($r(tr(e,1),tr(t,0))),"float32"))}function zH(e,t){return O(()=>ae(ge($r(tr(e,0),tr(t,1))),"float32"))}function o2(e,t){return O(()=>{let n=a2(e,t),r=zH(e,t),s=X(n,r);return ae(nn(En(s,0),fe(n,s),0),"float32")})}function WH(e,t){return O(()=>{let n=a2(e,t),r=BH(e,t),s=X(n,r);return ae(nn(En(s,0),fe(n,s),0),"float32")})}function i2(e,t){return Wm(e,t)}function u2(e,t){return e.rank===t.rank&&(e=Ra(e,[e.rank-1])),t=mo(t,-1),t.dtype!==e.dtype&&(t=ae(t,e.dtype)),ae(tr(e,t),"float32")}var VH=Ji,UH=Ji,GH=zm,HH=zm,jH=yl,qH=yl,NI=_d,KH=SI,c2=yf,xf={binaryAccuracy:CI,categoricalAccuracy:TI,precision:o2,categoricalCrossentropy:NI,sparseCategoricalCrossentropy:c2,mse:VH,MSE:UH,mae:GH,MAE:HH,mape:jH,MAPE:qH,cosine:KH};function XH(e){if(typeof e=="string"&&e in xf)return xf[e];if(typeof e!="string"&&e!=null)return e;throw new V(`Unknown metric ${e}`)}function Lh(e){if(ss(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(vf))if(vf[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(xf))if(xf[n]===e){t=n;break}return t!==void 0?t:e.name}}function YH(e){let t={Adagrad:()=>Za.adagrad(.01),Adadelta:()=>Za.adadelta(1,.95,qt()),Adam:()=>Za.adam(.001,.9,.999,qt()),Adamax:()=>Za.adamax(.002,.9,.999,qt(),0),RMSProp:()=>Za.rmsprop(.001,.9,0,qt()),SGD:()=>Za.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new V(`Unknown Optimizer ${e}`)}var qS=1*1024*1024;function KS(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!Zv(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let r=JSON.stringify(e);r.length>qS&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${r.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${qS}.`)}}function Zv(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"||!Zv(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!Zv(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function ZH(e,t,n,r=console.log){let s=QH(e),a=["Layer (type)","Input Shape","Output shape","Param #"];s?(t=t||90,n=n||[.32,.61,.89,1]):(t=t||115,n=n||[.24,.48,.7,.8,1]),n[n.length-1]<=1&&(n=n.map(l=>Math.floor(t*l)));let o;if(!s){a.push("Receives inputs"),o=[];for(let l in e.nodesByDepth)o.push(...e.nodesByDepth[l])}r("_".repeat(t)),wf(a,n,r),r("=".repeat(t));let i=e.layers;for(let l=0;l1||s.length===1&&s[0].inboundLayers.length>1){t=!1;break}r.push(...s)}if(t)for(let s of e.layers){let a=!1;for(let o of s.inboundNodes)if(r.indexOf(o)!==-1)if(a){t=!1;break}else a=!0;if(!t)break}return t}function wf(e,t,n=console.log){let r="";for(let s=0;s0&&(r=r.slice(0,r.length-1)+" "),r+=e[s],r=r.slice(0,t[s]),r+=" ".repeat(t[s]-r.length);n(r)}function e6(e,t,n){let r,s;try{s=e.inboundNodes.map(u=>JSON.stringify(u.inputShapes)).join(",")}catch(u){s="multiple"}try{r=JSON.stringify(e.outputShape)}catch(u){r="multiple"}let a=e.name,o=e.getClassName(),i=[`${a} (${o})`,s,r,e.countParams().toString()];wf(i,t,n)}function t6(e,t,n,r){let s,a;try{a=e.inboundNodes.map(p=>JSON.stringify(p.inputShapes)).join(",")}catch(p){a="multiple"}try{s=JSON.stringify(e.outputShape)}catch(p){s="multiple"}let o=[];for(let p of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(p)===-1))for(let d=0;d{let t=Object.keys(e);if(t.length===0)return!1;let n=t[0].split("/");return!isNaN(parseInt(n[n.length-1],10))},r6=class ns extends ze{constructor(t){if(super({}),this.containerNodes=new Set,this.name=t.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=Am(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(t.inputs)?this.inputs=t.inputs.slice():this.inputs=[t.inputs],Array.isArray(t.outputs)?this.outputs=t.outputs.slice():this.outputs=[t.outputs],ua(this.inputs).length!==this.inputs.length)throw new V(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);ua(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let v=y.sourceLayer,x=y.nodeIndex,k=y.tensorIndex;this.outputLayers.push(v),this.outputLayersNodeIndices.push(x),this.outputLayersTensorIndices.push(k)}for(let y of this.inputs){let v=y.sourceLayer,x=y.nodeIndex,k=y.tensorIndex;ss(x===0,"input layer has >1 nodes"),ss(k===0,"input layer has >1 tensors"),this.inputLayers.push(v),this.inputLayersNodeIndices.push(x),this.inputLayersTensorIndices.push(k)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;yy.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let n={},r={},s={},a={},o={},i=[],u=(y,v,x,k,S,N)=>{(k==null||S==null||N==null)&&(k=y.sourceLayer,S=y.nodeIndex,N=y.tensorIndex);let E=k.inboundNodes[S];if(x.indexOf(E)!==-1)throw new os(`The tensor ${y.name} at layer "${k.name}" is part of a cycle.`);if(v.indexOf(E)!==-1)return;this.containerNodes.add(ns.nodeKey(k,S)),k.id in o||(o[k.id]=Object.keys(o).length),x.indexOf(E)===-1&&x.push(E);let $=E.inboundLayers.length;for(let F=0;F<$;F++){let D=E.inputTensors[F],R=E.inboundLayers[F],C=E.nodeIndices[F],L=E.tensorIndices[F];u(D,v,x,R,C,L)}for(v.push(E);x.indexOf(E)>=0;)x.splice(x.indexOf(E),1);i.push(E)},c=[],l=[];for(let y of this.outputs)u(y,c,l);let p=i.slice().reverse();for(let y of p){r[y.id]=y,y.id in n||(n[y.id]=0);let v=n[y.id],x=s[y.outboundLayer.id]==null?0:s[y.outboundLayer.id];v=Math.max(v,x),s[y.outboundLayer.id]=v,a[y.outboundLayer.id]=y.outboundLayer,n[y.id]=v;for(let k=0;kparseInt(y,10)).sort(Ph);this.layers=[];for(let y of f){let v=h[y];v.sort((x,k)=>{let S=o[x.id],N=o[k.id];return SN?1:0});for(let x of v)x instanceof ns&&this.internalContainerRefs.push(x),this.layers.push(x)}this.layersByDepth=h,f=Object.keys(d).map(y=>parseInt(y,10)).sort(Ph);let g=this.inputs.slice(),m=[];for(let y of f)for(let v of d[y]){let x=v.outboundLayer;if(x!=null){for(let k of v.inputTensors)if(g.indexOf(k)===-1)throw new os(`Graph disconnected: cannot obtain value for tensor ${k} at layer "${x.name}". The following previous layers were accessed without issue: ${m}`);for(let k of v.outputTensors)g.push(k);m.push(x.name)}}this.nodesByDepth=d;let b=this.layers.map(y=>y.name);for(let y of b){let v=b.filter(x=>x===y).length;if(v!==1)throw new os(`The name "${y}" is used ${v} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(b))}this.outboundNodes=[],this.inboundNodes=[],new Bm({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let t={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount===0){for(let n of this.layers)t.numDisposedVariables+=n.dispose().numDisposedVariables;for(let n of this.internalContainerRefs)t.numDisposedVariables+=n.dispose().numDisposedVariables}return t.refCountAfterDispose=this._refCount,t}get trainable(){return this.trainable_}set trainable(t){this.layers.forEach(n=>{n._trainableWeights.forEach(r=>r.trainable=t)}),this.trainable_=t}get trainableWeights(){if(this._trainableWeights.length>0)throw new V("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let t=[];for(let n of this.layers)t=t.concat(n.trainableWeights);return t}get nonTrainableWeights(){let t=[];for(let n of this.layers)t.push(...n.nonTrainableWeights);if(!this.trainable){let n=[];for(let r of this.layers)n.push(...r.trainableWeights);return n.concat(t)}return t}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(t,n=!0){let r={},s=0,a=n6(t);a&&this.parseWeights(t);for(let i of this.layers)for(let[u,c]of i.weights.entries()){let l=a?`${c.name.split("/").slice(0,-1).join("/")+"/"}${u}`:c.originalName;if(r[l]!=null)throw new V(`Duplicate weight name: ${l}`);r[l]=c,s++}let o=[];for(let i in t){let u=i;if(r[i]==null){let c=i.split("/");u=c.slice(0,-2).concat([c[c.length-1]]).join("/")}if(r[u]!=null)o.push([r[u],t[i]]);else if(n)throw new V(`Provided weight data has no target variable: ${i}`);delete r[u]}if(n){let i=[];for(let u in r)i.push(u);if(i.length>0)throw new V(`${i.length} of ${s} weights are not set: ${i}`)}bI(o)}parseWeights(t){for(let n in Object.keys(t)){let r=n.split("/"),s=["vars","layer_checkpoint_dependencies"],a=r.map(o=>o.startsWith("_")?o.slice(1):o).filter(o=>!s.includes(o)).join("/");a!==n&&(t[a]=t[n],delete t[n])}}updatedConfig(){let t=this.getConfig(),n={};return n.className=this.getClassName(),n.config=t,n.kerasVersion=`tfjs-layers ${_I}`,n.backend="TensorFlow.js",n}toJSON(t,n=!0){let r=Jv(this.updatedConfig());return n?JSON.stringify(r):r}call(t,n){return O(()=>{t=it(t);let r=new zu;for(let s=0;s{t=it(t);let r;return n==null?r=wo(null,t.length):r=it(n),this.runInternalGraph(t,r)[1]})}computeOutputShape(t){let n=hf(t);if(n.length!==this.inputLayers.length)throw new V(`Invalid inputShape argument ${t}: model has ${this.inputLayers.length} tensor inputs.`);let r={};for(let i=0;iparseInt(i,10)).sort(Ph);if(s.length>1)for(let i of s){let u=this.nodesByDepth[i];for(let c of u){let l=c.outboundLayer;if(this.inputLayers.map(g=>g.id).indexOf(l.id)!==-1)continue;let p=[];for(let g=0;gparseInt(u,10)).sort(Ph);for(let u of s){let c=this.nodesByDepth[u];for(let l of c){let p=l.outboundLayer,d=l.inputTensors,h=l.outputTensors,f=new Array;for(let g of d)g.id in r&&f.push(r[g.id]);if(f.length===d.length){let g={},m,b,y,v;if(l.callArgs!=null&&(g=l.callArgs),f.length===1){let[x,k]=f[0];g.mask==null&&(g.mask=k),y=it(p.call(x,g)),v=it(p.computeMask(x,k)),m=[x],b=[k]}else m=f.map(x=>x[0]),b=f.map(x=>x[1]),g.mask==null&&(g.mask=b),y=it(p.call(m,g)),v=it(p.computeMask(m,b));if(p.activityRegularizer)throw new Be("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let x=0;x{let t=[];for(let n of this.layers)for(let r=0;r0){let g=[];for(let m=0;m0&&m.apply(Rn(y),v)}function c(m){let b=m.name,y=Vr(m,n.customObjects!=null?n.customObjects:{});y.setFastWeightInitDuringBuild(s),a[b]=y,m.inboundNodes.forEach(x=>{if(!(x instanceof Array))throw new V(`Corrupted configuration, expected array for nodeData: ${x}`);i(y,x)})}let l=n.name,p=n.layers;for(let m of p)c(m);for(;!_G(o);)for(let m of p){let b=a[m.name];if(b.name in o){let y=o[b.name];delete o[b.name];for(let v of y)u(b,v)}}let d=[],h=[],f=n.inputLayers;for(let m of f){let b=m[0],y=m[1],v=m[2];ss(b in a);let k=a[b].inboundNodes[y].outputTensors;d.push(k[v])}let g=n.outputLayers;for(let m of g){let b=m[0],y=m[1],v=m[2];ss(b in a);let k=a[b].inboundNodes[y].outputTensors;h.push(k[v])}return new t({inputs:d,outputs:h,name:l})}get stateful(){if(this._stateful)throw new V("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let t of this.layers)if(t.stateful)return!0;return!1}resetStates(){O(()=>{this.layers.forEach(t=>{t.stateful&&t.resetStates()})})}};function s6(e,t,n){let r=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(s=>null);if(r===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!==r)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${r} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let s=[];return t.forEach(a=>{a in e?s.push(e[a]):s.push(null)}),s}else throw new Error(`The model has multiple (${r}) outputs, so ${n} must be either an array with ${r} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function d2(e,t){return s6(e,t,"classWeight")}async function p2(e,t,n,r){if(t!=null||r!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let s=O(()=>{if(e.shape.length===1)return us(e);if(e.shape.length===2){if(e.shape[1]>1)return mo(e,1);if(e.shape[1]===1)return W(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),a=Array.from(await s.data());_e(s);let o=[];return a.forEach(i=>{if(n[i]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${i} exists in the data but not in classWeight`);o.push(n[i])}),He(o,"float32")}else return null}function a6(e,t){return z(e,t)}var o6=32;function h2(e,t){let n,r,s=t;n=s.xs,r=s.ys,w.assert(n!=null&&r!=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 a=XS("input",e.inputNames,n),o=XS("output",e.outputNames,r),i=a[0].shape[0];w.assert(a.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${a.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),w.assert(o.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${o.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let u=0;u`Batch size mismatch: input ${e.inputNames[u]} has ${a[u].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);for(let u=0;u`Batch size mismatch: output ${e.outputNames[u]} has ${o[u].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);return{xs:a,ys:o}}function XS(e,t,n){if(n instanceof Ne)return[n];if(Array.isArray(n))return w.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let r=[];for(let s of t){if(n[s]==null)throw new V(`The feature data generated by the dataset lacks the required ${e} key '${s}'.`);r.push(n[s])}return r}}function i6(e){if(e.length===3)throw new Be("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function u6(e,t,n){let r=n.batchesPerEpoch!=null;if(w.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),w.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),w.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}`),w.assert(!r||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),w.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 s=n.validationData!=null,a,o;if(s)if(YS(n.validationData))w.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 m=i6(n.validationData);a=m.xs,o=m.ys}let i=e.makeTrainFunction(),u=e.getDedupedMetricsNames(),c;s?c=u.slice().concat(u.map(m=>"val_"+m)):c=u.slice();let l=r2(n.callbacks,n.yieldEvery),p=n.verbose==null?1:n.verbose,{callbackList:d,history:h}=s2(l,p,n.epochs,null,null,c6(t,n),null,s,c);d.setModel(e),e.history=h,await d.onTrainBegin(),e.stopTraining_=!1;let f=n.initialEpoch==null?0:n.initialEpoch,g=await t.iterator();for(;f=n.batchesPerEpoch:v.done){if(s){let x;YS(n.validationData)?x=it(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):x=it(e.evaluate(a,o,{batchSize:n.validationBatchSize==null?o6:n.validationBatchSize,verbose:0}));for(let k=0;k0)throw new Be("Verbose mode is not implemented yet.");w.assert(!r||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let o=l6(t)?t:await t.iterator(),i=0,u=0;for(;!r||u{if(c.value){let{xs:l,ys:p}=h2(e,c.value),d=l.concat(p),h=O(()=>s(d));if(_e(d),u===0)for(let g=0;gX(a[g],z(f,m))),u>0&&_e(b)}_e(h),i+=f,++u}return a}),c.done){r&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let c=0;c0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function td(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>io(r,t,n-t)):io(e,t,n-t)}function Qv(e,t){return O(()=>e==null?null:Array.isArray(e)?e.map(n=>Qv(n,t)):GN(e,t.dtype==="int32"?t:ae(t,"int32")))}function Iv(e,t){let n=[],r=0,s=null;for(;r=e&&(s=e),n.push([r,s]),r=s;return n}function f2(e){let t=[];e instanceof Ne&&(e=[e]);for(let n=0;nn.push(s.id));else if(t!=null)for(let s in t){let a=t[s];n.push(a.id)}let r=[];if(e instanceof Ne)n.indexOf(e.id)===-1&&r.push(e);else if(Array.isArray(e))e.forEach(s=>{n.indexOf(s.id)===-1&&r.push(s)});else if(e!=null)for(let s in e){let a=e[s];n.indexOf(a.id)===-1&&r.push(a)}r.forEach(s=>{s.isDisposed||s.dispose()})}function p6(e){return e instanceof Ne}function ex(e){return Array.isArray(e)}function ZS(e){return!p6(e)&&!ex(e)}function JS(e,t,n,r=!0,s=""){if(t==null||t.length===0){if(e!=null){let o=!1;if(ex(e)&&e.length>0)o=!0;else if(ZS(e)){for(let i in e)if(e.hasOwnProperty(i)){o=!0;break}}else o=!0;if(o)throw new V(`Error when checking model ${s} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(o=>null);let a;if(ZS(e)){e=e,a=[];for(let o of t){if(e[o]==null)throw new V(`No data provided for "${o}". Need data for each key in: ${t}`);a.push(e[o])}}else if(ex(e)){if(e=e,e.length!==t.length)throw new V(`Error when checking model ${s}: 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}`);a=e}else{if(e=e,t.length>1)throw new V(`The model ${s} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);a=[e]}if(a=f2(a),n!=null)for(let o=0;o=0&&c!==l)throw new V(`${s} expected a batch of elements where each example has shape [${n[o].slice(1,n[o].length)}] (i.e.,tensor shape [*,${n[o].slice(1,n[o].length)}]) but the ${s} received an input with ${i.shape[0]} examples, each with shape [${i.shape.slice(1,i.shape.length)}] (tensor shape [${i.shape}])`)}}return a}function h6(e,t,n){let r=ua(e.map(a=>a.shape[0]));r.sort();let s=ua(t.map(a=>a.shape[0]));if(s.sort(),r.length>1)throw new V(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(a=>a.shape))}`);if(s.length>1)throw new V(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(a=>a.shape))}`);if(r.length>0&&s.length>0&&!w.arraysEqual(r,s))throw new V(`Input Tensors should have the same number of samples as target Tensors. Found ${r[0]} input sample(s) and ${s[0]} target sample(s).`)}function f6(e,t,n){let r=[Ji,Wm,_d];for(let s=0;s1)throw new V(`The model expects ${t.length} ${s} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);a=[e]}if(n!=null)for(let o=0;o[]);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(r=>n);{let r=[];for(let s of t){let a=n.hasOwnProperty(s)?n[s]:[];Array.isArray(a)||(a=[a]),r.push(a)}return r}}var g6="layers-model",Es=class extends r6{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new V("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");ZH(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=YH(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Os))throw new V("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let a in e.loss)if(this.outputNames.indexOf(a)===-1)throw new V(`Unknown entry in loss dictionary: "${a}". Only expected the following keys: ${this.outputNames}`);for(let a of this.outputNames)e.loss[a]==null&&console.warn(`Output "${a}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${a} during training`),t.push(xv(e.loss[a]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new V(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(o=>xv(o))}else{let a=xv(e.loss);this.outputs.forEach(o=>{t.push(a)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let a=0;a{for(let a=0;a1&&(this.metricsTensors.push([o,a]),this.metricsNames.push(this.outputNames[a]+"_loss"))}});let r=m6(e.metrics,this.outputNames),s=(a,o,i)=>{this.outputNames.length>1&&(o=this.outputNames[a]+"_"+o),this.metricsNames.push(o),this.metricsTensors.push([i,a])};oo("metric",()=>{for(let a=0;a{let c="",l,p,d;for(let h of u){if(typeof h=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(h)!==-1){let g=this.internalOutputShapes[a];g[g.length-1]===1||this.lossFunctions[a]===Wm?["accuracy","acc"].indexOf(h)!==-1?p=CI:["crossentropy","ce"].indexOf(h)!==-1&&(p=i2):this.lossFunctions[a]===yf?["accuracy","acc"].indexOf(h)!==-1?p=u2:["crossentropy","ce"].indexOf(h)!==-1&&(p=c2):["accuracy","acc"].indexOf(h)!==-1?p=TI:["crossentropy","ce"].indexOf(h)!==-1&&(p=NI);let m;["accuracy","acc"].indexOf(h)!==-1?m="acc":["crossentropy","ce"].indexOf(h)!==-1&&(m="ce"),d=p,l=c+m}else d=XH(h),l=c+Lh(h);let f;oo(l,()=>{f=d}),s(a,l,f)}})(o)}}),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 r=n.batchSize==null?32:n.batchSize;wv(r);let a=this.standardizeUserDataXY(e,t,!0,r);try{let o=a[0].concat(a[1]);this.makeTestFunction();let i=this.testFunction,u=this.testLoop(i,o,r,n.verbose,n.steps);return Rn(u)}finally{Lr(a[0],e),Lr(a[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),d6(this,e,t)}checkNumSamples(e,t,n,r="steps"){let s;if(n!=null){if(s=null,t!=null)throw new V(`If ${r} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?s=e[0].shape[0]:s=e.shape[0];else throw new V(`Either the input data should have a defined shape, or ${r} shoud be specified.`);return s}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new V("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],s=this.retrieveSymbolicTensors(r),a=new zu;if(e instanceof Ne&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new V(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let i=0;io.name);for(let o=0;o0){let r=[];throw t.forEach((s,a)=>{s==null&&r.push(e[a])}),new V(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(r)}`)}return t}predictLoop(e,t=32,n=!1){return O(()=>{let r=this.checkNumSamples(e);if(n)throw new Be("Verbose predictLoop() is not implemented yet.");let s=Iv(r,t),a=this.outputs.map(o=>[]);for(let o=0;o{let u=s[o][0],c=s[o][1],l=td(e,u,c),p=[];if(Array.isArray(l))for(let h=0;ha[c].push(u));return Rn(a.map(o=>tt(o,0)))})}predict(e,t={}){let n=f2(e);QS(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return wv(r),this.predictLoop(n,r)}finally{Lr(n,e)}}predictOnBatch(e){QS(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,r){if(this.optimizer_==null)throw new os("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let s=[];for(let a=0;a0&&e[0].shape[0]%r!==0)throw new V(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${r}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,r,s=!0,a){let[o,i]=this.standardizeUserDataXY(e,t,s,a);if(n!=null)throw new Error("sample weight is not supported yet.");let u=null;if(r!=null){let c=d2(r,this.outputNames);u=[];for(let l=0;l{let a=this.checkNumSamples(t,n,s,"steps"),o=[];if(r>0)throw new Be("Verbose mode is not implemented yet.");if(s!=null)throw new Be("steps mode in testLoop() is not implemented yet");{let i=Iv(a,n),u=He(Gr(0,a));for(let c=0;c1){let a=MS(e.slice(0,n),r);s+=`_${a}`}t.push(s)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),a=[],o=()=>{let l=[];for(let f=0;f1&&f{h=X(h,f)}),h},i=this.collectedTrainableWeights.map(l=>l.read());return[this.optimizer_.minimize(o,!0,i)].concat(a)}}makeTestFunction(){this.testFunction=e=>O(()=>{let t=[],n,r=e.slice(0,this.inputs.length),s=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),a=[];for(let u=0;u0){if(g=!0,n.validationData.length===2)i=n.validationData[0],u=n.validationData[1];else throw n.validationData.length===3?new Be("validationData including sample weights is not supported yet."):new V(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${n.validationData} is invalid.`);let $=await this.standardizeUserData(i,u,null,null,!0,d);c=$[0],l=$[1],m=c.concat(l)}else if(n.validationSplit!=null&&n.validationSplit>0&&n.validationSplit<1){g=!0;let E=Math.floor(r[0].shape[0]*(1-n.validationSplit)),$=r[0].shape[0];c=td(r,E,$),a=r,r=td(r,0,E),l=td(s,E,$),o=s,s=td(s,0,E),m=c.concat(l)}else n.validationSteps!=null&&(g=!0);let b=r.concat(s).concat(p);this.checkTrainableWeightsConsistency();let y=this.makeTrainFunction(),v=this.getDedupedMetricsNames(),x,k;g?(this.makeTestFunction(),x=this.testFunction,k=v.slice().concat(v.map(E=>"val_"+E))):(x=null,m=[],k=v.slice());let S=r2(n.callbacks,n.yieldEvery);return await this.fitLoop(y,b,v,d,n.epochs,n.verbose,S,x,m,n.shuffle,k,n.initialEpoch,null,null)}finally{this.isTraining=!1,Lr(r,e),Lr(s,t),Lr(a,e),Lr(o,t),Lr(c,i),Lr(l,u),p!=null&&_e(p)}}async fitLoop(e,t,n,r,s,a,o,i,u,c,l,p,d,h){r==null&&(r=32),s==null&&(s=1),c==null&&(c=!0),p==null&&(p=0);let f=!1;if(i!=null&&u!=null&&(f=!0),h!=null&&(f=!0,d==null))throw new V("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=this.checkNumSamples(t,r,d,"steps_per_epoch"),m;g!=null&&(m=Gr(0,g)),a==null&&(a=1);let{callbackList:b,history:y}=s2(o,a,s,p,g,d,r,f,l);b.setModel(this),this.history=y,await b.onTrainBegin(),this.stopTraining_=!1;for(let v=p;v{let $=S[N][0],F=S[N][1],D=io(k,$,F-$);E.batch=N,E.size=F-$;let R=Qv(t,D),C=e(R);for(let L=0;LSs(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let r of t)if(typeof n[r]=="string")e[r]=Ss(n[r]);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[Ss(Lh(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Ss(Lh(e)));{let e={};for(let t in this.metrics)e[t]=Ss(Lh(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=Ed(e.optimizer_config),n=Vr(t),r;if(typeof e.loss=="string")r=eo(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(a=>eo(a));else if(e.loss!=null){r={};for(let a in e.loss)r[a]=eo(e.loss[a])}let s;if(Array.isArray(e.metrics))s=e.metrics.map(a=>eo(a));else if(e.metrics!=null){s={};for(let a in e.metrics)s[a]=eo(e.metrics[a])}this.compile({loss:r,metrics:s,optimizer:n})}async save(e,t){if(typeof e=="string"){let u=jt.getSaveHandlers(e);if(u.length===0)throw new V(`Cannot find any save handlers for URL '${e}'`);if(u.length>1)throw new V(`Found more than one (${u.length}) save handlers for URL '${e}'`);e=u[0]}if(e.save==null)throw new V("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await jt.encodeWeights(this.getNamedWeights(t)),o={modelTopology:this.toJSON(null,!1),format:g6,generatedBy:`TensorFlow.js tfjs-layers v${_I}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){o.trainingConfig=this.getTrainingConfig();let u="optimizer",{data:c,specs:l}=await jt.encodeWeights(await this.optimizer.getWeights(),u);n.specs.push(...l),n.data=jt.concatenateArrayBuffers([n.data,c])}return this.userDefinedMetadata!=null&&(KS(this.userDefinedMetadata,this.name,!0),o.userDefinedMetadata=this.userDefinedMetadata),o.weightData=n.data,o.weightSpecs=n.specs,e.save(o)}setUserDefinedMetadata(e){KS(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Es.className="Model";re.registerClass(Es);var m2=class extends Es{};m2.className="Functional";re.registerClass(m2);async function b6(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=Ed(n),s=Vr(r,t);if(e.weightsManifest!=null){let a=await jt.loadWeights(e.weightsManifest,e.pathPrefix,s.weights.map(i=>i.originalName)),o={};for(let i of s.weights)o[i.originalName]=a[i.originalName];s.loadWeights(o),_e(a)}return s}async function y6(e,t){if(t==null&&(t={}),typeof e=="string"){let n=jt.getLoadHandlers(e,t);if(n.length===0)n.push(jt.browserHTTPRequest(e,t));else if(n.length>1)throw new V(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return v6(e,void 0,t)}async function v6(e,t,n){if(n==null&&(n={}),e.load==null)throw new V("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let r=await e.load(),s=r.modelTopology;s.model_config!=null&&(s=s.model_config);let a=n.strict==null?!0:n.strict,o=r.weightData!=null&&r.weightSpecs!=null&&a,i=Vr(Ed(s),t,o),u=r.trainingConfig;if(u!=null&&i.loadTrainingConfig(u),r.userDefinedMetadata!=null&&i.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new V("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:c,optimizerWeights:l}=x6(r.weightData,r.weightSpecs);i.loadWeights(c,a),i.optimizer!=null&&l.length>0&&await i.optimizer.setWeights(l),_e(c),_e(l.map(p=>p.tensor))}return i}function x6(e,t){let n=jt.decodeWeights(e,t),r={},s=[];return t.forEach(a=>{a.group==="optimizer"?s.push({name:a.name,tensor:n[a.name]}):r[a.name]=n[a.name]}),{modelWeights:r,optimizerWeights:s}}var Vm=class tx extends Es{constructor(t){if(super({inputs:[],outputs:[]}),t=t||{},this.trainable=!0,this.built=!1,this.name=t.name!=null?t.name:Am("sequential_"),t.layers!=null)for(let n of t.layers)this.add(n)}checkShape(t){if(t.inboundNodes[0].outputTensors[0].shape.some(r=>r<0))throw new V(`Negative dimension size caused by adding layer ${t.name} with input shape [${t.inboundNodes[0].inputTensors[0].shape}]`)}add(t){let n=t instanceof tx||t instanceof Es,r;if(n){if(r=t,r.outputs.length!==1)throw new V("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(r.inputs.length!==1)throw new V("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(t.inboundNodes.length===0){if(t.batchInputShape==null)throw new V("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let s=KN({batchShape:t.batchInputShape,dtype:t.dtype,name:t.name+"_input"});t.apply(s)}if(n)this.outputs=r.outputs,this.inputs=r.inputs;else{if(t.inboundNodes.length!==1)throw new V(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${t.name} which has ${t.inboundNodes.length} pre-existing inbound connections.`);if(t.inboundNodes[0].outputTensors.length!==1)throw new V("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[t.inboundNodes[0].outputTensors[0]],this.inputs=qN(this.outputs[0])}this.inboundNodes=[],new Bm({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:wo(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(s=>s.shape),outputShapes:this.outputs[0].shape})}else{let s=t.apply(this.outputs[0]);if(Array.isArray(s))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(t),this.outputs=[s],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(t),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 t=this.layers.length-1;this.layers[t].outboundNodes=[],this.outputs=[this.layers[t].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(t,n){return this.model==null&&this.build(),this.model.call(t,n)}build(t){if(Qe(t),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 Es({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(t,n,r=console.log){this.built||this.build(),super.summary(t,n,r)}setWeights(t){this.model==null&&this.build(),this.model.setWeights(t)}evaluate(t,n,r={}){if(!this.built)throw new os("The model needs to be compiled before being used.");return this.model.evaluate(t,n,r)}async evaluateDataset(t,n){if(!this.built)throw new os("The model needs to be compiled before being used.");return this.model.evaluateDataset(t,n)}predict(t,n={}){return this.model==null&&this.build(),this.model.predict(t,n)}predictOnBatch(t){return this.model==null&&this.build(),this.model.predictOnBatch(t)}compile(t){this.build(),this.model.compile(t),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(t){this.model.optimizer=t}async fit(t,n,r={}){if(!this.built)throw new os("The model needs to be compiled before being used.");return this.model.fit(t,n,r)}async fitDataset(t,n){if(!this.built)throw new os("The model needs to be compiled before being used.");return this.model.fitDataset(t,n)}async trainOnBatch(t,n){return this.model.trainOnBatch(t,n)}static fromConfig(t,n,r={},s=!1){let a,o={};if(n instanceof Array){if(n[0].className==null||n[0].className==="Merge")throw new V("Legacy serialization format not supported yet.");a=n}else w.assert(n.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),a=n.layers,delete n.layers,o=n;let i=new t(o);if(!(i instanceof tx))throw new Be(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let u of a){let l=Vr(u,void 0,s);s&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(t){if(this.model==null)throw new V("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=t}get stopTraining(){if(this.model==null)throw new V("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let t=[];for(let n of this.layers){let r={};r.className=n.getClassName(),r.config=n.getConfig(),t.push(r)}return{name:this.name,layers:t}}};Vm.className="Sequential";re.registerClass(Vm);function w6(e){return new Es(e)}function I6(e){return new Vm(e)}function g2(e){return KN(e)}function k6(e,t){kI.registerCallbackConstructor(e,t)}var Vn=class extends re.Serializable{getConfig(){return{}}},b2=class extends Vn{apply(e,t=1){return UG(e,t)}};b2.className="elu";re.registerClass(b2);var y2=class extends Vn{apply(e){return fm(e)}};y2.className="selu";re.registerClass(y2);var v2=class extends Vn{apply(e){return Ke(e)}};v2.className="relu";re.registerClass(v2);var x2=class extends Vn{apply(e){return O(()=>ga(6,Ke(e)))}};x2.className="relu6";re.registerClass(x2);var w2=class extends Vn{apply(e){return e}};w2.className="linear";re.registerClass(w2);var I2=class extends Vn{apply(e){return pr(e)}};I2.className="sigmoid";re.registerClass(I2);var k2=class extends Vn{apply(e){return HG(e)}};k2.className="hardSigmoid";re.registerClass(k2);var S2=class extends Vn{apply(e){return qi(e)}};S2.className="softplus";re.registerClass(S2);var C2=class extends Vn{apply(e){return GG(e)}};C2.className="softsign";re.registerClass(C2);var T2=class extends Vn{apply(e){return bo(e)}};T2.className="tanh";re.registerClass(T2);var EI=class extends Vn{apply(e,t=-1){return Kr(e,t)}};EI.className="softmax";re.registerClass(EI);var N2=class extends Vn{apply(e,t=-1){return im(e,t)}};N2.className="logSoftmax";re.registerClass(N2);var _2=class extends Vn{apply(e,t=1){return O(()=>z(pr(z(e,t)),e))}};_2.className="swish";re.registerClass(_2);var E2=class extends Vn{apply(e){return O(()=>z(e,bo(qi(e))))}};E2.className="mish";re.registerClass(E2);function ya(e){return e.getClassName()}function kv(e,t={}){return Tp(e,re.SerializationMap.getMap().classNameMap,t,"activation")}function va(e){if(e==null){let t={};return t.className="linear",t.config={},kv(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},kv(t)}else return e instanceof Vn?e:kv(e)}function AI(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 A2=class extends re.Serializable{},Dp=class extends A2{constructor(e){super(),AI(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=kt([1]);return this.hasL1&&(t=X(t,ge(z(this.l1,Lt(e))))),this.hasL2&&(t=X(t,ge(z(this.l2,_p(e))))),W(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Dp.className="L1L2";re.registerClass(Dp);function S6(e){return AI(e),new Dp({l1:e!=null?e.l1:null,l2:0})}function C6(e){return AI(e),new Dp({l2:e!=null?e.l2:null,l1:0})}var e1={l1l2:"L1L2"};function mt(e){return iI(e)}function t1(e,t={}){return Tp(e,re.SerializationMap.getMap().classNameMap,t,"regularizer")}function Ct(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in e1?e1[e]:e,config:{}};return t1(n)}else return e instanceof A2?e:t1(e)}var DI=class extends ze{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Te(e);let n=Ke(e);return this.maxValue!=null&&(n=rn(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};DI.className="ReLU";re.registerClass(DI);var $I=class extends ze{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=Te(e);return mp(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};$I.className="LeakyReLU";re.registerClass($I);var FI=class extends ze{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=St(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=Ct(e.alphaRegularizer),this.alphaConstraint=Yt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new V(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=Qe(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let r of this.sharedAxes)t[r-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let r=1;r{let n=Te(e),r=t.mask;if(r!=null){let s=z(le(On(n.shape),ae(r,n.dtype)),xe(-1e9));n=X(n,s)}return this.axis instanceof Array?this.axis.length>1?fn(le(n,bp(n,this.axis,!0))):this.softmax(n,this.axis[0]):this.softmax(n,this.axis)})}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};OI.className="Softmax";re.registerClass(OI);function Gu(e,t,n){if(typeof e=="number")return wo(e,t);if(e.length!==t)throw new V(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r(Pt(t),t==="channelsFirst"?Re(e,[0,2,3,1]):e))}function D2(e,t){return O(()=>(Pt(t),t==="channelsFirst"?Re(e,[0,2,3,4,1]):e))}function T6(e,t,n,r=1,s="valid",a,o=1){return O(()=>{if(a==null&&(a=Hr()),Pt(a),e.shape.length!==3)throw new V(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new V(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new V(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(a==="channelsFirst"&&(e=Re(e,[0,2,1])),s==="causal")throw new Be("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let i=tm(e,t,r,s==="same"?"same":"valid","NWC",o);return n!=null&&(i=Xr(i,n)),i})}function n1(e,t,n,r=[1,1],s="valid",a,o,i=null){return O(()=>{if(a==null&&(a=Hr()),Pt(a),e.rank!==3&&e.rank!==4)throw new V(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new V(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let u=MI(e,a);if(s==="causal")throw new Be("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return u=tc.conv2d({x:u,filter:t,strides:r,pad:s==="same"?"same":"valid",dilations:o,dataFormat:"NHWC",bias:n,activation:i}),a==="channelsFirst"&&(u=Re(u,[0,3,1,2])),u})}function N6(e,t,n,r=[1,1,1],s="valid",a,o){return O(()=>{if(a==null&&(a=Hr()),Pt(a),e.rank!==4&&e.rank!==5)throw new V(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new V(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let i=D2(e,a);if(s==="causal")throw new Be("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return i=lw(i,t,r,s==="same"?"same":"valid","NDHWC",o),n!=null&&(i=Xr(i,n)),a==="channelsFirst"&&(i=Re(i,[0,4,1,2,3])),i})}var $2=class F2 extends ze{constructor(t,n){if(super(n),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",F2.verifyArgs(n),this.rank=t,tn(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Be(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=Gu(n.kernelSize,t,"kernelSize"),this.strides=Gu(n.strides==null?1:n.strides,t,"strides"),this.padding=n.padding==null?"valid":n.padding,vr(this.padding),this.dataFormat=n.dataFormat==null?"channelsLast":n.dataFormat,Pt(this.dataFormat),this.activation=va(n.activation),this.useBias=n.useBias==null?!0:n.useBias,this.biasInitializer=St(n.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Yt(n.biasConstraint),this.biasRegularizer=Ct(n.biasRegularizer),this.activityRegularizer=Ct(n.activityRegularizer),this.dilationRate=Gu(n.dilationRate==null?1:n.dilationRate,t,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new V(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new V(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new V(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(t){if(ss("kernelSize"in t,"required key 'kernelSize' not in config"),typeof t.kernelSize!="number"&&!uI(t.kernelSize,"number",1,3))throw new V(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(t.kernelSize)}.`)}getConfig(){let t={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:ya(this.activation),useBias:this.useBias,biasInitializer:Et(this.biasInitializer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),biasConstraint:Xt(this.biasConstraint)},n=super.getConfig();return Object.assign(t,n),t}},Um=class R2 extends $2{constructor(t,n){super(t,n),this.kernel=null,R2.verifyArgs(n),this.filters=n.filters,tn(this.filters,"filters"),this.kernelInitializer=St(n.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Yt(n.kernelConstraint),this.kernelRegularizer=Ct(n.kernelRegularizer)}build(t){t=Qe(t);let n=this.dataFormat==="channelsFirst"?1:t.length-1;if(t[n]==null)throw new V(`The channel dimension of the input should be defined. Found ${t[n]}`);let r=t[n],s=this.kernelSize.concat([r,this.filters]);this.kernel=this.addWeight("kernel",s,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:{[n]:r}}],this.built=!0}call(t,n){return O(()=>{t=Te(t);let r,s=this.bias==null?null:this.bias.read(),a=LN(this.activation.getClassName());if(a!=null&&this.rank===2)r=n1(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate,a);else{if(this.rank===1)r=T6(t,this.kernel.read(),s,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)r=n1(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)r=N6(t,this.kernel.read(),s,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Be("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(r=this.activation.apply(r))}return r})}computeOutputShape(t){t=Qe(t);let n=[],r=this.dataFormat==="channelsLast"?t.slice(1,t.length-1):t.slice(2);for(let a=0;a 0 but got ${JSON.stringify(t.filters)}`)}},Gm=class P2 extends Um{constructor(t){super(2,t),P2.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!uI(t.kernelSize,"number",1,2))throw new V(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(t.kernelSize)}.`)}};Gm.className="Conv2D";re.registerClass(Gm);var Hm=class O2 extends Um{constructor(t){super(3,t),O2.verifyArgs(t)}getConfig(){let t=super.getConfig();return delete t.rank,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!(Array.isArray(t.kernelSize)&&(t.kernelSize.length===1||t.kernelSize.length===3)))throw new V(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(t.kernelSize)}.`)}};Hm.className="Conv3D";re.registerClass(Hm);var LI=class extends Gm{constructor(e){if(super(e),this.inputSpec=[new Bt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new V(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=Qe(e),e.length!==4)throw new V("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Bt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=Te(e);if(n.shape.length!==4)throw new V(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,s=r[0],a,o;this.dataFormat==="channelsFirst"?(a=2,o=3):(a=1,o=2);let i=r[a],u=r[o],c=this.kernelSize[0],l=this.kernelSize[1],p=this.strides[0],d=this.strides[1],h=as(i,p,c,this.padding),f=as(u,d,l,this.padding),g=[s,h,f,this.filters];this.dataFormat!=="channelsLast"&&(n=Re(n,[0,2,3,1]));let m=nm(n,this.kernel.read(),g,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(m=Re(m,[0,3,1,2])),this.bias!=null&&(m=Xr(m,this.bias.read(),this.dataFormat)),this.activation!=null&&(m=this.activation.apply(m)),m})}computeOutputShape(e){e=Qe(e);let t=e.slice(),n,r,s;this.dataFormat==="channelsFirst"?(n=1,r=2,s=3):(n=3,r=1,s=2);let a=this.kernelSize[0],o=this.kernelSize[1],i=this.strides[0],u=this.strides[1];return t[n]=this.filters,t[r]=as(t[r],i,a,this.padding),t[s]=as(t[s],u,o,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};LI.className="Conv2DTranspose";re.registerClass(LI);var BI=class extends Hm{constructor(e){if(super(e),this.inputSpec=[new Bt({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new V(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=Qe(e),e.length!==5)throw new V("Input should have rank 5; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new V("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],r=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",r,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Bt({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=Te(e);if(n.shape.length!==5)throw new V(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let r=n.shape,s=r[0],a,o,i;this.dataFormat==="channelsFirst"?(i=2,a=3,o=4):(i=1,a=2,o=3);let u=r[i],c=r[a],l=r[o],p=this.kernelSize[0],d=this.kernelSize[1],h=this.kernelSize[2],f=this.strides[0],g=this.strides[1],m=this.strides[2],b=as(u,f,p,this.padding),y=as(c,g,d,this.padding),v=as(l,m,h,this.padding),x=[s,b,y,v,this.filters];this.dataFormat!=="channelsLast"&&(n=Re(n,[0,2,3,4,1]));let k=dw(n,this.kernel.read(),x,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(k=Re(k,[0,4,1,2,3])),this.bias!==null&&(k=Xr(k,this.bias.read(),this.dataFormat)),this.activation!==null&&(k=this.activation.apply(k)),k})}computeOutputShape(e){e=Qe(e);let t=e.slice(),n,r,s,a;this.dataFormat==="channelsFirst"?(n=1,r=2,s=3,a=4):(n=4,r=1,s=2,a=3);let o=this.kernelSize[0],i=this.kernelSize[1],u=this.kernelSize[2],c=this.strides[0],l=this.strides[1],p=this.strides[2];return t[n]=this.filters,t[r]=as(t[r],c,o,this.padding),t[s]=as(t[s],l,i,this.padding),t[a]=as(t[a],p,u,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};BI.className="Conv3DTranspose";re.registerClass(BI);var M2=class extends Um{constructor(e,t){if(super(e,t),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new V("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new V("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new V(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=Ct(t.depthwiseRegularizer),this.depthwiseConstraint=Yt(t.depthwiseConstraint),this.pointwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=Ct(t.pointwiseRegularizer),this.pointwiseConstraint=Yt(t.pointwiseConstraint)}build(e){if(e=Qe(e),e.length{e=Te(e);let n;if(this.rank===1)throw new Be("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Re(e,[0,2,3,1])),n=Fa(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Xr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Re(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=mt(this.depthwiseRegularizer),e.pointwiseRegularizer=mt(this.pointwiseRegularizer),e.depthwiseConstraint=Xt(this.depthwiseConstraint),e.pointwiseConstraint=Xt(this.pointwiseConstraint),e}};M2.className="SeparableConv";var zI=class extends M2{constructor(e){super(2,e)}};zI.className="SeparableConv2D";re.registerClass(zI);var WI=class L2 extends Um{constructor(t){super(1,t),L2.verifyArgs(t),this.inputSpec=[{ndim:3}]}getConfig(){let t=super.getConfig();return delete t.rank,delete t.dataFormat,t}static verifyArgs(t){if(typeof t.kernelSize!="number"&&!uI(t.kernelSize,"number",1,1))throw new V(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(t.kernelSize)}.`)}};WI.className="Conv1D";re.registerClass(WI);var VI=class extends ze{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=Te(e),this.dataFormat==="channelsLast"){let n=Mh(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return Mh(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=Mh(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return Mh(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}};VI.className="Cropping2D";re.registerClass(VI);var UI=class extends ze{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,OG(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=Te(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=Re(n,[0,2,3,1]);let s=this.size[0]*r[2],a=this.size[1]*r[3],o=this.interpolation==="nearest"?er.resizeNearestNeighbor(n,[s,a]):er.resizeBilinear(n,[s,a]);return Re(o,[0,3,1,2])}else{let s=this.size[0]*r[1],a=this.size[1]*r[2];return this.interpolation==="nearest"?er.resizeNearestNeighbor(n,[s,a]):er.resizeBilinear(n,[s,a])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat,interpolation:this.interpolation},t=super.getConfig();return Object.assign(e,t),e}};UI.className="UpSampling2D";re.registerClass(UI);function _6(e,t,n=[1,1],r="valid",s,a){return O(()=>{s==null&&(s=Hr()),Pt(s);let o=MI(e,s);if(e.rank!==4)throw new V(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new V(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return o=Aa(o,t,n,r==="same"?"same":"valid","NHWC",a),s==="channelsFirst"&&(o=Re(o,[0,3,1,2])),o})}var GI=class extends $2{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=St(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Yt(e.depthwiseConstraint),this.depthwiseRegularizer=Ct(e.depthwiseRegularizer)}build(e){if(e=Qe(e),e.length<4)throw new V(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new V(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],r=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",r,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return O(()=>{e=Te(e);let n=_6(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Xr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=Qe(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,s=Ur(t,this.kernelSize[0],this.padding,this.strides[0]),a=Ur(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],r,s,a]:[e[0],s,a,r]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=Et(this.depthwiseInitializer),e.depthwiseRegularizer=mt(this.depthwiseRegularizer),e.depthwiseConstraint=Xt(this.depthwiseRegularizer),e}};GI.className="DepthwiseConv2D";re.registerClass(GI);function B2(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new V("When inputs is an array, neither initialState or constants should be provided");r!=null&&(n=e.slice(e.length-r,e.length),e=e.slice(0,e.length-r)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function s(a){return a==null||Array.isArray(a)?a:[a]}return t=s(t),n=s(n),{inputs:e,initialState:t,constants:n}}function z2(e,t,n,r=!1,s,a,o=!1,i=!1){return O(()=>{let u=t.shape.length;if(u<3)throw new V(`Input should be at least 3D, but is ${u}D.`);let c=[1,0].concat(Gr(2,u));if(t=Re(t,c),a!=null)throw new Be("The rnn() functoin of the deeplearn.js backend does not support constants yet.");o&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),s!=null&&(s=ae(ae(s,"bool"),"float32"),s.rank===u-1&&(s=Gt(s,-1)),s=Re(s,c)),r&&(t=gr(t,0),s!=null&&(s=gr(s,0)));let l=[],p,d=n,h=t.shape[0],f=pt(t),g;s!=null&&(g=pt(s));for(let b=0;be(y,d));if(s==null)p=v[0],d=v[1];else{let x=O(()=>{let k=g[b],S=le(rr(k),k),N=X(z(v[0],k),z(d[0],S)),E=d.map(($,F)=>X(z(v[1][F],k),z($,S)));return{output:N,newStates:E}});p=x.output,d=x.newStates}i&&l.push(p)}let m;return i&&(m=Dt(l,1)),[p,m,d]})}var Ms=class W2 extends ze{constructor(t){super(t);let n;if(t.cell==null)throw new V("cell property is missing for the constructor of RNN.");if(Array.isArray(t.cell)?n=new Km({cells:t.cell}):n=t.cell,n.stateSize==null)throw new V("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=n,this.returnSequences=t.returnSequences==null?!1:t.returnSequences,this.returnState=t.returnState==null?!1:t.returnState,this.goBackwards=t.goBackwards==null?!1:t.goBackwards,this._stateful=t.stateful==null?!1:t.stateful,this.unroll=t.unroll==null?!1:t.unroll,this.supportsMasking=!0,this.inputSpec=[new Bt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return Gr(0,t).map(n=>null)}else return this.states_}setStates(t){this.states_=t}computeOutputShape(t){Xv(t)&&(t=t[0]),t=t;let n=this.cell.stateSize;Array.isArray(n)||(n=[n]);let r=n[0],s;if(this.returnSequences?s=[t[0],t[1],r]:s=[t[0],r],this.returnState){let a=[];for(let o of n)a.push([t[0],o]);return[s].concat(a)}else return s}computeMask(t,n){return O(()=>{Array.isArray(n)&&(n=n[0]);let r=this.returnSequences?n:null;if(this.returnState){let s=this.states.map(a=>null);return[r].concat(s)}else return r})}get states(){if(this.states_==null){let t=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,n=[];for(let r=0;ri.shape[i.shape.length-1]),o))throw new V(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=o.map(i=>new Bt({shape:[null,i]}));this.stateful&&this.resetStates()}resetStates(t,n=!1){O(()=>{if(!this.stateful)throw new ea("Cannot call resetStates() on an RNN Layer that is not stateful.");let r=this.inputSpec[0].shape[0];if(r==null)throw new V("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(s=>kt([r,s])):this.states_=[kt([r,this.cell.stateSize])];else if(t==null)_e(this.states_),this.keptStates!=null&&(_e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(s=>kt([r,s])):this.states_[0]=kt([r,this.cell.stateSize]);else{if(Array.isArray(t)||(t=[t]),t.length!==this.states_.length)throw new V(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${t.length} state value(s). Input received: ${t}`);n===!0?this.keptStates.push(this.states_.slice()):_e(this.states_);for(let s=0;sHt(s.clone()))})}apply(t,n){let r=n==null?null:n.initialState,s=n==null?null:n.constants;n==null&&(n={});let a=B2(t,r,s,this.numConstants);t=a.inputs,r=a.initialState,s=a.constants;let o=[],i=[];if(r!=null){n.initialState=r,o=o.concat(r),this.stateSpec=[];for(let c of r)this.stateSpec.push(new Bt({shape:c.shape}));i=i.concat(this.stateSpec)}if(s!=null&&(n.constants=s,o=o.concat(s),this.numConstants=s.length),o[0]instanceof jr){let c=[t].concat(o),l=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=l;let d=super.apply(c,n);return this.inputSpec=p,d}else return super.apply(t,n)}call(t,n){return O(()=>{let r=n==null?null:n.mask,s=n==null?null:n.training,a=n==null?null:n.initialState;t=Te(t),a==null&&(this.stateful?a=this.states_:a=this.getInitialState(t));let o=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(a.length!==o)throw new V(`RNN Layer has ${o} state(s) but was passed ${a.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:s},c=z2((f,g)=>{let m=this.cell.call([f].concat(g),i);return[m[0],m.slice(1)]},t,a,this.goBackwards,r,null,this.unroll,this.returnSequences),l=c[0],p=c[1],d=c[2];this.stateful&&this.resetStates(d,s);let h=this.returnSequences?p:l;return this.returnState?[h].concat(d):h})}getInitialState(t){return O(()=>{let n=kt(t.shape);return n=ge(n,[1,2]),n=Np(n),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(r=>r>1?qv(n,[1,r]):n):this.cell.stateSize>1?[qv(n,[1,this.cell.stateSize])]:[n]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(t){super.setFastWeightInitDuringBuild(t),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(t)}getConfig(){let t=super.getConfig(),n={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(n.numConstants=this.numConstants);let r=this.cell.getConfig();return this.getClassName()===W2.className&&(n.cell={className:this.cell.getClassName(),config:r}),Object.assign(Object.assign(Object.assign({},r),t),n)}static fromConfig(t,n,r={}){let s=n.cell,a=Vr(s,r);return new t(Object.assign(n,{cell:a}))}};Ms.className="RNN";re.registerClass(Ms);var $p=class extends ze{},jm=class extends $p{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,tn(this.units,"units"),this.activation=va(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Ct(e.kernelRegularizer),this.recurrentRegularizer=Ct(e.recurrentRegularizer),this.biasRegularizer=Ct(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=nc([1,ba([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=nc([1,ba([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=Qe(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 V(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0rr(e),rate:this.dropout,training:r,dropoutFunc:this.dropoutFunc})),0rr(n),rate:this.recurrentDropout,training:r,dropoutFunc:this.dropoutFunc}));let s,a=this.dropoutMask,o=this.recurrentDropoutMask;a!=null?s=ls(z(e,a),this.kernel.read()):s=ls(e,this.kernel.read()),this.bias!=null&&(s=Xr(s,this.bias.read())),o!=null&&(n=z(n,o));let i=X(s,ls(n,this.recurrentKernel.read()));return this.activation!=null&&(i=this.activation.apply(i)),[i,i]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:ya(this.activation),useBias:this.useBias,kernelInitializer:Et(this.kernelInitializer),recurrentInitializer:Et(this.recurrentInitializer),biasInitializer:Et(this.biasInitializer),kernelRegularizer:mt(this.kernelRegularizer),recurrentRegularizer:mt(this.recurrentRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),recurrentConstraint:Xt(this.recurrentConstraint),biasConstraint:Xt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign(Object.assign({},e),t)}};jm.className="SimpleRNNCell";re.registerClass(jm);var HI=class extends Ms{constructor(e){e.cell=new jm(e),super(e)}call(e,t){return O(()=>{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return new e(t)}};HI.className="SimpleRNN";re.registerClass(HI);var qm=class extends $p{constructor(e){if(super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new V("GRUCell does not support reset_after parameter set to true.");this.units=e.units,tn(this.units,"units"),this.activation=va(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=va(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Ct(e.kernelRegularizer),this.recurrentRegularizer=Ct(e.recurrentRegularizer),this.biasRegularizer=Ct(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=nc([1,ba([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=nc([1,ba([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=Qe(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 V(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,r=e[1];e=e[0],0rr(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0rr(r),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,a=this.recurrentDropoutMask,o,i,u;0{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};jI.className="GRU";re.registerClass(jI);var Fp=class extends $p{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,tn(this.units,"units"),this.activation=va(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=va(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=Ct(e.kernelRegularizer),this.recurrentRegularizer=Ct(e.recurrentRegularizer),this.biasRegularizer=Ct(e.biasRegularizer),this.kernelConstraint=Yt(e.kernelConstraint),this.recurrentConstraint=Yt(e.recurrentConstraint),this.biasConstraint=Yt(e.biasConstraint),this.dropout=nc([1,ba([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=nc([1,ba([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=Qe(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 r;if(this.useBias){if(this.unitForgetBias){let s=this.biasInitializer,a=this.units;r=new(t=class extends Pr{apply(i,u){let c=s.apply([a]),l=new $m().apply([a]),p=s.apply([a*2]);return BS(BS(c,l),p)}},t.className="CustomInit",t)}else r=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,r,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 V(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],s=e[2];e=e[0],0rr(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0rr(r),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let a=this.dropoutMask,o=this.recurrentDropoutMask,i,u,c,l;0{this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};qI.className="LSTM";re.registerClass(qI);var Km=class extends $p{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),r=[];for(let o of this.cells.slice().reverse())Array.isArray(o.stateSize)?r.push(n.splice(0,o.stateSize.length)):r.push(n.splice(0,1));r.reverse();let s=[],a;for(let o=0;o{oo(`RNNCell_${r}`,()=>{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=s=>({className:s.getClassName(),config:s.getConfig()}),r={cells:this.cells.map(t)};return Object.assign(Object.assign({},e),r)}static fromConfig(e,t,n={}){let r=[];for(let s of t.cells)r.push(Vr(s,n));return new e({cells:r})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let 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 Yv(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,s=e.splice(r);for(let a=0;aa!=null?a(t(),n):HN(t(),n),i=()=>Ep(o,t,r);return!s||s<=1?Ht(i().clone()):Array(s).fill(void 0).map(i).map(c=>Ht(c.clone()))}var E6=function(e,t){var n={};for(var r in e)Object.prototype.hasOwnProperty.call(e,r)&&t.indexOf(r)<0&&(n[r]=e[r]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var s=0,r=Object.getOwnPropertySymbols(e);s{if(this.cell.dropoutMask!=null&&(_e(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(_e(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new V("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;return super.call(e,{mask:n,training:r,initialState:s})})}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,r=this.computeSingleOutputShape(n),s=[r[0],...r.slice(2)],a=kt(s);return Array.isArray(t)?Array(t.length).fill(a):[a]})}resetStates(e,t=!1){O(()=>{if(!this.stateful)throw new ea("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,r=this.computeSingleOutputShape(n),s=[r[0],...r.slice(2)];if(n[0]==null)throw new V("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>kt(s)):this.states_=[kt(s)];else if(e==null)_e(this.states_),this.keptStates!=null&&(_e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>kt(s)):this.states_[0]=kt(s);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new V(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):_e(this.states_);for(let o=0;oHt(o.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:s,strides:a,dilationRate:o}=this.cell,i=t==="channelsFirst",u=e[i?3:2],c=e[i?4:3],l=Ur(u,r[0],s,a[0],o[0]),p=Ur(c,r[1],s,a[1],o[1]);return[...e.slice(0,2),...i?[n,l,p]:[l,p,n]]}};V2.className="ConvRNN2D";var Xm=class extends Fp{constructor(e){let{filters:t,kernelSize:n,strides:r,padding:s,dataFormat:a,dilationRate:o}=e;super(Object.assign(Object.assign({},e),{units:t})),this.filters=t,tn(this.filters,"filters"),this.kernelSize=Gu(n,2,"kernelSize"),this.kernelSize.forEach(i=>tn(i,"kernelSize")),this.strides=Gu(r||1,2,"strides"),this.strides.forEach(i=>tn(i,"strides")),this.padding=s||"valid",vr(this.padding),this.dataFormat=a||"channelsLast",Pt(this.dataFormat),this.dilationRate=Gu(o||1,2,"dilationRate"),this.dilationRate.forEach(i=>tn(i,"dilationRate"))}build(e){var t;e=Qe(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new V(`The channel dimension of the input should be defined. Found ${e[n]}`);let r=e[n],s=4,a=this.kernelSize.concat([r,this.filters*s]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let o=this.kernelSize.concat([this.filters,this.filters*s]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",o,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let i;if(this.unitForgetBias){let u=this.biasInitializer,c=this.filters;i=new(t=class extends Pr{apply(p,d){let h=u.apply([c]),f=On([c]),g=u.apply([c*2]);return cI([h,f,g])}},t.className="CustomInit",t)}else i=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*s],null,i,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return O(()=>{if(e.length!==3)throw new V(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,r=e[0],s=e[1],a=e[2],o=4;0rr(r),rate:this.dropout,training:n,count:o,dropoutFunc:this.dropoutFunc}));let i=this.dropoutMask,u=(Z,J,ee)=>!J||!J[ee]?Z:z(J[ee],Z),c=u(r,i,0),l=u(r,i,1),p=u(r,i,2),d=u(r,i,3);0rr(s),rate:this.recurrentDropout,training:n,count:o,dropoutFunc:this.dropoutFunc}));let h=this.recurrentDropoutMask,f=u(s,h,0),g=u(s,h,1),m=u(s,h,2),b=u(s,h,3),y=3,[v,x,k,S]=Mn(this.kernel.read(),o,y),[N,E,$,F]=this.useBias?Mn(this.bias.read(),o):[null,null,null,null];c=this.inputConv(c,v,N,this.padding),l=this.inputConv(l,x,E,this.padding),p=this.inputConv(p,k,$,this.padding),d=this.inputConv(d,S,F,this.padding);let[D,R,C,L]=Mn(this.recurrentKernel.read(),o,y);f=this.recurrentConv(f,D),g=this.recurrentConv(g,R),m=this.recurrentConv(m,C),b=this.recurrentConv(b,L);let U=this.recurrentActivation.apply(X(c,f)),H=this.recurrentActivation.apply(X(l,g)),K=X(z(H,a),z(U,this.activation.apply(X(p,m)))),q=z(this.recurrentActivation.apply(X(d,b)),this.activation.apply(K));return[q,q,K]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=E6(e,["units"]),r={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign(Object.assign({},n),r)}inputConv(e,t,n,r){let s=Ft(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Xr(s,n,this.dataFormat):s}recurrentConv(e,t){return Ft(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Xm.className="ConvLSTM2DCell";re.registerClass(Xm);var KI=class extends V2{constructor(e){let t=new Xm(e);super(Object.assign(Object.assign({},e),{cell:t}))}static fromConfig(e,t){return new e(t)}};KI.className="ConvLSTM2D";re.registerClass(KI);var Ym=class extends ze{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 r=0;r{this.invokeCallHook(e,t);let n=Te(e);if(0HN(n,this.rate,s,this.seed),()=>n,r)}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()}};Ym.className="Dropout";re.registerClass(Ym);var XI=class extends Ym{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};XI.className="SpatialDropout1D";re.registerClass(XI);var YI=class extends ze{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,tn(this.units,"units"),this.activation=va(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Yt(e.kernelConstraint),this.biasConstraint=Yt(e.biasConstraint),this.kernelRegularizer=Ct(e.kernelRegularizer),this.biasRegularizer=Ct(e.biasRegularizer),this.activityRegularizer=Ct(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=Qe(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=Qe(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Te(e),r=LN(this.activation.getClassName()),s;return r!=null?s=ls(n,this.kernel.read(),r,this.bias?this.bias.read():null):(s=ls(n,this.kernel.read()),this.bias!=null&&(s=Xr(s,this.bias.read())),this.activation!=null&&(s=this.activation.apply(s))),s})}getConfig(){let e={units:this.units,activation:ya(this.activation),useBias:this.useBias,kernelInitializer:Et(this.kernelInitializer),biasInitializer:Et(this.biasInitializer),kernelRegularizer:mt(this.kernelRegularizer),biasRegularizer:mt(this.biasRegularizer),activityRegularizer:mt(this.activityRegularizer),kernelConstraint:Xt(this.kernelConstraint),biasConstraint:Xt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};YI.className="Dense";re.registerClass(YI);var ZI=class extends ze{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=Qe(e);for(let t of e.slice(1))if(t==null)throw new V(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],ca(e,1)]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Te(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let s=2;s{this.invokeCallHook(e,t);let n=Te(e);return this.activation.apply(n)})}getConfig(){let e={activation:ya(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};JI.className="Activation";re.registerClass(JI);var QI=class extends ze{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=Te(e),zG(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};QI.className="RepeatVector";re.registerClass(QI);var ek=class extends ze{constructor(e){super(e),this.targetShape=e.targetShape;for(let t=0;t{this.invokeCallHook(e,t);let n=Te(e),r=n.shape,s=r.slice(0,1).concat(this.fixUnknownDimension(r.slice(1),this.targetShape));return W(n,s)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};ek.className="Reshape";re.registerClass(ek);var tk=class extends ze{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=Gr(1,e.dims.length+1);if(!w.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 Bt({ndim:this.dims.length+1})]}computeOutputShape(e){e=Qe(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return Re(Te(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};tk.className="Permute";re.registerClass(tk);var nk=class extends ze{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=Te(e);return Sd(vo(n,this.maskValue),-1)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Te(e),a=Sd(vo(n,this.maskValue),-1,!0);return z(n,ae(a,n.dtype))})}};nk.className="Masking";re.registerClass(nk);var rk=class extends ze{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(it(e.inputLength))}this.inputDim=e.inputDim,tn(this.inputDim,"inputDim"),this.outputDim=e.outputDim,tn(this.outputDim,"outputDim"),this.embeddingsInitializer=St(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=Ct(e.embeddingsRegularizer),this.activityRegularizer=Ct(e.activityRegularizer),this.embeddingsConstraint=Yt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return O(()=>this.maskZero?(e=Te(e),vo(e,je(e))):null)}computeOutputShape(e){if(e=Qe(e),this.inputLength==null)return[...e,this.outputDim];let t=it(this.inputLength);if(t.length!==e.length-1)throw new V(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r{this.invokeCallHook(e,t);let n=Te(e);n.dtype!=="int32"&&(n=cs(n,"int32"));let r=GN(this.embeddings.read(),W(n,[n.size]));return W(r,Qe(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:Et(this.embeddingsInitializer),embeddingsRegularizer:mt(this.embeddingsRegularizer),activityRegularizer:mt(this.activityRegularizer),embeddingsConstraint:Xt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};rk.className="Embedding";re.registerClass(rk);var Qi=class extends ze{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Be}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length1)throw new V(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let s=1;ss.length);e.indexOf(null)===-1&&ua(r).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return O(()=>{if(e=e,this.reshapeRequired){let n=[],r=e.map(s=>s.rank);if(r.indexOf(null)===-1){let s=ba(r);for(let a of e){let o=a.rank;for(let i=0;i1){let c=Gr(1,u).concat([0]);n.push(Re(i,c)),s=!0}else n.push(i)}let a=this.mergeFunction(n),o=a.rank;if(s){if(o==null){let i=a.shape,u=i.length,c=i[u-1],l=[c].concat(i.slice(0,i.length-1));a=W(Re(W(a,[-1,c]),[1,0]),l)}else if(o>1){let i=[o-1].concat(Gr(0,o-1));a=Re(a,i)}}return a}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let r=1;r{if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an Array");if(!Array.isArray(e))throw new V("`inputs` should be an Array");if(t.length!==e.length)throw new V(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(r=>r==null))return null;t=t.map(r=>r==null?r:Gt(r,0));let n=t[0];for(let r=1;r{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 V("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return O(()=>cI(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new V("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),r=this.axis<0?n.length+this.axis:this.axis;for(let s of t.slice(1)){if(n[r]==null||s[r]==null){n[r]=null;break}n[r]+=s[r]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new V("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new V("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new V(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return O(()=>{let n=!0;if(t.forEach(a=>{if(a!=null){n=!1;return}}),n)return null;let r=[];for(let a=0;a3||t.shape.length>3)throw new Be("batchDot is not implemented for tensors of 4D or higher rank yet");if(w.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),w.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 Be("batchDot is not implemented for complex64-type Tensors yet.");let r=e.shape.length,s=t.shape.length;n==null&&(n=[r-1,s-2]);let a=n;return O(()=>{let o;if(r>s){o=r-s;let u=[];for(let c=0;cr){o=s-r;let u=[];for(let c=0;c0){let u;r>s?u=r+s-3:u=r-1;let c=[];for(let l=u;l"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 Be("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new V(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new V(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],r;return Array.isArray(this.axes)?r=this.axes.map((s,a)=>nd(s,e[a].shape.length)):r=[nd(this.axes,t.shape.length),nd(this.axes,n.shape.length)],this.normalize&&(t=bf(t,r[0]),n=bf(n,r[1])),A6(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[nd(this.axes,e.length),nd(this.axes,t.length)],n}computeOutputShape(e){w.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 Be("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);t.splice(r[0],1),n.splice(r[1],1),n.splice(0,1);let s=t.concat(n);return s.length===1&&s.push(1),s}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};lk.className="Dot";re.registerClass(lk);var dk=class extends ze{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=Te(e);return Ep(()=>X(Dm(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};dk.className="GaussianNoise";re.registerClass(dk);var pk=class extends ze{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=Te(e);return this.rate>0&&this.rate<1?Ep(()=>{let s=Math.sqrt(this.rate/(1-this.rate));return z(n,Dm(n.shape,1,s))},()=>n,t.training||!1):n})}};pk.className="GaussianDropout";re.registerClass(pk);var hk=class extends ze{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Te(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 Ep(()=>{let s=Te(e),i=-1.6732632423543772*1.0507009873554805,u=Rs($a(n),this.rate);u=cs(u,"float32");let c=((1-this.rate)*(1+this.rate*i**2))**-.5,l=-c*i*this.rate,p=X(z(s,u),z(X(u,-1),i));return X(z(p,c),l)},()=>Te(e),t.training||!1)}return e})}};hk.className="AlphaDropout";re.registerClass(hk);function Ad(e,t,n,r,s,a=.001){let o;if(e.rank===2)o=ew(e,t,n,r,s,a);else if(e.rank===3)o=tw(e,t,n,r,s,a);else if(e.rank===4)o=nw(e,t,n,r,s,a);else throw new Be(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return o}function D6(e,t,n,r,s=.001){return O(()=>{let a=vp(e,r),o=a.mean,i=a.variance;return[Ad(e,o,i,n,t,s),o,i]})}function $6(e,t,n,r,s=.001){return O(()=>{let a=vp(e,r),o=a.mean,i=a.variance,u=[];for(let f of Gr(0,e.rank))r.indexOf(f)!==-1?u.push(1):u.push(e.shape[f]);let c=W(o,u),l=W(i,u),p=t==null?null:W(t,u),d=n==null?null:W(n,u);return[Ad(e,c,l,d,p,s),o,i]})}function F6(e,t,n,r,s=.001){return w.arraysEqual(r.slice().sort(),Gr(0,e.rank-1))?D6(e,t,n,r,s):$6(e,t,n,r,s)}var fk=class extends ze{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.movingMeanInitializer=St(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=St(e.movingVarianceInitializer||"ones"),this.betaConstraint=Yt(e.betaConstraint),this.gammaConstraint=Yt(e.gammaConstraint),this.betaRegularizer=Ct(e.betaRegularizer),this.gammaRegularizer=Ct(e.gammaRegularizer)}build(e){e=Qe(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new V(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Bt({ndim:e.length,axes:{[t]:n}})];let r=[n];this.scale&&(this.gamma=this.addWeight("gamma",r,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",r,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",r,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",r,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return O(()=>{let n=t.training==null?!1:t.training,r=Te(e),s=r.shape,a=s.length,o=Gr(0,a),i=this.axis>=0?this.axis:this.axis+a;o.splice(i,1);let u=wo(1,a);u[i]=s[i];let c=o.slice();c.sort();let l=!w.arraysEqual(c,Gr(0,a).slice(0,a-1)),p=()=>{if(l){let b=W(this.movingMean.read(),u),y=W(this.movingVariance.read(),u),v=this.center?W(this.beta.read(),u):null,x=this.scale?W(this.gamma.read(),u):null;return Ad(r,b,y,v,x,this.epsilon)}else return Ad(r,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 p();let[d,h,f]=F6(r,this.gamma.read(),this.beta.read(),o,this.epsilon),g=(b,y,v)=>{O(()=>{let x=1-v,k=b.read(),S=z(le(k,y),x);b.write(le(k,S))})};return(()=>{g(this.movingMean,h,this.momentum),g(this.movingVariance,f,this.momentum)})(),d})}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:mt(this.betaRegularizer),gammaRegularizer:mt(this.gammaRegularizer),betaConstraint:Xt(this.betaConstraint),gammaConstraint:Xt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};fk.className="BatchNormalization";re.registerClass(fk);var mk=class extends ze{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.betaRegularizer=Ct(e.betaRegularizer),this.gammaRegularizer=Ct(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=Qe(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let s=0;s=t)throw new Error(`Invalid axis: ${s}`);if(this.axis.length!==ua(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(s=>e[s]),r=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,r):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,r):this.beta=null,this.built=!0}call(e,t){let n=Te(e),r=n.shape,s=r.length;return O(()=>{let{mean:o,variance:i}=vp(n,this.axis,!0),u=wo(1,s);for(let f of this.axis)u[f]=r[f];let c=f=>f!=null&&f.shape.length!==s?W(f,u):f,l=this.scale?c(this.gamma.read()):null,p=this.center?c(this.beta.read()):null,d=[],h=[];for(let f=0;f{if(e.rank!==4)throw new V(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new V("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=Hr()),n!=="channelsLast"&&n!=="channelsFirst")throw new V(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let r;return n==="channelsFirst"?r=[[0,0],[0,0],t[0],t[1]]:r=[[0,0],t[0],t[1],[0,0]],yr(e,r)})}var gk=class extends ze{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?Hr():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new V(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new V(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new V(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Bt({ndim:4})]}computeOutputShape(e){e=Qe(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(()=>R6(Te(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};gk.className="ZeroPadding2D";re.registerClass(gk);function Zm(e,t,n,r,s,a){return O(()=>{Pt(s),zN(a),vr(r),n==null&&(n=[1,1]),r==null&&(r="valid"),s==null&&(s=Hr()),a==null&&(a="max"),e=MI(e,s);let o,i=r==="same"?"same":"valid";return a==="max"?o=Rt(e,t,n,i):o=br(e,t,n,i),s==="channelsFirst"&&(o=Re(o,[0,3,1,2])),o})}function U2(e,t,n,r,s,a){return O(()=>{Pt(s),zN(a),vr(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),s==null&&(s=Hr()),a==null&&(a="max"),e=D2(e,s);let o,i=r==="same"?"same":"valid";return a==="max"?o=Nw(e,t,n,i):o=Qx(e,t,n,i),s==="channelsFirst"&&(o=Re(o,[0,4,1,2,3])),o})}var G2=class extends ze{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new V(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(tn(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new V(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,vr(this.padding),this.inputSpec=[new Bt({ndim:3})]}computeOutputShape(e){e=Qe(e);let t=Ur(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=Np(Te(e),2);let n=this.poolingFunction(Te(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Ra(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},bk=class extends G2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),Zm(e,t,n,r,s,"max")}};bk.className="MaxPooling1D";re.registerClass(bk);var yk=class extends G2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),Zm(e,t,n,r,s,"avg")}};yk.className="AveragePooling1D";re.registerClass(yk);var H2=class extends ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new V(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];tn(this.poolSize,"poolSize"),tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),vr(this.padding),this.inputSpec=[new Bt({ndim:4})]}computeOutputShape(e){e=Qe(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Ur(t,this.poolSize[0],this.padding,this.strides[0]),n=Ur(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(Te(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}},vk=class extends H2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),Zm(e,t,n,r,s,"max")}};vk.className="MaxPooling2D";re.registerClass(vk);var xk=class extends H2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),Zm(e,t,n,r,s,"avg")}};xk.className="AveragePooling2D";re.registerClass(xk);var j2=class extends ze{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new V(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];tn(this.poolSize,"poolSize"),tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),vr(this.padding),this.inputSpec=[new Bt({ndim:5})]}computeOutputShape(e){e=Qe(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],r=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=Ur(t,this.poolSize[0],this.padding,this.strides[0]),n=Ur(n,this.poolSize[1],this.padding,this.strides[1]),r=Ur(r,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,r]:[e[0],t,n,r,e[4]]}call(e,t){return O(()=>(this.invokeCallHook(e,t),this.poolingFunction(Te(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}},wk=class extends j2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),U2(e,t,n,r,s,"max")}};wk.className="MaxPooling3D";re.registerClass(wk);var Ik=class extends j2{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),vr(r),U2(e,t,n,r,s,"avg")}};Ik.className="AveragePooling3D";re.registerClass(Ik);var q2=class extends ze{constructor(e){super(e),this.inputSpec=[new Bt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Be}},kk=class extends q2{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=Te(e);return _t(n,1)})}};kk.className="GlobalAveragePooling1D";re.registerClass(kk);var Sk=class extends q2{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=Te(e);return hr(n,1)})}};Sk.className="GlobalMaxPooling1D";re.registerClass(Sk);var K2=class extends ze{constructor(e){super(e),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),this.inputSpec=[new Bt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Be}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},Ck=class extends K2{call(e,t){return O(()=>{let n=Te(e);return this.dataFormat==="channelsLast"?_t(n,[1,2]):_t(n,[2,3])})}};Ck.className="GlobalAveragePooling2D";re.registerClass(Ck);var Tk=class extends K2{call(e,t){return O(()=>{let n=Te(e);return this.dataFormat==="channelsLast"?hr(n,[1,2]):hr(n,[2,3])})}};Tk.className="GlobalMaxPooling2D";re.registerClass(Tk);var X2=class extends ze{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 r=t.layer,s=Vr(r,n);delete t.layer;let a={layer:s};return Object.assign(a,t),new e(a)}},Nk=class extends X2{constructor(e){super(e),this.supportsMasking=!0}build(e){if(e=Qe(e),e.length<3)throw new V(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=Qe(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),r=e[1];return[n[0],r].concat(n.slice(1))}call(e,t){return O(()=>(e=Te(e),z2((a,o)=>[Te(this.layer.call(a,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};Nk.className="TimeDistributed";re.registerClass(Nk);function P6(e){Zi(PG,"BidirectionalMergeMode",e)}var O6="concat",_k=class extends X2{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Vr(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=Vr(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?O6:e.mergeMode,P6(this.mergeMode),e.weights)throw new Be("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,r,s;return this.returnState&&(s=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,r=[n]):this.mergeMode==null?r=[n,n.slice()]:r=[n],this.returnState?this.mergeMode==null?r.concat(s).concat(s.slice()):[n].concat(s).concat(s.slice()):Rn(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let s=B2(e,n,r,this.numConstants);if(e=s.inputs,n=s.initialState,r=s.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&r==null)return super.apply(e,t);let a=[],o=[];if(n!=null){let u=n.length;if(u%2>0)throw new V("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,a.push(...n);let c=n.map(l=>new Bt({shape:l.shape}));this.forwardLayer.stateSpec=c.slice(0,u/2),this.backwardLayer.stateSpec=c.slice(u/2),o.push(...c)}if(r!=null)throw new Be("Support for constants in Bidirectional layers is not implemented yet.");let i=a[0]instanceof jr;for(let u of a)if(u instanceof jr!==i)throw new V("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(i){let u=[e].concat(a),c=this.inputSpec.concat(o),l=this.inputSpec;this.inputSpec=c;let p=super.apply(u,t);return this.inputSpec=l,p}else return super.apply(e,t)}call(e,t){return O(()=>{let n=t.initialState,r,s;if(n==null)r=this.forwardLayer.call(e,t),s=this.backwardLayer.call(e,t);else{let i=n.slice(0,n.length/2),u=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:i})),s=this.backwardLayer.call(e,Object.assign(t,{initialState:u}))}let a;this.returnState&&(Array.isArray(r)&&(a=r.slice(1).concat(s.slice(1))),r=r[0],s=s[0]),this.returnSequences&&(s=gr(s,1));let o;return this.mergeMode==="concat"?o=cI([r,s]):this.mergeMode==="sum"?o=X(r,s):this.mergeMode==="ave"?o=z(.5,X(r,s)):this.mergeMode==="mul"?o=z(r,s):this.mergeMode==null&&(o=[r,s]),this.returnState?this.mergeMode==null?o.concat(a):[o].concat(a):o})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){oo(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),oo(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 s=this.forwardLayer.states.map(a=>null);return Array.isArray(n)?n.concat(s).concat(s):[n].concat(s).concat(s)}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=Vr(t.layer);if(delete t.layer,t.numConstants!=null)throw new Be("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};_k.className="Bidirectional";re.registerClass(_k);var Ek=class extends ze{constructor(e){super(e),this.scale=e.scale,e.offset?this.offset=e.offset:this.offset=0}getConfig(){let e={scale:this.scale,offset:this.offset},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return O(()=>(e=Te(e),e.dtype!=="float32"&&(e=cs(e,"float32")),X(z(e,this.scale),this.offset)))}};Ek.className="Rescaling";re.registerClass(Ek);var{resizeBilinear:M6,cropAndResize:L6}=er,Ak=class extends ze{constructor(e){super(e),this.height=e.height,this.width=e.width}centerCrop(e,t,n,r,s,a,o,i){return O(()=>{let u,c=!1,l=t/a,p=n/o,d=(r+t)/a,h=(s+n)/o,f=[l,p,d,h],g=[];e.rank===3?(c=!0,u=Dt([e])):u=e;for(let x=0;x{let s=M6(e,[t,n]);return cs(s,r)})}call(e,t){return O(()=>{let n=Te(e),r=n.dtype,s=n.shape,a=s[s.length-3],o=s[s.length-2],i=0;a!==this.height&&(i=Math.floor((a-this.height)/2));let u=0;return o!==this.width&&(u=Math.floor((o-this.width)/2),u===0&&(u=1)),i>=0&&u>=0?this.centerCrop(n,i,u,this.height,this.width,a,o,r):this.upsize(e,this.height,this.width,r)})}getConfig(){let e={height:this.height,width:this.width},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){e=Qe(e);let t=e.length-3,n=e.length-2;return e[t]=this.height,e[n]=this.width,e}};Ak.className="CenterCrop";re.registerClass(Ak);function B6(e,t,n,r){let s=Te(e);if(s.dtype!=="int32"&&(s=cs(s,"int32")),t==="int")return s;let a=s.shape;if(s.rank===0&&(s=Gt(s,-1)),t==="oneHot"&&s.shape[s.shape.length-1]!==1&&(s=Gt(s,-1)),s.rank>2)throw new V(`When outputMode is not int, maximum output rank is 2 Received outputMode ${t} and input shape ${a} which would result in output rank ${s.rank}.`);let o=["multiHot","oneHot"].includes(t),i=s,u;if(typeof r!="undefined"&&t==="count"?u=df(i,r,n,o):u=df(i,[],n,o),t!=="tfIdf")return u;if(r)return z(u,r);throw new V("When outputMode is 'tfIdf', weights must be provided.")}var Dk=class extends ze{constructor(e){super(e),this.numTokens=e.numTokens,e.outputMode?this.outputMode=e.outputMode:this.outputMode="multiHot"}getConfig(){let e={numTokens:this.numTokens,outputMode:this.outputMode},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){return e=Qe(e),e==null?[this.numTokens]:this.outputMode==="oneHot"&&e[e.length-1]!==1?(e.push(this.numTokens),e):(e[e.length-1]=this.numTokens,e)}call(e,t){return O(()=>{e=Te(e),e.dtype!=="int32"&&(e=cs(e,"int32"));let n;if(typeof t.countWeights!="undefined"){if(this.outputMode!=="count")throw new V(`countWeights is not used when outputMode !== count. Received countWeights=${t.countWeights}`);n=Te(t.countWeights)}let r=hr(e),s=Xu(e),a=En(this.numTokens,r).bufferSync().get(0),o=Rs(s,0).bufferSync().get(0);if(!(a&&o))throw new V(`Input values must be between 0 < values <= numTokens with numTokens=${this.numTokens}`);return B6(e,this.outputMode,this.numTokens,n)})}};Dk.className="CategoryEncoding";re.registerClass(Dk);var z6=["bilinear","nearest"],r1=new Set(z6),$k=class extends ze{constructor(e){if(super(e),this.height=e.height,this.width=e.width,e.interpolation)if(r1.has(e.interpolation))this.interpolation=e.interpolation;else throw new V(`Invalid interpolation parameter: ${e.interpolation} is not implemented`);else this.interpolation="bilinear";this.cropToAspectRatio=!!e.cropToAspectRatio}computeOutputShape(e){e=Qe(e);let t=e[2];return[this.height,this.width,t]}getConfig(){let e={height:this.height,width:this.width,interpolation:this.interpolation,cropToAspectRatio:this.cropToAspectRatio},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return O(()=>{let n=[this.height,this.width];if(this.interpolation==="bilinear")return er.resizeBilinear(e,n,!this.cropToAspectRatio);if(this.interpolation==="nearest")return er.resizeNearestNeighbor(e,n,!this.cropToAspectRatio);throw new Error(`Interpolation is ${this.interpolation} but only ${[...r1]} are supported`)})}};$k.className="Resizing";re.registerClass($k);var Y2=class{constructor(e){this.seed=e}next(){if(this.seed!==void 0)return this.seed++}};Y2.className="RandomSeed";var Z2=class extends ze{constructor(e){super(e),this.randomGenerator=new Y2(e.seed)}getConfig(){let e={seed:this.randomGenerator.seed},t=super.getConfig();return Object.assign(e,t),e}};Z2.className="BaseRandomLayer";var W6=["bilinear","nearest"],s1=new Set(W6),Fk=class extends Z2{constructor(e){super(e);let{factor:t,interpolation:n="bilinear"}=e;if(this.factor=t,Array.isArray(this.factor)&&this.factor.length===2)this.widthLower=this.factor[0],this.widthUpper=this.factor[1];else if(!Array.isArray(this.factor)&&this.factor>0)this.widthLower=-this.factor,this.widthUpper=this.factor;else throw new V(`Invalid factor: ${this.factor}. Must be positive number or tuple of 2 numbers`);if(this.widthLower<-1||this.widthUpper<-1)throw new V(`factor must have values larger than -1. Got: ${this.factor}`);if(this.widthUpper{let n=Te(e);this.imgHeight=n.shape[n.shape.length-3];let r=n.shape[n.shape.length-2];this.widthFactor=$a([1],1+this.widthLower,1+this.widthUpper,"float32",this.randomGenerator.next());let s=this.widthFactor.dataSync()[0]*r;s=Math.round(s);let a=[this.imgHeight,s];switch(this.interpolation){case"bilinear":return er.resizeBilinear(e,a);case"nearest":return er.resizeNearestNeighbor(e,a);default:throw new Error(`Interpolation is ${this.interpolation} but only ${[...s1]} are supported`)}})}};Fk.className="RandomWidth";re.registerClass(Fk);function V6(e){return new bl(e)}function U6(e){return new RI(e)}function G6(e){return new DI(e)}function H6(e){return new $I(e)}function j6(e){return new FI(e)}function q6(e){return new OI(e)}function K6(e){return new PI(e)}function X6(e){return new WI(e)}function Y6(e){return new Gm(e)}function Z6(e){return new LI(e)}function J6(e){return new Hm(e)}function Q6(e){return new BI(e)}function ej(e){return new zI(e)}function tj(e){return new VI(e)}function nj(e){return new UI(e)}function rj(e){return new GI(e)}function sj(e){return new JI(e)}function aj(e){return new YI(e)}function oj(e){return new Ym(e)}function ij(e){return new XI(e)}function uj(e){return new ZI(e)}function cj(e){return new QI(e)}function lj(e){return new ek(e)}function dj(e){return new tk(e)}function pj(e){return new rk(e)}function hj(e){return new sk(e)}function fj(e){return new ok(e)}function mj(e){return new ck(e)}function gj(e){return new ik(e)}function bj(e){return new uk(e)}function yj(e){return new ak(e)}function vj(e){return new lk(e)}function xj(e){return new fk(e)}function wj(e){return new mk(e)}function Ij(e){return new gk(e)}function Rk(e){return new yk(e)}function kj(e){return Rk(e)}function Sj(e){return Rk(e)}function Pk(e){return new xk(e)}function Cj(e){return Pk(e)}function Tj(e){return Pk(e)}function Ok(e){return new Ik(e)}function Nj(e){return Ok(e)}function _j(e){return Ok(e)}function Ej(e){return new kk(e)}function Aj(e){return new Ck(e)}function J2(e){return new Sk(e)}function Q2(e){return new Tk(e)}function e_(e){return new bk(e)}function t_(e){return new vk(e)}function Dj(e){return new wk(e)}function $j(e){return new jI(e)}function Fj(e){return new qm(e)}function Rj(e){return new qI(e)}function Pj(e){return new Fp(e)}function Oj(e){return new HI(e)}function Mj(e){return new jm(e)}function Lj(e){return new KI(e)}function Bj(e){return new Xm(e)}function zj(e){return new Ms(e)}function Wj(e){return new Km(e)}function Vj(e){return new _k(e)}function Uj(e){return new Nk(e)}var Gj=J2,Hj=Q2,jj=e_,qj=t_;function Kj(e){return new dk(e)}function Xj(e){return new pk(e)}function Yj(e){return new hk(e)}function Zj(e){return new nk(e)}function Jj(e){return new Ek(e)}function Qj(e){return new Ak(e)}function e5(e){return new $k(e)}function t5(e){return new Dk(e)}function n5(e){return new Fk(e)}var n_={};Ee(n_,{MAPE:()=>h5,MSE:()=>g5,binaryAccuracy:()=>r5,binaryCrossentropy:()=>s5,categoricalAccuracy:()=>o5,categoricalCrossentropy:()=>i5,cosineProximity:()=>l5,mape:()=>f5,meanAbsoluteError:()=>d5,meanAbsolutePercentageError:()=>p5,meanSquaredError:()=>m5,mse:()=>b5,precision:()=>u5,recall:()=>c5,sparseCategoricalAccuracy:()=>a5});function r5(e,t){return CI(e,t)}function s5(e,t){return i2(e,t)}function a5(e,t){return u2(e,t)}function o5(e,t){return TI(e,t)}function i5(e,t){return NI(e,t)}function u5(e,t){return o2(e,t)}function c5(e,t){return WH(e,t)}function l5(e,t){return SI(e,t)}function d5(e,t){return zm(e,t)}function p5(e,t){return yl(e,t)}function h5(e,t){return yl(e,t)}function f5(e,t){return yl(e,t)}function m5(e,t){return Ji(e,t)}function g5(e,t){return Ji(e,t)}function b5(e,t){return Ji(e,t)}var r_={};Ee(r_,{modelFromJSON:()=>b6});var s_={};Ee(s_,{l1:()=>v5,l1l2:()=>y5,l2:()=>x5});function y5(e){return new Dp(e)}function v5(e){return S6(e)}function x5(e){return C6(e)}var a_=class extends rc{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof Es))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function Bh(e,t){return et}var o_=class extends a_{constructor(e){if(super(),e==null&&(e={}),e.restoreBestWeights)throw new Be("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=Bh:this.mode==="max"?this.monitorFunc=a1:this.monitor.indexOf("acc")!==-1?this.monitorFunc=a1:this.monitorFunc=Bh,this.monitorFunc===Bh&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===Bh?1/0:-1/0}async onEpochEnd(e,t){await Qs(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 w5(e){return new o_(e)}var I5={earlyStopping:w5},k5=G();k5.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 Yn;(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"})(Yn||(Yn={}));var o1;(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={}))})(o1||(o1={}));var Mk={};function S5(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};Mk[e]=n}function i_(e){return Mk[e]}function C5(e){delete Mk[e]}function I(e,t,n,r,s){let a=t.inputParams[e];if(a&&a.inputIndexStart!==void 0){let i=a.inputIndexStart,u=a.inputIndexEnd===0?void 0:a.inputIndexEnd===void 0?i+1:a.inputIndexEnd,c=i<0?t.inputNames.length+i:i;if(a.type==="tensor")return dn(t.inputNames[c],n,r,s);if(a.type==="tensors"){let d=t.inputs.slice(i,u);return t.inputNames.slice(i,u).filter((f,g)=>{var m;return((m=d[g])===null||m===void 0?void 0:m.op)!=="NoOp"}).map(f=>dn(f,n,r,s))}let l=dn(t.inputNames[c],n,r,s),p=l.dataSync();return a.type==="number"?p[0]:w.toNestedArray(l.shape,p)}let o=t.attrParams[e];return o&&o.value}function dn(e,t,n,r){let[s,a]=Jn(e,n);if(r!=null){let i=r.getHashTableHandleByName(s);if(i!=null)return i}let o=n.currentContextIds.find(i=>!!t[If(s,i)]);return o!==void 0?t[If(s,o)][a]:void 0}function i1(e,t,n){return t[If(e,n.currentContextId)]}function Cs(e,t){let[n,r,s]=Jn(e,t);return[If(n,t&&t.currentContextId),r,s]}function If(e,t){return t?`${e}-${t}`:e}function Jn(e,t){if(e==="")return["",0,void 0];let n=t!=null&&t.parseNodeNameCache!=null;if(n){let a=t.parseNodeNameCache.get(e);if(a!=null)return a}let r=e.split(":"),s;if(r.length===1)s=[e,0,void 0];else{let a=r[0],o=r.length===3?r[1]:void 0,i=Number(r[r.length-1]);s=[a,i,o]}return n&&t.parseNodeNameCache.set(e,s),s}function Yh(e,t,n){let r=I("pad",e,t,n);if(r==="explicit"){r=I("explicitPaddings",e,t,n);let s=[[0,0],[0,0],[0,0],[0,0]];for(let a=0;a<4;a++)s[a][0]=r[a*2],s[a][1]=r[a*2+1];return s}return r}function Ts(e){return e.kept?e:us(e)}var u_={};Ee(u_,{json:()=>T5});var T5=[{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}]}],c_={};Ee(c_,{json:()=>N5});var N5=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsFinite",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsInf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],l_={};Ee(l_,{json:()=>_5});var _5=[{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"}]}],d_={};Ee(d_,{json:()=>E5});var E5=[{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"}]}],p_={};Ee(p_,{json:()=>A5});var A5=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniformInt",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number"},{tfName:"maxval",name:"maxval",type:"number"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],h_={};Ee(h_,{json:()=>D5});var D5=[{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}]}],f_={};Ee(f_,{json:()=>$5});var $5=[{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"}]}],m_={};Ee(m_,{json:()=>F5});var F5=[{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"}]}],g_={};Ee(g_,{json:()=>R5});var R5=[{tfOpName:"HashTable",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"HashTableV2",category:"hash_table",inputs:[],attrs:[{tfName:"shared_name",name:"sharedName",type:"string"},{tfName:"use_node_name_sharing",name:"useNodeNameSharing",type:"bool"},{tfName:"key_dtype",name:"keyDType",type:"dtype"},{tfName:"value_dtype",name:"valueDType",type:"dtype"}]},{tfOpName:"LookupTableImport",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableImportV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFind",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableFindV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"Tin",name:"tIn",type:"dtype",notSupported:!0},{tfName:"Tout",name:"tOut",type:"dtype",notSupported:!0}]},{tfOpName:"LookupTableSize",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"LookupTableSizeV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"}]},{tfOpName:"InitializeTable",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]},{tfOpName:"InitializeTableV2",category:"hash_table",inputs:[{start:0,name:"tableHandle",type:"tensor"},{start:1,name:"keys",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],b_={};Ee(b_,{json:()=>P5});var P5=[{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"}]}],y_={};Ee(y_,{json:()=>O5});var O5=[{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}]},{tfOpName:"BitwiseAnd",category:"logical",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}]}],v_={};Ee(v_,{json:()=>M5});var M5=[{tfOpName:"_FusedMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"},{start:2,end:0,name:"args",type:"tensors"}],attrs:[{tfName:"num_args",name:"numArgs",type:"number"},{tfName:"fused_ops",name:"fusedOps",type:"string[]",defaultValue:[]},{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:1e-4},{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"leakyrelu_alpha",name:"leakyreluAlpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"MatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"transpose_a",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"transpose_b",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMul",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"BatchMatMulV2",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"b",type:"tensor"}],attrs:[{tfName:"adj_x",name:"transposeA",type:"bool",defaultValue:!1},{tfName:"adj_y",name:"transposeB",type:"bool",defaultValue:!1},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Transpose",category:"matrices",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"perm",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Einsum",category:"matrices",inputs:[{start:0,end:0,name:"tensors",type:"tensors"}],attrs:[{tfName:"equation",name:"equation",type:"string"},{tfName:"N",name:"n",type:"number",defaultValue:2},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"MatrixBandPart",category:"matrices",inputs:[{start:0,name:"a",type:"tensor"},{start:1,name:"numLower",type:"tensor"},{start:1,name:"numUpper",type:"tensor"}]}],x_={};Ee(x_,{json:()=>L5});var L5=[{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"}]}],w_={};Ee(w_,{json:()=>B5});var B5=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],I_={};Ee(I_,{json:()=>z5});var z5=[{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}]},{tfOpName:"TensorScatterUpdate",category:"slice_join",inputs:[{start:0,name:"tensor",type:"tensor"},{start:1,name:"indices",type:"tensor"},{start:2,name:"values",type:"tensor"}]}],k_={};Ee(k_,{json:()=>W5});var W5=[{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"}]}],S_={};Ee(S_,{json:()=>V5});var V5=[{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}]}],C_={};Ee(C_,{json:()=>U5});var U5=[{tfOpName:"StaticRegexReplace",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"pattern",name:"pattern",type:"string"},{tfName:"rewrite",name:"rewrite",type:"string"},{tfName:"replace_global",name:"replaceGlobal",type:"bool"}]},{tfOpName:"StringNGrams",category:"string",inputs:[{start:0,name:"data",type:"tensor"},{start:1,name:"dataSplits",type:"tensor"}],attrs:[{tfName:"separator",name:"separator",type:"string"},{tfName:"ngram_widths",name:"nGramWidths",type:"number[]"},{tfName:"left_pad",name:"leftPad",type:"string"},{tfName:"right_pad",name:"rightPad",type:"string"},{tfName:"pad_width",name:"padWidth",type:"number"},{tfName:"preserve_short_sequences",name:"preserveShortSequences",type:"bool"}],outputs:["ngrams","ngrams_splits"]},{tfOpName:"StringSplit",category:"string",inputs:[{start:0,name:"input",type:"tensor"},{start:1,name:"delimiter",type:"tensor"}],attrs:[{tfName:"skip_empty",name:"skipEmpty",type:"bool"}],outputs:["indices","values","shape"]},{tfOpName:"StringToHashBucketFast",category:"string",inputs:[{start:0,name:"input",type:"tensor"}],attrs:[{tfName:"num_buckets",name:"numBuckets",type:"number"}]}],T_={};Ee(T_,{json:()=>G5});var G5=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"EnsureShape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],u1=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[u_,c_,l_,d_,p_,h_,f_,m_,g_,b_,y_,v_,x_,w_,I_,k_,S_,C_,T_],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,r)=>(n[r.tfOpName]=r,n),{})}transformGraph(e,t={}){let n=e.node,r=[],s=[],a=[],o=n.reduce((f,g)=>(f[g.name]=this.mapNode(g),g.op.startsWith("Placeholder")?r.push(f[g.name]):g.op==="Const"?s.push(f[g.name]):(g.input==null||g.input.length===0)&&a.push(f[g.name]),f),{}),i=[],u=[],c={},l={};t!=null&&(c=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let p=Object.keys(o);p.forEach(f=>{let g=o[f];g.inputNames.forEach((m,b)=>{let[y,,v]=Cs(m),x=o[y];if(x.outputs!=null){let k=x.outputs.indexOf(v);if(k!==-1){let S=`${y}:${k}`;g.inputNames[b]=S}}g.inputs.push(x),x.children.push(g)})}),Object.keys(l).length===0?p.forEach(f=>{let g=o[f];g.children.length===0&&u.push(g)}):Object.keys(l).forEach(f=>{let[g]=Cs(f),m=o[g];m!=null&&(m.signatureKey=l[f],u.push(m))}),Object.keys(c).length>0?Object.keys(c).forEach(f=>{let[g]=Cs(f),m=o[g];m&&(m.signatureKey=c[f],i.push(m))}):i=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,g)=>(f[g.signature.name]=this.mapFunction(g),f),{}));let h={nodes:o,inputs:i,outputs:u,weights:s,placeholders:r,signature:t,functions:d};return a.length>0&&(h.initNodes=a),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=i_(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(r=>r.startsWith("^")?r.slice(1):r),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((r,s)=>(r[s.name]={type:s.type,inputIndexStart:s.start,inputIndexEnd:s.end},r),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((r,s)=>{let a=s.type,o;switch(s.type){case"string":o=nx(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=nx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":o=cx(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=cx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":o=sx(e.attr,s.tfName,s.defaultValue||0),o===void 0&&s.tfDeprecatedName&&(o=sx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":o=ux(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=ux(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":o=rx(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=rx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":o=dx(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=dx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":o=ix(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=ix(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":o=lx(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=lx(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":o=ax(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=ax(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":o=ox(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=ox(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":o=c1(e.attr,s.tfName,s.defaultValue),o===void 0&&s.tfDeprecatedName&&(o=c1(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${s.type} for op: ${e.op}`)}return r[s.name]={value:o,type:a},r},{})),n}mapFunction(e){let t=e.nodeDef,n=[],r=[],s={};t!=null&&(s=t.reduce((l,p)=>(l[p.name]=this.mapNode(p),p.op==="Const"&&r.push(l[p.name]),l),{}));let a=[],o=[];e.signature.inputArg.forEach(l=>{let[p]=Cs(l.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:Lk(l.type),type:"dtype"}},children:[]};d.signatureKey=l.name,a.push(d),s[p]=d}),Object.keys(s).forEach(l=>{let p=s[l];p.inputNames.forEach((d,h)=>{let[f,,g]=Cs(d),m=s[f];if(m.outputs!=null){let b=m.outputs.indexOf(g);if(b!==-1){let y=`${f}:${b}`;p.inputNames[h]=y}}p.inputs.push(m),m.children.push(p)})});let u=e.ret;e.signature.outputArg.forEach(l=>{let[p,d]=Cs(u[l.name]),h=s[p];h!=null&&(h.defaultOutput=d,o.push(h))});let c=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:o,weights:r,placeholders:n,signature:c}}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 H5(e){let t=G().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 N_(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):H5(e);return t?n:n.toLowerCase()}function nx(e,t,n,r=!1){let s=e[t];return s!=null?N_(s.s,r):n}function rx(e,t,n){let r=e[t];return r?r.b:n}function sx(e,t,n){let r=e[t]||{},s=r.i!=null?r.i:r.f!=null?r.f:n;return typeof s=="number"?s:parseInt(s,10)}function Lk(e){switch(typeof e=="string"&&(e=Yn[e]),e){case Yn.DT_FLOAT:case Yn.DT_HALF:return"float32";case Yn.DT_INT32:case Yn.DT_INT64:case Yn.DT_INT8:case Yn.DT_UINT8:return"int32";case Yn.DT_BOOL:return"bool";case Yn.DT_DOUBLE:return"float32";case Yn.DT_STRING:return"string";case Yn.DT_COMPLEX64:case Yn.DT_COMPLEX128:return"complex64";default:return null}}function c1(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function ax(e,t,n){let r=e[t];return r&&r.type?Lk(r.type):n}function ox(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(s=>Lk(s)):n}function __(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function ix(e,t,n){let r=e[t];return r&&r.shape?__(r.shape):n}function ux(e,t,n){let r=e[t];return r?((r.list.f&&r.list.f.length?r.list.f:r.list.i)||[]).map(s=>typeof s=="number"?s:parseInt(s,10)):n}function cx(e,t,n,r=!1){let s=e[t];return s&&s.list&&s.list.s?s.list.s.map(a=>N_(a,r)):n}function lx(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(s=>__(s)):n}function dx(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var j5=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(r=>this.getInput(r)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((r,s)=>(r[s]=this.getAttr(s),r),{}))}getInput(e){return dn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return dn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return sx(this.node.rawAttrs,e,t);if(n.s!=null)return nx(this.node.rawAttrs,e,t);if(n.b!=null)return rx(this.node.rawAttrs,e,t);if(n.shape!=null)return ix(this.node.rawAttrs,e,t);if(n.type!=null)return ax(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return ux(this.node.rawAttrs,e,t);if(n.list.s!=null)return cx(this.node.rawAttrs,e,t);if(n.list.shape!=null)return lx(this.node.rawAttrs,e,t);if(n.list.b!=null)return dx(this.node.rawAttrs,e,t);if(n.list.type!=null)return ox(this.node.rawAttrs,e,t)}return t}},an={};Ee(an,{OP_SCOPE_SUFFIX:()=>Lx,abs:()=>Lt,acos:()=>Gx,acosh:()=>Hx,add:()=>X,addN:()=>GC,all:()=>em,any:()=>Sd,argMax:()=>mo,argMin:()=>jx,asin:()=>qx,asinh:()=>Kx,atan:()=>Xx,atan2:()=>Yx,atanh:()=>Zx,avgPool:()=>br,avgPool3d:()=>Qx,basicLSTMCell:()=>KC,batchNorm:()=>Ea,batchNorm2d:()=>ew,batchNorm3d:()=>tw,batchNorm4d:()=>nw,batchToSpaceND:()=>pp,bincount:()=>rw,bitwiseAnd:()=>XC,booleanMaskAsync:()=>LT,broadcastArgs:()=>YC,broadcastTo:()=>ao,buffer:()=>Me,cast:()=>ae,ceil:()=>sw,clipByValue:()=>rn,clone:()=>us,complex:()=>As,concat:()=>tt,concat1d:()=>aw,concat2d:()=>ow,concat3d:()=>iw,concat4d:()=>uw,conv1d:()=>tm,conv2d:()=>Ft,conv2dTranspose:()=>nm,conv3d:()=>lw,conv3dTranspose:()=>dw,cos:()=>hp,cosh:()=>rm,cosineWindow:()=>Sm,cumprod:()=>Nd,cumsum:()=>sm,denseBincount:()=>df,depthToSpace:()=>pw,depthwiseConv2d:()=>Aa,diag:()=>JC,dilation2d:()=>hw,div:()=>fe,divNoNan:()=>fw,dot:()=>mw,dropout:()=>Hw,einsum:()=>Qa,elu:()=>pl,enclosingPowerOfTwo:()=>jw,ensureShape:()=>eT,equal:()=>tr,erf:()=>gw,euclideanNorm:()=>vw,exp:()=>fn,expandDims:()=>Gt,expm1:()=>xw,eye:()=>am,fft:()=>kp,fill:()=>vn,floor:()=>fl,floorDiv:()=>Qf,fused:()=>tc,gather:()=>ml,gatherND:()=>VT,greater:()=>En,greaterEqual:()=>Rs,ifft:()=>ec,imag:()=>fp,image:()=>er,inTopKAsync:()=>UT,irfft:()=>ym,isFinite:()=>ww,isInf:()=>Iw,isNaN:()=>kw,leakyRelu:()=>mp,less:()=>Yu,lessEqual:()=>Da,linalg:()=>Xw,linspace:()=>aT,localResponseNormalization:()=>Sw,log:()=>nr,log1p:()=>gp,logSigmoid:()=>Cw,logSoftmax:()=>im,logSumExp:()=>bp,logicalAnd:()=>$r,logicalNot:()=>yp,logicalOr:()=>um,logicalXor:()=>Tw,losses:()=>tN,lowerBound:()=>iT,matMul:()=>Fe,max:()=>hr,maxPool:()=>Rt,maxPool3d:()=>Nw,maxPoolWithArgmax:()=>uT,maximum:()=>ms,mean:()=>_t,meshgrid:()=>cT,min:()=>Xu,minimum:()=>ga,mirrorPad:()=>_w,mod:()=>Ew,moments:()=>vp,movingAverage:()=>BT,mul:()=>z,multiRNNCell:()=>lT,multinomial:()=>dT,neg:()=>bt,norm:()=>hl,notEqual:()=>vo,oneHot:()=>Zu,ones:()=>On,onesLike:()=>rr,op:()=>B,outerProduct:()=>pT,pad:()=>yr,pad1d:()=>hT,pad2d:()=>fT,pad3d:()=>mT,pad4d:()=>gT,pool:()=>Aw,pow:()=>Ds,prelu:()=>wp,print:()=>Ux,prod:()=>Dw,raggedGather:()=>bT,raggedRange:()=>yT,raggedTensorToTensor:()=>vT,rand:()=>xT,randomGamma:()=>ST,randomNormal:()=>lm,randomStandardNormal:()=>CT,randomUniform:()=>$a,randomUniformInt:()=>TT,range:()=>xo,real:()=>Ju,reciprocal:()=>Ow,relu:()=>Ke,relu6:()=>dm,reshape:()=>W,reverse:()=>gr,reverse1d:()=>NT,reverse2d:()=>_T,reverse3d:()=>ET,reverse4d:()=>AT,rfft:()=>Sp,round:()=>pm,rsqrt:()=>hm,scalar:()=>xe,scatterND:()=>zT,searchSorted:()=>cm,selu:()=>fm,separableConv2d:()=>Fa,setdiff1dAsync:()=>DT,sigmoid:()=>pr,sign:()=>Mw,signal:()=>eN,sin:()=>mm,sinh:()=>gm,slice:()=>Ve,slice1d:()=>Ip,slice2d:()=>bm,slice3d:()=>Ki,slice4d:()=>Qu,softmax:()=>Kr,softplus:()=>qi,spaceToBatchND:()=>xp,sparse:()=>nN,sparseToDense:()=>WT,spectral:()=>QT,split:()=>Mn,sqrt:()=>hn,square:()=>lt,squaredDifference:()=>vm,squeeze:()=>Ra,stack:()=>Dt,step:()=>Xi,stridedSlice:()=>Lw,string:()=>rN,sub:()=>le,sum:()=>ge,tan:()=>Bw,tanh:()=>bo,tensor:()=>yn,tensor1d:()=>He,tensor2d:()=>Dr,tensor3d:()=>Cp,tensor4d:()=>Rr,tensor5d:()=>$T,tensor6d:()=>FT,tensorScatterUpdate:()=>PT,tile:()=>Pn,topk:()=>Ww,transpose:()=>Re,truncatedNormal:()=>Im,unique:()=>Vw,unsortedSegmentSum:()=>km,unstack:()=>pt,upperBound:()=>OT,variable:()=>Uw,where:()=>nn,whereAsync:()=>Gw,zeros:()=>kt,zerosLike:()=>je});var q5=(e,t,n,r=an)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[r.add(I("a",e,t,n),I("b",e,t,n))];case"AddN":return[r.addN(I("tensors",e,t,n))];case"FloorMod":case"Mod":return[r.mod(I("a",e,t,n),I("b",e,t,n))];case"Mul":return[r.mul(I("a",e,t,n),I("b",e,t,n))];case"RealDiv":case"Div":return[r.div(I("a",e,t,n),I("b",e,t,n))];case"DivNoNan":return[r.divNoNan(I("a",e,t,n),I("b",e,t,n))];case"FloorDiv":return[r.floorDiv(I("a",e,t,n),I("b",e,t,n))];case"Sub":return[r.sub(I("a",e,t,n),I("b",e,t,n))];case"Minimum":return[r.minimum(I("a",e,t,n),I("b",e,t,n))];case"Maximum":return[r.maximum(I("a",e,t,n),I("b",e,t,n))];case"Pow":return[r.pow(I("a",e,t,n),I("b",e,t,n))];case"SquaredDifference":return[r.squaredDifference(I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},K5=(e,t,n,r=an)=>{switch(e.op){case"Abs":case"ComplexAbs":return[r.abs(I("x",e,t,n))];case"Acos":return[r.acos(I("x",e,t,n))];case"Acosh":return[r.acosh(I("x",e,t,n))];case"Asin":return[r.asin(I("x",e,t,n))];case"Asinh":return[r.asinh(I("x",e,t,n))];case"Atan":return[r.atan(I("x",e,t,n))];case"Atan2":return[r.atan2(I("x",e,t,n),I("y",e,t,n))];case"Atanh":return[r.atanh(I("x",e,t,n))];case"Ceil":return[r.ceil(I("x",e,t,n))];case"Complex":return[r.complex(I("real",e,t,n),I("imag",e,t,n))];case"Cos":return[r.cos(I("x",e,t,n))];case"Cosh":return[r.cosh(I("x",e,t,n))];case"Elu":return[r.elu(I("x",e,t,n))];case"Erf":return[r.erf(I("x",e,t,n))];case"Exp":return[r.exp(I("x",e,t,n))];case"Expm1":return[r.expm1(I("x",e,t,n))];case"Floor":return[r.floor(I("x",e,t,n))];case"Log":return[r.log(I("x",e,t,n))];case"Log1p":return[r.log1p(I("x",e,t,n))];case"Imag":return[r.imag(I("x",e,t,n))];case"Neg":return[r.neg(I("x",e,t,n))];case"Reciprocal":return[r.reciprocal(I("x",e,t,n))];case"Real":return[r.real(I("x",e,t,n))];case"Relu":return[r.relu(I("x",e,t,n))];case"Round":return[r.round(I("x",e,t,n))];case"Selu":return[r.selu(I("x",e,t,n))];case"Sigmoid":return[r.sigmoid(I("x",e,t,n))];case"Sin":return[r.sin(I("x",e,t,n))];case"Sign":return[r.sign(I("x",e,t,n))];case"Sinh":return[r.sinh(I("x",e,t,n))];case"Softplus":return[r.softplus(I("x",e,t,n))];case"Sqrt":return[r.sqrt(I("x",e,t,n))];case"Square":return[r.square(I("x",e,t,n))];case"Tanh":return[r.tanh(I("x",e,t,n))];case"Tan":return[r.tan(I("x",e,t,n))];case"ClipByValue":return[r.clipByValue(I("x",e,t,n),I("clipValueMin",e,t,n),I("clipValueMax",e,t,n))];case"Relu6":return[r.relu6(I("x",e,t,n))];case"Rsqrt":return[r.rsqrt(dn(e.inputNames[0],t,n))];case"LeakyRelu":return[r.leakyRelu(I("x",e,t,n),I("alpha",e,t,n))];case"Prelu":return[r.prelu(I("x",e,t,n),I("alpha",e,t,n))];case"IsNan":return[r.isNaN(dn(e.inputNames[0],t,n))];case"IsInf":return[r.isInf(dn(e.inputNames[0],t,n))];case"IsFinite":return[r.isFinite(dn(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Ar(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){w.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let r=0;rn+` Shapes ${e} and ${t} must match`)}}}function l1(e){return!(typeof e=="number"||e.some(t=>t<0))}function rd(e,t,n){let r=px(e,n),s=!l1(r);if(s&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${r}`);if(s&&t.forEach(a=>{r=px(a.shape,r)}),!l1(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function px(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 r=0;r=0&&a>=0&&s!==a)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=s>=0?s:a}return n}var X5=class{constructor(e,t,n,r,s,a,o){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=r,this.identicalElementShapes=s,this.dynamicSize=a,this.clearAfterRead=o,this.tensors=[],this.closed_=!1,this.idTensor=xe(0),Ht(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),Ar(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,Ht(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,r)=>this.write(n,t[r]))}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 r=0;r=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,pt(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,r=e.map(i=>(n+=i,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 s=n===0?0:t.size/n,a=[];O(()=>{t=W(t,[1,n,s]);for(let i=0;i{if(r!==a.dtype)throw new Error(`Invalid data types; op elements ${r}, but list elements ${a.dtype}`);Ar(n,a.shape,"TensorList shape mismatch: "),Ht(a)}),this.idTensor=xe(0),this.maxNumElements=s,Ht(this.idTensor)}copy(){return new hx([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(t){this.tensors.forEach(n=>{(t==null||!t.has(n.id))&&n.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(t,n,r=-1){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(r!==-1&&this.tensors.length!==r)throw new Error(`Operation expected a list with ${r} elements but got a list with ${this.tensors.length} elements.`);Ar(t,this.elementShape,"TensorList shape mismatch: ");let s=rd(this.elementShape,this.tensors,t);return O(()=>{let a=this.tensors.map(o=>W(o,s));return Dt(a,0)})}popBack(t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let r=rd(this.elementShape,this.tensors,t),s=this.tensors.pop();return s.kept=!1,Ar(s.shape,t,"TensorList shape mismatch: "),W(s,r)}pushBack(t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(Ar(t.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Ht(t),this.tensors.push(t)}resize(t){if(t<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${t}`);if(this.maxNumElements!==-1&&t>this.maxNumElements)throw new Error(`TensorListResize input size ${t} is greater maxNumElement ${this.maxNumElements}.`);let n=new hx([],this.elementShape,this.elementDtype,this.maxNumElements);n.tensors.length=t;for(let r=0;rthis.tensors.length)throw new Error(`Trying to access element ${t} in a list with ${this.tensors.length} elements.`);if(this.tensors[t]==null)throw new Error(`element at index ${t} is null.`);Ar(this.tensors[t].shape,n,"TensorList shape mismatch: ");let s=rd(this.elementShape,this.tensors,n);return W(this.tensors[t],s)}setItem(t,n){if(n.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n.dtype}, but list elements ${this.elementDtype}`);if(t<0||this.maxNumElements!==-1&&t>=this.maxNumElements)throw new Error(`Trying to set element ${t} in a list with max ${this.maxNumElements} elements.`);Ar(this.elementShape,n.shape,"TensorList shape mismatch: "),Ht(n),this.tensors[t]!=null&&(this.tensors[t].kept=!1),this.tensors[t]=n}gather(t,n,r){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);Ar(this.elementShape,r,"TensorList shape mismatch: "),t=t.slice(0,this.size());let s=rd(this.elementShape,this.tensors,r);return t.length===0?yn([],[0].concat(s)):O(()=>{let a=t.map(o=>W(this.tensors[o],s));return Dt(a,0)})}concat(t,n){if(t&&t!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${t}`);Ar(this.elementShape,n,"TensorList shape mismatch: ");let r=rd(this.elementShape,this.tensors,n);return this.size()===0?yn([],[0].concat(r)):O(()=>{let s=this.tensors.map(a=>W(a,r));return tt(s,0)})}};function Y5(e,t,n){let r=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let s=e.shape.slice(1);Ar(s,t,"TensorList shape mismatch: ");let a=pt(e);return new Jm(a,t,r)}function Z5(e,t,n,r){return new Jm([],e,t,r)}function J5(e,t,n,r){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let s=Math.max(...t);if(r!=null&&r!==-1&&s>=r)throw new Error(`Max index must be < array size (${s} vs. ${r})`);let a=new Jm([],n,e.dtype,r),o=pt(e,0);return t.forEach((i,u)=>{a.setItem(i,o[u])}),a}function Q5(e,t,n){let r=0,s=t.map(l=>(r+=l,r));if(r!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to tensor.shape[0], but sum of lengths is ${r}, and tensor's shape is: ${e.shape}`);let a=e.shape.slice(1),o=px(a,n),i=r===0?0:e.size/r,u=O(()=>{let l=[];e=W(e,[1,r,i]);for(let p=0;p{switch(e.op){case"If":case"StatelessIf":{let r=I("thenBranch",e,t,n),s=I("elseBranch",e,t,n),a=I("cond",e,t,n),o=I("args",e,t,n);return(await a.data())[0]?n.functionMap[r].executeFunctionAsync(o,n.tensorArrayMap,n.tensorListMap):n.functionMap[s].executeFunctionAsync(o,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let r=I("body",e,t,n),s=I("cond",e,t,n),a=I("args",e,t,n),o=await n.functionMap[s].executeFunctionAsync(a,n.tensorArrayMap,n.tensorListMap),i=a.map(l=>l.id),u=await o[0].data();o.forEach(l=>{!l.kept&&i.indexOf(l.id)===-1&&l.dispose()});let c=a;for(;u[0];){let l=c;c=await n.functionMap[r].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);let p=c.map(h=>h.id);l.forEach(h=>{!h.kept&&i.indexOf(h.id)===-1&&p.indexOf(h.id)===-1&&h.dispose()});let d=await n.functionMap[s].executeFunctionAsync(c,n.tensorArrayMap,n.tensorListMap);u=await d[0].data(),d.forEach(h=>{!h.kept&&i.indexOf(h.id)===-1&&p.indexOf(h.id)===-1&&h.dispose()})}return c}case"LoopCond":{let r=I("pred",e,t,n);return[Ts(r)]}case"Switch":{let r=I("pred",e,t,n),s=I("data",e,t,n);return s.kept||(s=Ts(s)),(await r.data())[0]?[void 0,s]:[s,void 0]}case"Merge":{let r=e.inputNames.find(s=>dn(s,t,n)!==void 0);if(r){let s=dn(r,t,n);return[Ts(s)]}return}case"Enter":{let r=I("frameName",e,t,n),s=I("tensor",e,t,n);return n.enterFrame(r),[Ts(s)]}case"Exit":{let r=I("tensor",e,t,n);return n.exitFrame(),[Ts(r)]}case"NextIteration":{let r=I("tensor",e,t,n);return n.nextIteration(),[Ts(r)]}case"TensorArrayV3":{let r=I("size",e,t,n),s=I("dtype",e,t,n),a=I("elementShape",e,t,n),o=I("dynamicSize",e,t,n),i=I("clearAfterRead",e,t,n),u=I("identicalElementShapes",e,t,n),c=I("name",e,t,n),l=new X5(c,s,r,a,u,o,i);return n.addTensorArray(l),[l.idTensor,xe(1)]}case"TensorArrayWriteV3":{let r=I("tensorArrayId",e,t,n),s=I("index",e,t,n),a=I("tensor",e,t,n),o=n.getTensorArray(r.id);return o.write(s,a),[o.idTensor]}case"TensorArrayReadV3":{let r=I("tensorArrayId",e,t,n),s=I("index",e,t,n);return[n.getTensorArray(r.id).read(s)]}case"TensorArrayGatherV3":{let r=I("tensorArrayId",e,t,n),s=I("indices",e,t,n),a=I("dtype",e,t,n);return[n.getTensorArray(r.id).gather(s,a)]}case"TensorArrayScatterV3":{let r=I("tensorArrayId",e,t,n),s=I("indices",e,t,n),a=I("tensor",e,t,n),o=n.getTensorArray(r.id);return o.scatter(s,a),[o.idTensor]}case"TensorArrayConcatV3":{let r=I("tensorArrayId",e,t,n),s=n.getTensorArray(r.id),a=I("dtype",e,t,n);return[s.concat(a)]}case"TensorArraySplitV3":{let r=I("tensorArrayId",e,t,n),s=I("tensor",e,t,n),a=I("lengths",e,t,n),o=n.getTensorArray(r.id);return o.split(a,s),[o.idTensor]}case"TensorArraySizeV3":{let r=I("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return[xe(s.size(),"int32")]}case"TensorArrayCloseV3":{let r=I("tensorArrayId",e,t,n),s=n.getTensorArray(r.id);return s.clearAndClose(),[s.idTensor]}case"TensorListSetItem":{let r=I("tensorListId",e,t,n),s=I("index",e,t,n),a=I("tensor",e,t,n),o=n.getTensorList(r.id);return o.setItem(s,a),[o.idTensor]}case"TensorListGetItem":{let r=I("tensorListId",e,t,n),s=I("index",e,t,n),a=I("elementShape",e,t,n),o=I("elementDType",e,t,n);return[n.getTensorList(r.id).getItem(s,a,o)]}case"TensorListScatterV2":case"TensorListScatter":{let r=I("indices",e,t,n),s=I("tensor",e,t,n),a=I("elementShape",e,t,n),o=I("numElements",e,t,n),i=J5(s,r,a,o);return n.addTensorList(i),[i.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let r=I("elementShape",e,t,n),s=I("elementDType",e,t,n),a;e.op==="TensorListReserve"?a="numElements":a="maxNumElements";let o=I(a,e,t,n),i=e.op==="TensorListReserve"?-1:o,u=Z5(r,s,o,i);return n.addTensorList(u),[u.idTensor]}case"TensorListGather":{let r=I("tensorListId",e,t,n),s=I("indices",e,t,n),a=I("elementShape",e,t,n),o=I("elementDType",e,t,n);return[n.getTensorList(r.id).gather(s,o,a)]}case"TensorListStack":{let r=I("tensorListId",e,t,n),s=I("elementShape",e,t,n),a=I("elementDType",e,t,n),o=I("numElements",e,t,n);return[n.getTensorList(r.id).stack(s,a,o)]}case"TensorListFromTensor":{let r=I("tensor",e,t,n),s=I("elementShape",e,t,n),a=I("elementDType",e,t,n),o=Y5(r,s,a);return n.addTensorList(o),[o.idTensor]}case"TensorListConcat":case"TensorListConcatV2":{let r=I("tensorListId",e,t,n),s=n.getTensorList(r.id),a=I("dtype",e,t,n),o=I("elementShape",e,t,n);return[s.concat(a,o)]}case"TensorListPushBack":{let r=I("tensorListId",e,t,n),s=I("tensor",e,t,n),a=n.getTensorList(r.id);return a.pushBack(s),[a.idTensor]}case"TensorListPopBack":{let r=I("tensorListId",e,t,n),s=I("elementShape",e,t,n),a=I("elementDType",e,t,n);return[n.getTensorList(r.id).popBack(s,a)]}case"TensorListSplit":{let r=I("tensor",e,t,n),s=I("elementShape",e,t,n),a=I("lengths",e,t,n),o=Q5(r,a,s);return n.addTensorList(o),[o.idTensor]}case"TensorListLength":{let r=I("tensorListId",e,t,n),s=n.getTensorList(r.id);return[xe(s.size(),"int32")]}case"TensorListResize":{let r=I("tensorListId",e,t,n),s=I("size",e,t,n),o=n.getTensorList(r.id).resize(s);return n.addTensorList(o),[o.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function d1(e,t,n){let[r,s]=I("fusedOps",e,t,n),a=r==="biasadd",o=!a,i=s==="prelu",u=r==="fusedbatchnorm",c=I("numArgs",e,t,n);if(a){if(i&&c!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&a&&c!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(u)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let l=I("strides",e,t,n),p=Yh(e,t,n),d=I("dataFormat",e,t,n).toUpperCase(),h=I("dilations",e,t,n),[f,g]=I("args",e,t,n);o&&(g=f,f=void 0);let m=I("leakyreluAlpha",e,t,n);return{stride:l,pad:p,dataFormat:d,dilations:h,biasArg:f,preluArg:g,activationFunc:s,leakyreluAlpha:m}}var tq=(e,t,n,r=an)=>{switch(e.op){case"Conv1D":{let s=I("stride",e,t,n),a=I("pad",e,t,n),o=I("dataFormat",e,t,n).toUpperCase(),i=I("dilation",e,t,n);return[r.conv1d(I("x",e,t,n),I("filter",e,t,n),s,a,o,i)]}case"Conv2D":{let s=I("strides",e,t,n),a=Yh(e,t,n),o=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[r.conv2d(I("x",e,t,n),I("filter",e,t,n),[s[1],s[2]],a,o,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:s,pad:a,dataFormat:o,dilations:i,biasArg:u,preluArg:c,activationFunc:l,leakyreluAlpha:p}=d1(e,t,n);return[r.fused.conv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[s[1],s[2]],pad:a,dataFormat:o,dilations:[i[1],i[2]],bias:u,activation:l,preluActivationWeights:c,leakyreluAlpha:p})]}case"FusedDepthwiseConv2dNative":{let{stride:s,pad:a,dataFormat:o,dilations:i,biasArg:u,preluArg:c,activationFunc:l,leakyreluAlpha:p}=d1(e,t,n);return[r.fused.depthwiseConv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[s[1],s[2]],pad:a,dataFormat:o,dilations:[i[1],i[2]],bias:u,activation:l,preluActivationWeights:c,leakyreluAlpha:p})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let s=I("outputShape",e,t,n),a=I("strides",e,t,n),o=Yh(e,t,n);return[r.conv2dTranspose(I("x",e,t,n),I("filter",e,t,n),s,[a[1],a[2]],o)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let s=I("strides",e,t,n),a=Yh(e,t,n),o=I("dilations",e,t,n),i=I("dataFormat",e,t,n).toUpperCase();return[r.depthwiseConv2d(I("input",e,t,n),I("filter",e,t,n),[s[1],s[2]],a,i,[o[1],o[2]])]}case"Conv3D":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[r.conv3d(I("x",e,t,n),I("filter",e,t,n),[s[1],s[2],s[3]],a,o,[i[1],i[2],i[3]])]}case"AvgPool":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("kernelSize",e,t,n);return[r.avgPool(I("x",e,t,n),[o[1],o[2]],[s[1],s[2]],a)]}case"MaxPool":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("kernelSize",e,t,n);return[r.maxPool(I("x",e,t,n),[o[1],o[2]],[s[1],s[2]],a)]}case"MaxPoolWithArgmax":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("kernelSize",e,t,n),i=I("includeBatchInIndex",e,t,n),{result:u,indexes:c}=r.maxPoolWithArgmax(I("x",e,t,n),[o[1],o[2]],[s[1],s[2]],a,i);return[u,c]}case"AvgPool3D":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("kernelSize",e,t,n);return[r.avgPool3d(I("x",e,t,n),[o[1],o[2],o[3]],[s[1],s[2],s[3]],a)]}case"MaxPool3D":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("kernelSize",e,t,n);return[r.maxPool3d(I("x",e,t,n),[o[1],o[2],o[3]],[s[1],s[2],s[3]],a)]}case"Dilation2D":{let s=I("strides",e,t,n),a=I("pad",e,t,n),o=I("dilations",e,t,n),i=s[1],u=s[2],c=o[1],l=o[2];return[r.dilation2d(I("x",e,t,n),I("filter",e,t,n),[i,u],a,[c,l],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},nq=(e,t,n,r=an)=>{switch(e.op){case"Fill":{let s=I("shape",e,t,n),a=I("dtype",e,t,n),o=I("value",e,t,n);return[r.fill(s,o,a)]}case"LinSpace":{let s=I("start",e,t,n),a=I("stop",e,t,n),o=I("num",e,t,n);return[r.linspace(s,a,o)]}case"Multinomial":{let s=I("logits",e,t,n),a=I("numSamples",e,t,n),o=I("seed",e,t,n);return[r.multinomial(s,a,o)]}case"OneHot":{let s=I("indices",e,t,n),a=I("depth",e,t,n),o=I("onValue",e,t,n),i=I("offValue",e,t,n),u=I("dtype",e,t,n);return[r.oneHot(s,a,o,i,u)]}case"Ones":return[r.ones(I("shape",e,t,n),I("dtype",e,t,n))];case"OnesLike":return[r.onesLike(I("x",e,t,n))];case"RandomStandardNormal":return[r.randomStandardNormal(I("shape",e,t,n),I("dtype",e,t,n),I("seed",e,t,n))];case"RandomUniform":return[r.randomUniform(I("shape",e,t,n),I("minval",e,t,n),I("maxval",e,t,n),I("dtype",e,t,n))];case"RandomUniformInt":return[r.randomUniformInt(I("shape",e,t,n),I("minval",e,t,n),I("maxval",e,t,n),I("seed",e,t,n))];case"Range":{let s=I("start",e,t,n),a=I("stop",e,t,n),o=I("step",e,t,n);return[r.range(s,a,o,I("dtype",e,t,n))]}case"TruncatedNormal":{let s=I("shape",e,t,n),a=I("mean",e,t,n),o=I("stdDev",e,t,n),i=I("seed",e,t,n);return[r.truncatedNormal(s,a,o,I("dtype",e,t,n),i)]}case"Zeros":return[r.zeros(I("shape",e,t,n),I("dtype",e,t,n))];case"ZerosLike":return[r.zerosLike(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Sv(e,t,n){let r=I("boxes",e,t,n),s=I("scores",e,t,n),a=I("maxOutputSize",e,t,n),o=I("iouThreshold",e,t,n),i=I("scoreThreshold",e,t,n),u=I("softNmsSigma",e,t,n);return{boxes:r,scores:s,maxOutputSize:a,iouThreshold:o,scoreThreshold:i,softNmsSigma:u}}var rq=async(e,t,n,r,s=an)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:u,scoreThreshold:c,softNmsSigma:l}=Sv(e,t,n),p=await s.image.nonMaxSuppressionWithScoreAsync(a,o,i,u,c,l);return[p.selectedIndices,p.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:u,scoreThreshold:c}=Sv(e,t,n),l=I("padToMaxOutputSize",e,t,n),p=await s.image.nonMaxSuppressionPaddedAsync(a,o,i,u,c,l);return[p.selectedIndices,p.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:u,scoreThreshold:c}=Sv(e,t,n);return[await s.image.nonMaxSuppressionAsync(a,o,i,u,c)]}case"Where":{let a=s.cast(I("condition",e,t,n),"bool"),o=[await s.whereAsync(a)];return a.dispose(),o}case"ListDiff":return s.setdiff1dAsync(I("x",e,t,n),I("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},sq=(e,t,n,r=an)=>{switch(e.op){case"LowerBound":{let s=I("sortedSequence",e,t,n),a=I("values",e,t,n);return[r.lowerBound(s,a)]}case"TopKV2":{let s=I("x",e,t,n),a=I("k",e,t,n),o=I("sorted",e,t,n),i=r.topk(s,a,o);return[i.values,i.indices]}case"UpperBound":{let s=I("sortedSequence",e,t,n),a=I("values",e,t,n);return[r.upperBound(s,a)]}case"Unique":{let s=I("x",e,t,n),a=r.unique(s);return[a.values,a.indices]}case"UniqueV2":{let s=I("x",e,t,n),a=I("axis",e,t,n),o=r.unique(s,a);return[o.values,o.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},aq=(e,t,n,r=an)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let s=I("default",e,t,n);return[dn(e.name,t,n)||s];case"Placeholder":return[dn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let l=I("x",e,t,n);return[Ts(l)]}case"IdentityN":return I("x",e,t,n).map(l=>Ts(l));case"Snapshot":let a=I("x",e,t,n);return[Ts(a)];case"Shape":return[r.tensor1d(I("x",e,t,n).shape,"int32")];case"ShapeN":return I("x",e,t,n).map(l=>r.tensor1d(l.shape));case"Size":return[r.scalar(I("x",e,t,n).size,"int32")];case"Rank":return[r.scalar(I("x",e,t,n).rank,"int32")];case"NoOp":return[r.scalar(1)];case"Print":let o=I("x",e,t,n),i=I("data",e,t,n),u=I("message",e,t,n),c=I("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(u);for(let l=0;le.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return xe(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),O(()=>{let r=pt(t),s=n.length,a=r.length;w.assert(s===a,()=>`The number of elements doesn't match, keys has ${s} elements, the values has ${a} elements.`);for(let o=0;o{let r=[];for(let s=0;s{switch(e.op){case"HashTable":case"HashTableV2":{let s=r.getHashTableHandleByName(e.name);if(s!=null)return[s];{let a=I("keyDType",e,t,n),o=I("valueDType",e,t,n),i=new oq(a,o);return r.addHashTable(e.name,i),[i.handle]}}case"InitializeTable":case"InitializeTableV2":case"LookupTableImport":case"LookupTableImportV2":{let s=I("tableHandle",e,t,n,r),a=I("keys",e,t,n),o=I("values",e,t,n);return[await r.getHashTableById(s.id).import(a,o)]}case"LookupTableFind":case"LookupTableFindV2":{let s=I("tableHandle",e,t,n,r),a=I("keys",e,t,n),o=I("defaultValue",e,t,n);return[await r.getHashTableById(s.id).find(a,o)]}case"LookupTableSize":case"LookupTableSizeV2":{let s=I("tableHandle",e,t,n,r);return[r.getHashTableById(s.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},uq=(e,t,n,r=an)=>{switch(e.op){case"ResizeBilinear":{let s=I("images",e,t,n),a=I("size",e,t,n),o=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[r.image.resizeBilinear(s,[a[0],a[1]],o,i)]}case"ResizeNearestNeighbor":{let s=I("images",e,t,n),a=I("size",e,t,n),o=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[r.image.resizeNearestNeighbor(s,[a[0],a[1]],o,i)]}case"CropAndResize":{let s=I("image",e,t,n),a=I("boxes",e,t,n),o=I("boxInd",e,t,n),i=I("cropSize",e,t,n),u=I("method",e,t,n),c=I("extrapolationValue",e,t,n);return[r.image.cropAndResize(s,a,o,i,u,c)]}case"ImageProjectiveTransformV3":{let s=I("images",e,t,n),a=I("transforms",e,t,n),o=I("outputShape",e,t,n),i=I("fillValue",e,t,n),u=I("interpolation",e,t,n),c=I("fillMode",e,t,n);return[r.image.transform(s,a,u.toLowerCase(),c.toLowerCase(),i,o)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},cq=(e,t,n,r=an)=>{switch(e.op){case"Equal":return[r.equal(I("a",e,t,n),I("b",e,t,n))];case"NotEqual":return[r.notEqual(I("a",e,t,n),I("b",e,t,n))];case"Greater":return[r.greater(I("a",e,t,n),I("b",e,t,n))];case"GreaterEqual":return[r.greaterEqual(I("a",e,t,n),I("b",e,t,n))];case"Less":return[r.less(I("a",e,t,n),I("b",e,t,n))];case"LessEqual":return[r.lessEqual(I("a",e,t,n),I("b",e,t,n))];case"LogicalAnd":return[r.logicalAnd(I("a",e,t,n),I("b",e,t,n))];case"LogicalNot":return[r.logicalNot(I("a",e,t,n))];case"LogicalOr":return[r.logicalOr(I("a",e,t,n),I("b",e,t,n))];case"Select":case"SelectV2":return[r.where(I("condition",e,t,n),I("a",e,t,n),I("b",e,t,n))];case"BitwiseAnd":return[r.bitwiseAnd(I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},lq=(e,t,n,r=an)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[r.matMul(I("a",e,t,n),I("b",e,t,n),I("transposeA",e,t,n),I("transposeB",e,t,n))];case"Einsum":return[r.einsum(I("equation",e,t,n),...I("tensors",e,t,n))];case"Transpose":return[r.transpose(I("x",e,t,n),I("perm",e,t,n))];case"_FusedMatMul":let[s,a]=I("fusedOps",e,t,n),o=s==="biasadd",i=a==="prelu",u=I("numArgs",e,t,n),c=I("leakyreluAlpha",e,t,n);if(o){if(i&&u!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&u!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[l,p]=I("args",e,t,n);return[r.fused.matMul({a:I("a",e,t,n),b:I("b",e,t,n),transposeA:I("transposeA",e,t,n),transposeB:I("transposeB",e,t,n),bias:l,activation:a,preluActivationWeights:p,leakyreluAlpha:c})];case"MatrixBandPart":return[r.linalg.bandPart(I("a",e,t,n),I("numLower",e,t,n),I("numUpper",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},dq=(e,t,n,r=an)=>{switch(e.op){case"EuclideanNorm":return[r.euclideanNorm(I("x",e,t,n),I("axis",e,t,n),I("keepDims",e,t,n))];case"FusedBatchNorm":case"FusedBatchNormV2":return[r.batchNorm(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"FusedBatchNormV3":return[r.batchNorm(I("x",e,t,n),I("mean",e,t,n),I("variance",e,t,n),I("offset",e,t,n),I("scale",e,t,n),I("epsilon",e,t,n))];case"LRN":return[r.localResponseNormalization(I("x",e,t,n),I("radius",e,t,n),I("bias",e,t,n),I("alpha",e,t,n),I("beta",e,t,n))];case"Softmax":return[r.softmax(I("x",e,t,n))];case"LogSoftmax":return[r.logSoftmax(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},pq=(e,t,n,r=an)=>{switch(e.op){case"RaggedGather":{let{outputNestedSplits:s,outputDenseValues:a}=r.raggedGather(I("paramsNestedSplits",e,t,n),I("paramsDenseValues",e,t,n),I("indices",e,t,n),I("outputRaggedRank",e,t,n));return s.concat(a)}case"RaggedRange":{let{rtNestedSplits:s,rtDenseValues:a}=r.raggedRange(I("starts",e,t,n),I("limits",e,t,n),I("splits",e,t,n));return[s,a]}case"RaggedTensorToTensor":return[r.raggedTensorToTensor(I("shape",e,t,n),I("values",e,t,n),I("defaultValue",e,t,n),I("rowPartitionTensors",e,t,n),I("rowPartitionTypes",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},hq=(e,t,n,r=an)=>{switch(e.op){case"Max":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.max(I("x",e,t,n),i,u)]}case"Mean":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.mean(I("x",e,t,n),i,u)]}case"Min":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.min(I("x",e,t,n),i,u)]}case"Sum":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.sum(I("x",e,t,n),i,u)]}case"All":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.all(I("x",e,t,n),i,u)]}case"Any":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.any(I("x",e,t,n),i,u)]}case"ArgMax":{let i=I("axis",e,t,n);return[r.argMax(I("x",e,t,n),i)]}case"ArgMin":{let i=I("axis",e,t,n);return[r.argMin(I("x",e,t,n),i)]}case"Prod":{let i=I("axis",e,t,n),u=I("keepDims",e,t,n);return[r.prod(I("x",e,t,n),i,u)]}case"Cumprod":{let i=I("axis",e,t,n),u=I("exclusive",e,t,n),c=I("reverse",e,t,n);return[r.cumprod(I("x",e,t,n),i,u,c)]}case"Cumsum":{let i=I("axis",e,t,n),u=I("exclusive",e,t,n),c=I("reverse",e,t,n);return[r.cumsum(I("x",e,t,n),i,u,c)]}case"Bincount":let s=I("x",e,t,n),a=I("weights",e,t,n),o=I("size",e,t,n);return[r.bincount(s,a,o)];case"DenseBincount":{let i=I("x",e,t,n),u=I("weights",e,t,n),c=I("size",e,t,n),l=I("binaryOutput",e,t,n);return[r.denseBincount(i,u,c,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},fq=(e,t,n,r=an)=>{switch(e.op){case"ConcatV2":case"Concat":{let s=I("n",e,t,n),a=I("axis",e,t,n),o=I("tensors",e,t,n);return o=o.slice(0,s),[r.concat(o,a)]}case"Gather":{let s=I("x",e,t,n),a=I("indices",e,t,n);return[r.gather(s,r.cast(a,"int32"),0)]}case"GatherV2":{let s=I("axis",e,t,n),a=I("batchDims",e,t,n),o=I("x",e,t,n),i=I("indices",e,t,n);return[r.gather(o,r.cast(i,"int32"),s,a)]}case"Reverse":{let s=I("dims",e,t,n),a=[];for(let i=0;i{let s=I("axis",e,t,n),a=I("tensors",e,t,n),o=a[0].shape,i=r.squeeze(a[0]).shape,u=a.map(c=>{let l=w.arraysEqual(c.shape,o);if(!l&&!w.arraysEqual(r.squeeze(c).shape,i))throw new Error("the input tensors shape does not match");return l?c:r.reshape(c,o)});return[r.stack(u,s)]});case"Unpack":{let s=I("axis",e,t,n),a=I("tensor",e,t,n);return r.unstack(a,s)}case"Tile":{let s=I("reps",e,t,n);return[r.tile(I("x",e,t,n),s)]}case"Split":case"SplitV":{let s=I("axis",e,t,n),a=I("numOrSizeSplits",e,t,n),o=I("x",e,t,n);return r.split(o,a,s)}case"ScatterNd":{let s=I("indices",e,t,n),a=I("values",e,t,n),o=I("shape",e,t,n);return[r.scatterND(s,a,o)]}case"GatherNd":{let s=I("x",e,t,n),a=I("indices",e,t,n);return[r.gatherND(s,a)]}case"SparseToDense":{let s=I("sparseIndices",e,t,n),a=I("outputShape",e,t,n),o=I("sparseValues",e,t,n),i=I("defaultValue",e,t,n);return[r.sparseToDense(s,o,a,o.dtype===i.dtype?i:r.cast(i,o.dtype))]}case"TensorScatterUpdate":{let s=I("indices",e,t,n),a=I("values",e,t,n),o=I("tensor",e,t,n);return[r.tensorScatterUpdate(o,s,a)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},mq=(e,t,n,r=an)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:s,outputValues:a,emptyRowIndicator:o,reverseIndexMap:i}=r.sparse.sparseFillEmptyRows(I("indices",e,t,n),I("values",e,t,n),I("denseShape",e,t,n),I("defaultValue",e,t,n));return[s,a,o,i]}case"SparseReshape":{let{outputIndices:s,outputShape:a}=r.sparse.sparseReshape(I("inputIndices",e,t,n),I("inputShape",e,t,n),I("newShape",e,t,n));return[s,a]}case"SparseSegmentMean":return[r.sparse.sparseSegmentMean(I("data",e,t,n),I("indices",e,t,n),I("segmentIds",e,t,n))];case"SparseSegmentSum":return[r.sparse.sparseSegmentSum(I("data",e,t,n),I("indices",e,t,n),I("segmentIds",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},gq=(e,t,n,r=an)=>{switch(e.op){case"FFT":return[r.fft(I("x",e,t,n))];case"IFFT":return[r.ifft(I("x",e,t,n))];case"RFFT":return[r.rfft(I("x",e,t,n))];case"IRFFT":return[r.irfft(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},bq=(e,t,n,r=an)=>{switch(e.op){case"StaticRegexReplace":return[r.string.staticRegexReplace(I("input",e,t,n),I("pattern",e,t,n),I("rewrite",e,t,n),I("replaceGlobal",e,t,n))];case"StringNGrams":{let{nGrams:s,nGramsSplits:a}=r.string.stringNGrams(I("data",e,t,n),I("dataSplits",e,t,n),I("separator",e,t,n),I("nGramWidths",e,t,n),I("leftPad",e,t,n),I("rightPad",e,t,n),I("padWidth",e,t,n),I("preserveShortSequences",e,t,n));return[s,a]}case"StringSplit":{let{indices:s,values:a,shape:o}=r.string.stringSplit(I("input",e,t,n),I("delimiter",e,t,n),I("skipEmpty",e,t,n));return[s,a,o]}case"StringToHashBucketFast":return[r.string.stringToHashBucketFast(I("input",e,t,n),I("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},yq=(e,t,n,r=an)=>{switch(e.op){case"Cast":return[r.cast(I("x",e,t,n),I("dtype",e,t,n))];case"ExpandDims":{let s=I("axis",e,t,n);return[r.expandDims(I("x",e,t,n),s)]}case"Squeeze":{let s=I("axis",e,t,n);return[r.squeeze(I("x",e,t,n),s)]}case"Reshape":return[r.reshape(I("x",e,t,n),I("shape",e,t,n))];case"EnsureShape":return[r.ensureShape(I("x",e,t,n),I("shape",e,t,n))];case"MirrorPad":return[r.mirrorPad(I("x",e,t,n),I("padding",e,t,n),I("mode",e,t,n))];case"PadV2":case"Pad":return[r.pad(I("x",e,t,n),I("padding",e,t,n),I("constantValue",e,t,n))];case"SpaceToBatchND":{let s=I("blockShape",e,t,n),a=I("paddings",e,t,n);return[r.spaceToBatchND(I("x",e,t,n),s,a)]}case"BatchToSpaceND":{let s=I("blockShape",e,t,n),a=I("crops",e,t,n);return[r.batchToSpaceND(I("x",e,t,n),s,a)]}case"DepthToSpace":{let s=I("blockSize",e,t,n),a=I("dataFormat",e,t,n).toUpperCase();return[r.depthToSpace(I("x",e,t,n),s,a)]}case"BroadcastTo":return[r.broadcastTo(I("x",e,t,n),I("shape",e,t,n))];case"BroadcastArgs":return[r.broadcastArgs(I("s0",e,t,n),I("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function p1(e,t,n,r,s=O){let a=((o,i,u)=>{switch(o.category){case"arithmetic":return s(()=>q5(o,i,u));case"basic_math":return s(()=>K5(o,i,u));case"control":return eq(o,i,u);case"convolution":return s(()=>tq(o,i,u));case"creation":return s(()=>nq(o,i,u));case"dynamic":return rq(o,i,u);case"evaluation":return s(()=>sq(o,i,u));case"image":return s(()=>uq(o,i,u));case"graph":return s(()=>aq(o,i,u));case"logical":return s(()=>cq(o,i,u));case"matrices":return s(()=>lq(o,i,u));case"normalization":return s(()=>dq(o,i,u));case"ragged":return s(()=>pq(o,i,u));case"reduction":return s(()=>hq(o,i,u));case"slice_join":return s(()=>fq(o,i,u));case"sparse":return s(()=>mq(o,i,u));case"spectral":return s(()=>gq(o,i,u));case"string":return s(()=>bq(o,i,u));case"transformation":return s(()=>yq(o,i,u));case"hash_table":return iq(o,i,u,r);case"custom":let c=i_(o.op);if(c&&c.customExecutor)return c.customExecutor(new j5(o,i,u));throw TypeError(`Custom op ${o.op} is not registered.`);default:throw TypeError(`Unknown op '${o.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 w.isPromise(a)?a.then(o=>[].concat(o)):[].concat(a)}var h1=class{constructor(e={},t={},n={},r={},s){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.parseNodeNameCache=s,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 f1(e,t,n,r){let s=new Set,a=[],o=null,i=null,u=new Set,c=new Set(Object.keys(e).map(d=>Jn(d)[0]));r=r||[];let l=new Set(r.map(d=>Jn(d.name)[0])),p=[...t];for(;p.length>0;){let d=p.pop();if((to(d)||Tq(d)||Nq(d))&&o==null&&(o=d,i=o.children.map(h=>h.name).filter(h=>s.has(h))),s.add(d.name),n[d.name]==null&&!c.has(d.name)&&!l.has(d.name)){if(d.inputs.length===0){a.push(d.name);continue}d.inputs.forEach(h=>{u.has(h.name)||(u.add(h.name),p.push(h))})}}return{inputs:e,outputs:t,usedNodes:s,missingInputs:a,dynamicNode:o,syncInputs:i}}function vq(e,t){let{usedNodes:n,inputs:r}=t,s=Object.keys(r).map(m=>Jn(m)[0]).map(m=>e.nodes[m]),a=e.initNodes||[],o=m=>n.has(typeof m=="string"?m:m.name);function i(m){return[...new Map(m.map(b=>[b.name,b])).values()]}let u=i([...s,...e.weights,...a]).filter(o),c=i([...u,...Object.values(e.nodes)]).filter(o),l=new Map(c.map(m=>[m.name,m])),p={};for(let m of c){p[m.name]=p[m.name]||0;for(let b of m.children)o(b)||(p[b.name]=Number.POSITIVE_INFINITY),p[b.name]=(p[b.name]||0)+1}let d=Object.entries(p).filter(([,m])=>m===0).map(([m])=>m),h=[...d];for(;d.length>0;){let m=d.pop(),b=l.get(m);for(let y of b.children.filter(o))--p[y.name]===0&&(h.push(y.name),d.push(y.name))}let f=h.map(m=>l.get(m)),g=xq(f,u);return wq(g,u),g}function xq(e,t){let n=new Map(e.map(o=>[o.name,o])),r=t.map(o=>o.name),s=new Set(r);for(;r.length>0;){let o=r.pop(),i=n.get(o);for(let u of i.children)!n.has(u.name)||s.has(u.name)||(s.add(u.name),r.push(u.name))}return e.filter(o=>s.has(o.name))}var zh=class extends Error{constructor(e){super(`NodesExecutionOrderError: ${e}`)}};function wq(e,t){let n=new Map(e.map((i,u)=>[i.name,u])),r=new Set(t.map(i=>i.name)),s=i=>r.has(typeof i=="string"?i:i.name),a=new Set(e.map(i=>i.name)),o=i=>a.has(typeof i=="string"?i:i.name);for(let i of e){for(let u of i.children.filter(o)){if(!n.has(u.name))throw new zh(`Child ${u.name} of node ${i.name} is unreachable.`);if(n.get(i.name)>n.get(u.name))throw new zh(`Node ${i.name} is scheduled to run after its child ${u.name}.`)}if(!s(i))for(let u of i.inputs){if(!n.has(u.name))throw new zh(`Input ${u.name} of node ${i.name} is unreachable.`);if(n.get(u.name)>n.get(i.name))throw new zh(`Node ${i.name} is scheduled to run before its input ${u.name}.`)}}}function Iq(e){let t=new Map(e.map((i,u)=>[i.name,u])),n=Number.MAX_SAFE_INTEGER,r=e.map((i,u)=>to(i)?n:u),s=i=>{let u=r[t.get(i.name)];return u==null?-1:u},a=e.map((i,u)=>i.children.map(s).reduce((c,l)=>Math.max(c,l),r[u])),o=new Map;for(let i=0;it[r].map(s=>s.id));this._weightIds=[].concat(...n),this._weightMap=t}set resourceManager(t){this._resourceManager=t}get inputs(){return this._inputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(t=>({name:t.name,shape:t.attrParams.shape?t.attrParams.shape.value:void 0,dtype:t.attrParams.dtype?t.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(t=>t.signatureKey||t.name)}get outputNodes(){return this._outputs.map(t=>{let n=t.signatureKey||t.name;return t.defaultOutput?`${n}:${t.defaultOutput}`:n})}get functions(){return Object.keys(this._functions).reduce((t,n)=>(t[n]=this._functions[n].signature,t),{})}constructor(t,n){this.graph=t,this.parent=n,this.compiledMap=new Map,this.parseNodeNameCache=new Map,this._weightMap={},this.SEPARATOR=",",this._functions={},this._functionExecutorMap={},this.keepIntermediateTensors=!1,this._outputs=t.outputs,this._inputs=t.inputs,this._initNodes=t.initNodes,this._signature=t.signature,this._functions=t.functions,t.functions!=null&&Object.keys(t.functions).forEach(r=>{this._functionExecutorMap[r]=new E_(t.functions[r],this)})}getCompilationKey(t,n){let r=t.map(a=>a.name).sort(),s=n.map(a=>a.name).sort();return r.join(this.SEPARATOR)+"--"+s.join(this.SEPARATOR)}compile(t,n){let r=f1(t,n,this.weightMap,this._initNodes),{missingInputs:s,dynamicNode:a,syncInputs:o}=r;if(a!=null)throw new Error(`This execution contains the node '${a.name}', which has the dynamic op '${a.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${o}]`);if(s.length>0){let c=n.map(p=>p.name),l=Object.keys(t);throw new Error(`Cannot compute the outputs [${c}] from the provided inputs [${l}]. Missing the following inputs: [${s}]`)}let i=vq(this.graph,r),u=Iq(i);return{orderedNodes:i,nodeLiveUntilMap:u}}cloneAndKeepTensor(t){if(t==null)return null;let n=t.clone();return Ht(n),n}cloneTensorList(t){return t?t.map(r=>this.cloneAndKeepTensor(r)):null}cloneTensorMap(t){return Object.fromEntries(Object.entries(t).map(([n,r])=>[n,this.cloneTensorList(r)]))}execute(t,n){this.disposeIntermediateTensors(),t=this.mapInputs(t);let r=Object.keys(t).sort();this.checkInputs(t),this.checkInputShapeAndType(t),n=this.mapOutputs(n),this.checkOutputs(n);let s=r.map(d=>this.graph.nodes[Jn(d)[0]]),a=n.map(d=>Jn(d)[0]),o=new Set(a),i=a.map(d=>this.graph.nodes[d]);i.length===0&&(i=this._outputs);let u=this.getCompilationKey(s,i),c=this.compiledMap.get(u);c==null&&(c=this.compile(t,i),this.compiledMap.set(u,c));try{this.keepIntermediateTensors=G().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let l={},p={};return O(()=>{let d=new h1(this.weightMap,l,p,this.functionExecutorMap,this.parseNodeNameCache),h=Object.assign({},this.weightMap);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap)),Object.keys(t).forEach(b=>{let[y,v]=Jn(b,d),x=[];x[v]=t[b],h[y]=x,this.keepIntermediateTensors&&(this.clonedTensorsMap[y]=this.cloneTensorList(x))});let f=this.getFrozenTensorIds(h),{orderedNodes:g,nodeLiveUntilMap:m}=c;for(let b of g){if(h[b.name])continue;let y=p1(b,h,d,this._resourceManager);if(w.isPromise(y))throw new Error(`The execution of the op '${b.op}' returned a promise. Please use model.executeAsync() instead.`);h[b.name]=y,this.keepIntermediateTensors&&(this.clonedTensorsMap[b.name]=this.cloneTensorList(y)),this.checkTensorForDisposalWithNodeLiveUntilInfo(b,h,d,f,o,m.get(b.name))}return this.parent==null&&d.dispose(f),n.map(b=>dn(b,h,d))})}getFrozenTensorIds(t){let n=[].concat.apply([],Object.keys(t).map(r=>t[r]).map(r=>r.map(s=>s.id)));return new Set(n)}checkTensorForDisposal(t,n,r,s,a,o,i){if(!(to(n)||o.has(t))){for(let u of r[t])u!=null&&(i[u.id]=(i[u.id]||0)+n.children.length);for(let u of n.inputs){if(to(u))continue;let c=i1(u.name,r,s);if(c!=null)for(let l of c){if(!l||l.kept||a.has(l.id))continue;let p=i[l.id];p===1?(l.dispose(),delete i[l.id]):p!=null&&i[l.id]--}}}}checkTensorForDisposalWithNodeLiveUntilInfo(t,n,r,s,a,o){function i(u){return to(u)||a.has(u.name)}if(!(to(t)||o==null))for(let u of o){if(i(u))continue;let c=i1(u.name,n,r);for(let l of c)!l||l.kept||s.has(l.id)||l.dispose()}}async executeAsync(t,n){return this._executeAsync(t,n)}disposeIntermediateTensors(){this.clonedTensorsMap&&(Object.values(this.clonedTensorsMap).forEach(t=>{for(let n of t)n&&!n.isDisposed&&n.dispose()}),this.clonedTensorsMap=null)}getIntermediateTensors(){return this.clonedTensorsMap}async _executeAsync(t,n,r=!1,s={},a={}){this.disposeIntermediateTensors(),r||(t=this.mapInputs(t),this.checkInputs(t),this.checkInputShapeAndType(t),n=this.mapOutputs(n),this.checkOutputs(n));try{this.keepIntermediateTensors=G().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(d){this.keepIntermediateTensors=!1,console.warn(d.message)}let o=new h1(this.weightMap,s,a,this.functionExecutorMap,this.parseNodeNameCache);this.keepIntermediateTensors&&(this.clonedTensorsMap=this.cloneTensorMap(this.weightMap));let i=await this.executeWithControlFlow(t,o,n,r),u=n.map(d=>dn(d,i,o)),c=u.map(d=>d.id),l=Object.keys(t).map(d=>t[d].id),p=new Set([...c,...l,...this.weightIds]);return Object.values(i).forEach(d=>{d.forEach(h=>{h&&!h.isDisposed&&!p.has(h.id)&&h.dispose()})}),this.parent==null&&o.dispose(p),u}async executeFunctionAsync(t,n,r){let s=t.reduce((a,o,i)=>(a[this.inputs[i].name]=o,a),{});return this._executeAsync(s,this.outputNodes,!0,n,r)}async executeWithControlFlow(t,n,r,s){let a=Object.keys(t),o=a.map(x=>this.graph.nodes[Jn(x)[0]]),i=r.map(x=>Jn(x)[0]),u=new Set(i),c=i.map(x=>this.graph.nodes[x]);c.length===0&&(c=this._outputs);let{usedNodes:l,missingInputs:p,dynamicNode:d,syncInputs:h}=f1(t,c,this.weightMap,this._initNodes),f=[...o,...this.graph.weights,...this._initNodes||[]].map(x=>({node:x,contexts:n.currentContext})),g=Object.assign({},this.weightMap);Object.keys(t).forEach(x=>{let[k,S]=Jn(x),N=[];N[S]=t[x],g[k]=N});let m={},b=this.getFrozenTensorIds(g),y={};for(;f.length>0;){let x=this.processStack(o,f,n,g,y,b,u,m,l);await Promise.all(x)}d==null&&!s&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let v=c.filter(x=>!to(x)&&!dn(x.name,g,n)).map(x=>x.name);if(v.length>0){let x="";throw d!=null&&(x=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${h}]`),new Error(`Cannot compute the outputs [${v}] from the provided inputs [${a}]. Consider providing the following inputs: [${p}]. ${x}`)}return g}processStack(t,n,r,s,a,o,i,u,c){let l=[];for(;n.length>0;){let p=n.pop();r.currentContext=p.contexts;let d="";if(p.node.op==="Enter"&&I("isConstant",p.node,s,r)&&([d]=Cs(p.node.name,r)),s[p.node.name]==null){let h=p1(p.node,s,r,this._resourceManager);d||([d]=Cs(p.node.name,r));let f=r.currentContext;w.isPromise(h)?l.push(h.then(g=>(s[d]=g,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(g)),r.currentContext=f,this.checkTensorForDisposal(d,p.node,s,r,o,i,u),this.processChildNodes(p.node,n,r,s,a,c),g))):(s[d]=h,this.keepIntermediateTensors&&(this.clonedTensorsMap[d]=this.cloneTensorList(h)),this.checkTensorForDisposal(d,p.node,s,r,o,i,u),this.processChildNodes(p.node,n,r,s,a,c))}else this.processChildNodes(p.node,n,r,s,a,c)}return l}processChildNodes(t,n,r,s,a,o){t.children.forEach(i=>{let[u]=Cs(i.name,r);a[u]||!o.has(i.name)||(i.op==="Merge"?i.inputNames.some(c=>!!dn(c,s,r))&&(a[u]=!0,n.push({contexts:r.currentContext,node:i})):i.inputNames.every(c=>!!dn(c,s,r))&&(a[u]=!0,n.push({contexts:r.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(t=>this.weightMap[t].forEach(n=>n.dispose()))}checkInputShapeAndType(t){Object.keys(t).forEach(n=>{let r=t[n],[s]=Jn(n),a=this.graph.nodes[s];if(a.attrParams.shape&&a.attrParams.shape.value){let o=a.attrParams.shape.value,i=o.length===r.shape.length&&r.shape.every((u,c)=>o[c]===-1||o[c]===u);w.assert(i,()=>`The shape of dict['${a.name}'] provided in model.execute(dict) must be [${o}], but was [${r.shape}]`)}a.attrParams.dtype&&a.attrParams.dtype.value&&w.assert(r.dtype===a.attrParams.dtype.value,()=>`The dtype of dict['${a.name}'] provided in model.execute(dict) must be ${a.attrParams.dtype.value}, but was ${r.dtype}`)})}mapInputs(t){var n,r;let s={};for(let a in t){let o=(r=(n=this._signature)===null||n===void 0?void 0:n.inputs)===null||r===void 0?void 0:r[a];o!=null?s[o.name]=t[a]:s[a]=t[a]}return s}checkInputs(t){let n=Object.keys(t).filter(r=>{let[s]=Jn(r);return this.graph.nodes[s]==null});if(n.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${n}] that are not part of graph`)}mapOutputs(t){return t.map(n=>{var r,s;let a=(s=(r=this._signature)===null||r===void 0?void 0:r.outputs)===null||s===void 0?void 0:s[n];return a!=null?a.name:n},{})}checkOutputs(t){t.forEach(n=>{let[r]=Jn(n);if(!this.graph.nodes[r])throw new Error(`The output '${n}' is not found in the graph`)})}},_q=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]}},Eq="?tfjs-format=file",Aq="model.json",Bk=class{get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}constructor(e,t={},n=jt){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=n,t==null&&(this.loadOptions={}),this.resourceManager=new _q}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 w.isPromise(e)?e.then(t=>t.getWeightStream==null?this.loadSync(t):this.loadStreaming(t)):this.loadSync(e)}loadSync(e){let t=this.io.decodeWeights(e.weightData,e.weightSpecs);return this.loadWithWeightMap(e,t)}async loadStreaming(e){if(e.getWeightStream==null)throw new Error("Model artifacts missing streamWeights function");let t=await RC(e.getWeightStream(),e.weightSpecs);return this.loadWithWeightMap(e,t)}loadWithWeightMap(e,t){this.artifacts=e;let n=this.artifacts.modelTopology,r=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(r=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}if(this.signature=r,this.version=`${n.versions.producer}.${n.versions.minConsumer}`,this.executor=new m1(u1.Instance.transformGraph(n,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(t),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=u1.Instance.transformGraph(e.modelInitializer);this.initializer=new m1(s),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializerSignature=e.initializerSignature}return!0}async save(e,t){if(typeof e=="string"){let n=this.io.getSaveHandlers(e);if(n.length===0)throw new Error(`Cannot find any save handlers for URL '${e}'`);if(n.length>1)throw new Error(`Found more than one (${n.length}) save handlers for URL '${e}'`);e=n[0]}if(e.save==null)throw new Error("GraphModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");return e.save(this.artifacts)}addStructuredOutputNames(e){if(this.structuredOutputKeys){let t=e instanceof Ne?[e]:e,n={};return t.forEach((r,s)=>n[this.structuredOutputKeys[s]]=r),n}return e}predict(e,t){let n=this.execute(e,this.outputNodes);return this.addStructuredOutputNames(n)}async predictAsync(e,t){let n=await this.executeAsync(e,this.outputNodes);return this.addStructuredOutputNames(n)}normalizeInputs(e){var t;if(!(e instanceof Ne)&&!Array.isArray(e)){let s=(t=this.signature)===null||t===void 0?void 0:t.inputs;if(s!=null)for(let a in s){let o=s[a];o.resourceId!=null&&(e[a]=this.resourceIdToCapturedInput[o.resourceId])}return e}e=Array.isArray(e)?e:[e];let n=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+n!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-n} non-resource placeholders, while there are ${e.length} input tensors provided.`);let r=0;return this.inputNodes.reduce((s,a)=>{var o,i,u;let c=(u=(i=(o=this.signature)===null||o===void 0?void 0:o.inputs)===null||i===void 0?void 0:i[a])===null||u===void 0?void 0:u.resourceId;return c!=null?s[a]=this.resourceIdToCapturedInput[c]:s[a]=e[r++],s},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=this.initializerSignature.outputs,n=Object.keys(t);for(let r=0;r1?n:n[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&_e(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function Dq(e,t={},n=jt){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=Fq(e));let r=new Bk(e,t,n);return await r.load(),r}function $q(e){if(e==null)throw new Error("modelUrl in loadGraphModelSync() cannot be null. Please provide model artifacts or an IOHandler that loads the model");let t;if(e instanceof Array){let[r,s]=e;if(!r)throw new Error("modelJSON must be the first element of the array");if(!s||!(s instanceof ArrayBuffer))throw new Error("An ArrayBuffer of weights must be the second element of the array");if(!("modelTopology"in r))throw new Error("Model JSON is missing 'modelTopology'");if(!("weightsManifest"in r))throw new Error("Model JSON is missing 'weightsManifest'");let a=jt.getWeightSpecs(r.weightsManifest),o=jt.getModelArtifactsForJSONSync(r,a,s);t=jt.fromMemorySync(o)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=jt.fromMemorySync(e);else throw new Error("Unknown model format");let n=new Bk(t);return n.load(),n}function Fq(e){return e.endsWith("/")||(e=e+"/"),`${e}${Aq}${Eq}`}var Rq="4.16.0",A_={};Ee(A_,{CSVDataset:()=>W_,Dataset:()=>vl,FileDataSource:()=>K_,TextLineDataset:()=>z_,URLDataSource:()=>X_,array:()=>r8,csv:()=>g8,func:()=>b8,generator:()=>y8,microphone:()=>x8,version_data:()=>w8,webcam:()=>v8,zip:()=>s8});var Pq=ka(Ff()),Oq=ka(Ff());function Mq(e,t){return kf(e,t)}function kf(e,t,n=new Map,r=new Set){if(e==null)return null;if(typeof Blob=="function"&&e instanceof Blob)return e.slice();if(r.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(s.recurse)if(sc(e)){let a=Array.isArray(e)?[]:{};r.add(e);for(let o in e){let i=e[o],u=kf(i,t,n,r);a[o]=u}return r.delete(e),e.__proto__&&(a.__proto__=e.__proto__),a}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,s.value),s.value}function Lq(e,t=$_){return D_(e,t)}function D_(e,t,n=new Set){let r=e[0];if(n.has(r))throw new Error("Circular references are not supported.");let s=t(e);if(s.recurse&&s.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(s.recurse)if(sc(r)){let a=Array.isArray(r)?[]:{};n.add(r);for(let o in r){let i=e.map(c=>c[o]),u=D_(i,t,n);a[o]=u}return n.delete(r),a}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return s.value}function $_(e){return e===null?null:sc(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function F_(e,t){let n=new Map;kf(e,t,n);for(let s of Array.from(n.keys())){let a=n.get(s);if(w.isPromise(a)){let o=await a;n.set(s,o)}}return kf(e,t,n)}function sc(e){let t=!1;if(G().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=tC();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Ne)&&!(e instanceof Promise)&&!t)}function Bq(e){return e==null||zq(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Ne||w.isTypedArray(e)}function zq(e){return e===null||typeof e!="object"&&typeof e!="function"}function Wq(e){return Mq(e,Vq)}function Vq(e){return e instanceof Ne?{value:e.clone(),recurse:!1}:sc(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var R_=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}},P_=class O_ extends R_{constructor(){super(O_.INITIAL_CAPACITY)}isFull(){return!1}push(t){super.isFull()&&this.expand(),super.push(t)}unshift(t){super.isFull()&&this.expand(),super.unshift(t)}expand(){let t=this.capacity*2,n=new Array(t),r=this.length();for(let s=0;st===!0)}rowMajorBatch(e,t=!0){return new Yq(this,e,t)}columnMajorBatch(e,t=!0,n=$_){return this.rowMajorBatch(e,t).map(s=>Lq(s,n))}concatenate(e,t){return new L_(M_([this,e]),t)}take(e){return e<0||e==null?this:new Xq(this,e)}skip(e){return e<0||e==null?this:new Kq(this,e)}prefetch(e){return new B_(this,e)}shuffle(e,t){return new n8(this,e,t)}serial(){return new qq(this)}},Hq=class extends sn{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:Wq(e),done:!1}}},jq=class extends sn{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}}},qq=class extends sn{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()}},Kq=class extends sn{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()}},Yq=class extends sn{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}}},Zq=class extends sn{constructor(e,t){super(),this.upstream=e,this.predicate=t,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Filter`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;){let e=await this.upstream.next();if(e.done||this.predicate(e.value))return e;_e(e.value)}}},Jq=class extends sn{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=Wr.getTensorsInContainer(e.value),n=this.transform(e.value),r=Wr.getTensorsInContainer(n);for(let s of t)Wr.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},Qq=class extends sn{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}}}},g1=class extends sn{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=Wr.getTensorsInContainer(e.value),n=await this.transform(e.value),r=Wr.getTensorsInContainer(n);for(let s of t)Wr.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},Wk=class extends sn{constructor(){super(),this.outputQueue=new P_,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}}},e8=class extends Wk{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=Wr.getTensorsInContainer(e.value),n=this.transform(e.value),r=Wr.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let s of t)Wr.isTensorInList(s,r)||s.dispose();return!0}},L_=class extends sn{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}},aa;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(aa||(aa={}));var t8=class extends sn{constructor(e,t=aa.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 r(a){return a instanceof sn?{value:a.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let s=await F_(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case aa.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case aa.SHORTEST:return{value:null,done:!0};case aa.LONGEST:default:}return this.count++,{value:s,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},B_=class extends sn{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new R_(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()}},n8=class extends B_{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=Oq.alea(n||w.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}}},vl=class{constructor(){this.size=null}batch(e,t=!0){let n=this;w.assert(e>0,()=>`batchSize needs to be positive, but it is ${e}`);let r;return this.size===1/0||this.size==null?r=this.size:t?r=Math.ceil(this.size/e):r=Math.floor(this.size/e),Zn(async()=>(await n.iterator()).columnMajorBatch(e,t,a8),r)}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,Zn(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,Zn(async()=>(await t.iterator()).filter(r=>O(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Zn(async()=>(await t.iterator()).map(n=>O(()=>e(n))),this.size)}mapAsync(e){let t=this;return Zn(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 Zn(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,Zn(async()=>{let r=zk(async()=>({value:await t.iterator(),done:!1}));return Uq(r.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 r=this,s=Pq.alea(t||w.now().toString());return Zn(async()=>{let a=s.int32();return n&&(a+=s.int32()),(await r.iterator()).shuffle(e,a.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,Zn(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()}};vl.MAX_BUFFER_SIZE=1e4;function Zn(e,t=null){return new class extends vl{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function r8(e){return Zn(async()=>M_(e),e.length)}function s8(e){if(!sc(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 F_(e,r=>{if(r instanceof vl)return{value:r.iterator(),recurse:!1};if(sc(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return Gq(n,aa.SHORTEST)},t)}function a8(e){if(e===null)return null;let t=e[0];return Bq(t)?{value:o8(e),recurse:!1}:{value:null,recurse:!0}}function o8(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Ne?Dt(e):yn(e)}var z_=class extends vl{constructor(e){super(),this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(` `).map(r=>(r.endsWith("\r")&&(r=r.slice(0,-1)),r))}},Wh='"',sd=Symbol("out"),b1=Symbol("field"),Vh=Symbol("quote"),Cv=Symbol("quoteafterquote"),y1=Symbol("quoteinquote"),W_=class extends vl{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&&w.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((r,s)=>(r[s]=r[s]+1||1,r),{}),n=Object.keys(t).filter(r=>t[r]>1);if(w.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let r of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(r)===-1)throw new Error('The key "'+r+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let t=await(await this.base.iterator()).next();if(t.done)throw new Error("No data was found for CSV parsing.");let n=t.value;return this.parseRow(n,!1)}else return null}constructor(e,t){super(),this.input=e,this.hasHeader=!0,this.fullColumnNames=null,this.columnNamesValidated=!1,this.columnConfigs=null,this.configuredColumnsOnly=!1,this.delimiter=",",this.delimWhitespace=!1,this.base=new z_(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(w.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 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={},r={};for(let s=0;s14||!Number.isInteger(n))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=t.numFramesPerSpectrogram||43,this.sampleRateHz=t.sampleRateHz,this.columnTruncateLength=t.columnTruncateLength||this.fftSize,this.audioTrackConstraints=t.audioTrackConstraints,this.smoothingTimeConstant=t.smoothingTimeConstant||0,this.includeSpectrogram=t.includeSpectrogram!==!1,this.includeWaveform=t.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(t={}){if(!G().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let n=new V_(t);return await n.start(),n}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(r){throw new Error(`Error thrown while initializing video stream: ${r.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let t=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new t,!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 n=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,n.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 t,n,r=await this.getAudioData();if(this.includeSpectrogram){let s=this.flattenQueue(r.freqDataQueue);t=this.getTensorFromAudioDataArray(s,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let s=this.flattenQueue(r.timeDataQueue);n=this.getTensorFromAudioDataArray(s,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:t,waveform:n},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let t=[],n=[],r=0;return new Promise(s=>{let a=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&s({freqDataQueue:t,timeDataQueue:n}),t.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),n.push(this.timeData.slice())),++r===this.numFrames&&(clearInterval(a),s({freqDataQueue:t,timeDataQueue:n}))},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(t){let n=t[0].length,r=new Float32Array(t.length*n);return t.forEach((s,a)=>r.set(s,a*n)),r}getTensorFromAudioDataArray(t,n){let r=new Float32Array(w.sizeFromShape(n));return r.set(t,r.length-t.length),yn(r,n)}},u8=class U_ extends sn{constructor(t,n){if(super(),this.webcamVideoElement=t,this.webcamConfig=n,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=He([0],"int32"),this.webcamConfig.centerCrop){let r=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,s=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,a=(1-r)/2,o=(1-s)/2,i=a+r,u=s+o;this.cropBox=Dr([o,a,u,i],[1,4])}else this.cropBox=Dr([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(t,n={}){if(!G().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!t){if(t=document.createElement("video"),!n.resizeWidth||!n.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");t.width=n.resizeWidth,t.height=n.resizeHeight}let r=new U_(t,n);return await r.start(),r}async start(){this.webcamConfig.facingMode&&w.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(t){throw t.message=`Error thrown while initializing video stream: ${t.message}`,t}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(t){console.log(t),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(t=>{this.webcamVideoElement.onloadedmetadata=()=>{t()}})}async next(){if(this.isClosed)return{value:null,done:!0};let t;try{t=Yi.fromPixels(this.webcamVideoElement)}catch(n){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(n)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(t),done:!1}}catch(n){throw new Error(`Error thrown cropping the video: ${n.message}`)}finally{t.dispose()}else return{value:t,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(t){return O(()=>{let n=Gt(ae(t,"float32"),0),r;r=er.cropAndResize(n,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let s=r.shape;return W(r,s.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(n=>n.stop());try{this.webcamVideoElement.srcObject=null}catch(n){console.log(n),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},G_=class{},H_=class extends sn{split(e){return new c8(this,e)}},c8=class extends H_{constructor(e,t){super(),this.upstream=e,this.impl=new l8(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},l8=class extends Wk{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}},d8=class extends sn{decodeUTF8(){return new p8(this)}},p8=class extends H_{constructor(e){super(),this.upstream=e,this.impl=new h8(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},h8=class extends Wk{constructor(e){if(super(),this.upstream=e,G().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=tC();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 G().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},j_=class extends d8{constructor(e,t={}){super(),this.file=e,this.options=t,w.assert(e instanceof Uint8Array||(G().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((t,n)=>{let r=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)t(new Uint8Array(this.file.slice(this.offset,r)));else{let s=new FileReader;s.onload=o=>{let i=s.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return n(new TypeError("FileReader returned unknown type."));t(i)},s.onabort=o=>n(new Error("Aborted")),s.onerror=o=>n(new Error(o.type));let a=this.file.slice(this.offset,r);s.readAsArrayBuffer(a)}this.offset=r}),done:!1}}};async function f8(e,t={},n){let r,s;typeof e=="string"?r=e:(r=e.url,s=m8(e));let a=await(n||w.fetch)(r,s);if(a.ok){let o=new Uint8Array(await a.arrayBuffer());return new j_(o,t)}else throw new Error(a.statusText)}var m8=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 q_(e){return typeof e=="string"&&e.slice(0,7)==="file://"}var K_=class extends G_{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(q_(this.input)&&G().get("IS_NODE")){let e=Ax();this.input=e.readFileSync(this.input.slice(7))}return new j_(this.input,this.options)}},X_=class extends G_{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return q_(this.url)?new K_(this.url,this.fileOptions).iterator():f8(this.url,this.fileOptions)}};function g8(e,t={}){return new W_(new X_(e),t)}function b8(e){let t=zk(e);return Zn(async()=>t)}function y8(e){return Zn(async()=>{let t=await e();return zk(()=>t.next())})}async function v8(e,t){return u8.create(e,t)}async function x8(e){return i8.create(e)}var w8="4.16.0";function be(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&w.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var I8=gs.whereImpl,Vk=class Y_ extends Md{nextDataId(){return Y_.nextDataId++}constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new Rf(this,Er())}write(t,n,r){this.firstUse&&(this.firstUse=!1,G().get("IS_NODE")&&T.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 s={id:this.nextDataId()};return this.data.set(s,{values:t,dtype:r,refCount:1}),s}makeTensorInfo(t,n,r){let s;if(n==="string"&&r!=null&&r.length>0&&w.isString(r[0])){let a=r.map(o=>w.encodeString(o));s=this.write(a,t,n)}else s=this.write(r,t,n);return{dataId:s,shape:t,dtype:n}}refCount(t){return this.data.has(t)?this.data.get(t).refCount:0}incRef(t){let n=this.data.get(t);n.refCount++}decRef(t){if(this.data.has(t)){let n=this.data.get(t);n.refCount--}}move(t,n,r,s,a){this.data.set(t,{values:n,dtype:s,refCount:a})}numDataIds(){return this.data.numDataIds()}async read(t){return this.readSync(t)}readSync(t){let{dtype:n,complexTensorInfos:r}=this.data.get(t);if(n==="complex64"){let s=this.readSync(r.real.dataId),a=this.readSync(r.imag.dataId);return T.mergeRealAndImagArrays(s,a)}return w.convertBackendValuesAndArrayBuffer(this.data.get(t).values,n)}bufferSync(t){let n=this.readSync(t.dataId);if(t.dtype==="string")try{let r=n.map(s=>w.decodeString(s));return Me(t.shape,t.dtype,r)}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(t.shape,t.dtype,n)}makeOutput(t,n,r){return Er().makeTensorFromTensorInfo(this.makeTensorInfo(n,r,t),this)}disposeData(t,n=!1){if(this.data.has(t)){if(this.data.get(t).refCount--,!n&&this.data.get(t).refCount>0)return!1;let{complexTensorInfos:r}=this.data.get(t);r!=null&&(this.disposeData(r.real.dataId,!0),this.disposeData(r.imag.dataId,!0)),this.data.delete(t)}return!0}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}async time(t){let n=w.now();return t(),{kernelMs:w.now()-n}}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(t){be([t],"where");let n=this.readSync(t.dataId);return I8(t.shape,n)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};Vk.nextDataId=0;var Uk={};Ee(Uk,{addImpl:()=>Q_,bincountImpl:()=>Hk,bincountReduceImpl:()=>eE,bitwiseAndImpl:()=>tE,castImpl:()=>J_,ceilImpl:()=>nE,concatImpl:()=>jk,equalImpl:()=>rE,expImpl:()=>aE,expm1Impl:()=>iE,floorDivImpl:()=>cE,floorImpl:()=>uE,gatherNdImpl:()=>lE,gatherV2Impl:()=>dE,greaterEqualImpl:()=>hE,greaterImpl:()=>pE,lessEqualImpl:()=>mE,lessImpl:()=>fE,linSpaceImpl:()=>gE,logImpl:()=>bE,maxImpl:()=>yE,maximumImpl:()=>vE,minimumImpl:()=>xE,multiplyImpl:()=>qk,negImpl:()=>wE,notEqualImpl:()=>IE,prodImpl:()=>kE,raggedGatherImpl:()=>SE,raggedRangeImpl:()=>CE,raggedTensorToTensorImpl:()=>TE,rangeImpl:()=>Xk,rsqrtImpl:()=>NE,scatterImpl:()=>so,sigmoidImpl:()=>wK,simpleAbsImpl:()=>Z_,sliceImpl:()=>Cf,sparseFillEmptyRowsImpl:()=>EE,sparseReshapeImpl:()=>AE,sparseSegmentReductionImpl:()=>Yk,sqrtImpl:()=>SK,squaredDifferenceImpl:()=>DE,staticRegexReplaceImpl:()=>$E,stridedSliceImpl:()=>FE,stringNGramsImpl:()=>Zk,stringSplitImpl:()=>Jk,stringToHashBucketFastImpl:()=>Qk,subImpl:()=>RE,tileImpl:()=>PE,topKImpl:()=>ME,transposeImpl:()=>Kk,uniqueImpl:()=>t0});function Z_(e){let t=new Float32Array(e.length);for(let n=0;n{let{x:t}=e.inputs,n=e.backend;be(t,"abs");let r=new Float32Array(w.sizeFromShape(t.shape)),s=n.data.get(t.dataId).values;return r=Z_(s),n.makeOutput(r,t.shape,t.dtype)},S8={kernelName:cc,backendName:"cpu",kernelFunc:k8};function Ot(e){return(t,n,r,s,a)=>{let o=T.assertAndGetBroadcastShape(t,n),i=o.length,u=w.computeStrides(o),c=w.sizeFromShape(o),l=w.getTypedArrayFromDType(a,c),p=t.length,d=n.length,h=w.computeStrides(t),f=w.computeStrides(n),g=T.getBroadcastDims(t,o),m=T.getBroadcastDims(n,o);if(g.length+m.length===0)for(let b=0;bv[N]=0);let x=w.locToIndex(v,p,h),k=y.slice(-d);m.forEach(N=>k[N]=0);let S=w.locToIndex(k,d,f);l[b]=e(r[x],s[S])}return[l,o]}}function Qn(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,a=n.data.get(r.dataId).values,o=n.data.get(s.dataId).values,i=n.makeTensorInfo(r.shape,"complex64"),u=n.data.get(i.dataId);return u.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",a),imag:n.makeTensorInfo(s.shape,"float32",o)},i}var C8={kernelName:Mf,backendName:"cpu",kernelFunc:Qn};function Sf(e,t,n="float32"){if(n==="complex64"){let s=Sf(e,t,"float32"),a=Sf(e,t,"float32");return Qn({inputs:{real:s,imag:a},backend:e})}let r=w.makeZerosTypedArray(w.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function hs(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var T8={kernelName:si,backendName:"cpu",kernelFunc:hs};function Io(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.data.get(r.dataId).complexTensorInfos.real,a=n.data.get(s.dataId).values;return n.makeTensorInfo(s.shape,s.dtype,a)}var N8={kernelName:Xf,backendName:"cpu",kernelFunc:Io};function J_(e,t,n,r){if(r==="int32"){let s=Int32Array.from(e);return[t,"int32",s]}if(r==="bool"){let s=w.toTypedArray([0],n),[a,o]=Ot((i,u)=>i!==u?1:0)(t,[],e,s,"bool");return[o,"bool",a]}throw new Error(`Error in Cast: failed to cast ${n} to ${r}`)}function wa(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:a}=r;if(a==="complex64"){if(s.dtype==="complex64")return hs({inputs:{x:s},backend:n});let l=Sf(n,s.shape,s.dtype),p=wa({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),d=Qn({inputs:{real:p,imag:l},backend:n});return n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(p),d}if(s.dtype==="complex64"){let l=Io({inputs:{input:s},backend:n}),p=wa({inputs:{x:l},backend:n,attrs:{dtype:a}});return n.disposeIntermediateTensorInfo(l),p}if(!w.hasEncodingLoss(s.dtype,a)){let l=hs({inputs:{x:s},backend:n});return{dataId:l.dataId,shape:l.shape,dtype:a}}let o=n.data.get(s.dataId).values,[i,u,c]=J_(o,s.shape,s.dtype,a);return n.makeTensorInfo(i,u,c)}var _8={kernelName:Bo,backendName:"cpu",kernelFunc:wa};function Zt(e,t,n,r){return n==null?({inputs:s,backend:a})=>{let{a:o,b:i}=s,u=a;be([o,i],e);let c=u.data.get(o.dataId).values,l=u.data.get(i.dataId).values,p=o.dtype==="string"?T.fromUint8ToStringArray(c):c,d=o.dtype==="string"?T.fromUint8ToStringArray(l):l,h=r||o.dtype,[f,g]=t(o.shape,i.shape,p,d,h);return u.makeTensorInfo(g,h,f)}:({inputs:s,backend:a})=>{let{a:o,b:i}=s,u=a;if(o.dtype==="complex64"||i.dtype==="complex64"){let c=wa({inputs:{x:o},backend:u,attrs:{dtype:"complex64"}}),l=u.data.get(c.dataId),p=l.complexTensorInfos.real,d=l.complexTensorInfos.imag,h=u.data.get(p.dataId).values,f=u.data.get(d.dataId).values,g=wa({inputs:{x:i},backend:u,attrs:{dtype:"complex64"}}),m=u.data.get(g.dataId),b=m.complexTensorInfos.real,y=m.complexTensorInfos.imag,v=u.data.get(b.dataId).values,x=u.data.get(y.dataId).values,[k,S,N]=n(o.shape,i.shape,h,f,v,x),E=u.makeTensorInfo(N,"float32",k),$=u.makeTensorInfo(N,"float32",S),F=Qn({inputs:{real:E,imag:$},backend:u});return u.disposeIntermediateTensorInfo(c),u.disposeIntermediateTensorInfo(g),u.disposeIntermediateTensorInfo(E),u.disposeIntermediateTensorInfo($),F}else{let c=u.data.get(o.dataId).values,l=u.data.get(i.dataId).values,p=r||o.dtype,[d,h]=t(o.shape,i.shape,c,l,p);return u.makeTensorInfo(h,p,d)}}}function Gk(e){return(t,n,r,s,a,o)=>{let i=T.assertAndGetBroadcastShape(t,n),u=w.sizeFromShape(i),c=i.length,l=w.computeStrides(i),p=w.getTypedArrayFromDType("float32",u),d=w.getTypedArrayFromDType("float32",u),h=T.getBroadcastDims(t,i),f=T.getBroadcastDims(n,i),g=T.mergeRealAndImagArrays(r,s),m=T.mergeRealAndImagArrays(a,o),b=t.length,y=w.computeStrides(t),v=n.length,x=w.computeStrides(n);if(h.length+f.length===0)for(let k=0;kN[R]=0);let E=w.locToIndex(N,b,y),$=S.slice(-v);f.forEach(R=>$[R]=0);let F=w.locToIndex($,v,x),D=e(g[E*2],g[E*2+1],m[F*2],m[F*2+1]);p[k]=D.real,d[k]=D.imag}return[p,d,i]}}var Q_=Ot((e,t)=>e+t),E8=Gk((e,t,n,r)=>({real:e+n,imag:t+r})),ac=Zt(Sa,Q_,E8),A8={kernelName:Sa,backendName:"cpu",kernelFunc:ac};function Hk(e,t,n,r,s){let a=w.sizeFromShape(r),o=w.makeZerosTypedArray(s,n);for(let i=0;i=s||(a>0?o[u]+=t[i]:o[u]+=1)}return o}function eE(e,t,n,r=!1){let s=e.shape[0],a=e.shape[1],o=Me([s,n],t.dtype);for(let i=0;i=n||(r?o.set(1,i,c):t.size>0?o.set(o.get(i,c)+t.get(i,u),i,c):o.set(o.get(i,c)+1,i,c))}return o}var tE=Ot((e,t)=>e&t),D8=Zt(bc,tE),$8={kernelName:bc,backendName:"cpu",kernelFunc:D8};function bs(e){return(t,n,r)=>{let s=w.getArrayFromDType(n,t.length);for(let a=0;a{let{x:o}=r;be(o,e);let i=a,u=i.data.get(o.dataId).values,c;if(o.dtype==="string"){if(!Array.isArray(u))throw new Error("String tensor's value was not an instance of Array");c=T.fromUint8ToStringArray(u)}else c=u;let l=n||o.dtype,p=t(c,l,s);return i.makeTensorInfo(o.shape,l,p)}}var nE=bs(e=>Math.ceil(e)),F8=Pa(zo,nE),R8={kernelName:zo,backendName:"cpu",kernelFunc:F8};function jk(e,t,n,r){let s=w.getArrayFromDType(n,w.sizeFromShape(t));if(r&&n!=="string"){let a=0;e.forEach(o=>{let i=w.sizeFromShape(o.shape);s.set(o.vals,a),a+=i})}else{let a=0;e.forEach(o=>{let i=n==="string"?T.fromUint8ToStringArray(o.vals):o.vals,u=0;for(let c=0;ce===t?1:0),sE=Zt(Cc,rE,null,"bool"),P8={kernelName:Cc,backendName:"cpu",kernelFunc:sE},aE=bs(e=>Math.exp(e)),oE=Pa(Jo,aE,"float32"),O8={kernelName:Jo,backendName:"cpu",kernelFunc:oE},iE=bs(e=>Math.expm1(e)),M8=Pa(Qo,iE),L8={kernelName:Qo,backendName:"cpu",kernelFunc:M8},uE=bs(e=>Math.floor(e)),B8=Pa(ei,uE),z8={kernelName:ei,backendName:"cpu",kernelFunc:B8},cE=Ot((e,t)=>Math.floor(e/t)),W8=Zt(ti,cE,null,"int32"),V8={kernelName:ti,backendName:"cpu",kernelFunc:W8};function lE(e,t,n,r,s,a,o,i,u){let c=Me([r,a],n);for(let l=0;l=u/a)throw new Error(`Invalid indices: ${p} does not index into ${i}`);for(let h=0;he>t?1:0),U8=Zt(Ac,pE,null,"bool"),G8={kernelName:Ac,backendName:"cpu",kernelFunc:U8},hE=Ot((e,t)=>e>=t?1:0),H8=Zt(ri,hE,null,"bool"),j8={kernelName:ri,backendName:"cpu",kernelFunc:H8},fE=Ot((e,t)=>ee<=t?1:0),X8=Zt($c,mE,null,"bool"),Y8={kernelName:$c,backendName:"cpu",kernelFunc:X8};function gE(e,t,n){let r=(t-e)/(n-1),s=w.makeZerosTypedArray(n,"float32");s[0]=e;for(let a=1;aMath.log(e)),Z8=Pa(ci,bE),J8={kernelName:ci,backendName:"cpu",kernelFunc:Z8};function yE(e,t,n,r){let s=w.getTypedArrayFromDType(r,w.sizeFromShape(n));for(let a=0;ai)&&(i=c)}s[a]=i}return s}var vE=Ot((e,t)=>Math.max(e,t)),Q8=Zt(hi,vE),eK={kernelName:hi,backendName:"cpu",kernelFunc:Q8},xE=Ot((e,t)=>Math.min(e,t)),tK=Zt(bi,xE),nK={kernelName:bi,backendName:"cpu",kernelFunc:tK},qk=Ot((e,t)=>e*t),rK=Gk((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),Qm=Zt(xi,qk,rK),sK={kernelName:xi,backendName:"cpu",kernelFunc:Qm};function wE(e,t,n){let r=w.createScalarValue(-1,n);return qk([],t,r,e,n)}function aK(e){let{inputs:t,backend:n}=e,{x:r}=t;be(r,"neg");let s=n.data.get(r.dataId).values,[a,o]=wE(s,r.shape,r.dtype);return n.makeTensorInfo(o,r.dtype,a)}var oK={kernelName:zc,backendName:"cpu",kernelFunc:aK},IE=Ot((e,t)=>e!==t?1:0),iK=Zt(Wc,IE,null,"bool"),uK={kernelName:Wc,backendName:"cpu",kernelFunc:iK};function Kk(e,t,n,r,s){let a=t.length,o=w.sizeFromShape(t),i=w.computeStrides(t),u=w.computeStrides(s),c=w.getTypedArrayFromDType(n,w.sizeFromShape(s));for(let l=0;ln.disposeIntermediateTensorInfo(y)),n.makeTensorInfo(b,m,f)}var dK={kernelName:Ci,backendName:"cpu",kernelFunc:lK};function pK(e,t,n){e.forEach((r,s)=>{if(r<0||r>=n){let a=w.indexToLoc(s,t.length,w.computeStrides(t)).join(",");throw new Error(`indices[${a}] = ${r} is not in [0, ${n})`)}})}function hK(e,t){for(let n=0;ns)throw new Error("Ragged splits must not point past values");for(let a=1;ar[a])throw new Error("Ragged splits must be sorted in ascending order")}}function fK(e,t,n,r){let s=[],a=0,o=t.length-1+n.length,i=new Array(o).fill(null).map(()=>[0]);hK(n,r);let u=1;for(let c=0;c=0){let g=i[f],m=g[g.length-1]-h[l];for(let b=l;bs[o]=a)}return t}function v1(e,t){let n=e.slice(0,t);for(;n.length1)throw new Error("starts must be a scalar or vector");if(s.length>1)throw new Error("limits must be a scalar or vector");if(o.length>1)throw new Error("deltas must be a scalar or vector");let i=t.length===0,u=s.length===0,c=o.length===0,l=[];i||l.push(t[0]),u||l.push(s[0]),c||l.push(o[0]);for(let m=1;m0&&yb)x=0;else if(x=Math.ceil(Math.abs((y-b)/v)),x>x1)throw new Error(`Requires ((limit - start) / delta) <= ${x1}`);d[m+1]=d[m]+x}let h=d[p],f=w.getArrayFromDType(n,h),g=0;for(let m=0;mr&&(r=a)}return r}static getMaxWidthValueRowID(t){let n=t.length;if(n===0)return 0;let r=0,s=t[0],a=0;for(let o=1;o"Final length of result must be equal to firstDimension."),a}calculateOutputIndexRowSplit(t,n,r,s){let a=t.length,o=[];for(let i=0;i0&&o.length!==t[a-1])throw new Error("Invalid row split size.");return o}calculateOutputIndexValueRowID(t,n,r,s){let a=t.length,o=[];if(a===0)return[];let i=0,u=t[0];if(u>=n.length)throw new Error(`Got currentValueRowId=${u}, which is not less than ${n.length}`);let c=n[u];o.push(c);for(let l=1;l=0&&(++i,i=n.length)throw new Error(`Got nextValueRowId=${p} which is not less than ${n.length}`);c=n[p]}o.push(c)}if(o.length!==t.length)throw new Error("Invalid row ids.");return o}calculateOutputIndex(t,n,r,s){let a=this.getRowPartitionTensor(t),o=this.getRowPartitionTypeByDimension(t);switch(o){case _r.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(a,n,r,s);case _r.ROW_SPLITS:if(a.length-1>n.length)throw new Error(`Row partition size is greater than output size: ${a.length-1} > ${n.length}`);return this.calculateOutputIndexRowSplit(a,n,r,s);default:throw new Error(`Unsupported partition type: ${_r[o]}`)}}getFirstDimensionSize(){let t=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let n=this.rowPartitionTypes[0];switch(n){case _r.FIRST_DIM_SIZE:return t[0];case _r.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case _r.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${_r[n]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let n=this.getFirstDimensionSize(),r=this.calculateOutputSize(n),s=new Array(this.raggedRank+1);s[s.length-1]=1;for(let u=s.length-2;u>=0;--u)s[u]=s[u+1]*r[u+1];let a=I1(r,!1),o=w.getArrayFromDType(this.valuesDType,w.sizeFromShape(a));if(s[0]*r[0]>0){let u=this.calculateFirstParentOutputIndex(n,s[0],r[0]);for(let c=1;c<=this.raggedRank;++c)u=this.calculateOutputIndex(c-1,u,s[c],r[c]);this.setOutput(this.raggedRank,u,o,a)}return[a,o]}setOutput(t,n,r,s){if(r.length===0)return;let a=this.values,o=r,i=s.slice();i=i.slice(t+1);let u=w.sizeFromShape(i),c=n.length,l=this.defaultValue;if(l.length!==u&&l.length!==1){let f=this.defaultValueShape;O(()=>{let g=W(l,f);l=ao(g,i).dataSync()})}let p=0,d=0,h=0;for(let f=0;f<=c;++f){let g=f=c){let m=r.length;g=Math.floor(m/u)}if(g>h)if(this.defaultValue.length===1)o.subarray(h*u,g*u).fill(this.defaultValue[0]),h=g;else for(;g>h;){let m=o.slice(h*u);w1(m,l,u),++h}g<0?(p=f+1,d=h):(p=f,d=h,h=d+1)}}};function w1(e,t,n){for(let r=0;r= 0`);if(r<-1)throw new Error(`Dimension ${r} must be >= -1`);r=-1}n.push(r)}return n}function TE(e,t,n,r,s,a,o,i,u,c){return new yK(e,t,n,r,s,a,o,i,u,c).compute()}function Xk(e,t,n,r){let s=e===t,a=e1;if(s||a||o)return w.makeZerosTypedArray(0,r);let i=Math.abs(Math.ceil((t-e)/n)),u=w.makeZerosTypedArray(i,r);t1/Math.sqrt(e)),vK=Pa(Fi,NE),xK={kernelName:Fi,backendName:"cpu",kernelFunc:vK};function so(e,t,n,r,s,a,o,i,u,c){let l=[r/s,s],p=e.values,d=t.values;if(r===0)return Me(n,t.dtype);let h=u instanceof zt?u:Me(l,t.dtype);typeof u=="string"||typeof u=="number"?h.values.fill(u):typeof u=="boolean"&&h.values.fill(+u);for(let f=0;f=r/s)throw new Error(`Invalid indices: ${g} does not index into ${n}`);for(let b=0;b1/(1+Math.exp(-e))),_E=ct(Li,e=>1/(1+Math.exp(-e))),IK={kernelName:Li,backendName:"cpu",kernelFunc:_E};function Cf(e,t,n,r,s){let a=Kt.isSliceContinous(r,t,n),o=w.sizeFromShape(n),i=w.computeStrides(r);if(a){let p=Kt.computeFlatOffset(t,i);return s==="string"?e.slice(p,p+o):e.subarray(p,p+o)}let u=s==="string"?T.fromUint8ToStringArray(e):e,c=Me(r,s,u),l=Me(n,s);for(let p=0;pf+t[g]);l.set(c.get(...h),...d)}return s==="string"?T.fromStringArrayToUint8(l.values):l.values}function ko(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,size:o}=r;be(s,"slice");let[i,u]=Kt.parseSliceParams(s,a,o);Kt.assertParamsValid(s,i,u);let c=n.data.get(s.dataId).values,l=Cf(c,i,u,s.shape,s.dtype);return n.makeTensorInfo(u,s.dtype,l)}var kK={kernelName:el,backendName:"cpu",kernelFunc:ko};function EE(e,t,n,r,s,a,o){let i=t[0],u=a[0],c=new Array(u),l=new Array(i),p=t[1];if(u===0){if(i!==0)throw new Error(T.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let m=w.getArrayFromDType(n,0),b=w.getArrayFromDType(s,0);return[m,[0,p],b,c,l]}let d=!0,h=0,f=new Array(u).fill(0);for(let m=0;m=u)throw new Error(T.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(m,b,u));++f[b],d=d&&b>=h,h=b}let g=!0;for(let m=0;m0&&(f[m]+=f[m-1])}if(g&&d){let m=e,b=r;for(let y=0;y0){h[d-1]=1;for(let m=d-2;m>=0;--m)h[m]=h[m+1]*r[m+1]}let f=[];if(i>0){f[i-1]=1;for(let m=i-2;m>=0;--m)f[m]=f[m+1]*u[m+1]}let g=w.getArrayFromDType(n,o*i);for(let m=0;m0?s[i-1]+1:0;if(p<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=t.slice();d[0]=p;let h=d.reduce((v,x)=>v*x,1),f=w.getArrayFromDType(n,h);if(i===0)return p>0&&f.fill(o),[f,d];if(p<=0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let g=0,m=1,b=0,y=s[g];for(;;){let v=0;if(m=v)throw new Error(T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>b&&f.fill(o,b*c,y*c);for(let x=g;x=u[0])throw new Error(T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,r[x],u[0]));for(let S=0;Si)break}return bMath.sqrt(e)),CK=ct(zi,e=>Math.sqrt(e)),TK={kernelName:zi,backendName:"cpu",kernelFunc:CK},DE=Ot((e,t)=>{let n=e-t;return n*n}),NK=Zt(Ui,DE),_K={kernelName:Ui,backendName:"cpu",kernelFunc:NK},$E=bs((e,t)=>{let{pattern:n,replaceGlobal:r,rewrite:s}=t;return e.replace(new RegExp(n,r?"g":""),s)}),EK=Pa(ep,$E),AK={kernelName:ep,backendName:"cpu",kernelFunc:EK};function FE(e,t,n,r){let s=Me(e,t.dtype);for(let a=0;a0?0:o-i),d=0;d+=u*this.leftPad.length;for(let b=0;bb.forEach(y=>f[g++]=y);for(let b=0;b0){m(e[p+l-1]);for(let b=0;b0){let i=t[0];if(i!==0)throw new Error(`First split value must be 0, got ${i}`);for(let u=1;u=i;if(c=c&&t[u]<=n,!c)throw new Error(`Invalid split value ${t[u]}, must be in [${i}, ${n}]`);i=t[u]}if(i!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${i}`)}let s=r-1,a=w.getArrayFromDType("int32",r);if(n===0||r===0){let i=new Array(n);for(let u=0;u<=s;++u)a[u]=0;return[i,a]}a[0]=0;for(let i=1;i<=s;++i){let u=t[i]-t[i-1],c=0;this.nGramWidths.forEach(l=>{c+=this.getNumNGrams(u,l)}),this.preserveShort&&u>0&&c===0&&(c=1),a[i]=a[i-1]+c}let o=new Array(a[s]);for(let i=0;i{let p=t[i+1]-t[i],d=this.getNumNGrams(p,l);this.createNGrams(e,u,o,c,d,l),c+=d}),this.preserveShort&&c===a[i]){let l=t[i+1]-t[i];if(l===0)continue;let p=l+2*this.padWidth;this.createNGrams(e,u,o,c,1,p)}}return[o,a]}};function Zk(e,t,n,r,s,a,o,i){return new DK(n,r,s,a,o,i).compute(e,t)}function $K(e,t,n,r){if(!e.length)return;if(t.length===0){for(let a=0;ae-t),FK=Gk((e,t,n,r)=>({real:e-n,imag:t-r})),e0=Zt(Gi,RE,FK),RK={kernelName:Gi,backendName:"cpu",kernelFunc:e0};function PE(e,t){let n=new Array(e.rank);for(let s=0;s{let n=t.value-e.value;return n===0?e.index-t.index:n};function OE(e,t,n=0,r=e.length-1){for(;r>n;){if(r-n>600){let i=r-n+1,u=t-n+1,c=Math.log(i),l=.5*Math.exp(2*c/3),p=.5*Math.sqrt(c*l*(i-l)/i)*Math.sign(u-i/2),d=Math.max(n,Math.floor(t-u*l/i+p)),h=Math.min(r,Math.floor(t+(i-u)*l/i+p));OE(e,t,d,h)}let s=e[t],a=n,o=r;for(w.swap(e,n,t),ud(e[r],s)>0&&w.swap(e,n,r);a0;)o=o-1}ud(e[n],s)===0?w.swap(e,n,o):(o=o+1,w.swap(e,o,r)),o<=t&&(n=o+1),t<=o&&(r=o-1)}}function ME(e,t,n,r,s){let a=t[t.length-1],[o,i]=[e.length/a,a],u=w.getTypedArrayFromDType(n,o*r),c=w.getTypedArrayFromDType("int32",o*r);for(let p=0;pf[v]={value:y,index:v}),r{for(let m=0;mnew Vk,1);var LE=ct(Yo,e=>e>=0?e:Math.exp(e)-1),OK={kernelName:Yo,backendName:"cpu",kernelFunc:LE};function BE(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:a}=r;be([s],"leakyRelu");let o=w.sizeFromShape(s.shape),i=n.data.get(s.dataId).values,u=w.getTypedArrayFromDType("float32",o);for(let c=0;ce<0?t*e:e);function zE(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t;be([r,s],"prelu");let a=n.data.get(r.dataId).values,o=n.data.get(s.dataId).values,[i,u]=LK(r.shape,s.shape,a,o,"float32");return n.makeTensorInfo(u,"float32",i)}var BK={kernelName:Si,backendName:"cpu",kernelFunc:zE},WE=ct(Ni,e=>Math.max(0,e)),zK={kernelName:Ni,backendName:"cpu",kernelFunc:WE},VE=ct(Ai,e=>Math.min(Math.max(0,e),6)),WK={kernelName:Ai,backendName:"cpu",kernelFunc:VE};function Tf(e,t,n,r,s){if(n==="linear")return hs({inputs:{x:t},backend:e});if(n==="relu")return WE({inputs:{x:t},backend:e});if(n==="elu")return LE({inputs:{x:t},backend:e});if(n==="relu6")return VE({inputs:{x:t},backend:e});if(n==="prelu")return zE({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return BE({inputs:{x:t},backend:e,attrs:{alpha:s}});if(n==="sigmoid")return _E({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:r}=e,{x:s}=t,{shape:a}=r,o=w.sizeFromShape(s.shape),i=w.inferFromImplicitShape(a,o),u=w.sizeFromShape(i);w.assert(o===u,()=>`The new shape (${i}) has ${u} elements and the old shape (${s.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`),n.incRef(s.dataId);let c=n.data.get(s.dataId);if(c.complexTensorInfos!=null){let l=c.complexTensorInfos.real,p=c.complexTensorInfos.imag;l.shape=i,p.shape=i}return{dataId:s.dataId,shape:i,dtype:s.dtype}}var VK={kernelName:qc,backendName:"cpu",kernelFunc:yt};function UE(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;be([s,a],"matMul");let u=s.shape.length,c=a.shape.length,l=o?s.shape[u-2]:s.shape[u-1],p=i?a.shape[c-1]:a.shape[c-2],d=o?s.shape[u-1]:s.shape[u-2],h=i?a.shape[c-2]:a.shape[c-1],f=s.shape.slice(0,-2),g=a.shape.slice(0,-2),m=w.sizeFromShape(f),b=w.sizeFromShape(g),v=dl.assertAndGetBroadcastShape(s.shape.slice(0,-2),a.shape.slice(0,-2)).concat([d,h]);w.assert(l===p,()=>`Error in matMul: inner shapes (${l}) and (${p}) of Tensors with shapes ${s.shape} and ${a.shape} and transposeA=${o} and transposeB=${i} must match.`);let x=o?[m,l,d]:[m,d,l],k=i?[b,h,p]:[b,p,h],S=yt({inputs:{x:s},backend:n,attrs:{shape:x}}),N=yt({inputs:{x:a},backend:n,attrs:{shape:k}}),E=o?S.shape[1]:S.shape[2],$=o?S.shape[2]:S.shape[1],F=i?N.shape[1]:N.shape[2],D=Math.max(m,b),R=n.data.get(S.dataId).values,C=n.data.get(N.dataId).values,L=w.computeStrides(S.shape),U=w.computeStrides(N.shape),[H,K,q]=o?[L[0],1,L[1]]:[L[0],L[1],1],[Z,J,ee]=i?[1,U[1],U[0]]:[U[1],1,U[0]],se=$*F,te=Me([D,$,F],S.dtype),oe=te.values,ne=n.blockSize;for(let de=0;deMath.acos(e)),qK={kernelName:Eo,backendName:"cpu",kernelFunc:jK},KK=ct(Ao,e=>Math.acosh(e)),XK={kernelName:Ao,backendName:"cpu",kernelFunc:KK};function YK(e){let{inputs:t,backend:n}=e,r=t;be(t,"addN");let s=r.map(i=>n.data.get(i.dataId).values),a=Me(r[0].shape,r[0].dtype),o=a.values;for(let i=0;iy&&(y=k,v=x)}h[m]=v}return c.forEach(m=>n.disposeIntermediateTensorInfo(m)),n.makeTensorInfo(l,"int32",h)}var rX={kernelName:pc,backendName:"cpu",kernelFunc:nX};function sX(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r;be(s,"argMin");let o=w.parseAxisParam(a,s.shape),i=T.getAxesPermutation(o,s.shape.length),u=s,c=[];i!=null&&(u=Wn({inputs:{x:s},backend:n,attrs:{perm:i}}),c.push(u),o=T.getInnerMostAxes(o.length,u.shape.length)),o=[o[0]],T.assertAxesAreInnerMostDims("argMin",o,u.shape.length);let[l,p]=T.computeOutAndReduceShapes(u.shape,o),d=w.sizeFromShape(l),h=w.makeZerosTypedArray(d,"int32"),f=w.sizeFromShape(p),g=n.data.get(u.dataId).values;for(let m=0;mn.disposeIntermediateTensorInfo(m)),n.makeTensorInfo(l,"int32",h)}var aX={kernelName:hc,backendName:"cpu",kernelFunc:sX},oX=ct($o,e=>Math.asin(e)),iX={kernelName:$o,backendName:"cpu",kernelFunc:oX},uX=ct(Fo,e=>Math.asinh(e)),cX={kernelName:Fo,backendName:"cpu",kernelFunc:uX},lX=ct(Ro,e=>Math.atan(e)),dX={kernelName:Ro,backendName:"cpu",kernelFunc:lX},pX=Ot((e,t)=>Math.atan2(e,t)),hX=Zt(Oo,pX),fX={kernelName:Oo,backendName:"cpu",kernelFunc:hX},mX=ct(Po,e=>Math.atanh(e)),gX={kernelName:Po,backendName:"cpu",kernelFunc:mX};function n0(e,t,n,r,s,a){let o=s.strideHeight,i=s.strideWidth,u=s.dilationHeight,c=s.dilationWidth,l=s.effectiveFilterHeight,p=s.effectiveFilterWidth,d=s.padInfo.top,h=s.padInfo.left,f=a==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,g=Me(s.outShape,n),m=g.values,b=s.outShape[1]*s.outShape[2]*s.outShape[3],y=s.outShape[2]*s.outShape[3],v=s.outShape[3];for(let x=0;xK?K=ne:a==="avg"&&(q+=ne,Z++)}if(isNaN(K))break}let J=R+C*v+N;m[J]=a==="avg"?q/Z:K}}}return g}function GE(e,t,n,r,s=!1,a=!1){let o=Me(r.outShape,"int32"),i=r.strideHeight,u=r.strideWidth,c=r.dilationHeight,l=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,h=r.padInfo.top,f=r.padInfo.left,g=Me(t,n,e);for(let m=0;mF&&(F=H,s?D=a?((m*r.inHeight+R)*r.inWidth+L)*r.inChannels+b:(R*r.inWidth+L)*r.inChannels+b:D=C*d+U)}}o.set(D,m,y,S,b)}}return o}function HE(e,t,n,r,s,a){let o=s.strideDepth,i=s.strideHeight,u=s.strideWidth,c=s.dilationDepth,l=s.dilationHeight,p=s.dilationWidth,d=s.effectiveFilterDepth,h=s.effectiveFilterHeight,f=s.effectiveFilterWidth,g=s.padInfo.front,m=s.padInfo.top,b=s.padInfo.left,y=a==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,v=Me(s.outShape,n),x=v.values,k=s.outShape[1]*s.outShape[2]*s.outShape[3]*s.outShape[4],S=s.outShape[2]*s.outShape[3]*s.outShape[4],N=s.outShape[3]*s.outShape[4],E=s.outShape[4];for(let $=0;$we?we=ot:a==="avg"&&(ve+=ot,Ce++),isNaN(we))break}if(isNaN(we))break}if(isNaN(we))break}let Ae=ce+R;x[Ae]=a==="avg"?ve/Math.max(Ce,1):we}}}}return v}function bX(e,t){let n=Me(t.outShape,"int32"),r=t.strideDepth,s=t.strideHeight,a=t.strideWidth,o=t.dilationDepth,i=t.dilationHeight,u=t.dilationWidth,c=t.effectiveFilterDepth,l=t.effectiveFilterHeight,p=t.effectiveFilterWidth,d=t.padInfo.front,h=t.padInfo.top,f=t.padInfo.left;for(let g=0;g=C&&(C=ee,L=H*l*p+q*l+J)}}}n.set(L,g,b,k,$,m)}}}return n}function yX(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;be(s,"avgPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:u}=r,c=1;w.assert(T.eitherStridesOrDilationsAreOne(o,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${c}'`);let l=T.computePool2DInfo(s.shape,a,o,c,i,u),p;if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))p=hs({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,h=w.computeStrides(s.shape),f=n0(d,s.shape,s.dtype,h,l,"avg");p=n.makeTensorInfo(l.outShape,s.dtype,f.values)}return p}var vX={kernelName:Mo,backendName:"cpu",kernelFunc:yX};function xX(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:u,dataFormat:c}=r;be(s,"avgPool3d");let l=T.computePool3DInfo(s.shape,a,o,1,i,u,c),p=n.data.get(s.dataId).values,d=HE(p,s.shape,s.dtype,w.computeStrides(s.shape),l,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var wX={kernelName:fc,backendName:"cpu",kernelFunc:xX};function IX(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:u,dimRoundingMode:c}=r;be([s,a],"avgPool3DGrad");let l=T.computePool3DInfo(a.shape,o,i,1,u,c),p=l.strideDepth,d=l.strideHeight,h=l.strideWidth,f=l.filterDepth,g=l.filterHeight,m=l.filterWidth,b=l.dilationDepth,y=l.dilationHeight,v=l.dilationWidth,x=l.effectiveFilterDepth,k=l.effectiveFilterHeight,S=l.effectiveFilterWidth,N=x-1-l.padInfo.front,E=S-1-l.padInfo.left,$=k-1-l.padInfo.top,F=Me(a.shape,"float32"),D=1/(f*g*m),R=n.bufferSync(s);for(let C=0;C=l.outDepth||Math.floor(te)!==te))for(let oe=0;oe=l.outHeight||Math.floor(ne)!==ne))for(let de=0;de=l.outWidth||Math.floor(ce)!==ce)continue;let we=R.get(C,te,ne,ce,L);ee+=we}}}F.set(ee*D,C,U,H,K,L)}return n.makeTensorInfo(F.shape,F.dtype,F.values)}var kX={kernelName:zd,backendName:"cpu",kernelFunc:IX};function SX(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a;be([s,a],"avgPoolGrad");let{filterSize:i,strides:u,pad:c}=r,l=T.computePool2DInfo(o.shape,i,u,1,c),p=l.strideHeight,d=l.strideWidth,h=l.filterHeight,f=l.filterWidth,g=l.dilationHeight,m=l.dilationWidth,b=l.effectiveFilterHeight,y=l.effectiveFilterWidth,v=y-1-l.padInfo.left,x=b-1-l.padInfo.top,k=Me(o.shape,"float32"),S=1/(h*f),N=n.data.get(s.dataId).values,E=Me(s.shape,"float32",N);for(let $=0;$=l.outHeight||Math.floor(K)!==K))for(let q=0;q=l.outWidth||Math.floor(Z)!==Z)continue;let J=E.get($,K,Z,F);U+=J}}k.set(U*S,$,D,R,F)}return n.makeTensorInfo(k.shape,k.dtype,k.values)}var CX={kernelName:Bd,backendName:"cpu",kernelFunc:SX};function TX(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,scale:a,offset:o,mean:i,variance:u}=t;w.assert(i.shape.length===u.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),w.assert(o==null||i.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),w.assert(a==null||i.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),be([s,i,u,a,o],"batchNorm");let{varianceEpsilon:c}=r;c==null&&(c=.001);let l=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,d=n.data.get(u.dataId).values,h=a?n.data.get(a.dataId).values:new Float32Array([1]),f=o?n.data.get(o.dataId).values:new Float32Array([0]),g=new Float32Array(l.length),m=f.length,b=h.length,y=d.length,v=p.length,x=0,k=0,S=0,N=0;for(let E=0;E=m&&(x=0),k>=v&&(k=0),S>=b&&(S=0),N>=y&&(N=0);return n.makeTensorInfo(s.shape,s.dtype,g)}var NX={kernelName:ni,backendName:"cpu",kernelFunc:TX};function _X(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,crops:o}=r;be([s],"batchToSpaceND");let i=a.reduce((b,y)=>b*y),u=T.getReshaped(s.shape,a,i),c=T.getPermuted(u.length,a.length),l=T.getReshapedPermuted(s.shape,a,i),p=T.getSliceBeginCoords(o,a.length),d=T.getSliceSize(l,o,a.length),h=yt({inputs:{x:s},backend:n,attrs:{shape:u}}),f=Wn({inputs:{x:h},backend:n,attrs:{perm:c}}),g=yt({inputs:{x:f},backend:n,attrs:{shape:l}}),m=ko({inputs:{x:g},backend:n,attrs:{begin:p,size:d}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),m}var EX={kernelName:mc,backendName:"cpu",kernelFunc:_X};function AX(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:a}=t,{size:o}=r,i=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,c=Hk(i,u,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,c)}var DX={kernelName:gc,backendName:"cpu",kernelFunc:AX};function $X(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,a=n.data.get(r.dataId).values,o=n.data.get(s.dataId).values,i=T.assertAndGetBroadcastShape(Array.from(a),Array.from(o));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var FX={kernelName:Wd,backendName:"cpu",kernelFunc:$X},RX=ct(Ca,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e{let{x:t}=e.inputs,n=e.backend,r=new Float32Array(w.sizeFromShape(t.shape)),s=n.data.get(t.dataId),a=s.complexTensorInfos.real,o=s.complexTensorInfos.imag,i=n.data.get(a.dataId).values,u=n.data.get(o.dataId).values;for(let c=0;cg.shape);T.assertParamsConsistent(o,a);let i=T.computeOutShape(t.map(g=>g.shape),a);if(w.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let u=t.filter(g=>w.sizeFromShape(g.shape)>0);if(u.length===1)return hs({inputs:{x:u[0]},backend:n});if(u[0].dtype==="complex64"){let g=u.map(x=>Io({inputs:{input:x},backend:n})),m=u.map(x=>oc({inputs:{input:x},backend:n})),b=ic({inputs:g,backend:n,attrs:{axis:a}}),y=ic({inputs:m,backend:n,attrs:{axis:a}}),v=Qn({inputs:{real:b,imag:y},backend:n});return g.forEach(x=>n.disposeIntermediateTensorInfo(x)),m.forEach(x=>n.disposeIntermediateTensorInfo(x)),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(y),v}let c=u.map(g=>{let b=[-1,w.sizeFromShape(g.shape.slice(a))];return yt({inputs:{x:g},backend:n,attrs:{shape:b}})}),l=c.map(g=>({vals:n.data.get(g.dataId).values,shape:g.shape}));i=T.computeOutShape(c.map(g=>g.shape),1);let p=c[0].shape[0]===1,d=jk(l,i,t[0].dtype,p),h=T.computeOutShape(u.map(g=>g.shape),a),f=n.makeTensorInfo(h,t[0].dtype,d);return c.forEach(g=>n.disposeIntermediateTensorInfo(g)),f}var BX={kernelName:yc,backendName:"cpu",kernelFunc:ic};function jE(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dataFormat:u,dilations:c,dimRoundingMode:l}=r;be([s,a],"conv2d");let p=T.convertConv2DDataFormat(u),d=T.computeConv2DInfo(s.shape,a.shape,o,c,i,l,!1,p),h=d.filterHeight,f=d.filterWidth,g=d.dilationHeight,m=d.dilationWidth,b=d.padInfo.left,y=d.padInfo.top,v=d.dataFormat==="channelsLast",x=new zt(d.outShape,s.dtype),k=w.computeStrides(s.shape),S=w.computeStrides(a.shape),N=k[0],E=v?k[1]:k[2],$=v?k[2]:1,F=v?1:k[1],D=x.strides[0],R=v?x.strides[1]:x.strides[2],C=v?x.strides[2]:1,L=v?1:x.strides[1],U=n.data.get(s.dataId).values,H=n.data.get(a.dataId).values,K=x.values;for(let q=0;q=d.inHeight)continue;let de=oe*S[0],ce=Z+ne*E;for(let we=0;we=d.inWidth)continue;let at=de+Ae*S[1],ft=ce+qe*$,st=at;for(let Je=0;Je=c.inDepth)continue;let q=H*$[0],Z=D+K*E[1];for(let J=0;J=c.inHeight)continue;let ne=q+te*$[1],de=Z+oe*E[2];for(let ce=0;ce=c.inWidth)continue;let qe=ne+Ce*$[2],at=de+Ae*c.inChannels,ft=qe;for(let st=0;stMath.cos(e)),JX={kernelName:Go,backendName:"cpu",kernelFunc:ZX},QX=ct(Ho,e=>Math.cosh(e)),eY={kernelName:Ho,backendName:"cpu",kernelFunc:QX};function tY(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:a,boxInd:o}=t,{cropSize:i,method:u,extrapolationValue:c}=r,[l,p,d,h]=s.shape,f=a.shape[0],[g,m]=i,b=Me([f,g,m,h],"float32"),y=n.data.get(a.dataId).values,v=n.data.get(o.dataId).values,x=n.data.get(s.dataId).values,k=w.computeStrides(s.shape),S=w.computeStrides(b.shape);for(let N=0;N=l)continue;let L=g>1?(D-$)*(p-1)/(g-1):0,U=m>1?(R-F)*(d-1)/(m-1):0;for(let H=0;H1?$*(p-1)+H*L:.5*($+D)*(p-1);if(K<0||K>p-1){for(let q=0;q1?F*(d-1)+ee*U:.5*(F+R)*(d-1);if(se<0||se>d-1){for(let de=0;de1?F*(d-1)+q*U:.5*(F+R)*(d-1);if(Z<0||Z>d-1){for(let se=0;seb+f-y-1:(b,y)=>b+y;for(let b=0;bb+f-y-1:(b,y)=>b+y;for(let b=0;b`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${o}`);let i=s.shape[0],u=s.shape[1],c=s.shape[2],l=s.shape[3],p=u*a,d=c*a,h=l/(a*a),f=n.data.get(s.dataId).values,g=new Float32Array(i*p*d*h),m=0;for(let b=0;b`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${d}'`);let h=T.computeConv2DInfo(s.shape,a.shape,o,d,i,c,!0),{filterHeight:f,filterWidth:g,dilationHeight:m,dilationWidth:b,padInfo:y}=h,v=y.left,x=y.top,k=h.outChannels/h.inChannels,S=new zt(h.outShape,s.dtype),N=n.data.get(s.dataId).values,E=n.data.get(a.dataId).values,$=S.values;for(let F=0;F=h.inHeight)continue;let q=H*p[0],Z=D+K*l[1];for(let J=0;J=h.inWidth)continue;let ne=q+te*p[1],de=Z+oe*h.inChannels,ce=ee,we=ne;for(let ve=0;ve{let{x:r,filter:s}=e,{strides:a,pad:o,dilations:i}=n,u=t,c=u.data.get(r.dataId).values,l=r.shape.length,p=u.data.get(s.dataId).values,d=s.shape.length,{batchSize:h,inHeight:f,inWidth:g,inChannels:m,outHeight:b,outWidth:y,padInfo:v,strideHeight:x,strideWidth:k,filterHeight:S,filterWidth:N,dilationHeight:E,dilationWidth:$,outShape:F}=T.computeDilation2DInfo(r.shape,s.shape,a,o,"NHWC",i),D=w.sizeFromShape(F),R=F.length,C=w.getArrayFromDType(r.dtype,D);for(let U=0;U=0&&oe=0&&deee&&(ee=ve)}}}let se=w.locToIndex([U,H,q,J],R,w.computeStrides(F));C[se]=ee}}}return{dataId:u.write(w.toTypedArray(C,r.dtype),F,r.dtype),shape:F,dtype:r.dtype}}},vY={kernelName:qu,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:a}=e,{strides:o,pad:i,dilations:u}=n,c=t,l=w.toNestedArray(r.shape,c.data.get(r.dataId).values),p=w.toNestedArray(s.shape,c.data.get(s.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:g,outHeight:m,outWidth:b,padInfo:y,strideHeight:v,strideWidth:x,filterHeight:k,filterWidth:S,dilationHeight:N,dilationWidth:E,outShape:$}=T.computeDilation2DInfo(r.shape,s.shape,o,i,"NHWC",u);w.assert(a.rank===$.length,()=>`Error in ${qu}, dy must have the same rank as output ${$.length}, but got ${a.rank}`);let F=w.toNestedArray($,c.data.get(a.dataId).values),D=w.makeZerosNestedTypedArray(s.shape,s.dtype);for(let C=0;C=0&&te=0&&neZ&&(Z=de,J=se,ee=oe)}}}D[J][ee][q]+=F[C][L][H][q]}}}return{dataId:c.write(w.toTypedArray(D,r.dtype),s.shape,s.dtype),shape:s.shape,dtype:s.dtype}}},xY={kernelName:ju,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:a}=e,{strides:o,pad:i,dilations:u}=n,c=t,l=w.toNestedArray(r.shape,c.data.get(r.dataId).values),p=w.toNestedArray(s.shape,c.data.get(s.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:g,outHeight:m,outWidth:b,padInfo:y,strideHeight:v,strideWidth:x,filterHeight:k,filterWidth:S,dilationHeight:N,dilationWidth:E,outShape:$}=T.computeDilation2DInfo(r.shape,s.shape,o,i,"NHWC",u);w.assert(a.rank===$.length,()=>`Error in ${ju}, dy must have the same rank as output ${$.length}, but got ${a.rank}`);let F=w.toNestedArray($,c.data.get(a.dataId).values),D=w.makeZerosNestedTypedArray(r.shape,r.dtype);for(let C=0;C=0&&te=0&&neZ&&(Z=de,J=te,ee=ne)}}}D[C][J][ee][q]+=F[C][L][H][q]}}}return{dataId:c.write(w.toTypedArray(D,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function wY(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{canvas:a,options:o}=r,{contextOptions:i,imageOptions:u}=o||{},c=(u==null?void 0:u.alpha)||1,l=(i==null?void 0:i.contextType)||"2d";if(l!=="2d")throw new Error(`Context type ${i.contextType} is not supported by the CPU backend.`);let p=a.getContext(l,(i==null?void 0:i.contextAttributes)||{});if(p==null)throw new Error(`Could not get the context with ${l} type.`);let[d,h]=s.shape.slice(0,2),f=s.shape.length===2?1:s.shape[2],g=n.data.get(s.dataId).values,m=s.dtype==="float32"?255:1,b=new Uint8ClampedArray(h*d*4);for(let v=0;v1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${N}.`)}else if(s.dtype==="int32"&&(N<0||N>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${N}.`);f===1?(x[0]=N*m,x[1]=N*m,x[2]=N*m):x[S]=N*m}let k=v*4;b[k+0]=Math.round(x[0]),b[k+1]=Math.round(x[1]),b[k+2]=Math.round(x[2]),b[k+3]=Math.round(x[3])}a.width=h,a.height=d;let y=new ImageData(b,h,d);return p.putImageData(y,0,0),s}var IY={kernelName:Wf,backendName:"cpu",kernelFunc:wY};function Rp(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;be(s,"sum");let i;s.dtype==="bool"?i=wa({inputs:{x:s},backend:n,attrs:{dtype:"int32"}}):i=hs({inputs:{x:s},backend:n});let u=i.shape.length,c=w.parseAxisParam(a,i.shape),l=T.getAxesPermutation(c,u),p=c,d=i;l!=null&&(d=Wn({inputs:{x:i},backend:n,attrs:{perm:l}}),p=T.getInnerMostAxes(p.length,u)),T.assertAxesAreInnerMostDims("sum",p,d.shape.length);let[h,f]=T.computeOutAndReduceShapes(d.shape,p),g=T.upcastType(d.dtype,"int32"),m=Sf(n,h,g),b=w.sizeFromShape(f),y=n.data.get(m.dataId).values,v=n.data.get(d.dataId).values;for(let x=0;x=0&&(d=Rp({inputs:{x:d},backend:n,attrs:{axis:c[g]-(o.length-h),keepDims:!1}}),f.push(d)),h--)}for(let g of f)g!==d&&n.disposeIntermediateTensorInfo(g);return d}var CY={kernelName:Vf,backendName:"cpu",kernelFunc:SY};function TY(e){let{inputs:t,backend:n}=e,{dy:r,y:s}=t;be([r,s],"eluGrad");let a=new Float32Array(w.sizeFromShape(s.shape)),o=n.data.get(s.dataId).values,i=n.data.get(r.dataId).values;for(let u=0;u=0?a[u]=i[u]:a[u]=i[u]*(c+1)}return n.makeTensorInfo(s.shape,"float32",a)}var NY={kernelName:Sc,backendName:"cpu",kernelFunc:TY},_Y=T.ERF_P,EY=T.ERF_A1,AY=T.ERF_A2,DY=T.ERF_A3,$Y=T.ERF_A4,FY=T.ERF_A5,RY=ct(Zo,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+_Y*n);return t*(1-((((FY*r+$Y)*r+DY)*r+AY)*r+EY)*r*Math.exp(-n*n))}),PY={kernelName:Zo,backendName:"cpu",kernelFunc:RY};function Nf(e){let{inputs:t,backend:n,attrs:r}=e,{input:s}=t,{dim:a}=r,o=s.shape.length,i=s.shape.slice(),u=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),u=o+a+1),i.splice(u,0,1),yt({inputs:{x:s},backend:n,attrs:{shape:i}})}var OY={kernelName:Tc,backendName:"cpu",kernelFunc:Nf},MY=Ot((e,t)=>e/t),r0=Zt(Xo,MY),mx={kernelName:Xo,backendName:"cpu",kernelFunc:r0};function KE(e,t,n){let r=e.shape,s=r[0],a=r[1],o=n.data.get(e.dataId),i=o.complexTensorInfos.real,u=o.complexTensorInfos.imag,c=[s,a],l=w.sizeFromShape(c),p=w.getTypedArrayFromDType("float32",l),d=w.getTypedArrayFromDType("float32",l);for(let m=0;m{let{image:r}=e,s=n,a=w.getTypedArrayFromDType(r.dtype,w.sizeFromShape(r.shape)),[o,i,u,c]=r.shape,l=s.data.get(r.dataId).values;for(let d=0;d=0&&v=0,()=>`GatherV2: the index value ${k} is not in [0, ${l-1}]`)}let p=i;i==null&&(p=0);let d=w.sizeFromShape(a.shape),h=T.segment_util.collectGatherOpShapeInfo(s,a,u,p),f=yt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),g=yt({inputs:{x:a},backend:n,attrs:{shape:[h.batchSize,d/h.batchSize]}}),m=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],b=n.bufferSync(g),y=n.bufferSync(f),v=dE(y,b,m);return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),n.makeTensorInfo(h.outputShape,v.dtype,v.values)}var QY={kernelName:_c,backendName:"cpu",kernelFunc:JY};function e7(e){let{inputs:t,backend:n}=e,{input:r}=t,s=w.sizeFromShape(r.shape),a=r.shape[r.shape.length-1],o=s/a,i=yt({inputs:{x:r},backend:n,attrs:{shape:[o,a]}}),u=KE(i,!0,n),c=yt({inputs:{x:u},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(u),c}var t7={kernelName:Gf,backendName:"cpu",kernelFunc:e7},n7=ct(ai,e=>Number.isFinite(e)?1:0,"bool"),r7={kernelName:ai,backendName:"cpu",kernelFunc:n7},s7=ct(oi,e=>Math.abs(e)===1/0?1:0,"bool"),a7={kernelName:oi,backendName:"cpu",kernelFunc:s7},o7=ct(ii,e=>Number.isNaN(e)?1:0,"bool"),i7={kernelName:ii,backendName:"cpu",kernelFunc:o7};function u7(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:a}=n,o=gE(r,s,a);return t.makeTensorInfo([o.length],"float32",o)}var c7={kernelName:Fc,backendName:"cpu",kernelFunc:u7},l7=ct(li,e=>Math.log1p(e)),d7={kernelName:li,backendName:"cpu",kernelFunc:l7},p7=Ot((e,t)=>e&&t),h7=Zt(Rc,p7,null,"bool"),f7={kernelName:Rc,backendName:"cpu",kernelFunc:h7},m7=ct(Pc,e=>e?0:1,"bool"),g7={kernelName:Pc,backendName:"cpu",kernelFunc:m7},b7=Ot((e,t)=>e||t),y7=Zt(Oc,b7,null,"bool"),v7={kernelName:Oc,backendName:"cpu",kernelFunc:y7};function x7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:a,bias:o,alpha:i,beta:u}=r;be(s,"LRN");let c=s.shape[3],l=c-1,p=n.data.get(s.dataId).values,d=w.sizeFromShape(s.shape),h=new Float32Array(d);function f(g){let m=g%c,b=g-m+Math.max(0,m-a),y=g-m+Math.min(m+a,l),v=0;for(;b<=y;b++){let x=p[b];v+=x*x}return v}for(let g=0;g`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${c}'`);let l=T.computePool2DInfo(s.shape,a,o,c,i,u),p;if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))p=hs({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,h=w.computeStrides(s.shape),f=n0(d,s.shape,s.dtype,h,l,"max");p=n.makeTensorInfo(l.outShape,s.dtype,f.values)}return p}var T7={kernelName:fi,backendName:"cpu",kernelFunc:C7};function N7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:u,dataFormat:c}=r;be(s,"maxPool3d");let l=T.computePool3DInfo(s.shape,a,o,1,i,u,c),p=n.data.get(s.dataId).values,d=HE(p,s.shape,s.dtype,w.computeStrides(s.shape),l,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var _7={kernelName:Lc,backendName:"cpu",kernelFunc:N7};function E7(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:u,dimRoundingMode:c}=r;be([s,a],"maxPool3DGrad");let l=T.computePool3DInfo(a.shape,o,i,1,u,c),p=n.bufferSync(a),d=bX(p,l),h=l.strideDepth,f=l.strideHeight,g=l.strideWidth,m=l.dilationDepth,b=l.dilationHeight,y=l.dilationWidth,v=l.effectiveFilterDepth,x=l.effectiveFilterHeight,k=l.effectiveFilterWidth,S=v-1-l.padInfo.front,N=k-1-l.padInfo.left,E=x-1-l.padInfo.top,$=Me(a.shape,"float32"),F=n.bufferSync(s);for(let D=0;D=l.outDepth||Math.floor(ee)!==ee))for(let se=0;se=l.outHeight||Math.floor(te)!==te))for(let oe=0;oe=l.outWidth||Math.floor(ne)!==ne)continue;let de=v*x*k-1-d.get(D,ee,te,ne,R),ce=J*x*k+se*k+oe,we=de===ce?1:0;if(we===0)continue;let ve=F.get(D,ee,te,ne,R);Z+=ve*we}}}$.set(Z,D,C,L,U,R)}return n.makeTensorInfo($.shape,$.dtype,$.values)}var A7={kernelName:qd,backendName:"cpu",kernelFunc:E7};function D7(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a,output:o}=t,i=a;be([a,o],"maxPoolGrad");let{filterSize:u,strides:c,pad:l,dimRoundingMode:p}=r,d=T.computePool2DInfo(i.shape,u,c,1,l,p),h=n.data.get(i.dataId).values,f=Me(d.outShape,i.dtype,GE(h,i.shape,i.dtype,d).values),g=d.strideHeight,m=d.strideWidth,b=d.dilationHeight,y=d.dilationWidth,v=d.effectiveFilterHeight,x=d.effectiveFilterWidth,k=x-1-d.padInfo.left,S=v-1-d.padInfo.top,N=Me(i.shape,"float32"),E=n.data.get(s.dataId).values,$=Me(s.shape,"float32",E);for(let F=0;F=d.outHeight||Math.floor(q)!==q))for(let Z=0;Z=d.outWidth||Math.floor(J)!==J)continue;let ee=v*x-1-f.get(F,q,J,D),se=K*x+Z,te=ee===se?1:0;if(te===0)continue;let oe=$.get(F,q,J,D);H+=oe*te}}N.set(H,F,R,C,D)}return n.makeTensorInfo(N.shape,N.dtype,N.values)}var $7={kernelName:jd,backendName:"cpu",kernelFunc:D7};function F7(e,t,n,r,s){let a=w.computeStrides(t),o=n0(e,t,n,a,s,"max"),i=GE(e,t,n,s,!0,r);return[o.values,i.values]}var R7={kernelName:Kd,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:a,pad:o,includeBatchInIndex:i}=t,u=n;be(r,"MaxPoolWithArgmax");let c=u.data.get(r.dataId).values,l=T.computePool2DInfo(r.shape,s,a,[1,1],o),[p,d]=F7(c,r.shape,r.dtype,i,l),h=u.write(p,l.outShape,r.dtype),f=u.write(d,l.outShape,r.dtype);return[{dataId:h,shape:l.outShape,dtype:r.dtype},{dataId:f,shape:l.outShape,dtype:"int32"}]}};function P7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=w.parseAxisParam(a,s.shape),c=T.computeOutAndReduceShapes(s.shape,i)[1],l=w.sizeFromShape(c),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([l]));p.push(d);let h=wa({inputs:{x:s},backend:n,attrs:{dtype:"float32"}});p.push(h);let f=r0({inputs:{a:h,b:d},backend:n});p.push(f);let g=Rp({inputs:{x:f},backend:n,attrs:{axis:a,keepDims:o}});return p.forEach(m=>n.disposeIntermediateTensorInfo(m)),g}var O7={kernelName:mi,backendName:"cpu",kernelFunc:P7};function M7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;be(s,"min");let i=w.parseAxisParam(a,s.shape),u=i,c=T.getAxesPermutation(u,s.shape.length),l=s;c!=null&&(l=Wn({inputs:{x:s},backend:n,attrs:{perm:c}}),u=T.getInnerMostAxes(u.length,s.shape.length)),T.assertAxesAreInnerMostDims("min",u,l.shape.length);let[p,d]=T.computeOutAndReduceShapes(l.shape,u),h=w.sizeFromShape(d),f=w.makeZerosTypedArray(w.sizeFromShape(p),l.dtype),g=n.data.get(l.dataId).values;for(let b=0;bv[0]+s.shape[x]+v[1]),u=a.map(v=>v[0]),c=a.map((v,x)=>v[0]+s.shape[x]),l=o==="reflect"?0:1,p=n.data.get(s.dataId).values,d=s.shape.length,h=w.computeStrides(s.shape),f=w.sizeFromShape(i),g=i.length,m=w.computeStrides(i),b=w.getTypedArrayFromDType(s.dtype,f);for(let v=0;v=c[S]&&(x[S]=(c[S]-1)*2-x[S]+l);x=x.map((S,N)=>S-u[N]);let k=w.locToIndex(x,d,h);b[v]=p[k]}return{dataId:n.write(b,i,s.dtype),shape:i,dtype:s.dtype}}var z7={kernelName:yi,backendName:"cpu",kernelFunc:B7},W7=Ot((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),V7=Zt(vi,W7),U7={kernelName:vi,backendName:"cpu",kernelFunc:V7},G7=ka(Ff());function YE(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:a}=r,o=s.shape.length,i=a;if(i===-1&&(i=o-1),i!==o-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${o} and dim was ${i}`);let u=w.parseAxisParam([i],s.shape),c=XE({inputs:{x:s},backend:n,attrs:{reductionIndices:u,keepDims:!1}}),l=T.expandShapeToKeepDim(c.shape,u),p=yt({inputs:{x:c},backend:n,attrs:{shape:l}}),d=e0({inputs:{a:s,b:p},backend:n}),h=oE({inputs:{x:d},backend:n}),f=Rp({inputs:{x:h},backend:n,attrs:{axis:u,keepDims:!1}}),g=yt({inputs:{x:f},backend:n,attrs:{shape:l}}),m=r0({inputs:{a:h,b:g},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),m}var H7={kernelName:Vi,backendName:"cpu",kernelFunc:YE};function j7(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:a,seed:o,normalized:i}=r;be(s,"multinomial");let u=i?s:YE({inputs:{logits:s},backend:n,attrs:{dim:-1}}),c=u.shape[0],l=u.shape[1],p=n.data.get(u.dataId).values,d=[c,a],h=w.makeZerosTypedArray(w.sizeFromShape(d),"int32");for(let f=0;f=0&&p[d]{w.assertShapesMatch(a,l.shape,"All tensors passed to stack must have matching shapes"),w.assert(o===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],u=t.map(l=>{let p=Nf({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),c=ic({inputs:u,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeIntermediateTensorInfo(l)),c}var i9={kernelName:jc,backendName:"cpu",kernelFunc:JE};function u9(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:a,constantValue:o}=r;be(s,"pad");let i=a.map((y,v)=>y[0]+s.shape[v]+y[1]),u=a.map(y=>y[0]),c=n.data.get(s.dataId).values,l=w.sizeFromShape(s.shape),p=s.shape.length,d=w.computeStrides(s.shape),h=w.sizeFromShape(i),f=i.length,g=w.computeStrides(i),m=w.getTypedArrayFromDType(s.dtype,h);o!==0&&m.fill(o);for(let y=0;yS+u[N]),k=w.locToIndex(x,f,g);m[k]=c[y]}return{dataId:n.write(m,i,s.dtype),shape:i,dtype:s.dtype}}var QE={kernelName:Ii,backendName:"cpu",kernelFunc:u9},c9=Ot((e,t)=>Math.pow(e,t)),l9=Zt(ki,c9),d9={kernelName:ki,backendName:"cpu",kernelFunc:l9};function p9(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:s,paramsDenseValues:a,indices:o}=t,{outputRaggedRank:i}=r,u=s.map(b=>n.data.get(b.dataId).values),c=s.map(b=>b.shape),l=n.data.get(a.dataId).values,p=n.data.get(o.dataId).values,[d,h,f]=SE(u,c,l,a.shape,a.dtype,p,o.shape,i),g=d.map(b=>n.makeTensorInfo([b.length],"int32",b)),m=n.makeTensorInfo(f,a.dtype,h);return g.concat([m])}var h9={kernelName:jf,backendName:"cpu",kernelFunc:p9};function f9(e){let{inputs:t,backend:n}=e,{starts:r,limits:s,deltas:a}=t,o=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,[c,l]=CE(o,r.shape,r.dtype,i,s.shape,u,a.shape),p=n.makeTensorInfo([c.length],"int32",c),d=n.makeTensorInfo([l.length],r.dtype,l);return[p,d]}var m9={kernelName:qf,backendName:"cpu",kernelFunc:f9};function g9(e){let{inputs:t,backend:n,attrs:r}=e,{shape:s,values:a,defaultValue:o,rowPartitionTensors:i}=t,{rowPartitionTypes:u}=r,c=n.data.get(s.dataId).values,l=n.data.get(a.dataId).values,p=n.data.get(o.dataId).values,d=i.map(m=>n.data.get(m.dataId).values),h=i.map(m=>m.shape),[f,g]=TE(c,s.shape,l,a.shape,a.dtype,p,o.shape,d,h,u);return n.makeTensorInfo(f,a.dtype,g)}var b9={kernelName:Kf,backendName:"cpu",kernelFunc:g9};function y9(e){let{backend:t,attrs:n}=e,{start:r,stop:s,dtype:a,step:o}=n,i=Xk(r,s,o,a);return t.makeTensorInfo([i.length],a,i)}var v9={kernelName:Xd,backendName:"cpu",kernelFunc:y9},x9=ct(Ti,e=>1/e),w9={kernelName:Ti,backendName:"cpu",kernelFunc:x9};function I9(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r;be(s,"resizeBilinear");let u=w.computeStrides(s.shape),[c,l]=i,[p,d,h,f]=s.shape,g=n.data.get(s.dataId).values,m=new Float32Array(w.sizeFromShape([p,c,l,f])),b=[a&&c>1?d-1:d,a&&l>1?h-1:h],y=[a&&c>1?c-1:c,a&&l>1?l-1:l],v=0,x=b[0]/y[0],k=b[1]/y[1];for(let S=0;S1?c-1:c,o&&h>1?l-1:l],m=[o&&d>1?d-1:d,o&&h>1?h-1:h],b=g[0]/m[0],y=g[1]/m[1],v=n.data.get(a.dataId).values,x=0;for(let k=0;k1?d-1:d,a&&l>1?h-1:h],y=[a&&c>1?c-1:c,a&&l>1?l-1:l],v=b[0]/y[0],x=b[1]/y[1],k=0;for(let S=0;S1?l-1:l,o&&f>1?p-1:p],y=[o&&h>1?h-1:h,o&&f>1?f-1:f],v=b[0]/y[0],x=b[1]/y[1],k=1/v,S=1/x,N=Math.ceil(k)*2+2,E=Math.ceil(S)*2+2;for(let $=0;$=h)continue;let te=F+se*u[1],oe=se*v,ne=Math.min(l-1,o?Math.round(oe):Math.floor(oe));if(D===ne)for(let de=0;de=f)continue;let we=te+ce*u[2],ve=ce*x,Ce=Math.min(p-1,o?Math.round(ve):Math.floor(ve));U===Ce&&(J+=m[we+Z])}}g[H+Z]=J}}}}return n.makeTensorInfo(s.shape,s.dtype,g)}var E9={kernelName:Kc,backendName:"cpu",kernelFunc:_9};function A9(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:a}=r;be(s,"reverse");let o=s.shape.length,i=w.parseAxisParam(a,s.shape);if(o===0)return hs({inputs:{x:s},backend:n});let u=new zt(s.shape,s.dtype),c=n.bufferSync(s);for(let l=0;ld[h]=s.shape[h]-1-d[h]),u.set(c.get(...d),...p)}return n.makeTensorInfo(u.shape,u.dtype,u.values)}var D9={kernelName:Di,backendName:"cpu",kernelFunc:A9},$9={kernelName:ll,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:a,center:o}=t,i=n,u=w.getTypedArrayFromDType(r.dtype,w.sizeFromShape(r.shape)),[c,l,p,d]=r.shape,[h,f]=T.getImageCenter(o,l,p),g=255,m=Math.sin(s),b=Math.cos(s),y=i.data.get(r.dataId).values;for(let x=0;x=0&&L=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}),R9={kernelName:$i,backendName:"cpu",kernelFunc:F9};function P9(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:a}=t,{shape:o}=r,{sliceRank:i,numUpdates:u,sliceSize:c,strides:l,outputSize:p}=T.calculateShapes(a,s,o),d=!0,h=n.bufferSync(s),f=n.bufferSync(a),g=so(h,f,o,p,c,u,i,l,0,d);return n.makeTensorInfo(o,g.dtype,g.values)}var O9={kernelName:Yc,backendName:"cpu",kernelFunc:P9};function M9(e,t){let n=0,r=e.length,s=0;for(;n1||s.shape.length===1?1:w.sizeFromShape(s.shape.slice(1));for(let f=0;fe>=0?H9*e:G9*(Math.exp(e)-1)),q9={kernelName:Ri,backendName:"cpu",kernelFunc:j9},K9=ct(Mi,e=>e<0?-1:e>0?1:0),X9={kernelName:Mi,backendName:"cpu",kernelFunc:K9},Y9=ct(Pi,e=>Math.sin(e)),Z9={kernelName:Pi,backendName:"cpu",kernelFunc:Y9},J9=ct(Oi,e=>Math.sinh(e)),Q9={kernelName:Oi,backendName:"cpu",kernelFunc:J9},eZ=11920928955078125e-23,k1=Math.log(eZ)+2,tZ=ct(Bi,e=>{let t=e>-k1,n=eNumber(m)))),n.makeTensorInfo([g.length],r.dtype,new Int32Array(g))]}var oZ={kernelName:Yd,backendName:"cpu",kernelFunc:aZ};function iZ(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:a}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${a.shape}`);let o=Array.from(n.data.get(s.dataId).values),i=n.data.get(r.dataId).values,u=Array.from(n.data.get(a.dataId).values),[c,l,p]=AE(i,r.shape,r.dtype,o,u);return[n.makeTensorInfo(l,r.dtype,c),n.makeTensorInfo([p.length],a.dtype,new Int32Array(p))]}var uZ={kernelName:rl,backendName:"cpu",kernelFunc:iZ};function cZ(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:a}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${a.shape}`);if(s.shape[0]!==a.shape[0])throw new Error("segmentIds and indices should have same size.");let o=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,[c,l]=Yk(o,r.shape,r.dtype,i,u,!0);return n.makeTensorInfo(l,r.dtype,c)}var lZ={kernelName:Zd,backendName:"cpu",kernelFunc:cZ};function dZ(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:a}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${a.shape}`);if(s.shape[0]!==a.shape[0])throw new Error("segmentIds and indices should have same size.");let o=n.data.get(r.dataId).values,i=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,[c,l]=Yk(o,r.shape,r.dtype,i,u);return n.makeTensorInfo(l,r.dtype,c)}var pZ={kernelName:Jd,backendName:"cpu",kernelFunc:dZ};function hZ(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:a,defaultValue:o}=t,{outputShape:i}=r,{sliceRank:u,numUpdates:c,sliceSize:l,strides:p,outputSize:d}=T.calculateShapes(a,s,i),h=!1,f=n.bufferSync(s),g;switch(a.dtype){case"bool":{let m=n.bufferSync(a),b=!!n.data.get(o.dataId).values[0];g=so(f,m,i,d,l,c,u,p,b,h);break}case"float32":{let m=n.bufferSync(a),b=n.data.get(o.dataId).values[0];g=so(f,m,i,d,l,c,u,p,b,h);break}case"int32":{let m=n.bufferSync(a),b=n.data.get(o.dataId).values[0];g=so(f,m,i,d,l,c,u,p,b,h);break}case"string":{let m=n.bufferSync(a),b=w.decodeString(n.data.get(o.dataId).values[0]);g=so(f,m,i,d,l,c,u,p,b,h);break}default:throw new Error(`Unsupported type ${a.dtype}`)}return n.makeTensorInfo(i,g.dtype,g.values)}var fZ={kernelName:sl,backendName:"cpu",kernelFunc:hZ};function mZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=r,i=w.parseAxisParam(o,s.shape)[0],u=T.prepareSplitSize(s,a,i),c=new Array(s.shape.length).fill(0),l=s.shape.slice();return u.map(p=>{let d=[...l];d[i]=p;let h=ko({inputs:{x:s},backend:n,attrs:{begin:c,size:d}});return c[i]+=p,h})}var gZ={kernelName:nl,backendName:"cpu",kernelFunc:mZ},bZ={kernelName:Qd,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,r=t;be(n,"square");let s=r.data.get(n.dataId).values,a=new Float32Array(s.length);for(let i=0;i{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),vZ={kernelName:Na,backendName:"cpu",kernelFunc:yZ};function xZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,end:o,strides:i,beginMask:u,endMask:c,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r;be(s,"stridedSlice");let{finalShapeSparse:h,finalShape:f,isIdentity:g,sliceDim0:m,isSimpleSlice:b,begin:y,end:v,strides:x}=Kt.sliceInfo(s.shape,a,o,i,u,c,l,p,d),k;if(g)k=yt({inputs:{x:s},backend:n,attrs:{shape:f}});else if(m||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let S=Kt.computeOutShape(y,v,x),N=ko({inputs:{x:s},backend:n,attrs:{begin:y,size:S}});k=yt({inputs:{x:N},backend:n,attrs:{shape:f}}),n.disposeIntermediateTensorInfo(N)}else{let S=n.bufferSync(s),N=FE(h,S,x,y);k=n.makeTensorInfo(f,N.dtype,N.values)}return k}var wZ={kernelName:al,backendName:"cpu",kernelFunc:xZ};function IZ(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:a,leftPad:o,rightPad:i,padWidth:u,preserveShortSequences:c}=r,{data:l,dataSplits:p}=t,d=n.data.get(l.dataId).values,h=n.data.get(p.dataId).values,[f,g]=Zk(d,h,s,a,o,i,u,c);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",g)]}var kZ={kernelName:tp,backendName:"cpu",kernelFunc:IZ};function SZ(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:a,delimiter:o}=t;if(a.dtype!=="string")throw new Error("Input must be of datatype string");if(a.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${a.shape}`);if(o.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${o.shape}`);let i=n.data.get(a.dataId).values,u=n.data.get(o.dataId).values[0],[c,l,p]=Jk(i,u,s),d=l.length;return[n.makeTensorInfo([d,2],"int32",c),n.makeTensorInfo([d],"string",l),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var CZ={kernelName:np,backendName:"cpu",kernelFunc:SZ};function TZ(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:a}=t;if(a.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let o=n.data.get(a.dataId).values,i=Qk(o,s);return n.makeTensorInfo(a.shape,"int32",i)}var NZ={kernelName:rp,backendName:"cpu",kernelFunc:TZ},_Z=ct(Hi,e=>Math.tan(e)),EZ={kernelName:Hi,backendName:"cpu",kernelFunc:_Z},AZ=ct(ji,e=>Math.tanh(e)),DZ={kernelName:ji,backendName:"cpu",kernelFunc:AZ};function $Z(e){let{inputs:t,backend:n}=e,{tensor:r,indices:s,updates:a}=t,{sliceRank:o,numUpdates:i,sliceSize:u,strides:c,outputSize:l}=T.calculateShapes(a,s,r.shape),p=!1,d=n.bufferSync(s),h=n.bufferSync(a),f=n.bufferSync(r),g=so(d,h,r.shape,l,u,i,o,c,f,p);return n.makeTensorInfo(r.shape,g.dtype,g.values)}var FZ={kernelName:Zc,backendName:"cpu",kernelFunc:$Z};function RZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reps:a}=r;be(s,"tile");let o=PE(n.bufferSync(s),a);return n.makeTensorInfo(o.shape,o.dtype,o.values)}var PZ={kernelName:Ta,backendName:"cpu",kernelFunc:RZ};function OZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{k:a,sorted:o}=r;be(s,"topk");let i=n.data.get(s.dataId).values,[u,c]=ME(i,s.shape,s.dtype,a,o);return[n.makeTensorInfo(u.shape,u.dtype,u.values),n.makeTensorInfo(c.shape,c.dtype,c.values)]}var MZ={kernelName:ol,backendName:"cpu",kernelFunc:OZ};function LZ(e){let{inputs:t,attrs:n,backend:r}=e,{image:s,transforms:a}=t,{interpolation:o,fillMode:i,fillValue:u,outputShape:c}=n,[l,p,d,h]=s.shape,[f,g]=c!=null?c:[p,d],m=[l,f,g,h],b=w.computeStrides(s.shape),y=b[0],v=b[1],x=b[2],k=w.computeStrides(m),S=k[0],N=k[1],E=k[2],$=w.getTypedArrayFromDType(s.dtype,w.sizeFromShape(m));$.fill(u);let F=r.data.get(s.dataId).values,D=r.data.get(a.dataId).values;for(let C=0;Ct-1)if(t<=1)n=0;else{let r=2*t;n-=r*Math.trunc(n/r),n>=t&&(n=r-n-1)}return w.clamp(0,n,t-1)}function WZ(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=t-1;n+=t*(Math.trunc(-n/r)+1)}else if(n>t-1)if(t<=1)n=0;else{let r=t-1;n-=t*Math.trunc(n/r)}return w.clamp(0,n,t-1)}function VZ(e,t){return e}function UZ(e,t){return w.clamp(0,e,t-1)}function cd(e,t,n,r,s,a,o,i,u,c,l){let p=o*r+i*s+u*a+c;return 0<=i&&in.disposeIntermediateTensorInfo(f)),h}var ZZ={kernelName:ap,backendName:"cpu",kernelFunc:YZ},JZ=[HK,S8,qK,XK,A8,ZK,QK,tX,rX,aX,iX,cX,dX,fX,gX,vX,wX,kX,CX,UK,NX,EX,DX,$8,FX,_8,R8,PX,C8,MX,BX,zX,VX,GX,jX,KX,YX,JX,eY,nY,sY,oY,uY,lY,dY,hY,mY,bY,yY,vY,xY,IY,CY,OK,NY,P8,PY,O8,OY,L8,VY,UY,HY,z8,V8,qY,XY,ZY,QY,G8,j8,T8,t7,LX,r7,a7,i7,MK,K8,Y8,c7,J8,d7,f7,g7,v7,w7,k7,S7,eK,T7,_7,A7,$7,R7,O7,L7,nK,z7,U7,q7,sK,oK,Y7,Q7,n9,uK,s9,o9,i9,QE,d9,BK,dK,h9,m9,b9,v9,N8,mx,w9,zK,WK,VK,k9,C9,N9,E9,D9,$9,R9,xK,O9,W9,U9,q9,IK,X9,Z9,Q9,kK,H7,nZ,sZ,oZ,uZ,lZ,pZ,fZ,gZ,TK,bZ,_K,AK,vZ,wZ,kZ,CZ,NZ,RK,kY,EZ,DZ,FZ,PZ,MZ,BZ,cK,qZ,XZ,ZZ,a9];for(let e of JZ)op(e);var eA={};Ee(eA,{assertNotComplex:()=>wl,bindCanvasToFramebuffer:()=>cJ,bindColorTextureToFramebuffer:()=>Jh,bindTextureToProgramUniformSampler:()=>gA,bindTextureUnit:()=>hA,bindVertexBufferToProgramAttribute:()=>bx,callAndCheck:()=>he,canBeRepresented:()=>nA,createFragmentShader:()=>aA,createFramebuffer:()=>pA,createProgram:()=>oA,createStaticIndexBuffer:()=>cA,createStaticVertexBuffer:()=>uA,createTexture:()=>lA,createVertexShader:()=>sA,getBatchDim:()=>So,getExtensionOrThrow:()=>ld,getFramebufferErrorMessage:()=>bA,getMaxTexturesInShader:()=>wA,getNumChannels:()=>iJ,getProgramUniformLocation:()=>mA,getProgramUniformLocationOrThrow:()=>fA,getRowsCols:()=>Co,getShapeAs3D:()=>pd,getTextureShapeFromLogicalShape:()=>vA,getWebGLDisjointQueryTimerVersion:()=>IA,getWebGLErrorMessage:()=>rA,getWebGLMaxTextureSize:()=>xA,hasExtension:()=>dr,isCapableOfRenderingToFloatTexture:()=>kA,isDownloadFloatTextureEnabled:()=>SA,isReshapeFree:()=>$d,isWebGLFenceEnabled:()=>CA,isWebGLVersionEnabled:()=>vx,linkProgram:()=>iA,logShaderSourceAndInfoLog:()=>o0,resetMaxTextureSize:()=>lJ,resetMaxTexturesInShader:()=>dJ,unbindColorTextureFromFramebuffer:()=>yx,unbindTextureUnit:()=>uJ,validateFramebuffer:()=>dd,validateProgram:()=>Zh,validateTextureSize:()=>dA});var no={},Uh={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function tA(e,t){no[e]=t}function qr(e,t){if(!(e in no)||t!=null){let r=eJ(e,t);if(r!==null)no[e]=r;else return console.log("Could not get context for WebGL version",e),null}let n=no[e];return n==null||n.isContextLost()?(delete no[e],qr(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),no[e])}function QZ(e){if(!G().getBool("IS_SAFARI")&&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 eJ(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=t==null?QZ(e):t;return n.addEventListener("webglcontextlost",r=>{r.preventDefault(),delete no[e]},!1),G().getBool("SOFTWARE_WEBGL_ENABLED")&&(Uh.failIfMajorPerformanceCaveat=!1),e===1?n.getContext("webgl",Uh)||n.getContext("experimental-webgl",Uh):n.getContext("webgl2",Uh)}var Dd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(Dd||(Dd={}));var lr;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(lr||(lr={}));var pn;(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"})(pn||(pn={}));function Pp(e,t){return[t,e]}function tJ(e,t){return e*t}function Gh(e){let t=w.sizeFromShape(e),n=Math.ceil(t/4);return w.sizeToSquarishShape(n)}function xl(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function nJ(e,t){let[n,r]=xl(e,t);return n*r*4}function a0(e,t){let n=e,r,s,a,o,i,u,c,l,p,d;return G().getNumber("WEBGL_VERSION")===2?(r=n.R32F,s=n.R16F,a=n.RGBA16F,o=n.RGBA32F,i=n.RED,c=4,l=1,p=n.HALF_FLOAT,d=n.FLOAT,u=n.RGBA8):(r=e.RGBA,s=e.RGBA,a=e.RGBA,o=n.RGBA,i=e.RGBA,c=4,l=4,p=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT,u=e.RGBA),{internalFormatFloat:r,internalFormatHalfFloat:s,internalFormatPackedHalfFloat:a,internalFormatPackedFloat:o,textureFormatFloat:i,downloadTextureFormat:u,downloadUnpackNumChannels:c,defaultNumChannels:l,textureTypeHalfFloat:p,textureTypeFloat:d}}function he(e,t){let n=t();return G().getBool("DEBUG")&&rJ(e),n}function rJ(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+rA(e,t))}var sJ=596e-10,aJ=65504;function nA(e){return!!(G().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||sJe.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function sA(e,t){let n=Ls(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(he(e,()=>e.shaderSource(n,t)),he(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 aA(e,t){let n=Ls(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(he(e,()=>e.shaderSource(n,t)),he(e,()=>e.compileShader(n)),G().get("ENGINE_COMPILE_ONLY"))return n;if(e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw o0(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var oJ=/ERROR: [0-9]+:([0-9]+):/g;function o0(e,t){let n=oJ.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let r=+n[1],s=e.split(` `),a=s.length.toString().length+2,o=s.map((p,d)=>w.rightPad((d+1).toString(),a)+p),i=0;for(let p=0;pe.createProgram(),"Unable to create WebGLProgram.")}function iA(e,t){if(he(e,()=>e.linkProgram(t)),!G().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 Zh(e,t){if(he(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function uA(e,t){let n=Ls(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return he(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),he(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function cA(e,t){let n=Ls(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return he(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),he(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function iJ(){return G().getNumber("WEBGL_VERSION")===2?1:4}function lA(e){return Ls(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function dA(e,t){let n=G().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let r=`[${e}x${t}]`;throw new Error("Requested texture size "+r+" is invalid.")}if(e>n||t>n){let r=`[${e}x${t}]`,s=`[${n}x${n}]`;throw new Error("Requested texture size "+r+" greater than WebGL maximum on this browser / GPU "+s+".")}}function pA(e){return Ls(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function bx(e,t,n,r,s,a,o){let i=e.getAttribLocation(t,n);return i===-1?!1:(he(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),he(e,()=>e.vertexAttribPointer(i,s,e.FLOAT,!1,a,o)),he(e,()=>e.enableVertexAttribArray(i)),!0)}function hA(e,t,n){yA(e,n),he(e,()=>e.activeTexture(e.TEXTURE0+n)),he(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function uJ(e,t){yA(e,t),he(e,()=>e.activeTexture(e.TEXTURE0+t)),he(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function fA(e,t,n){return Ls(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function mA(e,t,n){return e.getUniformLocation(t,n)}function gA(e,t,n,r){he(e,()=>hA(e,t,r)),he(e,()=>e.uniform1i(n,r))}function cJ(e){he(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),he(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),he(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function Jh(e,t,n){he(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),he(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function yx(e,t){he(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),he(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function dd(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+bA(e,t))}function bA(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 Ls(e,t,n){let r=he(e,()=>t());if(r==null)throw new Error(n);return r}function yA(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(rn){let s=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${s}.`)}}function So(e,t=2){return w.sizeFromShape(e.slice(0,e.length-t))}function Co(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 pd(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[So(e),...Co(e)]),t}function vA(e,t=!1){let n=G().getNumber("WEBGL_MAX_TEXTURE_SIZE"),r=G().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");r===1/0&&G().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(r=n/2),t&&(n=n*2,r=r*2,e=e.map((i,u)=>u>=e.length-2?w.nearestLargerEven(e[u]):e[u]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=w.squeezeShape(e).newShape);let s=w.sizeFromShape(e),a=null;e.length<=1&&s<=n?a=[1,s]:e.length===2&&e[0]<=n&&e[1]<=n?a=e:e.length===3&&e[0]*e[1]<=n&&e[2]<=n?a=[e[0]*e[1],e[2]]:e.length===3&&e[0]<=n&&e[1]*e[2]<=n?a=[e[0],e[1]*e[2]]:e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n?a=[e[0]*e[1]*e[2],e[3]]:e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n&&(a=[e[0],e[1]*e[2]*e[3]]);let o=a!=null&&Math.max(...a)>r&&Math.min(...a)<=(t?2:1)&&Math.min(...a)>0;if(a==null||o)if(t){let i=So(e),u=2,c=2;e.length&&([u,c]=Co(e)),s=i*(u/2)*(c/2),a=w.sizeToSquarishShape(s).map(l=>l*2)}else a=w.sizeToSquarishShape(s);return a}function Hh(e){return e%2===0}function $d(e,t){if(e=e.slice(-2),t=t.slice(-2),w.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[e.length-1],r=t[t.length-1];if(n===r||Hh(n)&&Hh(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&Hh(e[0])&&Hh(t[0])}var Qh,ef;function xA(e){if(Qh==null){let t=qr(e);Qh=t.getParameter(t.MAX_TEXTURE_SIZE)}return Qh}function lJ(){Qh=null}function dJ(){ef=null}function wA(e){if(ef==null){let t=qr(e);ef=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,ef)}function IA(e){if(e===0)return 0;let t,n=qr(e);return dr(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:dr(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function dr(e,t){return e.getExtension(t)!=null}function vx(e){try{if(qr(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function kA(e){if(e===0)return!1;let t=qr(e);if(e===1){if(!dr(t,"OES_texture_float"))return!1}else if(!dr(t,"EXT_color_buffer_float"))return!1;return xx(t)}function SA(e){if(e===0)return!1;let t=qr(e);if(e===1){if(!dr(t,"OES_texture_float")||!dr(t,"WEBGL_color_buffer_float"))return!1}else{if(dr(t,"EXT_color_buffer_float"))return xx(t);let r="EXT_color_buffer_half_float";if(dr(t,r)){let s=t.getExtension(r);return pJ(t,s)}return!1}return xx(t)}function xx(e){let t=a0(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n),e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,1,1,0,t.textureFormatFloat,t.textureTypeFloat,null);let a=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,a),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(a),o}function pJ(e,t){let n=a0(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r),e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,1,1,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let o=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,o),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,r,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(r),e.deleteFramebuffer(o),i}function CA(e){return e!==2?!1:qr(e).fenceSync!=null}function wl(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&w.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var ye=G();ye.registerFlag("HAS_WEBGL",()=>ye.getNumber("WEBGL_VERSION")>0);ye.registerFlag("WEBGL_VERSION",()=>vx(2)?2:vx(1)?1:0);ye.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);ye.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>ye.get("WEBGL_VERSION")===2);ye.registerFlag("WEBGL_CPU_FORWARD",()=>!0);ye.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);ye.registerFlag("WEBGL_PACK",()=>ye.getBool("HAS_WEBGL"));ye.registerFlag("WEBGL_PACK_NORMALIZATION",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_CLIP",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_REDUCE",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_LAZILY_UNPACK",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_CONV_IM2COL",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_PACK_CONV2DTRANSPOSE",()=>ye.getBool("WEBGL_PACK"));ye.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>xA(ye.getNumber("WEBGL_VERSION")));ye.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>wA(ye.getNumber("WEBGL_VERSION")));ye.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=ye.getNumber("WEBGL_VERSION");return e===0?0:IA(e)});ye.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>ye.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!cp.isMobile());ye.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>kA(ye.getNumber("WEBGL_VERSION")));ye.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>ye.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:ye.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));ye.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>SA(ye.getNumber("WEBGL_VERSION")));ye.registerFlag("WEBGL_FENCE_API_ENABLED",()=>CA(ye.getNumber("WEBGL_VERSION")));ye.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>ye.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);ye.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be a number but got ${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}.`)});ye.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>cp.isMobile()?1:-1,e=>{if(typeof e!="number")throw new Error(`WEBGL_FLUSH_THRESHOLD must be a number but got ${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}.`)});ye.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);ye.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);ye.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);ye.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);ye.registerFlag("WEBGL_EXP_CONV",()=>!1);ye.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>ye.getBool("IS_TEST"));ye.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);ye.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);ye.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);ye.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function An(){let e,t,n,r,s,a,o,i,u,c;return G().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",s="texture",a="outputColor",o="out vec4 outputColor;",i=G().getBool("WEBGL2_ISNAN_CUSTOM")?` bool isnan_custom(float val) { uint floatToUint = floatBitsToUint(val); return (floatToUint & 0x7fffffffu) > 0x7f800000u; } bvec4 isnan_custom(vec4 val) { return bvec4(isnan_custom(val.x), isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w)); } #define isnan(value) isnan_custom(value) `:"",u="",c=` #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",r="varying",s="texture2D",a="gl_FragColor",o="",i=` #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)); } `,u=` uniform float INFINITY; bool isinf(float val) { return abs(val) == INFINITY; } bvec4 isinf(vec4 val) { return equal(abs(val), vec4(INFINITY)); } `,c=` 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:r,texture2D:s,output:a,defineOutput:o,defineSpecialNaN:i,defineSpecialInf:u,defineRound:c}}function eu(e,t,n="index"){let r=w.computeStrides(t);return r.map((s,a)=>{let o=`int ${e[a]} = ${n} / ${s}`,i=a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * ${s}`:`index -= ${e[a]} * ${s}`;return`${o}; ${i};`}).join("")}function eg(e,t,n="index"){let r=w.computeStrides(t);return r.map((s,a)=>{let o=`int ${e[a]} = ${n} / outShapeStrides[${a}]`,i=a===r.length-1?`int ${e[a+1]} = ${n} - ${e[a]} * outShapeStrides[${a}]`:`index -= ${e[a]} * outShapeStrides[${a}]`;return`${o}; ${i};`}).join("")}function hJ(e,t){let n=e.length,r=e.map(a=>`${t}[${a}]`),s=new Array(n-1);s[n-2]=r[n-1];for(let a=n-3;a>=0;--a)s[a]=`(${s[a+1]} * ${r[a+1]})`;return s}function fJ(e,t,n="index"){let r=e.map((a,o)=>o),s=hJ(r,t);return s.map((a,o)=>{let i=`int ${e[o]} = ${n} / ${s[o]}`,u=o===s.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * ${s[o]}`:`index -= ${e[o]} * ${s[o]}`;return`${i}; ${u};`}).join("")}function i0(e){let t=w.computeStrides(e).map(n=>n.toString());return` int getFlatIndex(ivec3 coords) { return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z; } `}function u0(){return` int getFlatIndex(ivec3 coords) { return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z; } `}var TA=` 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:NA}=T;function mJ(e,t,n){let r=[];if(e.forEach(h=>{let f=w.sizeFromShape(h.shapeInfo.logicalShape);if(h.shapeInfo.isUniform?r.push(`uniform float ${h.name}${f>1?`[${f}]`:""};`):(r.push(`uniform sampler2D ${h.name};`),r.push(`uniform int offset${h.name};`)),n.enableShapeUniforms){let{uniformShape:g}=c0(n.packedInputs,h.shapeInfo.logicalShape,h.shapeInfo.texShape);switch(g.length){case 1:r.push(`uniform int ${h.name}Shape;`);break;case 2:r.push(`uniform ivec2 ${h.name}Shape;`);break;case 3:r.push(`uniform ivec3 ${h.name}Shape;`);break;case 4:r.push(`uniform ivec4 ${h.name}Shape;`);break;default:break}r.push(`uniform ivec2 ${h.name}TexShape;`)}}),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:r.push("uniform int outShape;");break;case 2:r.push("uniform ivec2 outShape;"),r.push("uniform int outShapeStrides;");break;case 3:r.push("uniform ivec3 outShape;"),r.push("uniform ivec2 outShapeStrides;");break;case 4:r.push("uniform ivec4 outShape;"),r.push("uniform ivec3 outShapeStrides;");break;default:break}r.push("uniform ivec2 outTexShape;")}n.customUniforms&&n.customUniforms.forEach(h=>{r.push(`uniform ${h.type} ${h.name}${h.arrayIndex?`[${h.arrayIndex}]`:""};`)});let s=r.join(` `),a=e.map(h=>gJ(h,t,n.packedInputs,n.enableShapeUniforms)).join(` `),o=t.texShape,i=An(),u=vJ(i),c,l,p=IJ(i);return t.isPacked?(c=bJ(t.logicalShape,o,n.enableShapeUniforms),l=wJ(i)):(c=yJ(t.logicalShape,o,n.enableShapeUniforms),l=xJ(i)),n.packedInputs&&(p+=TJ),[p,u,l,s,c,a,n.userCode].join(` `)}function Il(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return LJ(e,t);case 1:return zJ(e,t);case 2:return VJ(e,t);case 3:return GJ(e,t);case 4:return jJ(e,t);case 5:return qJ(e);case 6:return KJ(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function _A(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return MJ(e);case 1:return BJ(e,t);case 2:return WJ(e,t);case 3:return UJ(e,t);default:return HJ(e,t)}}function gJ(e,t,n=!1,r){let s="";n?s+=_A(e,r):s+=Il(e,r);let a=e.shapeInfo.logicalShape,o=t.logicalShape;return a.length<=o.length&&(n?s+=XJ(e,t):s+=YJ(e,t)),s}function bJ(e,t,n){switch(e.length){case 0:return EA();case 1:return NJ(e,t,n);case 2:return PJ(e,t,n);case 3:return EJ(e,t,n);default:return DJ(e,t,n)}}function yJ(e,t,n){switch(e.length){case 0:return EA();case 1:return _J(e,t,n);case 2:return OJ(e,t,n);case 3:return AJ(e,t,n);case 4:return $J(e,t,n);case 5:return FJ(e,t);case 6:return RJ(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function vJ(e){return` float sampleTexture(sampler2D textureSampler, vec2 uv) { return ${e.texture2D}(textureSampler, uv).r; } `}function xJ(e){return` void setOutput(float val) { ${e.output} = vec4(val, 0, 0, 0); } `}function wJ(e){return` void setOutput(vec4 val) { ${e.output} = val; } `}function IJ(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); } ${kJ} ${SJ} ${CJ} `}var kJ=` 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); } `,SJ=` 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); } `,CJ=` 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); } `,TJ=` 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 EA(){return` int getOutputCoords() { return 0; } `}function NJ(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return r[0]===1?n?` int getOutputCoords() { return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.x * ${r[1]}.0); } `:r[1]===1?n?` int getOutputCoords() { return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0)); } `:` int getOutputCoords() { return 2 * int(resultUV.y * ${r[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(${r[0]}, ${r[1]})); return 2 * (resTexRC.x * ${r[1]} + resTexRC.y); } `}function _J(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 EJ(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 r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[2]/2),a=s*Math.ceil(e[1]/2);return` ivec3 getOutputCoords() { ivec2 resTexRC = ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]})); int index = resTexRC.x * ${r[1]} + resTexRC.y; int b = index / ${a}; index -= b * ${a}; int r = 2 * (index / ${s}); int c = imod(index, ${s}) * 2; return ivec3(b, r, c); } `}function AJ(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; ${eg(["r","c","d"],e)} return ivec3(r, c, d); } `;let r=eu(["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; ${r} return ivec3(r, c, d); } `}function DJ(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 r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],s=Math.ceil(e[e.length-1]/2),a=s*Math.ceil(e[e.length-2]/2),o=a,i="",u="b, r, c";for(let c=2;c=1?l="coords = 0;":l=i.map(y=>`coords.${p[y+c]} = 0;`).join(` `);let d="";o<2&&a>0?d="coords":d=e.shapeInfo.logicalShape.map((y,v)=>`coords.${p[v+c]}`).join(", ");let h="return outputValue;",g=w.sizeFromShape(e.shapeInfo.logicalShape)===1,b=w.sizeFromShape(t.logicalShape)===1;if(a===1&&!g&&!b)h=` return vec4(outputValue.xy, outputValue.xy); `;else if(g&&!b)o===1?h=` return vec4(outputValue.x, outputValue.x, 0., 0.); `:h=` return vec4(outputValue.x); `;else if(i.length){let y=a-2,v=a-1;i.indexOf(y)>-1&&i.indexOf(v)>-1?h="return vec4(outputValue.x);":i.indexOf(y)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":i.indexOf(v)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return` vec4 ${s}() { ${u} coords = getOutputCoords(); ${l} vec4 outputValue = get${r}(${d}); ${h} } `}function YJ(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),s="get"+r+"AtOutCoords",a=t.texShape,o=e.shapeInfo.texShape,i=e.shapeInfo.logicalShape.length,u=t.logicalShape.length;if(!e.shapeInfo.isUniform&&i===u&&e.shapeInfo.flatOffset==null&&w.arraysEqual(o,a))return` float ${s}() { return sampleTexture(${n}, resultUV); } `;let c=ht(u),l=NA(e.shapeInfo.logicalShape,t.logicalShape),p=u-i,d,h=["x","y","z","w","u","v"];i===0?d="":u<2&&l.length>=1?d="coords = 0;":d=l.map(g=>`coords.${h[g+p]} = 0;`).join(` `);let f="";return u<2&&i>0?f="coords":f=e.shapeInfo.logicalShape.map((g,m)=>`coords.${h[m+p]}`).join(", "),` float ${s}() { ${c} coords = getOutputCoords(); ${d} return get${r}(${f}); } `}function ht(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 c0(e,t,n){let{newShape:r,keptDims:s}=w.squeezeShape(t),a=t.length,o=e&&a===3&&t[0]===1,i=o?t.slice(1):r,u=!e&&a>1&&!w.arraysEqual(t,n)&&r.lengthe[n]).join(", ")}function ZJ(e,t,n,r){let s=n.map((l,p)=>{let d={logicalShape:l.shape,texShape:l.isUniform?null:l.texData.texShape,isUniform:l.isUniform,isPacked:l.isUniform?!1:l.texData.isPacked,flatOffset:null};return l.texData!=null&&l.texData.slice!=null&&l.texData.slice.flatOffset>0&&(d.flatOffset=l.texData.slice.flatOffset),{name:t.variableNames[p],shapeInfo:d}}),a=s.map(l=>l.shapeInfo),o={logicalShape:r.shape,texShape:r.texData.texShape,isUniform:!1,isPacked:r.texData.isPacked,flatOffset:null},i=mJ(s,o,t),u=aA(e.gl,i),c=e.createProgram(u);return G().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:u,source:i,webGLProgram:c,inShapeInfos:a,outShapeInfo:o,variablesLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:(e.buildVao(c),Object.assign({program:t,fragmentShader:u,source:i,webGLProgram:c,inShapeInfos:a,outShapeInfo:o},AA(e,t,c)))}function AA(e,t,n){let r=[],s=[],a,o,i,u=null,c=null;c=e.getUniformLocation(n,"NAN",!1),G().getNumber("WEBGL_VERSION")===1&&(u=e.getUniformLocation(n,"INFINITY",!1));let l=!1;for(let p of t.variableNames){let d={name:p,uniform:e.getUniformLocation(n,p,l),offset:e.getUniformLocation(n,`offset${p}`,l)};t.enableShapeUniforms&&(d.shape=e.getUniformLocation(n,`${p}Shape`,l),d.texShape=e.getUniformLocation(n,`${p}TexShape`,l)),r.push(d)}if(t.enableShapeUniforms&&(a=e.getUniformLocation(n,"outShape",l),i=e.getUniformLocation(n,"outShapeStrides",l),o=e.getUniformLocation(n,"outTexShape",l)),t.customUniforms)for(let p of t.customUniforms)s.push(e.getUniformLocation(n,p.name,l));return{variablesLocations:r,customUniformLocations:s,infLoc:u,nanLoc:c,outShapeLocation:a,outShapeStridesLocation:i,outTexShapeLocation:o}}function C1(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,r)=>{let s=n.logicalShape,a=t[r],o=a.shape;if(!w.arraysEqual(s,o))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${s} and ${o} must match`);if(n.isUniform&&a.isUniform)return;let i=n.texShape,u=a.isUniform?null:a.texData.texShape;if(!w.arraysEqual(i,u))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${u} must match`)})}function JJ(e,t,n,r,s){t.program.enableShapeUniforms||(C1(t.inShapeInfos,n),C1([t.outShapeInfo],[r]));let a=r.texData.texture,o=r.texData.texShape;r.texData.isPacked?e.setOutputPackedMatrixTexture(a.texture,o[0],o[1]):e.setOutputMatrixTexture(a.texture,o[0],o[1]),e.setProgram(t.webGLProgram),e.bindVertexArray(t.webGLProgram.vao),G().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN);for(let u=0;u{let i=o.texData!=null&&o.texData.slice!=null&&o.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!o.isUniform){let u=o.texData.texShape,{useSqueezeShape:c,uniformShape:l,keptDims:p}=c0(e.packedInputs,o.shape,u),d="",h="",f="";if(l.length===1&&e.packedInputs){let k=[Math.ceil(u[0]/2),Math.ceil(u[1]/2)];d=`${k[0]>1}_${k[1]>1}`}else if(l.length===2&&!e.packedInputs)h=`${l[0]>1}_${l[1]>1}`;else if(l.length>2&&!e.packedInputs){let k=w.computeStrides(l);f=`${k[0]===u[1]}_${k[k.length-1]===u[1]}`}let g=o.shape.length,m=l.length===2&&w.arraysEqual(o.shape,u),b=w.sizeFromShape(o.shape)===1,y=T.getBroadcastDims(o.shape,n.shape),v=!e.packedInputs&&g===n.shape.length&&w.arraysEqual(u,n.texData.texShape),x=e.packedInputs||l.length>2?"":`${u[0]>1}_${u[1]>1}`;r+=`${g}_${v}_${c?p:""}_${l.length}_${b}_${y}_${m}_${d}_${h}_${f}_${x}_${i}`}else{let u=o.isUniform?"uniform":o.texData.texShape;r+=`${o.shape}_${u}_${i}`}});let s=e.userCode,a=e.constructor.name;return a+="_"+r+"_"+s+`${G().getNumber("WEBGL_VERSION")}`,a}function xn(e){return G().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var eQ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=Dd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=An();this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?eg(["r","c","d"],e):eu(["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; } `}},tQ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=Dd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=An();this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length),this.userCode=` ivec3 outCoordsFromFlatIndex(int index) { ${this.enableShapeUniforms?eg(["r","c","d"],e):eu(["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; } `}},nQ=class{constructor(e){this.variableNames=["A"],this.outTexUsage=lr.DOWNLOAD;let t=An();this.outputShape=e,this.userCode=` ${TA} void main() { float x = getAAtOutCoords(); ${t.output} = encode_float(x); } `}},rQ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=lr.DOWNLOAD;let t=An();this.outputShape=e,this.userCode=` ${TA} void main() { ivec3 coords = getOutputCoords(); float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z)); ${t.output} = encode_float(x); } `}},sQ={R:0,G:1,B:2,A:3},T1=class{constructor(e,t=!1,n="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let r=An();this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length);let s="result";t&&(s="floor(result * 255. + 0.5)");let a="";for(let o=0;ozA,createBufferFromOutputTexture:()=>UA,createFloat16MatrixTexture:()=>OA,createFloat16PackedMatrixTexture:()=>BA,createFloat32MatrixTexture:()=>PA,createIndexBuffer:()=>RA,createPackedMatrixTexture:()=>LA,createUnsignedBytesMatrixTexture:()=>MA,createVertexBuffer:()=>FA,createVertexShader:()=>$A,downloadByteEncodedFloatMatrixFromOutputTexture:()=>HA,downloadFloat32MatrixFromBuffer:()=>GA,downloadMatrixFromPackedOutputTexture:()=>qA,downloadPackedMatrixFromBuffer:()=>jA,getInternalFormatForFloat16MatrixTexture:()=>d0,getInternalFormatForFloat16PackedMatrixTexture:()=>f0,getInternalFormatForFloat32MatrixTexture:()=>l0,getInternalFormatForPackedMatrixTexture:()=>h0,getInternalFormatForUnsignedBytesMatrixTexture:()=>p0,uploadDenseMatrixToTexture:()=>WA,uploadPixelDataToTexture:()=>VA});function $A(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 sA(e,n)}function FA(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 uA(e,t)}function RA(e){let t=new Uint16Array([0,1,2,2,1,3]);return cA(e,t)}function Op(e,t,n,r,s,a){dA(t,n);let o=lA(e),i=e.TEXTURE_2D;return he(e,()=>e.bindTexture(i,o)),he(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),he(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),he(e,()=>e.texParameteri(i,e.TEXTURE_MIN_FILTER,e.NEAREST)),he(e,()=>e.texParameteri(i,e.TEXTURE_MAG_FILTER,e.NEAREST)),G().getNumber("WEBGL_VERSION")===1?he(e,()=>e.texImage2D(i,0,r,t,n,0,s,a,null)):he(e,()=>e.texStorage2D(i,1,r,t,n)),he(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:o,texShape:[n,t]}}function l0(e){return e.internalFormatFloat}function PA(e,t,n,r){let[s,a]=Pp(t,n);return Op(e,s,a,l0(r),r.textureFormatFloat,e.FLOAT)}function d0(e){return e.internalFormatHalfFloat}function OA(e,t,n,r){let[s,a]=Pp(t,n);return Op(e,s,a,d0(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function p0(e){return e.downloadTextureFormat}function MA(e,t,n,r){let[s,a]=Pp(t,n);return Op(e,s,a,p0(r),e.RGBA,e.UNSIGNED_BYTE)}function h0(e){return e.internalFormatPackedFloat}function LA(e,t,n,r){let[s,a]=xl(t,n);return Op(e,s,a,h0(r),e.RGBA,e.FLOAT)}function f0(e){return e.internalFormatPackedHalfFloat}function BA(e,t,n,r){let[s,a]=xl(t,n);return Op(e,s,a,f0(r),e.RGBA,r.textureTypeHalfFloat)}function zA(e,t,n){return he(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),bx(e,t,"clipSpacePos",n,3,20,0)&&bx(e,t,"uv",n,2,20,12)}function WA(e,t,n,r,s,a){he(e,()=>e.bindTexture(e.TEXTURE_2D,t));let o,i,u;s instanceof Uint8Array?(o=new Uint8Array(n*r*4),i=e.UNSIGNED_BYTE,u=e.RGBA):(o=new Float32Array(n*r*4),i=e.FLOAT,u=a.internalFormatPackedFloat),o.set(s),G().getNumber("WEBGL_VERSION")===2?he(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,r,e.RGBA,i,o)):he(e,()=>e.texImage2D(e.TEXTURE_2D,0,u,n,r,0,e.RGBA,i,o)),he(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function VA(e,t,n){he(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?G().getNumber("WEBGL_VERSION")===2?he(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data)):he(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):G().getNumber("WEBGL_VERSION")===2?he(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n)):he(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),he(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function UA(e,t,n,r){let s=e.createBuffer();he(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,s));let i=4*4*t*n;return he(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,i,e.STREAM_READ)),he(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),he(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),s}function GA(e,t,n){let r=e,s=new Float32Array(n);return r.bindBuffer(r.PIXEL_PACK_BUFFER,t),r.getBufferSubData(r.PIXEL_PACK_BUFFER,0,s),r.bindBuffer(r.PIXEL_PACK_BUFFER,null),s}function HA(e,t,n,r){let[s,a]=Pp(t,n),o=4,i=new Uint8Array(tJ(t*n,o));return he(e,()=>e.readPixels(0,0,s,a,r.downloadTextureFormat,e.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function jA(e,t,n,r,s,a,o,i){let u=e,c=new Float32Array(nJ(a,o));return u.bindBuffer(u.PIXEL_PACK_BUFFER,t),u.getBufferSubData(u.PIXEL_PACK_BUFFER,0,c),u.bindBuffer(u.PIXEL_PACK_BUFFER,null),c}function qA(e,t,n){let r=new Float32Array(t*n*4);return he(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var tf=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.itemsToPoll=[];let t=G().getNumber("WEBGL_VERSION");if(e!=null?(this.gl=e,tA(t,e)):this.gl=qr(t),e=this.gl,G().getNumber("WEBGL_VERSION")===2){let s=e;this.createVertexArray=()=>he(s,()=>s.createVertexArray()),this.bindVertexArray=a=>he(s,()=>s.bindVertexArray(a)),this.deleteVertexArray=a=>he(s,()=>s.deleteVertexArray(a)),this.getVertexArray=()=>he(s,()=>s.getParameter(s.VERTEX_ARRAY_BINDING))}else if(e!=null){let s=e.getExtension("OES_vertex_array_object");if(s==null)throw new Error("All WebGL1 implementations are expected to offer OES_vertex_array_object.");this.createVertexArray=()=>he(e,()=>s.createVertexArrayOES()),this.bindVertexArray=a=>he(e,()=>s.bindVertexArrayOES(a)),this.deleteVertexArray=a=>he(e,()=>s.deleteVertexArrayOES(a)),this.getVertexArray=()=>he(e,()=>e.getParameter(s.VERTEX_ARRAY_BINDING_OES))}let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),G().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=ld(this.gl,s),dr(this.gl,a))this.textureHalfFloatExtension=ld(this.gl,a);else if(G().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),dr(this.gl,r))this.colorBufferHalfFloatExtension=ld(this.gl,r);else if(G().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",dr(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(dr(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=FA(this.gl),this.indexBuffer=RA(this.gl),this.framebuffer=pA(this.gl),this.textureConfig=a0(this.gl,this.textureHalfFloatExtension)}get debug(){return G().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;he(e,()=>e.finish()),he(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),he(e,()=>e.deleteFramebuffer(this.framebuffer)),he(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),he(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),he(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),PA(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),OA(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),MA(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),VA(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),WA(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),BA(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),LA(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(yx(this.gl,this.framebuffer),this.outputTexture=null),he(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>HA(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,s,a){return jA(this.gl,e,t,n,r,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return GA(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=UA(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),r}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(G().getBool("WEBGL_FENCE_API_ENABLED")){let r=e,s=r.fenceSync(r.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let a=r.clientWaitSync(s,0,0);return a===r.ALREADY_SIGNALED||a===r.CONDITION_SATISFIED},t=s}else G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>qA(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=$A(t));let n=oA(t);he(t,()=>t.attachShader(n,this.vertexShader)),he(t,()=>t.attachShader(n,e)),iA(t,n);let r=Object.assign(n,{vao:this.createVertexArray()});return this.debug&&Zh(t,r),r}buildVao(e){this.setProgram(e),this.bindVertexArray(e.vao);let t=this.gl;he(t,()=>t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,this.indexBuffer)),zA(t,e,this.vertexBuffer)}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&(he(this.gl,()=>this.gl.deleteProgram(e)),this.deleteVertexArray(e.vao))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Zh(this.gl,this.program),he(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?fA(this.gl,e,t):mA(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),he(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(),gA(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,s]=xl(t,n);this.setOutputMatrixTextureDriver(e,r,s)}setOutputMatrixWriteRegion(e,t,n,r){this.setOutputMatrixWriteRegionDriver(n,e,r,t)}setOutputPackedMatrixWriteRegion(e,t,n,r){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&Zh(this.gl,this.program),dd(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;if(this.debug){let t=this.getVertexArray();console.assert(t===this.program.vao,"VAO changed between setProgram and executeProgram!"),this.debugValidate()}he(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),he(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=ld(this.gl,G().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(G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,r=this.getQueryTimerExtensionWebGL2(),s=n.createQuery();return n.beginQuery(r.TIME_ELAPSED_EXT,s),s}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(G().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 w.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,G().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,r=this.getQueryTimerExtensionWebGL2(),s=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(r.GPU_DISJOINT_EXT)),s&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),r=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),r&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=oQ(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){if(this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),this.itemsToPoll.length>1)return;let n;"setTimeoutCustom"in G().platform&&(n=G().platform.setTimeoutCustom.bind(G().platform)),w.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,n)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Jh(this.gl,e,this.framebuffer),this.debug&&dd(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Jh(this.gl,this.outputTexture,this.framebuffer),this.debug&&dd(this.gl)):yx(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let r=this.gl;Jh(r,e,this.framebuffer),this.debug&&dd(r),this.outputTexture=e,he(r,()=>r.viewport(0,0,t,n)),he(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),he(this.gl,()=>this.gl.scissor(e,t,n,r))}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 oQ(e){let t=0;for(;t`${e}.${n}`)}function Cn(e,t){return t===1?[e]:ZA(e,t)}function JQ(e,t){if(e===1)return"rc";let n="";for(let r=0;r ${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 >= ${r}; `}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]})`}},JA=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length);let n="";for(let r=0;r<4;r++){let s="thisRC = rc;";r%2===1&&(s+="thisRC.z += 1;"),r>1&&(s+="thisRC.y += 1;"),n+=` ${s} ${r>0?"if(thisRC.y < rows && thisRC.z < cols){":""} int flatIndex = getFlatIndex(thisRC); ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex); vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z)); result[${r}] = getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims); ${r>0?"}":""} `}this.userCode=` ${eee(t,this.enableShapeUniforms)} ${this.enableShapeUniforms?u0():i0(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 eee(e,t){return` ivec3 inputCoordsFromReshapedOutCoords(int index) { ${t?fJ(["r","c","d"],"inputShape"):eu(["r","c","d"],e)} return ivec3(r, c, d); } `}var tee=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.usedTextures={},this.logEnabled=!1}acquireTexture(e,t,n){let r=_1(t,n),s=E1(e,r,n);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=N1(e,r,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[s].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=a,this.log();let i=this.freeTextures[s].pop();return this.usedTextures[s].push(i),i}let o;return r===pn.PACKED_2X2_FLOAT32?o=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===pn.PACKED_2X2_FLOAT16?o=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===pn.UNPACKED_FLOAT32?o=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===pn.UNPACKED_FLOAT16?o=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===pn.PACKED_4X1_UNSIGNED_BYTE&&(o=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[s].push(o),this.numUsedTextures++,this._numBytesAllocated+=a,this.log(),o}releaseTexture(e,t,n,r){if(this.freeTextures==null)return;let s=_1(n,r),a=E1(t,s,r);a in this.freeTextures||(this.freeTextures[a]=[]);let o=N1(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,r),i=G().getNumber("WEBGL_DELETE_TEXTURE_THRESHOLD");i!==-1&&this._numBytesAllocated>i?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=o):(this.freeTextures[a].push(e),this.numFreeTextures++,this._numBytesFree+=o),this.numUsedTextures--;let u=this.usedTextures[a],c=u&&u.indexOf(e);if(c==null||c<0)throw new Error("Cannot release a texture that was never provided by this texture manager");u[c]=u[u.length-1],u.pop(),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(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 nee(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F)return 16;if(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 N1(e,t,n,r,s){let a=ree(t,r),o;if(s){let[u,c]=xl(e[0],e[1]);o=u*c}else{let[u,c]=Pp(e[0],e[1]);o=u*c}let i=nee(n,a);return o*i}function ree(e,t){switch(e){case pn.PACKED_2X2_FLOAT32:return h0(t);case pn.PACKED_2X2_FLOAT16:return f0(t);case pn.UNPACKED_FLOAT32:return l0(t);case pn.UNPACKED_FLOAT16:return d0(t);case pn.PACKED_4X1_UNSIGNED_BYTE:return p0(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function see(e){return G().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?pn.PACKED_2X2_FLOAT32:pn.UNPACKED_FLOAT32:e?pn.PACKED_2X2_FLOAT16:pn.UNPACKED_FLOAT16}function _1(e,t){if(e===lr.UPLOAD)return pn.PACKED_2X2_FLOAT32;if(e===lr.RENDER||e==null)return see(t);if(e===lr.DOWNLOAD||e===lr.PIXELS)return pn.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function E1(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var is=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length),this.userCode=` float unaryOperation(float x) { ${t} } void main() { float x = getAAtOutCoords(); float y = unaryOperation(x); setOutput(y); } `}},Or="if (isnan(x)) return x;",aee="return x;",A1="return abs(x);",oee="return (x >= 0.0) ? x : (exp(x) - 1.0);",iee=Or+` return (x < 0.0) ? 0.0 : x; `,uee=Or+` return (x < 0.0) ? 0.0 : min(6.0, x); `,ta="return x;",cee="return 1.0 / (1.0 + exp(-1.0 * x));",lee="return x;",dee=` 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; `,pee=` 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; `,hee=` 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; `,fee="return 1.0 / (1.0 + exp(-1.0 * x));",oa=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length),this.userCode=` vec4 unaryOperation(vec4 x) { ${t} } void main() { vec4 x = getAAtOutCoords(); vec4 y = unaryOperation(x); setOutput(y); } `}},mee=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=xn(this.outputShape.length);let t=e.length,n=Cn("rc",t),r=ht(t),s=JQ(t,n),a=n.slice(-2),o=t<=1?"rc":`vec2(${a.join(",")})`;this.userCode=` void main() { ${r} rc = getOutputCoords(); vec4 packedInput = getA(${s}); setOutput(getChannel(packedInput, ${o})); } `}},gee=gs.whereImpl,bee=1e-7,yee=1e-4,jh={};function vee(e){return e in jh||(jh[e]={}),jh[e]}var xee=G().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),wee=600;function Iee(){return G().global.screen==null?1024:G().global.screen.height*G().global.screen.width*window.devicePixelRatio*wee/1024/1024}var g0=class QA extends Md{nextDataId(){return QA.nextDataId++}constructor(t){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,!G().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let n;if(t!=null){if(t instanceof tf)n=t;else{let r=qr(G().getNumber("WEBGL_VERSION"),t);n=new tf(r)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let r=qr(G().getNumber("WEBGL_VERSION"));n=new tf(r),this.binaryCache=vee(G().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=n,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new tee(this.gpgpu),this.numMBBeforeWarning=Iee(),this.texData=new Rf(this,Er())}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(t,n,r,s,a,o){let i=this.makeTensorInfo(n,r),u=this.texData.get(i.dataId);u.isPacked=!1,u.texture={texture:t,texShape:[s,a]},u.texShape=[s,a];let c=pd(n),l=new T1(c,!1,o),p=this.runWebGLProgram(l,[i],r,[[s,a]]);return p.shape=n,u.texture=null,this.disposeIntermediateTensorInfo(i),p.dataId}write(t,n,r){if((G().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||G().getBool("DEBUG"))&&this.checkNumericalProblems(t),r==="complex64"&&t!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let s={id:this.nextDataId()};return this.texData.set(s,{shape:n,dtype:r,values:t,usage:lr.UPLOAD,refCount:1}),s}refCount(t){return this.texData.has(t)?this.texData.get(t).refCount:0}incRef(t){let n=this.texData.get(t);n.refCount++}decRef(t){if(this.texData.has(t)){let n=this.texData.get(t);n.refCount--}}move(t,n,r,s,a){if(G().getBool("DEBUG")&&this.checkNumericalProblems(n),s==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(t,{shape:r,dtype:s,values:n,usage:lr.UPLOAD,refCount:a})}disposeIntermediateTensorInfo(t){this.disposeData(t.dataId)}readSync(t){let n=this.texData.get(t),{values:r,dtype:s,complexTensorInfos:a,slice:o,shape:i,isPacked:u}=n;if(o!=null){let d;u?d=new oa(i,ta):d=new is(i,ta);let h=this.runWebGLProgram(d,[{dataId:t,shape:i,dtype:s}],s),f=this.readSync(h.dataId);return this.disposeIntermediateTensorInfo(h),f}if(r!=null)return this.convertAndCacheOnCPU(t);if(s==="string")return r;let c=this.activeTimers!=null,l;c&&(l=w.now());let p;if(s==="complex64"){let d=this.readSync(a.real.dataId),h=this.readSync(a.imag.dataId);p=T.mergeRealAndImagArrays(d,h)}else p=this.getValuesFromTexture(t);return c&&(this.downloadWaitMs+=w.now()-l),this.convertAndCacheOnCPU(t,p)}async read(t){if(this.pendingRead.has(t)){let f=this.pendingRead.get(t);return new Promise(g=>f.push(g))}let n=this.texData.get(t),{values:r,shape:s,slice:a,dtype:o,complexTensorInfos:i,isPacked:u}=n;if(a!=null){let f;u?f=new oa(s,ta):f=new is(s,ta);let g=this.runWebGLProgram(f,[{dataId:t,shape:s,dtype:o}],o),m=this.read(g.dataId);return this.disposeIntermediateTensorInfo(g),m}if(r!=null)return this.convertAndCacheOnCPU(t);if(G().getBool("DEBUG")&&!G().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&G().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let c=null,l;if(o!=="complex64"&&G().get("WEBGL_BUFFER_SUPPORTED")){l=this.decode(t);let f=this.texData.get(l.dataId);c=this.gpgpu.createBufferFromTexture(f.texture.texture,...Gh(s))}this.pendingRead.set(t,[]),o!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(o==="complex64"){let f=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),g=f[0],m=f[1];p=T.mergeRealAndImagArrays(g,m)}else if(c==null)p=this.getValuesFromTexture(t);else{let f=w.sizeFromShape(s);p=this.gpgpu.downloadFloat32MatrixFromBuffer(c,f)}if(l!=null&&this.disposeIntermediateTensorInfo(l),c!=null){let f=this.gpgpu.gl;he(f,()=>f.deleteBuffer(c))}let d=this.convertAndCacheOnCPU(t,p),h=this.pendingRead.get(t);return this.pendingRead.delete(t),h.forEach(f=>f(d)),this.pendingDisposal.has(t)&&(this.pendingDisposal.delete(t),this.disposeData(t)&&Er().removeDataId(t,this),this.pendingDeletes--),d}readToGPU(t,n={}){let r=this.texData.get(t),{values:s,shape:a,slice:o,dtype:i,isPacked:u,texture:c}=r;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(o!=null){let h;u?h=new oa(a,ta):h=new is(a,ta);let f=this.runWebGLProgram(h,[{dataId:t,shape:a,dtype:i}],i),g=this.readToGPU(f,n);return this.disposeIntermediateTensorInfo(f),g}if(c==null)throw s!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let l=this.decode(t,n.customTexShape),p=Er().makeTensorFromTensorInfo(l),d=this.texData.get(l.dataId);return Object.assign({tensorRef:p},d.texture)}bufferSync(t){let n=this.readSync(t.dataId);if(t.dtype==="string")try{let r=n.map(s=>w.decodeString(s));return Me(t.shape,t.dtype,r)}catch(r){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(t.shape,t.dtype,n)}checkNumericalProblems(t){if(t!=null)for(let n=0;n0}time(t){let n=this.activeTimers,r=[],s=!1;this.programTimersStack==null?(this.programTimersStack=r,s=!0):this.activeTimers.push(r),this.activeTimers=r,t();let a=w.flatten(this.activeTimers.map(u=>u.query)).filter(u=>u!=null),o=w.flatten(this.activeTimers.map(u=>u.name)).filter(u=>u!=null);this.activeTimers=n,s&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let u=await Promise.all(a);i.kernelMs=w.sum(u),i.getExtraProfileInfo=()=>u.map((c,l)=>({name:o[l],ms:c})).map(c=>`${c.name}: ${c.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 G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:w.now(),endMs:null}}endTimer(t){return G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),t):(t.endMs=w.now(),t)}async getQueryTime(t){if(G().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(t);let n=t;return n.endMs-n.startMs}disposeData(t,n=!1){if(this.pendingDisposal.has(t))return!1;if(!this.texData.has(t))return!0;if(n?this.texData.get(t).refCount=0:this.texData.get(t).refCount--,!n&&this.texData.get(t).refCount>0)return!1;if(this.pendingRead.has(t))return this.pendingDisposal.add(t),this.pendingDeletes++,!1;this.releaseGPUData(t);let{complexTensorInfos:r}=this.texData.get(t);return r!=null&&(this.disposeData(r.real.dataId,n),this.disposeData(r.imag.dataId,n)),this.texData.delete(t),!0}releaseGPUData(t){let{texture:n,dtype:r,texShape:s,usage:a,isPacked:o,slice:i}=this.texData.get(t),u=i&&i.origDataId||t,c=this.dataRefCount.get(u);c>1?this.dataRefCount.set(u,c-1):(this.dataRefCount.delete(u),n!=null&&(this.numBytesInGPU-=this.computeBytes(s,r),this.textureManager.releaseTexture(n,s,a,o)));let l=this.texData.get(t);l.texture=null,l.texShape=null,l.isPacked=!1,l.slice=null}getTexture(t){return this.uploadToGPU(t),this.texData.get(t).texture.texture}getDataInfo(t){return this.texData.get(t)}shouldExecuteOnCPU(t,n=xee){return G().getBool("WEBGL_CPU_FORWARD")&&t.every(r=>this.texData.get(r.dataId).texture==null&&w.sizeFromShape(r.shape)0&&w.isString(r[0])){let a=r.map(o=>w.encodeString(o));s=this.write(a,t,n)}else s=this.write(r,t,n);return this.texData.get(s).usage=null,{dataId:s,shape:t,dtype:n}}makeOutput(t,n,r){return Er().makeTensorFromTensorInfo(this.makeTensorInfo(t,n,r),this)}unpackTensor(t){let n=new mee(t.shape);return this.runWebGLProgram(n,[t],t.dtype)}packTensor(t){let n=new QQ(t.shape);return this.runWebGLProgram(n,[t],t.dtype,null,!0)}packedReshape(t,n){let r=[So(t.shape),...Co(t.shape)],s={dtype:t.dtype,shape:r,dataId:t.dataId},a=[So(n),...Co(n)],o=new JA(a,r),i=!0,u=[r],c=this.runWebGLProgram(o,[s],t.dtype,u,i);return{dataId:c.dataId,shape:n,dtype:c.dtype}}decode(t,n){let r=this.texData.get(t),{isPacked:s,shape:a,dtype:o}=r;if(n!=null){let d=w.sizeFromShape(a),h=n[0]*n[1]*4;w.assert(d<=h,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=pd(a),u;s?u=new tQ(i):u=new eQ(i);let c=!0,l=[n!=null?n:Gh(i)],p=this.runWebGLProgram(u,[{shape:i,dtype:o,dataId:t}],o,l,c,n);return{dtype:o,shape:a,dataId:p.dataId}}runWebGLProgram(t,n,r,s,a=!1,o){let i=this.makeTensorInfo(t.outputShape,r),u=this.texData.get(i.dataId);if(t.packedOutput&&(u.isPacked=!0),t.outPackingScheme===Dd.DENSE){let b=o!=null?o:Gh(t.outputShape);u.texShape=b.map(y=>y*2)}if(t.outTexUsage!=null&&(u.usage=t.outTexUsage),w.sizeFromShape(i.shape)===0)return u.values=w.getTypedArrayFromDType(i.dtype,0),i;let c=[],l=n.map(b=>{if(b.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let y=this.texData.get(b.dataId);if(y.texture==null){if(!t.packedInputs&&w.sizeFromShape(b.shape)<=G().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:b.shape,texData:null,isUniform:!0,uniformValues:y.values};t.packedInputs&&(y.isPacked=!0,y.shape=b.shape)}if(this.uploadToGPU(b.dataId),!!y.isPacked!=!!t.packedInputs)b=y.isPacked?this.unpackTensor(b):this.packTensor(b),c.push(b),y=this.texData.get(b.dataId);else if(y.isPacked&&!$d(y.shape,b.shape)){let v=b,x=b.shape;b.shape=y.shape,b=this.packedReshape(b,x),c.push(b),y=this.texData.get(b.dataId),v.shape=x}return{shape:b.shape,texData:y,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:u,isUniform:!1},d=QJ(t,l,p),h=this.getAndSaveBinary(d,()=>ZJ(this.gpgpu,t,l,p)),f=this.activeTimers!=null,g;f&&(g=this.startTimer()),G().get("ENGINE_COMPILE_ONLY")||JJ(this.gpgpu,h,l,p,s),c.forEach(b=>this.disposeIntermediateTensorInfo(b)),f&&(g=this.endTimer(g),this.activeTimers.push({name:t.constructor.name,query:this.getQueryTime(g)}));let m=G().getNumber("WEBGL_FLUSH_THRESHOLD");if(m>0){let b=w.now();b-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=b)}if(!G().getBool("WEBGL_LAZILY_UNPACK")&&u.isPacked&&a===!1){let b=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),b}return i}compileAndRun(t,n,r,s,a=!1){return r=r||n[0].dtype,this.runWebGLProgram(t,n,r,s,a)}getAndSaveBinary(t,n){return t in this.binaryCache||(this.binaryCache[t]=n()),this.binaryCache[t]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(G().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(n=>{this.gpgpu.deleteProgram(this.binaryCache[n].webGLProgram),delete this.binaryCache[n]}),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(!G().get("WEBGL_RENDER_FLOAT32_ENABLED")){let t=G().getBool("DEBUG");G().set("DEBUG",!1);let n=this.abs(xe(1e-8)).dataSync()[0];if(G().set("DEBUG",t),n>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?bee:yee}uploadToGPU(t){let n=this.texData.get(t),{shape:r,dtype:s,values:a,texture:o,usage:i,isPacked:u}=n;if(o!=null)return;let c=this.activeTimers!=null,l;c&&(l=w.now());let p=n.texShape;if(p==null&&(p=vA(r,u),n.texShape=p),a!=null){let d=pd(r),h,f=p[1],g=p[0],m=a instanceof Uint8Array||a instanceof Uint8ClampedArray;(u||!m)&&([f,g]=xl(p[0],p[1])),u?h=new aQ(d,m):h=new T1(d,m);let b=m?[g,f]:p,y=this.makeTensorInfo(b,s),v=this.texData.get(y.dataId);m?v.usage=lr.PIXELS:v.usage=lr.UPLOAD,v.texShape=b,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),f,g,a);let x=[[g,f]],S=this.runWebGLProgram(h,[y],s,x,!0),N=this.texData.get(S.dataId);n.texShape=N.texShape,n.isPacked=N.isPacked,n.usage=N.usage,G().get("ENGINE_COMPILE_ONLY")?this.disposeData(S.dataId):(n.texture=N.texture,n.values=null,this.texData.delete(S.dataId)),this.disposeIntermediateTensorInfo(y),c&&(this.uploadWaitMs+=w.now()-l)}else{let d=this.acquireTexture(p,i,s,u);n.texture=d}}convertAndCacheOnCPU(t,n){let r=this.texData.get(t),{dtype:s}=r;return n!=null&&(r.values=kee(n,s)),r.values}acquireTexture(t,n,r,s){if(this.numBytesInGPU+=this.computeBytes(t,r),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let a=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${a} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(t,n,s)}computeBytes(t,n){return t[0]*t[1]*w.bytesPerElement(n)}checkCompileCompletion(){for(let[,t]of Object.entries(this.binaryCache))this.checkCompletion_(t)}async checkCompileCompletionAsync(){let t=[];if(this.gpgpu.parallelCompilationExtension){for(let[,n]of Object.entries(this.binaryCache))t.push(this.checkCompletionAsync_(n));return Promise.all(t)}else{for(let[,n]of Object.entries(this.binaryCache)){let r=new Promise(s=>{try{this.checkCompletion_(n),s(!0)}catch(a){throw a}});t.push(r)}return Promise.all(t)}}async checkCompletionAsync_(t){return this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(t):(await aI(),this.checkCompletionAsync_(t))}checkCompletion_(t){if(this.gpgpu.gl.getProgramParameter(t.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(t.webGLProgram)),this.gpgpu.gl.getShaderParameter(t.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(o0(t.source,this.gpgpu.gl.getShaderInfoLog(t.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let t of Object.values(this.binaryCache)){this.gpgpu.buildVao(t.webGLProgram);let{variablesLocations:n,customUniformLocations:r,infLoc:s,nanLoc:a,outShapeLocation:o,outShapeStridesLocation:i,outTexShapeLocation:u}=AA(this.gpgpu,t.program,t.webGLProgram);t.variablesLocations=n,t.customUniformLocations=r,t.infLoc=s,t.nanLoc=a,t.outShapeLocation=o,t.outShapeStridesLocation=i,t.outTexShapeLocation=u}}createTensorFromGPUData(t,n,r){t.channels=t.channels||"RGBA";let{texture:s,height:a,width:o,channels:i}=t,u=Er().backend;if(!u.gpgpu.gl.isTexture(s))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let c=u.writeTexture(s,n,r,a,o,i);return Er().makeTensorFromDataId(c,n,r,u)}};g0.nextDataId=0;function kee(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 r=0;rnew g0,2);var Cee={forceHalfFloat:eD},b0=` if (isnan(a)) return a; if (isnan(b)) return b; `,To=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=T.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=xn(this.outputShape.length),this.userCode=` float binaryOperation(float a, float b) { ${e} } void main() { float a = getAAtOutCoords(); float b = getBAtOutCoords(); setOutput(binaryOperation(a, b)); } `}},nu=` result.r = isNaN.r ? NAN : result.r; result.g = isNaN.g ? NAN : result.g; result.b = isNaN.b ? NAN : result.b; result.a = isNaN.a ? NAN : result.a; `,Tl=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=T.assertAndGetBroadcastShape(t,n);let s=this.outputShape.length;this.enableShapeUniforms=xn(s);let a="";if(r)if(s===0||w.sizeFromShape(this.outputShape)===1)a=` result.y = 0.; result.z = 0.; result.w = 0.; `;else if(a=` ${ht(s)} coords = getOutputCoords(); `,s===1)this.enableShapeUniforms?a+=` result.y = (coords + 1) >= outShape ? 0. : result.y; result.z = 0.; result.w = 0.; `:a+=` result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y; result.z = 0.; result.w = 0.; `;else{let i=Cn("coords",s);this.enableShapeUniforms?a+=` bool nextRowOutOfBounds = (${i[s-2]} + 1) >= outShape[${s} - 2]; bool nextColOutOfBounds = (${i[s-1]} + 1) >= outShape[${s} - 1]; result.y = nextColOutOfBounds ? 0. : result.y; result.z = nextRowOutOfBounds ? 0. : result.z; result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w; `:a+=` bool nextRowOutOfBounds = (${i[s-2]} + 1) >= ${this.outputShape[s-2]}; bool nextColOutOfBounds = (${i[s-1]} + 1) >= ${this.outputShape[s-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); ${a} setOutput(result); } `}};function sr(e){let{inputs:t,backend:n}=e,{x:r}=t;return n.incRef(r.dataId),{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}var Tee={kernelName:si,backendName:"webgl",kernelFunc:sr};function Oa(e){let{inputs:t,backend:n}=e,{real:r,imag:s}=t,a=n.makeTensorInfo(r.shape,"complex64"),o=n.texData.get(a.dataId),i=sr({inputs:{x:r},backend:n}),u=sr({inputs:{x:s},backend:n});return o.complexTensorInfos={real:i,imag:u},a}var Nee={kernelName:Mf,backendName:"webgl",kernelFunc:Oa},tD="return (a < 0.) ? b * a : a;",nD=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function _ee(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:a}=r,o=n.makeTensorInfo([],"float32",w.createScalarValue(a,"float32")),i=G().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Tl(nD,s.shape,o.shape):new To(tD,s.shape,o.shape),u=n.runWebGLProgram(i,[s,o],"float32");return n.disposeIntermediateTensorInfo(o),u}var Eee={kernelName:ui,backendName:"webgl",kernelFunc:_ee},rD="return (a < 0.) ? b * a : a;",sD=` vec4 aLessThanZero = vec4(lessThan(a, vec4(0.))); return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a); `;function Aee(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,a=G().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Tl(sD,r.shape,s.shape):new To(rD,r.shape,s.shape);return n.runWebGLProgram(a,[r,s],"float32")}var Dee={kernelName:Si,backendName:"webgl",kernelFunc:Aee},Nl="if (isnan(x)) return x;";function Ze({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:s,backend:a})=>{let{x:o}=s,i=a,u=r||o.dtype;if(i.shouldExecuteOnCPU([o])&&n!=null){let p=i.texData.get(o.dataId),d=n(p.values,u);return i.makeTensorInfo(o.shape,u,d)}let c=G().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,l;return c?l=new oa(o.shape,t):l=new is(o.shape,e),i.runWebGLProgram(l,[o],u)}}function mn({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:s,dtype:a}){return({inputs:o,backend:i})=>{let{a:u,b:c}=o,l=i;if(r&&u.dtype==="complex64"){let f=l.texData.get(u.dataId),g=l.texData.get(c.dataId),[m,b]=[[f.complexTensorInfos.real,g.complexTensorInfos.real],[f.complexTensorInfos.imag,g.complexTensorInfos.imag]].map(v=>{let[x,k]=v,S={dataId:x.dataId,dtype:x.dtype,shape:u.shape},N={dataId:k.dataId,dtype:k.dtype,shape:c.shape},E=new To(e,u.shape,c.shape);return l.runWebGLProgram(E,[S,N],fr(x.dtype,k.dtype))}),y=Oa({inputs:{real:m,imag:b},backend:l});return l.disposeIntermediateTensorInfo(m),l.disposeIntermediateTensorInfo(b),y}let p=a||fr(u.dtype,c.dtype);if((u.dtype==="string"||c.dtype==="string"||l.shouldExecuteOnCPU([u,c]))&&s!=null){let f=l.texData.get(u.dataId).values,g=l.texData.get(c.dataId).values,m=u.dtype==="string"?T.fromUint8ToStringArray(f):f,b=u.dtype==="string"?T.fromUint8ToStringArray(g):g,[y,v]=s(u.shape,c.shape,m,b,p),x=l.makeTensorInfo(v,p),k=l.texData.get(x.dataId);return k.values=y,x}let d=G().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new Tl(t,u.shape,c.shape,n):h=new To(e,u.shape,c.shape),l.runWebGLProgram(h,[u,c],p)}}function Fd(e,t=!1){if(e==="linear")return t?lee:aee;if(e==="relu")return t?pee:iee;if(e==="elu")return t?dee:oee;if(e==="relu6")return t?hee:uee;if(e==="prelu")return t?sD:rD;if(e==="leakyrelu")return t?nD:tD;if(e==="sigmoid")return t?fee:cee;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var aD=class{constructor(e,t,n,r=!1,s=!1,a=!1,o=null,i=!1,u=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=xn(this.outputShape.length);let c=r?e[1]:e[2],l=Math.ceil(c/2),p=r?"i * 2, rc.y":"rc.y, i * 2",d=s?"rc.z, i * 2":"i * 2, rc.z",h=r?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],f=s?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],g="",m="";o&&(i?g=`vec4 activation(vec4 a) { vec4 b = getPreluActivationWeightsAtOutCoords(); ${o} }`:u?g=`vec4 activation(vec4 a) { vec4 b = getLeakyreluAlphaAtOutCoords(); ${o} }`:g=`vec4 activation(vec4 x) { ${o} }`,m="result = activation(result);");let b=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights"),u&&this.variableNames.push("leakyreluAlpha");let y="rc.x",v="rc.x";e[0]`The new shape (${u}) has ${c} elements and the old shape (${s.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`);let l=o.texData.get(s.dataId);return l.isPacked&&!$d(s.shape,u)&&!(l.texture!==null&&$d(l.shape,u))?Fee(s,u,o):(o.incRef(s.dataId),{dataId:s.dataId,shape:u,dtype:s.dtype})}var Ree={kernelName:qc,backendName:"webgl",kernelFunc:pe},R1=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:s,outSize:a}=e;this.outputShape=[r,a];let o=Math.floor(n/4)*4,i=n%4,u="sumValue += dot(values, ones);";if(t!=null){let l=1/t;u=`sumValue += dot(values * ${w.isInt(l)?l.toPrecision(2):l}, ones);`}let c="";s%n>0&&(c=` if (inIdx < 0 || inIdx >= ${s}) { return 0.0; } `),this.userCode=` const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${c} 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 < ${o}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${u} } int inIdx = inOffset + ${o}; if (${i===1}) { vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0); ${u} } else if (${i===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), 0.0, 0.0); ${u} } else if (${i===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), 0.0); ${u} } setOutput(sumValue); } `}},Pee=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:r,inSize:s,outSize:a}=e;this.outputShape=[r,a];let o="0.0",i="";t==="prod"?o="1.0":t==="min"?(o="1.0 / 1e-20",i="min"):t==="max"&&(o="-1.0 / 1e-20",i="max");let u=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?u="sumValue":t==="prod"?u="prodValue":t==="all"?u="allValue":t==="any"&&(u="anyValue");let c=Math.floor(n/4)*4,l=n%4,p=` 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 = ${i}(values, minMaxValue); if (${t==="min"} || ${t==="max"}) { minMaxValue = ${i}(values, minMaxValue); bvec4 isNaN = isnan(values); if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) { minMaxValue = vec4(NAN); } } } `,d="vec4";t==="all"?(o="1.0",p=` bool reducedAllValue = all(values); float floatedReducedAllValue = float(reducedAllValue); allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0); `,d="bvec4"):t==="any"&&(o="0.0",p=` bool reducedAnyValue = any(values); float floatedReducedAnyValue = float(reducedAnyValue); anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0); `,d="bvec4");let h="";s%n>0&&(h=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } `),this.userCode=` const float initializationValue = ${o}; const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0); float getValue(int batch, int inIdx) { ${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(${o}); float prodValue = 1.0; float sumValue = 0.0; float allValue = 1.0; float anyValue = 0.0; for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); ${p} } int inIdx = inOffset + ${c}; if (${l===1}) { ${d} values = ${d}( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); ${p} } else if (${l===2}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); ${p} } else if (${l===3}) { ${d} values = ${d}( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); ${p} } setOutput(${u}); } `}};function Oee(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],r=T.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function ru(e,t,n,r){let s=Oee(e.shape),a=e;for(let o=0;o6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let s=0;s6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=ht(this.rank),s=ZA("rc",this.rank),a=new Array(this.rank);for(let c=0;c`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${r} must match.`);let k=n?[b,p,h]:[b,h,p],S=r?[y,f,d]:[y,d,f],N=pe({inputs:{x:e},backend:s,attrs:{shape:k}}),E=pe({inputs:{x:t},backend:s,attrs:{shape:S}}),$=[N,E],F=Math.max(b,y),D=n?N.shape[1]:N.shape[2],R=a!=null,C=o!=null,L=u==="leakyrelu",U=u!=null?Fd(u,!0):null,H=R||C||L||U!=null,K;if((h===1||f===1)&&D>oD&&H===!1){let Z=N,J=E;n&&(Z=Tn({inputs:{x:N},backend:s,attrs:{perm:[0,2,1]}}),$.push(Z)),r&&(J=Tn({inputs:{x:E},backend:s,attrs:{perm:[0,2,1]}}),$.push(J));let ee=f!==1,se=f===1,te=Z;ee&&(te=pe({inputs:{x:Z},backend:s,attrs:{shape:[F,D,1]}}),$.push(te));let oe=f===1?2:1,ne=J;se&&(ne=pe({inputs:{x:J},backend:s,attrs:{shape:[F,1,D]}}),$.push(ne));let de=y0({inputs:{a:te,b:ne},backend:s});K=ng({inputs:{x:de},backend:s,attrs:{axis:oe,keepDims:!0}}),$.push(de)}else{let Z=fr(e.dtype,t.dtype),J=new aD(k,S,[F,h,f],n,r,R,U,C,L),ee=[N,E];if(a!=null&&ee.push(a),C&&ee.push(o),L){let se=s.makeTensorInfo([],"float32",w.createScalarValue(i,"float32"));ee.push(se),$.push(se)}K=s.runWebGLProgram(J,ee,Z)}let q=pe({inputs:{x:K},backend:s,attrs:{shape:x}});$.push(K);for(let Z of $)s.disposeIntermediateTensorInfo(Z);return q}function Uee(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t,{transposeA:u,transposeB:c,activation:l,leakyreluAlpha:p}=r;return Ef({a:s,b:a,transposeA:u,transposeB:c,backend:n,bias:o,preluActivationWeights:i,leakyreluAlpha:p,activation:l})}var Gee={kernelName:uo,backendName:"webgl",kernelFunc:Uee},P1="return abs(x);";function Hee(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])&&r.dtype!=="complex64"){let a=n.texData.get(r.dataId),o=XA(a.values);return n.makeTensorInfo(r.shape,r.dtype,o)}let s;return G().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new oa(r.shape,P1):s=new is(r.shape,P1),n.runWebGLProgram(s,[r],r.dtype)}var jee={kernelName:cc,backendName:"webgl",kernelFunc:Hee},qee=Or+` if (abs(x) > 1.) { return NAN; } return acos(x); `,Kee=Ze({opSnippet:qee}),Xee={kernelName:Eo,backendName:"webgl",kernelFunc:Kee},Yee=Or+` if (x < 1.0) return NAN; return log(x + sqrt(x * x - 1.0));`,Zee=Ze({opSnippet:Yee}),Jee={kernelName:Ao,backendName:"webgl",kernelFunc:Zee},O1="return a + b;",Qee=mn({opSnippet:O1,packedOpSnippet:O1,supportsComplex:!0,cpuKernelImpl:iQ}),ete={kernelName:Sa,backendName:"webgl",kernelFunc:Qee},tte=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let n=[];this.variableNames.forEach(s=>{n.push(`float v${s} = get${s}AtOutCoords();`)});let r=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${n.join(` `)} float result = ${r}; setOutput(result); } `}},nte=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((s,a)=>`T${a}`);let n=[];this.variableNames.forEach(s=>{n.push(`vec4 v${s} = get${s}AtOutCoords();`)});let r=this.variableNames.map(s=>`v${s}`).join(" + ");this.userCode=` void main() { ${n.join(` `)} vec4 result = ${r}; setOutput(result); } `}};function nf(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return sr({inputs:{x:r[0]},backend:n});if(r.length>G().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let u=Math.floor(r.length/2),c=nf({inputs:r.slice(0,u),backend:n}),l=nf({inputs:r.slice(u),backend:n});return nf({inputs:[c,l],backend:n})}let s=r.map(u=>u.dtype).reduce((u,c)=>fr(u,c)),a=r.map(u=>u.shape),i=G().getBool("WEBGL_PACK")?new nte(r[0].shape,a):new tte(r[0].shape,a);return n.runWebGLProgram(i,r,s)}var rte={kernelName:Do,backendName:"webgl",kernelFunc:nf};function ste(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,u=w.parseAxisParam(a,s.shape),c=u,l=T.getAxesPermutation(c,i),p=s;l!=null&&(p=Tn({inputs:{x:s},backend:n,attrs:{perm:l}}),c=T.getInnerMostAxes(c.length,i)),T.assertAxesAreInnerMostDims("all",c,i);let[d,h]=T.computeOutAndReduceShapes(p.shape,c),f=w.sizeFromShape(h),g=pe({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}}),m=ru(g,g.dtype,"all",n),b;if(o){let y=T.expandShapeToKeepDim(d,u);b=pe({inputs:{x:m},backend:n,attrs:{shape:y}})}else b=pe({inputs:{x:m},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(m),l!=null&&n.disposeIntermediateTensorInfo(p),b}var ate={kernelName:lc,backendName:"webgl",kernelFunc:ste};function ote(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,u=w.parseAxisParam(a,s.shape),c=u,l=T.getAxesPermutation(c,i),p=s;l!=null&&(p=Tn({inputs:{x:s},backend:n,attrs:{perm:l}}),c=T.getInnerMostAxes(c.length,i)),T.assertAxesAreInnerMostDims("any",c,i);let[d,h]=T.computeOutAndReduceShapes(p.shape,c),f=w.sizeFromShape(h),g=pe({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}}),m=ru(g,g.dtype,"any",n),b;if(o){let y=T.expandShapeToKeepDim(d,u);b=pe({inputs:{x:m},backend:n,attrs:{shape:y}})}else b=pe({inputs:{x:m},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(m),l!=null&&n.disposeIntermediateTensorInfo(p),b}var ite={kernelName:dc,backendName:"webgl",kernelFunc:ote},ute=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:r,batchSize:s,outSize:a}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[s,a];let o=t==="max"?">":"<",i=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 * ${r}; int bestIndex = inOffset; float bestValue = getA(batch, bestIndex); for (int i = 0; i < ${r}; i++) { int inIdx = ${i}; float candidate = getA(batch, inIdx); if (candidate ${o} bestValue) { bestValue = candidate; bestIndex = inIdx; } } setOutput(float(bestIndex)); } `}},cte=class{constructor(e,t,n,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,w.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let s=e[e.length-1],a=Math.ceil(s/t);this.outputShape=e.slice(0,-1),a>1&&this.outputShape.push(a),r||this.variableNames.push("bestIndicesA");let o=this.outputShape,i=o.length,u=ht(i),c=Cn("coords",i),l,p;if(a===1){p=i+1;let N=ht(p);l=` ${N} sourceLocR = ${N}(${c.join()}, 0); ++${c[i-1]}; ${N} sourceLocG = ${N}(${c.join()}, 0); ++${c[i-2]}; ${N} sourceLocA = ${N}(${c.join()}, 0); --${c[i-1]}; ${N} sourceLocB = ${N}(${c.join()}, 0); --${c[i-2]};`}else p=i,l=` ${u} sourceLocR = coords; ++${c[i-1]}; ${u} sourceLocG = coords; ++${c[i-2]}; ${u} sourceLocA = coords; --${c[i-1]}; ${u} sourceLocB = coords; --${c[i-2]};`;let d=["x","y","z","w","u","v"].slice(0,p),h="."+d[p-1],f=d.map(N=>"int "+N),g=Cn("sourceLocR",p-1).concat("inIdx.r"),m=Cn("sourceLocG",p-1).concat("inIdx.g"),b=Cn("sourceLocB",p-1).concat("inIdx.b"),y=Cn("sourceLocA",p-1).concat("inIdx.a"),v=n==="max"?"greaterThan":"lessThan",x=r?"":` inIdx = round(vec4(getBestIndicesAChannel(${g.join()}), getBestIndicesAChannel(${m.join()}), getBestIndicesAChannel(${b.join()}), getBestIndicesAChannel(${y.join()})));`,k=`vec4( getAChannel(${g.join()}), hasNextCol ? getAChannel(${m.join()}) : 0., hasNextRow ? getAChannel(${b.join()}) : 0., hasNextRow && hasNextCol ? getAChannel(${y.join()}) : 0.)`,S=r?"":` float getBestIndicesAChannel(${f.join()}) { return getChannel(getBestIndicesA(${d.join()}), vec2(${d.slice(-2).join()})); }`;this.userCode=` float getAChannel(${f.join()}) { return getChannel(getA(${d.join()}), vec2(${d.slice(-2).join()})); } ${S} void main() { ${u} coords = getOutputCoords(); bool hasNextCol = ${c[i-1]} < ${o[i-1]-1}; bool hasNextRow = ${c[i-2]} < ${o[i-2]-1}; ${l} ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h}, sourceLocB${h}, sourceLocA${h}) * ${t}; ivec4 inIdx = srcIdx; vec4 bestIndex = vec4(inIdx); vec4 bestValue = ${k}; for (int i = 0; i < ${t}; i++) { inIdx = srcIdx; ${x} vec4 candidate = ${k}; bvec4 nan = isnan(candidate); bvec4 replace = bvec4( vec4(${v}(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 iD(e,t,n,r=null){let s=t.shape[0],a=t.shape[1];r!=null&&(s=r.shape[0],a=r.shape[1]);let o=T.computeOptimalWindowSize(a),i={windowSize:o,inSize:a,batchSize:s,outSize:Math.ceil(a/o)},u=new ute(i,n,r==null),c=[t];r!=null&&c.push(r);let l=e.runWebGLProgram(u,c,"int32");if(l.shape[1]===1)return l;let p=iD(e,t,n,l);return e.disposeIntermediateTensorInfo(l),p}function uD(e,t,n,r=null){let s=r!=null?r.shape:t.shape,a=s[s.length-1],o=T.computeOptimalWindowSize(a),i=new cte(s,o,n,r==null),u=r==null?[t]:[t,r],c=e.runWebGLProgram(i,u,"int32");if(c.shape.length===t.shape.length){let l=uD(e,t,n,c);return e.disposeIntermediateTensorInfo(c),l}return c}function cD(e,t,n,r){let s=[n];if(T.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),s,t.shape.length),!G().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let a=[],o=e.texData.get(t.dataId),i=o!==null&&o.isPacked,u=t;i&&(u=e.unpackTensor(t),a.push(u));let[c,l]=T.computeOutAndReduceShapes(u.shape,s),p=w.sizeFromShape(l),d=pe({inputs:{x:u},backend:e,attrs:{shape:[-1,p]}});a.push(d);let h=iD(e,d,r);a.push(h);let f=pe({inputs:{x:h},backend:e,attrs:{shape:c}});return a.forEach(g=>e.disposeIntermediateTensorInfo(g)),f}return uD(e,t,r)}function lte(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r,o=w.parseAxisParam(a,s.shape),i=T.getAxesPermutation(o,s.shape.length),u=s,c=[];i!=null&&(u=Tn({inputs:{x:s},backend:n,attrs:{perm:i}}),c.push(u),o=T.getInnerMostAxes(o.length,u.shape.length)),T.assertAxesAreInnerMostDims("argMax",[o[0]],u.shape.length);let l=cD(n,u,o[0],"max");return c.forEach(p=>n.disposeIntermediateTensorInfo(p)),l}var dte={kernelName:pc,backendName:"webgl",kernelFunc:lte};function pte(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r,o=w.parseAxisParam(a,s.shape),i=T.getAxesPermutation(o,s.shape.length),u=s,c=[];i!=null&&(u=Tn({inputs:{x:s},backend:n,attrs:{perm:i}}),c.push(u),o=T.getInnerMostAxes(o.length,u.shape.length)),T.assertAxesAreInnerMostDims("argMin",[o[0]],u.shape.length);let l=cD(n,u,o[0],"min");return c.forEach(p=>n.disposeIntermediateTensorInfo(p)),l}var hte={kernelName:hc,backendName:"webgl",kernelFunc:pte},fte=Or+` if (abs(x) > 1.) { return NAN; } return asin(x); `,mte=Ze({opSnippet:fte}),gte={kernelName:$o,backendName:"webgl",kernelFunc:mte},bte=Or+"return log(x + sqrt(x * x + 1.0));",yte=Ze({opSnippet:bte}),vte={kernelName:Fo,backendName:"webgl",kernelFunc:yte},xte=Or+` return atan(x); `,wte=Ze({opSnippet:xte}),Ite={kernelName:Ro,backendName:"webgl",kernelFunc:wte},kte=b0+` return atan(a, b); `,Ste=` vec4 result = atan(a, b); bvec4 isNaNA = isnan(a); bvec4 isNaNB = isnan(b); bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w); `+nu+` return result; `,Cte=mn({opSnippet:kte,packedOpSnippet:Ste}),Tte={kernelName:Oo,backendName:"webgl",kernelFunc:Cte},Nte=Or+` if ((x < -1.0) || (x > 1.0)) return NAN; return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,_te=Ze({opSnippet:Nte}),Ete={kernelName:Po,backendName:"webgl",kernelFunc:_te},Rd=class{constructor(e,t,n,r=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,o=e.strideHeight,i=e.strideWidth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterHeight,p=e.effectiveFilterWidth,d=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",g=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,m=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(f||(b="-1.0 / 1e-20"),n){let N=">=";this.userCode=` const ivec2 strides = ivec2(${o}, ${i}); const ivec2 pads = ivec2(${d}, ${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 < ${l}; wR += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${p}; wC += ${c}) { 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 ${N} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${r?s?g:m:`wR * ${p} + wC`}; } } } setOutput(float(minMaxPosition)); } `;return}let y="max",v=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(v="avgValue / max(count, 1.0)");let x=Math.floor(a/4)*4,k=a%4,S=` if (${f}) { avgValue += dot(values, ones); } else { minMaxValue = ${y}(values, minMaxValue); } `;this.userCode=` const ivec2 strides = ivec2(${o}, ${i}); const ivec2 pads = ivec2(${d}, ${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 < ${l}; wR += ${u}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${x}; wC += 4) { int xC = xCCorner + wC * ${c}; vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), getValue(batch, xR, xC + 2 * ${c}, d), getValue(batch, xR, xC + 3 * ${c}, d) ); ${S} } int xC = xCCorner + ${x}; if (${k===1}) { vec4 values = vec4( getValue(batch, xR, xC, d), initializationValue, initializationValue, initializationValue ); ${S} } else if (${k===2}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), initializationValue, initializationValue ); ${S} } else if (${k===3}) { vec4 values = vec4( getValue(batch, xR, xC, d), getValue(batch, xR, xC + ${c}, d), getValue(batch, xR, xC + 2 * ${c}, d), initializationValue ); ${S} } } setOutput(${v}); } `}},v0=class{constructor(e,t,n,r=!1,s=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let a=e.filterWidth,o=e.strideDepth,i=e.strideHeight,u=e.strideWidth,c=e.dilationDepth,l=e.dilationHeight,p=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,f=e.effectiveFilterWidth,g=e.padInfo.front,m=e.padInfo.top,b=e.padInfo.left;this.outputShape=e.outShape;let y=t==="avg",v="0.0";if(y||(v="-1.0 / 1e-20"),n){let $=">=";this.userCode=` const ivec3 strides = ivec3(${o}, ${i}, ${u}); const ivec3 pads = ivec3(${g}, ${m}, ${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 < ${d}; wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${h}; wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${f}; wC += ${p}) { int xC = xCCorner + wC; if (xC < 0 || xC >= ${e.inWidth}) { continue; } float value = getX(batch, xD, xR, xC, ch); // If a min / max value has already been found, use it. If not, // use the current value. float currMinMaxValue = mix( value, minMaxValue, minMaxValueFound); if (value ${$} currMinMaxValue) { minMaxValue = value; minMaxValueFound = 1.0; minMaxPosition = ${r?s?`(((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} * ${f} + wR * ${f} + wC`}; } } } } setOutput(float(minMaxPosition)); } `;return}let x="max",k=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(k="avgValue / max(count, 1.0)");let S=Math.floor(a/4)*4,N=a%4,E=` if (${y}) { avgValue += dot(values, ones); } else { minMaxValue = ${x}(values, minMaxValue); } `;this.userCode=` const ivec3 strides = ivec3(${o}, ${i}, ${u}); const ivec3 pads = ivec3(${g}, ${m}, ${b}); const float initializationValue = ${v}; 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(${v}); float avgValue = 0.0; count = 0.0; for (int wD = 0; wD < ${d}; wD += ${c}) { int xD = xDCorner + wD; if (xD < 0 || xD >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${h}; wR += ${l}) { int xR = xRCorner + wR; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${S}; wC += 4) { int xC = xCCorner + wC * ${p}; vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), getValue(batch, xD, xR, xC + 2 * ${p}, ch), getValue(batch, xD, xR, xC + 3 * ${p}, ch) ); ${E} } int xC = xCCorner + ${S}; if (${N===1}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), initializationValue, initializationValue, initializationValue ); ${E} } else if (${N===2}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), initializationValue, initializationValue ); ${E} } else if (${N===3}) { vec4 values = vec4( getValue(batch, xD, xR, xC, ch), getValue(batch, xD, xR, xC + ${p}, ch), getValue(batch, xD, xR, xC + 2 * ${p}, ch), initializationValue ); ${E} } } } setOutput(${k}); } `}};function Ate(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;wl(s,"avgPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:u}=r,c=1;w.assert(T.eitherStridesOrDilationsAreOne(o,c),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${c}'`);let l=T.computePool2DInfo(s.shape,a,o,c,i,u);if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))return sr({inputs:{x:s},backend:n});let p=new Rd(l,"avg",!1);return n.runWebGLProgram(p,[s],"float32")}var Dte={kernelName:Mo,backendName:"webgl",kernelFunc:Ate};function $te(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:u,dataFormat:c}=r,l=[1,1,1],p=T.computePool3DInfo(s.shape,a,o,l,i,u,c),d=new v0(p,"avg",!1);return n.runWebGLProgram(d,[s],"float32")}var Fte={kernelName:fc,backendName:"webgl",kernelFunc:$te},Rte=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,a=e.dilationHeight,o=e.dilationWidth,i=e.effectiveFilterHeight,u=e.effectiveFilterWidth,c=i-1-e.padInfo.top,l=u-1-e.padInfo.left,p=1/(t*n);this.userCode=` const ivec2 pads = ivec2(${c}, ${l}); const float avgMultiplier = float(${p}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${i}; wR += ${a}) { float dyR = float(dyRCorner + wR) / ${r}.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+= ${o}) { float dyC = float(dyCCorner + wC) / ${s}.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); } `}},Pte=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,s=e.strideDepth,a=e.strideHeight,o=e.strideWidth,i=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.effectiveFilterDepth,p=e.effectiveFilterHeight,d=e.effectiveFilterWidth,h=l-1-e.padInfo.front,f=p-1-e.padInfo.top,g=d-1-e.padInfo.left,m=1/(t*n*r);this.userCode=` const ivec3 pads = ivec3(${h}, ${f}, ${g}); const float avgMultiplier = float(${m}); 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 < ${l}; wD += ${i}) { float dyD = float(dyDCorner + wD) / ${s}.0; if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) { continue; } int idyD = int(dyD); for (int wR = 0; wR < ${p}; wR += ${u}) { 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 < ${d}; wC += ${c}) { float dyC = float(dyCCorner + wC) / ${o}.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 Ote(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a,{filterSize:i,strides:u,pad:c,dimRoundingMode:l}=r,p=[1,1,1],d=T.computePool3DInfo(o.shape,i,u,p,c,l),h=new Pte(d);return n.runWebGLProgram(h,[s],o.dtype)}var Mte={kernelName:zd,backendName:"webgl",kernelFunc:Ote};function Lte(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a;wl([s,a],"avgPoolGrad");let{filterSize:i,strides:u,pad:c}=r,l=T.computePool2DInfo(o.shape,i,u,1,c),p=new Rte(l);return n.runWebGLProgram(p,[s],o.dtype)}var Bte={kernelName:Bd,backendName:"webgl",kernelFunc:Lte};function zte(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;return Ef({a:s,b:a,transposeA:o,transposeB:i,backend:n})}var Wte={kernelName:Lo,backendName:"webgl",kernelFunc:zte},Vte=class{constructor(e,t,n,r,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,n);let o="0.0";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");let i="1.0";s!=null&&(T.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),i="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { float x = getXAtOutCoords(); float mean = getMeanAtOutCoords(); float variance = getVarianceAtOutCoords(); float offset = ${o}; float scale = ${i}; float inv = scale * inversesqrt(variance + float(${a})); setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1))); } `}},Ute=class{constructor(e,t,n,r,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],T.assertAndGetBroadcastShape(e,t),T.assertAndGetBroadcastShape(e,n);let o="vec4(0.0)";r!=null&&(T.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");let i="vec4(1.0)";s!=null&&(T.assertAndGetBroadcastShape(e,s),this.variableNames.push("scale"),i="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=` void main() { vec4 offset = ${o}; vec4 scale = ${i}; vec4 x = getXAtOutCoords(); vec4 mean = getMeanAtOutCoords(); vec4 variance = getVarianceAtOutCoords(); vec4 inv = scale * inversesqrt(variance + vec4(${a})); setOutput((x - mean) * inv + offset); } `}},Gte=({inputs:e,backend:t,attrs:n})=>{let{x:r,mean:s,variance:a,offset:o,scale:i}=e;w.assert(s.shape.length===a.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),w.assert(o==null||s.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),w.assert(i==null||s.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:u}=n;u==null&&(u=.001);let c=[r,s,a],l=null;o!=null&&(l=o.shape,c.push(o));let p=null;i!=null&&(p=i.shape,c.push(i));let d=G().getBool("WEBGL_PACK_NORMALIZATION")?new Ute(r.shape,s.shape,a.shape,l,p,u):new Vte(r.shape,s.shape,a.shape,l,p,u);return t.runWebGLProgram(d,c,c[0].dtype)},Hte={kernelName:ni,backendName:"webgl",kernelFunc:Gte},jte=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=ht(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=qte(this.rank),r,s=e.map((a,o)=>`sourceLoc.${wx[o]} = start[${o}] + coords.${wx[o]};`);r=` ${t} sourceLoc; ${t} coords = getOutputCoords(); ${s.join(` `)} `,this.userCode=` void main() { ${r} setOutput(getSource(${n})); } `}},wx=["x","y","z","w","u","v"];function qte(e){if(e===1)return"sourceLoc";if(e<=6)return wx.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var Kte=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=ht(this.rank),n=Cn("coords",this.rank),r=Cn("sourceLoc",this.rank),s=this.rank===1?"sourceLoc":`vec2(${r.slice(-2).join()})`,a=`getChannel(getSource(${r.join()}), ${s})`,o=` result.x = ${a}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${r[this.rank-1]}; result.y = ${a}; --${r[this.rank-1]}; } `,i=this.rank===1?"":` --${n[this.rank-1]}; if (++${n[this.rank-2]} < ${e[this.rank-2]}) { ++${r[this.rank-2]}; result.z = ${a}; if (++${n[this.rank-1]} < ${e[this.rank-1]}) { ++${r[this.rank-1]}; result.w = ${a}; } } `,u=this.rank<=4?`sourceLoc = coords + ${t}(${e.map((c,l)=>`start[${l}]`).join()});`:e.map((c,l)=>`${r[l]} = ${n[l]} + start[${l}];`).join(` `);this.userCode=` void main() { ${t} coords = getOutputCoords(); ${t} sourceLoc; ${u} vec4 result = vec4(0.); ${o} ${i} setOutput(result); } `}};function Xte(e,t,n,r){let s=r.texData.get(e.dataId),a=r.makeTensorInfo(n,e.dtype),o=r.texData.get(a.dataId);Object.assign(o,s),o.refCount=1,o.shape=n,o.dtype=e.dtype;let i=Kt.computeFlatOffset(t,w.computeStrides(e.shape));s.slice&&(i+=s.slice.flatOffset),o.slice={flatOffset:i,origDataId:s.slice&&s.slice.origDataId||e.dataId};let u=r.dataRefCount.get(o.slice.origDataId)||1;return r.dataRefCount.set(o.slice.origDataId,u+1),a}function _l(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,size:o}=r,[i,u]=Kt.parseSliceParams(s,a,o);if(Kt.assertParamsValid(s,i,u),w.sizeFromShape(u)===0)return n.makeTensorInfo(u,s.dtype,[]);if(n.shouldExecuteOnCPU([s])||s.dtype==="string"){let p=n.texData.get(s.dataId),d=BQ(p.values,i,u,s.shape,s.dtype);return n.makeTensorInfo(u,s.dtype,d)}let{isPacked:c}=n.texData.get(s.dataId),l=Kt.isSliceContinous(s.shape,i,u);if(c||!l){let p=G().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Kte(u):new jte(u),d=[i];return n.runWebGLProgram(p,[s],s.dtype,d)}return n.uploadToGPU(s.dataId),Xte(s,i,u,n)}var Yte={kernelName:el,backendName:"webgl",kernelFunc:_l},Zte=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,crops:o}=r;w.assert(s.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let i=a.reduce((y,v)=>y*v),u=T.getReshaped(s.shape,a,i),c=T.getPermuted(u.length,a.length),l=T.getReshapedPermuted(s.shape,a,i),p=T.getSliceBeginCoords(o,a.length),d=T.getSliceSize(l,o,a.length),h=[],f=pe({inputs:{x:s},backend:n,attrs:{shape:u}}),g=Tn({inputs:{x:f},backend:n,attrs:{perm:c}}),m=pe({inputs:{x:g},backend:n,attrs:{shape:l}}),b=_l({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return h.push(f),h.push(g),h.push(m),h.forEach(y=>n.disposeIntermediateTensorInfo(y)),b},Jte={kernelName:mc,backendName:"webgl",kernelFunc:Zte};function Qte(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:a}=t,{size:o}=r,i=n.readSync(s.dataId),u=n.readSync(a.dataId),c=KA(i,u,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,c)}var ene={kernelName:gc,backendName:"webgl",kernelFunc:Qte},tne=` int r = int(a.r) & int(b.r); int g = int(a.g) & int(b.g); int rb = int(a.b) & int(b.b); int ra = int(a.a) & int(b.a); return vec4(r, g, rb, ra); `,nne=` return float(int(a.r) & int(b.r)); `;function rne(e){let{inputs:t,backend:n}=e,{a:r,b:s}=t,a=G().getBool("WEBGL_PACK_BINARY_OPERATIONS"),o=G().getNumber("WEBGL_VERSION");if(n.shouldExecuteOnCPU([r,s])||o===1){let u=n.texData.get(r.dataId).values,c=n.texData.get(s.dataId).values,[l,p]=cQ(r.shape,s.shape,u,c,r.dtype),d=n.makeTensorInfo(p,r.dtype),h=n.texData.get(d.dataId);return h.values=l,d}let i;return a?i=new Tl(tne,r.shape,s.shape,!1):i=new To(nne,r.shape,s.shape),n.runWebGLProgram(i,[r,s],r.dtype)}var sne={kernelName:bc,backendName:"webgl",kernelFunc:rne};function ane(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,a=n.readSync(r.dataId),o=n.readSync(s.dataId),i=T.assertAndGetBroadcastShape(Array.from(a),Array.from(o));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var one={kernelName:Wd,backendName:"webgl",kernelFunc:ane},ine="return float(a != b);",lD=mn({opSnippet:ine,cpuKernelImpl:AQ,dtype:"bool"}),une={kernelName:Wc,backendName:"webgl",kernelFunc:lD};function Mp(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return sr({inputs:{x:s.complexTensorInfos.real},backend:n})}var cne={kernelName:Xf,backendName:"webgl",kernelFunc:Mp},lne="return float(int(x));";function dne(e,t){let n=new is(e.shape,lne),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function Ix(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:a}=r;if(a==="complex64"){if(s.dtype==="complex64")return sr({inputs:{x:s},backend:n});let o=kt(s.shape),i=Ix({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),u=Oa({inputs:{real:i,imag:o},backend:n});return o.dispose(),n.disposeIntermediateTensorInfo(i),u}if(s.dtype==="complex64"){let o=Mp({inputs:{input:s},backend:n}),i=Ix({inputs:{x:o},backend:n,attrs:{dtype:a}});return n.disposeIntermediateTensorInfo(o),i}if(!w.hasEncodingLoss(s.dtype,a)){let o=sr({inputs:{x:s},backend:n});return{dataId:o.dataId,shape:o.shape,dtype:a}}if(n.shouldExecuteOnCPU([s])){let o=n.texData.get(s.dataId).values,[i,u,c]=lQ(o,s.shape,s.dtype,a);return n.makeTensorInfo(i,u,c)}if(a==="int32")return dne(s,n);if(a==="bool"){let o=n.makeTensorInfo([],"bool",w.getTypedArrayFromDType("bool",1)),u=lD({inputs:{a:s,b:o},backend:n});return n.disposeIntermediateTensorInfo(o),u}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${a}`)}var pne={kernelName:Bo,backendName:"webgl",kernelFunc:Ix},M1="return ceil(x);",hne=Ze({opSnippet:M1,packedOpSnippet:M1,cpuKernelImpl:dQ}),fne={kernelName:zo,backendName:"webgl",kernelFunc:hne},mne=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)); } `}},gne=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 bne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i;G().getBool("WEBGL_PACK_CLIP")?i=new gne(s.shape):i=new mne(s.shape);let u=[[a],[o]];return n.runWebGLProgram(i,[s],s.dtype,u)}var yne={kernelName:Ca,backendName:"webgl",kernelFunc:bne},vne=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 L1(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function xne(e){let{inputs:t,backend:n}=e,{x:r}=t,s=n.texData.get(r.dataId),a=new vne(r.shape),o=[L1(r,s.complexTensorInfos.real),L1(r,s.complexTensorInfos.imag)];return n.runWebGLProgram(a,o,o[0].dtype)}var wne={kernelName:Vd,backendName:"webgl",kernelFunc:xne},Ine=class{constructor(e){this.outputShape=[],this.outputShape=T.computeOutShape(e,1),this.variableNames=e.map((a,o)=>`T${o}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let a=1;a`T${g}`);let i=new Array(e.length-1);i[0]=e[0][t];for(let f=1;f= ${i[f-1]}) { return getChannel( getT${f}(${qh(o,u,g)}), vec2(${qh(c,u,g)})); }`}let d=i.length,h=i[i.length-1];p+=` return getChannel( getT${d}(${qh(o,u,h)}), vec2(${qh(c,u,h)}));`,this.userCode=` float getValue(${o.map(f=>"int "+f)}) { ${p} } void main() { ${s} coords = getOutputCoords(); vec4 result = vec4(getValue(${a}), 0., 0., 0.); ${a[r-1]} = ${a[r-1]} + 1; if (${a[r-1]} < ${n[r-1]}) { result.g = getValue(${a}); } ${a[r-2]} = ${a[r-2]} + 1; if (${a[r-2]} < ${n[r-2]}) { result.a = getValue(${a}); } ${a[r-1]} = ${a[r-1]} - 1; if (${a[r-2]} < ${n[r-2]} && ${a[r-1]} < ${n[r-1]}) { result.b = getValue(${a}); } setOutput(result); } `}};function qh(e,t,n){let r=e.indexOf(t);return e.map((a,o)=>o===r?`${a} - ${n}`:a).join()}function rg(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.texData.get(r.dataId);return sr({inputs:{x:s.complexTensorInfos.imag},backend:n})}var Sne={kernelName:Hf,backendName:"webgl",kernelFunc:rg};function hd(e,t,n){let r=e[0].dtype;if(r==="complex64"){let h=e.map(y=>Mp({inputs:{input:y},backend:n})),f=e.map(y=>rg({inputs:{input:y},backend:n})),g=hd(h,t,n),m=hd(f,t,n),b=Oa({inputs:{real:g,imag:m},backend:n});return h.forEach(y=>n.disposeIntermediateTensorInfo(y)),f.forEach(y=>n.disposeIntermediateTensorInfo(y)),n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(m),b}let s=n.shouldExecuteOnCPU(e);if(r==="string"&&(s=!0),s){let h=e.map(x=>{let S=[-1,w.sizeFromShape(x.shape.slice(t))];return pe({inputs:{x},backend:n,attrs:{shape:S}})}),f=h.map(x=>({vals:n.readSync(x.dataId),shape:x.shape})),g=T.computeOutShape(h.map(x=>x.shape),1),m=h[0].shape[0]===1,b=pQ(f,g,r,m),y=T.computeOutShape(e.map(x=>x.shape),t),v=n.makeTensorInfo(y,r,b);return h.forEach(x=>n.disposeIntermediateTensorInfo(x)),v}let a=e.filter(h=>w.sizeFromShape(h.shape)>0),o=G().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&a[0].shape.length>1;if(a.length===1){let h=o?new is(e[0].shape,ta):new oa(e[0].shape,ta);return n.runWebGLProgram(h,e,r)}let i=G().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(a.length>i){let h=[];for(let g=0;gf.shape),t);return n.runWebGLProgram(h,a,r)}let{tensors2D:u,outShape:c}=Cne(a,t,n),l=new Ine(u.map(h=>h.shape)),p=n.runWebGLProgram(l,u,r);u.forEach(h=>n.disposeIntermediateTensorInfo(h));let d=pe({inputs:{x:p},attrs:{shape:c},backend:n});return n.disposeIntermediateTensorInfo(p),d}function Cne(e,t,n){let r=T.computeOutShape(e.map(a=>a.shape),t);return{tensors2D:e.map(a=>pe({inputs:{x:a},attrs:{shape:[-1,w.sizeFromShape(a.shape.slice(t))]},backend:n})),outShape:r}}function dD(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r,a=w.parseAxisParam(s,t[0].shape)[0],o=t.map(c=>c.shape);T.assertParamsConsistent(o,a);let i=T.computeOutShape(t.map(c=>c.shape),a);if(w.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let u=t.filter(c=>w.sizeFromShape(c.shape)>0);return u.length===1?sr({inputs:{x:u[0]},backend:n}):hd(u,a,n)}var Tne={kernelName:yc,backendName:"webgl",kernelFunc:dD},pD=class{constructor(e,t=!1,n=null,r=!1,s=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let a=e.padInfo.top,o=e.padInfo.left,i=e.strideHeight,u=e.strideWidth,c=e.dilationHeight,l=e.dilationWidth,p=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,g=e.dataFormat==="channelsLast",m=g?1:2,b=g?2:3,y=g?3:1,v="",x="";n&&(r?v=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?v=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:v=` float activation(float x) { ${n} } `,x="result = activation(result);");let k=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${v} const ivec2 strides = ivec2(${i}, ${u}); const ivec2 pads = ivec2(${a}, ${o}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d2 = coords[${y}]; ivec2 xRCCorner = ivec2(coords[${m}], 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 < ${p}; wR++) { int xR = xRCorner + wR * ${c}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${l}; 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 (${g}) { vec4 xValues = vec4( getX(batch, xR, xC, d1), getX(batch, xR, xC, d1 + 1), getX(batch, xR, xC, d1 + 2), getX(batch, xR, xC, d1 + 3) ); dotProd += dot(xValues, wValues); } else { vec4 xValues = vec4( getX(batch, d1, xR, xC), getX(batch, d1 + 1, xR, xC), getX(batch, d1 + 2, xR, xC), getX(batch, d1 + 3, xR, xC) ); dotProd += dot(xValues, wValues); } } if (${f===1}) { if (${g}) { 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 (${f===2}) { vec2 wValues = vec2( getW(wR, wC, ${h}, d2), getW(wR, wC, ${h} + 1, d2) ); if (${g}) { 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 (${f===3}) { vec3 wValues = vec3( getW(wR, wC, ${h}, d2), getW(wR, wC, ${h} + 1, d2), getW(wR, wC, ${h} + 2, d2) ); if (${g}) { 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; ${k} ${x} setOutput(result); } `}},Nne=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,r=e.padInfo.left,s=e.strideDepth,a=e.strideHeight,o=e.strideWidth,i=e.dilationDepth,u=e.dilationHeight,c=e.dilationWidth,l=e.filterDepth,p=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4;this.userCode=` const ivec3 strides = ivec3(${s}, ${a}, ${o}); const ivec3 pads = ivec3(${t}, ${n}, ${r}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d2 = coords.u; ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads; int xFCorner = xFRCCorner.x; int xRCorner = xFRCCorner.y; int xCCorner = xFRCCorner.z; // Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get // y(yF, yR, yC, d2). ? = to be determined. : = across all // values in that axis. float dotProd = 0.0; for (int wF = 0; wF < ${l}; wF++) { int xF = xFCorner + wF * ${i}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int wR = 0; wR < ${p}; wR++) { int xR = xRCorner + wR * ${u}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int wC = 0; wC < ${d}; wC++) { int xC = xCCorner + wC * ${c}; 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 (${f===1}) { dotProd += getX(batch, xF, xR, xC, ${h}) * getW(wF, wR, wC, ${h}, d2); } else if (${f===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 (${f===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); } `}},hD=class{constructor(e,t=!1,n=null,r=!1,s=!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=xn(this.outputShape.length);let a=e.padInfo.left,o=e.strideWidth,i=e.dilationWidth,u=e.filterHeight,c=e.filterWidth,l=c,p=` 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<(l+1)/2;g++){let m=g*2;if(p+=` xC = xCCorner + ${m*i}; `,o===1){if(m= 0 && xCOffset < inDims[1] && xTexelC${m}Ready == 0) { xTexelC${m} = 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${m}.zw = vec2(0.0); } xTexelC${m}Ready = 1; } `,i===1&&m>0?p+=` xC${m} = vec4(xTexelC${m-2}.zw, xTexelC${m}.xy); `:p+=` 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${m} = vec4(previous.zw, xTexelC${m}.xy); } else { xC${m} = vec4(0.0, 0.0, xTexelC${m}.xy); } `):p+=` if (xC >= 0 && xC < inDims[1] && xTexelC${m}Ready == 0) { xTexelC${m} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${m}.zw = vec2(0.0); } xTexelC${m}Ready = 1; } xC${m} = xTexelC${m}; `,m+1= 0 && xCOffset < inDims[1] && xTexelC${m+1}Ready == 0) { xTexelC${m+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${m+1}.zw = vec2(0.0); } xTexelC${m+1}Ready = 1; } `,i>1?p+=` xCOffset -= 2; if (xCOffset >= 0 && xCOffset < inDims[1]) { previous = getX(batch, xR, xCOffset, d1); xC${m+1} = vec4(previous.zw, xTexelC${m+1}.xy); } else { xC${m+1} = vec4(0.0, 0.0, xTexelC${m+1}.xy); } `:p+=` xC${m+1} = vec4(xTexelC${m}.zw, xTexelC${m+1}.xy); `):b===1?p+=` xC${m+1} = xTexelC${m}; `:p+=` xCOffset = xC + ${b}; if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${m+1}Ready == 0) { xTexelC${m+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${m+1}.zw = vec2(0.0); } xTexelC${m+1}Ready = 1; } xC${m+1} = xTexelC${m+1}; `}}else m= 0 && xCOffset < inDims[1] && xTexelC${m}Ready == 0) { xTexelC${m} = 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${m}.zw = vec2(0.0); } xTexelC${m}Ready = 1; } if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${m+1}Ready == 0) { xTexelC${m+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${m+1}.zw = vec2(0.0); } xTexelC${m+1}Ready = 1; } xC${m} = vec4(xTexelC${m}.zw, xTexelC${m+1}.zw); `,m+1= 0 && xCOffset < inDims[1]) { final = getX(batch, xR, xCOffset, d1); } xC${m+1} = vec4(xTexelC${m+1}.xy, final.xy); `)):(p+=` if(xC >= 0 && xC < inDims[1] && xTexelC${m}Ready == 0) { xTexelC${m} = getX(batch, xR, xC, d1); if (xC + 1 >= inDims[1]) { xTexelC${m}.zw = vec2(0.0); } xTexelC${m}Ready = 1; } xCOffset = xC + strides[1]; if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${m+1}Ready == 0) { xTexelC${m+1} = getX(batch, xR, xCOffset, d1); if (xCOffset + 1 >= inDims[1]) { xTexelC${m+1}.zw = vec2(0.); } xTexelC${m+1}Ready = 1; } xC${m} = vec4( xTexelC${m}.xy, xTexelC${m+1}.xy); `,m+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[${o}] && d1 >= 0) { ch = imod(pos, inChannels); if (${s}) { innerDims = vec2(d1, ch); result[${c*2+l}] = getChannel( getA(rc.x, d0, int(innerDims.x), int(innerDims.y)), innerDims); } else { innerDims = vec2(d0, d1); result[${c*2+l}] = 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; ${u} ${r.output} = result; } `}};function Af(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 fD({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:o=0,activation:i=null}){let u=e.shape,c=r.texData.get(e.dataId),l=n.inChannels,p=u[0]*u[1]*u[2],d=n.outChannels,h=n.dataFormat==="channelsLast",f=!1,g=!1,m,b=[];if(a!=null){let x=Af(a.shape,h);x!=null&&(a=pe({inputs:{x:a},backend:r,attrs:{shape:x}}),b.push(a))}if(s!=null){let x=Af(s.shape,h);x!=null&&(s=pe({inputs:{x:s},backend:r,attrs:{shape:x}}),b.push(s))}if(!((p===1||d===1)&&l>oD)&&c.isPacked&&h&&c.texture!=null&&u[2]%2!==0&&w.arraysEqual(c.shape.slice(-3),u.slice(-3))){let x=u[0]*u[1]*(u[2]+1),k={dataId:e.dataId,shape:[1,x,n.inChannels],dtype:e.dtype},S=c.shape;c.shape=c.shape.slice(),c.shape[c.shape.length-2]++,w.assert($d(c.shape,k.shape),()=>`packed reshape ${c.shape} to ${k.shape} isn't free`);let N=pe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});b.push(N);let E=Ef({a:k,b:N,backend:r,transposeA:f,transposeB:g,bias:s,activation:i,preluActivationWeights:a,leakyreluAlpha:o}),$=r.texData.get(E.dataId);w.assert($.isPacked,()=>"batchMatMul result is expected to be packed"),c.shape=S,$.shape=n.outShape,m=sr({inputs:{x:E},backend:r}),m.shape=n.outShape,b.push(E)}else{let x=n.outHeight*n.outWidth,k=pe({inputs:{x:e},backend:r,attrs:{shape:h?[n.batchSize,x,n.inChannels]:[n.batchSize,n.inChannels,x]}}),S=pe({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),N=Ef({a:h?k:S,b:h?S:k,transposeA:!h,transposeB:g,backend:r,bias:s,activation:i,preluActivationWeights:a,leakyreluAlpha:o});m=pe({inputs:{x:N},backend:r,attrs:{shape:n.outShape}}),b.push(k),b.push(S),b.push(N)}for(let x of b)r.disposeIntermediateTensorInfo(x);return m}function mD({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:o=0,activation:i=null}){let{filterWidth:u,filterHeight:c,inChannels:l,outWidth:p,outHeight:d,dataFormat:h}=n,f=h==="channelsLast",g=u*c*l,m=d*p,b=[n.batchSize,g,m],y=!0,v=!1,x=[];if(a!=null){let q=Af(a.shape,f);q!=null&&(a=pe({inputs:{x:a},backend:r,attrs:{shape:q}}),x.push(a))}if(s!=null){let q=Af(s.shape,f);q!=null&&(s=pe({inputs:{x:s},backend:r,attrs:{shape:q}}),x.push(s))}let k=pe({inputs:{x:t},backend:r,attrs:{shape:[1,g,w.sizeFromShape(t.shape)/g]}});x.push(k);let S=new _ne(b,n),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]],E=r.runWebGLProgram(S,[e],"float32",N),$=pe({inputs:{x:E},backend:r,attrs:{shape:b}});x.push(E),x.push($);let F=s!=null,D=a!=null,R=i==="leakyrelu",C=i?Fd(i,!0):null,L=new aD(f?$.shape:k.shape,f?k.shape:$.shape,f?[n.batchSize,m,n.outChannels]:[n.batchSize,n.outChannels,m],y,v,F,C,D,R),U=f?[$,k]:[k,$];if(s&&U.push(s),D&&U.push(a),R){let q=r.makeTensorInfo([],"float32",w.createScalarValue(o,"float32"));U.push(q),x.push(q)}let H=r.runWebGLProgram(L,U,"float32"),K=pe({inputs:{x:H},backend:r,attrs:{shape:n.outShape}});x.push(H);for(let q of x)r.disposeIntermediateTensorInfo(q);return K}function Ene(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dataFormat:u,dilations:c,dimRoundingMode:l}=r,p=T.convertConv2DDataFormat(u),d=T.computeConv2DInfo(s.shape,a.shape,o,c,i,l,!1,p),h;if(d.filterHeight===1&&d.filterWidth===1&&d.dilationHeight===1&&d.dilationWidth===1&&d.strideHeight===1&&d.strideWidth===1&&(d.padInfo.type==="SAME"||d.padInfo.type==="VALID"))h=fD({x:s,filter:a,convInfo:d,backend:n});else if(d.strideWidth<=2&&p==="channelsLast"&&G().getBool("WEBGL_EXP_CONV")){let g=new hD(d),m=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=n.runWebGLProgram(g,[s,a],"float32",m)}else if(G().getBool("WEBGL_CONV_IM2COL"))h=mD({x:s,filter:a,convInfo:d,backend:n});else{let g=new pD(d);h=n.runWebGLProgram(g,[s,a],"float32")}let f=pe({inputs:{x:h},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(h),f}var Ane={kernelName:Wo,backendName:"webgl",kernelFunc:Ene},Dne=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,s=e.padInfo.left,a=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} - ${r}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; if (xC < 0 || xC >= ${e.inWidth}) { continue; } ${a?`float dyValue = getDy(b, yR, yC, d2); float xValue = getX(b, xR, xC, d1); dotProd += (xValue * dyValue);`:`float dyValue = getDy(b, d2, yR, yC); float xValue = getX(b, d1, xR, xC); dotProd += (xValue * dyValue);`} } } } setOutput(dotProd); } `}},$ne=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,a=e.dataFormat==="channelsLast",o=t-1-e.padInfo.top,i=n-1-e.padInfo.left,u=a?1:2,c=a?2:3,l=a?3:1;this.userCode=` const ivec2 pads = ivec2(${o}, ${i}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[${l}]; ivec2 dyCorner = ivec2(coords[${u}], coords[${c}]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; // Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${r}.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) / ${s}.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 (${a}) { float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } else { float xValue = getDy(batch, d2, idyR, idyC); float wValue = getW(wRPerm, wCPerm, d1, d2); dotProd += xValue * wValue; } } } } setOutput(dotProd); } `}},Fne=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,s=e.padInfo.front,a=e.padInfo.top,o=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} - ${s}; if (xF < 0 || xF >= ${e.inDepth}) { continue; } for (int yR = 0; yR < ${e.outHeight}; yR++) { int xR = wR + yR * ${n} - ${a}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${r} - ${o}; 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); } `}},Rne=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,r=e.filterWidth,s=e.strideDepth,a=e.strideHeight,o=e.strideWidth,i=t-1-e.padInfo.front,u=n-1-e.padInfo.top,c=r-1-e.padInfo.left;this.userCode=` const ivec3 pads = ivec3(${i}, ${u}, ${c}); void main() { ivec5 coords = getOutputCoords(); int batch = coords.x; int d1 = coords.u; ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads; int dyFCorner = dyCorner.x; int dyRCorner = dyCorner.y; int dyCCorner = dyCorner.z; float dotProd = 0.0; for (int wF = 0; wF < ${t}; wF++) { float dyF = float(dyFCorner + wF) / ${s}.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) / ${a}.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 < ${r}; wC++) { float dyC = float(dyCCorner + wC) / ${o}.0; if (dyC < 0.0 || dyC >= ${e.outWidth}.0 || fract(dyC) > 0.0) { continue; } int idyC = int(dyC); int wCPerm = ${r} - 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 Pne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,dataFormat:u,dimRoundingMode:c,filterShape:l}=r,p=T.convertConv2DDataFormat(u),d=T.computeConv2DInfo(s.shape,l,o,1,i,c,!1,p),h=new Dne(d);return n.runWebGLProgram(h,[s,a],"float32")}var One={kernelName:Lf,backendName:"webgl",kernelFunc:Pne},Mne=class{constructor(e){this.variableNames=["dy","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"strides",type:"vec2"}],this.outputShape=e.inShape,this.enableShapeUniforms=xn(this.outputShape.length);let t=e.filterHeight,n=e.filterWidth,r=t-1-e.padInfo.top,s=n-1-e.padInfo.left;this.userCode=` const ivec2 pads = ivec2(${r}, ${s}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = ivec2(coords[1], coords[2]) - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; vec4 result = vec4(0.); for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / strides[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++) { int wCPerm = ${n} - 1 - wC; float dyC = float(dyCCorner + wC) / strides[1]; bool idyCVal = (dyC >= 0.0) && (dyC < ${e.outWidth}.0) && (fract(dyC) == 0.0); int idyC = int(dyC); float dyC2 = float(dyCCorner + wC + 1) / strides[1]; bool idyCVal2 = (dyC2 >= 0.0) && (dyC2 < ${e.outWidth}.0) && (fract(dyC2) == 0.0); int idyC2 = int(dyC2); if (idyCVal && idyCVal2) { for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) { vec4 wValue = getW(wRPerm, wCPerm, d1, d2); vec4 dySample = getDy(batch, idyR, idyC, d2); vec4 dySample2 = (idyC / 2 == idyC2 / 2) ? dySample : getDy(batch, idyR, idyC2, d2); vec2 dyValue = mod(float(idyC), 2.) == 0. ? dySample.xy : dySample.zw; result.xy += vec2(dot(dyValue, wValue.xy), dot(dyValue, wValue.zw)); dyValue = mod(float(idyC2), 2.) == 0. ? dySample2.xy : dySample2.zw; result.zw += vec2(dot(dyValue, wValue.xy), dot(dyValue, wValue.zw)); } } else if (idyCVal) { for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) { vec4 wValue = getW(wRPerm, wCPerm, d1, d2); vec4 dySample = getDy(batch, idyR, idyC, d2); vec2 dyValue = mod(float(idyC), 2.) == 0. ? dySample.xy : dySample.zw; result.xy += vec2(dot(dyValue, wValue.xy), dot(dyValue, wValue.zw)); } } else if (idyCVal2) { for (int d2 = 0; d2 < ${e.outChannels}; d2 += 2) { vec4 wValue = getW(wRPerm, wCPerm, d1, d2); vec4 dySample = getDy(batch, idyR, idyC2, d2); vec2 dyValue = mod(float(idyC2), 2.) == 0. ? dySample.xy : dySample.zw; result.zw += vec2(dot(dyValue, wValue.xy), dot(dyValue, wValue.zw)); } } } } setOutput(result); } `}};function Lne(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{inputShape:o,strides:i,pad:u,dataFormat:c,dimRoundingMode:l}=r,p=T.convertConv2DDataFormat(c),d=T.computeConv2DInfo(o,a.shape,i,1,u,l,!1,p);if(G().getBool("WEBGL_PACK_CONV2DTRANSPOSE")&&p==="channelsLast"){let h=[[d.strideHeight,d.strideWidth]],f=new Mne(d);return n.runWebGLProgram(f,[s,a],"float32",h)}else{let h=new $ne(d);return n.runWebGLProgram(h,[s,a],"float32")}}var Bne={kernelName:Vo,backendName:"webgl",kernelFunc:Lne};function zne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:u}=r,c=T.computeConv3DInfo(s.shape,a.shape,o,u,i),l=new Nne(c);return n.runWebGLProgram(l,[s,a],"float32")}var Wne={kernelName:Uo,backendName:"webgl",kernelFunc:zne};function Vne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,filterShape:u}=r,c=T.computeConv3DInfo(s.shape,u,o,1,i),l=new Fne(c);return n.runWebGLProgram(l,[s,a],"float32")}var Une={kernelName:vc,backendName:"webgl",kernelFunc:Vne};function Gne(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{pad:o,strides:i,inputShape:u}=r,c=T.computeConv3DInfo(u,a.shape,i,1,o),l=new Rne(c);return n.runWebGLProgram(l,[s,a],"float32")}var Hne={kernelName:xc,backendName:"webgl",kernelFunc:Gne},jne=Nl+` return cos(x); `,qne=` vec4 result = cos(x); bvec4 isNaN = isnan(x); ${nu} return result; `,Kne=Ze({opSnippet:jne,packedOpSnippet:qne}),Xne={kernelName:Go,backendName:"webgl",kernelFunc:Kne},Yne=` float e2x = exp(-x); return (e2x + 1.0 / e2x) / 2.0; `,Zne=Ze({opSnippet:Yne}),Jne={kernelName:Ho,backendName:"webgl",kernelFunc:Zne},Qne=class{constructor(e,t,n,r,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,o,i,u]=e,[c]=t,[l,p]=n;this.outputShape=[c,l,p,u];let d=r==="bilinear"?1:0,[h,f]=[`${o-1}.0`,`${i-1}.0`],[g,m,b]=l>1?[`${(o-1)/(l-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[y,v,x]=p>1?[`${(i-1)/(p-1)}`,"(x2-x1) * width_ratio",`x1*${f} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${f}`];this.userCode=` const float height_ratio = float(${g}); 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 >= ${a}) { return; } float height_scale = ${m}; float width_scale = ${v}; float in_y = ${b}; if( in_y < 0.0 || in_y > ${h} ) { setOutput(float(${s})); return; } float in_x = ${x}; if( in_x < 0.0 || in_x > ${f} ) { setOutput(float(${s})); return; } vec2 sourceFracIndexCR = vec2(in_x,in_y); if(${d} == 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); } } `}},ere=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:a,boxInd:o}=t,{cropSize:i,method:u,extrapolationValue:c}=r,l=new Qne(s.shape,a.shape,i,u,c);return n.runWebGLProgram(l,[s,a,o],"float32")},tre={kernelName:Ic,backendName:"webgl",kernelFunc:ere},Pd;(function(e){e.Prod="*",e.Sum="+"})(Pd||(Pd={}));var B1=class{constructor(e,t,n,r){this.op=e,this.outputShape=t,this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}];let s=this.outputShape.length,a=this.op===Pd.Prod?"1.0":"0.0",o=n?a:`getX(${z1(s,"coords",this.op)})`,i=this.outputShape[this.outputShape.length-1],u="",c="";n?(u=r?`end != ${i-1}`:"end != 0",c=r?"end + 1":"end - 1"):(u=r?`end + pow2 < ${i}`:"end >= pow2",c=r?"end + pow2":"end - pow2"),this.userCode=` void main() { ${ht(s)} coords = getOutputCoords(); int end = ${W1(s,"coords",this.op)}; float val = ${o}; int pow2 = int(pow(2.0, index)); if (${u}) { int idx = ${c}; ${W1(s,"coords",this.op)} = idx; val ${this.op}= getX(${z1(s,"coords",this.op)}); } setOutput(val); } `}};function z1(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 W1(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 gD(e,t,n,r,s,a){let o=t.shape.length,i=T.getAxesPermutation([r],o),u=t;i!=null&&(u=Tn({inputs:{x:t},backend:n,attrs:{perm:i}}));let c=T.getInnerMostAxes(1,o)[0];if(c!==o-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${r}`);let l=u.shape[c],p=sr({inputs:{x:u},backend:n});for(let d=0;d<=Math.ceil(Math.log2(l))-1;d++){let h=new B1(e,u.shape,!1,a),f=[[d]],g=p;p=n.runWebGLProgram(h,[p],p.dtype,f),n.disposeIntermediateTensorInfo(g)}if(s){let d=new B1(e,u.shape,s,a),h=p;p=n.runWebGLProgram(d,[p],p.dtype),n.disposeIntermediateTensorInfo(h)}if(i!=null){let d=T.getUndoAxesPermutation(i),h=Tn({inputs:{x:p},backend:n,attrs:{perm:d}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(u),h}return p}function nre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;return gD(Pd.Prod,s,n,a,o,i)}var rre={kernelName:wc,backendName:"webgl",kernelFunc:nre};function sre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;return gD(Pd.Sum,s,n,a,o,i)}var are={kernelName:jo,backendName:"webgl",kernelFunc:sre};function ore(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:a}=t,{size:o,binaryOutput:i}=r;if(s.shape.length===1){let u=n.readSync(s.dataId),c=n.readSync(a.dataId),l=KA(u,c,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,l)}else if(s.shape.length===2){let u=n.bufferSync(s),c=n.bufferSync(a),l=uQ(u,c,o,i);return n.makeTensorInfo(l.shape,a.dtype,l.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${s.shape.length}.`)}var ire={kernelName:Ud,backendName:"webgl",kernelFunc:ore},ure=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 cre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockSize:a,dataFormat:o}=r,i=s.shape[0],u=o==="NHWC"?s.shape[1]:s.shape[2],c=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],p=u*a,d=c*a,h=l/(a*a),f=o==="NHWC"?[i,p,d,h]:[i,h,p,d],g=new ure(f,a,o);return n.runWebGLProgram(g,[s],s.dtype)}var lre={kernelName:kc,backendName:"webgl",kernelFunc:cre},bD=class{constructor(e,t=!1,n=null,r=!1,s=!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=xn(this.outputShape.length);let a=e.filterHeight,o=e.filterWidth,i=e.outChannels/e.inChannels,u="",c="";n&&(r?u=`float activation(float a) { float b = getPreluActivationWeightsAtOutCoords(); ${n} }`:s?u=`float activation(float a) { float b = getLeakyreluAlphaAtOutCoords(); ${n} }`:u=` float activation(float x) { ${n} } `,c="result = activation(result);");let l=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=` ${u} void main() { ivec4 coords = getOutputCoords(); int batch = coords.x; ivec2 xRCCorner = coords.yz * strides - pads; int d2 = coords.w; int d1 = d2 / ${i}; int q = d2 - d1 * ${i}; 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 < ${a}; wR++) { int xR = xRCorner + wR * dilations[0]; if (xR < 0 || xR >= inDims[0]) { continue; } for (int wC = 0; wC < ${o}; 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; ${l} ${c} setOutput(result); } `}},yD=class{constructor(e,t=!1,n=null,r=!1,s=!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=xn(this.outputShape.length);let a=e.outChannels/e.inChannels,o=e.padInfo.left,i=e.strideWidth,u=e.dilationWidth,c=e.filterHeight,l=e.filterWidth,p=l,d=` int xR; int xC; int xCOffset; vec4 wTexel; vec4 previous; vec4 final;`;for(let m=0;m=0 && xR < inDims[0]) { `;for(let m=0;m<(p+1)/2;m++){let b=m*2;if(d+=` xC = xCCorner + ${b*u}; `,i===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; } `,u===1&&b>0?d+=` xC${b} = vec4(xTexelC${b-2}.zw, xTexelC${b}.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${b} = vec4(previous.zw, xTexelC${b}.xy); } else { xC${b} = vec4(0.0, 0.0, xTexelC${b}.xy); } `):d+=` 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; } `,u>1?d+=` 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); } `:d+=` xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.xy); `):y===1?d+=` xC${b+1} = xTexelC${b}; `:d+=` 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); `)):(d+=` 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 ${o} and dilations '${l}'`);let p=T.computeConv2DInfo(s.shape,a.shape,o,l,i,c,!0),d;G().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels===1?d=new yD(p):d=new bD(p);let h=[[p.padInfo.top,p.padInfo.left],[p.strideHeight,p.strideWidth],[p.dilationHeight,p.dilationWidth],[p.inHeight,p.inWidth]];return n.runWebGLProgram(d,[s,a],"float32",h)}var pre={kernelName:qo,backendName:"webgl",kernelFunc:dre},hre=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,r=e.padInfo.top,s=e.padInfo.left,a=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 * ${a} + 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} - ${r}; if (xR < 0 || xR >= ${e.inHeight}) { continue; } for (int yC = 0; yC < ${e.outWidth}; yC++) { int xC = wC + yC * ${n} - ${s}; 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); } `}},fre=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,r=e.strideHeight,s=e.strideWidth,a=t-1-e.padInfo.top,o=n-1-e.padInfo.left,i=e.outChannels/e.inChannels;this.userCode=` const ivec2 pads = ivec2(${a}, ${o}); void main() { ivec4 coords = getOutputCoords(); int batch = coords[0]; int d1 = coords[3]; ivec2 dyCorner = coords.yz - pads; int dyRCorner = dyCorner.x; int dyCCorner = dyCorner.y; float dotProd = 0.0; for (int wR = 0; wR < ${t}; wR++) { float dyR = float(dyRCorner + wR) / ${r}.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) / ${s}.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 < ${i}; dm++) { int d2 = d1 * ${i} + dm; float xValue = getDy(batch, idyR, idyC, d2); float wValue = getW(wRPerm, wCPerm, d1, dm); dotProd += xValue * wValue; } } } setOutput(dotProd); } `}};function mre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,dilations:i,pad:u,dimRoundingMode:c,filterShape:l}=r,p=T.computeConv2DInfo(s.shape,l,o,i,u,c,!0),d=new hre(p);return n.runWebGLProgram(d,[s,a],"float32")}var gre={kernelName:Bf,backendName:"webgl",kernelFunc:mre};function bre(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{strides:o,dilations:i,pad:u,dimRoundingMode:c,inputShape:l}=r,p=T.computeConv2DInfo(l,a.shape,o,i,u,c,!0),d=new fre(p);return n.runWebGLProgram(d,[s,a],"float32")}var yre={kernelName:zf,backendName:"webgl",kernelFunc:bre},vre=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 xre(e){let{inputs:t,backend:n}=e,{x:r}=t,s=[...r.shape,...r.shape],a=w.sizeFromShape(r.shape),o=pe({inputs:{x:r},backend:n,attrs:{shape:[a]}}),i=new vre(a),u=n.runWebGLProgram(i,[o],o.dtype),c=pe({inputs:{x:u},backend:n,attrs:{shape:s}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),c}var wre={kernelName:Gd,backendName:"webgl",kernelFunc:xre},Ire=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:r,strideHeight:s,strideWidth:a,filterHeight:o,filterWidth:i,dilationHeight:u,dilationWidth:c}=e,{top:l,left:p}=r;this.userCode=` const ivec2 strides = ivec2(${s}, ${a}); const ivec2 pads = ivec2(${l}, ${p}); 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 < ${o}; h++) { int hIn = hBeg + h * ${u}; if (hIn >= 0 && hIn < ${t}) { for (int w = 0; w < ${i}; w++) { int wIn = wBeg + w * ${c}; 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 kre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:u}=r,c=T.computeDilation2DInfo(s.shape,a.shape,o,i,"NHWC",u),l,p=new Ire(c);l=n.runWebGLProgram(p,[s,a],"float32");let d=pe({inputs:{x:l},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(l),d}var Sre={kernelName:Ko,backendName:"webgl",kernelFunc:kre};function Cre(e){let{inputs:t,backend:n,attrs:r}=e,{equation:s}=r,a=t,{allDims:o,summedDims:i,idDims:u}=T.decodeEinsumEquation(s,a.length);T.checkEinsumDimSizes(o.length,u,a);let{path:c,steps:l}=T.getEinsumComputePath(i,u),p=l.length,d=null,h=o.length,f=[];for(let g=0;g=0&&(d=ng({inputs:{x:d},backend:n,attrs:{axis:c[g]-(o.length-h),keepDims:!1}}),f.push(d)),h--)}for(let g of f)g!==d&&n.disposeIntermediateTensorInfo(g);return d}var Tre={kernelName:Vf,backendName:"webgl",kernelFunc:Cre},Nre="return (x >= 0.0) ? x : (exp(x) - 1.0);",_re=` 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; `,Ere=Ze({opSnippet:Nre,packedOpSnippet:_re}),Are={kernelName:Yo,backendName:"webgl",kernelFunc:Ere},Dre="return (b >= 0.0) ? a : a * (b + 1.0);",$re=` vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.))); return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0)))); `,Fre=e=>{let{inputs:t,backend:n}=e,{dy:r,y:s}=t,a=G().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new Tl($re,r.shape,s.shape):new To(Dre,r.shape,s.shape);return n.runWebGLProgram(a,[r,s],r.dtype)},Rre={kernelName:Sc,backendName:"webgl",kernelFunc:Fre},Pre=` return vec4(equal(a, b)); `,Ore="return float(a == b);",Mre=mn({opSnippet:Ore,packedOpSnippet:Pre,dtype:"bool",cpuKernelImpl:hQ}),Lre={kernelName:Cc,backendName:"webgl",kernelFunc:Mre},Bre=` // Error function is calculated approximately with elementary function. // See "Handbook of Mathematical Functions with Formulas, // Graphs, and Mathematical Tables", Abramowitz and Stegun. float p = ${T.ERF_P}; float a1 = ${T.ERF_A1}; float a2 = ${T.ERF_A2}; float a3 = ${T.ERF_A3}; float a4 = ${T.ERF_A4}; float a5 = ${T.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)); `,zre=Ze({opSnippet:Bre}),Wre={kernelName:Zo,backendName:"webgl",kernelFunc:zre},Vre=Nl+` return exp(x); `,Ure=` 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; `,vD=Ze({opSnippet:Vre,packedOpSnippet:Ure,cpuKernelImpl:fQ,dtype:"float32"}),Gre={kernelName:Jo,backendName:"webgl",kernelFunc:vD};function kx(e){let{inputs:t,attrs:n,backend:r}=e,{dim:s}=n,{input:a}=t,o=a.shape.length,i=a.shape.slice(),u=s;return s<0&&(w.assert(-(o+1)<=s,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),u=o+s+1),i.splice(u,0,1),pe({inputs:{x:a},backend:r,attrs:{shape:i}})}var Hre={kernelName:Tc,backendName:"webgl",kernelFunc:kx},V1="return exp(x) - 1.0;",jre=Ze({opSnippet:V1,packedOpSnippet:V1,cpuKernelImpl:mQ}),qre={kernelName:Qo,backendName:"webgl",kernelFunc:jre},U1=class{constructor(e,t,n){this.variableNames=["real","imag"];let r=t[1];this.outputShape=t;let s=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,a=n?`${r}.0`:"1.0",o;if(e==="real")o="return real * expR - imag * expI;";else if(e==="imag")o="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=` const float exponentMultiplier = ${s}; float unaryOpComplex(float real, float expR, float imag, float expI) { ${o} } float mulMatDFT(int batch, int index) { float indexRatio = float(index) / float(${r}); float exponentMultiplierTimesIndexRatio = exponentMultiplier * indexRatio; float result = 0.0; for (int i = 0; i < ${r}; i++) { // x = (-2|2 * PI / N) * index * i; float x = exponentMultiplierTimesIndexRatio * float(i); float expR = cos(x); float expI = sin(x); float real = getReal(batch, i); float imag = getImag(batch, i); result += unaryOpComplex(real, expR, imag, expI) / ${a}; } return result; } void main() { ivec2 coords = getOutputCoords(); setOutput(mulMatDFT(coords[0], coords[1])); } `}};function xD(e,t,n){let r=n.texData.get(e.dataId),s=w.sizeFromShape(e.shape),a=e.shape[e.shape.length-1],o=s/a,i=pe({inputs:{x:e},backend:n,attrs:{shape:[o,a]}}),u=i.shape,c=new U1("real",u,t),l=new U1("imag",u,t),p=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:u},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:u}],d=n.runWebGLProgram(c,p,"float32"),h=n.runWebGLProgram(l,p,"float32"),f=Oa({inputs:{real:d,imag:h},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h);let g=pe({inputs:{x:f},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(f),g}function Kre(e){let{inputs:t,backend:n}=e,{input:r}=t;return xD(r,!1,n)}var Xre={kernelName:Uf,backendName:"webgl",kernelFunc:Kre},Yre=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 Lp(e){let{backend:t,attrs:n}=e,{shape:r,value:s}=n,{dtype:a}=n;if(a=a||w.inferDtype(s),a==="string"){let o=w.getArrayFromDType(a,w.sizeFromShape(r));return o.fill(s),t.makeTensorInfo(r,a,o)}else{let o=new Yre(r,s),i=[[s]];return t.runWebGLProgram(o,[],a,i)}}var Zre={kernelName:Hd,backendName:"webgl",kernelFunc:Lp},Jre=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); } `}},Qre={kernelName:Nc,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,s=new Jre(n.shape);return r.runWebGLProgram(s,[n],n.dtype)}},G1="return floor(x);",ese=Ze({opSnippet:G1,packedOpSnippet:G1,cpuKernelImpl:gQ}),tse={kernelName:ei,backendName:"webgl",kernelFunc:ese},nse=` 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; } `,rse=` 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); `,sse=mn({opSnippet:nse,packedOpSnippet:rse,dtype:"int32"}),ase={kernelName:ti,backendName:"webgl",kernelFunc:sse},ose=class{constructor(e){this.variableNames=["A"];let t=An(),[n,r]=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(${r}.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)); } `}},ise=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=An(),[n,r]=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(${r}.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; } `}},use={kernelName:of,backendName:"webgl",kernelFunc:cse},Ou,Tv=G().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function cse(e){let{inputs:t,backend:n,attrs:r}=e,{pixels:s}=t,{numChannels:a}=r,o=typeof HTMLVideoElement!="undefined"&&s instanceof HTMLVideoElement,i=typeof HTMLImageElement!="undefined"&&s instanceof HTMLImageElement,[u,c]=o?[s.videoWidth,s.videoHeight]:[s.width,s.height],l=[c,u],p=[c,u,a];if(i||o){let g=G().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(Ou==null||g!==Tv)&&(Tv=g,Ou=document.createElement("canvas").getContext("2d",{willReadFrequently:Tv})),Ou.canvas.width=u,Ou.canvas.height=c,Ou.drawImage(s,0,0,u,c),s=Ou.canvas}let d=n.makeTensorInfo(l,"int32");n.texData.get(d.dataId).usage=lr.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(d.dataId),s);let h=G().getBool("WEBGL_PACK")?new ise(p):new ose(p),f=n.runWebGLProgram(h,[d],"int32");return n.disposeData(d.dataId),f}function lse(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:u,pad:c,dataFormat:l,dilations:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=r,g=T.convertConv2DDataFormat(l),m=T.computeConv2DInfo(s.shape,a.shape,u,p,c,d,!1,g),b,y=[],v=o!=null,x=i!=null,k=h==="leakyrelu",S=()=>{let E=[s,a],$=(F,D)=>{if(D==="NCHW"&&F.shape.length===1&&F.shape[0]!==1){let R=pe({inputs:{x:F},backend:n,attrs:{shape:[F.shape[0],1,1]}});return y.push(R),R}return F};if(v&&E.push($(o,l)),x&&E.push($(i,l)),k){let F=n.makeTensorInfo([],"float32",w.createScalarValue(f,"float32"));E.push(F),y.push(F)}return E};if(m.filterHeight===1&&m.filterWidth===1&&m.dilationHeight===1&&m.dilationWidth===1&&m.strideHeight===1&&m.strideWidth===1&&(m.padInfo.type==="SAME"||m.padInfo.type==="VALID"))b=fD({x:s,filter:a,convInfo:m,backend:n,bias:o,activation:h,preluActivationWeights:i,leakyreluAlpha:f});else if(m.strideWidth<=2&&g==="channelsLast"&&G().getBool("WEBGL_EXP_CONV")){let E=h?Fd(h,!0):null,$=new hD(m,v,E,x,k),F=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]],D=S();b=n.runWebGLProgram($,D,"float32",F)}else if(G().getBool("WEBGL_CONV_IM2COL"))b=mD({x:s,filter:a,convInfo:m,backend:n,bias:o,activation:h,preluActivationWeights:i,leakyreluAlpha:f});else{let E=h?Fd(h,!1):null,$=new pD(m,v,E,x,k),F=S();b=n.runWebGLProgram($,F,"float32")}let N=pe({inputs:{x:b},backend:n,attrs:{shape:m.outShape}});return y.push(b),y.forEach(E=>n.disposeIntermediateTensorInfo(E)),N}var dse={kernelName:co,backendName:"webgl",kernelFunc:lse};function pse(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:u,pad:c,dilations:l,dimRoundingMode:p,activation:d,leakyreluAlpha:h}=r,f=[],g=l;g==null&&(g=[1,1]),w.assert(T.eitherStridesOrDilationsAreOne(u,g),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);let m=T.computeConv2DInfo(s.shape,a.shape,u,g,c,p,!0),b=G().getBool("WEBGL_PACK_DEPTHWISECONV")&&m.strideWidth<=2&&m.outChannels/m.inChannels===1,y=d?Fd(d,b):null,v=[s,a],x=o!=null,k=i!=null,S=d==="leakyrelu";if(x&&v.push(o),k&&v.push(i),S){let F=n.makeTensorInfo([],"float32",w.createScalarValue(h,"float32"));v.push(F),f.push(F)}let N;b?N=new yD(m,x,y,k,S):N=new bD(m,x,y,k,S);let E=[[m.padInfo.top,m.padInfo.left],[m.strideHeight,m.strideWidth],[m.dilationHeight,m.dilationWidth],[m.inHeight,m.inWidth]],$=n.runWebGLProgram(N,v,"float32",E);return f.forEach(F=>n.disposeIntermediateTensorInfo(F)),$}var hse={kernelName:lo,backendName:"webgl",kernelFunc:pse},fse=class{constructor(e,t,n,r){this.sliceDim=e,this.strides=t,this.paramsShape=r,this.variableNames=["x","indices"],this.outputShape=n;let s=ht(n.length),a=` int index;`;for(let o=0;o= ${this.paramsShape[o]}; flattenIndex += index * ${this.strides[o]};`;this.userCode=` void main() { ${s} coords = getOutputCoords(); int flattenIndex = 0; bool out_of_bounds = false; ${a} setOutput(out_of_bounds ? 0.0 : getX(flattenIndex, coords[1])); } `}};function mse(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,a=s.shape,o=a[a.length-1],i=w.sizeFromShape(r.shape),[u,c,l,p]=T.prepareAndValidate(r,s),d=pe({inputs:{x:s},backend:n,attrs:{shape:[c,o]}}),h=pe({inputs:{x:r},backend:n,attrs:{shape:[w.sizeFromShape(r.shape)/l,l]}});if(n.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let b=n.readSync(s.dataId),y=n.bufferSync(r),v=bQ(b,y,r.dtype,c,o,l,p,r.shape,i);return n.makeTensorInfo(u,r.dtype,v.values)}let f=new fse(o,p,[c,l],r.shape),g=n.runWebGLProgram(f,[h,d],h.dtype),m=pe({inputs:{x:g},backend:n,attrs:{shape:u}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(g),m}var gse={kernelName:Ec,backendName:"webgl",kernelFunc:mse},bse=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=ht(this.rank),r=yse(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(${r})); } `}};function yse(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let s=0;s=0,()=>`GatherV2: the index value ${k} is not in [0, ${v-1}]`)}}let c=T.segment_util.collectGatherOpShapeInfo(s,a,u,i),l=w.sizeFromShape(a.shape),p=[],d=pe({inputs:{x:s},backend:n,attrs:{shape:[c.batchSize,c.outerSize,c.dimSize,c.sliceSize]}}),h=pe({inputs:{x:a},backend:n,attrs:{shape:[c.batchSize,l/c.batchSize]}});p.push(d),p.push(h);let f=[c.batchSize,c.outerSize,l/c.batchSize,c.sliceSize];if(n.shouldExecuteOnCPU([s,a])||s.dtype==="string"){let y=n.bufferSync(h),v=n.bufferSync(d),x=yQ(v,y,f);return p.forEach(k=>n.disposeIntermediateTensorInfo(k)),n.makeTensorInfo(c.outputShape,x.dtype,x.values)}let g=new bse(d.shape,f),m=n.runWebGLProgram(g,[d,h],d.dtype);p.push(m);let b=pe({inputs:{x:m},backend:n,attrs:{shape:c.outputShape}});return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),b}var vse={kernelName:_c,backendName:"webgl",kernelFunc:wD},xse="return float(a > b);",wse=` return vec4(greaterThan(a, b)); `,Ise=mn({opSnippet:xse,packedOpSnippet:wse,cpuKernelImpl:vQ,dtype:"bool"}),kse={kernelName:Ac,backendName:"webgl",kernelFunc:Ise},Sse="return float(a >= b);",Cse=` return vec4(greaterThanEqual(a, b)); `,Tse=mn({opSnippet:Sse,packedOpSnippet:Cse,dtype:"bool",cpuKernelImpl:xQ}),Nse={kernelName:ri,backendName:"webgl",kernelFunc:Tse};function _se(e){let{inputs:t,backend:n}=e,{input:r}=t;return xD(r,!0,n)}var Ese={kernelName:Gf,backendName:"webgl",kernelFunc:_se},Ase="return float(!isnan(x) && !isinf(x));",Dse=Ze({opSnippet:Ase,dtype:"bool"}),$se={kernelName:ai,backendName:"webgl",kernelFunc:Dse},Fse="return float(isinf(x));",Rse=Ze({opSnippet:Fse,dtype:"bool"}),Pse={kernelName:oi,backendName:"webgl",kernelFunc:Rse},Ose="return float(isnan(x));",Mse=Ze({opSnippet:Ose,dtype:"bool"}),Lse={kernelName:ii,backendName:"webgl",kernelFunc:Mse},Bse="return float(a < b);",zse=` return vec4(lessThan(a, b)); `,Wse=mn({opSnippet:Bse,packedOpSnippet:zse,cpuKernelImpl:wQ,dtype:"bool"}),Vse={kernelName:Dc,backendName:"webgl",kernelFunc:Wse},Use="return float(a <= b);",Gse=` return vec4(lessThanEqual(a, b)); `,Hse=mn({opSnippet:Use,packedOpSnippet:Gse,cpuKernelImpl:IQ,dtype:"bool"}),jse={kernelName:$c,backendName:"webgl",kernelFunc:Hse};function qse(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:a}=n,o=kQ(r,s,a);return t.makeTensorInfo([o.length],"float32",o)}var Kse={kernelName:Fc,backendName:"webgl",kernelFunc:qse},Xse=Nl+` return x < 0.0 ? 0./0. : log(x); `,Yse=` 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; `,Zse=Ze({opSnippet:Xse,packedOpSnippet:Yse,cpuKernelImpl:SQ}),Jse={kernelName:ci,backendName:"webgl",kernelFunc:Zse},Qse=Nl+` return log(1.0 + x); `,eae=Ze({opSnippet:Qse}),tae={kernelName:li,backendName:"webgl",kernelFunc:eae},nae="return float(a >= 1.0 && b >= 1.0);",rae=` return vec4( vec4(greaterThanEqual(a, vec4(1.0))) * vec4(greaterThanEqual(b, vec4(1.0)))); `,sae=mn({opSnippet:nae,packedOpSnippet:rae,dtype:"bool"}),aae={kernelName:Rc,backendName:"webgl",kernelFunc:sae},oae="return float(!(x >= 1.0));",iae=Ze({opSnippet:oae}),uae={kernelName:Pc,backendName:"webgl",kernelFunc:iae},cae="return float(a >= 1.0 || b >= 1.0);",lae=` return min( vec4(greaterThanEqual(a, vec4(1.0))) + vec4(greaterThanEqual(b, vec4(1.0))), vec4(1.0)); `,dae=mn({opSnippet:cae,packedOpSnippet:lae,dtype:"bool"}),pae={kernelName:Oc,backendName:"webgl",kernelFunc:dae},hae=class{constructor(e,t,n,r,s){this.variableNames=["x"],this.outputShape=[];let a=t,o=e[3]-1;this.outputShape=e;let i,u=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${u})`:s===1?i=`1.0/(${u})`:i=`exp(log(${u}) * float(-${s}));`,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 = -${a}; j <= ${a}; j++) { int idx = d + j; if (idx >= 0 && idx <= ${o}) { float z = getX(b, r, c, idx); sum += z * z; } } float val = x * ${i}; setOutput(val); } `}},fae=class{constructor(e,t,n,r,s){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let a=t,o=e[3]-1;this.outputShape=e;let i,u=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${u})`:s===1?i=`1.0/(${u})`:i=`exp(log(${u}) * float(-${s}));`,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 - ${a}; 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 = - ${a}; j <= ${a}; j++) { ivec2 idx = depth + j; bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0)); bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${o})); bool depthInRange = aboveLowerBound.x && belowUpperBound.x; bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y; if(depthInRange || depthPlusOneInRange){ vec4 z = vec4(0.); vec4 xFragAtCurrentDepth; z.xz = cache.xy; if(depthPlusOneInRange && hasNextCol){ xFragAtCurrentDepth = idx.y != d ? getX(b, r, c, idx.y) : xFragAtOutputCoords; z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y)); if(hasNextRow){ z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y)); } } cache.xy = z.yw; sum += z * z; } } vec4 result = xAtOutputCoords * ${i}; setOutput(result); } `}},mae=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:a,bias:o,alpha:i,beta:u}=r,c=G().getBool("WEBGL_PACK_NORMALIZATION")?new fae(s.shape,a,o,i,u):new hae(s.shape,a,o,i,u);return n.runWebGLProgram(c,[s],s.dtype)},gae={kernelName:di,backendName:"webgl",kernelFunc:mae},bae=class{constructor(e,t,n,r,s){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=r,this.beta=s,this.userCode=` void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int r = coords[1]; int c = coords[2]; float result = 0.0; for (int d = 0; d < ${this.depth}; ++d) { int depthBegin = int(max(0.0, float(d - ${t}))); int depthEnd = int(min(float(${this.depth}), float(d + ${t} + 1))); const int MIN_DEPTH_BEGIN = 0; const int MAX_DEPTH_END = ${this.depth}; float norm = 0.0; for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) { if (k < depthBegin){ continue; } else if (k >= depthBegin && k < depthEnd) { norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k); } else { break; } } norm = float(${r}) * norm + float(${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(${r}) * float(${s}) * getInputImage(b, r, c, k) * getOutputImage(b, r, c, d) / norm; if (k == d) { dyi += pow(norm, -1.0 * ${s}); } if (k == coords[3]) { dyi *= getDy(b, r, c, d); result += dyi; } } else { break; } } } setOutput(result); } `}},yae=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s,y:a,dy:o}=t,{depthRadius:i,bias:u,alpha:c,beta:l}=r,p=new bae(s.shape,i,u,c,l);return n.runWebGLProgram(p,[s,a,o],s.dtype)},vae={kernelName:Mc,backendName:"webgl",kernelFunc:yae};function xae(e,t,n,r){let s=w.sizeFromShape(t),o=w.sizeFromShape(e.shape)/s,i=pe({inputs:{x:e},attrs:{shape:[o,s]},backend:r}),u=ru(i,e.dtype,"max",r),c=pe({inputs:{x:u},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(u),c}function ID(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reductionIndices:a,keepDims:o}=r,i=s.shape.length,u=w.parseAxisParam(a,s.shape),c=u,l=T.getAxesPermutation(c,i),p=l!=null,d=n.shouldExecuteOnCPU([s]),h=s;if(p){if(d){let v=n.texData.get(h.dataId).values,x=new Array(i);for(let N=0;N`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${c}'`);let l=T.computePool2DInfo(s.shape,a,o,c,i,u);if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))return sr({inputs:{x:s},backend:n});let p=new Rd(l,"max",!1);return n.runWebGLProgram(p,[s],s.dtype)}var Nae={kernelName:fi,backendName:"webgl",kernelFunc:Tae};function _ae(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dataFormat:u,dimRoundingMode:c}=r,l=[1,1,1],p=T.computePool3DInfo(s.shape,a,o,l,i,c,u),d=new v0(p,"max",!1);return n.runWebGLProgram(d,[s],s.dtype)}var Eae={kernelName:Lc,backendName:"webgl",kernelFunc:_ae},Aae=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,r=e.dilationHeight,s=e.effectiveFilterHeight,a=e.effectiveFilterWidth,o=s-1-e.padInfo.top,i=a-1-e.padInfo.left,u=s*a-1;this.userCode=` const ivec2 pads = ivec2(${o}, ${i}); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 dyRCCorner = coords.yz - pads; int dyRCorner = dyRCCorner.x; int dyCCorner = dyRCCorner.y; // Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d). // ? = to be determined. : = across all values in that axis. float dotProd = 0.0; for (int wR = 0; wR < ${s}; wR += ${r}) { 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 < ${a}; 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 = ${u} - int(getMaxPos(b, idyR, idyC, d)); // Get the current value, check it against the value from the // position matrix. int curPosValue = wR * ${a} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } setOutput(dotProd); } `}},Dae=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,r=e.strideWidth,s=e.dilationDepth,a=e.dilationHeight,o=e.dilationWidth,i=e.effectiveFilterDepth,u=e.effectiveFilterHeight,c=e.effectiveFilterWidth,l=i-1-e.padInfo.front,p=u-1-e.padInfo.top,d=c-1-e.padInfo.left,h=i*u*c-1;this.userCode=` const ivec3 pads = ivec3(${l}, ${p}, ${d}); 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 < ${i}; wD += ${s}) { 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 < ${u}; wR += ${a}) { 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 < ${c}; wC += ${o}) { 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(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 * ${u} * ${c} + wR * ${c} + wC; float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0); dotProd += dyValue * mask; } } } setOutput(dotProd); } `}};function $ae(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a,{filterSize:i,strides:u,pad:c,dimRoundingMode:l}=r,p=[1,1,1],d=T.computePool3DInfo(o.shape,i,u,p,c,l),h=new v0(d,"max",!0),f=n.runWebGLProgram(h,[o],o.dtype),g=new Dae(d),m=n.runWebGLProgram(g,[s,f],o.dtype);return n.disposeIntermediateTensorInfo(f),m}var Fae={kernelName:qd,backendName:"webgl",kernelFunc:$ae};function Rae(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a,output:o}=t,i=a;wl([a,o],"maxPoolGrad");let{filterSize:u,strides:c,pad:l,dimRoundingMode:p}=r,d=T.computePool2DInfo(i.shape,u,c,1,l,p),h=!0,f=new Rd(d,"max",h),g=n.runWebGLProgram(f,[i],i.dtype),m=new Aae(d),b=n.runWebGLProgram(m,[s,g],i.dtype);return n.disposeIntermediateTensorInfo(g),b}var Pae={kernelName:jd,backendName:"webgl",kernelFunc:Rae};function Oae(e,t,n,r){let s=new Rd(n,"max",!1),a=r.runWebGLProgram(s,[e],"float32");s=new Rd(n,"max",!0,!0,t);let o=r.runWebGLProgram(s,[e],"float32");return[a,o]}var Mae={kernelName:Kd,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:a,pad:o,includeBatchInIndex:i}=t,u=n;w.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let c=[1,1];w.assert(T.eitherStridesOrDilationsAreOne(a,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${c}'`);let l=T.computePool2DInfo(r.shape,s,a,c,o),[p,d]=Oae(r,i,l,u);return[p,d]}};function Lae(e,t,n,r){let s=w.sizeFromShape(t),o=w.sizeFromShape(e.shape)/s,i=pe({inputs:{x:e},attrs:{shape:[o,s]},backend:r}),u=ru(i,"float32","mean",r),c=pe({inputs:{x:u},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(u),c}var Bae={kernelName:mi,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:s,axis:a}=t,o=n,i=r.shape.length,u=w.parseAxisParam(a,r.shape),c=u,l=T.getAxesPermutation(c,i),p=l!=null,d=o.shouldExecuteOnCPU([r]),h=[],f=r;if(p){if(d){let x=o.texData.get(f.dataId).values,k=new Array(i);for(let E=0;Ec[0]+e[l]+c[1]);let r=e.length,s=ht(r),a=t.map(c=>c[0]).join(","),o=t.map((c,l)=>c[0]+e[l]).join(","),i=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),u=n==="reflect"?0:1;if(r===1){this.userCode=` int start = ${a}; int end = ${o}; void main() { int outC = getOutputCoords(); if (outC < start) { outC = start * 2 - outC - ${u}; } else if(outC >= end) { outC = (end - 1) * 2 - outC + ${u}; } setOutput(getX(outC - start)); } `;return}this.userCode=` ${s} start = ${s}(${a}); ${s} end = ${s}(${o}); void main() { ${s} outC = getOutputCoords(); for (int i = 0; i < ${r}; i++) { if (outC[i] < start[i]) { outC[i] = start[i] * 2 - outC[i] - ${u}; } else if(outC[i] >= end[i]) { outC[i] = (end[i] - 1) * 2 - outC[i] + ${u}; } } ${s} coords = outC - start; setOutput(getX(${i})); } `}},qae=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,f)=>h[0]+e[f]+h[1]);let r=e.length,s=ht(r),a=t.map(h=>h[0]).join(","),o=t.map((h,f)=>h[0]+e[f]).join(","),i=Cn("rc",r),u=Cn("source",r),c=`${i[r-1]} < ${this.outputShape[r-1]}`,l=r===1?"source":`vec2(${u.slice(-2).join()})`,p=n==="reflect"?0:1,d="";if(r===1){let h=` ${s} source = rc; if (source < start) { source = start * 2 - source - ${p}; } else if (source >= end) { source = (end - 1) * 2 - source + ${p}; } source -= start; `;d=` ${s} rc = outputLoc; ${h} result[0] = getChannel(getX(${u.join()}), ${l}); ${i[r-1]} += 1; if(${c}) { ${h} result[1] = getChannel(getX(${u.join()}), ${l}); } `}else{let h=` ${s} source = rc; ${s} lt = ${s}(lessThan(source, start)); ${s} gte = ${s}(greaterThanEqual(source, end)); ${s} orig = 1 - (lt + gte); source = orig * source + lt * (start * 2 - source - ${p}) + gte * ((end - 1) * 2 - source + ${p}); source -= start; `;d=` ${s} rc = outputLoc; ${h} result[0] = getChannel(getX(${u.join()}), ${l}); ${i[r-1]} += 1; if(${c}) { ${h} result[1] = getChannel(getX(${u.join()}), ${l}); } rc = outputLoc; ${i[r-2]} += 1; if(${i[r-2]} < ${this.outputShape[r-2]}) { ${h} result[2] = getChannel(getX(${u.join()}), ${l}); ${i[r-1]} += 1; if(${c}) { ${h} result[3] = getChannel(getX(${u.join()}), ${l}); } } `}this.userCode=` const ${s} start = ${s}(${a}); const ${s} end = ${s}(${o}); void main() { ${s} outputLoc = getOutputCoords(); vec4 result = vec4(0.); ${d} setOutput(result); } `}},Kae=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:s,mode:a}=n,o=G().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qae(r.shape,s,a):new jae(r.shape,s,a);return t.runWebGLProgram(o,[r],r.dtype)},Xae={kernelName:yi,backendName:"webgl",kernelFunc:Kae},Yae=`if (b == 0.0) return NAN; return mod(a, b);`,Zae=` vec4 result = mod(a, b); bvec4 isNaN = equal(b, vec4(0.0)); `+nu+` return result; `,Jae=mn({opSnippet:Yae,packedOpSnippet:Zae}),Qae={kernelName:vi,backendName:"webgl",kernelFunc:Jae},eoe=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})); } `}},toe=` if (a == b) { return 1.0; }; return a / b;`,noe=` // 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; `,kD=mn({opSnippet:toe,packedOpSnippet:noe,checkOutOfBounds:!0}),roe={kernelName:Xo,backendName:"webgl",kernelFunc:kD},H1="return a - b;",SD=mn({opSnippet:H1,packedOpSnippet:H1,supportsComplex:!0,cpuKernelImpl:KQ}),soe={kernelName:Gi,backendName:"webgl",kernelFunc:SD};function CD(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:a}=r,o=w.parseAxisParam([a],s.shape),i=ID({inputs:{x:s},backend:n,attrs:{reductionIndices:o,keepDims:!1}}),u=T.expandShapeToKeepDim(i.shape,o),c=pe({inputs:{x:i},backend:n,attrs:{shape:u}}),l=SD({inputs:{a:s,b:c},backend:n}),p=vD({inputs:{x:l},backend:n}),d=ng({inputs:{x:p},backend:n,attrs:{axis:o,keepDims:!1}}),h=pe({inputs:{x:d},backend:n,attrs:{shape:u}}),f=kD({inputs:{a:p,b:h},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),f}var aoe={kernelName:Vi,backendName:"webgl",kernelFunc:CD};function ooe(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:a,seed:o,normalized:i}=r,u=i?s:CD({inputs:{logits:s},backend:n,attrs:{dim:s.shape.length-1}}),c=u.shape[0],l=u.shape[1],p=new eoe(c,l,a),d=[[o]],h=n.runWebGLProgram(p,[u],"int32",d);return i||n.disposeIntermediateTensorInfo(u),h}var ioe={kernelName:Bc,backendName:"webgl",kernelFunc:ooe},uoe=Or+` return -x; `,coe=` 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 loe(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let a=n.texData.get(r.dataId),[o,i]=EQ(a.values,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,o)}let s;return G().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new oa(r.shape,coe):s=new is(r.shape,uoe),n.runWebGLProgram(s,[r],r.dtype)}var doe={kernelName:zc,backendName:"webgl",kernelFunc:loe},poe=gs.nonMaxSuppressionV3Impl;function hoe(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:u}=r,c=n.readSync(s.dataId),l=n.readSync(a.dataId),{selectedIndices:p}=poe(c,l,o,i,u);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}var foe={kernelName:Vc,backendName:"webgl",kernelFunc:hoe},moe=gs.nonMaxSuppressionV4Impl;function goe(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:u,padToMaxOutputSize:c}=r,l=n.readSync(s.dataId),p=n.readSync(a.dataId),{selectedIndices:d,validOutputs:h}=moe(l,p,o,i,u,c);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var boe={kernelName:Uc,backendName:"webgl",kernelFunc:goe},yoe=gs.nonMaxSuppressionV5Impl;function voe(e){T.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:u,softNmsSigma:c}=r,l=n.readSync(s.dataId),p=n.readSync(a.dataId),d=o,h=i,f=u,g=c,{selectedIndices:m,selectedScores:b}=yoe(l,p,d,h,f,g);return[n.makeTensorInfo([m.length],"int32",new Int32Array(m)),n.makeTensorInfo([b.length],"float32",new Float32Array(b))]}var xoe={kernelName:Gc,backendName:"webgl",kernelFunc:voe},woe=class{constructor(e,t,n,r){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=` void main() { ivec2 coords = getOutputCoords(); int index = round(getIndices(coords.x)); setOutput(mix(float(${r}), float(${n}), float(index == coords.y))); } `}},Ioe=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{dtype:a,depth:o,onValue:i,offValue:u}=r,c=w.sizeFromShape(s.shape),l=new woe(c,o,i,u),p=pe({inputs:{x:s},backend:n,attrs:{shape:[c]}}),d=n.runWebGLProgram(l,[p],a);n.disposeIntermediateTensorInfo(p);let h=[...s.shape,o],f=pe({inputs:{x:d},backend:n,attrs:{shape:h}});return n.disposeIntermediateTensorInfo(d),f},koe={kernelName:wi,backendName:"webgl",kernelFunc:Ioe};function Df(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let s=Mp({inputs:{input:r},backend:n}),a=Df({inputs:{x:s},backend:n}),o=rg({inputs:{input:r},backend:n}),i=Df({inputs:{x:o},backend:n}),u=Oa({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),u}else return Lp({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var Soe={kernelName:cl,backendName:"webgl",kernelFunc:Df};function TD(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(r.dtype==="complex64"){let s=Mp({inputs:{input:r},backend:n}),a=TD({inputs:{x:s},backend:n}),o=rg({inputs:{input:r},backend:n}),i=Df({inputs:{x:o},backend:n}),u=Oa({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),u}else return Lp({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var Coe={kernelName:Hc,backendName:"webgl",kernelFunc:TD};function Toe(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return kx({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let a=t[0].shape,o=t[0].dtype;t.forEach(l=>{w.assertShapesMatch(a,l.shape,"All tensors passed to stack must have matching shapes"),w.assert(o===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],u=t.map(l=>{let p=kx({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),c=dD({inputs:u,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeIntermediateTensorInfo(l)),c}var Noe={kernelName:jc,backendName:"webgl",kernelFunc:Toe},_oe=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((u,c)=>u[0]+e[c]+u[1]);let r=e.length,s=ht(r),a=t.map(u=>u[0]).join(","),o=t.map((u,c)=>u[0]+e[c]).join(","),i=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r);if(r===1){this.userCode=` int start = ${a}; int end = ${o}; void main() { int outC = getOutputCoords(); if (outC < start || outC >= end) { setOutput(value); } else { setOutput(getX(outC - start)); } } `;return}this.userCode=` ${s} start = ${s}(${a}); ${s} end = ${s}(${o}); void main() { ${s} outC = getOutputCoords(); if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) { setOutput(value); } else { ${s} coords = outC - start; setOutput(getX(${i})); } } `}},Eoe=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((f,g)=>f[0]+e[g]+f[1]);let r=e.length,s=ht(r),a=t.map(f=>f[0]).join(","),o=t.map((f,g)=>f[0]+e[g]).join(","),i=Cn("rc",r),u=Cn("source",r),c=`${i[r-1]} < ${this.outputShape[r-1]}`,l=r===1?"source":`vec2(${u.slice(-2).join()})`,p=[`${s} rc = outputLoc;`,`${i[r-1]} += 1; if(${c}) { `,r===1?"":`} rc = outputLoc; ${i[r-2]} += 1; if(${i[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${i[r-1]} += 1; if(${c}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let f=0,g=r===1?2:4;f{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:a,constantValue:o}=r;if(w.sizeFromShape(s.shape)===0){let c=a.map((l,p)=>l[0]+s.shape[p]+l[1]);return Lp({backend:n,attrs:{shape:c,value:o,dtype:s.dtype}})}let i=G().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Eoe(s.shape,a,o):new _oe(s.shape,a,o),u=[[o]];return n.runWebGLProgram(i,[s],s.dtype,u)},Aoe={kernelName:Ii,backendName:"webgl",kernelFunc:ND},Doe=` 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); `,$oe=` // isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise. vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1))); vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1); vec4 result = multiplier * pow(abs(a), b); // Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS bvec4 isExpZero = equal(b, vec4(0.0)); result.r = isExpZero.r ? 1.0 : result.r; result.g = isExpZero.g ? 1.0 : result.g; result.b = isExpZero.b ? 1.0 : result.b; result.a = isExpZero.a ? 1.0 : result.a; bvec4 isNaN1 = lessThan(a, vec4(0.0)); bvec4 isNaN2 = lessThan(floor(b), b); bvec4 isNaN = bvec4(isNaN1.x && isNaN2.x, isNaN1.y && isNaN2.y, isNaN1.z && isNaN2.z, isNaN1.w && isNaN2.w); `+nu+` return result; `,Foe=mn({opSnippet:Doe,packedOpSnippet:$oe}),Roe={kernelName:ki,backendName:"webgl",kernelFunc:Foe};function Poe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,u=[],c=w.parseAxisParam(a,s.shape),l=c,p=T.getAxesPermutation(l,i),d=s;p!=null&&(d=Tn({inputs:{x:s},backend:n,attrs:{perm:p}}),l=T.getInnerMostAxes(l.length,i),u.push(d)),T.assertAxesAreInnerMostDims("prod",l,i);let h;if(n.shouldExecuteOnCPU([d])){let f=n.texData.get(d.dataId).values,{outVals:g,outShape:m,outDtype:b}=DQ(d.shape,d.dtype,f,l);h=n.makeTensorInfo(m,b,g)}else{let[f,g]=T.computeOutAndReduceShapes(d.shape,l),m=w.sizeFromShape(g),b=pe({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),y=Zf(s.dtype),v=ru(b,y,"prod",n);h=pe({inputs:{x:v},backend:n,attrs:{shape:f}}),u.push(b),u.push(v)}if(o){u.push(h);let f=T.expandShapeToKeepDim(h.shape,c);h=pe({inputs:{x:h},backend:n,attrs:{shape:f}})}return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),h}var Ooe={kernelName:Ci,backendName:"webgl",kernelFunc:Poe};function Moe(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:s,paramsDenseValues:a,indices:o}=t,{outputRaggedRank:i}=r,u=s.map(b=>n.readSync(b.dataId)),c=s.map(b=>b.shape),l=n.readSync(a.dataId),p=n.readSync(o.dataId),[d,h,f]=$Q(u,c,l,a.shape,a.dtype,p,o.shape,i),g=d.map(b=>n.makeTensorInfo([b.length],"int32",b)),m=n.makeTensorInfo(f,a.dtype,h);return g.concat([m])}var Loe={kernelName:jf,backendName:"webgl",kernelFunc:Moe};function Boe(e){let{inputs:t,backend:n}=e,{starts:r,limits:s,deltas:a}=t,o=n.readSync(r.dataId),i=n.readSync(s.dataId),u=n.readSync(a.dataId),[c,l]=FQ(o,r.shape,r.dtype,i,s.shape,u,a.shape),p=n.makeTensorInfo([c.length],"int32",c),d=n.makeTensorInfo([l.length],r.dtype,l);return[p,d]}var zoe={kernelName:qf,backendName:"webgl",kernelFunc:Boe};function Woe(e){let{inputs:t,backend:n,attrs:r}=e,{shape:s,values:a,defaultValue:o,rowPartitionTensors:i}=t,{rowPartitionTypes:u}=r,c=n.readSync(s.dataId),l=n.readSync(a.dataId),p=n.readSync(o.dataId),d=i.map(m=>n.readSync(m.dataId)),h=i.map(m=>m.shape),[f,g]=RQ(c,s.shape,l,a.shape,a.dtype,p,o.shape,d,h,u);return n.makeTensorInfo(f,a.dtype,g)}var Voe={kernelName:Kf,backendName:"webgl",kernelFunc:Woe},_D=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=PQ(r,s,a,o);return t.makeTensorInfo([i.length],o,i)},Uoe={kernelName:Xd,backendName:"webgl",kernelFunc:_D},Goe="return 1.0 / x;",Hoe=Ze({opSnippet:Goe}),joe={kernelName:Ti,backendName:"webgl",kernelFunc:Hoe},qoe=Or+` return (x < 0.0) ? 0.0 : x; `,Koe=` 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; `,Xoe=Ze({opSnippet:qoe,packedOpSnippet:Koe}),Yoe={kernelName:Ni,backendName:"webgl",kernelFunc:Xoe},Zoe=Or+` return (x < 0.0) ? 0.0 : min(6.0, x); `,Joe=` 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; `,Qoe=Ze({opSnippet:Zoe,packedOpSnippet:Joe}),eie={kernelName:Ai,backendName:"webgl",kernelFunc:Qoe},tie=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[a,o,i,u]=e;this.outputShape=[a,t,n,u];let c=[r&&t>1?o-1:o,r&&n>1?i-1:i],l=[r&&t>1?t-1:t,r&&n>1?n-1:n],p;s?p="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":p="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); const vec2 inputShapeRC = vec2(${o}.0, ${i}.0); void main() { ivec4 coords = getOutputCoords(); int b = coords[0]; int d = coords[3]; ivec2 yRC = coords.yz; // Fractional source index. vec2 sourceFracIndexRC = ${p}; // 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); } `}},nie=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,o,i,u]=e;this.outputShape=[a,t,n,u];let c=[r&&t>1?o-1:o,r&&n>1?i-1:i],l=[r&&t>1?t-1:t,r&&n>1?n-1:n],p;s?p="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":p="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, ${c[1]/l[1]}); const vec3 inputShapeRC = vec3(${o}.0, ${i}.0, ${i}.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 = ${p}; // 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 < ${u-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 rie(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r,[u,c]=i,l=G().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new nie(s.shape,u,c,a,o):new tie(s.shape,u,c,a,o);return n.runWebGLProgram(l,[s],"float32")}var sie={kernelName:Ei,backendName:"webgl",kernelFunc:rie},aie=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,s]=t,[,a,o]=e,i=[n&&a>1?r-1:r,n&&o>1?s-1:s],u=[n&&a>1?a-1:a,n&&o>1?o-1:o],c=i[0]/u[0],l=i[1]/u[1],p=1/c,d=1/l,h=Math.ceil(p)*2+2,f=Math.ceil(d)*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(${c}); const float widthScale = float(${l}); const float invHeightScale = float(${p}); const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${f}); // 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 >= ${a}) { 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 >= ${o}) { continue; } float dxR = float(dyR) * heightScale; int topDxRIndex = int(floor(dxR)); int bottomDxRIndex = int(min(ceil(dxR), ${r-1}.0)); float dxRLerp = dxR - float(topDxRIndex); float inverseDxRLerp = 1.0 - dxRLerp; float dxC = float(dyC) * widthScale; int leftDxCIndex = int(floor(dxC)); int rightDxCIndex = int(min(ceil(dxC), ${s-1}.0)); float dxCLerp = dxC - float(leftDxCIndex); float inverseDxCLerp = 1.0 - dxCLerp; if (r == topDxRIndex && c == leftDxCIndex) { // topLeft accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp; } if (r == topDxRIndex && c == rightDxCIndex) { // topRight accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp; } if (r == bottomDxRIndex && c == leftDxCIndex) { // bottomLeft accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp; } if (r == bottomDxRIndex && c == rightDxCIndex) { // bottomRight accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp; } } } // End loop over dy setOutput(accumulator); } `}};function oie(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=new aie(a.shape,s.shape,o);return n.runWebGLProgram(i,[a],a.dtype)}var iie={kernelName:Xc,backendName:"webgl",kernelFunc:oie},uie=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[a,o,i,u]=e;this.outputShape=[a,t,n,u];let c=[r&&t>1?o-1:o,r&&n>1?i-1:i],l=[r&&t>1?t-1:t,r&&n>1?n-1:n],p=r?"0.5":"0.0",d;s?d="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec2 effectiveInputOverOutputRatioRC = vec2( ${c[0]/l[0]}, ${c[1]/l[1]}); const vec2 inputShapeRC = vec2(${o}.0, ${i}.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 coordinators of nearest neighbor point. ivec2 sourceNearestRC = ivec2( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${p}))); float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d); setOutput(newValue); } `}},cie=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,o,i,u]=e;this.outputShape=[a,t,n,u];let c=[r&&t>1?o-1:o,r&&n>1?i-1:i],l=[r&&t>1?t-1:t,r&&n>1?n-1:n],p=r?"0.5":"0.0",d;s?d="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=` const vec3 effectiveInputOverOutputRatioRC = vec3( ${c[0]/l[0]}, ${c[1]/l[1]}, ${c[1]/l[1]}); const vec3 inputShapeRC = vec3(${o}.0, ${i}.0, ${i}.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 coordinators of nearest neighbor point. ivec3 sourceNearestRC = ivec3( min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${p}))); // Should we calculate next column and row elements in 2x2 packed cell. bool hasNextCol = d < ${u-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 lie(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r,[u,c]=i,l=G().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new cie(s.shape,u,c,a,o):new uie(s.shape,u,c,a,o);return n.runWebGLProgram(l,[s],s.dtype)}var die={kernelName:_i,backendName:"webgl",kernelFunc:lie},pie=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,r,s]=t,[,a,o]=e,i=[n&&a>1?r-1:r,n&&o>1?s-1:s],u=[n&&a>1?a-1:a,n&&o>1?o-1:o],c=i[0]/u[0],l=i[1]/u[1],p=1/c,d=1/l,h=Math.ceil(p)*2+2,f=Math.ceil(d)*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(${c}); const float widthScale = float(${l}); const float invHeightScale = float(${p}); const float invWidthScale = float(${d}); const int winHeight = int(${h}); const int winWidth = int(${f}); // 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 >= ${a}) { 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 >= ${o}) { continue; } float sourceFracRow = float(${i[0]}) * (float(dyR) / float(${u[0]})); float sourceFracCol = float(${i[1]}) * (float(dyC) / float(${u[1]})); int sourceNearestRow = int(min( float(int(${r}) - 1), ${n} ? float(round(sourceFracRow)) : float(floor(sourceFracRow)))); int sourceNearestCol = int(min( float(int(${s}) - 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 hie(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=new pie(a.shape,s.shape,o);return n.runWebGLProgram(i,[a],a.dtype)}var fie={kernelName:Kc,backendName:"webgl",kernelFunc:hie},mie=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 r=o=>t.indexOf(o)!==-1&&e[o]!==1?`${e[o]} - coords[${o}] - 1`:`coords[${o}]`,s=e.map((o,i)=>r(i)).join(","),a=ht(n);this.userCode=` void main() { ${a} coords = getOutputCoords(); setOutput(getX(${s})); } `}},gie=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let r=Cn("rc",n),s=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,a=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,o=ht(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(${s}){ result.g = getChannel(getX(${e[0]} - (rc + 1) - 1), ${e[0]} - (rc + 1) - 1); } setOutput(result); } `:this.userCode=` void main() { ${o} rc = getOutputCoords(); vec4 result = vec4(0.); result.r = ${i(r.slice())}; if(${s}){ result.g = ${u(r.slice())}; } if(${a}) { result.b = ${c(r.slice())}; if(${s}) { result.a = ${l(r.slice())}; } } setOutput(result); } `;function i(h){return p(h)}function u(h){return h[n-1]="("+h[n-1]+" + 1)",p(h)}function c(h){return h[n-2]="("+h[n-2]+" + 1)",p(h)}function l(h){return h[n-1]="("+h[n-1]+" + 1)",h[n-2]="("+h[n-2]+" + 1)",p(h)}function p(h){let f=e.map((b,y)=>d(y,h)),g=f.join(","),m=f.slice(-2).join(",");return`getChannel(getX(${g}), vec2(${m}))`}function d(h,f){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${f[h]} - 1`:`${f[h]}`}}};function bie(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:a}=r,o=s.shape.length,i=w.parseAxisParam(a,s.shape);if(o===0)return sr({inputs:{x:s},backend:n});let u=G().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new gie(s.shape,i):new mie(s.shape,i);return n.runWebGLProgram(u,[s],s.dtype)}var yie={kernelName:Di,backendName:"webgl",kernelFunc:bie},vie=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=e[1],r=e[2];this.outputShape=e;let s="";typeof t=="number"?s=`float outputValue = ${t.toFixed(2)};`:s=` 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])); ${s} if(coordX >= 0 && coordX < ${r} && coordY >= 0 && coordY < ${n}) { outputValue = getImage(coords[0], coordY, coordX, coords[3]); } setOutput(outputValue); } `}},xie={kernelName:ll,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:a,center:o}=t,i=n,u=new vie(r.shape,a),[c,l]=T.getImageCenter(o,r.shape[1],r.shape[2]),p=[[c,l,Math.sin(s),Math.cos(s)]];return i.runWebGLProgram(u,[r],r.dtype,p)}},wie=` // 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; } } `,Iie=Ze({opSnippet:wie}),kie={kernelName:$i,backendName:"webgl",kernelFunc:Iie},Sie="return inversesqrt(x);",Cie=Ze({opSnippet:Sie,cpuKernelImpl:OQ}),Tie={kernelName:Fi,backendName:"webgl",kernelFunc:Cie},x0=class{constructor(e,t,n,r,s,a,o=!0,i=!1){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let u=ht(s.length),c=ht(a.length),l="";n===1?l="i":n===2&&(l="i, j");let p=`getIndices(${l})`,d="";r===1?d="i":r===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,f="";i&&(f="coords[0], coords[1]");let g=`getDefaultValue(${f})`,m=t>1?"strides[j]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { ${c} 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 * ${m}; } if (flattenedIndex == coords[0]) { sum += ${h}; found = true; } } setOutput(mix(${g}, sum, float(found))); } `}},Nie=class{constructor(e,t,n,r,s,a,o=!0,i=!1){this.variableNames=["updates","indices","defaultValue"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=a;let u=ht(s.length),c=ht(a.length),l="";n===1?l="i":n===2&&(l="i, j");let p=`getIndices(${l})`,d="";r===1?d="i":r===2&&(d="i, coords[1]");let h=`getUpdates(${d})`,f="";i&&(f="coords[0], coords[1]");let g=`getDefaultValue(${f})`,m=t>1?"strides[j]":"strides",b=t>1?"strides[j + 1]":"strides";this.userCode=` ${u} strides = ${u}(${s}); void main() { ${c} coords = getOutputCoords(); vec4 sum = vec4(0.); vec4 found = vec4(0.); for (int i = 0; i < ${e}; i+=2) { ivec2 flattenedIndex = ivec2(0); for (int j = 0; j < ${t}; j+=2) { ivec4 index = round(${p}); flattenedIndex += index.xz * ${m}; if (j + 1 < ${t}) { flattenedIndex += index.yw * ${b}; } } if (flattenedIndex[0] == coords[0] || flattenedIndex[1] == coords[0] || flattenedIndex[0] == coords[0] + 1 || flattenedIndex[1] == coords[0] + 1) { vec4 updVals = ${h}; if (flattenedIndex[0] == coords[0]) { sum.xy += updVals.xy; found.xy = vec2(1.); } else if (flattenedIndex[0] == coords[0] + 1) { sum.zw += updVals.xy; found.zw = vec2(1.); } if (flattenedIndex[1] == coords[0]) { sum.xy += updVals.zw; found.xy = vec2(1.); } else if (flattenedIndex[1] == coords[0] + 1) { sum.zw += updVals.zw; found.zw = vec2(1.); } } } setOutput(mix(${g}, sum, found)); } `}};function _ie(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:a}=t,{shape:o}=r,{sliceRank:i,numUpdates:u,sliceSize:c,strides:l,outputSize:p}=T.calculateShapes(a,s,o),d=[p/c,c];if(p===0)return n.makeTensorInfo(o,s.dtype);let h=pe({inputs:{x:s},backend:n,attrs:{shape:[u,i]}}),f=pe({inputs:{x:a},backend:n,attrs:{shape:[u,c]}}),g=n.makeTensorInfo([],"float32",new Float32Array([0])),m;G().getBool("WEBGL_PACK")?m=new Nie(u,i,h.shape.length,f.shape.length,l,d):m=new x0(u,i,h.shape.length,f.shape.length,l,d);let b=n.runWebGLProgram(m,[f,h,g],f.dtype),y=pe({inputs:{x:b},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(g),y}var Eie={kernelName:Yc,backendName:"webgl",kernelFunc:_ie},Aie=class{constructor(e,t,n,r){this.variableNames=["sortedSequence","values"],this.customUniforms=[{name:"numInputs",type:"int"}],this.outputShape=[e,n];let s="while (left < right) {",a=`for (int i = 0; i < ${Math.ceil(Math.log2(t+1))}; ++i) { if (left >= right) break;`,o=G().getNumber("WEBGL_VERSION")===2?s:a,i=r==="left"?"<":"<=";this.userCode=` int findBound(int batch, float value) { int left = 0; int right = numInputs; int mid; ${o} mid = (left + right) / 2; if (getSortedSequence(batch, mid) ${i} 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 Die(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:s,values:a}=t,{side:o}=r,i=new Aie(s.shape[0],s.shape[1],a.shape[1],o),u=[[s.shape[1]]];return n.runWebGLProgram(i,[s,a],"int32",u)}var $ie={kernelName:Jc,backendName:"webgl",kernelFunc:Die},Fie=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let r,s;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)s="resRC",r="resRC";else{let o=["resRC.x","resRC.y","resRC.z","resRC.w"],i=[],u=[];for(let c=0;c= 1.0) { setOutput(getA(${s})); } else { setOutput(getB(${s})); } } `}};function Rie(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t,o=new Fie(r.shape.length,s.shape,s.shape.length);return n.runWebGLProgram(o,[r,s,a],fr(s.dtype,a.dtype))}var Pie={kernelName:Qc,backendName:"webgl",kernelFunc:Rie},Oie=` // Stable and Attracting Fixed Point (0, 1) for Normalized Weights. // see: https://arxiv.org/abs/1706.02515 float scaleAlpha = ${T.SELU_SCALEALPHA}; float scale = ${T.SELU_SCALE}; return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0); `,Mie=Ze({opSnippet:Oie}),Lie={kernelName:Ri,backendName:"webgl",kernelFunc:Mie},Bie=Nl+` return 1.0 / (1.0 + exp(-1.0 * x)); `,zie=` 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; `,Wie=Ze({opSnippet:Bie,packedOpSnippet:zie,cpuKernelImpl:LQ}),Vie={kernelName:Li,backendName:"webgl",kernelFunc:Wie},Uie=` if (isnan(x)) { return 0.0; } return sign(x); `,Gie=Ze({opSnippet:Uie}),Hie={kernelName:Mi,backendName:"webgl",kernelFunc:Gie},jie=Nl+` return sin(x); `,qie=` vec4 result = sin(x); bvec4 isNaN = isnan(x); ${nu} return result; `,Kie=Ze({opSnippet:jie,packedOpSnippet:qie}),Xie={kernelName:Pi,backendName:"webgl",kernelFunc:Kie},Yie=` float e2x = exp(x); return (e2x - 1.0 / e2x) / 2.0; `,Zie=Ze({opSnippet:Yie}),Jie={kernelName:Oi,backendName:"webgl",kernelFunc:Zie},Qie=` 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; `,eue=Ze({opSnippet:Qie}),tue={kernelName:Bi,backendName:"webgl",kernelFunc:eue},nue=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r;w.assert(s.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let i=a.reduce((b,y)=>b*y),u=[[0,0]];u.push(...o);for(let b=1+a.length;bn.disposeIntermediateTensorInfo(b)),m},rue={kernelName:tl,backendName:"webgl",kernelFunc:nue};function sue(e){let{inputs:t,backend:n}=e,{indices:r,values:s,denseShape:a,defaultValue:o}=t;if(a.shape.length!==1)throw new Error(`Dense shape must be a vector, saw: ${a.shape}`);if(r.shape.length!==2)throw new Error(`Indices must be a matrix, saw: ${r.shape}`);if(s.shape.length!==1)throw new Error(`Values must be a vector, saw: ${s.shape}`);if(o.shape.length!==0)throw new Error(`Default value must be a scalar, saw: ${o.shape}`);let i=n.readSync(r.dataId),u=n.readSync(s.dataId),c=n.readSync(a.dataId),l=n.readSync(o.dataId)[0],[p,d,h,f,g]=zQ(i,r.shape,r.dtype,u,s.dtype,c,l);return[n.makeTensorInfo(d,r.dtype,p),n.makeTensorInfo([d[0]],s.dtype,h),n.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(m=>Number(m)))),n.makeTensorInfo([g.length],r.dtype,new Int32Array(g))]}var aue={kernelName:Yd,backendName:"webgl",kernelFunc:sue};function oue(e){let{inputs:t,backend:n}=e,{inputIndices:r,inputShape:s,newShape:a}=t;if(r.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${a.shape}`);let o=Array.from(n.readSync(s.dataId)),i=n.readSync(r.dataId),u=Array.from(n.readSync(a.dataId)),[c,l,p]=WQ(i,r.shape,r.dtype,o,u);return[n.makeTensorInfo(l,r.dtype,c),n.makeTensorInfo([p.length],a.dtype,new Int32Array(p))]}var iue={kernelName:rl,backendName:"webgl",kernelFunc:oue};function uue(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:a}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${a.shape}`);let o=n.readSync(r.dataId),i=n.readSync(s.dataId),u=n.readSync(a.dataId),[c,l]=YA(o,r.shape,r.dtype,i,u,!0);return n.makeTensorInfo(l,r.dtype,c)}var cue={kernelName:Zd,backendName:"webgl",kernelFunc:uue};function lue(e){let{inputs:t,backend:n}=e,{data:r,indices:s,segmentIds:a}=t;if(r.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(s.shape.length!==1)throw new Error(`Indices should be a vector but received shape ${s.shape}`);if(a.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape ${a.shape}`);let o=n.readSync(r.dataId),i=n.readSync(s.dataId),u=n.readSync(a.dataId),[c,l]=YA(o,r.shape,r.dtype,i,u);return n.makeTensorInfo(l,r.dtype,c)}var due={kernelName:Jd,backendName:"webgl",kernelFunc:lue};function pue(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:a,defaultValue:o}=t,{outputShape:i}=r,{sliceRank:u,numUpdates:c,sliceSize:l,strides:p,outputSize:d}=T.calculateShapes(a,s,i),h=!1;if(a.dtype==="string"){let b=n.bufferSync(s),y=n.bufferSync(a),v=w.decodeString(n.readSync(o.dataId)[0]),x=MQ(b,y,i,d,l,c,u,p,v,h);return n.makeTensorInfo(i,x.dtype,x.values)}let f=new x0(c,u,s.shape.length,a.shape.length,p,[d,1],h),g=n.runWebGLProgram(f,[a,s,o],a.dtype),m=pe({inputs:{x:g},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(g),m}var hue={kernelName:sl,backendName:"webgl",kernelFunc:pue};function fue(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=r,i=w.parseAxisParam(o,s.shape)[0],u=T.prepareSplitSize(s,a,i),c=s.shape.length,l=new Array(c).fill(0),p=s.shape.slice();return u.map(d=>{let h=[...p];h[i]=d;let f=_l({inputs:{x:s},backend:n,attrs:{begin:l,size:h}});return l[i]+=d,f})}var mue={kernelName:nl,backendName:"webgl",kernelFunc:fue},j1="return sqrt(x);",gue=Ze({opSnippet:j1,packedOpSnippet:j1,cpuKernelImpl:VQ}),bue={kernelName:zi,backendName:"webgl",kernelFunc:gue},yue="return x * x;",vue=Ze({opSnippet:yue}),xue={kernelName:Qd,backendName:"webgl",kernelFunc:vue},q1="return (a - b) * (a - b);",wue=mn({opSnippet:q1,packedOpSnippet:q1}),Iue={kernelName:Ui,backendName:"webgl",kernelFunc:wue};function kue(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");let a=n.readSync(s.dataId),o=T.fromUint8ToStringArray(a),i=UQ(o,"string",r);return n.makeTensorInfo(s.shape,"string",i)}var Sue={kernelName:ep,backendName:"webgl",kernelFunc:kue};function Cue({inputs:e,attrs:t,backend:n}){let{x:r}=e,s=Or+` return x > 0.0 ? 1.0 : float(${t.alpha}); `,a=new is(r.shape,s);return n.runWebGLProgram(a,[r],r.dtype)}var Tue={kernelName:Na,backendName:"webgl",kernelFunc:Cue},Nue=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,s=ht(n.length),a=ht(n.length),o="";if(r===1)o="coords * strides + begin";else{let i=0;o=n.map((u,c)=>(i++,n.length===1?`coords * strides[${c}] + begin[${c}]`:`coords[${i-1}] * strides[${c}] + begin[${c}]`)).join(",")}this.userCode=` ${s} begin = ${s}(${e}); ${s} strides = ${s}(${t}); void main() { ${a} coords = getOutputCoords(); setOutput(getX(${o})); } `}};function _ue(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,end:o,strides:i,beginMask:u,endMask:c,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r,{finalShapeSparse:h,finalShape:f,isIdentity:g,sliceDim0:m,isSimpleSlice:b,begin:y,end:v,strides:x}=Kt.sliceInfo(s.shape,a,o,i,u,c,l,p,d),k;if(g)k=pe({inputs:{x:s},backend:n,attrs:{shape:f}});else if(m||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let N=Kt.computeOutShape(y,v,x),E=_l({inputs:{x:s},backend:n,attrs:{begin:y,size:N}});k=pe({inputs:{x:E},backend:n,attrs:{shape:f}}),n.disposeIntermediateTensorInfo(E)}else if(n.shouldExecuteOnCPU([s])){let E=n.readSync(s.dataId),$=Me(s.shape,s.dtype,E),F=GQ(h,$,x,y);k=n.makeTensorInfo(f,s.dtype,F.values)}else{let E=new Nue(y,x,h);k=n.runWebGLProgram(E,[s],s.dtype)}let S=pe({inputs:{x:k},backend:n,attrs:{shape:f}});return n.disposeIntermediateTensorInfo(k),S}var Eue={kernelName:al,backendName:"webgl",kernelFunc:_ue};function Aue(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:a,leftPad:o,rightPad:i,padWidth:u,preserveShortSequences:c}=r,{data:l,dataSplits:p}=t,d=n.readSync(l.dataId),h=n.readSync(p.dataId),[f,g]=HQ(d,h,s,a,o,i,u,c);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",g)]}var Due={kernelName:tp,backendName:"webgl",kernelFunc:Aue};function $ue(e){let{inputs:t,backend:n,attrs:r}=e,{skipEmpty:s}=r,{input:a,delimiter:o}=t;if(a.dtype!=="string")throw new Error("Input must be of datatype string");if(a.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${a.shape}`);if(o.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${o.shape}`);let i=n.readSync(a.dataId),u=n.readSync(o.dataId)[0],[c,l,p]=jQ(i,u,s),d=l.length;return[n.makeTensorInfo([d,2],"int32",c),n.makeTensorInfo([d],"string",l),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var Fue={kernelName:np,backendName:"webgl",kernelFunc:$ue};function Rue(e){let{inputs:t,backend:n,attrs:r}=e,{numBuckets:s}=r,{input:a}=t;if(a.dtype!=="string")throw new Error("Input must be of datatype string");if(s<=0)throw new Error("Number of buckets must be at least 1");let o=n.readSync(a.dataId),i=qQ(o,s);return n.makeTensorInfo(a.shape,"int32",i)}var Pue={kernelName:rp,backendName:"webgl",kernelFunc:Rue},Oue="return tan(x);",Mue=Ze({opSnippet:Oue}),Lue={kernelName:Hi,backendName:"webgl",kernelFunc:Mue},Bue=` float e2x = exp(-2.0 * abs(x)); return sign(x) * (1.0 - e2x) / (1.0 + e2x); `,zue=Ze({opSnippet:Bue}),Wue={kernelName:ji,backendName:"webgl",kernelFunc:zue};function Vue(e){let{inputs:t,backend:n,attrs:r}=e,{tensor:s,indices:a,updates:o}=t,{}=r,{sliceRank:i,numUpdates:u,sliceSize:c,strides:l,outputSize:p}=T.calculateShapes(o,a,s.shape),d=[p/c,c];if(p===0)return n.makeTensorInfo(s.shape,a.dtype);let h=pe({inputs:{x:a},backend:n,attrs:{shape:[u,i]}}),f=pe({inputs:{x:o},backend:n,attrs:{shape:[u,c]}}),g=pe({inputs:{x:s},backend:n,attrs:{shape:d}}),m=new x0(u,i,h.shape.length,f.shape.length,l,d,!1,!0),b=n.runWebGLProgram(m,[f,h,g],g.dtype),y=pe({inputs:{x:b},backend:n,attrs:{shape:s.shape}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(b),y}var Uue={kernelName:Zc,backendName:"webgl",kernelFunc:Vue},Gue=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let a=0;a5)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"],r=[];for(let s=0;s5){let u=n.readSync(s.dataId),c=s.dtype==="string"?u.map(d=>w.decodeString(d)):u,l=Me(s.shape,s.dtype,c),p=XQ(l,a);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let o=new Gue(s.shape,a);return n.runWebGLProgram(o,[s],s.dtype)}var jue={kernelName:Ta,backendName:"webgl",kernelFunc:ED},que=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)); } } `}},Kue=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 Xa(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function K1(e){let t=1;for(;tu){let F=n.readSync(s.dataId),[D,R]=YQ(F,c,s.dtype,a,o);return[n.makeTensorInfo(D.shape,D.dtype,D.values),n.makeTensorInfo(R.shape,R.dtype,R.values)]}if(a===0)return c[c.length-1]=0,[n.makeTensorInfo(c,s.dtype,[]),n.makeTensorInfo(c,"int32",[])];if(l===1)return[s,Lp({attrs:{shape:c,dtype:"int32",value:0},backend:n})];let p=n.texData.get(s.dataId),d=p!==null&&p.isPacked,h=d?n.unpackTensor(s):s,g=w.sizeFromShape(c)/l,m=pe({inputs:{x:h},attrs:{shape:[g,l]},backend:n});d&&Xa(n,h);let b=K1(a),y=K1(l),v=null,x=()=>v===null?[m,m]:[m,v],k=(F,D,R)=>{let C=x(),L=new que(R),H=[[l],[v===null?1:0],[Number.NEGATIVE_INFINITY],[F],[D]],K=v;v=n.runWebGLProgram(L,C,"int32",H),Xa(n,K)};for(let F=1;F=1;R/=2)k(D,R,[g,y])}for(let F=y;F>b;F/=2){let D=x(),R=new Kue([g,F/2]),L=[[l],[v===null?1:0],[b]],U=v;v=n.runWebGLProgram(R,D,"int32",L),Xa(n,U);let H=b/2,K=H*2;for(let q=H;q>=1;q/=2)k(K,q,v.shape)}let S=v;v=_l({inputs:{x:v},backend:n,attrs:{begin:0,size:[g,a]}}),Xa(n,S);let N=wD({inputs:{x:m,indices:v},backend:n,attrs:{axis:1,batchDims:1}});Xa(n,m);let E=c.slice(0,-1);E.push(a),S=v,v=pe({inputs:{x:v},attrs:{shape:E},backend:n}),Xa(n,S);let $=N;return N=pe({inputs:{x:N},attrs:{shape:E},backend:n}),Xa(n,$),[N,v]}var Yue={kernelName:ol,backendName:"webgl",kernelFunc:Xue},Zue=class{constructor(e,t,n,r,s,a){this.variableNames=["Image","Transforms"],this.outputShape=a;let o=n==="nearest"?1:2,i;switch(r){case"constant":i=1;break;case"reflect":i=2;break;case"wrap":i=3;break;case"nearest":i=4;break;default:i=1;break}this.userCode=` float mapCoord(float outCoord, float len) { float inCoord = outCoord; if(${i} == 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 (${i} == 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 (${i} == 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(${s}); } 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(${s}); } 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 (${o} == 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 Jue(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,transforms:a}=t,{interpolation:o,fillMode:i,fillValue:u,outputShape:c}=r,[l,p,d,h]=s.shape,[f,g]=c!=null?c:[p,d],m=[l,f,g,h],b=new Zue(p,d,o,i,u,m);return n.runWebGLProgram(b,[s,a],"float32")}var Que={kernelName:il,backendName:"webgl",kernelFunc:Jue};function ece(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:a}=t;wl(a,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let o=r.readSync(a.dataId),{outputValues:i,outputShape:u,indices:c}=ZQ(o,s,a.shape,a.dtype);return[r.makeTensorInfo(u,a.dtype,i),r.makeTensorInfo([c.length],"int32",c)]}var tce={kernelName:sp,backendName:"webgl",kernelFunc:ece};function nce(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:a}=r;a<0&&(a+=s.shape.length);let o=s,i=o.shape.length,u=s.shape[a],c=new Array(i-1),l=0;for(let g=0;gn.disposeIntermediateTensorInfo(g)),f}var rce={kernelName:ul,backendName:"webgl",kernelFunc:nce},sce=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,r=e.batchSize,s=e.inSize,a=e.numSegments,o=a*Math.ceil(s/n);this.outputShape=[r,o];let i="0.0",u="sumValue",c=Math.floor(n/4)*4,l=n%4,p=` sumValue += dot(values, segFilter); `,d="";s%n>0&&(d=` if (inIdx < 0 || inIdx >= ${s}) { return initializationValue; } `);let h="";s%n>0&&(h=` if (inIdx < 0 || inIdx >= ${s}) { return -1.0; } `),this.userCode=` const float initializationValue = ${i}; float getValue(int batch, int inIdx) { ${d} 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( ${a})) * float(${n})); int currentSeg = int(mod(float(outIdx), float(${a}))); float sumValue = 0.0; for (int i = 0; i < ${c}; i += 4) { int inIdx = inOffset + i; vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), getValue(batch, inIdx + 3) ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0 ); ${p} } int inIdx = inOffset + ${c}; if (${l===1}) { vec4 values = vec4( getValue(batch, inIdx), initializationValue, initializationValue, initializationValue ); int inIdxSeg = int(getSegmentIdAtIndex(inIdx)); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, 0, 0, 0 ); ${p} } else if (${l===2}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), initializationValue, initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, 0, 0 ); ${p} } else if (${l===3}) { vec4 values = vec4( getValue(batch, inIdx), getValue(batch, inIdx + 1), getValue(batch, inIdx + 2), initializationValue ); vec4 segFilter = vec4( int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0, int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0, 0 ); ${p} } setOutput(${u}); } `}};function ace(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:a}=t,{numSegments:o}=r,i=s.shape.length,u=[],c=0,l=T.getAxesPermutation([c],i),p=s;l!=null&&(p=Tn({inputs:{x:s},backend:n,attrs:{perm:l}}),u.push(p),c=T.getInnerMostAxes(1,i)[0]);let d=T.segment_util.computeOutShape(p.shape,c,o),h=w.sizeFromShape([p.shape[c]]),f=pe({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}});u.push(f);let g=Zf(s.dtype),m=(x,k,S,N,E)=>{let $=x.shape[0],F=x.shape[1],D=T.segment_util.segOpComputeOptimalWindowSize(F,E),R={windowSize:D,inSize:F,batchSize:$,numSegments:E},C=new sce(R,k),L=n.compileAndRun(C,[x,S],N);if(u.push(L),L.shape[1]===E)return L;let U=_D({backend:n,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),H=ED({inputs:{x:U},backend:n,attrs:{reps:[F/D]}});return u.push(U),u.push(H),m(L,k,H,N,E)},b=m(f,"unsortedSegmentSum",a,g,o),y=pe({inputs:{x:b},backend:n,attrs:{shape:d}}),v=y;if(l!=null){u.push(y);let x=T.getUndoAxesPermutation(l);v=Tn({inputs:{x:v},backend:n,attrs:{perm:x}})}return u.forEach(x=>n.disposeIntermediateTensorInfo(x)),v}var oce={kernelName:ap,backendName:"webgl",kernelFunc:ace},ice=[Gee,jee,Xee,Jee,ete,rte,ate,ite,dte,hte,gte,vte,Ite,Tte,Ete,Dte,Fte,Mte,Bte,Wte,Hte,Jte,ene,sne,one,pne,fne,yne,Nee,wne,Tne,Ane,One,Bne,Wne,Une,Hne,Xne,Jne,tre,rre,are,ire,lre,pre,gre,yre,wre,Sre,Tre,Are,Rre,Lre,Wre,Gre,Hre,qre,Xre,Zre,Qre,tse,ase,use,dse,hse,gse,vse,kse,Nse,Tee,Ese,Sne,$se,Pse,Lse,Eee,Vse,jse,Kse,Jse,tae,aae,uae,pae,gae,vae,wae,Cae,Nae,Eae,Fae,Pae,Mae,Bae,Wae,Hae,Xae,Qae,ioe,$ee,doe,foe,boe,xoe,une,koe,Coe,Noe,Aoe,Roe,Dee,Ooe,Loe,zoe,Voe,Uoe,cne,roe,joe,Yoe,eie,Ree,sie,iie,die,fie,yie,xie,kie,Tie,Eie,$ie,Pie,Lie,Vie,Hie,Xie,Jie,Yte,aoe,tue,rue,aue,iue,cue,due,hue,mue,bue,xue,Iue,Sue,Tue,Eue,Due,Fue,Pue,soe,Wee,Lue,Wue,Uue,jue,Yue,Que,Vee,tce,rce,oce,Soe];for(let e of ice)op(e);var et;(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"})(et||(et={}));var Od;(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"})(Od||(Od={}));var AD;function uce(e){AD=e.wasm.cwrap(uo,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function cce(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:u,transposeB:c,activation:l,leakyreluAlpha:p}=r,d=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(a.dataId).id,f=0;if(o!=null){let E=n.dataIdMap.get(o.dataId);if(E.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${E.shape.length}.`);f=E.id}let g=i==null?0:n.dataIdMap.get(i.dataId).id,m=Od[l];if(m==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let b=u?s.shape[2]:s.shape[1],y=c?a.shape[1]:a.shape[2],v=dl.assertAndGetBroadcastShape(s.shape.slice(0,-2),a.shape.slice(0,-2)),x=n.makeOutput([...v,b,y],s.dtype),k=n.dataIdMap.get(x.dataId).id,S=new Uint8Array(new Int32Array(s.shape).buffer),N=new Uint8Array(new Int32Array(a.shape).buffer);return AD(d,S,s.shape.length,h,N,a.shape.length,u,c,m,f,g,p||0,k),x}var lce={kernelName:uo,backendName:"wasm",setupFunc:uce,kernelFunc:cce};function Xe(e,t){let n;function r(a){n=a.wasm.cwrap(e,null,["number","number","number"])}function s(a){let{backend:o,inputs:{x:i}}=a,u=o.dataIdMap.get(i.dataId).id,c=o.makeOutput(i.shape,t||i.dtype),l=o.dataIdMap.get(c.dataId).id;return w.sizeFromShape(c.shape)===0||n(u,et[i.dtype],l),c}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var dce=Xe(cc),pce=Xe(Eo),hce=Xe(Ao);function Ut(e,t,n){let r;function s(o){r=o.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function a(o){let{backend:i,inputs:u}=o,{a:c,b:l}=u,p=i.dataIdMap.get(c.dataId).id,d=i.dataIdMap.get(l.dataId).id,h=n!=null?n:c.dtype,f=T.assertAndGetBroadcastShape(c.shape,l.shape),g=i.makeOutput(f,h);if(w.sizeFromShape(f)===0)return g;let m=new Uint8Array(new Int32Array(c.shape).buffer),b=new Uint8Array(new Int32Array(l.shape).buffer),y=i.dataIdMap.get(g.dataId).id;return r(p,m,c.shape.length,d,b,l.shape.length,et[c.dtype],y),g}return{kernelName:e,backendName:"wasm",setupFunc:s,kernelFunc:a}}var fce=!0,mce=Ut(Sa,fce),DD;function gce(e){DD=e.wasm.cwrap(Do,null,["array","number","number","number"])}function bce(e){let{inputs:t,backend:n}=e,r=n.makeOutput(t[0].shape,t[0].dtype);if(w.sizeFromShape(r.shape)===0)return r;let s=t.map(i=>n.dataIdMap.get(i.dataId).id),a=new Uint8Array(new Int32Array(s).buffer),o=n.dataIdMap.get(r.dataId).id;return DD(a,s.length,et[r.dtype],o),r}var yce={kernelName:Do,backendName:"wasm",setupFunc:gce,kernelFunc:bce};function sg(e){let{inputs:{x:t},backend:n}=e;if(t.dtype==="string")return yn(n.readSync(t.dataId),t.shape,t.dtype);let r=n.makeOutput(t.shape,t.dtype),s=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(r).set(s),r}var vce={kernelName:si,backendName:"wasm",kernelFunc:sg},$D;function xce(e){$D=e.wasm.cwrap(_s,null,["number","array","number","number","number","array","number"])}function Ia(e){let{inputs:t,backend:n,attrs:r}=e,[s,a]=Ice(t.x.shape,r.perm),o=!0;for(let f=0;f=s&&(a===-1||r[a]>r[o])&&(a=o);r[a]=s}return[n,r]}var kce={kernelName:_s,backendName:"wasm",kernelFunc:Ia,setupFunc:xce};function Ma(e,t,n){let r=e.shape,s=e.shape.length,a=w.parseAxisParam(t,r),o=a,i=T.getAxesPermutation(o,s),u=null,c=!1;if(i!=null){let l=new Array(s);for(let h=0;h`new shape: ${o}, old shape: ${r.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(r.dataId),{dataId:r.dataId,shape:o,dtype:r.dtype}}var Xce={kernelName:qc,backendName:"wasm",kernelFunc:Ln},zD;function Yce(e){zD=e.wasm.cwrap(Lo,null,["number","array","number","number","array","number","number","number","number"])}function Zce(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;if(s.dtype!=="float32"||a.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let u=s.shape.length,c=a.shape.length,l=o?s.shape[u-2]:s.shape[u-1],p=i?a.shape[c-1]:a.shape[c-2],d=o?s.shape[u-1]:s.shape[u-2],h=i?a.shape[c-2]:a.shape[c-1],f=s.shape.slice(0,-2),g=a.shape.slice(0,-2),m=w.sizeFromShape(f),b=w.sizeFromShape(g),v=dl.assertAndGetBroadcastShape(s.shape.slice(0,-2),a.shape.slice(0,-2)).concat([d,h]);w.assert(l===p,()=>`Error in matMul: inner shapes (${l}) and (${p}) of Tensors with shapes ${s.shape} and ${a.shape} and transposeA=${o} and transposeB=${i} must match.`);let x=o?[m,l,d]:[m,d,l],k=i?[b,h,p]:[b,p,h],S=Ln({inputs:{x:s},backend:n,attrs:{shape:x}}),N=Ln({inputs:{x:a},backend:n,attrs:{shape:k}}),E=n.dataIdMap.get(S.dataId).id,$=n.dataIdMap.get(N.dataId).id,F=o?S.shape[2]:S.shape[1],D=i?N.shape[1]:N.shape[2],R=Math.max(m,b),C=n.makeOutput([R,F,D],S.dtype),L=n.dataIdMap.get(C.dataId).id,U=new Uint8Array(new Int32Array(S.shape).buffer),H=new Uint8Array(new Int32Array(N.shape).buffer);return zD(E,U,S.shape.length,$,H,N.shape.length,o,i,L),n.disposeData(S.dataId),n.disposeData(N.dataId),C.shape=v,C}var Jce={kernelName:Lo,backendName:"wasm",setupFunc:Yce,kernelFunc:Zce};function No(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:s}=e,[a,o]=Kt.parseSliceParams(t,n,r),i=Kt.isSliceContinous(t.shape,a,o),u=s.readSync(t.dataId),c=s.makeOutput(o,t.dtype),l=w.computeStrides(t.shape),p=s.dataIdMap.get(c.dataId);if(i){let f=Kt.computeFlatOffset(a,l);return t.dtype==="string"?p.stringBytes=u.slice(f,f+w.sizeFromShape(o)):s.typedArrayFromHeap(c).set(u.subarray(f,f+w.sizeFromShape(o))),c}if(t.dtype==="string"){let f=Cf(u,a,o,t.shape,t.dtype);return p.stringBytes=f,c}let d=s.typedArrayFromHeap(c),h=t.shape.length;if(h===2)Qce(u,l[0],d,a,o);else if(h===3)ele(u,l[0],l[1],d,a,o);else if(h===4)tle(u,l[0],l[1],l[2],d,a,o);else{let f=Cf(u,a,o,t.shape,t.dtype);d.set(f)}return c}function Qce(e,t,n,r,s){let a=0,o=r[0],i=r[1],u=o+s[0];for(let c=o;cb*y),u=T.getReshaped(s.shape,a,i),c=T.getPermuted(u.length,a.length),l=T.getReshapedPermuted(s.shape,a,i),p=T.getSliceBeginCoords(o,a.length),d=T.getSliceSize(l,o,a.length),h=Ln({inputs:{x:s},backend:n,attrs:{shape:u}}),f=Ia({inputs:{x:h},backend:n,attrs:{perm:c}}),g=Ln({inputs:{x:f},backend:n,attrs:{shape:l}}),m=No({inputs:{x:g},backend:n,attrs:{begin:p,size:d}});return n.disposeData(h.dataId),n.disposeData(f.dataId),n.disposeData(g.dataId),m}var sle={kernelName:mc,backendName:"wasm",kernelFunc:rle},WD;function ale(e){WD=e.wasm.cwrap(gc,null,["number","number","boolean","number","number","number"])}function ole(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,weights:a}=n,{size:o}=r,i=a.shape.reduce((p,d)=>p*d,1)!==0,u=s.shape.length===1?[o]:[s.shape[0],o],c=t.makeOutput(u,a.dtype);function l(p){return t.dataIdMap.get(p.dataId).id}return WD(l(s),o,i,l(a),et[a.dtype],l(c)),c}var ile={kernelName:gc,backendName:"wasm",setupFunc:ale,kernelFunc:ole},ule=!0,cle=Ut(bc,ule);function lle(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,a=n.typedArrayFromHeap(r),o=n.typedArrayFromHeap(s),i=T.assertAndGetBroadcastShape(Array.from(a),Array.from(o));return n.makeOutput([i.length],"int32",void 0,new Int32Array(i))}var dle={kernelName:Wd,backendName:"wasm",kernelFunc:lle};function La(e){let{inputs:{x:t},attrs:{dtype:n},backend:r}=e,s=r.makeOutput(t.shape,n),a=r.typedArrayFromHeap(t);return r.typedArrayFromHeap(s).set(a),s}var ple={kernelName:Bo,backendName:"wasm",kernelFunc:La},hle=Xe(zo),VD;function fle(e){VD=e.wasm.cwrap(Ca,null,["number","number","number","number"])}function mle(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(u.dataId).id;return VD(i,a,o,c),u}var gle={kernelName:Ca,backendName:"wasm",setupFunc:fle,kernelFunc:mle};function UD(e){let{inputs:t,backend:n}=e,r=w.parseAxisParam(e.attrs.axis,t[0].shape)[0],s=t.map(h=>h.shape);T.assertParamsConsistent(s,r);let a=T.computeOutShape(t.map(h=>h.shape),r),o=t.filter(h=>w.sizeFromShape(h.shape)>0);if(o.length===1)return sg({inputs:{x:o[0]},backend:n});let i=n.makeOutput(a,t[0].dtype);if(w.sizeFromShape(a)===0)return i;if(o[0].dtype==="string"){let h=o.map(v=>{let k=[-1,w.sizeFromShape(v.shape.slice(r))];return Ln({inputs:{x:v},backend:n,attrs:{shape:k}})}),f=h.map(v=>({vals:n.readSync(v.dataId),shape:v.shape}));a=T.computeOutShape(h.map(v=>v.shape),1);let g=h[0].shape[0]===1,m=jk(f,a,t[0].dtype,g),b=T.computeOutShape(o.map(v=>v.shape),r);i.shape=b;let y=n.dataIdMap.get(i.dataId);return y.stringBytes=T.fromStringArrayToUint8(m),h.forEach(v=>n.disposeData(v.dataId)),i}let u=w.sizeFromShape(o[0].shape.slice(0,r)),c=0,l=o.map(h=>{let f=w.sizeFromShape(h.shape.slice(r));return c+=f,f}),p=o.map(h=>n.typedArrayFromHeap(h)),d=n.typedArrayFromHeap(i);for(let h=0;h`cumprod does not support ${s.dtype} tensors in the WASM backend`);let c=T.getAxesPermutation([a],u),l=s;c!==null&&(l=Ia({inputs:{x:s},attrs:{perm:c},backend:n}));let p=T.getInnerMostAxes(1,u)[0];T.assertAxesAreInnerMostDims("cumprod",[p],u);let d=n.makeOutput(l.shape,l.dtype),h=l.shape[p],f=n.dataIdMap.get(l.dataId).id,g=n.dataIdMap.get(d.dataId).id;YD(f,o?1:0,i?1:0,h,g,et[s.dtype]);let m=d;if(c!==null){let b=T.getUndoAxesPermutation(c);m=Ia({inputs:{x:d},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(d.dataId)}return m}var zle={kernelName:wc,backendName:"wasm",setupFunc:Lle,kernelFunc:Ble},ZD;function Wle(e){ZD=e.wasm.cwrap(jo,null,["number","number","number","number","number","number"])}function Vle(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r,u=s.shape.length;w.assert(s.dtype==="float32"||s.dtype==="int32",()=>`cumsum does not support ${s.dtype} tensors in the WASM backend`);let c=T.getAxesPermutation([a],u),l=s;c!==null&&(l=Ia({inputs:{x:s},attrs:{perm:c},backend:n}));let p=T.getInnerMostAxes(1,u)[0];T.assertAxesAreInnerMostDims("cumsum",[p],u);let d=n.makeOutput(l.shape,l.dtype),h=l.shape[p],f=n.dataIdMap.get(l.dataId).id,g=n.dataIdMap.get(d.dataId).id;ZD(f,o?1:0,i?1:0,h,g,et[s.dtype]);let m=d;if(c!==null){let b=T.getUndoAxesPermutation(c);m=Ia({inputs:{x:d},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(d.dataId)}return m}var Ule={kernelName:jo,backendName:"wasm",setupFunc:Wle,kernelFunc:Vle},JD;function Gle(e){JD=e.wasm.cwrap("DenseBincount",null,["number","array","number","number","boolean","number","number","boolean","number"])}function Hle(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,weights:a}=n,{size:o,binaryOutput:i}=r,u=a.shape.reduce((d,h)=>d*h,1)!==0,c=s.shape.length===1?[o]:[s.shape[0],o],l=t.makeOutput(c,a.dtype);function p(d){return t.dataIdMap.get(d.dataId).id}return JD(p(s),new Uint8Array(new Int32Array(s.shape).buffer),s.shape.length,o,u,p(a),et[a.dtype],i,p(l)),l}var jle={kernelName:Ud,backendName:"wasm",setupFunc:Gle,kernelFunc:Hle},QD;function qle(e){QD=e.wasm.cwrap(kc,null,["number","number","number","array","number","array","array","number","number"])}function Kle(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{blockSize:a,dataFormat:o}=r,i=s.shape[0],u=o==="NHWC"?s.shape[1]:s.shape[2],c=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],p=u*a,d=c*a,h=l/(a*a),f=o==="NHWC"?[i,p,d,h]:[i,h,p,d],g=t.makeOutput(f,"float32"),b=t.dataIdMap.get(s.dataId).id,y=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),v=new Uint8Array(new Int32Array(f).buffer),x=new Uint8Array(new Int32Array(w.computeStrides(f)).buffer),k=t.dataIdMap.get(g.dataId).id;return QD(b,a,o==="NHWC"?1:0,y,s.shape.length-1,v,x,f.length,k),g}var Xle={kernelName:kc,backendName:"wasm",setupFunc:qle,kernelFunc:Kle},e$;function Yle(e){e$=e.wasm.cwrap(qo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Zle(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a}=t,o=r.dataIdMap.get(s.dataId).id,i=r.dataIdMap.get(a.dataId).id,{strides:u,dilations:c,pad:l,dimRoundingMode:p}=n,d=c==null?[1,1]:c,h=T.computeConv2DInfo(s.shape,a.shape,u,d,l,p,!0),f=h.filterHeight,g=h.filterWidth,m=h.padInfo.top,b=h.padInfo.right,y=h.padInfo.bottom,v=h.padInfo.left,x=h.dilationHeight,k=h.dilationWidth,S=h.strideHeight,N=h.strideWidth,E=h.inChannels,$=h.outChannels,F=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=r.makeOutput(h.outShape,"float32"),R=r.dataIdMap.get(D.dataId).id;return e$(o,s.shape[0],s.shape[1],s.shape[2],i,f,g,m,b,y,v,F,x,k,S,N,E,$,R),D}var Jle={kernelName:qo,backendName:"wasm",setupFunc:Yle,kernelFunc:Zle},t$;function Qle(e){t$=e.wasm.cwrap("Diag",null,["number","number","number","number"])}function ede(e){let{inputs:t,backend:n}=e,{x:r}=t,s=w.sizeFromShape(r.shape),a=n.makeOutput([...r.shape,...r.shape],r.dtype);return t$(n.dataIdMap.get(r.dataId).id,et[r.dtype],s,n.dataIdMap.get(a.dataId).id),a}var tde={kernelName:Gd,backendName:"wasm",setupFunc:Qle,kernelFunc:ede},n$;function nde(e){n$=e.wasm.cwrap(Ko,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function rde(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:u}=r;if(s.dtype!==a.dtype)throw new Error(`Dilation2D error: x must have the same dtype as filter. Got ${s.dtype} and ${a.dtype}`);let c=T.computeDilation2DInfo(s.shape,a.shape,o,i,"NHWC",u),l=n.makeOutput(c.outShape,s.dtype);return n$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(l.dataId).id,et[s.dtype],c.batchSize,c.inChannels,c.inHeight,c.inWidth,c.outHeight,c.outWidth,c.strideHeight,c.strideWidth,c.dilationHeight,c.dilationWidth,c.filterHeight,c.filterWidth,c.padInfo.top,c.padInfo.left),l}var sde={kernelName:Ko,backendName:"wasm",setupFunc:nde,kernelFunc:rde},r$;function ade(e){r$=e.wasm.cwrap(qu,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function ode(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,dy:o}=t,{strides:i,pad:u,dilations:c}=r;if(s.dtype!==a.dtype||s.dtype!==o.dtype)throw new Error(`Dilation2DBackpropFilter error: x must have the same dtype as filter and dy. Got ${s.dtype}, ${a.dtype}, and ${o.dtype}`);let l=T.computeDilation2DInfo(s.shape,a.shape,i,u,"NHWC",c),p=n.makeOutput(a.shape,a.dtype);return r$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(o.dataId).id,n.dataIdMap.get(p.dataId).id,et[s.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),p}var ide={kernelName:qu,backendName:"wasm",setupFunc:ade,kernelFunc:ode},s$;function ude(e){s$=e.wasm.cwrap(ju,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function cde(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,dy:o}=t,{strides:i,pad:u,dilations:c}=r;if(s.dtype!==a.dtype||s.dtype!==o.dtype)throw new Error(`Dilation2DBackpropInput error: x must have the same dtype as filter and dy. Got ${s.dtype}, ${a.dtype}, and ${o.dtype}`);let l=T.computeDilation2DInfo(s.shape,a.shape,i,u,"NHWC",c),p=n.makeOutput(s.shape,s.dtype);return s$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(o.dataId).id,n.dataIdMap.get(p.dataId).id,et[s.dtype],l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.filterHeight,l.filterWidth,l.padInfo.top,l.padInfo.left),p}var lde={kernelName:ju,backendName:"wasm",setupFunc:ude,kernelFunc:cde},dde=Xe(Yo),a$;function pde(e){a$=e.wasm.cwrap(Sc,null,["number","number","number"])}function hde(e){let{inputs:t,backend:n}=e,{dy:r,y:s}=t,a=n.makeOutput(s.shape,"float32"),o=i=>n.dataIdMap.get(i.dataId).id;return a$(o(s),o(r),o(a)),a}var fde={kernelName:Sc,backendName:"wasm",setupFunc:pde,kernelFunc:hde},mde=!1,gde=Ut(Cc,mde,"bool"),bde=Xe(Zo),yde=Xe(Jo,"float32");function Cx(e){let{inputs:t,attrs:n,backend:r}=e,{input:s}=t,{dim:a}=n,o=s.shape.length,i=s.shape.slice(),u=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),u=o+a+1),i.splice(u,0,1),Ln({inputs:{x:s},backend:r,attrs:{shape:i}})}var vde={kernelName:Tc,backendName:"wasm",kernelFunc:Cx},xde=Xe(Qo,"float32");function o$(e){let{attrs:{shape:t,value:n},backend:r}=e,{attrs:{dtype:s}}=e;s=s||w.inferDtype(n);let a=r.makeOutput(t,s);return r.typedArrayFromHeap(a).fill(n),a}var wde={kernelName:Hd,backendName:"wasm",kernelFunc:o$},i$;function Ide(e){i$=e.wasm.cwrap(Nc,null,["number","number","number","number","number","number"])}function kde(e){let{inputs:t,backend:n}=e,{image:r}=t,s=n.makeOutput(r.shape,r.dtype),a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,[i,u,c,l]=r.shape;return i$(a,i,u,c,l,o),s}var Sde={kernelName:Nc,backendName:"wasm",kernelFunc:kde,setupFunc:Ide},Cde=Xe(ei),Tde=!1,Nde=Ut(ti,Tde),u$;function _de(e){u$=e.wasm.cwrap(ni,null,["number","number","number","number","number","number","number"])}function Ede(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:s}=r,{x:a,mean:o,variance:i,offset:u,scale:c}=n,l=t.dataIdMap.get(a.dataId).id,p=t.dataIdMap.get(o.dataId).id,d=t.dataIdMap.get(i.dataId).id,h=u!=null?t.dataIdMap.get(u.dataId).id:0,f=c!=null?t.dataIdMap.get(c.dataId).id:0,g=t.makeOutput(a.shape,a.dtype);if(w.sizeFromShape(a.shape)===0)return g;let m=t.dataIdMap.get(g.dataId).id;return u$(l,p,d,h,f,s,m),g}var Ade={kernelName:ni,backendName:"wasm",setupFunc:_de,kernelFunc:Ede},c$;function Dde(e){c$=e.wasm.cwrap(co,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 $de(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:u,pad:c,dilations:l,dataFormat:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,g=T.computeConv2DInfo(s.shape,a.shape,u,l,c,d),m=Od[h];if(m==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=g.outChannels,x=0;if(o!=null){let te=r.dataIdMap.get(o.dataId);if(te.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${te.shape.length}.`);if(te.shape[0]!==v)throw new Error(`FusedConv2D bias shape (${te.shape}) does not match the number of output channels (${v})`);x=te.id}let k=g.filterHeight,S=g.filterWidth,N=g.padInfo.top,E=g.padInfo.right,$=g.padInfo.bottom,F=g.padInfo.left,D=g.dilationHeight,R=g.dilationWidth,C=g.strideHeight,L=g.strideWidth,U=g.inChannels,H=g.padInfo.type==="SAME"?1:0,K=g.batchSize,q=g.inHeight,Z=g.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let J=r.makeOutput(g.outShape,"float32"),ee=r.dataIdMap.get(J.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return c$(b,K,q,Z,y,k,S,x,N,E,$,F,H,D,R,C,L,U,v,m,se,f||0,ee),J}var Fde={kernelName:co,backendName:"wasm",setupFunc:Dde,kernelFunc:$de},l$;function Rde(e){l$=e.wasm.cwrap(lo,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 Pde(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:u,pad:c,dilations:l,dataFormat:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,g=T.computeConv2DInfo(s.shape,a.shape,u,l,c,d,!0),m=Od[h];if(m==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let b=r.dataIdMap.get(s.dataId).id,y=r.dataIdMap.get(a.dataId).id,v=g.outChannels,x=0;if(o!=null){let te=r.dataIdMap.get(o.dataId);if(te.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${te.shape.length}.`);if(te.shape[0]!==v)throw new Error(`FusedDepthwiseConv2D bias shape (${te.shape}) does not match the number of output channels (${v})`);x=te.id}let k=g.filterHeight,S=g.filterWidth,N=g.padInfo.top,E=g.padInfo.right,$=g.padInfo.bottom,F=g.padInfo.left,D=g.dilationHeight,R=g.dilationWidth,C=g.strideHeight,L=g.strideWidth,U=g.inChannels,H=g.padInfo.type==="SAME"?1:0,K=g.batchSize,q=g.inHeight,Z=g.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let J=r.makeOutput(g.outShape,"float32"),ee=r.dataIdMap.get(J.dataId).id,se=i==null?0:r.dataIdMap.get(i.dataId).id;return l$(b,K,q,Z,y,k,S,x,N,E,$,F,H,D,R,C,L,U,v,m,se,f||0,ee),J}var Ode={kernelName:lo,backendName:"wasm",setupFunc:Rde,kernelFunc:Pde},d$;function Mde(e){d$=e.wasm.cwrap(Ec,null,["number","number","number","number","number","number","array","number"])}function Lde(e){let{backend:t,inputs:n}=e,{params:r,indices:s}=n,[a,o,i,u]=sI.prepareAndValidate(r,s),c=t.makeOutput(a,r.dtype);if(o===0)return c;let l=s.shape,p=l[l.length-1],h=t.dataIdMap.get(r.dataId).id,g=t.dataIdMap.get(s.dataId).id,m=new Uint8Array(new Int32Array(u).buffer),b=t.dataIdMap.get(c.dataId).id;return d$(h,et[r.dtype],g,o,p,i,m,b),c}var Bde={kernelName:Ec,backendName:"wasm",setupFunc:Mde,kernelFunc:Lde},p$;function zde(e){p$=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Wde(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,indices:a}=n,{axis:o,batchDims:i}=r,u=w.parseAxisParam(o,s.shape)[0],c=t.readSync(a.dataId),l=s.shape[u];for(let $=0;$=0,()=>`GatherV2: the index value ${F} is not in [0, ${l-1}]`)}let p=T.segment_util.collectGatherOpShapeInfo(s,a,u,i),d=Ln({inputs:{x:s},attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]},backend:t}),h=w.sizeFromShape(a.shape),f=Ln({inputs:{x:a},attrs:{shape:[p.batchSize,h/p.batchSize]},backend:t}),g=[p.batchSize,p.outerSize,h/p.batchSize,p.sliceSize],m=t.makeOutput(g,s.dtype);if(w.sizeFromShape(s.shape)===0)return m;let b=d.shape.length-1,v=t.dataIdMap.get(d.dataId).id,k=t.dataIdMap.get(f.dataId).id,S=t.dataIdMap.get(m.dataId).id,N=new Uint8Array(new Int32Array(w.computeStrides(d.shape)).buffer),E=new Uint8Array(new Int32Array(w.computeStrides(g)).buffer);return p$(v,et[s.dtype],N,b,k,p.batchSize,E,S),t.disposeData(d.dataId),t.disposeData(f.dataId),m.shape=p.outputShape,m}var Vde={kernelName:_c,backendName:"wasm",setupFunc:zde,kernelFunc:Wde},Ude=!1,Gde=Ut(Ac,Ude,"bool"),Hde=!1,jde=Ut(ri,Hde,"bool"),qde=Xe(ai,"bool"),Kde=Xe(oi,"bool"),Xde=Xe(ii,"bool"),h$;function Yde(e){h$=e.wasm.cwrap(ui,null,["number","number","number","number"])}function Zde(e){let{inputs:{x:t},attrs:{alpha:n},backend:r}=e,s=r.dataIdMap.get(t.dataId).id,a=r.makeOutput(t.shape,"float32");if(w.sizeFromShape(t.shape)!==0){let o=r.dataIdMap.get(a.dataId).id;h$(s,et[t.dtype],n,o)}return a}var Jde={kernelName:ui,backendName:"wasm",setupFunc:Yde,kernelFunc:Zde},Qde=!1,epe=Ut(Dc,Qde,"bool"),tpe=!1,npe=Ut($c,tpe,"bool"),f$;function rpe(e){f$=e.wasm.cwrap(Fc,null,["number","number","number","number"])}function spe(e){let{attrs:t,backend:n}=e,{start:r,stop:s,num:a}=t,o=Math.floor(a),i=n.makeOutput([o],"float32");return f$(n.dataIdMap.get(i.dataId).id,r,s,o),i}var ape={kernelName:Fc,backendName:"wasm",setupFunc:rpe,kernelFunc:spe},ope=Xe(ci),ipe=Xe(li),upe=!1,cpe=Ut(Rc,upe,"bool"),lpe=Xe(Pc),dpe=!1,ppe=Ut(Oc,dpe,"bool"),hpe=!1,fpe=Ut(gC,hpe,"bool"),m$;function mpe(e){m$=e.wasm.cwrap(di,null,["number","number","number","number","number","number","number"])}function gpe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:a,bias:o,alpha:i,beta:u}=r;if(s.dtype!=="float32")throw new Error("LRN error: x must have dtype float32");let c=n.makeOutput(s.shape,s.dtype);return m$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(c.dataId).id,s.shape[3],a,o,i,u),c}var bpe={kernelName:di,backendName:"wasm",setupFunc:mpe,kernelFunc:gpe},g$;function ype(e){g$=e.wasm.cwrap(Mc,null,["number","number","number","number","number","number","number","number","number"])}function vpe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,y:a,dy:o}=t,{depthRadius:i,bias:u,alpha:c,beta:l}=r;if(s.dtype!=="float32"||a.dtype!=="float32"||o.dtype!=="float32")throw new Error("LRNGrad error: x, y, and dy must have dtype float32");let p=n.makeOutput(s.shape,s.dtype);return g$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(o.dataId).id,n.dataIdMap.get(p.dataId).id,o.shape[3],i,u,c,l),p}var xpe={kernelName:Mc,backendName:"wasm",setupFunc:ype,kernelFunc:vpe},b$;function wpe(e){b$=e.wasm.cwrap(pi,null,["number","number","number","number"])}function Ipe(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:s,keepDims:a}=r,{x:o}=n,u=t.dataIdMap.get(o.dataId).id,c=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Ma(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;c=l,u=v}let f=c.shape.length;T.assertAxesAreInnerMostDims("max",p,f);let[g,m]=T.computeOutAndReduceShapes(c.shape,p),b=w.sizeFromShape(m),y=t.makeOutput(g,o.dtype);if(w.sizeFromShape(c.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;b$(u,et[o.dtype],b,v)}if(h&&t.disposeData(l.dataId),a){let v=T.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var kpe={kernelName:pi,backendName:"wasm",setupFunc:wpe,kernelFunc:Ipe},Spe=!1,Cpe=Ut(hi,Spe),y$;function Tpe(e){y$=e.wasm.cwrap(fi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Npe(e){let{inputs:t,attrs:n,backend:r}=e,s=t.x,a=r.dataIdMap.get(s.dataId).id;w.assert(s.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${s.dtype}.`);let{filterSize:o,strides:i,pad:u,dimRoundingMode:c}=n,l=T.computePool2DInfo(s.shape,o,i,1,u,c),p=l.filterHeight,d=l.filterWidth,h=l.padInfo.top,f=l.padInfo.right,g=l.padInfo.bottom,m=l.padInfo.left,b=l.dilationHeight,y=l.dilationWidth,v=l.strideHeight,x=l.strideWidth,k=l.inChannels,S=l.outChannels;if(l.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);let N=r.makeOutput(l.outShape,"float32"),E=r.dataIdMap.get(N.dataId).id;return y$(a,s.shape[0],s.shape[1],s.shape[2],p,d,h,f,g,m,b,y,v,x,k,S,E),N}var _pe={kernelName:fi,backendName:"wasm",setupFunc:Tpe,kernelFunc:Npe},v$;function Epe(e){v$=e.wasm.cwrap("MaxPool3D",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ape(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:u,dataFormat:c}=r,l=T.computePool3DInfo(s.shape,a,o,1,i,u,c),p=n.makeOutput(l.outShape,s.dtype);return v$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(p.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),p}var Dpe={kernelName:Lc,backendName:"wasm",setupFunc:Epe,kernelFunc:Ape},x$;function $pe(e){x$=e.wasm.cwrap("MaxPool3DGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Fpe(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:u,dimRoundingMode:c}=r,l=T.computePool3DInfo(a.shape,o,i,1,u,c),p=n.makeOutput(a.shape,a.dtype);return x$(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(p.dataId).id,l.batchSize,l.inChannels,l.inDepth,l.inHeight,l.inWidth,l.outDepth,l.outHeight,l.outWidth,l.strideDepth,l.strideHeight,l.strideWidth,l.dilationDepth,l.dilationHeight,l.dilationWidth,l.effectiveFilterDepth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.front,l.padInfo.top,l.padInfo.left),p}var Rpe={kernelName:qd,backendName:"wasm",setupFunc:$pe,kernelFunc:Fpe},w$;function Ppe(e){w$=e.wasm.cwrap("MaxPoolGrad",null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ope(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:u,dimRoundingMode:c}=r,l=T.computePool2DInfo(a.shape,o,i,1,u,c),p=n.makeOutput(a.shape,a.dtype);return w$(n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(p.dataId).id,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),p}var Mpe={kernelName:jd,backendName:"wasm",setupFunc:Ppe,kernelFunc:Ope},I$;function Lpe(e){I$=e.wasm.cwrap("MaxPoolWithArgmax",null,["number","number","number","number","boolean","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Bpe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,includeBatchInIndex:u}=r;w.assert(s.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${s.shape.length}.`);let c=[1,1];w.assert(T.eitherStridesOrDilationsAreOne(o,c),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${c}'`);let l=T.computePool2DInfo(s.shape,a,o,[1,1],i),p=n.makeOutput(l.outShape,s.dtype),d=n.makeOutput(l.outShape,"int32");return I$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(p.dataId).id,n.dataIdMap.get(d.dataId).id,et[s.dtype],u,l.batchSize,l.inChannels,l.inHeight,l.inWidth,l.outHeight,l.outWidth,l.strideHeight,l.strideWidth,l.dilationHeight,l.dilationWidth,l.effectiveFilterHeight,l.effectiveFilterWidth,l.padInfo.top,l.padInfo.left),[p,d]}var zpe={kernelName:Kd,backendName:"wasm",setupFunc:Lpe,kernelFunc:Bpe},k$;function Wpe(e){k$=e.wasm.cwrap(mi,null,["number, number, number"])}function Vpe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,u=i,c=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Ma(o,s,t),f=p;if(h){let x=t.dataIdMap.get(l.dataId).id;x!==i&&(c=l,u=x,f=T.getInnerMostAxes(f.length,c.shape.length))}T.assertAxesAreInnerMostDims("mean",f,c.shape.length);let[g,m]=T.computeOutAndReduceShapes(c.shape,f),b=w.sizeFromShape(m),y=c;c.dtype!=="float32"&&(y=La({backend:t,inputs:{x:c},attrs:{dtype:"float32"}}),u=t.dataIdMap.get(y.dataId).id);let v=t.makeOutput(g,"float32");if(w.sizeFromShape(c.shape)!==0){let x=t.dataIdMap.get(v.dataId).id;k$(u,b,x)}if(h&&t.disposeData(l.dataId),a){let x=T.expandShapeToKeepDim(v.shape,d);v.shape=x}return c.dtype!=="float32"&&t.disposeData(y.dataId),v}var Upe={kernelName:mi,backendName:"wasm",setupFunc:Wpe,kernelFunc:Vpe},S$;function Gpe(e){S$=e.wasm.cwrap(gi,null,["number","number","number","number"])}function Hpe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,u=i,c=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Ma(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(c=l,u=v)}let f=c.shape.length;T.assertAxesAreInnerMostDims("min",p,f);let[g,m]=T.computeOutAndReduceShapes(c.shape,p),b=w.sizeFromShape(m),y=t.makeOutput(g,c.dtype);if(w.sizeFromShape(c.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;S$(u,et[o.dtype],b,v)}if(h&&t.disposeData(l.dataId),a){let v=T.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var jpe={kernelName:gi,backendName:"wasm",setupFunc:Gpe,kernelFunc:Hpe},qpe=!1,Kpe=Ut(bi,qpe),Tx;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(Tx||(Tx={}));var C$;function Xpe(e){C$=e.wasm.cwrap(yi,null,["number","array","number","number","array","array","number","number"])}function Ype(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:s}}=e,a=r.map((f,g)=>f[0]+t.shape[g]+f[1]),o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),u=n.dataIdMap.get(i.dataId).id,c=new Uint8Array(new Int32Array(t.shape).buffer),l=r.map(f=>f[0]),p=r.map(f=>f[1]),d=new Uint8Array(new Int32Array(l).buffer),h=new Uint8Array(new Int32Array(p).buffer);return C$(o,c,t.shape.length,et[t.dtype],d,h,Tx[s],u),i}var Zpe={kernelName:yi,backendName:"wasm",kernelFunc:Ype,setupFunc:Xpe},T$;function Jpe(e){T$=e.wasm.cwrap(Vi,null,["number","number","number","number"])}function N$(e){let{backend:t,inputs:{logits:n},attrs:{dim:r}}=e,s=t.dataIdMap.get(n.dataId).id,a=t.makeOutput(n.shape,n.dtype),o=t.dataIdMap.get(a.dataId).id,i=n.shape[r],u=w.sizeFromShape(n.shape)/i;return w.sizeFromShape(a.shape)===0||T$(s,o,i,u),a}var Qpe={kernelName:Vi,backendName:"wasm",setupFunc:Jpe,kernelFunc:N$},_$;function ehe(e){_$=e.wasm.cwrap(Bc,null,["number","number","number","number","number","number"])}function the(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:a,seed:o,normalized:i}=r;if(s.dtype!=="float32")throw new Error(`Tensor logits must have dtype float32, got ${s.dtype}`);let u=i?s:N$({inputs:{logits:s},backend:n,attrs:{dim:s.shape.length-1}}),[c,l]=u.shape,p=n.makeOutput([c,a],"int32");return _$(n.dataIdMap.get(u.dataId).id,c,l,a,o,n.dataIdMap.get(p.dataId).id),i||n.disposeData(u.dataId),p}var nhe={kernelName:Bc,backendName:"wasm",setupFunc:ehe,kernelFunc:the},rhe=Ut(vi,!0),she=!0,ahe=Ut(xi,she),ohe=Xe(zc);function w0(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),r=n[0],s=n[1],a=n[2],o=n[3];return e.wasm._free(t),{pSelectedIndices:r,selectedSize:s,pSelectedScores:a,pValidOutputs:o}}var E$;function ihe(e){E$=e.wasm.cwrap(Vc,"number",["number","number","number","number","number"])}function uhe(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o}=r,{boxes:i,scores:u}=n,c=t.dataIdMap.get(i.dataId).id,l=t.dataIdMap.get(u.dataId).id,p=E$(c,l,a,s,o),{pSelectedIndices:d,selectedSize:h,pSelectedScores:f,pValidOutputs:g}=w0(t,p);return t.wasm._free(f),t.wasm._free(g),t.makeOutput([h],"int32",d)}var che={kernelName:Vc,backendName:"wasm",setupFunc:ihe,kernelFunc:uhe},A$;function lhe(e){A$=e.wasm.cwrap(Uc,"number",["number","number","number","number","number","bool"])}function dhe(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,padToMaxOutputSize:i}=r,{boxes:u,scores:c}=n,l=t.dataIdMap.get(u.dataId).id,p=t.dataIdMap.get(c.dataId).id,d=A$(l,p,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:g,pValidOutputs:m}=w0(t,d);t.wasm._free(g);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([],"int32",m);return[b,y]}var phe={kernelName:Uc,backendName:"wasm",setupFunc:lhe,kernelFunc:dhe},D$;function hhe(e){D$=e.wasm.cwrap(Gc,"number",["number","number","number","number","number","number"])}function fhe(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,softNmsSigma:i}=r,{boxes:u,scores:c}=n,l=t.dataIdMap.get(u.dataId).id,p=t.dataIdMap.get(c.dataId).id,d=D$(l,p,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:g,pValidOutputs:m}=w0(t,d);t.wasm._free(m);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([f],"float32",g);return[b,y]}var mhe={kernelName:Gc,backendName:"wasm",setupFunc:hhe,kernelFunc:fhe},ghe=!1,bhe=Ut(Wc,ghe,"bool"),$$;function yhe(e){$$=e.wasm.cwrap(wi,null,["number","number","number","number","number"])}function vhe(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{dtype:a,depth:o,onValue:i,offValue:u}=r,c=n.makeOutput([...s.shape,o],a),l=n.dataIdMap.get(c.dataId).id,d=n.dataIdMap.get(s.dataId).id;return $$(d,o,i,u,l),c}var xhe={kernelName:wi,backendName:"wasm",setupFunc:yhe,kernelFunc:vhe};function whe(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var Ihe={kernelName:Hc,backendName:"wasm",kernelFunc:whe};function khe(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return Cx({inputs:{input:t[0]},backend:n,attrs:{dim:s}});let a=t[0].shape,o=t[0].dtype;t.forEach(l=>{w.assertShapesMatch(a,l.shape,"All tensors passed to stack must have matching shapes"),w.assert(o===l.dtype,()=>"All tensors passed to stack must have matching dtypes")});let i=[],u=t.map(l=>{let p=Cx({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),c=UD({inputs:u,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeData(l.dataId)),c}var She={kernelName:jc,backendName:"wasm",kernelFunc:khe},F$;function Che(e){F$=e.wasm.cwrap(Ii,null,["number","array","number","number","array","array","number","number"])}function The(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:s}}=e,a=r.map((g,m)=>g[0]+t.shape[m]+g[1]);if(w.sizeFromShape(t.shape)===0)return o$({backend:n,attrs:{shape:a,value:s,dtype:t.dtype}});let o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),c=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(t.shape).buffer),p=r.map(g=>g[0]),d=r.map(g=>g[1]),h=new Uint8Array(new Int32Array(p).buffer),f=new Uint8Array(new Int32Array(d).buffer);return F$(o,l,t.shape.length,et[t.dtype],h,f,s,c),i}var R$={kernelName:Ii,backendName:"wasm",kernelFunc:The,setupFunc:Che},Nhe=!1,_he=Ut(ki,Nhe),P$;function Ehe(e){P$=e.wasm.cwrap(Si,null,["number","number","number"])}function Ahe(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,a=n.dataIdMap.get(r.dataId).id,o=n.dataIdMap.get(s.dataId).id,i=a,u=r,c=u;u.dtype!=="float32"&&(c=La({backend:n,inputs:{x:r},attrs:{dtype:"float32"}}),i=n.dataIdMap.get(c.dataId).id);let l=n.makeOutput(r.shape,"float32"),p=n.dataIdMap.get(l.dataId).id;return P$(i,o,p),u.dtype!=="float32"&&n.disposeData(c.dataId),l}var Dhe={kernelName:Si,backendName:"wasm",setupFunc:Ehe,kernelFunc:Ahe},O$;function $he(e){O$=e.wasm.cwrap(Ci,null,["number","number","number","number"])}function Fhe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,u=i,c=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Ma(o,s,t),f=p;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(c=l,u=v,f=T.getInnerMostAxes(f.length,c.shape.length))}T.assertAxesAreInnerMostDims("prod",f,c.shape.length);let[g,m]=T.computeOutAndReduceShapes(c.shape,f),b=w.sizeFromShape(m),y=t.makeOutput(g,c.dtype);if(w.sizeFromShape(c.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;O$(u,b,et[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=T.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var Rhe={kernelName:Ci,backendName:"wasm",setupFunc:$he,kernelFunc:Fhe},Phe=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=Xk(r,s,a,o),u=t.makeOutput([i.length],o);return t.typedArrayFromHeap(u).set(i),u},Ohe={kernelName:Xd,backendName:"wasm",kernelFunc:Phe},Mhe=!0,Lhe=Ut(Xo,Mhe),Bhe=Xe(Ti),zhe=Xe(Ni),Whe=Xe(Ai),M$;function Vhe(e){M$=e.wasm.cwrap(Ei,null,["number","number","number","number","number","number","number","number","number","number"])}function Uhe(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[u,c]=i,[l,p,d,h]=s.shape,f=[l,u,c,h],g=t.dataIdMap.get(s.dataId),m;g.dtype!=="float32"&&(m=La({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(m.dataId));let b=g.id,y=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return y;let v=t.dataIdMap.get(y.dataId).id;return M$(b,l,p,d,h,u,c,a?1:0,o?1:0,v),m!=null&&t.disposeData(m.dataId),y}var Ghe={kernelName:Ei,backendName:"wasm",setupFunc:Vhe,kernelFunc:Uhe},L$;function Hhe(e){L$=e.wasm.cwrap(Xc,null,["number","number","number","array","array","boolean"])}function jhe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=n.makeOutput(s.shape,"float32"),u=n.dataIdMap.get(s.dataId),c;return u.dtype!=="float32"&&(c=La({backend:n,inputs:{x:s},attrs:{dtype:"float32"}}),u=n.dataIdMap.get(c.dataId)),L$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(s.shape).buffer),new Uint8Array(new Int32Array(a.shape).buffer),o),c!=null&&n.disposeData(c.dataId),i}var qhe={kernelName:Xc,backendName:"wasm",setupFunc:Hhe,kernelFunc:jhe},B$;function Khe(e){B$=e.wasm.cwrap(_i,null,["number","number","number","number","number","number","number","number","number","number"])}function Xhe(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[u,c]=i,[l,p,d,h]=s.shape,f=[l,u,c,h],g=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return g;let m=t.dataIdMap.get(s.dataId),b;m.dtype!=="float32"&&(b=La({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(b.dataId));let y=m.id,v=t.dataIdMap.get(g.dataId).id;return B$(y,l,p,d,h,u,c,a?1:0,o?1:0,v),b!=null&&t.disposeData(b.dataId),g}var Yhe={kernelName:_i,backendName:"wasm",setupFunc:Khe,kernelFunc:Xhe},z$;function Zhe(e){z$=e.wasm.cwrap(Kc,null,["number","number","number","array","array","boolean"])}function Jhe(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=n.makeOutput(s.shape,"float32"),u=n.dataIdMap.get(s.dataId),c;return u.dtype!=="float32"&&(c=La({backend:n,inputs:{x:s},attrs:{dtype:"float32"}}),u=n.dataIdMap.get(c.dataId)),z$(n.dataIdMap.get(s.dataId).id,n.dataIdMap.get(a.dataId).id,n.dataIdMap.get(i.dataId).id,new Uint8Array(new Int32Array(s.shape).buffer),new Uint8Array(new Int32Array(a.shape).buffer),o),c!=null&&n.disposeData(c.dataId),i}var Qhe={kernelName:Kc,backendName:"wasm",setupFunc:Zhe,kernelFunc:Jhe},W$;function efe(e){W$=e.wasm.cwrap(Di,null,["number","array","number","array","number","number"])}function tfe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dims:a}=r,o=w.parseAxisParam(a,s.shape);if(s.shape.length===0)return sg({inputs:{x:s},backend:n});let i=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(s.dataId).id,c=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(o).buffer),p=new Uint8Array(new Int32Array(s.shape).buffer);W$(u,l,o.length,p,s.shape.length,c);let d=Ln({inputs:{x:i},attrs:{shape:s.shape},backend:n});return n.disposeData(i.dataId),d}var nfe={kernelName:Di,backendName:"wasm",kernelFunc:tfe,setupFunc:efe},V$;function rfe(e){V$=e.wasm.cwrap(ll,null,["number","number","number","number","number","number","number","number","array","number","number"])}function sfe(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{radians:a,fillValue:o,center:i}=r,u=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(s.dataId).id,l=n.dataIdMap.get(u.dataId).id,[p,d,h,f]=s.shape,[g,m]=T.getImageCenter(i,d,h),b=o===0,y=255,v=typeof o=="number"?[o,o,o,b?0:y]:[...o,y],x=new Uint8Array(new Int32Array(v).buffer);return V$(c,p,d,h,f,a,g,m,x,v.length,l),u}var afe={kernelName:ll,backendName:"wasm",kernelFunc:sfe,setupFunc:rfe},ofe=Xe($i),ife=Xe(Fi),U$;function ufe(e){U$=e.wasm.cwrap(Yc,null,["number","number","number","number","number","number","array","number","number"])}function cfe(e){let{backend:t,inputs:n,attrs:r}=e,{indices:s,updates:a}=n,{shape:o}=r,i=t.makeOutput(o,a.dtype);if(w.sizeFromShape(o)===0)return i;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:p,outputSize:d}=xm.calculateShapes(a,s,o),f=t.dataIdMap.get(s.dataId).id,m=t.dataIdMap.get(a.dataId).id,b=new Uint8Array(new Int32Array(p).buffer),y=t.dataIdMap.get(i.dataId).id;return U$(f,m,et[a.dtype],u,c,l,b,d,y),i}var lfe={kernelName:Yc,backendName:"wasm",setupFunc:ufe,kernelFunc:cfe},G$;function dfe(e){G$=e.wasm.cwrap(Jc,null,["number","number","number","number","number","number","bool","number"])}function pfe(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:s,values:a}=t,{side:o}=r;if(s.dtype!==a.dtype)throw new Error(`SearchSorted error: sorted_sequence must have the same dtype as values. Got ${s.dtype} and ${a.dtype}`);let i=n.makeOutput(a.shape,"int32");function u(c){return n.dataIdMap.get(c.dataId).id}return G$(u(s),u(a),s.shape[0],s.shape[1],a.shape[1],et[s.dtype],o==="left",u(i)),i}var hfe={kernelName:Jc,backendName:"wasm",setupFunc:dfe,kernelFunc:pfe},H$;function ffe(e){H$=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function mfe(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t,o=n.dataIdMap.get(r.dataId).id,i=n.dataIdMap.get(s.dataId).id,u=n.dataIdMap.get(a.dataId).id,c=n.makeOutput(s.shape,s.dtype),l=n.dataIdMap.get(c.dataId).id,p=r.shape.length,d=s.shape.length,h=p===0||p>1||d===1?1:w.sizeFromShape(s.shape.slice(1));return H$(o,i,u,h,l),c}var gfe={kernelName:Qc,backendName:"wasm",kernelFunc:mfe,setupFunc:ffe},bfe=Xe(Ri),j$;function yfe(e){j$=e.wasm.cwrap(Li,null,["number","number"])}function vfe(e){let{backend:t,inputs:{x:n}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),a=t.dataIdMap.get(s.dataId).id;return w.sizeFromShape(s.shape)===0||j$(r,a),s}var xfe={kernelName:"Sigmoid",backendName:"wasm",setupFunc:yfe,kernelFunc:vfe},wfe=Xe(Mi),Ife=Xe(Pi),kfe=Xe(Oi),Sfe=Xe(Bi);function Cfe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r,i=w.sizeFromShape(a),u=[[0,0]];u.push(...o);for(let S=1+a.length;S0?u+1:0;if(l<0)throw new Error(T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=s.shape.slice();p[0]=l;let d=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(a.dataId).id,f=n.dataIdMap.get(o.dataId).id,g=n.makeOutput(p,s.dtype),m=n.dataIdMap.get(g.dataId).id,b=n.makeOutput([4],"int32"),y=n.dataIdMap.get(b.dataId).id;X$(d,et[s.dtype],s.shape[0],h,f,m,y,t,0);let v=n.readSync(b.dataId),x;switch(v[0]){case 0:{x=T.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=T.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=T.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(v[1],v[2]);break;case 3:x=T.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(v[1],v[2],v[3]);break;default:x=""}if(n.disposeData(b.dataId),x)throw n.disposeData(g.dataId),new Error(x);return g}function Ffe(e){return Z$(e,!0)}var Rfe={kernelName:Zd,backendName:"wasm",setupFunc:Y$,kernelFunc:Ffe};function Pfe(e){return Z$(e,!1)}var Ofe={kernelName:Jd,backendName:"wasm",setupFunc:Y$,kernelFunc:Pfe},J$;function Mfe(e){J$=e.wasm.cwrap(sl,null,["number","number","number","number","number","number","number","number","array","number","number"])}function Lfe(e){let{backend:t,inputs:n,attrs:r}=e,{sparseIndices:s,sparseValues:a,defaultValue:o}=n,{outputShape:i}=r,u=t.makeOutput(i,o.dtype);if(w.sizeFromShape(i)===0)return u;let{sliceRank:c,numUpdates:l,sliceSize:p,strides:d,outputSize:h}=T.calculateShapes(a,s,i),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(o.dataId).id,b=new Uint8Array(new Int32Array(d).buffer),y=t.dataIdMap.get(u.dataId).id;return J$(f,g,a.shape.length,m,et[o.dtype],c,l,p,b,h,y),u}var Bfe={kernelName:sl,backendName:"wasm",setupFunc:Mfe,kernelFunc:Lfe};function zfe(e){let{inputs:t,attrs:n,backend:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=n,i=w.parseAxisParam(o,s.shape)[0],u=T.prepareSplitSize(s,a,i),c=new Array(s.shape.length).fill(0),l=s.shape.slice();return u.map(p=>{let d=[...l];d[i]=p;let h=No({inputs:{x:s},attrs:{begin:c,size:d},backend:r});return c[i]+=p,h})}var Wfe={kernelName:nl,backendName:"wasm",kernelFunc:zfe},Vfe=Xe(zi),Ufe=Xe(Qd),Gfe=!0,Hfe=Ut(Ui,Gfe),Q$;function jfe(e){Q$=e.wasm.cwrap(Na,null,["number","number","number","number"])}function qfe(e){let{backend:t,inputs:n,attrs:r}=e,{alpha:s}=r,{x:a}=n,o=t.dataIdMap.get(a.dataId).id,i=t.makeOutput(a.shape,a.dtype),u=t.dataIdMap.get(i.dataId).id;return Q$(o,s,et[a.dtype],u),i}var Kfe={kernelName:Na,backendName:"wasm",setupFunc:jfe,kernelFunc:qfe},eF;function Xfe(e){eF=e.wasm.cwrap(al,null,["number","array","number","array","array","array","array","array","number","number"])}function Yfe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{begin:a,end:o,strides:i,beginMask:u,endMask:c,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r,{finalShapeSparse:h,finalShape:f,isIdentity:g,sliceDim0:m,isSimpleSlice:b,begin:y,end:v,strides:x}=Kt.sliceInfo(s.shape,a,o,i,u,c,l,p,d),k;if(g)k=Ln({inputs:{x:s},backend:t,attrs:{shape:f}});else if(m||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let S=Kt.computeOutShape(y,v,x),N=No({inputs:{x:s},backend:t,attrs:{begin:y,size:S}});k=Ln({inputs:{x:N},backend:t,attrs:{shape:f}}),t.disposeData(N.dataId)}else{let S=t.makeOutput(h,"float32"),N=t.dataIdMap.get(s.dataId).id,E=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),$=new Uint8Array(new Int32Array(y).buffer),F=new Uint8Array(new Int32Array(v).buffer),D=new Uint8Array(new Int32Array(x).buffer),R=new Uint8Array(new Int32Array(h).buffer),C=new Uint8Array(new Int32Array(w.computeStrides(h)).buffer),L=t.dataIdMap.get(S.dataId).id;eF(N,E,s.shape.length,$,F,D,R,C,h.length,L),k=Ln({inputs:{x:S},backend:t,attrs:{shape:f}}),t.disposeData(S.dataId)}return k}var Zfe={kernelName:al,backendName:"wasm",setupFunc:Xfe,kernelFunc:Yfe};function Jfe(e){let{backend:t,inputs:n,attrs:r}=e,{data:s,dataSplits:a}=n,{separator:o,nGramWidths:i,leftPad:u,rightPad:c,padWidth:l,preserveShortSequences:p}=r,d=t.readSync(s.dataId),h=t.readSync(a.dataId),[f,g]=Zk(d,h,o,i,u,c,l,p),m=t.makeOutput([f.length],"string"),b=t.dataIdMap.get(m.dataId);b.stringBytes=f;let y=t.makeOutput(a.shape,"int32");return t.typedArrayFromHeap(y).set(g),[m,y]}var Qfe={kernelName:tp,backendName:"wasm",kernelFunc:Jfe};function eme(e){let{backend:t,inputs:n,attrs:r}=e,{input:s,delimiter:a}=n,{skipEmpty:o}=r,i=t.readSync(s.dataId),u=t.readSync(a.dataId),[c,l,p]=Jk(i,u[0],o),d=l.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(c);let g=t.makeOutput([d],"string"),m=t.dataIdMap.get(g.dataId);m.stringBytes=l;let b=t.makeOutput([2],"int32");return t.typedArrayFromHeap(b).set(p),[h,g,b]}var tme={kernelName:np,backendName:"wasm",kernelFunc:eme};function nme(e){let{backend:t,inputs:n,attrs:r}=e,{input:s}=n,{numBuckets:a}=r,o=t.readSync(s.dataId),i=Qk(o,a),u=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(u).set(i),u}var rme={kernelName:rp,backendName:"wasm",kernelFunc:nme},sme=!0,ame=Ut(Gi,sme),tF;function ome(e){tF=e.wasm.cwrap(Wi,null,["number","number","number","number"])}function ime(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,u=i,c=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Ma(o,s,t),f=p;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(c=l,u=v,f=T.getInnerMostAxes(f.length,c.shape.length))}T.assertAxesAreInnerMostDims("sum",f,c.shape.length);let[g,m]=T.computeOutAndReduceShapes(c.shape,f),b=w.sizeFromShape(m),y=t.makeOutput(g,c.dtype);if(w.sizeFromShape(c.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;tF(u,b,et[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=T.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var ume={kernelName:Wi,backendName:"wasm",setupFunc:ome,kernelFunc:ime},cme=Xe(Hi),lme=Xe(ji),nF;function dme(e){nF=e.wasm.cwrap(Zc,null,["number","number","number","number","number","number","array","number","number","number"])}function pme(e){let{backend:t,inputs:n,attrs:r}=e,{tensor:s,indices:a,updates:o}=n,{}=r,i=t.makeOutput(s.shape,s.dtype);if(w.sizeFromShape(s.shape)===0)return i;let{sliceRank:u,numUpdates:c,sliceSize:l,strides:p,outputSize:d}=xm.calculateShapes(o,a,s.shape),f=t.dataIdMap.get(a.dataId).id,m=t.dataIdMap.get(o.dataId).id,y=t.dataIdMap.get(s.dataId).id,v=new Uint8Array(new Int32Array(p).buffer),x=t.dataIdMap.get(i.dataId).id;return nF(f,m,et[o.dtype],u,c,l,v,d,x,y),i}var hme={kernelName:Zc,backendName:"wasm",setupFunc:dme,kernelFunc:pme},rF;function fme(e){rF=e.wasm.cwrap(Ta,null,["number","array","number","array","number","number"])}function mme(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,a=n.dataIdMap.get(s.dataId).id,{reps:o}=r,i=new Array(s.shape.length);for(let d=0;d{let{x:r}=e,{k:s,sorted:a}=n,o=t.dataIdMap.get(r.dataId).id,i=new Uint8Array(new Int32Array(r.shape).buffer),u=r.shape.slice();u[u.length-1]=s;let c=t.makeOutput(u,r.dtype),l=t.dataIdMap.get(c.dataId).id,p=t.makeOutput(u,"int32"),d=t.dataIdMap.get(p.dataId).id;return sF(o,i,r.shape.length,et[r.dtype],s,a,l,d),[c,p]},vme={kernelName:ol,backendName:"wasm",setupFunc:bme,kernelFunc:yme},aF;function xme(e){aF=e.wasm.cwrap(il,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function wme(e){let{backend:t,inputs:n,attrs:r}=e,{image:s,transforms:a}=n,{interpolation:o,fillMode:i,fillValue:u,outputShape:c}=r,[l,p,d,h]=s.shape,[f,g]=c!=null?c:[p,d],m=[l,f,g,h],b=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),y=new Uint8Array(new Int32Array(w.computeStrides(m)).buffer),v=t.makeOutput(m,s.dtype),x=t.dataIdMap.get(v.dataId).id,S=t.dataIdMap.get(s.dataId).id,E=t.dataIdMap.get(a.dataId).id,$=o==="nearest"?1:2,F;switch(i){case"constant":F=1;break;case"reflect":F=2;break;case"wrap":F=3;break;case"nearest":F=4;break;default:F=1;break}return aF(S,E,a.shape[0]>1,l,f,g,h,d,p,b,s.shape.length-1,y,m.length-1,$,F,u,x),v}var Ime={kernelName:il,backendName:"wasm",setupFunc:xme,kernelFunc:wme};function kme(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:a}=t,{outputValues:o,outputShape:i,indices:u}=t0(r.readSync(a.dataId),s,a.shape,a.dtype);return[r.makeOutput(i,a.dtype,void 0,o),r.makeOutput([u.length],"int32",void 0,u)]}var Sme={kernelName:sp,backendName:"wasm",kernelFunc:kme};function Cme(e){let{inputs:t,backend:n,attrs:r}=e,{value:s}=t,{axis:a}=r;a<0&&(a+=s.shape.length);let o=s.shape[a],i=s.shape.length,u=new Array(i-1),c=0;for(let h=0;h({dataId:h,dtype:f,shape:u}))}var Tme={kernelName:ul,backendName:"wasm",kernelFunc:Cme};function Nme(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var _me={kernelName:cl,backendName:"wasm",kernelFunc:Nme},Eme=[lce,dce,pce,hce,mce,yce,Tce,Ece,Ace,Dce,$ce,Fce,Rce,Pce,Oce,Bce,Kce,Vce,Hce,Jce,sle,ile,cle,dle,ple,hle,gle,ble,xle,kle,Tle,Ele,$le,Fle,Rle,Mle,zle,Ule,jle,Xle,Jle,tde,sde,ide,lde,dde,fde,gde,bde,yde,vde,xde,wde,Sde,Cde,Nde,Ade,Fde,Ode,Bde,Vde,Gde,jde,vce,qde,Kde,Xde,Jde,epe,npe,ape,ipe,ope,cpe,lpe,ppe,fpe,bpe,xpe,kpe,Cpe,_pe,Dpe,Rpe,Mpe,zpe,Upe,jpe,Kpe,Zpe,nhe,rhe,ahe,ohe,che,phe,mhe,bhe,xhe,Ihe,She,R$,_he,Dhe,Rhe,Ohe,Lhe,Bhe,zhe,Whe,Xce,Ghe,qhe,Yhe,Qhe,nfe,afe,ofe,ife,lfe,hfe,gfe,bfe,xfe,wfe,Ife,kfe,nle,Qpe,Sfe,Tfe,Efe,$fe,Rfe,Ofe,Bfe,Wfe,Vfe,Ufe,Hfe,Kfe,Zfe,Qfe,tme,rme,ame,ume,cme,lme,hme,gme,vme,Ime,kce,Sme,Tme,_me];for(let e of Eme)op(e);var Nx=G();Nx.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>{try{return WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11]))}catch(e){return!1}});Nx.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Nx.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 X1=ka(JR()),Ame=ka(QR()),Y1=ka(eP()),Z1=X1.default||X1,Dme=Y1.default||Y1,oF=class extends Md{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(iF),_x=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new Rf(this,Er())}write(e,t,n){let r={id:this.dataIdNextNumber++};return this.move(r,e,t,n,1),r}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}move(e,t,n,r,s){let a=this.dataIdNextNumber++;if(r==="string"){let c=t;this.dataIdMap.set(e,{id:a,stringBytes:c,shape:n,dtype:r,memoryOffset:null,refCount:s});return}let o=w.sizeFromShape(n),i=o*w.bytesPerElement(r),u=this.wasm._malloc(i)>>>0;this.dataIdMap.set(e,{id:a,memoryOffset:u,shape:n,dtype:r,refCount:s}),this.wasm.tfjs.registerTensor(a,o,u),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),u)}async read(e){return this.readSync(e)}readSync(e,t,n){let{memoryOffset:r,dtype:s,shape:a,stringBytes:o}=this.dataIdMap.get(e);if(s==="string")return(t==null||t===0)&&(n==null||n>=o.length)?o:o.slice(t,n);t=t||0,n=n||w.sizeFromShape(a);let i=w.bytesPerElement(s),u=this.wasm.HEAPU8.slice(r+t*i,r+n*i);return Rme(u.buffer,s)}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,r){let s;if(n==null)s=this.write(r!=null?r:null,e,t);else{let a=this.dataIdNextNumber++;s={id:a},this.dataIdMap.set(s,{id:a,memoryOffset:n,shape:e,dtype:t,refCount:1});let o=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(a,o,n)}return{dataId:s,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let r=this.wasm.HEAPU8.buffer,{memoryOffset:s}=this.dataIdMap.get(n),a=w.sizeFromShape(e);switch(t){case"float32":return new Float32Array(r,s,a);case"int32":return new Int32Array(r,s,a);case"bool":return new Uint8Array(r,s,a);default:throw new Error(`Unknown dtype ${t}`)}}};function $me(e){return(t,n)=>(w.fetch(e,{credentials:"same-origin"}).then(r=>{r.ok||t.env.a(`failed to load wasm binary file at '${e}'`),r.arrayBuffer().then(s=>{WebAssembly.instantiate(s,t).then(a=>{n(a.instance,a.module)})})}),{})}function J1(e,t,n){if($f!=null)return $f;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),bd!=null&&bd[r]!=null?bd[r]:n+r}async function Fme(){let[e,t]=await Promise.all([G().getAsync("WASM_HAS_SIMD_SUPPORT"),G().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let s={};s.locateFile=(i,u)=>{if(i.endsWith(".worker.js")){let c=Ame.wasmWorkerContents.replace(/\n/g,"\\n"),l=new Blob([c],{type:"application/javascript"});return URL.createObjectURL(l)}return i.endsWith(".wasm")?J1(e,t,fd!=null?fd:u):u+i},I0&&(s.instantiateWasm=$me(J1(e,t,fd!=null?fd:"")));let a=!1;s.onAbort=()=>{if(a||yd)return;yd=!0,r({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"})};let o;t&&e&&$f==null?(s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+Z1.toString()],{type:"text/javascript"}),o=Z1(s)):o=Dme(s),o.then(i=>{a=!0,yd=!1;let u=null;i.tfjs={init:i.cwrap("init",null,[]),initWithThreadsCount:i.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:i.cwrap("get_threads_count","number",[]),registerTensor:i.cwrap("register_tensor",null,["number","number","number"]),disposeData:i.cwrap("dispose_data",u,["number"]),dispose:i.cwrap("dispose",u,[])},n({wasm:i})}).catch(r)})}function Rme(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 Pme=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],$f=null,fd=null,bd={},yd=!1,I0=!1;function Ome(e,t=!1){if(Bx("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),yd)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");$f=e,I0=t}function Mme(e,t=!1){if(yd)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")fd=e;else{bd=e;let n=Pme.filter(r=>bd[r]==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.`)}I0=t}var iF=-1,_x=-1;function Lme(e){iF=e}function Bme(){if(_x===-1)throw new Error("WASM backend not initialized.");return _x}var zme="4.16.0",Wme=2;Jf("wasm",async()=>{let{wasm:e}=await Fme();return new oF(e)},Wme);var Q1="4.16.0",Vme="4.16.0",Ume="4.16.0",Gme="4.16.0",Hme="4.16.0",jme={tfjs:Q1,"tfjs-core":Q1,"tfjs-converter":Vme,"tfjs-backend-cpu":Ume,"tfjs-backend-webgl":Gme,"tfjs-backend-wasm":Hme};var q0={};$h(q0,{AnchorPosition:()=>L0,DrawBox:()=>Wp,DrawBoxOptions:()=>ug,DrawFaceLandmarks:()=>vg,DrawFaceLandmarksOptions:()=>yg,DrawTextField:()=>hu,DrawTextFieldOptions:()=>$l,drawContour:()=>Bs,drawDetections:()=>tge,drawFaceExpressions:()=>oge,drawFaceLandmarks:()=>uge});function Bs(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:r,y:s},a)=>{let o=t[a];e.moveTo(o.x,o.y),e.lineTo(r,s)}),n){let r=t[t.length-1],s=t[0];if(!r||!s)return;e.moveTo(r.x,r.y),e.lineTo(s.x,s.y)}e.stroke()}var T0={};$h(T0,{computeReshapedDimensions:()=>C0,getCenterPoint:()=>ou,isDimensions:()=>og,isEven:()=>ag,isFloat:()=>S0,isTensor:()=>su,isTensor1D:()=>qme,isTensor2D:()=>k0,isTensor3D:()=>zs,isTensor4D:()=>xr,isValidNumber:()=>Yr,isValidProbablitiy:()=>El,range:()=>ys,round:()=>au});var Un=class e{constructor(t,n){if(!Yr(t)||!Yr(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 e(1/this.width,1/this.height)}};function su(e,t){return e instanceof Ne&&e.shape.length===t}function qme(e){return su(e,1)}function k0(e){return su(e,2)}function zs(e){return su(e,3)}function xr(e){return su(e,4)}function S0(e){return e%1!==0}function ag(e){return e%2===0}function au(e,t=2){let n=10**t;return Math.floor(e*n)/n}function og(e){return e&&e.width&&e.height}function C0({width:e,height:t},n){let r=n/Math.max(t,e);return new Un(Math.round(e*r),Math.round(t*r))}function ou(e){return e.reduce((t,n)=>t.add(n),new Ue(0,0)).div(new Ue(e.length,e.length))}function ys(e,t,n){return Array(e).fill(0).map((r,s)=>t+s*n)}function Yr(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function El(e){return Yr(e)&&e>=0&&e<=1}var Ue=class e{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new e(this.x+t.x,this.y+t.y)}sub(t){return new e(this.x-t.x,this.y-t.y)}mul(t){return new e(this.x*t.x,this.y*t.y)}div(t){return new e(this.x/t.x,this.y/t.y)}abs(){return new e(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new e(Math.floor(this.x),Math.floor(this.y))}};var on=class e{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(Yr)}static assertIsValidBox(t,n,r=!1){if(!e.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!r&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let r=t||{},s=[r.left,r.top,r.right,r.bottom].every(Yr),a=[r.x,r.y,r.width,r.height].every(Yr);if(!a&&!s)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[o,i,u,c]=a?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];e.assertIsValidBox({x:o,y:i,width:u,height:c},"Box.constructor",n),this._x=o,this._y=i,this._width=u,this._height=c}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 Ue(this.left,this.top)}get topRight(){return new Ue(this.right,this.top)}get bottomLeft(){return new Ue(this.left,this.bottom)}get bottomRight(){return new Ue(this.right,this.bottom)}round(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.round(a));return new e({x:t,y:n,width:r,height:s})}floor(){let[t,n,r,s]=[this.x,this.y,this.width,this.height].map(a=>Math.floor(a));return new e({x:t,y:n,width:r,height:s})}toSquare(){let{x:t,y:n,width:r,height:s}=this,a=Math.abs(r-s);return rn&&(i=-p+n+r,p=n),d>t&&(u=-d+t+s,d=t),c<1&&(u=2-c,c=1),l<1&&(u=2-l,l=1),{dy:o,edy:u,dx:a,edx:i,y:l,ey:d,x:c,ex:p,w:r,h:s}}calibrate(t){return new e({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var iu=class extends on{constructor(t,n,r,s,a=!1){super({left:t,top:n,right:r,bottom:s},a)}};var uu=class e{constructor(t,n,r,s,a){this._imageDims=new Un(a.width,a.height),this._score=t,this._classScore=n,this._className=r,this._box=new on(s).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 on(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new e(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var Tt=class e extends uu{constructor(t,n,r){super(t,t,"",n,r)}forSize(t,n){let{score:r,relativeBox:s,imageDims:a}=super.forSize(t,n);return new e(r,s,a)}};function N0(e,t,n=!0){let r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),s=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),a=r*s;return n?a/(e.area+t.area-a):a/Math.min(e.area,t.area)}function _0(e){let t=e.map(i=>i.x),n=e.map(i=>i.y),r=t.reduce((i,u)=>uuii({score:o,boxIndex:i})).sort((o,i)=>o.score-i.score).map(o=>o.boxIndex),a=[];for(;s.length>0;){let o=s.pop();a.push(o);let i=s,u=[];for(let c=0;cu[l]<=n)}return a}function Zr(e,t){return O(()=>{let[n,r,s]=t,a=vn([...e.shape.slice(0,3),1],n,"float32"),o=vn([...e.shape.slice(0,3),1],r,"float32"),i=vn([...e.shape.slice(0,3),1],s,"float32"),u=tt([a,o,i],3);return le(e,u)})}function A0(e,t=!1){return O(()=>{let[n,r]=e.shape.slice(1);if(n===r)return e;let s=Math.abs(n-r),a=Math.round(s*(t?.5:1)),o=n>r?2:1,i=d=>{let h=e.shape.slice();return h[o]=d,vn(h,0,"float32")},u=i(a),c=s-u.shape[o],p=[t&&c?i(c):null,e,u].filter(d=>!!d).map(d=>ae(d,"float32"));return tt(p,o)})}function Kme(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let r=Math.floor(Math.random()*(n+1)),s=t[n];t[n]=t[r],t[r]=s}return t}function Bp(e){return 1/(1+Math.exp(-e))}function Xme(e){return Math.log(e/(1-e))}var cu=class extends on{constructor(t,n,r,s,a=!1){super({x:t,y:n,width:r,height:s},a)}};var Yme=.5,Zme=.43,Jme=.45,or=class{constructor(t,n,r=new Ue(0,0)){let{width:s,height:a}=n;this._imgDims=new Un(s,a),this._shift=r,this._positions=t.map(o=>o.mul(new Ue(s,a)).add(r))}get shift(){return new Ue(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 Ue(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 Ue(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let a=t instanceof Tt?t.box.floor():new on(t);return this.shiftBy(a.x,a.y).align(null,n)}let{useDlibAlignment:r,minBoxPadding:s}={useDlibAlignment:!1,minBoxPadding:.2,...n};return r?this.alignDlib():this.alignMinBbox(s)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,r,s]=t,a=p=>s.sub(p).magnitude(),o=(a(n)+a(r))/2,i=Math.floor(o/Jme),u=ou(t),c=Math.floor(Math.max(0,u.x-Yme*i)),l=Math.floor(Math.max(0,u.y-Zme*i));return new cu(c,l,Math.min(i,this.imageWidth+c),Math.min(i,this.imageHeight+l))}alignMinBbox(t){let n=_0(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var D0=class extends or{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],ou([t[3],t[4]])]}};var lu=class extends or{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(ou)}};var Al=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?` (${au(this.distance)})`:""}`}};var Dl=class extends on{static assertIsValidLabeledBox(t,n){if(on.assertIsValidBox(t,n),!Yr(t.label))throw new Error(`${n} - expected property label (${t.label}) to be a number`)}constructor(t,n){super(t),this._label=n}get label(){return this._label}};var Ba=class e{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(r=>!(r 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(r=>new Float32Array(r));return new e(t.label,n)}};var $0=class extends Dl{static assertIsValidPredictedBox(t,n){if(Dl.assertIsValidLabeledBox(t,n),!El(t.score)||!El(t.classScore))throw new Error(`${n} - expected properties score (${t.score}) and (${t.classScore}) to be a number between [0, 1]`)}constructor(t,n,r,s){super(t,n),this._score=r,this._classScore=s}get score(){return this._score}get classScore(){return this._classScore}};function vs(e){return e.detection instanceof Tt}function du(e,t){return{...e,...{detection:t}}}function F0(){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 zp(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function ig(e){let t="";if(!e&&zp())try{e=AR("fs")}catch(r){t=r.toString()}return{readFile:e?r=>new Promise((s,a)=>{e.readFile(r,(o,i)=>o?a(o):s(i))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function R0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,r=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},s=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},a=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},o=global.fetch,i=ig();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:r,createImageElement:s,createVideoElement:a,fetch:o,...i}}function P0(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var un;function Qme(){if(!un)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return un}function O0(e){un=e}function M0(){return P0()?O0(F0()):zp()?O0(R0()):null}function ege(e){if(un||M0(),!un)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=un.Canvas,Image:n=un.Image}=e;un.Canvas=t,un.Image=n,un.createCanvasElement=e.createCanvasElement||(()=>new t),un.createImageElement=e.createImageElement||(()=>new n),un.ImageData=e.ImageData||un.ImageData,un.Video=e.Video||un.Video,un.fetch=e.fetch||un.fetch,un.readFile=e.readFile||un.readFile}var nt={getEnv:Qme,setEnv:O0,initialize:M0,createBrowserEnv:F0,createFileSystem:ig,createNodejsEnv:R0,monkeyPatch:ege,isBrowser:P0,isNodejs:zp};M0();function pu(e){return!nt.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Gn(e){let{Canvas:t,CanvasRenderingContext2D:n}=nt.getEnv();if(e instanceof n)return e;let r=pu(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let s=r.getContext("2d",{willReadFrequently:!0});if(!s)throw new Error("resolveContext2d - canvas 2d context is null");return s}var L0=(s=>(s.TOP_LEFT="TOP_LEFT",s.TOP_RIGHT="TOP_RIGHT",s.BOTTOM_LEFT="BOTTOM_LEFT",s.BOTTOM_RIGHT="BOTTOM_RIGHT",s))(L0||{}),$l=class{constructor(t={}){let{anchorPosition:n,backgroundColor:r,fontColor:s,fontSize:a,fontStyle:o,padding:i}=t;this.anchorPosition=n||"TOP_LEFT",this.backgroundColor=r||"rgba(0, 0, 0, 0.5)",this.fontColor=s||"rgba(255, 255, 255, 1)",this.fontSize=a||14,this.fontStyle=o||"Georgia",this.padding=i||4}},hu=class e{constructor(t,n,r={}){this.text=typeof t=="string"?[t]:t instanceof e?t.text:t,this.anchor=n,this.options=new $l(r)}measureWidth(t){let{padding:n}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,s)=>r{let f=u+p.x,g=u+p.y+(h+1)*o;r.fillText(d,f,g)})}};var ug=class{constructor(t={}){let{boxColor:n,lineWidth:r,label:s,drawLabelOptions:a}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=r||2,this.label=s;let o={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new $l({...o,...a})}},Wp=class{constructor(t,n={}){this.box=new on(t),this.options=new ug(n)}draw(t){let n=Gn(t),{boxColor:r,lineWidth:s}=this.options,{x:a,y:o,width:i,height:u}=this.box;n.strokeStyle=r,n.lineWidth=s,n.strokeRect(a,o,i,u);let{label:c}=this.options;c&&new hu([c],{x:a-s/2,y:o},this.options.drawLabelOptions).draw(t)}};function tge(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof Tt?r.score:vs(r)?r.detection.score:void 0,a=r instanceof Tt?r.box:vs(r)?r.detection.box:new on(r),o=s?`${au(s)}`:void 0;new Wp(a,{label:o}).draw(e)})}function Vp(e){let{Image:t,Video:n}=nt.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function B0(e){return new Promise((t,n)=>{(e instanceof nt.getEnv().Canvas||Vp(e))&&t(null);function r(a){a.currentTarget&&(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),n(a))}function s(a){a.currentTarget&&(a.currentTarget.removeEventListener("load",s),a.currentTarget.removeEventListener("error",r),t(a))}e.addEventListener("load",s),e.addEventListener("error",r)})}function z0(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let r=new FileReader;r.onload=()=>{typeof r.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let s=nt.getEnv().createImageElement();s.onload=()=>t(s),s.onerror=n,s.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function fu(e){let{Image:t,Video:n}=nt.getEnv();return e instanceof t?new Un(e.naturalWidth,e.naturalHeight):e instanceof n?new Un(e.videoWidth,e.videoHeight):new Un(e.width,e.height)}function mu({width:e,height:t}){let{createCanvasElement:n}=nt.getEnv(),r=n();return r.width=e,r.height=t,r}function Up(e,t){let{ImageData:n}=nt.getEnv();if(!(e instanceof n)&&!Vp(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:s}=t||fu(e),a=mu({width:r,height:s});return e instanceof n?Gn(a).putImageData(e,0,0):Gn(a).drawImage(e,0,0,r,s),a}async function W0(e,t){let n=t||nt.getEnv().createCanvasElement(),[r,s,a]=e.shape.slice(xr(e)?1:0),o=O(()=>e.as3D(r,s,a).toInt());return await Yi.toPixels(o,n),o.dispose(),n}function cg(e){let{Image:t,Canvas:n,Video:r}=nt.getEnv();return e instanceof t||e instanceof n||e instanceof r}function V0(e,t,n=!1){let{Image:r,Canvas:s}=nt.getEnv();if(!(e instanceof r||e instanceof s))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return mu({width:1,height:1});let a=fu(e),o=t/Math.max(a.height,a.width),i=o*a.width,u=o*a.height,c=mu({width:t,height:t}),l=e instanceof s?e:Up(e),p=Math.abs(i-u)/2,d=n&&i0&&l.height>0&&Gn(c).drawImage(l,d,h,i,u),c}var xs=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((r,s)=>{if(zs(r)){this._imageTensors[s]=r,this._inputDimensions[s]=r.shape;return}if(xr(r)){let o=r.shape[0];if(o!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${o} passed, but not supported in input array`);this._imageTensors[s]=r,this._inputDimensions[s]=r.shape.slice(1);return}let a=r instanceof nt.getEnv().Canvas?r:Up(r);this._canvases[s]=a,this._inputDimensions[s]=[a.height,a.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 ys(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),r=this.getInputHeight(t);return C0({width:n,height:r},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let r=ys(this.batchSize,0,1).map(a=>{let o=this.getInput(a);if(o instanceof Ne){let i=xr(o)?o:Gt(o);return i=A0(i,n),(i.shape[1]!==t||i.shape[2]!==t)&&(i=er.resizeBilinear(i,[t,t],!1,!1)),i.as3D(t,t,3)}if(o instanceof nt.getEnv().Canvas)return Yi.fromPixels(V0(o,t,n));throw new Error(`toBatchTensor - at batchIdx ${a}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${o}`)});return Dt(r.map(a=>ae(a,"float32"))).as4D(this.batchSize,t,t,3)})}};async function vt(e){if(e instanceof xs)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=s=>Array.isArray(e)?` at input index ${s}:`:"",r=t.map(pu);return r.forEach((s,a)=>{if(!cg(s)&&!zs(s)&&!xr(s))throw typeof t[a]=="string"?new Error(`toNetInput -${n(a)} string passed, but could not resolve HTMLElement for element id ${t[a]}`):new Error(`toNetInput -${n(a)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(xr(s)){let o=s.shape[0];if(o!==1)throw new Error(`toNetInput -${n(a)} tf.Tensor4D with batchSize ${o} passed, but not supported in input array`)}}),await Promise.all(r.map(s=>cg(s)&&B0(s))),new xs(r,Array.isArray(e))}async function Fl(e,t){let{Canvas:n}=nt.getEnv(),r=e;if(!(e instanceof n)){let o=await vt(e);if(o.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let i=o.getInput(0);r=i instanceof n?i:await W0(i)}let s=Gn(r);return t.map(o=>o instanceof Tt?o.forSize(r.width,r.height).box.floor():o).map(o=>o.clipAtImageBorders(r.width,r.height)).map(({x:o,y:i,width:u,height:c})=>{let l=mu({width:u,height:c});return u>0&&c>0&&Gn(l).putImageData(s.getImageData(o,i,u,c),0,0),l})}async function Rl(e,t){if(!zs(e)&&!xr(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(xr(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{let[n,r,s]=e.shape.slice(xr(e)?1:0);return t.map(i=>i instanceof Tt?i.forSize(r,n).box:i).map(i=>i.clipAtImageBorders(r,n)).filter(i=>i.width>0&&i.height>0).map(({x:i,y:u,width:c,height:l})=>Ki(e.as3D(n,r,s),[u,i,0],[l,c,s]))})}async function Ws(e,t){let{fetch:n}=nt.getEnv(),r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function nge(e){let t=await Ws(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 z0(n)}async function U0(e){return(await Ws(e)).json()}async function rge(e){return new Float32Array(await(await Ws(e)).arrayBuffer())}function uF(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=nt.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=n,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(e),r.play()})}async function sge(e){let t=await Ws(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 uF(n)}function lg(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(r,"");let s=e.split("/").filter(i=>i),a=e.endsWith(".json")?s[s.length-1]:n,o=r+(e.endsWith(".json")?s.slice(0,s.length-1):s).join("/");return o=e.startsWith("/")?`/${o}`:o,{modelBaseUri:o,manifestUri:o==="/"?`/${a}`:`${o}/${a}`}}async function G0(e,t){let{manifestUri:n,modelBaseUri:r}=lg(e,t),s=await U0(n);return jt.loadWeights(s,r)}function age(e,t,n=!1){let{width:r,height:s}=n?fu(t):t;return e.width=r,e.height=s,{width:r,height:s}}var cn=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:r}=this.traversePropertyPath(t);return n[r]}reassignParamFromPath(t,n){let{obj:r,objProp:s}=this.traversePropertyPath(t);r[s].dispose(),r[s]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof pa)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof pa))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let r=yn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,r)})}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 G0(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}=nt.getEnv(),{manifestUri:r,modelBaseUri:s}=lg(t,this.getDefaultModelName()),a=c=>Promise.all(c.map(l=>n(l).then(p=>typeof p=="string"?Buffer.from(p):p.buffer))),o=jt.weightsLoaderFactory(a),i=JSON.parse((await n(r)).toString()),u=await o(i,s);this.loadFromWeightMap(u)}loadFromWeightMap(t){let{paramMappings:n,params:r}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=r}extractWeights(t){let{paramMappings:n,params:r}=this.extractParams(t);this._paramMappings=n,this._params=r}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((a,o)=>{if(!a.nextObj.hasOwnProperty(o))throw new Error(`traversePropertyPath - object does not have property ${o}, for path ${t}`);return{obj:a.nextObj,objProp:o,nextObj:a.nextObj[o]}},{nextObj:this.params}),{obj:r,objProp:s}=n;if(!r||!s||!(r[s]instanceof Ne))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:r,objProp:s}}};function Hn(e,t,n){return O(()=>{let r=Fa(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=X(r,t.bias),r})}function dg(e,t,n=!1){return O(()=>{let r=Ke(n?X(Ft(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Hn(e,t.conv0,[2,2])),s=Hn(r,t.conv1,[1,1]),a=Ke(X(r,s)),o=Hn(a,t.conv2,[1,1]);return Ke(X(r,X(s,o)))})}function Gp(e,t,n=!1,r=!0){return O(()=>{let s=Ke(n?X(Ft(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):Hn(e,t.conv0,r?[2,2]:[1,1])),a=Hn(s,t.conv1,[1,1]),o=Ke(X(s,a)),i=Hn(o,t.conv2,[1,1]),u=Ke(X(s,X(a,i))),c=Hn(u,t.conv3,[1,1]);return Ke(X(s,X(a,X(i,c))))})}function gu(e,t,n="same",r=!1){return O(()=>{let s=X(Ft(e,t.filters,[1,1],n),t.bias);return r?Ke(s):s})}function Dn(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function Pl(e,t){return(n,r,s,a)=>{let o=Rr(e(n*r*s*s),[s,s,n,r]),i=He(e(r));return t.push({paramPath:`${a}/filters`},{paramPath:`${a}/bias`}),{filters:o,bias:i}}}function pg(e,t){return(n,r,s)=>{let a=Dr(e(n*r),[n,r]),o=He(e(r));return t.push({paramPath:`${s}/weights`},{paramPath:`${s}/bias`}),{weights:a,bias:o}}}var Hp=class{constructor(t,n,r){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=r}};function Ol(e,t){return(n,r,s)=>{let a=Rr(e(9*n),[3,3,n,1]),o=Rr(e(n*r),[1,1,n,r]),i=He(e(r));return t.push({paramPath:`${s}/depthwise_filter`},{paramPath:`${s}/pointwise_filter`},{paramPath:`${s}/bias`}),new Hp(a,o,i)}}function Ml(e){return t=>{let n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),s=e(`${t}/bias`,1);return new Hp(n,r,s)}}function ir(e,t){return(n,r,s)=>{let a=e[n];if(!su(a,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${a}`);return t.push({originalPath:n,paramPath:s||n}),a}}function $n(e){let t=e;function n(s){let a=t.slice(0,s);return t=t.slice(s),a}function r(){return t}return{extractWeights:n,getRemainingWeights:r}}function hg(e,t){let n=Pl(e,t),r=Ol(e,t);function s(o,i,u,c=!1){let l=c?n(o,i,3,`${u}/conv0`):r(o,i,`${u}/conv0`),p=r(i,i,`${u}/conv1`),d=r(i,i,`${u}/conv2`);return{conv0:l,conv1:p,conv2:d}}function a(o,i,u,c=!1){let{conv0:l,conv1:p,conv2:d}=s(o,i,u,c),h=r(i,i,`${u}/conv3`);return{conv0:l,conv1:p,conv2:d,conv3:h}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:a}}function cF(e){let t=[],{extractWeights:n,getRemainingWeights:r}=$n(e),{extractDenseBlock4Params:s}=hg(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2"),u=s(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i,dense3:u}}}function fg(e){return t=>{let n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function mg(e,t){let n=ir(e,t),r=fg(n),s=Ml(n);function a(i,u=!1){let c=u?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),p=s(`${i}/conv2`);return{conv0:c,conv1:l,conv2:p}}function o(i,u=!1){let c=u?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),p=s(`${i}/conv2`),d=s(`${i}/conv3`);return{conv0:c,conv1:l,conv2:p,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:o}}function lF(e){let t=[],{extractDenseBlock4Params:n}=mg(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return Dn(e,t),{params:r,paramMappings:t}}var Ll=class extends cn{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let r=ae(t.toBatchTensor(112,!0),"float32"),a=Zr(r,[122.782,117.001,104.298]).div(255),o=Gp(a,n.dense0,!0);return o=Gp(o,n.dense1),o=Gp(o,n.dense2),o=Gp(o,n.dense3),o=br(o,[7,7],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await vt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return lF(t)}extractParams(t){return cF(t)}};function jp(e,t){return O(()=>X(Fe(e,t.weights),t.bias))}function dF(e,t,n){let r=[],{extractWeights:s,getRemainingWeights:a}=$n(e),i=pg(s,r)(t,n,"fc");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:r,params:{fc:i}}}function pF(e){let t=[],n=ir(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:r("fc")};return Dn(e,t),{params:s,paramMappings:t}}function gg(e){let t={},n={};return Object.keys(e).forEach(r=>{let s=r.startsWith("fc")?n:t;s[r]=e[r]}),{featureExtractorMap:t,classifierMap:n}}var Bl=class extends cn{constructor(t,n){super(t),this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=t instanceof xs?this.faceFeatureExtractor.forwardInput(t):t;return jp(r.as2D(r.shape[0],-1),n.fc)})}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return dF(t,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=gg(t);return this.faceFeatureExtractor.loadFromWeightMap(n),pF(r)}extractParams(t){let n=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*n+r,a=t.slice(0,t.length-s),o=t.slice(t.length-s);return this.faceFeatureExtractor.extractWeights(a),this.extractClassifierParams(o)}};var H0=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Vs=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}`);H0.forEach((n,r)=>{this[n]=t[r]})}asSortedArray(){return H0.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var qp=class extends Bl{constructor(t=new Ll){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Kr(this.runNet(t)))}async forward(t){return this.forwardInput(await vt(t))}async predictExpressions(t){let n=await vt(t),r=await this.forwardInput(n),s=await Promise.all(pt(r).map(async o=>{let i=o.dataSync();return o.dispose(),i}));r.dispose();let a=s.map(o=>new Vs(o));return n.isBatchInput?a:a[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function j0(e){return e.expressions instanceof Vs}function bg(e,t){return{...e,...{expressions:t}}}function oge(e,t,n=.1,r){(Array.isArray(t)?t:[t]).forEach(a=>{let o=a instanceof Vs?a:j0(a)?a.expressions:void 0;if(!o)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let u=o.asSortedArray().filter(p=>p.probability>n),c=vs(a)?a.detection.box.bottomLeft:r||new Ue(0,0);new hu(u.map(p=>`${p.expression} (${au(p.probability)})`),c).draw(e)})}function bu(e){return vs(e)&&e.landmarks instanceof or&&e.unshiftedLandmarks instanceof or&&e.alignedRect instanceof Tt}function ige(e){let t=u=>u*180/Math.PI,n=(u,c)=>Math.sqrt((u.x-c.x)**2+(u.y-c.y)**2),r={roll:void 0,pitch:void 0,yaw:void 0},s=(u,c,l)=>{let p=Math.floor(u.x-c.x),d=Math.floor(c.x-l.x);return p-d},a=(u,c)=>{let l=Math.hypot(c.x-u.x,c.y-u.y),p=c.y-u.y,d=Math.asin(p/l),h=t(d),f=Math.floor(90-h),g=c.x-u.x<0?-1:1;return f*g},o=(u,c,l)=>{let p=n(u,l),d=new Ue((u.x+l.x)/2,(u.y+l.y)/2),h=n(c,d),f=Math.atan(h/p),g=Math.floor(t(f)),m=d.y-c.y<0?-1:1;return g*m};if(!e||!e.positions||e.positions.length!==68)return r;let i=e.positions;return r.roll=a(i[27],i[66]),r.pitch=o(i[14],i[30],i[2]),r.yaw=s(i[14],i[33],i[2]),r}function zl(e,t){let{box:n}=e.detection,r=t.shiftBy(n.x,n.y),s=r.align(),{imageDims:a}=e.detection,o=new Tt(e.detection.score,s.rescale(a.reverse()),a),i=ige(t);return{...e,...{landmarks:r,unshiftedLandmarks:t,alignedRect:o,angle:i}}}var yg=class{constructor(t={}){let{drawLines:n=!0,drawPoints:r=!0,lineWidth:s,lineColor:a,pointSize:o,pointColor:i}=t;this.drawLines=n,this.drawPoints=r,this.lineWidth=s||1,this.pointSize=o||2,this.lineColor=a||"rgba(0, 255, 255, 1)",this.pointColor=i||"rgba(255, 0, 255, 1)"}},vg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new yg(n)}draw(t){let n=Gn(t),{drawLines:r,drawPoints:s,lineWidth:a,lineColor:o,pointSize:i,pointColor:u}=this.options;if(r&&this.faceLandmarks instanceof lu&&(n.strokeStyle=o,n.lineWidth=a,Bs(n,this.faceLandmarks.getJawOutline()),Bs(n,this.faceLandmarks.getLeftEyeBrow()),Bs(n,this.faceLandmarks.getRightEyeBrow()),Bs(n,this.faceLandmarks.getNose()),Bs(n,this.faceLandmarks.getLeftEye(),!0),Bs(n,this.faceLandmarks.getRightEye(),!0),Bs(n,this.faceLandmarks.getMouth(),!0)),s){n.strokeStyle=u,n.fillStyle=u;let c=l=>{n.beginPath(),n.arc(l.x,l.y,i,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(c)}}};function uge(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof or?r:bu(r)?r.landmarks:void 0;if(!s)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new vg(s).draw(e)})}var hF="1.7.12";function dge(e,t){let n=Pl(e,t),r=Ol(e,t);function s(o,i,u){let c=r(o,i,`${u}/separable_conv0`),l=r(i,i,`${u}/separable_conv1`),p=n(o,i,1,`${u}/expansion_conv`);return{separable_conv0:c,separable_conv1:l,expansion_conv:p}}function a(o,i){let u=r(o,o,`${i}/separable_conv0`),c=r(o,o,`${i}/separable_conv1`),l=r(o,o,`${i}/separable_conv2`);return{separable_conv0:u,separable_conv1:c,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:a}}function fF(e,t){let n=[],{extractWeights:r,getRemainingWeights:s}=$n(e),{extractConvParams:a,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:u}=dge(r,n),c=a(3,32,3,"entry_flow/conv_in"),l=i(32,64,"entry_flow/reduction_block_0"),p=i(64,128,"entry_flow/reduction_block_1"),d={conv_in:c,reduction_block_0:l,reduction_block_1:p},h={};ys(t,0,1).forEach(b=>{h[`main_block_${b}`]=u(128,`middle_flow/main_block_${b}`)});let f=i(128,256,"exit_flow/reduction_block"),g=o(256,512,"exit_flow/separable_conv"),m={reduction_block:f,separable_conv:g};if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:n,params:{entry_flow:d,middle_flow:h,exit_flow:m}}}function pge(e,t){let n=ir(e,t),r=fg(n),s=Ml(n);function a(i){let u=s(`${i}/separable_conv0`),c=s(`${i}/separable_conv1`),l=r(`${i}/expansion_conv`);return{separable_conv0:u,separable_conv1:c,expansion_conv:l}}function o(i){let u=s(`${i}/separable_conv0`),c=s(`${i}/separable_conv1`),l=s(`${i}/separable_conv2`);return{separable_conv0:u,separable_conv1:c,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}}function mF(e,t){let n=[],{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}=pge(e,n),i=r("entry_flow/conv_in"),u=a("entry_flow/reduction_block_0"),c=a("entry_flow/reduction_block_1"),l={conv_in:i,reduction_block_0:u,reduction_block_1:c},p={};ys(t,0,1).forEach(g=>{p[`main_block_${g}`]=o(`middle_flow/main_block_${g}`)});let d=a("exit_flow/reduction_block"),h=s("exit_flow/separable_conv"),f={reduction_block:d,separable_conv:h};return Dn(e,n),{params:{entry_flow:l,middle_flow:p,exit_flow:f},paramMappings:n}}function gF(e,t,n){return X(Ft(e,t.filters,n,"same"),t.bias)}function K0(e,t,n=!0){let r=n?Ke(e):e;return r=Hn(r,t.separable_conv0,[1,1]),r=Hn(Ke(r),t.separable_conv1,[1,1]),r=Rt(r,[3,3],[2,2],"same"),r=X(r,gF(e,t.expansion_conv,[2,2])),r}function hge(e,t){let n=Hn(Ke(e),t.separable_conv0,[1,1]);return n=Hn(Ke(n),t.separable_conv1,[1,1]),n=Hn(Ke(n),t.separable_conv2,[1,1]),n=X(n,e),n}var xg=class extends cn{constructor(t){super("TinyXception"),this._numMainBlocks=t}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyXception - load model before inference");return O(()=>{let r=ae(t.toBatchTensor(112,!0),"float32"),a=Zr(r,[122.782,117.001,104.298]).div(255),o=Ke(gF(a,n.entry_flow.conv_in,[2,2]));return o=K0(o,n.entry_flow.reduction_block_0,!1),o=K0(o,n.entry_flow.reduction_block_1),ys(this._numMainBlocks,0,1).forEach(i=>{o=hge(o,n.middle_flow[`main_block_${i}`])}),o=K0(o,n.exit_flow.reduction_block),o=Ke(Hn(o,n.exit_flow.separable_conv,[1,1])),o})}async forward(t){return this.forwardInput(await vt(t))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(t){return mF(t,this._numMainBlocks)}extractParams(t){return fF(t,this._numMainBlocks)}};function bF(e){let t=[],{extractWeights:n,getRemainingWeights:r}=$n(e),s=pg(n,t),a=s(512,1,"fc/age"),o=s(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:a,gender:o}}}}function yF(e){let t=[],n=ir(e,t);function r(a){let o=n(`${a}/weights`,2),i=n(`${a}/bias`,1);return{weights:o,bias:i}}let s={fc:{age:r("fc/age"),gender:r("fc/gender")}};return Dn(e,t),{params:s,paramMappings:t}}var wg=(n=>(n.FEMALE="female",n.MALE="male",n))(wg||{});var Kp=class extends cn{constructor(t=new xg(2)){super("AgeGenderNet"),this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(t){let{params:n}=this;if(!n)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=t instanceof xs?this.faceFeatureExtractor.forwardInput(t):t,s=br(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),a=jp(s,n.fc.age).as1D(),o=jp(s,n.fc.gender);return{age:a,gender:o}})}forwardInput(t){return O(()=>{let{age:n,gender:r}=this.runNet(t);return{age:n,gender:Kr(r)}})}async forward(t){return this.forwardInput(await vt(t))}async predictAgeAndGender(t){let n=await vt(t),r=await this.forwardInput(n),s=pt(r.age),a=pt(r.gender),o=s.map((u,c)=>({ageTensor:u,genderTensor:a[c]})),i=await Promise.all(o.map(async({ageTensor:u,genderTensor:c})=>{let l=u.dataSync()[0],p=c.dataSync()[0],d=p>.5,h=d?"male":"female",f=d?p:1-p;return u.dispose(),c.dispose(),{age:l,gender:h,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),n.isBatchInput?i:i[0]}getDefaultModelName(){return"age_gender_model"}dispose(t=!0){this.faceFeatureExtractor.dispose(t),super.dispose(t)}loadClassifierParams(t){let{params:n,paramMappings:r}=this.extractClassifierParams(t);this._params=n,this._paramMappings=r}extractClassifierParams(t){return bF(t)}extractParamsFromWeightMap(t){let{featureExtractorMap:n,classifierMap:r}=gg(t);return this.faceFeatureExtractor.loadFromWeightMap(n),yF(r)}extractParams(t){let r=t.slice(0,t.length-1539),s=t.slice(t.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var Wl=class extends Bl{postProcess(t,n,r){let s=r.map(({width:o,height:i})=>{let u=n/Math.max(i,o);return{width:o*u,height:i*u}}),a=s.length;return O(()=>{let o=(p,d)=>Dt([vn([68],p,"float32"),vn([68],d,"float32")],1).as2D(1,136).as1D(),i=(p,d)=>{let{width:h,height:f}=s[p];return d(h,f)?Math.abs(h-f)/2:0},u=p=>i(p,(d,h)=>di(p,(d,h)=>ho(u(d),c(d))))).div(Dt(Array.from(Array(a),(p,d)=>o(s[d].width,s[d].height))))})}forwardInput(t){return O(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([r,s])=>({height:r,width:s})))})}async forward(t){return this.forwardInput(await vt(t))}async detectLandmarks(t){let n=await vt(t),r=O(()=>pt(this.forwardInput(n))),s=await Promise.all(r.map(async(a,o)=>{let i=Array.from(a.dataSync()),u=i.filter((l,p)=>ag(p)),c=i.filter((l,p)=>!ag(p));return new lu(Array(68).fill(0).map((l,p)=>new Ue(u[p],c[p])),{height:n.getInputHeight(o),width:n.getInputWidth(o)})}));return r.forEach(a=>a.dispose()),n.isBatchInput?s:s[0]}getClassifierChannelsOut(){return 136}};var yu=class extends Wl{constructor(t=new Ll){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function vF(e){let t=[],{extractDenseBlock3Params:n}=mg(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return Dn(e,t),{params:r,paramMappings:t}}function xF(e){let t=[],{extractWeights:n,getRemainingWeights:r}=$n(e),{extractDenseBlock3Params:s}=hg(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:a,dense1:o,dense2:i}}}var Ig=class extends cn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let r=ae(t.toBatchTensor(112,!0),"float32"),a=Zr(r,[122.782,117.001,104.298]).div(255),o=dg(a,n.dense0,!0);return o=dg(o,n.dense1),o=dg(o,n.dense2),o=br(o,[14,14],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await vt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return vF(t)}extractParams(t){return xF(t)}};var Xp=class extends Wl{constructor(t=new Ig){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var X0=class extends yu{};function wF(e,t){return X(z(e,t.weights),t.biases)}function Y0(e,t,n,r,s="same"){let{filters:a,bias:o}=t.conv,i=Ft(e,a,n,s);return i=X(i,o),i=wF(i,t.scale),r?Ke(i):i}function IF(e,t){return Y0(e,t,[1,1],!0)}function Z0(e,t){return Y0(e,t,[1,1],!1)}function kg(e,t){return Y0(e,t,[2,2],!0,"valid")}function fge(e,t){function n(i,u,c){let l=e(i),p=l.length/(u*c*c);if(S0(p))throw new Error(`depth has to be an integer: ${p}, weights.length: ${l.length}, numFilters: ${u}, filterSize: ${c}`);return O(()=>Re(Rr(l,[u,p,c,c]),[2,3,1,0]))}function r(i,u,c,l){let p=n(i,u,c),d=He(e(u));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:p,bias:d}}function s(i,u){let c=He(e(i)),l=He(e(i));return t.push({paramPath:`${u}/weights`},{paramPath:`${u}/biases`}),{weights:c,biases:l}}function a(i,u,c,l){let p=r(i,u,c,`${l}/conv`),d=s(u,`${l}/scale`);return{conv:p,scale:d}}function o(i,u,c,l,p=!1){let d=a((p?.5:1)*i,u,c,`${l}/conv1`),h=a(i,u,c,`${l}/conv2`);return{conv1:d,conv2:h}}return{extractConvLayerParams:a,extractResidualLayerParams:o}}function kF(e){let{extractWeights:t,getRemainingWeights:n}=$n(e),r=[],{extractConvLayerParams:s,extractResidualLayerParams:a}=fge(t,r),o=s(4704,32,7,"conv32_down"),i=a(9216,32,3,"conv32_1"),u=a(9216,32,3,"conv32_2"),c=a(9216,32,3,"conv32_3"),l=a(36864,64,3,"conv64_down",!0),p=a(36864,64,3,"conv64_1"),d=a(36864,64,3,"conv64_2"),h=a(36864,64,3,"conv64_3"),f=a(147456,128,3,"conv128_down",!0),g=a(147456,128,3,"conv128_1"),m=a(147456,128,3,"conv128_2"),b=a(589824,256,3,"conv256_down",!0),y=a(589824,256,3,"conv256_1"),v=a(589824,256,3,"conv256_2"),x=a(589824,256,3,"conv256_down_out"),k=O(()=>Re(Dr(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:o,conv32_1:i,conv32_2:u,conv32_3:c,conv64_down:l,conv64_1:p,conv64_2:d,conv64_3:h,conv128_down:f,conv128_1:g,conv128_2:m,conv256_down:b,conv256_1:y,conv256_2:v,conv256_down_out:x,fc:k},paramMappings:r}}function mge(e,t){let n=ir(e,t);function r(o){let i=n(`${o}/scale/weights`,1),u=n(`${o}/scale/biases`,1);return{weights:i,biases:u}}function s(o){let i=n(`${o}/conv/filters`,4),u=n(`${o}/conv/bias`,1),c=r(o);return{conv:{filters:i,bias:u},scale:c}}function a(o){return{conv1:s(`${o}/conv1`),conv2:s(`${o}/conv2`)}}return{extractConvLayerParams:s,extractResidualLayerParams:a}}function SF(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=mge(e,t),s=n("conv32_down"),a=r("conv32_1"),o=r("conv32_2"),i=r("conv32_3"),u=r("conv64_down"),c=r("conv64_1"),l=r("conv64_2"),p=r("conv64_3"),d=r("conv128_down"),h=r("conv128_1"),f=r("conv128_2"),g=r("conv256_down"),m=r("conv256_1"),b=r("conv256_2"),y=r("conv256_down_out"),{fc:v}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!k0(v))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${v}`);let x={conv32_down:s,conv32_1:a,conv32_2:o,conv32_3:i,conv64_down:u,conv64_1:c,conv64_2:l,conv64_3:p,conv128_down:d,conv128_1:h,conv128_2:f,conv256_down:g,conv256_1:m,conv256_2:b,conv256_down_out:y,fc:v};return Dn(e,t),{params:x,paramMappings:t}}function Jr(e,t){let n=IF(e,t.conv1);return n=Z0(n,t.conv2),n=X(n,e),n=Ke(n),n}function Yp(e,t){let n=kg(e,t.conv1);n=Z0(n,t.conv2);let r=br(e,2,2,"valid"),s=kt(r.shape),a=r.shape[3]!==n.shape[3];if(r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2]){let i=[...n.shape];i[1]=1;let u=kt(i);n=tt([n,u],1);let c=[...n.shape];c[2]=1;let l=kt(c);n=tt([n,l],2)}return r=a?tt([r,s],3):r,n=X(r,n),n=Ke(n),n}var vu=class extends cn{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let r=ae(t.toBatchTensor(150,!0),"float32"),a=Zr(r,[122.782,117.001,104.298]).div(255),o=kg(a,n.conv32_down);o=Rt(o,3,2,"valid"),o=Jr(o,n.conv32_1),o=Jr(o,n.conv32_2),o=Jr(o,n.conv32_3),o=Yp(o,n.conv64_down),o=Jr(o,n.conv64_1),o=Jr(o,n.conv64_2),o=Jr(o,n.conv64_3),o=Yp(o,n.conv128_down),o=Jr(o,n.conv128_1),o=Jr(o,n.conv128_2),o=Yp(o,n.conv256_down),o=Jr(o,n.conv256_1),o=Jr(o,n.conv256_2),o=Yp(o,n.conv256_down_out);let i=o.mean([1,2]);return Fe(i,n.fc)})}async forward(t){return this.forwardInput(await vt(t))}async computeFaceDescriptor(t){var a;if((a=t==null?void 0:t.shape)!=null&&a.some(o=>o<=0))return new Float32Array(128);let n=await vt(t),r=O(()=>pt(this.forwardInput(n))),s=await Promise.all(r.map(o=>o.data()));return r.forEach(o=>o.dispose()),n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return SF(t)}extractParams(t){return kF(t)}};function gge(e){let t=new vu;return t.extractWeights(e),t}function Sg(e,t){return{...e,...{descriptor:t}}}function bge(e){return typeof e.age=="number"}function Cg(e,t){return{...e,...{age:t}}}function yge(e){return(e.gender==="male"||e.gender==="female")&&El(e.genderProbability)}function Tg(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function vge(e,t){function n(u,c){let l=Rr(e(9*u),[3,3,u,1]),p=He(e(u)),d=He(e(u)),h=He(e(u)),f=He(e(u));return t.push({paramPath:`${c}/filters`},{paramPath:`${c}/batch_norm_scale`},{paramPath:`${c}/batch_norm_offset`},{paramPath:`${c}/batch_norm_mean`},{paramPath:`${c}/batch_norm_variance`}),{filters:l,batch_norm_scale:p,batch_norm_offset:d,batch_norm_mean:h,batch_norm_variance:f}}function r(u,c,l,p,d){let h=Rr(e(u*c*l*l),[l,l,u,c]),f=He(e(c));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/${d?"batch_norm_offset":"bias"}`}),{filters:h,bias:f}}function s(u,c,l,p){let{filters:d,bias:h}=r(u,c,l,p,!0);return{filters:d,batch_norm_offset:h}}function a(u,c,l){let p=n(u,`${l}/depthwise_conv`),d=s(u,c,1,`${l}/pointwise_conv`);return{depthwise_conv:p,pointwise_conv:d}}function o(){let u=s(3,32,3,"mobilenetv1/conv_0"),c=a(32,64,"mobilenetv1/conv_1"),l=a(64,128,"mobilenetv1/conv_2"),p=a(128,128,"mobilenetv1/conv_3"),d=a(128,256,"mobilenetv1/conv_4"),h=a(256,256,"mobilenetv1/conv_5"),f=a(256,512,"mobilenetv1/conv_6"),g=a(512,512,"mobilenetv1/conv_7"),m=a(512,512,"mobilenetv1/conv_8"),b=a(512,512,"mobilenetv1/conv_9"),y=a(512,512,"mobilenetv1/conv_10"),v=a(512,512,"mobilenetv1/conv_11"),x=a(512,1024,"mobilenetv1/conv_12"),k=a(1024,1024,"mobilenetv1/conv_13");return{conv_0:u,conv_1:c,conv_2:l,conv_3:p,conv_4:d,conv_5:h,conv_6:f,conv_7:g,conv_8:m,conv_9:b,conv_10:y,conv_11:v,conv_12:x,conv_13:k}}function i(){let u=s(1024,256,1,"prediction_layer/conv_0"),c=s(256,512,3,"prediction_layer/conv_1"),l=s(512,128,1,"prediction_layer/conv_2"),p=s(128,256,3,"prediction_layer/conv_3"),d=s(256,128,1,"prediction_layer/conv_4"),h=s(128,256,3,"prediction_layer/conv_5"),f=s(256,64,1,"prediction_layer/conv_6"),g=s(64,128,3,"prediction_layer/conv_7"),m=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),b=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),y=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),v=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),x=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),k=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),S=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),N=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),E=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),$=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),F=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),D=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:u,conv_1:c,conv_2:l,conv_3:p,conv_4:d,conv_5:h,conv_6:f,conv_7:g,box_predictor_0:{box_encoding_predictor:m,class_predictor:b},box_predictor_1:{box_encoding_predictor:y,class_predictor:v},box_predictor_2:{box_encoding_predictor:x,class_predictor:k},box_predictor_3:{box_encoding_predictor:S,class_predictor:N},box_predictor_4:{box_encoding_predictor:E,class_predictor:$},box_predictor_5:{box_encoding_predictor:F,class_predictor:D}}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:i}}function CF(e){let t=[],{extractWeights:n,getRemainingWeights:r}=$n(e),{extractMobilenetV1Params:s,extractPredictionLayerParams:a}=vge(n,t),o=s(),i=a(),c={extra_dim:Cp(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:o,prediction_layer:i,output_layer:c},paramMappings:t}}function xge(e,t){let n=ir(e,t);function r(c,l,p){let d=n(`${c}/Conv2d_${l}_pointwise/weights`,4,`${p}/filters`),h=n(`${c}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${p}/batch_norm_offset`);return{filters:d,batch_norm_offset:h}}function s(c){let l=`mobilenetv1/conv_${c}`,p=`MobilenetV1/Conv2d_${c}_depthwise`,d=`${l}/depthwise_conv`,h=`${l}/pointwise_conv`,f=n(`${p}/depthwise_weights`,4,`${d}/filters`),g=n(`${p}/BatchNorm/gamma`,1,`${d}/batch_norm_scale`),m=n(`${p}/BatchNorm/beta`,1,`${d}/batch_norm_offset`),b=n(`${p}/BatchNorm/moving_mean`,1,`${d}/batch_norm_mean`),y=n(`${p}/BatchNorm/moving_variance`,1,`${d}/batch_norm_variance`);return{depthwise_conv:{filters:f,batch_norm_scale:g,batch_norm_offset:m,batch_norm_mean:b,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",c,h)}}function a(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:s(1),conv_2:s(2),conv_3:s(3),conv_4:s(4),conv_5:s(5),conv_6:s(6),conv_7:s(7),conv_8:s(8),conv_9:s(9),conv_10:s(10),conv_11:s(11),conv_12:s(12),conv_13:s(13)}}function o(c,l){let p=n(`${c}/weights`,4,`${l}/filters`),d=n(`${c}/biases`,1,`${l}/bias`);return{filters:p,bias:d}}function i(c){let l=o(`Prediction/BoxPredictor_${c}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${c}/box_encoding_predictor`),p=o(`Prediction/BoxPredictor_${c}/ClassPredictor`,`prediction_layer/box_predictor_${c}/class_predictor`);return{box_encoding_predictor:l,class_predictor:p}}function u(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:i(0),box_predictor_1:i(1),box_predictor_2:i(2),box_predictor_3:i(3),box_predictor_4:i(4),box_predictor_5:i(5)}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:u}}function TF(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=xge(e,t),s=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!zs(s))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${s}`);let a={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:s}};return Dn(e,t),{params:a,paramMappings:t}}function Mr(e,t,n){return O(()=>{let r=Ft(e,t.filters,n,"same");return r=X(r,t.batch_norm_offset),rn(r,0,6)})}var wge=.0010000000474974513;function Ige(e,t,n){return O(()=>{let r=Aa(e,t.filters,n,"same");return r=Ea(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,wge),rn(r,0,6)})}function kge(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function NF(e,t){return O(()=>{let n,r=Mr(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((a,o)=>{let i=o+1,u=kge(i);r=Ige(r,a.depthwise_conv,u),r=Mr(r,a.pointwise_conv,[1,1]),i===11&&(n=r)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}})}function Sge(e,t,n){let r=e.arraySync(),s=Math.min(r[t][0],r[t][2]),a=Math.min(r[t][1],r[t][3]),o=Math.max(r[t][0],r[t][2]),i=Math.max(r[t][1],r[t][3]),u=Math.min(r[n][0],r[n][2]),c=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),p=Math.max(r[n][1],r[n][3]),d=(o-s)*(i-a),h=(l-u)*(p-c);if(d<=0||h<=0)return 0;let f=Math.max(s,u),g=Math.max(a,c),m=Math.min(o,l),b=Math.min(i,p),y=Math.max(m-f,0)*Math.max(b-g,0);return y/(d+h-y)}function _F(e,t,n,r,s){let a=e.shape[0],o=Math.min(n,a),i=t.map((l,p)=>({score:l,boxIndex:p})).filter(l=>l.score>s).sort((l,p)=>p.score-l.score),u=l=>l<=r?1:0,c=[];return i.forEach(l=>{if(c.length>=o)return;let p=l.score;for(let d=c.length-1;d>=0;--d){let h=Sge(e,l.boxIndex,c[d]);if(h!==0&&(l.score*=u(h),l.score<=s))break}p===l.score&&c.push(l.boxIndex)}),c}function Cge(e){let t=pt(Re(e,[1,0])),n=[le(t[2],t[0]),le(t[3],t[1])],r=[X(t[0],fe(n[0],2)),X(t[1],fe(n[1],2))];return{sizes:n,centers:r}}function Tge(e,t){let{sizes:n,centers:r}=Cge(e),s=pt(Re(t,[1,0])),a=fe(z(fn(fe(s[2],5)),n[0]),2),o=X(z(fe(s[0],10),n[0]),r[0]),i=fe(z(fn(fe(s[3],5)),n[1]),2),u=X(z(fe(s[1],10),n[1]),r[1]);return Re(Dt([le(o,a),le(u,i),X(o,a),X(u,i)]),[1,0])}function EF(e,t,n){return O(()=>{let r=e.shape[0],s=Tge(W(Pn(n.extra_dim,[r,1,1]),[-1,4]),W(e,[-1,4]));s=W(s,[r,s.shape[0]/r,4]);let a=pr(Ve(t,[0,0,1],[-1,-1,-1])),o=Ve(a,[0,0,0],[-1,-1,1]);o=W(o,[r,o.shape[1]]);let i=pt(s),u=pt(o);return{boxes:i,scores:u}})}function xu(e,t){return O(()=>{let n=e.shape[0],r=W(gu(e,t.box_encoding_predictor),[n,-1,1,4]),s=W(gu(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:s}})}function AF(e,t,n){return O(()=>{let r=Mr(e,n.conv_0,[1,1]),s=Mr(r,n.conv_1,[2,2]),a=Mr(s,n.conv_2,[1,1]),o=Mr(a,n.conv_3,[2,2]),i=Mr(o,n.conv_4,[1,1]),u=Mr(i,n.conv_5,[2,2]),c=Mr(u,n.conv_6,[1,1]),l=Mr(c,n.conv_7,[2,2]),p=xu(t,n.box_predictor_0),d=xu(e,n.box_predictor_1),h=xu(s,n.box_predictor_2),f=xu(o,n.box_predictor_3),g=xu(u,n.box_predictor_4),m=xu(l,n.box_predictor_5),b=tt([p.boxPredictionEncoding,d.boxPredictionEncoding,h.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding,m.boxPredictionEncoding],1),y=tt([p.classPrediction,d.classPrediction,h.classPrediction,f.classPrediction,g.classPrediction,m.classPrediction],1);return{boxPredictions:b,classPredictions:y}})}var wr=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 za=class extends cn{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let r=ae(t.toBatchTensor(512,!1),"float32"),s=le(fe(r,127.5),1),a=NF(s,n.mobilenetv1),{boxPredictions:o,classPredictions:i}=AF(a.out,a.conv11,n.prediction_layer);return EF(o,i,n.output_layer)})}async forward(t){return this.forwardInput(await vt(t))}async locateFaces(t,n={}){let{maxResults:r,minConfidence:s}=new wr(n),a=await vt(t),{boxes:o,scores:i}=this.forwardInput(a),u=o[0],c=i[0];for(let v=1;v{let[x,k]=[Math.max(0,b[v][0]),Math.min(1,b[v][2])].map(E=>E*m),[S,N]=[Math.max(0,b[v][1]),Math.min(1,b[v][3])].map(E=>E*g);return new Tt(l[v],new cu(S,x,N-S,k-x),{height:a.getInputHeight(0),width:a.getInputWidth(0)})});return u.dispose(),c.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return TF(t)}extractParams(t){return CF(t)}};function DF(e){let t=new za;return t.extractWeights(e),t}function Nge(e){return DF(e)}var J0=class extends za{};var $F=.4,FF=[new Ue(.738768,.874946),new Ue(2.42204,2.65704),new Ue(4.30971,7.04493),new Ue(10.246,4.59428),new Ue(12.6868,11.8741)],RF=[new Ue(1.603231,2.094468),new Ue(6.041143,7.080126),new Ue(2.882459,3.518061),new Ue(4.266906,5.178857),new Ue(9.041765,10.66308)],PF=[117.001,114.697,97.404],OF="tiny_yolov2_model",MF="tiny_yolov2_separable_conv_model";var Ng=e=>typeof e=="number";function Q0(e){if(!e)throw new Error(`invalid config: ${e}`);if(typeof e.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${e.withSeparableConvs}`);if(!Ng(e.iouThreshold)||e.iouThreshold<0||e.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${e.iouThreshold}`);if(!Array.isArray(e.classes)||!e.classes.length||!e.classes.every(t=>typeof t=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(e.classes)}`);if(!Array.isArray(e.anchors)||!e.anchors.length||!e.anchors.map(t=>t||{}).every(t=>Ng(t.x)&&Ng(t.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(e.anchors)}`);if(e.meanRgb&&(!Array.isArray(e.meanRgb)||e.meanRgb.length!==3||!e.meanRgb.every(Ng)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Vl(e){return O(()=>{let t=z(e,xe(.10000000149011612));return X(Ke(le(e,t)),t)})}function Us(e,t){return O(()=>{let n=yr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Ft(n,t.conv.filters,[1,1],"valid"),n=le(n,t.bn.sub),n=z(n,t.bn.truediv),n=X(n,t.conv.bias),Vl(n)})}function Gs(e,t){return O(()=>{let n=yr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Fa(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=X(n,t.bias),Vl(n)})}function _ge(e,t){let n=Pl(e,t);function r(o,i){let u=He(e(o)),c=He(e(o));return t.push({paramPath:`${i}/sub`},{paramPath:`${i}/truediv`}),{sub:u,truediv:c}}function s(o,i,u){let c=n(o,i,3,`${u}/conv`),l=r(i,`${u}/bn`);return{conv:c,bn:l}}let a=Ol(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}}function LF(e,t,n,r){let{extractWeights:s,getRemainingWeights:a}=$n(e),o=[],{extractConvParams:i,extractConvWithBatchNormParams:u,extractSeparableConvParams:c}=_ge(s,o),l;if(t.withSeparableConvs){let[p,d,h,f,g,m,b,y,v]=r,x=t.isFirstLayerConv2d?i(p,d,3,"conv0"):c(p,d,"conv0"),k=c(d,h,"conv1"),S=c(h,f,"conv2"),N=c(f,g,"conv3"),E=c(g,m,"conv4"),$=c(m,b,"conv5"),F=y?c(b,y,"conv6"):void 0,D=v?c(y,v,"conv7"):void 0,R=i(v||y||b,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:S,conv3:N,conv4:E,conv5:$,conv6:F,conv7:D,conv8:R}}else{let[p,d,h,f,g,m,b,y,v]=r,x=u(p,d,"conv0"),k=u(d,h,"conv1"),S=u(h,f,"conv2"),N=u(f,g,"conv3"),E=u(g,m,"conv4"),$=u(m,b,"conv5"),F=u(b,y,"conv6"),D=u(y,v,"conv7"),R=i(v,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:S,conv3:N,conv4:E,conv5:$,conv6:F,conv7:D,conv8:R}}if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:l,paramMappings:o}}function Ege(e,t){let n=ir(e,t);function r(i){let u=n(`${i}/sub`,1),c=n(`${i}/truediv`,1);return{sub:u,truediv:c}}function s(i){let u=n(`${i}/filters`,4),c=n(`${i}/bias`,1);return{filters:u,bias:c}}function a(i){let u=s(`${i}/conv`),c=r(`${i}/bn`);return{conv:u,bn:c}}let o=Ml(n);return{extractConvParams:s,extractConvWithBatchNormParams:a,extractSeparableConvParams:o}}function BF(e,t){let n=[],{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}=Ege(e,n),o;if(t.withSeparableConvs){let i=t.filterSizes&&t.filterSizes.length||9;o={conv0:t.isFirstLayerConv2d?r("conv0"):a("conv0"),conv1:a("conv1"),conv2:a("conv2"),conv3:a("conv3"),conv4:a("conv4"),conv5:a("conv5"),conv6:i>7?a("conv6"):void 0,conv7:i>8?a("conv7"):void 0,conv8:r("conv8")}}else o={conv0:s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:s("conv6"),conv7:s("conv7"),conv8:r("conv8")};return Dn(e,n),{params:o,paramMappings:n}}var Qr=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 _g=class _g extends cn{constructor(t){super("TinyYolov2"),Q0(t),this._config=t}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(t,n){let r=Us(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Us(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Us(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Us(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Us(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Us(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=Us(r,n.conv6),r=Us(r,n.conv7),gu(r,n.conv8,"valid",!1)}runMobilenet(t,n){let r=this.config.isFirstLayerConv2d?Vl(gu(t,n.conv0,"valid",!1)):Gs(t,n.conv0);return r=Rt(r,[2,2],[2,2],"same"),r=Gs(r,n.conv1),r=Rt(r,[2,2],[2,2],"same"),r=Gs(r,n.conv2),r=Rt(r,[2,2],[2,2],"same"),r=Gs(r,n.conv3),r=Rt(r,[2,2],[2,2],"same"),r=Gs(r,n.conv4),r=Rt(r,[2,2],[2,2],"same"),r=Gs(r,n.conv5),r=Rt(r,[2,2],[1,1],"same"),r=n.conv6?Gs(r,n.conv6):r,r=n.conv7?Gs(r,n.conv7):r,gu(r,n.conv8,"valid",!1)}forwardInput(t,n){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let s=ae(t.toBatchTensor(n,!1),"float32");return s=this.config.meanRgb?Zr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(t,n){return this.forwardInput(await vt(t),n)}async detect(t,n={}){let{inputSize:r,scoreThreshold:s}=new Qr(n),a=await vt(t),o=await this.forwardInput(a,r),i=O(()=>pt(o)[0].expandDims()),u={width:a.getInputWidth(0),height:a.getInputHeight(0)},c=await this.extractBoxes(i,a.getReshapedInputDimensions(0),s);o.dispose(),i.dispose();let l=c.map(m=>m.box),p=c.map(m=>m.score),d=c.map(m=>m.classScore),h=c.map(m=>this.config.classes[m.label]);return E0(l.map(m=>m.rescale(r)),p,this.config.iouThreshold,!0).map(m=>new uu(p[m],d[m],h[m],l[m],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(t){return BF(t,this.config)}extractParams(t){let n=this.config.filterSizes||_g.DEFAULT_FILTER_SIZES,r=n?n.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 LF(t,this.config,this.boxEncodingSize,n)}async extractBoxes(t,n,r){let{width:s,height:a}=n,o=Math.max(s,a),i=o/s,u=o/a,c=t.shape[1],l=this.config.anchors.length,[p,d,h]=O(()=>{let b=t.reshape([c,c,l,this.boxEncodingSize]),y=b.slice([0,0,0,0],[c,c,l,4]),v=b.slice([0,0,0,4],[c,c,l,1]),x=this.withClassScores?Kr(b.slice([0,0,0,5],[c,c,l,this.config.classes.length]),3):xe(0);return[y,v,x]}),f=[],g=await d.array(),m=await p.array();for(let b=0;br){let k=(y+Bp(m[b][y][v][0]))/c*i,S=(b+Bp(m[b][y][v][1]))/c*u,N=Math.exp(m[b][y][v][2])*this.config.anchors[v].x/c*i,E=Math.exp(m[b][y][v][3])*this.config.anchors[v].y/c*u,$=k-N/2,F=S-E/2,D={row:b,col:y,anchor:v},{classScore:R,label:C}=this.withClassScores?await this.extractPredictedClass(h,D):{classScore:1,label:0};f.push({box:new iu($,F,$+N,F+E),score:x,classScore:x*R,label:C,...D})}}return p.dispose(),d.dispose(),h.dispose(),f}async extractPredictedClass(t,n){let{row:r,col:s,anchor:a}=n,o=await t.array();return Array(this.config.classes.length).fill(0).map((i,u)=>o[r][s][a][u]).map((i,u)=>({classScore:i,label:u})).reduce((i,u)=>i.classScore>u.classScore?i:u)}};_g.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Ul=_g;var wu=class extends Ul{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:$F,classes:["face"],...t?{anchors:RF,meanRgb:PF}:{anchors:FF,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(s=>new Tt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?MF:OF}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function Age(e,t=!0){let n=new wu(t);return n.extractWeights(e),n}var Zp=class extends Qr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var Ir=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Iu(e,t,n,r,s=({alignedRect:a})=>a){let a=e.map(u=>bu(u)?s(u):u.detection),o=r||(t instanceof Ne?await Rl(t,a):await Fl(t,a)),i=await n(o);return o.forEach(u=>u instanceof Ne&&u.dispose()),i}async function Gl(e,t,n,r,s){return Iu([e],t,async a=>n(a[0]),r,s)}var zF=.4,WF=[new Ue(1.603231,2.094468),new Ue(6.041143,7.080126),new Ue(2.882459,3.518061),new Ue(4.266906,5.178857),new Ue(9.041765,10.66308)],VF=[117.001,114.697,97.404];var ku=class extends Ul{constructor(){let t={withSeparableConvs:!0,iouThreshold:zF,classes:["face"],anchors:WF,meanRgb:VF,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(s=>new Tt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var rt={ssdMobilenetv1:new za,tinyFaceDetector:new ku,tinyYolov2:new wu,faceLandmark68Net:new yu,faceLandmark68TinyNet:new Xp,faceRecognitionNet:new vu,faceExpressionNet:new qp,ageGenderNet:new Kp},UF=(e,t)=>rt.ssdMobilenetv1.locateFaces(e,t),Dge=(e,t)=>rt.tinyFaceDetector.locateFaces(e,t),$ge=(e,t)=>rt.tinyYolov2.locateFaces(e,t),GF=e=>rt.faceLandmark68Net.detectLandmarks(e),Fge=e=>rt.faceLandmark68TinyNet.detectLandmarks(e),Rge=e=>rt.faceRecognitionNet.computeFaceDescriptor(e),Pge=e=>rt.faceExpressionNet.predictExpressions(e),Oge=e=>rt.ageGenderNet.predictAgeAndGender(e),HF=e=>rt.ssdMobilenetv1.load(e),Mge=e=>rt.tinyFaceDetector.load(e),Lge=e=>rt.tinyYolov2.load(e),Bge=e=>rt.faceLandmark68Net.load(e),zge=e=>rt.faceLandmark68TinyNet.load(e),Wge=e=>rt.faceRecognitionNet.load(e),Vge=e=>rt.faceExpressionNet.load(e),Uge=e=>rt.ageGenderNet.load(e),Gge=HF,Hge=UF,jge=GF;var Eg=class extends Ir{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.extractedFaces=s}},Su=class extends Eg{async run(){let t=await this.parentTask,n=await Iu(t,this.input,async r=>Promise.all(r.map(s=>rt.faceExpressionNet.predictExpressions(s))),this.extractedFaces);return t.map((r,s)=>bg(r,n[s]))}withAgeAndGender(){return new Tu(this,this.input)}},Cu=class extends Eg{async run(){let t=await this.parentTask;if(!t)return;let n=await Gl(t,this.input,r=>rt.faceExpressionNet.predictExpressions(r),this.extractedFaces);return bg(t,n)}withAgeAndGender(){return new Nu(this,this.input)}},Wa=class extends Su{withAgeAndGender(){return new Ua(this,this.input)}withFaceDescriptors(){return new Hs(this,this.input)}},Va=class extends Cu{withAgeAndGender(){return new Ga(this,this.input)}withFaceDescriptor(){return new js(this,this.input)}};var Ag=class extends Ir{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.extractedFaces=s}},Tu=class extends Ag{async run(){let t=await this.parentTask,n=await Iu(t,this.input,async r=>Promise.all(r.map(s=>rt.ageGenderNet.predictAgeAndGender(s))),this.extractedFaces);return t.map((r,s)=>{let{age:a,gender:o,genderProbability:i}=n[s];return Cg(Tg(r,o,i),a)})}withFaceExpressions(){return new Su(this,this.input)}},Nu=class extends Ag{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:r,genderProbability:s}=await Gl(t,this.input,a=>rt.ageGenderNet.predictAgeAndGender(a),this.extractedFaces);return Cg(Tg(t,r,s),n)}withFaceExpressions(){return new Cu(this,this.input)}},Ua=class extends Tu{withFaceExpressions(){return new Wa(this,this.input)}withFaceDescriptors(){return new Hs(this,this.input)}},Ga=class extends Nu{withFaceExpressions(){return new Va(this,this.input)}withFaceDescriptor(){return new js(this,this.input)}};var Jp=class extends Ir{constructor(n,r){super();this.parentTask=n;this.input=r}},Hs=class extends Jp{async run(){let t=await this.parentTask;return(await Iu(t,this.input,r=>Promise.all(r.map(s=>rt.faceRecognitionNet.computeFaceDescriptor(s))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,s)=>Sg(t[s],r))}withFaceExpressions(){return new Wa(this,this.input)}withAgeAndGender(){return new Ua(this,this.input)}},js=class extends Jp{async run(){let t=await this.parentTask;if(!t)return;let n=await Gl(t,this.input,r=>rt.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return Sg(t,n)}withFaceExpressions(){return new Va(this,this.input)}withAgeAndGender(){return new Ga(this,this.input)}};var Qp=class extends Ir{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.useTinyLandmarkNet=s}get landmarkNet(){return this.useTinyLandmarkNet?rt.faceLandmark68TinyNet:rt.faceLandmark68Net}},eh=class extends Qp{async run(){let t=await this.parentTask,n=t.map(o=>o.detection),r=this.input instanceof Ne?await Rl(this.input,n):await Fl(this.input,n),s=await Promise.all(r.map(o=>this.landmarkNet.detectLandmarks(o)));return r.forEach(o=>o instanceof Ne&&o.dispose()),t.filter((o,i)=>s[i]).map((o,i)=>zl(o,s[i]))}withFaceExpressions(){return new Wa(this,this.input)}withAgeAndGender(){return new Ua(this,this.input)}withFaceDescriptors(){return new Hs(this,this.input)}},th=class extends Qp{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,r=this.input instanceof Ne?await Rl(this.input,[n]):await Fl(this.input,[n]),s=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(a=>a instanceof Ne&&a.dispose()),zl(t,s)}withFaceExpressions(){return new Va(this,this.input)}withAgeAndGender(){return new Ga(this,this.input)}withFaceDescriptor(){return new js(this,this.input)}};var nh=class extends Ir{constructor(n,r=new wr){super();this.input=n;this.options=r}},Hl=class extends nh{async run(){let{input:t,options:n}=this,r;if(n instanceof Zp)r=rt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof wr)r=rt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof Qr)r=rt.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return r}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(r=>t(r.map(s=>du({},s)))).catch(r=>n(r))})}withFaceLandmarks(t=!1){return new eh(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Su(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Tu(this.runAndExtendWithFaceDetections(),this.input)}},rh=class extends nh{async run(){let t=await new Hl(this.input,this.options),n=t[0];return t.forEach(r=>{r.score>n.score&&(n=r)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?du({},n):void 0)})}withFaceLandmarks(t=!1){return new th(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Cu(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Nu(this.runAndExtendWithFaceDetection(),this.input)}};function qge(e,t=new wr){return new rh(e,t)}function Dg(e,t=new wr){return new Hl(e,t)}async function jF(e,t){return Dg(e,new wr(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Kge(e,t={}){return Dg(e,new Qr(t)).withFaceLandmarks().withFaceDescriptors()}var Xge=jF;function eS(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),r=Array.from(t);return Math.sqrt(n.map((s,a)=>s-r[a]).reduce((s,a)=>s+a*a,0))}var tS=class e{constructor(t,n=.6){this._distanceThreshold=n;let r=Array.isArray(t)?t:[t];if(!r.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let s=1,a=()=>`person ${s++}`;this._labeledDescriptors=r.map(o=>{if(o instanceof Ba)return o;if(o instanceof Float32Array)return new Ba(a(),[o]);if(o.descriptor&&o.descriptor instanceof Float32Array)return new Ba(a(),[o.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(r=>eS(r,t)).reduce((r,s)=>r+s,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:r})=>new Al(r,this.computeMeanDistance(t,n))).reduce((n,r)=>n.distancet.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(r=>Ba.fromJSON(r));return new e(n,t.distanceThreshold)}};function Yge(e){let t=new ku;return t.extractWeights(e),t}function qF(e,t){let{width:n,height:r}=new Un(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map(s=>qF(s,{width:n,height:r}));if(bu(e)){let s=e.detection.forSize(n,r),a=e.unshiftedLandmarks.forSize(s.box.width,s.box.height);return zl(du(e,s),a)}return vs(e)?du(e,e.detection.forSize(n,r)):e instanceof or||e instanceof Tt?e.forSize(n,r):e}var Zge=hF;return $R(Jge);})();