4882 lines
1.2 MiB
4882 lines
1.2 MiB
/*
|
|
Face-API
|
|
homepage: <https://github.com/vladmandic/face-api>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
"use strict";var faceapi=(()=>{var py=Object.defineProperty;var pD=Object.getOwnPropertyDescriptor;var hD=Object.getOwnPropertyNames;var fD=Object.prototype.hasOwnProperty;var Ys=(e=>typeof require!="undefined"?require:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof require!="undefined"?require:t)[n]}):e)(function(e){if(typeof require!="undefined")return require.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')});var sh=(e,t)=>{for(var n in t)py(e,n,{get:t[n],enumerable:!0})},mD=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of hD(t))!fD.call(e,s)&&s!==n&&py(e,s,{get:()=>t[s],enumerable:!(r=pD(t,s))||r.enumerable});return e};var gD=e=>mD(py({},"__esModule",{value:!0}),e);var Wde={};sh(Wde,{AgeGenderNet:()=>wp,BoundingBox:()=>_i,Box:()=>ot,ComposableTask:()=>xr,ComputeAllFaceDescriptorsTask:()=>Gs,ComputeFaceDescriptorsTaskBase:()=>Tp,ComputeSingleFaceDescriptorTask:()=>Hs,DetectAllFaceLandmarksTask:()=>Np,DetectAllFacesTask:()=>vl,DetectFaceLandmarksTaskBase:()=>Cp,DetectFacesTaskBase:()=>Ep,DetectSingleFaceLandmarksTask:()=>_p,DetectSingleFaceTask:()=>Ap,Dimensions:()=>yn,FACE_EXPRESSION_LABELS:()=>FI,FaceDetection:()=>gt,FaceDetectionNet:()=>BI,FaceExpressionNet:()=>xp,FaceExpressions:()=>Ws,FaceLandmark68Net:()=>Mi,FaceLandmark68TinyNet:()=>Ip,FaceLandmarkNet:()=>MI,FaceLandmarks:()=>ar,FaceLandmarks5:()=>vI,FaceLandmarks68:()=>Ai,FaceMatch:()=>al,FaceMatcher:()=>$p,FaceRecognitionNet:()=>Li,Gender:()=>bg,LabeledBox:()=>ol,LabeledFaceDescriptors:()=>bs,NetInput:()=>vs,NeuralNetwork:()=>an,ObjectDetection:()=>Ls,Point:()=>Fe,PredictedBox:()=>xI,Rect:()=>Ei,SsdMobilenetv1:()=>$a,SsdMobilenetv1Options:()=>vr,TinyFaceDetector:()=>Ui,TinyFaceDetectorOptions:()=>Sp,TinyYolov2:()=>Wi,TinyYolov2Options:()=>es,allFaces:()=>Lde,allFacesSsdMobilenetv1:()=>$$,allFacesTinyYolov2:()=>Mde,awaitMediaLoaded:()=>NI,bufferToImage:()=>_I,computeFaceDescriptor:()=>kde,createCanvas:()=>Ri,createCanvasFromMedia:()=>gp,createFaceDetectionNet:()=>gde,createFaceRecognitionNet:()=>ade,createSsdMobilenetv1:()=>g$,createTinyFaceDetector:()=>zde,createTinyYolov2:()=>vde,detectAllFaces:()=>Cg,detectFaceLandmarks:()=>E$,detectFaceLandmarksTiny:()=>Ide,detectLandmarks:()=>Pde,detectSingleFace:()=>Ode,draw:()=>PI,env:()=>Qe,euclideanDistance:()=>UI,extendWithAge:()=>wg,extendWithFaceDescriptor:()=>xg,extendWithFaceDetection:()=>$i,extendWithFaceExpressions:()=>hg,extendWithFaceLandmarks:()=>ml,extendWithGender:()=>Ig,extractFaceTensors:()=>ul,extractFaces:()=>cl,fetchImage:()=>Hle,fetchJson:()=>$I,fetchNetWeights:()=>qle,fetchOrThrow:()=>Bs,fetchVideo:()=>jle,getContext2dOrThrow:()=>Gn,getMediaDimensions:()=>Fi,imageTensorToCanvas:()=>EI,imageToSquare:()=>AI,inverseSigmoid:()=>Lle,iou:()=>mI,isMediaElement:()=>ag,isMediaLoaded:()=>mp,isWithAge:()=>ode,isWithFaceDetection:()=>ys,isWithFaceExpressions:()=>RI,isWithFaceLandmarks:()=>Oi,isWithGender:()=>ide,loadAgeGenderModel:()=>Dde,loadFaceDetectionModel:()=>Fde,loadFaceExpressionModel:()=>$de,loadFaceLandmarkModel:()=>_de,loadFaceLandmarkTinyModel:()=>Ede,loadFaceRecognitionModel:()=>Ade,loadSsdMobilenetv1Model:()=>A$,loadTinyFaceDetectorModel:()=>Cde,loadTinyYolov2Model:()=>Nde,loadWeightMap:()=>DI,locateFaces:()=>Rde,matchDimensions:()=>Kle,minBbox:()=>gI,nets:()=>et,nonMaxSuppression:()=>bI,normalize:()=>Jr,padToSquare:()=>yI,predictAgeAndGender:()=>Tde,recognizeFaceExpressions:()=>Sde,resizeResults:()=>D$,resolveInput:()=>Di,shuffleArray:()=>Mle,sigmoid:()=>pp,ssdMobilenetv1:()=>_$,tf:()=>Oe,tinyFaceDetector:()=>xde,tinyYolov2:()=>wde,toNetInput:()=>bt,utils:()=>fI,validateConfig:()=>WI,version:()=>Bde});var Oe={};sh(Oe,{Abs:()=>Fc,Acos:()=>Rc,Acosh:()=>Pc,AdadeltaOptimizer:()=>km,AdagradOptimizer:()=>Sm,AdamOptimizer:()=>Tm,AdamaxOptimizer:()=>Cm,Add:()=>ba,AddN:()=>bo,All:()=>Oc,Any:()=>Mc,ArgMax:()=>yo,ArgMin:()=>dd,Asin:()=>Lc,Asinh:()=>zc,Atan:()=>Bc,Atan2:()=>Vc,Atanh:()=>Wc,AvgPool:()=>vo,AvgPool3D:()=>pd,AvgPool3DGrad:()=>hf,AvgPoolGrad:()=>pf,BackendWasm:()=>HA,BatchMatMul:()=>xo,BatchToSpaceND:()=>Uc,Bincount:()=>ff,BroadcastArgs:()=>mf,BroadcastTo:()=>rS,Callback:()=>wN,CallbackList:()=>TC,Cast:()=>wo,Ceil:()=>Io,ClipByValue:()=>ya,Complex:()=>gf,ComplexAbs:()=>hd,Concat:()=>Gc,Conv2D:()=>ko,Conv2DBackpropFilter:()=>bf,Conv2DBackpropInput:()=>So,Conv3D:()=>fd,Conv3DBackpropFilterV2:()=>yf,Conv3DBackpropInputV2:()=>vf,Cos:()=>To,Cosh:()=>Co,CropAndResize:()=>qc,Cumprod:()=>Hc,Cumsum:()=>No,CustomCallback:()=>NC,DataStorage:()=>uf,DenseBincount:()=>xf,DepthToSpace:()=>jc,DepthwiseConv2dNative:()=>_o,DepthwiseConv2dNativeBackpropFilter:()=>wf,DepthwiseConv2dNativeBackpropInput:()=>If,Diag:()=>kf,Dilation2D:()=>md,Dilation2DBackpropFilter:()=>Dh,Dilation2DBackpropInput:()=>$h,ENV:()=>$v,EarlyStopping:()=>IN,Einsum:()=>Sf,Elu:()=>Ao,EluGrad:()=>Tf,Environment:()=>tS,Equal:()=>Xc,Erf:()=>Kc,Exp:()=>$o,ExpandDims:()=>Yc,Expm1:()=>Zc,FFT:()=>Cf,Fill:()=>gd,FlipLeftRight:()=>Jc,Floor:()=>Do,FloorDiv:()=>Fo,FromPixels:()=>Fh,FusedBatchNorm:()=>Ro,FusedConv2D:()=>to,FusedDepthwiseConv2D:()=>no,GPGPUContext:()=>Ch,GatherNd:()=>eu,GatherV2:()=>Qc,GraphModel:()=>A0,Greater:()=>tu,GreaterEqual:()=>Po,History:()=>CC,IFFT:()=>Nf,Identity:()=>Oo,Imag:()=>_f,InputSpec:()=>zt,IsFinite:()=>nu,IsInf:()=>ru,IsNan:()=>su,KernelBackend:()=>ld,LRN:()=>bd,LRNGrad:()=>Af,LayerVariable:()=>yC,LayersModel:()=>Es,LeakyRelu:()=>Mo,Less:()=>au,LessEqual:()=>ou,LinSpace:()=>Ef,Log:()=>Lo,Log1p:()=>iu,LogSoftmax:()=>aS,LogicalAnd:()=>cu,LogicalNot:()=>uu,LogicalOr:()=>lu,LogicalXor:()=>sS,LowerBound:()=>iF,MathBackendWebGL:()=>Ym,Max:()=>zo,MaxPool:()=>Wo,MaxPool3D:()=>yd,MaxPool3DGrad:()=>Df,MaxPoolGrad:()=>$f,MaxPoolWithArgmax:()=>Ff,Maximum:()=>Bo,Mean:()=>Vo,Min:()=>Uo,Minimum:()=>Go,MirrorPad:()=>Ho,Mod:()=>du,MomentumOptimizer:()=>Nm,Multinomial:()=>Rf,Multiply:()=>qo,Neg:()=>pu,NonMaxSuppressionV3:()=>fu,NonMaxSuppressionV4:()=>mu,NonMaxSuppressionV5:()=>gu,NotEqual:()=>hu,OP_SCOPE_SUFFIX:()=>Pv,OneHot:()=>jo,OnesLike:()=>bu,Optimizer:()=>Rs,OptimizerConstructors:()=>Zs,Pack:()=>yu,PadV2:()=>Ko,Pool:()=>cF,Pow:()=>Xo,Prelu:()=>Yo,Prod:()=>Zo,RMSPropOptimizer:()=>_m,RNN:()=>ms,RaggedGather:()=>Pf,RaggedRange:()=>Of,RaggedTensorToTensor:()=>Mf,Range:()=>vd,Rank:()=>Ey,Real:()=>Lf,RealDiv:()=>Eo,Reciprocal:()=>vu,Reduction:()=>kn,Relu:()=>Jo,Relu6:()=>ti,Reshape:()=>xu,ResizeBilinear:()=>ei,ResizeBilinearGrad:()=>Bf,ResizeNearestNeighbor:()=>Qo,ResizeNearestNeighborGrad:()=>zf,Reverse:()=>ni,RotateWithOffset:()=>Ou,Round:()=>ri,Rsqrt:()=>si,SGDOptimizer:()=>jd,ScatterNd:()=>wu,SearchSorted:()=>Wf,Select:()=>Iu,Selu:()=>ku,Sequential:()=>Tc,Sigmoid:()=>oi,Sign:()=>Cu,Sin:()=>ai,Sinh:()=>Tu,Slice:()=>Su,Softmax:()=>ui,Softplus:()=>Nu,SpaceToBatchND:()=>_u,SparseFillEmptyRows:()=>xd,SparseReshape:()=>Au,SparseSegmentMean:()=>wd,SparseSegmentSum:()=>Id,SparseToDense:()=>Vf,SplitV:()=>Eu,Sqrt:()=>ii,Square:()=>kd,SquaredDifference:()=>li,Step:()=>xa,StridedSlice:()=>$u,StringNGrams:()=>Sd,StringSplit:()=>Td,StringToHashBucketFast:()=>Cd,Sub:()=>di,Sum:()=>ci,SymbolicTensor:()=>Vr,Tan:()=>pi,Tanh:()=>hi,Tensor:()=>Te,TensorBuffer:()=>Ht,Tile:()=>va,TopK:()=>Du,Transform:()=>Fu,Transpose:()=>_s,Unique:()=>Uf,Unpack:()=>Ru,UnsortedSegmentSum:()=>Nd,UpperBound:()=>uF,Variable:()=>ia,ZerosLike:()=>Pu,_FusedMatMul:()=>eo,abs:()=>Lt,acos:()=>Xv,acosh:()=>Yv,add:()=>Y,addN:()=>YS,all:()=>Kf,any:()=>Ql,argMax:()=>ao,argMin:()=>Zv,asin:()=>Jv,asinh:()=>Qv,atan:()=>ex,atan2:()=>tx,atanh:()=>nx,avgPool:()=>mr,avgPool3d:()=>sx,backend:()=>DS,backend_util:()=>N,basicLSTMCell:()=>eT,batchNorm:()=>ka,batchNorm2d:()=>ax,batchNorm3d:()=>ox,batchNorm4d:()=>ix,batchToSpaceND:()=>Od,bincount:()=>cx,booleanMaskAsync:()=>OT,broadcastArgs:()=>tT,broadcastTo:()=>Ya,broadcast_util:()=>Mu,browser:()=>fi,buffer:()=>Me,callbacks:()=>DH,cast:()=>ce,ceil:()=>ux,clipByValue:()=>en,clone:()=>is,complex:()=>As,concat:()=>Je,concat1d:()=>lx,concat2d:()=>dx,concat3d:()=>px,concat4d:()=>hx,constraints:()=>wC,conv1d:()=>Xf,conv2d:()=>Dt,conv2dTranspose:()=>Yf,conv3d:()=>mx,conv3dTranspose:()=>gx,copyRegisteredKernels:()=>hF,cos:()=>Md,cosh:()=>Zf,cosineWindow:()=>ym,cumprod:()=>ed,cumsum:()=>Jf,customGrad:()=>ls,data:()=>qN,denseBincount:()=>Bh,deprecationWarn:()=>Vv,depthToSpace:()=>bx,depthwiseConv2d:()=>Sa,deregisterOp:()=>PH,device_util:()=>$d,diag:()=>rT,dilation2d:()=>yx,disableDeprecationWarnings:()=>WR,dispose:()=>_e,disposeVariables:()=>VR,div:()=>fe,divNoNan:()=>vx,dot:()=>xx,dropout:()=>jx,einsum:()=>sT,elu:()=>Lu,enableDebugMode:()=>BR,enableProdMode:()=>zR,enclosingPowerOfTwo:()=>Kx,engine:()=>Er,env:()=>q,equal:()=>tr,erf:()=>wx,euclideanNorm:()=>Sx,exp:()=>gn,expandDims:()=>Zt,expm1:()=>Tx,eye:()=>Qf,fft:()=>Hd,fill:()=>bn,findBackend:()=>XR,findBackendFactory:()=>YR,floor:()=>Bu,floorDiv:()=>jf,forceHalfFloat:()=>dE,fused:()=>Ic,gather:()=>Wu,gatherND:()=>BT,gather_util:()=>Uv,getBackend:()=>jR,getGradient:()=>Ny,getKernel:()=>Rh,getKernelsForBackend:()=>Ph,getThreadsCount:()=>_le,gpgpu_util:()=>U2,grad:()=>xM,grads:()=>wM,greater:()=>An,greaterEqual:()=>Ds,ifft:()=>wc,imag:()=>Fd,image:()=>Br,inTopKAsync:()=>WT,initializers:()=>IC,input:()=>WC,io:()=>Ut,irfft:()=>fm,isFinite:()=>Cx,isInf:()=>Nx,isNaN:()=>_x,keep:()=>Jt,kernel_impls:()=>fs,layers:()=>kC,leakyRelu:()=>Ld,less:()=>em,lessEqual:()=>Ta,linalg:()=>Zx,linspace:()=>uT,loadGraphModel:()=>L6,loadGraphModelSync:()=>z6,loadLayersModel:()=>FU,localResponseNormalization:()=>Ex,log:()=>nr,log1p:()=>zd,logSigmoid:()=>Ax,logSoftmax:()=>nm,logSumExp:()=>rm,logicalAnd:()=>Dr,logicalNot:()=>Bd,logicalOr:()=>sm,logicalXor:()=>$x,losses:()=>QT,lowerBound:()=>dT,matMul:()=>De,math:()=>$S,max:()=>pr,maxPool:()=>Rt,maxPool3d:()=>Dx,maxPoolWithArgmax:()=>pT,maximum:()=>hs,mean:()=>Ct,memory:()=>Lh,meshgrid:()=>hT,metrics:()=>yN,min:()=>yc,minimum:()=>Vu,mirrorPad:()=>Fx,mod:()=>Rx,model:()=>OU,models:()=>vN,moments:()=>Wd,movingAverage:()=>MT,mul:()=>B,multiRNNCell:()=>fT,multinomial:()=>mT,neg:()=>xt,nextFrame:()=>Jx,norm:()=>zu,notEqual:()=>co,oneHot:()=>gc,ones:()=>Qn,onesLike:()=>rr,op:()=>z,outerProduct:()=>gT,pad:()=>gr,pad1d:()=>bT,pad2d:()=>yT,pad3d:()=>vT,pad4d:()=>xT,pool:()=>Px,pow:()=>$s,prelu:()=>Ud,print:()=>zv,prod:()=>Ox,profile:()=>UR,raggedGather:()=>wT,raggedRange:()=>IT,raggedTensorToTensor:()=>kT,rand:()=>ST,randomGamma:()=>TT,randomNormal:()=>om,randomStandardNormal:()=>CT,randomUniform:()=>Uu,range:()=>vc,ready:()=>qR,real:()=>bc,reciprocal:()=>zx,registerBackend:()=>qf,registerCallbackConstructor:()=>LU,registerGradient:()=>oS,registerKernel:()=>_d,registerOp:()=>RH,regularizers:()=>xN,relu:()=>Xe,relu6:()=>im,removeBackend:()=>KR,reshape:()=>W,reverse:()=>fr,reverse1d:()=>NT,reverse2d:()=>_T,reverse3d:()=>ET,reverse4d:()=>AT,rfft:()=>qd,round:()=>cm,rsqrt:()=>um,scalar:()=>xe,scatterND:()=>LT,scatter_util:()=>Gv,searchSorted:()=>am,selu:()=>lm,separableConv2d:()=>Ca,sequential:()=>MU,serialization:()=>se,setBackend:()=>HR,setPlatform:()=>ZR,setThreadsCount:()=>Nle,setWasmPath:()=>Tle,setWasmPaths:()=>Cle,setWebGLContext:()=>h2,setdiff1dAsync:()=>$T,sigmoid:()=>dr,sign:()=>Bx,signal:()=>JT,sin:()=>dm,sinh:()=>pm,slice:()=>We,slice1d:()=>Gd,slice2d:()=>hm,slice3d:()=>gi,slice4d:()=>xc,slice_util:()=>qt,softmax:()=>Xr,softplus:()=>mi,spaceToBatchND:()=>Vd,sparse:()=>eC,sparseToDense:()=>zT,spectral:()=>ZT,split:()=>zn,sqrt:()=>un,square:()=>it,squaredDifference:()=>mm,squeeze:()=>Na,stack:()=>Ft,step:()=>bi,stridedSlice:()=>Wx,string:()=>tC,sub:()=>de,sum:()=>ge,sumOutType:()=>Hf,tan:()=>Vx,tanh:()=>oo,tensor:()=>Cn,tensor1d:()=>Ke,tensor2d:()=>$r,tensor3d:()=>Rd,tensor4d:()=>Rr,tensor5d:()=>DT,tensor6d:()=>FT,tensor_util:()=>Ur,test_util:()=>jS,tidy:()=>O,tile:()=>Ln,time:()=>GR,topk:()=>Ux,train:()=>Wa,transpose:()=>Ee,truncatedNormal:()=>gm,unique:()=>Gx,unregisterGradient:()=>pF,unregisterKernel:()=>dF,unsortedSegmentSum:()=>bm,unstack:()=>lt,upcastType:()=>hr,upperBound:()=>RT,util:()=>w,valueAndGrad:()=>IM,valueAndGrads:()=>kM,variable:()=>Hx,variableGrads:()=>lT,version:()=>Ple,version_converter:()=>W6,version_core:()=>EP,version_layers:()=>xw,version_wasm:()=>Ele,version_webgl:()=>yZ,webgl:()=>vZ,webgl_util:()=>p2,where:()=>mn,whereAsync:()=>qx,zeros:()=>kt,zerosLike:()=>qe});var bD=Object.create,Cv=Object.defineProperty,yD=Object.getOwnPropertyDescriptor,V1=Object.getOwnPropertyNames,vD=Object.getPrototypeOf,xD=Object.prototype.hasOwnProperty,U1=(e=>typeof Ys!="undefined"?Ys:typeof Proxy!="undefined"?new Proxy(e,{get:(t,n)=>(typeof Ys!="undefined"?Ys:t)[n]}):e)(function(e){if(typeof Ys!="undefined")return Ys.apply(this,arguments);throw new Error('Dynamic require of "'+e+'" is not supported')}),Wt=(e,t)=>function(){return t||(0,e[V1(e)[0]])((t={exports:{}}).exports,t),t.exports},Ae=(e,t)=>{for(var n in t)Cv(e,n,{get:t[n],enumerable:!0})},wD=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let s of V1(t))!xD.call(e,s)&&s!==n&&Cv(e,s,{get:()=>t[s],enumerable:!(r=yD(t,s))||r.enumerable});return e},ma=(e,t,n)=>(n=e!=null?bD(vD(e)):{},wD(t||!e||!e.__esModule?Cv(n,"default",{value:e,enumerable:!0}):n,e)),ID=Wt({"node_modules/long/src/long.js"(e,t){t.exports=r;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(R){}function r(R,T,L){this.low=R|0,this.high=T|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,T){var L,V,G;return T?(R>>>=0,(G=0<=R&&R<256)&&(V=o[R],V)?V:(L=u(R,(R|0)<0?-1:0,!0),G&&(o[R]=L),L)):(R|=0,(G=-128<=R&&R<128)&&(V=a[R],V)?V:(L=u(R,R<0?-1:0,!1),G&&(a[R]=L),L))}r.fromInt=i;function c(R,T){if(isNaN(R))return T?x:v;if(T){if(R<0)return x;if(R>=g)return $}else{if(R<=-b)return F;if(R+1>=b)return E}return R<0?c(-R,T).neg():u(R%m|0,R/m|0,T)}r.fromNumber=c;function u(R,T,L){return new r(R,T,L)}r.fromBits=u;var l=Math.pow;function p(R,T,L){if(R.length===0)throw Error("empty string");if(R==="NaN"||R==="Infinity"||R==="+Infinity"||R==="-Infinity")return v;if(typeof T=="number"?(L=T,T=!1):T=!!T,L=L||10,L<2||36<L)throw RangeError("radix");var V;if((V=R.indexOf("-"))>0)throw Error("interior hyphen");if(V===0)return p(R.substring(1),T,L).neg();for(var G=c(l(L,8)),j=v,H=0;H<R.length;H+=8){var Z=Math.min(8,R.length-H),J=parseInt(R.substring(H,H+Z),L);if(Z<8){var ee=c(l(L,Z));j=j.mul(ee).add(c(J))}else j=j.mul(G),j=j.add(c(J))}return j.unsigned=T,j}r.fromString=p;function d(R,T){return typeof R=="number"?c(R,T):typeof R=="string"?p(R,T):u(R.low,R.high,typeof T=="boolean"?T:R.unsigned)}r.fromValue=d;var h=1<<16,f=1<<24,m=h*h,g=m*m,b=g/2,y=i(f),v=i(0);r.ZERO=v;var x=i(0,!0);r.UZERO=x;var k=i(1);r.ONE=k;var S=i(1,!0);r.UONE=S;var C=i(-1);r.NEG_ONE=C;var E=u(-1,2147483647,!1);r.MAX_VALUE=E;var $=u(-1,-1,!0);r.MAX_UNSIGNED_VALUE=$;var F=u(0,-2147483648,!1);r.MIN_VALUE=F;var A=r.prototype;A.toInt=function(){return this.unsigned?this.low>>>0:this.low},A.toNumber=function(){return this.unsigned?(this.high>>>0)*m+(this.low>>>0):this.high*m+(this.low>>>0)},A.toString=function(T){if(T=T||10,T<2||36<T)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative())if(this.eq(F)){var L=c(T),V=this.div(L),G=V.mul(L).sub(this);return V.toString(T)+G.toInt().toString(T)}else return"-"+this.neg().toString(T);for(var j=c(l(T,6),this.unsigned),H=this,Z="";;){var J=H.div(j),ee=H.sub(J.mul(j)).toInt()>>>0,re=ee.toString(T);if(H=J,H.isZero())return re+Z;for(;re.length<6;)re="0"+re;Z=""+re+Z}},A.getHighBits=function(){return this.high},A.getHighBitsUnsigned=function(){return this.high>>>0},A.getLowBits=function(){return this.low},A.getLowBitsUnsigned=function(){return this.low>>>0},A.getNumBitsAbs=function(){if(this.isNegative())return this.eq(F)?64:this.neg().getNumBitsAbs();for(var T=this.high!=0?this.high:this.low,L=31;L>0&&(T&1<<L)==0;L--);return this.high!=0?L+33:L+1},A.isZero=function(){return this.high===0&&this.low===0},A.eqz=A.isZero,A.isNegative=function(){return!this.unsigned&&this.high<0},A.isPositive=function(){return this.unsigned||this.high>=0},A.isOdd=function(){return(this.low&1)===1},A.isEven=function(){return(this.low&1)===0},A.equals=function(T){return s(T)||(T=d(T)),this.unsigned!==T.unsigned&&this.high>>>31===1&&T.high>>>31===1?!1:this.high===T.high&&this.low===T.low},A.eq=A.equals,A.notEquals=function(T){return!this.eq(T)},A.neq=A.notEquals,A.ne=A.notEquals,A.lessThan=function(T){return this.comp(T)<0},A.lt=A.lessThan,A.lessThanOrEqual=function(T){return this.comp(T)<=0},A.lte=A.lessThanOrEqual,A.le=A.lessThanOrEqual,A.greaterThan=function(T){return this.comp(T)>0},A.gt=A.greaterThan,A.greaterThanOrEqual=function(T){return this.comp(T)>=0},A.gte=A.greaterThanOrEqual,A.ge=A.greaterThanOrEqual,A.compare=function(T){if(s(T)||(T=d(T)),this.eq(T))return 0;var L=this.isNegative(),V=T.isNegative();return L&&!V?-1:!L&&V?1:this.unsigned?T.high>>>0>this.high>>>0||T.high===this.high&&T.low>>>0>this.low>>>0?-1:1:this.sub(T).isNegative()?-1:1},A.comp=A.compare,A.negate=function(){return!this.unsigned&&this.eq(F)?F:this.not().add(k)},A.neg=A.negate,A.add=function(T){s(T)||(T=d(T));var L=this.high>>>16,V=this.high&65535,G=this.low>>>16,j=this.low&65535,H=T.high>>>16,Z=T.high&65535,J=T.low>>>16,ee=T.low&65535,re=0,te=0,ie=0,ne=0;return ne+=j+ee,ie+=ne>>>16,ne&=65535,ie+=G+J,te+=ie>>>16,ie&=65535,te+=V+Z,re+=te>>>16,te&=65535,re+=L+H,re&=65535,u(ie<<16|ne,re<<16|te,this.unsigned)},A.subtract=function(T){return s(T)||(T=d(T)),this.add(T.neg())},A.sub=A.subtract,A.multiply=function(T){if(this.isZero())return v;if(s(T)||(T=d(T)),n){var L=n.mul(this.low,this.high,T.low,T.high);return u(L,n.get_high(),this.unsigned)}if(T.isZero())return v;if(this.eq(F))return T.isOdd()?F:v;if(T.eq(F))return this.isOdd()?F:v;if(this.isNegative())return T.isNegative()?this.neg().mul(T.neg()):this.neg().mul(T).neg();if(T.isNegative())return this.mul(T.neg()).neg();if(this.lt(y)&&T.lt(y))return c(this.toNumber()*T.toNumber(),this.unsigned);var V=this.high>>>16,G=this.high&65535,j=this.low>>>16,H=this.low&65535,Z=T.high>>>16,J=T.high&65535,ee=T.low>>>16,re=T.low&65535,te=0,ie=0,ne=0,le=0;return le+=H*re,ne+=le>>>16,le&=65535,ne+=j*re,ie+=ne>>>16,ne&=65535,ne+=H*ee,ie+=ne>>>16,ne&=65535,ie+=G*re,te+=ie>>>16,ie&=65535,ie+=j*ee,te+=ie>>>16,ie&=65535,ie+=H*J,te+=ie>>>16,ie&=65535,te+=V*re+G*ee+j*J+H*Z,te&=65535,u(ne<<16|le,te<<16|ie,this.unsigned)},A.mul=A.multiply,A.divide=function(T){if(s(T)||(T=d(T)),T.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&T.low===-1&&T.high===-1)return this;var L=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,T.low,T.high);return u(L,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?x:v;var V,G,j;if(this.unsigned){if(T.unsigned||(T=T.toUnsigned()),T.gt(this))return x;if(T.gt(this.shru(1)))return S;j=x}else{if(this.eq(F)){if(T.eq(k)||T.eq(C))return F;if(T.eq(F))return k;var H=this.shr(1);return V=H.div(T).shl(1),V.eq(v)?T.isNegative()?k:C:(G=this.sub(T.mul(V)),j=V.add(G.div(T)),j)}else if(T.eq(F))return this.unsigned?x:v;if(this.isNegative())return T.isNegative()?this.neg().div(T.neg()):this.neg().div(T).neg();if(T.isNegative())return this.div(T.neg()).neg();j=v}for(G=this;G.gte(T);){V=Math.max(1,Math.floor(G.toNumber()/T.toNumber()));for(var Z=Math.ceil(Math.log(V)/Math.LN2),J=Z<=48?1:l(2,Z-48),ee=c(V),re=ee.mul(T);re.isNegative()||re.gt(G);)V-=J,ee=c(V,this.unsigned),re=ee.mul(T);ee.isZero()&&(ee=k),j=j.add(ee),G=G.sub(re)}return j},A.div=A.divide,A.modulo=function(T){if(s(T)||(T=d(T)),n){var L=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,T.low,T.high);return u(L,n.get_high(),this.unsigned)}return this.sub(this.div(T).mul(T))},A.mod=A.modulo,A.rem=A.modulo,A.not=function(){return u(~this.low,~this.high,this.unsigned)},A.and=function(T){return s(T)||(T=d(T)),u(this.low&T.low,this.high&T.high,this.unsigned)},A.or=function(T){return s(T)||(T=d(T)),u(this.low|T.low,this.high|T.high,this.unsigned)},A.xor=function(T){return s(T)||(T=d(T)),u(this.low^T.low,this.high^T.high,this.unsigned)},A.shiftLeft=function(T){return s(T)&&(T=T.toInt()),(T&=63)===0?this:T<32?u(this.low<<T,this.high<<T|this.low>>>32-T,this.unsigned):u(0,this.low<<T-32,this.unsigned)},A.shl=A.shiftLeft,A.shiftRight=function(T){return s(T)&&(T=T.toInt()),(T&=63)===0?this:T<32?u(this.low>>>T|this.high<<32-T,this.high>>T,this.unsigned):u(this.high>>T-32,this.high>=0?0:-1,this.unsigned)},A.shr=A.shiftRight,A.shiftRightUnsigned=function(T){if(s(T)&&(T=T.toInt()),T&=63,T===0)return this;var L=this.high;if(T<32){var V=this.low;return u(V>>>T|L<<32-T,L>>>T,this.unsigned)}else return T===32?u(L,0,this.unsigned):u(L>>>T-32,0,this.unsigned)},A.shru=A.shiftRightUnsigned,A.shr_u=A.shiftRightUnsigned,A.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},A.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},A.toBytes=function(T){return T?this.toBytesLE():this.toBytesBE()},A.toBytesLE=function(){var T=this.high,L=this.low;return[L&255,L>>>8&255,L>>>16&255,L>>>24,T&255,T>>>8&255,T>>>16&255,T>>>24]},A.toBytesBE=function(){var T=this.high,L=this.low;return[T>>>24,T>>>16&255,T>>>8&255,T&255,L>>>24,L>>>16&255,L>>>8&255,L&255]},r.fromBytes=function(T,L,V){return V?r.fromBytesLE(T,L):r.fromBytesBE(T,L)},r.fromBytesLE=function(T,L){return new r(T[0]|T[1]<<8|T[2]<<16|T[3]<<24,T[4]|T[5]<<8|T[6]<<16|T[7]<<24,L)},r.fromBytesBE=function(T,L){return new r(T[4]<<24|T[5]<<16|T[6]<<8|T[7],T[0]<<24|T[1]<<16|T[2]<<8|T[3],L)}}}),kD=Wt({"(disabled):node_modules/node-fetch/browser.js"(){}}),SD=Wt({"(disabled):util"(){}}),TD=Wt({"node_modules/seedrandom/lib/alea.js"(e,t){(function(n,r,s){function a(u){var l=this,p=c();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(u),l.s0<0&&(l.s0+=1),l.s1-=p(u),l.s1<0&&(l.s1+=1),l.s2-=p(u),l.s2<0&&(l.s2+=1),p=null}function o(u,l){return l.c=u.c,l.s0=u.s0,l.s1=u.s1,l.s2=u.s2,l}function i(u,l){var p=new a(u),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 c(){var u=4022871197,l=function(p){p=String(p);for(var d=0;d<p.length;d++){u+=p.charCodeAt(d);var h=.02519603282416938*u;u=h>>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return 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)}}),CD=Wt({"node_modules/seedrandom/lib/xor128.js"(e,t){(function(n,r,s){function a(c){var u=this,l="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var d=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^d^d>>>8},c===(c|0)?u.x=c:l+=c;for(var p=0;p<l.length+64;p++)u.x^=l.charCodeAt(p)|0,u.next()}function o(c,u){return u.x=c.x,u.y=c.y,u.z=c.z,u.w=c.w,u}function i(c,u){var l=new a(c),p=u&&u.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},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)}}),ND=Wt({"node_modules/seedrandom/lib/xorwow.js"(e,t){(function(n,r,s){function a(c){var u=this,l="";u.next=function(){var d=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(d^d<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,c===(c|0)?u.x=c:l+=c;for(var p=0;p<l.length+64;p++)u.x^=l.charCodeAt(p)|0,p==l.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function o(c,u){return u.x=c.x,u.y=c.y,u.z=c.z,u.w=c.w,u.v=c.v,u.d=c.d,u}function i(c,u){var l=new a(c),p=u&&u.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},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)}}),_D=Wt({"node_modules/seedrandom/lib/xorshift7.js"(e,t){(function(n,r,s){function a(c){var u=this;u.next=function(){var p=u.x,d=u.i,h,f,m;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,u.i=d+1&7,f};function l(p,d){var h,f,m=[];if(d===(d|0))f=m[0]=d;else for(d=""+d,h=0;h<d.length;++h)m[h&7]=m[h&7]<<15^d.charCodeAt(h)+m[h+1&7]<<13;for(;m.length<8;)m.push(0);for(h=0;h<8&&m[h]===0;++h);for(h==8?f=m[7]=-1:f=m[h],p.x=m,p.i=0,h=256;h>0;--h)p.next()}l(u,c)}function o(c,u){return u.x=c.x.slice(),u.i=c.i,u}function i(c,u){c==null&&(c=+new Date);var l=new a(c),p=u&&u.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},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)}}),ED=Wt({"node_modules/seedrandom/lib/xor4096.js"(e,t){(function(n,r,s){function a(c){var u=this;u.next=function(){var p=u.w,d=u.X,h=u.i,f,m;return u.w=p=p+1640531527|0,m=d[h+34&127],f=d[h=h+1&127],m^=m<<13,f^=f<<17,m^=m>>>15,f^=f>>>12,m=d[h]=m^f,u.i=h,m+(p^p>>>16)|0};function l(p,d){var h,f,m,g,b,y=[],v=128;for(d===(d|0)?(f=d,d=null):(d=d+"\0",f=0,v=Math.max(v,d.length)),m=0,g=-32;g<v;++g)d&&(f^=d.charCodeAt((g+32)%d.length)),g===0&&(b=f),f^=f<<10,f^=f>>>15,f^=f<<4,f^=f>>>13,g>=0&&(b=b+1640531527|0,h=y[g&127]^=f+b,m=h==0?m+1:0);for(m>=128&&(y[(d&&d.length||0)&127]=-1),m=127,g=4*128;g>0;--g)f=y[m+34&127],h=y[m=m+1&127],f^=f<<13,h^=h<<17,f^=f>>>15,h^=h>>>12,y[m]=f^h;p.w=b,p.X=y,p.i=m}l(u,c)}function o(c,u){return u.i=c.i,u.w=c.w,u.X=c.X.slice(),u}function i(c,u){c==null&&(c=+new Date);var l=new a(c),p=u&&u.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},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)}}),AD=Wt({"node_modules/seedrandom/lib/tychei.js"(e,t){(function(n,r,s){function a(c){var u=this,l="";u.next=function(){var d=u.b,h=u.c,f=u.d,m=u.a;return d=d<<25^d>>>7^h,h=h-f|0,f=f<<24^f>>>8^m,m=m-d|0,u.b=d=d<<20^d>>>12^h,u.c=h=h-f|0,u.d=f<<16^h>>>16^m,u.a=m-d|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,c===Math.floor(c)?(u.a=c/4294967296|0,u.b=c|0):l+=c;for(var p=0;p<l.length+20;p++)u.b^=l.charCodeAt(p)|0,u.next()}function o(c,u){return u.a=c.a,u.b=c.b,u.c=c.c,u.d=c.d,u}function i(c,u){var l=new a(c),p=u&&u.state,d=function(){return(l.next()>>>0)/4294967296};return d.double=function(){do var h=l.next()>>>11,f=(l.next()>>>0)/4294967296,m=(h+f)/(1<<21);while(m===0);return m},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)}}),$D=Wt({"(disabled):crypto"(){}}),DD=Wt({"node_modules/seedrandom/seedrandom.js"(e,t){(function(n,r,s){var a=256,o=6,i=52,c="random",u=s.pow(a,o),l=s.pow(2,i),p=l*2,d=a-1,h;function f(k,S,C){var E=[];S=S==!0?{entropy:!0}:S||{};var $=y(b(S.entropy?[k,x(r)]:k==null?v():k,3),E),F=new m(E),A=function(){for(var R=F.g(o),T=u,L=0;R<l;)R=(R+L)*a,T*=a,L=F.g(1);for(;R>=p;)R/=2,T/=2,L>>>=1;return(R+L)/T};return A.int32=function(){return F.g(4)|0},A.quick=function(){return F.g(4)/4294967296},A.double=A,y(x(F.S),r),(S.pass||C||function(R,T,L,V){return V&&(V.S&&g(V,F),R.state=function(){return g(F,{})}),L?(s[c]=R,T):R})(A,$,"global"in S?S.global:this==s,S.state)}function m(k){var S,C=k.length,E=this,$=0,F=E.i=E.j=0,A=E.S=[];for(C||(k=[C++]);$<a;)A[$]=$++;for($=0;$<a;$++)A[$]=A[F=d&F+k[$%C]+(S=A[$])],A[F]=S;(E.g=function(R){for(var T,L=0,V=E.i,G=E.j,j=E.S;R--;)T=j[V=d&V+1],L=L*a+j[d&(j[V]=j[G=d&G+T])+(j[G]=T)];return E.i=V,E.j=G,L})(a)}function g(k,S){return S.i=k.i,S.j=k.j,S.S=k.S.slice(),S}function b(k,S){var C=[],E=typeof k,$;if(S&&E=="object")for($ in k)try{C.push(b(k[$],S-1))}catch(F){}return C.length?C:E=="string"?k:k+"\0"}function y(k,S){for(var C=k+"",E,$=0;$<C.length;)S[d&$]=d&(E^=S[d&$]*19)+C.charCodeAt($++);return x(S)}function v(){try{var k;return h&&(k=h.randomBytes)?k=k(a):(k=new Uint8Array(a),(n.crypto||n.msCrypto).getRandomValues(k)),x(k)}catch(E){var S=n.navigator,C=S&&S.plugins;return[+new Date,n,C,n.screen,x(r)]}}function x(k){return String.fromCharCode.apply(0,k)}if(y(s.random(),r),typeof t=="object"&&t.exports){t.exports=f;try{h=$D()}catch(k){}}else typeof define=="function"&&define.amd?define(function(){return f}):s["seed"+c]=f})(typeof self!="undefined"?self:e,[],Math)}}),cf=Wt({"node_modules/seedrandom/index.js"(e,t){var n=TD(),r=CD(),s=ND(),a=_D(),o=ED(),i=AD(),c=DD();c.alea=n,c.xor128=r,c.xorwow=s,c.xorshift7=a,c.xor4096=o,c.tychei=i,t.exports=c}}),G1=Wt({"(disabled):node_modules/string_decoder/lib/string_decoder.js"(){}}),Nv=Wt({"(disabled):fs"(){}}),_h=Wt({"(disabled):path"(){}}),FD=Wt({"(disabled):worker_threads"(){}}),RD=Wt({"(disabled):perf_hooks"(){}}),PD=Wt({"(disabled):os"(){}}),OD=Wt({"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.js"(e,t){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||{};function a(){return ue.buffer!=ze&&yt(ue.buffer),dt}function o(){return ue.buffer!=ze&&yt(ue.buffer),qn}function i(){return ue.buffer!=ze&&yt(ue.buffer),At}function c(){return ue.buffer!=ze&&yt(ue.buffer),on}function u(){return ue.buffer!=ze&&yt(ue.buffer),Ir}function l(){return ue.buffer!=ze&&yt(ue.buffer),vn}function p(){return ue.buffer!=ze&&yt(ue.buffer),jn}var d=typeof s!="undefined"?s:{},h,f;d.ready=new Promise(function(P,K){h=P,f=K});var m;typeof process!="undefined"&&process.listeners&&(m={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},d),b=[],y="./this.program",v=(P,K)=>{throw K},x=typeof window=="object",k=typeof importScripts=="function",S=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=d.ENVIRONMENT_IS_PTHREAD||!1,E="";function $(P){return d.locateFile?d.locateFile(P,E):E+P}var F,A,R,T;function L(P){if(P instanceof Oa)return;J("exiting due to exception: "+P)}if(S){k?E=_h().dirname(E)+"/":E=__dirname+"/";var V,G;typeof U1=="function"&&(V=Nv(),G=_h()),F=(K,oe)=>(K=G.normalize(K),V.readFileSync(K,oe?void 0:"utf8")),R=K=>{var oe=F(K,!0);return oe.buffer||(oe=new Uint8Array(oe)),oe},A=(K,oe,pe)=>{K=G.normalize(K),V.readFile(K,function(ke,He){ke?pe(ke):oe(He.buffer)})},process.argv.length>1&&(y=process.argv[1].replace(/\\/g,"/")),b=process.argv.slice(2),process.on("uncaughtException",function(K){if(!(K instanceof Oa))throw K}),process.on("unhandledRejection",function(K){throw K}),v=(K,oe)=>{if(Sr())throw process.exitCode=K,oe;L(oe),process.exit(K)},d.inspect=function(){return"[Emscripten Module object]"};let P;try{P=FD()}catch(K){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),K}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 K=new XMLHttpRequest;return K.open("GET",P,!1),K.send(null),K.responseText},k&&(R=P=>{var K=new XMLHttpRequest;return K.open("GET",P,!1),K.responseType="arraybuffer",K.send(null),new Uint8Array(K.response)}),A=(P,K,oe)=>{var pe=new XMLHttpRequest;pe.open("GET",P,!0),pe.responseType="arraybuffer",pe.onload=()=>{if(pe.status==200||pe.status==0&&pe.response){K(pe.response);return}oe()},pe.onerror=oe,pe.send(null)}),T=P=>document.title=P);S&&typeof performance=="undefined"&&(global.performance=RD().performance);var j=console.log.bind(console),H=console.warn.bind(console);S&&(j=P=>V.writeSync(1,P+`
|
|
`),H=P=>V.writeSync(2,P+`
|
|
`));var Z=d.print||j,J=d.printErr||H;Object.assign(d,g),g=null,d.arguments&&(b=d.arguments),d.thisProgram&&(y=d.thisProgram),d.quit&&(v=d.quit);var ee=4,re=Atomics.load,te=Atomics.store,ie=Atomics.compareExchange,ne;d.wasmBinary&&(ne=d.wasmBinary);var le=d.noExitRuntime||!0;typeof WebAssembly!="object"&&Yi("no native wasm support detected");var ue,ye,ve=!1,Se;function Le(P,K){P||Yi(K)}var je=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function nt(P,K,oe){for(var pe=K+oe,ke=K;P[ke]&&!(ke>=pe);)++ke;if(ke-K>16&&P.buffer&&je)return je.decode(P.buffer instanceof SharedArrayBuffer?P.slice(K,ke):P.subarray(K,ke));for(var He="";K<ke;){var Ne=P[K++];if(!(Ne&128)){He+=String.fromCharCode(Ne);continue}var Re=P[K++]&63;if((Ne&224)==192){He+=String.fromCharCode((Ne&31)<<6|Re);continue}var Mt=P[K++]&63;if((Ne&240)==224?Ne=(Ne&15)<<12|Re<<6|Mt:Ne=(Ne&7)<<18|Re<<12|Mt<<6|P[K++]&63,Ne<65536)He+=String.fromCharCode(Ne);else{var cr=Ne-65536;He+=String.fromCharCode(55296|cr>>10,56320|cr&1023)}}return He}function rt(P,K){return P?nt(o(),P,K):""}function st(P,K,oe,pe){if(!(pe>0))return 0;for(var ke=oe,He=oe+pe-1,Ne=0;Ne<P.length;++Ne){var Re=P.charCodeAt(Ne);if(Re>=55296&&Re<=57343){var Mt=P.charCodeAt(++Ne);Re=65536+((Re&1023)<<10)|Mt&1023}if(Re<=127){if(oe>=He)break;K[oe++]=Re}else if(Re<=2047){if(oe+1>=He)break;K[oe++]=192|Re>>6,K[oe++]=128|Re&63}else if(Re<=65535){if(oe+2>=He)break;K[oe++]=224|Re>>12,K[oe++]=128|Re>>6&63,K[oe++]=128|Re&63}else{if(oe+3>=He)break;K[oe++]=240|Re>>18,K[oe++]=128|Re>>12&63,K[oe++]=128|Re>>6&63,K[oe++]=128|Re&63}}return K[oe]=0,oe-ke}function Ze(P,K,oe){return st(P,o(),K,oe)}var ze,dt,qn,At,wr,on,Ir,vn,jn;C&&(ze=d.buffer);function yt(P){ze=P,d.HEAP8=dt=new Int8Array(P),d.HEAP16=At=new Int16Array(P),d.HEAP32=on=new Int32Array(P),d.HEAPU8=qn=new Uint8Array(P),d.HEAPU16=wr=new Uint16Array(P),d.HEAPU32=Ir=new Uint32Array(P),d.HEAPF32=vn=new Float32Array(P),d.HEAPF64=jn=new Float64Array(P)}var Pn=d.INITIAL_MEMORY||16777216;if(C)ue=d.wasmMemory,ze=d.buffer;else if(d.wasmMemory)ue=d.wasmMemory;else if(ue=new WebAssembly.Memory({initial:Pn/65536,maximum:32768,shared:!0}),!(ue.buffer instanceof SharedArrayBuffer))throw J("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),S&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");ue&&(ze=ue.buffer),Pn=ze.byteLength,yt(ze);var hn,ts=[],qs=[],kr=[],xl=!1;function Sr(){return le}function Ki(){if(d.preRun)for(typeof d.preRun=="function"&&(d.preRun=[d.preRun]);d.preRun.length;)Ng(d.preRun.shift());Sl(ts)}function Xt(){xl=!0,!C&&Sl(qs)}function Dp(){if(!C){if(d.postRun)for(typeof d.postRun=="function"&&(d.postRun=[d.postRun]);d.postRun.length;)GI(d.postRun.shift());Sl(kr)}}function Ng(P){ts.unshift(P)}function _g(P){qs.unshift(P)}function GI(P){kr.unshift(P)}var js=0,Xi=null,xs=null;function HI(P){js++,d.monitorRunDependencies&&d.monitorRunDependencies(js)}function qI(P){if(js--,d.monitorRunDependencies&&d.monitorRunDependencies(js),js==0&&(Xi!==null&&(clearInterval(Xi),Xi=null),xs)){var K=xs;xs=null,K()}}function Yi(P){C?postMessage({cmd:"onAbort",arg:P}):d.onAbort&&d.onAbort(P),P="Aborted("+P+")",J(P),ve=!0,Se=1,P+=". Build with -sASSERTIONS for more info.";var K=new WebAssembly.RuntimeError(P);throw f(K),K}var Eg="data:application/octet-stream;base64,";function Fp(P){return P.startsWith(Eg)}function wl(P){return P.startsWith("file://")}var xn;xn="tfjs-backend-wasm-threaded-simd.wasm",Fp(xn)||(xn=$(xn));function Rp(P){try{if(P==xn&&ne)return new Uint8Array(ne);if(R)return R(P);throw"both async and sync fetching of the wasm failed"}catch(K){Yi(K)}}function Ag(){if(!ne&&(x||k)){if(typeof fetch=="function"&&!wl(xn))return fetch(xn,{credentials:"same-origin"}).then(function(P){if(!P.ok)throw"failed to load wasm binary file at '"+xn+"'";return P.arrayBuffer()}).catch(function(){return Rp(xn)});if(A)return new Promise(function(P,K){A(xn,function(oe){P(new Uint8Array(oe))},K)})}return Promise.resolve().then(function(){return Rp(xn)})}function $g(){var P={env:qp,wasi_snapshot_preview1:qp};function K(Ne,Re){var Mt=Ne.exports;if(d.asm=Mt,Wg(d.asm._emscripten_tls_init),hn=d.asm.__indirect_function_table,_g(d.asm.__wasm_call_ctors),ye=Re,!C){var cr=$e.unusedWorkers.length;$e.unusedWorkers.forEach(function(Is){$e.loadWasmModuleToWorker(Is,function(){--cr||qI("wasm-instantiate")})})}}C||HI("wasm-instantiate");function oe(Ne){K(Ne.instance,Ne.module)}function pe(Ne){return Ag().then(function(Re){return WebAssembly.instantiate(Re,P)}).then(function(Re){return Re}).then(Ne,function(Re){J("failed to asynchronously prepare wasm: "+Re),Yi(Re)})}function ke(){return!ne&&typeof WebAssembly.instantiateStreaming=="function"&&!Fp(xn)&&!wl(xn)&&!S&&typeof fetch=="function"?fetch(xn,{credentials:"same-origin"}).then(function(Ne){var Re=WebAssembly.instantiateStreaming(Ne,P);return Re.then(oe,function(Mt){return J("wasm streaming compile failed: "+Mt),J("falling back to ArrayBuffer instantiation"),pe(oe)})}):pe(oe)}if(d.instantiateWasm)try{var He=d.instantiateWasm(P,K);return He}catch(Ne){J("Module.instantiateWasm callback failed with error: "+Ne),f(Ne)}return ke().catch(f),{}}var Dg,jI,Fg={};function Oa(P){this.name="ExitStatus",this.message="Program terminated with exit("+P+")",this.status=P}function Rg(P){var K=$e.pthreads[P];delete $e.pthreads[P],K.terminate(),uy(P),$e.runningWorkers.splice($e.runningWorkers.indexOf(K),1),K.pthread_ptr=0}function Pg(P){var K=$e.pthreads[P];K.postMessage({cmd:"cancel"})}function Il(P){var K=$e.pthreads[P];Le(K),$e.returnWorkerToPool(K)}function Pp(P){var K=$e.getNewWorker();if(!K)return 6;$e.runningWorkers.push(K),$e.pthreads[P.pthread_ptr]=K,K.pthread_ptr=P.pthread_ptr;var oe={cmd:"run",start_routine:P.startRoutine,arg:P.arg,pthread_ptr:P.pthread_ptr};return K.runPthread=()=>{oe.time=performance.now(),K.postMessage(oe,P.transferList)},K.loaded&&(K.runPthread(),delete K.runPthread),0}var Op={varargs:void 0,get:function(){Op.varargs+=4;var P=c()[Op.varargs-4>>2];return P},getStr:function(P){var K=rt(P);return K}};function kl(P){if(C)return Ks(1,1,P);Se=P,Sr()||($e.terminateAllThreads(),d.onExit&&d.onExit(P),ve=!0),v(P,new Oa(P))}function KI(P,K){if(Se=P,!K&&C)throw Lp(P),"unwind";kl(P)}var Mp=KI;function Og(P){if(P instanceof Oa||P=="unwind")return Se;v(1,P)}var $e={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init:function(){C?$e.initWorker():$e.initMainThread()},initMainThread:function(){for(var P=8;P--;)$e.allocateUnusedWorker()},initWorker:function(){le=!1},setExitStatus:function(P){Se=P},terminateAllThreads:function(){for(var P of Object.values($e.pthreads))$e.returnWorkerToPool(P);for(var P of $e.unusedWorkers)P.terminate();$e.unusedWorkers=[]},returnWorkerToPool:function(P){var K=P.pthread_ptr;delete $e.pthreads[K],$e.unusedWorkers.push(P),$e.runningWorkers.splice($e.runningWorkers.indexOf(P),1),P.pthread_ptr=0,uy(K)},receiveObjectTransfer:function(P){},threadInitTLS:function(){$e.tlsInitFunctions.forEach(P=>P())},loadWasmModuleToWorker:function(P,K){P.onmessage=oe=>{var pe=oe.data,ke=pe.cmd;if(P.pthread_ptr&&($e.currentProxiedOperationCallerThread=P.pthread_ptr),pe.targetThread&&pe.targetThread!=Jp()){var He=$e.pthreads[pe.targetThread];He?He.postMessage(pe,pe.transferList):J('Internal error! Worker sent a message "'+ke+'" to target pthread '+pe.targetThread+", but that thread no longer exists!"),$e.currentProxiedOperationCallerThread=void 0;return}ke==="processProxyingQueue"?Tl(pe.queue):ke==="spawnThread"?Pp(pe):ke==="cleanupThread"?Il(pe.thread):ke==="killThread"?Rg(pe.thread):ke==="cancelThread"?Pg(pe.thread):ke==="loaded"?(P.loaded=!0,K&&K(P),P.runPthread&&(P.runPthread(),delete P.runPthread)):ke==="print"?Z("Thread "+pe.threadId+": "+pe.text):ke==="printErr"?J("Thread "+pe.threadId+": "+pe.text):ke==="alert"?alert("Thread "+pe.threadId+": "+pe.text):pe.target==="setimmediate"?P.postMessage(pe):ke==="onAbort"?d.onAbort&&d.onAbort(pe.arg):ke&&J("worker sent an unknown command "+ke),$e.currentProxiedOperationCallerThread=void 0},P.onerror=oe=>{var pe="worker sent an error!";throw J(pe+" "+oe.filename+":"+oe.lineno+": "+oe.message),oe},S&&(P.on("message",function(oe){P.onmessage({data:oe})}),P.on("error",function(oe){P.onerror(oe)}),P.on("detachedExit",function(){})),P.postMessage({cmd:"load",urlOrBlob:d.mainScriptUrlOrBlob||r,wasmMemory:ue,wasmModule:ye})},allocateUnusedWorker:function(){var P=$("tfjs-backend-wasm-threaded-simd.worker.js");$e.unusedWorkers.push(new Worker(P))},getNewWorker:function(){return $e.unusedWorkers.length==0&&($e.allocateUnusedWorker(),$e.loadWasmModuleToWorker($e.unusedWorkers[0])),$e.unusedWorkers.pop()}};d.PThread=$e;function Sl(P){for(;P.length>0;)P.shift()(d)}function Mg(P){var K=ly(),oe=P();return Qp(K),oe}function XI(P){return P}function YI(P){var K=/\b_Z[\w\d_]+/g;return P.replace(K,function(oe){var pe=oe;return oe===pe?oe:pe+" ["+oe+"]"})}function Lg(){var P=Jp(),K=c()[P+44>>2],oe=c()[P+48>>2],pe=K-oe;rk(K,pe),Qp(K)}d.establishStackSpace=Lg;function Lp(P){if(C)return Ks(2,0,P);try{Mp(P)}catch(K){Og(K)}}var Zi=[];function zg(P){var K=Zi[P];return K||(P>=Zi.length&&(Zi.length=P+1),Zi[P]=K=hn.get(P)),K}function Bg(P,K){var oe=zg(P)(K);Sr()?$e.setExitStatus(oe):nk(oe)}d.invokeEntryPoint=Bg;function ZI(){var P=new Error;if(!P.stack){try{throw new Error}catch(K){P=K}if(!P.stack)return"(no stack trace available)"}return P.stack.toString()}function Wg(P){$e.tlsInitFunctions.push(P)}function Vg(P,K){a().set(P,K)}function Ug(P){QI(P,!k,1,!x),$e.threadInitTLS()}function Gg(P){C?postMessage({cmd:"cleanupThread",thread:P}):Il(P)}function zp(P,K,oe,pe){return C?Ks(3,1,P,K,oe,pe):Bp(P,K,oe,pe)}function Bp(P,K,oe,pe){if(typeof SharedArrayBuffer=="undefined")return J("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var ke=[],He=0;if(C&&(ke.length===0||He))return zp(P,K,oe,pe);if(He)return He;var Ne={startRoutine:oe,pthread_ptr:P,arg:pe,transferList:ke};return C?(Ne.cmd="spawnThread",postMessage(Ne,ke),0):Pp(Ne)}function Hg(){return 2097152}var qg=!0;function jg(){return qg}function Tl(P){Atomics.store(c(),P>>2,1),Jp()&&tk(P),Atomics.compareExchange(c(),P>>2,1,0)}d.executeNotifiedProxyingQueue=Tl;function Kg(P,K,oe,pe){if(P==K)setTimeout(()=>Tl(pe));else if(C)postMessage({targetThread:P,cmd:"processProxyingQueue",queue:pe});else{var ke=$e.pthreads[P];if(!ke)return;ke.postMessage({cmd:"processProxyingQueue",queue:pe})}return 1}function Xg(P,K,oe){return-1}function Yg(){Yi("")}function Ma(P){Ma.shown||(Ma.shown={}),Ma.shown[P]||(Ma.shown[P]=1,S&&(P="warning: "+P),J(P))}function Zg(){S||k||Ma("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Jg(){return Date.now()}function Wp(){return 2147483648}function Qg(){return Wp()}var Ji;S?Ji=()=>{var P=process.hrtime();return P[0]*1e3+P[1]/1e6}:C?Ji=()=>performance.now()-d.__performance_now_clock_drift:Ji=()=>performance.now();function eb(P,K,oe){o().copyWithin(P,K,K+oe)}function tb(){return S?PD().cpus().length:navigator.hardwareConcurrency}function Ks(P,K){var oe=arguments.length-2,pe=arguments;return Mg(()=>{for(var ke=oe,He=eh(ke*8),Ne=He>>3,Re=0;Re<oe;Re++){var Mt=pe[2+Re];p()[Ne+Re]=Mt}return ek(P,ke,He,K)})}var Cl=[];function nb(P,K,oe){Cl.length=K;for(var pe=oe>>3,ke=0;ke<K;ke++)Cl[ke]=p()[pe+ke];var He=P<0,Ne=He?Fg[-P-1]:lb[P];return Ne.apply(null,Cl)}function rb(P){try{return ue.grow(P-ze.byteLength+65535>>>16),yt(ue.buffer),1}catch(K){}}function sb(P){var K=o().length;if(P=P>>>0,P<=K)return!1;var oe=Wp();if(P>oe)return!1;let pe=(Mt,cr)=>Mt+(cr-Mt%cr)%cr;for(var ke=1;ke<=4;ke*=2){var He=K*(1+.2/ke);He=Math.min(He,P+100663296);var Ne=Math.min(oe,pe(Math.max(P,He),65536)),Re=rb(Ne);if(Re)return!0}return!1}function ab(){throw"unwind"}function Vp(P){return C?Ks(4,1,P):52}function Up(P,K,oe,pe,ke){return C?Ks(5,1,P,K,oe,pe,ke):70}var ob=[null,[],[]];function ib(P,K){var oe=ob[P];K===0||K===10?((P===1?Z:J)(nt(oe,0)),oe.length=0):oe.push(K)}function Gp(P,K,oe,pe){if(C)return Ks(6,1,P,K,oe,pe);for(var ke=0,He=0;He<oe;He++){var Ne=u()[K>>2],Re=u()[K+4>>2];K+=8;for(var Mt=0;Mt<Re;Mt++)ib(P,o()[Ne+Mt]);ke+=Re}return u()[pe>>2]=ke,0}function Hp(P){var K=d["_"+P];return K}function cb(P,K,oe,pe,ke){var He={string:Kn=>{var nc=0;if(Kn!=null&&Kn!==0){var ok=(Kn.length<<2)+1;nc=eh(ok),Ze(Kn,nc,ok)}return nc},array:Kn=>{var nc=eh(Kn.length);return Vg(Kn,nc),nc}};function Ne(Kn){return K==="string"?rt(Kn):K==="boolean"?Boolean(Kn):Kn}var Re=Hp(P),Mt=[],cr=0;if(pe)for(var Is=0;Is<pe.length;Is++){var ak=He[oe[Is]];ak?(cr===0&&(cr=ly()),Mt[Is]=ak(pe[Is])):Mt[Is]=pe[Is]}var dy=Re.apply(null,Mt);function dD(Kn){return cr!==0&&Qp(cr),Ne(Kn)}return dy=dD(dy),dy}function ub(P,K,oe,pe){oe=oe||[];var ke=oe.every(Ne=>Ne==="number"||Ne==="boolean"),He=K!=="string";return He&&ke&&!pe?Hp(P):function(){return cb(P,K,oe,arguments,pe)}}$e.init();var lb=[null,kl,Lp,zp,Vp,Up,Gp],qp={__emscripten_init_main_thread_js:Ug,__emscripten_thread_cleanup:Gg,__pthread_create_js:Bp,_emscripten_default_pthread_stack_size:Hg,_emscripten_get_now_is_monotonic:jg,_emscripten_notify_task_queue:Kg,_emscripten_set_offscreencanvas_size:Xg,abort:Yg,emscripten_check_blocking_allowed:Zg,emscripten_date_now:Jg,emscripten_get_heap_max:Qg,emscripten_get_now:Ji,emscripten_memcpy_big:eb,emscripten_num_logical_cores:tb,emscripten_receive_on_main_thread_js:nb,emscripten_resize_heap:sb,emscripten_unwind_to_js_event_loop:ab,exit:Mp,fd_close:Vp,fd_seek:Up,fd_write:Gp,memory:ue||d.wasmMemory},JI=$g(),db=d.___wasm_call_ctors=function(){return(db=d.___wasm_call_ctors=d.asm.__wasm_call_ctors).apply(null,arguments)},pb=d._init=function(){return(pb=d._init=d.asm.init).apply(null,arguments)},hb=d._init_with_threads_count=function(){return(hb=d._init_with_threads_count=d.asm.init_with_threads_count).apply(null,arguments)},fb=d._get_threads_count=function(){return(fb=d._get_threads_count=d.asm.get_threads_count).apply(null,arguments)},mb=d._register_tensor=function(){return(mb=d._register_tensor=d.asm.register_tensor).apply(null,arguments)},gb=d._dispose_data=function(){return(gb=d._dispose_data=d.asm.dispose_data).apply(null,arguments)},bb=d._dispose=function(){return(bb=d._dispose=d.asm.dispose).apply(null,arguments)},yb=d._Abs=function(){return(yb=d._Abs=d.asm.Abs).apply(null,arguments)},vb=d._Add=function(){return(vb=d._Add=d.asm.Add).apply(null,arguments)},xb=d._AddN=function(){return(xb=d._AddN=d.asm.AddN).apply(null,arguments)},wb=d._All=function(){return(wb=d._All=d.asm.All).apply(null,arguments)},Ib=d._Any=function(){return(Ib=d._Any=d.asm.Any).apply(null,arguments)},kb=d._ArgMax=function(){return(kb=d._ArgMax=d.asm.ArgMax).apply(null,arguments)},Sb=d._AvgPool=function(){return(Sb=d._AvgPool=d.asm.AvgPool).apply(null,arguments)},Tb=d._BatchMatMul=function(){return(Tb=d._BatchMatMul=d.asm.BatchMatMul).apply(null,arguments)},Cb=d._Ceil=function(){return(Cb=d._Ceil=d.asm.Ceil).apply(null,arguments)},Nb=d._ClipByValue=function(){return(Nb=d._ClipByValue=d.asm.ClipByValue).apply(null,arguments)},_b=d._Conv2D=function(){return(_b=d._Conv2D=d.asm.Conv2D).apply(null,arguments)},Eb=d._Conv2DBackpropInput=function(){return(Eb=d._Conv2DBackpropInput=d.asm.Conv2DBackpropInput).apply(null,arguments)},Ab=d._Cos=function(){return(Ab=d._Cos=d.asm.Cos).apply(null,arguments)},$b=d._Cosh=function(){return($b=d._Cosh=d.asm.Cosh).apply(null,arguments)},Db=d._CropAndResize=function(){return(Db=d._CropAndResize=d.asm.CropAndResize).apply(null,arguments)},Fb=d._Cumprod=function(){return(Fb=d._Cumprod=d.asm.Cumprod).apply(null,arguments)},Rb=d._Cumsum=function(){return(Rb=d._Cumsum=d.asm.Cumsum).apply(null,arguments)},Pb=d._DepthToSpace=function(){return(Pb=d._DepthToSpace=d.asm.DepthToSpace).apply(null,arguments)},Ob=d._DepthwiseConv2dNative=function(){return(Ob=d._DepthwiseConv2dNative=d.asm.DepthwiseConv2dNative).apply(null,arguments)},Mb=d._Elu=function(){return(Mb=d._Elu=d.asm.Elu).apply(null,arguments)},Lb=d._Equal=function(){return(Lb=d._Equal=d.asm.Equal).apply(null,arguments)},zb=d._Exp=function(){return(zb=d._Exp=d.asm.Exp).apply(null,arguments)},Bb=d._FlipLeftRight=function(){return(Bb=d._FlipLeftRight=d.asm.FlipLeftRight).apply(null,arguments)},Wb=d._Floor=function(){return(Wb=d._Floor=d.asm.Floor).apply(null,arguments)},Vb=d._FloorDiv=function(){return(Vb=d._FloorDiv=d.asm.FloorDiv).apply(null,arguments)},Ub=d._FusedBatchNorm=function(){return(Ub=d._FusedBatchNorm=d.asm.FusedBatchNorm).apply(null,arguments)},Gb=d._FusedConv2D=function(){return(Gb=d._FusedConv2D=d.asm.FusedConv2D).apply(null,arguments)},Hb=d._FusedDepthwiseConv2D=function(){return(Hb=d._FusedDepthwiseConv2D=d.asm.FusedDepthwiseConv2D).apply(null,arguments)},qb=d._Gather=function(){return(qb=d._Gather=d.asm.Gather).apply(null,arguments)},jb=d._GatherNd=function(){return(jb=d._GatherNd=d.asm.GatherNd).apply(null,arguments)},Kb=d._Greater=function(){return(Kb=d._Greater=d.asm.Greater).apply(null,arguments)},Xb=d._GreaterEqual=function(){return(Xb=d._GreaterEqual=d.asm.GreaterEqual).apply(null,arguments)},Yb=d._LeakyRelu=function(){return(Yb=d._LeakyRelu=d.asm.LeakyRelu).apply(null,arguments)},Zb=d._Less=function(){return(Zb=d._Less=d.asm.Less).apply(null,arguments)},Jb=d._LessEqual=function(){return(Jb=d._LessEqual=d.asm.LessEqual).apply(null,arguments)},Qb=d._Log=function(){return(Qb=d._Log=d.asm.Log).apply(null,arguments)},ey=d._LogicalAnd=function(){return(ey=d._LogicalAnd=d.asm.LogicalAnd).apply(null,arguments)},ty=d._LogicalNot=function(){return(ty=d._LogicalNot=d.asm.LogicalNot).apply(null,arguments)},ny=d._LogicalOr=function(){return(ny=d._LogicalOr=d.asm.LogicalOr).apply(null,arguments)},ry=d._LogicalXor=function(){return(ry=d._LogicalXor=d.asm.LogicalXor).apply(null,arguments)},sy=d._Max=function(){return(sy=d._Max=d.asm.Max).apply(null,arguments)},jp=d._MaxPool=function(){return(jp=d._MaxPool=d.asm.MaxPool).apply(null,arguments)},Kp=d._Maximum=function(){return(Kp=d._Maximum=d.asm.Maximum).apply(null,arguments)},Nl=d._Mean=function(){return(Nl=d._Mean=d.asm.Mean).apply(null,arguments)},ay=d._Min=function(){return(ay=d._Min=d.asm.Min).apply(null,arguments)},oy=d._Minimum=function(){return(oy=d._Minimum=d.asm.Minimum).apply(null,arguments)},Qi=d._MirrorPad=function(){return(Qi=d._MirrorPad=d.asm.MirrorPad).apply(null,arguments)},Xp=d._Multiply=function(){return(Xp=d._Multiply=d.asm.Multiply).apply(null,arguments)},ec=d._Neg=function(){return(ec=d._Neg=d.asm.Neg).apply(null,arguments)},tc=d._NonMaxSuppressionV3=function(){return(tc=d._NonMaxSuppressionV3=d.asm.NonMaxSuppressionV3).apply(null,arguments)},iy=d._NonMaxSuppressionV4=function(){return(iy=d._NonMaxSuppressionV4=d.asm.NonMaxSuppressionV4).apply(null,arguments)},X=d._NonMaxSuppressionV5=function(){return(X=d._NonMaxSuppressionV5=d.asm.NonMaxSuppressionV5).apply(null,arguments)},ae=d._NotEqual=function(){return(ae=d._NotEqual=d.asm.NotEqual).apply(null,arguments)},Ie=d._OneHot=function(){return(Ie=d._OneHot=d.asm.OneHot).apply(null,arguments)},Ge=d._PadV2=function(){return(Ge=d._PadV2=d.asm.PadV2).apply(null,arguments)},wt=d._Pow=function(){return(wt=d._Pow=d.asm.Pow).apply(null,arguments)},It=d._Prelu=function(){return(It=d._Prelu=d.asm.Prelu).apply(null,arguments)},Ve=d._Prod=function(){return(Ve=d._Prod=d.asm.Prod).apply(null,arguments)},Be=d._RealDiv=function(){return(Be=d._RealDiv=d.asm.RealDiv).apply(null,arguments)},Ot=d._Relu=function(){return(Ot=d._Relu=d.asm.Relu).apply(null,arguments)},ir=d._Relu6=function(){return(ir=d._Relu6=d.asm.Relu6).apply(null,arguments)},ws=d._ResizeBilinear=function(){return(ws=d._ResizeBilinear=d.asm.ResizeBilinear).apply(null,arguments)},Yp=d._ResizeNearestNeighbor=function(){return(Yp=d._ResizeNearestNeighbor=d.asm.ResizeNearestNeighbor).apply(null,arguments)},_l=d._Reverse=function(){return(_l=d._Reverse=d.asm.Reverse).apply(null,arguments)},cy=d._RotateWithOffset=function(){return(cy=d._RotateWithOffset=d.asm.RotateWithOffset).apply(null,arguments)},wn=d._Round=function(){return(wn=d._Round=d.asm.Round).apply(null,arguments)},Xs=d._Rsqrt=function(){return(Xs=d._Rsqrt=d.asm.Rsqrt).apply(null,arguments)},Zp=d._ScatterNd=function(){return(Zp=d._ScatterNd=d.asm.ScatterNd).apply(null,arguments)},F$=d._SelectV2=function(){return(F$=d._SelectV2=d.asm.SelectV2).apply(null,arguments)},R$=d._Sigmoid=function(){return(R$=d._Sigmoid=d.asm.Sigmoid).apply(null,arguments)},P$=d._Sin=function(){return(P$=d._Sin=d.asm.Sin).apply(null,arguments)},O$=d._Softmax=function(){return(O$=d._Softmax=d.asm.Softmax).apply(null,arguments)},M$=d._SparseFillEmptyRows=function(){return(M$=d._SparseFillEmptyRows=d.asm.SparseFillEmptyRows).apply(null,arguments)},L$=d._SparseReshape=function(){return(L$=d._SparseReshape=d.asm.SparseReshape).apply(null,arguments)},z$=d._SparseSegmentReduction=function(){return(z$=d._SparseSegmentReduction=d.asm.SparseSegmentReduction).apply(null,arguments)},B$=d._Sqrt=function(){return(B$=d._Sqrt=d.asm.Sqrt).apply(null,arguments)},W$=d._Square=function(){return(W$=d._Square=d.asm.Square).apply(null,arguments)},V$=d._SquaredDifference=function(){return(V$=d._SquaredDifference=d.asm.SquaredDifference).apply(null,arguments)},U$=d._Step=function(){return(U$=d._Step=d.asm.Step).apply(null,arguments)},G$=d._StridedSlice=function(){return(G$=d._StridedSlice=d.asm.StridedSlice).apply(null,arguments)},H$=d._Sub=function(){return(H$=d._Sub=d.asm.Sub).apply(null,arguments)},q$=d._Sum=function(){return(q$=d._Sum=d.asm.Sum).apply(null,arguments)},j$=d._Tan=function(){return(j$=d._Tan=d.asm.Tan).apply(null,arguments)},K$=d._Tanh=function(){return(K$=d._Tanh=d.asm.Tanh).apply(null,arguments)},X$=d._Tile=function(){return(X$=d._Tile=d.asm.Tile).apply(null,arguments)},Y$=d._TopK=function(){return(Y$=d._TopK=d.asm.TopK).apply(null,arguments)},Z$=d._Transform=function(){return(Z$=d._Transform=d.asm.Transform).apply(null,arguments)},J$=d._Transpose=function(){return(J$=d._Transpose=d.asm.Transpose).apply(null,arguments)},Q$=d.__FusedMatMul=function(){return(Q$=d.__FusedMatMul=d.asm._FusedMatMul).apply(null,arguments)},eD=d._malloc=function(){return(eD=d._malloc=d.asm.malloc).apply(null,arguments)},tD=d._free=function(){return(tD=d._free=d.asm.free).apply(null,arguments)},nD=d.__emscripten_tls_init=function(){return(nD=d.__emscripten_tls_init=d.asm._emscripten_tls_init).apply(null,arguments)},Jp=d._pthread_self=function(){return(Jp=d._pthread_self=d.asm.pthread_self).apply(null,arguments)},rD=d.___errno_location=function(){return(rD=d.___errno_location=d.asm.__errno_location).apply(null,arguments)},QI=d.__emscripten_thread_init=function(){return(QI=d.__emscripten_thread_init=d.asm._emscripten_thread_init).apply(null,arguments)},sD=d.__emscripten_thread_crashed=function(){return(sD=d.__emscripten_thread_crashed=d.asm._emscripten_thread_crashed).apply(null,arguments)},aD=d._emscripten_main_thread_process_queued_calls=function(){return(aD=d._emscripten_main_thread_process_queued_calls=d.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},oD=d._emscripten_main_browser_thread_id=function(){return(oD=d._emscripten_main_browser_thread_id=d.asm.emscripten_main_browser_thread_id).apply(null,arguments)},ek=d._emscripten_run_in_main_runtime_thread_js=function(){return(ek=d._emscripten_run_in_main_runtime_thread_js=d.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},iD=d._emscripten_dispatch_to_thread_=function(){return(iD=d._emscripten_dispatch_to_thread_=d.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},tk=d.__emscripten_proxy_execute_task_queue=function(){return(tk=d.__emscripten_proxy_execute_task_queue=d.asm._emscripten_proxy_execute_task_queue).apply(null,arguments)},uy=d.__emscripten_thread_free_data=function(){return(uy=d.__emscripten_thread_free_data=d.asm._emscripten_thread_free_data).apply(null,arguments)},nk=d.__emscripten_thread_exit=function(){return(nk=d.__emscripten_thread_exit=d.asm._emscripten_thread_exit).apply(null,arguments)},rk=d._emscripten_stack_set_limits=function(){return(rk=d._emscripten_stack_set_limits=d.asm.emscripten_stack_set_limits).apply(null,arguments)},ly=d.stackSave=function(){return(ly=d.stackSave=d.asm.stackSave).apply(null,arguments)},Qp=d.stackRestore=function(){return(Qp=d.stackRestore=d.asm.stackRestore).apply(null,arguments)},eh=d.stackAlloc=function(){return(eh=d.stackAlloc=d.asm.stackAlloc).apply(null,arguments)},cD=d.dynCall_iijjiiii=function(){return(cD=d.dynCall_iijjiiii=d.asm.dynCall_iijjiiii).apply(null,arguments)},uD=d.dynCall_jiji=function(){return(uD=d.dynCall_jiji=d.asm.dynCall_jiji).apply(null,arguments)};d.keepRuntimeAlive=Sr,d.wasmMemory=ue,d.cwrap=ub,d.ExitStatus=Oa,d.PThread=$e;var th;xs=function P(){th||sk(),th||(xs=P)};function sk(P){if(P=P||b,js>0)return;if(C){h(d),Xt(),postMessage({cmd:"loaded"});return}if(Ki(),js>0)return;function K(){th||(th=!0,d.calledRun=!0,!ve&&(Xt(),h(d),d.onRuntimeInitialized&&d.onRuntimeInitialized(),Dp()))}d.setStatus?(d.setStatus("Running..."),setTimeout(function(){setTimeout(function(){d.setStatus("")},1),K()},1)):K()}if(d.preInit)for(typeof d.preInit=="function"&&(d.preInit=[d.preInit]);d.preInit.length>0;)d.preInit.pop()();sk();var nh;m&&(nh={uncaughtException:process.listeners("uncaughtException").filter(function(P){return!m.uncaughtException.indexOf(P)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(P){return!m.unhandledRejection.indexOf(P)>-1})});var rh;if(typeof WasmBackendModule!="undefined")rh=WasmBackendModule;else if(typeof s!="undefined")rh=s;else throw new Error("Could not find wasm module in post.js");if(nh){var lD=rh._dispose;rh._dispose=function(){lD(),nh.uncaughtException.forEach(function(P){process.removeListener("uncaughtException",P)}),nh.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)}}),MD=Wt({"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm-threaded-simd.worker.js"(e,t){t.exports.wasmWorkerContents=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",data=>onmessage({data:data}));var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},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.onmessage=e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob=="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.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}};`}}),LD=Wt({"node_modules/@tensorflow/tfjs-backend-wasm/wasm-out/tfjs-backend-wasm.js"(e,t){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(X,ae){o=X,i=ae});var c;typeof process!="undefined"&&process.listeners&&(c={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},a),l=[],p="./this.program",d=(X,ae)=>{throw ae},h=typeof window=="object",f=typeof importScripts=="function",m=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function b(X){return a.locateFile?a.locateFile(X,g):g+X}var y,v,x,k;function S(X){if(X instanceof Xi)return;F("exiting due to exception: "+X)}if(m){f?g=_h().dirname(g)+"/":g=__dirname+"/";var C,E;typeof U1=="function"&&(C=Nv(),E=_h()),y=(X,ae)=>(X=E.normalize(X),C.readFileSync(X,ae?void 0:"utf8")),x=X=>{var ae=y(X,!0);return ae.buffer||(ae=new Uint8Array(ae)),ae},v=(X,ae,Ie)=>{X=E.normalize(X),C.readFile(X,function(Ge,wt){Ge?Ie(Ge):ae(wt.buffer)})},process.argv.length>1&&(p=process.argv[1].replace(/\\/g,"/")),l=process.argv.slice(2),process.on("uncaughtException",function(X){if(!(X instanceof Xi))throw X}),process.on("unhandledRejection",function(X){throw X}),d=(X,ae)=>{if(qn())throw process.exitCode=X,ae;S(ae),process.exit(X)},a.inspect=function(){return"[Emscripten Module object]"}}else(h||f)&&(f?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),r&&(g=r),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",y=X=>{var ae=new XMLHttpRequest;return ae.open("GET",X,!1),ae.send(null),ae.responseText},f&&(x=X=>{var ae=new XMLHttpRequest;return ae.open("GET",X,!1),ae.responseType="arraybuffer",ae.send(null),new Uint8Array(ae.response)}),v=(X,ae,Ie)=>{var Ge=new XMLHttpRequest;Ge.open("GET",X,!0),Ge.responseType="arraybuffer",Ge.onload=()=>{if(Ge.status==200||Ge.status==0&&Ge.response){ae(Ge.response);return}Ie()},Ge.onerror=Ie,Ge.send(null)},k=X=>document.title=X);var $=a.print||console.log.bind(console),F=a.printErr||console.warn.bind(console);Object.assign(a,u),u=null,a.arguments&&(l=a.arguments),a.thisProgram&&(p=a.thisProgram),a.quit&&(d=a.quit);var A=4,R;a.wasmBinary&&(R=a.wasmBinary);var T=a.noExitRuntime||!0;typeof WebAssembly!="object"&&kr("no native wasm support detected");var L,V=!1,G;function j(X,ae){X||kr(ae)}var H=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function Z(X,ae,Ie){for(var Ge=ae+Ie,wt=ae;X[wt]&&!(wt>=Ge);)++wt;if(wt-ae>16&&X.buffer&&H)return H.decode(X.subarray(ae,wt));for(var It="";ae<wt;){var Ve=X[ae++];if(!(Ve&128)){It+=String.fromCharCode(Ve);continue}var Be=X[ae++]&63;if((Ve&224)==192){It+=String.fromCharCode((Ve&31)<<6|Be);continue}var Ot=X[ae++]&63;if((Ve&240)==224?Ve=(Ve&15)<<12|Be<<6|Ot:Ve=(Ve&7)<<18|Be<<12|Ot<<6|X[ae++]&63,Ve<65536)It+=String.fromCharCode(Ve);else{var ir=Ve-65536;It+=String.fromCharCode(55296|ir>>10,56320|ir&1023)}}return It}function J(X,ae){return X?Z(ne,X,ae):""}function ee(X,ae,Ie,Ge){if(!(Ge>0))return 0;for(var wt=Ie,It=Ie+Ge-1,Ve=0;Ve<X.length;++Ve){var Be=X.charCodeAt(Ve);if(Be>=55296&&Be<=57343){var Ot=X.charCodeAt(++Ve);Be=65536+((Be&1023)<<10)|Ot&1023}if(Be<=127){if(Ie>=It)break;ae[Ie++]=Be}else if(Be<=2047){if(Ie+1>=It)break;ae[Ie++]=192|Be>>6,ae[Ie++]=128|Be&63}else if(Be<=65535){if(Ie+2>=It)break;ae[Ie++]=224|Be>>12,ae[Ie++]=128|Be>>6&63,ae[Ie++]=128|Be&63}else{if(Ie+3>=It)break;ae[Ie++]=240|Be>>18,ae[Ie++]=128|Be>>12&63,ae[Ie++]=128|Be>>6&63,ae[Ie++]=128|Be&63}}return ae[Ie]=0,Ie-wt}function re(X,ae,Ie){return ee(X,ne,ae,Ie)}var te,ie,ne,le,ue,ye,ve,Se,Le;function je(X){te=X,a.HEAP8=ie=new Int8Array(X),a.HEAP16=le=new Int16Array(X),a.HEAP32=ye=new Int32Array(X),a.HEAPU8=ne=new Uint8Array(X),a.HEAPU16=ue=new Uint16Array(X),a.HEAPU32=ve=new Uint32Array(X),a.HEAPF32=Se=new Float32Array(X),a.HEAPF64=Le=new Float64Array(X)}var nt=a.INITIAL_MEMORY||16777216,rt,st=[],Ze=[],ze=[],dt=!1;function qn(){return T}function At(){if(a.preRun)for(typeof a.preRun=="function"&&(a.preRun=[a.preRun]);a.preRun.length;)Ir(a.preRun.shift());xs(st)}function wr(){dt=!0,xs(Ze)}function on(){if(a.postRun)for(typeof a.postRun=="function"&&(a.postRun=[a.postRun]);a.postRun.length;)jn(a.postRun.shift());xs(ze)}function Ir(X){st.unshift(X)}function vn(X){Ze.unshift(X)}function jn(X){ze.unshift(X)}var yt=0,Pn=null,hn=null;function ts(X){yt++,a.monitorRunDependencies&&a.monitorRunDependencies(yt)}function qs(X){if(yt--,a.monitorRunDependencies&&a.monitorRunDependencies(yt),yt==0&&(Pn!==null&&(clearInterval(Pn),Pn=null),hn)){var ae=hn;hn=null,ae()}}function kr(X){a.onAbort&&a.onAbort(X),X="Aborted("+X+")",F(X),V=!0,G=1,X+=". Build with -sASSERTIONS for more info.";var ae=new WebAssembly.RuntimeError(X);throw i(ae),ae}var xl="data:application/octet-stream;base64,";function Sr(X){return X.startsWith(xl)}function Ki(X){return X.startsWith("file://")}var Xt;Xt="tfjs-backend-wasm.wasm",Sr(Xt)||(Xt=b(Xt));function Dp(X){try{if(X==Xt&&R)return new Uint8Array(R);if(x)return x(X);throw"both async and sync fetching of the wasm failed"}catch(ae){kr(ae)}}function Ng(){if(!R&&(h||f)){if(typeof fetch=="function"&&!Ki(Xt))return fetch(Xt,{credentials:"same-origin"}).then(function(X){if(!X.ok)throw"failed to load wasm binary file at '"+Xt+"'";return X.arrayBuffer()}).catch(function(){return Dp(Xt)});if(v)return new Promise(function(X,ae){v(Xt,function(Ie){X(new Uint8Array(Ie))},ae)})}return Promise.resolve().then(function(){return Dp(Xt)})}function _g(){var X={env:kl,wasi_snapshot_preview1:kl};function ae(Ve,Be){var Ot=Ve.exports;a.asm=Ot,L=a.asm.memory,je(L.buffer),rt=a.asm.__indirect_function_table,vn(a.asm.__wasm_call_ctors),qs("wasm-instantiate")}ts("wasm-instantiate");function Ie(Ve){ae(Ve.instance)}function Ge(Ve){return Ng().then(function(Be){return WebAssembly.instantiate(Be,X)}).then(function(Be){return Be}).then(Ve,function(Be){F("failed to asynchronously prepare wasm: "+Be),kr(Be)})}function wt(){return!R&&typeof WebAssembly.instantiateStreaming=="function"&&!Sr(Xt)&&!Ki(Xt)&&!m&&typeof fetch=="function"?fetch(Xt,{credentials:"same-origin"}).then(function(Ve){var Be=WebAssembly.instantiateStreaming(Ve,X);return Be.then(Ie,function(Ot){return F("wasm streaming compile failed: "+Ot),F("falling back to ArrayBuffer instantiation"),Ge(Ie)})}):Ge(Ie)}if(a.instantiateWasm)try{var It=a.instantiateWasm(X,ae);return It}catch(Ve){F("Module.instantiateWasm callback failed with error: "+Ve),i(Ve)}return wt().catch(i),{}}var GI,js;function Xi(X){this.name="ExitStatus",this.message="Program terminated with exit("+X+")",this.status=X}function xs(X){for(;X.length>0;)X.shift()(a)}function HI(X){return X}function qI(X){var ae=/\b_Z[\w\d_]+/g;return X.replace(ae,function(Ie){var Ge=Ie;return Ie===Ge?Ie:Ge+" ["+Ie+"]"})}function Yi(){var X=new Error;if(!X.stack){try{throw new Error}catch(ae){X=ae}if(!X.stack)return"(no stack trace available)"}return X.stack.toString()}function Eg(X,ae){ie.set(X,ae)}function Fp(){kr("")}function wl(){return 2147483648}function xn(){return wl()}function Rp(X,ae,Ie){ne.copyWithin(X,ae,ae+Ie)}function Ag(X){try{return L.grow(X-te.byteLength+65535>>>16),je(L.buffer),1}catch(ae){}}function $g(X){var ae=ne.length;X=X>>>0;var Ie=wl();if(X>Ie)return!1;let Ge=(Ot,ir)=>Ot+(ir-Ot%ir)%ir;for(var wt=1;wt<=4;wt*=2){var It=ae*(1+.2/wt);It=Math.min(It,X+100663296);var Ve=Math.min(Ie,Ge(Math.max(X,It),65536)),Be=Ag(Ve);if(Be)return!0}return!1}var Dg={varargs:void 0,get:function(){Dg.varargs+=4;var X=ye[Dg.varargs-4>>2];return X},getStr:function(X){var ae=J(X);return ae}};function jI(X){return 52}function Fg(X,ae,Ie,Ge,wt){return 70}var Oa=[null,[],[]];function Rg(X,ae){var Ie=Oa[X];ae===0||ae===10?((X===1?$:F)(Z(Ie,0)),Ie.length=0):Ie.push(ae)}function Pg(X,ae,Ie,Ge){for(var wt=0,It=0;It<Ie;It++){var Ve=ve[ae>>2],Be=ve[ae+4>>2];ae+=8;for(var Ot=0;Ot<Be;Ot++)Rg(X,ne[Ve+Ot]);wt+=Be}return ve[Ge>>2]=wt,0}function Il(X){var ae=a["_"+X];return ae}function Pp(X,ae,Ie,Ge,wt){var It={string:wn=>{var Xs=0;if(wn!=null&&wn!==0){var Zp=(wn.length<<2)+1;Xs=Nl(Zp),re(wn,Xs,Zp)}return Xs},array:wn=>{var Xs=Nl(wn.length);return Eg(wn,Xs),Xs}};function Ve(wn){return ae==="string"?J(wn):ae==="boolean"?Boolean(wn):wn}var Be=Il(X),Ot=[],ir=0;if(Ge)for(var ws=0;ws<Ge.length;ws++){var Yp=It[Ie[ws]];Yp?(ir===0&&(ir=jp()),Ot[ws]=Yp(Ge[ws])):Ot[ws]=Ge[ws]}var _l=Be.apply(null,Ot);function cy(wn){return ir!==0&&Kp(ir),Ve(wn)}return _l=cy(_l),_l}function Op(X,ae,Ie,Ge){Ie=Ie||[];var wt=Ie.every(Ve=>Ve==="number"||Ve==="boolean"),It=ae!=="string";return It&&wt&&!Ge?Il(X):function(){return Pp(X,ae,Ie,arguments,Ge)}}var kl={abort:Fp,emscripten_get_heap_max:xn,emscripten_memcpy_big:Rp,emscripten_resize_heap:$g,fd_close:jI,fd_seek:Fg,fd_write:Pg},KI=_g(),Mp=a.___wasm_call_ctors=function(){return(Mp=a.___wasm_call_ctors=a.asm.__wasm_call_ctors).apply(null,arguments)},Og=a._init=function(){return(Og=a._init=a.asm.init).apply(null,arguments)},$e=a._init_with_threads_count=function(){return($e=a._init_with_threads_count=a.asm.init_with_threads_count).apply(null,arguments)},Sl=a._get_threads_count=function(){return(Sl=a._get_threads_count=a.asm.get_threads_count).apply(null,arguments)},Mg=a._register_tensor=function(){return(Mg=a._register_tensor=a.asm.register_tensor).apply(null,arguments)},XI=a._dispose_data=function(){return(XI=a._dispose_data=a.asm.dispose_data).apply(null,arguments)},YI=a._dispose=function(){return(YI=a._dispose=a.asm.dispose).apply(null,arguments)},Lg=a._Abs=function(){return(Lg=a._Abs=a.asm.Abs).apply(null,arguments)},Lp=a._Add=function(){return(Lp=a._Add=a.asm.Add).apply(null,arguments)},Zi=a._AddN=function(){return(Zi=a._AddN=a.asm.AddN).apply(null,arguments)},zg=a._All=function(){return(zg=a._All=a.asm.All).apply(null,arguments)},Bg=a._Any=function(){return(Bg=a._Any=a.asm.Any).apply(null,arguments)},ZI=a._ArgMax=function(){return(ZI=a._ArgMax=a.asm.ArgMax).apply(null,arguments)},Wg=a._AvgPool=function(){return(Wg=a._AvgPool=a.asm.AvgPool).apply(null,arguments)},Vg=a._BatchMatMul=function(){return(Vg=a._BatchMatMul=a.asm.BatchMatMul).apply(null,arguments)},Ug=a._Ceil=function(){return(Ug=a._Ceil=a.asm.Ceil).apply(null,arguments)},Gg=a._ClipByValue=function(){return(Gg=a._ClipByValue=a.asm.ClipByValue).apply(null,arguments)},zp=a._Conv2D=function(){return(zp=a._Conv2D=a.asm.Conv2D).apply(null,arguments)},Bp=a._Conv2DBackpropInput=function(){return(Bp=a._Conv2DBackpropInput=a.asm.Conv2DBackpropInput).apply(null,arguments)},Hg=a._Cos=function(){return(Hg=a._Cos=a.asm.Cos).apply(null,arguments)},qg=a._Cosh=function(){return(qg=a._Cosh=a.asm.Cosh).apply(null,arguments)},jg=a._CropAndResize=function(){return(jg=a._CropAndResize=a.asm.CropAndResize).apply(null,arguments)},Tl=a._Cumprod=function(){return(Tl=a._Cumprod=a.asm.Cumprod).apply(null,arguments)},Kg=a._Cumsum=function(){return(Kg=a._Cumsum=a.asm.Cumsum).apply(null,arguments)},Xg=a._DepthToSpace=function(){return(Xg=a._DepthToSpace=a.asm.DepthToSpace).apply(null,arguments)},Yg=a._DepthwiseConv2dNative=function(){return(Yg=a._DepthwiseConv2dNative=a.asm.DepthwiseConv2dNative).apply(null,arguments)},Ma=a._Elu=function(){return(Ma=a._Elu=a.asm.Elu).apply(null,arguments)},Zg=a._Equal=function(){return(Zg=a._Equal=a.asm.Equal).apply(null,arguments)},Jg=a._Exp=function(){return(Jg=a._Exp=a.asm.Exp).apply(null,arguments)},Wp=a._FlipLeftRight=function(){return(Wp=a._FlipLeftRight=a.asm.FlipLeftRight).apply(null,arguments)},Qg=a._Floor=function(){return(Qg=a._Floor=a.asm.Floor).apply(null,arguments)},Ji=a._FloorDiv=function(){return(Ji=a._FloorDiv=a.asm.FloorDiv).apply(null,arguments)},eb=a._FusedBatchNorm=function(){return(eb=a._FusedBatchNorm=a.asm.FusedBatchNorm).apply(null,arguments)},tb=a._FusedConv2D=function(){return(tb=a._FusedConv2D=a.asm.FusedConv2D).apply(null,arguments)},Ks=a._FusedDepthwiseConv2D=function(){return(Ks=a._FusedDepthwiseConv2D=a.asm.FusedDepthwiseConv2D).apply(null,arguments)},Cl=a._Gather=function(){return(Cl=a._Gather=a.asm.Gather).apply(null,arguments)},nb=a._GatherNd=function(){return(nb=a._GatherNd=a.asm.GatherNd).apply(null,arguments)},rb=a._Greater=function(){return(rb=a._Greater=a.asm.Greater).apply(null,arguments)},sb=a._GreaterEqual=function(){return(sb=a._GreaterEqual=a.asm.GreaterEqual).apply(null,arguments)},ab=a._LeakyRelu=function(){return(ab=a._LeakyRelu=a.asm.LeakyRelu).apply(null,arguments)},Vp=a._Less=function(){return(Vp=a._Less=a.asm.Less).apply(null,arguments)},Up=a._LessEqual=function(){return(Up=a._LessEqual=a.asm.LessEqual).apply(null,arguments)},ob=a._Log=function(){return(ob=a._Log=a.asm.Log).apply(null,arguments)},ib=a._LogicalAnd=function(){return(ib=a._LogicalAnd=a.asm.LogicalAnd).apply(null,arguments)},Gp=a._LogicalNot=function(){return(Gp=a._LogicalNot=a.asm.LogicalNot).apply(null,arguments)},Hp=a._LogicalOr=function(){return(Hp=a._LogicalOr=a.asm.LogicalOr).apply(null,arguments)},cb=a._LogicalXor=function(){return(cb=a._LogicalXor=a.asm.LogicalXor).apply(null,arguments)},ub=a._Max=function(){return(ub=a._Max=a.asm.Max).apply(null,arguments)},lb=a._MaxPool=function(){return(lb=a._MaxPool=a.asm.MaxPool).apply(null,arguments)},qp=a._Maximum=function(){return(qp=a._Maximum=a.asm.Maximum).apply(null,arguments)},JI=a._Mean=function(){return(JI=a._Mean=a.asm.Mean).apply(null,arguments)},db=a._Min=function(){return(db=a._Min=a.asm.Min).apply(null,arguments)},pb=a._Minimum=function(){return(pb=a._Minimum=a.asm.Minimum).apply(null,arguments)},hb=a._MirrorPad=function(){return(hb=a._MirrorPad=a.asm.MirrorPad).apply(null,arguments)},fb=a._Multiply=function(){return(fb=a._Multiply=a.asm.Multiply).apply(null,arguments)},mb=a._Neg=function(){return(mb=a._Neg=a.asm.Neg).apply(null,arguments)},gb=a._NonMaxSuppressionV3=function(){return(gb=a._NonMaxSuppressionV3=a.asm.NonMaxSuppressionV3).apply(null,arguments)},bb=a._NonMaxSuppressionV4=function(){return(bb=a._NonMaxSuppressionV4=a.asm.NonMaxSuppressionV4).apply(null,arguments)},yb=a._NonMaxSuppressionV5=function(){return(yb=a._NonMaxSuppressionV5=a.asm.NonMaxSuppressionV5).apply(null,arguments)},vb=a._NotEqual=function(){return(vb=a._NotEqual=a.asm.NotEqual).apply(null,arguments)},xb=a._OneHot=function(){return(xb=a._OneHot=a.asm.OneHot).apply(null,arguments)},wb=a._PadV2=function(){return(wb=a._PadV2=a.asm.PadV2).apply(null,arguments)},Ib=a._Pow=function(){return(Ib=a._Pow=a.asm.Pow).apply(null,arguments)},kb=a._Prelu=function(){return(kb=a._Prelu=a.asm.Prelu).apply(null,arguments)},Sb=a._Prod=function(){return(Sb=a._Prod=a.asm.Prod).apply(null,arguments)},Tb=a._RealDiv=function(){return(Tb=a._RealDiv=a.asm.RealDiv).apply(null,arguments)},Cb=a._Relu=function(){return(Cb=a._Relu=a.asm.Relu).apply(null,arguments)},Nb=a._Relu6=function(){return(Nb=a._Relu6=a.asm.Relu6).apply(null,arguments)},_b=a._ResizeBilinear=function(){return(_b=a._ResizeBilinear=a.asm.ResizeBilinear).apply(null,arguments)},Eb=a._ResizeNearestNeighbor=function(){return(Eb=a._ResizeNearestNeighbor=a.asm.ResizeNearestNeighbor).apply(null,arguments)},Ab=a._Reverse=function(){return(Ab=a._Reverse=a.asm.Reverse).apply(null,arguments)},$b=a._RotateWithOffset=function(){return($b=a._RotateWithOffset=a.asm.RotateWithOffset).apply(null,arguments)},Db=a._Round=function(){return(Db=a._Round=a.asm.Round).apply(null,arguments)},Fb=a._Rsqrt=function(){return(Fb=a._Rsqrt=a.asm.Rsqrt).apply(null,arguments)},Rb=a._ScatterNd=function(){return(Rb=a._ScatterNd=a.asm.ScatterNd).apply(null,arguments)},Pb=a._SelectV2=function(){return(Pb=a._SelectV2=a.asm.SelectV2).apply(null,arguments)},Ob=a._Sigmoid=function(){return(Ob=a._Sigmoid=a.asm.Sigmoid).apply(null,arguments)},Mb=a._Sin=function(){return(Mb=a._Sin=a.asm.Sin).apply(null,arguments)},Lb=a._Softmax=function(){return(Lb=a._Softmax=a.asm.Softmax).apply(null,arguments)},zb=a._SparseFillEmptyRows=function(){return(zb=a._SparseFillEmptyRows=a.asm.SparseFillEmptyRows).apply(null,arguments)},Bb=a._SparseReshape=function(){return(Bb=a._SparseReshape=a.asm.SparseReshape).apply(null,arguments)},Wb=a._SparseSegmentReduction=function(){return(Wb=a._SparseSegmentReduction=a.asm.SparseSegmentReduction).apply(null,arguments)},Vb=a._Sqrt=function(){return(Vb=a._Sqrt=a.asm.Sqrt).apply(null,arguments)},Ub=a._Square=function(){return(Ub=a._Square=a.asm.Square).apply(null,arguments)},Gb=a._SquaredDifference=function(){return(Gb=a._SquaredDifference=a.asm.SquaredDifference).apply(null,arguments)},Hb=a._Step=function(){return(Hb=a._Step=a.asm.Step).apply(null,arguments)},qb=a._StridedSlice=function(){return(qb=a._StridedSlice=a.asm.StridedSlice).apply(null,arguments)},jb=a._Sub=function(){return(jb=a._Sub=a.asm.Sub).apply(null,arguments)},Kb=a._Sum=function(){return(Kb=a._Sum=a.asm.Sum).apply(null,arguments)},Xb=a._Tan=function(){return(Xb=a._Tan=a.asm.Tan).apply(null,arguments)},Yb=a._Tanh=function(){return(Yb=a._Tanh=a.asm.Tanh).apply(null,arguments)},Zb=a._Tile=function(){return(Zb=a._Tile=a.asm.Tile).apply(null,arguments)},Jb=a._TopK=function(){return(Jb=a._TopK=a.asm.TopK).apply(null,arguments)},Qb=a._Transform=function(){return(Qb=a._Transform=a.asm.Transform).apply(null,arguments)},ey=a._Transpose=function(){return(ey=a._Transpose=a.asm.Transpose).apply(null,arguments)},ty=a.__FusedMatMul=function(){return(ty=a.__FusedMatMul=a.asm._FusedMatMul).apply(null,arguments)},ny=a._malloc=function(){return(ny=a._malloc=a.asm.malloc).apply(null,arguments)},ry=a._free=function(){return(ry=a._free=a.asm.free).apply(null,arguments)},sy=a.___errno_location=function(){return(sy=a.___errno_location=a.asm.__errno_location).apply(null,arguments)},jp=a.stackSave=function(){return(jp=a.stackSave=a.asm.stackSave).apply(null,arguments)},Kp=a.stackRestore=function(){return(Kp=a.stackRestore=a.asm.stackRestore).apply(null,arguments)},Nl=a.stackAlloc=function(){return(Nl=a.stackAlloc=a.asm.stackAlloc).apply(null,arguments)},ay=a.dynCall_iijjiiii=function(){return(ay=a.dynCall_iijjiiii=a.asm.dynCall_iijjiiii).apply(null,arguments)},oy=a.dynCall_jiji=function(){return(oy=a.dynCall_jiji=a.asm.dynCall_jiji).apply(null,arguments)};a.cwrap=Op;var Qi;hn=function X(){Qi||Xp(),Qi||(hn=X)};function Xp(X){if(X=X||l,yt>0||(At(),yt>0))return;function ae(){Qi||(Qi=!0,a.calledRun=!0,!V&&(wr(),o(a),a.onRuntimeInitialized&&a.onRuntimeInitialized(),on()))}a.setStatus?(a.setStatus("Running..."),setTimeout(function(){setTimeout(function(){a.setStatus("")},1),ae()},1)):ae()}if(a.preInit)for(typeof a.preInit=="function"&&(a.preInit=[a.preInit]);a.preInit.length>0;)a.preInit.pop()();Xp();var ec;c&&(ec={uncaughtException:process.listeners("uncaughtException").filter(function(X){return!c.uncaughtException.indexOf(X)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(X){return!c.unhandledRejection.indexOf(X)>-1})});var tc;if(typeof s!="undefined")tc=s;else if(typeof WasmBackendModuleThreadedSimd!="undefined")tc=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(ec){var iy=tc._dispose;tc._dispose=function(){iy(),ec.uncaughtException.forEach(function(X){process.removeListener("uncaughtException",X)}),ec.unhandledRejection.forEach(function(X){process.removeListener("unhandledRejection",X)})}}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)}}),zD=1e-7,BD=1e-4,uf=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}},ld=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")}createTensorFromTexture(e,t,n){return Xn("createTensorFromTexture")}memory(){return Xn("memory")}floatPrecision(){return Xn("floatPrecision")}epsilon(){return this.floatPrecision()===32?zD:BD}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 H1(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,Eh(e,t,n)}function WD(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--,Eh(e,n,r),Eh(t,n,r)}function Kl(e,t,n){return Math.max(e,Math.min(t,n))}function VD(e){return e%2===0?e:e+1}function Eh(e,t,n){let r=e[t];e[t]=e[n],e[n]=r}function UD(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function GD(e,t){let n=Math.random();return t*n+(1-n)*e}function HD(e,t){let n=0;for(let r=0;r<e.length;r++){let s=Number(e[r])-Number(t[r]);n+=s*s}return n}function D(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function _n(e,t,n=""){D(ga(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function go(e){D(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function Qa(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||fn(e)&&!n)for(let r=0;r<e.length;++r)Qa(e[r],t,n);else t.push(e);return t}function ht(e){if(e.length===0)return 1;let t=e[0];for(let n=1;n<e.length;n++)t*=e[n];return t}function qD(e){return e.length===0}function ga(e,t){if(e===t)return!0;if(e==null||t==null||e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function hc(e){return e%1===0}function jD(e){if(Math.tanh!=null)return Math.tanh(e);if(e===1/0)return 1;if(e===-1/0)return-1;{let t=Math.exp(2*e);return(t-1)/(t+1)}}function KD(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function XD(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return H1(t),t}function Gl(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function YD(e,t=s=>0,n,r){return new Promise((s,a)=>{let o=0,i=()=>{if(e()){s();return}o++;let c=t(o);if(n!=null&&o>=n){a();return}r!=null?r(i,c):setTimeout(i,c)};i()})}function ZD(e,t){let n=1,r=-1;for(let a=0;a<e.length;++a)if(e[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),D(e.every(r=>r>=-n&&r<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),D(e.every(r=>hc(r)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(r=>r<0?n+r:r)}function q1(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;i<e.length;++i){if(a!=null){if(a[o]===i&&e[i]!==1)throw new Error(`Can't squeeze axis ${i} since its dim '${e[i]}' is not 1`);(a[o]==null||a[o]>i)&&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 j1(e,t){let n=null;if(e==null||e==="float32")n=new Float32Array(t);else if(e==="int32")n=new Int32Array(t);else if(e==="bool")n=new Uint8Array(t);else throw new Error(`Unknown data type ${e}`);return n}function K1(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 X1(e,t){for(let n=0;n<e.length;n++){let r=e[n];if(isNaN(r)||!isFinite(r))throw Error(`A tensor of type ${t} being uploaded contains ${r}.`)}}function Y1(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function JD(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function fn(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}function Cy(e){if(e==="float32"||e==="int32")return 4;if(e==="complex64")return 8;if(e==="bool")return 1;throw new Error(`Unknown dtype ${e}`)}function Z1(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function ea(e){return typeof e=="string"||e instanceof String}function J1(e){return typeof e=="boolean"}function Q1(e){return typeof e=="number"}function lf(e){return Array.isArray(e)?lf(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":Q1(e)?"float32":ea(e)?"string":J1(e)?"bool":"float32"}function oa(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Ah(e,t){for(let n=t;n<e;++n)if(e%n===0)return n;return e}function Dc(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let r=t-3;r>=0;--r)n[r]=n[r+1]*e[r+1];return n}function eS(e,t,n,r=!1){let s=new Array;if(t.length===1){let a=t[0]*(r?2:1);for(let o=0;o<a;o++)s[o]=n[e+o]}else{let a=t[0],o=t.slice(1),i=o.reduce((c,u)=>c*u)*(r?2:1);for(let c=0;c<a;c++)s[c]=eS(e+c*i,o,n,r)}return s}function uc(e,t,n=!1){if(e.length===0)return t[0];let r=e.reduce((s,a)=>s*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 eS(0,e,t,n)}function _v(e,t){let n=df(e,t);for(let r=0;r<n.length;r++)n[r]=1;return n}function df(e,t){if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool")return new Uint8Array(e);throw new Error(`Unknown data type ${t}`)}function QD(e,t){let n=e.reduce((r,s)=>r*s,1);if(t==null||t==="float32")return uc(e,new Float32Array(n));if(t==="int32")return uc(e,new Int32Array(n));if(t==="bool")return uc(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Ev(e){e.forEach(t=>{D(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function eF(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<e.length-1;++s)r+=n[s]*e[s];return r}function tF(e,t,n){if(t===0)return[];if(t===1)return[e];let r=new Array(t);for(let s=0;s<r.length-1;++s)r[s]=Math.floor(e/n[s]),e-=r[s]*n[s];return r[r.length-1]=e,r}function Av(e){return e&&e.then&&typeof e.then=="function"}var ik="tfjsflags",tS=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.getQueryParams=nF,this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&(q().getBool("IS_TEST")||q().getBool("PROD")||console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let r=this.urlFlags[e];q().getBool("IS_TEST")||q().getBool("PROD")||console.warn(`Setting feature override from URL ${e}: ${r}.`),this.set(e,r)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(Av(t))throw new Error(`Flag ${e} cannot be synchronously evaluated. Please use getAsync() instead.`);return this.flags[e]=t,this.flags[e]}getNumber(e){return this.get(e)}getBool(e){return this.get(e)}getFlags(){return this.flags}get features(){return this.flags}set(e,t){if(this.flagRegistry[e]==null)throw new Error(`Cannot set flag ${e} as it has not been registered.`);this.flags[e]=t,this.flagRegistry[e].setHook!=null&&this.flagRegistry[e].setHook(t)}evaluateFlag(e){if(this.flagRegistry[e]==null)throw new Error(`Cannot evaluate flag '${e}': no evaluation function found.`);return this.flagRegistry[e].evaluationFn()}setFlags(e){this.flags=Object.assign({},e)}reset(){this.flags={},this.urlFlags={},this.populateURLFlags()}populateURLFlags(){if(typeof this.global=="undefined"||typeof this.global.location=="undefined"||typeof this.global.location.search=="undefined")return;let e=this.getQueryParams(this.global.location.search);ik in e&&e[ik].split(",").forEach(n=>{let[r,s]=n.split(":");this.urlFlags[r]=sF(r,s)})}};function nF(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...r)=>(rF(t,r[0],r[1]),r.join("="))),t}function rF(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function sF(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function q(){return $v}var $v=null;function aF(e){$v=e}var hy;function nS(){if(hy==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");hy=e}return hy}function oF(){let e=nS();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function Dv(e,t){let n=oF();if(n.has(e))return n.get(e);{let r=t();return n.set(e,r),n.get(e)}}var Fc="Abs",Rc="Acos",Pc="Acosh",ba="Add",bo="AddN",Oc="All",Mc="Any",yo="ArgMax",dd="ArgMin",Lc="Asin",zc="Asinh",Bc="Atan",Wc="Atanh",Vc="Atan2",vo="AvgPool",pf="AvgPoolGrad",pd="AvgPool3D",hf="AvgPool3DGrad",xo="BatchMatMul",Uc="BatchToSpaceND",ff="Bincount",rS="BroadcastTo",mf="BroadcastArgs",wo="Cast",Io="Ceil",ya="ClipByValue",gf="Complex",hd="ComplexAbs",Gc="Concat",ko="Conv2D",bf="Conv2DBackpropFilter",So="Conv2DBackpropInput",fd="Conv3D",yf="Conv3DBackpropFilterV2",vf="Conv3DBackpropInputV2",To="Cos",Co="Cosh",Hc="Cumprod",No="Cumsum",qc="CropAndResize",xf="DenseBincount",jc="DepthToSpace",_o="DepthwiseConv2dNative",wf="DepthwiseConv2dNativeBackpropFilter",If="DepthwiseConv2dNativeBackpropInput",kf="Diag",md="Dilation2D",$h="Dilation2DBackpropInput",Dh="Dilation2DBackpropFilter",Eo="RealDiv",Sf="Einsum",Ao="Elu",Tf="EluGrad",Kc="Erf",Xc="Equal",$o="Exp",Yc="ExpandDims",Zc="Expm1",Cf="FFT",gd="Fill",Jc="FlipLeftRight",Do="Floor",Fo="FloorDiv",Ro="FusedBatchNorm",Qc="GatherV2",eu="GatherNd",tu="Greater",Po="GreaterEqual",Oo="Identity",Nf="IFFT",_f="Imag",nu="IsFinite",ru="IsInf",su="IsNan",Mo="LeakyRelu",au="Less",ou="LessEqual",Ef="LinSpace",Lo="Log",iu="Log1p",cu="LogicalAnd",uu="LogicalNot",lu="LogicalOr",sS="LogicalXor",aS="LogSoftmax",iF="LowerBound",bd="LRN",Af="LRNGrad",zo="Max",Bo="Maximum",Wo="MaxPool",$f="MaxPoolGrad",yd="MaxPool3D",Df="MaxPool3DGrad",Ff="MaxPoolWithArgmax",Vo="Mean",Uo="Min",Go="Minimum",Ho="MirrorPad",du="Mod",Rf="Multinomial",qo="Multiply",pu="Neg",hu="NotEqual",fu="NonMaxSuppressionV3",mu="NonMaxSuppressionV4",gu="NonMaxSuppressionV5",bu="OnesLike",jo="OneHot",yu="Pack",Ko="PadV2",cF="Pool",Xo="Pow",Yo="Prelu",Zo="Prod",Pf="RaggedGather",Of="RaggedRange",Mf="RaggedTensorToTensor",vd="Range",Lf="Real",vu="Reciprocal",Jo="Relu",xu="Reshape",Qo="ResizeNearestNeighbor",zf="ResizeNearestNeighborGrad",ei="ResizeBilinear",Bf="ResizeBilinearGrad",ti="Relu6",ni="Reverse",ri="Round",si="Rsqrt",wu="ScatterNd",Wf="SearchSorted",Iu="Select",ku="Selu",Su="Slice",ai="Sin",Tu="Sinh",Cu="Sign",oi="Sigmoid",Nu="Softplus",ii="Sqrt",ci="Sum",_u="SpaceToBatchND",Eu="SplitV",ui="Softmax",xd="SparseFillEmptyRows",Au="SparseReshape",wd="SparseSegmentMean",Id="SparseSegmentSum",Vf="SparseToDense",li="SquaredDifference",kd="Square",$u="StridedSlice",Sd="StringNGrams",Td="StringSplit",Cd="StringToHashBucketFast",di="Sub",pi="Tan",hi="Tanh",va="Tile",Du="TopK",Fu="Transform",_s="Transpose",Uf="Unique",Ru="Unpack",Nd="UnsortedSegmentSum",uF="UpperBound",Pu="ZerosLike",xa="Step",Fh="FromPixels",Ou="RotateWithOffset",eo="_FusedMatMul",to="FusedConv2D",no="FusedDepthwiseConv2D";function Qs(...e){q().getBool("IS_TEST")||q().getBool("PROD")||console.warn(...e)}function lF(...e){q().getBool("IS_TEST")||q().getBool("PROD")||console.log(...e)}var fc=Dv("kernelRegistry",()=>new Map),Xl=Dv("gradRegistry",()=>new Map);function Rh(e,t){let n=Fv(e,t);return fc.get(n)}function Ny(e){return Xl.get(e)}function Ph(e){let t=fc.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 _d(e){let{kernelName:t,backendName:n}=e,r=Fv(t,n);fc.has(r)&&Qs(`The kernel '${t}' for backend '${n}' is already registered`),fc.set(r,e)}function oS(e){let{kernelName:t}=e;Xl.has(t)&&q().getBool("DEBUG")&&Qs(`Overriding the gradient for '${t}'`),Xl.set(t,e)}function dF(e,t){let n=Fv(e,t);if(!fc.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);fc.delete(n)}function pF(e){if(!Xl.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Xl.delete(e)}function hF(e,t){Ph(e).forEach(r=>{let s=Object.assign({},r,{backendName:t});_d(s)})}function Fv(e,t){return`${t}_${e}`}var w={};Ae(w,{arraysEqual:()=>ga,assert:()=>D,assertNonNegativeIntegerDimensions:()=>Ev,assertNonNull:()=>go,assertShapesMatch:()=>_n,bytesFromStringArray:()=>Z1,bytesPerElement:()=>Cy,checkConversionForErrors:()=>X1,clamp:()=>Kl,computeStrides:()=>Dc,createScalarValue:()=>vF,createShuffledIndices:()=>XD,decodeString:()=>Oh,distSquared:()=>HD,encodeString:()=>Ad,fetch:()=>wF,fingerPrint64:()=>yF,flatten:()=>Qa,getArrayFromDType:()=>K1,getTypedArrayFromDType:()=>j1,hasEncodingLoss:()=>JD,hexToLong:()=>Ed,indexToLoc:()=>tF,inferDtype:()=>lf,inferFromImplicitShape:()=>ZD,isBoolean:()=>J1,isFunction:()=>oa,isInt:()=>hc,isNumber:()=>Q1,isPromise:()=>Av,isScalarShape:()=>qD,isString:()=>ea,isTypedArray:()=>fn,isValidDtype:()=>Y1,locToIndex:()=>eF,makeOnesTypedArray:()=>_v,makeZerosNestedTypedArray:()=>QD,makeZerosTypedArray:()=>df,nearestDivisor:()=>Ah,nearestLargerEven:()=>VD,now:()=>Yl,parseAxisParam:()=>Fr,randUniform:()=>GD,repeatedTry:()=>YD,rightPad:()=>Gl,shuffle:()=>H1,shuffleCombo:()=>WD,sizeFromShape:()=>ht,sizeToSquarishShape:()=>KD,squeezeShape:()=>q1,sum:()=>UD,swap:()=>Eh,tanh:()=>jD,toNestedArray:()=>uc,toTypedArray:()=>Gf});var ck=ma(ID()),Va=ck.default||ck;function Ed(e){return Va.fromString(e,!0,16)}var iS=Ed("c3a5c85c97cb3127"),Ba=Ed("b492b66fbe98f273"),In=Ed("9ae16a3b2f90404f");function _y(e){return e.xor(e.shru(47))}function cS(e,t,n){let r=e.slice(t,t+n);return Va.fromBytes(Array.from(r),!0,!0)}function pt(e,t){return cS(e,t,8)}function uk(e,t){return cS(e,t,4)}function Yt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function ra(e,t,n=Ed("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 fF(e,t,n,r,s,a){s=s.add(e),a=Yt(a.add(s).add(r),21);let o=s;return s=s.add(t),s=s.add(n),a=a.add(Yt(s,44)),[s.add(r),a.add(o)]}function ah(e,t,n,r){return fF(pt(e,t),pt(e,t+8),pt(e,t+16),pt(e,t+24),n,r)}function mF(e,t=e.length){if(t>=8){let n=In.add(t*2),r=pt(e,0).add(In),s=pt(e,t-8),a=Yt(s,37).mul(n).add(r),o=Yt(r,25).add(s).mul(n);return ra(a,o,n)}if(t>=4){let n=In.add(t*2),r=uk(e,0);return ra(r.shl(3).add(t),uk(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 _y(In.mul(a).xor(iS.mul(o))).mul(In)}return In}function gF(e,t=e.length){let n=In.add(t*2),r=pt(e,0).mul(Ba),s=pt(e,8),a=pt(e,t-8).mul(n),o=pt(e,t-16).mul(In);return ra(Yt(r.add(s),43).add(Yt(a,30)).add(o),r.add(Yt(s.add(In),18)).add(a),n)}function bF(e,t=e.length){let n=In.add(t*2),r=pt(e,0).mul(In),s=pt(e,8),a=pt(e,t-8).mul(n),o=pt(e,t-16).mul(In),i=Yt(r.add(s),43).add(Yt(a,30)).add(o),c=ra(i,r.add(Yt(s.add(In),18)).add(a),n),u=pt(e,16).mul(n),l=pt(e,24),p=i.add(pt(e,t-32)).mul(n),d=c.add(pt(e,t-24)).mul(n);return ra(Yt(u.add(l),43).add(Yt(p,30)).add(d),u.add(Yt(l.add(r),18)).add(p),n)}function yF(e,t=e.length){let n=Va.fromNumber(81,!0);if(t<=32)return t<=16?mF(e,t):gF(e,t);if(t<=64)return bF(e,t);let r=n,s=n.mul(Ba).add(113),a=_y(s.mul(In).add(113)).mul(In),o=[Va.UZERO,Va.UZERO],i=[Va.UZERO,Va.UZERO];r=r.mul(In).add(pt(e,0));let c=0,u=(t-1>>6)*64,l=u+(t-1&63)-63;do r=Yt(r.add(s).add(o[0]).add(pt(e,c+8)),37).mul(Ba),s=Yt(s.add(o[1]).add(pt(e,c+48)),42).mul(Ba),r=r.xor(i[1]),s=s.add(o[0]).add(pt(e,c+40)),a=Yt(a.add(i[0]),33).mul(Ba),o=ah(e,c,o[1].mul(Ba),r.add(i[0])),i=ah(e,c+32,a.add(i[1]),s.add(pt(e,c+16))),[a,r]=[r,a],c+=64;while(c!==u);let p=Ba.add(a.and(255).shl(1));return c=l,i[0]=i[0].add(t-1&63),o[0]=o[0].add(i[0]),i[0]=i[0].add(o[0]),r=Yt(r.add(s).add(o[0]).add(pt(e,c+8)),37).mul(p),s=Yt(s.add(o[1]).add(pt(e,c+48)),42).mul(p),r=r.xor(i[1].mul(9)),s=s.add(o[0].mul(9).add(pt(e,c+40))),a=Yt(a.add(i[0]),33).mul(p),o=ah(e,c,o[1].mul(p),r.add(i[0])),i=ah(e,c+32,a.add(i[1]),s.add(pt(e,c+16))),[a,r]=[r,a],ra(ra(o[0],i[0],p).add(_y(s).mul(iS)).add(a),ra(o[1],i[1],p).add(r),p)}function vF(e,t){return t==="string"?Ad(e):Gf([e],t)}function xF(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Gf(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=Qa(e)),q().getBool("DEBUG")&&X1(e,t),xF(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<n.length;++r)Math.round(e[r])!==0&&(n[r]=1);return n}else throw new Error(`Unknown data type ${t}`)}function Yl(){return q().platform.now()}function wF(e,t){return q().platform.fetch(e,t)}function Ad(e,t="utf-8"){return t=t||"utf-8",q().platform.encode(e,t)}function Oh(e,t="utf-8"){return t=t||"utf-8",q().platform.decode(e,t)}var IF=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new SF)}profileKernel(e,t,n){let r,s=()=>{r=n()},a,o=Yl();if(this.backendTimer.timerAvailable())a=this.backendTimer.time(s);else{s();for(let c of r)c.dataSync();a=Promise.resolve({kernelMs:Yl()-o})}if(q().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let c=0;c<r.length;c++){let u=r[c];u.data().then(l=>{kF(l,u.dtype,e)})}return{kernelName:e,outputs:r,inputs:t,timeMs:a.then(c=>c.kernelMs),extraInfo:a.then(c=>c.getExtraProfileInfo!=null?c.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 kF(e,t,n){if(t!=="float32")return!1;for(let r=0;r<e.length;r++){let s=e[r];if(isNaN(s)||!isFinite(s))return console.warn(`Found ${s} in the result of '${n}'`),!0}return!1}var SF=class{logKernelProfile(e,t,n,r,s,a){let o=typeof r=="number"?Gl(`${r}ms`,9):r.error,i=Gl(e,25),c=t.rank,u=t.size,l=Gl(t.shape.toString(),14),p="";for(let d in s){let h=s[d];if(h!=null){let f=h.shape||t.shape,m=f.length;p+=`${d}: ${m}D ${m>0?f:""} `}}console.log(`%c${i} %c${o} %c${c}D ${l} %c${u} %c${p} %c${a}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function TF(e,t,n){let r={},s={};for(let c=0;c<t.length;c++)r[t[c].id]=!0;for(let c=0;c<e.length;c++){let u=e[c],l=u.inputs;for(let p in l){let d=l[p],h=!1;for(let f=0;f<t.length;f++)if(r[d.id]){u.outputs.forEach(m=>r[m.id]=!0),h=!0,s[u.id]=!0;break}if(h)break}}let a={};a[n.id]=!0;let o={};for(let c=e.length-1;c>=0;c--){let u=e[c],l=u.inputs;for(let p=0;p<u.outputs.length;p++)if(a[u.outputs[p].id]){for(let d in l)a[l[d].id]=!0,o[u.id]=!0;break}}let i=[];for(let c=0;c<e.length;c++){let u=e[c];if(s[u.id]&&o[u.id]){let l={};for(let d in u.inputs){let h=u.inputs[d];r[h.id]&&(l[d]=h)}let p=Object.assign({},u);p.inputs=l,p.outputs=u.outputs,i.push(p)}}return i}function CF(e,t,n,r){for(let s=t.length-1;s>=0;s--){let a=t[s],o=[];if(a.outputs.forEach(c=>{let u=e[c.id];u!=null?o.push(u):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 c in a.inputs){if(!(c in i))throw new Error(`Cannot backprop through input ${c}. Available gradients found: ${Object.keys(i)}.`);let u=n(()=>i[c]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input ${c} must have 'float32' dtype, but has '${u.dtype}'`);let l=a.inputs[c];if(!ga(u.shape,l.shape))throw new Error(`Error in gradient for op ${a.kernelName}. The gradient of input '${c}' has shape '${u.shape}', which does not match the shape of the input '${l.shape}'`);if(e[l.id]==null)e[l.id]=u;else{let p=e[l.id];e[l.id]=r(p,u),p.dispose()}}}}var lk=20,El=3,fy=7;function NF(e,t,n,r){let s=Dc(t),a=_F(e,t,n,s),o=t.length,i=vh(e,t,n,s,a),c=["Tensor"];return r&&(c.push(` dtype: ${n}`),c.push(` rank: ${o}`),c.push(` shape: [${t}]`),c.push(" values:")),c.push(i.map(u=>" "+u).join(`
|
|
`)),c.join(`
|
|
`)}function _F(e,t,n,r){let s=ht(t),a=r[r.length-1],o=new Array(a).fill(0),i=t.length,c=n==="complex64"?Rl(e):e;if(i>1)for(let u=0;u<s/a;u++){let l=u*a;for(let p=0;p<a;p++)o[p]=Math.max(o[p],Fl(c[l+p],0,n).length)}return o}function Fl(e,t,n){let r;return Array.isArray(e)?r=`${parseFloat(e[0].toFixed(fy))} + ${parseFloat(e[1].toFixed(fy))}j`:ea(e)?r=`'${e}'`:n==="bool"?r=uS(e):r=parseFloat(e.toFixed(fy)).toString(),Gl(r,t)}function uS(e){return e===0?"false":"true"}function vh(e,t,n,r,s,a=!0){let o=n==="complex64"?2:1,i=t[0],c=t.length;if(c===0){if(n==="complex64"){let m=Rl(e);return[Fl(m[0],0,n)]}return n==="bool"?[uS(e[0])]:[e[0].toString()]}if(c===1){if(i>lk){let g=El*o,b=Array.from(e.slice(0,g)),y=Array.from(e.slice((i-El)*o,i*o));return n==="complex64"&&(b=Rl(b),y=Rl(y)),["["+b.map((v,x)=>Fl(v,s[x],n)).join(", ")+", ..., "+y.map((v,x)=>Fl(v,s[i-El+x],n)).join(", ")+"]"]}return["["+(n==="complex64"?Rl(e):Array.from(e)).map((g,b)=>Fl(g,s[b],n)).join(", ")+"]"]}let u=t.slice(1),l=r.slice(1),p=r[0]*o,d=[];if(i>lk){for(let m=0;m<El;m++){let g=m*p,b=g+p;d.push(...vh(e.slice(g,b),u,n,l,s,!1))}d.push("...");for(let m=i-El;m<i;m++){let g=m*p,b=g+p;d.push(...vh(e.slice(g,b),u,n,l,s,m===i-1))}}else for(let m=0;m<i;m++){let g=m*p,b=g+p;d.push(...vh(e.slice(g,b),u,n,l,s,m===i-1))}let h=c===2?",":"";d[0]="["+d[0]+h;for(let m=1;m<d.length-1;m++)d[m]=" "+d[m]+h;let f=`,
|
|
`;for(let m=2;m<c;m++)f+=`
|
|
`;return d[d.length-1]=" "+d[d.length-1]+"]"+(a?"":f),d}function Rl(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var Ht=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=ht(e),n!=null){let r=n.length;D(r===this.size,()=>`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||K1(t,this.size),this.strides=Dc(e)}set(e,...t){t.length===0&&(t=[0]),D(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;r<e.length-1;++r)n+=this.strides[r]*e[r];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Lr().makeTensor(this.values,this.shape,this.dtype)}},Lr=null,oc=null,EF=null;function AF(e){Lr=e}function $F(e){oc=e}function DF(e){EF=e}var Te=class{constructor(e,t,n,r){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=ht(e),this.strides=Dc(e),this.dataId=n,this.id=r,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return oc.buffer(this.shape,this.dtype,e)}bufferSync(){return oc.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return uc(this.shape,e,this.dtype==="complex64")}arraySync(){return uc(this.shape,this.dataSync(),this.dtype==="complex64")}async data(){this.throwIfDisposed();let e=Lr().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>Oh(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(),Lr().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Lr().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Oh(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 Lr().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Lr().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return oc.print(this,e)}clone(){return this.throwIfDisposed(),oc.clone(this)}toString(e=!1){let t=this.dataSync();return NF(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),oc.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Lr().makeVariable(this,e,t,n)}};Object.defineProperty(Te,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function Q(){return Dv("Tensor",()=>Te)}Q();var ia=class extends Te{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(!ga(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Lr().disposeTensor(this),this.dataId=e.dataId,Lr().incRef(this,null)}dispose(){Lr().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(ia,Symbol.hasInstance,{value:e=>e instanceof Te&&e.assign!=null&&e.assign instanceof Function});var Ur={};Ae(Ur,{assertTypesMatch:()=>lS,getTensorsInContainer:()=>Rv,isTensorInList:()=>RF,makeTypesMatch:()=>_t});var Ey;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Ey||(Ey={}));var Ay;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Ay||(Ay={}));var $y;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})($y||($y={}));var Dy;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Dy||(Dy={}));var Fy;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Fy||(Fy={}));var FF={float32:Dy,int32:Ay,bool:$y,complex64:Fy};function hr(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return FF[e][t]}function Hf(e){return hr(e,"int32")}function _t(e,t){if(e.dtype===t.dtype)return[e,t];let n=hr(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function lS(e,t){D(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function RF(e,t){return t.some(n=>n.id===e.id)}function Rv(e){let t=[];return dS(e,t,new Set),t}function dS(e,t,n){if(e==null)return;if(e instanceof Te){t.push(e);return}if(!PF(e))return;let r=e;for(let s in r){let a=r[s];n.has(a)||(n.add(a),dS(a,t,n))}}function PF(e){return Array.isArray(e)||typeof e=="object"}function my(e){return e.kernelName!=null}var dk=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()}},Zl=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new dk}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t];if(await this.initializeBackend(n).success){await this.setBackend(n);return}}throw new Error("Could not initialize any backends, all backend initializations failed.")}get backend(){if(this.pendingBackendInit!=null)throw new Error(`Backend '${this.backendName}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);if(this.backendInstance==null){let{name:e,asyncInit:t}=this.initializeBackendsAndReturnBest();if(t)throw new Error(`The highest priority backend '${e}' has not yet been initialized. Make sure to await tf.ready() or await tf.setBackend() before calling other methods`);this.setBackend(e)}return this.backendInstance}backendNames(){return Object.keys(this.registryFactory)}findBackend(e){if(!(e in this.registry))if(e in this.registryFactory){let{asyncInit:t}=this.initializeBackend(e);if(t)return null}else return null;return this.registry[e]}findBackendFactory(e){return e in this.registryFactory?this.registryFactory[e].factory:null}registerBackend(e,t,n=1){return e in this.registryFactory?(Qs(`${e} backend was already registered. Reusing existing backend factory.`),!1):(this.registryFactory[e]={factory:t,priority:n},!0)}async setBackend(e){if(this.registryFactory[e]==null)throw new Error(`Backend name '${e}' not found in registry`);if(this.backendName=e,this.registry[e]==null){this.backendInstance=null;let{success:t,asyncInit:n}=this.initializeBackend(e);if(!(n?await t:t))return!1}return this.backendInstance=this.registry[e],this.setupRegisteredKernels(),this.profiler=new IF(this.backendInstance),!0}setupRegisteredKernels(){Ph(this.backendName).forEach(t=>{t.setupFunc!=null&&t.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Ph(e).forEach(n=>{n.disposeFunc!=null&&n.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof ld)&&typeof n.then=="function"){let r=++this.pendingBackendInitId,s=n.then(a=>r<this.pendingBackendInitId?!1:(this.registry[e]=a,this.pendingBackendInit=null,!0)).catch(a=>(r<this.pendingBackendInitId||(this.pendingBackendInit=null,Qs(`Initialization of backend ${e} failed`),Qs(a.stack||a.message)),!1));return this.pendingBackendInit=s,{success:s,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return Qs(`Initialization of backend ${e} failed`),Qs(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:r,asyncInit:s}=this.initializeBackend(n);if(s||r)return{name:n,asyncInit:s}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),r=n.backend,s=this.readSync(t),a=r.refCount(t);r.disposeData(t,!0),n.backend=e,e.move(t,s,n.shape,n.dtype,a),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let r;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(r),()=>(r=t(),r instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),r))}scopedRun(e,t,n){e();try{let r=n();return t(),r}catch(r){throw t(),r}}nextTensorId(){return Zl.nextTensorId++}nextVariableId(){return Zl.nextVariableId++}clone(e){let t=M.runKernel(Oo,{x:e}),n={x:e},r=a=>({x:()=>{let o="float32",i={x:a},c={dtype:o};return M.runKernel(wo,i,c)}}),s=[];return this.addTapeNode(this.state.activeScope.name,n,[t],r,s,{}),t}runKernel(e,t,n){if(this.backendName==null&&this.backend,!(Rh(e,this.backendName)!=null))throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let r=this.backend.numDataIds(),s=0;n.forEach(i=>{s+=i.dtype==="complex64"?3:1});let a=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],o=r-t-s-a;if(o>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${o} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],r=this.isTapeOn(),s=this.state.numBytes,a=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let o;this.backendName==null&&this.backend;let i,c=my(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(my(e)){let{kernelName:h,inputs:f,attrs:m}=e;this.backendName==null&&this.backend;let g=Rh(h,this.backendName);D(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),o=()=>{let b=this.backend.numDataIds();i=g.kernelFunc({inputs:f,attrs:m,backend:this.backend});let y=Array.isArray(i)?i:[i];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,b,y);let v=y.map(x=>x.rank!=null?x:this.makeTensorFromTensorInfo(x));if(r){let x=this.getTensorsForGradient(h,f,v);n=this.saveTensorsForBackwardMode(x)}return v}}else{let{forwardFunc:h}=e,f=m=>{!r||(n=m.map(g=>this.keep(this.clone(g))))};o=()=>{let m=this.backend.numDataIds();i=this.tidy(()=>h(this.backend,f));let g=Array.isArray(i)?i:[i];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(c,m,g),g}}let{inputs:u,attrs:l}=e,p=my(e)?null:e.backwardsFunc,d;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=o():(d=this.profiler.profileKernel(c,u,()=>o()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(d),t=d.outputs)}),r&&this.addTapeNode(c,u,t,p,n,l),this.state.profiling&&this.state.activeProfile.kernels.push({name:c,bytesAdded:this.state.numBytes-s,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-a,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:d.timeMs,extraInfo:d.extraInfo}),Array.isArray(i)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(n=>this.keep(this.clone(n)))}getTensorsForGradient(e,t,n){let r=Ny(e);if(r!=null){let s=r.inputsToSave||[],a=r.outputsToSave||[],o;r.saveAllInputs?(D(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),o=Object.keys(t).map(c=>t[c])):o=s.map(c=>t[c]);let i=n.filter((c,u)=>a[u]);return o.concat(i)}return[]}makeTensor(e,t,n,r){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",r=r||this.backend;let s=e;n==="string"&&ea(e[0])&&(s=e.map(i=>Ad(i)));let a=r.write(s,t,n),o=new Te(t,n,a,this.nextTensorId());if(this.trackTensor(o,r),n==="string"){let i=this.state.tensorInfo.get(a),c=Z1(s);this.state.numBytes+=c-i.bytes,i.bytes=c}return o}makeTensorFromDataId(e,t,n,r){n=n||"float32";let s={dataId:e,shape:t,dtype:n};return this.makeTensorFromTensorInfo(s,r)}makeTensorFromTensorInfo(e,t){let{dataId:n,shape:r,dtype:s}=e,a=new Te(r,s,n,this.nextTensorId());return this.trackTensor(a,t),a}makeVariable(e,t=!0,n,r){n=n||this.nextVariableId().toString(),r!=null&&r!==e.dtype&&(e=e.cast(r));let s=new ia(e,t,n,this.nextTensorId());if(this.state.registeredVariables[s.name]!=null)throw new Error(`Variable with name ${s.name} was already registered`);return this.state.registeredVariables[s.name]=s,this.incRef(s,this.backend),s}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*Cy(e.dtype)),this.state.numBytes+=n,this.state.tensorInfo.has(e.dataId)||(this.state.numDataBuffers++,this.state.tensorInfo.set(e.dataId,{backend:t||this.backend,dtype:e.dtype,shape:e.shape,bytes:n})),e instanceof ia||this.track(e)}incRef(e,t){this.trackTensor(e,t),this.backend.incRef(e.dataId)}removeDataId(e,t){this.state.tensorInfo.has(e)&&this.state.tensorInfo.get(e).backend===t&&(this.state.tensorInfo.delete(e),this.state.numDataBuffers--)}disposeTensor(e){if(!this.state.tensorInfo.has(e.dataId))return;let t=this.state.tensorInfo.get(e.dataId);if(this.state.numTensors--,e.dtype==="string"&&(this.state.numStringTensors--,this.state.numBytes-=t.bytes),e.dtype!=="complex64"&&e.dtype!=="string"){let n=e.size*Cy(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(r=>r.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let r of this.state.activeProfile.kernels)r.kernelTimeMs=await r.kernelTimeMs,r.extraInfo=await r.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,r,s,a){let o={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:s},i=Ny(e);i!=null&&(r=i.gradFunc),r!=null&&(o.gradient=c=>(c=c.map((u,l)=>{if(u==null){let p=n[l],d=df(p.size,p.dtype);return this.makeTensor(d,p.shape,p.dtype)}return u}),r(c.length>1?c:c[0],s,a))),this.state.activeTape.push(o)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Rv(e),n=new Set(t.map(s=>s.id));for(let s=0;s<this.state.activeScope.track.length;s++){let a=this.state.activeScope.track[s];!a.kept&&!n.has(a.id)&&a.dispose()}let r=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(s=>{!s.kept&&s.scopeId===r.id&&this.track(s)})}gradients(e,t,n,r=!1){if(D(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let s=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));D(s instanceof Te,()=>"The result y returned by f() must be a tensor.");let a=TF(this.state.activeTape,t,s);if(!r&&a.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let o={};o[s.id]=n==null?OF(s.shape):n,CF(o,a,c=>this.tidy(c),MF);let i=t.map(c=>o[c.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(c=>{for(let u of c.saved)u.dispose()}),this.state.activeTape=null),{value:s,grads:i}})}customGrad(e){return D(oa(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{D(t.every(o=>o instanceof Te),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,r={};t.forEach((o,i)=>{r[i]=o});let s=(o,i)=>(n=e(...t,i),D(n.value instanceof Te,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),D(oa(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),a=(o,i)=>{let c=n.gradFunc(o,i),u=Array.isArray(c)?c:[c];D(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),D(u.every(p=>p instanceof Te),()=>"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 l={};return u.forEach((p,d)=>{l[d]=()=>p}),l};return this.runKernelFunc({forwardFunc:s,backwardsFunc:a,inputs:r})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Yl(),n=await this.backend.time(e);return n.wallMs=Yl()-t,n}track(e){return this.state.activeScope!=null&&(e.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(e)),e}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new dk;for(let e in this.registry)this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}};Zl.nextTensorId=0;Zl.nextVariableId=0;function OF(e){let t=_v(ht(e),"float32");return M.makeTensor(t,e,"float32")}function pS(){let e=nS();if(e._tfengine==null){let t=new tS(e);e._tfengine=new Zl(t)}return aF(e._tfengine.ENV),AF(()=>e._tfengine),e._tfengine}var M=pS();function MF(e,t){let n={a:e,b:t};return M.runKernel(ba,n)}var $d={};Ae($d,{isBrowser:()=>hS,isMobile:()=>BF,mockIsMobile:()=>zF});function LF(){return typeof navigator!="undefined"&&navigator!=null}var Ry;function zF(e){Ry=e}function BF(e){if(Ry!==void 0)return Ry;if(e||LF()){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 hS(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var er=q();er.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.")});er.registerFlag("IS_BROWSER",()=>hS());er.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");er.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));er.registerFlag("PROD",()=>!1);er.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>er.getBool("DEBUG"));er.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);er.registerFlag("IS_TEST",()=>!1);er.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);er.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);er.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);er.registerFlag("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU",()=>!1);er.registerFlag("USE_SETTIMEOUTCUSTOM",()=>!1);function us(e,t){let n=e;if(fn(e))return t==="string"?[]:[e.length];if(typeof e=="object"&&"texture"in e){let s=e.channels||"RGBA";return[e.height,e.width*s.length]}if(!Array.isArray(e))return[];let r=[];for(;Array.isArray(n)||fn(n)&&t!=="string";)r.push(n.length),n=n[0];return Array.isArray(e)&&q().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&fS(e,r,[]),r}function fS(e,t,n){if(n=n||[],!Array.isArray(e)&&!fn(e)){D(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}D(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),D(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<e.length;++s)fS(e[s],r,n.concat(s))}function pk(e,t,n,r){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${r}' must be ${e} tensor, but got ${t} tensor`)}}function _(e,t,n,r="numeric"){if(e instanceof Te)return pk(r,e.dtype,t,n),e;let s=lf(e);if(s!=="string"&&["bool","int32","float32"].indexOf(r)>=0&&(s=r),pk(r,s,t,n),e==null||!fn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let c=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${c}'`)}let a=us(e,s);!fn(e)&&!Array.isArray(e)&&(e=[e]);let i=s!=="string"?Gf(e,s):Qa(e,[],!0);return M.makeTensor(i,a,s)}function Jl(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 Pv="__op";function z(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],r=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+Pv;let s=(...a)=>{M.startScope(n);try{let o=r(...a);return Av(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 WF(e,t){let n=_(e,"real","complex"),r=_(t,"imag","complex");_n(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(gf,s)}var As=z({complex_:WF});function wa(e,t,n,r){if(r==null&&(r=lf(e)),r==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(typeof e=="object"&&"texture"in e){if(r!=="float32"&&r!=="int32")throw new Error(`Creating tensor from texture only supports 'float32'|'int32' dtype, while the dtype is ${r}.`);return e.channels=e.channels||"RGBA",M.backend.createTensorFromTexture(e,t||n,r)}if(!fn(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){Ev(t);let s=ht(t),a=ht(n);D(s===a,()=>`Based on the provided shape, [${t}], the tensor should have ${s} values but has ${a}`);for(let o=0;o<n.length;++o){let i=n[o],c=o===n.length-1?i!==ht(t.slice(o)):!0;D(n[o]===t[o]||!c,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!fn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=r!=="string"?Gf(e,r):Qa(e,[],!0),M.makeTensor(e,t,r)}function Cn(e,t,n){let r=us(e,n);return wa(e,t,r,n)}var Py={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Mh=4;async function VF(e,t){let n=[],r=[],s=Array.isArray(e)?e.map(o=>o.name):Object.keys(e);for(let o=0;o<s.length;++o){let i=s[o],c=Array.isArray(e)?e[o].tensor:e[i];if(c.dtype!=="float32"&&c.dtype!=="int32"&&c.dtype!=="bool"&&c.dtype!=="string"&&c.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${i}': ${c.dtype}`);let u={name:i,shape:c.shape,dtype:c.dtype};if(c.dtype==="string"){let l=new Promise(async p=>{let d=await c.bytes(),h=d.reduce((g,b)=>g+b.length,0)+Mh*d.length,f=new Uint8Array(h),m=0;for(let g=0;g<d.length;g++){let b=d[g],y=new Uint8Array(new Uint32Array([b.length]).buffer);f.set(y,m),m+=Mh,f.set(b,m),m+=b.length}p(f)});r.push(l)}else r.push(c.data());t!=null&&(u.group=t),n.push(u)}let a=await Promise.all(r);return{data:UF(a),specs:n}}function mS(e,t){let n={},r,s=0;for(let a of t){let o=a.name,i=a.dtype,c=a.shape,u=ht(c),l;if("quantization"in a){let p=a.quantization;if(p.dtype==="uint8"||p.dtype==="uint16"){if(!("min"in p&&"scale"in p))throw new Error(`Weight ${a.name} with quantization ${p.dtype} doesn't have corresponding metadata min and scale.`)}else if(p.dtype==="float16"){if(i!=="float32")throw new Error(`Weight ${a.name} is quantized with ${p.dtype} which only supports weights of type float32 not ${i}.`)}else throw new Error(`Weight ${a.name} has unknown quantization dtype ${p.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let d=Py[p.dtype],h=e.slice(s,s+u*d),f=p.dtype==="uint8"?new Uint8Array(h):new Uint16Array(h);if(i==="float32")if(p.dtype==="uint8"||p.dtype==="uint16"){l=new Float32Array(f.length);for(let m=0;m<f.length;m++){let g=f[m];l[m]=g*p.scale+p.min}}else if(p.dtype==="float16")r===void 0&&(r=XF()),l=r(f);else throw new Error(`Unsupported quantization type ${p.dtype} for weight type float32.`);else if(i==="int32"){if(p.dtype!=="uint8"&&p.dtype!=="uint16")throw new Error(`Unsupported quantization type ${p.dtype} for weight type int32.`);l=new Int32Array(f.length);for(let m=0;m<f.length;m++){let g=f[m];l[m]=Math.round(g*p.scale+p.min)}}else throw new Error(`Unsupported dtype in weight '${o}': ${i}`);s+=u*d}else if(i==="string"){let p=ht(a.shape);l=[];for(let d=0;d<p;d++){let h=new Uint32Array(e.slice(s,s+Mh))[0];s+=Mh;let f=new Uint8Array(e.slice(s,s+h));l.push(f),s+=h}}else{let p=Py[i],d=e.slice(s,s+u*p);if(i==="float32")l=new Float32Array(d);else if(i==="int32")l=new Int32Array(d);else if(i==="bool")l=new Uint8Array(d);else if(i==="complex64"){l=new Float32Array(d);let h=new Float32Array(l.length/2),f=new Float32Array(l.length/2);for(let b=0;b<h.length;b++)h[b]=l[b*2],f[b]=l[b*2+1];let m=Cn(h,c,"float32"),g=Cn(f,c,"float32");n[o]=As(m,g),m.dispose(),g.dispose()}else throw new Error(`Unsupported dtype in weight '${o}': ${i}`);s+=u*p}i!=="complex64"&&(n[o]=Cn(l,c,i))}return n}function UF(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 Ov=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function hk(e){return Ov?Buffer.byteLength(e):new Blob([e]).size}function GF(e){if(Ov)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let r=0,s=t.length;r<s;r++)n+=String.fromCharCode(t[r]);return btoa(n)}function HF(e){if(Ov){let r=Buffer.from(e,"base64");return r.buffer.slice(r.byteOffset,r.byteOffset+r.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let r=0;r<t.length;++r)n.set([t.charCodeAt(r)],r);return n.buffer}function Mv(e){if(e.length===1)return e[0];let t=0;e.forEach(s=>{t+=s.byteLength});let n=new Uint8Array(t),r=0;return e.forEach(s=>{n.set(new Uint8Array(s),r),r+=s.byteLength}),n.buffer}function fk(e){let t="/";for(e=e.trim();e.endsWith(t);)e=e.slice(0,e.length-1);let n=e.split(t);return n[n.length-1]}function gS(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(n.initializerSignature=e.initializerSignature),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}function bS(e,t,n){let r={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(r.trainingConfig=e.trainingConfig),e.weightsManifest!=null){if(!t)throw new Error("modelJSON has weightsManifest but weightSpecs is null");if(!n)throw new Error("modelJSON has weightsManifest but weightData is null");r.weightSpecs=t,r.weightData=n}return e.signature!=null&&(r.signature=e.signature),e.userDefinedMetadata!=null&&(r.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(r.modelInitializer=e.modelInitializer),e.initializerSignature!=null&&(r.initializerSignature=e.initializerSignature),r}async function Lv(e,t){let n,r;return e.weightsManifest!=null&&([n,r]=await t(e.weightsManifest)),bS(e,n,r)}function Dd(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("Expected JSON model topology, received ArrayBuffer.");return{dateSaved:new Date,modelTopologyType:"JSON",modelTopologyBytes:e.modelTopology==null?0:hk(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:hk(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function yS(e){let t=[];for(let n of e)t.push(...n.weights);return t}function qF(){let e=n=>{let r=n<<13,s=0;for(;(r&8388608)===0;)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 jF(){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 KF(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function XF(){let e=qF(),t=jF(),n=KF();return r=>{let s=new ArrayBuffer(4*r.length),a=new Uint32Array(s);for(let o=0;o<r.length;o++){let i=r[o],c=e[n[i>>10]+(i&1023)]+t[i>>10];a[o]=c}return new Float32Array(s)}}var $t=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return $t.instance==null&&($t.instance=new $t),$t.instance}static registerSaveRouter(e){$t.getInstance().saveRouters.push(e)}static registerLoadRouter(e){$t.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return $t.getHandlers(e,"save")}static getLoadHandlers(e,t){return $t.getHandlers(e,"load",t)}static getHandlers(e,t,n){let r=[];return(t==="load"?$t.getInstance().loadRouters:$t.getInstance().saveRouters).forEach(a=>{let o=a(e,n);o!==null&&r.push(o)}),r}},YF=e=>$t.registerSaveRouter(e),ZF=e=>$t.registerLoadRouter(e),JF=e=>$t.getSaveHandlers(e),QF=(e,t)=>$t.getLoadHandlers(e,t),Oy="tensorflowjs",My=1,qa="models_store",ta="model_info_store";function vS(){if(!q().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 Ly(e){let t=e.result;t.createObjectStore(qa,{keyPath:"modelPath"}),t.createObjectStore(ta,{keyPath:"modelPath"})}var ro=class{constructor(e){if(this.indexedDB=vS(),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(Oy,My);s.onupgradeneeded=()=>Ly(s),s.onsuccess=()=>{let a=s.result;if(t==null){let o=a.transaction(qa,"readonly"),c=o.objectStore(qa).get(this.modelPath);c.onsuccess=()=>{if(c.result==null)return a.close(),r(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(c.result.modelArtifacts)},c.onerror=u=>(a.close(),r(c.error)),o.oncomplete=()=>a.close()}else{let o=Dd(t),i=a.transaction(ta,"readwrite"),c=i.objectStore(ta),u=c.put({modelPath:this.modelPath,modelArtifactsInfo:o}),l;u.onsuccess=()=>{l=a.transaction(qa,"readwrite");let d=l.objectStore(qa).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:o});d.onsuccess=()=>n({modelArtifactsInfo:o}),d.onerror=h=>{c=i.objectStore(ta);let f=c.delete(this.modelPath);f.onsuccess=()=>(a.close(),r(d.error)),f.onerror=m=>(a.close(),r(d.error))}},u.onerror=p=>(a.close(),r(u.error)),i.oncomplete=()=>{l==null?a.close():l.oncomplete=()=>a.close()}}},s.onerror=a=>r(s.error)})}};ro.URL_SCHEME="indexeddb://";var xS=e=>q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ro.URL_SCHEME)?eR(e.slice(ro.URL_SCHEME.length)):null;$t.registerSaveRouter(xS);$t.registerLoadRouter(xS);function eR(e){return new ro(e)}function tR(e){return e.startsWith(ro.URL_SCHEME)?e.slice(ro.URL_SCHEME.length):e}var nR=class{constructor(){this.indexedDB=vS()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Oy,My);n.onupgradeneeded=()=>Ly(n),n.onsuccess=()=>{let r=n.result,s=r.transaction(ta,"readonly"),o=s.objectStore(ta).getAll();o.onsuccess=()=>{let i={};for(let c of o.result)i[c.modelPath]=c.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=tR(e),new Promise((t,n)=>{let r=this.indexedDB.open(Oy,My);r.onupgradeneeded=()=>Ly(r),r.onsuccess=()=>{let s=r.result,a=s.transaction(ta,"readwrite"),o=a.objectStore(ta),i=o.get(e),c;i.onsuccess=()=>{if(i.result==null)return s.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=o.delete(e),l=()=>{c=s.transaction(qa,"readwrite");let d=c.objectStore(qa).delete(e);d.onsuccess=()=>t(i.result.modelArtifactsInfo),d.onerror=h=>n(i.error)};u.onsuccess=l,u.onerror=p=>(l(),s.close(),n(i.error))}},i.onerror=u=>(s.close(),n(i.error)),a.oncomplete=()=>{c==null?s.close():c.oncomplete=()=>s.close()}},r.onerror=s=>n(r.error)})}},Cs="/",ic="tensorflowjs_models",wS="info",rR="model_topology",sR="weight_specs",aR="weight_data",oR="model_metadata";function IS(e){return{info:[ic,e,wS].join(Cs),topology:[ic,e,rR].join(Cs),weightSpecs:[ic,e,sR].join(Cs),weightData:[ic,e,aR].join(Cs),modelMetadata:[ic,e,oR].join(Cs)}}function kS(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function iR(e){let t=e.split(Cs);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Cs)}function cR(e){return e.startsWith(so.URL_SCHEME)?e.slice(so.URL_SCHEME.length):e}var so=class{constructor(e){if(!q().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=IS(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=Dd(e);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,GF(e.weightData));let s={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(s)),{modelArtifactsInfo:r}}catch(s){throw kS(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=HF(a),t}};so.URL_SCHEME="localstorage://";var SS=e=>q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(so.URL_SCHEME)?uR(e.slice(so.URL_SCHEME.length)):null;$t.registerSaveRouter(SS);$t.registerLoadRouter(SS);function uR(e){return new so(e)}var lR=class{constructor(){D(q().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),D(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=ic+Cs,n=Cs+wS;for(let r=0;r<this.LS.length;++r){let s=this.LS.key(r);if(s.startsWith(t)&&s.endsWith(n)){let a=iR(s);e[a]=JSON.parse(this.LS.getItem(s))}}return e}async removeModel(e){e=cR(e);let t=IS(e);if(this.LS.getItem(t.info)==null)throw new Error(`Cannot find model at path '${e}'`);let n=JSON.parse(this.LS.getItem(t.info));return kS(t),n}},lc="://",On=class{constructor(){this.managers={}}static getInstance(){return On.instance==null&&(On.instance=new On),On.instance}static registerManager(e,t){D(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(lc)&&(e=e.slice(0,e.indexOf(lc))),D(e.length>0,()=>"scheme must not be an empty string.");let n=On.getInstance();D(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=On.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(On.getInstance().managers)}};function xh(e){if(e.indexOf(lc)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${On.getSchemes().join(",")}`);return{scheme:e.split(lc)[0],path:e.split(lc)[1]}}async function TS(e,t,n=!1){D(e!==t,()=>`Old path and new path are the same: '${e}'`);let r=$t.getLoadHandlers(e);D(r.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),D(r.length<2,()=>`Copying failed because more than one (${r.length}) load handlers for source URL ${e}.`);let s=r[0],a=$t.getSaveHandlers(t);D(a.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),D(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,c=xh(e).path,u=i===xh(e).scheme,l=await s.load();n&&u&&await On.getManager(i).removeModel(c);let p=await o.save(l);return n&&!u&&await On.getManager(i).removeModel(c),p.modelArtifactsInfo}async function dR(){let e=On.getSchemes(),t={};for(let n of e){let r=await On.getManager(n).listModels();for(let s in r){let a=n+lc+s;t[a]=r[s]}}return t}async function pR(e){let t=xh(e);return On.getManager(t.scheme).removeModel(t.path)}async function hR(e,t){return TS(e,t,!1)}async function fR(e,t){return TS(e,t,!0)}var mR=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"||!q().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))}};if(q().get("IS_BROWSER")){q().setPlatform("browser",new mR);try{On.registerManager(so.URL_SCHEME,new lR)}catch(e){}try{On.registerManager(ro.URL_SCHEME,new nR)}catch(e){}}var gR={importFetch:()=>kD()},gy,bR=class{constructor(){this.util=SD(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return q().global.fetch!=null?q().global.fetch(e,t):(gy==null&&(gy=gR.importFetch()),gy(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)}};q().get("IS_NODE")&&!q().get("IS_BROWSER")&&q().setPlatform("node",new bR);function Me(e,t="float32",n){return t=t||"float32",Ev(e),new Ht(e,t,n)}function yR(e,t){let n=_(e,"x","cast");if(!Y1(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(wo,r,s)}var ce=z({cast_:yR});function vR(e){let n={x:_(e,"x","clone","string_or_numeric")};return M.runKernel(Oo,n)}var is=z({clone_:vR});function zv(e,t=!1){console.log(e.toString(t))}pS();var xR={buffer:Me,cast:ce,clone:is,print:zv};$F(xR);var Ut={};Ae(Ut,{browserFiles:()=>NR,browserHTTPRequest:()=>DR,concatenateArrayBuffers:()=>Mv,copyModel:()=>hR,decodeWeights:()=>mS,encodeWeights:()=>VF,fromMemory:()=>RR,fromMemorySync:()=>AS,getLoadHandlers:()=>QF,getModelArtifactsForJSON:()=>Lv,getModelArtifactsForJSONSync:()=>bS,getModelArtifactsInfoForJSON:()=>Dd,getSaveHandlers:()=>JF,getWeightSpecs:()=>yS,http:()=>Wv,isHTTPScheme:()=>zy,listModels:()=>dR,loadWeights:()=>_R,moveModel:()=>fR,registerLoadRouter:()=>ZF,registerSaveRouter:()=>YF,removeModel:()=>pR,weightsLoaderFactory:()=>NS,withSaveHandler:()=>PR,withSaveHandlerSync:()=>OR});var wR="model",IR=".json",kR=".weights.bin";function mk(e){return new Promise(t=>setTimeout(t)).then(e)}var mc=class{constructor(e){if(!q().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(mc.URL_SCHEME)&&(e=e.slice(mc.URL_SCHEME.length)),(e==null||e.length===0)&&(e=wR),this.modelJsonFileName=e+IR,this.weightDataFileName=e+kR}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],r=gS(e,n),s=window.URL.createObjectURL(new Blob([JSON.stringify(r)],{type:"application/json"})),a=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(a.download=this.modelJsonFileName,a.href=s,await mk(()=>a.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let o=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;o.download=this.weightDataFileName,o.href=t,await mk(()=>o.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Dd(e)}}}};mc.URL_SCHEME="downloads://";var SR=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=Lv(s,c=>this.loadWeights(c));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,Mv(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=>fk(s.name)),r={};for(let s of e)s.paths.forEach(a=>{let o=fk(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}},TR=e=>q().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(mc.URL_SCHEME)?CR(e.slice(mc.URL_SCHEME.length)):null;$t.registerSaveRouter(TR);function CR(e="model"){return new mc(e)}function NR(e){return new SR(e)}function gk(e,t,n,r){o(e),n=n==null?0:n,r=r==null?1:r,i(n,r);let s=0,a=c=>(c.then(u=>{let l=n+ ++s/e.length*(r-n);return t(l),u}),c);function o(c){D(c!=null&&Array.isArray(c)&&c.length>0,()=>"promises must be a none empty array")}function i(c,u){D(c>=0&&c<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${c}`),D(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),D(u>=c,()=>`startFraction must be no more than endFraction, but got startFraction ${c} and endFraction ${u}`)}return Promise.all(e.map(a))}async function CS(e,t){t==null&&(t={});let n=t.fetchFunc==null?q().platform.fetch:t.fetchFunc,r=e.map(p=>n(p,t.requestInit,{isBinary:!0})),s=0,a=.5,i=(t.onProgress==null?await Promise.all(r):await gk(r,t.onProgress,s,a)).map(p=>p.arrayBuffer()),c=.5,u=1;return t.onProgress==null?await Promise.all(i):await gk(i,t.onProgress,c,u)}async function _R(e,t="",n,r){return NS(o=>CS(o,{requestInit:r}))(e,t,n)}function NS(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 m=0;h.weights.forEach(g=>{let b="quantization"in g?g.quantization.dtype:g.dtype,y=Py[b]*ht(g.shape),v=()=>{s[f]=!0,a[f]==null&&(a[f]=[]),a[f].push({manifestEntry:g,groupOffset:m,sizeBytes:y})};r!=null?r.forEach((x,k)=>{x===g.name&&(v(),o[k]=!0)}):v(),i.push(g.name),m+=y})}),!o.every(h=>h)){let h=r.filter((f,m)=>!o[m]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}.
|
|
Manifest JSON has weights with names: ${i.join(", ")}.`)}let c=s.reduce((h,f,m)=>(f&&h.push(m),h),[]),u=[];c.forEach(h=>{t[h].paths.forEach(f=>{let m=n+(n.endsWith("/")?"":"/")+f;u.push(m)})});let l=await e(u),p={},d=0;return c.forEach(h=>{let f=t[h].paths.length,m=0;for(let x=0;x<f;x++)m+=l[d+x].byteLength;let g=new ArrayBuffer(m),b=new Uint8Array(g),y=0;for(let x=0;x<f;x++){let k=new Uint8Array(l[d+x]);b.set(k,y),y+=k.byteLength}a[h].forEach(x=>{let k=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),S=mS(k,[x.manifestEntry]);for(let C in S)p[C]=S[C]}),d+=f}),p}}var ER="application/octet-stream",AR="application/json",Bv=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(D(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=q().platform.fetch,D(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&D(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],r=gS(e,n);t.body.append("model.json",new Blob([JSON.stringify(r)],{type:AR}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:ER}),"model.weights.bin");let s=await this.fetch(this.path,t);if(s.ok)return{modelArtifactsInfo:Dd(e),responses:[s]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${s.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(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 Lv(t,s=>this.loadWeights(s))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,r]=$R(t),s=this.weightPathPrefix||n,a=yS(e),o=[],i=[];for(let u of e)for(let l of u.paths)this.weightUrlConverter!=null?i.push(this.weightUrlConverter(l)):o.push(s+l+r);this.weightUrlConverter&&o.push(...await Promise.all(i));let c=await CS(o,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[a,Mv(c)]}};Bv.URL_SCHEME_REGEX=/^https?:\/\//;function $R(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),r=e.substring(0,t),s=n>t?e.substring(n):"";return[r+"/",s]}function zy(e){return e.match(Bv.URL_SCHEME_REGEX)!=null}var _S=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(r=>zy(r)):n=zy(e),n)return Wv(e,t)}return null};$t.registerSaveRouter(_S);$t.registerLoadRouter(_S);function Wv(e,t){return new Bv(e,t)}function DR(e,t){return Wv(e,t)}var by=class{constructor(e){this.modelArtifacts=e}load(){return this.modelArtifacts}},ES=class{constructor(e){this.saveHandler=e}save(e){return this.saveHandler(e)}},FR=class{constructor(e){e.load&&(this.load=()=>Promise.resolve(e.load())),e.save&&(this.save=t=>Promise.resolve(e.save(t)))}};function RR(e,t,n,r){let s=arguments;return new FR(AS(...s))}function AS(e,t,n,r){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new by(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 by({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 by({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:r}))}function PR(e){return new ES(e)}function OR(e){return new ES(e)}var $S={};Ae($S,{confusionMatrix:()=>rP});function MR(e,t,n=!1,r=!1){let s=_(e,"a","matMul"),a=_(t,"b","matMul");[s,a]=_t(s,a);let o={a:s,b:a},i={transposeA:n,transposeB:r};return M.runKernel(xo,o,i)}var De=z({matMul_:MR});function LR(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(jo,o,i)}var gc=z({oneHot_:LR});function zR(){q().set("PROD",!0)}function BR(){q().set("DEBUG",!0)}function WR(){q().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Vv(e){q().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}DF(Vv);function VR(){M.disposeVariables()}function Er(){return M}function Lh(){return M.memory()}function UR(e){return M.profile(e)}function O(e,t){return M.tidy(e,t)}function _e(e){Rv(e).forEach(n=>n.dispose())}function Jt(e){return M.keep(e)}function GR(e){return M.time(e)}function HR(e){return M.setBackend(e)}function qR(){return M.ready()}function jR(){return M.backendName}function KR(e){M.removeBackend(e)}function XR(e){return M.findBackend(e)}function YR(e){return M.findBackendFactory(e)}function qf(e,t,n=1){return M.registerBackend(e,t,n)}function DS(){return M.backend}function ZR(e,t){q().setPlatform(e,t)}function JR(e){let n={input:_(e,"input","imag")};return M.runKernel(_f,n)}var Fd=z({imag_:JR});function QR(e){let n={x:_(e,"x","neg")};return M.runKernel(pu,n)}var xt=z({neg_:QR});function eP(e){let n={input:_(e,"input","real")};return M.runKernel(Lf,n)}var bc=z({real_:eP});function tP(e,t,n){let r=_(e,"x","transpose");if(t==null&&(t=r.shape.map((o,i)=>i).reverse()),D(r.rank===t.length,()=>`Error in transpose: rank of input ${r.rank} must match length of perm ${t}.`),t.forEach(o=>{D(o>=0&&o<r.rank,()=>`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=bc(r),i=Fd(r);return o=M.runKernel(_s,{x:o},a),i=M.runKernel(_s,{x:i},a),n&&(i=xt(i)),As(o,i)}):M.runKernel(_s,s,a)}var Ee=z({transpose_:tP});function nP(e,t,n){let r=_(e,"labels","confusionMatrix"),s=_(t,"predictions","confusionMatrix");D(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),D(r.rank===1,()=>`Expected the rank of labels to be 1, but got ${r.rank}`),D(s.rank===1,()=>`Expected the rank of predictions to be 1, but got ${s.rank}`),D(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.`),D(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let a=gc(ce(r,"int32"),n),o=gc(ce(s,"int32"),n),i=Ee(a),c=De(i,o);return ce(c,"int32")}var rP=z({confusionMatrix_:nP}),Mu={};Ae(Mu,{assertAndGetBroadcastShape:()=>ct,getBroadcastDims:()=>FS,getReductionAxes:()=>Bt});function FS(e,t){let n=e.length,r=[];for(let s=0;s<n;s++){let a=n-1-s,o=e[a]||1;(t[t.length-1-s]||1)>1&&o===1&&r.unshift(a)}return r}function Bt(e,t){let n=[];for(let r=0;r<t.length;r++){let s=e[e.length-r-1],a=t.length-r-1,o=t[a];(s==null||s===1&&o>1)&&n.unshift(a)}return n}function ct(e,t){let n=[],r=Math.max(e.length,t.length);for(let s=0;s<r;s++){let a=e[e.length-s-1];a==null&&(a=1);let o=t[t.length-s-1];if(o==null&&(o=1),a===1)n.unshift(o);else if(o===1)n.unshift(a);else if(a!==o){let i=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(i)}else n.unshift(a)}return n}var fi={};Ae(fi,{fromPixels:()=>lP,fromPixelsAsync:()=>cP,toPixels:()=>uP});function Rd(e,t,n){if(go(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let r=us(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 wa(e,t,r,n)}var La;function RS(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(Rh(Fh,M.backendName)!=null){let f={pixels:e},m={numChannels:t};return M.runKernel(Fh,f,m)}let[u,l]=s?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(o)p=e.getContext("2d").getImageData(0,0,u,l).data;else if(r||n)p=e.data;else if(a||s||i){if(La==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")La=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else La=document.createElement("canvas").getContext("2d",{willReadFrequently:!0});La.canvas.width=u,La.canvas.height=l,La.drawImage(e,0,0,u,l),p=La.getImageData(0,0,u,l).data}let d;if(t===4)d=new Int32Array(p);else{let f=u*l;d=new Int32Array(f*t);for(let m=0;m<f;m++)for(let g=0;g<t;++g)d[m*t+g]=p[m*4+g]}return Rd(d,[l,u,t],"int32")}function sP(e){return e!=null&&e.data instanceof Uint8Array}function aP(){return typeof window!="undefined"&&typeof ImageBitmap!="undefined"&&window.hasOwnProperty("createImageBitmap")}function oP(e){return e!=null&&e.width!==0&&e.height!==0}function iP(e){return aP()&&!(e instanceof ImageBitmap)&&oP(e)&&!sP(e)}async function cP(e,t=3){let n=null;if(q().getBool("WRAP_TO_IMAGEBITMAP")&&iP(e)){let r;try{r=await createImageBitmap(e,{premultiplyAlpha:"none"})}catch(s){r=null}r!=null&&r.width===e.width&&r.height===e.height?n=r:n=e}else n=e;return RS(n,t)}async function uP(e,t){let n=_(e,"img","toPixels");if(!(e instanceof Te)){let u=n;n=ce(u,"int32"),u.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[r,s]=n.shape.slice(0,2),a=n.rank===2?1:n.shape[2];if(a>4||a===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${a}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let o=await n.data(),i=n.dtype==="float32"?255:1,c=new Uint8ClampedArray(s*r*4);for(let u=0;u<r*s;++u){let l=[0,0,0,255];for(let d=0;d<a;d++){let h=o[u*a+d];if(n.dtype==="float32"){if(h<0||h>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(n.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);a===1?(l[0]=h*i,l[1]=h*i,l[2]=h*i):l[d]=h*i}let p=u*4;c[p+0]=Math.round(l[0]),c[p+1]=Math.round(l[1]),c[p+2]=Math.round(l[2]),c[p+3]=Math.round(l[3])}if(t!=null){t.width=s,t.height=r;let u=t.getContext("2d"),l=new ImageData(c,s,r);u.putImageData(l,0,0)}return n!==e&&n.dispose(),c}var lP=z({fromPixels_:RS}),Uv={};Ae(Uv,{prepareAndValidate:()=>PS});function PS(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(ht(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;p<s.length-1;++p)o*=s[p];let i=e.shape,c=s.slice();c.pop();let u=1;for(let p=a;p<n;++p)u*=i[p],c.push(i[p]);let l=[...Dc(e.shape).map(p=>p/u),1].slice(0,a);return[c,o,u,l]}var Gv={};Ae(Gv,{calculateShapes:()=>OS,validateInput:()=>qv,validateUpdateShape:()=>Hv});function Hv(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.rank<s)throw new Error(a+` update.rank < ${s}. `);if(e.length<r+(n.rank-s))throw new Error(a+` Output shape length < ${r+(n.rank-s)}`);if(n.rank!==s+e.length-r)throw new Error(a+` update.rank != ${s+e.length-r}`);for(let o=0;o<s;++o)if(n.shape[o]!==t.shape[o])throw new Error(a+` updates.shape[${o}] (${n.shape[o]}) != indices.shape[${o}] (${t.shape[o]}).`);for(let o=0;o<n.rank-s;++o)if(n.shape[o+s]!==e[o+r])throw new Error(a+` updates.shape[${o+s}] (${n.shape[o+s]}) != shape[${o+s}] (${e[o+s]})`)}function qv(e,t,n){if(t.rank<1)throw new Error(`tf.scatterND() expects the indices to be rank 1 or higher, but the rank was ${t.rank}.`);if(e.rank<1)throw new Error(`tf.scatterND() expects the updates to be rank 1 or higher, but the rank was ${e.rank}.`);if(t.dtype!=="int32")throw new Error(`The dtype of 'indices' should be int32, but got dtype: ${t.dtype}`);if(n.length<1)throw new Error(`Output rank must be greater or equal to 1, but got shape: ${n}`);if(n.length===0){if(t.size===0)throw new Error(`Indices specified for empty output. indices shape: ${t.shape}`);if(e.size===0)throw new Error(`Updates specified for empty output. updates shape: ${e.shape}`)}Hv(n,t,e)}function OS(e,t,n){let r=t.shape.length,s=r>1?t.shape[r-1]:1,a=n.length,o=1;for(let p=s;p<a;++p)o*=n[p];let i=s<1?1:s,c=ht(t.shape)/i,u=[...Dc(n.slice(0,s)),1],l=ht(n);return{sliceRank:s,numUpdates:c,sliceSize:o,strides:u,outputSize:l}}var qt={};Ae(qt,{assertParamsValid:()=>pP,computeFlatOffset:()=>bP,computeOutShape:()=>fP,getNormalizedAxes:()=>mP,isSliceContinous:()=>gP,maskToAxes:()=>hP,parseSliceParams:()=>HS,sliceInfo:()=>yP,startForAxis:()=>US,startIndicesWithElidedDims:()=>BS,stopForAxis:()=>GS,stopIndicesWithElidedDims:()=>WS,stridesForAxis:()=>VS,stridesWithElidedDims:()=>MS});var By=-2,dP=-1;function pP(e,t,n){let r=e.shape.length;D(r===t.length,()=>`Error in slice${r}D: Length of begin ${t} must match the rank of the array (${r}).`),D(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<r;++s)D(t[s]+n[s]<=e.shape[s],()=>`Error in slice${r}D: begin[${s}] + size[${s}] (${t[s]+n[s]}) would overflow input.shape[${s}] (${e.shape[s]})`)}function hP(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function fP(e,t,n){let r=[];for(let s=0;s<e.length;s++)r[s]=Math.ceil((t[s]-e[s])/n[s]);return r}function MS(e,t,n,r){let s=[...e];for(let a=s.length;a<r.length;a++)s.push(1);for(let a=0;a<n;a++)a===0?s[t]=1:(s.splice(t,0,1),s.pop());return s}function LS(e,t,n){return n<=e?n:n-(t-1)}function zS(e,t){let n=[];for(let r=0;r<e;r++)n.push(t+r);return n}function mP(e,t,n,r,s,a,o,i,c){let u=e.length,l=new Array(u),p=new Array(u),d=new Array(u);if(t.length&&n>0){let h=t[0],f=n+1;l=BS(o,h,f,r,e),p=WS(i,h,f,s,e),d=MS(a,h,f,e)}else for(let h=0;h<u;h++)l[h]=US(o,r,a,e,h,c),p[h]=GS(i,s,a,e,h,c),d[h]=VS(a,h,c);return{begin:l,end:p,strides:d}}function BS(e,t,n,r,s){let a=[...s],o=zS(n,t);for(let i=0;i<a.length;i++)if(o.indexOf(i)>-1)a[i]=0;else{let c=LS(t,n,i),u=r[c];e&1<<c&&(u=0),a[i]=u}return a}function WS(e,t,n,r,s){let a=[...s],o=zS(n,t);for(let i=0;i<a.length;i++)if(o.indexOf(i)>-1)a[i]=Number.MAX_SAFE_INTEGER;else{let c=LS(t,n,i),u=r[c];e&1<<c&&(u=Number.MAX_SAFE_INTEGER),a[i]=u}for(let i=0;i<a.length;i++){let c=s[i];a[i]<0&&(a[i]+=c),a[i]=Kl(0,a[i],s[i])}return a}function VS(e,t,n){let r=e[t];return(n&1<<t||r==null)&&(r=1),r}function US(e,t,n,r,s,a){let o=t[s],i=n[s]||1;(e&1<<s||a&1<<s||o==null)&&(i>0?o=Number.MIN_SAFE_INTEGER:o=Number.MAX_SAFE_INTEGER);let c=r[s];return o<0&&(o+=c),o=Kl(0,o,c-1),o}function GS(e,t,n,r,s,a){let o=t[s],i=n[s]||1;(e&1<<s||a&1<<s||o==null)&&(i>0?o=Number.MAX_SAFE_INTEGER:o=Number.MIN_SAFE_INTEGER);let c=r[s];return o<0&&(o+=c),i>0?o=Kl(0,o,c):o=Kl(-1,o,c-1),o}function gP(e,t,n){let r=n.length;for(let s=0;s<n.length;s++)if(n[s]>1){r=s;break}for(let s=r+1;s<n.length;s++)if(t[s]>0||n[s]!==e[s])return!1;return!0}function bP(e,t){let n=e.length>0?e[e.length-1]:1;for(let r=0;r<e.length-1;r++)n+=e[r]*t[r];return n}function HS(e,t,n){let r,s=e.shape.length;typeof t=="number"?r=[t,...new Array(s-1).fill(0)]:t.length<s?r=t.concat(new Array(s-t.length).fill(0)):r=t.slice(),r.forEach(o=>{D(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.length<s?a=n.concat(new Array(s-n.length).fill(-1)):a=n,a=a.map((o,i)=>o>=0?o:(D(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 yP(e,t,n,r,s,a,o,i,c){let u;if(r==null?(u=new Array(t.length),u.fill(1)):u=r,o!=null&&(o&o-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let l=!1,p={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:n.slice(),strides:u.slice(),beginMask:s,endMask:a,ellipsisMask:o,newAxisMask:i,shrinkAxisMask:c};for(let v=0;v<p.dims;v++)l&&(1<<v&i)!==0&&p.numAddAxisAfterEllipsis++,1<<v&o&&(l=!0);l||(p.ellipsisMask|=1<<p.dims,p.dims++);let d={dims:e.length,beginMask:0,endMask:0,beginValid:!1,endValid:!1};vP(p,d);let h=!0,f=!0,m=!0,g=[],b=[];for(let v=0;v<e.length;++v){if(d.strides[v]===0)throw Error(`strides[${v}] must be non-zero`);let x=!!(d.shrinkAxisMask&1<<v),k=e[v];if(k===-1){g.push(x?1:-1);continue}let S=[d.beginMask&1<<v,d.endMask&1<<v],C=[d.strides[v]>0?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.");m=m&&d.strides[v]===1;let E=!!(d.beginMask&1<<v&&d.endMask&1<<v);if(d.beginValid&&d.endValid){if(x){let R=d.begin[v]<0?k+d.begin[v]:d.begin[v];if(d.begin[v]=R,d.end[v]=d.begin[v]+1,R<0||R>=k)throw Error(`slice index ${d.begin[v]} of dimension ${v} out of bounds.`)}else d.begin[v]=bk(d.begin[v],0,d.strides[v],k,S,C),d.end[v]=bk(d.end[v],1,d.strides[v],k,S,C);let A=d.strides[v]===1&&d.begin[v]===0&&d.end[v]===k;h=h&&A,f=f&&(v===0&&d.strides[v]===1||A)}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 A;$===0||$<0!=d.strides[v]<0?A=0:A=Math.trunc($/d.strides[v])+($%d.strides[v]!==0?1:0),g.push(A)}else g.push(-1)}for(let v=0;v<d.finalShapeGatherIndices.length;++v){let x=d.finalShapeGatherIndices[v];x>=0?b.push(g[x]):x===By&&b.push(1)}return{finalShapeSparse:b.filter((v,x)=>d.finalShapeGatherIndices[x]!==By),finalShape:b,isIdentity:h,sliceDim0:f,isSimpleSlice:m,begin:d.begin,end:d.end,strides:d.strides}}function vP(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;r<e.dims;r++)if(1<<r&e.ellipsisMask){let s=Math.min(t.dims-(e.dims-r)+1+e.numAddAxisAfterEllipsis,t.dims);for(;n<s;n++)t.begin[n]=0,t.end[n]=0,t.strides[n]=1,t.beginMask|=1<<n,t.endMask|=1<<n,t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(-1),t.inputShapeGatherIndicesSparse[n]=r}else if(1<<r&e.newAxisMask)t.finalShapeGatherIndices.push(By),t.finalShapeGatherIndicesSparse.push(-1);else{if(n===t.begin.length)throw Error(`Index out of range using input dim ${n}; input has only ${t.dims} dims, ${t.begin.length}.`);e.begin!=null&&(t.begin[n]=e.begin[r]),e.end!=null&&(t.end[n]=e.end[r]),t.strides[n]=e.strides[r],e.beginMask&1<<r&&(t.beginMask|=1<<n),e.endMask&1<<r&&(t.endMask|=1<<n),e.shrinkAxisMask&1<<r?(t.finalShapeGatherIndices.push(dP),t.finalShapeGatherIndicesSparse.push(-1),t.shrinkAxisMask|=1<<n):(t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(r)),t.inputShapeGatherIndicesSparse[n]=r,n++}}function bk(e,t,n,r,s,a){if(s[t])return n>0?a[t]:a[t+1&1];{let o=e<0?r+e:e;return o<a[0]?a[0]:o>a[1]?a[1]:o}}var se={};Ae(se,{Serializable:()=>qS,SerializationMap:()=>Ua,registerClass:()=>Ia});var qS=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},Ua=class{constructor(){this.classNameMap={}}static getMap(){return Ua.instance==null&&(Ua.instance=new Ua),Ua.instance}static register(e){Ua.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function Ia(e){D(e.className!=null,()=>"Class being registered does not have the static className property defined."),D(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),D(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),Ua.register(e)}var jS={};Ae(jS,{TEST_EPSILON_FLOAT16:()=>KS,createVideoElement:()=>NP,encodeStrings:()=>XS,expectArrayBuffersEqual:()=>CP,expectArraysClose:()=>wP,expectArraysEqual:()=>kP,expectNumbersClose:()=>SP,expectPromiseToFail:()=>IP,expectValuesInRange:()=>TP,play:()=>_P,testEpsilon:()=>jv});var xP=.001,KS=.1;function wP(e,t,n){return n==null&&(n=jv()),Wy(e,t,(r,s)=>Kv(r,s,n))}function jv(){return M.backend.floatPrecision()===32?xP:KS}function Wy(e,t,n){let r=!0;if((fn(e)||fn(t))&&(r=!1),fn(e)&&fn(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=us(e),i=us(t);if(!ga(o,i))throw new Error(`Arrays have different shapes. Actual: [${o}]. Expected: [${i}]`)}let s=fn(e)?e:Qa(e),a=fn(t)?t:Qa(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;o<a.length;++o){let i=s[o],c=a[o];if(!n(i,c))throw new Error(`Arrays differ: actual[${o}] = ${i}, expected[${o}] = ${c}.
|
|
Actual: ${s}.
|
|
Expected: ${a}.`)}typeof expect!="undefined"&&expect().nothing()}function IP(e,t){e().then(()=>t.fail(),()=>t()),typeof expect!="undefined"&&expect().nothing()}function kP(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return ea(e)||ea(e[0])||ea(t)||ea(t[0])?Wy(e,n,(r,s)=>r==s):Wy(e,t,(r,s)=>Kv(r,s,0))}function SP(e,t,n){if(n==null&&(n=jv()),!Kv(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`);typeof expect!="undefined"&&expect().nothing()}function Kv(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function TP(e,t,n){for(let r=0;r<e.length;r++)if(e[r]<t||e[r]>n)throw new Error(`Value out of range:${e[r]} low: ${t}, high: ${n}`)}function CP(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<r.length;s++)if(n[s]!==r[s])throw new Error(`Expected ArrayBuffer value at ${s} to be ${r[s]} but got ${n[s]} instead`)}function XS(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?XS(n):e[t]=Ad(n)}return e}function NP(e){let t=document.createElement("video");return"playsInline"in t&&(t.playsInline=!0),t.muted=!0,t.loop=!0,t.style.position="fixed",t.style.left="0px",t.style.top="0px",t.preload="auto",t.appendChild(e),new Promise(n=>{t.addEventListener("loadeddata",r=>n(t)),t.load()})}async function _P(e){await e.play(),"requestVideoFrameCallback"in e&&await new Promise(t=>{e.requestVideoFrameCallback(t)})}var EP="4.0.0";function AP(e,t){let n=_(e,"a","add"),r=_(t,"b","add");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(ba,s)}var Y=z({add_:AP});function $P(e,t){let n=_(e,"a","floorDiv"),r=_(t,"b","floorDiv");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(Fo,s)}var jf=z({floorDiv_:$P});function DP(e,t){let n=_(e,"a","div"),r=_(t,"b","div");if([n,r]=_t(n,r),n.dtype==="int32"&&r.dtype==="int32")return jf(n,r);let s={a:n,b:r},a={};return M.runKernel(Eo,s,a)}var fe=z({div_:DP});function FP(e,t){let n=_(e,"a","mul"),r=_(t,"b","mul");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(qo,s)}var B=z({mul_:FP});function RP(e){let t=_(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return M.runKernel(hd,n)}else{let n={x:t};return M.runKernel(Fc,n)}}var Lt=z({abs_:RP});function PP(e){let n={x:_(e,"x","acos")};return M.runKernel(Rc,n)}var Xv=z({acos_:PP});function OP(e){let n={x:_(e,"x","acosh")};return M.runKernel(Pc,n)}var Yv=z({acosh_:OP});function MP(e){D(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),D(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(!ga(s.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let r=t;return M.runKernel(bo,r)}var YS=z({addN_:MP});function LP(e,t=null,n=!1){let s={x:_(e,"x","all","bool")},a={axis:t,keepDims:n};return M.runKernel(Oc,s,a)}var Kf=z({all_:LP});function zP(e,t=null,n=!1){let s={x:_(e,"x","any","bool")},a={axis:t,keepDims:n};return M.runKernel(Mc,s,a)}var Ql=z({any_:zP});function BP(e,t=0){let r={x:_(e,"x","argMax")},s={axis:t};return M.runKernel(yo,r,s)}var ao=z({argMax_:BP});function WP(e,t=0){let r={x:_(e,"x","argMin")},s={axis:t};return M.runKernel(dd,r,s)}var Zv=z({argMin_:WP});function VP(e){let n={x:_(e,"x","asin")};return M.runKernel(Lc,n)}var Jv=z({asin_:VP});function UP(e){let n={x:_(e,"x","asinh")};return M.runKernel(zc,n)}var Qv=z({asinh_:UP});function GP(e){let n={x:_(e,"x","atan")};return M.runKernel(Bc,n)}var ex=z({atan_:GP});function HP(e,t){let n=_(e,"a","atan2"),r=_(t,"b","atan2");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(Vc,s)}var tx=z({atan2_:HP});function qP(e){let n={x:_(e,"x","atanh")};return M.runKernel(Wc,n)}var nx=z({atanh_:qP});function jP(e,t,n,r,s="NHWC",a){let o=e[3],i=[...t,o],c=QS(s);return Pd(e,i,n,a,r,null,null,c)}function ZS(e,t,n,r,s,a,o="channelsLast"){let[i,c]=zh(t),u;if(o==="channelsLast")u=[i,c,e[3],e[3]];else if(o==="channelsFirst")u=[i,c,e[1],e[1]];else throw new Error(`Unknown dataFormat ${o}`);return Pd(e,u,n,r,s,a,!1,o)}function KP(e,t,n,r,s,a,o="NDHWC"){let[i,c,u]=Vy(t),l,p;if(o==="NDHWC")p="channelsLast",l=[i,c,u,e[4],e[4]];else if(o==="NCDHW")p="channelsFirst",l=[i,c,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${o}`);return JS(e,l,n,r,s,!1,p,a)}function Pd(e,t,n,r,s,a,o=!1,i="channelsLast"){let[c,u,l,p]=[-1,-1,-1,-1];if(i==="channelsLast")[c,u,l,p]=e;else if(i==="channelsFirst")[c,p,u,l]=e;else throw new Error(`Unknown dataFormat ${i}`);let[d,h,,f]=t,[m,g]=zh(n),[b,y]=zh(r),v=dc(d,b),x=dc(h,y),{padInfo:k,outHeight:S,outWidth:C}=ZP(s,u,l,m,g,v,x,a,i),E=o?f*p:f,$;return i==="channelsFirst"?$=[c,E,S,C]:i==="channelsLast"&&($=[c,S,C,E]),{batchSize:c,dataFormat:i,inHeight:u,inWidth:l,inChannels:p,outHeight:S,outWidth:C,outChannels:E,padInfo:k,strideHeight:m,strideWidth:g,filterHeight:d,filterWidth:h,effectiveFilterHeight:v,effectiveFilterWidth:x,dilationHeight:b,dilationWidth:y,inShape:e,outShape:$,filterShape:t}}function JS(e,t,n,r,s,a=!1,o="channelsLast",i){let[c,u,l,p,d]=[-1,-1,-1,-1,-1];if(o==="channelsLast")[c,u,l,p,d]=e;else if(o==="channelsFirst")[c,d,u,l,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[h,f,m,,g]=t,[b,y,v]=Vy(n),[x,k,S]=Vy(r),C=dc(h,x),E=dc(f,k),$=dc(m,S),{padInfo:F,outDepth:A,outHeight:R,outWidth:T}=JP(s,u,l,p,b,y,v,C,E,$,i),L=a?g*d:g,V;return o==="channelsFirst"?V=[c,L,A,R,T]:o==="channelsLast"&&(V=[c,A,R,T,L]),{batchSize:c,dataFormat:o,inDepth:u,inHeight:l,inWidth:p,inChannels:d,outDepth:A,outHeight:R,outWidth:T,outChannels:L,padInfo:F,strideDepth:b,strideHeight:y,strideWidth:v,filterDepth:h,filterHeight:f,filterWidth:m,effectiveFilterDepth:C,effectiveFilterHeight:E,effectiveFilterWidth:$,dilationDepth:x,dilationHeight:k,dilationWidth:S,inShape:e,outShape:V,filterShape:t}}function XP(e,t,n,r,s){r==null&&(r=rx(e,t,n));let a=e[0],o=e[1],i=Xa((a-t+2*r)/n+1,s),c=Xa((o-t+2*r)/n+1,s);return[i,c]}function YP(e,t,n,r,s,a){s==null&&(s=rx(e,t,r));let o=e[0],i=e[1],c=e[2],u=Xa((o-t+2*s)/r+1,a),l=Xa((i-t+2*s)/r+1,a),p=Xa((c-t+2*s)/r+1,a);return[u,l,p,n]}function rx(e,t,n,r=1){let s=dc(t,r);return Math.floor((e[0]*(n-1)-n+s)/2)}function zh(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function Vy(e){return typeof e=="number"?[e,e,e]:e}function dc(e,t){return t<=1?e:e+(e-1)*(t-1)}function ZP(e,t,n,r,s,a,o,i,c){let u,l,p;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let h=XP([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),m=d-f,g=Math.floor(h/2),b=h-g;u={top:f,bottom:m,left:g,right:b,type:"SAME"}}else if(e==="valid")u={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=c==="channelsLast"?e[1][0]:e[2][0],h=c==="channelsLast"?e[1][1]:e[2][1],f=c==="channelsLast"?e[2][0]:e[3][0],m=c==="channelsLast"?e[2][1]:e[3][1];u={top:d,bottom:h,left:f,right:m,type:d===0&&h===0&&f===0&&m===0?"VALID":"EXPLICIT"},l=Xa((t-a+d+h)/r+1,i),p=Xa((n-o+f+m)/s+1,i)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:l,outWidth:p}}function JP(e,t,n,r,s,a,o,i,c,u,l){let p,d,h,f;if(typeof e=="number"){p={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let g=YP([t,n,r,1],i,1,s,e,l);d=g[0],h=g[1],f=g[2]}else if(e==="same"){d=Math.ceil(t/s),h=Math.ceil(n/a),f=Math.ceil(r/o);let m=(d-1)*s+i-t,g=(h-1)*a+c-n,b=(f-1)*o+u-r,y=Math.floor(m/2),v=m-y,x=Math.floor(g/2),k=g-x,S=Math.floor(b/2),C=b-S;p={top:x,bottom:k,left:S,right:C,front:y,back:v,type:"SAME"}}else if(e==="valid")p={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},d=Math.ceil((t-i+1)/s),h=Math.ceil((n-c+1)/a),f=Math.ceil((r-u+1)/o);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:p,outDepth:d,outHeight:h,outWidth:f}}function Xa(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 ca(e){let[t,n,r]=zh(e);return t===1&&n===1&&r===1}function ps(e,t){return ca(e)||ca(t)}function QS(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function En(e,t,n){if(n!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);if(typeof t=="number")D(hc(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=>{D(hc(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 QP(e,t){let r={x:_(e,"x","reshape","string_or_numeric")},s={shape:t};return M.runKernel(xu,r,s)}var W=z({reshape_:QP});function eO(e,t,n,r,s){let a=_(e,"x","avgPool","float32"),o=1;D(ps(n,o),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`);let i=a,c=!1;a.rank===3&&(c=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),D(i.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${i.rank}.`),En("avgPool",r,s);let u={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=M.runKernel(vo,u,l);return p=ce(p,a.dtype),c?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var mr=z({avgPool_:eO});function tO(e,t,n,r,s,a="NDHWC"){let o=_(e,"x","avgPool3d","float32"),i=o,c=!1;o.rank===4&&(c=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),D(i.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${i.rank}.`),D(a==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${a}`),En("avgPool3d",r,s);let u={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:a},p=M.runKernel(pd,u,l);return p=ce(p,i.dtype),c?W(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var sx=z({avgPool3d_:tO});function nO(e,t=0){D(e.length>=1,()=>"Pass at least one tensor to concat");let n=Jl(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 is(n[0]);let r=n,s={axis:t};return M.runKernel(Gc,r,s)}var Je=z({concat_:nO});function rO(e){let n={x:_(e,"x","sigmoid","float32")};return M.runKernel(oi,n)}var dr=z({sigmoid_:rO});function sO(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(Su,s,a)}var We=z({slice_:sO});function aO(e){let n={x:_(e,"x","tanh","float32")};return M.runKernel(hi,n)}var oo=z({tanh_:aO});function oO(e,t,n,r,s,a){let o=_(e,"forgetBias","basicLSTMCell"),i=_(t,"lstmKernel","basicLSTMCell"),c=_(n,"lstmBias","basicLSTMCell"),u=_(r,"data","basicLSTMCell"),l=_(s,"c","basicLSTMCell"),p=_(a,"h","basicLSTMCell"),d=Je([u,p],1),h=De(d,i),f=Y(h,c),m=f.shape[0],g=f.shape[1]/4,b=[m,g],y=We(f,[0,0],b),v=We(f,[0,g],b),x=We(f,[0,g*2],b),k=We(f,[0,g*3],b),S=Y(B(dr(y),oo(v)),B(l,dr(Y(o,x)))),C=B(oo(S),dr(k));return[S,C]}var eT=z({basicLSTMCell_:oO});function iO(e,t,n){let r=_(e,"x","batchToSpaceND"),s=t.reduce((i,c)=>i*c);D(r.rank>=1+t.length,()=>`input rank is ${r.rank} but should be > than blockShape.length ${t.length}`),D(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),D(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(Uc,a,o)}var Od=z({batchToSpaceND_:iO});function cO(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 uO(e,t,n,r,s,a){a==null&&(a=.001);let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),c=_(n,"variance","batchNorm"),u;s!=null&&(u=_(s,"scale","batchNorm"));let l;r!=null&&(l=_(r,"offset","batchNorm")),D(i.rank===c.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),D(l==null||i.rank===l.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),D(u==null||i.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:cO(o),scale:u,offset:l,mean:i,variance:c},h={varianceEpsilon:a},f=M.runKernel(Ro,d,h);return W(f,o.shape)}var ka=z({batchNorm_:uO});function lO(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),c=_(n,"variance","batchNorm"),u;s!=null&&(u=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),D(o.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${o.rank}.`),D(i.rank===2||i.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${i.rank}.`),D(c.rank===2||c.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${c.rank}.`),u!=null&&D(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),l!=null&&D(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${l.rank}.`),ka(o,i,c,l,u,a)}var ax=z({batchNorm2d_:lO});function dO(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),c=_(n,"variance","batchNorm"),u;s!=null&&(u=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),D(o.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${o.rank}.`),D(i.rank===3||i.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${i.rank}.`),D(c.rank===3||c.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${c.rank}.`),u!=null&&D(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),l!=null&&D(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${l.rank}.`),ka(o,i,c,l,u,a)}var ox=z({batchNorm3d_:dO});function pO(e,t,n,r,s,a){let o=_(e,"x","batchNorm"),i=_(t,"mean","batchNorm"),c=_(n,"variance","batchNorm"),u;s!=null&&(u=_(s,"scale","batchNorm"));let l;return r!=null&&(l=_(r,"offset","batchNorm")),D(o.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${o.rank}.`),D(i.rank===4||i.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${i.rank}.`),D(c.rank===4||c.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${c.rank}.`),u!=null&&D(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),l!=null&&D(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${l.rank}.`),ka(o,i,c,l,u,a)}var ix=z({batchNorm4d_:pO});function hO(e,t,n){let r=_(e,"x","bincount"),s=_(t,"weights","bincount");D(r.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${r.dtype}`),D(n>=0,()=>`size must be non-negative, but got ${n}.`),D(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(ff,a,o)}var cx=z({bincount_:hO});function fO(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(mf,s)}var tT=z({broadcastArgs_:fO});function mO(e,t){let n=_(e,"broadcastTo","x"),r=n.shape;if(t.some(u=>!(u>0)||u%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let u=n.shape.slice();for(;u.length<t.length;)u.unshift(1);n=W(n,u)}let s=n.shape,a=Array.from(t);for(let u=t.length-1;u>=0;u--)if(s[u]===t[u])a[u]=1;else if(n.shape[u]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${t}].`);if(a.map((u,l)=>u>1?l:-1).filter(u=>u>=0).length===0)return is(n);let i={x:n},c={reps:a};return M.runKernel(va,i,c)}var Ya=z({broadcastTo_:mO});function gO(e){let n={x:_(e,"x","ceil","float32")};return M.runKernel(Io,n)}var ux=z({ceil_:gO});function bn(e,t,n){let r={shape:e,value:t,dtype:n};return M.runKernel(gd,{},r)}function bO(e,t,n){let r=_(e,"x","clipByValue");if(D(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`),t===n)return bn(r.shape,t,r.dtype);let s={x:r},a={clipValueMin:t,clipValueMax:n};return M.runKernel(ya,s,a)}var en=z({clipByValue_:bO});function yO(e){return Je(e,0)}var lx=z({concat1d_:yO});function vO(e,t){return Je(e,t)}var dx=z({concat2d_:vO});function xO(e,t){return Je(e,t)}var px=z({concat3d_:xO});function wO(e,t){return Je(e,t)}var hx=z({concat4d_:wO});function IO(e,t,n,r,s="NHWC",a=[1,1],o){let i=_(e,"x","conv2d","float32"),c=_(t,"filter","conv2d","float32"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),D(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),D(c.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${c.rank}.`),En("conv2d",r,o);let p=s==="NHWC"?u.shape[3]:u.shape[1];D(p===c.shape[2],()=>`Error in conv2d: depth of input (${p}) must match input depth for filter ${c.shape[2]}.`),D(ps(n,a),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`);let d={x:u,filter:c},h={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o},f=M.runKernel(ko,d,h);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Dt=z({conv2d_:IO});function kO(e,t,n,r,s="NWC",a=1,o){let i=_(e,"x","conv1d"),c=_(t,"filter","conv1d"),u=i,l=!1;i.rank===2&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1]])),D(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),D(c.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${c.rank}.`),En("conv1d",r,o),D(u.shape[2]===c.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${c.shape[1]}.`),D(ps(n,a),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${a}'`),D(s==="NWC",()=>`Error in conv1d: got dataFormat of ${s} but only NWC is currently supported.`);let p=W(c,[1,c.shape[0],c.shape[1],c.shape[2]]),d=W(u,[u.shape[0],1,u.shape[1],u.shape[2]]),g=Dt(d,p,[1,n],r,"NHWC",[1,a],o);return l?W(g,[g.shape[2],g.shape[3]]):W(g,[g.shape[0],g.shape[2],g.shape[3]])}var Xf=z({conv1d_:kO});function SO(e,t,n,r,s,a="NHWC",o){D(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let i=e,c=t,u=!1;t.rank===3&&(u=!0,c=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]),i=[1,e[0],e[1],e[2]]),D(i.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${i.length}.`),D(c.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${c.rank}`),D(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"?c.shape[3]:c.shape[1];D(l===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[2]}.`),D(p===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${p}) must match output depth for filter ${n.shape[3]}.`),En("conv2dDerInput",s,o);let d={dy:c,filter:n},h={strides:r,pad:s,dataFormat:a,dimRoundingMode:o,inputShape:i},f=M.runKernel(So,d,h);return u?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var fx=z({conv2DBackpropInput_:SO});function TO(e,t,n,r,s,a){let o=_(e,"x","conv2dTranspose"),i=_(t,"filter","conv2dTranspose");return fx(n,o,i,r,s,"NHWC",a)}var Yf=z({conv2dTranspose_:TO});function CO(e,t,n,r,s="NDHWC",a=[1,1,1]){let o=_(e,"x","conv3d"),i=_(t,"filter","conv3d"),c=o,u=!1;o.rank===4&&(u=!0,c=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),D(c.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${c.rank}.`),D(i.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${i.rank}.`),D(c.shape[4]===i.shape[3],()=>`Error in conv3d: depth of input (${c.shape[4]}) must match input depth for filter ${i.shape[3]}.`),D(ps(n,a),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),D(s==="NDHWC",()=>`Error in conv3d: got dataFormat of ${s} but only NDHWC is currently supported.`);let l={x:c,filter:i},p={strides:n,pad:r,dataFormat:s,dilations:a},d=M.runKernel(fd,l,p);return u?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var mx=z({conv3d_:CO});function NO(e,t,n,r,s){D(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 c=a[4],u=o.shape[4];D(a.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${a.length}.`),D(o.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${o.rank}`),D(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),D(c===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${c}) must match input depth for filter ${n.shape[3]}.`),D(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) 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(vf,l,p);return i?W(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var nT=z({conv3DBackpropInput_:NO});function _O(e,t,n,r,s){let a=_(e,"x","conv3dTranspose"),o=_(t,"filter","conv3dTranspose");return nT(n,a,o,r,s)}var gx=z({conv3dTranspose_:_O});function EO(e){let n={x:_(e,"x","cos","float32")};return M.runKernel(To,n)}var Md=z({cos_:EO});function AO(e){let n={x:_(e,"x","cosh","float32")};return M.runKernel(Co,n)}var Zf=z({cosh_:AO});function $O(e,t=0,n=!1,r=!1){let a={x:_(e,"x","cumprod")},o={axis:t,exclusive:n,reverse:r};return M.runKernel(Hc,a,o)}var ed=z({cumprod_:$O});function DO(e,t=0,n=!1,r=!1){let a={x:_(e,"x","cumsum")},o={axis:t,exclusive:n,reverse:r};return M.runKernel(No,a,o)}var Jf=z({cumsum_:DO});function FO(e,t,n,r=!1){let s=_(e,"x","denseBincount"),a=_(t,"weights","denseBincount");D(s.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${s.dtype}`),D(s.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${s.rank}.`),D(n>=0,()=>`size must be non-negative, but got ${n}.`),D(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(xf,o,i)}var Bh=z({denseBincount_:FO});function RO(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];D(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),D(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),D(a*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${a} and ${t} for depthToSpace with input shape
|
|
${r.shape}`),D(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},c={blockSize:t,dataFormat:n};return M.runKernel(jc,i,c)}var bx=z({depthToSpace_:RO});function PO(e,t,n,r,s="NHWC",a=[1,1],o){let i=_(e,"x","depthwiseConv2d","float32"),c=_(t,"filter","depthwiseConv2d","float32"),u=i,l=!1;i.rank===3&&(l=!0,u=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),D(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),D(c.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${c.rank}.`);let p=s==="NHWC"?u.shape[3]:u.shape[1];D(p===c.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${p}) must match the inChannels dimension in filter ${c.shape[2]}.`),En("depthwiseConv2d",r,o);let d={x:u,filter:c},h={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o},f=M.runKernel(_o,d,h);return l?W(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var Sa=z({depthwiseConv2d_:PO});function OO(e){let n={x:_(e,"x","diag")};return M.runKernel(kf,n)}var rT=z({diag_:OO});function MO(e,t,n,r,s=[1,1],a="NHWC"){let o=_(e,"x","dilation2d"),i=_(t,"filter","dilation2d");D(o.rank===3||o.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${o.rank}.`),D(i.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${i.rank}.`),D(a==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${a}`);let c=o,u=!1;o.rank===3&&(c=W(o,[1,o.shape[0],o.shape[1],o.shape[2]]),u=!0);let l={x:c,filter:i},p={strides:n,pad:r,dilations:s},d=M.runKernel(md,l,p);return u?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var yx=z({dilation2d_:MO});function LO(e,t){let n=_(e,"a","equal","string_or_numeric"),r=_(t,"b","equal","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Xc,s)}var tr=z({equal_:LO});function zO(e,t,n){let r=_(t,"a","where"),s=_(n,"b","where"),a=_(e,"condition","where","bool"),o=ct(ct(a.shape,r.shape),s.shape),i=Ya(a,o),c=Ya(r,o),u=Ya(s,o),l={condition:i,t:c,e:u};return M.runKernel(Iu,l)}var mn=z({where_:zO});function BO(e){let n={x:_(e,"x","zerosLike")};return M.runKernel(Pu,n)}var qe=z({zerosLike_:BO});function WO(e,t){let n=_(e,"a","div"),r=_(t,"b","div");[n,r]=_t(n,r);let s=fe(n,r),a=qe(s),o=tr(r,a);return mn(o,a,s)}var vx=z({divNoNan_:WO});function VO(e,t){let n=_(e,"t1","dot"),r=_(t,"t2","dot");D((n.rank===1||n.rank===2)&&(r.rank===1||r.rank===2),()=>`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(D(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]),c=De(o,i);return W(c,[])}else if(n.rank===1&&r.rank===2){let o=W(n,[1,-1]),i=W(r,[r.shape[0],r.shape[1]]),c=De(o,i);return W(c,[c.size])}else if(n.rank===2&&r.rank===1){let o=W(r,[-1,1]),i=De(n,o);return W(i,[i.size])}else{let o=W(r,[r.shape[0],r.shape[1]]);return De(n,o)}}var xx=z({dot_:VO});function UO(e,...t){let n=t.map((s,a)=>_(s,`tensors${a}`,"einsum")),r={equation:e};return M.runKernel(Sf,n,r)}var sT=z({einsum_:UO});function GO(e){let n={x:_(e,"x","elu","float32")};return M.runKernel(Ao,n)}var Lu=z({elu_:GO});function HO(e){let t=_(e,"x","erf");D(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=ce(t,"float32"));let n={x:t};return M.runKernel(Kc,n)}var wx=z({erf_:HO});function Ix(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function aT(e,t,n){let r=e.length+t.length,s=[],a=0,o=0;for(let i=0;i<r;i++)n.indexOf(i)===-1?s.push(e[a++]):s.push(t[o++]);return s}function oT(e,t){let n=[],r=e.length;for(let a=0;a<r;a++)t.indexOf(a)===-1&&n.push(e[a]);let s=t.map(a=>e[a]);return[n,s]}function io(e,t){let n=t.map(r=>1);return aT(e,n,t)}function qO(e,t,n){D(Ix(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function iT(e,t){if(Ix(e,t))return null;let n=[];for(let r=0;r<t;++r)e.indexOf(r)===-1&&n.push(r);return e.forEach(r=>n.push(r)),n}function kx(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function jO(e,t){let n=[];for(let r=t-e;r<t;++r)n.push(r);return n}function KO(e,t=null,n=!1){let s={x:_(e,"x","max")},a={reductionIndices:t,keepDims:n};return M.runKernel(zo,s,a)}var pr=z({max_:KO});function XO(e,t=null,n=!1){let s={x:_(e,"x","min")},a={axis:t,keepDims:n};return M.runKernel(Uo,s,a)}var yc=z({min_:XO});function YO(e,t){let n=_(e,"base","pow"),r=_(t,"exp","pow");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(Xo,s)}var $s=z({pow_:YO});function xe(e,t){if((fn(e)&&t!=="string"||Array.isArray(e))&&t!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(t==="string"&&fn(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return wa(e,[],[],t)}function ZO(e){let n={x:_(e,"x","sqrt","float32")};return M.runKernel(ii,n)}var un=z({sqrt_:ZO});function JO(e){let t=_(e,"x","square"),n={};return M.runKernel("Square",{x:t},n)}var it=z({square_:JO});function QO(e,t=null,n=!1){let r=_(e,"x","sum");r.dtype==="bool"&&(r=ce(r,"int32"));let s={x:r},a={axis:t,keepDims:n};return M.runKernel(ci,s,a)}var ge=z({sum_:QO});function eM(e,t="euclidean",n=null,r=!1){e=_(e,"x","norm");let s=cT(e,t,n),a=s.shape;if(r){let o=Fr(n,e.shape);a=io(s.shape,o)}return W(s,a)}function cT(e,t,n=null){if(e.rank===0)return Lt(e);if(e.rank!==1&&n===null)return cT(W(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return ge(Lt(e),n);if(t===1/0)return pr(Lt(e),n);if(t===-1/0)return yc(Lt(e),n);if(t==="euclidean"||t===2)return un(ge($s(Lt(e),xe(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return pr(ge(Lt(e),n[0]),n[1]-1);if(t===1/0)return pr(ge(Lt(e),n[1]),n[0]);if(t===-1/0)return yc(ge(Lt(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return un(ge(it(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var zu=z({norm_:eM});function tM(e,t=null,n=!1){return zu(e,"euclidean",t,n)}var Sx=z({euclideanNorm_:tM});function nM(e){let n={x:_(e,"x","exp")};return M.runKernel($o,n)}var gn=z({exp_:nM});function rM(e,t=0){let n=_(e,"x","expandDims","string_or_numeric");D(t<=n.rank,()=>"Axis must be <= rank of the tensor");let r={input:n},s={dim:t};return M.runKernel(Yc,r,s)}var Zt=z({expandDims_:rM});function sM(e){let n={x:_(e,"x","expm1")};return M.runKernel(Zc,n)}var Tx=z({expm1_:sM});function aM(e,t){let n=_(e,"x","tile","string_or_numeric");D(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(va,r,s)}var Ln=z({tile_:aM});function oM(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<a;++i)s.set(1,i,i);let o=W(s.toTensor(),[e,t]);if(n==null)return o;if(n.length===1)return Ln(Zt(o,0),[n[0],1,1]);if(n.length===2)return Ln(Zt(Zt(o,0),0),[n[0],n[1],1,1]);if(n.length===3)return Ln(Zt(Zt(Zt(o,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var Qf=z({eye_:oM});function iM(e){let n={x:_(e,"x","floor","float32")};return M.runKernel(Do,n)}var Bu=z({floor_:iM});function cM(e,t,n=0,r=0){let s=_(e,"x","gather"),a=_(t,"indices","gather","int32"),o={x:s,indices:a},i={axis:n,batchDims:r};return M.runKernel(Qc,o,i)}var Wu=z({gather_:cM});function uM(e,t){let n=_(e,"a","greater","string_or_numeric"),r=_(t,"b","greater","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(tu,s)}var An=z({greater_:uM});function lM(e,t){let n=_(e,"a","greaterEqual","string_or_numeric"),r=_(t,"b","greaterEqual","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Po,s)}var Ds=z({greaterEqual_:lM});function dM(e){let n={x:_(e,"x","isFinite")};return M.runKernel(nu,n)}var Cx=z({isFinite_:dM});function pM(e){let n={x:_(e,"x","isInf")};return M.runKernel(ru,n)}var Nx=z({isInf_:pM});function hM(e){let n={x:_(e,"x","isNaN")};return M.runKernel(su,n)}var _x=z({isNaN_:hM});function fM(e,t=.2){let r={x:_(e,"x","leakyRelu")},s={alpha:t};return M.runKernel(Mo,r,s)}var Ld=z({leakyRelu_:fM});function mM(e,t){let n=_(e,"a","less","string_or_numeric"),r=_(t,"b","less","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(au,s)}var em=z({less_:mM});function gM(e,t){let n=_(e,"a","lessEqual","string_or_numeric"),r=_(t,"b","lessEqual","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(ou,s)}var Ta=z({lessEqual_:gM});function uT(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let r={start:e,stop:t,num:n};return M.runKernel(Ef,{},r)}function bM(e,t=5,n=1,r=1,s=.5){let a=_(e,"x","localResponseNormalization");D(a.rank===4||a.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${a.rank}.`),D(hc(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 c={x:o},u={depthRadius:t,bias:n,alpha:r,beta:s},l=M.runKernel(bd,c,u);return i?W(l,[l.shape[1],l.shape[2],l.shape[3]]):l}var Ex=z({localResponseNormalization_:bM});function yM(e){let n={x:_(e,"x","log","float32")};return M.runKernel(Lo,n)}var nr=z({log_:yM});function vM(e){let n={x:_(e,"x","log1p")};return M.runKernel(iu,n)}var zd=z({log1p_:vM});function xM(e){return D(oa(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&&_n(a.shape,s.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),tm(o),o[0]})}}function wM(e){return D(oa(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{D(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let r=Jl(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&&_n(a.shape,s.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),tm(o),o})}}function IM(e){return D(oa(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{D(t instanceof Te,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),D(n==null||n instanceof Te,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:r,value:s}=M.gradients(()=>e(t),[t],n);return tm(r),{grad:r[0],value:s}}}function kM(e){return D(oa(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{D(Array.isArray(t)&&t.every(s=>s instanceof Te),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),D(n==null||n instanceof Te,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let r=M.gradients(()=>e(...t),t,n);return n!=null&&_n(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),tm(r.grads),r}}function lT(e,t){D(oa(e),()=>"The f passed in variableGrads(f) must be a function"),D(t==null||Array.isArray(t)&&t.every(u=>u instanceof ia),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in M.registeredVariables)t.push(M.registeredVariables[u])}let r=n?t.filter(u=>!u.trainable):null,s=t.length;t=t.filter(u=>u.trainable),D(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);D(i.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),D(o.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${o.rank} tensor`);let c={};return t.forEach((u,l)=>{i[l]!=null&&(c[u.name]=i[l])}),r!=null&&r.forEach(u=>c[u.name]=null),{value:o,grads:c}}function ls(e){return M.customGrad(e)}function tm(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 SM(e){let n={x:_(e,"x","softplus")};return M.runKernel(Nu,n)}var mi=z({softplus_:SM});function TM(e){let t=_(e,"x","logSigmoid");return ls(r=>({value:xt(mi(xt(r))),gradFunc:o=>B(o,dr(xt(r)))}))(t)}var Ax=z({logSigmoid_:TM});function CM(e,t){let n=_(e,"a","sub"),r=_(t,"b","sub");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(di,s)}var de=z({sub_:CM});function NM(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 ls((s,a)=>{let i=pr(s,t,!0),c=de(s,i),u=de(ce(c,"float32"),nr(ge(gn(c),t,!0)));return a([u]),{value:u,gradFunc:(p,d)=>{let[h]=d,f=!0,m=gn(h);return de(p,B(ge(p,t,f),m))}}})(n)}var nm=z({logSoftmax_:NM});function _M(e,t=null,n=!1){let r=_(e,"x","logSumExp"),s=Fr(t,r.shape),a=pr(r,s,!0),o=de(r,a),i=gn(o),c=ge(i,s),u=nr(c),l=Y(W(a,u.shape),u);if(n){let p=io(l.shape,s);return W(l,p)}return l}var rm=z({logSumExp_:_M});function EM(e,t){let n=_(e,"a","logicalAnd","bool"),r=_(t,"b","logicalAnd","bool");ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(cu,s)}var Dr=z({logicalAnd_:EM});function AM(e){let n={x:_(e,"x","logicalNot","bool")};return M.runKernel(uu,n)}var Bd=z({logicalNot_:AM});function $M(e,t){let n=_(e,"a","logicalOr","bool"),r=_(t,"b","logicalOr","bool");ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(lu,s)}var sm=z({logicalOr_:$M});function DM(e,t){let n=_(e,"a","logicalXor","bool"),r=_(t,"b","logicalXor","bool");return ct(n.shape,r.shape),Dr(sm(e,t),Bd(Dr(e,t)))}var $x=z({logicalXor_:DM}),oh=2147483648;function FM(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]),c=W(s,[-1,o]);if(i.rank<2)throw new Error("Sorted input argument must be at least 2-dimensional");if(i.shape[0]!==c.shape[0])throw new Error("Leading dimension of 'sortedSequence' and 'values' must match.");if(ht(c.shape)>=oh)throw new Error(`values tensor size must less than ${oh}`);if(i.shape[1]>=oh)throw new Error(`trailing dim_size must less than ${oh} for int32 output type, was ${i.shape[1]}`);let u={sortedSequence:i,values:c},l={side:n};return M.runKernel(Wf,u,l)}var am=z({searchSorted_:FM});function dT(e,t){return am(e,t,"left")}function RM(e,t,n,r,s){let a=_(e,"x","maxPool"),o=1,i=a,c=!1;a.rank===3&&(c=!0,i=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),D(i.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${i.rank}.`),D(ps(n,o),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${o}'`),En("maxPool",r,s);let u={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s},p=M.runKernel(Wo,u,l);return c?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var Rt=z({maxPool_:RM});function PM(e,t=[1,1,1],n,r,s,a="NDHWC"){let o=_(e,"x","maxPool3d"),i=o,c=!1;o.rank===4&&(c=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),D(i.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${i.rank}.`),D(a==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${a}`),En("maxPool3d",r,s);let u={x:i},l={filterSize:t,strides:n,pad:r,dimRoundingMode:s,dataFormat:a},p=M.runKernel(yd,u,l);return c?W(p,[p.shape[1],p.shape[2],p.shape[3],p.shape[4]]):p}var Dx=z({maxPool3d_:PM});function OM(e,t,n,r,s=!1){let o={x:_(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:r,includeBatchInIndex:s},c=M.runKernel(Ff,o,i);return{result:c[0],indexes:c[1]}}var pT=z({maxPoolWithArgmax_:OM});function MM(e,t){let n=_(e,"a","maximum"),r=_(t,"b","maximum");[n,r]=_t(n,r),n.dtype==="bool"&&(n=ce(n,"int32"),r=ce(r,"int32")),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Bo,s)}var hs=z({maximum_:MM});function LM(e,t=null,n=!1){let s={x:_(e,"x","mean")},a={axis:t,keepDims:n};return M.runKernel(Vo,s,a)}var Ct=z({mean_:LM});function kt(e,t="float32"){if(t==="complex64"){let r=kt(e,"float32"),s=kt(e,"float32");return As(r,s)}let n=df(ht(e),t);return M.makeTensor(n,e,t)}function Qn(e,t="float32"){if(t==="complex64"){let r=Qn(e,"float32"),s=kt(e,"float32");return As(r,s)}let n=_v(ht(e),t);return M.makeTensor(n,e,t)}function hT(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 Te?e.dtype:"float32");if(t===void 0)return[r];let s=_(t,"y","meshgrid",t instanceof Te?t.dtype:"float32"),a=ht(r.shape),o=ht(s.shape);return n==="xy"?(r=W(r,[1,-1]),s=W(s,[-1,1]),[De(Qn([o,1],r.dtype),r),De(s,Qn([1,a],s.dtype))]):(r=W(r,[-1,1]),s=W(s,[1,-1]),[De(r,Qn([1,o],r.dtype)),De(Qn([a,1],s.dtype),s)])}function zM(e,t){let n=_(e,"a","minimum"),r=_(t,"b","minimum");[n,r]=_t(n,r),n.dtype==="bool"&&(n=ce(n,"int32"),r=ce(r,"int32")),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(Go,s)}var Vu=z({minimum_:zM});function BM(e,t,n){D(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");D(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<r.rank;i++)D(t[i].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),D(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(Ho,o,a)}var Fx=z({mirrorPad_:BM});function WM(e,t){let n=_(e,"a","mod"),r=_(t,"b","mod");[n,r]=_t(n,r);let s={a:n,b:r};return M.runKernel(du,s)}var Rx=z({mod_:WM});function VM(e,t=null,n=!1){e=_(e,"x","moments");let r=Fr(t,e.shape),s=Ct(e,r,n),a=s.shape;n||(a=io(s.shape,r));let o=it(de(ce(e,"float32"),W(s,a))),i=Ct(o,r,n);return{mean:s,variance:i}}var Wd=z({moments_:VM});function UM(e,t,n,r){let s=_(t,"data","multiRNNCell"),a=Jl(n,"c","multiRNNCell"),o=Jl(r,"h","multiRNNCell"),i=s,c=[];for(let p=0;p<e.length;p++){let d=e[p](i,a[p],o[p]);c.push(d[0]),c.push(d[1]),i=d[1]}let u=[],l=[];for(let p=0;p<c.length;p+=2)u.push(c[p]),l.push(c[p+1]);return[u,l]}var fT=z({multiRNNCell_:UM});function GM(e,t,n,r=!1){let s=_(e,"logits","multinomial"),a=s.size,o=s.rank;if(a<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${a}.`);if(o>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${o}`);n=n||Math.random();let c={logits:o===1?W(s,[1,-1]):s},u={numSamples:t,seed:n,normalized:r},l=M.runKernel(Rf,c,u);return o===1?W(l,[l.size]):l}var mT=z({multinomial_:GM});function HM(e,t){let n=_(e,"a","notEqual","string_or_numeric"),r=_(t,"b","notEqual","string_or_numeric");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r};return M.runKernel(hu,s)}var co=z({notEqual_:HM});function qM(e){let n={x:_(e,"x","onesLike")};return M.runKernel(bu,n)}var rr=z({onesLike_:qM});function jM(e,t){let n=_(e,"v1","outerProduct"),r=_(t,"v2","outerProduct");D(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 De(s,a)}var gT=z({outerProduct_:jM});function KM(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(Ko,a,s)}var gr=z({pad_:KM});function XM(e,t,n=0){return D(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),gr(e,[t],n)}var bT=z({pad1d_:XM});function YM(e,t,n=0){return D(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),gr(e,t,n)}var yT=z({pad2d_:YM});function ZM(e,t,n=0){return D(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."),gr(e,t,n)}var vT=z({pad3d_:ZM});function JM(e,t,n=0){return D(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."),gr(e,t,n)}var xT=z({pad4d_:JM});function QM(e,t,n){let r=_(e,"x","spaceToBatchND");D(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),D(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),D(r.shape.reduce((o,i,c)=>c>0&&c<=t.length?o&&(i+n[c-1][0]+n[c-1][1])%t[c-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(_u,s,a)}var Vd=z({spaceToBatchND_:QM});function e3(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"),c=i,u=!1;i.rank===3&&(u=!0,c=W(i,[1,i.shape[0],i.shape[1],i.shape[2]])),D(ps(a,s),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${a} and dilations '${s}'`);let l=ZS(c.shape,t,a,s,r),p=[l.dilationHeight,l.dilationWidth],d;r==="same"?d=n3([l.filterHeight,l.filterWidth],p):d=[[0,0],[0,0]];let h=p[0]===1&&p[1]===1,[f,m]=t3([l.inHeight,l.inWidth],p,d),g=h?r:"valid",b=h?c:Vd(c,p,f),v=(n==="avg"?()=>mr(b,t,a,g,o):()=>Rt(b,t,a,g,o))(),x=h?v:Od(v,p,m);return u?W(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function t3(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]),c=t.map((l,p)=>[r[p],i[p]]),u=t.map((l,p)=>[0,o[p]]);return[c,u]}function n3(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 Px=z({pool_:e3});function r3(e,t){let n=_(e,"x","prelu"),r=_(t,"alpha","prelu"),s={x:n,alpha:r};return M.runKernel(Yo,s)}var Ud=z({prelu_:r3});function s3(e,t=null,n=!1){let r=_(e,"x","prod");r.dtype==="bool"&&(r=ce(r,"int32"));let s={x:r},a={axis:t,keepDims:n};return M.runKernel(Zo,s,a)}var Ox=z({prod_:s3});function a3(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},c={outputRaggedRank:r},u=M.runKernel(Pf,i,c);return{outputNestedSplits:u.slice(0,u.length-1),outputDenseValues:u[u.length-1]}}var wT=z({raggedGather_:a3});function o3(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(Of,o);return{rtNestedSplits:i[0],rtDenseValues:i[1]}}var IT=z({raggedRange_:o3});function i3(e,t,n,r,s){let a=_(e,"shape","raggedTensorToTensor","int32"),o=_(t,"values","raggedTensorToTensor"),i=_(n,"defaultValue","raggedTensorToTensor",o.dtype),c=r.map((p,d)=>_(p,`tensors${d}`,"raggedTensorToTensor","int32")),u={shape:a,values:o,defaultValue:i,rowPartitionTensors:c},l={rowPartitionTypes:s};return M.runKernel(Mf,u,l)}var kT=z({raggedTensorToTensor_:i3});function c3(e,t,n){let r=ht(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;a<r;a++)s[a]=t();return M.makeTensor(s,e,n)}var ST=z({rand_:c3}),Mx=ma(cf()),Lx=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=Mx.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}},u3=class{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;let s=r||Math.random();this.randu=Mx.alea(s.toString()),this.randn=new Lx(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(),s<t||Math.log(s)<n)break}return a=1/this.beta*this.d*a,this.alpha<1&&(a*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(a)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},l3=class{constructor(e=0,t=1,n,r){if(this.canReturnFloat=()=>this.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=Mx.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function d3(e,t,n=1,r="float32",s){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);let a=new u3(t,n,r,s),o=Me(e,r);for(let i=0;i<o.values.length;i++)o.values[i]=a.nextValue();return o.toTensor()}var TT=z({randomGamma_:d3});function p3(e,t=0,n=1,r,s){if(r!=null&&r==="bool")throw new Error(`Unsupported data type ${r}`);let a=new Lx(t,n,r,!1,s),o=Me(e,r);for(let i=0;i<o.values.length;i++)o.values[i]=a.nextValue();return o.toTensor()}var om=z({randomNormal_:p3});function h3(e,t,n){if(t!=null&&t==="bool")throw new Error(`Unsupported data type ${t}`);return om(e,0,1,t,n)}var CT=z({randomStandardNormal_:h3});function f3(e,t=0,n=1,r="float32",s){let a=Me(e,r),o=new l3(t,n,null,s);for(let i=0;i<a.values.length;i++)a.values[i]=o.nextValue();return a.toTensor()}var Uu=z({randomUniform_:f3});function vc(e,t,n=1,r="float32"){if(n===0)throw new Error("Cannot have a step of zero");let s={start:e,stop:t,step:n,dtype:r};return M.runKernel(vd,{},s)}function m3(e){let n={x:_(e,"x","reciprocal")};return M.runKernel(vu,n)}var zx=z({reciprocal_:m3});function g3(e){let n={x:_(e,"x","relu")};return M.runKernel(Jo,n)}var Xe=z({relu_:g3});function b3(e){let n={x:_(e,"x","relu6")};return M.runKernel(ti,n)}var im=z({relu6_:b3});function y3(e,t){let r={x:_(e,"x","reverse")},s={dims:t};return M.runKernel(ni,r,s)}var fr=z({reverse_:y3});function v3(e){let t=_(e,"x","reverse");return D(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),fr(t,0)}var NT=z({reverse1d_:v3});function x3(e,t){let n=_(e,"x","reverse");return D(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),fr(n,t)}var _T=z({reverse2d_:x3});function w3(e,t){let n=_(e,"x","reverse");return D(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),fr(n,t)}var ET=z({reverse3d_:w3});function I3(e,t){let n=_(e,"x","reverse");return D(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),fr(n,t)}var AT=z({reverse4d_:I3});function k3(e){let n={x:_(e,"x","round")};return M.runKernel(ri,n)}var cm=z({round_:k3});function S3(e){let n={x:_(e,"x","rsqrt","float32")};return M.runKernel(si,n)}var um=z({rsqrt_:S3});function T3(e){let n={x:_(e,"x","selu")};return M.runKernel(ku,n)}var lm=z({selu_:T3});function C3(e,t,n,r,s,a=[1,1],o="NHWC"){let i=_(e,"x","separableConv2d"),c=_(t,"depthwiseFilter","separableConv2d"),u=_(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");D(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),D(c.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${c.rank}.`),D(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${c.rank}.`),D(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),D(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let d=c.shape[2],h=c.shape[3];D(u.shape[2]===d*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*h}, but got ${u.shape[2]}.`);let f=Sa(l,c,r,s,o,a),g=Dt(f,u,1,"valid",o);return p?W(g,[g.shape[1],g.shape[2],g.shape[3]]):g}var Ca=z({separableConv2d_:C3});async function N3(e,t){let n=_(e,"x","setdiff1d"),r=_(t,"y","setdiff1d");D(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),D(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),D(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<s.length;l++)o.has(s[l])||i++;let c=new Ht([i],n.dtype),u=new Ht([i],"int32");for(let l=0,p=0;l<s.length;l++)o.has(s[l])||(c.values[p]=s[l],u.values[p]=l,p++);return[c.toTensor(),u.toTensor()]}var $T=N3;function _3(e){let n={x:_(e,"x","sign")};return M.runKernel(Cu,n)}var Bx=z({sign_:_3});function E3(e){let n={x:_(e,"x","sin","float32")};return M.runKernel(ai,n)}var dm=z({sin_:E3});function A3(e){let n={x:_(e,"x","sinh")};return M.runKernel(Tu,n)}var pm=z({sinh_:A3});function $3(e,t,n){let r=_(e,"x","slice1d");return D(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),We(r,[t],[n])}var Gd=z({slice1d_:$3});function D3(e,t,n){let r=_(e,"x","slice2d");return D(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),We(r,t,n)}var hm=z({slice2d_:D3});function F3(e,t,n){let r=_(e,"x","slice3d");return D(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),We(r,t,n)}var gi=z({slice3d_:F3});function R3(e,t,n){let r=_(e,"x","slice4d");return D(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),We(r,t,n)}var xc=z({slice4d_:R3});function P3(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(ui,r,s)}var Xr=z({softmax_:P3});function O3(e){D(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return M.runKernel(Cf,t)}var Hd=z({fft_:O3});function M3(e){D(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return M.runKernel(Nf,t)}var wc=z({ifft_:M3});function L3(e){let t=e.shape[e.shape.length-1],n=e.size/t,r;if(t<=2){let s=W(e,[n,t]);r=wc(s)}else{let s=[n,2*(t-1)],a=W(bc(e),[n,t]),o=W(Fd(e),[n,t]),i=fr(We(a,[0,1],[n,t-2]),1),c=B(fr(We(o,[0,1],[n,t-2]),1),xe(-1)),u=Je([a,i],1),l=Je([o,c],1),p=W(As(u,l),[s[0],s[1]]);r=wc(p)}if(r=bc(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 fm=z({irfft_:L3});function z3(e,t,n=0){let s={x:_(e,"x","split")},a={numOrSizeSplits:t,axis:n};return M.runKernel(Eu,s,a)}var zn=z({split_:z3});function B3(e,t){D(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&&t<n){let f=e.shape.map(g=>0),m=e.shape.map(g=>g);m[e.shape.length-1]=t,s=We(e,f,m),n=t}else if(t!=null&&t>n){let f=e.shape.map(m=>m);f[e.shape.length-1]=t-n,s=Je([e,kt(f)],e.shape.length-1),n=t}else s=e;let a=qe(s),o=W(As(s,a),[r,n]),i=Hd(o),c=Math.floor(n/2)+1,u=bc(i),l=Fd(i),p=zn(u,[c,n-c],u.shape.length-1),d=zn(l,[c,n-c],l.shape.length-1),h=s.shape.slice();return h[s.shape.length-1]=c,W(As(p[0],d[0]),h)}var qd=z({rfft_:B3});function W3(e,t){let n=_(e,"a","squaredDifference"),r=_(t,"b","squaredDifference");[n,r]=_t(n,r),ct(n.shape,r.shape);let s={a:n,b:r},a={};return M.runKernel(li,s,a)}var mm=z({squaredDifference_:W3});function V3(e,t){let n=_(e,"x","squeeze","string_or_numeric");return W(n,q1(n.shape,t).newShape)}var Na=z({squeeze_:V3});function U3(e,t=0){let n=Jl(e,"tensors","stack","string_or_numeric");D(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&D(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let r=n,s={axis:t};return M.runKernel(yu,r,s)}var Ft=z({stack_:U3});function G3(e,t=0){let r={x:_(e,"x","step")},s={alpha:t};return M.runKernel(xa,r,s)}var bi=z({step_:G3});function H3(e,t,n,r,s=0,a=0,o=0,i=0,c=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:c};return M.runKernel($u,l,p)}var Wx=z({stridedSlice_:H3});function q3(e){let n={x:_(e,"x","tan","float32")};return M.runKernel(pi,n)}var Vx=z({tan_:q3});function Ke(e,t){go(e);let n=us(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return wa(e,null,n,t)}function $r(e,t,n){if(go(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let r=us(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 wa(e,t,r,n)}function Rr(e,t,n){if(go(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let r=us(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 wa(e,t,r,n)}function DT(e,t,n){if(go(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let r=us(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 wa(e,t,r,n)}function FT(e,t,n){if(go(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let r=us(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,wa(e,t,r,n)}function j3(e,t=1,n=!0){let r=_(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let s=r.shape[r.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 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,c]=M.runKernel(Du,a,o);return{values:i,indices:c}}var Ux=z({topk_:j3});function K3(e,t=0,n=1,r,s){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");let a=new Lx(t,n,r,!0,s),o=Me(e,r);for(let i=0;i<o.values.length;i++)o.values[i]=a.nextValue();return o.toTensor()}var gm=z({truncatedNormal_:K3});function X3(e,t=0){let n=_(e,"x","unique","string_or_numeric");D(n.rank>0,()=>"The input tensor must be at least 1D");let r={x:n},s={axis:t},[a,o]=M.runKernel(Uf,r,s);return{values:a,indices:o}}var Gx=z({unique_:X3});function Y3(e,t,n){let r=_(e,"x","unsortedSegmentSum"),s=_(t,"segmentIds","unsortedSegmentSum","int32");D(hc(n),()=>"numSegments must be of dtype int");let a={x:r,segmentIds:s},o={numSegments:n};return M.runKernel(Nd,a,o)}var bm=z({unsortedSegmentSum_:Y3});function Z3(e,t=0){let n=_(e,"x","unstack","string_or_numeric");D(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let r={value:n},s={axis:t};return M.runKernel(Ru,r,s)}var lt=z({unstack_:Z3});function RT(e,t){return am(e,t,"right")}function Hx(e,t=!0,n,r){return M.makeVariable(e,t,n,r)}function PT(e,t){let n=[];for(let a=0;a<t.length;a++)t[a]&&n.push(a);let r=Me(e,"int32"),s=Me([n.length,e.length],"int32");for(let a=0;a<n.length;a++){let o=r.indexToLoc(n[a]),i=a*e.length;s.values.set(o,i)}return s.toTensor()}async function J3(e){let t=_(e,"condition","whereAsync","bool"),n=await t.data(),r=PT(t.shape,n);return e!==t&&t.dispose(),r}var qx=J3;async function Q3(e,t,n){let r=_(e,"tensor","boolMask"),s=_(t,"mask","boolMask","bool"),a=n==null?0:n,o=s.rank,i=r.shape;D(o>0,()=>"mask cannot be scalar"),_n(i.slice(a,a+o),s.shape,"mask's shape must match the first K dimensions of tensor's shape,");let c=1;for(let m=a;m<a+o;m++)c*=i[m];let u=i.slice(0,a).concat([c],i.slice(a+o)),l=W(r,u),p=W(s,[-1]),d=await qx(p),h=Na(d,[1]),f=Wu(l,h,a);return e!==r&&r.dispose(),t!==s&&s.dispose(),h.dispose(),l.dispose(),p.dispose(),d.dispose(),f}var OT=Q3;function eL(e,t,n,r,s=!0){let a=_(e,"v","movingAverage"),o=_(t,"x","movingAverage"),i=_(n,"decay","movingAverage");lS(a,o),D(ga(a.shape,o.shape),()=>"Shape mismatch in v and x");let c=xe(1),u=de(c,i),l=B(de(o,a),u);if(s){D(r!=null,()=>"When using zeroDebias: true, step is required.");let p=_(r,"step","movingAverage");l=fe(l,de(c,$s(i,p)))}return Y(a,l)}var MT=z({movingAverage_:eL});function tL(e,t,n){let r=_(e,"indices","scatterND","int32"),s=_(t,"updates","scatterND");qv(s,r,n);let a={indices:r,updates:s},o={shape:n};return M.runKernel(wu,a,o)}var LT=z({scatterND_:tL});function nL(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 rL(e,t,n,r=0){let s=_(e,"sparseIndices","sparseToDense","int32"),a=_(t,"sparseValues","sparseToDense","string_or_numeric"),o=_(r,"defaultValue","sparseToDense",a.dtype);nL(s,a,n,o);let i={sparseIndices:s,sparseValues:a,defaultValue:o},c={outputShape:n};return M.runKernel(Vf,i,c)}var zT=z({sparseToDense_:rL});function sL(e,t){let n=_(t,"indices","gatherND","int32"),s={params:_(e,"x","gatherND","string_or_numeric"),indices:n};return M.runKernel(eu,s)}var BT=z({gatherND_:sL});function aL(e,t){if(t==null)return e.shape.slice();if(ga(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let r=0;r<e.shape.length;r++)t[r]==null&&e.shape[r]!=null?n.push(e.shape[r]):n.push(t[r]);return n}return t}function oL(e,t,n,r){let s=_(e,"x","dropout");if(D(s.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${s.dtype} tensor instead.`),D(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Te?s.clone():s;let a=aL(s,n),o=1-t,i=fe(Bu(Y(Uu(a,0,1,"float32",r),o)),o);return B(s,i)}var jx=z({dropout_:oL});function Kx(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function ym(e,t,n){let r=1-e%2,s=new Float32Array(e);for(let a=0;a<e;++a){let o=2*Math.PI*a/(e+r-1);s[a]=t-n*Math.cos(o)}return Ke(s,"float32")}async function iL(e,t,n=1){let r=_(e,"predictions","inTopK"),s=_(t,"targets","inTopK");D(r.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),D(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}`),_n(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];D(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(),[c,u]=[o.length/a,a],l=j1("bool",c);for(let p=0;p<c;p++){let d=p*u,h=o.subarray(d,d+u),f=[];for(let m=0;m<h.length;m++)f.push({value:h[m],index:m});f.sort((m,g)=>g.value-m.value),l[p]=0;for(let m=0;m<n;m++)if(f[m].index===i[p]){l[p]=1;break}}return e!==r&&r.dispose(),t!==s&&s.dispose(),Cn(l,s.shape,"bool")}var WT=iL,Ic={};Ae(Ic,{conv2d:()=>lL,depthwiseConv2d:()=>fL,matMul:()=>gL});function cL(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 c=t;c.rank===3&&(c=W(t,[1,t.shape[0],t.shape[1],t.shape[2]])),D(i.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${i.shape}.`),D(c.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${c.shape}.`),D(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=a==="NHWC"?i.shape[3]:i.shape[1],l=a==="NHWC"?c.shape[3]:c.shape[1];D(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),D(l===n[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${n[3]}).`),En("conv2dDerFilter",s,o);let p={x:i,dy:c},d={strides:r,pad:s,dataFormat:a,dimRoundingMode:o,filterShape:n};return M.runKernel(bf,p,d)}var Xx=z({conv2DBackpropFilter_:cL});function vm(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return B(e,bi(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function xm(e,t){let n=t,r=Bt(e.shape,t.shape);return r.length>0&&(n=ge(n,r)),W(n,e.shape)}function wm(e,t,n,r){if(t==="linear")return e;if(t==="relu")return Xe(e);if(t==="elu")return Lu(e);if(t==="relu6")return im(e);if(t==="prelu")return Ud(e,n);if(t==="leakyrelu")return Ld(e,r);if(t==="sigmoid")return dr(e);throw new Error(`Unknown fused activation ${t}.`)}var Im=(e,t)=>!(e>0)||t==="linear";function uL({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:a=[1,1],dimRoundingMode:o,bias:i,activation:c="linear",preluActivationWeights:u,leakyreluAlpha:l}){if(c=c||"linear",Im(M.state.gradientDepth,c)===!1){D(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=Dt(e,t,n,r,s,a,o);return i!=null&&(S=Y(S,i)),wm(S,c,u,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]])),D(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),D(d.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${d.rank}.`),En("fused conv2d",r,o);let m=s==="NHWC"?h.shape[3]:h.shape[1];D(d.shape[2]===m,()=>`Error in conv2d: depth of input (${m}) must match input depth for filter ${d.shape[2]}.`),D(ps(n,a),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`);let g=Pd(h.shape,d.shape,n,a,r,o),b;i!=null&&(b=_(i,"bias","fused conv2d"),[b]=_t(b,p),s==="NHWC"?ct(g.outShape,b.shape):(D(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}.`),D(b.shape.length===0||b.shape[0]===g.outChannels||b.shape[0]===1,()=>`Error in fused conv2d: bias shape (${b.shape}) is not compatible with the number of output channels (${g.outChannels})`)));let y;if(u!=null){let S=u.shape;if(D(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)D(S[0]===1||S[0]===g.outChannels,()=>`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the number of output channels (${g.outChannels}).`);else if(S.length===3)try{ct(S,g.outShape)}catch(C){let E=`Error in fused conv2d: PReLU activation weights (${S}) is not compatible with the output shape of the conv2d (${g.outShape}).`;throw Error(E)}y=_(u,"prelu weights","fused conv2d")}let v=(S,C)=>{D(s==="NHWC",()=>`Error in gradient of fused conv2D: got dataFormat of ${s} but only NHWC is currently supported.`);let[E,$,F,A]=C,R=vm(S,F,c);D(ca(a),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`);let T=fx($.shape,R,E,n,r),L=Xx($,R,E.shape,n,r),V=[T,L];if(A!=null){let G=xm(A,R);V.push(G)}return V},x={x:h,filter:d,bias:b,preluActivationWeights:y},k={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o,activation:c,leakyreluAlpha:l};return i==null?ls((C,E,$)=>{let F=M.runKernel(to,x,k);return $([E,C,F]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:v}})(h,d):ls((C,E,$,F)=>{let A=M.runKernel(to,x,k);return F([E,C,A,$]),f&&(A=W(A,[A.shape[1],A.shape[2],A.shape[3]])),{value:A,gradFunc:v}})(h,d,b)}var lL=z({fusedConv2d_:uL});function dL(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 c=t;c.rank===3&&(c=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:i,dy:c},l={strides:r,pad:s,dimRoundingMode:o,dilations:a,filterShape:n};return M.runKernel(wf,u,l)}var VT=z({depthwiseConv2dNativeBackpropFilter_:dL});function pL(e,t,n,r,s,a=[1,1],o){let i=t,c=!1;t.rank===3&&(c=!0,i=W(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:i,filter:n},l={strides:r,pad:s,dimRoundingMode:o,dilations:a,inputShape:e},p=M.runKernel(If,u,l);return c?W(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var UT=z({depthwiseConv2dNativeBackpropInput_:pL});function hL({x:e,filter:t,strides:n,pad:r,dataFormat:s="NHWC",dilations:a=[1,1],dimRoundingMode:o,bias:i,activation:c="linear",preluActivationWeights:u,leakyreluAlpha:l}){if(Im(M.state.gradientDepth,c)===!1){let k=Sa(e,t,n,r,s,a,o);return i!=null&&(k=Y(k,i)),wm(k,c,u,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]])),D(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),D(d.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${d.rank}.`),D(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]),D(ps(n,a),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),En("fused depthwiseConv2d",r,o);let m=Pd(h.shape,d.shape,n,a,r,o,!0),g;i!=null&&(g=_(i,"bias","fused conv2d"),[g]=_t(g,p),ct(m.outShape,g.shape));let b;u!=null&&(b=_(u,"prelu weights","fused depthwiseConv2d"));let y=(k,S)=>{D(ca(a),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${a}'`);let[C,E,$,F]=S,A=vm(k,$,c),R=UT(E.shape,A,C,n,r,a,o),T=VT(E,A,C.shape,n,r,a,o);if(F!=null){let L=xm(g,A);return[R,T,L]}return[R,T]},v={x:h,filter:d,bias:g,preluActivationWeights:b},x={strides:n,pad:r,dataFormat:s,dilations:a,dimRoundingMode:o,activation:c,leakyreluAlpha:l};return i==null?ls((S,C,E)=>{let $=M.runKernel(no,v,x);return E([C,S,$]),f&&($=W($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:y}})(h,d):ls((S,C,E,$)=>{let F=M.runKernel(no,v,x);return $([C,S,F,E]),f&&(F=W(F,[F.shape[1],F.shape[2],F.shape[3]])),{value:F,gradFunc:y}})(h,d,g)}var fL=z({fusedDepthwiseConv2d_:hL});function mL({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:s,activation:a="linear",preluActivationWeights:o,leakyreluAlpha:i=.2}){if(Im(M.state.gradientDepth,a)===!1){let A=De(e,t,n,r);return s!=null&&(A=Y(A,s)),wm(A,a,o,i)}let c=_(e,"a","fused matMul"),u=_(t,"b","fused matMul");[c,u]=_t(c,u);let l=n?c.shape[c.rank-2]:c.shape[c.rank-1],p=r?u.shape[u.rank-1]:u.shape[u.rank-2],d=n?c.shape[c.rank-1]:c.shape[c.rank-2],h=r?u.shape[u.rank-2]:u.shape[u.rank-1],f=c.shape.slice(0,-2),m=u.shape.slice(0,-2),g=ht(f),b=ht(m);D(l===p,()=>`Error in fused matMul: inner shapes (${l}) and (${p}) of Tensors with shapes ${c.shape} and ${u.shape} and transposeA=${n} and transposeB=${r} must match.`);let v=ct(c.shape.slice(0,-2),u.shape.slice(0,-2)).concat([d,h]),x=n?W(c,[g,l,d]):W(c,[g,d,l]),k=r?W(u,[b,h,p]):W(u,[b,p,h]),S;s!=null&&(S=_(s,"bias","fused matMul"),[S]=_t(S,c),ct(v,S.shape));let C;o!=null&&(C=_(o,"prelu weights","fused matMul"));let E=(A,R)=>{let[T,L,V,G]=R,j=vm(W(A,V.shape),V,a),H,Z;if(!n&&!r?(H=De(j,L,!1,!0),Z=De(T,j,!0,!1)):!n&&r?(H=De(j,L,!1,!1),Z=De(j,T,!0,!1)):n&&!r?(H=De(L,j,!1,!0),Z=De(T,j,!1,!1)):(H=De(L,j,!0,!0),Z=De(j,T,!0,!0)),s!=null){let J=xm(G,j);return[H,Z,J]}else return[H,Z]},$={a:x,b:k,bias:S,preluActivationWeights:C},F={transposeA:n,transposeB:r,activation:a,leakyreluAlpha:i};return s==null?ls((R,T,L)=>{let V=M.runKernel(eo,$,F);return L([R,T,V]),{value:W(V,v),gradFunc:E}})(x,k):ls((R,T,L,V)=>{let G=M.runKernel(eo,$,F);return V([R,T,G,L]),{value:W(G,v),gradFunc:E}})(x,k,S)}var gL=z({fusedMatMul_:mL});function bL(e){return ym(e,.54,.46)}var yL=z({hammingWindow_:bL});function vL(e){return ym(e,.5,.5)}var GT=z({hannWindow_:vL});function xL(e,t,n,r=!1,s=0){let a=0,o=[];for(;a+t<=e.size;)o.push(We(e,a,t)),a+=n;if(r)for(;a<e.size;){let i=a+t-e.size,c=Je([We(e,a,t-i),bn([i],s)]);o.push(c),a+=n}return o.length===0?$r([],[0,t]):W(Je(o),[o.length,t])}var HT=z({frame_:xL});function wL(e,t,n,r,s=GT){r==null&&(r=Kx(t));let a=HT(e,t,n),o=B(a,s(t));return qd(o,r)}var IL=z({stft_:wL});function kL(e,t,n,r,s="bilinear",a=0){let o=_(e,"image","cropAndResize"),i=_(t,"boxes","cropAndResize","float32"),c=_(n,"boxInd","cropAndResize","int32"),u=i.shape[0];D(o.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${o.rank}.`),D(i.rank===2&&i.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${i.shape}.`),D(c.rank===1&&c.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${i.shape}.`),D(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),D(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),D(s==="bilinear"||s==="nearest",()=>`method must be bilinear or nearest, but was ${s}`);let l={image:o,boxes:i,boxInd:c},p={method:s,extrapolationValue:a,cropSize:r};return M.runKernel(qc,l,p)}var SL=z({cropAndResize_:kL});function TL(e){let t=_(e,"image","flipLeftRight","float32");D(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return M.runKernel(Jc,n,{})}var CL=z({flipLeftRight_:TL});function NL(e){let t=_(e,"image","grayscaleToRGB"),n=t.rank-1,r=t.shape[n];D(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),D(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,Ln(t,s)}var _L=z({grayscaleToRGB_:NL});function EL(e,t,n=0,r=.5){let s=_(e,"image","rotateWithOffset","float32");D(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(Ou,a,o)}var AL=z({rotateWithOffset_:EL});function Gu(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),D(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),D(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),D(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),D(t.rank===1,()=>"scores must be a 1D tensor"),D(t.shape[0]===o,()=>`scores has incompatible shape with boxes. Expected ${o}, but was ${t.shape[0]}`),D(0<=a&&a<=1,()=>`softNmsSigma must be in [0, 1], but was '${a}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:a}}function $L(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let a=_(e,"boxes","nonMaxSuppression","float32"),o=_(t,"scores","nonMaxSuppression","float32"),i=Gu(a,o,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let c={maxOutputSize:n,iouThreshold:r,scoreThreshold:s};return M.runKernel(fu,{boxes:a,scores:o},c)}var DL=z({nonMaxSuppression_:$L});function FL(e,t,n){let r=RL(e,t,n),s=r<0?-(r+1):r;e.splice(s,0,t)}function RL(e,t,n){return OL(e,t,n||PL)}function PL(e,t){return e>t?1:e<t?-1:0}function OL(e,t,n){let r=0,s=e.length,a=0,o=!1;for(;r<s;){a=r+(s-r>>>1);let i=n(t,e[a]);i>0?r=a+1:(s=a,o=!i)}return o?r:-r-1}function qT(e,t,n,r,s){return Yx(e,t,n,r,s,0)}function jT(e,t,n,r,s,a){return Yx(e,t,n,r,s,0,!1,a,!0)}function KT(e,t,n,r,s,a){return Yx(e,t,n,r,s,a,!0)}function Yx(e,t,n,r,s,a,o=!1,i=!1,c=!1){let u=[];for(let g=0;g<t.length;g++)t[g]>s&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(yk);let l=a>0?-.5/a:0,p=[],d=[];for(;p.length<n&&u.length>0;){let g=u.pop(),{score:b,boxIndex:y,suppressBeginIndex:v}=g;if(b<s)break;let x=!1;for(let k=p.length-1;k>=v;--k){let S=ML(e,y,p[k]);if(S>=r){x=!0;break}if(g.score=g.score*LL(r,l,S),g.score<=s)break}g.suppressBeginIndex=p.length,x||(g.score===b?(p.push(y),d.push(g.score)):g.score>s&&FL(u,g,yk))}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 m={selectedIndices:p};return o&&(m.selectedScores=d),c&&(m.validOutputs=h),m}function ML(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]),c=Math.max(r[1],r[3]),u=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)*(c-o),f=(p-u)*(d-l);if(h<=0||f<=0)return 0;let m=Math.max(a,u),g=Math.max(o,l),b=Math.min(i,p),y=Math.min(c,d),v=Math.max(b-m,0)*Math.max(y-g,0);return v/(h+f-v)}function LL(e,t,n){let r=Math.exp(t*n*n);return n<=e?r:0}function yk(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function zL(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY){let a=_(e,"boxes","nonMaxSuppressionAsync"),o=_(t,"scores","nonMaxSuppressionAsync"),i=Gu(a,o,n,r,s);n=i.maxOutputSize,r=i.iouThreshold,s=i.scoreThreshold;let c=await Promise.all([a.data(),o.data()]),u=c[0],l=c[1],{selectedIndices:p}=qT(u,l,n,r,s);return a!==e&&a.dispose(),o!==t&&o.dispose(),Ke(p,"int32")}var BL=zL;function WL(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=0){let o=_(e,"boxes","nonMaxSuppression"),i=_(t,"scores","nonMaxSuppression"),c=Gu(o,i,n,r,s,a);n=c.maxOutputSize,r=c.iouThreshold,s=c.scoreThreshold,a=c.softNmsSigma;let u={boxes:o,scores:i},l={maxOutputSize:n,iouThreshold:r,scoreThreshold:s,softNmsSigma:a},p=M.runKernel(gu,u,l);return{selectedIndices:p[0],selectedScores:p[1]}}var VL=z({nonMaxSuppressionWithScore_:WL});async function UL(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=0){let o=_(e,"boxes","nonMaxSuppressionAsync"),i=_(t,"scores","nonMaxSuppressionAsync"),c=Gu(o,i,n,r,s,a);n=c.maxOutputSize,r=c.iouThreshold,s=c.scoreThreshold,a=c.softNmsSigma;let u=await Promise.all([o.data(),i.data()]),l=u[0],p=u[1],{selectedIndices:d,selectedScores:h}=KT(l,p,n,r,s,a);return o!==e&&o.dispose(),i!==t&&i.dispose(),{selectedIndices:Ke(d,"int32"),selectedScores:Ke(h)}}var GL=UL;function HL(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=!1){let o=_(e,"boxes","nonMaxSuppression"),i=_(t,"scores","nonMaxSuppression"),c=Gu(o,i,n,r,s,null),u=c.maxOutputSize,l=c.iouThreshold,p=c.scoreThreshold,d={boxes:o,scores:i},h={maxOutputSize:u,iouThreshold:l,scoreThreshold:p,padToMaxOutputSize:a},f=M.runKernel(mu,d,h);return{selectedIndices:f[0],validOutputs:f[1]}}var qL=z({nonMaxSuppressionPadded_:HL});async function jL(e,t,n,r=.5,s=Number.NEGATIVE_INFINITY,a=!1){let o=_(e,"boxes","nonMaxSuppressionAsync"),i=_(t,"scores","nonMaxSuppressionAsync"),c=Gu(o,i,n,r,s,null),u=c.maxOutputSize,l=c.iouThreshold,p=c.scoreThreshold,[d,h]=await Promise.all([o.data(),i.data()]),{selectedIndices:f,validOutputs:m}=jT(d,h,u,l,p,a);return o!==e&&o.dispose(),i!==t&&i.dispose(),{selectedIndices:Ke(f,"int32"),validOutputs:xe(m,"int32")}}var KL=jL;function XL(e,t,n=!1,r=!1){let s=_(e,"images","resizeBilinear");D(s.rank===3||s.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${s.rank}.`),D(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),D(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},c={alignCorners:n,halfPixelCenters:r,size:t},u=M.runKernel(ei,i,c);return o?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var XT=z({resizeBilinear_:XL});function YL(e,t,n=!1,r=!1){let s=_(e,"images","resizeNearestNeighbor");D(s.rank===3||s.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${s.rank}.`),D(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),D(s.dtype==="float32"||s.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),D(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},c={alignCorners:n,halfPixelCenters:r,size:t},u=M.runKernel(Qo,i,c);return o?W(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var YT=z({resizeNearestNeighbor_:YL});function ZL(e,t="binary",n=!1,r=.5){let s=_(e,"image","threshold"),a=.2989,o=.587,i=.114,c=s.shape[0]*s.shape[1],u=B(Ke([r]),255),l,p,d,h;if(D(s.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${s.rank}.`),D(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]}.`),D(s.dtype==="int32"||s.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${s.dtype}.`),D(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),s.shape[2]===3){[l,p,d]=zn(s,[1,1,1],-1);let g=B(l,a),b=B(p,o),y=B(d,i);h=Y(Y(g,b),y)}else h=e;if(t==="otsu"){let g=cx(ce(cm(h),"int32"),Cn([]),256);u=JL(g,c)}let f=n?Ta(h,u):An(h,u);return ce(B(f,255),"int32")}function JL(e,t){let n=Ke([-1]),r=Ke([0]),s=Ke([0]),a,o,i,c,u,l;for(let p=0;p<e.size-1;p++){a=We(e,0,p+1),o=We(e,p+1),u=fe(ge(a),t),l=fe(ge(o),t);let d=ge(B(a,vc(0,a.size)));i=fe(d,ge(a));let h=bn(o.shape,a.size),f=Y(vc(0,o.size),h),m=B(o,f);c=fe(ge(m),ge(o));let g=de(i,c),b=de(i,c),y=B(u,l);s=B(B(y,g),b);let v=An(s,r);r=mn(v,s,r),n=mn(v,Ke([p]),n)}return n}var QL=z({threshold_:ZL});function ez(e,t,n="nearest",r="constant",s=0,a){let o=_(e,"image","transform","float32"),i=_(t,"transforms","transform","float32");D(o.rank===4,()=>`Error in transform: image must be rank 4,but got rank ${o.rank}.`),D(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"),D(a==null||a.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${a}.`);let c={image:o,transforms:i},u={interpolation:n,fillMode:r,fillValue:s,outputShape:a};return M.runKernel(Fu,c,u)}var tz=z({transform_:ez});function nz(e,t,n){D(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),D(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let r=_(e,"a","bandPart");D(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);let s=r.shape,[a,o]=r.shape.slice(-2);if(!(t<=a))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${a}).`);if(!(n<=o))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${o}).`);t<0&&(t=a),n<0&&(n=o);let i=W(vc(0,a,1,"int32"),[-1,1]),c=vc(0,o,1,"int32"),u=de(i,c),l=Dr(Ta(u,xe(+t,"int32")),Ds(u,xe(-n,"int32"))),p=kt([a,o],r.dtype);return W(Ft(lt(W(r,[-1,a,o])).map(d=>mn(l,d,p))),s)}var rz=z({bandPart_:nz});function sz(e){let t;if(Array.isArray(e)){t=!1,D(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<e.length;++a)D(e[a].shape[0]===s,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[a].shape[0]} vs. ${s})`)}else t=!0,e=zn(e,e.shape[0],0).map(s=>Na(s,[0]));D(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<e.length;++s)n.push(M.tidy(()=>{let a=r[s];if(s>0)for(let o=0;o<s;++o){let i=B(ge(B(n[o],a)),n[o]);a=de(a,i)}return fe(a,zu(a,"euclidean"))}));return t?Ft(n,0):n}var az=z({gramSchmidt_:sz});function oz(e,t=!1){if(D(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return vk(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((c,u)=>c*u),r=lt(W(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),s=[],a=[];r.forEach(c=>{let[u,l]=vk(c,t);s.push(u),a.push(l)});let o=W(Ft(s,0),e.shape),i=W(Ft(a,0),e.shape);return[o,i]}}function vk(e,t=!1){return M.tidy(()=>{D(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=Qf(n),a=is(e),o=$r([[1]],[1,1]),i=is(o),c=n>=r?r:n;for(let u=0;u<c;++u){let l=a,p=i,d=s;[i,a,s]=M.tidy(()=>{let h=We(a,[u,u],[n-u,1]),f=zu(h),m=We(a,[u,u],[1,1]),g=mn(An(m,0),$r([[-1]]),$r([[1]])),b=de(m,B(g,f)),y=fe(h,b);y.shape[0]===1?i=is(o):i=Je([o,We(y,[1,0],[y.shape[0]-1,y.shape[1]])],0);let v=xt(fe(De(g,b),f)),x=We(a,[u,0],[n-u,r]),k=B(v,i),S=Ee(i);if(u===0)a=de(x,De(k,De(S,x)));else{let $=de(x,De(k,De(S,x)));a=Je([We(a,[0,0],[u,r]),$],0)}let C=Ee(k),E=We(s,[0,u],[n,s.shape[1]-u]);if(u===0)s=de(E,De(De(E,i),C));else{let $=de(E,De(De(E,i),C));s=Je([We(s,[0,0],[n,u]),$],1)}return[i,a,s]}),_e([l,p,d])}return!t&&n>r&&(s=We(s,[0,0],[n,r]),a=We(a,[0,0],[r,r])),[s,a]})}var iz=z({qr_:oz}),kn;(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"})(kn||(kn={}));function cz(e,t,n=kn.SUM_BY_NONZERO_WEIGHTS){let r=_(e,"losses","computeWeightedLoss"),s=null;t!=null&&(s=_(t,"weights","computeWeightedLoss"));let a=s==null?r:B(r,s);if(n===kn.NONE)return a;if(n===kn.SUM)return ge(a);if(n===kn.MEAN){if(s==null)return Ct(a);{let o=r.size/s.size,i=fe(ge(a),ge(s));return o>1?fe(i,xe(o)):i}}if(n===kn.SUM_BY_NONZERO_WEIGHTS){if(s==null)return fe(ge(a),xe(r.size));{let o=B(s,Qn(r.shape)),i=ce(ge(co(o,xe(0))),"float32");return fe(ge(a),i)}}throw Error(`Unknown reduction: ${n}`)}var Fs=z({computeWeightedLoss_:cz});function uz(e,t,n,r=kn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","absoluteDifference"),a=_(t,"predictions","absoluteDifference"),o=null;n!=null&&(o=_(n,"weights","absoluteDifference")),_n(s.shape,a.shape,"Error in absoluteDifference: ");let i=Lt(de(s,a));return Fs(i,o,r)}var lz=z({absoluteDifference_:uz});function dz(e,t,n,r,s=kn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","cosineDistance"),o=_(t,"predictions","cosineDistance"),i=null;r!=null&&(i=_(r,"weights","cosineDistance")),_n(a.shape,o.shape,"Error in cosineDistance: ");let c=xe(1),u=de(c,ge(B(a,o),n,!0));return Fs(u,i,s)}var pz=z({cosineDistance_:dz});function hz(e,t,n,r=kn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","hingeLoss"),a=_(t,"predictions","hingeLoss"),o=null;n!=null&&(o=_(n,"weights","hingeLoss")),_n(s.shape,a.shape,"Error in hingeLoss: ");let i=xe(1);s=de(B(xe(2),s),i);let c=Xe(de(i,B(s,a)));return Fs(c,o,r)}var fz=z({hingeLoss_:hz});function mz(e,t,n,r=1,s=kn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","huberLoss"),o=_(t,"predictions","huberLoss"),i=null;n!=null&&(i=_(n,"weights","huberLoss")),_n(a.shape,o.shape,"Error in huberLoss: ");let c=xe(r),u=Lt(de(o,a)),l=Vu(u,c),p=de(u,l),d=Y(B(xe(.5),it(l)),B(c,p));return Fs(d,i,s)}var gz=z({huberLoss_:mz});function bz(e,t,n,r=1e-7,s=kn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"labels","logLoss"),o=_(t,"predictions","logLoss"),i=null;n!=null&&(i=_(n,"weights","logLoss")),_n(a.shape,o.shape,"Error in logLoss: ");let c=xe(1),u=xe(r),l=xt(B(a,nr(Y(o,u)))),p=B(de(c,a),nr(Y(de(c,o),u))),d=de(l,p);return Fs(d,i,s)}var yz=z({logLoss_:bz});function vz(e,t,n,r=kn.SUM_BY_NONZERO_WEIGHTS){let s=_(e,"labels","meanSquaredError"),a=_(t,"predictions","meanSquaredError"),o=null;n!=null&&(o=_(n,"weights","meanSquaredError")),_n(s.shape,a.shape,"Error in meanSquaredError: ");let i=mm(s,a);return Fs(i,o,r)}var xz=z({meanSquaredError_:vz});function wz(e,t){let n=_(e,"labels","sigmoidCrossEntropyWithLogits"),r=_(t,"logits","sigmoidCrossEntropyWithLogits");_n(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");let s=Xe(r),a=B(r,n),o=zd(gn(xt(Lt(r))));return Y(de(s,a),o)}function Iz(e,t,n,r=0,s=kn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"multiClassLabels","sigmoidCrossEntropy"),o=_(t,"logits","sigmoidCrossEntropy"),i=null;if(n!=null&&(i=_(n,"weights","sigmoidCrossEntropy")),_n(a.shape,o.shape,"Error in sigmoidCrossEntropy: "),r>0){let u=xe(r),l=xe(1),p=xe(.5);a=Y(B(a,de(l,u)),B(p,u))}let c=wz(a,o);return Fs(c,i,s)}var kz=z({sigmoidCrossEntropy_:Iz});function Sz(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 ls((s,a,o)=>{let c=rm(a,[n],!0),u=de(ce(a,"float32"),c);o([s,u]);let l=xt(B(u,s));return{value:ge(l,[n]),gradFunc:(h,f)=>{let[m,g]=f,b=io(h.shape,[n]);return[B(W(h,b),de(ce(m,"float32"),gn(g))),B(W(h,b),de(gn(g),ce(m,"float32")))]}}})(e,t)}function Tz(e,t,n,r=0,s=kn.SUM_BY_NONZERO_WEIGHTS){let a=_(e,"onehotLabels","softmaxCrossEntropy"),o=_(t,"logits","softmaxCrossEntropy"),i=null;if(n!=null&&(i=_(n,"weights","softmaxCrossEntropy")),_n(a.shape,o.shape,"Error in softmaxCrossEntropy: "),r>0){let u=xe(r),l=xe(1),p=xe(a.shape[1]);a=Y(B(a,de(l,u)),fe(u,p))}let c=Sz(a,o);return Fs(c,i,s)}var Cz=z({softmaxCrossEntropy_:Tz});function Nz(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 c={indices:s,values:a,denseShape:o,defaultValue:i},u=M.runKernel(xd,c);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var _z=z({sparseFillEmptyRows_:Nz});function Ez(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(Au,o);return{outputIndices:i[0],outputShape:i[1]}}var Az=z({sparseReshape_:Ez});function $z(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(wd,o)}var Dz=z({sparseSegmentMean_:$z});function Fz(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(Id,o)}var Rz=z({sparseSegmentSum_:Fz});function Pz(e,t,n,r,s,a,o,i){let c=_(e,"data","stringNGrams","string");if(c.dtype!=="string")throw new Error("Data must be of datatype string");if(c.shape.length!==1)throw new Error(`Data must be a vector, saw: ${c.shape}`);let u=_(t,"dataSplits","stringNGrams");if(u.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:c,dataSplits:u},d=M.runKernel(Sd,p,l);return{nGrams:d[0],nGramsSplits:d[1]}}var Oz=z({stringNGrams_:Pz});function Mz(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(Td,o,a);return{indices:i[0],values:i[1],shape:i[2]}}var Lz=z({stringSplit_:Mz});function zz(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(Cd,s,r)}var Bz=z({stringToHashBucketFast_:zz}),ZT={fft:Hd,ifft:wc,rfft:qd,irfft:fm},JT={hammingWindow:yL,hannWindow:GT,frame:HT,stft:IL},Br={flipLeftRight:CL,grayscaleToRGB:_L,resizeNearestNeighbor:YT,resizeBilinear:XT,rotateWithOffset:AL,cropAndResize:SL,nonMaxSuppression:DL,nonMaxSuppressionAsync:BL,nonMaxSuppressionWithScore:VL,nonMaxSuppressionWithScoreAsync:GL,nonMaxSuppressionPadded:qL,nonMaxSuppressionPaddedAsync:KL,threshold:QL,transform:tz},Zx={bandPart:rz,gramSchmidt:az,qr:iz},QT={absoluteDifference:lz,computeWeightedLoss:Fs,cosineDistance:pz,hingeLoss:fz,huberLoss:gz,logLoss:yz,meanSquaredError:xz,sigmoidCrossEntropy:kz,softmaxCrossEntropy:Cz},eC={sparseFillEmptyRows:_z,sparseReshape:Az,sparseSegmentMean:Dz,sparseSegmentSum:Rz},tC={stringNGrams:Oz,stringSplit:Lz,stringToHashBucketFast:Bz},Rs=class extends qS{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 lT(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(Rs,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var km=class extends Rs{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(()=>qe(s).variable(a))}),this.accumulatedUpdates[r]==null&&(this.accumulatedUpdates[r]={originalName:`${n}/accum_var`,variable:O(()=>qe(s).variable(a))});let o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;let i=this.accumulatedGrads[r].variable,c=this.accumulatedUpdates[r].variable;O(()=>{let u=Y(B(i,this.rho),B(it(o),1-this.rho)),l=B(fe(un(Y(c,this.epsilon)),un(Y(i,this.epsilon))),o),p=Y(B(c,this.rho),B(it(l),1-this.rho));i.assign(u),c.assign(p);let d=Y(B(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)}};km.className="Adadelta";Ia(km);var Sm=class extends Rs{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(()=>bn(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=Y(o,it(a));o.assign(i);let c=Y(B(fe(a,un(Y(i,M.backend.epsilon()))),-this.learningRate),s);s.assign(c)})}),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)}};Sm.className="Adagrad";Ia(Sm);var Tm=class extends Rs{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=de(1,this.accBeta1),r=de(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(()=>qe(o).variable(i))}),this.accumulatedSecondMoment[a]==null&&(this.accumulatedSecondMoment[a]={originalName:`${s}/v`,variable:O(()=>qe(o).variable(i))});let c=Array.isArray(e)?e[a].tensor:e[s];if(c==null)return;let u=this.accumulatedFirstMoment[a].variable,l=this.accumulatedSecondMoment[a].variable,p=Y(B(u,this.beta1),B(c,1-this.beta1)),d=Y(B(l,this.beta2),B(it(c),1-this.beta2)),h=fe(p,n),f=fe(d,r);u.assign(p),l.assign(d);let m=Y(B(fe(h,Y(un(f),this.epsilon)),-this.learningRate),o);o.assign(m)}),this.accBeta1.assign(B(this.accBeta1,this.beta1)),this.accBeta2.assign(B(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($s(this.beta1,this.iterations_+1)),this.accBeta2.assign($s(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)}};Tm.className="Adam";Ia(Tm);var Cm=class extends Rs{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=de(1,this.accBeta1),r=fe(-this.learningRate,Y(B(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:qe(o).variable(i)}),this.accumulatedWeightedInfNorm[a]==null&&(this.accumulatedWeightedInfNorm[a]={originalName:`${s}/v`,variable:qe(o).variable(i)});let c=Array.isArray(e)?e[a].tensor:e[s];if(c==null)return;let u=this.accumulatedFirstMoment[a].variable,l=this.accumulatedWeightedInfNorm[a].variable,p=Y(B(u,this.beta1),B(c,1-this.beta1)),d=B(l,this.beta2),h=Lt(c),f=hs(d,h);u.assign(p),l.assign(f);let m=Y(B(fe(r,n),fe(p,Y(f,this.epsilon))),o);o.assign(m)}),this.iteration.assign(Y(this.iteration,1)),this.accBeta1.assign(B(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)}};Cm.className="Adamax";Ia(Cm);var jd=class extends Rs{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=Y(B(this.c,s),a);a.assign(o)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=Jt(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)}};jd.className="SGD";Ia(jd);var Nm=class extends jd{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(()=>qe(s).variable(!1))});let a=this.accumulations[r].variable,o=Array.isArray(e)?e[r].tensor:e[n];o!=null&&O(()=>{let i,c=Y(B(this.m,a),o);this.useNesterov?i=Y(B(this.c,Y(o,B(c,this.m))),s):i=Y(B(this.c,c),s),a.assign(c),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)}};Nm.className="Momentum";Ia(Nm);var _m=class extends Rs{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(()=>qe(s).variable(a))}),this.accumulatedMoments[r]==null&&(this.accumulatedMoments[r]={originalName:`${n}/momentum`,variable:O(()=>qe(s).variable(a))}),this.accumulatedMeanGrads[r]==null&&this.centered&&(this.accumulatedMeanGrads[r]={originalName:`${n}/mg`,variable:O(()=>qe(s).variable(a))});let o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;let i=this.accumulatedMeanSquares[r].variable,c=this.accumulatedMoments[r].variable;O(()=>{let u=Y(B(i,this.decay),B(it(o),1-this.decay));if(this.centered){let l=this.accumulatedMeanGrads[r].variable,p=Y(B(l,this.decay),B(o,1-this.decay)),d=fe(B(o,this.learningRate),un(de(u,Y(it(p),this.epsilon)))),h=Y(B(c,this.momentum),d);i.assign(u),l.assign(p),c.assign(h);let f=de(s,h);s.assign(f)}else{let l=Y(B(i,this.decay),B(it(o),1-this.decay)),p=Y(B(c,this.momentum),fe(B(o,this.learningRate),un(Y(l,this.epsilon))));i.assign(l),c.assign(p);let d=de(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)}};_m.className="RMSProp";Ia(_m);var Zs=class{static sgd(e){return new jd(e)}static momentum(e,t,n=!1){return new Nm(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,s=!1){return new _m(e,t,n,r,s)}static adam(e=.001,t=.9,n=.999,r=null){return new Tm(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new km(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,s=0){return new Cm(e,t,n,r,s)}static adagrad(e,t=.1){return new Sm(e,t)}},Wa={sgd:Zs.sgd,momentum:Zs.momentum,adadelta:Zs.adadelta,adagrad:Zs.adagrad,rmsprop:Zs.rmsprop,adamax:Zs.adamax,adam:Zs.adam},Wz=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function Jx(){return new Promise(e=>Wz(()=>e()))}var N={};Ae(N,{ERF_A1:()=>nB,ERF_A2:()=>rB,ERF_A3:()=>sB,ERF_A4:()=>aB,ERF_A5:()=>oB,ERF_P:()=>tB,PARALLELIZE_THRESHOLD:()=>Qx,RowPartitionType:()=>rs,SELU_SCALE:()=>rC,SELU_SCALEALPHA:()=>nC,applyActivation:()=>wm,assertAndGetBroadcastShape:()=>ct,assertAxesAreInnerMostDims:()=>qO,assertParamsConsistent:()=>Vz,assignToTypedArray:()=>pB,axesAreInnerMostDims:()=>Ix,calculateShapes:()=>OS,checkEinsumDimSizes:()=>yB,checkPadOnDimRoundingMode:()=>En,combineLocations:()=>aT,combineRaggedTensorToTensorShapes:()=>Gz,complexWithEvenIndex:()=>uB,complexWithOddIndex:()=>lB,computeConv2DInfo:()=>Pd,computeConv3DInfo:()=>JS,computeDefaultPad:()=>rx,computeDilation2DInfo:()=>jP,computeOptimalWindowSize:()=>Kz,computeOutAndReduceShapes:()=>oT,computeOutShape:()=>Uz,computePool2DInfo:()=>ZS,computePool3DInfo:()=>KP,convertConv2DDataFormat:()=>QS,decodeEinsumEquation:()=>gB,eitherStridesOrDilationsAreOne:()=>ps,expandShapeToKeepDim:()=>io,exponent:()=>fB,exponents:()=>hB,fromStringArrayToUint8:()=>zB,fromUint8ToStringArray:()=>LB,getAxesPermutation:()=>iT,getBroadcastDims:()=>FS,getComplexWithIndex:()=>dB,getEinsumComputePath:()=>vB,getEinsumPermutation:()=>bB,getFusedBiasGradient:()=>xm,getFusedDyActivation:()=>vm,getImageCenter:()=>Xz,getInnerMostAxes:()=>jO,getPermuted:()=>Zz,getRaggedRank:()=>qz,getReductionAxes:()=>Bt,getReshaped:()=>Yz,getReshapedPermuted:()=>Jz,getRowPartitionTypesHelper:()=>Hz,getSliceBeginCoords:()=>Qz,getSliceSize:()=>eB,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>kB,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>SB,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>TB,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>_B,getSparseReshapeInputOutputMismatchErrorMessage:()=>AB,getSparseReshapeInputOutputMultipleErrorMessage:()=>EB,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>CB,getSparseReshapeNegativeOutputDimErrorMessage:()=>NB,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>RB,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>$B,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>DB,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>FB,getUndoAxesPermutation:()=>kx,isIdentityPermutation:()=>xB,log:()=>lF,mergeRealAndImagArrays:()=>iB,prepareAndValidate:()=>PS,prepareSplitSize:()=>IB,segment_util:()=>sC,shouldFuse:()=>Im,slice_util:()=>qt,splitRealAndImagArrays:()=>cB,tupleValuesAreOne:()=>ca,upcastType:()=>hr,validateDefaultValueShape:()=>jz,validateInput:()=>qv,validateUpdateShape:()=>Hv,warn:()=>Qs});function Vz(e,t){let n=e[0].length;e.forEach((s,a)=>{D(s.length===n,()=>`Error in concat${n}D: rank of tensors[${a}] must be the same as the rank of the rest (${n})`)}),D(t>=0&&t<n,()=>`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<n;o++)D(o===t||s[o]===r[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 Uz(e,t){let n=e[0].slice();for(let r=1;r<e.length;r++)n[t]+=e[r][t];return n}var rs;(function(e){e[e.FIRST_DIM_SIZE=0]="FIRST_DIM_SIZE",e[e.VALUE_ROWIDS=1]="VALUE_ROWIDS",e[e.ROW_LENGTHS=2]="ROW_LENGTHS",e[e.ROW_SPLITS=3]="ROW_SPLITS",e[e.ROW_LIMITS=4]="ROW_LIMITS",e[e.ROW_STARTS=5]="ROW_STARTS"})(rs||(rs={}));function Gz(e,t,n){let r=new Array;if(n==null&&t==null)return r;if(t==null)for(;r.length<e+n.length;)r.push(-1);else r=t.slice();if(n==null)return r;if(e+n.length!==r.length)throw new Error(`rt input.shape and shape=${t} are incompatible: rt input.rank = ${e+n.length}, but shape.rank = ${r.length}`);for(let s=1;s<n.length;++s){let a=n[s],o=r[r.length-n.length+s],i=r[o];if(a>=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 Hz(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 qz(e){return e.length===0?0:e[0]===rs.FIRST_DIM_SIZE?e.length-1:e.length}function jz(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<Math.min(n,r-1);++s){let a=e[s],o=t[s+1];if(a>=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 Qx=30;function Kz(e){return e<=Qx?e:Ah(e,Math.floor(Math.sqrt(e)))}function Xz(e,t,n){let r=n*(typeof e=="number"?e:e[0]),s=t*(typeof e=="number"?e:e[1]);return[r,s]}function Yz(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<a;++o)s=s.concat([e[o+1]/t[o],t[o]]);s=s.concat(e.slice(a+1))}return s}function Zz(e,t,n=!0){let r=[];if(n){r.push(t);for(let s=t+1;s<e;++s)s<=2*t?(r.push(s),r.push(s-(t+1))):r.push(s)}else{let s=[],a=[];for(let o=1;o<e;++o)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 Jz(e,t,n,r=!0){let s=[];r?s.push(e[0]/n):s.push(e[0]*n);for(let a=1;a<e.length;++a)a<=t.length?r?s.push(t[a-1]*e[a]):s.push(e[a]/t[a-1]):s.push(e[a]);return s}function Qz(e,t){let n=[0];for(let r=0;r<t;++r)n.push(e[r][0]);return n}function eB(e,t,n){let r=e.slice(0,1);for(let s=0;s<n;++s)r.push(e[s+1]-t[s][0]-t[s][1]);return r}var nC=1.7580993408473768,rC=1.0507009873554805,tB=.3275911,nB=.254829592,rB=-.284496736,sB=1.421413741,aB=-1.453152027,oB=1.061405429;function iB(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let r=0;r<n.length;r+=2)n[r]=e[r/2],n[r+1]=t[r/2];return n}function cB(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let r=0;r<e.length;r+=2)t[r/2]=e[r],n[r/2]=e[r+1];return{real:t,imag:n}}function uB(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let s=0;s<e.length;s+=4)n[Math.floor(s/4)]=e[s],r[Math.floor(s/4)]=e[s+1];return{real:n,imag:r}}function lB(e){let t=Math.floor(e.length/4),n=new Float32Array(t),r=new Float32Array(t);for(let s=2;s<e.length;s+=4)n[Math.floor(s/4)]=e[s],r[Math.floor(s/4)]=e[s+1];return{real:n,imag:r}}function dB(e,t){let n=e[t*2],r=e[t*2+1];return{real:n,imag:r}}function pB(e,t,n,r){e[r*2]=t,e[r*2+1]=n}function hB(e,t){let n=new Float32Array(e/2),r=new Float32Array(e/2);for(let s=0;s<Math.ceil(e/2);s++){let a=(t?2:-2)*Math.PI*(s/e);n[s]=Math.cos(a),r[s]=Math.sin(a)}return{real:n,imag:r}}function fB(e,t,n){let r=(n?2:-2)*Math.PI*(e/t),s=Math.cos(r),a=Math.sin(r);return{real:s,imag:a}}var yy="->",mB=/->/g,xk=",",wk="...";function gB(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(mB,"").length)/yy.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 ("${yy}").`);let[r,s]=e.split(yy);D(r.indexOf(wk)===-1,()=>`The ellipsis notation ("${wk}") is not supported yet.`);let a=r.split(xk),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;d<s.length;++d){let h=s[d];if(!a.some(f=>f.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;d<r.length;++d){let h=r[d];i.indexOf(h)===-1&&h!==xk&&i.push(h)}let c=new Array(a.length);for(let d=0;d<o;++d){if(new Set(a[d].split("")).size!==a[d].length)throw new Error(`Found duplicate axes in input component ${a[d]}. Support for duplicate axes in input is not implemented yet.`);c[d]=[];for(let h=0;h<a[d].length;++h)c[d].push(i.indexOf(a[d][h]))}let u=i.length,l=s.length,p=[];for(let d=l;d<u;++d)p.push(d);return{allDims:i,summedDims:p,idDims:c}}function bB(e,t){let n=new Array(e);n.fill(-1);for(let s=0;s<t.length;++s)n[t[s]]=s;let r=[];for(let s=0;s<e;++s)n[s]===-1&&r.push(s);return n=n.filter(s=>s!==-1),{permutationIndices:n,expandDims:r}}function yB(e,t,n){let r=new Array(e);for(let s=0;s<n.length;++s){let a=n[s].shape;for(let o=0;o<t[s].length;++o)r[t[s][o]]===void 0?r[t[s][o]]=a[o]:D(r[t[s][o]]===a[o],()=>`Expected dimension ${r[t[s][o]]} at axis ${o} of input shaped ${JSON.stringify(a)}, but got dimension ${a[o]}`)}}function vB(e,t){let n=e,r=[],s=0;e.length===0&&n.push(-1),s=e.length+1;for(let o=0;o<s;++o)r.push([]);let a=[];for(let o=0;o<n.length;++o){let i=n[o],c=wB(t,i);for(let u of c)a.indexOf(u)===-1&&(r[o].push(u),a.push(u))}return{path:n,steps:r}}function xB(e){return e.every((t,n)=>t===n)}function wB(e,t){let n=[];for(let r=0;r<e.length;++r)(e[r].length===0||e[r].indexOf(t)!==-1||t===-1)&&n.push(r);return n}function IB(e,t,n=0){let r=[];if(typeof t=="number")D(e.shape[n]%t===0,()=>"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);D(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,c)=>c>0?i+c:i);t[a]=e.shape[n]-o}D(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 kB(e){return`Received SparseTensor with denseShape[0] = 0 but
|
|
indices.shape[0] = ${e}`}function SB(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function TB(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function CB(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function NB(e,t){return`size ${e} must be non-negative, not ${t}`}function _B(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function EB(e,t){let n=ht(e),r=ht(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 AB(e,t){let n=ht(e),r=ht(t);return`Input to reshape is a tensor with ${n} dense values, but the requested shape has ${r}. inputShape=${e} outputShape=${t}`}function $B(){return"segment ids must be >= 0"}function DB(){return"segment ids are not increasing"}function FB(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function RB(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var sC={};Ae(sC,{collectGatherOpShapeInfo:()=>MB,computeOutShape:()=>OB,segOpComputeOptimalWindowSize:()=>PB});function PB(e,t){let n=!1,r;for(e<=Qx?(r=e,n=!0):r=Ah(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=Ah(e,r+1);return r}function OB(e,t,n){let r=[],s=e.length;for(let a=0;a<s;a++)a!==t?r.push(e[a]):r.push(n);return r}function MB(e,t,n,r){let s=t.shape.length,a=e.shape.length;if(r!==0&&(r<-s||r>s))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(n<r)throw new Error(`batchDims (${r}) must be less than or equal to axis (${n}).`);for(let p=0;p<r;++p)if(e.shape[p]!==t.shape[p])throw new Error(`x.shape[${p}]: ${e.shape[p]} should be equal to indices.shape[${p}]: ${t.shape[p]}.`);let o=e.shape[n],i=[],c=1,u=1,l=1;for(let p=0;p<r;++p)i.push(e.shape[p]),c*=e.shape[p];for(let p=r;p<n;p++)i.push(e.shape[p]),u*=e.shape[p];for(let p=r;p<s;p++)i.push(t.shape[p]);for(let p=n+1;p<a;p++)i.push(e.shape[p]),l*=e.shape[p];return{batchSize:c,sliceSize:l,outerSize:u,dimSize:o,outputShape:i}}function LB(e){try{return e.map(t=>Oh(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function zB(e){return e.map(t=>Ad(t))}var fs={};Ae(fs,{nonMaxSuppressionV3Impl:()=>qT,nonMaxSuppressionV4Impl:()=>jT,nonMaxSuppressionV5Impl:()=>KT,whereImpl:()=>PT});var aC={kernelName:Fc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,bi(ce(n,"float32"),-1))}}},BB={kernelName:Rc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=it(ce(n,"float32")),s=un(de(xe(1),r));return xt(fe(e,s))}}}},WB={kernelName:Pc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=un(de(it(ce(n,"float32")),1));return fe(e,r)}}}},VB={kernelName:ba,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=e,c=Bt(n.shape,s);return c.length>0&&(i=ge(i,c)),W(i,n.shape)},b:()=>{let i=e,c=Bt(r.shape,s);return c.length>0&&(i=ge(i,c)),W(i,r.shape)}}}},UB={kernelName:bo,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((r,s)=>{n[s]=()=>e.clone()}),n}},GB={kernelName:yo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},HB={kernelName:dd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>qe(n)}}},qB={kernelName:Lc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,un(de(xe(1),it(ce(n,"float32")))))}}},jB={kernelName:zc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=un(Y(xe(1),it(ce(n,"float32"))));return fe(e,r)}}}},KB={kernelName:Vc,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=Y(it(n),it(r)),c=B(e,fe(r,i)),u=Bt(n.shape,s);return u.length>0&&(c=ge(c,u)),W(c,n.shape)},b:()=>{let i=Y(it(n),it(r)),c=xt(B(e,fe(n,i))),u=Bt(r.shape,s);return u.length>0&&(c=ge(c,u)),W(c,r.shape)}}}},XB={kernelName:Bc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,Y(it(ce(n,"float32")),1))}}},YB={kernelName:Wc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,de(xe(1),it(ce(n,"float32"))))}}};function ZB(e,t,n,r,s,a){let o=_(e,"dy","avgPool3dGrad"),i=_(t,"input","avgPool3dGrad"),c=o,u=i,l=!1;i.rank===4&&(l=!0,c=W(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),u=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),D(c.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${c.rank}.`),D(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),En("avgPool3dGrad",s,a);let p={dy:c,input:u},d={filterSize:n,strides:r,pad:s,dimRoundingMode:a},h=M.runKernel(hf,p,d);return l?W(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var JB=z({avgPool3dGrad_:ZB}),QB={kernelName:pd,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:a,pad:o,dimRoundingMode:i}=n;return{x:()=>JB(e,r,s,a,o,i)}}};function eW(e,t,n,r,s){let a=_(e,"dy","avgPoolGrad"),o=_(t,"input","avgPoolGrad");D(o.rank===a.rank,()=>`Rank of input (${o.rank}) does not match rank of dy (${a.rank})`);let i=o,c=a,u=!1;o.rank===3&&(u=!0,i=W(o,[1,o.shape[0],o.shape[1],o.shape[2]]),c=W(a,[1,a.shape[0],a.shape[1],a.shape[2]])),D(c.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${c.rank}.`),D(i.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${i.rank}.`);let l={dy:c,input:i},p={filterSize:n,strides:r,pad:s},d=M.runKernel(pf,l,p);return u?W(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var tW=z({avgPoolGrad_:eW}),nW={kernelName:vo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{filterSize:s,strides:a,pad:o}=n;return{x:()=>tW(e,r,s,a,o)}}},rW={kernelName:xo,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[r,s]=t,{transposeA:a,transposeB:o}=n;return!a&&!o?{a:()=>De(e,s,!1,!0),b:()=>De(r,e,!0,!1)}:!a&&o?{a:()=>De(e,s,!1,!1),b:()=>De(e,r,!0,!1)}:a&&!o?{a:()=>De(s,e,!1,!0),b:()=>De(r,e,!1,!1)}:{a:()=>De(s,e,!0,!0),b:()=>De(e,r,!0,!0)}}},sW={kernelName:Uc,gradFunc:(e,t,n)=>{let{blockShape:r,crops:s}=n;return{x:()=>Vd(e,r,s)}}},aW={kernelName:rS,gradFunc:(e,t,n)=>{let r=n,s=r.inputShape,a=r.shape,o=Array.from(a);for(let c=s.length-1;c>=0;c--)if(s[c]===a[c])o[c]=1;else if(s[c]!==1)throw new Error(`broadcastTo(): [${s}] cannot be broadcast to [${a}].`);let i=[];for(let c=0;c<o.length;c++)o[c]>1&&i.push(c);return{x:()=>ge(e,i,!0)}}},oW={kernelName:wo,gradFunc:e=>({x:()=>e.clone()})},iW={kernelName:Io,gradFunc:e=>({x:()=>qe(e)})},cW={kernelName:ya,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{clipValueMin:s,clipValueMax:a}=n;return{x:()=>mn(Dr(Ds(r,s),Ta(r,a)),e,qe(e))}}},uW={kernelName:hd,inputsToSave:["x"],gradFunc:aC.gradFunc},lW={kernelName:Gc,saveAllInputs:!0,gradFunc:(e,t,n)=>{let r=t.map(c=>c.shape),{axis:s}=n,a=Fr(s,t[0].shape)[0],o=r.map(c=>c[a]);return zn(e,o,a).map(c=>()=>c)}},dW={kernelName:ko,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{dilations:a,strides:o,pad:i,dataFormat:c}=n;return D(ca(a),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`),{x:()=>fx(r.shape,e,s,o,i,c),filter:()=>Xx(r,e,s.shape,o,i,c)}}},pW={kernelName:So,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[r,s]=t,{strides:a,pad:o,dataFormat:i,dimRoundingMode:c}=n;return{dy:()=>Dt(e,s,a,o,i,1,c),filter:()=>Xx(e,r,s.shape,a,o,i,c)}}};function hW(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]])),D(a.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${a.shape}.`),D(o.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${o.shape}.`),D(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),D(a.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${a.shape[4]}) must match input depth in filter (${n[3]}.`),D(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},c={strides:r,pad:s,filterShape:n};return M.runKernel(yf,i,c)}var fW=z({conv3DBackpropFilter_:hW}),mW={kernelName:fd,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:a}=n;D(ca(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:()=>nT(o.shape,e,i,s,a),filter:()=>fW(o,e,i.shape,s,a)}}},gW={kernelName:To,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(xt(dm(ce(n,"float32"))),e)}}},bW={kernelName:Co,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(pm(ce(n,"float32")),e)}}},yW={kernelName:No,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s,exclusive:a,reverse:o}=n;return{x:()=>{let i=iT([s],r.rank),c=Jf(e,s,a,!o);return i!=null&&(c=Ee(c,i)),c}}}},vW={kernelName:_o,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:r,strides:s,pad:a,dimRoundingMode:o}=n,i=r==null?[1,1]:r;D(ca(i),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);let[c,u]=t;return D(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${c.rank}.`),D(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),D(c.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),D(ps(s,i),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${s} and dilations '${i}'.`),En("depthwiseConv2d",a,o),{x:()=>UT(c.shape,e,u,s,a,i,o),filter:()=>VT(c,e,u.shape,s,a,i,o)}}},xW={kernelName:md,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($h,a,n),filter:()=>M.runKernel(Dh,o,n)}}},wW={kernelName:Ao,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,r={dy:e,y:n};return{x:()=>M.runKernel(Tf,r)}}},IW={kernelName:Kc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=B(gn(xt(it(n))),2/Math.sqrt(Math.PI));return{x:()=>B(e,r)}}},kW={kernelName:$o,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,n)}}},SW={kernelName:Yc,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>W(e,n.shape)}}},TW={kernelName:Zc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,gn(n))}}},CW={kernelName:Do,gradFunc:e=>({x:()=>qe(e)})},NW={kernelName:Fo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=fe(e,ce(r,"float32")),c=Bt(n.shape,s);return c.length>0?W(ge(i,c),n.shape):i},b:()=>{let i=B(e,ce(n,"float32")),c=Bt(r.shape,s);c.length>0&&(i=W(ge(i,c),r.shape));let u=it(r);return xt(fe(i,ce(u,"float32")))}}}},_W={kernelName:Ro,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:r}=n,[s,a,o,i]=t,c=i==null?xe(1):i,u=Bt(a.shape,s.shape),l=[];if(a.rank===1){for(let x=0;x<s.shape.length-1;++x)l.push(s.shape[x]);l.push(1)}let p=de(s,a),d=B(e,c),h=um(Y(o,xe(r))),f=B(B(B(h,h),h),xe(-.5));return{x:()=>a.rank===1?W(B(B(e,Ln(W(h,[1,1,1,a.shape[0]]),l)),c),s.shape):W(B(B(e,h),c),s.shape),mean:()=>{let x=B(B(h,xe(-1)),d);return a.rank===1&&(x=ge(x,u)),W(x,a.shape)},variance:()=>{let x=B(B(f,p),d);return a.rank===1&&(x=ge(x,u)),W(x,a.shape)},scale:()=>{let x=B(p,h),k=B(e,x);return a.rank===1&&(k=ge(k,u)),W(k,a.shape)},offset:()=>{let x=e;return a.rank===1&&(x=ge(x,u)),W(x,a.shape)}}}},EW={kernelName:Qc,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[r,s]=t,{axis:a}=n,o=Fr(a,r.shape)[0];return{x:()=>{let c=r.shape,u=s.size,l=c.slice(0,o),p=l.length,d=c.slice(a,c.length).slice(1),h=d.length,f=Ik(0,p),m=Ik(p+1,p+1+h),g=kk([l,[u],d]),b=W(e,g),y=W(s,[u]),v=kk([[p],f,m]),x=Ee(b,v),k=bm(x,y,r.shape[o]),S=kx(v);return k=Ee(k,S),k},indices:()=>s}}};function Ik(e,t){let n=[];for(let r=e;r<t;++r)n.push(r);return n}function kk(e){let t=[];for(let n=0;n<e.length;++n)for(let r=0;r<e[n].length;++r)t.push(e[n][r]);return t}var AW={kernelName:Po,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>qe(n),b:()=>qe(r)}}},$W={kernelName:Oo,gradFunc:e=>({x:()=>ce(e,"float32")})},DW={kernelName:nu,gradFunc:e=>({x:()=>qe(e)})},FW={kernelName:ru,gradFunc:e=>({x:()=>qe(e)})},RW={kernelName:su,gradFunc:e=>({x:()=>qe(e)})},PW={kernelName:Mo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{alpha:s}=n,a=An(r,0);return{x:()=>mn(a,e,B(e,s))}}},OW={kernelName:iu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,Y(n,1))}}},MW={kernelName:Lo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ce(n,"float32"))}}},LW={kernelName:aS,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n;return{logits:()=>{let o=gn(r);return de(e,B(ge(e,s,!0),o))}}}};function zW(e,t,n,r=5,s=1,a=1,o=.5){let i={x:e,y:t,dy:n},c={depthRadius:r,bias:s,alpha:a,beta:o};return M.runKernel(Af,i,c)}var BW=z({localResponseNormalizationBackprop_:zW}),WW={kernelName:bd,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{depthRadius:a,bias:o,alpha:i,beta:c}=n;return{x:()=>BW(r,s,e,a,o,i,c)}}};function oC(e,t,n,r){return t.rank<n.rank&&(t=W(t,io(t.shape,r))),e.rank<n.rank&&(e=W(e,io(e.shape,r))),{x:()=>B(e,ce(tr(n,t),e.dtype))}}var Sk={kernelName:zo,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),c=oC(e,o,a,i);return{x:()=>c.x()}}},VW={kernelName:Bo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>B(e,ce(Ds(n,r),"float32")),b:()=>B(e,ce(em(n,r),"float32"))}}};function UW(e,t,n,r,s,a,o){let i=_(e,"dy","maxPool3dGrad"),c=_(t,"input","maxPool3dGrad"),u=_(n,"output","maxPool3dGrad"),l=i,p=c,d=u,h=!1;c.rank===4&&(h=!0,l=W(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),p=W(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]]),d=W(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),D(l.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),D(p.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${p.rank}.`),D(d.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${d.rank}.`),En("maxPool3dGrad",a,o);let f={dy:l,input:p,output:d},m={filterSize:r,strides:s,pad:a,dimRoundingMode:o},g=M.runKernel(Df,f,m);return h?W(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var GW=z({maxPool3dGrad_:UW}),HW={kernelName:yd,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:c}=n;return{x:()=>GW(e,r,s,a,o,i,c)}}};function qW(e,t,n,r,s,a,o){let i=_(e,"dy","maxPoolGrad"),c=_(t,"input","maxPoolGrad"),u=_(n,"output","maxPoolGrad");D(c.rank===i.rank,()=>`Rank of input (${c.rank}) does not match rank of dy (${i.rank})`),D(i.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${i.rank}.`),D(c.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${c.rank}.`),En("maxPoolGrad",a,o);let l={dy:i,input:c,output:u},p={filterSize:r,strides:s,pad:a,dimRoundingMode:o};return M.runKernel($f,l,p)}var jW=z({maxPoolGrad_:qW}),KW={kernelName:Wo,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r,s]=t,{filterSize:a,strides:o,pad:i}=n;return{x:()=>jW(e,r,s,a,o,i)}}},XW={kernelName:Vo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{axis:s}=n,a=Fr(s,r.shape),i=oT(r.shape,a)[1],c=ht(i);return{x:()=>{let l=r.shape.slice();a.forEach(h=>{l[h]=1});let p=W(e,l);return fe(B(p,Qn(r.shape,"float32")),c)}}}},YW={kernelName:Uo,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let r=n,{axis:s}=r,[a,o]=t,i=Fr(s,a.shape),c=oC(e,o,a,i);return{x:()=>c.x()}}},ZW={kernelName:Go,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t;return{a:()=>B(e,ce(Ta(n,r),"float32")),b:()=>B(e,ce(An(n,r),"float32"))}}},JW={kernelName:Ho,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,a=s.map(o=>o[0]);return{x:()=>We(e,a,r.shape)}}},QW={kernelName:du,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=Bt(n.shape,s);return i.length>0?W(ge(e,i),n.shape):e},b:()=>{let i=B(e,xt(Bu(fe(n,r)))),c=Bt(r.shape,s);return c.length>0?W(ge(i,c),r.shape):i}}}},e4={kernelName:qo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=B(e,ce(r,"float32")),c=Bt(n.shape,s);return c.length>0?W(ge(i,c),n.shape):i},b:()=>{let i=B(e,ce(n,"float32")),c=Bt(r.shape,s);return c.length>0?W(ge(i,c),r.shape):i}}}},t4={kernelName:pu,gradFunc:e=>({x:()=>xt(e)})},n4={kernelName:jo,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>kt(n.shape,"float32")}}},r4={kernelName:bu,gradFunc:e=>({x:()=>qe(e)})},s4={kernelName:yu,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:r}=n;return lt(e,r).map(a=>()=>a)}},Tk={kernelName:Ko,inputsToSave:["x"],gradFunc:(e,t,n)=>{let r=t[0],{paddings:s}=n,a=s.map(o=>o[0]);return{x:()=>We(e,a,r.shape)}}},a4={kernelName:Xo,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,r,s]=t,a=n,o=r,i=ct(a.shape,o.shape);return{a:()=>{let l=ce(o,"float32"),p=B(e,B(l,$s(a,de(l,xe(1))))),d=Bt(a.shape,i);return d.length>0&&(p=ge(p,d)),W(p,a.shape)},b:()=>{let l=An(a,0),p=mn(l,nr(a),qe(a)),d=B(e,B(s,p)),h=Bt(o.shape,i);return h.length>0&&(d=ge(d,h)),W(d,o.shape)}}}},o4={kernelName:Yo,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,r]=t,s=An(n,0);return{x:()=>mn(s,e,B(e,r)),alpha:()=>{let a=mn(s,qe(e),B(e,n)),o=Bt(r.shape,e.shape);return o.length>0&&(a=ge(a,o)),W(a,r.shape)}}}};function i4(e,t,n){let r=e.shape.slice();r[n]=1;let s=W(t,r),a=ed(e,n,!0,!1),o=ed(e,n,!0,!0),i=B(a,o);return B(s,i)}function c4(e,t,n){let r=e.shape.length,s=r-n.length,a=N.getAxesPermutation(n,r),o=e;a!=null&&(o=Ee(e,a));let i=o.shape.slice(),u=i.splice(r-n.length,n.length).reduce((d,h)=>d*h,1);i.push(u);let l=o.reshape(i),p=i4(l,t,s);if(p=p.reshape(o.shape),a!=null){let d=N.getUndoAxesPermutation(a);p=Ee(p,d)}return p}var u4={kernelName:Zo,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:()=>c4(r,e,a)}}},l4={kernelName:Eo,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=fe(e,ce(r,"float32")),c=Bt(n.shape,s);return c.length>0?W(ge(i,c),n.shape):i},b:()=>{let i=B(e,ce(n,"float32")),c=Bt(r.shape,s);c.length>0&&(i=W(ge(i,c),r.shape));let u=it(r);return xt(fe(i,ce(u,"float32")))}}}},d4={kernelName:vu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,xt(it(n)))}}},p4={kernelName:ti,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,r=B(Ta(n,6),bi(n));return{x:()=>B(e,ce(r,"float32"))}}},h4={kernelName:Jo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,ce(bi(n),"float32"))}}},f4={kernelName:xu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n.shape)}}},m4={kernelName:ei,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>M.runKernel(Bf,s,n)}}},g4={kernelName:Qo,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[r]=t,s={dy:e,images:r};return{images:()=>M.runKernel(zf,s,n)}}},b4={kernelName:ni,gradFunc:(e,t,n)=>{let{dims:r}=n,s=Fr(r,e.shape);return{x:()=>fr(e,s)}}},y4={kernelName:ri,gradFunc:e=>({x:()=>qe(e)})},v4={kernelName:si,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>xt(fe(e,B($s(n,1.5),2)))}}},x4={kernelName:Iu,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>ce(qe(n),"float32"),t:()=>B(e,ce(n,e.dtype)),e:()=>B(e,ce(Bd(n),e.dtype))}}},w4={kernelName:ku,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let r=An(n,xe(0)),s=xe(nC),a=xe(rC),o=B(e,a),i=B(B(e,s),gn(ce(n,"float32")));return mn(r,o,i)}}}},I4={kernelName:oi,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,B(n,de(xe(1),n)))}}},k4={kernelName:Cu,gradFunc:e=>({x:()=>qe(e)})},S4={kernelName:ai,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(Md(ce(n,"float32")),e)}}},T4={kernelName:Tu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(Zf(ce(n,"float32")),e)}}},C4={kernelName:Su,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{begin:s,size:a}=n,o=r.shape,[i,c]=HS(r,s,a),u=[];for(let l=0;l<e.rank;l++)u.push([i[l],o[l]-i[l]-c[l]]);return{x:()=>gr(e,u)}}},N4={kernelName:ui,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[r]=t,{dim:s}=n,a=!0,o=B(e,r);return{logits:()=>de(o,B(ge(o,[s],a),r))}}},_4={kernelName:Nu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,dr(n))}}},Ck={kernelName:_u,gradFunc:(e,t,n)=>{let{blockShape:r,paddings:s}=n;return{x:()=>Od(e,r,s)}}},Nk={kernelName:Eu,gradFunc:(e,t,n)=>{let{axis:r}=n;return{x:()=>Je(e,r)}}},E4={kernelName:ii,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,B(un(ce(n,"float32")),2))}}},A4={kernelName:kd,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(e,B(ce(n,"float32"),2))}}},$4={kernelName:li,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=xe(2);return{a:()=>B(e,B(s,de(n,r))),b:()=>B(e,B(s,de(r,n)))}}},D4={kernelName:xa,gradFunc:e=>({x:()=>qe(e)})},F4={kernelName:di,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,r]=t,s=ct(n.shape,r.shape);return{a:()=>{let i=e,c=Bt(n.shape,s);return c.length>0&&(i=ge(i,c)),W(i,n.shape)},b:()=>{let i=e,c=Bt(r.shape,s);return c.length>0&&(i=ge(i,c)),W(xt(i),r.shape)}}}},R4={kernelName:ci,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,s=r.shape.slice(),{axis:a}=n;Fr(a,r.shape).forEach(u=>{s[u]=1});let i=W(e,s),c=B(i,Qn(r.shape,"float32"));return{x:()=>c}}},P4={kernelName:pi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,it(Md(n)))}}},O4={kernelName:hi,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>B(de(xe(1),it(n)),e)}}},M4={kernelName:va,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[r]=t,{reps:s}=n;return{x:()=>{let o=qe(r);if(r.rank===1)for(let i=0;i<s[0];++i)o=Y(o,We(e,[i*r.shape[0]],[r.shape[0]]));else if(r.rank===2)for(let i=0;i<s[0];++i)for(let c=0;c<s[1];++c)o=Y(o,We(e,[i*r.shape[0],c*r.shape[1]],[r.shape[0],r.shape[1]]));else if(r.rank===3)for(let i=0;i<s[0];++i)for(let c=0;c<s[1];++c)for(let u=0;u<s[2];++u)o=Y(o,We(e,[i*r.shape[0],c*r.shape[1],u*r.shape[2]],[r.shape[0],r.shape[1],r.shape[2]]));else if(r.rank===4)for(let i=0;i<s[0];++i)for(let c=0;c<s[1];++c)for(let u=0;u<s[2];++u)for(let l=0;l<s[3];++l)o=Y(o,We(e,[i*r.shape[0],c*r.shape[1],u*r.shape[2],l*r.shape[3]],[r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${r.rank} tensors yet.`);return o}}}},L4={kernelName:_s,gradFunc:(e,t,n)=>{let r=n,{perm:s}=r,a=kx(s);return{x:()=>Ee(e,a)}}},z4={kernelName:Ru,gradFunc:(e,t,n)=>{let r=n,{axis:s}=r;return{value:()=>Ft(e,s)}}},B4={kernelName:Nd,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W4(e,n)}}};function W4(e,t){let n=hs(t,qe(t)),r=Wu(e,n),s=Ds(t,xe(0,"int32")),a=r.rank-s.rank;for(let i=0;i<a;++i)s=Zt(s,i+1);s=Dr(s,Qn(r.shape,"bool"));let o=qe(r);return mn(s,r,o)}var V4={kernelName:Pu,gradFunc:e=>({x:()=>qe(e)})},U4=[aC,BB,WB,VB,UB,GB,HB,qB,jB,KB,XB,YB,QB,nW,rW,sW,aW,oW,iW,cW,uW,lW,pW,dW,mW,gW,bW,yW,vW,xW,l4,wW,IW,kW,SW,TW,NW,CW,_W,EW,AW,$W,DW,FW,RW,PW,OW,MW,LW,WW,Sk,Sk,VW,HW,KW,XW,YW,ZW,JW,QW,e4,t4,n4,r4,s4,Tk,Tk,a4,o4,u4,d4,p4,h4,f4,m4,g4,b4,y4,v4,x4,w4,I4,k4,S4,T4,C4,N4,_4,Ck,Ck,Nk,Nk,E4,$4,A4,D4,F4,R4,P4,O4,M4,L4,z4,B4,V4];for(let e of U4)oS(e);Q().prototype.abs=function(){return this.throwIfDisposed(),Lt(this)};Q().prototype.acos=function(){return this.throwIfDisposed(),Xv(this)};Q().prototype.acosh=function(){return this.throwIfDisposed(),Yv(this)};Q().prototype.add=function(e){return this.throwIfDisposed(),Y(this,e)};Q().prototype.all=function(e,t){return this.throwIfDisposed(),Kf(this,e,t)};Q().prototype.any=function(e,t){return this.throwIfDisposed(),Ql(this,e,t)};Q().prototype.argMax=function(e){return this.throwIfDisposed(),ao(this,e)};Q().prototype.argMin=function(e){return this.throwIfDisposed(),Zv(this,e)};Q().prototype.asScalar=function(){return this.throwIfDisposed(),D(this.size===1,()=>"The array must have only 1 element."),W(this,[])};Q().prototype.asType=function(e){return this.throwIfDisposed(),ce(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(),Jv(this)};Q().prototype.asinh=function(){return this.throwIfDisposed(),Qv(this)};Q().prototype.atan=function(){return this.throwIfDisposed(),ex(this)};Q().prototype.atan2=function(e){return this.throwIfDisposed(),tx(this,e)};Q().prototype.atanh=function(){return this.throwIfDisposed(),nx(this)};Q().prototype.avgPool=function(e,t,n,r){return this.throwIfDisposed(),mr(this,e,t,n,r)};Q().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Od(this,e,t)};Q().prototype.batchNorm=function(e,t,n,r,s){return this.throwIfDisposed(),ka(this,e,t,n,r,s)};Q().prototype.broadcastTo=function(e){return this.throwIfDisposed(),Ya(this,e)};Q().prototype.cast=function(e){return this.throwIfDisposed(),ce(this,e)};Q().prototype.ceil=function(){return this.throwIfDisposed(),ux(this)};Q().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),en(this,e,t)};Q().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Te&&(e=[e]),Je([this,...e],t)};Q().prototype.conv1d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Xf(this,e,t,n,r,s,a)};Q().prototype.conv2dTranspose=function(e,t,n,r,s){return this.throwIfDisposed(),Yf(this,e,t,n,r,s)};Q().prototype.conv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Dt(this,e,t,n,r,s,a)};Q().prototype.cos=function(){return this.throwIfDisposed(),Md(this)};Q().prototype.cosh=function(){return this.throwIfDisposed(),Zf(this)};Q().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),ed(this,e,t,n)};Q().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),Jf(this,e,t,n)};Q().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),bx(this,e,t)};Q().prototype.depthwiseConv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Sa(this,e,t,n,r,s,a)};Q().prototype.dilation2d=function(e,t,n,r,s){return this.throwIfDisposed(),yx(this,e,t,n,r,s)};Q().prototype.divNoNan=function(e){return this.throwIfDisposed(),vx(this,e)};Q().prototype.div=function(e){return this.throwIfDisposed(),fe(this,e)};Q().prototype.dot=function(e){return this.throwIfDisposed(),xx(this,e)};Q().prototype.elu=function(){return this.throwIfDisposed(),Lu(this)};Q().prototype.equal=function(e){return this.throwIfDisposed(),tr(this,e)};Q().prototype.erf=function(){return this.throwIfDisposed(),wx(this)};Q().prototype.euclideanNorm=function(e,t){return this.throwIfDisposed(),Sx(this,e,t)};Q().prototype.exp=function(){return this.throwIfDisposed(),gn(this)};Q().prototype.expandDims=function(e){return this.throwIfDisposed(),Zt(this,e)};Q().prototype.expm1=function(){return this.throwIfDisposed(),Tx(this)};Q().prototype.fft=function(){return this.throwIfDisposed(),Hd(this)};Q().prototype.flatten=function(){return this.throwIfDisposed(),W(this,[this.size])};Q().prototype.floor=function(){return this.throwIfDisposed(),Bu(this)};Q().prototype.floorDiv=function(e){return this.throwIfDisposed(),jf(this,e)};Q().prototype.gather=function(e,t){return this.throwIfDisposed(),Wu(this,e,t)};Q().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Ds(this,e)};Q().prototype.greater=function(e){return this.throwIfDisposed(),An(this,e)};Q().prototype.ifft=function(){return this.throwIfDisposed(),wc(this)};Q().prototype.irfft=function(){return this.throwIfDisposed(),fm(this)};Q().prototype.isFinite=function(){return this.throwIfDisposed(),Cx(this)};Q().prototype.isInf=function(){return this.throwIfDisposed(),Nx(this)};Q().prototype.isNaN=function(){return this.throwIfDisposed(),_x(this)};Q().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Ld(this,e)};Q().prototype.lessEqual=function(e){return this.throwIfDisposed(),Ta(this,e)};Q().prototype.less=function(e){return this.throwIfDisposed(),em(this,e)};Q().prototype.localResponseNormalization=function(e,t,n,r){return this.throwIfDisposed(),Ex(this,e,t,n,r)};Q().prototype.logSigmoid=function(){return this.throwIfDisposed(),Ax(this)};Q().prototype.logSoftmax=function(e){return this.throwIfDisposed(),nm(this,e)};Q().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),rm(this,e,t)};Q().prototype.log=function(){return this.throwIfDisposed(),nr(this)};Q().prototype.log1p=function(){return this.throwIfDisposed(),zd(this)};Q().prototype.logicalAnd=function(e){return this.throwIfDisposed(),Dr(this,e)};Q().prototype.logicalNot=function(){return this.throwIfDisposed(),Bd(this)};Q().prototype.logicalOr=function(e){return this.throwIfDisposed(),sm(this,e)};Q().prototype.logicalXor=function(e){return this.throwIfDisposed(),$x(this,e)};Q().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),De(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(),pr(this,e,t)};Q().prototype.maximum=function(e){return this.throwIfDisposed(),hs(this,e)};Q().prototype.mean=function(e,t){return this.throwIfDisposed(),Ct(this,e,t)};Q().prototype.min=function(e,t){return this.throwIfDisposed(),yc(this,e,t)};Q().prototype.minimum=function(e){return this.throwIfDisposed(),Vu(this,e)};Q().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),Fx(this,e,t)};Q().prototype.mod=function(e){return this.throwIfDisposed(),Rx(this,e)};Q().prototype.mul=function(e){return this.throwIfDisposed(),B(this,e)};Q().prototype.neg=function(){return this.throwIfDisposed(),xt(this)};Q().prototype.norm=function(e,t,n){return this.throwIfDisposed(),zu(this,e,t,n)};Q().prototype.notEqual=function(e){return this.throwIfDisposed(),co(this,e)};Q().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),gc(this,e,t,n)};Q().prototype.onesLike=function(){return this.throwIfDisposed(),rr(this)};Q().prototype.pad=function(e,t){return this.throwIfDisposed(),gr(this,e,t)};Q().prototype.pool=function(e,t,n,r,s,a){return this.throwIfDisposed(),Px(this,e,t,n,r,s,a)};Q().prototype.pow=function(e){return this.throwIfDisposed(),$s(this,e)};Q().prototype.prelu=function(e){return this.throwIfDisposed(),Ud(this,e)};Q().prototype.prod=function(e,t){return this.throwIfDisposed(),Ox(this,e,t)};Q().prototype.reciprocal=function(){return this.throwIfDisposed(),zx(this)};Q().prototype.relu=function(){return this.throwIfDisposed(),Xe(this)};Q().prototype.relu6=function(){return this.throwIfDisposed(),im(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(),XT(this,e,t,n)};Q().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),YT(this,e,t,n)};Q().prototype.reverse=function(e){return this.throwIfDisposed(),fr(this,e)};Q().prototype.rfft=function(){return this.throwIfDisposed(),qd(this)};Q().prototype.round=function(){return this.throwIfDisposed(),cm(this)};Q().prototype.rsqrt=function(){return this.throwIfDisposed(),um(this)};Q().prototype.selu=function(){return this.throwIfDisposed(),lm(this)};Q().prototype.separableConv2d=function(e,t,n,r,s,a){return this.throwIfDisposed(),Ca(this,e,t,n,r,s,a)};Q().prototype.sigmoid=function(){return this.throwIfDisposed(),dr(this)};Q().prototype.sign=function(){return this.throwIfDisposed(),Bx(this)};Q().prototype.sin=function(){return this.throwIfDisposed(),dm(this)};Q().prototype.sinh=function(){return this.throwIfDisposed(),pm(this)};Q().prototype.slice=function(e,t){return this.throwIfDisposed(),We(this,e,t)};Q().prototype.softmax=function(e){return this.throwIfDisposed(),Xr(this,e)};Q().prototype.softplus=function(){return this.throwIfDisposed(),mi(this)};Q().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Vd(this,e,t)};Q().prototype.split=function(e,t){return this.throwIfDisposed(),zn(this,e,t)};Q().prototype.sqrt=function(){return this.throwIfDisposed(),un(this)};Q().prototype.square=function(){return this.throwIfDisposed(),it(this)};Q().prototype.squaredDifference=function(e){return this.throwIfDisposed(),mm(this,e)};Q().prototype.squeeze=function(e){return this.throwIfDisposed(),Na(this,e)};Q().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Te?[this,e]:[this,...e];return Ft(n,t)};Q().prototype.step=function(e){return this.throwIfDisposed(),bi(this,e)};Q().prototype.stridedSlice=function(e,t,n,r,s,a,o,i){return this.throwIfDisposed(),Wx(this,e,t,n,r,s,a,o,i)};Q().prototype.sub=function(e){return this.throwIfDisposed(),de(this,e)};Q().prototype.sum=function(e,t){return this.throwIfDisposed(),ge(this,e,t)};Q().prototype.tan=function(){return this.throwIfDisposed(),Vx(this)};Q().prototype.tanh=function(){return this.throwIfDisposed(),oo(this)};Q().prototype.tile=function(e){return this.throwIfDisposed(),Ln(this,e)};Q().prototype.toBool=function(){return this.throwIfDisposed(),ce(this,"bool")};Q().prototype.toFloat=function(){return this.throwIfDisposed(),ce(this,"float32")};Q().prototype.toInt=function(){return this.throwIfDisposed(),ce(this,"int32")};Q().prototype.topk=function(e,t){return this.throwIfDisposed(),Ux(this,e,t)};Q().prototype.transpose=function(e){return this.throwIfDisposed(),Ee(this,e)};Q().prototype.unique=function(e){return this.throwIfDisposed(),Gx(this,e)};Q().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),bm(this,e,t)};Q().prototype.unstack=function(e){return this.throwIfDisposed(),lt(this,e)};Q().prototype.where=function(e,t){return this.throwIfDisposed(),mn(e,this,t)};Q().prototype.zerosLike=function(){return this.throwIfDisposed(),qe(this)};var ks=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,ks.prototype)}},Wr=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Wr.prototype)}},U=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,U.prototype)}},Pe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Pe.prototype)}},iC=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,iC.prototype)}},cC=class{constructor(e){this.maxEntries=e||100,this.cache=new Map}get(e){let t;return this.cache.has(e)&&(t=this.cache.get(e),this.cache.delete(e),this.cache.set(e,t)),t}put(e,t){if(this.cache.has(e))this.cache.delete(e);else if(this.cache.size>=this.maxEntries){let n=this.cache.keys().next().value;this.cache.delete(n)}this.cache.set(e,t)}getMaxEntries(){return this.maxEntries}setMaxEntries(e){if(e<0)throw new Error(`The maxEntries of LRU caches must be at least 0, but got ${e}.`);if(this.maxEntries>e)for(let t=0;t<this.maxEntries-e;t++){let n=this.cache.keys().next().value;this.cache.delete(n)}this.maxEntries=e}};function uo(e,t){if(Array.isArray(e)){let n=[];for(let r=0;r<t;r++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function ss(e,t){if(!e)throw new iC(t)}function _k(e,t){let n=0;for(let r of e)r===t&&n++;return n}function Mn(e){return e.length===1?e[0]:e}function vt(e){return Array.isArray(e)?e:[e]}function Ss(e){let n=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return n[0]!=="_"?n:"private"+n}function Ga(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var Tr={};function ew(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function Uy(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>Uy(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:Uy(r))}}}function Kd(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 Tr)o=Tr[a];else if(o=t[a],o==null)throw new U(`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 U(`${r}: Improper config format: ${JSON.stringify(a)}.
|
|
'className' and 'config' must set.`);let o=a.className,i,c;if(o in n?[i,c]=n[o]:o in Tr?[i,c]=Tr.className:o in t&&([i,c]=t[o]),i==null)throw new U(`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(c!=null){let u={};for(let h of Object.keys(Tr))u[h]=Tr[h];for(let h of Object.keys(n))u[h]=n[h];let l=a.config;l.customObjects=u;let p=Object.assign({},Tr);for(let h of Object.keys(n))Tr[h]=n[h];Uy(a.config);let d=c(i,a.config,n,s);return Tr=Object.assign({},p),d}else{let u=Object.assign({},Tr);for(let p of Object.keys(n))Tr[p]=n[p];let l=new i(a.config);return Tr=Object.assign({},u),l}}}function G4(e,t){return e<t?-1:e>t?1:0}function ih(e,t){return-1*G4(e,t)}function sa(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function H4(e){if(e==null)throw new U(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function yi(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new U(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function tw(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 Qt(e,t){Array.isArray(e)?(w.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,r)=>Qt(n,`element ${r+1} of ${t}`))):w.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${uC(e)}.`)}function uC(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>uC(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function q4(e,t,n){let r=n!=null?n():w.now(),s;return(...o)=>{let i=n!=null?n():w.now();return i-r<t||(r=i,s=e(...o)),s}}function lC(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}var j4=0;function dC(){return j4++}var ch={};function Em(e=""){return e in ch||(ch[e]=0),ch[e]+=1,e+ch[e].toString()}var K4=["channelsFirst","channelsLast"],X4=["nearest","bilinear"],Y4=["valid","same","causal"],Z4=["max","avg"],J4=["sum","mul","concat","ave"],rc=new Map;function Pt(e){yi(K4,"DataFormat",e)}function Q4(e){yi(X4,"InterpolationFormat",e)}function br(e){yi(Y4,"PaddingMode",e)}function pC(e){yi(Z4,"PoolMode",e)}var Hl=[],Ek="/";function Za(e,t){Hl.push(e);try{let n=t();return Hl.pop(),n}catch(n){throw Hl.pop(),n}}function eV(){return Hl.length===0?"":Hl.join(Ek)+Ek}function hC(e){if(!mC(e))throw new Error("Not a valid tensor name: '"+e+"'");return eV()+e}function fC(e){if(!mC(e))throw new Error("Not a valid tensor name: '"+e+"'");rc.has(e)||rc.set(e,0);let t=rc.get(e);if(rc.set(e,rc.get(e)+1),t>0){let n=`${e}_${t}`;return rc.set(n,1),n}else return e}var tV=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function mC(e){return!!e.match(tV)}function nV(e){return e===parseInt(e.toString(),10)}function aa(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let r=1;for(let s=t;s<n;++s)r*=e[s];return r}function kc(e){if(e.length===0)return Number.NaN;let t=Number.POSITIVE_INFINITY;for(let n=0;n<e.length;n++){let r=e[n];r<t&&(t=r)}return t}function ua(e){if(e.length===0)return Number.NaN;let t=Number.NEGATIVE_INFINITY;for(let n=0;n<e.length;n++){let r=e[n];r>t&&(t=r)}return t}function qr(e,t){if(t<e)throw new U(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let r=e;r<t;++r)n.push(r);return n}var vy;function Gt(){return vy==null&&(vy=DS().epsilon()),vy}function jr(){return"channelsLast"}function vi(e,t){return ce(e,t)}function Xd(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),W(e,n)}function rV(e,t){return O(()=>{if(e.shape.length!==2)throw new U(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=Xd(e,1);return Gy(n,[1,t,1])})}function sV(e){let t=[aa(e.shape)];return W(e,t)}function aV(e){if(e.rank<=1)throw new U(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],aa(e.shape,1)];return W(e,t)}function Ja(e,t,n){return O(()=>{switch(e.rank){case 1:return Gd(e,t,n);case 2:return hm(e,[t,0],[n,e.shape[1]]);case 3:return gi(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return xc(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return We(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return We(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 U(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function xy(e,t,n){return O(()=>{switch(e.rank){case 1:return Gd(e,t,n);case 2:return hm(e,[0,t],[e.shape[0],n]);case 3:return gi(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return xc(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new U(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function uh(e,t,n,r){return O(()=>{switch(e.rank){case 1:return Gd(e,t,n);case 2:switch(r){case 1:return Ja(e,t,n);case 2:return xy(e,t,n);default:throw new U(`The axis is not within the rank of the tensor ${r}`)}case 3:switch(r){case 1:return Ja(e,t,n);case 2:return gi(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return xy(e,t,n);default:throw new U(`The axis is not within the rank of the tensor ${r}`)}case 4:switch(r){case 1:return Ja(e,t,n);case 2:return xc(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return xc(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return xy(e,t,n);default:throw new U(`The axis is not within the rank of the tensor ${r}`)}default:throw new U(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function nw(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),Je(e,t)}function Ak(e,t){switch(e.rank){case 1:return lx([e,t]);case 2:return dx([e,t],0);case 3:return px([e,t],0);case 4:return hx([e,t],0);default:throw new U(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function Gy(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new U(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return Ln(e,t)}function Am(e,t=0,n=1,r,s){return om(e,t,n,r,s)}function cs(e,t,n,r){if(e.rank<2||t.rank<2)throw new Pe(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let s=e.shape.slice(-1)[0],a=t.shape.slice(-2)[0];if(s!==a)throw new Pe(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2)return Ic.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:r?Hy(e.rank,r,jr()):null,activation:n});{let s=e.shape.slice(),a=s.pop();e=W(e,[-1,a]);let o=t.shape.slice(),i=o.pop(),c=o.pop(),u=[...o,i],l=Array.from({length:t.rank},(f,m)=>m===0?t.rank-2:m<=t.rank-2?m-1:m);t=W(Ee(t,l),[c,-1]);let p=[...s,...u],d=!1,h=!1;return W(Ic.matMul({a:e,b:t,transposeA:d,transposeB:h,bias:r?Hy(e.rank,r,jr()):null,activation:n}),p)}}function gC(e,t,n){return O(()=>(Array.isArray(t)?t=Ke(t,"int32"):t=ce(t,"int32"),Wu(e,t,n)))}function Yd(e){return B(e,e)}function Hy(e,t,n){let r=t.shape;if(t.rank!==1&&t.rank!==e)throw new U(`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 U(`Unsupported input rank by biasAdd: ${t.rank}`)}function Yr(e,t,n){return O(()=>(n==null&&(n=jr()),Pt(n),Y(e,Hy(e.rank,t,n))))}function oV(e,t=1){if(t!==1)throw new Pe(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Lu(e)}function iV(e){return O(()=>fe(e,Y(Lt(e),1)))}function bC(e,t,n,r){return O(()=>jx(e,t,n,r))}function cV(e){return O(()=>{let t=Y(.5,B(.2,e));return en(t,0,1)})}function Zd(e,t,n=!1){return n?e():t()}var uV=["fanIn","fanOut","fanAvg"],lV=["normal","uniform","truncatedNormal"];function dV(e){yi(uV,"FanMode",e)}function pV(e){yi(lV,"Distribution",e)}var Pr=class extends se.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},rw=class extends Pr{apply(e,t){return kt(e,t)}};rw.className="Zeros";se.registerClass(rw);var $m=class extends Pr{apply(e,t){return Qn(e,t)}};$m.className="Ones";se.registerClass($m);var sw=class extends Pr{constructor(e){if(super(),typeof e!="object")throw new U(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new U(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return O(()=>B(xe(this.value),Qn(e,t)))}getConfig(){return{value:this.value}}};sw.className="Constant";se.registerClass(sw);var aw=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 Uu(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};aw.className="RandomUniform";se.registerClass(aw);var ow=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 Pe(`randomNormal does not support dType ${t}.`);return Am(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};ow.className="RandomNormal";se.registerClass(ow);var iw=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 Pe(`truncatedNormal does not support dType ${t}.`);return gm(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};iw.className="TruncatedNormal";se.registerClass(iw);var cw=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 U("Identity matrix initializer can only be used for 2D square matrices.");return B(this.gain,Qf(e[0]))})}getConfig(){return{gain:this.gain}}};cw.className="Identity";se.registerClass(cw);function hV(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=aa(e,2);n=e[1]*s,r=e[0]*s}else if(t==="channelsLast"){let s=aa(e,0,e.length-2);n=e[e.length-2]*s,r=e[e.length-1]*s}}else{let s=aa(e);n=Math.sqrt(s),r=Math.sqrt(s)}return[n,r]}var Wn=class extends Pr{constructor(e){if(super(),e.scale<0)throw new U(`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,dV(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,pV(this.distribution),this.seed=e.seed}apply(e,t){let n=hV(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 Pe(`${this.getClassName()} does not support dType ${t}.`);return gm(e,0,o,t,this.seed)}else{let o=Math.sqrt(3*a);return Uu(e,-o,o,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Wn.className="VarianceScaling";se.registerClass(Wn);var Dm=class extends Wn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Dm.className="GlorotUniform";se.registerClass(Dm);var Fm=class extends Wn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Fm.className="GlorotNormal";se.registerClass(Fm);var Rm=class extends Wn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Rm.className="HeNormal";se.registerClass(Rm);var Pm=class extends Wn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Pm.className="HeUniform";se.registerClass(Pm);var Om=class extends Wn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Om.className="LeCunNormal";se.registerClass(Om);var Mm=class extends Wn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Wn.className}};Mm.className="LeCunNormal";se.registerClass(Mm);var uw=class extends Pr{constructor(e){if(super(),this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new Pe("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return O(()=>{if(e.length<2)throw new Pe("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,r=Am(n,0,1,"float32"),s=Zx.gramSchmidt(r);return e[0]>e[1]&&(s=Ee(s)),B(this.gain,s)})}getConfig(){return{gain:this.gain,seed:this.seed}}};uw.className="Orthogonal";se.registerClass(uw);var $k={constant:"Constant",glorotNormal:"GlorotNormal",glorotUniform:"GlorotUniform",heNormal:"HeNormal",heUniform:"HeUniform",identity:"Identity",leCunNormal:"LeCunNormal",leCunUniform:"LeCunUniform",ones:"Ones",orthogonal:"Orthogonal",randomNormal:"RandomNormal",randomUniform:"RandomUniform",truncatedNormal:"TruncatedNormal",varianceScaling:"VarianceScaling",zeros:"Zeros"};function Dk(e,t={}){return Kd(e,se.SerializationMap.getMap().classNameMap,t,"initializer")}function Nt(e){return ew(e)}function St(e){if(typeof e=="string"){let t=e in $k?$k[e]:e;if(t==="GlorotNormal")return new Fm;if(t==="GlorotUniform")return new Dm;if(t==="HeNormal")return new Rm;if(t==="HeUniform")return new Pm;if(t==="LeCunNormal")return new Om;if(t==="LeCunUniform")return new Mm;{let n={};return n.className=t,n.config={},Dk(n)}}else return e instanceof Pr?e:Dk(e)}function qy(e){return Array.isArray(e)&&Array.isArray(e[0])}function Wh(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function Ce(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new U(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function tt(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new U(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Vh(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((r,s)=>r*s);return t}var Fk="Variable",yC=class{constructor(e,t="float32",n=Fk,r=!0,s=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=dC(),n=n==null?Fk:n,this.originalName=hC(n),this.name=fC(this.originalName),this.trainable_=r,this.constraint=s,this.val=Hx(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),fV(this.val,e),this.val.id!==e.id&&(this.val.assign(e),this.constraint!=null&&this.val.assign(this.constraint.apply(this.val))),this}dispose(){this.assertNotDisposed(),this.val.dispose()}assertNotDisposed(){if(this.val.isDisposed)throw new Error(`LayersVariable ${this.name} is already disposed.`)}get trainable(){return this.trainable_}set trainable(e){this.trainable_=e,this.val.trainable=e}};function fV(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function jy(e){return e.map(t=>t.read())}function lw(e){e.forEach(t=>{t[0].write(t[1])})}var zt=class{constructor(e){this.dtype=e.dtype,this.shape=e.shape,e.shape!=null?this.ndim=e.shape.length:this.ndim=e.ndim,this.maxNDim=e.maxNDim,this.minNDim=e.minNDim,this.axes=e.axes||{}}},Vr=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=dC(),a!=null&&(this.originalName=hC(a),this.name=fC(this.originalName)),this.rank=t.length}},mV=0,Lm=class{constructor(e,t){this.callArgs=t,this.id=mV++,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}}},gV=0,Ue=class extends se.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=gV++,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)+"_"+Em(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 Wr(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new U(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Mn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Mn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new ks(`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 ks(`Layer ${this.name} is not connected, no input to return.`);return Mn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new ks(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new ks(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Mn(this.getNodeAtIndex(0,"output").outputTensors)}get losses(){return this._losses}calculateLosses(){return this.losses.map(e=>e())}get updates(){return this._updates}get built(){return this._built}set built(e){this._built=e}get trainable(){return this.trainable_}set trainable(e){this._trainableWeights.forEach(t=>t.trainable=e),this.trainable_=e}get trainableWeights(){return this.trainable_?this._trainableWeights.filter(e=>e.trainable):[]}set trainableWeights(e){this._trainableWeights=e}get nonTrainableWeights(){return this.trainable?this._trainableWeights.filter(e=>!e.trainable).concat(this._nonTrainableWeights):this._trainableWeights.concat(this._nonTrainableWeights)}set nonTrainableWeights(e){this._nonTrainableWeights=e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}get stateful(){return this._stateful}resetStates(){if(!this.stateful)throw new Error("Cannot call the resetStates() method of a non-stateful Layer object.")}assertInputCompatibility(e){if(e=vt(e),this.inputSpec==null||this.inputSpec.length===0)return;let t=vt(this.inputSpec);if(e.length!==t.length)throw new U(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let r=e[n],s=t[n];if(s==null)continue;let a=r.rank;if(s.ndim!=null&&a!==s.ndim)throw new U(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${s.ndim}, found ndim=${a}`);if(s.maxNDim!=null&&a>s.maxNDim)throw new U(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${s.maxNDim}, found ndim=${a}`);if(s.minNDim!=null&&a<s.minNDim)throw new U(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${s.minNDim}, found ndim=${a}.`);if(s.dtype!=null&&r.dtype!==s.dtype)throw new U(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${s.dtype}, found dtype=${r.dtype}.`);if(s.axes){let o=r.shape;for(let i in s.axes){let c=Number(i),u=s.axes[i],l=c>=0?o[c]:o[o.length+c];if(u!=null&&[u,null].indexOf(l)===-1)throw new U(`Input ${n} is incompatible with layer ${this.name}: expected axis ${c} of input shape to have value ${u} but got shape ${o}.`)}}if(s.shape!=null)for(let o=0;o<s.shape.length;++o){let i=s.shape[o],c=r.shape[o];if(i!=null&&c!=null&&i!==c)throw new U(`Input ${n} is incompatible with layer ${this.name}: expected shape=${s.shape}, found shape=${r.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=vt(e),r=!0;for(let a of n)if(!(a instanceof Vr)){r=!1;break}let s=!0;for(let a of n)if(a instanceof Vr){s=!1;break}if(r===s)throw new U("Arguments to apply() must be all SymbolicTensors or all Tensors");return Za(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let a=[];for(let o of vt(e))a.push(o.shape);this.build(Mn(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),o=vt(a),i=[];for(let c of o)n.indexOf(c)!==-1&&(c=c.clone()),i.push(c);if(a=Mn(i),this.activityRegularizer!=null)throw new Pe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return a}else{let a=bV(e),o=this.computeOutputShape(a),i,c=yV(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?a[0]:a),o!=null&&o.length>0&&Array.isArray(o[0])?i=o.map((u,l)=>new Vr(c,u,this,vt(e),t,this.name,l)):i=new Vr(c,o,this,vt(e),t,this.name),this.addInboundNode(e,i,null,null,a,o,t),this._refCount++,this.activityRegularizer!=null)throw new Pe("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 ks(`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 ks(`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 Wr(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Vh(this.weights)}build(e){this.built=!0}getWeights(e=!1){return jy(e?this.trainableWeights:this.weights)}setWeights(e){O(()=>{let t=this.weights;if(t.length!==e.length)throw new U(`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=jy(t);for(let s=0;s<r.length;++s){let a=r[s],o=t[s],i=e[s];if(!w.arraysEqual(a.shape,i.shape))throw new U(`Layer weight shape ${a.shape} not compatible with provided weight shape ${i.shape}`);n.push([o,i])}lw(n)})}addWeight(e,t,n,r,s,a,o,i){if(this._addedWeightNames.indexOf(e)!==-1)throw new U(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(r=i!=null?i():St("zeros"));let c=r.apply(t,n),u=new yC(c,n,e,a,o);return c.dispose(),s!=null&&this.addLoss(()=>s.apply(u.read())),a==null&&(a=!0),a?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=vt(e),this._losses!==void 0&&this._losses!==null&&this.losses.push(...e))}computeOutputShape(e){return e}computeMask(e,t){if(!this.supportsMasking){if(t!=null)if(Array.isArray(t))t.forEach(n=>{if(n!=null)throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`)});else throw new TypeError(`Layer ${this.name} does not support masking, but was passed an inputMask.`);return null}return t}addInboundNode(e,t,n,r,s,a,o=null){let i=vt(e);t=vt(t),n=vt(n),r=vt(r),s=Wh(s),a=Wh(a);let c=[],u=[],l=[];for(let p of i)c.push(p.sourceLayer),u.push(p.nodeIndex),l.push(p.tensorIndex);new Lm({outboundLayer:this,inboundLayers:c,nodeIndices:u,tensorIndices:l,inputTensors:i,outputTensors:t,inputMasks:n,outputMasks:r,inputShapes:s,outputShapes:a},o);for(let p=0;p<t.length;p++)t[p].sourceLayer=this,t[p].nodeIndex=this.inboundNodes.length-1,t[p].tensorIndex=p}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount===0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function bV(e){e=vt(e);let t=[];for(let n of e)t.push(n.shape);return Mn(t)}function yV(e){return"float32"}function vC(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;a<r.inboundLayers.length;a++){let o=r.inputTensors[a],i=r.inboundLayers[a],c=r.nodeIndices[a],u=vC(o,i,c);for(let l of u)s.indexOf(l)===-1&&s.push(l)}return s}}}var Hu=class extends Ue{constructor(e){if(super({dtype:e.dtype,name:e.name!=null?e.name:Em("input").toString()}),e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new U("Only provide the inputShape OR batchInputShape argument to inputLayer, not both at the same time.");let t=e.batchInputShape;if(t==null){if(e.inputShape==null)throw new U("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new U("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let r=new Vr(this.dtype,this.batchInputShape,this,[],{},this.name);r.nodeIndex=0,r.tensorIndex=0,new Lm({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[r],outputTensors:[r],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new U(`Cannot pass any input to an InputLayer's apply() method. InputLayer name: ${this.name}`)}dispose(){return{refCountAfterDispose:this._refCount,numDisposedVariables:0}}getConfig(){return{batchInputShape:this.batchInputShape,dtype:this.dtype,sparse:this.sparse,name:this.name}}};Hu.className="InputLayer";se.registerClass(Hu);function xC(e){if(e.batchShape==null&&e.shape==null)throw new Error("Please provide to Input either a `shape` or a `batchShape` argument. Note that `shape` does not include the batch dimension.");if(e.batchShape!=null&&e.shape!=null)throw new U("Please provide either a `shape` or `batchShape` argument to Input, but not both.");let t=e.batchShape;e.shape!=null&&t==null&&(t=[null].concat(e.shape));let n=e.dtype;return n==null&&(n="float32"),new Hu({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}function vV(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return ce(t,e.dtype)}catch(n){throw new U(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var ja=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof ja)for(let t in e.id2Value)this.id2Value[t]=e.id2Value[t],t in e.id2Mask&&(this.id2Mask[t]=e.id2Mask[t]);else{if(e==null)return;for(let t of e)this.add(t.key,t.value)}}add(e,t,n){if(this.id2Value[e.id]==null)this.id2Value[e.id]=vV(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new U(`Duplicate key: name=${e.name}, id=${e.id}`);return this}addFeed(e){this.add(e.key,e.value)}hasKey(e){return this.id2Value[e.id]!=null}names(){return Object.keys(this.name2Id)}getValue(e){if(e instanceof Vr){if(this.id2Value[e.id]==null)throw new U(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new U(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof Vr){if(this.id2Value[e.id]==null)throw new U(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new U(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&_e(this.id2Mask)}},Uh=new cC,Gh=new cC;function xV(e){Uh!=null&&Uh.setMaxEntries(e),Gh!=null&&Gh.setMaxEntries(e)}function Pl(e,t,n,r){let s=n==null?!1:n.training,a=Array.isArray(e),o=a?e:[e],i=o.map(f=>f.name),c=[],u=t.names();for(let f of i)u.indexOf(f)!==-1?c.push(t.getValue(f)):c.push(null);r!=null&&(r.maxNumTensors=-1/0,r.minNumTensors=1/0);let l=i.join(",")+"|"+t.names().sort().join(","),p=Uh.get(l),d;if(p==null){let f=wV(o,t);p=f.sorted,d=f.recipientCounts,Uh.put(l,p),Gh.put(l,d)}d={},s||Object.assign(d,Gh.get(l));let h=new ja(t);for(let f=0;f<p.length;++f){if(r!=null){let $=Lh().numTensors;$>r.maxNumTensors&&(r.maxNumTensors=$),$<r.minNumTensors&&(r.minNumTensors=$)}let m=p[f],g=m.sourceLayer;if(g instanceof Hu)continue;let b=[],y=[],v=[],x=!1;for(let $ of m.inputs){let F=h.getValue($),A=h.getMask($);b.push(F),y.push(A),A!=null&&(x=!0),s||(d[$.name]--,d[$.name]===0&&!t.hasKey($)&&i.indexOf($.name)===-1&&!F.isDisposed&&$.sourceLayer.stateful!==!0&&v.push(F))}x&&(n=n||{},n.mask=y[0]);let k=vt(g.apply(b,n)),S=null;g.supportsMasking&&(S=g.computeMask(b,y));let C=kV(m),E=Array.isArray(C)?C:[C];for(let $=0;$<E.length;++$){h.hasKey(E[$])||h.add(E[$],k[$],Array.isArray(S)?S[0]:S);let F=i.indexOf(E[$].name);F!==-1&&(c[F]=k[$])}s||_e(v)}return h.disposeMasks(),a?c:c[0]}function wV(e,t){w.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],r={};if(e.length===1){let s=Rk(e[0],t);n=s.sorted,r=s.recipientMap}else{let s=new Set;for(let a of e){let{sorted:o,recipientMap:i}=Rk(a,t);for(let c of o)s.has(c.name)||(n.push(c),s.add(c.name));for(let c in i)r[c]==null&&(r[c]=new Set),i[c].forEach(u=>r[c].add(u))}}return{sorted:n,recipientCounts:IV(r)}}function IV(e){let t={};for(let n in e)t[n]=e[n].size;return t}function Rk(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 c=o[o.length-1]===a.length-1;if(i.inputs.length===0||c)a.pop(),r.push(i),n.add(i.name),c&&o.pop();else{o.push(a.length-1);for(let u of i.inputs)s[u.name]==null&&(s[u.name]=new Set),s[u.name].add(i.name),!n.has(u.name)&&a.push(u)}}return{sorted:r,recipientMap:s}}function kV(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let r=0;r<e.sourceLayer.inboundNodes.length;++r)for(let s of e.sourceLayer.inboundNodes[r].outputTensors)if(s.id===e.id){n=r;break}t=e.sourceLayer.getOutputAt(n)}return t}var SV=q();SV.registerFlag("TOPOLOGICAL_SORT_CACHE_MAX_ENTRIES",()=>100,xV);var wC={};Ae(wC,{maxNorm:()=>TV,minMaxNorm:()=>_V,nonNeg:()=>NV,unitNorm:()=>CV});function dw(e,t){return O(()=>un(ge(B(e,e),t,!0)))}var Jd=class extends se.Serializable{getConfig(){return{}}},pw=class extends Jd{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=dw(e,this.axis),n=en(t,0,this.maxValue);return B(e,fe(n,Y(Gt(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};pw.className="MaxNorm";se.registerClass(pw);var hw=class extends Jd{constructor(e){super(),this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return O(()=>fe(e,Y(Gt(),dw(e,this.axis))))}getConfig(){return{axis:this.axis}}};hw.className="UnitNorm";se.registerClass(hw);var fw=class extends Jd{apply(e){return Xe(e)}};fw.className="NonNeg";se.registerClass(fw);var mw=class extends Jd{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=dw(e,this.axis),n=Y(B(this.rate,en(t,this.minValue,this.maxValue)),B(1-this.rate,t));return B(e,fe(n,Y(Gt(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};mw.className="MinMaxNorm";se.registerClass(mw);var Pk={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function jt(e){return ew(e)}function Ok(e,t={}){return Kd(e,se.SerializationMap.getMap().classNameMap,t,"constraint")}function Kt(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in Pk?Pk[e]:e,config:{}};return Ok(n)}else return e instanceof Jd?e:Ok(e)}function TV(e){return new pw(e)}function CV(e){return new hw(e)}function NV(){return new fw}function _V(e){return new mw(e)}var IC={};Ae(IC,{constant:()=>$V,glorotNormal:()=>LV,glorotUniform:()=>MV,heNormal:()=>zV,heUniform:()=>BV,identity:()=>PV,leCunNormal:()=>WV,leCunUniform:()=>VV,ones:()=>AV,orthogonal:()=>UV,randomNormal:()=>FV,randomUniform:()=>DV,truncatedNormal:()=>RV,varianceScaling:()=>OV,zeros:()=>EV});function EV(){return new rw}function AV(){return new $m}function $V(e){return new sw(e)}function DV(e){return new aw(e)}function FV(e){return new ow(e)}function RV(e){return new iw(e)}function PV(e){return new cw(e)}function OV(e){return new Wn(e)}function MV(e){return new Dm(e)}function LV(e){return new Fm(e)}function zV(e){return new Rm(e)}function BV(e){return new Pm(e)}function WV(e){return new Om(e)}function VV(e){return new Mm(e)}function UV(e){return new uw(e)}var kC={};Ae(kC,{Layer:()=>Ue,RNN:()=>ms,RNNCell:()=>rp,activation:()=>gG,add:()=>TG,alphaDropout:()=>cH,average:()=>CG,averagePooling1d:()=>T0,averagePooling2d:()=>C0,averagePooling3d:()=>N0,avgPool1d:()=>PG,avgPool2d:()=>MG,avgPool3d:()=>zG,avgPooling1d:()=>OG,avgPooling2d:()=>LG,avgPooling3d:()=>BG,batchNormalization:()=>DG,bidirectional:()=>eH,categoryEncoding:()=>pH,concatenate:()=>NG,conv1d:()=>iG,conv2d:()=>cG,conv2dTranspose:()=>uG,conv3d:()=>lG,conv3dTranspose:()=>dG,convLstm2d:()=>YG,convLstm2dCell:()=>ZG,cropping2D:()=>hG,dense:()=>bG,depthwiseConv2d:()=>mG,dot:()=>$G,dropout:()=>yG,elu:()=>tG,embedding:()=>SG,flatten:()=>xG,gaussianDropout:()=>iH,gaussianNoise:()=>oH,globalAveragePooling1d:()=>WG,globalAveragePooling2d:()=>VG,globalMaxPool1d:()=>nH,globalMaxPool2d:()=>rH,globalMaxPooling1d:()=>fN,globalMaxPooling2d:()=>mN,gru:()=>GG,gruCell:()=>HG,input:()=>WC,inputLayer:()=>eG,layerNormalization:()=>FG,leakyReLU:()=>rG,lstm:()=>qG,lstmCell:()=>jG,masking:()=>uH,maxPool1d:()=>sH,maxPool2d:()=>aH,maxPooling1d:()=>gN,maxPooling2d:()=>bN,maxPooling3d:()=>UG,maximum:()=>_G,minimum:()=>EG,multiply:()=>AG,permute:()=>kG,prelu:()=>sG,reLU:()=>nG,repeatVector:()=>wG,rescaling:()=>lH,reshape:()=>IG,resizing:()=>dH,rnn:()=>JG,separableConv2d:()=>pG,simpleRNN:()=>KG,simpleRNNCell:()=>XG,softmax:()=>aG,spatialDropout1d:()=>vG,stackedRNNCells:()=>QG,thresholdedReLU:()=>oG,timeDistributed:()=>tH,upSampling2d:()=>fG,zeroPadding2d:()=>RG});async function Js(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;a<s.length;++a)e[n[a]]=s[a][0];_e(r)}}function SC(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var Mk;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(Mk||(Mk={}));var GV=125,Sc=class{constructor(){this.validationData=null}setParams(e){this.params=e}async onEpochBegin(e,t){}async onEpochEnd(e,t){}async onBatchBegin(e,t){}async onBatchEnd(e,t){}async onTrainBegin(e){}async onTrainEnd(e){}setModel(e){}},TC=class{constructor(e,t=10){e==null&&(e=[]),this.callbacks=e,this.queueLength=t}append(e){this.callbacks.push(e)}setParams(e){for(let t of this.callbacks)t.setParams(e)}setModel(e){for(let t of this.callbacks)t.setModel(e)}async onEpochBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochBegin(e,t)}async onEpochEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onEpochEnd(e,t)}async onBatchBegin(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchBegin(e,t)}async onBatchEnd(e,t){t==null&&(t={});for(let n of this.callbacks)await n.onBatchEnd(e,t)}async onTrainBegin(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainBegin(e)}async onTrainEnd(e){e==null&&(e={});for(let t of this.callbacks)await t.onTrainEnd(e)}},HV=class extends Sc{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let r in t){let s=t[r];if(typeof s=="number")this.totals.hasOwnProperty(r)||(this.totals[r]=0),this.totals[r]=this.totals[r]+s*n;else{let a;r in this.totals?a=this.totals[r]:this.totals[r]=0;let o=O(()=>Y(this.totals[r],B(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=B(fe(1,this.seen),this.totals[n]);t[n]=r,this.totals[n].dispose(),Jt(t[n])}))}},CC=class extends Sc{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;o<a.length;++o)if(typeof a[o]!="number"){let i=a[o];e.push(i.data()),t.push(s),n.push(o)}}let r=await Promise.all(e);for(let s=0;s<r.length;++s)this.history[t[s]][n[s]].dispose(),this.history[t[s]][n[s]]=r[s][0]}},NC=class extends Sc{constructor(e,t){if(super(),this.currentEpoch=0,this.nowFunc=e.nowFunc,this.nextFrameFunc=e.nextFrameFunc||Jx,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=GV),this.yieldEvery==="never"&&e.onYield!=null)throw new Error("yieldEvery is `never` but you provided an `onYield` callback. Either change `yieldEvery` or remove the callback");w.isNumber(this.yieldEvery)&&(this.maybeWait=q4(this.maybeWait.bind(this),this.yieldEvery,this.nowFunc)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let r=[];this.yield!=null&&(await Js(n),r.push(this.yield(e,t,n))),r.push(this.nextFrameFunc()),await Promise.all(r)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await Js(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await Js(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(this.nextFrameFunc()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await Js(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await Js(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(this.nextFrameFunc()):w.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await Js(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await Js(e),await this.trainEnd(e))}};function _C(e,t){return e==null&&(e={}),e instanceof Sc?[e]:Array.isArray(e)&&e[0]instanceof Sc?e:vt(e).map(r=>new NC(r,t))}var _r=class{constructor(){}static registerCallbackConstructor(e,t){w.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),_r.checkForDuplicate(t),_r.constructors[e]==null&&(_r.constructors[e]=[]),_r.constructors[e].push(t)}static checkForDuplicate(e){for(let t in _r.constructors)_r.constructors[+t].forEach(r=>{if(r===e)throw new U("Duplicate callback constructor.")})}static clear(){_r.constructors={}}static createCallbacks(e){let t=[];for(let n in _r.constructors){let r=+n;e>=r&&t.push(..._r.constructors[r])}return t.map(n=>new n)}};_r.constructors={};function EC(e,t,n,r,s,a,o,i,c){let u=new CC,l=[new HV,..._r.createCallbacks(t)];e!=null&&l.push(...e),l.push(u);let p=new TC(l);return p.setParams({epochs:n,initialEpoch:r,samples:s,steps:a,batchSize:o,verbose:t,doValidation:i,metrics:c}),{callbackList:p,history:u}}function Gr(e,t={},n=!1){return Kd(e,se.SerializationMap.getMap().classNameMap,t,"layer",n)}function Hh(e,t){return O(()=>{e.dtype!=="float32"&&(e=ce(e,"float32"));let n=ge(Yd(e),t,!0),r=bn(n.shape,Gt()),s=un(hs(n,r));return fe(e,s)})}function xi(e,t){return O(()=>Ct(Yd(de(t,e)),-1))}function zm(e,t){return O(()=>Ct(Lt(de(t,e)),-1))}function qu(e,t){return O(()=>{let n=de(e,t),r=en(Lt(e),Gt(),Number.MAX_VALUE),s=Lt(fe(n,r));return B(100,Ct(s,-1))})}function qV(e,t){return O(()=>{let n=en(t,Gt(),Number.MAX_VALUE),r=nr(Y(1,n)),s=en(e,Gt(),Number.MAX_VALUE),a=nr(Y(1,s));return Ct(Yd(de(r,a)),-1)})}function jV(e,t){return O(()=>{let n=hs(0,de(1,B(e,t)));return Ct(Yd(n),-1)})}function KV(e,t){return O(()=>{let n=hs(0,de(1,B(e,t)));return Ct(n,-1)})}function XV(e,t){return O(()=>{let n=ge(B(e,t),-1),r=pr(B(de(1,e),t),-1);return hs(0,Y(1,de(r,n)))})}function YV(e,t){return O(()=>{let n=Math.log(2),r=de(t,e),s=de(Y(r,mi(B(-2,r))),n);return Ct(s,-1)})}function td(e,t,n=!1){return O(()=>{if(n)t=Xr(t);else{let r=ge(t,t.shape.length-1,!0);t=fe(t,r)}return t=en(t,Gt(),1-Gt()),xt(ge(B(ce(e,"float32"),nr(t)),t.shape.length-1))})}function qh(e,t,n=!1){return O(()=>{let r=ce(Bu(sV(e)),"int32");t=en(t,Gt(),1-Gt());let s=t.shape,a=W(gc(r,s[s.length-1]),s);return td(a,t,n)})}function ZV(e,t){if(!w.arraysEqual(e.shape,t.shape))throw new U(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return O(()=>{let n=Xe(t),r=xt(Lt(t));return Y(de(n,B(t,e)),zd(gn(r)))})}function Bm(e,t){return O(()=>{let n;return n=en(t,Gt(),1-Gt()),n=nr(fe(n,de(1,n))),Ct(ZV(e,n),-1)})}function JV(e,t){return O(()=>{let n=en(e,Gt(),1),r=en(t,Gt(),1);return ge(B(e,nr(fe(n,r))),-1)})}function QV(e,t){return O(()=>{let n=nr(Y(Gt(),t));return Ct(de(t,B(e,n)),-1)})}function gw(e,t){return O(()=>{let n=Hh(e,-1),r=Hh(t,-1),s=B(n,r);return xt(ge(s,-1))})}var jh={meanSquaredError:xi,meanAbsoluteError:zm,meanAbsolutePercentageError:qu,meanSquaredLogarithmicError:qV,squaredHinge:jV,hinge:KV,categoricalHinge:XV,logcosh:YV,categoricalCrossentropy:td,sparseCategoricalCrossentropy:qh,binaryCrossentropy:Bm,kullbackLeiblerDivergence:JV,poisson:QV,cosineProximity:gw};function wy(e){if(typeof e=="string"){if(e in jh)return jh[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 U(t)}else return e}function bw(e,t){return O(()=>{let n=B(.5,rr(t)),r=vi(An(t,n),e.dtype);return Ct(tr(e,r),-1)})}function yw(e,t){return O(()=>vi(tr(ao(e,-1),ao(t,-1)),"float32"))}function AC(e,t){return O(()=>ce(ge(Dr(tr(e,1),tr(t,1))),"float32"))}function eU(e,t){return O(()=>ce(ge(Dr(tr(e,1),tr(t,0))),"float32"))}function tU(e,t){return O(()=>ce(ge(Dr(tr(e,0),tr(t,1))),"float32"))}function $C(e,t){return O(()=>{let n=AC(e,t),r=tU(e,t),s=Y(n,r);return ce(mn(An(s,0),fe(n,s),0),"float32")})}function nU(e,t){return O(()=>{let n=AC(e,t),r=eU(e,t),s=Y(n,r);return ce(mn(An(s,0),fe(n,s),0),"float32")})}function DC(e,t){return Bm(e,t)}function FC(e,t){return e.rank===t.rank&&(e=Na(e,[e.rank-1])),t=ao(t,-1),t.dtype!==e.dtype&&(t=ce(t,e.dtype)),ce(tr(e,t),"float32")}var rU=xi,sU=xi,aU=zm,oU=zm,iU=qu,cU=qu,vw=td,uU=gw,RC=qh,Kh={binaryAccuracy:bw,categoricalAccuracy:yw,precision:$C,categoricalCrossentropy:vw,sparseCategoricalCrossentropy:RC,mse:rU,MSE:sU,mae:aU,MAE:oU,mape:iU,MAPE:cU,cosine:uU};function lU(e){if(typeof e=="string"&&e in Kh)return Kh[e];if(typeof e!="string"&&e!=null)return e;throw new U(`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(jh))if(jh[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(Kh))if(Kh[n]===e){t=n;break}return t!==void 0?t:e.name}}function dU(e){let t={Adagrad:()=>Wa.adagrad(.01),Adadelta:()=>Wa.adadelta(1,.95,Gt()),Adam:()=>Wa.adam(.001,.9,.999,Gt()),Adamax:()=>Wa.adamax(.002,.9,.999,Gt(),0),RMSProp:()=>Wa.rmsprop(.001,.9,0,Gt()),SGD:()=>Wa.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 U(`Unknown Optimizer ${e}`)}var Lk=1*1024*1024;function zk(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!Ky(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>Lk&&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 <= ${Lk}.`)}}function Ky(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"||!Ky(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!Ky(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function pU(e,t,n,r=console.log){let s=fU(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)),Xh(a,n,r),r("=".repeat(t));let i=e.layers;for(let l=0;l<i.length;++l)s?mU(i[l],n,r):gU(i[l],n,o,r),r((l===i.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let c=hU(e),u=Vh(e.nonTrainableWeights);r(`Total params: ${c+u}`),r(`Trainable params: ${c}`),r(`Non-trainable params: ${u}`),r("_".repeat(t))}function hU(e){let t;return e.collectedTrainableWeights!=null?t=Vh(e.collectedTrainableWeights):t=Vh(e.trainableWeights),t}function fU(e){let t=!0,n=[],r=[];for(let s in e.nodesByDepth)n.push(e.nodesByDepth[s]);for(let s of n){if(s.length>1||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 Xh(e,t,n=console.log){let r="";for(let s=0;s<e.length;++s)s>0&&(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 mU(e,t,n){let r,s;try{s=e.inboundNodes.map(c=>JSON.stringify(c.inputShapes)).join(",")}catch(c){s="multiple"}try{r=JSON.stringify(e.outputShape)}catch(c){r="multiple"}let a=e.name,o=e.getClassName(),i=[`${a} (${o})`,s,r,e.countParams().toString()];Xh(i,t,n)}function gU(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<p.inboundLayers.length;++d){let h=p.inboundLayers[d].name,f=p.nodeIndices[d],m=p.tensorIndices[d];o.push(`${h}[${f}][${m}]`)}let i=e.name,c=e.getClassName(),u=o.length===0?"":o[0],l=[`${i} (${c})`,a,s,e.countParams().toString(),u];Xh(l,t,r);for(let p=1;p<o.length;++p)Xh(["","","","",o[p]],t,r)}function PC(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function nd(e,t){if(e===null)return null;if(typeof e=="string")return Ga(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let s=0;s<r;++s){let a=e[s];PC(t,s,a)?n.push(a):n.push(nd(a,t))}return n}else{let n={};for(let r of Object.keys(e)){let s=e[r];if(r==="name"&&typeof s=="string")n[r]=s;else{let a=Ga(r);n[a]=nd(s,a)}}return n}}function Xy(e,t){if(e==null)return null;if(typeof e=="string")return Ss(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],r=e.length;for(let s=0;s<r;++s){let a=e[s];PC(t,s,a)?n.push(a):n.push(Xy(a,t))}return n}else{let n={};for(let r of Object.keys(e)){let s=e[r],a=Ss(r);(r==="name"||r==="className")&&typeof s=="string"?n[a]=s:n[a]=Xy(s,r)}return n}}var xw="4.0.0",ns=class extends Ue{constructor(e){if(super({}),this.containerNodes=new Set,this.name=e.name,this.name==null){let b=this.getClassName().toLowerCase();this.name=Em(b)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],sa(this.inputs).length!==this.inputs.length)throw new U(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(b=>b.name)}`);sa(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(b=>b.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let b of this.outputs){let y=b.sourceLayer,v=b.nodeIndex,x=b.tensorIndex;this.outputLayers.push(y),this.outputLayersNodeIndices.push(v),this.outputLayersTensorIndices.push(x)}for(let b of this.inputs){let y=b.sourceLayer,v=b.nodeIndex,x=b.tensorIndex;ss(v===0,"input layer has >1 nodes"),ss(x===0,"input layer has >1 tensors"),this.inputLayers.push(y),this.inputLayersNodeIndices.push(v),this.inputLayersTensorIndices.push(x)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let b=0;b<this.inputLayers.length;b++){let y=this.inputLayers[b];if(!(y instanceof Hu))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${b} (0-based) originates from layer type ${y.getClassName()}.`);this.inputNames.push(y.name),this.feedInputShapes.push(y.batchInputShape),this.feedInputNames.push(y.name)}for(let b of this.outputLayers)this.outputNames.push(b.name);this.internalInputShapes=this.inputs.map(b=>b.shape),this.internalOutputShapes=this.outputs.map(b=>b.shape);let t={},n={},r={},s={},a={},o=[],i=(b,y,v,x,k,S)=>{(x==null||k==null||S==null)&&(x=b.sourceLayer,k=b.nodeIndex,S=b.tensorIndex);let C=x.inboundNodes[k];if(v.indexOf(C)!==-1)throw new Wr(`The tensor ${b.name} at layer "${x.name}" is part of a cycle.`);if(y.indexOf(C)!==-1)return;this.containerNodes.add(ns.nodeKey(x,k)),x.id in a||(a[x.id]=Object.keys(a).length),v.indexOf(C)===-1&&v.push(C);let E=C.inboundLayers.length;for(let $=0;$<E;$++){let F=C.inputTensors[$],A=C.inboundLayers[$],R=C.nodeIndices[$],T=C.tensorIndices[$];i(F,y,v,A,R,T)}for(y.push(C);v.indexOf(C)>=0;)v.splice(v.indexOf(C),1);o.push(C)},c=[],u=[];for(let b of this.outputs)i(b,c,u);let l=o.slice().reverse();for(let b of l){n[b.id]=b,b.id in t||(t[b.id]=0);let y=t[b.id],v=r[b.outboundLayer.id]==null?0:r[b.outboundLayer.id];y=Math.max(y,v),r[b.outboundLayer.id]=y,s[b.outboundLayer.id]=b.outboundLayer,t[b.id]=y;for(let x=0;x<b.inboundLayers.length;x++){let k=b.inboundLayers[x],S=b.nodeIndices[x],C=k.inboundNodes[S],E=t[C.id]==null?0:t[C.id];t[C.id]=Math.max(y+1,E),n[C.id]=C}}let p={};for(let b in t){let y=t[b];y in p||(p[y]=[]),p[y].push(n[b])}let d={};for(let b in r){let y=r[b];y in d||(d[y]=[]),d[y].push(s[b])}let h=Object.keys(d).map(b=>parseInt(b,10)).sort(ih);this.layers=[];for(let b of h){let y=d[b];y.sort((v,x)=>{let k=a[v.id],S=a[x.id];return k<S?-1:k>S?1:0});for(let v of y)v instanceof ns&&this.internalContainerRefs.push(v),this.layers.push(v)}this.layersByDepth=d,h=Object.keys(p).map(b=>parseInt(b,10)).sort(ih);let f=this.inputs.slice(),m=[];for(let b of h)for(let y of p[b]){let v=y.outboundLayer;if(v!=null){for(let x of y.inputTensors)if(f.indexOf(x)===-1)throw new Wr(`Graph disconnected: cannot obtain value for tensor ${x} at layer "${v.name}". The following previous layers were accessed without issue: ${m}`);for(let x of y.outputTensors)f.push(x);m.push(v.name)}}this.nodesByDepth=p;let g=this.layers.map(b=>b.name);for(let b of g){let y=g.filter(v=>v===b).length;if(y!==1)throw new Wr(`The name "${b}" is used ${y} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new Lm({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(b=>null),outputMasks:this.outputs.map(b=>null),inputShapes:this.inputs.map(b=>b.shape),outputShapes:this.outputs.map(b=>b.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount===0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new U("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},r=0;for(let a of this.layers)for(let o of a.weights){if(n[o.originalName]!=null)throw new U(`Duplicate weight name: ${o.originalName}`);n[o.originalName]=o,r++}let s=[];for(let a in e){let o=a;if(n[a]==null){let i=a.split("/");o=i.slice(0,-2).concat([i[i.length-1]]).join("/")}if(n[o]!=null)s.push([n[o],e[a]]);else if(t)throw new U(`Provided weight data has no target variable: ${a}`);delete n[o]}if(t){let a=[];for(let o in n)a.push(o);if(a.length>0)throw new U(`${a.length} of ${r} weights are not set: ${a}`)}lw(s)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${xw}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=Xy(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return O(()=>{e=vt(e);let n=new ja;for(let r=0;r<this.inputs.length;++r)n.add(this.inputs[r],e[r]);return Pl(this.outputs,n,t)})}computeMask(e,t){return O(()=>{e=vt(e);let n;return t==null?n=uo(null,e.length):n=vt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Wh(e);if(t.length!==this.inputLayers.length)throw new U(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let o=0;o<t.length;o++){let i=this.inputLayers[o],c=t[o],u=i.name+"_0_0";n[u]=c}let r=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(ih);if(r.length>1)for(let o of r){let i=this.nodesByDepth[o];for(let c of i){let u=c.outboundLayer;if(this.inputLayers.map(f=>f.id).indexOf(u.id)!==-1)continue;let l=[];for(let f=0;f<c.inboundLayers.length;f++){let m=c.inboundLayers[f],g=c.nodeIndices[f],b=c.tensorIndices[f],y=`${m.name}_${g}_${b}`,v=n[y];l.push(v)}let p=u.computeOutputShape(Mn(l)),d=Wh(p),h=u.inboundNodes.indexOf(c);for(let f=0;f<d.length;f++){let m=`${u.name}_${h}_${f}`;n[m]=d[f]}}}let s=[],a=[];for(let o=0;o<this.outputLayers.length;o++){let i=this.outputLayers[o],c=this.outputLayersNodeIndices[o],u=this.outputLayersTensorIndices[o],l=`${i.name}_${c}_${u}`;a.push(l)}for(let o=0;o<a.length;o++){let i=a[o];ss(i in n),s.push(n[i])}return Mn(s)}runInternalGraph(e,t){t==null&&(t=uo(null,e.length));let n={};for(let i=0;i<this.inputs.length;++i){let c=this.inputs[i],u=e[i],l=t[i];n[c.id]=[u,l]}let r=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(ih);for(let i of r){let c=this.nodesByDepth[i];for(let u of c){let l=u.outboundLayer,p=u.inputTensors,d=u.outputTensors,h=new Array;for(let f of p)f.id in n&&h.push(n[f.id]);if(h.length===p.length){let f={},m,g,b,y;if(u.callArgs!=null&&(f=u.callArgs),h.length===1){let[v,x]=h[0];f.mask==null&&(f.mask=x),b=vt(l.call(v,f)),y=vt(l.computeMask(v,x)),m=[v],g=[x]}else m=h.map(v=>v[0]),g=h.map(v=>v[1]),f.mask==null&&(f.mask=g),b=vt(l.call(m,f)),y=vt(l.computeMask(m,g));if(l.activityRegularizer)throw new Pe("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let v=0;v<d.length;++v){let x=d[v],k=b[v],S=y[v];n[x.id]=[k,S]}}}}let s=[],a=[],o=[];for(let i of this.outputs){ss(i.id in n,`Could not compute output ${i.name} : ${i.id}`);let[c,u]=n[i.id];o.push(c.shape),s.push(c),a.push(u)}return[s,a,o]}buildNodeConversionMap(e){let t={},n;for(let r of this.layers){n=r instanceof ns?1:0;for(let s=0;s<r.inboundNodes.length;s++){let a=ns.nodeKey(r,s);this.containerNodes.has(a)&&(t[a]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new U(`Was asked to retrieve layer at index ${t}, but model only has ${this.layers.length} layer(s).`);return this.layers[t]}else if(e==null)throw new U("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new U(`No such layer: ${e}`)}calculateLosses(){return O(()=>{let e=[];for(let t of this.layers)for(let n=0;n<t.inboundNodes.length;++n){let r=ns.nodeKey(t,n);this.containerNodes.has(r)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let a of this.layers){let o=a.getClassName(),i=a.getConfig(),c=[];for(let l=0;l<a.inboundNodes.length;l++){let p=a.inboundNodes[l],d=ns.nodeKey(a,l),h={};if(this.containerNodes.has(d)){if(p.callArgs)try{JSON.stringify(p.callArgs),h=p.callArgs}catch(f){console.warn(`Layer ${a.name} was passed non-serializable keyword arguments: ${p.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),h={}}if(p.inboundLayers.length>0){let f=[];for(let m=0;m<p.inboundLayers.length;m++){let g=p.inboundLayers[m],b=p.nodeIndices[m],y=p.tensorIndices[m],v=ns.nodeKey(g,b),x=t[v];x==null&&(x=0),f.push([g.name,x,y,h])}c.push(f)}}}let u={};u.name=a.name,u.className=o,u.config=i,u.inboundNodes=c,n.push(u)}e.layers=n;let r=[];for(let a=0;a<this.inputLayers.length;a++){let o=this.inputLayers[a],i=this.inputLayersNodeIndices[a],c=ns.nodeKey(o,i);if(!this.containerNodes.has(c))continue;let u=t[c];u==null&&(u=0);let l=this.inputLayersTensorIndices[a];r.push([o.name,u,l])}e.inputLayers=r;let s=[];for(let a=0;a<this.outputLayers.length;a++){let o=this.outputLayers[a],i=this.outputLayersNodeIndices[a],c=ns.nodeKey(o,i);if(!this.containerNodes.has(c))continue;let u=t[c];u==null&&(u=0);let l=this.outputLayersTensorIndices[a];s.push([o.name,u,l])}return e.outputLayers=s,e}static fromConfig(e,t,n={},r=!1){let s={},a={};function o(m,g){m.name in a?a[m.name].push(g):a[m.name]=[g]}function i(m,g){let b=[],y;for(let v of g){let x=v[0],k=v[1],S=v[2];if(y=v[3]==null?{}:v[3],!(x in s)){o(m,g);return}let C=s[x];if(C.inboundNodes.length<=k){o(m,g);return}let E=C.inboundNodes[k];b.push(E.outputTensors[S])}b.length>0&&m.apply(Mn(b),y)}function c(m){let g=m.name,b=Gr(m,t.customObjects!=null?t.customObjects:{});b.setFastWeightInitDuringBuild(r),s[g]=b,m.inboundNodes.forEach(v=>{if(!(v instanceof Array))throw new U(`Corrupted configuration, expected array for nodeData: ${v}`);o(b,v)})}let u=t.name,l=t.layers;for(let m of l)c(m);for(;!H4(a);)for(let m of l){let g=s[m.name];if(g.name in a){let b=a[g.name];delete a[g.name];for(let y of b)i(g,y)}}let p=[],d=[],h=t.inputLayers;for(let m of h){let g=m[0],b=m[1],y=m[2];ss(g in s);let x=s[g].inboundNodes[b].outputTensors;p.push(x[y])}let f=t.outputLayers;for(let m of f){let g=m[0],b=m[1],y=m[2];ss(g in s);let x=s[g].inboundNodes[b].outputTensors;d.push(x[y])}return new e({inputs:p,outputs:d,name:u})}get stateful(){if(this._stateful)throw new U("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){O(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function bU(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 OC(e,t){return bU(e,t,"classWeight")}async function MC(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 is(e);if(e.shape.length===2){if(e.shape[1]>1)return ao(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])}),Ke(o,"float32")}else return null}function yU(e,t){return B(e,t)}var vU=32;function LC(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=Bk("input",e.inputNames,n),o=Bk("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 c=0;c<a.length;c++)w.assert(a[c].shape[0]===i,()=>`Batch size mismatch: input ${e.inputNames[c]} has ${a[c].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);for(let c=0;c<o.length;c++)w.assert(o[c].shape[0]===i,()=>`Batch size mismatch: output ${e.outputNames[c]} has ${o[c].shape[0]}; expected ${i} based on input ${e.inputNames[0]}.`);return{xs:a,ys:o}}function Bk(e,t,n){if(n instanceof Te)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 U(`The feature data generated by the dataset lacks the required ${e} key '${s}'.`);r.push(n[s])}return r}}function xU(e){if(e.length===3)throw new Pe("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function wU(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(Wk(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 g=xU(n.validationData);a=g.xs,o=g.ys}let i=e.makeTrainFunction(),c=e.getDedupedMetricsNames(),u;s?u=c.slice().concat(c.map(g=>"val_"+g)):u=c.slice();let l=_C(n.callbacks,n.yieldEvery),p=n.verbose==null?1:n.verbose,{callbackList:d,history:h}=EC(l,p,n.epochs,null,null,IU(t,n),null,s,u);d.setModel(e),e.history=h,await d.onTrainBegin(),e.stopTraining_=!1;let f=n.initialEpoch==null?0:n.initialEpoch,m=await t.iterator();for(;f<n.epochs;){let g={};await d.onEpochBegin(f);let b=0,y=0;for(r||(m=await t.iterator());!r||b<n.batchesPerEpoch;){let v=await m.next();if(r&&v.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${b} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(v.value!=null){let{xs:x,ys:k}=LC(e,v.value),S={};S.batch=y,S.size=x[0].shape[0],await d.onBatchBegin(y,S);let C=[];if(n.classWeight!=null){let F=OC(n.classWeight,e.outputNames);for(let A=0;A<F.length;++A)C.push(await MC(k[A],null,F[A]))}let E=x.concat(k).concat(C),$=i(E);_e(E);for(let F=0;F<c.length;++F){let A=c[F],R=$[F];S[A]=R,Jt(R)}await d.onBatchEnd(y,S),SC(S),y++,b++}if(r?b>=n.batchesPerEpoch:v.done){if(s){let x;Wk(n.validationData)?x=vt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):x=vt(e.evaluate(a,o,{batchSize:n.validationBatchSize==null?vU:n.validationBatchSize,verbose:0}));for(let k=0;k<e.metricsNames.length;++k)g[`val_${e.metricsNames[k]}`]=x[k]}break}if(e.stopTraining_)break}if(await d.onEpochEnd(f,g),f++,e.stopTraining_)break}return await d.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function IU(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function Wk(e){return typeof e.iterator=="function"}function kU(e){return typeof e.next=="function"}async function SU(e,t,n){n=n||{};let r=n.batches!=null,s=e.testFunction,a=[];if(n.verbose>0)throw new Pe("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=kU(t)?t:await t.iterator(),i=0,c=0;for(;!r||c<n.batches;){let u=await o.next();if(a=O(()=>{if(u.value){let{xs:l,ys:p}=LC(e,u.value),d=l.concat(p),h=O(()=>s(d));if(_e(d),c===0)for(let m=0;m<h.length;++m)a.push(xe(0));let f=d[0].shape[0];for(let m=0;m<h.length;++m){let g=h[m],b=a[m];a[m]=O(()=>Y(a[m],B(f,g))),c>0&&_e(b)}_e(h),i+=f,++c}return a}),u.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 u=0;u<a.length;++u){let l=a[u];a[u]=fe(a[u],i),_e(l)}return Mn(a)}function Yy(e){w.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function Ol(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(r=>Ja(r,t,n-t)):Ja(e,t,n-t)}function ww(e,t){return O(()=>e==null?null:Array.isArray(e)?e.map(n=>ww(n,t)):gC(e,t.dtype==="int32"?t:ce(t,"int32")))}function Zy(e,t){let n=[],r=0,s=null;for(;r<e;)s=r+t,s>=e&&(s=e),n.push([r,s]),r=s;return n}async function TU(e,t,n,r,s,a,o,i,c,u,l,p,d,h,f){s==null&&(s=32),a==null&&(a=1),l==null&&(l=!0),d==null&&(d=0);let m=!1;if(c!=null&&u!=null&&(m=!0),f!=null&&(m=!0,h==null))throw new U("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=e.checkNumSamples(n,s,h,"steps_per_epoch"),b;g!=null&&(b=qr(0,g)),o==null&&(o=1);let{callbackList:y,history:v}=EC(i,o,a,d,g,h,s,m,p);y.setModel(e),e.history=v,await y.onTrainBegin(),e.stopTraining_=!1;for(let x=d;x<a;++x){await y.onEpochBegin(x);let k={};if(h!=null)throw new Pe("stepsPerEpoch mode is not implemented yet.");{if(l==="batch")throw new Pe("batch shuffling is not implemneted yet");l&&w.shuffle(b);let S=Ke(b),C=Zy(g,s);for(let E=0;E<C.length;++E){let $={};if(await y.onBatchBegin(E,$),O(()=>{let F=C[E][0],A=C[E][1],R=Ja(S,F,A-F);$.batch=E,$.size=A-F;let T=ww(n,R),L=t(T);for(let V=0;V<r.length;++V){let G=r[V],j=L[V];$[G]=j,Jt(j)}if(E===C.length-1&&m){let V=e.testLoop(c,u,s);for(let G=0;G<r.length;++G){let j=r[G],H=V[G];Jt(H),k["val_"+j]=H}}}),await y.onBatchEnd(E,$),SC($),e.stopTraining_)break}S.dispose()}if(await y.onEpochEnd(x,k),e.stopTraining_)break}return await y.onTrainEnd(),await e.history.syncData(),e.history}async function CU(e,t,n,r={}){if(e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;let s,a,o,i,c,u,l,p,d;try{let h=r.batchSize==null?32:r.batchSize;Yy(h);let f=!1,m=await e.standardizeUserData(t,n,r.sampleWeight,r.classWeight,f,h);s=m[0],a=m[1],d=m[2];let g=!1,b;if(r.validationData!=null&&r.validationData.length>0){if(g=!0,r.validationData.length===2)c=r.validationData[0],u=r.validationData[1];else throw r.validationData.length===3?new Pe("validationData including sample weights is not supported yet."):new U(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${r.validationData} is invalid.`);let $=!0,F=await e.standardizeUserData(c,u,null,null,$,h);l=F[0],p=F[1],b=l.concat(p)}else if(r.validationSplit!=null&&r.validationSplit>0&&r.validationSplit<1){g=!0;let $=Math.floor(s[0].shape[0]*(1-r.validationSplit)),F=s[0].shape[0];l=Ol(s,$,F),o=s,s=Ol(s,0,$),p=Ol(a,$,F),i=a,a=Ol(a,0,$),b=l.concat(p)}else r.validationSteps!=null&&(g=!0);let y=s.concat(a).concat(d);e.checkTrainableWeightsConsistency();let v=e.makeTrainFunction(),x=e.getDedupedMetricsNames(),k,S;g?(e.makeTestFunction(),k=e.testFunction,S=x.slice().concat(x.map($=>"val_"+$))):(k=null,b=[],S=x.slice());let C=_C(r.callbacks,r.yieldEvery);return await TU(e,v,y,x,h,r.epochs,r.verbose,C,k,b,r.shuffle,S,r.initialEpoch,null,null)}finally{e.isTraining=!1,zr(s,t),zr(a,n),zr(o,t),zr(i,n),zr(l,c),zr(p,u),d!=null&&_e(d)}}function zC(e){let t=[];e instanceof Te&&(e=[e]);for(let n=0;n<e.length;++n){let r=e[n];if(r.rank===1)t.push(Xd(r,1));else{if(r.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(r)}}return t}function zr(e,t){if(e==null)return;let n=[];if(t instanceof Te)n.push(t.id);else if(Array.isArray(t))t.forEach(s=>n.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 Te)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 NU(e){return e instanceof Te}function Jy(e){return Array.isArray(e)}function Vk(e){return!NU(e)&&!Jy(e)}function Uk(e,t,n,r=!0,s=""){if(t==null||t.length===0){if(e!=null){let o=!1;if(Jy(e)&&e.length>0)o=!0;else if(Vk(e)){for(let i in e)if(e.hasOwnProperty(i)){o=!0;break}}else o=!0;if(o)throw new U(`Error when checking model ${s} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(o=>null);let a;if(Vk(e)){e=e,a=[];for(let o of t){if(e[o]==null)throw new U(`No data provided for "${o}". Need data for each key in: ${t}`);a.push(e[o])}}else if(Jy(e)){if(e=e,e.length!==t.length)throw new U(`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 U(`The model ${s} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);a=[e]}if(a=zC(a),n!=null)for(let o=0;o<t.length;++o){if(n[o]==null)continue;let i=a[o];if(i.shape.length!==n[o].length)throw new U(`Error when checking ${s}: expected ${t[o]} to have ${n[o].length} dimension(s). but got array with shape ${i.shape}`);for(let c=0;c<n[o].length;++c){if(c===0&&!r)continue;let u=i.shape[c],l=n[o][c];if(l!=null&&l>=0&&u!==l)throw new U(`${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 _U(e,t,n){let r=sa(e.map(a=>a.shape[0]));r.sort();let s=sa(t.map(a=>a.shape[0]));if(s.sort(),r.length>1)throw new U(`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 U(`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 U(`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 EU(e,t,n){let r=[xi,Bm,td];for(let s=0;s<e.length;++s){let a=e[s],o=t[s],i=n[s];if(o!=null){if(o===td&&a.shape[a.shape.length-1]===1)throw new U(`You are passing a target array of shape ${a.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(r.indexOf(o)!==-1){let c=a.shape.slice(1),u=i.slice(1);for(let l=0;l<c.length;++l){let p=c[l],d=u[l];if(d!=null&&p!==d)throw new U(`A target Tensor with shape ${a.shape} was passed for an output of shape ${i}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function Gk(e,t,n,r=!0,s=""){let a;if(Array.isArray(e)){if(e.length!==t.length)throw new U(`Error when checking model ${s}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);a=e}else{if(t.length>1)throw new U(`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<t.length;++o){if(n[o]==null)continue;let i=a[o];if(i.shape.length!==n[o].length)throw new U(`Error when checking ${s}: expected ${t[o]} to have ${n[o].length} dimension(s), but got array with shape ${JSON.stringify(i.shape)}`);for(let c=0;c<n[o].length;++c){if(c===0&&!r)continue;let u=i.shape[c],l=n[o][c];if(l!=null&&l!==u)throw new U(`Error when checking ${s}: expected ${t[o]} to have shape ${JSON.stringify(n[o])} but got array with shape ${JSON.stringify(i.shape)}.`)}}}function AU(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>[]);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 $U="layers-model",Es=class extends ns{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new U("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).");pU(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=dU(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Rs))throw new U("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 U(`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(wy(e.loss[a]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new U(`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=>wy(o))}else{let a=wy(e.loss);this.outputs.forEach(o=>{t.push(a)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let a=0;a<this.outputs.length;++a){let o=this.internalOutputShapes[a],i=this.outputNames[a];this.feedOutputNames.push(i),this.feedOutputShapes.push(o),this.feedLossFns.push(this.lossFunctions[a])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],Za("loss",()=>{for(let a=0;a<this.outputs.length;++a){if(n.indexOf(a)!==-1)continue;let o=this.lossFunctions[a];this.outputs.length>1&&(this.metricsTensors.push([o,a]),this.metricsNames.push(this.outputNames[a]+"_loss"))}});let r=AU(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])};Za("metric",()=>{for(let a=0;a<this.outputs.length;++a){if(n.indexOf(a)!==-1)continue;let o=r[a];(c=>{let u="",l,p,d;for(let h of c){if(typeof h=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(h)!==-1){let m=this.internalOutputShapes[a];m[m.length-1]===1||this.lossFunctions[a]===Bm?["accuracy","acc"].indexOf(h)!==-1?p=bw:["crossentropy","ce"].indexOf(h)!==-1&&(p=DC):this.lossFunctions[a]===qh?["accuracy","acc"].indexOf(h)!==-1?p=FC:["crossentropy","ce"].indexOf(h)!==-1&&(p=RC):["accuracy","acc"].indexOf(h)!==-1?p=yw:["crossentropy","ce"].indexOf(h)!==-1&&(p=vw);let g;["accuracy","acc"].indexOf(h)!==-1?g="acc":["crossentropy","ce"].indexOf(h)!==-1&&(g="ce"),d=p,l=u+g}else d=lU(h),l=u+lh(h);let f;Za(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;Yy(r);let s=!0,a=this.standardizeUserDataXY(e,t,s,r);try{let o=a[0].concat(a[1]);this.makeTestFunction();let i=this.testFunction,c=this.testLoop(i,o,r,n.verbose,n.steps);return Mn(c)}finally{zr(a[0],e),zr(a[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),SU(this,e,t)}checkNumSamples(e,t,n,r="steps"){let s;if(n!=null){if(s=null,t!=null)throw new U(`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 U(`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 U("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),r=n?t:[t],s=this.retrieveSymbolicTensors(r),a=new ja;if(e instanceof Te&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new U(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let i=0;i<this.inputs.length;++i)a.add(this.inputs[i],e[i])}else for(let i of this.inputs){let c=e[i.name];if(c==null)throw new U(`No value is provided for the model's input ${i.name}`);a.add(i,c)}let o=Pl(s,a);return n?o:o[0]}retrieveSymbolicTensors(e){let t=uo(null,e.length),n=e.length;for(let r of this.layers){let s=Array.isArray(r.output)?r.output:[r.output],a=s.map(o=>o.name);for(let o=0;o<e.length;++o){let i=a.indexOf(e[o]);if(i!==-1&&(t[o]=s[i],n--),n===0)break}if(n===0)break}if(n>0){let r=[];throw t.forEach((s,a)=>{s==null&&r.push(e[a])}),new U(`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 Pe("Verbose predictLoop() is not implemented yet.");let s=Zy(r,t),a=this.outputs.map(o=>[]);for(let o=0;o<s.length;++o)O(()=>{let c=s[o][0],u=s[o][1],l=Ol(e,c,u),p=[];if(Array.isArray(l))for(let h=0;h<l.length;++h)p.push({key:this.inputs[h],value:l[h]});else p.push({key:this.inputs[0],value:l});let d=new ja(p);return Pl(this.outputs,d)}).forEach((c,u)=>a[u].push(c));return Mn(a.map(o=>Je(o,0)))})}predict(e,t={}){let n=zC(e);Gk(n,this.inputNames,this.feedInputShapes,!1);try{let r=t.batchSize==null?32:t.batchSize;return Yy(r),this.predictLoop(n,r)}finally{zr(n,e)}}predictOnBatch(e){Gk(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 Wr("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let s=[];for(let a=0;a<this.feedOutputShapes.length;++a){let o=this.feedOutputShapes[a];this.feedLossFns[a]===qh?s.push(o.slice(0,o.length-1).concat([1])):s.push(o)}if(e=Uk(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=Uk(t,this.feedOutputNames,s,!1,"target"),_U(e,t,null),EU(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&r!=null&&r>0&&e[0].shape[0]%r!==0)throw new U(`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 c=null;if(r!=null){let u=OC(r,this.outputNames);c=[];for(let l=0;l<u.length;++l)c.push(await MC(i[l],null,u[l]))}return[o,i,c]}testLoop(e,t,n,r=0,s){return O(()=>{let a=this.checkNumSamples(t,n,s,"steps"),o=[];if(r>0)throw new Pe("Verbose mode is not implemented yet.");if(s!=null)throw new Pe("steps mode in testLoop() is not implemented yet");{let i=Zy(a,n),c=Ke(qr(0,a));for(let u=0;u<i.length;++u){let l=i[u][0],p=i[u][1],d=Ja(c,l,p-l),h=ww(t,d),f=e(h);if(u===0)for(let m=0;m<f.length;++m)o.push(xe(0));for(let m=0;m<f.length;++m){let g=f[m];o[m]=Y(o[m],B(p-l,g))}}for(let u=0;u<o.length;++u)o[u]=fe(o[u],a)}return o})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let r=e[n],s=r;if(_k(e,r)>1){let a=_k(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;f<this.inputs.length;++f)l.push({key:this.inputs[f],value:n[f]});let p=new ja(l),d=Pl(this.outputs,p,{training:!0}),h;for(let f=0;f<this.lossFunctions.length;++f){let m=this.lossFunctions[f],g=m(r[f],d[f]);s[f]!=null&&(g=yU(g,s[f]));let b=Ct(g);t.push(b),f===0?h=g:h=Y(h,g)}for(let f=0;f<this.metricsTensors.length;++f){let m;if(this.outputs.length>1&&f<this.outputs.length)m=t[f];else{let g=this.metricsTensors[f][0],b=this.metricsTensors[f][1];m=Ct(g(r[b],d[b]))}Jt(m),a.push(m)}return h=Ct(h),this.calculateLosses().forEach(f=>{h=Y(h,f)}),h},i=this.collectedTrainableWeights.map(l=>l.read()),c=!0;return[this.optimizer_.minimize(o,c,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 c=0;c<this.inputs.length;++c)a.push({key:this.inputs[c],value:r[c]});let o=new ja(a),i=Pl(this.outputs,o);for(let c=0;c<this.lossFunctions.length;++c){let u=this.lossFunctions[c],l=Ct(u(s[c],i[c]));c===0?n=l:n=Y(n,l),t.push(n)}for(let c=0;c<this.metricsTensors.length;++c){let u=this.metricsTensors[c][0],l=this.metricsTensors[c][1],p=Ct(u(s[l],i[l]));t.push(p)}return t})}async fit(e,t,n={}){return CU(this,e,t,n)}async fitDataset(e,t){return wU(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),r=n[0],s=n[1],o=this.makeTrainFunction()(r.concat(s)),i=[];for(let c of o){let u=await c.data();i.push(u[0])}return _e(o),zr(n[0],e),zr(n[1],t),Mn(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,r=n?this.trainableWeights:this.weights,s=this.getWeights(n);for(let a=0;a<r.length;++a)n&&!r[a].trainable||t.push({name:r[a].originalName,tensor:s[a]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=Lh().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-Lh().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=Ss(this.loss);else if(Array.isArray(this.loss)){for(let t of this.loss)if(typeof t!="string")throw new Error("Serialization of non-string loss is not supported.");e=this.loss.map(t=>Ss(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=nd(e.optimizer_config),n=Gr(t),r;if(typeof e.loss=="string")r=Ga(e.loss);else if(Array.isArray(e.loss))r=e.loss.map(a=>Ga(a));else if(e.loss!=null){r={};for(let a in e.loss)r[a]=Ga(e.loss[a])}let s;if(Array.isArray(e.metrics))s=e.metrics.map(a=>Ga(a));else if(e.metrics!=null){s={};for(let a in e.metrics)s[a]=Ga(e.metrics[a])}this.compile({loss:r,metrics:s,optimizer:n})}async save(e,t){if(typeof e=="string"){let c=Ut.getSaveHandlers(e);if(c.length===0)throw new U(`Cannot find any save handlers for URL '${e}'`);if(c.length>1)throw new U(`Found more than one (${c.length}) save handlers for URL '${e}'`);e=c[0]}if(e.save==null)throw new U("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Ut.encodeWeights(this.getNamedWeights(t)),r=!1,s=null,o={modelTopology:this.toJSON(s,r),format:$U,generatedBy:`TensorFlow.js tfjs-layers v${xw}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){o.trainingConfig=this.getTrainingConfig();let c="optimizer",{data:u,specs:l}=await Ut.encodeWeights(await this.optimizer.getWeights(),c);n.specs.push(...l),n.data=Ut.concatenateArrayBuffers([n.data,u])}return this.userDefinedMetadata!=null&&(zk(this.userDefinedMetadata,this.name,!0),o.userDefinedMetadata=this.userDefinedMetadata),o.weightData=n.data,o.weightSpecs=n.specs,e.save(o)}setUserDefinedMetadata(e){zk(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Es.className="Model";se.registerClass(Es);var BC=class extends Es{};BC.className="Functional";se.registerClass(BC);async function DU(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let r=nd(n),s=Gr(r,t);if(e.weightsManifest!=null){let a=await Ut.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 FU(e,t){if(t==null&&(t={}),typeof e=="string"){let n=Ut.getLoadHandlers(e,t);if(n.length===0)n.push(Ut.browserHTTPRequest(e,t));else if(n.length>1)throw new U(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return RU(e,void 0,t)}async function RU(e,t,n){if(n==null&&(n={}),e.load==null)throw new U("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=Gr(nd(s),t,o),c=r.trainingConfig;if(c!=null&&i.loadTrainingConfig(c),r.userDefinedMetadata!=null&&i.setUserDefinedMetadata(r.userDefinedMetadata),r.weightData!=null){if(r.weightSpecs==null)throw new U("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:l}=PU(r.weightData,r.weightSpecs);i.loadWeights(u,a),i.optimizer!=null&&l.length>0&&await i.optimizer.setWeights(l),_e(u),_e(l.map(p=>p.tensor))}return i}function PU(e,t){let n=Ut.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 Tc=class extends Es{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Em("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(n=>n<0))throw new U(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Tc||e instanceof Es,n;if(t){if(n=e,n.outputs.length!==1)throw new U("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new U("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new U("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let r=xC({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(r)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new U(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new U("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=vC(this.outputs[0])}this.inboundNodes=[],new Lm({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:uo(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(r=>r.shape),outputShapes:this.outputs[0].shape})}else{let r=e.apply(this.outputs[0]);if(Array.isArray(r))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[r],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(tt(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new 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(e,t,n=console.log){this.built||this.build(),super.summary(e,t,n)}setWeights(e){this.model==null&&this.build(),this.model.setWeights(e)}evaluate(e,t,n={}){if(!this.built)throw new Wr("The model needs to be compiled before being used.");return this.model.evaluate(e,t,n)}async evaluateDataset(e,t){if(!this.built)throw new Wr("The model needs to be compiled before being used.");return this.model.evaluateDataset(e,t)}predict(e,t={}){return this.model==null&&this.build(),this.model.predict(e,t)}predictOnBatch(e){return this.model==null&&this.build(),this.model.predictOnBatch(e)}compile(e){this.build(),this.model.compile(e),this.optimizer_=this.model.optimizer,this.isOptimizerOwned=this.model.isOptimizerOwned,this.loss=this.model.loss,this.metrics=this.model.metrics,this.metricsTensors=this.model.metricsTensors,this.metricsNames=this.model.metricsNames}get optimizer(){return this.model==null?void 0:this.model.optimizer}set optimizer(e){this.model.optimizer=e}async fit(e,t,n={}){if(!this.built)throw new Wr("The model needs to be compiled before being used.");return this.model.fit(e,t,n)}async fitDataset(e,t){if(!this.built)throw new Wr("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},r=!1){let s,a={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new U("Legacy serialization format not supported yet.");s=t}else w.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),s=t.layers,delete t.layers,a=t;let o=new e(a);if(!(o instanceof Tc))throw new Pe(`Sequential.fromConfig called on non-Sequential input: ${o}`);for(let i of s){let u=Gr(i,void 0,r);r&&u.setFastWeightInitDuringBuild(!0),o.add(u)}return o}set stopTraining(e){if(this.model==null)throw new U("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new U("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};Tc.className="Sequential";se.registerClass(Tc);function OU(e){return new Es(e)}function MU(e){return new Tc(e)}function WC(e){return xC(e)}function LU(e,t){_r.registerCallbackConstructor(e,t)}var Un=class extends se.Serializable{getConfig(){return{}}},VC=class extends Un{apply(e,t=1){return oV(e,t)}};VC.className="elu";se.registerClass(VC);var UC=class extends Un{apply(e){return lm(e)}};UC.className="selu";se.registerClass(UC);var GC=class extends Un{apply(e){return Xe(e)}};GC.className="relu";se.registerClass(GC);var HC=class extends Un{apply(e){return O(()=>Vu(6,Xe(e)))}};HC.className="relu6";se.registerClass(HC);var qC=class extends Un{apply(e){return e}};qC.className="linear";se.registerClass(qC);var jC=class extends Un{apply(e){return dr(e)}};jC.className="sigmoid";se.registerClass(jC);var KC=class extends Un{apply(e){return cV(e)}};KC.className="hardSigmoid";se.registerClass(KC);var XC=class extends Un{apply(e){return mi(e)}};XC.className="softplus";se.registerClass(XC);var YC=class extends Un{apply(e){return iV(e)}};YC.className="softsign";se.registerClass(YC);var ZC=class extends Un{apply(e){return oo(e)}};ZC.className="tanh";se.registerClass(ZC);var Iw=class extends Un{apply(e,t=-1){return Xr(e,t)}};Iw.className="softmax";se.registerClass(Iw);var JC=class extends Un{apply(e,t=-1){return nm(e,t)}};JC.className="logSoftmax";se.registerClass(JC);var QC=class extends Un{apply(e,t=1){return O(()=>B(dr(B(e,t)),e))}};QC.className="swish";se.registerClass(QC);var eN=class extends Un{apply(e){return O(()=>B(e,oo(mi(e))))}};eN.className="mish";se.registerClass(eN);function la(e){return e.getClassName()}function Iy(e,t={}){return Kd(e,se.SerializationMap.getMap().classNameMap,t,"activation")}function da(e){if(e==null){let t={};return t.className="linear",t.config={},Iy(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},Iy(t)}else return e instanceof Un?e:Iy(e)}function kw(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 tN=class extends se.Serializable{},Qd=class extends tN{constructor(e){super(),kw(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=Y(t,ge(B(this.l1,Lt(e))))),this.hasL2&&(t=Y(t,ge(B(this.l2,Yd(e))))),W(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Qd.className="L1L2";se.registerClass(Qd);function zU(e){return kw(e),new Qd({l1:e!=null?e.l1:null,l2:0})}function BU(e){return kw(e),new Qd({l2:e!=null?e.l2:null,l1:0})}var Hk={l1l2:"L1L2"};function ut(e){return ew(e)}function qk(e,t={}){return Kd(e,se.SerializationMap.getMap().classNameMap,t,"regularizer")}function Tt(e){if(e==null)return null;if(typeof e=="string"){let n={className:e in Hk?Hk[e]:e,config:{}};return qk(n)}else return e instanceof tN?e:qk(e)}var Sw=class extends Ue{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=Ce(e);let n=Xe(e);return this.maxValue!=null&&(n=en(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};Sw.className="ReLU";se.registerClass(Sw);var Tw=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Ce(e);return Ld(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};Tw.className="LeakyReLU";se.registerClass(Tw);var Cw=class extends Ue{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=St(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=Tt(e.alphaRegularizer),this.alphaConstraint=Kt(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 U(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=tt(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<e.length;++r)n[r]=e[r];this.inputSpec=[new zt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=Ce(e),Ud(e,this.alpha.read())}getConfig(){let e={alphaInitializer:Nt(this.alphaInitializer),alphaRegularizer:ut(this.alphaRegularizer),alphaConstraint:jt(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};Cw.className="PReLU";se.registerClass(Cw);var Nw=class extends Ue{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new Pe(`Non-default alpha value (${e.alpha}) is not supported by the ELU layer yet.`);this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=Ce(e);return Lu(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};Nw.className="ELU";se.registerClass(Nw);var _w=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_THETA=1,e==null&&(e={}),this.theta=e.theta==null?this.DEFAULT_THETA:e.theta}call(e,t){let n=Ce(e);return B(n,ce(An(n,this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};_w.className="ThresholdedReLU";se.registerClass(_w);var Ew=class extends Ue{constructor(e){super(e==null?{}:e),this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new Iw().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=Ce(e);return this.softmax(n,this.axis)}computeOutputShape(e){return e}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};Ew.className="Softmax";se.registerClass(Ew);function pc(e,t,n){if(typeof e=="number")return uo(e,t);if(e.length!==t)throw new U(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let r=0;r<t;++r){let s=e[r];if(!nV(s))throw new U(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${s}`)}return e}function Hr(e,t,n,r,s=1){if(e==null)return e;let a=t+(t-1)*(s-1),o;return n==="same"?o=e:o=e-a+1,Math.floor((o+r-1)/r)}function as(e,t,n,r){if(e==null)return null;if(r==="valid")e=e*t+ua([n-t,0]);else if(r==="same")e=e*t;else throw new U(`Unsupport padding mode: ${r}.`);return e}function Aw(e,t){return O(()=>(Pt(t),t==="channelsFirst"?Ee(e,[0,2,3,1]):e))}function nN(e,t){return O(()=>(Pt(t),t==="channelsFirst"?Ee(e,[0,2,3,4,1]):e))}function WU(e,t,n,r=1,s="valid",a,o=1){return O(()=>{if(a==null&&(a=jr()),Pt(a),e.shape.length!==3)throw new U(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new U(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new U(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(a==="channelsFirst"&&(e=Ee(e,[0,2,1])),s==="causal")throw new Pe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let i=Xf(e,t,r,s==="same"?"same":"valid","NWC",o);return n!=null&&(i=Yr(i,n)),i})}function jk(e,t,n,r=[1,1],s="valid",a,o,i=null){return O(()=>{if(a==null&&(a=jr()),Pt(a),e.rank!==3&&e.rank!==4)throw new U(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new U(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let c=Aw(e,a);if(s==="causal")throw new Pe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return c=Ic.conv2d({x:c,filter:t,strides:r,pad:s==="same"?"same":"valid",dilations:o,dataFormat:"NHWC",bias:n,activation:i}),a==="channelsFirst"&&(c=Ee(c,[0,3,1,2])),c})}function VU(e,t,n,r=[1,1,1],s="valid",a,o){return O(()=>{if(a==null&&(a=jr()),Pt(a),e.rank!==4&&e.rank!==5)throw new U(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new U(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let i=nN(e,a);if(s==="causal")throw new Pe("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return i=mx(i,t,r,s==="same"?"same":"valid","NDHWC",o),n!=null&&(i=Yr(i,n)),a==="channelsFirst"&&(i=Ee(i,[0,4,1,2,3])),i})}var $w=class extends Ue{constructor(e,t){if(super(t),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",$w.verifyArgs(t),this.rank=e,Qt(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Pe(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=pc(t.kernelSize,e,"kernelSize"),this.strides=pc(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,br(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Pt(this.dataFormat),this.activation=da(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=St(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Kt(t.biasConstraint),this.biasRegularizer=Tt(t.biasRegularizer),this.activityRegularizer=Tt(t.activityRegularizer),this.dilationRate=pc(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new U(`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 U(`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 U(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(ss("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!tw(e.kernelSize,"number",1,3))throw new U(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:la(this.activation),useBias:this.useBias,biasInitializer:Nt(this.biasInitializer),biasRegularizer:ut(this.biasRegularizer),activityRegularizer:ut(this.activityRegularizer),biasConstraint:jt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},ep=class extends $w{constructor(e,t){super(e,t),this.kernel=null,ep.verifyArgs(t),this.filters=t.filters,Qt(this.filters,"filters"),this.kernelInitializer=St(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Kt(t.kernelConstraint),this.kernelRegularizer=Tt(t.kernelRegularizer)}build(e){e=tt(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new U(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],r=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",r,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return O(()=>{e=Ce(e);let n,r=this.bias==null?null:this.bias.read(),s=lC(this.activation.getClassName());if(s!=null&&this.rank===2)n=jk(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate,s);else{if(this.rank===1)n=WU(e,this.kernel.read(),r,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=jk(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=VU(e,this.kernel.read(),r,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Pe("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=tt(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let s=0;s<n.length;++s){let a=Hr(n[s],this.kernelSize[s],this.padding,this.strides[s],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[s]);t.push(a)}let r=[e[0]];return this.dataFormat==="channelsLast"?(r=r.concat(t),r.push(this.filters)):(r.push(this.filters),r=r.concat(t)),r}getConfig(){let e={filters:this.filters,kernelInitializer:Nt(this.kernelInitializer),kernelRegularizer:ut(this.kernelRegularizer),kernelConstraint:jt(this.kernelConstraint)},t=super.getConfig();return Object.assign(e,t),e}static verifyArgs(e){if(!("filters"in e)||typeof e.filters!="number"||e.filters<1)throw new U(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},tp=class extends ep{constructor(e){super(2,e),tp.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!tw(e.kernelSize,"number",1,2))throw new U(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};tp.className="Conv2D";se.registerClass(tp);var np=class extends ep{constructor(e){super(3,e),np.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new U(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};np.className="Conv3D";se.registerClass(np);var Dw=class extends tp{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new U(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=tt(e),e.length!==4)throw new U("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 U("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 zt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=Ce(e);if(n.shape.length!==4)throw new U(`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],c=r[o],u=this.kernelSize[0],l=this.kernelSize[1],p=this.strides[0],d=this.strides[1],h=as(i,p,u,this.padding),f=as(c,d,l,this.padding),m=[s,h,f,this.filters];this.dataFormat!=="channelsLast"&&(n=Ee(n,[0,2,3,1]));let g=Yf(n,this.kernel.read(),m,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(g=Ee(g,[0,3,1,2])),this.bias!=null&&(g=Yr(g,this.bias.read(),this.dataFormat)),this.activation!=null&&(g=this.activation.apply(g)),g})}computeOutputShape(e){e=tt(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],c=this.strides[1];return t[n]=this.filters,t[r]=as(t[r],i,a,this.padding),t[s]=as(t[s],c,o,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Dw.className="Conv2DTranspose";se.registerClass(Dw);var Fw=class extends np{constructor(e){if(super(e),this.inputSpec=[new zt({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new U(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=tt(e),e.length!==5)throw new U("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 U("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 zt({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=Ce(e);if(n.shape.length!==5)throw new U(`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 c=r[i],u=r[a],l=r[o],p=this.kernelSize[0],d=this.kernelSize[1],h=this.kernelSize[2],f=this.strides[0],m=this.strides[1],g=this.strides[2],b=as(c,f,p,this.padding),y=as(u,m,d,this.padding),v=as(l,g,h,this.padding),x=[s,b,y,v,this.filters];this.dataFormat!=="channelsLast"&&(n=Ee(n,[0,2,3,4,1]));let k=gx(n,this.kernel.read(),x,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(k=Ee(k,[0,4,1,2,3])),this.bias!==null&&(k=Yr(k,this.bias.read(),this.dataFormat)),this.activation!==null&&(k=this.activation.apply(k)),k})}computeOutputShape(e){e=tt(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],c=this.kernelSize[2],u=this.strides[0],l=this.strides[1],p=this.strides[2];return t[n]=this.filters,t[r]=as(t[r],u,o,this.padding),t[s]=as(t[s],l,i,this.padding),t[a]=as(t[a],p,c,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};Fw.className="Conv3DTranspose";se.registerClass(Fw);var rN=class extends ep{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 U("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new U("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 U(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=Tt(t.depthwiseRegularizer),this.depthwiseConstraint=Kt(t.depthwiseConstraint),this.pointwiseInitializer=St(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=Tt(t.pointwiseRegularizer),this.pointwiseConstraint=Kt(t.pointwiseConstraint)}build(e){if(e=tt(e),e.length<this.rank+2)throw new U(`Inputs to SeparableConv${this.rank}D should have rank ${this.rank+2}, but received input shape: ${JSON.stringify(e)}`);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null||e[t]<0)throw new U(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],r=this.kernelSize.concat([n,this.depthMultiplier]),s=[];for(let o=0;o<this.rank;++o)s.push(1);s.push(n*this.depthMultiplier,this.filters);let a=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",r,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,a,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",s,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,a,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,a,this.biasConstraint):this.bias=null,this.inputSpec=[new zt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{e=Ce(e);let n;if(this.rank===1)throw new Pe("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Ee(e,[0,2,3,1])),n=Ca(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Yr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Ee(n,[0,3,1,2])),n})}getConfig(){let e=super.getConfig();return delete e.rank,delete e.kernelInitializer,delete e.kernelRegularizer,delete e.kernelConstraint,e.depthwiseInitializer=Nt(this.depthwiseInitializer),e.pointwiseInitializer=Nt(this.pointwiseInitializer),e.depthwiseRegularizer=ut(this.depthwiseRegularizer),e.pointwiseRegularizer=ut(this.pointwiseRegularizer),e.depthwiseConstraint=jt(this.depthwiseConstraint),e.pointwiseConstraint=jt(this.pointwiseConstraint),e}};rN.className="SeparableConv";var Rw=class extends rN{constructor(e){super(2,e)}};Rw.className="SeparableConv2D";se.registerClass(Rw);var Wm=class extends ep{constructor(e){super(1,e),Wm.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!tw(e.kernelSize,"number",1,1))throw new U(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};Wm.className="Conv1D";se.registerClass(Wm);var Pw=class extends Ue{constructor(e){super(e),typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return O(()=>{if(e=Ce(e),this.dataFormat==="channelsLast"){let n=uh(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return uh(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=uh(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return uh(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}};Pw.className="Cropping2D";se.registerClass(Pw);var Ow=class extends Ue{constructor(e){super(e),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,Q4(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=Ce(e),r=n.shape;if(this.dataFormat==="channelsFirst"){n=Ee(n,[0,2,3,1]);let s=this.size[0]*r[2],a=this.size[1]*r[3],o=this.interpolation==="nearest"?Br.resizeNearestNeighbor(n,[s,a]):Br.resizeBilinear(n,[s,a]);return Ee(o,[0,3,1,2])}else{let s=this.size[0]*r[1],a=this.size[1]*r[2];return this.interpolation==="nearest"?Br.resizeNearestNeighbor(n,[s,a]):Br.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}};Ow.className="UpSampling2D";se.registerClass(Ow);function UU(e,t,n=[1,1],r="valid",s,a){return O(()=>{s==null&&(s=jr()),Pt(s);let o=Aw(e,s);if(e.rank!==4)throw new U(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new U(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return o=Sa(o,t,n,r==="same"?"same":"valid","NHWC",a),s==="channelsFirst"&&(o=Ee(o,[0,3,1,2])),o})}var Mw=class extends $w{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=Kt(e.depthwiseConstraint),this.depthwiseRegularizer=Tt(e.depthwiseRegularizer)}build(e){if(e=tt(e),e.length<4)throw new U(`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 U(`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=Ce(e);let n=UU(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Yr(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=tt(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=Hr(t,this.kernelSize[0],this.padding,this.strides[0]),a=Hr(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=Nt(this.depthwiseInitializer),e.depthwiseRegularizer=ut(this.depthwiseRegularizer),e.depthwiseConstraint=jt(this.depthwiseRegularizer),e}};Mw.className="DepthwiseConv2D";se.registerClass(Mw);function sN(e,t,n,r){if(Array.isArray(e)){if(t!=null||n!=null)throw new U("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 aN(e,t,n,r=!1,s,a,o=!1,i=!1){return O(()=>{let c=t.shape.length;if(c<3)throw new U(`Input should be at least 3D, but is ${c}D.`);let u=[1,0].concat(qr(2,c));if(t=Ee(t,u),a!=null)throw new Pe("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=ce(ce(s,"bool"),"float32"),s.rank===c-1&&(s=Zt(s,-1)),s=Ee(s,u)),r&&(t=fr(t,0),s!=null&&(s=fr(s,0)));let l=[],p,d=n,h=t.shape[0],f=lt(t),m;s!=null&&(m=lt(s));for(let b=0;b<h;++b){let y=f[b],v=O(()=>e(y,d));if(s==null)p=v[0],d=v[1];else{let x=O(()=>{let k=m[b],S=de(rr(k),k),C=Y(B(v[0],k),B(d[0],S)),E=d.map(($,F)=>Y(B(v[1][F],k),B($,S)));return{output:C,newStates:E}});p=x.output,d=x.newStates}i&&l.push(p)}let g;return i&&(g=Ft(l,1)),[p,g,d]})}var ms=class extends Ue{constructor(e){super(e);let t;if(e.cell==null)throw new U("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new Gm({cells:e.cell}):t=e.cell,t.stateSize==null)throw new U("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new zt({ndim:3})],this.stateSpec=null,this.states_=null,this.numConstants=null,this.keptStates=[]}getStates(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;return qr(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){qy(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],r;if(this.returnSequences?r=[e[0],e[1],n]:r=[e[0],n],this.returnState){let s=[];for(let a of t)s.push([e[0],a]);return[r].concat(s)}else return r}computeMask(e,t){return O(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let r=this.states.map(s=>null);return[n].concat(r)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;n<e;++n)t.push(null);return t}else return this.states_}set states(e){this.states_=e}build(e){if(this.numConstants!=null)throw new Pe("Constants support is not implemented in RNN yet.");qy(e)&&(e=e[0]),e=e;let n=this.stateful?e[0]:null,r=e.slice(2);this.inputSpec[0]=new zt({shape:[n,null,...r]});let s=[e[0]].concat(e.slice(2));this.cell.build(s);let a;if(Array.isArray(this.cell.stateSize)?a=this.cell.stateSize:a=[this.cell.stateSize],this.stateSpec!=null){if(!w.arraysEqual(this.stateSpec.map(o=>o.shape[o.shape.length-1]),a))throw new U(`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=a.map(o=>new zt({shape:[null,o]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){O(()=>{if(!this.stateful)throw new ks("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new U("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(r=>kt([n,r])):this.states_=[kt([n,this.cell.stateSize])];else if(e==null)_e(this.states_),this.keptStates!=null&&(_e(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(r=>kt([n,r])):this.states_[0]=kt([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new U(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):_e(this.states_);for(let r=0;r<this.states_.length;++r){let s=e[r],a=Array.isArray(this.cell.stateSize)?this.cell.stateSize[r]:this.cell.stateSize,o=[n,a];if(!w.arraysEqual(s.shape,o))throw new U(`State ${r} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${s.shape}`);this.states_[r]=s}}this.states_=this.states_.map(r=>Jt(r.clone()))})}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let s=sN(e,n,r,this.numConstants);e=s.inputs,n=s.initialState,r=s.constants;let a=[],o=[];if(n!=null){t.initialState=n,a=a.concat(n),this.stateSpec=[];for(let c of n)this.stateSpec.push(new zt({shape:c.shape}));o=o.concat(this.stateSpec)}if(r!=null&&(t.constants=r,a=a.concat(r),this.numConstants=r.length),a[0]instanceof Vr){let c=[e].concat(a),u=this.inputSpec.concat(o),l=this.inputSpec;this.inputSpec=u;let p=super.apply(c,t);return this.inputSpec=l,p}else return super.apply(e,t)}call(e,t){return O(()=>{let n=t==null?null:t.mask,r=t==null?null:t.training,s=t==null?null:t.initialState;e=Ce(e),s==null&&(this.stateful?s=this.states_:s=this.getInitialState(e));let a=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(s.length!==a)throw new U(`RNN Layer has ${a} state(s) but was passed ${s.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let o={training:r},c=aN((h,f)=>{let m=this.cell.call([h].concat(f),o);return[m[0],m.slice(1)]},e,s,this.goBackwards,n,null,this.unroll,this.returnSequences),u=c[0],l=c[1],p=c[2];this.stateful&&this.resetStates(p,r);let d=this.returnSequences?l:u;return this.returnState?[d].concat(p):d})}getInitialState(e){return O(()=>{let t=kt(e.shape);return t=ge(t,[1,2]),t=Xd(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?Gy(t,[1,n]):t):this.cell.stateSize>1?[Gy(t,[1,this.cell.stateSize])]:[t]})}get trainableWeights(){return this.trainable?this.cell.trainableWeights:[]}get nonTrainableWeights(){return this.trainable?this.cell.nonTrainableWeights:this.cell.weights}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.cell!=null&&this.cell.setFastWeightInitDuringBuild(e)}getConfig(){let e=super.getConfig(),t={returnSequences:this.returnSequences,returnState:this.returnState,goBackwards:this.goBackwards,stateful:this.stateful,unroll:this.unroll};this.numConstants!=null&&(t.numConstants=this.numConstants);let n=this.cell.getConfig();return this.getClassName()===ms.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign(Object.assign(Object.assign({},n),e),t)}static fromConfig(e,t,n={}){let r=t.cell,s=Gr(r,n);return new e(Object.assign(t,{cell:s}))}};ms.className="RNN";se.registerClass(ms);var rp=class extends Ue{},Vm=class extends rp{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,Qt(this.units,"units"),this.activation=da(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Kt(e.kernelConstraint),this.recurrentConstraint=Kt(e.recurrentConstraint),this.biasConstraint=Kt(e.biasConstraint),this.dropout=kc([1,ua([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=kc([1,ua([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=tt(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 U(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let r=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=pa({ones:()=>rr(e),rate:this.dropout,training:r,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=pa({ones:()=>rr(n),rate:this.recurrentDropout,training:r,dropoutFunc:this.dropoutFunc}));let s,a=this.dropoutMask,o=this.recurrentDropoutMask;a!=null?s=cs(B(e,a),this.kernel.read()):s=cs(e,this.kernel.read()),this.bias!=null&&(s=Yr(s,this.bias.read())),o!=null&&(n=B(n,o));let i=Y(s,cs(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:la(this.activation),useBias:this.useBias,kernelInitializer:Nt(this.kernelInitializer),recurrentInitializer:Nt(this.recurrentInitializer),biasInitializer:Nt(this.biasInitializer),kernelRegularizer:ut(this.kernelRegularizer),recurrentRegularizer:ut(this.recurrentRegularizer),biasRegularizer:ut(this.biasRegularizer),activityRegularizer:ut(this.activityRegularizer),kernelConstraint:jt(this.kernelConstraint),recurrentConstraint:jt(this.recurrentConstraint),biasConstraint:jt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign(Object.assign({},e),t)}};Vm.className="SimpleRNNCell";se.registerClass(Vm);var Lw=class extends ms{constructor(e){e.cell=new Vm(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)}};Lw.className="SimpleRNN";se.registerClass(Lw);var Um=class extends rp{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 U("GRUCell does not support reset_after parameter set to true.");this.units=e.units,Qt(this.units,"units"),this.activation=da(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=da(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Kt(e.kernelConstraint),this.recurrentConstraint=Kt(e.recurrentConstraint),this.biasConstraint=Kt(e.biasConstraint),this.dropout=kc([1,ua([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=kc([1,ua([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=tt(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 U(`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],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=pa({ones:()=>rr(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=pa({ones:()=>rr(r),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,a=this.recurrentDropoutMask,o,i,c;0<this.dropout&&this.dropout<1&&(e=B(e,s[0]));let u=cs(e,this.kernel.read());this.useBias&&(u=Yr(u,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(r=B(r,a[0]));let l=this.recurrentKernel.read(),[p,d]=zn(l,[2*this.units,this.units],l.rank-1),h=cs(r,p),[f,m,g]=zn(u,3,u.rank-1),[b,y]=zn(h,2,h.rank-1);o=this.recurrentActivation.apply(Y(f,b)),i=this.recurrentActivation.apply(Y(m,y));let v=cs(B(i,r),d);c=this.activation.apply(Y(g,v));let x=Y(B(o,r),B(Y(1,xt(o)),c));return[x,x]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:la(this.activation),recurrentActivation:la(this.recurrentActivation),useBias:this.useBias,kernelInitializer:Nt(this.kernelInitializer),recurrentInitializer:Nt(this.recurrentInitializer),biasInitializer:Nt(this.biasInitializer),kernelRegularizer:ut(this.kernelRegularizer),recurrentRegularizer:ut(this.recurrentRegularizer),biasRegularizer:ut(this.biasRegularizer),activityRegularizer:ut(this.activityRegularizer),kernelConstraint:jt(this.kernelConstraint),recurrentConstraint:jt(this.recurrentConstraint),biasConstraint:jt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign(Object.assign({},e),t)}};Um.className="GRUCell";se.registerClass(Um);var zw=class extends ms{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new Um(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 t.implmentation===0&&(t.implementation=1),new e(t)}};zw.className="GRU";se.registerClass(zw);var sp=class extends rp{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,Qt(this.units,"units"),this.activation=da(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=da(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=St(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=St(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=St(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=Tt(e.kernelRegularizer),this.recurrentRegularizer=Tt(e.recurrentRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.kernelConstraint=Kt(e.kernelConstraint),this.recurrentConstraint=Kt(e.recurrentConstraint),this.biasConstraint=Kt(e.biasConstraint),this.dropout=kc([1,ua([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=kc([1,ua([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=tt(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,c){let u=s.apply([a]),l=new $m().apply([a]),p=s.apply([a*2]);return Ak(Ak(u,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 U(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let r=e[1],s=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=pa({ones:()=>rr(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=pa({ones:()=>rr(r),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let a=this.dropoutMask,o=this.recurrentDropoutMask,i,c,u,l;0<this.dropout&&this.dropout<1&&(e=B(e,a[0]));let p=cs(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(r=B(r,o[0])),p=Y(p,cs(r,this.recurrentKernel.read())),this.useBias&&(p=Yr(p,this.bias.read()));let[d,h,f,m]=zn(p,4,p.rank-1);i=this.recurrentActivation.apply(d),c=this.recurrentActivation.apply(h),u=Y(B(c,s),B(i,this.activation.apply(f))),l=this.recurrentActivation.apply(m);let g=B(l,this.activation.apply(u));return[g,g,u]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:la(this.activation),recurrentActivation:la(this.recurrentActivation),useBias:this.useBias,kernelInitializer:Nt(this.kernelInitializer),recurrentInitializer:Nt(this.recurrentInitializer),biasInitializer:Nt(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:ut(this.kernelRegularizer),recurrentRegularizer:ut(this.recurrentRegularizer),biasRegularizer:ut(this.biasRegularizer),activityRegularizer:ut(this.activityRegularizer),kernelConstraint:jt(this.kernelConstraint),recurrentConstraint:jt(this.recurrentConstraint),biasConstraint:jt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign(Object.assign({},e),t)}};sp.className="LSTMCell";se.registerClass(sp);var Bw=class extends ms{constructor(e){e.implementation===0&&console.warn("`implementation=0` has been deprecated, and now defaults to `implementation=1`. Please update your layer call."),e.cell=new sp(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 t.implmentation===0&&(t.implementation=1),new e(t)}};Bw.className="LSTM";se.registerClass(Bw);var Gm=class extends rp{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<this.cells.length;++o){let i=this.cells[o];n=r[o],o===0?a=[e[0]].concat(n):a=[a[0]].concat(n),a=i.call(a,t),s.push(a.slice(1))}n=[];for(let o of s.slice().reverse())n.push(...o);return[a[0]].concat(n)})}build(e){qy(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,r)=>{Za(`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(Gr(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 jy(e)}setWeights(e){let t=[];for(let n of this.cells){let r=n.weights.length,s=e.splice(r);for(let a=0;a<n.weights.length;++a)t.push([n.weights[a],s[a]])}lw(t)}};Gm.className="StackedRNNCells";se.registerClass(Gm);function pa(e){let{ones:t,rate:n,training:r=!1,count:s=1,dropoutFunc:a}=e,o=()=>a!=null?a(t(),n):bC(t(),n),i=()=>Zd(o,t,r);return!s||s<=1?Jt(i().clone()):Array(s).fill(void 0).map(i).map(u=>Jt(u.clone()))}var GU=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<r.length;s++)t.indexOf(r[s])<0&&Object.prototype.propertyIsEnumerable.call(e,r[s])&&(n[r[s]]=e[r[s]]);return n},oN=class extends ms{constructor(e){if(e.unroll)throw new Pe("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new Pe("It is not possible at the moment to stack convolutional cells.");super(e),this.inputSpec=[new zt({ndim:5})]}call(e,t){return O(()=>{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 U("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 ks("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 U("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 U(`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;o<this.states_.length;++o){let i=e[o],c=s;if(!w.arraysEqual(i.shape,c))throw new U(`State ${o} is incompatible with layer ${this.name}: expected shape=${c}, received shape=${i.shape}`);this.states_[o]=i}}this.states_=this.states_.map(o=>Jt(o.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:r,padding:s,strides:a,dilationRate:o}=this.cell,i=t==="channelsFirst",c=e[i?3:2],u=e[i?4:3],l=Hr(c,r[0],s,a[0],o[0]),p=Hr(u,r[1],s,a[1],o[1]);return[...e.slice(0,2),...i?[n,l,p]:[l,p,n]]}};oN.className="ConvRNN2D";var Hm=class extends sp{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,Qt(this.filters,"filters"),this.kernelSize=pc(n,2,"kernelSize"),this.kernelSize.forEach(i=>Qt(i,"kernelSize")),this.strides=pc(r||1,2,"strides"),this.strides.forEach(i=>Qt(i,"strides")),this.padding=s||"valid",br(this.padding),this.dataFormat=a||"channelsLast",Pt(this.dataFormat),this.dilationRate=pc(o||1,2,"dilationRate"),this.dilationRate.forEach(i=>Qt(i,"dilationRate"))}build(e){var t;e=tt(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new U(`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 c=this.biasInitializer,u=this.filters;i=new(t=class extends Pr{apply(p,d){let h=c.apply([u]),f=Qn([u]),m=c.apply([u*2]);return nw([h,f,m])}},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 U(`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;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=pa({ones:()=>rr(r),rate:this.dropout,training:n,count:o,dropoutFunc:this.dropoutFunc}));let i=this.dropoutMask,c=(Z,J,ee)=>!J||!J[ee]?Z:B(J[ee],Z),u=c(r,i,0),l=c(r,i,1),p=c(r,i,2),d=c(r,i,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=pa({ones:()=>rr(s),rate:this.recurrentDropout,training:n,count:o,dropoutFunc:this.dropoutFunc}));let h=this.recurrentDropoutMask,f=c(s,h,0),m=c(s,h,1),g=c(s,h,2),b=c(s,h,3),y=3,[v,x,k,S]=zn(this.kernel.read(),o,y),[C,E,$,F]=this.useBias?zn(this.bias.read(),o):[null,null,null,null];u=this.inputConv(u,v,C,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[A,R,T,L]=zn(this.recurrentKernel.read(),o,y);f=this.recurrentConv(f,A),m=this.recurrentConv(m,R),g=this.recurrentConv(g,T),b=this.recurrentConv(b,L);let V=this.recurrentActivation.apply(Y(u,f)),G=this.recurrentActivation.apply(Y(l,m)),j=Y(B(G,a),B(V,this.activation.apply(Y(p,g)))),H=B(this.recurrentActivation.apply(Y(d,b)),this.activation.apply(j));return[H,H,j]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=GU(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=Dt(e,t,this.strides,r||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Yr(s,n,this.dataFormat):s}recurrentConv(e,t){return Dt(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};Hm.className="ConvLSTM2DCell";se.registerClass(Hm);var Ww=class extends oN{constructor(e){let t=new Hm(e);super(Object.assign(Object.assign({},e),{cell:t}))}static fromConfig(e,t){return new e(t)}};Ww.className="ConvLSTM2D";se.registerClass(Ww);var qm=class extends Ue{constructor(e){super(e),this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let r=0;r<this.noiseShape.length;++r)n.push(this.noiseShape[r]==null?t[r]:this.noiseShape[r]);return n}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);if(0<this.rate&&this.rate<1){let r=t.training==null?!1:t.training,s=this.getNoiseShape(n);return Zd(()=>bC(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()}};qm.className="Dropout";se.registerClass(qm);var Vw=class extends qm{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};Vw.className="SpatialDropout1D";se.registerClass(Vw);var Uw=class extends Ue{constructor(e){if(super(e),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,Qt(this.units,"units"),this.activation=da(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=Kt(e.kernelConstraint),this.biasConstraint=Kt(e.biasConstraint),this.kernelRegularizer=Tt(e.kernelRegularizer),this.biasRegularizer=Tt(e.biasRegularizer),this.activityRegularizer=Tt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=tt(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=tt(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e),r=lC(this.activation.getClassName()),s;return r!=null?s=cs(n,this.kernel.read(),r,this.bias?this.bias.read():null):(s=cs(n,this.kernel.read()),this.bias!=null&&(s=Yr(s,this.bias.read())),this.activation!=null&&(s=this.activation.apply(s))),s})}getConfig(){let e={units:this.units,activation:la(this.activation),useBias:this.useBias,kernelInitializer:Nt(this.kernelInitializer),biasInitializer:Nt(this.biasInitializer),kernelRegularizer:ut(this.kernelRegularizer),biasRegularizer:ut(this.biasRegularizer),activityRegularizer:ut(this.activityRegularizer),kernelConstraint:jt(this.kernelConstraint),biasConstraint:jt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Uw.className="Dense";se.registerClass(Uw);var Gw=class extends Ue{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=tt(e);for(let t of e.slice(1))if(t==null)throw new U(`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],aa(e,1)]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let r=[0];for(let s=2;s<n.rank;++s)r.push(s);r.push(1),n=Ee(n,r)}return aV(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Gw.className="Flatten";se.registerClass(Gw);var Hw=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.activation=da(e.activation)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);return this.activation.apply(n)})}getConfig(){let e={activation:la(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Hw.className="Activation";se.registerClass(Hw);var qw=class extends Ue{constructor(e){super(e),this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return O(()=>(e=Ce(e),rV(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};qw.className="RepeatVector";se.registerClass(qw);var jw=class extends Ue{constructor(e){super(e),this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",r=t.slice(),s=1,a=null;for(let i=0;i<r.length;++i){let c=r[i];if(this.isUnknown(c))if(a===null)a=i;else throw new U("Can only specifiy one unknown dimension.");else s*=c}let o=aa(e);if(a!==null){if(s===0||o%s!==0)throw new U(n);r[a]=o/s}else if(o!==s)throw new U(n);return r}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(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}};jw.className="Reshape";se.registerClass(jw);var Kw=class extends Ue{constructor(e){if(super(e),e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=qr(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 zt({ndim:this.dims.length+1})]}computeOutputShape(e){e=tt(e);let t=e.slice();return this.dims.forEach((n,r)=>{t[r+1]=e[n]}),t}call(e,t){return Ee(Ce(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};Kw.className="Permute";se.registerClass(Kw);var Xw=class extends Ue{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=Ce(e),r=-1;return Ql(co(n,this.maskValue),r)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e),r=-1,s=!0,a=Ql(co(n,this.maskValue),r,s);return B(n,ce(a,n.dtype))})}};Xw.className="Masking";se.registerClass(Xw);var Yw=class extends Ue{constructor(e){if(super(e),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(vt(e.inputLength))}this.inputDim=e.inputDim,Qt(this.inputDim,"inputDim"),this.outputDim=e.outputDim,Qt(this.outputDim,"outputDim"),this.embeddingsInitializer=St(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=Tt(e.embeddingsRegularizer),this.activityRegularizer=Tt(e.activityRegularizer),this.embeddingsConstraint=Kt(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=Ce(e),co(e,qe(e))):null)}computeOutputShape(e){if(e=tt(e),this.inputLength==null)return[...e,this.outputDim];let t=vt(this.inputLength);if(t.length!==e.length-1)throw new U(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let r=0;r<t.length;++r){let s=t[r],a=e[r+1];if(s!=null&&a!=null&&s!==a)throw new U(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);s==null&&(t[n]=a),n++}}return[e[0],...t,this.outputDim]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);n.dtype!=="int32"&&(n=vi(n,"int32"));let r=gC(this.embeddings.read(),W(n,[n.size]));return W(r,tt(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:Nt(this.embeddingsInitializer),embeddingsRegularizer:ut(this.embeddingsRegularizer),activityRegularizer:ut(this.activityRegularizer),embeddingsConstraint:jt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};Yw.className="Embedding";se.registerClass(Yw);var wi=class extends Ue{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Pe}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let r=0;r<t.length;++r){let s=e[e.length-t.length+r],a=t[r];if(s==null||a==null||s<0||a<0)n.push(null);else if(s===1)n.push(a);else if(a===1)n.push(s);else{if(s!==a)throw new U("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(s)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[tt(e)]),e=e,e.length<2)throw new U(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let s of e)s!=null&&s[0]!==null&&t.push(s[0]);if(t=sa(t),t.length>1)throw new U(`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;s<e.length;++s){let a=e[s]==null?null:e[s].slice(1);n=this.computeElementwiseOpOutputShape(n,a)}let r=e.map(s=>s.length);e.indexOf(null)===-1&&sa(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=ua(r);for(let a of e){let o=a.rank;for(let i=0;i<s-o;++i)a=Xd(a,1);n.push(a)}return this.mergeFunction(n)}else{let s=!1;for(let i of e){let c=i.rank;if(c==null){let u=i.shape,l=u[0],p=u.slice(1).concat([l]),d=W(i,[l].concat(aa(u.slice(1))));d=Ee(d,[1,0]),d=W(d,p),n.push(d),s=!0}else if(c>1){let u=qr(1,c).concat([0]);n.push(Ee(i,u)),s=!0}else n.push(i)}let a=this.mergeFunction(n),o=a.rank;if(s){if(o==null){let i=a.shape,c=i.length,u=i[c-1],l=[u].concat(i.slice(0,i.length-1));a=W(Ee(W(a,[-1,u]),[1,0]),l)}else if(o>1){let i=[o-1].concat(qr(0,o-1));a=Ee(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<e.length;++r){let s=e[r]==null?null:e[r].slice(1);t=this.computeElementwiseOpOutputShape(t,s)}let n=[];for(let r of e)r!=null&&r[0]!==null&&n.push(r[0]);return n=sa(n),n.length===1?t=n.concat(t):t=[null].concat(t),t}computeMask(e,t){return O(()=>{if(t==null)return null;if(!Array.isArray(t))throw new U("`mask` should be an Array");if(!Array.isArray(e))throw new U("`inputs` should be an Array");if(t.length!==e.length)throw new U(`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:Zt(r,0));let n=t[0];for(let r=1;r<t.length-1;++r)n=Dr(n,t[r]);return n})}},Zw=class extends wi{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=Y(t,e[n]);return t})}};Zw.className="Add";se.registerClass(Zw);var Jw=class extends wi{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=B(t,e[n]);return t})}};Jw.className="Multiply";se.registerClass(Jw);var Qw=class extends wi{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=Y(t,e[n]);return B(1/e.length,t)})}};Qw.className="Average";se.registerClass(Qw);var e0=class extends wi{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=hs(t,e[n]);return t})}};e0.className="Maximum";se.registerClass(e0);var t0=class extends wi{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=Vu(t,e[n]);return t})}};t0.className="Minimum";se.registerClass(t0);var n0=class extends wi{constructor(e){super(e),this.DEFAULT_AXIS=-1,e==null&&(e={}),this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){if(!(Array.isArray(e)&&Array.isArray(e[0]))||e.length===1)throw new U("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let r of e)if(r!=null){t=!1;break}if(t)return;let n=[];for(let r=0;r<e.length;++r){let s=e[r].slice();s.splice(this.axis,1);let a=!1;for(let o of n)if(w.arraysEqual(o,s)){a=!0;break}a||n.push(s)}if(n.length>1)throw new U("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return O(()=>nw(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new U("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 U("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new U("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new U(`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;a<e.length;++a)t[a]==null?r.push(ce(rr(e[a]),"bool")):t[a].rank<e[a].rank?r.push(Zt(t[a],-1)):r.push(t[a]);let s=Je(r,this.axis);return Kf(s,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};n0.className="Concatenate";se.registerClass(n0);function Al(e,t){for(;e<0;)e+=t;return e}function HU(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new Pe("batchDot is not implemented for tensors of 4D or higher rank yet");if(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 Pe("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 c=[];for(let u=0;u<o;++u)c.push(1);t=W(t,t.shape.concat(c))}else if(s>r){o=s-r;let c=[];for(let u=0;u<o;++u)c.push(1);e=W(e,e.shape.concat(c))}else o=0;let i;if(e.shape.length===2&&t.shape.length===2)a[0]===a[1]?i=ge(B(e,t),a[0]):i=ge(B(Ee(e,[1,0]),t),a[1]);else{let c=a[0]!==e.shape.length-1,u=a[1]===t.shape.length-1;i=De(e,t,c,u)}if(o>0){let c;r>s?c=r+s-3:c=r-1;let u=[];for(let l=c;l<c+o;++l)u.push(l);i=Na(i,u)}return i.shape.length===1&&(i=Zt(i,1)),i})}var r0=class extends wi{constructor(e){super(e),this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(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],n=e[1];if(t.length>3||n.length>3)throw new Pe("Dot layer does not support tensors of 4D or higher rank yet.");let r=this.interpretAxes(t,n);if(t[r[0]]!==n[r[1]])throw new U(`Dimension incompatibility: ${t[r[0]]} !== ${n[r[1]]}`)}mergeFunction(e){if(e.length!==2)throw new U(`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)=>Al(s,e[a].shape.length)):r=[Al(this.axes,t.shape.length),Al(this.axes,n.shape.length)],this.normalize&&(t=Hh(t,r[0]),n=Hh(n,r[1])),HU(t,n,r)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Al(this.axes,e.length),Al(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 Pe("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}};r0.className="Dot";se.registerClass(r0);var s0=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);return Zd(()=>Y(Am(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};s0.className="GaussianNoise";se.registerClass(s0);var a0=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=Ce(e);return this.rate>0&&this.rate<1?Zd(()=>{let s=Math.sqrt(this.rate/(1-this.rate));return B(n,Am(n.shape,1,s))},()=>n,t.training||!1):n})}};a0.className="GaussianDropout";se.registerClass(a0);var o0=class extends Ue{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||Ce(e).shape}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return O(()=>{if(this.rate<1&&this.rate>0){let n=this._getNoiseShape(e);return Zd(()=>{let s=Ce(e),a=1.6732632423543772,o=1.0507009873554805,i=-a*o,c=Ds(Uu(n),this.rate);c=vi(c,"float32");let u=((1-this.rate)*(1+this.rate*i**2))**-.5,l=-u*i*this.rate,p=Y(B(s,c),B(Y(c,-1),i));return Y(B(p,u),l)},()=>Ce(e),t.training||!1)}return e})}};o0.className="AlphaDropout";se.registerClass(o0);function rd(e,t,n,r,s,a=.001){let o;if(e.rank===2)o=ax(e,t,n,r,s,a);else if(e.rank===3)o=ox(e,t,n,r,s,a);else if(e.rank===4)o=ix(e,t,n,r,s,a);else throw new Pe(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return o}function qU(e,t,n,r,s=.001){return O(()=>{let a=Wd(e,r),o=a.mean,i=a.variance;return[rd(e,o,i,n,t,s),o,i]})}function jU(e,t,n,r,s=.001){return O(()=>{let a=Wd(e,r),o=a.mean,i=a.variance,c=[];for(let f of qr(0,e.rank))r.indexOf(f)!==-1?c.push(1):c.push(e.shape[f]);let u=W(o,c),l=W(i,c),p=t==null?null:W(t,c),d=n==null?null:W(n,c);return[rd(e,u,l,d,p,s),o,i]})}function KU(e,t,n,r,s=.001){return w.arraysEqual(r.slice().sort(),qr(0,e.rank-1))?qU(e,t,n,r,s):jU(e,t,n,r,s)}var i0=class extends Ue{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.movingMeanInitializer=St(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=St(e.movingVarianceInitializer||"ones"),this.betaConstraint=Kt(e.betaConstraint),this.gammaConstraint=Kt(e.gammaConstraint),this.betaRegularizer=Tt(e.betaRegularizer),this.gammaRegularizer=Tt(e.gammaRegularizer)}build(e){e=tt(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new U(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new zt({ndim:e.length,axes:{[t]:n}})];let 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=Ce(e),s=r.shape,a=s.length,o=qr(0,a),i=this.axis>=0?this.axis:this.axis+a;o.splice(i,1);let c=uo(1,a);c[i]=s[i];let u=o.slice();u.sort();let l=!w.arraysEqual(u,qr(0,a).slice(0,a-1)),p=()=>{if(l){let b=W(this.movingMean.read(),c),y=W(this.movingVariance.read(),c),v=this.center?W(this.beta.read(),c):null,x=this.scale?W(this.gamma.read(),c):null;return rd(r,b,y,v,x,this.epsilon)}else return rd(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]=KU(r,this.gamma.read(),this.beta.read(),o,this.epsilon),m=(b,y,v)=>{O(()=>{let x=1-v,k=b.read(),S=B(de(k,y),x);b.write(de(k,S))})};return(()=>{m(this.movingMean,h,this.momentum),m(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:Nt(this.betaInitializer),gammaInitializer:Nt(this.gammaInitializer),movingMeanInitializer:Nt(this.movingMeanInitializer),movingVarianceInitializer:Nt(this.movingVarianceInitializer),betaRegularizer:ut(this.betaRegularizer),gammaRegularizer:ut(this.gammaRegularizer),betaConstraint:jt(this.betaConstraint),gammaConstraint:jt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};i0.className="BatchNormalization";se.registerClass(i0);var c0=class extends Ue{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=St(e.betaInitializer||"zeros"),this.gammaInitializer=St(e.gammaInitializer||"ones"),this.betaRegularizer=Tt(e.betaRegularizer),this.gammaRegularizer=Tt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=tt(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let s=0;s<this.axis.length;++s)this.axis[s]<0&&(this.axis[s]+=t);for(let s of this.axis)if(s<0||s>=t)throw new Error(`Invalid axis: ${s}`);if(this.axis.length!==sa(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=Ce(e),r=n.shape,s=r.length;return O(()=>{let{mean:o,variance:i}=Wd(n,this.axis,!0),c=uo(1,s);for(let f of this.axis)c[f]=r[f];let u=f=>f!=null&&f.shape.length!==s?W(f,c):f,l=this.scale?u(this.gamma.read()):null,p=this.center?u(this.beta.read()):null,d=[],h=[];for(let f=0;f<s;++f)this.axis.indexOf(f)!==-1?(d.push(r[f]),h.push(1)):(d.push(1),h.push(r[f]));return o=Ln(o,d),i=Ln(i,d),l!=null&&(l=Ln(l,h)),p!=null&&(p=Ln(p,h)),rd(n,o,i,p,l,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:Nt(this.betaInitializer),gammaInitializer:Nt(this.gammaInitializer),betaRegularizer:ut(this.betaRegularizer),gammaRegularizer:ut(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};c0.className="LayerNormalization";se.registerClass(c0);function XU(e,t,n){return O(()=>{if(e.rank!==4)throw new U(`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 U("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=jr()),n!=="channelsLast"&&n!=="channelsFirst")throw new U(`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]],gr(e,r)})}var u0=class extends Ue{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?jr():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 U(`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 U(`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 U(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){e=tt(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(()=>XU(Ce(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};u0.className="ZeroPadding2D";se.registerClass(u0);function jm(e,t,n,r,s,a){return O(()=>{Pt(s),pC(a),br(r),n==null&&(n=[1,1]),r==null&&(r="valid"),s==null&&(s=jr()),a==null&&(a="max"),e=Aw(e,s);let o,i=r==="same"?"same":"valid";return a==="max"?o=Rt(e,t,n,i):o=mr(e,t,n,i),s==="channelsFirst"&&(o=Ee(o,[0,3,1,2])),o})}function iN(e,t,n,r,s,a){return O(()=>{Pt(s),pC(a),br(r),n==null&&(n=[1,1,1]),r==null&&(r="valid"),s==null&&(s=jr()),a==null&&(a="max"),e=nN(e,s);let o,i=r==="same"?"same":"valid";return a==="max"?o=Dx(e,t,n,i):o=sx(e,t,n,i),s==="channelsFirst"&&(o=Ee(o,[0,4,1,2,3])),o})}var cN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new U(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(Qt(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 U(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);Qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,br(this.padding),this.inputSpec=[new zt({ndim:3})]}computeOutputShape(e){e=tt(e);let t=Hr(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=Xd(Ce(e),2);let n=this.poolingFunction(Ce(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return Na(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},l0=class extends cN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),jm(e,t,n,r,s,"max")}};l0.className="MaxPooling1D";se.registerClass(l0);var d0=class extends cN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),jm(e,t,n,r,s,"avg")}};d0.className="AveragePooling1D";se.registerClass(d0);var uN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new U(`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];Qt(this.poolSize,"poolSize"),Qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),br(this.padding),this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){e=tt(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=Hr(t,this.poolSize[0],this.padding,this.strides[0]),n=Hr(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(Ce(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},p0=class extends uN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),jm(e,t,n,r,s,"max")}};p0.className="MaxPooling2D";se.registerClass(p0);var h0=class extends uN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),jm(e,t,n,r,s,"avg")}};h0.className="AveragePooling2D";se.registerClass(h0);var lN=class extends Ue{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new U(`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];Qt(this.poolSize,"poolSize"),Qt(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),br(this.padding),this.inputSpec=[new zt({ndim:5})]}computeOutputShape(e){e=tt(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=Hr(t,this.poolSize[0],this.padding,this.strides[0]),n=Hr(n,this.poolSize[1],this.padding,this.strides[1]),r=Hr(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(Ce(e),this.poolSize,this.strides,this.padding,this.dataFormat)))}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},f0=class extends lN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),iN(e,t,n,r,s,"max")}};f0.className="MaxPooling3D";se.registerClass(f0);var m0=class extends lN{constructor(e){super(e)}poolingFunction(e,t,n,r,s){return Pt(s),br(r),iN(e,t,n,r,s,"avg")}};m0.className="AveragePooling3D";se.registerClass(m0);var dN=class extends Ue{constructor(e){super(e),this.inputSpec=[new zt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Pe}},g0=class extends dN{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=Ce(e);return Ct(n,1)})}};g0.className="GlobalAveragePooling1D";se.registerClass(g0);var b0=class extends dN{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=Ce(e);return pr(n,1)})}};b0.className="GlobalMaxPooling1D";se.registerClass(b0);var pN=class extends Ue{constructor(e){super(e),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Pt(this.dataFormat),this.inputSpec=[new zt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Pe}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},y0=class extends pN{call(e,t){return O(()=>{let n=Ce(e);return this.dataFormat==="channelsLast"?Ct(n,[1,2]):Ct(n,[2,3])})}};y0.className="GlobalAveragePooling2D";se.registerClass(y0);var v0=class extends pN{call(e,t){return O(()=>{let n=Ce(e);return this.dataFormat==="channelsLast"?pr(n,[1,2]):pr(n,[2,3])})}};v0.className="GlobalMaxPooling2D";se.registerClass(v0);var hN=class extends Ue{constructor(e){super(e),this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let r=t.layer,s=Gr(r,n);delete t.layer;let a={layer:s};return Object.assign(a,t),new e(a)}},x0=class extends hN{constructor(e){super(e),this.supportsMasking=!0}build(e){if(e=tt(e),e.length<3)throw new U(`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=tt(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=Ce(e),aN((a,o)=>[Ce(this.layer.call(a,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};x0.className="TimeDistributed";se.registerClass(x0);function YU(e){yi(J4,"BidirectionalMergeMode",e)}var ZU="concat",w0=class extends hN{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=Gr(n),t.goBackwards=t.goBackwards!==!0;let r={};if(r.className=e.layer.getClassName(),r.config=t,this.backwardLayer=Gr(r),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?ZU:e.mergeMode,YU(this.mergeMode),e.weights)throw new Pe("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,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()):Mn(r)}apply(e,t){let n=t==null?null:t.initialState,r=t==null?null:t.constants;t==null&&(t={});let s=sN(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 c=n.length;if(c%2>0)throw new U("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 u=n.map(l=>new zt({shape:l.shape}));this.forwardLayer.stateSpec=u.slice(0,c/2),this.backwardLayer.stateSpec=u.slice(c/2),o.push(...u)}if(r!=null)throw new Pe("Support for constants in Bidirectional layers is not implemented yet.");let i=a[0]instanceof Vr;for(let c of a)if(c instanceof Vr!==i)throw new U("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(i){let c=[e].concat(a),u=this.inputSpec.concat(o),l=this.inputSpec;this.inputSpec=u;let p=super.apply(c,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),c=n.slice(n.length/2);r=this.forwardLayer.call(e,Object.assign(t,{initialState:i})),s=this.backwardLayer.call(e,Object.assign(t,{initialState:c}))}let a;this.returnState&&(Array.isArray(r)&&(a=r.slice(1).concat(s.slice(1))),r=r[0],s=s[0]),this.returnSequences&&(s=fr(s,1));let o;return this.mergeMode==="concat"?o=nw([r,s]):this.mergeMode==="sum"?o=Y(r,s):this.mergeMode==="ave"?o=B(.5,Y(r,s)):this.mergeMode==="mul"?o=B(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){Za(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),Za(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=Gr(t.layer);if(delete t.layer,t.numConstants!=null)throw new Pe("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let r=t;return r.layer=n,new e(r)}};w0.className="Bidirectional";se.registerClass(w0);var I0=class extends Ue{constructor(e){super(e),this.scale=e.scale,e.offset?this.offset=e.offset:this.offset=0}getConfig(){let e={scale:this.scale,offset:this.offset},t=super.getConfig();return Object.assign(e,t),e}call(e,t){return O(()=>(e=Ce(e),e.dtype!=="float32"&&(e=vi(e,"float32")),Y(B(e,this.scale),this.offset)))}};I0.className="Rescaling";se.registerClass(I0);var JU=["bilinear","nearest"],Kk=new Set(JU),k0=class extends Ue{constructor(e){if(super(e),this.height=e.height,this.width=e.width,e.interpolation)if(Kk.has(e.interpolation))this.interpolation=e.interpolation;else throw new U(`Invalid interpolation parameter: ${e.interpolation} is not implemented`);else this.interpolation="bilinear";this.cropToAspectRatio=Boolean(e.cropToAspectRatio)}computeOutputShape(e){e=tt(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 Br.resizeBilinear(e,n,!this.cropToAspectRatio);if(this.interpolation==="nearest")return Br.resizeNearestNeighbor(e,n,!this.cropToAspectRatio);throw new Error(`Interpolation is ${this.interpolation} but only ${[...Kk]} are supported`)})}};k0.className="Resizing";se.registerClass(k0);function QU(e,t,n,r){let s=Ce(e);if(s.dtype!=="int32"&&(s=vi(s,"int32")),t==="int")return s;let a=s.shape;if(s.rank===0&&(s=Zt(s,-1)),t==="oneHot"&&s.shape[s.shape.length-1]!==1&&(s=Zt(s,-1)),s.rank>2)throw new U(`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,c;if(typeof r!="undefined"&&t==="count"?c=Bh(i,r,n,o):c=Bh(i,[],n,o),t!=="tfIdf")return c;if(r)return B(c,r);throw new U("When outputMode is 'tfIdf', weights must be provided.")}var S0=class extends Ue{constructor(e){super(e),this.numTokens=e.numTokens,e.outputMode?this.outputMode=e.outputMode:this.outputMode="multiHot"}getConfig(){let e={numTokens:this.numTokens,outputMode:this.outputMode},t=super.getConfig();return Object.assign(e,t),e}computeOutputShape(e){return e=tt(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=Ce(e),e.dtype!=="int32"&&(e=vi(e,"int32"));let n;if(typeof t.countWeights!="undefined"){if(this.outputMode!=="count")throw new U(`countWeights is not used when outputMode !== count.
|
|
Received countWeights=${t.countWeights}`);n=Ce(t.countWeights)}let r=pr(e),s=yc(e),a=An(this.numTokens,r).bufferSync().get(0),o=Ds(s,0).bufferSync().get(0);if(!(a&&o))throw new U(`Input values must be between 0 < values <= numTokens with numTokens=${this.numTokens}`);return QU(e,this.outputMode,this.numTokens,n)})}};S0.className="CategoryEncoding";se.registerClass(S0);function eG(e){return new Hu(e)}function tG(e){return new Nw(e)}function nG(e){return new Sw(e)}function rG(e){return new Tw(e)}function sG(e){return new Cw(e)}function aG(e){return new Ew(e)}function oG(e){return new _w(e)}function iG(e){return new Wm(e)}function cG(e){return new tp(e)}function uG(e){return new Dw(e)}function lG(e){return new np(e)}function dG(e){return new Fw(e)}function pG(e){return new Rw(e)}function hG(e){return new Pw(e)}function fG(e){return new Ow(e)}function mG(e){return new Mw(e)}function gG(e){return new Hw(e)}function bG(e){return new Uw(e)}function yG(e){return new qm(e)}function vG(e){return new Vw(e)}function xG(e){return new Gw(e)}function wG(e){return new qw(e)}function IG(e){return new jw(e)}function kG(e){return new Kw(e)}function SG(e){return new Yw(e)}function TG(e){return new Zw(e)}function CG(e){return new Qw(e)}function NG(e){return new n0(e)}function _G(e){return new e0(e)}function EG(e){return new t0(e)}function AG(e){return new Jw(e)}function $G(e){return new r0(e)}function DG(e){return new i0(e)}function FG(e){return new c0(e)}function RG(e){return new u0(e)}function T0(e){return new d0(e)}function PG(e){return T0(e)}function OG(e){return T0(e)}function C0(e){return new h0(e)}function MG(e){return C0(e)}function LG(e){return C0(e)}function N0(e){return new m0(e)}function zG(e){return N0(e)}function BG(e){return N0(e)}function WG(e){return new g0(e)}function VG(e){return new y0(e)}function fN(e){return new b0(e)}function mN(e){return new v0(e)}function gN(e){return new l0(e)}function bN(e){return new p0(e)}function UG(e){return new f0(e)}function GG(e){return new zw(e)}function HG(e){return new Um(e)}function qG(e){return new Bw(e)}function jG(e){return new sp(e)}function KG(e){return new Lw(e)}function XG(e){return new Vm(e)}function YG(e){return new Ww(e)}function ZG(e){return new Hm(e)}function JG(e){return new ms(e)}function QG(e){return new Gm(e)}function eH(e){return new w0(e)}function tH(e){return new x0(e)}var nH=fN,rH=mN,sH=gN,aH=bN;function oH(e){return new s0(e)}function iH(e){return new a0(e)}function cH(e){return new o0(e)}function uH(e){return new Xw(e)}function lH(e){return new I0(e)}function dH(e){return new k0(e)}function pH(e){return new S0(e)}var yN={};Ae(yN,{MAPE:()=>kH,MSE:()=>CH,binaryAccuracy:()=>hH,binaryCrossentropy:()=>fH,categoricalAccuracy:()=>gH,categoricalCrossentropy:()=>bH,cosineProximity:()=>xH,mape:()=>SH,meanAbsoluteError:()=>wH,meanAbsolutePercentageError:()=>IH,meanSquaredError:()=>TH,mse:()=>NH,precision:()=>yH,recall:()=>vH,sparseCategoricalAccuracy:()=>mH});function hH(e,t){return bw(e,t)}function fH(e,t){return DC(e,t)}function mH(e,t){return FC(e,t)}function gH(e,t){return yw(e,t)}function bH(e,t){return vw(e,t)}function yH(e,t){return $C(e,t)}function vH(e,t){return nU(e,t)}function xH(e,t){return gw(e,t)}function wH(e,t){return zm(e,t)}function IH(e,t){return qu(e,t)}function kH(e,t){return qu(e,t)}function SH(e,t){return qu(e,t)}function TH(e,t){return xi(e,t)}function CH(e,t){return xi(e,t)}function NH(e,t){return xi(e,t)}var vN={};Ae(vN,{modelFromJSON:()=>DU});var xN={};Ae(xN,{l1:()=>EH,l1l2:()=>_H,l2:()=>AH});function _H(e){return new Qd(e)}function EH(e){return zU(e)}function AH(e){return BU(e)}var wN=class extends Sc{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 dh(e,t){return e<t}function Xk(e,t){return e>t}var IN=class extends wN{constructor(e){if(super(),e==null&&(e={}),e.restoreBestWeights)throw new Pe("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=dh:this.mode==="max"?this.monitorFunc=Xk:this.monitor.indexOf("acc")!==-1?this.monitorFunc=Xk:this.monitorFunc=dh,this.monitorFunc===dh&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===dh?1/0:-1/0}async onEpochEnd(e,t){await Js(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 $H(e){return new IN(e)}var DH={earlyStopping:$H},FH=q();FH.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 Nr;(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"})(Nr||(Nr={}));var Yk;(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={}))})(Yk||(Yk={}));var _0={};function RH(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};_0[e]=n}function kN(e){return _0[e]}function PH(e){delete _0[e]}function I(e,t,n,r,s){let a=t.inputParams[e];if(a&&a.inputIndexStart!==void 0){let i=a.inputIndexStart,c=a.inputIndexEnd===0?void 0:a.inputIndexEnd===void 0?i+1:a.inputIndexEnd;if(a.type==="tensor")return Sn(t.inputNames[a.inputIndexStart],n,r,s);if(a.type==="tensors")return t.inputNames.slice(i,c).map(d=>Sn(d,n,r,s));let u=Sn(t.inputNames.slice(i)[0],n,r,s),l=u.dataSync();return a.type==="number"?l[0]:w.toNestedArray(u.shape,l)}let o=t.attrParams[e];return o&&o.value}function Sn(e,t,n,r){let[s,a]=Zn(e);if(r!=null){let i=r.getHashTableHandleByName(s);if(i!=null)return i}let o=n.currentContextIds.find(i=>!!t[Yh(s,i)]);return o!==void 0?t[Yh(s,o)][a]:void 0}function OH(e,t,n){return t[Yh(e,n.currentContextId)]}function os(e,t){let[n,r,s]=Zn(e);return[Yh(n,t&&t.currentContextId),r,s]}function Yh(e,t){return t?`${e}-${t}`:e}function Zn(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let n=t[0],r=t.length===3?t[1]:void 0,s=Number(t[t.length-1]);return[n,s,r]}function wh(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:is(e)}var SN={};Ae(SN,{json:()=>MH});var MH=[{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}]}],TN={};Ae(TN,{json:()=>LH});var LH=[{tfOpName:"Abs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atan2",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"y",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Ceil",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ClipByValue",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"clipValueMin",type:"number"},{start:2,name:"clipValueMax",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Complex",category:"basic_math",inputs:[{start:0,name:"real",type:"tensor"},{start:1,name:"imag",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"ComplexAbs",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cos",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Cosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Elu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Exp",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Floor",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Imag",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Neg",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Real",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0},{tfName:"Tout",name:"outputType",type:"dtype",notSupported:!0}]},{tfOpName:"Prelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"alpha",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Relu6",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Selu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sigmoid",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sin",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Rsqrt",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Square",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Tanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Sign",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Round",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Expm1",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Log1p",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Reciprocal",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Softplus",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Asinh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Acosh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Atanh",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Erf",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"Prod",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axes",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"LeakyRelu",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"alpha",name:"alpha",type:"number",defaultValue:.2},{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"IsNan",category:"basic_math",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]}],CN={};Ae(CN,{json:()=>zH});var zH=[{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"}]}],NN={};Ae(NN,{json:()=>BH});var BH=[{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"}]}],_N={};Ae(_N,{json:()=>WH});var WH=[{tfOpName:"Fill",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"},{start:1,name:"value",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"LinSpace",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"num",type:"number"}],attrs:[{tfName:"T",name:"dtype",type:"dtype",notSupported:!0}]},{tfOpName:"OneHot",category:"creation",inputs:[{start:0,name:"indices",type:"tensor"},{start:1,name:"depth",type:"number"},{start:2,name:"onValue",type:"number",defaultValue:1},{start:3,name:"offValue",type:"number",defaultValue:0}],attrs:[{tfName:"axis",name:"axis",type:"number",notSupported:!0},{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Ones",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"OnesLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"dtype",name:"dtype",type:"dtype"}]},{tfOpName:"RandomStandardNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"RandomUniform",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"minval",name:"minval",type:"number",defaultValue:0},{tfName:"maxval",name:"maxval",type:"number",defaultValue:1},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"seed",name:"seed",type:"number",defaultValue:0},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Range",category:"creation",inputs:[{start:0,name:"start",type:"number"},{start:1,name:"stop",type:"number"},{start:2,name:"step",type:"number",defaultValue:0}],attrs:[{tfName:"Tidx",name:"dtype",type:"dtype"}]},{tfOpName:"TruncatedNormal",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"means",name:"mean",type:"number",defaultValue:0},{tfName:"stddev",name:"stdDev",type:"number",defaultValue:1},{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number",defaultValue:0,notSupported:!0},{tfName:"dtype",name:"dtype",type:"dtype"},{tfName:"T",name:"T",type:"number",notSupported:!0}]},{tfOpName:"Zeros",category:"creation",inputs:[{start:0,name:"shape",type:"number[]"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"ZerosLike",category:"creation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"T",name:"dtype",type:"dtype"}]},{tfOpName:"Multinomial",category:"creation",inputs:[{start:0,name:"logits",type:"tensor"},{start:1,name:"numSamples",type:"number"}],attrs:[{tfName:"seed",name:"seed",type:"number"},{tfName:"seed2",name:"seed2",type:"number"},{tfName:"T",name:"dtype",type:"dtype"},{tfName:"output_dtype",name:"output_dtype",type:"dtype"}]}],EN={};Ae(EN,{json:()=>VH});var VH=[{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}]}],AN={};Ae(AN,{json:()=>UH});var UH=[{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"}]}],$N={};Ae($N,{json:()=>GH});var GH=[{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"}]}],DN={};Ae(DN,{json:()=>HH});var HH=[{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"}]}],FN={};Ae(FN,{json:()=>qH});var qH=[{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"}]}],RN={};Ae(RN,{json:()=>jH});var jH=[{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}]}],PN={};Ae(PN,{json:()=>KH});var KH=[{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"}]}],ON={};Ae(ON,{json:()=>XH});var XH=[{tfOpName:"EuclideanNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool",defaultValue:!1}]},{tfOpName:"FusedBatchNorm",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV2",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"FusedBatchNormV3",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"scale",type:"tensor"},{start:2,name:"offset",type:"tensor"},{start:3,name:"mean",type:"tensor"},{start:4,name:"variance",type:"tensor"}],attrs:[{tfName:"epsilon",name:"epsilon",type:"number",defaultValue:.001},{tfName:"data_format",name:"dataFormat",type:"string",notSupported:!0}]},{tfOpName:"LRN",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"depth_radius",name:"radius",type:"number",defaultValue:5},{tfName:"bias",name:"bias",type:"number",defaultValue:1},{tfName:"alpha",name:"alpha",type:"number",defaultValue:1},{tfName:"beta",name:"beta",type:"number",defaultValue:.5}]},{tfOpName:"Softmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"LogSoftmax",category:"normalization",inputs:[{start:0,name:"x",type:"tensor"}]},{tfOpName:"SparseToDense",category:"normalization",inputs:[{start:0,name:"sparseIndices",type:"tensor"},{start:1,name:"outputShape",type:"number[]"},{start:2,name:"sparseValues",type:"tensor"},{start:3,name:"defaultValue",type:"tensor"}],attrs:[{tfName:"validate_indices",name:"validateIndices",type:"bool",defaultValue:!0,notSupported:!0}]}],MN={};Ae(MN,{json:()=>YH});var YH=[{tfOpName:"Bincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}]},{tfOpName:"DenseBincount",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"size",type:"number"},{start:2,name:"weights",type:"tensor"}],attrs:[{tfName:"binary_output",name:"binaryOutput",type:"bool"}]},{tfOpName:"Max",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Mean",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Min",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Sum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"All",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Any",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"ArgMax",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"ArgMin",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"Prod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number[]"}],attrs:[{tfName:"keep_dims",name:"keepDims",type:"bool"}]},{tfOpName:"Cumprod",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]},{tfOpName:"Cumsum",category:"reduction",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}],attrs:[{tfName:"exclusive",name:"exclusive",type:"bool"},{tfName:"reverse",name:"reverse",type:"bool"}]}],LN={};Ae(LN,{json:()=>ZH});var ZH=[{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}]}],zN={};Ae(zN,{json:()=>JH});var JH=[{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"}]}],BN={};Ae(BN,{json:()=>QH});var QH=[{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}]}],WN={};Ae(WN,{json:()=>e6});var e6=[{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"}]}],VN={};Ae(VN,{json:()=>t6});var t6=[{tfOpName:"Cast",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"SrcT",name:"sdtype",type:"dtype",notSupported:!0},{tfName:"DstT",name:"dtype",type:"dtype"}]},{tfOpName:"ExpandDims",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"axis",type:"number"}]},{tfOpName:"MirrorPad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"mode",name:"mode",type:"string"}]},{tfOpName:"Pad",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"}],attrs:[{tfName:"constant_value",name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"PadV2",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"padding",type:"number[]"},{start:2,name:"constantValue",type:"number",defaultValue:0}]},{tfOpName:"Reshape",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}]},{tfOpName:"Squeeze",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"axis",tfDeprecatedName:"squeeze_dims",name:"axis",type:"number[]"}]},{tfOpName:"SpaceToBatchND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"paddings",type:"number[]"}]},{tfOpName:"BatchToSpaceND",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"blockShape",type:"number[]"},{start:2,name:"crops",type:"number[]"}]},{tfOpName:"DepthToSpace",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"}],attrs:[{tfName:"block_size",name:"blockSize",type:"number"},{tfName:"data_format",name:"dataFormat",type:"string"}]},{tfOpName:"BroadcastTo",category:"transformation",inputs:[{start:0,name:"x",type:"tensor"},{start:1,name:"shape",type:"number[]"}],attrs:[]},{tfOpName:"BroadcastArgs",category:"transformation",inputs:[{start:0,name:"s0",type:"tensor"},{start:1,name:"s1",type:"tensor"}],attrs:[]}],Zk=class{constructor(){let e=[SN,TN,CN,NN,_N,EN,AN,$N,DN,FN,RN,PN,ON,MN,LN,zN,BN,WN,VN],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,r)=>(n[r.tfOpName]=r,n),{})}static get Instance(){return this._instance||(this._instance=new this)}transformGraph(e,t={}){let n=e.node,r=[],s=[],a=[],o=n.reduce((f,m)=>(f[m.name]=this.mapNode(m),m.op.startsWith("Placeholder")?r.push(f[m.name]):m.op==="Const"?s.push(f[m.name]):(m.input==null||m.input.length===0)&&a.push(f[m.name]),f),{}),i=[],c=[],u={},l={};t!=null&&(u=this.mapSignatureEntries(t.inputs),l=this.mapSignatureEntries(t.outputs));let p=Object.keys(o);p.forEach(f=>{let m=o[f];m.inputNames.forEach((g,b)=>{let[y,,v]=os(g),x=o[y];if(x.outputs!=null){let k=x.outputs.indexOf(v);if(k!==-1){let S=`${y}:${k}`;m.inputNames[b]=S}}m.inputs.push(x),x.children.push(m)})}),Object.keys(l).length===0?p.forEach(f=>{let m=o[f];m.children.length===0&&c.push(m)}):Object.keys(l).forEach(f=>{let[m]=os(f),g=o[m];g!=null&&(g.signatureKey=l[f],c.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(f=>{let[m]=os(f),g=o[m];g&&(g.signatureKey=u[f],i.push(g))}):i=r;let d={};e.library!=null&&e.library.function!=null&&(d=e.library.function.reduce((f,m)=>(f[m.signature.name]=this.mapFunction(m),f),{}));let h={nodes:o,inputs:i,outputs:c,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=kN(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=Qy(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=Qy(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"string[]":o=ov(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=ov(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number":o=tv(e.attr,s.tfName,s.defaultValue||0),o===void 0&&!!s.tfDeprecatedName&&(o=tv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"number[]":o=av(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=av(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool":o=ev(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=ev(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"bool[]":o=cv(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=cv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape":o=sv(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=sv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"shape[]":o=iv(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=iv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype":o=nv(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=nv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"dtype[]":o=rv(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=rv(e.attr,s.tfDeprecatedName,s.defaultValue));break;case"func":o=Jk(e.attr,s.tfName,s.defaultValue),o===void 0&&!!s.tfDeprecatedName&&(o=Jk(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]=os(l.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:E0(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,,m]=os(d),g=s[f];if(g.outputs!=null){let b=g.outputs.indexOf(m);if(b!==-1){let y=`${f}:${b}`;p.inputNames[h]=y}}p.inputs.push(g),g.children.push(p)})});let c=e.ret;e.signature.outputArg.forEach(l=>{let[p,d]=os(c[l.name]),h=s[p];h!=null&&(h.defaultOutput=d,o.push(h))});let u=this.mapArgsToSignature(e);return{nodes:s,inputs:a,outputs:o,weights:r,placeholders:n,signature:u}}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 n6(e){let t=q().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 UN(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):n6(e);return t?n:n.toLowerCase()}function Qy(e,t,n,r=!1){let s=e[t];return s!=null?UN(s.s,r):n}function ev(e,t,n){let r=e[t];return r?r.b:n}function tv(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 E0(e){switch(typeof e=="string"&&(e=Nr[e]),e){case Nr.DT_FLOAT:case Nr.DT_HALF:return"float32";case Nr.DT_INT32:case Nr.DT_INT64:case Nr.DT_INT8:case Nr.DT_UINT8:return"int32";case Nr.DT_BOOL:return"bool";case Nr.DT_DOUBLE:return"float32";case Nr.DT_STRING:return"string";default:return null}}function Jk(e,t,n){let r=e[t];return r&&r.func?r.func.name:n}function nv(e,t,n){let r=e[t];return r&&r.type?E0(r.type):n}function rv(e,t,n){let r=e[t];return r&&r.list&&r.list.type?r.list.type.map(s=>E0(s)):n}function GN(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function sv(e,t,n){let r=e[t];return r&&r.shape?GN(r.shape):n}function av(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 ov(e,t,n,r=!1){let s=e[t];return s&&s.list&&s.list.s?s.list.s.map(a=>UN(a,r)):n}function iv(e,t,n){let r=e[t];return r&&r.list&&r.list.shape?r.list.shape.map(s=>GN(s)):n}function cv(e,t,n){let r=e[t];return r&&r.list&&r.list.b?r.list.b:n}var r6=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 Sn(e,this.tensorMap,this.context)}getAttr(e,t){let n=this.node.rawAttrs[e];if(n.tensor!=null)return Sn(e,this.tensorMap,this.context);if(n.i!=null||n.f!=null)return tv(this.node.rawAttrs,e,t);if(n.s!=null)return Qy(this.node.rawAttrs,e,t);if(n.b!=null)return ev(this.node.rawAttrs,e,t);if(n.shape!=null)return sv(this.node.rawAttrs,e,t);if(n.type!=null)return nv(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return av(this.node.rawAttrs,e,t);if(n.list.s!=null)return ov(this.node.rawAttrs,e,t);if(n.list.shape!=null)return iv(this.node.rawAttrs,e,t);if(n.list.b!=null)return cv(this.node.rawAttrs,e,t);if(n.list.type!=null)return rv(this.node.rawAttrs,e,t)}return t}},ln={};Ae(ln,{OP_SCOPE_SUFFIX:()=>Pv,abs:()=>Lt,acos:()=>Xv,acosh:()=>Yv,add:()=>Y,addN:()=>YS,all:()=>Kf,any:()=>Ql,argMax:()=>ao,argMin:()=>Zv,asin:()=>Jv,asinh:()=>Qv,atan:()=>ex,atan2:()=>tx,atanh:()=>nx,avgPool:()=>mr,avgPool3d:()=>sx,basicLSTMCell:()=>eT,batchNorm:()=>ka,batchNorm2d:()=>ax,batchNorm3d:()=>ox,batchNorm4d:()=>ix,batchToSpaceND:()=>Od,bincount:()=>cx,booleanMaskAsync:()=>OT,broadcastArgs:()=>tT,broadcastTo:()=>Ya,buffer:()=>Me,cast:()=>ce,ceil:()=>ux,clipByValue:()=>en,clone:()=>is,complex:()=>As,concat:()=>Je,concat1d:()=>lx,concat2d:()=>dx,concat3d:()=>px,concat4d:()=>hx,conv1d:()=>Xf,conv2d:()=>Dt,conv2dTranspose:()=>Yf,conv3d:()=>mx,conv3dTranspose:()=>gx,cos:()=>Md,cosh:()=>Zf,cosineWindow:()=>ym,cumprod:()=>ed,cumsum:()=>Jf,denseBincount:()=>Bh,depthToSpace:()=>bx,depthwiseConv2d:()=>Sa,diag:()=>rT,dilation2d:()=>yx,div:()=>fe,divNoNan:()=>vx,dot:()=>xx,dropout:()=>jx,einsum:()=>sT,elu:()=>Lu,enclosingPowerOfTwo:()=>Kx,equal:()=>tr,erf:()=>wx,euclideanNorm:()=>Sx,exp:()=>gn,expandDims:()=>Zt,expm1:()=>Tx,eye:()=>Qf,fft:()=>Hd,fill:()=>bn,floor:()=>Bu,floorDiv:()=>jf,fused:()=>Ic,gather:()=>Wu,gatherND:()=>BT,greater:()=>An,greaterEqual:()=>Ds,ifft:()=>wc,imag:()=>Fd,image:()=>Br,inTopKAsync:()=>WT,irfft:()=>fm,isFinite:()=>Cx,isInf:()=>Nx,isNaN:()=>_x,leakyRelu:()=>Ld,less:()=>em,lessEqual:()=>Ta,linalg:()=>Zx,linspace:()=>uT,localResponseNormalization:()=>Ex,log:()=>nr,log1p:()=>zd,logSigmoid:()=>Ax,logSoftmax:()=>nm,logSumExp:()=>rm,logicalAnd:()=>Dr,logicalNot:()=>Bd,logicalOr:()=>sm,logicalXor:()=>$x,losses:()=>QT,lowerBound:()=>dT,matMul:()=>De,max:()=>pr,maxPool:()=>Rt,maxPool3d:()=>Dx,maxPoolWithArgmax:()=>pT,maximum:()=>hs,mean:()=>Ct,meshgrid:()=>hT,min:()=>yc,minimum:()=>Vu,mirrorPad:()=>Fx,mod:()=>Rx,moments:()=>Wd,movingAverage:()=>MT,mul:()=>B,multiRNNCell:()=>fT,multinomial:()=>mT,neg:()=>xt,norm:()=>zu,notEqual:()=>co,oneHot:()=>gc,ones:()=>Qn,onesLike:()=>rr,op:()=>z,outerProduct:()=>gT,pad:()=>gr,pad1d:()=>bT,pad2d:()=>yT,pad3d:()=>vT,pad4d:()=>xT,pool:()=>Px,pow:()=>$s,prelu:()=>Ud,print:()=>zv,prod:()=>Ox,raggedGather:()=>wT,raggedRange:()=>IT,raggedTensorToTensor:()=>kT,rand:()=>ST,randomGamma:()=>TT,randomNormal:()=>om,randomStandardNormal:()=>CT,randomUniform:()=>Uu,range:()=>vc,real:()=>bc,reciprocal:()=>zx,relu:()=>Xe,relu6:()=>im,reshape:()=>W,reverse:()=>fr,reverse1d:()=>NT,reverse2d:()=>_T,reverse3d:()=>ET,reverse4d:()=>AT,rfft:()=>qd,round:()=>cm,rsqrt:()=>um,scalar:()=>xe,scatterND:()=>LT,searchSorted:()=>am,selu:()=>lm,separableConv2d:()=>Ca,setdiff1dAsync:()=>$T,sigmoid:()=>dr,sign:()=>Bx,signal:()=>JT,sin:()=>dm,sinh:()=>pm,slice:()=>We,slice1d:()=>Gd,slice2d:()=>hm,slice3d:()=>gi,slice4d:()=>xc,softmax:()=>Xr,softplus:()=>mi,spaceToBatchND:()=>Vd,sparse:()=>eC,sparseToDense:()=>zT,spectral:()=>ZT,split:()=>zn,sqrt:()=>un,square:()=>it,squaredDifference:()=>mm,squeeze:()=>Na,stack:()=>Ft,step:()=>bi,stridedSlice:()=>Wx,string:()=>tC,sub:()=>de,sum:()=>ge,tan:()=>Vx,tanh:()=>oo,tensor:()=>Cn,tensor1d:()=>Ke,tensor2d:()=>$r,tensor3d:()=>Rd,tensor4d:()=>Rr,tensor5d:()=>DT,tensor6d:()=>FT,tile:()=>Ln,topk:()=>Ux,transpose:()=>Ee,truncatedNormal:()=>gm,unique:()=>Gx,unsortedSegmentSum:()=>bm,unstack:()=>lt,upperBound:()=>RT,variable:()=>Hx,where:()=>mn,whereAsync:()=>qx,zeros:()=>kt,zerosLike:()=>qe});var s6=(e,t,n,r=ln)=>{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`)}},a6=(e,t,n,r=ln)=>{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(Sn(e.inputNames[0],t,n))];case"Prod":return[r.prod(I("x",e,t,n),I("axes",e,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(Sn(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;r<e.length;r++){let s=e[r],a=t[r];w.assert(s<0||a<0||s===a,()=>n+` Shapes ${e} and ${t} must match`)}}}function Qk(e){return!(typeof e=="number"||e.some(t=>t<0))}function $l(e,t,n){let r=uv(e,n),s=!Qk(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=uv(a.shape,r)}),!Qk(r))throw new Error(`Non-fully-defined elementShape: ${r}`);return r}function uv(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<e.length;++r){let s=e[r],a=t[r];if(s>=0&&a>=0&&s!==a)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[r]=s>=0?s:a}return n}var o6=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),Jt(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,Jt(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.size();r++)e.push(r)}if(e.length===0)return Cn([],[0].concat(this.elementShape));let n=this.readMany(e);return Ar(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),Ft(n,0)}concat(e){if(!!e&&e!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but concat requested dtype ${e}`);if(this.size()===0)return Cn([],[0].concat(this.elementShape));let t=[];for(let r=0;r<this.size();r++)t.push(r);let n=this.readMany(t);return Ar(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),Je(n,0)}scatter(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);if(e.length!==t.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${e.length} vs. ${t.shape[0]}`);let n=Math.max(...e);if(!this.dynamicSize&&n>=this.maxSize)throw new Error(`Max index must be < array size (${n} vs. ${this.maxSize})`);this.writeMany(e,lt(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,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<e.length;++i){let u=[0,i===0?0:r[i-1],0],l=[1,e[i],s];a[i]=W(We(t,u,l),this.elementShape)}return a});let o=[];for(let i=0;i<e.length;i++)o[i]=i;this.writeMany(o,a)}},Cc=class{constructor(e,t,n,r=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(s=>{if(n!==s.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${s.dtype}`);Ar(t,s.shape,"TensorList shape mismatch: "),Jt(s)}),this.idTensor=xe(0),this.maxNumElements=r,Jt(this.idTensor)}get id(){return this.idTensor.id}copy(){return new Cc([...this.tensors],this.elementShape,this.elementDtype)}clearAndClose(e){this.tensors.forEach(t=>{(e==null||!e.has(t.id))&&t.dispose()}),this.tensors.length=0,this.idTensor.dispose()}size(){return this.tensors.length}stack(e,t,n=-1){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(n!==-1&&this.tensors.length!==n)throw new Error(`Operation expected a list with ${n} elements but got a list with ${this.tensors.length} elements.`);Ar(e,this.elementShape,"TensorList shape mismatch: ");let r=$l(this.elementShape,this.tensors,e);return O(()=>{let s=this.tensors.map(a=>W(a,r));return Ft(s,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=$l(this.elementShape,this.tensors,e),r=this.tensors.pop();return r.kept=!1,Ar(r.shape,e,"TensorList shape mismatch: "),W(r,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Ar(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");Jt(e),this.tensors.push(e)}resize(e){if(e<0)throw new Error(`TensorListResize expects size to be non-negative. Got: ${e}`);if(this.maxNumElements!==-1&&e>this.maxNumElements)throw new Error(`TensorListResize input size ${e} is greater maxNumElement ${this.maxNumElements}.`);let t=new Cc([],this.elementShape,this.elementDtype,this.maxNumElements);t.tensors.length=e;for(let n=0;n<Math.min(this.tensors.length,e);++n)t.tensors[n]=this.tensors[n];return t}getItem(e,t,n){if(n!==this.elementDtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${this.elementDtype}`);if(e<0||e>this.tensors.length)throw new Error(`Trying to access element ${e} in a list with ${this.tensors.length} elements.`);if(this.tensors[e]==null)throw new Error(`element at index ${e} is null.`);Ar(this.tensors[e].shape,t,"TensorList shape mismatch: ");let r=$l(this.elementShape,this.tensors,t);return W(this.tensors[e],r)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);Ar(this.elementShape,t.shape,"TensorList shape mismatch: "),Jt(t),this.tensors[e]!=null&&(this.tensors[e].kept=!1),this.tensors[e]=t}gather(e,t,n){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);Ar(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let r=$l(this.elementShape,this.tensors,n);return e.length===0?Cn([],[0].concat(r)):O(()=>{let s=e.map(a=>W(this.tensors[a],r));return Ft(s,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Ar(this.elementShape,t,"TensorList shape mismatch: ");let n=$l(this.elementShape,this.tensors,t);return this.size()===0?Cn([],[0].concat(n)):O(()=>{let r=this.tensors.map(s=>W(s,n));return Je(r,0)})}};function i6(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=lt(e);return new Cc(a,t,r)}function c6(e,t,n,r){return new Cc([],e,t,r)}function u6(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 Cc([],n,e.dtype,r),o=lt(e,0);return t.forEach((i,c)=>{a.setItem(i,o[c])}),a}function l6(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=uv(a,n),i=r===0?0:e.size/r,c=O(()=>{let l=[];e=W(e,[1,r,i]);for(let p=0;p<t.length;++p){let h=[0,p===0?0:s[p-1],0],f=[1,t[p],i];l[p]=W(We(e,h,f),o)}return e.dispose(),l}),u=new Cc([],n,e.dtype,t.length);for(let l=0;l<c.length;l++)u.setItem(l,c[l]);return u}var d6=async(e,t,n)=>{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),c=await o[0].data();o.forEach(l=>{!l.kept&&i.indexOf(l.id)===-1&&l.dispose()});let u=a;for(;c[0];){let l=u;u=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let p=u.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(u,n.tensorArrayMap,n.tensorListMap);c=await d[0].data(),d.forEach(h=>{!h.kept&&i.indexOf(h.id)===-1&&p.indexOf(h.id)===-1&&h.dispose()})}return u}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=>Sn(s,t,n)!==void 0);if(r){let s=Sn(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),c=I("identicalElementShapes",e,t,n),u=I("name",e,t,n),l=new o6(u,s,r,a,c,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=u6(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,c=c6(r,s,o,i);return n.addTensorList(c),[c.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=i6(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=l6(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 e1(e,t,n){let[r,s]=I("fusedOps",e,t,n),a=r==="biasadd",o=!a,i=s==="prelu",c=r==="fusedbatchnorm",u=I("numArgs",e,t,n);if(a){if(i&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&a&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(c)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let l=I("strides",e,t,n),p=wh(e,t,n),d=I("dataFormat",e,t,n).toUpperCase(),h=I("dilations",e,t,n),[f,m]=I("args",e,t,n);o&&(m=f,f=void 0);let g=I("leakyreluAlpha",e,t,n);return{stride:l,pad:p,dataFormat:d,dilations:h,biasArg:f,preluArg:m,activationFunc:s,leakyreluAlpha:g}}var p6=(e,t,n,r=ln)=>{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=wh(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:c,preluArg:u,activationFunc:l,leakyreluAlpha:p}=e1(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:c,activation:l,preluActivationWeights:u,leakyreluAlpha:p})]}case"FusedDepthwiseConv2dNative":{let{stride:s,pad:a,dataFormat:o,dilations:i,biasArg:c,preluArg:u,activationFunc:l,leakyreluAlpha:p}=e1(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:c,activation:l,preluActivationWeights:u,leakyreluAlpha:p})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let s=I("outputShape",e,t,n),a=I("strides",e,t,n),o=wh(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=wh(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:c,indexes:u}=r.maxPoolWithArgmax(I("x",e,t,n),[o[1],o[2]],[s[1],s[2]],a,i);return[c,u]}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],c=s[2],u=o[1],l=o[2];return[r.dilation2d(I("x",e,t,n),I("filter",e,t,n),[i,c],a,[u,l],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},h6=(e,t,n,r=ln)=>{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),c=I("dtype",e,t,n);return[r.oneHot(s,a,o,i,c)]}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"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 ky(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),c=I("softNmsSigma",e,t,n);return{boxes:r,scores:s,maxOutputSize:a,iouThreshold:o,scoreThreshold:i,softNmsSigma:c}}var f6=async(e,t,n,r,s=ln)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:c,scoreThreshold:u,softNmsSigma:l}=ky(e,t,n),p=await s.image.nonMaxSuppressionWithScoreAsync(a,o,i,c,u,l);return[p.selectedIndices,p.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:c,scoreThreshold:u}=ky(e,t,n),l=I("padToMaxOutputSize",e,t,n),p=await s.image.nonMaxSuppressionPaddedAsync(a,o,i,c,u,l);return[p.selectedIndices,p.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:a,scores:o,maxOutputSize:i,iouThreshold:c,scoreThreshold:u}=ky(e,t,n);return[await s.image.nonMaxSuppressionAsync(a,o,i,c,u)]}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`)}},m6=(e,t,n,r=ln)=>{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`)}},g6=(e,t,n,r=ln)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let s=I("default",e,t,n);return[Sn(e.name,t,n)||s];case"Placeholder":return[Sn(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),c=I("message",e,t,n),u=I("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(c);for(let l=0;l<i.length;l++)console.log(Array.prototype.slice.call(i[l].dataSync()).slice(0,u));return[o];default:throw TypeError(`Node type ${e.op} is not implemented`)}},b6=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=xe(0),this.tensorMap=new Map,Jt(this.handle)}get id(){return this.handle.id}clearAndClose(){this.tensorMap.forEach(e=>e.dispose()),this.tensorMap.clear(),this.handle.dispose()}size(){return this.tensorMap.size}tensorSize(){return xe(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(r=>r.dispose()),this.tensorMap.clear(),O(()=>{let r=lt(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<s;o++){let i=n[o],c=r[o];Jt(c),this.tensorMap.set(i,c)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return O(()=>{let r=[];for(let s=0;s<n.length;s++){let a=n[s],o=this.findWithDefault(a,t);r.push(o)}return Ft(r)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},y6=async(e,t,n,r)=>{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 b6(a,o);return r.addHashTable(e.name,i),[i.handle]}}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`)}},v6=(e,t,n,r=ln)=>{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),c=I("method",e,t,n),u=I("extrapolationValue",e,t,n);return[r.image.cropAndResize(s,a,o,i,c,u)]}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),c=I("interpolation",e,t,n),u=I("fillMode",e,t,n);return[r.image.transform(s,a,c.toLowerCase(),u.toLowerCase(),i,o)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},x6=(e,t,n,r=ln)=>{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))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},w6=(e,t,n,r=ln)=>{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",c=I("numArgs",e,t,n),u=I("leakyreluAlpha",e,t,n);if(o){if(i&&c!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&c!==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:u})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},I6=(e,t,n,r=ln)=>{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))];case"SparseToDense":return[r.sparseToDense(I("sparseIndices",e,t,n),I("outputShape",e,t,n),I("sparseValues",e,t,n),I("defaultValue",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},k6=(e,t,n,r=ln)=>{switch(e.op){case"Max":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.max(I("x",e,t,n),i,c)]}case"Mean":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.mean(I("x",e,t,n),i,c)]}case"Min":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.min(I("x",e,t,n),i,c)]}case"Sum":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.sum(I("x",e,t,n),i,c)]}case"All":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.all(I("x",e,t,n),i,c)]}case"Any":{let i=I("axis",e,t,n),c=I("keepDims",e,t,n);return[r.any(I("x",e,t,n),i,c)]}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),c=I("keepDims",e,t,n);return[r.prod(I("x",e,t,n),i,c)]}case"Cumprod":{let i=I("axis",e,t,n),c=I("exclusive",e,t,n),u=I("reverse",e,t,n);return[r.cumprod(I("x",e,t,n),i,c,u)]}case"Cumsum":{let i=I("axis",e,t,n),c=I("exclusive",e,t,n),u=I("reverse",e,t,n);return[r.cumsum(I("x",e,t,n),i,c,u)]}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),c=I("weights",e,t,n),u=I("size",e,t,n),l=I("binaryOutput",e,t,n);return[r.denseBincount(i,c,u,l)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},S6=(e,t,n,r=ln)=>{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<s.length;i++)s[i]&&a.push(i);let o=I("x",e,t,n);return[r.reverse(o,a)]}case"ReverseV2":{let s=I("axis",e,t,n),a=I("x",e,t,n);return[r.reverse(a,s)]}case"Slice":{let s=I("begin",e,t,n),a=I("size",e,t,n);return[r.slice(I("x",e,t,n),s,a)]}case"StridedSlice":{let s=I("begin",e,t,n),a=I("end",e,t,n),o=I("strides",e,t,n),i=I("beginMask",e,t,n),c=I("endMask",e,t,n),u=I("ellipsisMask",e,t,n),l=I("newAxisMask",e,t,n),p=I("shrinkAxisMask",e,t,n),d=I("x",e,t,n);return[r.stridedSlice(d,s,a,o,i,c,u,l,p)]}case"Pack":return O(()=>{let s=I("axis",e,t,n),a=I("tensors",e,t,n),o=a[0].shape,i=r.squeeze(a[0]).shape,c=a.map(u=>{let l=w.arraysEqual(u.shape,o);if(!l&&!w.arraysEqual(r.squeeze(u).shape,i))throw new Error("the input tensors shape does not match");return l?u:r.reshape(u,o)});return[r.stack(c,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))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},T6=(e,t,n,r=ln)=>{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`)}},C6=(e,t,n,r=ln)=>{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`)}},N6=(e,t,n,r=ln)=>{switch(e.op){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`)}},_6=(e,t,n,r=ln)=>{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"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 t1(e,t,n,r,s=O){let a=((o,i,c)=>{switch(o.category){case"arithmetic":return s(()=>s6(o,i,c));case"basic_math":return s(()=>a6(o,i,c));case"control":return d6(o,i,c);case"convolution":return s(()=>p6(o,i,c));case"creation":return s(()=>h6(o,i,c));case"dynamic":return f6(o,i,c);case"evaluation":return s(()=>m6(o,i,c));case"image":return s(()=>v6(o,i,c));case"graph":return s(()=>g6(o,i,c));case"logical":return s(()=>x6(o,i,c));case"matrices":return s(()=>w6(o,i,c));case"normalization":return s(()=>I6(o,i,c));case"reduction":return s(()=>k6(o,i,c));case"slice_join":return s(()=>S6(o,i,c));case"sparse":return s(()=>T6(o,i,c));case"spectral":return s(()=>C6(o,i,c));case"string":return s(()=>N6(o,i,c));case"transformation":return s(()=>_6(o,i,c));case"hash_table":return y6(o,i,c,r);case"custom":let u=kN(o.op);if(u&&u.customExecutor)return u.customExecutor(new r6(o,i,c));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 n1=class{constructor(e={},t={},n={},r={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=r,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function r1(e,t,n,r){let s=new Set,a=[],o=null,i=null,c=new Set,u=Object.keys(e).map(d=>Zn(d)[0]),l=[];r!=null&&(l=r.map(d=>Zn(d.name)[0]));let p=[...t];for(;p.length>0;){let d=p.pop();if((HN(d)||F6(d)||R6(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&&u.indexOf(d.name)===-1&&l.indexOf(d.name)===-1){if(d.inputs.length===0){a.push(d.name);continue}d.inputs.forEach(h=>{c.has(h.name)||(c.add(h.name),p.push(h))})}}return{inputs:e,outputs:t,usedNodes:s,missingInputs:a,dynamicNode:o,syncInputs:i}}function E6(e,t,n){let{usedNodes:r,inputs:s}=n,a=[],o=Object.keys(s).map(l=>Zn(l)[0]).map(l=>e.nodes[l]),i=e.initNodes;o.forEach(l=>{r.has(l.name)&&a.push(l)}),e.weights.forEach(l=>{r.has(l.name)&&a.push(l)}),i!=null&&i.forEach(l=>{r.has(l.name)&&a.push(l)});let c=new Set,u=[];for(;a.length>0;){let l=a.pop();c.add(l.name),t[l.name]||u.push(l),l.children.forEach(p=>{!c.has(p.name)&&r.has(p.name)&&p.inputs.every(d=>c.has(d.name))&&a.push(p)})}return u}var A6=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],$6=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],D6=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function HN(e){return A6.indexOf(e.op)>=0}function F6(e){return $6.indexOf(e.op)>=0}function R6(e){return D6.indexOf(e.op)>=0}var lv=class{constructor(e,t){this.graph=e,this.parent=t,this.compiledMap=new Map,this._weightMap={},this.SEPERATOR=",",this._functions={},this._functionExecutorMap={},this.intermediateTensors={},this.keepTensorForDebug=!1,this._outputs=e.outputs,this._inputs=e.inputs,this._initNodes=e.initNodes,this._signature=e.signature,this._functions=e.functions,e.functions!=null&&Object.keys(e.functions).forEach(n=>{this._functionExecutorMap[n]=new lv(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(r=>r.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(s=>s.name).sort(),r=t.map(s=>s.name).sort();return n.join(this.SEPERATOR)+"--"+r.join(this.SEPERATOR)}compile(e,t){let n=r1(e,t,this.weightMap,this._initNodes),{missingInputs:r,dynamicNode:s,syncInputs:a}=n;if(s!=null)throw new Error(`This execution contains the node '${s.name}', which has the dynamic op '${s.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${a}]`);if(r.length>0){let o=t.map(c=>c.name),i=Object.keys(e);throw new Error(`Cannot compute the outputs [${o}] from the provided inputs [${i}]. Missing the following inputs: [${r}]`)}return E6(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let r=n.map(l=>this.graph.nodes[Zn(l)[0]]),s=t.map(l=>Zn(l)[0]),a=s.map(l=>this.graph.nodes[l]);this.resetIntermediateTensors(),a.length===0&&(a=this._outputs);let o=this.getCompilationKey(r,a),i=this.compiledMap.get(o);i==null&&(i=this.compile(e,a),this.compiledMap.set(o,i));let c={},u={};return O(()=>{let l=new n1(this.weightMap,c,u,this.functionExecutorMap),p=Object.assign({},this.weightMap);Object.keys(e).forEach(f=>{let[m,g]=Zn(f),b=[];b[g]=e[f],p[m]=b});let d=this.getFrozenTensorIds(p),h={};for(let f=0;f<i.length;f++){let m=i[f];if(!p[m.name]){let g=t1(m,p,l,this._resourceManager);if(w.isPromise(g))throw new Error(`The execution of the op '${m.op}' returned a promise. Please use model.executeAsync() instead.`);p[m.name]=g,this.checkTensorForDisposal(m.name,m,p,l,d,s,h)}}return this.parent==null&&l.dispose(d),t.map(f=>Sn(f,p,l))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(r=>r.id)));return new Set(t)}checkTensorForDisposal(e,t,n,r,s,a,o){t.category==="control"||a.indexOf(e)!==-1||(n[e].forEach(i=>{i!=null&&(o[i.id]=(o[i.id]||0)+t.children.length)}),t.inputs.forEach(i=>{if(i.category!=="control"){let c=OH(i.name,n,r);c!=null&&c.forEach(u=>{if(u&&!u.kept&&!s.has(u.id)){let l=o[u.id];if(l===1){if(!this.keepTensorForDebug)u.dispose();else{let[p,d]=os(t.name,r);this.intermediateTensors[p]?this.intermediateTensors[p][d]=u:(this.intermediateTensors[p]=[],this.intermediateTensors[p][d]=u)}delete o[u.id]}else l!=null&&o[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(n=>{n&&!n.kept&&!n.isDisposed&&!this.keepIds.has(n.id)&&n.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,n=!1,r={},s={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=q().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(u){console.warn(u.message)}this.resetIntermediateTensors();let a=new n1(this.weightMap,r,s,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,a,t,n);let o=t.map(u=>Sn(u,this.tensorsMap,a)),i=o.map(u=>u.id),c=Object.keys(e).map(u=>e[u].id);return this.keepIds=new Set([...i,...c,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&a.dispose(this.keepIds),o}async executeFunctionAsync(e,t,n){let r=e.reduce((s,a,o)=>(s[this.inputs[o].name]=a,s),{});return this._executeAsync(r,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,r){let s=Object.keys(e),a=s.map(y=>this.graph.nodes[Zn(y)[0]]),o=n.map(y=>Zn(y)[0]),i=o.map(y=>this.graph.nodes[y]);i.length===0&&(i=this._outputs);let{usedNodes:c,missingInputs:u,dynamicNode:l,syncInputs:p}=r1(e,i,this.weightMap,this._initNodes),d=[...a,...this.graph.weights,...this._initNodes||[]].map(y=>({node:y,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(y=>{let[v,x]=Zn(y),k=[];k[x]=e[y],h[v]=k});let f={},m=this.getFrozenTensorIds(h),g={};for(;d.length>0;){let y=this.processStack(a,d,t,h,g,m,o,f,c);await Promise.all(y)}l==null&&!r&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let b=i.filter(y=>!HN(y)&&!Sn(y.name,h,t)).map(y=>y.name);if(b.length>0){let y="";throw l!=null&&(y=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${p}]`),new Error(`Cannot compute the outputs [${b}] from the provided inputs [${s}]. Consider providing the following inputs: [${u}]. ${y}`)}return h}processStack(e,t,n,r,s,a,o,i,c){let u=[];for(;t.length>0;){let l=t.pop();n.currentContext=l.contexts;let p="";if(l.node.op==="Enter"&&I("isConstant",l.node,r,n)&&([p]=os(l.node.name,n)),r[l.node.name]==null){let d=t1(l.node,r,n,this._resourceManager);p||([p]=os(l.node.name,n));let h=n.currentContext;w.isPromise(d)?u.push(d.then(f=>(r[p]=f,n.currentContext=h,this.checkTensorForDisposal(p,l.node,r,n,a,o,i),this.processChildNodes(l.node,t,n,r,s,c),f))):(r[p]=d,this.checkTensorForDisposal(p,l.node,r,n,a,o,i),this.processChildNodes(l.node,t,n,r,s,c))}else this.processChildNodes(l.node,t,n,r,s,c)}return u}processChildNodes(e,t,n,r,s,a){e.children.forEach(o=>{let[i]=os(o.name,n);s[i]||!a.has(o.name)||(o.op==="Merge"?o.inputNames.some(c=>!!Sn(c,r,n))&&(s[i]=!0,t.push({contexts:n.currentContext,node:o})):o.inputNames.every(c=>!!Sn(c,r,n))&&(s[i]=!0,t.push({contexts:n.currentContext,node:o})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[r]=Zn(t),s=this.graph.nodes[r];if(s.attrParams.shape&&s.attrParams.shape.value){let a=s.attrParams.shape.value,o=a.length===n.shape.length&&n.shape.every((i,c)=>a[c]===-1||a[c]===i);w.assert(o,()=>`The shape of dict['${s.name}'] provided in model.execute(dict) must be [${a}], but was [${n.shape}]`)}s.attrParams.dtype&&s.attrParams.dtype.value&&w.assert(n.dtype===s.attrParams.dtype.value,()=>`The dtype of dict['${s.name}'] provided in model.execute(dict) must be ${s.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let r=this._signature.inputs[n];t[r.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[r]=Zn(n);return this.graph.nodes[r]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=Zn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},P6=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]}},O6="?tfjs-format=file",M6="model.json",A0=class{constructor(e,t={},n=Ut){this.modelUrl=e,this.loadOptions=t,this.version="n/a",this.io=n,t==null&&(this.loadOptions={}),this.resourceManager=new P6}get modelVersion(){return this.version}get inputNodes(){return this.executor.inputNodes}get outputNodes(){return this.executor.outputNodes}get inputs(){return this.executor.inputs}get outputs(){return this.executor.outputs}get weights(){return this.executor.weightMap}get metadata(){return this.artifacts.userDefinedMetadata}get modelSignature(){return this.signature}get modelStructuredOutputKeys(){return this.structuredOutputKeys}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=this.io.browserHTTPRequest(e,this.loadOptions);else{let t=this.io.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(this.io.browserHTTPRequest(e,this.loadOptions));else if(t.length>1)throw new Error(`Found more than one (${t.length}) load handlers for URL '${[e]}'`);this.handler=t[0]}}load(){if(this.findIOHandler(),this.handler.load==null)throw new Error("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let e=this.handler.load();return w.isPromise(e)?e.then(t=>this.loadSync(t)):this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n=this.artifacts.signature;if(this.artifacts.userDefinedMetadata!=null){let s=this.artifacts.userDefinedMetadata;s.signature!=null&&(n=s.signature),s.structuredOutputKeys!=null&&(this.structuredOutputKeys=s.structuredOutputKeys)}this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let r=this.io.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new lv(Zk.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(r),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let s=Zk.Instance.transformGraph(e.modelInitializer);this.initializer=new lv(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)}predict(e,t){let n=this.execute(e,this.outputNodes);if(this.structuredOutputKeys){let r=n instanceof Te?[n]:n,s={};return r.forEach((a,o)=>s[this.structuredOutputKeys[o]]=a),s}return n}normalizeInputs(e){if(!(e instanceof Te)&&!Array.isArray(e)){if(this.signature!=null&&this.signature.inputs!=null)for(let r in this.signature.inputs){let s=this.signature.inputs[r];s.resourceId!=null&&(e[r]=this.resourceIdToCapturedInput[s.resourceId])}return e}e=Array.isArray(e)?e:[e];let t=Object.keys(this.resourceIdToCapturedInput).length;if(e.length+t!==this.inputNodes.length)throw new Error(`Input tensor count mismatch, the graph model has ${this.inputNodes.length-t} non-resource placeholders, while there are ${e.length} input tensors provided.`);let n=0;return this.inputNodes.reduce((r,s)=>{let a=this.signature?this.signature.inputs[s]:null;return a!=null&&a.resourceId!=null?r[s]=this.resourceIdToCapturedInput[a.resourceId]:r[s]=e[n++],r},{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}executeInitializerGraph(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.execute({},[]):this.initializer.execute({},Object.keys(this.initializerSignature.outputs))}async executeInitializerGraphAsync(){return this.initializer==null?[]:this.initializerSignature==null?this.initializer.executeAsync({},[]):this.initializer.executeAsync({},Object.keys(this.initializerSignature.outputs))}setResourceIdToCapturedInput(e){if(this.resourceIdToCapturedInput={},this.initializerSignature){let t=Object.keys(this.initializerSignature.outputs);for(let n=0;n<t.length;n++){let r=t[n],s=this.initializerSignature.outputs[r];this.resourceIdToCapturedInput[s.resourceId]=e[n]}}}execute(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(this.executeInitializerGraph()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){this.resourceIdToCapturedInput==null&&this.setResourceIdToCapturedInput(await this.executeInitializerGraphAsync()),e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&(this.initializer.dispose(),this.resourceIdToCapturedInput&&_e(this.resourceIdToCapturedInput)),this.resourceManager.dispose()}};async function L6(e,t={},n=Ut){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=B6(e));let r=new A0(e,t,n);return await r.load(),r}function z6(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=Ut.getWeightSpecs(r.weightsManifest),o=Ut.getModelArtifactsForJSONSync(r,a,s);t=Ut.fromMemorySync(o)}else if("load"in e)t=e;else if("modelTopology"in e&&"weightSpecs"in e&&"weightData"in e)t=Ut.fromMemorySync(e);else throw new Error("Unknown model format");let n=new A0(t);return n.load(),n}function B6(e){return e.endsWith("/")||(e=e+"/"),`${e}${M6}${O6}`}var W6="4.0.0",qN={};Ae(qN,{CSVDataset:()=>t_,Dataset:()=>ju,FileDataSource:()=>c_,TextLineDataset:()=>e_,URLDataSource:()=>u_,array:()=>lq,csv:()=>wq,func:()=>Iq,generator:()=>kq,microphone:()=>Tq,version_data:()=>Cq,webcam:()=>Sq,zip:()=>dq});var V6=ma(cf()),U6=ma(cf());function G6(e,t){return Zh(e,t)}function Zh(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(Nc(e)){let a=Array.isArray(e)?[]:{};r.add(e);for(let o in e){let i=e[o],c=Zh(i,t,n,r);a[o]=c}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 H6(e,t=KN){return jN(e,t)}function jN(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(Nc(r)){let a=Array.isArray(r)?[]:{};n.add(r);for(let o in r){let i=e.map(u=>u[o]),c=jN(i,t,n);a[o]=c}return n.delete(r),a}else throw new Error(`Can't recurse into non-iterable type: ${r}`);else return s.value}function KN(e){return e===null?null:Nc(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function XN(e,t){let n=new Map;Zh(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 Zh(e,t,n)}function Nc(e){let t=!1;if(q().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=G1();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Te)&&!(e instanceof Promise)&&!t)}function q6(e){return e==null||j6(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Te||w.isTypedArray(e)}function j6(e){return e===null||typeof e!="object"&&typeof e!="function"}function K6(e){return G6(e,X6)}function X6(e){return e instanceof Te?{value:e.clone(),recurse:!1}:Nc(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var YN=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}},$0=class extends YN{constructor(){super($0.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let r=0;r<n;r++)t[r]=this.get(this.wrap(this.begin+r));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};$0.INITIAL_CAPACITY=32;function ZN(e){return new J6(e)}function D0(e){return new Q6(e)}function Y6(e,t){return new JN(e,t)}function Z6(e,t=na.FAIL){return new cq(e,t)}var tn=class{async toArray(){let e=[],t=await this.next();for(;!t.done;)e.push(t.value),t=await this.next();return e}async toArrayForTest(){let e=this.prefetch(100),t=[],n=await e.next();for(;!n.done;)t.push(n.value),n=await e.next();return t}async resolveFully(){let e=await this.next();for(;!e.done;)e=await this.next()}async resolveWhile(e){let t=await this.next(),n=e(t.value);for(;!t.done&&n;)t=await this.next(),n=e(t.value)}handleErrors(e){return new oq(this,e)}filter(e){return new sq(this,e)}map(e){return new aq(this,e)}mapAsync(e){return new s1(this,e)}serialMapAsync(e){return new s1(this,e).serial()}flatmap(e){return new iq(this,e)}async forEachAsync(e){return this.map(e).resolveFully()}async serialForEach(e){return this.serialMapAsync(e).resolveWhile(t=>t===!0)}rowMajorBatch(e,t=!0){return new rq(this,e,t)}columnMajorBatch(e,t=!0,n=KN){return this.rowMajorBatch(e,t).map(s=>H6(s,n))}concatenate(e,t){return new JN(ZN([this,e]),t)}take(e){return e<0||e==null?this:new nq(this,e)}skip(e){return e<0||e==null?this:new tq(this,e)}prefetch(e){return new QN(this,e)}shuffle(e,t){return new uq(this,e,t)}serial(){return new eq(this)}},J6=class extends tn{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:K6(e),done:!1}}},Q6=class extends tn{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}}},eq=class extends tn{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()}},tq=class extends tn{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> Skip`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;this.count++<this.maxCount;){let e=await this.upstream.next();if(e.done)return e;_e(e.value)}return this.upstream.next()}},nq=class extends tn{constructor(e,t){super(),this.upstream=e,this.maxCount=t,this.count=0}summary(){return`${this.upstream.summary()} -> Take`}async next(){return this.count++>=this.maxCount?{value:null,done:!0}:this.upstream.next()}},rq=class extends tn{constructor(e,t,n=!0){super(),this.upstream=e,this.batchSize=t,this.enableSmallLastBatch=n,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> RowMajorBatch`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){let e=[];for(;e.length<this.batchSize;){let t=await this.upstream.next();if(t.done)return this.enableSmallLastBatch&&e.length>0?{value:e,done:!1}:{value:null,done:!0};e.push(t.value)}return{value:e,done:!1}}},sq=class extends tn{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)}}},aq=class extends tn{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=Ur.getTensorsInContainer(e.value),n=this.transform(e.value),r=Ur.getTensorsInContainer(n);for(let s of t)Ur.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},oq=class extends tn{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}}}},s1=class extends tn{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=Ur.getTensorsInContainer(e.value),n=await this.transform(e.value),r=Ur.getTensorsInContainer(n);for(let s of t)Ur.isTensorInList(s,r)||s.dispose();return{value:n,done:!1}}},F0=class extends tn{constructor(){super(),this.outputQueue=new $0,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}}},iq=class extends F0{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=Ur.getTensorsInContainer(e.value),n=this.transform(e.value),r=Ur.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let s of t)Ur.isTensorInList(s,r)||s.dispose();return!0}},JN=class extends tn{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}},na;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(na||(na={}));var cq=class extends tn{constructor(e,t=na.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 tn?{value:a.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let s=await XN(this.iterators,r);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case na.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case na.SHORTEST:return{value:null,done:!0};case na.LONGEST:default:}return this.count++,{value:s,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},QN=class extends tn{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new YN(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()}},uq=class extends QN{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=U6.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}}},ju=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),Yn(async()=>(await n.iterator()).columnMajorBatch(e,t,pq),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,Yn(async()=>(await t.iterator()).concatenate(await e.iterator()),n)}filter(e){let t=this,n;return this.size===1/0?n=1/0:n=null,Yn(async()=>(await t.iterator()).filter(r=>O(()=>e(r))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Yn(async()=>(await t.iterator()).map(n=>O(()=>e(n))),this.size)}mapAsync(e){let t=this;return Yn(async()=>(await t.iterator()).mapAsync(e),this.size)}prefetch(e){if(e==null)throw new RangeError("`Dataset.prefetch()` requires bufferSize to be specified.");let t=this;return Yn(async()=>(await t.iterator()).prefetch(e),this.size)}repeat(e){let t=this,n;return this.size!=null&&e>0?n=this.size*e:e===0?n=0:this.size!=null&&(e===void 0||e<0)?n=1/0:n=null,Yn(async()=>{let r=D0(async()=>({value:await t.iterator(),done:!1}));return Y6(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<e||e===void 0||e<0)?n=0:n=null,Yn(async()=>(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let r=this,s=V6.alea(t||w.now().toString());return Yn(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,Yn(async()=>(await t.iterator()).take(e),n)}async toArray(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArray()}async toArrayForTest(){if(this.size===1/0)throw new Error("Can not convert infinite data stream to array.");return(await this.iterator()).toArrayForTest()}};ju.MAX_BUFFER_SIZE=1e4;function Yn(e,t=null){return new class extends ju{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function lq(e){return Yn(async()=>ZN(e),e.length)}function dq(e){if(!Nc(e))throw new Error("The argument to zip() must be an object or array.");let t;if(Array.isArray(e))for(let n=0;n<e.length;n++)t=t==null?e[n].size:Math.min(t,e[n].size);else if(e instanceof Object)for(let n in e)t=t==null?e[n].size:Math.min(t,e[n].size);return Yn(async()=>{let n=await XN(e,r=>{if(r instanceof ju)return{value:r.iterator(),recurse:!1};if(Nc(r))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return Z6(n,na.SHORTEST)},t)}function pq(e){if(e===null)return null;let t=e[0];return q6(t)?{value:hq(e),recurse:!1}:{value:null,recurse:!0}}function hq(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Te?Ft(e):Cn(e)}var e_=class extends ju{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))}},ph='"',Dl=Symbol("out"),a1=Symbol("field"),hh=Symbol("quote"),Sy=Symbol("quoteafterquote"),o1=Symbol("quoteinquote"),t_=class extends ju{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 e_(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 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}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;s<this.fullColumnNames.length;s++){let a=this.fullColumnNames[s],o=this.columnConfigs?this.columnConfigs[a]:null;if(!(this.configuredColumnsOnly&&!o)){let i=t[s],c=null;if(i==="")if(o&&o.default!==void 0)c=o.default;else{if(o&&(o.required||o.isLabel))throw new Error(`Required column ${a} is empty in this line: ${e}`);c=void 0}else{let u=Number(i);if(isNaN(u))o&&o.dtype==="bool"?c=this.getBoolean(i):c=i;else if(!o||!o.dtype)c=u;else switch(o.dtype){case"float32":c=u;break;case"int32":c=Math.floor(u);break;case"bool":c=this.getBoolean(i);break;default:c=u}}o&&o.isLabel?r[a]=c:n[a]=c}}return Object.keys(r).length===0?n:{xs:n,ys:r}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],r=0,s=e.length,a=Dl;for(let o=0;o<s;o++)switch(a){case Dl:switch(e.charAt(o)){case ph:r=o+1,a=hh;break;case this.delimiter:if(r=o+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),a=Dl;break;default:a=a1,r=o;break}break;case a1:switch(e.charAt(o)){case this.delimiter:n.push(e.substring(r,o)),a=Dl,r=o+1;break;default:}break;case hh:switch(e.charAt(o)){case ph:a=Sy;break;default:}break;case Sy:switch(e.charAt(o)){case this.delimiter:n.push(e.substring(r,o-1)),a=Dl,r=o+1;break;case ph:a=hh;break;default:a=o1;break}break;case o1:switch(e.charAt(o)){case ph:a=hh;break;default:}break;default:}if(a===Sy?n.push(e.substring(r,s-1)):n.push(e.substring(r)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},n_=class extends tn{constructor(e){super(),this.microphoneConfig=e,this.isClosed=!1,this.fftSize=e.fftSize||1024;let t=Math.log2(this.fftSize);if(this.fftSize<0||t<4||t>14||!Number.isInteger(t))throw new Error(`Invalid fftSize: it must be a power of 2 between 2 to 4 and 2 to 14, but got ${this.fftSize}`);if(this.numFrames=e.numFramesPerSpectrogram||43,this.sampleRateHz=e.sampleRateHz,this.columnTruncateLength=e.columnTruncateLength||this.fftSize,this.audioTrackConstraints=e.audioTrackConstraints,this.smoothingTimeConstant=e.smoothingTimeConstant||0,this.includeSpectrogram=e.includeSpectrogram!==!1,this.includeWaveform=e.includeWaveform===!0,!this.includeSpectrogram&&!this.includeWaveform)throw new Error("Both includeSpectrogram and includeWaveform are false. At least one type of data should be returned.")}summary(){return"microphone"}static async create(e={}){if(!q().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let t=new n_(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let r=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(r,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let r=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(r,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(r=>{let s=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&r({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(s),r({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((r,s)=>n.set(r,s*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(w.sizeFromShape(t));return n.set(e,n.length-e.length),Cn(n,t)}},r_=class extends tn{constructor(e,t){if(super(),this.webcamVideoElement=e,this.webcamConfig=t,this.isClosed=!0,this.resize=!1,this.needToResize())if(this.resize=!0,this.cropSize=[this.webcamConfig.resizeHeight,this.webcamConfig.resizeWidth],this.cropBoxInd=Ke([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,r=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,s=(1-n)/2,a=(1-r)/2,o=s+n,i=r+a;this.cropBox=$r([a,s,i,o],[1,4])}else this.cropBox=$r([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(!q().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new r_(e,t);return await n.start(),n}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(e){throw e.message=`Error thrown while initializing video stream: ${e.message}`,e}if(!this.stream)throw new Error("Could not obtain video from webcam.");try{this.webcamVideoElement.srcObject=this.stream}catch(e){console.log(e),this.webcamVideoElement.src=window.URL.createObjectURL(this.stream)}return this.webcamVideoElement.play(),this.isClosed=!1,new Promise(e=>{this.webcamVideoElement.onloadedmetadata=()=>{e()}})}async next(){if(this.isClosed)return{value:null,done:!0};let e;try{e=fi.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return O(()=>{let t=Zt(ce(e,"float32"),0),n;n=Br.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let r=n.shape;return W(n,r.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(t=>t.stop());try{this.webcamVideoElement.srcObject=null}catch(t){console.log(t),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},s_=class{},a_=class extends tn{split(e){return new fq(this,e)}},fq=class extends a_{constructor(e,t){super(),this.upstream=e,this.impl=new mq(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},mq=class extends F0{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}},gq=class extends tn{decodeUTF8(){return new bq(this)}},bq=class extends a_{constructor(e){super(),this.upstream=e,this.impl=new yq(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},yq=class extends F0{constructor(e){if(super(),this.upstream=e,q().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=G1();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 q().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},o_=class extends gq{constructor(e,t={}){super(),this.file=e,this.options=t,w.assert(e instanceof Uint8Array||(q().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 vq(e,t={},n){let r,s;typeof e=="string"?r=e:(r=e.url,s=xq(e));let a=await(n||w.fetch)(r,s);if(a.ok){let o=new Uint8Array(await a.arrayBuffer());return new o_(o,t)}else throw new Error(a.statusText)}var xq=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 i_(e){return typeof e=="string"&&e.slice(0,7)==="file://"}var c_=class extends s_{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(i_(this.input)&&q().get("IS_NODE")){let e=Nv();this.input=e.readFileSync(this.input.slice(7))}return new o_(this.input,this.options)}},u_=class extends s_{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return i_(this.url)?new c_(this.url,this.fileOptions).iterator():vq(this.url,this.fileOptions)}};function wq(e,t={}){return new t_(new u_(e),t)}function Iq(e){let t=D0(e);return Yn(async()=>t)}function kq(e){return Yn(async()=>{let t=await e();return D0(()=>t.next())})}async function Sq(e,t){return r_.create(e,t)}async function Tq(e){return n_.create(e)}var Cq="4.0.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 Nq=fs.whereImpl,R0=class extends ld{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new uf(this,Er())}nextDataId(){return R0.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,q().get("IS_NODE")&&N.warn(`
|
|
============================
|
|
Hi, looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, visit https://github.com/tensorflow/tfjs-node for more details.
|
|
============================`));let r={id:this.nextDataId()};return this.data.set(r,{values:e,dtype:n,refCount:1}),r}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&w.isString(n[0])){let s=n.map(a=>w.encodeString(a));r=this.write(s,e,t)}else r=this.write(n,e,t);return{dataId:r,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,r,s){this.data.set(e,{values:t,dtype:r,refCount:s})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let r=this.readSync(n.real.dataId),s=this.readSync(n.imag.dataId);return N.mergeRealAndImagArrays(r,s)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let n=t.map(r=>w.decodeString(r));return Me(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(e.shape,e.dtype,t)}makeOutput(e,t,n){return Er().makeTensorFromTensorInfo(this.makeTensorInfo(t,n,e),this)}disposeData(e,t=!1){if(this.data.has(e)){if(this.data.get(e).refCount--,!t&&this.data.get(e).refCount>0)return!1;let{complexTensorInfos:n}=this.data.get(e);n!=null&&(this.disposeData(n.real.dataId,!0),this.disposeData(n.imag.dataId,!0)),this.data.delete(e)}return!0}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}async time(e){let t=w.now();return e(),{kernelMs:w.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){be([e],"where");let t=this.readSync(e.dataId);return Nq(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};R0.nextDataId=0;var l_={};Ae(l_,{addImpl:()=>h_,bincountImpl:()=>O0,bincountReduceImpl:()=>f_,castImpl:()=>p_,ceilImpl:()=>m_,concatImpl:()=>M0,equalImpl:()=>g_,expImpl:()=>y_,expm1Impl:()=>x_,floorImpl:()=>w_,gatherNdImpl:()=>I_,gatherV2Impl:()=>k_,greaterEqualImpl:()=>T_,greaterImpl:()=>S_,lessEqualImpl:()=>N_,lessImpl:()=>C_,linSpaceImpl:()=>__,logImpl:()=>E_,maxImpl:()=>A_,maximumImpl:()=>$_,minimumImpl:()=>D_,multiplyImpl:()=>L0,negImpl:()=>F_,notEqualImpl:()=>R_,prodImpl:()=>P_,raggedGatherImpl:()=>O_,raggedRangeImpl:()=>M_,raggedTensorToTensorImpl:()=>L_,rangeImpl:()=>B0,rsqrtImpl:()=>z_,scatterImpl:()=>cc,sigmoidImpl:()=>w5,simpleAbsImpl:()=>d_,sliceImpl:()=>Qh,sparseFillEmptyRowsImpl:()=>W_,sparseReshapeImpl:()=>V_,sparseSegmentReductionImpl:()=>W0,sqrtImpl:()=>S5,squaredDifferenceImpl:()=>U_,stridedSliceImpl:()=>G_,stringNGramsImpl:()=>V0,stringSplitImpl:()=>U0,stringToHashBucketFastImpl:()=>G0,subImpl:()=>H_,tileImpl:()=>q_,topKImpl:()=>K_,transposeImpl:()=>z0,uniqueImpl:()=>X_});function d_(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var _q=e=>{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=d_(s),n.makeOutput(r,t.shape,t.dtype)},Eq={kernelName:Fc,backendName:"cpu",kernelFunc:_q};function Vt(e){return(t,n,r,s,a)=>{let o=N.assertAndGetBroadcastShape(t,n),i=o.length,c=w.computeStrides(o),u=w.sizeFromShape(o),l=w.getTypedArrayFromDType(a,u),p=t.length,d=n.length,h=w.computeStrides(t),f=w.computeStrides(n),m=N.getBroadcastDims(t,o),g=N.getBroadcastDims(n,o);if(m.length+g.length===0)for(let b=0;b<l.length;++b)l[b]=e(r[b%r.length],s[b%s.length]);else for(let b=0;b<l.length;++b){let y=w.indexToLoc(b,i,c),v=y.slice(-p);m.forEach(C=>v[C]=0);let x=w.locToIndex(v,p,h),k=y.slice(-d);g.forEach(C=>k[C]=0);let S=w.locToIndex(k,d,f);l[b]=e(r[x],s[S])}return[l,o]}}function Jn(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"),c=n.data.get(i.dataId);return c.complexTensorInfos={real:n.makeTensorInfo(r.shape,"float32",a),imag:n.makeTensorInfo(s.shape,"float32",o)},i}var Aq={kernelName:gf,backendName:"cpu",kernelFunc:Jn};function Jh(e,t,n="float32"){if(n==="complex64"){let s=Jh(e,t,"float32"),a=Jh(e,t,"float32");return Jn({inputs:{real:s,imag:a},backend:e})}let r=w.makeZerosTypedArray(w.sizeFromShape(t),n);return e.makeTensorInfo(t,n,r)}function ds(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 $q={kernelName:Oo,backendName:"cpu",kernelFunc:ds};function lo(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 Dq={kernelName:Lf,backendName:"cpu",kernelFunc:lo};function p_(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]=Vt((i,c)=>i!==c?1:0)(t,[],e,s,"bool");return[o,"bool",a]}throw new Error(`Error in Cast: failed to cast ${n} to ${r}`)}function ha(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{dtype:a}=r;if(a==="complex64"){if(s.dtype==="complex64")return ds({inputs:{x:s},backend:n});let l=Jh(n,s.shape,s.dtype),p=ha({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),d=Jn({inputs:{real:p,imag:l},backend:n});return n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(p),d}if(s.dtype==="complex64"){let l=lo({inputs:{input:s},backend:n}),p=ha({inputs:{x:l},backend:n,attrs:{dtype:a}});return n.disposeIntermediateTensorInfo(l),p}if(!w.hasEncodingLoss(s.dtype,a)){let l=ds({inputs:{x:s},backend:n});return{dataId:l.dataId,shape:l.shape,dtype:a}}let o=n.data.get(s.dataId).values,[i,c,u]=p_(o,s.shape,s.dtype,a);return n.makeTensorInfo(i,c,u)}var Fq={kernelName:wo,backendName:"cpu",kernelFunc:ha};function nn(e,t,n,r){return n==null?({inputs:s,backend:a})=>{let{a:o,b:i}=s,c=a;be([o,i],e);let u=c.data.get(o.dataId).values,l=c.data.get(i.dataId).values,p=o.dtype==="string"?N.fromUint8ToStringArray(u):u,d=o.dtype==="string"?N.fromUint8ToStringArray(l):l,h=r||o.dtype,[f,m]=t(o.shape,i.shape,p,d,h);return c.makeTensorInfo(m,h,f)}:({inputs:s,backend:a})=>{let{a:o,b:i}=s,c=a;if(o.dtype==="complex64"||i.dtype==="complex64"){let u=ha({inputs:{x:o},backend:c,attrs:{dtype:"complex64"}}),l=c.data.get(u.dataId),p=l.complexTensorInfos.real,d=l.complexTensorInfos.imag,h=c.data.get(p.dataId).values,f=c.data.get(d.dataId).values,m=ha({inputs:{x:i},backend:c,attrs:{dtype:"complex64"}}),g=c.data.get(m.dataId),b=g.complexTensorInfos.real,y=g.complexTensorInfos.imag,v=c.data.get(b.dataId).values,x=c.data.get(y.dataId).values,[k,S,C]=n(o.shape,i.shape,h,f,v,x),E=c.makeTensorInfo(C,"float32",k),$=c.makeTensorInfo(C,"float32",S),F=Jn({inputs:{real:E,imag:$},backend:c});return c.disposeIntermediateTensorInfo(u),c.disposeIntermediateTensorInfo(m),c.disposeIntermediateTensorInfo(E),c.disposeIntermediateTensorInfo($),F}else{let u=c.data.get(o.dataId).values,l=c.data.get(i.dataId).values,p=r||o.dtype,[d,h]=t(o.shape,i.shape,u,l,p);return c.makeTensorInfo(h,p,d)}}}function P0(e){return(t,n,r,s,a,o)=>{let i=N.assertAndGetBroadcastShape(t,n),c=w.sizeFromShape(i),u=i.length,l=w.computeStrides(i),p=w.getTypedArrayFromDType("float32",c),d=w.getTypedArrayFromDType("float32",c),h=N.getBroadcastDims(t,i),f=N.getBroadcastDims(n,i),m=N.mergeRealAndImagArrays(r,s),g=N.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;k<p.length;k++){let S=k%m.length,C=k%g.length,E=e(m[S*2],m[S*2+1],g[C*2],g[C*2+1]);p[k]=E.real,d[k]=E.imag}else for(let k=0;k<p.length;k++){let S=w.indexToLoc(k,u,l),C=S.slice(-b);h.forEach(R=>C[R]=0);let E=w.locToIndex(C,b,y),$=S.slice(-v);f.forEach(R=>$[R]=0);let F=w.locToIndex($,v,x),A=e(m[E*2],m[E*2+1],g[F*2],g[F*2+1]);p[k]=A.real,d[k]=A.imag}return[p,d,i]}}var h_=Vt((e,t)=>e+t),Rq=P0((e,t,n,r)=>({real:e+n,imag:t+r})),_c=nn(ba,h_,Rq),Pq={kernelName:ba,backendName:"cpu",kernelFunc:_c};function O0(e,t,n,r,s){let a=w.sizeFromShape(r),o=w.makeZerosTypedArray(s,n);for(let i=0;i<e.length;i++){let c=e[i];if(c<0)throw new Error("Input x must be non-negative!");c>=s||(a>0?o[c]+=t[i]:o[c]+=1)}return o}function f_(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<s;i++)for(let c=0;c<a;c++){let u=e.get(i,c);if(u<0)throw new Error("Input x must be non-negative!");u>=n||(r?o.set(1,i,u):t.size>0?o.set(o.get(i,u)+t.get(i,c),i,u):o.set(o.get(i,u)+1,i,u))}return o}function _a(e){return(t,n,r)=>{let s=w.getTypedArrayFromDType(n,t.length);for(let a=0;a<t.length;++a)s[a]=e(t[a],r);return s}}function at(e,t,n){return({inputs:r,attrs:s,backend:a})=>{let{x:o}=r;if(be(o,e),o.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=a,c=i.data.get(o.dataId).values,u=w.sizeFromShape(o.shape),l=n||o.dtype,p=w.getArrayFromDType(l,u);for(let d=0;d<u;++d)p[d]=t(c[d],s);return i.makeTensorInfo(o.shape,l,p)}}function Ku(e,t,n){return({inputs:r,attrs:s,backend:a})=>{let{x:o}=r;if(be(o,e),o.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let i=a,c=i.data.get(o.dataId).values,u=n||o.dtype,l=t(c,u,s);return i.makeTensorInfo(o.shape,u,l)}}var m_=_a(e=>Math.ceil(e)),Oq=Ku(Io,m_),Mq={kernelName:Io,backendName:"cpu",kernelFunc:Oq};function M0(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"?N.fromUint8ToStringArray(o.vals):o.vals,c=0;for(let u=0;u<o.shape[0];++u){let l=u*t[1]+a;for(let p=0;p<o.shape[1];++p)s[l+p]=i[c++]}a+=o.shape[1]})}return s}var g_=Vt((e,t)=>e===t?1:0),b_=nn(Xc,g_,null,"bool"),Lq={kernelName:Xc,backendName:"cpu",kernelFunc:b_},y_=_a(e=>Math.exp(e)),v_=Ku($o,y_,"float32"),zq={kernelName:$o,backendName:"cpu",kernelFunc:v_},x_=_a(e=>Math.expm1(e)),Bq=Ku(Zc,x_),Wq={kernelName:Zc,backendName:"cpu",kernelFunc:Bq},w_=_a(e=>Math.floor(e)),Vq=Ku(Do,w_),Uq={kernelName:Do,backendName:"cpu",kernelFunc:Vq};function I_(e,t,n,r,s,a,o,i,c){let u=Me([r,a],n);for(let l=0;l<r;l++){let p=[],d=0;for(let h=0;h<s;h++){let f=e[l*s+h];d+=f*o[h],p.push(f)}if(d<0||d>=c/a)throw new Error(`Invalid indices: ${p} does not index into ${i}`);for(let h=0;h<a;h++)u.values[l*a+h]=t.get(...t.indexToLoc(d*a+h))}return u}function k_(e,t,n){let r=Me(n,e.dtype);for(let s=0;s<r.size;++s){let o=r.indexToLoc(s).slice(),i=o[0],c=o[2],u=t.locToIndex([i,c]);o[2]=t.values[u];let l=e.locToIndex(o);0<=l&&l<e.values.length&&(r.values[s]=e.values[l])}return r}var S_=Vt((e,t)=>e>t?1:0),Gq=nn(tu,S_,null,"bool"),Hq={kernelName:tu,backendName:"cpu",kernelFunc:Gq},T_=Vt((e,t)=>e>=t?1:0),qq=nn(Po,T_,null,"bool"),jq={kernelName:Po,backendName:"cpu",kernelFunc:qq},C_=Vt((e,t)=>e<t?1:0),Kq=nn(au,C_,null,"bool"),Xq={kernelName:au,backendName:"cpu",kernelFunc:Kq},N_=Vt((e,t)=>e<=t?1:0),Yq=nn(ou,N_,null,"bool"),Zq={kernelName:ou,backendName:"cpu",kernelFunc:Yq};function __(e,t,n){let r=(t-e)/(n-1),s=w.makeZerosTypedArray(n,"float32");s[0]=e;for(let a=1;a<s.length;a++)s[a]=s[a-1]+r;return s}var E_=_a(e=>Math.log(e)),Jq=Ku(Lo,E_),Qq={kernelName:Lo,backendName:"cpu",kernelFunc:Jq};function A_(e,t,n,r){let s=w.getTypedArrayFromDType(r,w.sizeFromShape(n));for(let a=0;a<s.length;++a){let o=a*t,i=e[o];for(let c=0;c<t;++c){let u=e[o+c];(Number.isNaN(u)||u>i)&&(i=u)}s[a]=i}return s}var $_=Vt((e,t)=>Math.max(e,t)),e5=nn(Bo,$_),t5={kernelName:Bo,backendName:"cpu",kernelFunc:e5},D_=Vt((e,t)=>Math.min(e,t)),n5=nn(Go,D_),r5={kernelName:Go,backendName:"cpu",kernelFunc:n5},L0=Vt((e,t)=>e*t),s5=P0((e,t,n,r)=>({real:e*n-t*r,imag:e*r+t*n})),Km=nn(qo,L0,s5),a5={kernelName:qo,backendName:"cpu",kernelFunc:Km};function F_(e,t,n){let r=w.createScalarValue(-1,n);return L0([],t,r,e,n)}function o5(e){let{inputs:t,backend:n}=e,{x:r}=t;be(r,"neg");let s=n.data.get(r.dataId).values,[a,o]=F_(s,r.shape,r.dtype);return n.makeTensorInfo(o,r.dtype,a)}var i5={kernelName:pu,backendName:"cpu",kernelFunc:o5},R_=Vt((e,t)=>e!==t?1:0),c5=nn(hu,R_,null,"bool"),u5={kernelName:hu,backendName:"cpu",kernelFunc:c5};function z0(e,t,n,r,s){let a=t.length,o=w.sizeFromShape(t),i=w.computeStrides(t),c=w.computeStrides(s),u=w.getTypedArrayFromDType(n,w.sizeFromShape(s));for(let l=0;l<o;++l){let p=w.indexToLoc(l,a,i),d=new Array(p.length);for(let f=0;f<d.length;f++)d[f]=p[r[f]];let h=w.locToIndex(d,a,c);u[h]=e[l]}return u}function Vn(e){let{inputs:t,attrs:n,backend:r}=e,{x:s}=t,{perm:a}=n;be(s,"transpose");let o=s.shape.length,i=new Array(o);for(let p=0;p<i.length;p++)i[p]=s.shape[a[p]];let c=r.data.get(s.dataId).values,u=z0(c,s.shape,s.dtype,a,i);return{dataId:r.write(u,i,s.dtype),shape:i,dtype:s.dtype}}var l5={kernelName:_s,backendName:"cpu",kernelFunc:Vn};function P_(e,t,n,r){let[s,a]=N.computeOutAndReduceShapes(e,r),o=hr(t,"int32"),i=w.makeZerosTypedArray(w.sizeFromShape(s),o),c=w.sizeFromShape(a);for(let u=0;u<i.length;++u){let l=u*c,p=1;for(let d=0;d<c;++d)p*=n[l+d];i[u]=p}return{outVals:i,outShape:s,outDtype:o}}function d5(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;be(s,"prod");let i=s.shape.length,c=w.parseAxisParam(a,s.shape),u=N.getAxesPermutation(c,i),l=c,p=s,d=[];u!=null&&(p=Vn({inputs:{x:s},backend:n,attrs:{perm:u}}),d.push(p),l=N.getInnerMostAxes(l.length,i));let h=n.data.get(p.dataId).values,{outVals:f,outShape:m,outDtype:g}=P_(p.shape,p.dtype,h,l),b=m;return o&&(b=N.expandShapeToKeepDim(m,c)),d.forEach(y=>n.disposeIntermediateTensorInfo(y)),n.makeTensorInfo(b,g,f)}var p5={kernelName:Zo,backendName:"cpu",kernelFunc:d5};function h5(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 f5(e,t){for(let n=0;n<e.length;++n){let r=e[n],s=n===e.length-1?t:e[n+1].length;if(r.length===0)throw new Error("Ragged splits may not be empty");if(r[0]<0)throw new Error("Ragged splits must be non-negative");if(r[r.length-1]>s)throw new Error("Ragged splits must not point past values");for(let a=1;a<r.length;++a)if(r[a-1]>r[a])throw new Error("Ragged splits must be sorted in ascending order")}}function m5(e,t,n,r){let s=[],a=0,o=t.length-1+n.length,i=new Array(o).fill(null).map(()=>[0]);f5(n,r);let c=1;for(let u=0;u<t.length-1;++u){c*=t[u];let l=t[u+1];for(let p=1;p<c+1;++p)i[u].push(p*l)}for(let u=0;u<e.length;++u){let l=e[u],p=e[u]+1;for(let d=0;d<n.length;++d){let h=n[d],f=d+t.length-1;if(f>=0){let m=i[f],g=m[m.length-1]-h[l];for(let b=l;b<p;++b)i[f].push(h[b+1]+g)}l=h[l],p=h[p]}p!==l&&(s.push([l,p]),a+=p-l)}return{outSplits:i,valueSlices:s,numValues:a}}function g5(e){let t=[];for(let n=0;n<e.length;++n){let r=e[n].length,s=w.getArrayFromDType("int32",r);t.push(s),e[n].forEach((a,o)=>s[o]=a)}return t}function i1(e,t){let n=e.slice(0,t);for(;n.length<t;)n.push(1);for(let r=t;r<e.length;r++)n[t-1]*=e[r];return n}function b5(e,t,n,r,s,a){let o=i1(t,2)[1],i=i1(a,2)[1],c=0;for(let u of n)for(let l=u[0];l<u[1];++l){for(let p=0;p<r;++p)s[c*i+p]=e[l*o+p];++c}}function y5(e,t,n,r,s){let a=t.slice();a[0]=s;let o=w.getArrayFromDType(n,w.sizeFromShape(a)),i=e.length,c=i===0?0:i/t[0];return b5(e,t,r,c,o,a),[o,a]}function O_(e,t,n,r,s,a,o,i){if(e.length===0)throw new Error("paramsNestedSplits must be non empty");if(t[0].length===0)throw new Error("Split tensors must not be scalars");let c=t[0][0]-1;if(h5(a,o,c),r.length===0)throw new Error("params.rank must be nonzero");let u=r[0],{outSplits:l,valueSlices:p,numValues:d}=m5(a,o,e,u),h=g5(l),f=y5(n,r,s,p,d);return[h,f[0],f[1]]}var c1=2147483647;function M_(e,t,n,r,s,a,o){if(t.length>1)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,c=s.length===0,u=o.length===0,l=[];i||l.push(t[0]),c||l.push(s[0]),u||l.push(o[0]);for(let g=1;g<l.length;++g)if(l[g]!==l[g-1])throw new Error("starts, limits, and deltas must have the same shape");let p=l.length===0?1:l[0],d=w.getArrayFromDType("int32",p+1);d[0]=0;for(let g=0;g<p;++g){let b=i?e[0]:e[g],y=c?r[0]:r[g],v=u?a[0]:a[g];if(v===0)throw new Error("Requires delta != 0");let x;if(v>0&&y<b||v<0&&y>b)x=0;else if(x=Math.ceil(Math.abs((y-b)/v)),x>c1)throw new Error(`Requires ((limit - start) / delta) <= ${c1}`);d[g+1]=d[g]+x}let h=d[p],f=w.getArrayFromDType(n,h),m=0;for(let g=0;g<p;++g){let b=d[g+1]-d[g],y=i?e[0]:e[g],v=u?a[0]:a[g];for(let x=0;x<b;++x)f[m++]=y,y+=v}return[d,f]}var Cr=N.RowPartitionType,dv=class{constructor(e,t,n,r,s,a,o,i,c,u){this.shape=e,this.shapeShape=t,this.values=n,this.valuesShape=r,this.valuesDType=s,this.defaultValue=a,this.defaultValueShape=o,this.rowPartitionValues=i,this.rowPartitionValuesShapes=c,this.rowPartitionTypes=N.getRowPartitionTypesHelper(u),this.raggedRank=N.getRaggedRank(this.rowPartitionTypes)}getRowPartitionTypeByDimension(e){return this.rowPartitionTypes[0]===Cr.FIRST_DIM_SIZE?this.rowPartitionTypes[e+1]:this.rowPartitionTypes[e]}getRowPartitionTensor(e){return this.rowPartitionTypes[0]===Cr.FIRST_DIM_SIZE?this.rowPartitionValues[e+1]:this.rowPartitionValues[e]}getMaxWidth(e){let t=this.getRowPartitionTensor(e-1);switch(this.getRowPartitionTypeByDimension(e-1)){case Cr.VALUE_ROWIDS:return dv.getMaxWidthValueRowID(t);case Cr.ROW_SPLITS:return dv.getMaxWidthRowSplit(t);default:throw new Error(`Cannot handle partition type ${Cr[this.getRowPartitionTypeByDimension(e-1)]}`)}}static getMaxWidthRowSplit(e){let t=e.length;if(t===0||t===1)return 0;let n=0;for(let r=0;r<t-1;++r){let s=e[r+1]-e[r];s>n&&(n=s)}return n}static getMaxWidthValueRowID(e){let t=e.length;if(t===0)return 0;let n=0,r=e[0],s=0;for(let a=1;a<t;++a){let o=e[a];o!==r&&(r=o,s=Math.max(a-n,s),n=a)}return Math.max(t-n,s)}tensorShapeFromTensor(e,t,n=!0){if(t.length===0){if(e[0]===-1)return[];throw new Error("The only valid scalar shape tensor is the fully unknown shape specified as -1.")}return l1(e,n)}calculateOutputSize(e){let t=this.valuesShape,n=this.defaultValueShape;N.validateDefaultValueShape(n,t);let r=this.tensorShapeFromTensor(this.shape,this.shapeShape),a=N.combineRaggedTensorToTensorShapes(this.raggedRank,r,t);a[0]<0&&(a[0]=e);for(let o=1;o<=this.raggedRank;++o)a[o]<0&&(a[o]=this.getMaxWidth(o));return a}calculateFirstParentOutputIndex(e,t,n){let r=Math.min(e,n),s=[],a=0;for(let o=0;o<r;++o,a+=t)s.push(a);for(let o=r;o<e;++o)s.push(-1);return w.assert(s.length===e,()=>"Final length of result must be equal to firstDimension."),s}calculateOutputIndexRowSplit(e,t,n,r){let s=e.length,a=[];for(let o=0;o<s-1;++o){let i=e[o+1]-e[o],c=Math.min(r,i),u=t[o];u===-1&&(c=0);for(let l=0;l<c;++l)a.push(u),u+=n;for(let l=0;l<i-c;++l)a.push(-1)}if(s>0&&a.length!==e[s-1])throw new Error("Invalid row split size.");return a}calculateOutputIndexValueRowID(e,t,n,r){let s=e.length,a=[];if(s===0)return[];let o=0,i=e[0];if(i>=t.length)throw new Error(`Got currentValueRowId=${i}, which is not less than ${t.length}`);let c=t[i];a.push(c);for(let u=1;u<s;++u){let l=e[u];if(l===i)c>=0&&(++o,o<r?c+=n:c=-1);else{if(o=0,i=l,l>=t.length)throw new Error(`Got nextValueRowId=${l} which is not less than ${t.length}`);c=t[l]}a.push(c)}if(a.length!==e.length)throw new Error("Invalid row ids.");return a}calculateOutputIndex(e,t,n,r){let s=this.getRowPartitionTensor(e),a=this.getRowPartitionTypeByDimension(e);switch(a){case Cr.VALUE_ROWIDS:return this.calculateOutputIndexValueRowID(s,t,n,r);case Cr.ROW_SPLITS:if(s.length-1>t.length)throw new Error(`Row partition size is greater than output size: ${s.length-1} > ${t.length}`);return this.calculateOutputIndexRowSplit(s,t,n,r);default:throw new Error(`Unsupported partition type: ${Cr[a]}`)}}getFirstDimensionSize(){let e=this.rowPartitionValues[0];if(this.rowPartitionTypes.length===0)throw new Error("No row_partition_types given.");let t=this.rowPartitionTypes[0];switch(t){case Cr.FIRST_DIM_SIZE:return e[0];case Cr.VALUE_ROWIDS:throw new Error("Cannot handle VALUE_ROWIDS in first dimension.");case Cr.ROW_SPLITS:return this.rowPartitionValuesShapes[0][0]-1;default:throw new Error(`Cannot handle type ${Cr[t]}`)}}compute(){if(this.rowPartitionValues[0].length<=0)throw new Error("Invalid first partition input. Tensor requires at least one element.");let t=this.getFirstDimensionSize(),n=this.calculateOutputSize(t),r=new Array(this.raggedRank+1);r[r.length-1]=1;for(let i=r.length-2;i>=0;--i)r[i]=r[i+1]*n[i+1];let s=l1(n,!1),a=w.getArrayFromDType(this.valuesDType,w.sizeFromShape(s));if(r[0]*n[0]>0){let i=this.calculateFirstParentOutputIndex(t,r[0],n[0]);for(let c=1;c<=this.raggedRank;++c)i=this.calculateOutputIndex(c-1,i,r[c],n[c]);this.setOutput(this.raggedRank,i,a,s)}return[s,a]}setOutput(e,t,n,r){if(n.length===0)return;let s=this.values,a=n,o=r.slice();o=o.slice(e+1);let i=w.sizeFromShape(o),c=t.length,u=this.defaultValue;if(u.length!==i&&u.length!==1){let h=this.defaultValueShape;O(()=>{let f=W(u,h);u=Ya(f,o).dataSync()})}let l=0,p=0,d=0;for(let h=0;h<=c;++h){let f=h<c?t[h]:-1;if(f===d){++d;continue}if(p<d){let m=s.subarray(l*i),g=a.subarray(p*i),b=(d-p)*i;u1(g,m,b)}if(h>=c){let m=n.length;f=Math.floor(m/i)}if(f>d)if(this.defaultValue.length===1)a.subarray(d*i,f*i).fill(this.defaultValue[0]),d=f;else for(;f>d;){let m=a.slice(d*i);u1(m,u,i),++d}f<0?(l=h+1,p=d):(l=h,p=d,d=p+1)}}};function u1(e,t,n){for(let r=0;r<n;r++)e[r]=t[r]}function l1(e,t){let n=[];for(let r of e){if(r<0){if(!t)throw new Error(`Dimension ${r} must be >= 0`);if(r<-1)throw new Error(`Dimension ${r} must be >= -1`);r=-1}n.push(r)}return n}function L_(e,t,n,r,s,a,o,i,c,u){return new dv(e,t,n,r,s,a,o,i,c,u).compute()}function B0(e,t,n,r){let s=e===t,a=e<t&&n<0,o=t<e&&n>1;if(s||a||o)return w.makeZerosTypedArray(0,r);let i=Math.abs(Math.ceil((t-e)/n)),c=w.makeZerosTypedArray(i,r);t<e&&n===1&&(n=-1),c[0]=e;for(let u=1;u<c.length;u++)c[u]=c[u-1]+n;return c}var z_=_a(e=>1/Math.sqrt(e)),v5=Ku(si,z_),x5={kernelName:si,backendName:"cpu",kernelFunc:v5};function cc(e,t,n,r,s,a,o,i,c,u){let l=[r/s,s],p=e.values,d=t.values;if(r===0)return Me(n,t.dtype);let h=Me(l,t.dtype);typeof c=="string"||typeof c=="number"?h.values.fill(c):typeof c=="boolean"&&h.values.fill(+c);for(let f=0;f<a;f++){let m=[],g=0;for(let b=0;b<o;b++){let y=p[f*o+b];m.push(y),g+=y*i[b]}if(g<0||g>=r/s)throw new Error(`Invalid indices: ${m} does not index into ${n}`);for(let b=0;b<s;b++)u?h.values[g*s+b]+=d[f*s+b]:h.values[g*s+b]=t.rank===0?d[0]:d[f*s+b]}return h}var w5=_a(e=>1/(1+Math.exp(-e))),B_=at(oi,e=>1/(1+Math.exp(-e))),I5={kernelName:oi,backendName:"cpu",kernelFunc:B_};function Qh(e,t,n,r,s){let a=qt.isSliceContinous(r,t,n),o=w.sizeFromShape(n),i=w.computeStrides(r);if(a){let p=qt.computeFlatOffset(t,i);return s==="string"?e.slice(p,p+o):e.subarray(p,p+o)}let c=s==="string"?N.fromUint8ToStringArray(e):e,u=Me(r,s,c),l=Me(n,s);for(let p=0;p<l.size;++p){let d=l.indexToLoc(p),h=d.map((f,m)=>f+t[m]);l.set(u.get(...h),...d)}return s==="string"?N.fromStringArrayToUint8(l.values):l.values}function po(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,size:o}=r;be(s,"slice");let[i,c]=qt.parseSliceParams(s,a,o);qt.assertParamsValid(s,i,c);let u=n.data.get(s.dataId).values,l=Qh(u,i,c,s.shape,s.dtype);return n.makeTensorInfo(c,s.dtype,l)}var k5={kernelName:Su,backendName:"cpu",kernelFunc:po};function W_(e,t,n,r,s,a,o){let i=t[0],c=a[0],u=new Array(c),l=new Array(i),p=t[1];if(c===0){if(i!==0)throw new Error(N.getSparseFillEmptyRowsIndicesDenseShapeMismatch(i));let g=w.getArrayFromDType(n,0),b=w.getArrayFromDType(s,0);return[g,[0,p],b,u,l]}let d=!0,h=0,f=new Array(c).fill(0);for(let g=0;g<i;++g){let b=e[g*p];if(b<0)throw new Error(N.getSparseFillEmptyRowsNegativeIndexErrorMessage(g,b));if(b>=c)throw new Error(N.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,b,c));++f[b],d=d&&b>=h,h=b}let m=!0;for(let g=0;g<c;++g){let b=f[g]===0;u[g]=b,m=m&&!b,f[g]=Math.max(f[g],1),g>0&&(f[g]+=f[g-1])}if(m&&d){let g=e,b=r;for(let y=0;y<i;++y)l[y]=y;return[g,[i,p],b,u,l]}else{let g=f[c-1],b=w.getArrayFromDType(n,g*p),y=w.getArrayFromDType(s,g),v=new Array(c).fill(0);for(let x=0;x<i;++x){let k=e[x*p],S=v[k],C=(k===0?0:f[k-1])+S;v[k]++;for(let E=0;E<p;++E)b[C*p+E]=e[x*p+E];y[C]=r[x],l[x]=C}for(let x=0;x<c;++x)if(v[x]===0){let S=x===0?0:f[x-1];b[S*p+0]=x;for(let C=1;C<p;++C)b[S*p+C]=0;y[S]=o}return[b,[g,p],y,u,l]}}function V_(e,t,n,r,s){let a=w.sizeFromShape(r),o=t[0],i=s.length,c=[],u=1,l=-1;for(let g=0;g<i;++g){let b=s[g];if(b===-1){if(l!==-1)throw new Error(N.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(l,g));l=g,c.push(1)}else{if(b<0)throw new Error(N.getSparseReshapeNegativeOutputDimErrorMessage(g,b));u*=b,c.push(b)}}if(l!==-1){if(u<=0)throw new Error(N.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());let g=Math.trunc(a/u);if(u*g!==a)throw new Error(N.getSparseReshapeInputOutputMultipleErrorMessage(r,c));c[l]=g}if(w.sizeFromShape(c)!==a)throw new Error(N.getSparseReshapeInputOutputMismatchErrorMessage(r,c));let d=r.length,h=[];if(d>0){h[d-1]=1;for(let g=d-2;g>=0;--g)h[g]=h[g+1]*r[g+1]}let f=[];if(i>0){f[i-1]=1;for(let g=i-2;g>=0;--g)f[g]=f[g+1]*c[g+1]}let m=w.getArrayFromDType(n,o*i);for(let g=0;g<o;++g){let b=0;for(let y=0;y<d;++y)b+=e[g*d+y]*h[y];for(let y=0;y<i;++y)m[g*i+y]=Math.trunc(b/f[y]),b%=f[y]}return[m,[o,i],c]}function W0(e,t,n,r,s,a=!1,o=0){let i=r.length,c=[t[0],e.length/t[0]],u=c[1],p=i>0?s[i-1]+1:0;if(p<0)throw new Error(N.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(N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,g=1,b=0,y=s[m];for(;;){let v=0;if(g<i){if(v=s[g],y===v){++g;continue}if(y>=v)throw new Error(N.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(N.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>b&&f.fill(o,b*u,y*u);for(let x=m;x<g;++x){let k=r[x];if(k<0||k>=c[0])throw new Error(N.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,r[x],c[0]));for(let S=0;S<u;S++)f[y*u+S]+=e[k*u+S]}if(a)for(let x=0;x<u;x++)f[y*u+x]/=g-m;if(m=g,++g,b=y+1,y=v,g>i)break}return b<p&&f.fill(o,b*u,p*u),[f,d]}var S5=_a(e=>Math.sqrt(e)),T5=at(ii,e=>Math.sqrt(e)),C5={kernelName:ii,backendName:"cpu",kernelFunc:T5},U_=Vt((e,t)=>{let n=e-t;return n*n}),N5=nn(li,U_),_5={kernelName:li,backendName:"cpu",kernelFunc:N5};function G_(e,t,n,r){let s=Me(e,t.dtype);for(let a=0;a<s.size;a++){let o=s.indexToLoc(a),i=new Array(o.length);for(let c=0;c<i.length;c++)i[c]=o[c]*n[c]+r[c];s.set(t.get(...i),...o)}return s}var E5=class{constructor(e,t,n,r,s,a){this.separator=w.encodeString(e),this.nGramWidths=t,this.leftPad=w.encodeString(n),this.rightPad=w.encodeString(r),this.padWidth=s,this.preserveShort=a}getPadWidth(e){return Math.min(this.padWidth<0?e-1:this.padWidth,e-1)}getNumNGrams(e,t){let n=this.getPadWidth(t);return Math.max(0,e+2*n-t+1)}createNGrams(e,t,n,r,s,a){for(let o=0;o<s;++o){let i=this.getPadWidth(a),c=Math.max(0,i-o),u=Math.max(0,i-(s-(o+1))),l=a-(c+u),p=t+(c>0?0:o-i),d=0;d+=c*this.leftPad.length;for(let b=0;b<l;++b)d+=e[p+b].length;d+=u*this.rightPad.length;let h=c+u+l-1;d+=h*this.separator.length,n[r+o]=new Uint8Array(d);let f=n[r+o],m=0,g=b=>b.forEach(y=>f[m++]=y);for(let b=0;b<c;++b)g(this.leftPad),g(this.separator);for(let b=0;b<l-1;++b)g(e[p+b]),g(this.separator);if(l>0){g(e[p+l-1]);for(let b=0;b<u;++b)g(this.separator),g(this.rightPad)}else{for(let b=0;b<u-1;++b)g(this.rightPad),g(this.separator);g(this.rightPad)}}}compute(e,t){let n=e.length,r=t.length;if(r>0){let i=t[0];if(i!==0)throw new Error(`First split value must be 0, got ${i}`);for(let c=1;c<r;++c){let u=t[c]>=i;if(u=u&&t[c]<=n,!u)throw new Error(`Invalid split value ${t[c]}, must be in [${i}, ${n}]`);i=t[c]}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 c=0;c<=s;++c)a[c]=0;return[i,a]}a[0]=0;for(let i=1;i<=s;++i){let c=t[i]-t[i-1],u=0;this.nGramWidths.forEach(l=>{u+=this.getNumNGrams(c,l)}),this.preserveShort&&c>0&&u===0&&(u=1),a[i]=a[i-1]+u}let o=new Array(a[s]);for(let i=0;i<s;++i){let c=t[i],u=a[i];if(this.nGramWidths.forEach(l=>{let p=t[i+1]-t[i],d=this.getNumNGrams(p,l);this.createNGrams(e,c,o,u,d,l),u+=d}),this.preserveShort&&u===a[i]){let l=t[i+1]-t[i];if(l===0)continue;let p=l+2*this.padWidth,d=1;this.createNGrams(e,c,o,u,d,p)}}return[o,a]}};function V0(e,t,n,r,s,a,o,i){return new E5(n,r,s,a,o,i).compute(e,t)}function A5(e,t,n,r){if(!e.length)return;if(t.length===0){for(let a=0;a<e.length;++a)r.push(e.subarray(a,a+1));return}if(t.length===1){let a=t[0],o=e.indexOf(a);for(;o!==-1;){let i=e.subarray(0,o);(!n||i.length!==0)&&r.push(i),e=e.subarray(o+1),o=e.indexOf(a)}(!n||e.length!==0)&&r.push(e);return}let s=0;for(let a=0;a<e.length+1;a++)if(a===e.length||t.indexOf(e[a])!==-1){let o=e.subarray(s,a);(!n||o.length!==0)&&r.push(o),s=a+1}}function U0(e,t,n){let r=e.length,s=[],a=0,o=0,i=new Array(r);for(let d=0;d<r;++d){let h=s.length;A5(e[d],t,n,s);let f=s.length-h;i[d]=f,a+=f,o=Math.max(o,f)}let c=w.getArrayFromDType("int32",a*2),u=new Array(a),l=[r,o],p=0;for(let d=0;d<r;++d)for(let h=0;h<i[d];++h)c[p*2]=d,c[p*2+1]=h,u[p]=s[p],++p;return[c,u,l]}function G0(e,t){let n=w.getArrayFromDType("int32",e.length);for(let r=0;r<e.length;++r)n[r]=w.fingerPrint64(e[r]).modulo(t).getLowBitsUnsigned();return n}var H_=Vt((e,t)=>e-t),$5=P0((e,t,n,r)=>({real:e-n,imag:t-r})),H0=nn(di,H_,$5),D5={kernelName:di,backendName:"cpu",kernelFunc:H0};function q_(e,t){let n=new Array(e.rank);for(let s=0;s<n.length;s++)n[s]=e.shape[s]*t[s];let r=Me(n,e.dtype);for(let s=0;s<r.values.length;++s){let a=r.indexToLoc(s),o=new Array(e.rank);for(let c=0;c<o.length;c++)o[c]=a[c]%e.shape[c];let i=e.locToIndex(o);r.values[s]=e.values[i]}return r}var Ml=(e,t)=>{let n=t.value-e.value;return n===0?e.index-t.index:n};function j_(e,t,n=0,r=e.length-1){for(;r>n;){if(r-n>600){let i=r-n+1,c=t-n+1,u=Math.log(i),l=.5*Math.exp(2*u/3),p=.5*Math.sqrt(u*l*(i-l)/i)*Math.sign(c-i/2),d=Math.max(n,Math.floor(t-c*l/i+p)),h=Math.min(r,Math.floor(t+(i-c)*l/i+p));j_(e,t,d,h)}let s=e[t],a=n,o=r;for(w.swap(e,n,t),Ml(e[r],s)>0&&w.swap(e,n,r);a<o;){for(w.swap(e,a,o),a++,o--;Ml(e[a],s)<0;)a=a+1;for(;Ml(e[o],s)>0;)o=o-1}Ml(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 K_(e,t,n,r,s){let a=t[t.length-1],[o,i]=[e.length/a,a],c=w.getTypedArrayFromDType(n,o*r),u=w.getTypedArrayFromDType("int32",o*r);for(let p=0;p<o;p++){let d=p*i,h=e.subarray(d,d+i),f=new Array(h.length);h.forEach((y,v)=>f[v]={value:y,index:v}),r<f.length&&(j_(f,r),f=f.slice(0,r)),s&&f.sort(Ml);let m=p*r,g=c.subarray(m,m+r),b=u.subarray(m,m+r);for(let y=0;y<r;y++)g[y]=f[y].value,b[y]=f[y].index}let l=t.slice();return l[l.length-1]=r,[Me(l,n,c),Me(l,"int32",u)]}function X_(e,t,n,r){let s=w.parseAxisParam(t,n)[0],a=[1,n[0],1];for(let f=0;f<s;f++)a[0]*=n[f];a[1]=n[s];for(let f=s+1;f<n.length;f++)a[2]*=n[f];let o={},i=new Int32Array(n[s]),c=new Ht(a,r,e),u=[],l=a[0]===1&&a[2]===1;for(let f=0;f<n[s];f++){let m;if(l)m=e[f].toString();else{let g=[];for(let b=0;b<a[0];b++)for(let y=0;y<a[2];y++)g.push(c.get(b,f,y));m=g.join(",")}if(o[m]!==void 0)i[f]=o[m];else{let g=Object.keys(o).length;o[m]=g,i[f]=g,u.push(f)}}let p=a.slice();p[1]=Object.keys(o).length;let d=new Ht(p,r);u.forEach((f,m)=>{for(let g=0;g<a[0];g++)for(let b=0;b<a[2];b++)d.set(c.get(g,f,b),g,m,b)});let h=n.slice();return h[s]=p[1],{outputValues:d.values,outputShape:h,indices:i}}qf("cpu",()=>new R0,1);var Y_=at(Ao,e=>e>=0?e:Math.exp(e)-1),F5={kernelName:Ao,backendName:"cpu",kernelFunc:Y_};function Z_(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,c=w.getTypedArrayFromDType("float32",o);for(let u=0;u<i.length;u++)c[u]=i[u]<0?a*i[u]:i[u];return n.makeTensorInfo(s.shape,"float32",c)}var R5={kernelName:Mo,backendName:"cpu",kernelFunc:Z_},P5=Vt((e,t)=>e<0?t*e:e);function J_(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,c]=P5(r.shape,s.shape,a,o,"float32");return n.makeTensorInfo(c,"float32",i)}var O5={kernelName:Yo,backendName:"cpu",kernelFunc:J_},Q_=at(Jo,e=>Math.max(0,e)),M5={kernelName:Jo,backendName:"cpu",kernelFunc:Q_},e2=at(ti,e=>Math.min(Math.max(0,e),6)),L5={kernelName:ti,backendName:"cpu",kernelFunc:e2};function ef(e,t,n,r,s){if(n==="linear")return ds({inputs:{x:t},backend:e});if(n==="relu")return Q_({inputs:{x:t},backend:e});if(n==="elu")return Y_({inputs:{x:t},backend:e});if(n==="relu6")return e2({inputs:{x:t},backend:e});if(n==="prelu")return J_({inputs:{x:t,alpha:r},backend:e});if(n==="leakyrelu")return Z_({inputs:{x:t},backend:e,attrs:{alpha:s}});if(n==="sigmoid")return B_({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function ft(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{shape:a}=r,o=w.sizeFromShape(s.shape),i=w.inferFromImplicitShape(a,o),c=w.sizeFromShape(i);w.assert(o===c,()=>`The new shape (${i}) has ${c} 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 u=n.data.get(s.dataId);if(u.complexTensorInfos!=null){let l=u.complexTensorInfos.real,p=u.complexTensorInfos.imag;l.shape=i,p.shape=i}return{dataId:s.dataId,shape:i,dtype:s.dtype}}var z5={kernelName:xu,backendName:"cpu",kernelFunc:ft};function t2(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;be([s,a],"matMul");let c=s.shape.length,u=a.shape.length,l=o?s.shape[c-2]:s.shape[c-1],p=i?a.shape[u-1]:a.shape[u-2],d=o?s.shape[c-1]:s.shape[c-2],h=i?a.shape[u-2]:a.shape[u-1],f=s.shape.slice(0,-2),m=a.shape.slice(0,-2),g=w.sizeFromShape(f),b=w.sizeFromShape(m),v=Mu.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?[g,l,d]:[g,d,l],k=i?[b,h,p]:[b,p,h],S=ft({inputs:{x:s},backend:n,attrs:{shape:x}}),C=ft({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?C.shape[1]:C.shape[2],A=Math.max(g,b),R=n.data.get(S.dataId).values,T=n.data.get(C.dataId).values,L=w.computeStrides(S.shape),V=w.computeStrides(C.shape),[G,j,H]=o?[L[0],1,L[1]]:[L[0],L[1],1],[Z,J,ee]=i?[1,V[1],V[0]]:[V[1],1,V[0]],re=$*F,te=Me([A,$,F],S.dtype),ie=te.values,ne=n.blockSize;for(let le=0;le<A;le++)for(let ue=0;ue<$;ue+=ne)for(let ye=0;ye<F;ye+=ne)for(let ve=0;ve<E;ve+=ne){let Se=Math.min(ue+ne,$),Le=Math.min(ye+ne,F),je=Math.min(ve+ne,E);for(let nt=ue;nt<Se;nt++)for(let rt=ye;rt<Le;rt++){let st=0;for(let Ze=ve;Ze<je;Ze++){let ze=Math.min(le,g-1)*G,dt=Math.min(le,b-1)*ee,qn=R[ze+nt*j+Ze*H],At=T[Ze*Z+rt*J+dt];st+=qn*At}ie[le*re+(nt*F+rt)]+=st}}return n.disposeIntermediateTensorInfo(S),n.disposeIntermediateTensorInfo(C),n.makeTensorInfo(v,te.dtype,te.values)}var B5={kernelName:xo,backendName:"cpu",kernelFunc:t2};function W5(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t,{transposeA:c,transposeB:u,activation:l,leakyreluAlpha:p}=r,d,h,f,m=[];d=t2({inputs:{a:s,b:a},attrs:{transposeA:c,transposeB:u},backend:n}),o&&(h=_c({inputs:{a:d,b:o},backend:n}),m.push(d),d=h),l&&(f=ef(n,d,l,i,p),m.push(d),d=f);for(let b of m)n.disposeIntermediateTensorInfo(b);return d}var V5={kernelName:eo,backendName:"cpu",kernelFunc:W5},U5=at(Rc,e=>Math.acos(e)),G5={kernelName:Rc,backendName:"cpu",kernelFunc:U5},H5=at(Pc,e=>Math.acosh(e)),q5={kernelName:Pc,backendName:"cpu",kernelFunc:H5};function j5(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;i<r.length;i++){let c=s[i];for(let u=0;u<o.length;u++)o[u]+=c[u]}return n.makeTensorInfo(a.shape,a.dtype,a.values)}var K5={kernelName:bo,backendName:"cpu",kernelFunc:j5};function X5(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;be(s,"all");let i=w.parseAxisParam(a,s.shape),c=i,u=N.getAxesPermutation(c,s.shape.length),l=s;u!=null&&(l=Vn({inputs:{x:s},backend:n,attrs:{perm:u}}),c=N.getInnerMostAxes(c.length,s.shape.length)),N.assertAxesAreInnerMostDims("all",c,l.shape.length);let[p,d]=N.computeOutAndReduceShapes(l.shape,c),h=w.sizeFromShape(d),f=w.makeZerosTypedArray(w.sizeFromShape(p),l.dtype),m=n.data.get(l.dataId).values;for(let b=0;b<f.length;++b){let y=b*h,v=m[y];for(let x=0;x<h;++x){let k=m[y+x];v=v&&k}f[b]=v}u!=null&&n.disposeIntermediateTensorInfo(l);let g=n.makeTensorInfo(p,l.dtype,f);if(o){let b=N.expandShapeToKeepDim(p,i),y=ft({inputs:{x:g},backend:n,attrs:{shape:b}});return n.disposeIntermediateTensorInfo(g),y}return g}var Y5={kernelName:Oc,backendName:"cpu",kernelFunc:X5};function Z5(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;be(s,"any");let i=w.parseAxisParam(a,s.shape),c=i,u=N.getAxesPermutation(c,s.shape.length),l=s;u!=null&&(l=Vn({inputs:{x:s},backend:n,attrs:{perm:u}}),c=N.getInnerMostAxes(c.length,s.shape.length)),N.assertAxesAreInnerMostDims("any",c,l.shape.length);let[p,d]=N.computeOutAndReduceShapes(l.shape,c),h=w.sizeFromShape(d),f=w.makeZerosTypedArray(w.sizeFromShape(p),l.dtype),m=n.data.get(l.dataId).values;for(let b=0;b<f.length;++b){let y=b*h,v=m[y];for(let x=0;x<h;++x){let k=m[y+x];v=v||k}f[b]=v}u!=null&&n.disposeIntermediateTensorInfo(l);let g=n.makeTensorInfo(p,l.dtype,f);if(o){let b=N.expandShapeToKeepDim(p,i),y=ft({inputs:{x:g},backend:n,attrs:{shape:b}});return n.disposeIntermediateTensorInfo(g),y}return g}var J5={kernelName:Mc,backendName:"cpu",kernelFunc:Z5};function Q5(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r;be(s,"argMax");let o=w.parseAxisParam(a,s.shape),i=N.getAxesPermutation(o,s.shape.length),c=s,u=[];i!=null&&(c=Vn({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(c),o=N.getInnerMostAxes(o.length,c.shape.length)),o=[o[0]],N.assertAxesAreInnerMostDims("argMax",o,c.shape.length);let[l,p]=N.computeOutAndReduceShapes(c.shape,o),d=w.sizeFromShape(l),h=w.makeZerosTypedArray(d,"int32"),f=w.sizeFromShape(p),m=n.data.get(c.dataId).values;for(let g=0;g<h.length;++g){let b=g*f,y=m[b],v=0;for(let x=0;x<f;++x){let k=m[b+x];k>y&&(y=k,v=x)}h[g]=v}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(l,"int32",h)}var ej={kernelName:yo,backendName:"cpu",kernelFunc:Q5};function tj(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=N.getAxesPermutation(o,s.shape.length),c=s,u=[];i!=null&&(c=Vn({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(c),o=N.getInnerMostAxes(o.length,c.shape.length)),o=[o[0]],N.assertAxesAreInnerMostDims("argMin",o,c.shape.length);let[l,p]=N.computeOutAndReduceShapes(c.shape,o),d=w.sizeFromShape(l),h=w.makeZerosTypedArray(d,"int32"),f=w.sizeFromShape(p),m=n.data.get(c.dataId).values;for(let g=0;g<h.length;++g){let b=g*f,y=m[b],v=0;for(let x=0;x<f;++x){let k=m[b+x];k<y&&(y=k,v=x)}h[g]=v}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(l,"int32",h)}var nj={kernelName:dd,backendName:"cpu",kernelFunc:tj},rj=at(Lc,e=>Math.asin(e)),sj={kernelName:Lc,backendName:"cpu",kernelFunc:rj},aj=at(zc,e=>Math.asinh(e)),oj={kernelName:zc,backendName:"cpu",kernelFunc:aj},ij=at(Bc,e=>Math.atan(e)),cj={kernelName:Bc,backendName:"cpu",kernelFunc:ij},uj=Vt((e,t)=>Math.atan2(e,t)),lj=nn(Vc,uj),dj={kernelName:Vc,backendName:"cpu",kernelFunc:lj},pj=at(Wc,e=>Math.atanh(e)),hj={kernelName:Wc,backendName:"cpu",kernelFunc:pj};function q0(e,t,n,r,s,a){let o=s.strideHeight,i=s.strideWidth,c=s.dilationHeight,u=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,m=Me(s.outShape,n),g=m.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;x<s.batchSize;++x){let k=x*b,S=x*r[0];for(let C=0;C<s.inChannels;++C)for(let E=0;E<s.outHeight;++E){let $=E*o-d,F=Math.max(0,$),A=Math.min(s.inHeight,l+$),R=k+E*y;for(let T=0;T<s.outWidth;++T){let L=T*i-h,V=Math.max(0,L),G=Math.min(s.inWidth,p+L),j=f,H=0,Z=0;for(let ee=F;ee<A;ee+=c){let re=S+ee*r[1];for(let te=V;te<G;te+=u){let ie=re+te*r[2],ne=e[ie+C];a==="max"&&ne>j?j=ne:a==="avg"&&(H+=ne,Z++)}if(isNaN(j))break}let J=R+T*v+C;g[J]=a==="avg"?H/Z:j}}}return m}function n2(e,t,n,r,s=!1,a=!1){let o=Me(r.outShape,"int32"),i=r.strideHeight,c=r.strideWidth,u=r.dilationHeight,l=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,h=r.padInfo.top,f=r.padInfo.left,m=Me(t,n,e);for(let g=0;g<r.batchSize;++g)for(let b=0;b<r.inChannels;++b)for(let y=0;y<r.outHeight;++y){let v=y*i-h,x=v;for(;x<0;)x+=u;let k=Math.min(r.inHeight,p+v);for(let S=0;S<r.outWidth;++S){let C=S*c-f,E=C;for(;E<0;)E+=l;let $=Math.min(r.inWidth,d+C),F=Number.NEGATIVE_INFINITY,A=-1;for(let R=x;R<k;R+=u){let T=R-v;for(let L=E;L<$;L+=l){let V=L-C,G=m.get(g,R,L,b);G>F&&(F=G,s?A=a?((g*r.inHeight+R)*r.inWidth+L)*r.inChannels+b:(R*r.inWidth+L)*r.inChannels+b:A=T*d+V)}}o.set(A,g,y,S,b)}}return o}function r2(e,t,n,r,s,a){let o=s.strideDepth,i=s.strideHeight,c=s.strideWidth,u=s.dilationDepth,l=s.dilationHeight,p=s.dilationWidth,d=s.effectiveFilterDepth,h=s.effectiveFilterHeight,f=s.effectiveFilterWidth,m=s.padInfo.front,g=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],C=s.outShape[3]*s.outShape[4],E=s.outShape[4];for(let $=0;$<s.batchSize;++$){let F=$*k,A=$*r[0];for(let R=0;R<s.inChannels;++R)for(let T=0;T<s.outDepth;++T){let L=T*o-m,V=L;for(;V<0;)V+=u;let G=Math.min(s.inDepth,d+L),j=F+T*S;for(let H=0;H<s.outHeight;++H){let Z=H*i-g,J=Z;for(;J<0;)J+=l;let ee=Math.min(s.inHeight,h+Z),re=j+H*C;for(let te=0;te<s.outWidth;++te){let ie=te*c-b,ne=ie;for(;ne<0;)ne+=p;let le=Math.min(s.inWidth,f+ie),ue=re+te*E,ye=y,ve=0,Se=0;for(let je=V;je<G;je+=u){let nt=A+je*r[1];for(let rt=J;rt<ee;rt+=l){let st=nt+rt*r[2];for(let Ze=ne;Ze<le;Ze+=p){let ze=st+Ze*r[3],dt=e[ze+R];if(a==="max"&&dt>ye?ye=dt:a==="avg"&&(ve+=dt,Se++),isNaN(ye))break}if(isNaN(ye))break}if(isNaN(ye))break}let Le=ue+R;x[Le]=a==="avg"?ve/Se:ye}}}}return v}function fj(e,t){let n=Me(t.outShape,"int32"),r=t.strideDepth,s=t.strideHeight,a=t.strideWidth,o=t.dilationDepth,i=t.dilationHeight,c=t.dilationWidth,u=t.effectiveFilterDepth,l=t.effectiveFilterHeight,p=t.effectiveFilterWidth,d=t.padInfo.front,h=t.padInfo.top,f=t.padInfo.left;for(let m=0;m<t.batchSize;++m)for(let g=0;g<t.inChannels;++g)for(let b=0;b<t.outDepth;++b){let y=b*r-d,v=y;for(;v<0;)v+=o;let x=Math.min(t.inDepth,u+y);for(let k=0;k<t.outHeight;++k){let S=k*s-h,C=S;for(;C<0;)C+=i;let E=Math.min(t.inHeight,l+S);for(let $=0;$<t.outWidth;++$){let F=$*a-f,A=F;for(;A<0;)A+=c;let R=Math.min(t.inWidth,p+F),T=Number.NEGATIVE_INFINITY,L=-1;for(let V=v;V<x;V+=o){let G=V-y;for(let j=C;j<E;j+=i){let H=j-S;for(let Z=A;Z<R;Z+=c){let J=Z-F,ee=e.get(m,V,j,Z,g);ee>=T&&(T=ee,L=G*l*p+H*l+J)}}}n.set(L,m,b,k,$,g)}}}return n}function mj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;be(s,"avgPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:c}=r,u=1;w.assert(N.eitherStridesOrDilationsAreOne(o,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let l=N.computePool2DInfo(s.shape,a,o,u,i,c),p;if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))p=ds({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,h=w.computeStrides(s.shape),f=q0(d,s.shape,s.dtype,h,l,"avg");p=n.makeTensorInfo(l.outShape,s.dtype,f.values)}return p}var gj={kernelName:vo,backendName:"cpu",kernelFunc:mj};function bj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:c,dataFormat:u}=r;be(s,"avgPool3d");let l=N.computePool3DInfo(s.shape,a,o,1,i,c,u),p=n.data.get(s.dataId).values,d=r2(p,s.shape,s.dtype,w.computeStrides(s.shape),l,"avg");return n.makeTensorInfo(d.shape,"float32",d.values)}var yj={kernelName:pd,backendName:"cpu",kernelFunc:bj};function vj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:c,dimRoundingMode:u}=r;be([s,a],"avgPool3DGrad");let l=N.computePool3DInfo(a.shape,o,i,1,c,u),p=l.strideDepth,d=l.strideHeight,h=l.strideWidth,f=l.filterDepth,m=l.filterHeight,g=l.filterWidth,b=l.dilationDepth,y=l.dilationHeight,v=l.dilationWidth,x=l.effectiveFilterDepth,k=l.effectiveFilterHeight,S=l.effectiveFilterWidth,C=x-1-l.padInfo.front,E=S-1-l.padInfo.left,$=k-1-l.padInfo.top,F=Me(a.shape,"float32"),A=1/(f*m*g),R=n.bufferSync(s);for(let T=0;T<l.batchSize;++T)for(let L=0;L<l.inChannels;++L)for(let V=0;V<l.inDepth;++V)for(let G=0;G<l.inHeight;++G)for(let j=0;j<l.inWidth;++j){let H=V-C,Z=G-$,J=j-E,ee=0;for(let re=0;re<x;re+=b){let te=(H+re)/p;if(!(te<0||te>=l.outDepth||Math.floor(te)!==te))for(let ie=0;ie<k;ie+=y){let ne=(Z+ie)/d;if(!(ne<0||ne>=l.outHeight||Math.floor(ne)!==ne))for(let le=0;le<S;le+=v){let ue=(J+le)/h;if(ue<0||ue>=l.outWidth||Math.floor(ue)!==ue)continue;let ye=R.get(T,te,ne,ue,L);ee+=ye}}}F.set(ee*A,T,V,G,j,L)}return n.makeTensorInfo(F.shape,F.dtype,F.values)}var xj={kernelName:hf,backendName:"cpu",kernelFunc:vj};function wj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a;be([s,a],"avgPoolGrad");let{filterSize:i,strides:c,pad:u}=r,l=N.computePool2DInfo(o.shape,i,c,1,u),p=l.strideHeight,d=l.strideWidth,h=l.filterHeight,f=l.filterWidth,m=l.dilationHeight,g=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),C=n.data.get(s.dataId).values,E=Me(s.shape,"float32",C);for(let $=0;$<l.batchSize;++$)for(let F=0;F<l.inChannels;++F)for(let A=0;A<l.inHeight;++A)for(let R=0;R<l.inWidth;++R){let T=A-x,L=R-v,V=0;for(let G=0;G<b;G+=m){let j=(T+G)/p;if(!(j<0||j>=l.outHeight||Math.floor(j)!==j))for(let H=0;H<y;H+=g){let Z=(L+H)/d;if(Z<0||Z>=l.outWidth||Math.floor(Z)!==Z)continue;let J=E.get($,j,Z,F);V+=J}}k.set(V*S,$,A,R,F)}return n.makeTensorInfo(k.shape,k.dtype,k.values)}var Ij={kernelName:pf,backendName:"cpu",kernelFunc:wj};function kj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,scale:a,offset:o,mean:i,variance:c}=t;w.assert(i.shape.length===c.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,c,a,o],"batchNorm");let{varianceEpsilon:u}=r;u==null&&(u=.001);let l=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values,d=n.data.get(c.dataId).values,h=a?n.data.get(a.dataId).values:new Float32Array([1]),f=o?n.data.get(o.dataId).values:new Float32Array([0]),m=new Float32Array(l.length),g=f.length,b=h.length,y=d.length,v=p.length,x=0,k=0,S=0,C=0;for(let E=0;E<l.length;++E)m[E]=f[x++]+(l[E]-p[k++])*h[S++]/Math.sqrt(d[C++]+u),x>=g&&(x=0),k>=v&&(k=0),S>=b&&(S=0),C>=y&&(C=0);return n.makeTensorInfo(s.shape,s.dtype,m)}var Sj={kernelName:Ro,backendName:"cpu",kernelFunc:kj};function Tj(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),c=N.getReshaped(s.shape,a,i),u=N.getPermuted(c.length,a.length),l=N.getReshapedPermuted(s.shape,a,i),p=N.getSliceBeginCoords(o,a.length),d=N.getSliceSize(l,o,a.length),h=ft({inputs:{x:s},backend:n,attrs:{shape:c}}),f=Vn({inputs:{x:h},backend:n,attrs:{perm:u}}),m=ft({inputs:{x:f},backend:n,attrs:{shape:l}}),g=po({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}var Cj={kernelName:Uc,backendName:"cpu",kernelFunc:Tj};function Nj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:a}=t,{size:o}=r,i=n.data.get(s.dataId).values,c=n.data.get(a.dataId).values,u=O0(i,c,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,u)}var _j={kernelName:ff,backendName:"cpu",kernelFunc:Nj};function Ej(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=N.assertAndGetBroadcastShape(Array.from(a),Array.from(o));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var Aj={kernelName:mf,backendName:"cpu",kernelFunc:Ej},$j=at(ya,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),Dj={kernelName:ya,backendName:"cpu",kernelFunc:$j},Fj=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,c=n.data.get(o.dataId).values;for(let u=0;u<i.length;u++){let l=i[u],p=c[u];r[u]=Math.hypot(l,p)}return n.makeOutput(r,t.shape,"float32")},Rj={kernelName:hd,backendName:"cpu",kernelFunc:Fj};function Ec(e){let{inputs:t,backend:n}=e,{input:r}=t,s=n.data.get(r.dataId).complexTensorInfos.imag,a=n.data.get(s.dataId).values;return n.makeTensorInfo(s.shape,s.dtype,a)}var Pj={kernelName:_f,backendName:"cpu",kernelFunc:Ec};function Ac(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r,a=w.parseAxisParam(s,t[0].shape)[0],o=t.map(m=>m.shape);N.assertParamsConsistent(o,a);let i=N.computeOutShape(t.map(m=>m.shape),a);if(w.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let c=t.filter(m=>w.sizeFromShape(m.shape)>0);if(c.length===1)return ds({inputs:{x:c[0]},backend:n});if(c[0].dtype==="complex64"){let m=c.map(x=>lo({inputs:{input:x},backend:n})),g=c.map(x=>Ec({inputs:{input:x},backend:n})),b=Ac({inputs:m,backend:n,attrs:{axis:a}}),y=Ac({inputs:g,backend:n,attrs:{axis:a}}),v=Jn({inputs:{real:b,imag:y},backend:n});return m.forEach(x=>n.disposeIntermediateTensorInfo(x)),g.forEach(x=>n.disposeIntermediateTensorInfo(x)),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(y),v}let u=c.map(m=>{let b=[-1,w.sizeFromShape(m.shape.slice(a))];return ft({inputs:{x:m},backend:n,attrs:{shape:b}})}),l=u.map(m=>({vals:n.data.get(m.dataId).values,shape:m.shape}));i=N.computeOutShape(u.map(m=>m.shape),1);let p=u[0].shape[0]===1,d=M0(l,i,t[0].dtype,p),h=N.computeOutShape(c.map(m=>m.shape),a),f=n.makeTensorInfo(h,t[0].dtype,d);return u.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var Oj={kernelName:Gc,backendName:"cpu",kernelFunc:Ac};function s2(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dataFormat:c,dilations:u,dimRoundingMode:l}=r;be([s,a],"conv2d");let p=N.convertConv2DDataFormat(c),d=N.computeConv2DInfo(s.shape,a.shape,o,u,i,l,!1,p),h=d.filterHeight,f=d.filterWidth,m=d.dilationHeight,g=d.dilationWidth,b=d.padInfo.left,y=d.padInfo.top,v=d.dataFormat==="channelsLast",x=new Ht(d.outShape,s.dtype),k=w.computeStrides(s.shape),S=w.computeStrides(a.shape),C=k[0],E=v?k[1]:k[2],$=v?k[2]:1,F=v?1:k[1],A=x.strides[0],R=v?x.strides[1]:x.strides[2],T=v?x.strides[2]:1,L=v?1:x.strides[1],V=n.data.get(s.dataId).values,G=n.data.get(a.dataId).values,j=x.values;for(let H=0;H<d.batchSize;++H){let Z=H*C,J=H*A;for(let ee=0;ee<d.outHeight;++ee){let re=J+ee*R,te=ee*d.strideHeight-y;for(let ie=0;ie<h;++ie){let ne=te+ie*m;if(ne<0||ne>=d.inHeight)continue;let le=ie*S[0],ue=Z+ne*E;for(let ye=0;ye<d.outWidth;++ye){let ve=re+ye*T,Se=ye*d.strideWidth-b;for(let Le=0;Le<f;++Le){let je=Se+Le*g;if(je<0||je>=d.inWidth)continue;let nt=le+Le*S[1],rt=ue+je*$,st=nt;for(let Ze=0;Ze<d.inChannels;++Ze){let ze=V[rt+Ze*F];for(let dt=0;dt<d.outChannels;++dt)j[ve+dt*L]+=ze*G[st+dt];st+=d.outChannels}}}}}}return n.makeTensorInfo(x.shape,x.dtype,j)}var Mj={kernelName:ko,backendName:"cpu",kernelFunc:s2};function Lj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,dataFormat:c,dimRoundingMode:u,filterShape:l}=r;be([s,a],"conv2dBackpropFilter");let p=N.convertConv2DDataFormat(c),d=N.computeConv2DInfo(s.shape,l,o,1,i,u,!1,p),{strideHeight:h,strideWidth:f,filterHeight:m,filterWidth:g}=d,b=d.dataFormat==="channelsLast",y=new Ht(d.filterShape,"float32"),v=d.padInfo.left,x=d.padInfo.top,k=n.data.get(s.dataId).values,S=n.data.get(a.dataId).values,C=new Ht(s.shape,s.dtype,k),E=new Ht(a.shape,a.dtype,S);for(let $=0;$<m;++$){let F=Math.max(0,Math.ceil((x-$)/h)),A=Math.min(d.outHeight,(d.inHeight+x-$)/h);for(let R=0;R<g;++R){let T=Math.max(0,Math.ceil((v-R)/f)),L=Math.min(d.outWidth,(d.inWidth+v-R)/f);for(let V=0;V<d.inChannels;++V)for(let G=0;G<d.outChannels;++G){let j=0;for(let H=0;H<d.batchSize;++H)for(let Z=F;Z<A;++Z){let J=$+Z*h-x;for(let ee=T;ee<L;++ee){let re=R+ee*f-v;b?j+=C.get(H,J,re,V)*E.get(H,Z,ee,G):j+=C.get(H,V,J,re)*E.get(H,G,Z,ee)}}y.set(j,$,R,V,G)}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var zj={kernelName:bf,backendName:"cpu",kernelFunc:Lj};function Bj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{inputShape:o,strides:i,pad:c,dataFormat:u,dimRoundingMode:l}=r;be([s,a],"conv2dBackpropInput");let p=w.computeStrides(a.shape),d=w.computeStrides(s.shape),h=N.convertConv2DDataFormat(u),f=N.computeConv2DInfo(o,a.shape,i,1,c,l,!1,h),m=new Ht(f.inShape,"float32"),g=m.values,b=n.data.get(s.dataId).values,y=n.data.get(a.dataId).values,[v,x,k]=p,{batchSize:S,filterHeight:C,filterWidth:E,inChannels:$,inHeight:F,inWidth:A,outChannels:R,outHeight:T,outWidth:L,strideHeight:V,strideWidth:G}=f;h=f.dataFormat;let j=C-1-f.padInfo.top,H=E-1-f.padInfo.left,Z=h==="channelsLast",J=m.strides[0],ee=Z?m.strides[1]:m.strides[2],re=Z?m.strides[2]:1,te=Z?1:m.strides[1],ie=d[0],ne=Z?d[1]:d[2],le=Z?d[2]:1,ue=Z?1:d[1];for(let ye=0;ye<S;++ye)for(let ve=0;ve<$;++ve)for(let Se=0;Se<F;++Se){let Le=Se-j,je=Math.max(0,Math.ceil(Le/V)),nt=Math.min(T,(C+Le)/V);for(let rt=0;rt<A;++rt){let st=rt-H,Ze=Math.max(0,Math.ceil(st/G)),ze=Math.min(L,(E+st)/G),dt=0;for(let At=je;At<nt;++At){let wr=At*V-Le;for(let on=Ze;on<ze;++on){let Ir=on*G-st,vn=ie*ye+ne*At+le*on,jn=v*(C-1-wr)+x*(E-1-Ir)+k*ve;for(let yt=0;yt<R;++yt){let Pn=b[vn+ue*yt],hn=y[jn+yt];dt+=Pn*hn}}}let qn=J*ye+ee*Se+re*rt+te*ve;g[qn]=dt}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var Wj={kernelName:So,backendName:"cpu",kernelFunc:Bj};function Vj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:c}=r;be([s,a],"conv3d");let u=N.computeConv3DInfo(s.shape,a.shape,o,c,i),{filterDepth:l,filterHeight:p,filterWidth:d,dilationDepth:h,dilationHeight:f,dilationWidth:m,padInfo:g}=u,b=g.front,y=g.left,v=g.top,x=new Ht(u.outShape,s.dtype),k=n.data.get(s.dataId).values,S=n.data.get(a.dataId).values,C=x.values,E=w.computeStrides(s.shape),$=w.computeStrides(a.shape);for(let F=0;F<u.batchSize;++F){let A=F*E[0],R=F*x.strides[0];for(let T=0;T<u.outDepth;++T){let L=R+T*x.strides[1],V=T*u.strideDepth-b;for(let G=0;G<l;++G){let j=V+G*h;if(j<0||j>=u.inDepth)continue;let H=G*$[0],Z=A+j*E[1];for(let J=0;J<u.outHeight;++J){let ee=L+J*x.strides[2],re=J*u.strideHeight-v;for(let te=0;te<p;++te){let ie=re+te*f;if(ie<0||ie>=u.inHeight)continue;let ne=H+te*$[1],le=Z+ie*E[2];for(let ue=0;ue<u.outWidth;++ue){let ye=ee+ue*u.outChannels,ve=ue*u.strideWidth-y;for(let Se=0;Se<d;++Se){let Le=ve+Se*m;if(Le<0||Le>=u.inWidth)continue;let je=ne+Se*$[2],nt=le+Le*u.inChannels,rt=je;for(let st=0;st<u.inChannels;++st){let Ze=k[nt+st];for(let ze=0;ze<u.outChannels;++ze)C[ye+ze]+=Ze*S[rt+ze];rt+=u.outChannels}}}}}}}}return n.makeTensorInfo(x.shape,x.dtype,x.values)}var Uj={kernelName:fd,backendName:"cpu",kernelFunc:Vj};function Gj(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,filterShape:c}=r;be([s,a],"conv3dBackpropFilterV2");let u=w.computeStrides(s.shape),l=w.computeStrides(a.shape),p=N.computeConv3DInfo(s.shape,c,o,1,i),d=p.strideDepth,h=p.strideHeight,f=p.strideWidth,m=p.filterDepth,g=p.filterHeight,b=p.filterWidth,y=new Ht(p.filterShape,"float32"),v=y.values,[x,k,S,C]=y.strides,E=n.data.get(a.dataId).values,[$,F,A,R]=l,T=n.data.get(s.dataId).values,[L,V,G,j]=u,H=p.padInfo.front,Z=p.padInfo.left,J=p.padInfo.top;for(let ee=0;ee<m;++ee){let re=Math.max(0,Math.ceil((H-ee)/d)),te=Math.min(p.outDepth,(p.inDepth+H-ee)/d),ie=ee*x;for(let ne=0;ne<g;++ne){let le=Math.max(0,Math.ceil((J-ne)/h)),ue=Math.min(p.outHeight,(p.inHeight+J-ne)/h),ye=ne*k+ie;for(let ve=0;ve<b;++ve){let Se=Math.max(0,Math.ceil((Z-ve)/f)),Le=Math.min(p.outWidth,(p.inWidth+Z-ve)/f),je=ve*S+ye;for(let nt=0;nt<p.inChannels;++nt){let rt=nt*C+je;for(let st=0;st<p.outChannels;++st){let Ze=0;for(let ze=0;ze<p.batchSize;++ze){let dt=ze*L,qn=ze*$;for(let At=re;At<te;++At){let on=(ee+At*d-H)*V+dt,Ir=At*F+qn;for(let vn=le;vn<ue;++vn){let yt=(ne+vn*h-J)*G+on,Pn=vn*A+Ir;for(let hn=Se;hn<Le;++hn){let qs=(ve+hn*f-Z)*j+yt,kr=hn*R+Pn;Ze+=T[qs+nt]*E[kr+st]}}}}v[rt+st]=Ze}}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var Hj={kernelName:yf,backendName:"cpu",kernelFunc:Gj};function qj(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{pad:o,strides:i,inputShape:c}=r;be([s],"conv3dBackpropInputV2");let u=w.computeStrides(s.shape),l=w.computeStrides(a.shape),p=N.computeConv3DInfo(c,a.shape,i,1,o),d=new Ht(p.inShape,"float32"),h=d.values,[f,m,g,b]=d.strides,y=n.data.get(s.dataId).values,[v,x,k,S]=u,C=n.data.get(a.dataId).values,[E,$,F,A]=l,{batchSize:R,filterDepth:T,filterHeight:L,filterWidth:V,inChannels:G,inDepth:j,inHeight:H,inWidth:Z,outChannels:J,outDepth:ee,outHeight:re,outWidth:te,strideDepth:ie,strideHeight:ne,strideWidth:le}=p,ue=T-1-p.padInfo.front,ye=L-1-p.padInfo.top,ve=V-1-p.padInfo.left;for(let Se=0;Se<R;++Se)for(let Le=0;Le<G;++Le)for(let je=0;je<j;++je){let nt=je-ue,rt=Math.max(0,Math.ceil(nt/ie)),st=Math.min(ee,(T+nt)/ie);for(let Ze=0;Ze<H;++Ze){let ze=Ze-ye,dt=Math.max(0,Math.ceil(ze/ne)),qn=Math.min(re,(L+ze)/ne);for(let At=0;At<Z;++At){let wr=At-ve,on=Math.max(0,Math.ceil(wr/le)),Ir=Math.min(te,(V+wr)/le),vn=0;for(let jn=rt;jn<st;++jn){let yt=jn*ie-nt;for(let Pn=dt;Pn<qn;++Pn){let hn=Pn*ne-ze;for(let ts=on;ts<Ir;++ts){let qs=ts*le-wr,kr=v*Se+x*jn+k*Pn+S*ts,xl=E*(T-1-yt)+$*(L-1-hn)+F*(V-1-qs)+A*Le;for(let Sr=0;Sr<J;++Sr){let Ki=y[kr+Sr],Xt=C[xl+Sr];vn+=Ki*Xt}}}}h[f*Se+m*je+g*Ze+b*At+Le]=vn}}}return n.makeTensorInfo(d.shape,d.dtype,d.values)}var jj={kernelName:vf,backendName:"cpu",kernelFunc:qj},Kj=at(To,e=>Math.cos(e)),Xj={kernelName:To,backendName:"cpu",kernelFunc:Kj},Yj=at(Co,e=>Math.cosh(e)),Zj={kernelName:Co,backendName:"cpu",kernelFunc:Yj};function Jj(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:a,boxInd:o}=t,{cropSize:i,method:c,extrapolationValue:u}=r,[l,p,d,h]=s.shape,f=a.shape[0],[m,g]=i,b=Me([f,m,g,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 C=0;C<f;C++){let E=C*4,$=y[E],F=y[E+1],A=y[E+2],R=y[E+3],T=v[C];if(T>=l)continue;let L=m>1?(A-$)*(p-1)/(m-1):0,V=g>1?(R-F)*(d-1)/(g-1):0;for(let G=0;G<m;G++){let j=m>1?$*(p-1)+G*L:.5*($+A)*(p-1);if(j<0||j>p-1){for(let H=0;H<g;H++)for(let Z=0;Z<h;Z++){let J=Z+H*S[2]+G*S[1]+C*S[0];b.values[J]=u}continue}if(c==="bilinear"){let H=Math.floor(j),Z=Math.ceil(j),J=j-H;for(let ee=0;ee<g;ee++){let re=g>1?F*(d-1)+ee*V:.5*(F+R)*(d-1);if(re<0||re>d-1){for(let le=0;le<h;le++){let ue=le+ee*S[2]+G*S[1]+C*S[0];b.values[ue]=u}continue}let te=Math.floor(re),ie=Math.ceil(re),ne=re-te;for(let le=0;le<h;le++){let ue=le+te*k[2]+H*k[1]+T*k[0],ye=x[ue];ue=le+ie*k[2]+H*k[1]+T*k[0];let ve=x[ue];ue=le+te*k[2]+Z*k[1]+T*k[0];let Se=x[ue];ue=le+ie*k[2]+Z*k[1]+T*k[0];let Le=x[ue],je=ye+(ve-ye)*ne,nt=Se+(Le-Se)*ne;ue=le+ee*S[2]+G*S[1]+C*S[0],b.values[ue]=je+(nt-je)*J}}}else for(let H=0;H<g;++H){let Z=g>1?F*(d-1)+H*V:.5*(F+R)*(d-1);if(Z<0||Z>d-1){for(let re=0;re<h;re++){let te=re+H*S[2]+G*S[1]+C*S[0];b.values[te]=u}continue}let J=Math.round(Z),ee=Math.round(j);for(let re=0;re<h;re++){let te=re+J*k[2]+ee*k[1]+T*k[0],ie=re+H*S[2]+G*S[1]+C*S[0];b.values[ie]=x[te]}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var Qj={kernelName:qc,backendName:"cpu",kernelFunc:Jj};function e8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;be(s,"cumprod");let c=N.getAxesPermutation([a],s.shape.length),u=s;c!=null&&(u=Vn({inputs:{x:s},backend:n,attrs:{perm:c}}));let l=N.getInnerMostAxes(1,s.shape.length)[0];if(l!==u.shape.length-1)throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${l}`);let p=hr(u.dtype,"int32"),d=w.makeOnesTypedArray(w.sizeFromShape(u.shape),p),h=n.data.get(u.dataId).values,f=u.shape[u.shape.length-1],m=i?(b,y)=>b+f-y-1:(b,y)=>b+y;for(let b=0;b<h.length;b+=f)for(let y=0;y<f;y++){let v=m(b,y);if(y===0)d[v]=o?1:h[v];else{let x=m(b,y-1);d[v]=o?h[x]*d[x]:h[v]*d[x]}}let g=n.makeTensorInfo(u.shape,p,d);if(c!=null){let b=N.getUndoAxesPermutation(c),y=Vn({inputs:{x:g},backend:n,attrs:{perm:b}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),y}return g}var t8={kernelName:Hc,backendName:"cpu",kernelFunc:e8};function n8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;be(s,"cumsum");let c=N.getAxesPermutation([a],s.shape.length),u=s;c!=null&&(u=Vn({inputs:{x:s},backend:n,attrs:{perm:c}}));let l=N.getInnerMostAxes(1,s.shape.length)[0];if(l!==u.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${l}`);let p=hr(u.dtype,"int32"),d=w.makeZerosTypedArray(w.sizeFromShape(u.shape),p),h=n.data.get(u.dataId).values,f=u.shape[u.shape.length-1],m=i?(b,y)=>b+f-y-1:(b,y)=>b+y;for(let b=0;b<h.length;b+=f)for(let y=0;y<f;y++){let v=m(b,y);if(y===0)d[v]=o?0:h[v];else{let x=m(b,y-1);d[v]=o?h[x]+d[x]:h[v]+d[x]}}let g=n.makeTensorInfo(u.shape,p,d);if(c!=null){let b=N.getUndoAxesPermutation(c),y=Vn({inputs:{x:g},backend:n,attrs:{perm:b}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),y}return g}var r8={kernelName:No,backendName:"cpu",kernelFunc:n8};function s8(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 c=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,l=O0(c,u,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,l)}else if(s.shape.length===2){let c=n.bufferSync(s),u=n.bufferSync(a),l=f_(c,u,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 a8={kernelName:xf,backendName:"cpu",kernelFunc:s8};function o8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockSize:a,dataFormat:o}=r;w.assert(o==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${o}`);let i=s.shape[0],c=s.shape[1],u=s.shape[2],l=s.shape[3],p=c*a,d=u*a,h=l/(a*a),f=n.data.get(s.dataId).values,m=new Float32Array(i*p*d*h),g=0;for(let b=0;b<i;++b)for(let y=0;y<p;++y){let v=Math.floor(y/a),x=y%a;for(let k=0;k<d;++k){let S=Math.floor(k/a),C=k%a,E=(x*a+C)*h;for(let $=0;$<h;++$){let A=$+E+l*(S+u*(v+c*b));m[g++]=f[A]}}}return n.makeTensorInfo([i,p,d,h],s.dtype,m)}var i8={kernelName:jc,backendName:"cpu",kernelFunc:o8};function a2(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:c,dimRoundingMode:u}=r;be([s,a],"depthwiseConv2DNative");let l=w.computeStrides(s.shape),p=w.computeStrides(a.shape),d=c;d==null&&(d=[1,1]),w.assert(N.eitherStridesOrDilationsAreOne(o,d),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${d}'`);let h=N.computeConv2DInfo(s.shape,a.shape,o,d,i,u,!0),{filterHeight:f,filterWidth:m,dilationHeight:g,dilationWidth:b,padInfo:y}=h,v=y.left,x=y.top,k=h.outChannels/h.inChannels,S=new Ht(h.outShape,s.dtype),C=n.data.get(s.dataId).values,E=n.data.get(a.dataId).values,$=S.values;for(let F=0;F<h.batchSize;++F){let A=F*l[0],R=F*S.strides[0];for(let T=0;T<h.outHeight;++T){let L=R+T*S.strides[1],V=T*h.strideHeight-x;for(let G=0;G<f;++G){let j=V+G*g;if(j<0||j>=h.inHeight)continue;let H=G*p[0],Z=A+j*l[1];for(let J=0;J<h.outWidth;++J){let ee=L+J*S.strides[2],re=J*h.strideWidth-v;for(let te=0;te<m;++te){let ie=re+te*b;if(ie<0||ie>=h.inWidth)continue;let ne=H+te*p[1],le=Z+ie*h.inChannels,ue=ee,ye=ne;for(let ve=0;ve<h.inChannels;++ve){let Se=C[le+ve];for(let Le=0;Le<k;++Le)$[ue+Le]+=Se*E[ye+Le];ue+=k,ye+=k}}}}}}return n.makeTensorInfo(S.shape,S.dtype,S.values)}var c8={kernelName:_o,backendName:"cpu",kernelFunc:a2};function u8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,dilations:i,pad:c,dimRoundingMode:u,filterShape:l}=r;be([s,a],"depthwiseConv2dNativeBackpropFilter");let p=N.computeConv2DInfo(s.shape,l,o,i,c,u,!0),{strideHeight:d,strideWidth:h,filterHeight:f,filterWidth:m}=p,g=new Ht(p.filterShape,"float32"),b=p.padInfo.left,y=p.padInfo.top,v=p.outChannels/p.inChannels,x=n.data.get(s.dataId).values,k=new Ht(s.shape,s.dtype,x),S=n.data.get(a.dataId).values,C=new Ht(a.shape,a.dtype,S);for(let E=0;E<f;++E){let $=Math.max(0,Math.ceil((y-E)/d)),F=Math.min(p.outHeight,(p.inHeight+y-E)/d);for(let A=0;A<m;++A){let R=Math.max(0,Math.ceil((b-A)/h)),T=Math.min(p.outWidth,(p.inWidth+b-A)/h);for(let L=0;L<p.outChannels;++L){let V=Math.trunc(L/v),G=L%v,j=0;for(let H=0;H<p.batchSize;++H)for(let Z=$;Z<F;++Z){let J=E+Z*d-y;for(let ee=R;ee<T;++ee){let re=A+ee*h-b;j+=k.get(H,J,re,V)*C.get(H,Z,ee,L)}}g.set(j,E,A,V,G)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var l8={kernelName:wf,backendName:"cpu",kernelFunc:u8};function d8(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{strides:o,dilations:i,pad:c,dimRoundingMode:u,inputShape:l}=r;be([s,a],"depthwiseConv2DNativeBackpropInput");let p=w.computeStrides(s.shape),d=w.computeStrides(a.shape),h=N.computeConv2DInfo(l,a.shape,o,i,c,u,!0),f=new Ht(h.inShape,"float32"),m=f.values,[g,b,y]=f.strides,v=n.data.get(s.dataId).values,[x,k,S]=p,C=n.data.get(a.dataId).values,[E,$,F]=d,{batchSize:A,filterHeight:R,filterWidth:T,inChannels:L,inHeight:V,inWidth:G,outChannels:j,outHeight:H,outWidth:Z,strideHeight:J,strideWidth:ee}=h,re=R-1-h.padInfo.top,te=T-1-h.padInfo.left,ie=j/L;for(let ne=0;ne<A;++ne)for(let le=0;le<L;++le)for(let ue=0;ue<V;++ue){let ye=ue-re,ve=Math.max(0,Math.ceil(ye/J)),Se=Math.min(H,(R+ye)/J);for(let Le=0;Le<G;++Le){let je=Le-te,nt=Math.max(0,Math.ceil(je/ee)),rt=Math.min(Z,(T+je)/ee),st=0;for(let Ze=ve;Ze<Se;++Ze){let ze=Ze*J-ye;for(let dt=nt;dt<rt;++dt){let qn=dt*ee-je,At=x*ne+k*Ze+S*dt,wr=E*(R-1-ze)+$*(T-1-qn)+F*le;for(let on=0;on<ie;++on){let Ir=le*ie+on,vn=v[At+Ir],jn=C[wr+on];st+=vn*jn}}}m[g*ne+b*ue+y*Le+le]=st}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var p8={kernelName:If,backendName:"cpu",kernelFunc:d8};function h8(e){let{inputs:t,backend:n}=e,{x:r}=t,s=w.sizeFromShape(r.shape),a=n.data.get(r.dataId).values,o=Me([s,s],r.dtype),i=o.values;for(let u=0;u<a.length;u++)i[u*s+u]=a[u];let c=[...r.shape,...r.shape];return n.makeTensorInfo(c,o.dtype,o.values)}var f8={kernelName:kf,backendName:"cpu",kernelFunc:h8},m8={kernelName:md,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s}=e,{strides:a,pad:o,dilations:i}=n,c=t,u=c.data.get(r.dataId).values,l=r.shape.length,p=c.data.get(s.dataId).values,d=s.shape.length,{batchSize:h,inHeight:f,inWidth:m,inChannels:g,outHeight:b,outWidth:y,padInfo:v,strideHeight:x,strideWidth:k,filterHeight:S,filterWidth:C,dilationHeight:E,dilationWidth:$,outShape:F}=N.computeDilation2DInfo(r.shape,s.shape,a,o,"NHWC",i),A=w.sizeFromShape(F),R=F.length,T=w.getArrayFromDType(r.dtype,A);for(let V=0;V<h;++V)for(let G=0;G<b;++G){let j=G*x-v.top;for(let H=0;H<y;++H){let Z=H*k-v.left;for(let J=0;J<g;++J){let ee=Number.MIN_SAFE_INTEGER;for(let te=0;te<S;++te){let ie=j+te*E;if(ie>=0&&ie<f)for(let ne=0;ne<C;++ne){let le=Z+ne*$;if(le>=0&&le<m){let ue=w.locToIndex([V,ie,le,J],l,w.computeStrides(r.shape)),ye=w.locToIndex([te,ne,J],d,w.computeStrides(s.shape)),ve=u[ue]+p[ye];ve>ee&&(ee=ve)}}}let re=w.locToIndex([V,G,H,J],R,w.computeStrides(F));T[re]=ee}}}return{dataId:c.write(w.toTypedArray(T,r.dtype),F,r.dtype),shape:F,dtype:r.dtype}}},g8={kernelName:Dh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:a}=e,{strides:o,pad:i,dilations:c}=n,u=t,l=w.toNestedArray(r.shape,u.data.get(r.dataId).values),p=w.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:b,padInfo:y,strideHeight:v,strideWidth:x,filterHeight:k,filterWidth:S,dilationHeight:C,dilationWidth:E,outShape:$}=N.computeDilation2DInfo(r.shape,s.shape,o,i,"NHWC",c);w.assert(a.rank===$.length,()=>`Error in ${Dh}, dy must have the same rank as output ${$.length}, but got ${a.rank}`);let F=w.toNestedArray($,u.data.get(a.dataId).values),A=w.makeZerosNestedTypedArray(s.shape,s.dtype);for(let T=0;T<d;++T)for(let L=0;L<g;++L){let V=L*v-y.top;for(let G=0;G<b;++G){let j=G*x-y.left;for(let H=0;H<m;++H){let Z=Number.MIN_SAFE_INTEGER,J=0,ee=0;for(let re=0;re<k;++re){let te=V+re*C;if(te>=0&&te<h)for(let ie=0;ie<S;++ie){let ne=j+ie*E;if(ne>=0&&ne<f){let le=l[T][te][ne][H]+p[re][ie][H];le>Z&&(Z=le,J=re,ee=ie)}}}A[J][ee][H]+=F[T][L][G][H]}}}return{dataId:u.write(w.toTypedArray(A,r.dtype),s.shape,s.dtype),shape:s.shape,dtype:s.dtype}}},b8={kernelName:$h,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:r,filter:s,dy:a}=e,{strides:o,pad:i,dilations:c}=n,u=t,l=w.toNestedArray(r.shape,u.data.get(r.dataId).values),p=w.toNestedArray(s.shape,u.data.get(s.dataId).values),{batchSize:d,inHeight:h,inWidth:f,inChannels:m,outHeight:g,outWidth:b,padInfo:y,strideHeight:v,strideWidth:x,filterHeight:k,filterWidth:S,dilationHeight:C,dilationWidth:E,outShape:$}=N.computeDilation2DInfo(r.shape,s.shape,o,i,"NHWC",c);w.assert(a.rank===$.length,()=>`Error in ${$h}, dy must have the same rank as output ${$.length}, but got ${a.rank}`);let F=w.toNestedArray($,u.data.get(a.dataId).values),A=w.makeZerosNestedTypedArray(r.shape,r.dtype);for(let T=0;T<d;++T)for(let L=0;L<g;++L){let V=L*v-y.top;for(let G=0;G<b;++G){let j=G*x-y.left;for(let H=0;H<m;++H){let Z=Number.MIN_SAFE_INTEGER,J=V<0?0:V,ee=j<0?0:j;for(let re=0;re<k;++re){let te=V+re*C;if(te>=0&&te<h)for(let ie=0;ie<S;++ie){let ne=j+ie*E;if(ne>=0&&ne<f){let le=l[T][te][ne][H]+p[re][ie][H];le>Z&&(Z=le,J=te,ee=ne)}}}A[T][J][ee][H]+=F[T][L][G][H]}}}return{dataId:u.write(w.toTypedArray(A,r.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}};function ap(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=ha({inputs:{x:s},backend:n,attrs:{dtype:"int32"}}):i=ds({inputs:{x:s},backend:n});let c=i.shape.length,u=w.parseAxisParam(a,i.shape),l=N.getAxesPermutation(u,c),p=u,d=i;l!=null&&(d=Vn({inputs:{x:i},backend:n,attrs:{perm:l}}),p=N.getInnerMostAxes(p.length,c)),N.assertAxesAreInnerMostDims("sum",p,d.shape.length);let[h,f]=N.computeOutAndReduceShapes(d.shape,p),m=N.upcastType(d.dtype,"int32"),g=Jh(n,h,m),b=w.sizeFromShape(f),y=n.data.get(g.dataId).values,v=n.data.get(d.dataId).values;for(let x=0;x<y.length;++x){let k=x*b,S=0;for(let C=0;C<b;++C)S+=v[k+C];y[x]=S}if(o){let x=N.expandShapeToKeepDim(g.shape,u),k=g;g=ft({inputs:{x:g},backend:n,attrs:{shape:x}}),n.disposeIntermediateTensorInfo(k)}return n.disposeIntermediateTensorInfo(i),l!=null&&n.disposeIntermediateTensorInfo(d),g}var y8={kernelName:ci,backendName:"cpu",kernelFunc:ap};function v8(e){let{inputs:t,backend:n,attrs:r}=e,{equation:s}=r,a=t,{allDims:o,summedDims:i,idDims:c}=N.decodeEinsumEquation(s,a.length);N.checkEinsumDimSizes(o.length,c,a);let{path:u,steps:l}=N.getEinsumComputePath(i,c),p=l.length,d=null,h=o.length,f=[];for(let m=0;m<p;++m){for(let g of l[m]){let{permutationIndices:b,expandDims:y}=N.getEinsumPermutation(h,c[g]),v;N.isIdentityPermutation(b)?v=a[g]:(v=Vn({inputs:{x:a[g]},backend:n,attrs:{perm:b}}),f.push(v));let x=v.shape.slice();for(let k=0;k<y.length;++k)x.splice(y[k],0,1);w.arraysEqual(v.shape,x)||(v=ft({inputs:{x:v},backend:n,attrs:{shape:x}}),f.push(v)),d===null?d=v:(d=Km({inputs:{a:v,b:d},backend:n}),f.push(d))}m<p-1&&(u[m]>=0&&(d=ap({inputs:{x:d},backend:n,attrs:{axis:u[m]-(o.length-h),keepDims:!1}}),f.push(d)),h--)}for(let m of f)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var x8={kernelName:Sf,backendName:"cpu",kernelFunc:v8};function w8(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 c=0;c<o.length;++c){let u=o[c];u>=1?a[c]=i[c]:a[c]=i[c]*(u+1)}return n.makeTensorInfo(s.shape,"float32",a)}var I8={kernelName:Tf,backendName:"cpu",kernelFunc:w8},k8=N.ERF_P,S8=N.ERF_A1,T8=N.ERF_A2,C8=N.ERF_A3,N8=N.ERF_A4,_8=N.ERF_A5,E8=at(Kc,e=>{let t=Math.sign(e),n=Math.abs(e),r=1/(1+k8*n);return t*(1-((((_8*r+N8)*r+C8)*r+T8)*r+S8)*r*Math.exp(-n*n))}),A8={kernelName:Kc,backendName:"cpu",kernelFunc:E8};function tf(e){let{inputs:t,backend:n,attrs:r}=e,{input:s}=t,{dim:a}=r,o=s.shape.length,i=s.shape.slice(),c=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),c=o+a+1),i.splice(c,0,1),ft({inputs:{x:s},backend:n,attrs:{shape:i}})}var $8={kernelName:Yc,backendName:"cpu",kernelFunc:tf},D8=Vt((e,t)=>e/t),j0=nn(Eo,D8),pv={kernelName:Eo,backendName:"cpu",kernelFunc:j0};function o2(e,t,n){let r=e.shape,s=r[0],a=r[1],o=n.data.get(e.dataId),i=o.complexTensorInfos.real,c=o.complexTensorInfos.imag,u=[s,a],l=w.sizeFromShape(u),p=w.getTypedArrayFromDType("float32",l),d=w.getTypedArrayFromDType("float32",l);for(let g=0;g<s;g++){let b=po({inputs:{x:i},backend:n,attrs:{begin:[g,0],size:[1,a]}}),y=po({inputs:{x:c},backend:n,attrs:{begin:[g,0],size:[1,a]}}),v=Jn({inputs:{real:b,imag:y},backend:n}),{real:x,imag:k}=F8(v,t,n),S=N.mergeRealAndImagArrays(x,k);for(let C=0;C<a;C++){let E=N.getComplexWithIndex(S,C);p[g*a+C]=E.real,d[g*a+C]=E.imag}n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(v)}let h=n.makeTensorInfo(u,"float32",p),f=n.makeTensorInfo(u,"float32",d),m=Jn({inputs:{real:h,imag:f},backend:n});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),m}function F8(e,t,n){let r=w.sizeFromShape(e.shape),s=n.data.get(e.dataId),a=n.data.get(s.complexTensorInfos.real.dataId).values,o=n.data.get(s.complexTensorInfos.imag.dataId).values;if(R8(r)){let i=hv(a,o,r,t,n),c=[e.shape[0],e.shape[1]];if(t){let u=n.makeTensorInfo(c,"float32",i.real),l=n.makeTensorInfo(c,"float32",i.imag),p=n.makeTensorInfo([],"float32",w.createScalarValue(r,"float32")),d=ds({inputs:{x:p},backend:n}),h=pv.kernelFunc({inputs:{a:u,b:p},backend:n}),f=pv.kernelFunc({inputs:{a:l,b:d},backend:n}),m=n.data.get(h.dataId).values,g=n.data.get(f.dataId).values;return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),{real:m,imag:g}}return i}else{let i=N.mergeRealAndImagArrays(a,o),c=P8(i,r,t);return N.splitRealAndImagArrays(c)}}function R8(e){return(e&e-1)===0}function hv(e,t,n,r,s){if(n===1)return{real:e,imag:t};let a=N.mergeRealAndImagArrays(e,t),o=n/2,i=N.complexWithEvenIndex(a),c=i.real,u=i.imag,l=[c.length],p=s.makeTensorInfo(l,"float32",c),d=s.makeTensorInfo(l,"float32",u),h=Jn({inputs:{real:p,imag:d},backend:s}),f=N.complexWithOddIndex(a),m=f.real,g=f.imag,b=[m.length],y=s.makeTensorInfo(b,"float32",m),v=s.makeTensorInfo(b,"float32",g),x=Jn({inputs:{real:y,imag:v},backend:s}),k=hv(c,u,o,r,s),S=k.real,C=k.imag,E=[S.length],$=s.makeTensorInfo(E,"float32",S),F=s.makeTensorInfo(E,"float32",C),A=Jn({inputs:{real:$,imag:F},backend:s}),R=hv(m,g,o,r,s),T=R.real,L=R.imag,V=[T.length],G=s.makeTensorInfo(V,"float32",T),j=s.makeTensorInfo(V,"float32",L),H=Jn({inputs:{real:G,imag:j},backend:s}),Z=N.exponents(n,r),J=[Z.real.length],ee=s.makeTensorInfo(J,"float32",Z.real),re=s.makeTensorInfo(J,"float32",Z.imag),te=Jn({inputs:{real:ee,imag:re},backend:s}),ie=Km({inputs:{a:te,b:H},backend:s}),ne=_c({inputs:{a:A,b:ie},backend:s}),le=H0({inputs:{a:A,b:ie},backend:s}),ue=lo({inputs:{input:ne},backend:s}),ye=lo({inputs:{input:le},backend:s}),ve=Ec({inputs:{input:ne},backend:s}),Se=Ec({inputs:{input:le},backend:s}),Le=Ac({inputs:[ue,ye],backend:s,attrs:{axis:0}}),je=Ac({inputs:[ve,Se],backend:s,attrs:{axis:0}}),nt=s.data.get(Le.dataId).values,rt=s.data.get(je.dataId).values;return s.disposeIntermediateTensorInfo(p),s.disposeIntermediateTensorInfo(d),s.disposeIntermediateTensorInfo(h),s.disposeIntermediateTensorInfo(y),s.disposeIntermediateTensorInfo(v),s.disposeIntermediateTensorInfo(x),s.disposeIntermediateTensorInfo($),s.disposeIntermediateTensorInfo(F),s.disposeIntermediateTensorInfo(A),s.disposeIntermediateTensorInfo(G),s.disposeIntermediateTensorInfo(j),s.disposeIntermediateTensorInfo(H),s.disposeIntermediateTensorInfo(ee),s.disposeIntermediateTensorInfo(re),s.disposeIntermediateTensorInfo(te),s.disposeIntermediateTensorInfo(ie),s.disposeIntermediateTensorInfo(ne),s.disposeIntermediateTensorInfo(le),s.disposeIntermediateTensorInfo(ue),s.disposeIntermediateTensorInfo(ve),s.disposeIntermediateTensorInfo(ye),s.disposeIntermediateTensorInfo(Se),s.disposeIntermediateTensorInfo(Le),s.disposeIntermediateTensorInfo(je),{real:nt,imag:rt}}function P8(e,t,n){let r=new Float32Array(t*2);for(let s=0;s<t;s++){let a=0,o=0;for(let i=0;i<t;i++){let c=N.exponent(s*i,t,n),u=N.getComplexWithIndex(e,i);a+=u.real*c.real-u.imag*c.imag,o+=u.real*c.imag+u.imag*c.real}n&&(a/=t,o/=t),N.assignToTypedArray(r,a,o,s)}return r}function O8(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=ft({inputs:{x:r},backend:n,attrs:{shape:[o,a]}}),c=o2(i,!1,n),u=ft({inputs:{x:c},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(c),u}var M8={kernelName:Cf,backendName:"cpu",kernelFunc:O8};function K0(e){let{backend:t,attrs:n}=e,{shape:r,value:s,dtype:a}=n,o=a||w.inferDtype(s),i=w.getArrayFromDType(o,w.sizeFromShape(r));return z8(i,s,o),t.makeTensorInfo(r,o,i)}var L8={kernelName:gd,backendName:"cpu",kernelFunc:K0};function z8(e,t,n){e.fill(t)}var B8={kernelName:Jc,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,s=n,a=w.getTypedArrayFromDType(r.dtype,w.sizeFromShape(r.shape)),[o,i,c,u]=r.shape,l=s.data.get(r.dataId).values;for(let d=0;d<o;d++){let h=d*c*i*u;for(let f=0;f<i;f++){let m=f*(c*u);for(let g=0;g<c;g++){let b=g*u;for(let y=0;y<u;y++){let v=Math.round(c-g-1),x=h+m+b+y,k=l[x];if(v>=0&&v<c){let S=v*u,C=h+m+S+y;k=l[C]}a[x]=k}}}}return{dataId:s.write(a,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},W8=Vt((e,t)=>Math.floor(e/t)),V8=nn(Fo,W8,null,"int32"),U8={kernelName:Fo,backendName:"cpu",kernelFunc:V8};function G8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dataFormat:l,dilations:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=r,m=s2({inputs:{x:s,filter:a},backend:n,attrs:{strides:c,pad:u,dataFormat:l,dilations:p,dimRoundingMode:d}});if(o){let g=m;if(l==="NCHW"&&o.shape.length===1&&o.shape[0]!==1){let b=ft({inputs:{x:o},backend:n,attrs:{shape:[o.shape[0],1,1]}});m=_c({inputs:{a:m,b},backend:n}),n.disposeIntermediateTensorInfo(b)}else m=_c({inputs:{a:m,b:o},backend:n});n.disposeIntermediateTensorInfo(g)}if(h){let g=m;if(l==="NCHW"&&h==="prelu"&&i.shape.length===1&&i.shape[0]!==1){let b=ft({inputs:{x:i},backend:n,attrs:{shape:[i.shape[0],1,1]}});m=ef(n,m,h,b,f),n.disposeIntermediateTensorInfo(b)}else m=ef(n,m,h,i,f);n.disposeIntermediateTensorInfo(g)}return m}var H8={kernelName:to,backendName:"cpu",kernelFunc:G8};function q8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dataFormat:l,dilations:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=r,m=a2({inputs:{x:s,filter:a},backend:n,attrs:{strides:c,pad:u,dataFormat:l,dilations:p,dimRoundingMode:d}});if(o){let g=m;m=_c({inputs:{a:m,b:o},backend:n}),n.disposeIntermediateTensorInfo(g)}if(h){let g=m;m=ef(n,m,h,i,f),n.disposeIntermediateTensorInfo(g)}return m}var j8={kernelName:no,backendName:"cpu",kernelFunc:q8};function K8(e){let{inputs:t,backend:n}=e,{params:r,indices:s}=t,a=w.sizeFromShape(r.shape),o=s.shape,i=o[o.length-1],[c,u,l,p]=N.prepareAndValidate(r,s);if(u===0)return n.makeTensorInfo(c,r.dtype,[]);let d=n.data.get(s.dataId).values,h=n.bufferSync(r),f=I_(d,h,r.dtype,u,i,l,p,r.shape,a);return n.makeTensorInfo(c,r.dtype,f.values)}var X8={kernelName:eu,backendName:"cpu",kernelFunc:K8};function Y8(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,indices:a}=t,{axis:o,batchDims:i}=r;be([s,a],"gatherV2");let c=w.parseAxisParam(o,s.shape)[0],u=n.data.get(a.dataId).values,l=s.shape[c];for(let x=0;x<u.length;++x){let k=u[x];w.assert(k<=l-1&&k>=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=N.segment_util.collectGatherOpShapeInfo(s,a,c,p),f=ft({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),m=ft({inputs:{x:a},backend:n,attrs:{shape:[h.batchSize,d/h.batchSize]}}),g=[h.batchSize,h.outerSize,d/h.batchSize,h.sliceSize],b=n.bufferSync(m),y=n.bufferSync(f),v=k_(y,b,g);return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),n.makeTensorInfo(h.outputShape,v.dtype,v.values)}var Z8={kernelName:Qc,backendName:"cpu",kernelFunc:Y8};function J8(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=ft({inputs:{x:r},backend:n,attrs:{shape:[o,a]}}),c=o2(i,!0,n),u=ft({inputs:{x:c},backend:n,attrs:{shape:r.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(c),u}var Q8={kernelName:Nf,backendName:"cpu",kernelFunc:J8},eK=at(nu,e=>Number.isFinite(e)?1:0,"bool"),tK={kernelName:nu,backendName:"cpu",kernelFunc:eK},nK=at(ru,e=>Math.abs(e)===1/0?1:0,"bool"),rK={kernelName:ru,backendName:"cpu",kernelFunc:nK},sK=at(su,e=>Number.isNaN(e)?1:0,"bool"),aK={kernelName:su,backendName:"cpu",kernelFunc:sK};function oK(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:a}=n,o=__(r,s,a);return t.makeTensorInfo([o.length],"float32",o)}var iK={kernelName:Ef,backendName:"cpu",kernelFunc:oK},cK=at(iu,e=>Math.log1p(e)),uK={kernelName:iu,backendName:"cpu",kernelFunc:cK},lK=Vt((e,t)=>e&&t),dK=nn(cu,lK,null,"bool"),pK={kernelName:cu,backendName:"cpu",kernelFunc:dK},hK=at(uu,e=>e?0:1,"bool"),fK={kernelName:uu,backendName:"cpu",kernelFunc:hK},mK=Vt((e,t)=>e||t),gK=nn(lu,mK,null,"bool"),bK={kernelName:lu,backendName:"cpu",kernelFunc:gK};function yK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:a,bias:o,alpha:i,beta:c}=r;be(s,"LRN");let u=s.shape[3],l=u-1,p=n.data.get(s.dataId).values,d=w.sizeFromShape(s.shape),h=new Float32Array(d);function f(m){let g=m%u,b=m-g+Math.max(0,g-a),y=m-g+Math.min(g+a,l),v=0;for(;b<=y;b++){let x=p[b];v+=x*x}return v}for(let m=0;m<d;m++){let g=f(m),b=p[m]*Math.pow(o+i*g,-c);h[m]=b}return n.makeTensorInfo(s.shape,s.dtype,h)}var vK={kernelName:bd,backendName:"cpu",kernelFunc:yK};function xK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,y:a,dy:o}=t,{depthRadius:i,bias:c,alpha:u,beta:l}=r;be(o,"LRNGrad");let p=w.sizeFromShape(o.shape),d=o.shape[3],h=n.data.get(o.dataId).values,f=n.data.get(s.dataId).values,m=n.data.get(a.dataId).values,g=new Float32Array(p),b=p;for(let y=0;y<b;y++){let v=y%d,x=y-v+Math.max(0,v-i),k=y-v+Math.min(d,v+i+1),S=0;for(let C=x;C<k;C++)S+=Math.pow(f[C],2);S=u*S+c;for(let C=x;C<k;C++){let E=-2*u*l*f[C]*m[y]/S;y===C&&(E+=Math.pow(S,-l)),E*=h[y],g[C]+=E}}return n.makeTensorInfo(o.shape,s.dtype,g)}var wK={kernelName:Af,backendName:"cpu",kernelFunc:xK};function i2(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reductionIndices:a,keepDims:o}=r,i=n,c=s.shape,u=c.length,l=w.parseAxisParam(a,c),p=l,d=N.getAxesPermutation(p,u),h=i.data.get(s.dataId).values;if(d!=null){let x=new Array(u);for(let k=0;k<x.length;k++)x[k]=c[d[k]];h=z0(h,c,s.dtype,d,x),p=N.getInnerMostAxes(p.length,u),c=x}be(s,"max"),N.assertAxesAreInnerMostDims("max",p,u);let[f,m]=N.computeOutAndReduceShapes(c,p),g=w.sizeFromShape(m),b=A_(h,g,f,s.dtype),y=i.write(b,f,s.dtype),v=f;return o&&(v=N.expandShapeToKeepDim(f,l)),{dataId:y,shape:v,dtype:s.dtype}}var IK={kernelName:zo,backendName:"cpu",kernelFunc:i2};function kK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;be(s,"maxPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:c}=r,u=1;w.assert(N.eitherStridesOrDilationsAreOne(o,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let l=N.computePool2DInfo(s.shape,a,o,u,i,c),p;if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))p=ds({inputs:{x:s},backend:n});else{let d=n.data.get(s.dataId).values,h=w.computeStrides(s.shape),f=q0(d,s.shape,s.dtype,h,l,"max");p=n.makeTensorInfo(l.outShape,s.dtype,f.values)}return p}var SK={kernelName:Wo,backendName:"cpu",kernelFunc:kK};function TK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:c,dataFormat:u}=r;be(s,"maxPool3d");let l=N.computePool3DInfo(s.shape,a,o,1,i,c,u),p=n.data.get(s.dataId).values,d=r2(p,s.shape,s.dtype,w.computeStrides(s.shape),l,"max");return n.makeTensorInfo(d.shape,"float32",d.values)}var CK={kernelName:yd,backendName:"cpu",kernelFunc:TK};function NK(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,{filterSize:o,strides:i,pad:c,dimRoundingMode:u}=r;be([s,a],"maxPool3DGrad");let l=N.computePool3DInfo(a.shape,o,i,1,c,u),p=n.bufferSync(a),d=fj(p,l),h=l.strideDepth,f=l.strideHeight,m=l.strideWidth,g=l.dilationDepth,b=l.dilationHeight,y=l.dilationWidth,v=l.effectiveFilterDepth,x=l.effectiveFilterHeight,k=l.effectiveFilterWidth,S=v-1-l.padInfo.front,C=k-1-l.padInfo.left,E=x-1-l.padInfo.top,$=Me(a.shape,"float32"),F=n.bufferSync(s);for(let A=0;A<l.batchSize;++A)for(let R=0;R<l.inChannels;++R)for(let T=0;T<l.inDepth;++T)for(let L=0;L<l.inHeight;++L)for(let V=0;V<l.inWidth;++V){let G=T-S,j=L-E,H=V-C,Z=0;for(let J=0;J<v;J+=g){let ee=(G+J)/h;if(!(ee<0||ee>=l.outDepth||Math.floor(ee)!==ee))for(let re=0;re<x;re+=b){let te=(j+re)/f;if(!(te<0||te>=l.outHeight||Math.floor(te)!==te))for(let ie=0;ie<k;ie+=y){let ne=(H+ie)/m;if(ne<0||ne>=l.outWidth||Math.floor(ne)!==ne)continue;let le=v*x*k-1-d.get(A,ee,te,ne,R),ue=J*x*k+re*k+ie,ye=le===ue?1:0;if(ye===0)continue;let ve=F.get(A,ee,te,ne,R);Z+=ve*ye}}}$.set(Z,A,T,L,V,R)}return n.makeTensorInfo($.shape,$.dtype,$.values)}var _K={kernelName:Df,backendName:"cpu",kernelFunc:NK};function EK(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a,output:o}=t,i=a;be([a,o],"maxPoolGrad");let{filterSize:c,strides:u,pad:l,dimRoundingMode:p}=r,d=N.computePool2DInfo(i.shape,c,u,1,l,p),h=n.data.get(i.dataId).values,f=Me(d.outShape,i.dtype,n2(h,i.shape,i.dtype,d).values),m=d.strideHeight,g=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,C=Me(i.shape,"float32"),E=n.data.get(s.dataId).values,$=Me(s.shape,"float32",E);for(let F=0;F<d.batchSize;++F)for(let A=0;A<d.inChannels;++A)for(let R=0;R<d.inHeight;++R)for(let T=0;T<d.inWidth;++T){let L=R-S,V=T-k,G=0;for(let j=0;j<v;j+=b){let H=(L+j)/m;if(!(H<0||H>=d.outHeight||Math.floor(H)!==H))for(let Z=0;Z<x;Z+=y){let J=(V+Z)/g;if(J<0||J>=d.outWidth||Math.floor(J)!==J)continue;let ee=v*x-1-f.get(F,H,J,A),re=j*x+Z,te=ee===re?1:0;if(te===0)continue;let ie=$.get(F,H,J,A);G+=ie*te}}C.set(G,F,R,T,A)}return n.makeTensorInfo(C.shape,C.dtype,C.values)}var AK={kernelName:$f,backendName:"cpu",kernelFunc:EK};function $K(e,t,n,r,s){let a=w.computeStrides(t),o=q0(e,t,n,a,s,"max"),i=n2(e,t,n,s,!0,r);return[o.values,i.values]}var DK={kernelName:Ff,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:a,pad:o,includeBatchInIndex:i}=t,c=n;be(r,"MaxPoolWithArgmax");let u=c.data.get(r.dataId).values,l=N.computePool2DInfo(r.shape,s,a,[1,1],o),[p,d]=$K(u,r.shape,r.dtype,i,l),h=c.write(p,l.outShape,r.dtype),f=c.write(d,l.outShape,r.dtype);return[{dataId:h,shape:l.outShape,dtype:r.dtype},{dataId:f,shape:l.outShape,dtype:"int32"}]}};function FK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=w.parseAxisParam(a,s.shape),u=N.computeOutAndReduceShapes(s.shape,i)[1],l=w.sizeFromShape(u),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([l]));p.push(d);let h=ha({inputs:{x:s},backend:n,attrs:{dtype:"float32"}});p.push(h);let f=j0({inputs:{a:h,b:d},backend:n});p.push(f);let m=ap({inputs:{x:f},backend:n,attrs:{axis:a,keepDims:o}});return p.forEach(g=>n.disposeIntermediateTensorInfo(g)),m}var RK={kernelName:Vo,backendName:"cpu",kernelFunc:FK};function PK(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),c=i,u=N.getAxesPermutation(c,s.shape.length),l=s;u!=null&&(l=Vn({inputs:{x:s},backend:n,attrs:{perm:u}}),c=N.getInnerMostAxes(c.length,s.shape.length)),N.assertAxesAreInnerMostDims("min",c,l.shape.length);let[p,d]=N.computeOutAndReduceShapes(l.shape,c),h=w.sizeFromShape(d),f=w.makeZerosTypedArray(w.sizeFromShape(p),l.dtype),m=n.data.get(l.dataId).values;for(let b=0;b<f.length;++b){let y=b*h,v=m[y];for(let x=0;x<h;++x){let k=m[y+x];(Number.isNaN(k)||k<v)&&(v=k)}f[b]=v}u!=null&&n.disposeIntermediateTensorInfo(l);let g=n.makeTensorInfo(p,l.dtype,f);if(o){let b=N.expandShapeToKeepDim(p,i),y=ft({inputs:{x:g},backend:n,attrs:{shape:b}});return n.disposeIntermediateTensorInfo(g),y}return g}var OK={kernelName:Uo,backendName:"cpu",kernelFunc:PK};function MK(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:a,mode:o}=r;be(s,"mirrorPad");let i=a.map((v,x)=>v[0]+s.shape[x]+v[1]),c=a.map(v=>v[0]),u=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),m=i.length,g=w.computeStrides(i),b=w.getTypedArrayFromDType(s.dtype,f);for(let v=0;v<f;v++){let x=w.indexToLoc(v,m,g);for(let S=0;S<m;S++)x[S]<c[S]?x[S]=c[S]*2-x[S]-l:x[S]>=u[S]&&(x[S]=(u[S]-1)*2-x[S]+l);x=x.map((S,C)=>S-c[C]);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 LK={kernelName:Ho,backendName:"cpu",kernelFunc:MK},zK=Vt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),BK=nn(du,zK),WK={kernelName:du,backendName:"cpu",kernelFunc:BK},VK=ma(cf());function c2(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 c=w.parseAxisParam([i],s.shape),u=i2({inputs:{x:s},backend:n,attrs:{reductionIndices:c,keepDims:!1}}),l=N.expandShapeToKeepDim(u.shape,c),p=ft({inputs:{x:u},backend:n,attrs:{shape:l}}),d=H0({inputs:{a:s,b:p},backend:n}),h=v_({inputs:{x:d},backend:n}),f=ap({inputs:{x:h},backend:n,attrs:{axis:c,keepDims:!1}}),m=ft({inputs:{x:f},backend:n,attrs:{shape:l}}),g=j0({inputs:{a:h,b:m},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(m),g}var UK={kernelName:ui,backendName:"cpu",kernelFunc:c2};function GK(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:a,seed:o,normalized:i}=r;be(s,"multinomial");let c=i?s:c2({inputs:{logits:s},backend:n,attrs:{dim:-1}}),u=c.shape[0],l=c.shape[1],p=n.data.get(c.dataId).values,d=[u,a],h=w.makeZerosTypedArray(w.sizeFromShape(d),"int32");for(let f=0;f<u;++f){let m=f*l,g=new Float32Array(l-1);g[0]=p[m];for(let v=1;v<g.length;++v)g[v]=g[v-1]+p[m+v];let b=VK.alea(o.toString()),y=f*a;for(let v=0;v<a;++v){let x=b();h[y+v]=g.length;for(let k=0;k<g.length;k++)if(x<g[k]){h[y+v]=k;break}}}return i||n.disposeIntermediateTensorInfo(c),n.makeTensorInfo(d,"int32",h)}var HK={kernelName:Rf,backendName:"cpu",kernelFunc:GK},qK=fs.nonMaxSuppressionV3Impl;function jK(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:c}=r;be(s,"NonMaxSuppression");let u=n.data.get(s.dataId).values,l=n.data.get(a.dataId).values,{selectedIndices:p}=qK(u,l,o,i,c);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}var KK={kernelName:fu,backendName:"cpu",kernelFunc:jK},XK=fs.nonMaxSuppressionV4Impl;function YK(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:c,padToMaxOutputSize:u}=r;be(s,"NonMaxSuppressionPadded");let l=n.data.get(s.dataId).values,p=n.data.get(a.dataId).values,{selectedIndices:d,validOutputs:h}=XK(l,p,o,i,c,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var ZK={kernelName:mu,backendName:"cpu",kernelFunc:YK},JK=fs.nonMaxSuppressionV5Impl;function QK(e){let{inputs:t,backend:n,attrs:r}=e,{boxes:s,scores:a}=t,{maxOutputSize:o,iouThreshold:i,scoreThreshold:c,softNmsSigma:u}=r;be(s,"NonMaxSuppressionWithScore");let l=n.data.get(s.dataId).values,p=n.data.get(a.dataId).values,d=o,h=i,f=c,m=u,{selectedIndices:g,selectedScores:b}=JK(l,p,d,h,f,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([b.length],"float32",new Float32Array(b))]}var eX={kernelName:gu,backendName:"cpu",kernelFunc:QK};function tX(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{dtype:a,depth:o,onValue:i,offValue:c}=r;be(s,"oneHot");let u=w.sizeFromShape(s.shape),l=new Float32Array(u*o);l.fill(c);let p=n.data.get(s.dataId).values;for(let d=0;d<u;++d)p[d]>=0&&p[d]<o&&(l[d*o+p[d]]=i);return n.makeTensorInfo([...s.shape,o],a,l)}var nX={kernelName:jo,backendName:"cpu",kernelFunc:tX};function nf(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(r.dtype==="complex64"){let s=lo({inputs:{input:r},backend:n}),a=nf({inputs:{x:s},backend:n}),o=Ec({inputs:{input:r},backend:n}),i=nf({inputs:{x:o},backend:n}),c=Jn({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),c}else return K0({backend:n,attrs:{shape:r.shape,value:0,dtype:r.dtype}})}var rX={kernelName:Pu,backendName:"cpu",kernelFunc:nf};function u2(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(r.dtype==="complex64"){let s=lo({inputs:{input:r},backend:n}),a=u2({inputs:{x:s},backend:n}),o=Ec({inputs:{input:r},backend:n}),i=nf({inputs:{x:o},backend:n}),c=Jn({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),c}else return K0({backend:n,attrs:{shape:r.shape,value:1,dtype:r.dtype}})}var sX={kernelName:bu,backendName:"cpu",kernelFunc:u2};function l2(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return tf({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=[],c=t.map(l=>{let p=tf({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),u=Ac({inputs:c,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeIntermediateTensorInfo(l)),u}var aX={kernelName:yu,backendName:"cpu",kernelFunc:l2};function oX(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]),c=a.map(y=>y[0]),u=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,m=w.computeStrides(i),g=w.getTypedArrayFromDType(s.dtype,h);o!==0&&g.fill(o);for(let y=0;y<l;y++){let x=w.indexToLoc(y,p,d).map((S,C)=>S+c[C]),k=w.locToIndex(x,f,m);g[k]=u[y]}return{dataId:n.write(g,i,s.dtype),shape:i,dtype:s.dtype}}var d2={kernelName:Ko,backendName:"cpu",kernelFunc:oX},iX=Vt((e,t)=>Math.pow(e,t)),cX=nn(Xo,iX),uX={kernelName:Xo,backendName:"cpu",kernelFunc:cX};function lX(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:s,paramsDenseValues:a,indices:o}=t,{outputRaggedRank:i}=r,c=s.map(b=>n.data.get(b.dataId).values),u=s.map(b=>b.shape),l=n.data.get(a.dataId).values,p=n.data.get(o.dataId).values,[d,h,f]=O_(c,u,l,a.shape,a.dtype,p,o.shape,i),m=d.map(b=>n.makeTensorInfo([b.length],"int32",b)),g=n.makeTensorInfo(f,a.dtype,h);return m.concat([g])}var dX={kernelName:Pf,backendName:"cpu",kernelFunc:lX};function pX(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,c=n.data.get(a.dataId).values,[u,l]=M_(o,r.shape,r.dtype,i,s.shape,c,a.shape),p=n.makeTensorInfo([u.length],"int32",u),d=n.makeTensorInfo([l.length],r.dtype,l);return[p,d]}var hX={kernelName:Of,backendName:"cpu",kernelFunc:pX};function fX(e){let{inputs:t,backend:n,attrs:r}=e,{shape:s,values:a,defaultValue:o,rowPartitionTensors:i}=t,{rowPartitionTypes:c}=r,u=n.data.get(s.dataId).values,l=n.data.get(a.dataId).values,p=n.data.get(o.dataId).values,d=i.map(g=>n.data.get(g.dataId).values),h=i.map(g=>g.shape),[f,m]=L_(u,s.shape,l,a.shape,a.dtype,p,o.shape,d,h,c);return n.makeTensorInfo(f,a.dtype,m)}var mX={kernelName:Mf,backendName:"cpu",kernelFunc:fX};function gX(e){let{backend:t,attrs:n}=e,{start:r,stop:s,dtype:a,step:o}=n,i=B0(r,s,o,a);return t.makeTensorInfo([i.length],a,i)}var bX={kernelName:vd,backendName:"cpu",kernelFunc:gX},yX=at(vu,e=>1/e),vX={kernelName:vu,backendName:"cpu",kernelFunc:yX};function xX(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r;be(s,"resizeBilinear");let c=w.computeStrides(s.shape),[u,l]=i,[p,d,h,f]=s.shape,m=n.data.get(s.dataId).values,g=new Float32Array(w.sizeFromShape([p,u,l,f])),b=[a&&u>1?d-1:d,a&&l>1?h-1:h],y=[a&&u>1?u-1:u,a&&l>1?l-1:l],v=0,x=b[0]/y[0],k=b[1]/y[1];for(let S=0;S<p;S++)for(let C=0;C<u;C++){let E;o?E=x*(C+.5)-.5:E=x*C;let $=Math.max(0,Math.floor(E)),F=E-$,A=Math.min(d-1,Math.ceil(E)),R=S*c[0]+$*c[1],T=S*c[0]+A*c[1];for(let L=0;L<l;L++){let V;o?V=k*(L+.5)-.5:V=k*L;let G=Math.max(0,Math.floor(V)),j=V-G,H=Math.min(h-1,Math.ceil(V)),Z=R+G*c[2],J=T+G*c[2],ee=R+H*c[2],re=T+H*c[2];for(let te=0;te<f;te++){let ie=m[Z+te],ne=m[J+te],le=m[ee+te],ue=m[re+te],ye=ie+(le-ie)*j,ve=ne+(ue-ne)*j,Se=ye+(ve-ye)*F;g[v++]=Se}}}return n.makeTensorInfo([p,u,l,f],"float32",g)}var wX={kernelName:ei,backendName:"cpu",kernelFunc:xX};function IX(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r;be([a,s],"resizeBilinearGrad");let i=w.computeStrides(s.shape),[c,u,l,p]=s.shape,[,d,h]=a.shape,f=new Float32Array(c*u*l*p),m=[o&&d>1?u-1:u,o&&h>1?l-1:l],g=[o&&d>1?d-1:d,o&&h>1?h-1:h],b=m[0]/g[0],y=m[1]/g[1],v=n.data.get(a.dataId).values,x=0;for(let k=0;k<c;k++){let S=k*i[0];for(let C=0;C<d;C++){let E=C*b,$=Math.floor(E),F=Math.min(Math.ceil(E),u-1),A=S+$*i[1],R=S+F*i[1],T=E-$,L=1-T;for(let V=0;V<h;V++){let G=V*y,j=Math.floor(G),H=Math.min(Math.ceil(G),l-1),Z=G-j,J=1-Z,ee=A+j*i[2],re=A+H*i[2],te=R+j*i[2],ie=R+H*i[2],ne=L*J,le=L*Z,ue=T*J,ye=T*Z;for(let ve=0;ve<p;ve++){let Se=v[x++];f[ee+ve]+=Se*ne,f[re+ve]+=Se*le,f[te+ve]+=Se*ue,f[ie+ve]+=Se*ye}}}}return n.makeTensorInfo([c,l,u,p],"float32",f)}var kX={kernelName:Bf,backendName:"cpu",kernelFunc:IX};function SX(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r;be(s,"resizeNearestNeighbor");let c=w.computeStrides(s.shape),[u,l]=i,[p,d,h,f]=s.shape,m=n.data.get(s.dataId).values,g=new Float32Array(p*u*l*f),b=[a&&u>1?d-1:d,a&&l>1?h-1:h],y=[a&&u>1?u-1:u,a&&l>1?l-1:l],v=b[0]/y[0],x=b[1]/y[1],k=0;for(let S=0;S<p;S++){let C=S*c[0];for(let E=0;E<u;E++){let $=o?v*(E+.5):v*E,F=Math.min(d-1,a?Math.round($):Math.floor($));o&&(F=Math.max(0,F));let A=C+F*c[1];for(let R=0;R<l;R++){let T=o?x*(R+.5):x*R,L=Math.min(h-1,a?Math.round(T):Math.floor(T));o&&(L=Math.max(0,L));let V=A+L*c[2];for(let G=0;G<f;G++){let j=m[V+G];g[k++]=j}}}}return n.makeTensorInfo([p,u,l,f],s.dtype,g)}var TX={kernelName:Qo,backendName:"cpu",kernelFunc:SX};function CX(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r;be([a,s],"resizeNearestNeighborGrad");let i=w.computeStrides(s.shape),c=w.computeStrides(a.shape),[u,l,p,d]=s.shape,[,h,f]=a.shape,m=new Float32Array(u*l*p*d),g=n.data.get(a.dataId).values,b=[o&&h>1?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,C=Math.ceil(k)*2+2,E=Math.ceil(S)*2+2;for(let $=0;$<u;$++){let F=$*i[0];for(let A=0;A<l;A++){let R=F+A*i[1],T=Math.floor(A*k),L=Math.floor(T-C/2);for(let V=0;V<p;V++){let G=R+V*i[2],j=Math.floor(V*S),H=Math.floor(j-E/2);for(let Z=0;Z<d;Z++){let J=0;for(let ee=0;ee<C;ee++){let re=ee+L;if(re<0||re>=h)continue;let te=F+re*c[1],ie=re*v,ne=Math.min(l-1,o?Math.round(ie):Math.floor(ie));if(A===ne)for(let le=0;le<E;le++){let ue=le+H;if(ue<0||ue>=f)continue;let ye=te+ue*c[2],ve=ue*x,Se=Math.min(p-1,o?Math.round(ve):Math.floor(ve));V===Se&&(J+=g[ye+Z])}}m[G+Z]=J}}}}return n.makeTensorInfo(s.shape,s.dtype,m)}var NX={kernelName:zf,backendName:"cpu",kernelFunc:CX};function _X(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 ds({inputs:{x:s},backend:n});let c=new Ht(s.shape,s.dtype),u=n.bufferSync(s);for(let l=0;l<c.size;l++){let p=c.indexToLoc(l),d=p.slice();i.forEach(h=>d[h]=s.shape[h]-1-d[h]),c.set(u.get(...d),...p)}return n.makeTensorInfo(c.shape,c.dtype,c.values)}var EX={kernelName:ni,backendName:"cpu",kernelFunc:_X},AX={kernelName:Ou,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:a,center:o}=t,i=n,c=w.getTypedArrayFromDType(r.dtype,w.sizeFromShape(r.shape)),[u,l,p,d]=r.shape,[h,f]=N.getImageCenter(o,l,p),m=255,g=Math.sin(s),b=Math.cos(s),y=i.data.get(r.dataId).values;for(let x=0;x<u;x++){let k=x*p*l*d;for(let S=0;S<l;S++){let C=S*(p*d);for(let E=0;E<p;E++){let $=E*d;for(let F=0;F<d;F++){let A=[u,S,E,F],R=A[2],T=A[1],L=(R-h)*b-(T-f)*g,V=(R-h)*g+(T-f)*b;L=Math.round(L+h),V=Math.round(V+f);let G=a;if(typeof a!="number"&&(F===3?G=m:G=a[F]),L>=0&&L<p&&V>=0&&V<l){let H=V*(p*d),Z=L*d,J=k+H+Z+F;G=y[J]}let j=k+C+$+F;c[j]=G}}}}return{dataId:i.write(c,r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},$X=at(ri,e=>{let t=Math.floor(e);return e-t<.5?Math.floor(e):e-t>.5?Math.ceil(e):t%2===0?t:t+1}),DX={kernelName:ri,backendName:"cpu",kernelFunc:$X};function FX(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:a}=t,{shape:o}=r,{sliceRank:i,numUpdates:c,sliceSize:u,strides:l,outputSize:p}=N.calculateShapes(a,s,o),d=!0,h=n.bufferSync(s),f=n.bufferSync(a),m=cc(h,f,o,p,u,c,i,l,0,d);return n.makeTensorInfo(o,m.dtype,m.values)}var RX={kernelName:wu,backendName:"cpu",kernelFunc:FX};function PX(e,t){let n=0,r=e.length,s=0;for(;n<r;)s=Math.floor((n+r)/2),e[s]<t?n=s+1:r=s;return r}function OX(e,t){let n=0,r=e.length,s=0;for(;n<r;)s=Math.floor((n+r)/2),e[s]<=t?n=s+1:r=s;return r}function MX(e,t,n,r,s,a){let o=w.getArrayFromDType("int32",n*s);for(let i=0;i<n;++i){let c=e.slice(i*r,(i+1)*r),u=i*s;for(let l=0;l<s;++l)o[u+l]=a==="left"?PX(c,t[l+u]):OX(c,t[l+u])}return o}function LX(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:s,values:a}=t,{side:o}=r,i=n.data.get(s.dataId).values,c=n.data.get(a.dataId).values,u=MX(i,c,s.shape[0],s.shape[1],a.shape[1],o);return n.makeTensorInfo(a.shape,"int32",u)}var zX={kernelName:Wf,backendName:"cpu",kernelFunc:LX};function BX(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t;be([r,s,a],"select");let o=r.shape.length,i=n.data.get(r.dataId).values,c=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,l=hr(s.dtype,a.dtype),p=w.makeZerosTypedArray(w.sizeFromShape(s.shape),l),d=0,h=o===0||o>1||s.shape.length===1?1:w.sizeFromShape(s.shape.slice(1));for(let f=0;f<i.length;f++)for(let m=0;m<h;m++)i[f]===1?p[d++]=c[f]:p[d++]=u[f];return n.makeTensorInfo(s.shape,l,p)}var WX={kernelName:Iu,backendName:"cpu",kernelFunc:BX},VX=N.SELU_SCALEALPHA,UX=N.SELU_SCALE,GX=at(ku,e=>e>=0?UX*e:VX*(Math.exp(e)-1)),HX={kernelName:ku,backendName:"cpu",kernelFunc:GX},qX=at(Cu,e=>e<0?-1:e>0?1:0),jX={kernelName:Cu,backendName:"cpu",kernelFunc:qX},KX=at(ai,e=>Math.sin(e)),XX={kernelName:ai,backendName:"cpu",kernelFunc:KX},YX=at(Tu,e=>Math.sinh(e)),ZX={kernelName:Tu,backendName:"cpu",kernelFunc:YX},JX=11920928955078125e-23,d1=Math.log(JX)+2,QX=at(Nu,e=>{let t=e>-d1,n=e<d1,r=Math.exp(e),s;return n?s=r:t?s=e:s=Math.log(1+r),s}),e7={kernelName:Nu,backendName:"cpu",kernelFunc:QX};function t7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r;be([s],"spaceToBatchND");let i=w.sizeFromShape(a),c=[[0,0]];c.push(...o);for(let S=1+a.length;S<s.shape.length;++S)c.push([0,0]);let u=d2.kernelFunc({inputs:{x:s},backend:n,attrs:{paddings:c,constantValue:0}}),l=N.getReshaped(u.shape,a,i,!1),p=N.getPermuted(l.length,a.length,!1),d=N.getReshapedPermuted(u.shape,a,i,!1),m=ft({inputs:{x:u},backend:n,attrs:{shape:l}}),y=Vn({inputs:{x:m},backend:n,attrs:{perm:p}}),k=ft({inputs:{x:y},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(y),k}var n7={kernelName:_u,backendName:"cpu",kernelFunc:t7};function r7(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.data.get(r.dataId).values,c=n.data.get(s.dataId).values,u=n.data.get(a.dataId).values,l=n.data.get(o.dataId).values[0],[p,d,h,f,m]=W_(i,r.shape,r.dtype,c,s.dtype,u,l);return[n.makeTensorInfo(d,r.dtype,p),n.makeTensorInfo([d[0]],s.dtype,h),n.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var s7={kernelName:xd,backendName:"cpu",kernelFunc:r7};function a7(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,c=Array.from(n.data.get(a.dataId).values),[u,l,p]=V_(i,r.shape,r.dtype,o,c);return[n.makeTensorInfo(l,r.dtype,u),n.makeTensorInfo([p.length],a.dtype,new Int32Array(p))]}var o7={kernelName:Au,backendName:"cpu",kernelFunc:a7};function i7(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,c=n.data.get(a.dataId).values,[u,l]=W0(o,r.shape,r.dtype,i,c,!0);return n.makeTensorInfo(l,r.dtype,u)}var c7={kernelName:wd,backendName:"cpu",kernelFunc:i7};function u7(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,c=n.data.get(a.dataId).values,[u,l]=W0(o,r.shape,r.dtype,i,c);return n.makeTensorInfo(l,r.dtype,u)}var l7={kernelName:Id,backendName:"cpu",kernelFunc:u7};function d7(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:a,defaultValue:o}=t,{outputShape:i}=r,{sliceRank:c,numUpdates:u,sliceSize:l,strides:p,outputSize:d}=N.calculateShapes(a,s,i),h=!1,f=n.bufferSync(s),m;switch(a.dtype){case"bool":{let g=n.bufferSync(a),b=Boolean(n.data.get(o.dataId).values[0]);m=cc(f,g,i,d,l,u,c,p,b,h);break}case"float32":{let g=n.bufferSync(a),b=n.data.get(o.dataId).values[0];m=cc(f,g,i,d,l,u,c,p,b,h);break}case"int32":{let g=n.bufferSync(a),b=n.data.get(o.dataId).values[0];m=cc(f,g,i,d,l,u,c,p,b,h);break}case"string":{let g=n.bufferSync(a),b=w.decodeString(n.data.get(o.dataId).values[0]);m=cc(f,g,i,d,l,u,c,p,b,h);break}default:throw new Error(`Unsupported type ${a.dtype}`)}return n.makeTensorInfo(i,m.dtype,m.values)}var p7={kernelName:Vf,backendName:"cpu",kernelFunc:d7};function h7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=r,i=w.parseAxisParam(o,s.shape)[0],c=N.prepareSplitSize(s,a,i),u=new Array(s.shape.length).fill(0),l=s.shape.slice();return c.map(p=>{let d=[...l];d[i]=p;let h=po({inputs:{x:s},backend:n,attrs:{begin:u,size:d}});return u[i]+=p,h})}var f7={kernelName:Eu,backendName:"cpu",kernelFunc:h7},m7={kernelName:kd,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<s.length;++i){let c=s[i];a[i]=c*c}return{dataId:r.write(a,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},g7=at(xa,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),b7={kernelName:xa,backendName:"cpu",kernelFunc:g7};function y7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,end:o,strides:i,beginMask:c,endMask:u,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r;be(s,"stridedSlice");let{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:b,begin:y,end:v,strides:x}=qt.sliceInfo(s.shape,a,o,i,c,u,l,p,d),k;if(m)k=ft({inputs:{x:s},backend:n,attrs:{shape:f}});else if(g||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let S=qt.computeOutShape(y,v,x),C=po({inputs:{x:s},backend:n,attrs:{begin:y,size:S}});k=ft({inputs:{x:C},backend:n,attrs:{shape:f}}),n.disposeIntermediateTensorInfo(C)}else{let S=n.bufferSync(s),C=G_(h,S,x,y);k=n.makeTensorInfo(f,C.dtype,C.values)}return k}var v7={kernelName:$u,backendName:"cpu",kernelFunc:y7};function x7(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:a,leftPad:o,rightPad:i,padWidth:c,preserveShortSequences:u}=r,{data:l,dataSplits:p}=t,d=n.data.get(l.dataId).values,h=n.data.get(p.dataId).values,[f,m]=V0(d,h,s,a,o,i,c,u);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",m)]}var w7={kernelName:Sd,backendName:"cpu",kernelFunc:x7};function I7(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,c=n.data.get(o.dataId).values[0],[u,l,p]=U0(i,c,s),d=l.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",l),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var k7={kernelName:Td,backendName:"cpu",kernelFunc:I7};function S7(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=G0(o,s);return n.makeTensorInfo(a.shape,"int32",i)}var T7={kernelName:Cd,backendName:"cpu",kernelFunc:S7},C7=at(pi,e=>Math.tan(e)),N7={kernelName:pi,backendName:"cpu",kernelFunc:C7},_7=at(hi,e=>Math.tanh(e)),E7={kernelName:hi,backendName:"cpu",kernelFunc:_7};function A7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reps:a}=r;be(s,"tile");let o=q_(n.bufferSync(s),a);return n.makeTensorInfo(o.shape,o.dtype,o.values)}var $7={kernelName:va,backendName:"cpu",kernelFunc:A7};function D7(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,[c,u]=K_(i,s.shape,s.dtype,a,o);return[n.makeTensorInfo(c.shape,c.dtype,c.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var F7={kernelName:Du,backendName:"cpu",kernelFunc:D7};function R7(e){let{inputs:t,attrs:n,backend:r}=e,{image:s,transforms:a}=t,{interpolation:o,fillMode:i,fillValue:c,outputShape:u}=n,[l,p,d,h]=s.shape,[f,m]=u!=null?u:[p,d],g=[l,f,m,h],b=w.computeStrides(s.shape),y=b[0],v=b[1],x=b[2],k=w.computeStrides(g),S=k[0],C=k[1],E=k[2],$=w.getTypedArrayFromDType(s.dtype,w.sizeFromShape(g));$.fill(c);let F=r.data.get(s.dataId).values,A=r.data.get(a.dataId).values;for(let T=0;T<l;++T){let L=a.shape[0]===1?A:A.subarray(T*8,T*8+8);for(let V=0;V<f;++V)for(let G=0;G<m;++G)for(let j=0;j<h;++j){let H,Z=L[6]*G+L[7]*V+1;if(Z===0)continue;let J=(L[0]*G+L[1]*V+L[2])/Z,ee=(L[3]*G+L[4]*V+L[5])/Z,re=p1(J,d,i),te=p1(ee,p,i);switch(o){case"nearest":H=B7(F,p,d,y,v,x,T,te,re,j,c);break;case"bilinear":H=W7(F,p,d,y,v,x,T,te,re,j,c);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${o}`)}let ie=T*S+V*C+G*E+j;$[ie]=H}return r.makeTensorInfo(g,s.dtype,$)}return{dataId:r.write($,g,s.dtype),shape:s.shape,dtype:s.dtype}}var P7={kernelName:Fu,backendName:"cpu",kernelFunc:R7};function p1(e,t,n){switch(n){case"reflect":return O7(e,t);case"wrap":return M7(e,t);case"nearest":return z7(e,t);case"constant":default:return L7(e,t)}}function O7(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let r=2*t;n<r&&(n=r*Math.trunc(-n/r)+n),n=n<-t?n+r:-n-1}else if(n>t-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 M7(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 L7(e,t){return e}function z7(e,t){return w.clamp(0,e,t-1)}function Ll(e,t,n,r,s,a,o,i,c,u,l){let p=o*r+i*s+c*a+u;return 0<=i&&i<t&&0<=c&&c<n?e[p]:l}function B7(e,t,n,r,s,a,o,i,c,u,l){let p=Math.round(i),d=Math.round(c);return Ll(e,t,n,r,s,a,o,p,d,u,l)}function W7(e,t,n,r,s,a,o,i,c,u,l){let p=Math.floor(i),d=Math.floor(c),h=p+1,f=d+1,m=(f-c)*Ll(e,t,n,r,s,a,o,p,d,u,l)+(c-d)*Ll(e,t,n,r,s,a,o,p,f,u,l),g=(f-c)*Ll(e,t,n,r,s,a,o,h,d,u,l)+(c-d)*Ll(e,t,n,r,s,a,o,h,f,u,l);return(h-i)*m+(i-p)*g}function V7(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:a}=t;be(a,"unique");let o=r.data.get(a.dataId).values,{outputValues:i,outputShape:c,indices:u}=X_(o,s,a.shape,a.dtype);return[r.makeTensorInfo(c,a.dtype,i),r.makeTensorInfo([u.length],"int32",u)]}var U7={kernelName:Uf,backendName:"cpu",kernelFunc:V7};function G7(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.length,i=s.shape[a],c=new Array(o-1),u=0;for(let h=0;h<o;h++)h!==a&&(c[u++]=s.shape[h]);let l=new Array(o).fill(0),p=s.shape.slice();p[a]=1;let d=new Array(i);for(let h=0;h<d.length;h++){l[a]=h;let f=po({inputs:{x:s},backend:n,attrs:{begin:l,size:p}});d[h]=ft({inputs:{x:f},backend:n,attrs:{shape:c}}),n.disposeIntermediateTensorInfo(f)}return d}var H7={kernelName:Ru,backendName:"cpu",kernelFunc:G7};function q7(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:a}=t,{numSegments:o}=r;be(s,"unsortedSegmentSum");let i=s.shape.length,c=a.shape.length,u=[],l=[],p=i-c,d=a;for(let f=0;f<p;++f){let m=tf({inputs:{input:d},backend:n,attrs:{dim:f+1}});d=m,l.push(m)}for(let f=0;f<o;++f){let m=w.createScalarValue(f,"int32"),g=n.makeTensorInfo([],"int32",m),b=b_({inputs:{a:g,b:d},backend:n}),y=ha({inputs:{x:b},backend:n,attrs:{dtype:"float32"}}),v=Km({inputs:{a:y,b:s},backend:n}),x=ap({inputs:{x:v},backend:n,attrs:{axis:0,keepDims:!1}});u.push(x),l.push(g),l.push(b),l.push(y),l.push(v),l.push(x)}let h=l2({inputs:u,backend:n,attrs:{axis:0}});return l.forEach(f=>n.disposeIntermediateTensorInfo(f)),h}var j7={kernelName:Nd,backendName:"cpu",kernelFunc:q7},K7=[V5,Eq,G5,q5,Pq,K5,Y5,J5,ej,nj,sj,oj,cj,dj,hj,gj,yj,xj,Ij,B5,Sj,Cj,_j,Aj,Fq,Mq,Dj,Aq,Rj,Oj,Mj,zj,Wj,Uj,Hj,jj,Xj,Zj,Qj,t8,r8,a8,i8,c8,l8,p8,f8,m8,g8,b8,x8,F5,I8,Lq,A8,zq,$8,Wq,M8,L8,B8,Uq,U8,H8,j8,X8,Z8,Hq,jq,$q,Q8,Pj,tK,rK,aK,R5,Xq,Zq,iK,Qq,uK,pK,fK,bK,vK,wK,IK,t5,SK,CK,_K,AK,DK,RK,OK,r5,LK,WK,HK,a5,i5,KK,ZK,eX,u5,nX,sX,aX,d2,uX,O5,p5,dX,hX,mX,bX,Dq,pv,vX,M5,L5,z5,wX,kX,TX,NX,EX,AX,DX,x5,RX,zX,WX,HX,I5,jX,XX,ZX,k5,UK,e7,n7,s7,o7,c7,l7,p7,f7,C5,m7,_5,b7,v7,w7,k7,T7,D5,y8,N7,E7,$7,F7,P7,l5,U7,H7,j7,rX];for(let e of K7)_d(e);var p2={};Ae(p2,{assertNotComplex:()=>Yu,bindCanvasToFramebuffer:()=>aY,bindColorTextureToFramebuffer:()=>kh,bindTextureToProgramUniformSampler:()=>_2,bindTextureUnit:()=>T2,bindVertexBufferToProgramAttribute:()=>fv,callAndCheck:()=>me,canBeRepresented:()=>f2,createFragmentShader:()=>b2,createFramebuffer:()=>S2,createProgram:()=>y2,createStaticIndexBuffer:()=>w2,createStaticVertexBuffer:()=>x2,createTexture:()=>I2,createVertexShader:()=>g2,getBatchDim:()=>ho,getExtensionOrThrow:()=>zl,getFramebufferErrorMessage:()=>E2,getMaxTexturesInShader:()=>F2,getNumChannels:()=>rY,getProgramUniformLocation:()=>N2,getProgramUniformLocationOrThrow:()=>C2,getRowsCols:()=>fo,getShapeAs3D:()=>Wl,getTextureShapeFromLogicalShape:()=>$2,getWebGLDisjointQueryTimerVersion:()=>R2,getWebGLErrorMessage:()=>m2,getWebGLMaxTextureSize:()=>D2,hasExtension:()=>lr,isCapableOfRenderingToFloatTexture:()=>P2,isDownloadFloatTextureEnabled:()=>O2,isReshapeFree:()=>ad,isWebGLFenceEnabled:()=>M2,isWebGLVersionEnabled:()=>gv,linkProgram:()=>v2,logShaderSourceAndInfoLog:()=>Y0,resetMaxTextureSize:()=>oY,resetMaxTexturesInShader:()=>iY,unbindColorTextureFromFramebuffer:()=>mv,unbindTextureUnit:()=>sY,validateFramebuffer:()=>Bl,validateProgram:()=>Ih,validateTextureSize:()=>k2});var Ha={},fh={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function h2(e,t){Ha[e]=t}function Kr(e,t){if(!(e in Ha)||t!=null){let r=Y7(e,t);if(r!==null)Ha[e]=r;else return console.log("Could not get context for WebGL version",e),null}let n=Ha[e];return n==null||n.isContextLost()?(delete Ha[e],Kr(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),Ha[e])}function X7(e){if(typeof OffscreenCanvas!="undefined"&&e===2)return new OffscreenCanvas(300,150);if(typeof document!="undefined")return document.createElement("canvas");throw new Error("Cannot create a canvas in this context")}function Y7(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=t==null?X7(e):t;return n.addEventListener("webglcontextlost",r=>{r.preventDefault(),delete Ha[e]},!1),q().getBool("SOFTWARE_WEBGL_ENABLED")&&(fh.failIfMajorPerformanceCaveat=!1),e===1?n.getContext("webgl",fh)||n.getContext("experimental-webgl",fh):n.getContext("webgl2",fh)}var sd;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(sd||(sd={}));var ur;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(ur||(ur={}));var cn;(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"})(cn||(cn={}));function op(e,t){return[t,e]}function Z7(e,t){return e*t}function mh(e){let t=w.sizeFromShape(e),n=Math.ceil(t/4);return w.sizeToSquarishShape(n)}function Xu(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function J7(e,t){let[n,r]=Xu(e,t);return n*r*4}function X0(e,t){let n=e,r,s,a,o,i,c,u,l,p,d;return q().getNumber("WEBGL_VERSION")===2?(r=n.R32F,s=n.R16F,a=n.RGBA16F,o=n.RGBA32F,i=n.RED,u=4,l=1,p=n.HALF_FLOAT,d=n.FLOAT,c=n.RGBA8):(r=e.RGBA,s=e.RGBA,a=e.RGBA,o=n.RGBA,i=e.RGBA,u=4,l=4,p=t!=null?t.HALF_FLOAT_OES:null,d=e.FLOAT,c=e.RGBA),{internalFormatFloat:r,internalFormatHalfFloat:s,internalFormatPackedHalfFloat:a,internalFormatPackedFloat:o,textureFormatFloat:i,downloadTextureFormat:c,downloadUnpackNumChannels:u,defaultNumChannels:l,textureTypeHalfFloat:p,textureTypeFloat:d}}function me(e,t){let n=t();return q().getBool("DEBUG")&&Q7(e),n}function Q7(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+m2(e,t))}var eY=596e-10,tY=65504;function f2(e){return!!(q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||eY<Math.abs(e)&&Math.abs(e)<tY)}function m2(e,t){switch(t){case e.NO_ERROR:return"NO_ERROR";case e.INVALID_ENUM:return"INVALID_ENUM";case e.INVALID_VALUE:return"INVALID_VALUE";case e.INVALID_OPERATION:return"INVALID_OPERATION";case e.INVALID_FRAMEBUFFER_OPERATION:return"INVALID_FRAMEBUFFER_OPERATION";case e.OUT_OF_MEMORY:return"OUT_OF_MEMORY";case e.CONTEXT_LOST_WEBGL:return"CONTEXT_LOST_WEBGL";default:return`Unknown error code ${t}`}}function zl(e,t){return Ps(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function g2(e,t){let n=Ps(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(me(e,()=>e.shaderSource(n,t)),me(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 b2(e,t){let n=Ps(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(me(e,()=>e.shaderSource(n,t)),me(e,()=>e.compileShader(n)),q().get("ENGINE_COMPILE_ONLY"))return n;if(e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw Y0(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var nY=/ERROR: [0-9]+:([0-9]+):/g;function Y0(e,t){let n=nY.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;p<o.length;p++)i=Math.max(o[p].length,i);let c=o.slice(0,r-1),u=o.slice(r-1,r),l=o.slice(r);console.log(c.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${w.rightPad(u[0],i)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(l.join(`
|
|
`))}function y2(e){return Ps(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function v2(e,t){if(me(e,()=>e.linkProgram(t)),!q().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function Ih(e,t){if(me(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function x2(e,t){let n=Ps(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),me(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function w2(e,t){let n=Ps(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return me(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),me(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function rY(){return q().getNumber("WEBGL_VERSION")===2?1:4}function I2(e){return Ps(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function k2(e,t){let n=q().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 S2(e){return Ps(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function fv(e,t,n,r,s,a,o){let i=e.getAttribLocation(t,n);return i===-1?!1:(me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,r)),me(e,()=>e.vertexAttribPointer(i,s,e.FLOAT,!1,a,o)),me(e,()=>e.enableVertexAttribArray(i)),!0)}function T2(e,t,n){A2(e,n),me(e,()=>e.activeTexture(e.TEXTURE0+n)),me(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function sY(e,t){A2(e,t),me(e,()=>e.activeTexture(e.TEXTURE0+t)),me(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function C2(e,t,n){return Ps(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function N2(e,t,n){return e.getUniformLocation(t,n)}function _2(e,t,n,r){me(e,()=>T2(e,t,r)),me(e,()=>e.uniform1i(n,r))}function aY(e){me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),me(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),me(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function kh(e,t,n){me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),me(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function mv(e,t){me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),me(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Bl(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+E2(e,t))}function E2(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 Ps(e,t,n){let r=me(e,()=>t());if(r==null)throw new Error(n);return r}function A2(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,r=t+e.TEXTURE0;if(r<e.TEXTURE0||r>n){let s=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${s}.`)}}function ho(e,t=2){return w.sizeFromShape(e.slice(0,e.length-t))}function fo(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 Wl(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[ho(e),...fo(e)]),t}function $2(e,t=!1){let n=q().getNumber("WEBGL_MAX_TEXTURE_SIZE"),r=q().getNumber("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE");r===1/0&&q().getBool("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE")&&(r=n/2),t&&(n=n*2,r=r*2,e=e.map((i,c)=>c>=e.length-2?w.nearestLargerEven(e[c]):e[c]),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=ho(e),c=2,u=2;e.length&&([c,u]=fo(e)),s=i*(c/2)*(u/2),a=w.sizeToSquarishShape(s).map(l=>l*2)}else a=w.sizeToSquarishShape(s);return a}function gh(e){return e%2===0}function ad(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.slice(-1)[0],r=t.slice(-1)[0];if(n===r||gh(n)&&gh(r)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&gh(e[0])&&gh(t[0])}var Sh,Th;function D2(e){if(Sh==null){let t=Kr(e);Sh=t.getParameter(t.MAX_TEXTURE_SIZE)}return Sh}function oY(){Sh=null}function iY(){Th=null}function F2(e){if(Th==null){let t=Kr(e);Th=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Th)}function R2(e){if(e===0)return 0;let t,n=Kr(e);return lr(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:lr(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function lr(e,t){return e.getExtension(t)!=null}function gv(e){try{if(Kr(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function P2(e){if(e===0)return!1;let t=Kr(e);if(e===1){if(!lr(t,"OES_texture_float"))return!1}else if(!lr(t,"EXT_color_buffer_float"))return!1;return bv(t)}function O2(e){if(e===0)return!1;let t=Kr(e);if(e===1){if(!lr(t,"OES_texture_float")||!lr(t,"WEBGL_color_buffer_float"))return!1}else{if(lr(t,"EXT_color_buffer_float"))return bv(t);let r="EXT_color_buffer_half_float";if(lr(t,r)){let s=t.getExtension(r);return cY(t,s)}return!1}return bv(t)}function bv(e){let t=X0(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,r,s,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 cY(e,t){let n=X0(e,t),r=e.createTexture();e.bindTexture(e.TEXTURE_2D,r);let s=1,a=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,s,a,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 M2(e){return e!==2?!1:Kr(e).fenceSync!=null}function Yu(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 we=q();we.registerFlag("HAS_WEBGL",()=>we.getNumber("WEBGL_VERSION")>0);we.registerFlag("WEBGL_VERSION",()=>gv(2)?2:gv(1)?1:0);we.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);we.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>we.get("WEBGL_VERSION")===2);we.registerFlag("WEBGL_CPU_FORWARD",()=>!0);we.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);we.registerFlag("WEBGL_PACK",()=>we.getBool("HAS_WEBGL"));we.registerFlag("WEBGL_PACK_NORMALIZATION",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_CLIP",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_PACK_REDUCE",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_LAZILY_UNPACK",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_CONV_IM2COL",()=>we.getBool("WEBGL_PACK"));we.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>D2(we.getNumber("WEBGL_VERSION")));we.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>F2(we.getNumber("WEBGL_VERSION")));we.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=we.getNumber("WEBGL_VERSION");return e===0?0:R2(e)});we.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>we.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!$d.isMobile());we.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>P2(we.getNumber("WEBGL_VERSION")));we.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>we.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:we.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));we.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>O2(we.getNumber("WEBGL_VERSION")));we.registerFlag("WEBGL_FENCE_API_ENABLED",()=>M2(we.getNumber("WEBGL_VERSION")));we.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>we.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);we.registerFlag("WEBGL_DELETE_TEXTURE_THRESHOLD",()=>-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_DELETE_TEXTURE_THRESHOLD must be -1 (indicating never delete) or at least 0, but got ${e}.`)});we.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>$d.isMobile()?1:-1,e=>{if(e<0&&e!==-1)throw new Error(`WEBGL_FLUSH_THRESHOLD must be -1 (indicating never manual flush) or at least 0, but got ${e}.`)});we.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);we.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);we.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);we.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);we.registerFlag("WEBGL_EXP_CONV",()=>!1);we.registerFlag("SOFTWARE_WEBGL_ENABLED",()=>we.getBool("IS_TEST"));we.registerFlag("WEBGL_MAX_SIZE_FOR_NARROW_TEXTURE",()=>1/0);we.registerFlag("WEBGL_AUTO_SQUARIFY_NARROW_TEXTURE_SHAPE",()=>!1);we.registerFlag("WEBGL2_ISNAN_CUSTOM",()=>!1);function $n(){let e,t,n,r,s,a,o,i,c,u;return q().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",r="in",s="texture",a="outputColor",o="out vec4 outputColor;",i=q().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)
|
|
`:"",c="",u=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(e="",t="attribute",n="varying",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));
|
|
}
|
|
`,c=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,u=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:e,attribute:t,varyingVs:n,varyingFs:r,texture2D:s,output:a,defineOutput:o,defineSpecialNaN:i,defineSpecialInf:c,defineRound:u}}function Ii(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 Xm(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 uY(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 lY(e,t,n="index"){let r=e.map((a,o)=>o),s=uY(r,t);return s.map((a,o)=>{let i=`int ${e[o]} = ${n} / ${s[o]}`,c=o===s.length-1?`int ${e[o+1]} = ${n} - ${e[o]} * ${s[o]}`:`index -= ${e[o]} * ${s[o]}`;return`${i}; ${c};`}).join("")}function Z0(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 J0(){return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;
|
|
}
|
|
`}var L2=`
|
|
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:z2}=N;function dY(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:m}=Q0(n.packedInputs,h.shapeInfo.logicalShape,h.shapeInfo.texShape);switch(m.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=>pY(h,t,n.packedInputs,n.enableShapeUniforms)).join(`
|
|
`),o=t.texShape,i=$n(),c=mY(i),u,l,p=yY(i);return t.isPacked?(u=hY(t.logicalShape,o,n.enableShapeUniforms),l=bY(i)):(u=fY(t.logicalShape,o,n.enableShapeUniforms),l=gY(i)),n.packedInputs&&(p+=IY),[p,c,l,s,u,a,n.userCode].join(`
|
|
`)}function Zu(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return RY(e,t);case 1:return OY(e,t);case 2:return LY(e,t);case 3:return BY(e,t);case 4:return VY(e,t);case 5:return UY(e);case 6:return GY(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function B2(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return FY(e);case 1:return PY(e,t);case 2:return MY(e,t);case 3:return zY(e,t);default:return WY(e,t)}}function pY(e,t,n=!1,r){let s="";n?s+=B2(e,r):s+=Zu(e,r);let a=e.shapeInfo.logicalShape,o=t.logicalShape;return a.length<=o.length&&(n?s+=HY(e,t):s+=qY(e,t)),s}function hY(e,t,n){switch(e.length){case 0:return W2();case 1:return kY(e,t,n);case 2:return $Y(e,t,n);case 3:return TY(e,t,n);default:return NY(e,t,n)}}function fY(e,t,n){switch(e.length){case 0:return W2();case 1:return SY(e,t,n);case 2:return DY(e,t,n);case 3:return CY(e,t,n);case 4:return _Y(e,t,n);case 5:return EY(e,t);case 6:return AY(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function mY(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function gY(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function bY(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function yY(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);
|
|
}
|
|
|
|
${vY}
|
|
${xY}
|
|
${wY}
|
|
`}var vY=`
|
|
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);
|
|
}
|
|
`,xY=`
|
|
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);
|
|
}
|
|
`,wY=`
|
|
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);
|
|
}
|
|
`,IY=`
|
|
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 W2(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function kY(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 SY(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 TY(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 CY(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;
|
|
${Xm(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`;let r=Ii(["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 NY(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="",c="b, r, c";for(let u=2;u<e.length-1;u++)o*=e[e.length-u-1],i=`
|
|
int b${u} = index / ${o};
|
|
index -= b${u} * ${o};
|
|
`+i,c=`b${u}, `+c;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${r[0]}, ${r[1]}));
|
|
int index = resTexRC.x * ${r[1]} + resTexRC.y;
|
|
|
|
${i}
|
|
|
|
int b = index / ${a};
|
|
index -= b * ${a};
|
|
|
|
int r = 2 * (index / ${s});
|
|
int c = imod(index, ${s}) * 2;
|
|
|
|
return ivec${e.length}(${c});
|
|
}
|
|
`}function _Y(e,t,n){if(n)return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
${Xm(["r","c","d","d2"],e)}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`;let r=Ii(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${r}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function EY(e,t){let n=Ii(["r","c","d","d2","d3"],e);return`
|
|
ivec5 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx * vec2(${t[0]},
|
|
${t[1]}));
|
|
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec5 outShape = ivec5(r, c, d, d2, d3);
|
|
return outShape;
|
|
}
|
|
`}function AY(e,t){let n=Ii(["r","c","d","d2","d3","d4"],e);return`
|
|
ivec6 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
|
|
${n}
|
|
|
|
ivec6 result = ivec6(r, c, d, d2, d3, d4);
|
|
return result;
|
|
}
|
|
`}function $Y(e,t,n){let r=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(w.arraysEqual(e,t))return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${r[0]}, ${r[1]}));
|
|
}
|
|
`;let s=Math.ceil(e[1]/2);return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${r[0]}, ${r[1]}));
|
|
|
|
int index = resTexRC.x * ${r[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${s});
|
|
int c = imod(index, ${s}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function DY(e,t,n){return w.arraysEqual(e,t)?n?`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(outTexShape[0], outTexShape[1]));
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
return ivec2(resultUV.yx * vec2(${t[0]}, ${t[1]}));
|
|
}
|
|
`:e[1]===1?n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(index, 0);
|
|
}
|
|
`:e[0]===1?n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
return ivec2(0, index);
|
|
}
|
|
`:n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(outTexShape[0], outTexShape[1]));
|
|
int index = resTexRC.x * outTexShape[1] + resTexRC.y;
|
|
int r = index / outShape[1];
|
|
int c = index - r * outShape[1];
|
|
return ivec2(r, c);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
int r = index / ${e[1]};
|
|
int c = index - r * ${e[1]};
|
|
return ivec2(r, c);
|
|
}
|
|
`}function ki(e){return`offset${e}`}function FY(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),r=$n();return`
|
|
vec4 ${n}() {
|
|
return ${r.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function RY(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`float ${r}() {return ${n};}`;let[s,a]=e.shapeInfo.texShape;if(s===1&&a===1)return`
|
|
float ${r}() {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let o=ki(n);if(t)return`
|
|
float ${r}() {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let[i,c]=e.shapeInfo.texShape;return`
|
|
float ${r}() {
|
|
vec2 uv = uvFromFlat(${i}, ${c}, ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function PY(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=e.shapeInfo.texShape,a=$n();if(t)return`
|
|
vec4 ${r}(int index) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom1D(
|
|
packedTexShape[0], packedTexShape[1], index);
|
|
return ${a.texture2D}(${n}, uv);
|
|
}
|
|
`;let o=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];return`
|
|
vec4 ${r}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${o[0]}, ${o[1]}, index);
|
|
return ${a.texture2D}(${n}, uv);
|
|
}
|
|
`}function OY(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int index) {
|
|
${Ju(e)}
|
|
}
|
|
`;let s=e.shapeInfo.texShape,a=s[0],o=s[1];if(o===1&&a===1)return`
|
|
float ${r}(int index) {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let i=ki(n);return o===1?t?`
|
|
float ${r}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / float(${n}TexShape[0]));
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${i}) + 0.5) / ${a}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:a===1?t?`
|
|
float ${r}(int index) {
|
|
vec2 uv = vec2((float(index + ${i}) + 0.5) / float(${n}TexShape[1]), 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int index) {
|
|
vec2 uv = vec2((float(index + ${i}) + 0.5) / ${o}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:t?`
|
|
float ${r}(int index) {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index + ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int index) {
|
|
vec2 uv = uvFromFlat(${a}, ${o}, index + ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function MY(e,t){let n=e.shapeInfo.logicalShape,r=e.name,s="get"+r.charAt(0).toUpperCase()+r.slice(1),a=e.shapeInfo.texShape,o=a[0],i=a[1],c=$n();if(a!=null&&w.arraysEqual(n,a))return t?`
|
|
vec4 ${s}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
|
|
return ${c.texture2D}(${r}, uv);
|
|
}
|
|
`:`
|
|
vec4 ${s}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${i}.0, ${o}.0);
|
|
|
|
return ${c.texture2D}(${r}, uv);
|
|
}
|
|
`;if(t)return`
|
|
vec4 ${s}(int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${r}TexShape[0]) / 2.0), ceil(float(${r}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${r}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);
|
|
return ${c.texture2D}(${r}, uv);
|
|
}
|
|
`;let u=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)],l=Math.ceil(n[1]/2);return`
|
|
vec4 ${s}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${l}, ${u[0]}, ${u[1]}, row, col);
|
|
return ${c.texture2D}(${r}, uv);
|
|
}
|
|
`}function LY(e,t){let n=e.shapeInfo.logicalShape,r=e.name,s="get"+r.charAt(0).toUpperCase()+r.slice(1),a=e.shapeInfo.texShape;if(a!=null&&w.arraysEqual(n,a)){if(t)return`
|
|
float ${s}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`;let d=a[0],h=a[1];return`
|
|
float ${s}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${d}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`}let{newShape:o,keptDims:i}=w.squeezeShape(n),c=o;if(c.length<n.length){let d=Qu(e,c),h=["row","col"];return`
|
|
${Zu(d,t)}
|
|
float ${s}(int row, int col) {
|
|
return ${s}(${el(h,i)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${s}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${n[1]}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let u=a[0],l=a[1],p=ki(r);return l===1?t?`
|
|
float ${s}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${p}), vec3(${r}Shape[1], 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / float(${r}TexShape[0]));
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${p}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:u===1?t?`
|
|
float ${s}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${p}), vec3(${r}Shape[1], 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / float(${r}TexShape[1]), 0.5);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${p}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${l}.0, 0.5);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:t?`
|
|
float ${s}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${r}Shape[1] + col + ${p};
|
|
vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${n[1]} + col + ${p};
|
|
vec2 uv = uvFromFlat(${u}, ${l}, index);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`}function zY(e,t){let n=e.shapeInfo.logicalShape,r=e.name,s="get"+r.charAt(0).toUpperCase()+r.slice(1),a=e.shapeInfo.texShape,o=[Math.ceil(a[0]/2),Math.ceil(a[1]/2)];if(n[0]===1){let d=n.slice(1),h=[1,2],f=Qu(e,d),m=["b","row","col"];return`
|
|
${B2(f,t)}
|
|
vec4 ${s}(int b, int row, int col) {
|
|
return ${s}(${el(m,h)});
|
|
}
|
|
`}let i=$n();if(t)return`
|
|
vec4 ${s}(int b, int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${r}TexShape[0]) / 2.0), ceil(float(${r}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${r}Shape[2]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${r}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom3D(
|
|
packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);
|
|
return ${i.texture2D}(${r}, uv);
|
|
}
|
|
`;let c=o[0],u=o[1],l=Math.ceil(n[2]/2),p=l*Math.ceil(n[1]/2);return`
|
|
vec4 ${s}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${c}, ${u}, ${p}, ${l}, b, row, col);
|
|
return ${i.texture2D}(${r}, uv);
|
|
}
|
|
`}function BY(e,t){let n=e.shapeInfo.logicalShape,r=e.name,s="get"+r.charAt(0).toUpperCase()+r.slice(1),a=n[1]*n[2],o=n[2],{newShape:i,keptDims:c}=w.squeezeShape(n),u=i;if(u.length<n.length){let m=Qu(e,u),g=["row","col","depth"];return`
|
|
${Zu(m,t)}
|
|
float ${s}(int row, int col, int depth) {
|
|
return ${s}(${el(g,c)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${s}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${a}, ${o}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let l=e.shapeInfo.texShape,p=l[0],d=l[1],h=e.shapeInfo.flatOffset;if(d===a&&h==null)return t?`
|
|
float ${s}(int row, int col, int depth) {
|
|
int stride1 = ${r}Shape[2];
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(stride1, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${o}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${d}.0, ${p}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`;if(d===o&&h==null)return t?`
|
|
float ${s}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${r}Shape[1], 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${n[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${d}.0, ${p}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`;let f=ki(r);return t?`
|
|
float ${s}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int stride0 = ${r}Shape[1] * ${r}Shape[2];
|
|
int stride1 = ${r}Shape[2];
|
|
int index = row * stride0 + col * stride1 + depth + ${f};
|
|
vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a} + col * ${o} + depth + ${f};
|
|
vec2 uv = uvFromFlat(${p}, ${d}, index);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`}function WY(e,t){let n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=$n();if(t)return`
|
|
vec4 ${r}(int b2, int b, int row, int col) {
|
|
int valuesPerRow = int(ceil(float(${n}Shape[3]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${n}Shape[2]) / 2.0));
|
|
int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);
|
|
texelsInBatch *= ${n}Shape[1];
|
|
index = b2 * texelsInBatch + index;
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
int texR = index / packedTexShape[1];
|
|
int texC = index - texR * packedTexShape[1];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`;let a=e.shapeInfo.logicalShape,o=a.length,i=e.shapeInfo.texShape,c=[Math.ceil(i[0]/2),Math.ceil(i[1]/2)],u=c[0],l=c[1],p=Math.ceil(a[o-1]/2),d=p*Math.ceil(a[o-2]/2),h="int b, int row, int col",f=`b * ${d} + (row / 2) * ${p} + (col / 2)`;for(let m=2;m<o-1;m++)h=`int b${m}, `+h,d*=a[o-m-1],f=`b${m} * ${d} + `+f;return`
|
|
vec4 ${r}(${h}) {
|
|
int index = ${f};
|
|
int texR = index / ${l};
|
|
int texC = index - texR * ${l};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${l}, ${u});
|
|
return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`}function VY(e,t){let n=e.shapeInfo.logicalShape,r=e.name,s="get"+r.charAt(0).toUpperCase()+r.slice(1),a=n[3],o=n[2]*a,i=n[1]*o,{newShape:c,keptDims:u}=w.squeezeShape(n);if(c.length<n.length){let y=Qu(e,c),v=["row","col","depth","depth2"];return`
|
|
${Zu(y,t)}
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
return ${s}(${el(v,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${i}, ${o}, ${a}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let l=e.shapeInfo.flatOffset,p=e.shapeInfo.texShape,d=p[0],h=p[1],f=`int stride2 = ${r}Shape[3];`,m=`int stride1 = ${r}Shape[2] * stride2;`,g=`int stride0 = ${r}Shape[1] * stride1;`;if(h===i&&l==null)return t?`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
${f}
|
|
${m}
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(stride1, stride2, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${o}, ${a}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${d}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`;if(h===a&&l==null)return t?`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${r}Shape[1] * ${r}Shape[2], ${r}Shape[2], 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${r}TexShape[1], ${r}TexShape[0]);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${n[1]*n[2]}, ${n[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${d}.0);
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`;let b=ki(r);return t?`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
${f}
|
|
${m}
|
|
${g}
|
|
int index = row * stride0 + col * stride1 +
|
|
depth * stride2 + depth2;
|
|
vec2 uv = uvFromFlat(${r}TexShape[0], ${r}TexShape[1], index + ${b});
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`:`
|
|
float ${s}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${i} + col * ${o} +
|
|
depth * ${a} + depth2;
|
|
vec2 uv = uvFromFlat(${d}, ${h}, index + ${b});
|
|
return sampleTexture(${r}, uv);
|
|
}
|
|
`}function UY(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),s=t[4],a=t[3]*s,o=t[2]*a,i=t[1]*o,{newShape:c,keptDims:u}=w.squeezeShape(t);if(c.length<t.length){let m=Qu(e,c),g=["row","col","depth","depth2","depth3"];return`
|
|
${Zu(m)}
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${r}(${el(g,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${i}, ${o}, ${a}, ${s})) +
|
|
depth3;
|
|
${Ju(e)}
|
|
}
|
|
`;let l=e.shapeInfo.flatOffset,p=e.shapeInfo.texShape,d=p[0],h=p[1];if(h===i&&l==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${o}, ${a}, ${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===s&&l==null)return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${d}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=ki(n);return`
|
|
float ${r}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${i} + col * ${o} + depth * ${a} +
|
|
depth2 * ${s} + depth3 + ${f};
|
|
vec2 uv = uvFromFlat(${d}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function GY(e){let t=e.shapeInfo.logicalShape,n=e.name,r="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:s,keptDims:a}=w.squeezeShape(t);if(s.length<t.length){let g=Qu(e,s),b=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${Zu(g)}
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${r}(${el(b,a)});
|
|
}
|
|
`}let o=t[5],i=t[4]*o,c=t[3]*i,u=t[2]*c,l=t[1]*u;if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${l}, ${u}, ${c}, ${i})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${o}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let p=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,h=d[0],f=d[1];if(f===l&&p==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${u}, ${c}, ${i}, ${o})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(f===o&&p==null)return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${f}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=ki(n);return`
|
|
float ${r}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${l} + col * ${u} + depth * ${c} +
|
|
depth2 * ${i} + depth3 * ${o} + depth4 + ${m};
|
|
vec2 uv = uvFromFlat(${h}, ${f}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Ju(e){let t=e.name,n=w.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function HY(e,t){let n=e.name,r=n.charAt(0).toUpperCase()+n.slice(1),s="get"+r+"AtOutCoords",a=e.shapeInfo.logicalShape.length,o=t.logicalShape.length,i=z2(e.shapeInfo.logicalShape,t.logicalShape),c=mt(o),u=o-a,l,p=["x","y","z","w","u","v"];a===0?l="":o<2&&i.length>=1?l="coords = 0;":l=i.map(y=>`coords.${p[y+u]} = 0;`).join(`
|
|
`);let d="";o<2&&a>0?d="coords":d=e.shapeInfo.logicalShape.map((y,v)=>`coords.${p[v+u]}`).join(", ");let h="return outputValue;",m=w.sizeFromShape(e.shapeInfo.logicalShape)===1,b=w.sizeFromShape(t.logicalShape)===1;if(a===1&&!m&&!b)h=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(m&&!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}() {
|
|
${c} coords = getOutputCoords();
|
|
${l}
|
|
vec4 outputValue = get${r}(${d});
|
|
${h}
|
|
}
|
|
`}function qY(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,c=t.logicalShape.length;if(!e.shapeInfo.isUniform&&i===c&&e.shapeInfo.flatOffset==null&&w.arraysEqual(o,a))return`
|
|
float ${s}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let u=mt(c),l=z2(e.shapeInfo.logicalShape,t.logicalShape),p=c-i,d,h=["x","y","z","w","u","v"];i===0?d="":c<2&&l.length>=1?d="coords = 0;":d=l.map(m=>`coords.${h[m+p]} = 0;`).join(`
|
|
`);let f="";return c<2&&i>0?f="coords":f=e.shapeInfo.logicalShape.map((m,g)=>`coords.${h[g+p]}`).join(", "),`
|
|
float ${s}() {
|
|
${u} coords = getOutputCoords();
|
|
${d}
|
|
return get${r}(${f});
|
|
}
|
|
`}function mt(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 Q0(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,c=!e&&a>1&&!w.arraysEqual(t,n)&&r.length<a||o;return{useSqueezeShape:c,uniformShape:c?i:t,keptDims:s}}function Qu(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function el(e,t){return t.map(n=>e[n]).join(", ")}function jY(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=dY(s,o,t),c=b2(e.gl,i),u=e.createProgram(c);return q().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:c,source:i,webGLProgram:u,inShapeInfos:a,outShapeInfo:o,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:c,source:i,webGLProgram:u,inShapeInfos:a,outShapeInfo:o},V2(e,t,u))}function V2(e,t,n){let r={},s={},a={},o=[],i,c,u,l=null,p=null;p=e.getUniformLocation(n,"NAN",!1),q().getNumber("WEBGL_VERSION")===1&&(l=e.getUniformLocation(n,"INFINITY",!1));let d=!1;for(let h=0;h<t.variableNames.length;h++){let f=t.variableNames[h];r[f]=e.getUniformLocation(n,f,d),r[`offset${f}`]=e.getUniformLocation(n,`offset${f}`,d),t.enableShapeUniforms&&(s[`${f}Shape`]=e.getUniformLocation(n,`${f}Shape`,d),a[`${f}TexShape`]=e.getUniformLocation(n,`${f}TexShape`,d))}return t.enableShapeUniforms&&(i=e.getUniformLocation(n,"outShape",d),u=e.getUniformLocation(n,"outShapeStrides",d),c=e.getUniformLocation(n,"outTexShape",d)),t.customUniforms&&t.customUniforms.forEach((h,f)=>{o[f]=e.getUniformLocation(n,h.name,d)}),{uniformLocations:r,customUniformLocations:o,infLoc:l,nanLoc:p,inShapesLocations:s,inTexShapesLocations:a,outShapeLocation:i,outShapeStridesLocation:u,outTexShapeLocation:c}}function h1(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,c=a.isUniform?null:a.texData.texShape;if(!w.arraysEqual(i,c))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${i} and ${c} must match`)})}function KY(e,t,n,r,s){t.program.enableShapeUniforms||(h1(t.inShapeInfos,n),h1([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),q().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((c,u)=>{let l=t.program.variableNames[u],p=t.uniformLocations[l],d=t.uniformLocations[`offset${l}`],h=t.inShapesLocations[`${l}Shape`],f=t.inTexShapesLocations[`${l}TexShape`];if(h){let{uniformShape:m}=Q0(t.program.packedInputs,c.shape,c.texData.texShape);switch(m.length){case 1:e.gl.uniform1iv(h,new Int32Array(m));break;case 2:e.gl.uniform2iv(h,new Int32Array(m));break;case 3:e.gl.uniform3iv(h,new Int32Array(m));break;case 4:e.gl.uniform4iv(h,new Int32Array(m));break;default:break}}if(f&&e.gl.uniform2i(f,c.texData.texShape[0],c.texData.texShape[1]),p!=null){if(c.isUniform){if(w.sizeFromShape(c.shape)<2)e.gl.uniform1f(p,c.uniformValues[0]);else{let m=c.uniformValues;m instanceof Float32Array||(m=new Float32Array(m)),e.gl.uniform1fv(p,m)}return}c.texData.slice!=null&&d!=null&&e.gl.uniform1i(d,c.texData.slice.flatOffset),e.setInputMatrixTexture(c.texData.texture.texture,p,u)}});let i=t.outShapeLocation;if(i)switch(r.shape.length){case 1:e.gl.uniform1iv(i,new Int32Array(r.shape));break;case 2:e.gl.uniform2iv(i,new Int32Array(r.shape));break;case 3:e.gl.uniform3iv(i,new Int32Array(r.shape));break;case 4:e.gl.uniform4iv(i,new Int32Array(r.shape));break;default:break}if(t.outShapeStridesLocation){let c=w.computeStrides(r.shape);switch(r.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(c));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(c));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(c));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,r.texData.texShape[0],r.texData.texShape[1]),t.program.customUniforms&&s&&t.program.customUniforms.forEach((c,u)=>{let l=t.customUniformLocations[u],p=s[u];if(c.type==="float")e.gl.uniform1fv(l,p);else if(c.type==="vec2")e.gl.uniform2fv(l,p);else if(c.type==="vec3")e.gl.uniform3fv(l,p);else if(c.type==="vec4")e.gl.uniform4fv(l,p);else if(c.type==="int")e.gl.uniform1iv(l,p);else if(c.type==="ivec2")e.gl.uniform2iv(l,p);else if(c.type==="ivec3")e.gl.uniform3iv(l,p);else if(c.type==="ivec4")e.gl.uniform4iv(l,p);else throw Error(`uniform type ${c.type} is not supported yet.`)}),e.executeProgram()}function XY(e,t,n){let r="";t.concat(n).forEach(o=>{let i=o.texData!=null&&o.texData.slice!=null&&o.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!o.isUniform){let c=o.texData.texShape,{useSqueezeShape:u,uniformShape:l,keptDims:p}=Q0(e.packedInputs,o.shape,c),d="",h="",f="";if(l.length===1&&e.packedInputs){let k=[Math.ceil(c[0]/2),Math.ceil(c[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]===c[1]}_${k[k.length-1]===c[1]}`}let m=o.shape.length,g=l.length===2&&w.arraysEqual(o.shape,c),b=w.sizeFromShape(o.shape)===1,y=N.getBroadcastDims(o.shape,n.shape),v=!e.packedInputs&&m===n.shape.length&&w.arraysEqual(c,n.texData.texShape),x=e.packedInputs||l.length>2?"":`${c[0]>1}_${c[1]>1}`;r+=`${m}_${v}_${u?p:""}_${l.length}_${b}_${y}_${g}_${d}_${h}_${f}_${x}_${i}`}else{let c=o.isUniform?"uniform":o.texData.texShape;r+=`${o.shape}_${c}_${i}`}});let s=e.userCode,a=e.constructor.name;return a+="_"+r+"_"+s+`${q().getNumber("WEBGL_VERSION")}`,a}function Dn(e){return q().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var YY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=sd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=$n();this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?Xm(["r","c","d"],e):Ii(["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;
|
|
}
|
|
`}},ZY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=sd.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=$n();this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?Xm(["r","c","d"],e):Ii(["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;
|
|
}
|
|
`}},JY=class{constructor(e){this.variableNames=["A"],this.outTexUsage=ur.DOWNLOAD;let t=$n();this.outputShape=e,this.userCode=`
|
|
${L2}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},QY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=ur.DOWNLOAD;let t=$n();this.outputShape=e,this.userCode=`
|
|
${L2}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},e9={R:0,G:1,B:2,A:3},f1=class{constructor(e,t=!1,n="RGBA"){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let r=$n();this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length);let s="result";t&&(s="floor(result * 255. + 0.5)");let a="";for(let o=0;o<n.length;o++){let i=n[o];a+=`
|
|
if(offset == ${o}) {
|
|
result = values[${e9[i]}];
|
|
}`}this.userCode=`
|
|
${this.enableShapeUniforms?J0():Z0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int flatIndex = getFlatIndex(coords);
|
|
float result = 0.;
|
|
int offset = imod(flatIndex, ${n.length});
|
|
|
|
flatIndex = idiv(flatIndex, ${n.length}, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
if (r < texShape[0]) {
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
vec4 values = ${r.texture2D}(A, uv);
|
|
${a}
|
|
}
|
|
${r.output} = vec4(${s}, 0., 0., 0.);
|
|
}
|
|
`}},t9=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=$n();this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length);let r="",s="result";t&&(s="floor(result * 255. + 0.5)");for(let a=0;a<=1;a++)for(let o=0;o<=1;o++){let i=a*2+o;r+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${o} < ${this.enableShapeUniforms?"outShape[2]":`${e[2]}`}) {
|
|
localCoords[2] += ${o};
|
|
if (localCoords[1] + ${a} < ${this.enableShapeUniforms?"outShape[1]":`${e[1]}`}) {
|
|
localCoords[1] += ${a};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
values = ${n.texture2D}(A, uv);
|
|
|
|
if (offset == 0) {
|
|
result[${i}] = values[0];
|
|
} else if (offset == 1) {
|
|
result[${i}] = values[1];
|
|
} else if (offset == 2) {
|
|
result[${i}] = values[2];
|
|
} else {
|
|
result[${i}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${this.enableShapeUniforms?J0():Z0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${r}
|
|
|
|
${n.output} = ${s};
|
|
}
|
|
`}},U2={};Ae(U2,{bindVertexProgramAttributeStreams:()=>J2,createBufferFromOutputTexture:()=>tE,createFloat16MatrixTexture:()=>K2,createFloat16PackedMatrixTexture:()=>Z2,createFloat32MatrixTexture:()=>j2,createIndexBuffer:()=>q2,createPackedMatrixTexture:()=>Y2,createUnsignedBytesMatrixTexture:()=>X2,createVertexBuffer:()=>H2,createVertexShader:()=>G2,downloadByteEncodedFloatMatrixFromOutputTexture:()=>rE,downloadFloat32MatrixFromBuffer:()=>nE,downloadMatrixFromPackedOutputTexture:()=>aE,downloadPackedMatrixFromBuffer:()=>sE,getInternalFormatForFloat16MatrixTexture:()=>tI,getInternalFormatForFloat16PackedMatrixTexture:()=>sI,getInternalFormatForFloat32MatrixTexture:()=>eI,getInternalFormatForPackedMatrixTexture:()=>rI,getInternalFormatForUnsignedBytesMatrixTexture:()=>nI,uploadDenseMatrixToTexture:()=>Q2,uploadPixelDataToTexture:()=>eE});function G2(e){let t=$n(),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 g2(e,n)}function H2(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 x2(e,t)}function q2(e){let t=new Uint16Array([0,1,2,2,1,3]);return w2(e,t)}function ip(e,t,n,r,s,a){k2(t,n);let o=I2(e),i=e.TEXTURE_2D;return me(e,()=>e.bindTexture(i,o)),me(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),me(e,()=>e.texParameteri(i,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),me(e,()=>e.texParameteri(i,e.TEXTURE_MIN_FILTER,e.NEAREST)),me(e,()=>e.texParameteri(i,e.TEXTURE_MAG_FILTER,e.NEAREST)),q().getNumber("WEBGL_VERSION")===1?me(e,()=>e.texImage2D(i,0,r,t,n,0,s,a,null)):me(e,()=>e.texStorage2D(i,1,r,t,n)),me(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:o,texShape:[n,t]}}function eI(e){return e.internalFormatFloat}function j2(e,t,n,r){let[s,a]=op(t,n);return ip(e,s,a,eI(r),r.textureFormatFloat,e.FLOAT)}function tI(e){return e.internalFormatHalfFloat}function K2(e,t,n,r){let[s,a]=op(t,n);return ip(e,s,a,tI(r),r.textureFormatFloat,r.textureTypeHalfFloat)}function nI(e){return e.downloadTextureFormat}function X2(e,t,n,r){let[s,a]=op(t,n);return ip(e,s,a,nI(r),e.RGBA,e.UNSIGNED_BYTE)}function rI(e){return e.internalFormatPackedFloat}function Y2(e,t,n,r){let[s,a]=Xu(t,n);return ip(e,s,a,rI(r),e.RGBA,e.FLOAT)}function sI(e){return e.internalFormatPackedHalfFloat}function Z2(e,t,n,r){let[s,a]=Xu(t,n);return ip(e,s,a,sI(r),e.RGBA,r.textureTypeHalfFloat)}function J2(e,t,n){return me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),fv(e,t,"clipSpacePos",n,3,20,0)&&fv(e,t,"uv",n,2,20,12)}function Q2(e,t,n,r,s,a){me(e,()=>e.bindTexture(e.TEXTURE_2D,t));let o,i,c;s instanceof Uint8Array?(o=new Uint8Array(n*r*4),i=e.UNSIGNED_BYTE,c=e.RGBA):(o=new Float32Array(n*r*4),i=e.FLOAT,c=a.internalFormatPackedFloat),o.set(s),q().getNumber("WEBGL_VERSION")===2?me(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,r,e.RGBA,i,o)):me(e,()=>e.texImage2D(e.TEXTURE_2D,0,c,n,r,0,e.RGBA,i,o)),me(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function eE(e,t,n){me(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?q().getNumber("WEBGL_VERSION")===2?me(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data)):me(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):q().getNumber("WEBGL_VERSION")===2?me(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n)):me(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),me(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function tE(e,t,n,r){let s=e.createBuffer();me(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,s));let i=4*4*t*n;return me(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,i,e.STREAM_READ)),me(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),me(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),s}function nE(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 rE(e,t,n,r){let[s,a]=op(t,n),o=4,i=new Uint8Array(Z7(t*n,o));return me(e,()=>e.readPixels(0,0,s,a,r.downloadTextureFormat,e.UNSIGNED_BYTE,i)),new Float32Array(i.buffer)}function sE(e,t,n,r,s,a,o,i){let c=e,u=new Float32Array(J7(a,o));return c.bindBuffer(c.PIXEL_PACK_BUFFER,t),c.getBufferSubData(c.PIXEL_PACK_BUFFER,0,u),c.bindBuffer(c.PIXEL_PACK_BUFFER,null),u}function aE(e,t,n){let r=new Float32Array(t*n*4);return me(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,r)),r}var Ch=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=q().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,h2(t,e)):this.gl=Kr(t);let n="WEBGL_color_buffer_float",r="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),q().getNumber("WEBGL_VERSION")===1){let s="OES_texture_float",a="OES_texture_half_float";if(this.textureFloatExtension=zl(this.gl,s),lr(this.gl,a))this.textureHalfFloatExtension=zl(this.gl,a);else if(q().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),lr(this.gl,r))this.colorBufferHalfFloatExtension=zl(this.gl,r);else if(q().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",lr(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(lr(this.gl,r))this.colorBufferHalfFloatExtension=this.gl.getExtension(r);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=H2(this.gl),this.indexBuffer=q2(this.gl),this.framebuffer=S2(this.gl),this.textureConfig=X0(this.gl,this.textureHalfFloatExtension)}get debug(){return q().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;me(e,()=>e.finish()),me(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),me(e,()=>e.deleteFramebuffer(this.framebuffer)),me(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),me(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),me(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),j2(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),K2(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),X2(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),eE(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,r){this.throwIfDisposed(),Q2(this.gl,e,t,n,r,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),Z2(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),Y2(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(mv(this.gl,this.framebuffer),this.outputTexture=null),me(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>rE(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,r,s,a){return sE(this.gl,e,t,n,r,s,a,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return nE(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let r=tE(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(q().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 q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>aE(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=G2(t));let n=y2(t);return me(t,()=>t.attachShader(n,this.vertexShader)),me(t,()=>t.attachShader(n,e)),v2(t,n),this.debug&&Ih(t,n),this.vertexAttrsAreBound||(this.setProgram(n),this.vertexAttrsAreBound=J2(t,this.program,this.vertexBuffer)),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&me(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&Ih(this.gl,this.program),me(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?C2(this.gl,e,t):N2(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),me(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(),_2(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[r,s]=Xu(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&&Ih(this.gl,this.program),Bl(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),me(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),me(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=zl(this.gl,q().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(q().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(q().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,q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,q().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=n9(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 q().platform&&(n=q().platform.setTimeoutCustom.bind(q().platform)),w.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0),()=>0,null,n)}bindTextureToFrameBuffer(e){this.throwIfDisposed(),kh(this.gl,e,this.framebuffer),this.debug&&Bl(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(kh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Bl(this.gl)):mv(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;kh(r,e,this.framebuffer),this.debug&&Bl(r),this.outputTexture=e,me(r,()=>r.viewport(0,0,t,n)),me(r,()=>r.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,r){this.throwIfDisposed(),me(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 n9(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{addImpl:r9,bincountImpl:oE,bincountReduceImpl:s9,castImpl:a9,ceilImpl:o9,concatImpl:i9,equalImpl:c9,expImpl:u9,expm1Impl:l9,floorImpl:d9,gatherNdImpl:p9,gatherV2Impl:h9,greaterImpl:f9,greaterEqualImpl:m9,lessImpl:g9,lessEqualImpl:b9,linSpaceImpl:y9,logImpl:v9,maxImpl:x9,maximumImpl:w9,minimumImpl:I9,multiplyImpl:k9,negImpl:S9,notEqualImpl:T9,prodImpl:C9,raggedGatherImpl:N9,raggedRangeImpl:_9,raggedTensorToTensorImpl:E9,rangeImpl:A9,rsqrtImpl:$9,scatterImpl:D9,sigmoidImpl:F9,simpleAbsImpl:iE,sliceImpl:R9,sparseFillEmptyRowsImpl:P9,sparseReshapeImpl:O9,sparseSegmentReductionImpl:cE,sqrtImpl:M9,stridedSliceImpl:L9,stringNGramsImpl:z9,stringSplitImpl:B9,stringToHashBucketFastImpl:W9,subImpl:V9,tileImpl:U9,topKImpl:G9,transposeImpl:aI,uniqueImpl:H9}=l_;function uE(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function Tn(e,t){return t===1?[e]:uE(e,t)}function q9(e,t){if(e===1)return"rc";let n="";for(let r=0;r<e;r++)n+=t[r],r<e-1&&(n+=",");return n}var j9=class{constructor(e){if(this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.enableShapeUniforms=Dn(this.outputShape.length),this.rank===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let t=Tn("rc",this.rank),n=mt(this.rank),r=this.getOutOfBoundsCondition(t),s=this.getSetup(t),a=this.getOutput(t);this.userCode=`
|
|
void main() {
|
|
${n} rc = getOutputCoords();
|
|
|
|
if(${r}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${s}
|
|
|
|
setOutput(vec4(${a}));
|
|
}
|
|
}
|
|
`}}getSourceCoordsArr(e){let t=[];for(let n=0;n<=1;n++)for(let r=0;r<=1;r++){let s=`${n===0?"r":"rp1"}, ${r===0?"c":"cp1"}`;for(let a=2;a<this.rank;a++)s=`${e[e.length-1-a]},`+s;t.push(s)}return t}getOutOfBoundsCondition(e){if(this.rank===1)return`rc > ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let t="";for(let n=this.rank-2;n<this.rank;n++)t+=`${e[n]} >= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n<this.rank-1&&(t+="||");return t}getSetup(e){if(this.rank===1)return"";let t=e.slice(-2),n=this.enableShapeUniforms?`outShape[${this.rank} - 1]`:this.outputShape[this.rank-1],r=this.enableShapeUniforms?`outShape[${this.rank} - 2]`:this.outputShape[this.rank-2];return`
|
|
int r = ${t[0]};
|
|
int c = ${t[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${n};
|
|
bool rEdge = rp1 >= ${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]})`}},lE=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=Dn(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=`
|
|
${K9(t,this.enableShapeUniforms)}
|
|
${this.enableShapeUniforms?J0():Z0(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 K9(e,t){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${t?lY(["r","c","d"],"inputShape"):Ii(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var X9=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let r=g1(t,n),s=b1(e,r,n);s in this.freeTextures||(this.freeTextures[s]=[]),s in this.usedTextures||(this.usedTextures[s]=[]);let a=m1(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].shift();return this.usedTextures[s].push(i),i}let o;return r===cn.PACKED_2X2_FLOAT32?o=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):r===cn.PACKED_2X2_FLOAT16?o=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):r===cn.UNPACKED_FLOAT32?o=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):r===cn.UNPACKED_FLOAT16?o=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):r===cn.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=g1(n,r),a=b1(t,s,r);a in this.freeTextures||(this.freeTextures[a]=[]);let o=m1(t,s,this.gpgpu.gl,this.gpgpu.textureConfig,r),i=q().get("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 c=this.usedTextures[a],u=c.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");c.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function Y9(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 m1(e,t,n,r,s){let a=Z9(t,r),o;if(s){let[c,u]=Xu(e[0],e[1]);o=c*u}else{let[c,u]=op(e[0],e[1]);o=c*u}let i=Y9(n,a);return o*i}function Z9(e,t){switch(e){case cn.PACKED_2X2_FLOAT32:return rI(t);case cn.PACKED_2X2_FLOAT16:return sI(t);case cn.UNPACKED_FLOAT32:return eI(t);case cn.UNPACKED_FLOAT16:return tI(t);case cn.PACKED_4X1_UNSIGNED_BYTE:return nI(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function J9(e){return q().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?cn.PACKED_2X2_FLOAT32:cn.UNPACKED_FLOAT32:e?cn.PACKED_2X2_FLOAT16:cn.UNPACKED_FLOAT16}function g1(e,t){if(e===ur.UPLOAD)return cn.PACKED_2X2_FLOAT32;if(e===ur.RENDER||e==null)return J9(t);if(e===ur.DOWNLOAD||e===ur.PIXELS)return cn.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function b1(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var Ns=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=Dn(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;",Q9="return x;",y1="return abs(x);",eZ="return (x >= 0.0) ? x : (exp(x) - 1.0);",tZ=Or+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,nZ=Or+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,sc="return x;",rZ="return 1.0 / (1.0 + exp(-1.0 * x));",sZ="return x;",aZ=`
|
|
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;
|
|
`,oZ=`
|
|
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;
|
|
`,iZ=`
|
|
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;
|
|
`,cZ="return 1.0 / (1.0 + exp(-1.0 * x));",Ka=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length),this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},uZ=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length);let t=e.length,n=Tn("rc",t),r=mt(t),s=q9(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}));
|
|
}
|
|
`}},lZ=fs.whereImpl,dZ=1e-7,pZ=1e-4,bh={};function hZ(e){return e in bh||(bh[e]={}),bh[e]}var fZ=q().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),mZ=600;function gZ(){return q().global.screen==null?1024:q().global.screen.height*q().global.screen.width*window.devicePixelRatio*mZ/1024/1024}var Ym=class extends ld{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!q().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Ch)t=e;else{let n=Kr(q().getNumber("WEBGL_VERSION"),e);t=new Ch(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Kr(q().getNumber("WEBGL_VERSION"));t=new Ch(n),this.binaryCache=hZ(q().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new X9(this.gpgpu),this.numMBBeforeWarning=gZ(),this.texData=new uf(this,Er())}nextDataId(){return Ym.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}writeTexture(e,t,n,r,s,a){let o=this.makeTensorInfo(t,n),i=this.texData.get(o.dataId);i.isPacked=!1,i.texture={texture:e,texShape:[r,s]},i.texShape=[r,s];let c=Wl(t),u=new f1(c,!1,a),l=this.runWebGLProgram(u,[o],n,[[r,s]]);return l.shape=t,i.texture=null,this.disposeIntermediateTensorInfo(o),l.dataId}write(e,t,n){if((q().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||q().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let r={id:this.nextDataId()};return this.texData.set(r,{shape:t,dtype:n,values:e,usage:ur.UPLOAD,refCount:1}),r}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,r,s){if(q().getBool("DEBUG")&&this.checkNumericalProblems(t),r==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:r,values:t,usage:ur.UPLOAD,refCount:s})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:r,complexTensorInfos:s,slice:a,shape:o,isPacked:i}=t;if(a!=null){let p;i?p=new Ka(o,sc):p=new Ns(o,sc);let d=this.runWebGLProgram(p,[{dataId:e,shape:o,dtype:r}],r),h=this.readSync(d.dataId);return this.disposeIntermediateTensorInfo(d),h}if(n!=null)return this.convertAndCacheOnCPU(e);if(r==="string")return n;let c=this.activeTimers!=null,u;c&&(u=w.now());let l;if(r==="complex64"){let p=this.readSync(s.real.dataId),d=this.readSync(s.imag.dataId);l=N.mergeRealAndImagArrays(p,d)}else l=this.getValuesFromTexture(e);return c&&(this.downloadWaitMs+=w.now()-u),this.convertAndCacheOnCPU(e,l)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(f=>h.push(f))}let t=this.texData.get(e),{values:n,shape:r,slice:s,dtype:a,complexTensorInfos:o,isPacked:i}=t;if(s!=null){let h;i?h=new Ka(r,sc):h=new Ns(r,sc);let f=this.runWebGLProgram(h,[{dataId:e,shape:r,dtype:a}],a),m=this.read(f.dataId);return this.disposeIntermediateTensorInfo(f),m}if(n!=null)return this.convertAndCacheOnCPU(e);if(q().getBool("DEBUG")&&!q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&q().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,u;if(a!=="complex64"&&q().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);c=this.gpgpu.createBufferFromTexture(h.texture.texture,...mh(r))}this.pendingRead.set(e,[]),a!=="complex64"&&await this.gpgpu.createAndWaitForFence();let l;if(a==="complex64"){let h=await Promise.all([this.read(o.real.dataId),this.read(o.imag.dataId)]),f=h[0],m=h[1];l=N.mergeRealAndImagArrays(f,m)}else if(c==null)l=this.getValuesFromTexture(e);else{let h=w.sizeFromShape(r);l=this.gpgpu.downloadFloat32MatrixFromBuffer(c,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),c!=null){let h=this.gpgpu.gl;me(h,()=>h.deleteBuffer(c))}let p=this.convertAndCacheOnCPU(e,l),d=this.pendingRead.get(e);return this.pendingRead.delete(e),d.forEach(h=>h(p)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&Er().removeDataId(e,this),this.pendingDeletes--),p}readToGPU(e,t={}){let n=this.texData.get(e),{values:r,shape:s,slice:a,dtype:o,isPacked:i,texture:c}=n;if(o==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(a!=null){let d;i?d=new Ka(s,sc):d=new Ns(s,sc);let h=this.runWebGLProgram(d,[{dataId:e,shape:s,dtype:o}],o),f=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),f}if(c==null)throw r!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),l=Er().makeTensorFromTensorInfo(u),p=this.texData.get(u.dataId);return Object.assign({tensorRef:l},p.texture)}bufferSync(e){let t=this.readSync(e.dataId);if(e.dtype==="string")try{let n=t.map(r=>w.decodeString(r));return Me(e.shape,e.dtype,n)}catch(n){throw new Error("Failed to decode encoded string bytes into utf-8")}return Me(e.shape,e.dtype,t)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!f2(n))throw q().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:r}=this.texData.get(e),s=w.sizeFromShape(t);if(q().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let p=this.decode(e),d=this.texData.get(p.dataId),h=this.gpgpu.downloadMatrixFromPackedTexture(d.texture.texture,...mh(t)).subarray(0,s);return this.disposeIntermediateTensorInfo(p),h}let a=q().getBool("WEBGL_PACK")&&r===!0,o=a?Wl(t):t,i=a?new QY(o):new JY(o),c=this.runWebGLProgram(i,[{shape:o,dtype:n,dataId:e}],"float32"),u=this.texData.get(c.dataId),l=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(u.texture.texture,u.texShape[0],u.texShape[1]).subarray(0,s);return this.disposeIntermediateTensorInfo(c),l}timerAvailable(){return q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}time(e){let t=this.activeTimers,n=[],r=!1;this.programTimersStack==null?(this.programTimersStack=n,r=!0):this.activeTimers.push(n),this.activeTimers=n,e();let s=w.flatten(this.activeTimers.map(i=>i.query)).filter(i=>i!=null),a=w.flatten(this.activeTimers.map(i=>i.name)).filter(i=>i!=null);this.activeTimers=t,r&&(this.programTimersStack=null);let o={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let i=await Promise.all(s);o.kernelMs=w.sum(i),o.getExtraProfileInfo=()=>i.map((c,u)=>({name:a[u],ms:c})).map(c=>`${c.name}: ${c.ms}`).join(", ")}else o.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,o})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:w.now(),endMs:null}}endTimer(e){return q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=w.now(),e)}async getQueryTime(e){if(q().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:r,usage:s,isPacked:a,slice:o}=this.texData.get(e),i=o&&o.origDataId||e,c=this.dataRefCount.get(i);c>1?this.dataRefCount.set(i,c-1):(this.dataRefCount.delete(i),t!=null&&(this.numBytesInGPU-=this.computeBytes(r,n),this.textureManager.releaseTexture(t,r,s,a)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=fZ){return q().getBool("WEBGL_CPU_FORWARD")&&e.every(n=>this.texData.get(n.dataId).texture==null&&w.sizeFromShape(n.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){N.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return lZ(e.shape,t)}packedUnaryOp(e,t,n){let r=new Ka(e.shape,t),s=this.compileAndRun(r,[e],n);return Er().makeTensorFromTensorInfo(s)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let r=iE(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,r)}if(q().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,y1,e.dtype);let t=new Ns(e.shape,y1),n=this.compileAndRun(t,[e]);return Er().makeTensorFromTensorInfo(n)}makeTensorInfo(e,t,n){let r;if(t==="string"&&n!=null&&n.length>0&&w.isString(n[0])){let s=n.map(a=>w.encodeString(a));r=this.write(s,e,t)}else r=this.write(n,e,t);return this.texData.get(r).usage=null,{dataId:r,shape:e,dtype:t}}makeOutput(e,t,n){return Er().makeTensorFromTensorInfo(this.makeTensorInfo(e,t,n),this)}unpackTensor(e){let t=new uZ(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new j9(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[ho(e.shape),...fo(e.shape)],r={dtype:e.dtype,shape:n,dataId:e.dataId},s=[ho(t),...fo(t)],a=new lE(s,n),o=!0,i=[n],c=this.runWebGLProgram(a,[r],e.dtype,i,o);return{dataId:c.dataId,shape:t,dtype:c.dtype}}decode(e,t){let n=this.texData.get(e),{isPacked:r,shape:s,dtype:a}=n;if(t!=null){let p=w.sizeFromShape(s),d=t[0]*t[1]*4;w.assert(p<=d,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let o=Wl(s),i;r?i=new ZY(o):i=new YY(o);let c=!0,u=[t!=null?t:mh(o)],l=this.runWebGLProgram(i,[{shape:o,dtype:a,dataId:e}],a,u,c,t);return{dtype:a,shape:s,dataId:l.dataId}}runWebGLProgram(e,t,n,r,s=!1,a){let o=this.makeTensorInfo(e.outputShape,n),i=this.texData.get(o.dataId);if(e.packedOutput&&(i.isPacked=!0),e.outPackingScheme===sd.DENSE){let g=a!=null?a:mh(e.outputShape);i.texShape=g.map(b=>b*2)}if(e.outTexUsage!=null&&(i.usage=e.outTexUsage),w.sizeFromShape(o.shape)===0)return i.values=w.getTypedArrayFromDType(o.dtype,0),o;let c=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let b=this.texData.get(g.dataId);if(b.texture==null){if(!e.packedInputs&&w.sizeFromShape(g.shape)<=q().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:b.values};e.packedInputs&&(b.isPacked=!0,b.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!b.isPacked!=!!e.packedInputs)g=b.isPacked?this.unpackTensor(g):this.packTensor(g),c.push(g),b=this.texData.get(g.dataId);else if(b.isPacked&&!ad(b.shape,g.shape)){let y=g,v=g.shape;g.shape=b.shape,g=this.packedReshape(g,v),c.push(g),b=this.texData.get(g.dataId),y.shape=v}return{shape:g.shape,texData:b,isUniform:!1}});this.uploadToGPU(o.dataId);let l={shape:o.shape,texData:i,isUniform:!1},p=XY(e,u,l),d=this.getAndSaveBinary(p,()=>jY(this.gpgpu,e,u,l)),h=this.activeTimers!=null,f;h&&(f=this.startTimer()),q().get("ENGINE_COMPILE_ONLY")||KY(this.gpgpu,d,u,l,r),c.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(f=this.endTimer(f),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(f)}));let m=q().get("WEBGL_FLUSH_THRESHOLD");if(m>0){let g=w.now();g-this.lastGlFlushTime>m&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!q().getBool("WEBGL_LAZILY_UNPACK")&&i.isPacked&&s===!1){let g=this.unpackTensor(o);return this.disposeIntermediateTensorInfo(o),g}return o}compileAndRun(e,t,n,r,s=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,r,s)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(q().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(t=>{this.gpgpu.deleteProgram(this.binaryCache[t].webGLProgram),delete this.binaryCache[t]}),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(!q().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=q().getBool("DEBUG");q().set("DEBUG",!1);let t=this.abs(xe(1e-8)).dataSync()[0];if(q().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?dZ:pZ}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:r,values:s,texture:a,usage:o,isPacked:i}=t;if(a!=null)return;let c=this.activeTimers!=null,u;c&&(u=w.now());let l=t.texShape;if(l==null&&(l=$2(n,i),t.texShape=l),s!=null){let p=Wl(n),d,h=l[1],f=l[0],m=s instanceof Uint8Array||s instanceof Uint8ClampedArray;(i||!m)&&([h,f]=Xu(l[0],l[1])),i?d=new t9(p,m):d=new f1(p,m);let g=m?[f,h]:l,b=this.makeTensorInfo(g,r),y=this.texData.get(b.dataId);m?y.usage=ur.PIXELS:y.usage=ur.UPLOAD,y.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(b.dataId),h,f,s);let v=[[f,h]],x=!0,k=this.runWebGLProgram(d,[b],r,v,x),S=this.texData.get(k.dataId);t.texShape=S.texShape,t.isPacked=S.isPacked,t.usage=S.usage,q().get("ENGINE_COMPILE_ONLY")?this.disposeData(k.dataId):(t.texture=S.texture,t.values=null,this.texData.delete(k.dataId)),this.disposeIntermediateTensorInfo(b),c&&(this.uploadWaitMs+=w.now()-u)}else{let p=this.acquireTexture(l,o,r,i);t.texture=p}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:r}=n;return this.releaseGPUData(e),t!=null&&(n.values=bZ(t,r)),n.values}acquireTexture(e,t,n,r){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let s=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${s} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,r)}computeBytes(e,t){return e[0]*e[1]*w.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let n=new Promise(r=>{try{this.checkCompletion_(t),r(!0)}catch(s){throw s}});e.push(n)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await Jx(),this.checkCompletionAsync_(e))}checkCompletion_(e){if(this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.gl.LINK_STATUS)===!1)throw console.log(this.gpgpu.gl.getProgramInfoLog(e.webGLProgram)),this.gpgpu.gl.getShaderParameter(e.fragmentShader,this.gpgpu.gl.COMPILE_STATUS)===!1?(Y0(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:n,infLoc:r,nanLoc:s,inShapesLocations:a,inTexShapesLocations:o,outShapeLocation:i,outShapeStridesLocation:c,outTexShapeLocation:u}=V2(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=n,e.infLoc=r,e.nanLoc=s,e.inShapesLocations=a,e.inTexShapesLocations=o,e.outShapeLocation=i,e.outShapeStridesLocation=c,e.outTexShapeLocation=u}}createTensorFromTexture(e,t,n){let{texture:r,height:s,width:a,channels:o}=e,i=Er().backend;if(!i.gpgpu.gl.isTexture(r))throw new Error("The texture is invalid. Also, please make sure the texture and the TFJS WebGL backend are using the same canvas. If you want to use your own custom canvas, you have to create and use the custom TFJS WebGL backend created from the canvas through 'new tf.MathBackendWebGL(customCanvas)'.");let c=i.writeTexture(r,t,n,s,a,o);return Er().makeTensorFromDataId(c,t,n,i)}};Ym.nextDataId=0;function bZ(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;r<n.length;++r)n[r]=Math.round(e[r]);return n}else throw new Error(`Unknown dtype ${t}`)}var yZ="4.0.0";function dE(){q().set("WEBGL_FORCE_F16_TEXTURES",!0)}$d.isBrowser()&&qf("webgl",()=>new Ym,2);var vZ={forceHalfFloat:dE},oI=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,$c=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=N.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=Dn(this.outputShape.length),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},cp=`
|
|
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;
|
|
`,up=class{constructor(e,t,n,r=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=N.assertAndGetBroadcastShape(t,n);let s=this.outputShape.length;this.enableShapeUniforms=Dn(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=`
|
|
${mt(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=Tn("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 xZ={kernelName:Oo,backendName:"webgl",kernelFunc:sr};function Ea(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}),c=sr({inputs:{x:s},backend:n});return o.complexTensorInfos={real:i,imag:c},a}var wZ={kernelName:gf,backendName:"webgl",kernelFunc:Ea},pE="return (a < 0.) ? b * a : a;",hE=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function IZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{alpha:a}=r,o=n.makeTensorInfo([],"float32",w.createScalarValue(a,"float32")),i=q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new up(hE,s.shape,o.shape):new $c(pE,s.shape,o.shape),c=n.runWebGLProgram(i,[s,o],"float32");return n.disposeIntermediateTensorInfo(o),c}var kZ={kernelName:Mo,backendName:"webgl",kernelFunc:IZ},fE="return (a < 0.) ? b * a : a;",mE=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function SZ(e){let{inputs:t,backend:n}=e,{x:r,alpha:s}=t,a=q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new up(mE,r.shape,s.shape):new $c(fE,r.shape,s.shape);return n.runWebGLProgram(a,[r,s],"float32")}var TZ={kernelName:Yo,backendName:"webgl",kernelFunc:SZ},tl="if (isnan(x)) return x;";function Ye({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:r}){return({inputs:s,backend:a})=>{let{x:o}=s,i=a,c=r||o.dtype;if(i.shouldExecuteOnCPU([o])&&n!=null){let p=i.texData.get(o.dataId),d=n(p.values,c);return i.makeTensorInfo(o.shape,c,d)}let u=q().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,l;return u?l=new Ka(o.shape,t):l=new Ns(o.shape,e),i.runWebGLProgram(l,[o],c)}}function dn({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:r=!1,cpuKernelImpl:s,dtype:a}){return({inputs:o,backend:i})=>{let{a:c,b:u}=o,l=i;if(r&&c.dtype==="complex64"){let f=l.texData.get(c.dataId),m=l.texData.get(u.dataId),[g,b]=[[f.complexTensorInfos.real,m.complexTensorInfos.real],[f.complexTensorInfos.imag,m.complexTensorInfos.imag]].map(v=>{let[x,k]=v,S={dataId:x.dataId,dtype:x.dtype,shape:c.shape},C={dataId:k.dataId,dtype:k.dtype,shape:u.shape},E=new $c(e,c.shape,u.shape);return l.runWebGLProgram(E,[S,C],hr(x.dtype,k.dtype))}),y=Ea({inputs:{real:g,imag:b},backend:l});return l.disposeIntermediateTensorInfo(g),l.disposeIntermediateTensorInfo(b),y}let p=a||hr(c.dtype,u.dtype);if((c.dtype==="string"||u.dtype==="string"||l.shouldExecuteOnCPU([c,u]))&&s!=null){let f=l.texData.get(c.dataId).values,m=l.texData.get(u.dataId).values,g=c.dtype==="string"?N.fromUint8ToStringArray(f):f,b=c.dtype==="string"?N.fromUint8ToStringArray(m):m,[y,v]=s(c.shape,u.shape,g,b,p),x=l.makeTensorInfo(v,p),k=l.texData.get(x.dataId);return k.values=y,x}let d=q().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return d?h=new up(t,c.shape,u.shape,n):h=new $c(e,c.shape,u.shape),l.runWebGLProgram(h,[c,u],p)}}function od(e,t=!1){if(e==="linear")return t?sZ:Q9;if(e==="relu")return t?oZ:tZ;if(e==="elu")return t?aZ:eZ;if(e==="relu6")return t?iZ:nZ;if(e==="prelu")return t?mE:fE;if(e==="leakyrelu")return t?hE:pE;if(e==="sigmoid")return t?cZ:rZ;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var gE=class{constructor(e,t,n,r=!1,s=!1,a=!1,o=null,i=!1,c=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=Dn(this.outputShape.length);let u=r?e[1]:e[2],l=Math.ceil(u/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"],m="",g="";o&&(i?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${o}
|
|
}`:c?m=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${o}
|
|
}`:m=`vec4 activation(vec4 x) {
|
|
${o}
|
|
}`,g="result = activation(result);");let b=a?"result += getBiasAtOutCoords();":"";a&&this.variableNames.push("bias"),i&&this.variableNames.push("preluActivationWeights"),c&&this.variableNames.push("leakyreluAlpha");let y="rc.x",v="rc.x";e[0]<t[0]?y=`int(min(float(rc.x), ${e[0]-1}.))`:t[0]<e[0]&&(v=`int(min(float(rc.x), ${t[0]-1}.))`),this.userCode=`
|
|
${m}
|
|
// Don't use uniform for sharedDimensionPacked for performance.
|
|
const float sharedDimension = ${l}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < ${l}; i++) {
|
|
int batchA = ${y};
|
|
int batchB = ${v};
|
|
vec4 a = getMatrixA(batchA, ${p});
|
|
vec4 b = getMatrixB(batchB, ${d});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${h[0]} * ${f[0]});
|
|
result += (${h[1]} * ${f[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${b}
|
|
|
|
${g}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},v1={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},x1=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=N.assertAndGetBroadcastShape(t,n),this.userCode=`
|
|
float binaryOpComplex(
|
|
float areal, float aimag, float breal, float bimag) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float areal = getARealAtOutCoords();
|
|
float aimag = getAImagAtOutCoords();
|
|
float breal = getBRealAtOutCoords();
|
|
float bimag = getBImagAtOutCoords();
|
|
setOutput(binaryOpComplex(areal, aimag, breal, bimag));
|
|
}
|
|
`}},w1="return a * b;";function iI(e){let{inputs:t,backend:n}=e,{a:r,b:s}=t,a=N.upcastType(r.dtype,s.dtype);if(r.dtype==="complex64"){let i=n.texData.get(r.dataId),c=n.texData.get(s.dataId),u=new x1(v1.REAL,r.shape,s.shape),l=new x1(v1.IMAG,r.shape,s.shape),p=[{dataId:i.complexTensorInfos.real.dataId,dtype:i.complexTensorInfos.real.dtype,shape:r.shape},{dataId:i.complexTensorInfos.imag.dataId,dtype:i.complexTensorInfos.imag.dtype,shape:r.shape},{dataId:c.complexTensorInfos.real.dataId,dtype:c.complexTensorInfos.real.dtype,shape:s.shape},{dataId:c.complexTensorInfos.imag.dataId,dtype:c.complexTensorInfos.imag.dtype,shape:s.shape}],d=n.runWebGLProgram(u,p,"float32"),h=n.runWebGLProgram(l,p,"float32"),f=Ea({inputs:{real:d,imag:h},backend:n});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),f}if(n.shouldExecuteOnCPU([r,s])){let i=n.texData.get(r.dataId),c=n.texData.get(s.dataId),[u,l]=k9(r.shape,s.shape,i.values,c.values,a),p=n.makeTensorInfo(l,a),d=n.texData.get(p.dataId);return d.values=u,p}let o;return q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?o=new up(w1,r.shape,s.shape):o=new $c(w1,r.shape,s.shape),n.runWebGLProgram(o,[r,s],a)}var CZ={kernelName:qo,backendName:"webgl",kernelFunc:iI};function NZ(e,t,n){let r=[ho(e.shape),...fo(e.shape)],s={dtype:e.dtype,shape:r,dataId:e.dataId},a=[ho(t),...fo(t)],o=new lE(a,r),i=!0,c=[r],u=n.runWebGLProgram(o,[s],e.dtype,c,i);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function he(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{shape:a}=r,o=n,i=w.sizeFromShape(s.shape),c=w.inferFromImplicitShape(a,i),u=w.sizeFromShape(c);w.assert(i===u,()=>`The new shape (${c}) has ${u} 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&&!ad(s.shape,c)&&!(l.texture!==null&&ad(l.shape,c))?NZ(s,c,o):(o.incRef(s.dataId),{dataId:s.dataId,shape:c,dtype:s.dtype})}var _Z={kernelName:xu,backendName:"webgl",kernelFunc:he},I1=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,c="sumValue += dot(values, ones);";if(t!=null){let l=1/t;c=`sumValue += dot(values * ${w.isInt(l)?l.toPrecision(2):l}, ones);`}let u="";s%n>0&&(u=`
|
|
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) {
|
|
${u}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${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)
|
|
);
|
|
|
|
${c}
|
|
}
|
|
|
|
int inIdx = inOffset + ${o};
|
|
if (${i===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${c}
|
|
} else if (${i===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${c}
|
|
} else if (${i===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${c}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},EZ=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 c=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?c="sumValue":t==="prod"?c="prodValue":t==="all"?c="allValue":t==="any"&&(c="anyValue");let u=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 < ${u}; 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 + ${u};
|
|
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(${c});
|
|
}
|
|
`}};function AZ(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=N.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:r,outSize:Math.ceil(n/r)})}return t}function Si(e,t,n,r){let s=AZ(e.shape),a=e;for(let o=0;o<s.length;o++){let{inSize:i,windowSize:c,outSize:u}=s[o],l,p;n==="mean"?l=o===0?new I1({windowSize:c,inSize:i,batchSize:e.shape[0],outSize:u},i):new I1({windowSize:c,inSize:i,batchSize:e.shape[0],outSize:u}):l=new EZ({windowSize:c,inSize:i,batchSize:e.shape[0],outSize:u},n),p=a,a=r.runWebGLProgram(l,[a],t),p.dataId!==e.dataId&&r.disposeIntermediateTensorInfo(p)}return a}var $Z=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let a=0;a<n.length;a++)n[a]=e[t[a]];this.outputShape=n,this.rank=n.length;let r=mt(this.rank),s=DZ(t);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${s}));
|
|
}
|
|
`}};function DZ(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],r=new Array(t);for(let s=0;s<e.length;s++)r[e[s]]=n[s];return r.join()}var FZ=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let u=0;u<n.length;u++)n[u]=e[t[u]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let r=mt(this.rank),s=uE("rc",this.rank),a=new Array(this.rank);for(let u=0;u<t.length;u++)a[t[u]]=s[u];let o=`vec2(${a.slice(-2).join()})`,i=`++${s[this.rank-1]} < ${n[this.rank-1]}`,c=`getChannel(getA(${a.join()}), ${o})`;this.userCode=`
|
|
void main() {
|
|
${r} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${c};
|
|
if(${i}) {
|
|
result[1] = ${c};
|
|
}
|
|
--${s[this.rank-1]};
|
|
if(++${s[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${c};
|
|
if(${i}) {
|
|
result[3] = ${c};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function Zm(e,t,n){let r=q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new FZ(e.shape,t):new $Z(e.shape,t);return n.runWebGLProgram(r,[e],e.dtype)}function RZ(e,t,n,r){let s=t,a=e.shape.length,o=w.parseAxisParam(s,e.shape),i=o,c=N.getAxesPermutation(i,a),u=c!=null,l=e;u&&(l=Zm(e,c,r),i=N.getInnerMostAxes(i.length,a)),N.assertAxesAreInnerMostDims("sum",i,a);let[p,d]=N.computeOutAndReduceShapes(l.shape,i),h=p;n&&(h=N.expandShapeToKeepDim(p,o));let f=w.sizeFromShape(d),g=w.sizeFromShape(e.shape)/f,b=he({inputs:{x:l},attrs:{shape:[g,f]},backend:r}),y=Hf(e.dtype),v=Si(b,y,"sum",r),x=he({inputs:{x:v},attrs:{shape:h},backend:r});return r.disposeIntermediateTensorInfo(b),r.disposeIntermediateTensorInfo(v),u&&r.disposeIntermediateTensorInfo(l),x}function Jm(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r;return RZ(s,a,o,n)}var PZ={kernelName:ci,backendName:"webgl",kernelFunc:Jm};function Nn(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{perm:a}=r,o=n,i=s.shape.length,c=new Array(i);for(let l=0;l<c.length;l++)c[l]=s.shape[a[l]];let u;if(o.shouldExecuteOnCPU([s])){let p=o.texData.get(s.dataId).values,d=aI(p,s.shape,s.dtype,a,c);u=o.makeTensorInfo(c,s.dtype);let h=o.texData.get(u.dataId);h.values=d}else u=Zm(s,a,o);return u}var OZ={kernelName:_s,backendName:"webgl",kernelFunc:Nn},bE=1e3;function rf({a:e,b:t,transposeA:n,transposeB:r,backend:s,bias:a=null,preluActivationWeights:o=null,leakyreluAlpha:i=0,activation:c=null}){let u=e.shape.length,l=t.shape.length,p=n?e.shape[u-2]:e.shape[u-1],d=r?t.shape[l-1]:t.shape[l-2],h=n?e.shape[u-1]:e.shape[u-2],f=r?t.shape[l-2]:t.shape[l-1],m=e.shape.slice(0,-2),g=t.shape.slice(0,-2),b=w.sizeFromShape(m),y=w.sizeFromShape(g),x=Mu.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,f]);w.assert(p===d,()=>`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],C=he({inputs:{x:e},backend:s,attrs:{shape:k}}),E=he({inputs:{x:t},backend:s,attrs:{shape:S}}),$=[C,E],F=Math.max(b,y),A=n?C.shape[1]:C.shape[2],R=a!=null,T=o!=null,L=c==="leakyrelu",V=c!=null?od(c,!0):null,G=R||T||L||V!=null,j;if((h===1||f===1)&&A>bE&&G===!1){let Z=C,J=E;n&&(Z=Nn({inputs:{x:C},backend:s,attrs:{perm:[0,2,1]}}),$.push(Z)),r&&(J=Nn({inputs:{x:E},backend:s,attrs:{perm:[0,2,1]}}),$.push(J));let ee=f!==1,re=f===1,te=Z;ee&&(te=he({inputs:{x:Z},backend:s,attrs:{shape:[F,A,1]}}),$.push(te));let ie=f===1?2:1,ne=J;re&&(ne=he({inputs:{x:J},backend:s,attrs:{shape:[F,1,A]}}),$.push(ne));let le=iI({inputs:{a:te,b:ne},backend:s});j=Jm({inputs:{x:le},backend:s,attrs:{axis:ie,keepDims:!0}}),$.push(le)}else{let Z=hr(e.dtype,t.dtype),J=new gE(k,S,[F,h,f],n,r,R,V,T,L),ee=[C,E];if(a!=null&&ee.push(a),T&&ee.push(o),L){let re=s.makeTensorInfo([],"float32",w.createScalarValue(i,"float32"));ee.push(re),$.push(re)}j=s.runWebGLProgram(J,ee,Z)}let H=he({inputs:{x:j},backend:s,attrs:{shape:x}});$.push(j);for(let Z of $)s.disposeIntermediateTensorInfo(Z);return H}function MZ(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a,bias:o,preluActivationWeights:i}=t,{transposeA:c,transposeB:u,activation:l,leakyreluAlpha:p}=r;return rf({a:s,b:a,transposeA:c,transposeB:u,backend:n,bias:o,preluActivationWeights:i,leakyreluAlpha:p,activation:l})}var LZ={kernelName:eo,backendName:"webgl",kernelFunc:MZ},k1="return abs(x);";function zZ(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=iE(a.values);return n.makeTensorInfo(r.shape,r.dtype,o)}let s;return q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Ka(r.shape,k1):s=new Ns(r.shape,k1),n.runWebGLProgram(s,[r],r.dtype)}var BZ={kernelName:Fc,backendName:"webgl",kernelFunc:zZ},WZ=Or+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,VZ=Ye({opSnippet:WZ}),UZ={kernelName:Rc,backendName:"webgl",kernelFunc:VZ},GZ=Or+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,HZ=Ye({opSnippet:GZ}),qZ={kernelName:Pc,backendName:"webgl",kernelFunc:HZ},S1="return a + b;",jZ=dn({opSnippet:S1,packedOpSnippet:S1,supportsComplex:!0,cpuKernelImpl:r9}),KZ={kernelName:ba,backendName:"webgl",kernelFunc:jZ},XZ=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);
|
|
}
|
|
`}},YZ=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 Nh(e){let{inputs:t,backend:n}=e,r=t;if(r.length===1)return sr({inputs:{x:r[0]},backend:n});if(r.length>q().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let c=Math.floor(r.length/2),u=Nh({inputs:r.slice(0,c),backend:n}),l=Nh({inputs:r.slice(c),backend:n});return Nh({inputs:[u,l],backend:n})}let s=r.map(c=>c.dtype).reduce((c,u)=>hr(c,u)),a=r.map(c=>c.shape),i=q().getBool("WEBGL_PACK")?new YZ(r[0].shape,a):new XZ(r[0].shape,a);return n.runWebGLProgram(i,r,s)}var ZZ={kernelName:bo,backendName:"webgl",kernelFunc:Nh};function JZ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,c=w.parseAxisParam(a,s.shape),u=c,l=N.getAxesPermutation(u,i),p=s;l!=null&&(p=Nn({inputs:{x:s},backend:n,attrs:{perm:l}}),u=N.getInnerMostAxes(u.length,i)),N.assertAxesAreInnerMostDims("all",u,i);let[d,h]=N.computeOutAndReduceShapes(p.shape,u),f=w.sizeFromShape(h),m=he({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}}),g=Si(m,m.dtype,"all",n),b;if(o){let y=N.expandShapeToKeepDim(d,c);b=he({inputs:{x:g},backend:n,attrs:{shape:y}})}else b=he({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),l!=null&&n.disposeIntermediateTensorInfo(p),b}var QZ={kernelName:Oc,backendName:"webgl",kernelFunc:JZ};function eJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,c=w.parseAxisParam(a,s.shape),u=c,l=N.getAxesPermutation(u,i),p=s;l!=null&&(p=Nn({inputs:{x:s},backend:n,attrs:{perm:l}}),u=N.getInnerMostAxes(u.length,i)),N.assertAxesAreInnerMostDims("any",u,i);let[d,h]=N.computeOutAndReduceShapes(p.shape,u),f=w.sizeFromShape(h),m=he({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}}),g=Si(m,m.dtype,"any",n),b;if(o){let y=N.expandShapeToKeepDim(d,c);b=he({inputs:{x:g},backend:n,attrs:{shape:y}})}else b=he({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),l!=null&&n.disposeIntermediateTensorInfo(p),b}var tJ={kernelName:Mc,backendName:"webgl",kernelFunc:eJ},nJ=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));
|
|
}
|
|
`}},rJ=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,c=mt(i),u=Tn("coords",i),l,p;if(a===1){p=i+1;let C=mt(p);l=`
|
|
${C} sourceLocR = ${C}(${u.join()}, 0);
|
|
++${u[i-1]};
|
|
${C} sourceLocG = ${C}(${u.join()}, 0);
|
|
++${u[i-2]};
|
|
${C} sourceLocA = ${C}(${u.join()}, 0);
|
|
--${u[i-1]};
|
|
${C} sourceLocB = ${C}(${u.join()}, 0);
|
|
--${u[i-2]};`}else p=i,l=`
|
|
${c} sourceLocR = coords;
|
|
++${u[i-1]};
|
|
${c} sourceLocG = coords;
|
|
++${u[i-2]};
|
|
${c} sourceLocA = coords;
|
|
--${u[i-1]};
|
|
${c} sourceLocB = coords;
|
|
--${u[i-2]};`;let d=["x","y","z","w","u","v"].slice(0,p),h="."+d[p-1],f=d.map(C=>"int "+C),m=Tn("sourceLocR",p-1).concat("inIdx.r"),g=Tn("sourceLocG",p-1).concat("inIdx.g"),b=Tn("sourceLocB",p-1).concat("inIdx.b"),y=Tn("sourceLocA",p-1).concat("inIdx.a"),v=n==="max"?"greaterThan":"lessThan",x=r?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${m.join()}),
|
|
getBestIndicesAChannel(${g.join()}),
|
|
getBestIndicesAChannel(${b.join()}),
|
|
getBestIndicesAChannel(${y.join()})));`,k=`vec4(
|
|
getAChannel(${m.join()}),
|
|
hasNextCol ? getAChannel(${g.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() {
|
|
${c} coords = getOutputCoords();
|
|
bool hasNextCol = ${u[i-1]} < ${o[i-1]-1};
|
|
bool hasNextRow = ${u[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 yE(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=N.computeOptimalWindowSize(a),i={windowSize:o,inSize:a,batchSize:s,outSize:Math.ceil(a/o)},c=new nJ(i,n,r==null),u=[t];r!=null&&u.push(r);let l=e.runWebGLProgram(c,u,"int32");if(l.shape[1]===1)return l;let p=yE(e,t,n,l);return e.disposeIntermediateTensorInfo(l),p}function vE(e,t,n,r=null){let s=r!=null?r.shape:t.shape,a=s[s.length-1],o=N.computeOptimalWindowSize(a),i=new rJ(s,o,n,r==null),c=r==null?[t]:[t,r],u=e.runWebGLProgram(i,c,"int32");if(u.shape.length===t.shape.length){let l=vE(e,t,n,u);return e.disposeIntermediateTensorInfo(u),l}return u}function xE(e,t,n,r){let s=[n];if(N.assertAxesAreInnerMostDims("arg"+r.charAt(0).toUpperCase()+r.slice(1),s,t.shape.length),!q().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let a=[],o=e.texData.get(t.dataId),i=o!==null&&o.isPacked,c=t;i&&(c=e.unpackTensor(t),a.push(c));let[u,l]=N.computeOutAndReduceShapes(c.shape,s),p=w.sizeFromShape(l),d=he({inputs:{x:c},backend:e,attrs:{shape:[-1,p]}});a.push(d);let h=yE(e,d,r);a.push(h);let f=he({inputs:{x:h},backend:e,attrs:{shape:u}});return a.forEach(m=>e.disposeIntermediateTensorInfo(m)),f}return vE(e,t,r)}function sJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r,o=w.parseAxisParam(a,s.shape),i=N.getAxesPermutation(o,s.shape.length),c=s,u=[];i!=null&&(c=Nn({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(c),o=N.getInnerMostAxes(o.length,c.shape.length)),N.assertAxesAreInnerMostDims("argMax",[o[0]],c.shape.length);let l=xE(n,c,o[0],"max");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),l}var aJ={kernelName:yo,backendName:"webgl",kernelFunc:sJ};function oJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a}=r,o=w.parseAxisParam(a,s.shape),i=N.getAxesPermutation(o,s.shape.length),c=s,u=[];i!=null&&(c=Nn({inputs:{x:s},backend:n,attrs:{perm:i}}),u.push(c),o=N.getInnerMostAxes(o.length,c.shape.length)),N.assertAxesAreInnerMostDims("argMin",[o[0]],c.shape.length);let l=xE(n,c,o[0],"min");return u.forEach(p=>n.disposeIntermediateTensorInfo(p)),l}var iJ={kernelName:dd,backendName:"webgl",kernelFunc:oJ},cJ=Or+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,uJ=Ye({opSnippet:cJ}),lJ={kernelName:Lc,backendName:"webgl",kernelFunc:uJ},dJ=Or+"return log(x + sqrt(x * x + 1.0));",pJ=Ye({opSnippet:dJ}),hJ={kernelName:zc,backendName:"webgl",kernelFunc:pJ},fJ=Or+`
|
|
return atan(x);
|
|
`,mJ=Ye({opSnippet:fJ}),gJ={kernelName:Bc,backendName:"webgl",kernelFunc:mJ},bJ=oI+`
|
|
return atan(a, b);
|
|
`,yJ=`
|
|
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);
|
|
`+cp+`
|
|
return result;
|
|
`,vJ=dn({opSnippet:bJ,packedOpSnippet:yJ}),xJ={kernelName:Vc,backendName:"webgl",kernelFunc:vJ},wJ=Or+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,IJ=Ye({opSnippet:wJ}),kJ={kernelName:Wc,backendName:"webgl",kernelFunc:IJ},id=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,c=e.dilationHeight,u=e.dilationWidth,l=e.effectiveFilterHeight,p=e.effectiveFilterWidth,d=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let f=t==="avg",m=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,b="0.0";if(f||(b="-1.0 / 1e-20"),n){let C=">=";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 += ${c}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${p};
|
|
wC += ${u}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xR, xC, d);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${C} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${r?s?m:g:`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 / count");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 += ${c}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${x}; wC += 4) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
getValue(batch, xR, xC + 3 * ${u}, d)
|
|
);
|
|
|
|
${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 + ${u}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${S}
|
|
} else if (${k===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${S}
|
|
}
|
|
}
|
|
setOutput(${v});
|
|
}
|
|
`}},cI=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,c=e.strideWidth,u=e.dilationDepth,l=e.dilationHeight,p=e.dilationWidth,d=e.effectiveFilterDepth,h=e.effectiveFilterHeight,f=e.effectiveFilterWidth,m=e.padInfo.front,g=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}, ${c});
|
|
const ivec3 pads = ivec3(${m}, ${g}, ${b});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
|
|
for (int wD = 0; wD < ${d};
|
|
wD += ${u}) {
|
|
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 / count");let S=Math.floor(a/4)*4,C=a%4,E=`
|
|
if (${y}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${x}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${o}, ${i}, ${c});
|
|
const ivec3 pads = ivec3(${m}, ${g}, ${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 += ${u}) {
|
|
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 (${C===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${p}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===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 SJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;Yu(s,"avgPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:c}=r,u=1;w.assert(N.eitherStridesOrDilationsAreOne(o,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let l=N.computePool2DInfo(s.shape,a,o,u,i,c);if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))return sr({inputs:{x:s},backend:n});let p=new id(l,"avg",!1);return n.runWebGLProgram(p,[s],"float32")}var TJ={kernelName:vo,backendName:"webgl",kernelFunc:SJ};function CJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dimRoundingMode:c,dataFormat:u}=r,l=[1,1,1],p=N.computePool3DInfo(s.shape,a,o,l,i,c,u),d=new cI(p,"avg",!1);return n.runWebGLProgram(d,[s],"float32")}var NJ={kernelName:pd,backendName:"webgl",kernelFunc:CJ},_J=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,c=e.effectiveFilterWidth,u=i-1-e.padInfo.top,l=c-1-e.padInfo.left,p=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${u}, ${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 < ${c};
|
|
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);
|
|
}
|
|
`}},EJ=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,c=e.dilationHeight,u=e.dilationWidth,l=e.effectiveFilterDepth,p=e.effectiveFilterHeight,d=e.effectiveFilterWidth,h=l-1-e.padInfo.front,f=p-1-e.padInfo.top,m=d-1-e.padInfo.left,g=1/(t*n*r);this.userCode=`
|
|
const ivec3 pads = ivec3(${h}, ${f}, ${m});
|
|
const float avgMultiplier = float(${g});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${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 += ${c}) {
|
|
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 += ${u}) {
|
|
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 AJ(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a,{filterSize:i,strides:c,pad:u,dimRoundingMode:l}=r,p=[1,1,1],d=N.computePool3DInfo(o.shape,i,c,p,u,l),h=new EJ(d);return n.runWebGLProgram(h,[s],o.dtype)}var $J={kernelName:hf,backendName:"webgl",kernelFunc:AJ};function DJ(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a;Yu([s,a],"avgPoolGrad");let{filterSize:i,strides:c,pad:u}=r,l=N.computePool2DInfo(o.shape,i,c,1,u),p=new _J(l);return n.runWebGLProgram(p,[s],o.dtype)}var FJ={kernelName:pf,backendName:"webgl",kernelFunc:DJ};function RJ(e){let{inputs:t,backend:n,attrs:r}=e,{a:s,b:a}=t,{transposeA:o,transposeB:i}=r;return rf({a:s,b:a,transposeA:o,transposeB:i,backend:n})}var PJ={kernelName:xo,backendName:"webgl",kernelFunc:RJ},OJ=class{constructor(e,t,n,r,s,a){this.outputShape=[],this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let o="0.0";r!=null&&(N.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");let i="1.0";s!=null&&(N.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)));
|
|
}
|
|
`}},MJ=class{constructor(e,t,n,r,s,a){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],N.assertAndGetBroadcastShape(e,t),N.assertAndGetBroadcastShape(e,n);let o="vec4(0.0)";r!=null&&(N.assertAndGetBroadcastShape(e,r),this.variableNames.push("offset"),o="getOffsetAtOutCoords()");let i="vec4(1.0)";s!=null&&(N.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);
|
|
}
|
|
`}},LJ=({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:c}=n;c==null&&(c=.001);let u=[r,s,a],l=null;o!=null&&(l=o.shape,u.push(o));let p=null;i!=null&&(p=i.shape,u.push(i));let d=q().getBool("WEBGL_PACK_NORMALIZATION")?new MJ(r.shape,s.shape,a.shape,l,p,c):new OJ(r.shape,s.shape,a.shape,l,p,c);return t.runWebGLProgram(d,u,u[0].dtype)},zJ={kernelName:Ro,backendName:"webgl",kernelFunc:LJ},BJ=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=mt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=WJ(this.rank),r,s=e.map((a,o)=>`sourceLoc.${yv[o]} = start[${o}] + coords.${yv[o]};`);r=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${s.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
void main() {
|
|
${r}
|
|
setOutput(getSource(${n}));
|
|
}
|
|
`}},yv=["x","y","z","w","u","v"];function WJ(e){if(e===1)return"sourceLoc";if(e<=6)return yv.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var VJ=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=mt(this.rank),n=Tn("coords",this.rank),r=Tn("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};
|
|
}
|
|
}
|
|
`,c=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((u,l)=>`start[${l}]`).join()});`:e.map((u,l)=>`${r[l]} = ${n[l]} + start[${l}];`).join(`
|
|
`);this.userCode=`
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${c}
|
|
vec4 result = vec4(0.);
|
|
${o}
|
|
${i}
|
|
setOutput(result);
|
|
}
|
|
`}};function UJ(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=qt.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 c=r.dataRefCount.get(o.slice.origDataId)||1;return r.dataRefCount.set(o.slice.origDataId,c+1),a}function nl(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,size:o}=r,[i,c]=qt.parseSliceParams(s,a,o);if(qt.assertParamsValid(s,i,c),w.sizeFromShape(c)===0)return n.makeTensorInfo(c,s.dtype,[]);if(n.shouldExecuteOnCPU([s])||s.dtype==="string"){let p=n.texData.get(s.dataId),d=R9(p.values,i,c,s.shape,s.dtype);return n.makeTensorInfo(c,s.dtype,d)}let{isPacked:u}=n.texData.get(s.dataId),l=qt.isSliceContinous(s.shape,i,c);if(u||!l){let p=q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new VJ(c):new BJ(c),d=[i];return n.runWebGLProgram(p,[s],s.dtype,d)}return n.uploadToGPU(s.dataId),UJ(s,i,c,n)}var GJ={kernelName:Su,backendName:"webgl",kernelFunc:nl},HJ=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),c=N.getReshaped(s.shape,a,i),u=N.getPermuted(c.length,a.length),l=N.getReshapedPermuted(s.shape,a,i),p=N.getSliceBeginCoords(o,a.length),d=N.getSliceSize(l,o,a.length),h=[],f=he({inputs:{x:s},backend:n,attrs:{shape:c}}),m=Nn({inputs:{x:f},backend:n,attrs:{perm:u}}),g=he({inputs:{x:m},backend:n,attrs:{shape:l}}),b=nl({inputs:{x:g},backend:n,attrs:{begin:p,size:d}});return h.push(f),h.push(m),h.push(g),h.forEach(y=>n.disposeIntermediateTensorInfo(y)),b},qJ={kernelName:Uc,backendName:"webgl",kernelFunc:HJ};function jJ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,weights:a}=t,{size:o}=r,i=n.readSync(s.dataId),c=n.readSync(a.dataId),u=oE(i,c,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,u)}var KJ={kernelName:ff,backendName:"webgl",kernelFunc:jJ};function XJ(e){let{inputs:t,backend:n}=e,{s0:r,s1:s}=t,a=n.readSync(r.dataId),o=n.readSync(s.dataId),i=N.assertAndGetBroadcastShape(Array.from(a),Array.from(o));return n.makeTensorInfo([i.length],"int32",Int32Array.from(i))}var YJ={kernelName:mf,backendName:"webgl",kernelFunc:XJ},ZJ="return float(a != b);",wE=dn({opSnippet:ZJ,cpuKernelImpl:T9,dtype:"bool"}),JJ={kernelName:hu,backendName:"webgl",kernelFunc:wE};function lp(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 QJ={kernelName:Lf,backendName:"webgl",kernelFunc:lp},eQ="return float(int(x));";function tQ(e,t){let n=new Ns(e.shape,eQ),r=t.runWebGLProgram(n,[e],"int32");return{dataId:r.dataId,shape:r.shape,dtype:r.dtype}}function vv(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=vv({inputs:{x:s},backend:n,attrs:{dtype:"float32"}}),c=Ea({inputs:{real:i,imag:o},backend:n});return o.dispose(),n.disposeIntermediateTensorInfo(i),c}if(s.dtype==="complex64"){let o=lp({inputs:{input:s},backend:n}),i=vv({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,c,u]=a9(o,s.shape,s.dtype,a);return n.makeTensorInfo(i,c,u)}if(a==="int32")return tQ(s,n);if(a==="bool"){let o=n.makeTensorInfo([],"bool",w.getTypedArrayFromDType("bool",1)),c=wE({inputs:{a:s,b:o},backend:n});return n.disposeIntermediateTensorInfo(o),c}throw new Error(`Error in Cast: failed to cast ${s.dtype} to ${a}`)}var nQ={kernelName:wo,backendName:"webgl",kernelFunc:vv},T1="return ceil(x);",rQ=Ye({opSnippet:T1,packedOpSnippet:T1,cpuKernelImpl:o9}),sQ={kernelName:Io,backendName:"webgl",kernelFunc:rQ},aQ=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));
|
|
}
|
|
`}},oQ=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 iQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i;q().getBool("WEBGL_PACK_CLIP")?i=new oQ(s.shape):i=new aQ(s.shape);let c=[[a],[o]];return n.runWebGLProgram(i,[s],s.dtype,c)}var cQ={kernelName:ya,backendName:"webgl",kernelFunc:iQ},uQ=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 C1(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function lQ(e){let{inputs:t,backend:n}=e,{x:r}=t,s=n.texData.get(r.dataId),a=new uQ(r.shape),o=[C1(r,s.complexTensorInfos.real),C1(r,s.complexTensorInfos.imag)];return n.runWebGLProgram(a,o,o[0].dtype)}var dQ={kernelName:hd,backendName:"webgl",kernelFunc:lQ},pQ=class{constructor(e){this.outputShape=[],this.outputShape=N.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.length;a++)t[a]=t[a-1]+e[a][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let a=1;a<t.length;a++){let o=t[a-1];n.push(`else if (yC < ${t[a]}) setOutput(getT${a}(yR, yC-${o}));`)}let r=t.length,s=t[t.length-1];n.push(`else setOutput(getT${r}(yR, yC-${s}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},hQ=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=N.computeOutShape(e,t);let n=this.outputShape,r=n.length,s=mt(r),a=Tn("coords",r),o=["x","y","z","w","u","v"].slice(0,r);this.variableNames=e.map((f,m)=>`T${m}`);let i=new Array(e.length-1);i[0]=e[0][t];for(let f=1;f<i.length;f++)i[f]=i[f-1]+e[f][t];let c=o[t],u=o.slice(-2),l=o.join(),p=`if (${c} < ${i[0]}) {
|
|
return getChannel(
|
|
getT0(${l}), vec2(${u.join()}));
|
|
}`;for(let f=1;f<i.length;f++){let m=i[f-1];p+=`
|
|
if (${c} < ${i[f]} && ${c} >= ${i[f-1]}) {
|
|
return getChannel(
|
|
getT${f}(${yh(o,c,m)}),
|
|
vec2(${yh(u,c,m)}));
|
|
}`}let d=i.length,h=i[i.length-1];p+=`
|
|
return getChannel(
|
|
getT${d}(${yh(o,c,h)}),
|
|
vec2(${yh(u,c,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 yh(e,t,n){let r=e.indexOf(t);return e.map((a,o)=>o===r?`${a} - ${n}`:a).join()}function Qm(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 fQ={kernelName:_f,backendName:"webgl",kernelFunc:Qm};function Vl(e,t,n){let r=e[0].dtype;if(r==="complex64"){let p=e.map(g=>lp({inputs:{input:g},backend:n})),d=e.map(g=>Qm({inputs:{input:g},backend:n})),h=Vl(p,t,n),f=Vl(d,t,n),m=Ea({inputs:{real:h,imag:f},backend:n});return p.forEach(g=>n.disposeIntermediateTensorInfo(g)),d.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),m}let s=n.shouldExecuteOnCPU(e);if(r==="string"&&(s=!0),s){let p=e.map(y=>{let x=[-1,w.sizeFromShape(y.shape.slice(t))];return he({inputs:{x:y},backend:n,attrs:{shape:x}})}),d=p.map(y=>({vals:n.readSync(y.dataId),shape:y.shape})),h=N.computeOutShape(p.map(y=>y.shape),1),f=p[0].shape[0]===1,m=i9(d,h,r,f),g=N.computeOutShape(e.map(y=>y.shape),t),b=n.makeTensorInfo(g,r,m);return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),b}let a=q().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER");if(e.length>a){let p=[];for(let h=0;h<e.length;h+=a){let f=e.slice(h,h+a);p.push(Vl(f,t,n))}let d=Vl(p,t,n);for(let h of p)n.disposeIntermediateTensorInfo(h);return d}if(q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let p=new hQ(e.map(d=>d.shape),t);return n.runWebGLProgram(p,e,r)}let{tensors2D:o,outShape:i}=mQ(e,t,n),c=new pQ(o.map(p=>p.shape)),u=n.runWebGLProgram(c,o,r);o.forEach(p=>n.disposeIntermediateTensorInfo(p));let l=he({inputs:{x:u},attrs:{shape:i},backend:n});return n.disposeIntermediateTensorInfo(u),l}function mQ(e,t,n){let r=N.computeOutShape(e.map(a=>a.shape),t);return{tensors2D:e.map(a=>he({inputs:{x:a},attrs:{shape:[-1,w.sizeFromShape(a.shape.slice(t))]},backend:n})),outShape:r}}function IE(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r,a=w.parseAxisParam(s,t[0].shape)[0],o=t.map(u=>u.shape);N.assertParamsConsistent(o,a);let i=N.computeOutShape(t.map(u=>u.shape),a);if(w.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let c=t.filter(u=>w.sizeFromShape(u.shape)>0);return c.length===1?sr({inputs:{x:c[0]},backend:n}):Vl(c,a,n)}var gQ={kernelName:Gc,backendName:"webgl",kernelFunc:IE},kE=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,c=e.strideWidth,u=e.dilationHeight,l=e.dilationWidth,p=e.filterHeight,d=e.filterWidth,h=Math.floor(e.inChannels/4)*4,f=e.inChannels%4,m=e.dataFormat==="channelsLast",g=m?1:2,b=m?2:3,y=m?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}, ${c});
|
|
const ivec2 pads = ivec2(${a}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${y}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${g}], coords[${b}]) * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${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 * ${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 (${m}) {
|
|
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 (${m}) {
|
|
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 (${m}) {
|
|
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 (${m}) {
|
|
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);
|
|
}
|
|
`}},bQ=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,c=e.dilationHeight,u=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 * ${c};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d}; wC++) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${h}; d1 += 4) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xF, xR, xC, d1),
|
|
getX(batch, xF, xR, xC, d1 + 1),
|
|
getX(batch, xF, xR, xC, d1 + 2),
|
|
getX(batch, xF, xR, xC, d1 + 3)
|
|
);
|
|
vec4 wValues = vec4(
|
|
getW(wF, wR, wC, d1, d2),
|
|
getW(wF, wR, wC, d1 + 1, d2),
|
|
getW(wF, wR, wC, d1 + 2, d2),
|
|
getW(wF, wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
if (${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);
|
|
}
|
|
`}},SE=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=Dn(this.outputShape.length);let a=e.padInfo.left,o=e.strideWidth,i=e.dilationWidth,c=e.filterHeight,u=e.filterWidth,l=u,p=`
|
|
int xR; int xC; int xCOffset;
|
|
vec4 wTexel; vec4 previous; vec4 final;`;for(let m=0;m<u;m++)p+=`
|
|
vec4 xTexelC${m*2};
|
|
int xTexelC${m*2}Ready;
|
|
vec4 xTexelC${m*2+1};
|
|
int xTexelC${m*2+1}Ready;
|
|
vec4 xC${m};`;p+=`
|
|
for (int r = 0; r < ${c}; r++) {
|
|
for (int d1 = 0; d1 < ${e.inChannels}; d1 += 2) {
|
|
`;for(let m=0;m<u;m++)p+=`
|
|
xTexelC${m*2} = vec4(0.0);
|
|
xTexelC${m*2}Ready = 0;
|
|
xTexelC${m*2+1} = vec4(0.0);
|
|
xTexelC${m*2+1}Ready = 0;
|
|
xC${m} = vec4(0.0);`;p+=`
|
|
xR = xRCorner + r * dilations[0];
|
|
if (xR >=0 && xR < inDims[0]) {
|
|
`;for(let m=0;m<(l+1)/2;m++){let g=m*2;if(p+=`
|
|
xC = xCCorner + ${g*i};
|
|
`,o===1){if(g<u&&(a%2===1?(p+=`
|
|
xCOffset = xC + 1;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
`,i===1&&g>0?p+=`
|
|
xC${g} = vec4(xTexelC${g-2}.zw, xTexelC${g}.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${g} = vec4(previous.zw, xTexelC${g}.xy);
|
|
} else {
|
|
xC${g} = vec4(0.0, 0.0, xTexelC${g}.xy);
|
|
}
|
|
`):p+=`
|
|
if (xC >= 0 && xC < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
xC${g} = xTexelC${g};
|
|
`,g+1<u)){let b=a%2===0?w.nearestLargerEven(i):i;i%2===0&&a%2===1||i%2!==0&&a%2!==1?(p+=`
|
|
xCOffset = xC + imod(pads[1], 2) + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
`,i>1?p+=`
|
|
xCOffset -= 2;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
xC${g+1} = vec4(previous.zw, xTexelC${g+1}.xy);
|
|
} else {
|
|
xC${g+1} = vec4(0.0, 0.0, xTexelC${g+1}.xy);
|
|
}
|
|
`:p+=`
|
|
xC${g+1} = vec4(xTexelC${g}.zw, xTexelC${g+1}.xy);
|
|
`):b===1?p+=`
|
|
xC${g+1} = xTexelC${g};
|
|
`:p+=`
|
|
xCOffset = xC + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g+1} = xTexelC${g+1};
|
|
`}}else g<u&&(a%2===1?(p+=`
|
|
xCOffset = xC + 1 - strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xCOffset, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xC + 1, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xC + 2 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g} = vec4(xTexelC${g}.zw, xTexelC${g+1}.zw);
|
|
`,g+1<u&&(p+=`
|
|
final = vec4(0.0);
|
|
xCOffset = xC + 1 + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xC${g+1} = vec4(xTexelC${g+1}.xy, final.xy);
|
|
`)):(p+=`
|
|
if(xC >= 0 && xC < inDims[1] && xTexelC${g}Ready == 0) {
|
|
xTexelC${g} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${g}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${g}Ready = 1;
|
|
}
|
|
|
|
xCOffset = xC + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${g+1}Ready == 0) {
|
|
xTexelC${g+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${g+1}.zw = vec2(0.);
|
|
}
|
|
xTexelC${g+1}Ready = 1;
|
|
}
|
|
|
|
xC${g} = vec4(
|
|
xTexelC${g}.xy, xTexelC${g+1}.xy);
|
|
`,g+1<u&&(p+=`
|
|
xC${g+1} = vec4(xTexelC${g}.zw, xTexelC${g+1}.zw);
|
|
`)));g<u&&(p+=`
|
|
wTexel = getW(r, ${g}, d1, d2);
|
|
dotProd += xC${g}.xxzz * vec4(wTexel.xy, wTexel.xy);
|
|
if(d1 + 1 < ${e.inChannels}) {
|
|
dotProd += xC${g}.yyww * vec4(wTexel.zw, wTexel.zw);
|
|
}
|
|
`,g+1<u&&(p+=`
|
|
wTexel = getW(r, ${g+1}, d1, d2);
|
|
dotProd += xC${g+1}.xxzz * vec4(wTexel.xy, wTexel.xy);
|
|
if(d1 + 1 < ${e.inChannels}) {
|
|
dotProd += xC${g+1}.yyww * vec4(wTexel.zw, wTexel.zw);
|
|
}
|
|
`))}p+=`
|
|
}
|
|
`,p+=`
|
|
}
|
|
`,p+=`
|
|
}
|
|
`;let d="",h="";n&&(r?d=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:s?d=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:d=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,h="result = activation(result);");let f=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${d}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
|
|
vec4 dotProd = vec4(0.000000000000001);
|
|
|
|
${p}
|
|
|
|
vec4 result = dotProd - vec4(0.000000000000001);
|
|
${f}
|
|
${h}
|
|
setOutput(result);
|
|
}
|
|
`}},yQ=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec4"},{name:"pad",type:"ivec2"},{name:"stride",type:"ivec2"},{name:"dilation",type:"ivec2"},{name:"inChannels",type:"int"},{name:"itemsPerBlockRow",type:"int"},{name:"outWidth",type:"int"}],this.outputShape=e,this.enableShapeUniforms=Dn(this.outputShape.length);let{dataFormat:n}=t,r=$n(),s=n==="channelsLast",a=s?1:2,o=s?2:3,i=this.enableShapeUniforms?"if(blockIndex < outShape[2] && pos < outShape[1]) {":`if(blockIndex < ${e[2]} && pos < ${e[1]}) {`,c="";for(let u=0;u<=1;u++)for(let l=0;l<=1;l++)c+=`
|
|
blockIndex = rc.z + ${l};
|
|
pos = rc.y + ${u};
|
|
|
|
${i}
|
|
offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];
|
|
d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);
|
|
|
|
if(d0 < inputShape[${a}] && d0 >= 0) {
|
|
// Use custom imod instead mod. On Intel GPU, mod may generate
|
|
// unexpected value.
|
|
// https://github.com/tensorflow/tfjs/issues/5447
|
|
offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];
|
|
d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /
|
|
inChannels);
|
|
|
|
if(d1 < inputShape[${o}] && d1 >= 0) {
|
|
|
|
ch = imod(pos, inChannels);
|
|
|
|
if (${s}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${u*2+l}] = getChannel(
|
|
getA(rc.x, d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${u*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;
|
|
|
|
${c}
|
|
|
|
${r.output} = result;
|
|
}
|
|
`}};function sf(e,t){let n=e.length;return n>=3?t?[...e.slice(0,-3),e[n-3]*e[n-2],e[n-1]]:[...e.slice(0,-3),e[n-3],e[n-2]*e[n-1]]:!t&&n===1&&e[0]>1?[e[0],1]:null}function TE({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:o=0,activation:i=null}){let c=e.shape,u=r.texData.get(e.dataId),l=n.inChannels,p=c[0]*c[1]*c[2],d=n.outChannels,h=n.dataFormat==="channelsLast",f=!1,m=!1,g,b=[];if(a!=null){let x=sf(a.shape,h);x!=null&&(a=he({inputs:{x:a},backend:r,attrs:{shape:x}}),b.push(a))}if(s!=null){let x=sf(s.shape,h);x!=null&&(s=he({inputs:{x:s},backend:r,attrs:{shape:x}}),b.push(s))}if(!((p===1||d===1)&&l>bE)&&u.isPacked&&h&&u.texture!=null&&c[2]%2!==0&&w.arraysEqual(u.shape.slice(-3),c.slice(-3))){let x=c[0]*c[1]*(c[2]+1),k={dataId:e.dataId,shape:[1,x,n.inChannels],dtype:e.dtype},S=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,w.assert(ad(u.shape,k.shape),()=>`packed reshape ${u.shape} to ${k.shape} isn't free`);let C=he({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}});b.push(C);let E=rf({a:k,b:C,backend:r,transposeA:f,transposeB:m,bias:s,activation:i,preluActivationWeights:a,leakyreluAlpha:o}),$=r.texData.get(E.dataId);w.assert($.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=S,$.shape=n.outShape,g=sr({inputs:{x:E},backend:r}),g.shape=n.outShape,b.push(E)}else{let x=n.outHeight*n.outWidth,k=he({inputs:{x:e},backend:r,attrs:{shape:h?[n.batchSize,x,n.inChannels]:[n.batchSize,n.inChannels,x]}}),S=he({inputs:{x:t},backend:r,attrs:{shape:[1,n.inChannels,n.outChannels]}}),C=rf({a:h?k:S,b:h?S:k,transposeA:!h,transposeB:m,backend:r,bias:s,activation:i,preluActivationWeights:a,leakyreluAlpha:o});g=he({inputs:{x:C},backend:r,attrs:{shape:n.outShape}}),b.push(k),b.push(S),b.push(C)}for(let x of b)r.disposeIntermediateTensorInfo(x);return g}function CE({x:e,filter:t,convInfo:n,backend:r,bias:s=null,preluActivationWeights:a=null,leakyreluAlpha:o=0,activation:i=null}){let{filterWidth:c,filterHeight:u,inChannels:l,outWidth:p,outHeight:d,dataFormat:h}=n,f=h==="channelsLast",m=c*u*l,g=d*p,b=[n.batchSize,m,g],y=!0,v=!1,x=[];if(a!=null){let H=sf(a.shape,f);H!=null&&(a=he({inputs:{x:a},backend:r,attrs:{shape:H}}),x.push(a))}if(s!=null){let H=sf(s.shape,f);H!=null&&(s=he({inputs:{x:s},backend:r,attrs:{shape:H}}),x.push(s))}let k=he({inputs:{x:t},backend:r,attrs:{shape:[1,m,w.sizeFromShape(t.shape)/m]}});x.push(k);let S=new yQ(b,n),C=[e.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],E=r.runWebGLProgram(S,[e],"float32",C),$=he({inputs:{x:E},backend:r,attrs:{shape:b}});x.push(E),x.push($);let F=s!=null,A=a!=null,R=i==="leakyrelu",T=i?od(i,!0):null,L=new gE(f?$.shape:k.shape,f?k.shape:$.shape,f?[n.batchSize,g,n.outChannels]:[n.batchSize,n.outChannels,g],y,v,F,T,A,R),V=f?[$,k]:[k,$];if(s&&V.push(s),A&&V.push(a),R){let H=r.makeTensorInfo([],"float32",w.createScalarValue(o,"float32"));V.push(H),x.push(H)}let G=r.runWebGLProgram(L,V,"float32"),j=he({inputs:{x:G},backend:r,attrs:{shape:n.outShape}});x.push(G);for(let H of x)r.disposeIntermediateTensorInfo(H);return j}function vQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dataFormat:c,dilations:u,dimRoundingMode:l}=r,p=N.convertConv2DDataFormat(c),d=N.computeConv2DInfo(s.shape,a.shape,o,u,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=TE({x:s,filter:a,convInfo:d,backend:n});else if(d.strideWidth<=2&&p==="channelsLast"&&q().getBool("WEBGL_EXP_CONV")){let m=new SE(d),g=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];h=n.runWebGLProgram(m,[s,a],"float32",g)}else if(q().getBool("WEBGL_CONV_IM2COL"))h=CE({x:s,filter:a,convInfo:d,backend:n});else{let m=new kE(d);h=n.runWebGLProgram(m,[s,a],"float32")}let f=he({inputs:{x:h},backend:n,attrs:{shape:d.outShape}});return n.disposeIntermediateTensorInfo(h),f}var xQ={kernelName:ko,backendName:"webgl",kernelFunc:vQ},wQ=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;
|
|
}
|
|
|
|
if (${a}) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},IQ=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,c=a?1:2,u=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[${c}], coords[${u}]) - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
// Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${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);
|
|
}
|
|
`}},kQ=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);
|
|
}
|
|
`}},SQ=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,c=n-1-e.padInfo.top,u=r-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${i}, ${c}, ${u});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.u;
|
|
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyFCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${t}; wF++) {
|
|
float dyF = float(dyFCorner + wF) / ${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 TQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,dataFormat:c,dimRoundingMode:u,filterShape:l}=r,p=N.convertConv2DDataFormat(c),d=N.computeConv2DInfo(s.shape,l,o,1,i,u,!1,p),h=new wQ(d);return n.runWebGLProgram(h,[s,a],"float32")}var CQ={kernelName:bf,backendName:"webgl",kernelFunc:TQ};function NQ(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{inputShape:o,strides:i,pad:c,dataFormat:u,dimRoundingMode:l}=r,p=N.convertConv2DDataFormat(u),d=N.computeConv2DInfo(o,a.shape,i,1,c,l,!1,p),h=new IQ(d);return n.runWebGLProgram(h,[s,a],"float32")}var _Q={kernelName:So,backendName:"webgl",kernelFunc:NQ};function EQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:c}=r,u=N.computeConv3DInfo(s.shape,a.shape,o,c,i),l=new bQ(u);return n.runWebGLProgram(l,[s,a],"float32")}var AQ={kernelName:fd,backendName:"webgl",kernelFunc:EQ};function $Q(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,pad:i,filterShape:c}=r,u=N.computeConv3DInfo(s.shape,c,o,1,i),l=new kQ(u);return n.runWebGLProgram(l,[s,a],"float32")}var DQ={kernelName:yf,backendName:"webgl",kernelFunc:$Q};function FQ(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{pad:o,strides:i,inputShape:c}=r,u=N.computeConv3DInfo(c,a.shape,i,1,o),l=new SQ(u);return n.runWebGLProgram(l,[s,a],"float32")}var RQ={kernelName:vf,backendName:"webgl",kernelFunc:FQ},PQ=tl+`
|
|
return cos(x);
|
|
`,OQ=Ye({opSnippet:PQ}),MQ={kernelName:To,backendName:"webgl",kernelFunc:OQ},LQ=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,zQ=Ye({opSnippet:LQ}),BQ={kernelName:Co,backendName:"webgl",kernelFunc:zQ},WQ=class{constructor(e,t,n,r,s){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[a,o,i,c]=e,[u]=t,[l,p]=n;this.outputShape=[u,l,p,c];let d=r==="bilinear"?1:0,[h,f]=[`${o-1}.0`,`${i-1}.0`],[m,g,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(${m});
|
|
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 = ${g};
|
|
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);
|
|
}
|
|
}
|
|
`}},VQ=e=>{let{inputs:t,backend:n,attrs:r}=e,{image:s,boxes:a,boxInd:o}=t,{cropSize:i,method:c,extrapolationValue:u}=r,l=new WQ(s.shape,a.shape,i,c,u);return n.runWebGLProgram(l,[s,a,o],"float32")},UQ={kernelName:qc,backendName:"webgl",kernelFunc:VQ},cd;(function(e){e.Prod="*",e.Sum="+"})(cd||(cd={}));var N1=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===cd.Prod?"1.0":"0.0",o=n?a:`getX(${_1(s,"coords",this.op)})`,i=this.outputShape[this.outputShape.length-1],c="",u="";n?(c=r?`end != ${i-1}`:"end != 0",u=r?"end + 1":"end - 1"):(c=r?`end + pow2 < ${i}`:"end >= pow2",u=r?"end + pow2":"end - pow2"),this.userCode=`
|
|
void main() {
|
|
${mt(s)} coords = getOutputCoords();
|
|
int end = ${E1(s,"coords",this.op)};
|
|
float val = ${o};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${c}) {
|
|
int idx = ${u};
|
|
${E1(s,"coords",this.op)} = idx;
|
|
val ${this.op}= getX(${_1(s,"coords",this.op)});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}};function _1(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 E1(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 NE(e,t,n,r,s,a){let o=t.shape.length,i=N.getAxesPermutation([r],o),c=t;i!=null&&(c=Nn({inputs:{x:t},backend:n,attrs:{perm:i}}));let u=N.getInnerMostAxes(1,o)[0];if(u!==o-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${t.shape.length-1} but got axis=${r}`);let l=c.shape[u],p=sr({inputs:{x:c},backend:n});for(let d=0;d<=Math.ceil(Math.log2(l))-1;d++){let h=new N1(e,c.shape,!1,a),f=[[d]],m=p;p=n.runWebGLProgram(h,[p],p.dtype,f),n.disposeIntermediateTensorInfo(m)}if(s){let d=new N1(e,c.shape,s,a),h=p;p=n.runWebGLProgram(d,[p],p.dtype),n.disposeIntermediateTensorInfo(h)}if(i!=null){let d=N.getUndoAxesPermutation(i),h=Nn({inputs:{x:p},backend:n,attrs:{perm:d}});return n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(c),h}return p}function GQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;return NE(cd.Prod,s,n,a,o,i)}var HQ={kernelName:Hc,backendName:"webgl",kernelFunc:GQ};function qQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r;return NE(cd.Sum,s,n,a,o,i)}var jQ={kernelName:No,backendName:"webgl",kernelFunc:qQ};function KQ(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 c=n.readSync(s.dataId),u=n.readSync(a.dataId),l=oE(c,u,a.dtype,a.shape,o);return n.makeTensorInfo([o],a.dtype,l)}else if(s.shape.length===2){let c=n.bufferSync(s),u=n.bufferSync(a),l=s9(c,u,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 XQ={kernelName:xf,backendName:"webgl",kernelFunc:KQ},YQ=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 ZQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockSize:a,dataFormat:o}=r,i=s.shape[0],c=o==="NHWC"?s.shape[1]:s.shape[2],u=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],p=c*a,d=u*a,h=l/(a*a),f=o==="NHWC"?[i,p,d,h]:[i,h,p,d],m=new YQ(f,a,o);return n.runWebGLProgram(m,[s],s.dtype)}var JQ={kernelName:jc,backendName:"webgl",kernelFunc:ZQ},_E=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=Dn(this.outputShape.length);let a=e.filterHeight,o=e.filterWidth,i=e.outChannels/e.inChannels,c="",u="";n&&(r?c=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:s?c=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:c=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,u="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=`
|
|
${c}
|
|
|
|
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}
|
|
${u}
|
|
setOutput(result);
|
|
}
|
|
`}},EE=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=Dn(this.outputShape.length);let a=e.outChannels/e.inChannels,o=e.padInfo.left,i=e.strideWidth,c=e.dilationWidth,u=e.filterHeight,l=e.filterWidth,p=l,d=`
|
|
int xR; int xC; int xCOffset;
|
|
vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g<l;g++)d+=`
|
|
vec4 xTexelC${g*2};
|
|
int xTexelC${g*2}Ready;
|
|
vec4 xTexelC${g*2+1};
|
|
int xTexelC${g*2+1}Ready;
|
|
vec4 xC${g};`;d+=`
|
|
for (int r = 0; r < ${u}; r++) {
|
|
`;for(let g=0;g<l;g++)d+=`
|
|
xTexelC${g*2} = vec4(0.0);
|
|
xTexelC${g*2}Ready = 0;
|
|
xTexelC${g*2+1} = vec4(0.0);
|
|
xTexelC${g*2+1}Ready = 0;
|
|
xC${g} = vec4(0.0);`;d+=`
|
|
xR = xRCorner + r * dilations[0];
|
|
if (xR >=0 && xR < inDims[0]) {
|
|
`;for(let g=0;g<(p+1)/2;g++){let b=g*2;if(d+=`
|
|
xC = xCCorner + ${b*c};
|
|
`,i===1){if(b<l&&(o%2===1?(d+=`
|
|
xCOffset = xC + 1;
|
|
if (xCOffset >= 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;
|
|
}
|
|
`,c===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<l)){let y=o%2===0?w.nearestLargerEven(c):c;c%2===0&&o%2===1||c%2!==0&&o%2!==1?(d+=`
|
|
xCOffset = xC + imod(pads[1], 2) + ${y};
|
|
|
|
if (xCOffset >= 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;
|
|
}
|
|
`,c>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<l&&(o%2===1?(d+=`
|
|
xCOffset = xC + 1 - strides[1];
|
|
if(xCOffset >= 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<l&&(d+=`
|
|
final = vec4(0.0);
|
|
xCOffset = xC + 1 + strides[1];
|
|
if(xCOffset >= 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<l&&(d+=`
|
|
xC${b+1} = vec4(xTexelC${b}.zw, xTexelC${b+1}.zw);
|
|
`)));b<l&&(d+=`
|
|
wTexel = getW(r, ${b}, d1, q);
|
|
dotProd += xC${b} * vec4(wTexel.xz, wTexel.xz);
|
|
`,b+1<l&&(d+=`
|
|
wTexel = getW(r, ${b+1}, d1, q);
|
|
dotProd += xC${b+1} * vec4(wTexel.xz, wTexel.xz);
|
|
`))}d+=`
|
|
}
|
|
`,d+=`
|
|
}
|
|
`;let h="",f="";n&&(r?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:s?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:h=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,f="result = activation(result);");let m=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),r&&this.variableNames.push("preluActivationWeights"),s&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${h}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${a};
|
|
int q = d2 - d1 * ${a};
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
|
|
vec4 dotProd = vec4(0.000000000000001);
|
|
|
|
${d}
|
|
|
|
vec4 result = dotProd - vec4(0.000000000000001);
|
|
${m}
|
|
${f}
|
|
setOutput(result);
|
|
}
|
|
`}};function QQ(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:c,dimRoundingMode:u}=r,l=c;l==null&&(l=[1,1]),w.assert(N.eitherStridesOrDilationsAreOne(o,l),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${l}'`);let p=N.computeConv2DInfo(s.shape,a.shape,o,l,i,u,!0),d;q().getBool("WEBGL_PACK_DEPTHWISECONV")&&p.strideWidth<=2&&p.outChannels/p.inChannels===1?d=new EE(p):d=new _E(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 eee={kernelName:_o,backendName:"webgl",kernelFunc:QQ},tee=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);
|
|
}
|
|
`}},nee=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 ree(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,dy:a}=t,{strides:o,dilations:i,pad:c,dimRoundingMode:u,filterShape:l}=r,p=N.computeConv2DInfo(s.shape,l,o,i,c,u,!0),d=new tee(p);return n.runWebGLProgram(d,[s,a],"float32")}var see={kernelName:wf,backendName:"webgl",kernelFunc:ree};function aee(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,filter:a}=t,{strides:o,dilations:i,pad:c,dimRoundingMode:u,inputShape:l}=r,p=N.computeConv2DInfo(l,a.shape,o,i,c,u,!0),d=new nee(p);return n.runWebGLProgram(d,[s,a],"float32")}var oee={kernelName:If,backendName:"webgl",kernelFunc:aee},iee=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 cee(e){let{inputs:t,backend:n}=e,{x:r}=t,s=[...r.shape,...r.shape],a=w.sizeFromShape(r.shape),o=he({inputs:{x:r},backend:n,attrs:{shape:[a]}}),i=new iee(a),c=n.runWebGLProgram(i,[o],o.dtype),u=he({inputs:{x:c},backend:n,attrs:{shape:s}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(c),u}var uee={kernelName:kf,backendName:"webgl",kernelFunc:cee},lee=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:c,dilationWidth:u}=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 * ${c};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${i}; w++) {
|
|
int wIn = wBeg + w * ${u};
|
|
|
|
if (wIn >= 0 && wIn < ${n}) {
|
|
float xVal = getX(batch, hIn, wIn, d1);
|
|
float wVal = getW(h, w, d1);
|
|
|
|
float val = xVal + wVal;
|
|
if (val > curVal) {
|
|
curVal = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = curVal;
|
|
setOutput(result);
|
|
}
|
|
`}};function dee(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a}=t,{strides:o,pad:i,dilations:c}=r,u=N.computeDilation2DInfo(s.shape,a.shape,o,i,"NHWC",c),l,p=new lee(u);l=n.runWebGLProgram(p,[s,a],"float32");let d=he({inputs:{x:l},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(l),d}var pee={kernelName:md,backendName:"webgl",kernelFunc:dee};function hee(e){let{inputs:t,backend:n,attrs:r}=e,{equation:s}=r,a=t,{allDims:o,summedDims:i,idDims:c}=N.decodeEinsumEquation(s,a.length);N.checkEinsumDimSizes(o.length,c,a);let{path:u,steps:l}=N.getEinsumComputePath(i,c),p=l.length,d=null,h=o.length,f=[];for(let m=0;m<p;++m){for(let g of l[m]){let{permutationIndices:b,expandDims:y}=N.getEinsumPermutation(h,c[g]),v;N.isIdentityPermutation(b)?v=a[g]:(v=Nn({inputs:{x:a[g]},backend:n,attrs:{perm:b}}),f.push(v));let x=v.shape.slice();for(let k=0;k<y.length;++k)x.splice(y[k],0,1);w.arraysEqual(v.shape,x)||(v=he({inputs:{x:v},backend:n,attrs:{shape:x}}),f.push(v)),d===null?d=v:(d=iI({inputs:{a:v,b:d},backend:n}),f.push(d))}m<p-1&&(u[m]>=0&&(d=Jm({inputs:{x:d},backend:n,attrs:{axis:u[m]-(o.length-h),keepDims:!1}}),f.push(d)),h--)}for(let m of f)m!==d&&n.disposeIntermediateTensorInfo(m);return d}var fee={kernelName:Sf,backendName:"webgl",kernelFunc:hee},mee="return (x >= 0.0) ? x : (exp(x) - 1.0);",gee=`
|
|
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;
|
|
`,bee=Ye({opSnippet:mee,packedOpSnippet:gee}),yee={kernelName:Ao,backendName:"webgl",kernelFunc:bee},vee="return (b >= 1.0) ? a : a * (b + 1.0);",xee=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,wee=e=>{let{inputs:t,backend:n}=e,{dy:r,y:s}=t,a=q().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new up(xee,r.shape,s.shape):new $c(vee,r.shape,s.shape);return n.runWebGLProgram(a,[r,s],r.dtype)},Iee={kernelName:Tf,backendName:"webgl",kernelFunc:wee},kee=`
|
|
return vec4(equal(a, b));
|
|
`,See="return float(a == b);",Tee=dn({opSnippet:See,packedOpSnippet:kee,dtype:"bool",cpuKernelImpl:c9}),Cee={kernelName:Xc,backendName:"webgl",kernelFunc:Tee},Nee=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${N.ERF_P};
|
|
float a1 = ${N.ERF_A1};
|
|
float a2 = ${N.ERF_A2};
|
|
float a3 = ${N.ERF_A3};
|
|
float a4 = ${N.ERF_A4};
|
|
float a5 = ${N.ERF_A5};
|
|
|
|
float sign = sign(x);
|
|
x = abs(x);
|
|
float t = 1.0 / (1.0 + p * x);
|
|
return sign * (1.0 - (((((a5*t + a4)*t) + a3)*t + a2)*t + a1)*t*exp(-x*x));
|
|
`,_ee=Ye({opSnippet:Nee}),Eee={kernelName:Kc,backendName:"webgl",kernelFunc:_ee},Aee=tl+`
|
|
return exp(x);
|
|
`,$ee=`
|
|
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;
|
|
`,AE=Ye({opSnippet:Aee,packedOpSnippet:$ee,cpuKernelImpl:u9,dtype:"float32"}),Dee={kernelName:$o,backendName:"webgl",kernelFunc:AE};function xv(e){let{inputs:t,attrs:n,backend:r}=e,{dim:s}=n,{input:a}=t,o=a.shape.length,i=a.shape.slice(),c=s;return s<0&&(w.assert(-(o+1)<=s,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),c=o+s+1),i.splice(c,0,1),he({inputs:{x:a},backend:r,attrs:{shape:i}})}var Fee={kernelName:Yc,backendName:"webgl",kernelFunc:xv},A1="return exp(x) - 1.0;",Ree=Ye({opSnippet:A1,packedOpSnippet:A1,cpuKernelImpl:l9}),Pee={kernelName:Zc,backendName:"webgl",kernelFunc:Ree},$1=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 $E(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=he({inputs:{x:e},backend:n,attrs:{shape:[o,a]}}),c=i.shape,u=new $1("real",c,t),l=new $1("imag",c,t),p=[{dataId:r.complexTensorInfos.real.dataId,dtype:r.complexTensorInfos.real.dtype,shape:c},{dataId:r.complexTensorInfos.imag.dataId,dtype:r.complexTensorInfos.imag.dtype,shape:c}],d=n.runWebGLProgram(u,p,"float32"),h=n.runWebGLProgram(l,p,"float32"),f=Ea({inputs:{real:d,imag:h},backend:n});n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h);let m=he({inputs:{x:f},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(f),m}function Oee(e){let{inputs:t,backend:n}=e,{input:r}=t;return $E(r,!1,n)}var Mee={kernelName:Cf,backendName:"webgl",kernelFunc:Oee},Lee=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 dp(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 Lee(r,s),i=[[s]];return t.runWebGLProgram(o,[],a,i)}}var zee={kernelName:gd,backendName:"webgl",kernelFunc:dp},Bee=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);
|
|
}
|
|
`}},Wee={kernelName:Jc,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,r=t,s=new Bee(n.shape);return r.runWebGLProgram(s,[n],n.dtype)}},D1="return floor(x);",Vee=Ye({opSnippet:D1,packedOpSnippet:D1,cpuKernelImpl:d9}),Uee={kernelName:Do,backendName:"webgl",kernelFunc:Vee},Gee=`
|
|
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;
|
|
}
|
|
`,Hee=`
|
|
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);
|
|
`,qee=dn({opSnippet:Gee,packedOpSnippet:Hee,dtype:"int32"}),jee={kernelName:Fo,backendName:"webgl",kernelFunc:qee},Kee=class{constructor(e){this.variableNames=["A"];let t=$n(),[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));
|
|
}
|
|
`}},Xee=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=$n(),[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;
|
|
}
|
|
`}},Yee={kernelName:Fh,backendName:"webgl",kernelFunc:Zee},ac,Ty=q().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");function Zee(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,[c,u]=o?[s.videoWidth,s.videoHeight]:[s.width,s.height],l=[u,c],p=[u,c,a];if(i||o){let m=q().getBool("CANVAS2D_WILL_READ_FREQUENTLY_FOR_GPU");(ac==null||m!==Ty)&&(Ty=m,ac=document.createElement("canvas").getContext("2d",{willReadFrequently:Ty})),ac.canvas.width=c,ac.canvas.height=u,ac.drawImage(s,0,0,c,u),s=ac.canvas}let d=n.makeTensorInfo(l,"int32");n.texData.get(d.dataId).usage=ur.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(d.dataId),s);let h=q().getBool("WEBGL_PACK")?new Xee(p):new Kee(p),f=n.runWebGLProgram(h,[d],"int32");return n.disposeData(d.dataId),f}function Jee(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dataFormat:l,dilations:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=r,m=N.convertConv2DDataFormat(l),g=N.computeConv2DInfo(s.shape,a.shape,c,p,u,d,!1,m),b,y=[],v=o!=null,x=i!=null,k=h==="leakyrelu",S=()=>{let E=[s,a],$=(F,A)=>{if(A==="NCHW"&&F.shape.length===1&&F.shape[0]!==1){let R=he({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(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))b=TE({x:s,filter:a,convInfo:g,backend:n,bias:o,activation:h,preluActivationWeights:i,leakyreluAlpha:f});else if(g.strideWidth<=2&&m==="channelsLast"&&q().getBool("WEBGL_EXP_CONV")){let E=h?od(h,!0):null,$=new SE(g,v,E,x,k),F=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],A=S();b=n.runWebGLProgram($,A,"float32",F)}else if(q().getBool("WEBGL_CONV_IM2COL"))b=CE({x:s,filter:a,convInfo:g,backend:n,bias:o,activation:h,preluActivationWeights:i,leakyreluAlpha:f});else{let E=h?od(h,!1):null,$=new kE(g,v,E,x,k),F=S();b=n.runWebGLProgram($,F,"float32")}let C=he({inputs:{x:b},backend:n,attrs:{shape:g.outShape}});return y.push(b),y.forEach(E=>n.disposeIntermediateTensorInfo(E)),C}var Qee={kernelName:to,backendName:"webgl",kernelFunc:Jee};function ete(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dimRoundingMode:p,activation:d,leakyreluAlpha:h}=r,f=[],m=l;m==null&&(m=[1,1]),w.assert(N.eitherStridesOrDilationsAreOne(c,m),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${c} and dilations '${m}'`);let g=N.computeConv2DInfo(s.shape,a.shape,c,m,u,p,!0),b=q().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,y=d?od(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 C;b?C=new EE(g,x,y,k,S):C=new _E(g,x,y,k,S);let E=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],$=n.runWebGLProgram(C,v,"float32",E);return f.forEach(F=>n.disposeIntermediateTensorInfo(F)),$}var tte={kernelName:no,backendName:"webgl",kernelFunc:ete},nte=class{constructor(e,t,n,r){this.sliceDim=e,this.strides=t,this.paramsShape=r,this.variableNames=["x","indices"],this.outputShape=n;let s=mt(n.length),a=`
|
|
int index;`;for(let o=0;o<this.sliceDim;o++)a+=`
|
|
index = round(getIndices(coords[0], ${o}));
|
|
out_of_bounds = out_of_bounds || index < 0;
|
|
out_of_bounds = out_of_bounds || index >= ${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 rte(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),[c,u,l,p]=N.prepareAndValidate(r,s),d=he({inputs:{x:s},backend:n,attrs:{shape:[u,o]}}),h=he({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=p9(b,y,r.dtype,u,o,l,p,r.shape,i);return n.makeTensorInfo(c,r.dtype,v.values)}let f=new nte(o,p,[u,l],r.shape),m=n.runWebGLProgram(f,[h,d],h.dtype),g=he({inputs:{x:m},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),g}var ste={kernelName:eu,backendName:"webgl",kernelFunc:rte},ate=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=mt(this.rank),r=ote(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 ote(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],r=[];for(let s=0;s<e.length;s++)s===2?r.push("index"):r.push(`${n[s]}`);return r.join()}function DE(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,indices:a}=t,{axis:o,batchDims:i}=r,c=w.parseAxisParam(o,s.shape)[0];if(q().get("DEBUG")){let y=n.readSync(a.dataId),v=s.shape[c];for(let x=0;x<y.length;++x){let k=y[x];w.assert(k<=v-1&&k>=0,()=>`GatherV2: the index value ${k} is not in [0, ${v-1}]`)}}let u=N.segment_util.collectGatherOpShapeInfo(s,a,c,i),l=w.sizeFromShape(a.shape),p=[],d=he({inputs:{x:s},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=he({inputs:{x:a},backend:n,attrs:{shape:[u.batchSize,l/u.batchSize]}});p.push(d),p.push(h);let f=[u.batchSize,u.outerSize,l/u.batchSize,u.sliceSize];if(n.shouldExecuteOnCPU([s,a])||s.dtype==="string"){let y=n.bufferSync(h),v=n.bufferSync(d),x=h9(v,y,f);return p.forEach(k=>n.disposeIntermediateTensorInfo(k)),n.makeTensorInfo(u.outputShape,x.dtype,x.values)}let m=new ate(d.shape,f),g=n.runWebGLProgram(m,[d,h],d.dtype);p.push(g);let b=he({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),b}var ite={kernelName:Qc,backendName:"webgl",kernelFunc:DE},cte="return float(a > b);",ute=`
|
|
return vec4(greaterThan(a, b));
|
|
`,lte=dn({opSnippet:cte,packedOpSnippet:ute,cpuKernelImpl:f9,dtype:"bool"}),dte={kernelName:tu,backendName:"webgl",kernelFunc:lte},pte="return float(a >= b);",hte=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,fte=dn({opSnippet:pte,packedOpSnippet:hte,dtype:"bool",cpuKernelImpl:m9}),mte={kernelName:Po,backendName:"webgl",kernelFunc:fte};function gte(e){let{inputs:t,backend:n}=e,{input:r}=t;return $E(r,!0,n)}var bte={kernelName:Nf,backendName:"webgl",kernelFunc:gte},yte="return float(!isnan(x) && !isinf(x));",vte=Ye({opSnippet:yte,dtype:"bool"}),xte={kernelName:nu,backendName:"webgl",kernelFunc:vte},wte="return float(isinf(x));",Ite=Ye({opSnippet:wte,dtype:"bool"}),kte={kernelName:ru,backendName:"webgl",kernelFunc:Ite},Ste="return float(isnan(x));",Tte=Ye({opSnippet:Ste,dtype:"bool"}),Cte={kernelName:su,backendName:"webgl",kernelFunc:Tte},Nte="return float(a < b);",_te=`
|
|
return vec4(lessThan(a, b));
|
|
`,Ete=dn({opSnippet:Nte,packedOpSnippet:_te,cpuKernelImpl:g9,dtype:"bool"}),Ate={kernelName:au,backendName:"webgl",kernelFunc:Ete},$te="return float(a <= b);",Dte=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,Fte=dn({opSnippet:$te,packedOpSnippet:Dte,cpuKernelImpl:b9,dtype:"bool"}),Rte={kernelName:ou,backendName:"webgl",kernelFunc:Fte};function Pte(e){let{backend:t,attrs:n}=e,{start:r,stop:s,num:a}=n,o=y9(r,s,a);return t.makeTensorInfo([o.length],"float32",o)}var Ote={kernelName:Ef,backendName:"webgl",kernelFunc:Pte},Mte=tl+`
|
|
return x < 0.0 ? 0./0. : log(x);
|
|
`,Lte=`
|
|
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;
|
|
`,zte=Ye({opSnippet:Mte,packedOpSnippet:Lte,cpuKernelImpl:v9}),Bte={kernelName:Lo,backendName:"webgl",kernelFunc:zte},Wte=tl+`
|
|
return log(1.0 + x);
|
|
`,Vte=Ye({opSnippet:Wte}),Ute={kernelName:iu,backendName:"webgl",kernelFunc:Vte},Gte="return float(a >= 1.0 && b >= 1.0);",Hte=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,qte=dn({opSnippet:Gte,packedOpSnippet:Hte,dtype:"bool"}),jte={kernelName:cu,backendName:"webgl",kernelFunc:qte},Kte="return float(!(x >= 1.0));",Xte=Ye({opSnippet:Kte}),Yte={kernelName:uu,backendName:"webgl",kernelFunc:Xte},Zte="return float(a >= 1.0 || b >= 1.0);",Jte=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,Qte=dn({opSnippet:Zte,packedOpSnippet:Jte,dtype:"bool"}),ene={kernelName:lu,backendName:"webgl",kernelFunc:Qte},tne=class{constructor(e,t,n,r,s){this.variableNames=["x"],this.outputShape=[];let a=t,o=e[3]-1;this.outputShape=e;let i,c=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${c})`:s===1?i=`1.0/(${c})`:i=`exp(log(${c}) * 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);
|
|
}
|
|
`}},nne=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,c=`float(${n}) + float(${r}) * sum`;s===.5?i=`inversesqrt(${c})`:s===1?i=`1.0/(${c})`:i=`exp(log(${c}) * 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);
|
|
}
|
|
`}},rne=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{depthRadius:a,bias:o,alpha:i,beta:c}=r,u=q().getBool("WEBGL_PACK_NORMALIZATION")?new nne(s.shape,a,o,i,c):new tne(s.shape,a,o,i,c);return n.runWebGLProgram(u,[s],s.dtype)},sne={kernelName:bd,backendName:"webgl",kernelFunc:rne},ane=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);
|
|
}
|
|
`}},one=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s,y:a,dy:o}=t,{depthRadius:i,bias:c,alpha:u,beta:l}=r,p=new ane(s.shape,i,c,u,l);return n.runWebGLProgram(p,[s,a,o],s.dtype)},ine={kernelName:Af,backendName:"webgl",kernelFunc:one};function cne(e,t,n,r){let s=w.sizeFromShape(t),o=w.sizeFromShape(e.shape)/s,i=he({inputs:{x:e},attrs:{shape:[o,s]},backend:r}),c=Si(i,e.dtype,"max",r),u=he({inputs:{x:c},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(c),u}function FE(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reductionIndices:a,keepDims:o}=r,i=s.shape.length,c=w.parseAxisParam(a,s.shape),u=c,l=N.getAxesPermutation(u,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 C=0;C<x.length;C++)x[C]=s.shape[l[C]];let k=aI(v,s.shape,s.dtype,l,x);h=n.makeTensorInfo(x,s.dtype);let S=n.texData.get(h.dataId);S.values=k}else h=Zm(s,l,n);u=N.getInnerMostAxes(u.length,i)}N.assertAxesAreInnerMostDims("max",u,i);let[f,m]=N.computeOutAndReduceShapes(h.shape,u),g=f;o&&(g=N.expandShapeToKeepDim(f,c));let b;if(d){let v=n.texData.get(h.dataId).values,x=x9(v,w.sizeFromShape(m),g,s.dtype);b=n.makeTensorInfo(g,s.dtype);let k=n.texData.get(b.dataId);k.values=x}else b=cne(h,m,g,n);return p&&n.disposeIntermediateTensorInfo(h),b}var une={kernelName:zo,backendName:"webgl",kernelFunc:FE},lne=oI+`
|
|
return max(a, b);
|
|
`,dne=`
|
|
vec4 result = vec4(max(a, b));
|
|
bvec4 isNaNA = isnan(a);
|
|
bvec4 isNaNB = isnan(b);
|
|
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
|
|
`+cp+`
|
|
return result;
|
|
`,pne=dn({opSnippet:lne,packedOpSnippet:dne,cpuKernelImpl:w9}),hne={kernelName:Bo,backendName:"webgl",kernelFunc:pne};function fne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t;Yu(s,"maxPool");let{filterSize:a,strides:o,pad:i,dimRoundingMode:c}=r,u=1;w.assert(N.eitherStridesOrDilationsAreOne(o,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${o} and dilations '${u}'`);let l=N.computePool2DInfo(s.shape,a,o,u,i,c);if(l.filterWidth===1&&l.filterHeight===1&&w.arraysEqual(l.inShape,l.outShape))return sr({inputs:{x:s},backend:n});let p=new id(l,"max",!1);return n.runWebGLProgram(p,[s],s.dtype)}var mne={kernelName:Wo,backendName:"webgl",kernelFunc:fne};function gne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{filterSize:a,strides:o,pad:i,dataFormat:c,dimRoundingMode:u}=r,l=[1,1,1],p=N.computePool3DInfo(s.shape,a,o,l,i,u,c),d=new cI(p,"max",!1);return n.runWebGLProgram(d,[s],s.dtype)}var bne={kernelName:yd,backendName:"webgl",kernelFunc:gne},yne=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,c=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 = ${c} - 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);
|
|
}
|
|
`}},vne=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,c=e.effectiveFilterHeight,u=e.effectiveFilterWidth,l=i-1-e.padInfo.front,p=c-1-e.padInfo.top,d=u-1-e.padInfo.left,h=i*c*u-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 < ${c};
|
|
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 < ${u};
|
|
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 * ${c} * ${u} +
|
|
wR * ${u} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function xne(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a}=t,o=a,{filterSize:i,strides:c,pad:u,dimRoundingMode:l}=r,p=[1,1,1],d=N.computePool3DInfo(o.shape,i,c,p,u,l),h=new cI(d,"max",!0),f=n.runWebGLProgram(h,[o],o.dtype),m=new vne(d),g=n.runWebGLProgram(m,[s,f],o.dtype);return n.disposeIntermediateTensorInfo(f),g}var wne={kernelName:Df,backendName:"webgl",kernelFunc:xne};function Ine(e){let{inputs:t,backend:n,attrs:r}=e,{dy:s,input:a,output:o}=t,i=a;Yu([a,o],"maxPoolGrad");let{filterSize:c,strides:u,pad:l,dimRoundingMode:p}=r,d=N.computePool2DInfo(i.shape,c,u,1,l,p),h=!0,f=new id(d,"max",h),m=n.runWebGLProgram(f,[i],i.dtype),g=new yne(d),b=n.runWebGLProgram(g,[s,m],i.dtype);return n.disposeIntermediateTensorInfo(m),b}var kne={kernelName:$f,backendName:"webgl",kernelFunc:Ine};function Sne(e,t,n,r){let s=new id(n,"max",!1),a=r.runWebGLProgram(s,[e],"float32");s=new id(n,"max",!0,!0,t);let o=r.runWebGLProgram(s,[e],"float32");return[a,o]}var Tne={kernelName:Ff,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{filterSize:s,strides:a,pad:o,includeBatchInIndex:i}=t,c=n;w.assert(r.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${r.shape.length}.`);let u=[1,1];w.assert(N.eitherStridesOrDilationsAreOne(a,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${a} and dilations '${u}'`);let l=N.computePool2DInfo(r.shape,s,a,u,o),[p,d]=Sne(r,i,l,c);return[p,d]}};function Cne(e,t,n,r){let s=w.sizeFromShape(t),o=w.sizeFromShape(e.shape)/s,i=he({inputs:{x:e},attrs:{shape:[o,s]},backend:r}),c=Si(i,"float32","mean",r),u=he({inputs:{x:c},attrs:{shape:n},backend:r});return r.disposeIntermediateTensorInfo(i),r.disposeIntermediateTensorInfo(c),u}var Nne={kernelName:Vo,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:r}=e,{keepDims:s,axis:a}=t,o=n,i=r.shape.length,c=w.parseAxisParam(a,r.shape),u=c,l=N.getAxesPermutation(u,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;E<k.length;E++)k[E]=r.shape[l[E]];let S=aI(x,r.shape,r.dtype,l,k);f=o.makeTensorInfo(k,r.dtype);let C=o.texData.get(f.dataId);C.values=S}else f=Zm(r,l,o);h.push(f),u=N.getInnerMostAxes(u.length,i)}N.assertAxesAreInnerMostDims("sum",u,i);let[m,g]=N.computeOutAndReduceShapes(f.shape,u),b=m;s&&(b=N.expandShapeToKeepDim(m,c));let y=Cne(f,g,b,o);for(let v of h)o.disposeIntermediateTensorInfo(v);return y}};function _ne(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,c=w.parseAxisParam(a,s.shape),u=c,l=N.getAxesPermutation(u,i),p=s;l!=null&&(p=Nn({inputs:{x:s},backend:n,attrs:{perm:l}}),u=N.getInnerMostAxes(u.length,s.shape.length)),N.assertAxesAreInnerMostDims("min",u,i);let[d,h]=N.computeOutAndReduceShapes(p.shape,u),f=w.sizeFromShape(h),m=he({inputs:{x:p},backend:n,attrs:{shape:[-1,f]}}),g=Si(m,m.dtype,"min",n),b;if(o){let y=N.expandShapeToKeepDim(d,c);b=he({inputs:{x:g},backend:n,attrs:{shape:y}})}else b=he({inputs:{x:g},backend:n,attrs:{shape:d}});return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(g),l!=null&&n.disposeIntermediateTensorInfo(p),b}var Ene={kernelName:Uo,backendName:"webgl",kernelFunc:_ne},Ane=oI+`
|
|
return min(a, b);
|
|
`,$ne=`
|
|
vec4 result = vec4(min(a, b));
|
|
bvec4 isNaNA = isnan(a);
|
|
bvec4 isNaNB = isnan(b);
|
|
bvec4 isNaN = bvec4(isNaNA.x || isNaNB.x, isNaNA.y || isNaNB.y, isNaNA.z || isNaNB.z, isNaNA.w || isNaNB.w);
|
|
`+cp+`
|
|
return result;
|
|
`,Dne=dn({opSnippet:Ane,packedOpSnippet:$ne,cpuKernelImpl:I9}),Fne={kernelName:Go,backendName:"webgl",kernelFunc:Dne},Rne=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((u,l)=>u[0]+e[l]+u[1]);let r=e.length,s=mt(r),a=t.map(u=>u[0]).join(","),o=t.map((u,l)=>u[0]+e[l]).join(","),i=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,r),c=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 - ${c};
|
|
} else if(outC >= end) {
|
|
outC = (end - 1) * 2 - outC + ${c};
|
|
}
|
|
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] - ${c};
|
|
} else if(outC[i] >= end[i]) {
|
|
outC[i] = (end[i] - 1) * 2 - outC[i] + ${c};
|
|
}
|
|
}
|
|
${s} coords = outC - start;
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}},Pne=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=mt(r),a=t.map(h=>h[0]).join(","),o=t.map((h,f)=>h[0]+e[f]).join(","),i=Tn("rc",r),c=Tn("source",r),u=`${i[r-1]} < ${this.outputShape[r-1]}`,l=r===1?"source":`vec2(${c.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(${c.join()}), ${l});
|
|
${i[r-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${c.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(${c.join()}), ${l});
|
|
${i[r-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${c.join()}), ${l});
|
|
}
|
|
rc = outputLoc;
|
|
${i[r-2]} += 1;
|
|
if(${i[r-2]} < ${this.outputShape[r-2]}) {
|
|
${h}
|
|
result[2] = getChannel(getX(${c.join()}), ${l});
|
|
${i[r-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[3] = getChannel(getX(${c.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);
|
|
}
|
|
`}},One=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{paddings:s,mode:a}=n,o=q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Pne(r.shape,s,a):new Rne(r.shape,s,a);return t.runWebGLProgram(o,[r],r.dtype)},Mne={kernelName:Ho,backendName:"webgl",kernelFunc:One},Lne=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,zne=`
|
|
vec4 result = mod(a, b);
|
|
bvec4 isNaN = equal(b, vec4(0.0));
|
|
`+cp+`
|
|
return result;
|
|
`,Bne=dn({opSnippet:Lne,packedOpSnippet:zne}),Wne={kernelName:du,backendName:"webgl",kernelFunc:Bne},Vne=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}));
|
|
}
|
|
`}},Une=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,Gne=`
|
|
// 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;
|
|
`,RE=dn({opSnippet:Une,packedOpSnippet:Gne,checkOutOfBounds:!0}),Hne={kernelName:Eo,backendName:"webgl",kernelFunc:RE},F1="return a - b;",PE=dn({opSnippet:F1,packedOpSnippet:F1,supportsComplex:!0,cpuKernelImpl:V9}),qne={kernelName:di,backendName:"webgl",kernelFunc:PE};function OE(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{dim:a}=r,o=w.parseAxisParam([a],s.shape),i=FE({inputs:{x:s},backend:n,attrs:{reductionIndices:o,keepDims:!1}}),c=N.expandShapeToKeepDim(i.shape,o),u=he({inputs:{x:i},backend:n,attrs:{shape:c}}),l=PE({inputs:{a:s,b:u},backend:n}),p=AE({inputs:{x:l},backend:n}),d=Jm({inputs:{x:p},backend:n,attrs:{axis:o,keepDims:!1}}),h=he({inputs:{x:d},backend:n,attrs:{shape:c}}),f=RE({inputs:{a:p,b:h},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(l),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(h),f}var jne={kernelName:ui,backendName:"webgl",kernelFunc:OE};function Kne(e){let{inputs:t,backend:n,attrs:r}=e,{logits:s}=t,{numSamples:a,seed:o,normalized:i}=r,c=i?s:OE({inputs:{logits:s},backend:n,attrs:{dim:s.shape.length-1}}),u=c.shape[0],l=c.shape[1],p=new Vne(u,l,a),d=[[o]],h=n.runWebGLProgram(p,[c],"int32",d);return i||n.disposeIntermediateTensorInfo(c),h}var Xne={kernelName:Rf,backendName:"webgl",kernelFunc:Kne},Yne=Or+`
|
|
return -x;
|
|
`,Zne=`
|
|
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 Jne(e){let{inputs:t,backend:n}=e,{x:r}=t;if(n.shouldExecuteOnCPU([r])){let a=n.texData.get(r.dataId),[o,i]=S9(a.values,r.shape,r.dtype);return n.makeTensorInfo(i,r.dtype,o)}let s;return q().getBool("WEBGL_PACK_UNARY_OPERATIONS")?s=new Ka(r.shape,Zne):s=new Ns(r.shape,Yne),n.runWebGLProgram(s,[r],r.dtype)}var Qne={kernelName:pu,backendName:"webgl",kernelFunc:Jne},ere=fs.nonMaxSuppressionV3Impl;function tre(e){N.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:c}=r,u=n.readSync(s.dataId),l=n.readSync(a.dataId),{selectedIndices:p}=ere(u,l,o,i,c);return n.makeTensorInfo([p.length],"int32",new Int32Array(p))}var nre={kernelName:fu,backendName:"webgl",kernelFunc:tre},rre=fs.nonMaxSuppressionV4Impl;function sre(e){N.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:c,padToMaxOutputSize:u}=r,l=n.readSync(s.dataId),p=n.readSync(a.dataId),{selectedIndices:d,validOutputs:h}=rre(l,p,o,i,c,u);return[n.makeTensorInfo([d.length],"int32",new Int32Array(d)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var are={kernelName:mu,backendName:"webgl",kernelFunc:sre},ore=fs.nonMaxSuppressionV5Impl;function ire(e){N.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:c,softNmsSigma:u}=r,l=n.readSync(s.dataId),p=n.readSync(a.dataId),d=o,h=i,f=c,m=u,{selectedIndices:g,selectedScores:b}=ore(l,p,d,h,f,m);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([b.length],"float32",new Float32Array(b))]}var cre={kernelName:gu,backendName:"webgl",kernelFunc:ire},ure=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)));
|
|
}
|
|
`}},lre=e=>{let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{dtype:a,depth:o,onValue:i,offValue:c}=r,u=w.sizeFromShape(s.shape),l=new ure(u,o,i,c),p=he({inputs:{x:s},backend:n,attrs:{shape:[u]}}),d=n.runWebGLProgram(l,[p],a);n.disposeIntermediateTensorInfo(p);let h=[...s.shape,o],f=he({inputs:{x:d},backend:n,attrs:{shape:h}});return n.disposeIntermediateTensorInfo(d),f},dre={kernelName:jo,backendName:"webgl",kernelFunc:lre};function af(e){let{inputs:t,backend:n}=e,{x:r}=t;if(r.dtype==="complex64"){let s=lp({inputs:{input:r},backend:n}),a=af({inputs:{x:s},backend:n}),o=Qm({inputs:{input:r},backend:n}),i=af({inputs:{x:o},backend:n}),c=Ea({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),c}else return dp({attrs:{shape:r.shape,dtype:r.dtype,value:r.dtype==="string"?"":0},backend:n})}var pre={kernelName:Pu,backendName:"webgl",kernelFunc:af};function ME(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=lp({inputs:{input:r},backend:n}),a=ME({inputs:{x:s},backend:n}),o=Qm({inputs:{input:r},backend:n}),i=af({inputs:{x:o},backend:n}),c=Ea({inputs:{real:a,imag:i},backend:n});return n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(a),n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(i),c}else return dp({attrs:{shape:r.shape,dtype:r.dtype,value:1},backend:n})}var hre={kernelName:bu,backendName:"webgl",kernelFunc:ME};function fre(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return xv({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=[],c=t.map(l=>{let p=xv({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),u=IE({inputs:c,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeIntermediateTensorInfo(l)),u}var mre={kernelName:yu,backendName:"webgl",kernelFunc:fre},gre=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((c,u)=>c[0]+e[u]+c[1]);let r=e.length,s=mt(r),a=t.map(c=>c[0]).join(","),o=t.map((c,u)=>c[0]+e[u]).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}));
|
|
}
|
|
}
|
|
`}},bre=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,m)=>f[0]+e[m]+f[1]);let r=e.length,s=mt(r),a=t.map(f=>f[0]).join(","),o=t.map((f,m)=>f[0]+e[m]).join(","),i=Tn("rc",r),c=Tn("source",r),u=`${i[r-1]} < ${this.outputShape[r-1]}`,l=r===1?"source":`vec2(${c.slice(-2).join()})`,p=[`${s} rc = outputLoc;`,`${i[r-1]} += 1;
|
|
if(${u}) {
|
|
`,r===1?"":`}
|
|
rc = outputLoc;
|
|
${i[r-2]} += 1;
|
|
if(${i[r-2]} < ${this.outputShape[r-2]}) {`,r===1?"":` ${i[r-1]} += 1;
|
|
if(${u}) {`],d=r===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let f=0,m=r===1?2:4;f<m;f++)h+=`
|
|
${p[f]}
|
|
if (${d}) {
|
|
result[${f}] = float(value);
|
|
} else {
|
|
${s} source = rc - start;
|
|
result[${f}] = getChannel(getX(${c.join()}), ${l});
|
|
}
|
|
`;h+=r===1?"} ":"}}",this.userCode=`
|
|
const ${s} start = ${s}(${a});
|
|
const ${s} end = ${s}(${o});
|
|
|
|
void main() {
|
|
${s} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${h}
|
|
setOutput(result);
|
|
}
|
|
`}},LE=e=>{let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{paddings:a,constantValue:o}=r;if(w.sizeFromShape(s.shape)===0){let u=a.map((l,p)=>l[0]+s.shape[p]+l[1]);return dp({backend:n,attrs:{shape:u,value:o,dtype:s.dtype}})}let i=q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new bre(s.shape,a,o):new gre(s.shape,a,o),c=[[o]];return n.runWebGLProgram(i,[s],s.dtype,c)},yre={kernelName:Ko,backendName:"webgl",kernelFunc:LE},vre=`
|
|
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);
|
|
`,xre=`
|
|
// 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);
|
|
`+cp+`
|
|
return result;
|
|
`,wre=dn({opSnippet:vre,packedOpSnippet:xre}),Ire={kernelName:Xo,backendName:"webgl",kernelFunc:wre};function kre(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,keepDims:o}=r,i=s.shape.length,c=[],u=w.parseAxisParam(a,s.shape),l=u,p=N.getAxesPermutation(l,i),d=s;p!=null&&(d=Nn({inputs:{x:s},backend:n,attrs:{perm:p}}),l=N.getInnerMostAxes(l.length,i),c.push(d)),N.assertAxesAreInnerMostDims("prod",l,i);let h;if(n.shouldExecuteOnCPU([d])){let f=n.texData.get(d.dataId).values,{outVals:m,outShape:g,outDtype:b}=C9(d.shape,d.dtype,f,l);h=n.makeTensorInfo(g,b,m)}else{let[f,m]=N.computeOutAndReduceShapes(d.shape,l),g=w.sizeFromShape(m),b=he({inputs:{x:d},backend:n,attrs:{shape:[-1,g]}}),y=Hf(s.dtype),v=Si(b,y,"prod",n);h=he({inputs:{x:v},backend:n,attrs:{shape:f}}),c.push(b),c.push(v)}if(o){c.push(h);let f=N.expandShapeToKeepDim(h.shape,u);h=he({inputs:{x:h},backend:n,attrs:{shape:f}})}return c.forEach(f=>n.disposeIntermediateTensorInfo(f)),h}var Sre={kernelName:Zo,backendName:"webgl",kernelFunc:kre};function Tre(e){let{inputs:t,backend:n,attrs:r}=e,{paramsNestedSplits:s,paramsDenseValues:a,indices:o}=t,{outputRaggedRank:i}=r,c=s.map(b=>n.readSync(b.dataId)),u=s.map(b=>b.shape),l=n.readSync(a.dataId),p=n.readSync(o.dataId),[d,h,f]=N9(c,u,l,a.shape,a.dtype,p,o.shape,i),m=d.map(b=>n.makeTensorInfo([b.length],"int32",b)),g=n.makeTensorInfo(f,a.dtype,h);return m.concat([g])}var Cre={kernelName:Pf,backendName:"webgl",kernelFunc:Tre};function Nre(e){let{inputs:t,backend:n}=e,{starts:r,limits:s,deltas:a}=t,o=n.readSync(r.dataId),i=n.readSync(s.dataId),c=n.readSync(a.dataId),[u,l]=_9(o,r.shape,r.dtype,i,s.shape,c,a.shape),p=n.makeTensorInfo([u.length],"int32",u),d=n.makeTensorInfo([l.length],r.dtype,l);return[p,d]}var _re={kernelName:Of,backendName:"webgl",kernelFunc:Nre};function Ere(e){let{inputs:t,backend:n,attrs:r}=e,{shape:s,values:a,defaultValue:o,rowPartitionTensors:i}=t,{rowPartitionTypes:c}=r,u=n.readSync(s.dataId),l=n.readSync(a.dataId),p=n.readSync(o.dataId),d=i.map(g=>n.readSync(g.dataId)),h=i.map(g=>g.shape),[f,m]=E9(u,s.shape,l,a.shape,a.dtype,p,o.shape,d,h,c);return n.makeTensorInfo(f,a.dtype,m)}var Are={kernelName:Mf,backendName:"webgl",kernelFunc:Ere},zE=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=A9(r,s,a,o);return t.makeTensorInfo([i.length],o,i)},$re={kernelName:vd,backendName:"webgl",kernelFunc:zE},Dre="return 1.0 / x;",Fre=Ye({opSnippet:Dre}),Rre={kernelName:vu,backendName:"webgl",kernelFunc:Fre},Pre=Or+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,Ore=`
|
|
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;
|
|
`,Mre=Ye({opSnippet:Pre,packedOpSnippet:Ore}),Lre={kernelName:Jo,backendName:"webgl",kernelFunc:Mre},zre=Or+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,Bre=`
|
|
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;
|
|
`,Wre=Ye({opSnippet:zre,packedOpSnippet:Bre}),Vre={kernelName:ti,backendName:"webgl",kernelFunc:Wre},Ure=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[a,o,i,c]=e;this.outputShape=[a,t,n,c];let u=[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(
|
|
${u[0]/l[0]},
|
|
${u[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);
|
|
}
|
|
`}},Gre=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,o,i,c]=e;this.outputShape=[a,t,n,c];let u=[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(
|
|
${u[0]/l[0]},
|
|
${u[1]/l[1]},
|
|
${u[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 < ${c-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 Hre(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,l=q().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Gre(s.shape,c,u,a,o):new Ure(s.shape,c,u,a,o);return n.runWebGLProgram(l,[s],"float32")}var qre={kernelName:ei,backendName:"webgl",kernelFunc:Hre},jre=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],c=[n&&a>1?a-1:a,n&&o>1?o-1:o],u=i[0]/c[0],l=i[1]/c[1],p=1/u,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(${u});
|
|
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 Kre(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=new jre(a.shape,s.shape,o);return n.runWebGLProgram(i,[a],a.dtype)}var Xre={kernelName:Bf,backendName:"webgl",kernelFunc:Kre},Yre=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.outputShape=[];let[a,o,i,c]=e;this.outputShape=[a,t,n,c];let u=[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(
|
|
${u[0]/l[0]},
|
|
${u[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);
|
|
}
|
|
`}},Zre=class{constructor(e,t,n,r,s){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[a,o,i,c]=e;this.outputShape=[a,t,n,c];let u=[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(
|
|
${u[0]/l[0]},
|
|
${u[1]/l[1]},
|
|
${u[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 < ${c-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 Jre(e){let{inputs:t,backend:n,attrs:r}=e,{images:s}=t,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,l=q().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Zre(s.shape,c,u,a,o):new Yre(s.shape,c,u,a,o);return n.runWebGLProgram(l,[s],s.dtype)}var Qre={kernelName:Qo,backendName:"webgl",kernelFunc:Jre},ese=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],c=[n&&a>1?a-1:a,n&&o>1?o-1:o],u=i[0]/c[0],l=i[1]/c[1],p=1/u,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(${u});
|
|
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(${c[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${i[1]}) *
|
|
(float(dyC) / float(${c[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 tse(e){let{inputs:t,backend:n,attrs:r}=e,{images:s,dy:a}=t,{alignCorners:o}=r,i=new ese(a.shape,s.shape,o);return n.runWebGLProgram(i,[a],a.dtype)}var nse={kernelName:zf,backendName:"webgl",kernelFunc:tse},rse=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=mt(n);this.userCode=`
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
setOutput(getX(${s}));
|
|
}
|
|
`}},sse=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=Tn("rc",n),s=`${r[n-1]} + 1 < ${this.outputShape[n-1]}`,a=`${r[n-2]} + 1 < ${this.outputShape[n-2]}`,o=mt(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 = ${c(r.slice())};
|
|
}
|
|
if(${a}) {
|
|
result.b = ${u(r.slice())};
|
|
if(${s}) {
|
|
result.a = ${l(r.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function i(h){return p(h)}function c(h){return h[n-1]="("+h[n-1]+" + 1)",p(h)}function u(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)),m=f.join(","),g=f.slice(-2).join(",");return`getChannel(getX(${m}), vec2(${g}))`}function d(h,f){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${f[h]} - 1`:`${f[h]}`}}};function ase(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 c=q().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new sse(s.shape,i):new rse(s.shape,i);return n.runWebGLProgram(c,[s],s.dtype)}var ose={kernelName:ni,backendName:"webgl",kernelFunc:ase},ise=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);
|
|
}
|
|
`}},cse={kernelName:Ou,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:r}=e,{radians:s,fillValue:a,center:o}=t,i=n,c=new ise(r.shape,a),[u,l]=N.getImageCenter(o,r.shape[1],r.shape[2]),p=[[u,l,Math.sin(s),Math.cos(s)]];return i.runWebGLProgram(c,[r],r.dtype,p)}},use=`
|
|
// 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;
|
|
}
|
|
}
|
|
`,lse=Ye({opSnippet:use}),dse={kernelName:ri,backendName:"webgl",kernelFunc:lse},pse="return inversesqrt(x);",hse=Ye({opSnippet:pse,cpuKernelImpl:$9}),fse={kernelName:si,backendName:"webgl",kernelFunc:hse},BE=class{constructor(e,t,n,r,s,a,o=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=a;let i=mt(s.length),c=mt(a.length),u="";n===1?u="i":n===2&&(u="i, j");let l=`getIndices(${u})`,p="";r===1?p="i":r===2&&(p="i, coords[1]");let d=`getUpdates(${p})`,h=t>1?"strides[j]":"strides";this.userCode=`
|
|
${i} strides = ${i}(${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(${l});
|
|
flattenedIndex += index * ${h};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${d};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function mse(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s,updates:a}=t,{shape:o}=r,{sliceRank:i,numUpdates:c,sliceSize:u,strides:l,outputSize:p}=N.calculateShapes(a,s,o),d=[p/u,u];if(p===0)return n.makeTensorInfo(o,s.dtype);let h=he({inputs:{x:s},backend:n,attrs:{shape:[c,i]}}),f=he({inputs:{x:a},backend:n,attrs:{shape:[c,u]}}),m=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new BE(c,i,h.shape.length,f.shape.length,l,d),b=n.runWebGLProgram(g,[f,h,m],f.dtype),y=he({inputs:{x:b},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(m),y}var gse={kernelName:wu,backendName:"webgl",kernelFunc:mse},bse=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=q().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 yse(e){let{inputs:t,backend:n,attrs:r}=e,{sortedSequence:s,values:a}=t,{side:o}=r,i=new bse(s.shape[0],s.shape[1],a.shape[1],o),c=[[s.shape[1]]];return n.runWebGLProgram(i,[s,a],"int32",c)}var vse={kernelName:Wf,backendName:"webgl",kernelFunc:yse},xse=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=[],c=[];for(let u=0;u<t.length;u++)c.push(`${o[u]}`),u<e&&i.push(`${o[u]}`);r=i.join(),s=c.join()}let a=mt(n);this.userCode=`
|
|
void main() {
|
|
${a} resRC = getOutputCoords();
|
|
float cVal = getC(${r});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${s}));
|
|
} else {
|
|
setOutput(getB(${s}));
|
|
}
|
|
}
|
|
`}};function wse(e){let{inputs:t,backend:n}=e,{condition:r,t:s,e:a}=t,o=new xse(r.shape.length,s.shape,s.shape.length);return n.runWebGLProgram(o,[r,s,a],hr(s.dtype,a.dtype))}var Ise={kernelName:Iu,backendName:"webgl",kernelFunc:wse},kse=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${N.SELU_SCALEALPHA};
|
|
float scale = ${N.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,Sse=Ye({opSnippet:kse}),Tse={kernelName:ku,backendName:"webgl",kernelFunc:Sse},Cse=tl+`
|
|
return 1.0 / (1.0 + exp(-1.0 * x));
|
|
`,Nse=`
|
|
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;
|
|
`,_se=Ye({opSnippet:Cse,packedOpSnippet:Nse,cpuKernelImpl:F9}),Ese={kernelName:oi,backendName:"webgl",kernelFunc:_se},Ase=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,$se=Ye({opSnippet:Ase}),Dse={kernelName:Cu,backendName:"webgl",kernelFunc:$se},Fse=tl+`
|
|
return sin(x);
|
|
`,Rse=Ye({opSnippet:Fse}),Pse={kernelName:ai,backendName:"webgl",kernelFunc:Rse},Ose=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,Mse=Ye({opSnippet:Ose}),Lse={kernelName:Tu,backendName:"webgl",kernelFunc:Mse},zse=`
|
|
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;
|
|
`,Bse=Ye({opSnippet:zse}),Wse={kernelName:Nu,backendName:"webgl",kernelFunc:Bse},Vse=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),c=[[0,0]];c.push(...o);for(let b=1+a.length;b<s.shape.length;++b)c.push([0,0]);let u=[],l=LE({inputs:{x:s},backend:n,attrs:{paddings:c,constantValue:0}}),p=N.getReshaped(l.shape,a,i,!1),d=N.getPermuted(p.length,a.length,!1),h=N.getReshapedPermuted(l.shape,a,i,!1),f=he({inputs:{x:l},backend:n,attrs:{shape:p}}),m=Nn({inputs:{x:f},backend:n,attrs:{perm:d}}),g=he({inputs:{x:m},backend:n,attrs:{shape:h}});return u.push(l),u.push(f),u.push(m),u.forEach(b=>n.disposeIntermediateTensorInfo(b)),g},Use={kernelName:_u,backendName:"webgl",kernelFunc:Vse};function Gse(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),c=n.readSync(s.dataId),u=n.readSync(a.dataId),l=n.readSync(o.dataId)[0],[p,d,h,f,m]=P9(i,r.shape,r.dtype,c,s.dtype,u,l);return[n.makeTensorInfo(d,r.dtype,p),n.makeTensorInfo([d[0]],s.dtype,h),n.makeTensorInfo([f.length],"bool",new Uint8Array(f.map(g=>Number(g)))),n.makeTensorInfo([m.length],r.dtype,new Int32Array(m))]}var Hse={kernelName:xd,backendName:"webgl",kernelFunc:Gse};function qse(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),c=Array.from(n.readSync(a.dataId)),[u,l,p]=O9(i,r.shape,r.dtype,o,c);return[n.makeTensorInfo(l,r.dtype,u),n.makeTensorInfo([p.length],a.dtype,new Int32Array(p))]}var jse={kernelName:Au,backendName:"webgl",kernelFunc:qse};function Kse(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),c=n.readSync(a.dataId),[u,l]=cE(o,r.shape,r.dtype,i,c,!0);return n.makeTensorInfo(l,r.dtype,u)}var Xse={kernelName:wd,backendName:"webgl",kernelFunc:Kse};function Yse(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),c=n.readSync(a.dataId),[u,l]=cE(o,r.shape,r.dtype,i,c);return n.makeTensorInfo(l,r.dtype,u)}var Zse={kernelName:Id,backendName:"webgl",kernelFunc:Yse};function Jse(e){let{inputs:t,backend:n,attrs:r}=e,{sparseIndices:s,sparseValues:a,defaultValue:o}=t,{outputShape:i}=r,{sliceRank:c,numUpdates:u,sliceSize:l,strides:p,outputSize:d}=N.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=D9(b,y,i,d,l,u,c,p,v,h);return n.makeTensorInfo(i,x.dtype,x.values)}let f=new BE(u,c,s.shape.length,a.shape.length,p,[d,1],h),m=n.runWebGLProgram(f,[a,s,o],a.dtype),g=he({inputs:{x:m},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(m),g}var Qse={kernelName:Vf,backendName:"webgl",kernelFunc:Jse};function eae(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=r,i=w.parseAxisParam(o,s.shape)[0],c=N.prepareSplitSize(s,a,i),u=s.shape.length,l=new Array(u).fill(0),p=s.shape.slice();return c.map(d=>{let h=[...p];h[i]=d;let f=nl({inputs:{x:s},backend:n,attrs:{begin:l,size:h}});return l[i]+=d,f})}var tae={kernelName:Eu,backendName:"webgl",kernelFunc:eae},R1="return sqrt(x);",nae=Ye({opSnippet:R1,packedOpSnippet:R1,cpuKernelImpl:M9}),rae={kernelName:ii,backendName:"webgl",kernelFunc:nae},sae="return x * x;",aae=Ye({opSnippet:sae}),oae={kernelName:kd,backendName:"webgl",kernelFunc:aae},P1="return (a - b) * (a - b);",iae=dn({opSnippet:P1,packedOpSnippet:P1}),cae={kernelName:li,backendName:"webgl",kernelFunc:iae};function uae({inputs:e,attrs:t,backend:n}){let{x:r}=e,s=Or+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,a=new Ns(r.shape,s);return n.runWebGLProgram(a,[r],r.dtype)}var lae={kernelName:xa,backendName:"webgl",kernelFunc:uae},dae=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let r=n.length,s=mt(n.length),a=mt(n.length),o="";if(r===1)o="coords * strides + begin";else{let i=0;o=n.map((c,u)=>(i++,n.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${i-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=`
|
|
${s} begin = ${s}(${e});
|
|
${s} strides = ${s}(${t});
|
|
|
|
void main() {
|
|
${a} coords = getOutputCoords();
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}};function pae(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{begin:a,end:o,strides:i,beginMask:c,endMask:u,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:b,begin:y,end:v,strides:x}=qt.sliceInfo(s.shape,a,o,i,c,u,l,p,d),k;if(m)k=he({inputs:{x:s},backend:n,attrs:{shape:f}});else if(g||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let C=qt.computeOutShape(y,v,x),E=nl({inputs:{x:s},backend:n,attrs:{begin:y,size:C}});k=he({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=L9(h,$,x,y);k=n.makeTensorInfo(f,s.dtype,F.values)}else{let E=new dae(y,x,h);k=n.runWebGLProgram(E,[s],s.dtype)}let S=he({inputs:{x:k},backend:n,attrs:{shape:f}});return n.disposeIntermediateTensorInfo(k),S}var hae={kernelName:$u,backendName:"webgl",kernelFunc:pae};function fae(e){let{inputs:t,backend:n,attrs:r}=e,{separator:s,nGramWidths:a,leftPad:o,rightPad:i,padWidth:c,preserveShortSequences:u}=r,{data:l,dataSplits:p}=t,d=n.readSync(l.dataId),h=n.readSync(p.dataId),[f,m]=z9(d,h,s,a,o,i,c,u);return[n.makeTensorInfo([f.length],"string",f),n.makeTensorInfo(p.shape,"int32",m)]}var mae={kernelName:Sd,backendName:"webgl",kernelFunc:fae};function gae(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),c=n.readSync(o.dataId)[0],[u,l,p]=B9(i,c,s),d=l.length;return[n.makeTensorInfo([d,2],"int32",u),n.makeTensorInfo([d],"string",l),n.makeTensorInfo([2],"int32",new Int32Array(p))]}var bae={kernelName:Td,backendName:"webgl",kernelFunc:gae};function yae(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=W9(o,s);return n.makeTensorInfo(a.shape,"int32",i)}var vae={kernelName:Cd,backendName:"webgl",kernelFunc:yae},xae="return tan(x);",wae=Ye({opSnippet:xae}),Iae={kernelName:pi,backendName:"webgl",kernelFunc:wae},kae=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,Sae=Ye({opSnippet:kae}),Tae={kernelName:hi,backendName:"webgl",kernelFunc:Sae},Cae=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let a=0;a<n.length;a++)n[a]=e[a]*t[a];this.outputShape=n,this.rank=n.length;let r=mt(this.rank),s=Nae(e);this.userCode=`
|
|
void main() {
|
|
${r} resRC = getOutputCoords();
|
|
setOutput(getA(${s}));
|
|
}
|
|
`}};function Nae(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],r=[];for(let s=0;s<e.length;s++)r.push(`imod(${n[s]}, ${e[s]})`);return r.join()}function WE(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{reps:a}=r;if(s.dtype==="string"||s.shape.length>5){let c=n.readSync(s.dataId),u=s.dtype==="string"?c.map(d=>w.decodeString(d)):c,l=Me(s.shape,s.dtype,u),p=U9(l,a);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let o=new Cae(s.shape,a);return n.runWebGLProgram(o,[s],s.dtype)}var _ae={kernelName:va,backendName:"webgl",kernelFunc:WE},Eae=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));
|
|
}
|
|
}
|
|
`}},Aae=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 za(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function O1(e){let t=1;for(;t<e;)t*=2;return t}function $ae(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{k:a,sorted:o}=r,i=q().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"),c=q().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"),u=s.shape,l=u[u.length-1];if(n.shouldExecuteOnCPU([s])||l<i||a>c){let F=n.readSync(s.dataId),[A,R]=G9(F,u,s.dtype,a,o);return[n.makeTensorInfo(A.shape,A.dtype,A.values),n.makeTensorInfo(R.shape,R.dtype,R.values)]}if(a===0)return u[u.length-1]=0,[n.makeTensorInfo(u,s.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(l===1)return[s,dp({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let p=n.texData.get(s.dataId),d=p!==null&&p.isPacked,h=d?n.unpackTensor(s):s,m=w.sizeFromShape(u)/l,g=he({inputs:{x:h},attrs:{shape:[m,l]},backend:n});d&&za(n,h);let b=O1(a),y=O1(l),v=null,x=()=>v===null?[g,g]:[g,v],k=(F,A,R)=>{let T=x(),L=new Eae(R),G=[[l],[v===null?1:0],[Number.NEGATIVE_INFINITY],[F],[A]],j=v;v=n.runWebGLProgram(L,T,"int32",G),za(n,j)};for(let F=1;F<b;F*=2){let A=F*2;for(let R=F;R>=1;R/=2)k(A,R,[m,y])}for(let F=y;F>b;F/=2){let A=x(),R=new Aae([m,F/2]),L=[[l],[v===null?1:0],[b]],V=v;v=n.runWebGLProgram(R,A,"int32",L),za(n,V);let G=b/2,j=G*2;for(let H=G;H>=1;H/=2)k(j,H,v.shape)}let S=v;v=nl({inputs:{x:v},backend:n,attrs:{begin:0,size:[m,a]}}),za(n,S);let C=DE({inputs:{x:g,indices:v},backend:n,attrs:{axis:1,batchDims:1}});za(n,g);let E=u.slice(0,-1);E.push(a),S=v,v=he({inputs:{x:v},attrs:{shape:E},backend:n}),za(n,S);let $=C;return C=he({inputs:{x:C},attrs:{shape:E},backend:n}),za(n,$),[C,v]}var Dae={kernelName:Du,backendName:"webgl",kernelFunc:$ae},Fae=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 Rae(e){let{inputs:t,backend:n,attrs:r}=e,{image:s,transforms:a}=t,{interpolation:o,fillMode:i,fillValue:c,outputShape:u}=r,[l,p,d,h]=s.shape,[f,m]=u!=null?u:[p,d],g=[l,f,m,h],b=new Fae(p,d,o,i,c,g);return n.runWebGLProgram(b,[s,a],"float32")}var Pae={kernelName:Fu,backendName:"webgl",kernelFunc:Rae};function Oae(e){let{inputs:t,attrs:n,backend:r}=e,{axis:s}=n,{x:a}=t;Yu(a,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let o=r.readSync(a.dataId),{outputValues:i,outputShape:c,indices:u}=H9(o,s,a.shape,a.dtype);return[r.makeTensorInfo(c,a.dtype,i),r.makeTensorInfo([u.length],"int32",u)]}var Mae={kernelName:Uf,backendName:"webgl",kernelFunc:Oae};function Lae(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,c=s.shape[a],u=new Array(i-1),l=0;for(let m=0;m<i;m++)m!==a&&(u[l++]=o.shape[m]);let p=[],d=new Array(i).fill(0),h=o.shape.slice();h[a]=1;let f=new Array(c);for(let m=0;m<f.length;m++){d[a]=m;let g=nl({inputs:{x:o},backend:n,attrs:{begin:d,size:h}}),b=he({inputs:{x:g},backend:n,attrs:{shape:u}});f[m]=b,p.push(g)}return p.forEach(m=>n.disposeIntermediateTensorInfo(m)),f}var zae={kernelName:Ru,backendName:"webgl",kernelFunc:Lae},Bae=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",c="sumValue",u=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 < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0
|
|
);
|
|
|
|
${p}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${l===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
int inIdxSeg = int(getSegmentIdAtIndex(inIdx));
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${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(${c});
|
|
}
|
|
`}};function Wae(e){let{inputs:t,backend:n,attrs:r}=e,{x:s,segmentIds:a}=t,{numSegments:o}=r,i=s.shape.length,c=[],u=0,l=N.getAxesPermutation([u],i),p=s;l!=null&&(p=Nn({inputs:{x:s},backend:n,attrs:{perm:l}}),c.push(p),u=N.getInnerMostAxes(1,i)[0]);let d=N.segment_util.computeOutShape(p.shape,u,o),h=w.sizeFromShape([p.shape[u]]),f=he({inputs:{x:p},backend:n,attrs:{shape:[-1,h]}});c.push(f);let m=Hf(s.dtype),g=(x,k,S,C,E)=>{let $=x.shape[0],F=x.shape[1],A=N.segment_util.segOpComputeOptimalWindowSize(F,E),R={windowSize:A,inSize:F,batchSize:$,numSegments:E},T=new Bae(R,k),L=n.compileAndRun(T,[x,S],C);if(c.push(L),L.shape[1]===E)return L;let V=zE({backend:n,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),G=WE({inputs:{x:V},backend:n,attrs:{reps:[F/A]}});return c.push(V),c.push(G),g(L,k,G,C,E)},b=g(f,"unsortedSegmentSum",a,m,o),y=he({inputs:{x:b},backend:n,attrs:{shape:d}}),v=y;if(l!=null){c.push(y);let x=N.getUndoAxesPermutation(l);v=Nn({inputs:{x:v},backend:n,attrs:{perm:x}})}return c.forEach(x=>n.disposeIntermediateTensorInfo(x)),v}var Vae={kernelName:Nd,backendName:"webgl",kernelFunc:Wae},Uae=[LZ,BZ,UZ,qZ,KZ,ZZ,QZ,tJ,aJ,iJ,lJ,hJ,gJ,xJ,kJ,TJ,NJ,$J,FJ,PJ,zJ,qJ,KJ,YJ,nQ,sQ,cQ,wZ,dQ,gQ,xQ,CQ,_Q,AQ,DQ,RQ,MQ,BQ,UQ,HQ,jQ,XQ,JQ,eee,see,oee,uee,pee,fee,yee,Iee,Cee,Eee,Dee,Fee,Pee,Mee,zee,Wee,Uee,jee,Yee,Qee,tte,ste,ite,dte,mte,xZ,bte,fQ,xte,kte,Cte,kZ,Ate,Rte,Ote,Bte,Ute,jte,Yte,ene,sne,ine,une,hne,mne,bne,wne,kne,Tne,Nne,Ene,Fne,Mne,Wne,Xne,CZ,Qne,nre,are,cre,JJ,dre,hre,mre,yre,Ire,TZ,Sre,Cre,_re,Are,$re,QJ,Hne,Rre,Lre,Vre,_Z,qre,Xre,Qre,nse,ose,cse,dse,fse,gse,vse,Ise,Tse,Ese,Dse,Pse,Lse,GJ,jne,Wse,Use,Hse,jse,Xse,Zse,Qse,tae,rae,oae,cae,lae,hae,mae,bae,vae,qne,PZ,Iae,Tae,_ae,Dae,Pae,OZ,Mae,zae,Vae,pre];for(let e of Uae)_d(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 ud;(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"})(ud||(ud={}));var VE;function Gae(e){VE=e.wasm.cwrap(eo,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Hae(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:c,transposeB:u,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 m=i==null?0:n.dataIdMap.get(i.dataId).id,g=ud[l];if(g==null)throw new Error(`${l} activation not yet supported for FusedConv2D in the wasm backend.`);let b=c?s.shape[2]:s.shape[1],y=u?a.shape[1]:a.shape[2],v=Mu.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),C=new Uint8Array(new Int32Array(a.shape).buffer);return VE(d,S,s.shape.length,h,C,a.shape.length,c,u,g,f,m,p||0,k),x}var qae={kernelName:eo,backendName:"wasm",setupFunc:Gae,kernelFunc:Hae};function rn(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,c=o.dataIdMap.get(i.dataId).id,u=o.makeOutput(i.shape,t||i.dtype),l=o.dataIdMap.get(u.dataId).id;return w.sizeFromShape(u.shape)===0||n(c,Et[i.dtype],l),u}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var jae=rn(Fc);function pn(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:c}=o,{a:u,b:l}=c,p=i.dataIdMap.get(u.dataId).id,d=i.dataIdMap.get(l.dataId).id,h=n!=null?n:u.dtype,f=N.assertAndGetBroadcastShape(u.shape,l.shape),m=i.makeOutput(f,h);if(w.sizeFromShape(f)===0)return m;let g=new Uint8Array(new Int32Array(u.shape).buffer),b=new Uint8Array(new Int32Array(l.shape).buffer),y=i.dataIdMap.get(m.dataId).id;return(()=>r(p,g,u.shape.length,d,b,l.shape.length,Et[u.dtype],y))(),m}return{kernelName:e,backendName:"wasm",setupFunc:s,kernelFunc:a}}var Kae=!0,Xae=pn(ba,Kae),UE;function Yae(e){UE=e.wasm.cwrap(bo,null,["array","number","number","number"])}function Zae(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 UE(a,s.length,Et[r.dtype],o),r}var Jae={kernelName:bo,backendName:"wasm",setupFunc:Yae,kernelFunc:Zae};function eg(e){let{inputs:{x:t},backend:n}=e;if(t.dtype==="string")return Cn(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 Qae={kernelName:Oo,backendName:"wasm",kernelFunc:eg},GE;function eoe(e){GE=e.wasm.cwrap(_s,null,["number","array","number","number","number","array","number"])}function fa(e){let{inputs:t,backend:n,attrs:r}=e,[s,a]=noe(t.x.shape,r.perm),o=!0;for(let f=0;f<a.length;f++)a[f]!==f&&(o=!1);let i=toe(t.x.shape,r.perm),c={dataId:t.x.dataId,shape:s,dtype:t.x.dtype};if(o){let f=eg({inputs:t,backend:n});return f.shape=i,f}let u=n.makeOutput(i,c.dtype),l=n.dataIdMap.get(c.dataId).id,p=n.dataIdMap.get(u.dataId).id,d=new Uint8Array(new Int32Array(a).buffer),h=new Uint8Array(new Int32Array(c.shape).buffer);return GE(l,h,c.shape.length,Et[c.dtype],p,d,a.length),u}function toe(e,t){let n=new Array(e.length);for(let r=0;r<n.length;r++)n[r]=e[t[r]];return n}function noe(e,t){let n=[],r=[];for(let s=0;s<e.length;++s)e[s]!==1&&n.push(e[s]),e[t[s]]!==1&&r.push(t[s]);for(let s=0;s<r.length;++s){let a=-1;for(let o=0;o<r.length;++o)r[o]>=s&&(a===-1||r[a]>r[o])&&(a=o);r[a]=s}return[n,r]}var roe={kernelName:_s,backendName:"wasm",kernelFunc:fa,setupFunc:eoe};function Aa(e,t,n){let r=e.shape,s=e.shape.length,a=w.parseAxisParam(t,r),o=a,i=N.getAxesPermutation(o,s),c=null,u=!1;if(i!=null){let l=new Array(s);for(let h=0;h<l.length;h++)l[h]=r[i[h]];o=N.getInnerMostAxes(o.length,s),c=fa({inputs:{x:e},attrs:{perm:i},backend:n});let p=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(c.dataId).id!==p&&(u=!0)}return{transposed:c,originalAxes:a,axes:o,inputWasTransposed:u}}var HE;function soe(e){HE=e.wasm.cwrap(Oc,null,["number, number, number"])}function aoe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,c=t.dataIdMap.get(o.dataId).id,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;u=l,c=v}let f=u.shape.length;N.assertAxesAreInnerMostDims("all",p,f);let[m,g]=N.computeOutAndReduceShapes(u.shape,p),b=w.sizeFromShape(g),y=t.makeOutput(m,o.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;HE(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var ooe={kernelName:Oc,backendName:"wasm",setupFunc:soe,kernelFunc:aoe},qE;function ioe(e){qE=e.wasm.cwrap(Mc,null,["number, number, number"])}function coe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,c=t.dataIdMap.get(o.dataId).id,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;u=l,c=v}let f=u.shape.length;N.assertAxesAreInnerMostDims("any",p,f);let[m,g]=N.computeOutAndReduceShapes(u.shape,p),b=w.sizeFromShape(g),y=t.makeOutput(m,o.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;qE(c,b,v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var uoe={kernelName:Mc,backendName:"wasm",setupFunc:ioe,kernelFunc:coe},jE;function loe(e){jE=e.wasm.cwrap(yo,null,["number","number","number","number","number"])}function doe(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s}=r,{x:a}=n,o=t.dataIdMap.get(a.dataId).id,i=o,c=a,{transposed:u,axes:l,inputWasTransposed:p}=Aa(a,s,t);if(p){let b=t.dataIdMap.get(u.dataId).id;b!==o&&(c=u,i=b)}let d=c.shape.slice(0,-1),h=t.makeOutput(d,"int32"),f=t.dataIdMap.get(h.dataId).id,m=w.sizeFromShape(h.shape),g=c.shape[l[0]];return jE(i,Et[c.dtype],m,g,f),p&&t.disposeData(u.dataId),h}var poe={kernelName:yo,backendName:"wasm",kernelFunc:doe,setupFunc:loe},KE;function hoe(e){KE=e.wasm.cwrap(vo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function foe(e){let{inputs:t,attrs:n,backend:r}=e,s=t.x,a=r.dataIdMap.get(s.dataId).id,{filterSize:o,strides:i,pad:c,dimRoundingMode:u}=n,l=N.computePool2DInfo(s.shape,o,i,1,c,u),p=l.filterHeight,d=l.filterWidth,h=l.padInfo.top,f=l.padInfo.right,m=l.padInfo.bottom,g=l.padInfo.left,b=l.strideHeight,y=l.strideWidth,v=l.inChannels;if(l.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${l.dataFormat}'. Please use 'channelsLast'.`);if(l.dilationWidth!==1||l.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${l.dilationHeight}, ${l.dilationWidth}].`);let x=r.makeOutput(l.outShape,"float32"),k=r.dataIdMap.get(x.dataId).id;return KE(a,s.shape[0],s.shape[1],s.shape[2],p,d,h,f,m,g,b,y,v,k),x}var moe={kernelName:vo,backendName:"wasm",setupFunc:hoe,kernelFunc:foe};function Bn(e){let{inputs:t,attrs:n}=e,{x:r}=t,{shape:s}=n,a=w.sizeFromShape(r.shape),o=w.inferFromImplicitShape(s,a);return w.assert(a===w.sizeFromShape(o),()=>`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 goe={kernelName:xu,backendName:"wasm",kernelFunc:Bn},XE;function boe(e){XE=e.wasm.cwrap(xo,null,["number","array","number","number","array","number","number","number","number"])}function yoe(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 c=s.shape.length,u=a.shape.length,l=o?s.shape[c-2]:s.shape[c-1],p=i?a.shape[u-1]:a.shape[u-2],d=o?s.shape[c-1]:s.shape[c-2],h=i?a.shape[u-2]:a.shape[u-1],f=s.shape.slice(0,-2),m=a.shape.slice(0,-2),g=w.sizeFromShape(f),b=w.sizeFromShape(m),v=Mu.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?[g,l,d]:[g,d,l],k=i?[b,h,p]:[b,p,h],S=Bn({inputs:{x:s},backend:n,attrs:{shape:x}}),C=Bn({inputs:{x:a},backend:n,attrs:{shape:k}}),E=n.dataIdMap.get(S.dataId).id,$=n.dataIdMap.get(C.dataId).id,F=o?S.shape[2]:S.shape[1],A=i?C.shape[1]:C.shape[2],R=Math.max(g,b),T=n.makeOutput([R,F,A],S.dtype),L=n.dataIdMap.get(T.dataId).id,V=new Uint8Array(new Int32Array(S.shape).buffer),G=new Uint8Array(new Int32Array(C.shape).buffer);return XE(E,V,S.shape.length,$,G,C.shape.length,o,i,L),n.disposeData(S.dataId),n.disposeData(C.dataId),T.shape=v,T}var voe={kernelName:xo,backendName:"wasm",setupFunc:boe,kernelFunc:yoe};function mo(e){let{inputs:{x:t},attrs:{begin:n,size:r},backend:s}=e,[a,o]=qt.parseSliceParams(t,n,r),i=qt.isSliceContinous(t.shape,a,o),c=s.readSync(t.dataId),u=s.makeOutput(o,t.dtype),l=w.computeStrides(t.shape),p=s.dataIdMap.get(u.dataId);if(i){let f=qt.computeFlatOffset(a,l);return t.dtype==="string"?p.stringBytes=c.slice(f,f+w.sizeFromShape(o)):s.typedArrayFromHeap(u).set(c.subarray(f,f+w.sizeFromShape(o))),u}if(t.dtype==="string"){let f=Qh(c,a,o,t.shape,t.dtype);return p.stringBytes=f,u}let d=s.typedArrayFromHeap(u),h=t.shape.length;if(h===2)xoe(c,l[0],d,a,o);else if(h===3)woe(c,l[0],l[1],d,a,o);else if(h===4)Ioe(c,l[0],l[1],l[2],d,a,o);else{let f=Qh(c,a,o,t.shape,t.dtype);d.set(f)}return u}function xoe(e,t,n,r,s){let a=0,o=r[0],i=r[1],c=o+s[0];for(let u=o;u<c;u++){let l=u*t+i;n.set(e.subarray(l,l+s[1]),a),a+=s[1]}}function woe(e,t,n,r,s,a){let o=0,i=s[0],c=s[1],u=s[2],l=i+a[0],p=c+a[1];for(let d=i;d<l;d++)for(let h=c;h<p;h++){let f=d*t+h*n+u;r.set(e.subarray(f,f+a[2]),o),o+=a[2]}}function Ioe(e,t,n,r,s,a,o){let i=0,c=a[0],u=a[1],l=a[2],p=c+o[0],d=u+o[1],h=l+o[2],f=a[3];for(let m=c;m<p;m++)for(let g=u;g<d;g++)for(let b=l;b<h;b++){let y=m*t+g*n+b*r+f;s.set(e.subarray(y,y+o[3]),i),i+=o[3]}}var koe={kernelName:Su,backendName:"wasm",kernelFunc:mo};function Soe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,crops:o}=r,i=a.reduce((b,y)=>b*y),c=N.getReshaped(s.shape,a,i),u=N.getPermuted(c.length,a.length),l=N.getReshapedPermuted(s.shape,a,i),p=N.getSliceBeginCoords(o,a.length),d=N.getSliceSize(l,o,a.length),h=Bn({inputs:{x:s},backend:n,attrs:{shape:c}}),f=fa({inputs:{x:h},backend:n,attrs:{perm:u}}),m=Bn({inputs:{x:f},backend:n,attrs:{shape:l}}),g=mo({inputs:{x:m},backend:n,attrs:{begin:p,size:d}});return n.disposeData(h.dataId),n.disposeData(f.dataId),n.disposeData(h.dataId),g}var Toe={kernelName:Uc,backendName:"wasm",kernelFunc:Soe};function rl(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 Coe={kernelName:wo,backendName:"wasm",kernelFunc:rl},Noe=rn(Io),YE;function _oe(e){YE=e.wasm.cwrap(ya,null,["number","number","number","number"])}function Eoe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{clipValueMin:a,clipValueMax:o}=r,i=n.dataIdMap.get(s.dataId).id,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(c.dataId).id;return YE(i,a,o,u),c}var Aoe={kernelName:ya,backendName:"wasm",setupFunc:_oe,kernelFunc:Eoe};function ZE(e){let{inputs:t,backend:n}=e,r=w.parseAxisParam(e.attrs.axis,t[0].shape)[0],s=t.map(h=>h.shape);N.assertParamsConsistent(s,r);let a=N.computeOutShape(t.map(h=>h.shape),r),o=t.filter(h=>w.sizeFromShape(h.shape)>0);if(o.length===1)return eg({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 Bn({inputs:{x:v},backend:n,attrs:{shape:k}})}),f=h.map(v=>({vals:n.readSync(v.dataId),shape:v.shape}));a=N.computeOutShape(h.map(v=>v.shape),1);let m=h[0].shape[0]===1,g=M0(f,a,t[0].dtype,m),b=N.computeOutShape(o.map(v=>v.shape),r);i.shape=b;let y=n.dataIdMap.get(i.dataId);return y.stringBytes=N.fromStringArrayToUint8(g),h.forEach(v=>n.disposeData(v.dataId)),i}let c=w.sizeFromShape(o[0].shape.slice(0,r)),u=0,l=o.map(h=>{let f=w.sizeFromShape(h.shape.slice(r));return u+=f,f}),p=o.map(h=>n.typedArrayFromHeap(h)),d=n.typedArrayFromHeap(i);for(let h=0;h<c;h++){let f=h*u;for(let m=0;m<p.length;m++){let g=l[m],b=h*g,y=p[m].subarray(b,b+g);d.set(y,f),f+=g}}return i}var $oe={kernelName:Gc,backendName:"wasm",kernelFunc:ZE},JE;function Doe(e){JE=e.wasm.cwrap(ko,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Foe(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:c,dilations:u,pad:l,dimRoundingMode:p,dataFormat:d}=n,h=N.convertConv2DDataFormat(d),f=N.computeConv2DInfo(s.shape,a.shape,c,u,l,p,!1,h),m=f.filterHeight,g=f.filterWidth,b=f.padInfo.top,y=f.padInfo.right,v=f.padInfo.bottom,x=f.padInfo.left,k=f.dilationHeight,S=f.dilationWidth,C=f.strideHeight,E=f.strideWidth,$=f.inChannels,F=f.outChannels,A=f.padInfo.type==="SAME"?1:0;if(f.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${f.dataFormat}'. Please use 'channelsLast'.`);let R=r.makeOutput(f.outShape,"float32"),T=r.dataIdMap.get(R.dataId).id;return JE(o,s.shape[0],s.shape[1],s.shape[2],i,m,g,b,y,v,x,A,k,S,C,E,$,F,T),R}var Roe={kernelName:ko,backendName:"wasm",setupFunc:Doe,kernelFunc:Foe},QE;function Poe(e){QE=e.wasm.cwrap(So,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ooe(e){let{backend:t,inputs:n,attrs:r}=e,{dy:s,filter:a}=n,{strides:o,pad:i,dataFormat:c,dimRoundingMode:u,inputShape:l}=r,p=1,d=N.convertConv2DDataFormat(c),h=N.computeConv2DInfo(l,a.shape,o,p,i,u,!1,d),{batchSize:f,filterHeight:m,filterWidth:g,inChannels:b,inHeight:y,inWidth:v,outChannels:x,outHeight:k,outWidth:S,strideHeight:C,strideWidth:E}=h,$=m-1-h.padInfo.top,F=g-1-h.padInfo.left,A=h.dataFormat==="channelsLast",R=w.computeStrides(h.inShape),T=w.computeStrides(s.shape),[L,V,G]=w.computeStrides(a.shape),j=R[0],H=A?R[1]:R[2],Z=A?R[2]:1,J=A?1:R[1],ee=T[0],re=A?T[1]:T[2],te=A?T[2]:1,ie=A?1:T[1],ne=t.makeOutput(h.inShape,"float32"),le=t.dataIdMap.get(ne.dataId).id,ue=t.dataIdMap.get(s.dataId).id,ye=t.dataIdMap.get(a.dataId).id;return QE(ue,ye,f,m,g,y,v,b,k,S,x,C,E,$,F,L,V,G,j,H,Z,J,ee,re,te,ie,le),ne}var Moe={kernelName:So,backendName:"wasm",setupFunc:Poe,kernelFunc:Ooe},Loe=rn(To),zoe=rn(Co),wv;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(wv||(wv={}));var eA;function Boe(e){eA=e.wasm.cwrap(qc,null,["number","number","number","number","array","number","number","number","number","number"])}function Woe(e){let{backend:t,inputs:n,attrs:r}=e,{method:s,extrapolationValue:a,cropSize:o}=r,{image:i,boxes:c,boxInd:u}=n,l=c.shape[0],[p,d]=o,h=[l,p,d,i.shape[3]],f=t.dataIdMap.get(i.dataId),m;i.dtype!=="float32"&&(m=rl({backend:t,inputs:{x:i},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(m.dataId));let g=f.id,b=t.dataIdMap.get(c.dataId).id,y=t.dataIdMap.get(u.dataId).id,v=t.makeOutput(h,"float32"),x=t.dataIdMap.get(v.dataId).id,k=new Uint8Array(new Int32Array(i.shape).buffer);return eA(g,b,y,l,k,p,d,wv[s],a,x),m!=null&&t.disposeData(m.dataId),v}var Voe={kernelName:qc,backendName:"wasm",setupFunc:Boe,kernelFunc:Woe},tA;function Uoe(e){tA=e.wasm.cwrap(Hc,null,["number","number","number","number","number","number"])}function Goe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r,c=s.shape.length;w.assert(s.dtype==="float32"||s.dtype==="int32",()=>`cumprod does not support ${s.dtype} tensors in the WASM backend`);let u=N.getAxesPermutation([a],c),l=s;u!==null&&(l=fa({inputs:{x:s},attrs:{perm:u},backend:n}));let p=N.getInnerMostAxes(1,c)[0];N.assertAxesAreInnerMostDims("cumprod",[p],c);let d=n.makeOutput(l.shape,l.dtype),h=l.shape[p],f=n.dataIdMap.get(l.dataId).id,m=n.dataIdMap.get(d.dataId).id;tA(f,o?1:0,i?1:0,h,m,Et[s.dtype]);let g=d;if(u!==null){let b=N.getUndoAxesPermutation(u);g=fa({inputs:{x:d},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(d.dataId)}return g}var Hoe={kernelName:Hc,backendName:"wasm",setupFunc:Uoe,kernelFunc:Goe},nA;function qoe(e){nA=e.wasm.cwrap(No,null,["number","number","number","number","number","number"])}function joe(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{axis:a,exclusive:o,reverse:i}=r,c=s.shape.length;w.assert(s.dtype==="float32"||s.dtype==="int32",()=>`cumsum does not support ${s.dtype} tensors in the WASM backend`);let u=N.getAxesPermutation([a],c),l=s;u!==null&&(l=fa({inputs:{x:s},attrs:{perm:u},backend:n}));let p=N.getInnerMostAxes(1,c)[0];N.assertAxesAreInnerMostDims("cumsum",[p],c);let d=n.makeOutput(l.shape,l.dtype),h=l.shape[p],f=n.dataIdMap.get(l.dataId).id,m=n.dataIdMap.get(d.dataId).id;nA(f,o?1:0,i?1:0,h,m,Et[s.dtype]);let g=d;if(u!==null){let b=N.getUndoAxesPermutation(u);g=fa({inputs:{x:d},attrs:{perm:b},backend:n}),n.disposeData(l.dataId),n.disposeData(d.dataId)}return g}var Koe={kernelName:No,backendName:"wasm",setupFunc:qoe,kernelFunc:joe},rA;function Xoe(e){rA=e.wasm.cwrap(jc,null,["number","number","number","array","number","array","array","number","number"])}function Yoe(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{blockSize:a,dataFormat:o}=r,i=s.shape[0],c=o==="NHWC"?s.shape[1]:s.shape[2],u=o==="NHWC"?s.shape[2]:s.shape[3],l=o==="NHWC"?s.shape[3]:s.shape[1],p=c*a,d=u*a,h=l/(a*a),f=o==="NHWC"?[i,p,d,h]:[i,h,p,d],m=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(m.dataId).id;return rA(b,a,o==="NHWC"?1:0,y,s.shape.length-1,v,x,f.length,k),m}var Zoe={kernelName:jc,backendName:"wasm",setupFunc:Xoe,kernelFunc:Yoe},sA;function Joe(e){sA=e.wasm.cwrap(_o,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qoe(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a}=t,o=r.dataIdMap.get(s.dataId).id,i=r.dataIdMap.get(a.dataId).id,{strides:c,dilations:u,pad:l,dimRoundingMode:p}=n,d=u==null?[1,1]:u,h=N.computeConv2DInfo(s.shape,a.shape,c,d,l,p,!0),f=h.filterHeight,m=h.filterWidth,g=h.padInfo.top,b=h.padInfo.right,y=h.padInfo.bottom,v=h.padInfo.left,x=h.dilationHeight,k=h.dilationWidth,S=h.strideHeight,C=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 A=r.makeOutput(h.outShape,"float32"),R=r.dataIdMap.get(A.dataId).id;return sA(o,s.shape[0],s.shape[1],s.shape[2],i,f,m,g,b,y,v,F,x,k,S,C,E,$,R),A}var eie={kernelName:_o,backendName:"wasm",setupFunc:Joe,kernelFunc:Qoe},tie=rn(Ao),nie=!1,rie=pn(Xc,nie,"bool"),sie=rn($o,"float32");function Iv(e){let{inputs:t,attrs:n,backend:r}=e,{input:s}=t,{dim:a}=n,o=s.shape.length,i=s.shape.slice(),c=a;return a<0&&(w.assert(-(o+1)<=a,()=>`Axis must be in the interval [${-(o+1)}, ${o}]`),c=o+a+1),i.splice(c,0,1),Bn({inputs:{x:s},backend:r,attrs:{shape:i}})}var aie={kernelName:Yc,backendName:"wasm",kernelFunc:Iv};function aA(e){let{attrs:{shape:t,value:n,dtype:r},backend:s}=e,a=s.makeOutput(t,r);return s.typedArrayFromHeap(a).fill(n),a}var oie={kernelName:gd,backendName:"wasm",kernelFunc:aA},oA;function iie(e){oA=e.wasm.cwrap(Jc,null,["number","number","number","number","number","number"])}function cie(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,c,u,l]=r.shape;return oA(a,i,c,u,l,o),s}var uie={kernelName:Jc,backendName:"wasm",kernelFunc:cie,setupFunc:iie},lie=rn(Do),die=!1,pie=pn(Fo,die),iA;function hie(e){iA=e.wasm.cwrap(Ro,null,["number","number","number","number","number","number","number"])}function fie(e){let{backend:t,inputs:n,attrs:r}=e,{varianceEpsilon:s}=r,{x:a,mean:o,variance:i,offset:c,scale:u}=n,l=t.dataIdMap.get(a.dataId).id,p=t.dataIdMap.get(o.dataId).id,d=t.dataIdMap.get(i.dataId).id,h=c!=null?t.dataIdMap.get(c.dataId).id:0,f=u!=null?t.dataIdMap.get(u.dataId).id:0,m=t.makeOutput(a.shape,a.dtype);if(w.sizeFromShape(a.shape)===0)return m;let g=t.dataIdMap.get(m.dataId).id;return iA(l,p,d,h,f,s,g),m}var mie={kernelName:Ro,backendName:"wasm",setupFunc:hie,kernelFunc:fie},cA;function gie(e){cA=e.wasm.cwrap(to,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 bie(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=N.computeConv2DInfo(s.shape,a.shape,c,l,u,d),g=ud[h];if(g==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=m.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=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,E=m.padInfo.right,$=m.padInfo.bottom,F=m.padInfo.left,A=m.dilationHeight,R=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,V=m.inChannels,G=m.padInfo.type==="SAME"?1:0,j=m.batchSize,H=m.inHeight,Z=m.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let J=r.makeOutput(m.outShape,"float32"),ee=r.dataIdMap.get(J.dataId).id,re=i==null?0:r.dataIdMap.get(i.dataId).id;return cA(b,j,H,Z,y,k,S,x,C,E,$,F,G,A,R,T,L,V,v,g,re,f||0,ee),J}var yie={kernelName:to,backendName:"wasm",setupFunc:gie,kernelFunc:bie},uA;function vie(e){uA=e.wasm.cwrap(no,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 xie(e){let{inputs:t,attrs:n,backend:r}=e,{x:s,filter:a,bias:o,preluActivationWeights:i}=t,{strides:c,pad:u,dilations:l,dataFormat:p,dimRoundingMode:d,activation:h,leakyreluAlpha:f}=n,m=N.computeConv2DInfo(s.shape,a.shape,c,l,u,d,!0),g=ud[h];if(g==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=m.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=m.filterHeight,S=m.filterWidth,C=m.padInfo.top,E=m.padInfo.right,$=m.padInfo.bottom,F=m.padInfo.left,A=m.dilationHeight,R=m.dilationWidth,T=m.strideHeight,L=m.strideWidth,V=m.inChannels,G=m.padInfo.type==="SAME"?1:0,j=m.batchSize,H=m.inHeight,Z=m.inWidth;if(p!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${p}'. Please use 'NHWC'.`);let J=r.makeOutput(m.outShape,"float32"),ee=r.dataIdMap.get(J.dataId).id,re=i==null?0:r.dataIdMap.get(i.dataId).id;return uA(b,j,H,Z,y,k,S,x,C,E,$,F,G,A,R,T,L,V,v,g,re,f||0,ee),J}var wie={kernelName:no,backendName:"wasm",setupFunc:vie,kernelFunc:xie},lA;function Iie(e){lA=e.wasm.cwrap(eu,null,["number","number","number","number","number","number","array","number"])}function kie(e){let{backend:t,inputs:n}=e,{params:r,indices:s}=n,[a,o,i,c]=Uv.prepareAndValidate(r,s),u=t.makeOutput(a,r.dtype);if(o===0)return u;let l=s.shape,p=l[l.length-1],h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,g=new Uint8Array(new Int32Array(c).buffer),b=t.dataIdMap.get(u.dataId).id;return lA(h,Et[r.dtype],m,o,p,i,g,b),u}var Sie={kernelName:eu,backendName:"wasm",setupFunc:Iie,kernelFunc:kie},dA;function Tie(e){dA=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function Cie(e){let{backend:t,inputs:n,attrs:r}=e,{x:s,indices:a}=n,{axis:o,batchDims:i}=r,c=w.parseAxisParam(o,s.shape)[0],u=t.readSync(a.dataId),l=s.shape[c];for(let $=0;$<u.length;++$){let F=u[$];w.assert(F<=l-1&&F>=0,()=>`GatherV2: the index value ${F} is not in [0, ${l-1}]`)}let p=N.segment_util.collectGatherOpShapeInfo(s,a,c,i),d=Bn({inputs:{x:s},attrs:{shape:[p.batchSize,p.outerSize,p.dimSize,p.sliceSize]},backend:t}),h=w.sizeFromShape(a.shape),f=Bn({inputs:{x:a},attrs:{shape:[p.batchSize,h/p.batchSize]},backend:t}),m=[p.batchSize,p.outerSize,h/p.batchSize,p.sliceSize],g=t.makeOutput(m,s.dtype);if(w.sizeFromShape(s.shape)===0)return g;let b=d.shape.length-1,v=t.dataIdMap.get(d.dataId).id,k=t.dataIdMap.get(f.dataId).id,S=t.dataIdMap.get(g.dataId).id,C=new Uint8Array(new Int32Array(w.computeStrides(d.shape)).buffer),E=new Uint8Array(new Int32Array(w.computeStrides(m)).buffer);return dA(v,Et[s.dtype],C,b,k,p.batchSize,E,S),t.disposeData(d.dataId),t.disposeData(f.dataId),g.shape=p.outputShape,g}var Nie={kernelName:Qc,backendName:"wasm",setupFunc:Tie,kernelFunc:Cie},_ie=!1,Eie=pn(tu,_ie,"bool"),Aie=!1,$ie=pn(Po,Aie,"bool"),pA;function Die(e){pA=e.wasm.cwrap(Mo,null,["number","number","number","number"])}function Fie(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;pA(s,Et[t.dtype],n,o)}return a}var Rie={kernelName:Mo,backendName:"wasm",setupFunc:Die,kernelFunc:Fie},Pie=!1,Oie=pn(au,Pie,"bool"),Mie=!1,Lie=pn(ou,Mie,"bool"),zie=rn(Lo),Bie=!1,Wie=pn(cu,Bie,"bool"),Vie=rn(uu),Uie=!1,Gie=pn(lu,Uie,"bool"),Hie=!1,qie=pn(sS,Hie,"bool"),hA;function jie(e){hA=e.wasm.cwrap(zo,null,["number","number","number","number"])}function Kie(e){let{backend:t,inputs:n,attrs:r}=e,{reductionIndices:s,keepDims:a}=r,{x:o}=n,c=t.dataIdMap.get(o.dataId).id,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;u=l,c=v}let f=u.shape.length;N.assertAxesAreInnerMostDims("max",p,f);let[m,g]=N.computeOutAndReduceShapes(u.shape,p),b=w.sizeFromShape(g),y=t.makeOutput(m,o.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;hA(c,Et[o.dtype],b,v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var Xie={kernelName:zo,backendName:"wasm",setupFunc:jie,kernelFunc:Kie},Yie=!1,Zie=pn(Bo,Yie),fA;function Jie(e){fA=e.wasm.cwrap(Wo,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Qie(e){let{inputs:t,attrs:n,backend: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:c,dimRoundingMode:u}=n,l=N.computePool2DInfo(s.shape,o,i,1,c,u),p=l.filterHeight,d=l.filterWidth,h=l.padInfo.top,f=l.padInfo.right,m=l.padInfo.bottom,g=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 C=r.makeOutput(l.outShape,"float32"),E=r.dataIdMap.get(C.dataId).id;return fA(a,s.shape[0],s.shape[1],s.shape[2],p,d,h,f,m,g,b,y,v,x,k,S,E),C}var ece={kernelName:Wo,backendName:"wasm",setupFunc:Jie,kernelFunc:Qie},mA;function tce(e){mA=e.wasm.cwrap(Vo,null,["number, number, number"])}function nce(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t),f=p;if(h){let x=t.dataIdMap.get(l.dataId).id;x!==i&&(u=l,c=x,f=N.getInnerMostAxes(f.length,u.shape.length))}N.assertAxesAreInnerMostDims("mean",f,u.shape.length);let[m,g]=N.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=u;u.dtype!=="float32"&&(y=rl({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),c=t.dataIdMap.get(y.dataId).id);let v=t.makeOutput(m,"float32");if(w.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(v.dataId).id;mA(c,b,x)}if(h&&t.disposeData(l.dataId),a){let x=N.expandShapeToKeepDim(v.shape,d);v.shape=x}return u.dtype!=="float32"&&t.disposeData(y.dataId),v}var rce={kernelName:Vo,backendName:"wasm",setupFunc:tce,kernelFunc:nce},gA;function sce(e){gA=e.wasm.cwrap(Uo,null,["number","number","number","number"])}function ace(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t);if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v)}let f=u.shape.length;N.assertAxesAreInnerMostDims("min",p,f);let[m,g]=N.computeOutAndReduceShapes(u.shape,p),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;gA(c,Et[o.dtype],b,v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var oce={kernelName:Uo,backendName:"wasm",setupFunc:sce,kernelFunc:ace},ice=!1,cce=pn(Go,ice),kv;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(kv||(kv={}));var bA;function uce(e){bA=e.wasm.cwrap(Ho,null,["number","array","number","number","array","array","number","number"])}function lce(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,mode:s}}=e,a=r.map((f,m)=>f[0]+t.shape[m]+f[1]),o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),c=n.dataIdMap.get(i.dataId).id,u=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 bA(o,u,t.shape.length,Et[t.dtype],d,h,kv[s],c),i}var dce={kernelName:Ho,backendName:"wasm",kernelFunc:lce,setupFunc:uce},pce=!0,hce=pn(qo,pce),fce=rn(pu);function uI(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 yA;function mce(e){yA=e.wasm.cwrap(fu,"number",["number","number","number","number","number"])}function gce(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o}=r,{boxes:i,scores:c}=n,u=t.dataIdMap.get(i.dataId).id,l=t.dataIdMap.get(c.dataId).id,p=yA(u,l,a,s,o),{pSelectedIndices:d,selectedSize:h,pSelectedScores:f,pValidOutputs:m}=uI(t,p);return t.wasm._free(f),t.wasm._free(m),t.makeOutput([h],"int32",d)}var bce={kernelName:fu,backendName:"wasm",setupFunc:mce,kernelFunc:gce},vA;function yce(e){vA=e.wasm.cwrap(mu,"number",["number","number","number","number","number","bool"])}function vce(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,padToMaxOutputSize:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,p=t.dataIdMap.get(u.dataId).id,d=vA(l,p,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=uI(t,d);t.wasm._free(m);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([],"int32",g);return[b,y]}var xce={kernelName:mu,backendName:"wasm",setupFunc:yce,kernelFunc:vce},xA;function wce(e){xA=e.wasm.cwrap(gu,"number",["number","number","number","number","number","number"])}function Ice(e){let{backend:t,inputs:n,attrs:r}=e,{iouThreshold:s,maxOutputSize:a,scoreThreshold:o,softNmsSigma:i}=r,{boxes:c,scores:u}=n,l=t.dataIdMap.get(c.dataId).id,p=t.dataIdMap.get(u.dataId).id,d=xA(l,p,a,s,o,i),{pSelectedIndices:h,selectedSize:f,pSelectedScores:m,pValidOutputs:g}=uI(t,d);t.wasm._free(g);let b=t.makeOutput([f],"int32",h),y=t.makeOutput([f],"float32",m);return[b,y]}var kce={kernelName:gu,backendName:"wasm",setupFunc:wce,kernelFunc:Ice},Sce=!1,Tce=pn(hu,Sce,"bool"),wA;function Cce(e){wA=e.wasm.cwrap(jo,null,["number","number","number","number","number"])}function Nce(e){let{inputs:t,backend:n,attrs:r}=e,{indices:s}=t,{dtype:a,depth:o,onValue:i,offValue:c}=r,u=n.makeOutput([...s.shape,o],a),l=n.dataIdMap.get(u.dataId).id,d=n.dataIdMap.get(s.dataId).id;return wA(d,o,i,c,l),u}var _ce={kernelName:jo,backendName:"wasm",setupFunc:Cce,kernelFunc:Nce};function Ece(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(1),r}var Ace={kernelName:bu,backendName:"wasm",kernelFunc:Ece};function $ce(e){let{inputs:t,backend:n,attrs:r}=e,{axis:s}=r;if(t.length===1)return Iv({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=[],c=t.map(l=>{let p=Iv({inputs:{input:l},backend:n,attrs:{dim:s}});return i.push(p),p}),u=ZE({inputs:c,backend:n,attrs:{axis:s}});return i.forEach(l=>n.disposeData(l.dataId)),u}var Dce={kernelName:yu,backendName:"wasm",kernelFunc:$ce},IA;function Fce(e){IA=e.wasm.cwrap(Ko,null,["number","array","number","number","array","array","number","number"])}function Rce(e){let{inputs:{x:t},backend:n,attrs:{paddings:r,constantValue:s}}=e,a=r.map((m,g)=>m[0]+t.shape[g]+m[1]);if(w.sizeFromShape(t.shape)===0)return aA({backend:n,attrs:{shape:a,value:s,dtype:t.dtype}});let o=n.dataIdMap.get(t.dataId).id,i=n.makeOutput(a,t.dtype),u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(t.shape).buffer),p=r.map(m=>m[0]),d=r.map(m=>m[1]),h=new Uint8Array(new Int32Array(p).buffer),f=new Uint8Array(new Int32Array(d).buffer);return IA(o,l,t.shape.length,Et[t.dtype],h,f,s,u),i}var kA={kernelName:Ko,backendName:"wasm",kernelFunc:Rce,setupFunc:Fce},Pce=!1,Oce=pn(Xo,Pce),SA;function Mce(e){SA=e.wasm.cwrap(Yo,null,["number","number","number"])}function Lce(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,c=r,u=c;c.dtype!=="float32"&&(u=rl({backend:n,inputs:{x:r},attrs:{dtype:"float32"}}),i=n.dataIdMap.get(u.dataId).id);let l=n.makeOutput(r.shape,"float32"),p=n.dataIdMap.get(l.dataId).id;return SA(i,o,p),c.dtype!=="float32"&&n.disposeData(u.dataId),l}var zce={kernelName:Yo,backendName:"wasm",setupFunc:Mce,kernelFunc:Lce},TA;function Bce(e){TA=e.wasm.cwrap(Zo,null,["number","number","number","number"])}function Wce(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t),f=p;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=N.getInnerMostAxes(f.length,u.shape.length))}N.assertAxesAreInnerMostDims("prod",f,u.shape.length);let[m,g]=N.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;TA(c,b,Et[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var Vce={kernelName:Zo,backendName:"wasm",setupFunc:Bce,kernelFunc:Wce},Uce=e=>{let{backend:t,attrs:n}=e,{start:r,stop:s,step:a,dtype:o}=n,i=B0(r,s,a,o),c=t.makeOutput([i.length],o);return t.typedArrayFromHeap(c).set(i),c},Gce={kernelName:vd,backendName:"wasm",kernelFunc:Uce},Hce=!0,qce=pn(Eo,Hce),jce=rn(Jo),Kce=rn(ti),CA;function Xce(e){CA=e.wasm.cwrap(ei,null,["number","number","number","number","number","number","number","number","number","number"])}function Yce(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,[l,p,d,h]=s.shape,f=[l,c,u,h],m=t.dataIdMap.get(s.dataId),g;m.dtype!=="float32"&&(g=rl({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(g.dataId));let b=m.id,y=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return y;let v=t.dataIdMap.get(y.dataId).id;return CA(b,l,p,d,h,c,u,a?1:0,o?1:0,v),g!=null&&t.disposeData(g.dataId),y}var Zce={kernelName:ei,backendName:"wasm",setupFunc:Xce,kernelFunc:Yce},NA;function Jce(e){NA=e.wasm.cwrap(Qo,null,["number","number","number","number","number","number","number","number","number","number"])}function Qce(e){let{backend:t,inputs:n,attrs:r}=e,{images:s}=n,{alignCorners:a,halfPixelCenters:o,size:i}=r,[c,u]=i,[l,p,d,h]=s.shape,f=[l,c,u,h],m=t.makeOutput(f,"float32");if(w.sizeFromShape(s.shape)===0)return m;let g=t.dataIdMap.get(s.dataId),b;g.dtype!=="float32"&&(b=rl({backend:t,inputs:{x:s},attrs:{dtype:"float32"}}),g=t.dataIdMap.get(b.dataId));let y=g.id,v=t.dataIdMap.get(m.dataId).id;return NA(y,l,p,d,h,c,u,a?1:0,o?1:0,v),b!=null&&t.disposeData(b.dataId),m}var eue={kernelName:Qo,backendName:"wasm",setupFunc:Jce,kernelFunc:Qce},_A;function tue(e){_A=e.wasm.cwrap(ni,null,["number","array","number","array","number","number"])}function nue(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 eg({inputs:{x:s},backend:n});let i=n.makeOutput(s.shape,s.dtype),c=n.dataIdMap.get(s.dataId).id,u=n.dataIdMap.get(i.dataId).id,l=new Uint8Array(new Int32Array(o).buffer),p=new Uint8Array(new Int32Array(s.shape).buffer);_A(c,l,o.length,p,s.shape.length,u);let d=Bn({inputs:{x:i},attrs:{shape:s.shape},backend:n});return n.disposeData(i.dataId),d}var rue={kernelName:ni,backendName:"wasm",kernelFunc:nue,setupFunc:tue},EA;function sue(e){EA=e.wasm.cwrap(Ou,null,["number","number","number","number","number","number","number","number","array","number","number"])}function aue(e){let{inputs:t,backend:n,attrs:r}=e,{image:s}=t,{radians:a,fillValue:o,center:i}=r,c=n.makeOutput(s.shape,s.dtype),u=n.dataIdMap.get(s.dataId).id,l=n.dataIdMap.get(c.dataId).id,[p,d,h,f]=s.shape,[m,g]=N.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 EA(u,p,d,h,f,a,m,g,x,v.length,l),c}var oue={kernelName:Ou,backendName:"wasm",kernelFunc:aue,setupFunc:sue},iue=rn(ri),cue=rn(si),AA;function uue(e){AA=e.wasm.cwrap(wu,null,["number","number","number","number","number","number","array","number","number"])}function lue(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:c,numUpdates:u,sliceSize:l,strides:p,outputSize:d}=Gv.calculateShapes(a,s,o),f=t.dataIdMap.get(s.dataId).id,g=t.dataIdMap.get(a.dataId).id,b=new Uint8Array(new Int32Array(p).buffer),y=t.dataIdMap.get(i.dataId).id;return AA(f,g,Et[a.dtype],c,u,l,b,d,y),i}var due={kernelName:wu,backendName:"wasm",setupFunc:uue,kernelFunc:lue},$A;function pue(e){$A=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function hue(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,c=n.dataIdMap.get(a.dataId).id,u=n.makeOutput(s.shape,s.dtype),l=n.dataIdMap.get(u.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 $A(o,i,c,h,l),u}var fue={kernelName:Iu,backendName:"wasm",kernelFunc:hue,setupFunc:pue},DA;function mue(e){DA=e.wasm.cwrap(oi,null,["number","number"])}function gue(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||DA(r,a),s}var bue={kernelName:"Sigmoid",backendName:"wasm",setupFunc:mue,kernelFunc:gue},yue=rn(ai),FA;function vue(e){FA=e.wasm.cwrap(ui,null,["number","number","number","number"])}function xue(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],c=w.sizeFromShape(n.shape)/i;return w.sizeFromShape(a.shape)===0||FA(s,o,i,c),a}var wue={kernelName:ui,backendName:"wasm",setupFunc:vue,kernelFunc:xue};function Iue(e){let{inputs:t,backend:n,attrs:r}=e,{x:s}=t,{blockShape:a,paddings:o}=r,i=w.sizeFromShape(a),c=[[0,0]];c.push(...o);for(let S=1+a.length;S<s.shape.length;++S)c.push([0,0]);let u=kA.kernelFunc({inputs:{x:s},backend:n,attrs:{paddings:c,constantValue:0}}),l=N.getReshaped(u.shape,a,i,!1),p=N.getPermuted(l.length,a.length,!1),d=N.getReshapedPermuted(u.shape,a,i,!1),m=Bn({inputs:{x:u},backend:n,attrs:{shape:l}}),y=fa({inputs:{x:m},backend:n,attrs:{perm:p}}),k=Bn({inputs:{x:y},backend:n,attrs:{shape:d}});return n.disposeData(u.dataId),n.disposeData(m.dataId),n.disposeData(y.dataId),k}var kue={kernelName:_u,backendName:"wasm",kernelFunc:Iue},RA;function Sue(e){RA=e.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function Tue(e){let{backend:t,inputs:n}=e,{indices:r,values:s,denseShape:a,defaultValue:o}=n,i=r.shape[0],c=r.shape[1],u=t.readSync(a.dataId)[0],l=[i+u,c],p=t.dataIdMap.get(r.dataId).id,d=t.dataIdMap.get(s.dataId).id,h=t.dataIdMap.get(o.dataId).id,f=t.makeOutput(l,r.dtype),m=t.dataIdMap.get(f.dataId).id,g=t.makeOutput(l.slice(0,1),s.dtype),b=t.dataIdMap.get(g.dataId).id,y=t.makeOutput([u],"bool"),v=t.dataIdMap.get(y.dataId).id,x=t.makeOutput([i],r.dtype),k=t.dataIdMap.get(x.dataId).id,S=t.makeOutput([4],"int32"),C=t.dataIdMap.get(S.dataId).id,E=RA(p,d,Et[s.dtype],i,u,c,h,m,b,v,k,C),$=t.readSync(S.dataId),F;switch($[0]){case 1:{F=N.getSparseFillEmptyRowsIndicesDenseShapeMismatch($[1]);break}case 2:{F=N.getSparseFillEmptyRowsNegativeIndexErrorMessage($[1],$[2]);break}case 3:F=N.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage($[1],$[2],$[3]);break;default:F=""}if(t.disposeData(S.dataId),F)throw t.disposeData(f.dataId),t.disposeData(g.dataId),t.disposeData(y.dataId),t.disposeData(x.dataId),new Error(F);let A=f,R=g;return E!==l[0]&&(A=mo({inputs:{x:f},attrs:{begin:0,size:[E,c]},backend:t}),R=mo({inputs:{x:g},attrs:{begin:0,size:E},backend:t}),t.disposeData(f.dataId),t.disposeData(g.dataId)),[A,R,y,x]}var Cue={kernelName:xd,backendName:"wasm",setupFunc:Sue,kernelFunc:Tue},PA;function Nue(e){PA=e.wasm.cwrap(Au,null,["number","number","number","number","number","number","number"])}function _ue(e){let{backend:t,inputs:n}=e,{inputIndices:r,inputShape:s,newShape:a}=n;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=t.dataIdMap.get(r.dataId).id,i=t.dataIdMap.get(s.dataId).id,c=t.dataIdMap.get(a.dataId).id,u=r.shape[0],l=w.sizeFromShape(a.shape),p=t.makeOutput([u,l],r.dtype),d=t.dataIdMap.get(p.dataId).id,h=t.makeOutput([l],a.dtype),f=t.dataIdMap.get(h.dataId).id,m=t.makeOutput([3],"int32"),g=t.dataIdMap.get(m.dataId).id;PA(o,i,c,u,d,f,g);let b=t.readSync(m.dataId),y;switch(b[0]){case 0:{y=N.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(b[1],b[2]);break}case 1:{y=N.getSparseReshapeNegativeOutputDimErrorMessage(b[1],b[2]);break}case 2:y=N.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let v=Array.from(t.readSync(s.dataId)),x=Array.from(t.readSync(h.dataId));y=N.getSparseReshapeInputOutputMultipleErrorMessage(v,x);break}case 4:{let v=Array.from(t.readSync(s.dataId)),x=Array.from(t.readSync(h.dataId));y=N.getSparseReshapeInputOutputMismatchErrorMessage(v,x);break}default:y=""}if(t.disposeData(m.dataId),y)throw t.disposeData(p.dataId),t.disposeData(h.dataId),new Error(y);return[p,h]}var Eue={kernelName:Au,backendName:"wasm",setupFunc:Nue,kernelFunc:_ue},OA;function MA(e){OA=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function LA(e,t){let{backend:n,inputs:r}=e,{data:s,indices:a,segmentIds:o}=r,i=a.shape[0],c=n.readSync(o.dataId,i-1,i)[0],l=i>0?c+1:0;if(l<0)throw new Error(N.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,m=n.makeOutput(p,s.dtype),g=n.dataIdMap.get(m.dataId).id,b=n.makeOutput([4],"int32"),y=n.dataIdMap.get(b.dataId).id;OA(d,Et[s.dtype],s.shape[0],h,f,g,y,t,0);let v=n.readSync(b.dataId),x;switch(v[0]){case 0:{x=N.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=N.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=N.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(v[1],v[2]);break;case 3:x=N.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(v[1],v[2],v[3]);break;default:x=""}if(n.disposeData(b.dataId),x)throw n.disposeData(m.dataId),new Error(x);return m}function Aue(e){return LA(e,!0)}var $ue={kernelName:wd,backendName:"wasm",setupFunc:MA,kernelFunc:Aue};function Due(e){return LA(e,!1)}var Fue={kernelName:Id,backendName:"wasm",setupFunc:MA,kernelFunc:Due};function Rue(e){let{inputs:t,attrs:n,backend:r}=e,{x:s}=t,{numOrSizeSplits:a,axis:o}=n,i=w.parseAxisParam(o,s.shape)[0],c=N.prepareSplitSize(s,a,i),u=new Array(s.shape.length).fill(0),l=s.shape.slice();return c.map(p=>{let d=[...l];d[i]=p;let h=mo({inputs:{x:s},attrs:{begin:u,size:d},backend:r});return u[i]+=p,h})}var Pue={kernelName:Eu,backendName:"wasm",kernelFunc:Rue},Oue=rn(ii),Mue=rn(kd),Lue=!0,zue=pn(li,Lue),zA;function Bue(e){zA=e.wasm.cwrap(xa,null,["number","number","number","number"])}function Wue(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),c=t.dataIdMap.get(i.dataId).id;return zA(o,s,Et[a.dtype],c),i}var Vue={kernelName:xa,backendName:"wasm",setupFunc:Bue,kernelFunc:Wue},BA;function Uue(e){BA=e.wasm.cwrap($u,null,["number","array","number","array","array","array","array","array","number","number"])}function Gue(e){let{backend:t,inputs:n,attrs:r}=e,{x:s}=n,{begin:a,end:o,strides:i,beginMask:c,endMask:u,ellipsisMask:l,newAxisMask:p,shrinkAxisMask:d}=r,{finalShapeSparse:h,finalShape:f,isIdentity:m,sliceDim0:g,isSimpleSlice:b,begin:y,end:v,strides:x}=qt.sliceInfo(s.shape,a,o,i,c,u,l,p,d),k;if(m)k=Bn({inputs:{x:s},backend:t,attrs:{shape:f}});else if(g||b){w.assert(s.shape.length>=1,()=>`Input must have rank at least 1, got: ${s.shape.length}`);let S=qt.computeOutShape(y,v,x),C=mo({inputs:{x:s},backend:t,attrs:{begin:y,size:S}});k=Bn({inputs:{x:C},backend:t,attrs:{shape:f}}),t.disposeData(C.dataId)}else{let S=t.makeOutput(h,"float32"),C=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),A=new Uint8Array(new Int32Array(x).buffer),R=new Uint8Array(new Int32Array(h).buffer),T=new Uint8Array(new Int32Array(w.computeStrides(h)).buffer),L=t.dataIdMap.get(S.dataId).id;BA(C,E,s.shape.length,$,F,A,R,T,h.length,L),k=Bn({inputs:{x:S},backend:t,attrs:{shape:f}}),t.disposeData(S.dataId)}return k}var Hue={kernelName:$u,backendName:"wasm",setupFunc:Uue,kernelFunc:Gue};function que(e){let{backend:t,inputs:n,attrs:r}=e,{data:s,dataSplits:a}=n,{separator:o,nGramWidths:i,leftPad:c,rightPad:u,padWidth:l,preserveShortSequences:p}=r,d=t.readSync(s.dataId),h=t.readSync(a.dataId),[f,m]=V0(d,h,o,i,c,u,l,p),g=t.makeOutput([f.length],"string"),b=t.dataIdMap.get(g.dataId);b.stringBytes=f;let y=t.makeOutput(a.shape,"int32");return t.typedArrayFromHeap(y).set(m),[g,y]}var jue={kernelName:Sd,backendName:"wasm",kernelFunc:que};function Kue(e){let{backend:t,inputs:n,attrs:r}=e,{input:s,delimiter:a}=n,{skipEmpty:o}=r,i=t.readSync(s.dataId),c=t.readSync(a.dataId),[u,l,p]=U0(i,c[0],o),d=l.length,h=t.makeOutput([d,2],"int32");t.typedArrayFromHeap(h).set(u);let m=t.makeOutput([d],"string"),g=t.dataIdMap.get(m.dataId);g.stringBytes=l;let b=t.makeOutput([2],"int32");return t.typedArrayFromHeap(b).set(p),[h,m,b]}var Xue={kernelName:Td,backendName:"wasm",kernelFunc:Kue};function Yue(e){let{backend:t,inputs:n,attrs:r}=e,{input:s}=n,{numBuckets:a}=r,o=t.readSync(s.dataId),i=G0(o,a),c=t.makeOutput(s.shape,"int32");return t.typedArrayFromHeap(c).set(i),c}var Zue={kernelName:Cd,backendName:"wasm",kernelFunc:Yue},Jue=!0,Que=pn(di,Jue),WA;function ele(e){WA=e.wasm.cwrap(ci,null,["number","number","number","number"])}function tle(e){let{backend:t,inputs:n,attrs:r}=e,{axis:s,keepDims:a}=r,{x:o}=n,i=t.dataIdMap.get(o.dataId).id,c=i,u=o,{transposed:l,axes:p,originalAxes:d,inputWasTransposed:h}=Aa(o,s,t),f=p;if(h){let v=t.dataIdMap.get(l.dataId).id;v!==i&&(u=l,c=v,f=N.getInnerMostAxes(f.length,u.shape.length))}N.assertAxesAreInnerMostDims("sum",f,u.shape.length);let[m,g]=N.computeOutAndReduceShapes(u.shape,f),b=w.sizeFromShape(g),y=t.makeOutput(m,u.dtype);if(w.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(y.dataId).id;WA(c,b,Et[y.dtype],v)}if(h&&t.disposeData(l.dataId),a){let v=N.expandShapeToKeepDim(y.shape,d);y.shape=v}return y}var nle={kernelName:ci,backendName:"wasm",setupFunc:ele,kernelFunc:tle},rle=rn(pi),sle=rn(hi),VA;function ale(e){VA=e.wasm.cwrap(va,null,["number","array","number","array","number","number"])}function ole(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<i.length;d++)i[d]=s.shape[d]*o[d];let c=new Uint8Array(new Int32Array(s.shape).buffer),u=new Uint8Array(new Int32Array(i).buffer),l=n.makeOutput(i,s.dtype),p=n.dataIdMap.get(l.dataId).id;return VA(a,c,s.shape.length,u,i.length,Et[l.dtype],p),l}var ile={kernelName:va,backendName:"wasm",setupFunc:ale,kernelFunc:ole},UA;function cle(e){UA=e.wasm.cwrap(Du,null,["number","array","number","number","number","bool","number","number"])}var ule=({inputs:e,backend:t,attrs:n})=>{let{x:r}=e,{k:s,sorted:a}=n,o=t.dataIdMap.get(r.dataId).id,i=new Uint8Array(new Int32Array(r.shape).buffer),c=r.shape.slice();c[c.length-1]=s;let u=t.makeOutput(c,r.dtype),l=t.dataIdMap.get(u.dataId).id,p=t.makeOutput(c,"int32"),d=t.dataIdMap.get(p.dataId).id;return UA(o,i,r.shape.length,Et[r.dtype],s,a,l,d),[u,p]},lle={kernelName:Du,backendName:"wasm",setupFunc:cle,kernelFunc:ule},GA;function dle(e){GA=e.wasm.cwrap(Fu,null,["number","number","bool","number","number","number","number","number","number","array","number","array","number","number","number","number","number"])}function ple(e){let{backend:t,inputs:n,attrs:r}=e,{image:s,transforms:a}=n,{interpolation:o,fillMode:i,fillValue:c,outputShape:u}=r,[l,p,d,h]=s.shape,[f,m]=u!=null?u:[p,d],g=[l,f,m,h],b=new Uint8Array(new Int32Array(w.computeStrides(s.shape)).buffer),y=new Uint8Array(new Int32Array(w.computeStrides(g)).buffer),v=t.makeOutput(g,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 GA(S,E,a.shape[0]>1,l,f,m,h,d,p,b,s.shape.length-1,y,g.length-1,$,F,c,x),v}var hle={kernelName:Fu,backendName:"wasm",setupFunc:dle,kernelFunc:ple};function fle(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,c=new Array(i-1),u=0;for(let h=0;h<i;h++)h!==a&&(c[u++]=s.shape[h]);let l=new Array(o),p=new Array(i).fill(0),d=s.shape.slice();d[a]=1;for(let h=0;h<l.length;h++)p[a]=h,l[h]=mo({inputs:{x:s},attrs:{begin:p,size:d},backend:n});return l.map(({dataId:h,dtype:f})=>({dataId:h,dtype:f,shape:c}))}var mle={kernelName:Ru,backendName:"wasm",kernelFunc:fle};function gle(e){let{inputs:{x:t},backend:n}=e,r=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(r).fill(0),r}var ble={kernelName:Pu,backendName:"wasm",kernelFunc:gle},yle=[qae,jae,Xae,Jae,ooe,uoe,poe,moe,voe,Toe,Coe,Noe,Aoe,$oe,Roe,Moe,Loe,zoe,Voe,Hoe,Koe,Zoe,eie,tie,rie,sie,aie,oie,uie,lie,pie,mie,yie,wie,Sie,Nie,Eie,$ie,Qae,Rie,Oie,Lie,zie,Wie,Vie,Gie,qie,Xie,Zie,ece,rce,oce,cce,dce,hce,fce,bce,xce,kce,Tce,_ce,Ace,Dce,kA,Oce,zce,Vce,Gce,qce,jce,Kce,goe,Zce,eue,rue,oue,iue,cue,due,fue,bue,yue,koe,wue,kue,Cue,Eue,$ue,Fue,Pue,Oue,Mue,zue,Vue,Hue,jue,Xue,Zue,Que,nle,rle,sle,ile,lle,hle,roe,mle,ble];for(let e of yle)_d(e);var Sv=q();Sv.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}});Sv.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(Sv.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 M1=ma(OD()),vle=ma(MD()),L1=ma(LD()),z1=M1.default||M1,xle=L1.default||L1,HA=class extends ld{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(qA),Tv=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new uf(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 u=t;this.dataIdMap.set(e,{id:a,stringBytes:u,shape:n,dtype:r,memoryOffset:null,refCount:s});return}let o=w.sizeFromShape(n),i=o*w.bytesPerElement(r),c=this.wasm._malloc(i);this.dataIdMap.set(e,{id:a,memoryOffset:c,shape:n,dtype:r,refCount:s}),this.wasm.tfjs.registerTensor(a,o,c),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,i),c)}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),c=this.wasm.HEAPU8.slice(r+t*i,r+n*i);return kle(c.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){let r;if(n==null)r=this.write(null,e,t);else{let s=this.dataIdNextNumber++;r={id:s},this.dataIdMap.set(r,{id:s,memoryOffset:n,shape:e,dtype:t,refCount:1});let a=w.sizeFromShape(e);this.wasm.tfjs.registerTensor(s,a,n)}return{dataId:r,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 wle(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 B1(e,t,n){if(of!=null)return of;let r="tfjs-backend-wasm.wasm";return e&&t?r="tfjs-backend-wasm-threaded-simd.wasm":e&&(r="tfjs-backend-wasm-simd.wasm"),ql!=null&&ql[r]!=null?ql[r]:n+r}async function Ile(){let[e,t]=await Promise.all([q().getAsync("WASM_HAS_SIMD_SUPPORT"),q().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,r)=>{let s={};s.locateFile=(i,c)=>{if(i.endsWith(".worker.js")){let u=vle.wasmWorkerContents.replace(/\n/g,"\\n"),l=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(l)}return i.endsWith(".wasm")?B1(e,t,Ul!=null?Ul:c):c+i},lI&&(s.instantiateWasm=wle(B1(e,t,Ul!=null?Ul:"")));let a=!1;s.onAbort=()=>{if(a||jl)return;jl=!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&&of==null?(s.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+z1.toString()],{type:"text/javascript"}),o=z1(s)):o=xle(s),o.then(i=>{a=!0,jl=!1;let c=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",c,["number"]),dispose:i.cwrap("dispose",c,[])},n({wasm:i})}).catch(r)})}function kle(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 Sle=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],of=null,Ul=null,ql={},jl=!1,lI=!1;function Tle(e,t=!1){if(Vv("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),jl)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");of=e,lI=t}function Cle(e,t=!1){if(jl)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")Ul=e;else{ql=e;let n=Sle.filter(r=>ql[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.`)}lI=t}var qA=-1,Tv=-1;function Nle(e){qA=e}function _le(){if(Tv===-1)throw new Error("WASM backend not initialized.");return Tv}var Ele="4.0.0",Ale=2;qf("wasm",async()=>{let{wasm:e}=await Ile();return new HA(e)},Ale);var W1="4.0.0",$le="4.0.0",Dle="4.0.0",Fle="4.0.0",Rle="4.0.0",Ple={tfjs:W1,"tfjs-core":W1,"tfjs-converter":$le,"tfjs-backend-cpu":Dle,"tfjs-backend-webgl":Fle,"tfjs-backend-wasm":Rle};var PI={};sh(PI,{AnchorPosition:()=>CI,DrawBox:()=>fp,DrawBoxOptions:()=>sg,DrawFaceLandmarks:()=>mg,DrawFaceLandmarksOptions:()=>fg,DrawTextField:()=>zs,DrawTextFieldOptions:()=>il,drawContour:()=>Os,drawDetections:()=>Gle,drawFaceExpressions:()=>Xle,drawFaceLandmarks:()=>Zle});function Os(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 fI={};sh(fI,{computeReshapedDimensions:()=>hI,getCenterPoint:()=>Ni,isDimensions:()=>ng,isEven:()=>tg,isFloat:()=>pI,isTensor:()=>Ti,isTensor1D:()=>Ole,isTensor2D:()=>dI,isTensor3D:()=>Ms,isTensor4D:()=>yr,isValidNumber:()=>Zr,isValidProbablitiy:()=>sl,range:()=>gs,round:()=>Ci});var yn=class{constructor(t,n){if(!Zr(t)||!Zr(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 yn(1/this.width,1/this.height)}};function Ti(e,t){return e instanceof Te&&e.shape.length===t}function Ole(e){return Ti(e,1)}function dI(e){return Ti(e,2)}function Ms(e){return Ti(e,3)}function yr(e){return Ti(e,4)}function pI(e){return e%1!==0}function tg(e){return e%2===0}function Ci(e,t=2){let n=10**t;return Math.floor(e*n)/n}function ng(e){return e&&e.width&&e.height}function hI({width:e,height:t},n){let r=n/Math.max(t,e);return new yn(Math.round(e*r),Math.round(t*r))}function Ni(e){return e.reduce((t,n)=>t.add(n),new Fe(0,0)).div(new Fe(e.length,e.length))}function gs(e,t,n){return Array(e).fill(0).map((r,s)=>t+s*n)}function Zr(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function sl(e){return Zr(e)&&e>=0&&e<=1}var Fe=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Fe(this.x+t.x,this.y+t.y)}sub(t){return new Fe(this.x-t.x,this.y-t.y)}mul(t){return new Fe(this.x*t.x,this.y*t.y)}div(t){return new Fe(this.x/t.x,this.y/t.y)}abs(){return new Fe(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Fe(Math.floor(this.x),Math.floor(this.y))}};var ot=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(Zr)}static assertIsValidBox(t,n,r=!1){if(!ot.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(Zr),a=[r.x,r.y,r.width,r.height].every(Zr);if(!a&&!s)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(r)}`);let[o,i,c,u]=a?[r.x,r.y,r.width,r.height]:[r.left,r.top,r.right-r.left,r.bottom-r.top];ot.assertIsValidBox({x:o,y:i,width:c,height:u},"Box.constructor",n),this._x=o,this._y=i,this._width=c,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Fe(this.left,this.top)}get topRight(){return new Fe(this.right,this.top)}get bottomLeft(){return new Fe(this.left,this.bottom)}get bottomRight(){return new Fe(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 ot({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 ot({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 r<s&&(t-=a/2,r+=a),s<r&&(n-=a/2,s+=a),new ot({x:t,y:n,width:r,height:s})}rescale(t){let n=ng(t)?t.width:t,r=ng(t)?t.height:t;return new ot({x:this.x*n,y:this.y*r,width:this.width*n,height:this.height*r})}pad(t,n){let[r,s,a,o]=[this.x-t/2,this.y-n/2,this.width+t,this.height+n];return new ot({x:r,y:s,width:a,height:o})}clipAtImageBorders(t,n){let{x:r,y:s,right:a,bottom:o}=this,i=Math.max(r,0),c=Math.max(s,0),u=a-i,l=o-c,p=Math.min(u,t-i),d=Math.min(l,n-c);return new ot({x:i,y:c,width:p,height:d}).floor()}shift(t,n){let{width:r,height:s}=this,a=this.x+t,o=this.y+n;return new ot({x:a,y:o,width:r,height:s})}padAtBorders(t,n){let r=this.width+1,s=this.height+1,a=1,o=1,i=r,c=s,u=this.left,l=this.top,p=this.right,d=this.bottom;return p>n&&(i=-p+n+r,p=n),d>t&&(c=-d+t+s,d=t),u<1&&(c=2-u,u=1),l<1&&(c=2-l,l=1),{dy:o,edy:c,dx:a,edx:i,y:l,ey:d,x:u,ex:p,w:r,h:s}}calibrate(t){return new ot({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 _i=class extends ot{constructor(t,n,r,s,a=!1){super({left:t,top:n,right:r,bottom:s},a)}};var Ls=class{constructor(t,n,r,s,a){this._imageDims=new yn(a.width,a.height),this._score=t,this._classScore=n,this._className=r,this._box=new ot(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 ot(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Ls(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var gt=class extends Ls{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 gt(r,s,a)}};function mI(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 gI(e){let t=e.map(i=>i.x),n=e.map(i=>i.y),r=t.reduce((i,c)=>c<i?c:i,1/0),s=n.reduce((i,c)=>c<i?c:i,1/0),a=t.reduce((i,c)=>i<c?c:i,0),o=n.reduce((i,c)=>i<c?c:i,0);return new _i(r,s,a,o)}function bI(e,t,n,r=!0){let s=t.map((o,i)=>({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,c=[];for(let u=0;u<i.length;u++){let l=i[u],p=e[o],d=e[l];c.push(mI(p,d,r))}s=s.filter((u,l)=>c[l]<=n)}return a}function Jr(e,t){return O(()=>{let[n,r,s]=t,a=bn([...e.shape.slice(0,3),1],n,"float32"),o=bn([...e.shape.slice(0,3),1],r,"float32"),i=bn([...e.shape.slice(0,3),1],s,"float32"),c=Je([a,o,i],3);return de(e,c)})}function yI(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,bn(h,0,"float32")},c=i(a),u=s-c.shape[o],p=[t&&u?i(u):null,e,c].filter(d=>!!d).map(d=>ce(d,"float32"));return Je(p,o)})}function Mle(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 pp(e){return 1/(1+Math.exp(-e))}function Lle(e){return Math.log(e/(1-e))}var Ei=class extends ot{constructor(t,n,r,s,a=!1){super({x:t,y:n,width:r,height:s},a)}};var zle=.5,Ble=.43,Wle=.45,ar=class{constructor(t,n,r=new Fe(0,0)){let{width:s,height:a}=n;this._imgDims=new yn(s,a),this._shift=r,this._positions=t.map(o=>o.mul(new Fe(s,a)).add(r))}get shift(){return new Fe(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 Fe(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 Fe(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let a=t instanceof gt?t.box.floor():new ot(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/Wle),c=Ni(t),u=Math.floor(Math.max(0,c.x-zle*i)),l=Math.floor(Math.max(0,c.y-Ble*i));return new Ei(u,l,Math.min(i,this.imageWidth+u),Math.min(i,this.imageHeight+l))}alignMinBbox(t){let n=gI(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var vI=class extends ar{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],Ni([t[3],t[4]])]}};var Ai=class extends ar{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(Ni)}};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?` (${Ci(this.distance)})`:""}`}};var ol=class extends ot{constructor(n,r){super(n);this._label=r}static assertIsValidLabeledBox(n,r){if(ot.assertIsValidBox(n,r),!Zr(n.label))throw new Error(`${r} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var bs=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(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 bs(t.label,n)}};var xI=class extends ol{constructor(n,r,s,a){super(n,r);this._score=s,this._classScore=a}static assertIsValidPredictedBox(n,r){if(ol.assertIsValidLabeledBox(n,r),!sl(n.score)||!sl(n.classScore))throw new Error(`${r} - expected properties score (${n.score}) and (${n.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function ys(e){return e.detection instanceof gt}function $i(e,t){return{...e,...{detection:t}}}function wI(){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 hp(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function rg(e){let t="";if(!e&&hp())try{e=Ys("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 II(){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=rg();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 kI(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}var sn;function Vle(){if(!sn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return sn}function SI(e){sn=e}function TI(){return kI()?SI(wI()):hp()?SI(II()):null}function Ule(e){if(sn||TI(),!sn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=sn.Canvas,Image:n=sn.Image}=e;sn.Canvas=t,sn.Image=n,sn.createCanvasElement=e.createCanvasElement||(()=>new t),sn.createImageElement=e.createImageElement||(()=>new n),sn.ImageData=e.ImageData||sn.ImageData,sn.Video=e.Video||sn.Video,sn.fetch=e.fetch||sn.fetch,sn.readFile=e.readFile||sn.readFile}var Qe={getEnv:Vle,setEnv:SI,initialize:TI,createBrowserEnv:wI,createFileSystem:rg,createNodejsEnv:II,monkeyPatch:Ule,isBrowser:kI,isNodejs:hp};TI();function Di(e){return!Qe.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Gn(e){let{Canvas:t,CanvasRenderingContext2D:n}=Qe.getEnv();if(e instanceof n)return e;let r=Di(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let s=r.getContext("2d");if(!s)throw new Error("resolveContext2d - canvas 2d context is null");return s}var CI=(s=>(s.TOP_LEFT="TOP_LEFT",s.TOP_RIGHT="TOP_RIGHT",s.BOTTOM_LEFT="BOTTOM_LEFT",s.BOTTOM_RIGHT="BOTTOM_RIGHT",s))(CI||{}),il=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}},zs=class{constructor(t,n,r={}){this.text=typeof t=="string"?[t]:t instanceof zs?t.text:t,this.anchor=n,this.options=new il(r)}measureWidth(t){let{padding:n}=this.options;return this.text.map(r=>t.measureText(r).width).reduce((r,s)=>r<s?s:r,0)+2*n}measureHeight(){let{fontSize:t,padding:n}=this.options;return this.text.length*t+2*n}getUpperLeft(t,n){let{anchorPosition:r}=this.options,s=r==="BOTTOM_RIGHT"||r==="TOP_RIGHT",a=r==="BOTTOM_LEFT"||r==="BOTTOM_RIGHT",o=this.measureWidth(t),i=this.measureHeight(),c=s?this.anchor.x-o:this.anchor.x,u=a?this.anchor.y-i:this.anchor.y;if(n){let{width:l,height:p}=n,d=Math.max(Math.min(c,l-o),0),h=Math.max(Math.min(u,p-i),0);return{x:d,y:h}}return{x:c,y:u}}draw(t){let n=Di(t),r=Gn(n),{backgroundColor:s,fontColor:a,fontSize:o,fontStyle:i,padding:c}=this.options;r.font=`${o}px ${i}`;let u=this.measureWidth(r),l=this.measureHeight();r.fillStyle=s;let p=this.getUpperLeft(r,n);r.fillRect(p.x,p.y,u,l),r.fillStyle=a,this.text.forEach((d,h)=>{let f=c+p.x,m=c+p.y+(h+1)*o;r.fillText(d,f,m)})}};var sg=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 il({...o,...a})}},fp=class{constructor(t,n={}){this.box=new ot(t),this.options=new sg(n)}draw(t){let n=Gn(t),{boxColor:r,lineWidth:s}=this.options,{x:a,y:o,width:i,height:c}=this.box;n.strokeStyle=r,n.lineWidth=s,n.strokeRect(a,o,i,c);let{label:u}=this.options;u&&new zs([u],{x:a-s/2,y:o},this.options.drawLabelOptions).draw(t)}};function Gle(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof gt?r.score:ys(r)?r.detection.score:void 0,a=r instanceof gt?r.box:ys(r)?r.detection.box:new ot(r),o=s?`${Ci(s)}`:void 0;new fp(a,{label:o}).draw(e)})}function mp(e){let{Image:t,Video:n}=Qe.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function NI(e){return new Promise((t,n)=>{(e instanceof Qe.getEnv().Canvas||mp(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 _I(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=Qe.getEnv().createImageElement();s.onload=()=>t(s),s.onerror=n,s.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function Fi(e){let{Image:t,Video:n}=Qe.getEnv();return e instanceof t?new yn(e.naturalWidth,e.naturalHeight):e instanceof n?new yn(e.videoWidth,e.videoHeight):new yn(e.width,e.height)}function Ri({width:e,height:t}){let{createCanvasElement:n}=Qe.getEnv(),r=n();return r.width=e,r.height=t,r}function gp(e,t){let{ImageData:n}=Qe.getEnv();if(!(e instanceof n)&&!mp(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:r,height:s}=t||Fi(e),a=Ri({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 EI(e,t){let n=t||Qe.getEnv().createCanvasElement(),[r,s,a]=e.shape.slice(yr(e)?1:0),o=O(()=>e.as3D(r,s,a).toInt());return await fi.toPixels(o,n),o.dispose(),n}function ag(e){let{Image:t,Canvas:n,Video:r}=Qe.getEnv();return e instanceof t||e instanceof n||e instanceof r}function AI(e,t,n=!1){let{Image:r,Canvas:s}=Qe.getEnv();if(!(e instanceof r||e instanceof s))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Ri({width:1,height:1});let a=Fi(e),o=t/Math.max(a.height,a.width),i=o*a.width,c=o*a.height,u=Ri({width:t,height:t}),l=e instanceof s?e:gp(e),p=Math.abs(i-c)/2,d=n&&i<c?p:0,h=n&&c<i?p:0;return l.width>0&&l.height>0&&Gn(u).drawImage(l,d,h,i,c),u}var vs=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(Ms(r)){this._imageTensors[s]=r,this._inputDimensions[s]=r.shape;return}if(yr(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 Qe.getEnv().Canvas?r:gp(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 gs(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 hI({width:n,height:r},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let r=gs(this.batchSize,0,1).map(a=>{let o=this.getInput(a);if(o instanceof Te){let i=yr(o)?o:Zt(o);return i=yI(i,n),(i.shape[1]!==t||i.shape[2]!==t)&&(i=Br.resizeBilinear(i,[t,t],!1,!1)),i.as3D(t,t,3)}if(o instanceof Qe.getEnv().Canvas)return fi.fromPixels(AI(o,t,n));throw new Error(`toBatchTensor - at batchIdx ${a}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${o}`)});return Ft(r.map(a=>ce(a,"float32"))).as4D(this.batchSize,t,t,3)})}};async function bt(e){if(e instanceof vs)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(Di);return r.forEach((s,a)=>{if(!ag(s)&&!Ms(s)&&!yr(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(yr(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=>ag(s)&&NI(s))),new vs(r,Array.isArray(e))}async function cl(e,t){let{Canvas:n}=Qe.getEnv(),r=e;if(!(e instanceof n)){let o=await bt(e);if(o.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let i=o.getInput(0);r=i instanceof n?i:await EI(i)}let s=Gn(r);return t.map(o=>o instanceof gt?o.forSize(r.width,r.height).box.floor():o).map(o=>o.clipAtImageBorders(r.width,r.height)).map(({x:o,y:i,width:c,height:u})=>{let l=Ri({width:c,height:u});return c>0&&u>0&&Gn(l).putImageData(s.getImageData(o,i,c,u),0,0),l})}async function ul(e,t){if(!Ms(e)&&!yr(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(yr(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{let[n,r,s]=e.shape.slice(yr(e)?1:0);return t.map(i=>i instanceof gt?i.forSize(r,n).box:i).map(i=>i.clipAtImageBorders(r,n)).filter(i=>i.width>0&&i.height>0).map(({x:i,y:c,width:u,height:l})=>gi(e.as3D(n,r,s),[c,i,0],[l,u,s]))})}async function Bs(e,t){let{fetch:n}=Qe.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 Hle(e){let t=await Bs(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 _I(n)}async function $I(e){return(await Bs(e)).json()}async function qle(e){return new Float32Array(await(await Bs(e)).arrayBuffer())}function jA(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let r=Qe.getEnv().createVideoElement();r.oncanplay=()=>t(r),r.onerror=n,r.playsInline=!0,r.muted=!0,r.src=URL.createObjectURL(e),r.play()})}async function jle(e){let t=await Bs(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 jA(n)}function og(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 DI(e,t){let{manifestUri:n,modelBaseUri:r}=og(e,t),s=await $I(n);return Ut.loadWeights(s,r)}function Kle(e,t,n=!1){let{width:r,height:s}=n?Fi(t):t;return e.width=r,e.height=s,{width:r,height:s}}var an=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 ia)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof ia))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let r=Cn(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 DI(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}=Qe.getEnv(),{manifestUri:r,modelBaseUri:s}=og(t,this.getDefaultModelName()),a=u=>Promise.all(u.map(l=>n(l).then(p=>p.buffer))),o=Ut.weightsLoaderFactory(a),i=JSON.parse((await n(r)).toString()),c=await o(i,s);this.loadFromWeightMap(c)}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 Te))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=Ca(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=Y(r,t.bias),r})}function ig(e,t,n=!1){return O(()=>{let r=Xe(n?Y(Dt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Hn(e,t.conv0,[2,2])),s=Hn(r,t.conv1,[1,1]),a=Xe(Y(r,s)),o=Hn(a,t.conv2,[1,1]);return Xe(Y(r,Y(s,o)))})}function bp(e,t,n=!1,r=!0){return O(()=>{let s=Xe(n?Y(Dt(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=Xe(Y(s,a)),i=Hn(o,t.conv2,[1,1]),c=Xe(Y(s,Y(a,i))),u=Hn(c,t.conv3,[1,1]);return Xe(Y(s,Y(a,Y(i,u))))})}function Pi(e,t,n="same",r=!1){return O(()=>{let s=Y(Dt(e,t.filters,[1,1],n),t.bias);return r?Xe(s):s})}function Fn(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function ll(e,t){return(n,r,s,a)=>{let o=Rr(e(n*r*s*s),[s,s,n,r]),i=Ke(e(r));return t.push({paramPath:`${a}/filters`},{paramPath:`${a}/bias`}),{filters:o,bias:i}}}function cg(e,t){return(n,r,s)=>{let a=$r(e(n*r),[n,r]),o=Ke(e(r));return t.push({paramPath:`${s}/weights`},{paramPath:`${s}/bias`}),{weights:a,bias:o}}}var yp=class{constructor(t,n,r){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=r}};function dl(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=Ke(e(r));return t.push({paramPath:`${s}/depthwise_filter`},{paramPath:`${s}/pointwise_filter`},{paramPath:`${s}/bias`}),new yp(a,o,i)}}function pl(e){return t=>{let n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),s=e(`${t}/bias`,1);return new yp(n,r,s)}}function or(e,t){return(n,r,s)=>{let a=e[n];if(!Ti(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 Rn(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 ug(e,t){let n=ll(e,t),r=dl(e,t);function s(o,i,c,u=!1){let l=u?n(o,i,3,`${c}/conv0`):r(o,i,`${c}/conv0`),p=r(i,i,`${c}/conv1`),d=r(i,i,`${c}/conv2`);return{conv0:l,conv1:p,conv2:d}}function a(o,i,c,u=!1){let{conv0:l,conv1:p,conv2:d}=s(o,i,c,u),h=r(i,i,`${c}/conv3`);return{conv0:l,conv1:p,conv2:d,conv3:h}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:a}}function KA(e){let t=[],{extractWeights:n,getRemainingWeights:r}=Rn(e),{extractDenseBlock4Params:s}=ug(n,t),a=s(3,32,"dense0",!0),o=s(32,64,"dense1"),i=s(64,128,"dense2"),c=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:c}}}function lg(e){return t=>{let n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function dg(e,t){let n=or(e,t),r=lg(n),s=pl(n);function a(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),p=s(`${i}/conv2`);return{conv0:u,conv1:l,conv2:p}}function o(i,c=!1){let u=c?r(`${i}/conv0`):s(`${i}/conv0`),l=s(`${i}/conv1`),p=s(`${i}/conv2`),d=s(`${i}/conv3`);return{conv0:u,conv1:l,conv2:p,conv3:d}}return{extractDenseBlock3Params:a,extractDenseBlock4Params:o}}function XA(e){let t=[],{extractDenseBlock4Params:n}=dg(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return Fn(e,t),{params:r,paramMappings:t}}var hl=class extends an{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=Jr(r,[122.782,117.001,104.298]).div(255),o=bp(a,n.dense0,!0);return o=bp(o,n.dense1),o=bp(o,n.dense2),o=bp(o,n.dense3),o=mr(o,[7,7],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await bt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return XA(t)}extractParams(t){return KA(t)}};function vp(e,t){return O(()=>Y(De(e,t.weights),t.bias))}function YA(e,t,n){let r=[],{extractWeights:s,getRemainingWeights:a}=Rn(e),i=cg(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 ZA(e){let t=[],n=or(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 Fn(e,t),{params:s,paramMappings:t}}function pg(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 fl=class extends an{constructor(n,r){super(n);this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return O(()=>{let s=n instanceof vs?this.faceFeatureExtractor.forwardInput(n):n;return vp(s.as2D(s.shape[0],-1),r.fc)})}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:r,paramMappings:s}=this.extractClassifierParams(n);this._params=r,this._paramMappings=s}extractClassifierParams(n){return YA(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:r,classifierMap:s}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(r),ZA(s)}extractParams(n){let r=this.getClassifierChannelsIn(),s=this.getClassifierChannelsOut(),a=s*r+s,o=n.slice(0,n.length-a),i=n.slice(n.length-a);return this.faceFeatureExtractor.extractWeights(o),this.extractClassifierParams(i)}};var FI=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Ws=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}`);FI.forEach((n,r)=>{this[n]=t[r]})}asSortedArray(){return FI.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var xp=class extends fl{constructor(t=new hl){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Xr(this.runNet(t)))}async forward(t){return this.forwardInput(await bt(t))}async predictExpressions(t){let n=await bt(t),r=await this.forwardInput(n),s=await Promise.all(lt(r).map(async o=>{let i=o.dataSync();return o.dispose(),i}));r.dispose();let a=s.map(o=>new Ws(o));return n.isBatchInput?a:a[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function RI(e){return e.expressions instanceof Ws}function hg(e,t){return{...e,...{expressions:t}}}function Xle(e,t,n=.1,r){(Array.isArray(t)?t:[t]).forEach(a=>{let o=a instanceof Ws?a:RI(a)?a.expressions:void 0;if(!o)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let c=o.asSortedArray().filter(p=>p.probability>n),u=ys(a)?a.detection.box.bottomLeft:r||new Fe(0,0);new zs(c.map(p=>`${p.expression} (${Ci(p.probability)})`),u).draw(e)})}function Oi(e){return ys(e)&&e.landmarks instanceof ar&&e.unshiftedLandmarks instanceof ar&&e.alignedRect instanceof gt}function Yle(e){let t=c=>c*180/Math.PI,n=(c,u)=>Math.sqrt((c._x-u._x)**2+(c._y-u._y)**2),r={roll:void 0,pitch:void 0,yaw:void 0},s=(c,u,l)=>{let p=Math.floor(c._x-u._x),d=Math.floor(u._x-l._x);return p-d},a=(c,u)=>{let l=Math.hypot(u._x-c._x,u._y-c._y),p=u._y-c._y,d=Math.asin(p/l),h=t(d),f=Math.floor(90-h),m=u._x-c._x<0?-1:1;return f*m},o=(c,u,l)=>{let p=n(c,l),d={_x:(c._x+l._x)/2,_y:(c._y+l._y)/2},h=n(u,d),f=Math.atan(h/p),m=Math.floor(t(f)),g=d._y-u._y<0?-1:1;return m*g};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 ml(e,t){let{box:n}=e.detection,r=t.shiftBy(n.x,n.y),s=r.align(),{imageDims:a}=e.detection,o=new gt(e.detection.score,s.rescale(a.reverse()),a),i=Yle(t);return{...e,...{landmarks:r,unshiftedLandmarks:t,alignedRect:o,angle:i}}}var fg=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)"}},mg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new fg(n)}draw(t){let n=Gn(t),{drawLines:r,drawPoints:s,lineWidth:a,lineColor:o,pointSize:i,pointColor:c}=this.options;if(r&&this.faceLandmarks instanceof Ai&&(n.strokeStyle=o,n.lineWidth=a,Os(n,this.faceLandmarks.getJawOutline()),Os(n,this.faceLandmarks.getLeftEyeBrow()),Os(n,this.faceLandmarks.getRightEyeBrow()),Os(n,this.faceLandmarks.getNose()),Os(n,this.faceLandmarks.getLeftEye(),!0),Os(n,this.faceLandmarks.getRightEye(),!0),Os(n,this.faceLandmarks.getMouth(),!0)),s){n.strokeStyle=c,n.fillStyle=c;let u=l=>{n.beginPath(),n.arc(l.x,l.y,i,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Zle(e,t){(Array.isArray(t)?t:[t]).forEach(r=>{let s=r instanceof ar?r:Oi(r)?r.landmarks:void 0;if(!s)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new mg(s).draw(e)})}var JA="1.7.6";function ede(e,t){let n=ll(e,t),r=dl(e,t);function s(o,i,c){let u=r(o,i,`${c}/separable_conv0`),l=r(i,i,`${c}/separable_conv1`),p=n(o,i,1,`${c}/expansion_conv`);return{separable_conv0:u,separable_conv1:l,expansion_conv:p}}function a(o,i){let c=r(o,o,`${i}/separable_conv0`),u=r(o,o,`${i}/separable_conv1`),l=r(o,o,`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:a}}function QA(e,t){let n=[],{extractWeights:r,getRemainingWeights:s}=Rn(e),{extractConvParams:a,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:c}=ede(r,n),u=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:u,reduction_block_0:l,reduction_block_1:p},h={};gs(t,0,1).forEach(b=>{h[`main_block_${b}`]=c(128,`middle_flow/main_block_${b}`)});let f=i(128,256,"exit_flow/reduction_block"),m=o(256,512,"exit_flow/separable_conv"),g={reduction_block:f,separable_conv:m};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:g}}}function tde(e,t){let n=or(e,t),r=lg(n),s=pl(n);function a(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=r(`${i}/expansion_conv`);return{separable_conv0:c,separable_conv1:u,expansion_conv:l}}function o(i){let c=s(`${i}/separable_conv0`),u=s(`${i}/separable_conv1`),l=s(`${i}/separable_conv2`);return{separable_conv0:c,separable_conv1:u,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}}function e$(e,t){let n=[],{extractConvParams:r,extractSeparableConvParams:s,extractReductionBlockParams:a,extractMainBlockParams:o}=tde(e,n),i=r("entry_flow/conv_in"),c=a("entry_flow/reduction_block_0"),u=a("entry_flow/reduction_block_1"),l={conv_in:i,reduction_block_0:c,reduction_block_1:u},p={};gs(t,0,1).forEach(m=>{p[`main_block_${m}`]=o(`middle_flow/main_block_${m}`)});let d=a("exit_flow/reduction_block"),h=s("exit_flow/separable_conv"),f={reduction_block:d,separable_conv:h};return Fn(e,n),{params:{entry_flow:l,middle_flow:p,exit_flow:f},paramMappings:n}}function t$(e,t,n){return Y(Dt(e,t.filters,n,"same"),t.bias)}function OI(e,t,n=!0){let r=n?Xe(e):e;return r=Hn(r,t.separable_conv0,[1,1]),r=Hn(Xe(r),t.separable_conv1,[1,1]),r=Rt(r,[3,3],[2,2],"same"),r=Y(r,t$(e,t.expansion_conv,[2,2])),r}function nde(e,t){let n=Hn(Xe(e),t.separable_conv0,[1,1]);return n=Hn(Xe(n),t.separable_conv1,[1,1]),n=Hn(Xe(n),t.separable_conv2,[1,1]),n=Y(n,e),n}var gg=class extends an{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:r}=this;if(!r)throw new Error("TinyXception - load model before inference");return O(()=>{let s=ce(n.toBatchTensor(112,!0),"float32"),o=Jr(s,[122.782,117.001,104.298]).div(255),i=Xe(t$(o,r.entry_flow.conv_in,[2,2]));return i=OI(i,r.entry_flow.reduction_block_0,!1),i=OI(i,r.entry_flow.reduction_block_1),gs(this._numMainBlocks,0,1).forEach(c=>{i=nde(i,r.middle_flow[`main_block_${c}`])}),i=OI(i,r.exit_flow.reduction_block),i=Xe(Hn(i,r.exit_flow.separable_conv,[1,1])),i})}async forward(n){return this.forwardInput(await bt(n))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(n){return e$(n,this._numMainBlocks)}extractParams(n){return QA(n,this._numMainBlocks)}};function n$(e){let t=[],{extractWeights:n,getRemainingWeights:r}=Rn(e),s=cg(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 r$(e){let t=[],n=or(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 Fn(e,t),{params:s,paramMappings:t}}var bg=(n=>(n.FEMALE="female",n.MALE="male",n))(bg||{});var wp=class extends an{constructor(n=new gg(2)){super("AgeGenderNet");this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:r}=this;if(!r)throw new Error(`${this._name} - load model before inference`);return O(()=>{let s=n instanceof vs?this.faceFeatureExtractor.forwardInput(n):n,a=mr(s,[7,7],[2,2],"valid").as2D(s.shape[0],-1),o=vp(a,r.fc.age).as1D(),i=vp(a,r.fc.gender);return{age:o,gender:i}})}forwardInput(n){return O(()=>{let{age:r,gender:s}=this.runNet(n);return{age:r,gender:Xr(s)}})}async forward(n){return this.forwardInput(await bt(n))}async predictAgeAndGender(n){let r=await bt(n),s=await this.forwardInput(r),a=lt(s.age),o=lt(s.gender),i=a.map((u,l)=>({ageTensor:u,genderTensor:o[l]})),c=await Promise.all(i.map(async({ageTensor:u,genderTensor:l})=>{let p=u.dataSync()[0],d=l.dataSync()[0],h=d>.5,f=h?"male":"female",m=h?d:1-d;return u.dispose(),l.dispose(),{age:p,gender:f,genderProbability:m}}));return s.age.dispose(),s.gender.dispose(),r.isBatchInput?c:c[0]}getDefaultModelName(){return"age_gender_model"}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:r,paramMappings:s}=this.extractClassifierParams(n);this._params=r,this._paramMappings=s}extractClassifierParams(n){return n$(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:r,classifierMap:s}=pg(n);return this.faceFeatureExtractor.loadFromWeightMap(r),r$(s)}extractParams(n){let s=n.slice(0,n.length-1539),a=n.slice(n.length-1539);return this.faceFeatureExtractor.extractWeights(s),this.extractClassifierParams(a)}};var gl=class extends fl{postProcess(t,n,r){let s=r.map(({width:o,height:i})=>{let c=n/Math.max(i,o);return{width:o*c,height:i*c}}),a=s.length;return O(()=>{let o=(p,d)=>Ft([bn([68],p,"float32"),bn([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},c=p=>i(p,(d,h)=>d<h),u=p=>i(p,(d,h)=>h<d);return t.mul(bn([a,136],n,"float32")).sub(Ft(Array.from(Array(a),(p,d)=>o(c(d),u(d))))).div(Ft(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 bt(t))}async detectLandmarks(t){let n=await bt(t),r=O(()=>lt(this.forwardInput(n))),s=await Promise.all(r.map(async(a,o)=>{let i=Array.from(a.dataSync()),c=i.filter((l,p)=>tg(p)),u=i.filter((l,p)=>!tg(p));return new Ai(Array(68).fill(0).map((l,p)=>new Fe(c[p],u[p])),{height:n.getInputHeight(o),width:n.getInputWidth(o)})}));return r.forEach(a=>a.dispose()),n.isBatchInput?s:s[0]}getClassifierChannelsOut(){return 136}};var Mi=class extends gl{constructor(t=new hl){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function s$(e){let t=[],{extractDenseBlock3Params:n}=dg(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return Fn(e,t),{params:r,paramMappings:t}}function a$(e){let t=[],{extractWeights:n,getRemainingWeights:r}=Rn(e),{extractDenseBlock3Params:s}=ug(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 yg=class extends an{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let r=ce(t.toBatchTensor(112,!0),"float32"),a=Jr(r,[122.782,117.001,104.298]).div(255),o=ig(a,n.dense0,!0);return o=ig(o,n.dense1),o=ig(o,n.dense2),o=mr(o,[14,14],[2,2],"valid"),o})}async forward(t){return this.forwardInput(await bt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return s$(t)}extractParams(t){return a$(t)}};var Ip=class extends gl{constructor(t=new yg){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var MI=class extends Mi{};function o$(e,t){return Y(B(e,t.weights),t.biases)}function LI(e,t,n,r,s="same"){let{filters:a,bias:o}=t.conv,i=Dt(e,a,n,s);return i=Y(i,o),i=o$(i,t.scale),r?Xe(i):i}function i$(e,t){return LI(e,t,[1,1],!0)}function zI(e,t){return LI(e,t,[1,1],!1)}function vg(e,t){return LI(e,t,[2,2],!0,"valid")}function rde(e,t){function n(i,c,u){let l=e(i),p=l.length/(c*u*u);if(pI(p))throw new Error(`depth has to be an integer: ${p}, weights.length: ${l.length}, numFilters: ${c}, filterSize: ${u}`);return O(()=>Ee(Rr(l,[c,p,u,u]),[2,3,1,0]))}function r(i,c,u,l){let p=n(i,c,u),d=Ke(e(c));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:p,bias:d}}function s(i,c){let u=Ke(e(i)),l=Ke(e(i));return t.push({paramPath:`${c}/weights`},{paramPath:`${c}/biases`}),{weights:u,biases:l}}function a(i,c,u,l){let p=r(i,c,u,`${l}/conv`),d=s(c,`${l}/scale`);return{conv:p,scale:d}}function o(i,c,u,l,p=!1){let d=a((p?.5:1)*i,c,u,`${l}/conv1`),h=a(i,c,u,`${l}/conv2`);return{conv1:d,conv2:h}}return{extractConvLayerParams:a,extractResidualLayerParams:o}}function c$(e){let{extractWeights:t,getRemainingWeights:n}=Rn(e),r=[],{extractConvLayerParams:s,extractResidualLayerParams:a}=rde(t,r),o=s(4704,32,7,"conv32_down"),i=a(9216,32,3,"conv32_1"),c=a(9216,32,3,"conv32_2"),u=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),m=a(147456,128,3,"conv128_1"),g=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(()=>Ee($r(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:c,conv32_3:u,conv64_down:l,conv64_1:p,conv64_2:d,conv64_3:h,conv128_down:f,conv128_1:m,conv128_2:g,conv256_down:b,conv256_1:y,conv256_2:v,conv256_down_out:x,fc:k},paramMappings:r}}function sde(e,t){let n=or(e,t);function r(o){let i=n(`${o}/scale/weights`,1),c=n(`${o}/scale/biases`,1);return{weights:i,biases:c}}function s(o){let i=n(`${o}/conv/filters`,4),c=n(`${o}/conv/bias`,1),u=r(o);return{conv:{filters:i,bias:c},scale:u}}function a(o){return{conv1:s(`${o}/conv1`),conv2:s(`${o}/conv2`)}}return{extractConvLayerParams:s,extractResidualLayerParams:a}}function u$(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=sde(e,t),s=n("conv32_down"),a=r("conv32_1"),o=r("conv32_2"),i=r("conv32_3"),c=r("conv64_down"),u=r("conv64_1"),l=r("conv64_2"),p=r("conv64_3"),d=r("conv128_down"),h=r("conv128_1"),f=r("conv128_2"),m=r("conv256_down"),g=r("conv256_1"),b=r("conv256_2"),y=r("conv256_down_out"),{fc:v}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!dI(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:c,conv64_1:u,conv64_2:l,conv64_3:p,conv128_down:d,conv128_1:h,conv128_2:f,conv256_down:m,conv256_1:g,conv256_2:b,conv256_down_out:y,fc:v};return Fn(e,t),{params:x,paramMappings:t}}function Qr(e,t){let n=i$(e,t.conv1);return n=zI(n,t.conv2),n=Y(n,e),n=Xe(n),n}function kp(e,t){let n=vg(e,t.conv1);n=zI(n,t.conv2);let r=mr(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 c=kt(i);n=Je([n,c],1);let u=[...n.shape];u[2]=1;let l=kt(u);n=Je([n,l],2)}return r=a?Je([r,s],3):r,n=Y(r,n),n=Xe(n),n}var Li=class extends an{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let r=ce(t.toBatchTensor(150,!0),"float32"),a=Jr(r,[122.782,117.001,104.298]).div(255),o=vg(a,n.conv32_down);o=Rt(o,3,2,"valid"),o=Qr(o,n.conv32_1),o=Qr(o,n.conv32_2),o=Qr(o,n.conv32_3),o=kp(o,n.conv64_down),o=Qr(o,n.conv64_1),o=Qr(o,n.conv64_2),o=Qr(o,n.conv64_3),o=kp(o,n.conv128_down),o=Qr(o,n.conv128_1),o=Qr(o,n.conv128_2),o=kp(o,n.conv256_down),o=Qr(o,n.conv256_1),o=Qr(o,n.conv256_2),o=kp(o,n.conv256_down_out);let i=o.mean([1,2]);return De(i,n.fc)})}async forward(t){return this.forwardInput(await bt(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 bt(t),r=O(()=>lt(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 u$(t)}extractParams(t){return c$(t)}};function ade(e){let t=new Li;return t.extractWeights(e),t}function xg(e,t){return{...e,...{descriptor:t}}}function ode(e){return typeof e.age=="number"}function wg(e,t){return{...e,...{age:t}}}function ide(e){return(e.gender==="male"||e.gender==="female")&&sl(e.genderProbability)}function Ig(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function cde(e,t){function n(c,u){let l=Rr(e(9*c),[3,3,c,1]),p=Ke(e(c)),d=Ke(e(c)),h=Ke(e(c)),f=Ke(e(c));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:l,batch_norm_scale:p,batch_norm_offset:d,batch_norm_mean:h,batch_norm_variance:f}}function r(c,u,l,p,d){let h=Rr(e(c*u*l*l),[l,l,c,u]),f=Ke(e(u));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/${d?"batch_norm_offset":"bias"}`}),{filters:h,bias:f}}function s(c,u,l,p){let{filters:d,bias:h}=r(c,u,l,p,!0);return{filters:d,batch_norm_offset:h}}function a(c,u,l){let p=n(c,`${l}/depthwise_conv`),d=s(c,u,1,`${l}/pointwise_conv`);return{depthwise_conv:p,pointwise_conv:d}}function o(){let c=s(3,32,3,"mobilenetv1/conv_0"),u=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"),m=a(512,512,"mobilenetv1/conv_7"),g=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:c,conv_1:u,conv_2:l,conv_3:p,conv_4:d,conv_5:h,conv_6:f,conv_7:m,conv_8:g,conv_9:b,conv_10:y,conv_11:v,conv_12:x,conv_13:k}}function i(){let c=s(1024,256,1,"prediction_layer/conv_0"),u=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"),m=s(64,128,3,"prediction_layer/conv_7"),g=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"),C=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"),A=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:c,conv_1:u,conv_2:l,conv_3:p,conv_4:d,conv_5:h,conv_6:f,conv_7:m,box_predictor_0:{box_encoding_predictor:g,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:C},box_predictor_4:{box_encoding_predictor:E,class_predictor:$},box_predictor_5:{box_encoding_predictor:F,class_predictor:A}}}return{extractMobilenetV1Params:o,extractPredictionLayerParams:i}}function l$(e){let t=[],{extractWeights:n,getRemainingWeights:r}=Rn(e),{extractMobilenetV1Params:s,extractPredictionLayerParams:a}=cde(n,t),o=s(),i=a(),u={extra_dim:Rd(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:u},paramMappings:t}}function ude(e,t){let n=or(e,t);function r(u,l,p){let d=n(`${u}/Conv2d_${l}_pointwise/weights`,4,`${p}/filters`),h=n(`${u}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${p}/batch_norm_offset`);return{filters:d,batch_norm_offset:h}}function s(u){let l=`mobilenetv1/conv_${u}`,p=`MobilenetV1/Conv2d_${u}_depthwise`,d=`${l}/depthwise_conv`,h=`${l}/pointwise_conv`,f=n(`${p}/depthwise_weights`,4,`${d}/filters`),m=n(`${p}/BatchNorm/gamma`,1,`${d}/batch_norm_scale`),g=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:m,batch_norm_offset:g,batch_norm_mean:b,batch_norm_variance:y},pointwise_conv:r("MobilenetV1",u,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(u,l){let p=n(`${u}/weights`,4,`${l}/filters`),d=n(`${u}/biases`,1,`${l}/bias`);return{filters:p,bias:d}}function i(u){let l=o(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),p=o(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:l,class_predictor:p}}function c(){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:c}}function d$(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=ude(e,t),s=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Ms(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 Fn(e,t),{params:a,paramMappings:t}}function Mr(e,t,n){return O(()=>{let r=Dt(e,t.filters,n,"same");return r=Y(r,t.batch_norm_offset),en(r,0,6)})}var lde=.0010000000474974513;function dde(e,t,n){return O(()=>{let r=Sa(e,t.filters,n,"same");return r=ka(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,lde),en(r,0,6)})}function pde(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function p$(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,c=pde(i);r=dde(r,a.depthwise_conv,c),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 hde(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]),c=Math.min(r[n][0],r[n][2]),u=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-c)*(p-u);if(d<=0||h<=0)return 0;let f=Math.max(s,c),m=Math.max(a,u),g=Math.min(o,l),b=Math.min(i,p),y=Math.max(g-f,0)*Math.max(b-m,0);return y/(d+h-y)}function h$(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),c=l=>l<=r?1:0,u=[];return i.forEach(l=>{if(u.length>=o)return;let p=l.score;for(let d=u.length-1;d>=0;--d){let h=hde(e,l.boxIndex,u[d]);if(h!==0&&(l.score*=c(h),l.score<=s))break}p===l.score&&u.push(l.boxIndex)}),u}function fde(e){let t=lt(Ee(e,[1,0])),n=[de(t[2],t[0]),de(t[3],t[1])],r=[Y(t[0],fe(n[0],2)),Y(t[1],fe(n[1],2))];return{sizes:n,centers:r}}function mde(e,t){let{sizes:n,centers:r}=fde(e),s=lt(Ee(t,[1,0])),a=fe(B(gn(fe(s[2],5)),n[0]),2),o=Y(B(fe(s[0],10),n[0]),r[0]),i=fe(B(gn(fe(s[3],5)),n[1]),2),c=Y(B(fe(s[1],10),n[1]),r[1]);return Ee(Ft([de(o,a),de(c,i),Y(o,a),Y(c,i)]),[1,0])}function f$(e,t,n){return O(()=>{let r=e.shape[0],s=mde(W(Ln(n.extra_dim,[r,1,1]),[-1,4]),W(e,[-1,4]));s=W(s,[r,s.shape[0]/r,4]);let a=dr(We(t,[0,0,1],[-1,-1,-1])),o=We(a,[0,0,0],[-1,-1,1]);o=W(o,[r,o.shape[1]]);let i=lt(s),c=lt(o);return{boxes:i,scores:c}})}function zi(e,t){return O(()=>{let n=e.shape[0],r=W(Pi(e,t.box_encoding_predictor),[n,-1,1,4]),s=W(Pi(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:s}})}function m$(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]),c=Mr(i,n.conv_5,[2,2]),u=Mr(c,n.conv_6,[1,1]),l=Mr(u,n.conv_7,[2,2]),p=zi(t,n.box_predictor_0),d=zi(e,n.box_predictor_1),h=zi(s,n.box_predictor_2),f=zi(o,n.box_predictor_3),m=zi(c,n.box_predictor_4),g=zi(l,n.box_predictor_5),b=Je([p.boxPredictionEncoding,d.boxPredictionEncoding,h.boxPredictionEncoding,f.boxPredictionEncoding,m.boxPredictionEncoding,g.boxPredictionEncoding],1),y=Je([p.classPrediction,d.classPrediction,h.classPrediction,f.classPrediction,m.classPrediction,g.classPrediction],1);return{boxPredictions:b,classPredictions:y}})}var vr=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 $a=class extends an{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let r=ce(t.toBatchTensor(512,!1),"float32"),s=de(fe(r,127.5),1),a=p$(s,n.mobilenetv1),{boxPredictions:o,classPredictions:i}=m$(a.out,a.conv11,n.prediction_layer);return f$(o,i,n.output_layer)})}async forward(t){return this.forwardInput(await bt(t))}async locateFaces(t,n={}){let{maxResults:r,minConfidence:s}=new vr(n),a=await bt(t),{boxes:o,scores:i}=this.forwardInput(a),c=o[0],u=i[0];for(let v=1;v<o.length;v++)o[v].dispose(),i[v].dispose();let l=Array.from(u.dataSync()),d=h$(c,l,r,.5,s),h=a.getReshapedInputDimensions(0),f=a.inputSize,m=f/h.width,g=f/h.height,b=c.arraySync(),y=d.map(v=>{let[x,k]=[Math.max(0,b[v][0]),Math.min(1,b[v][2])].map(E=>E*g),[S,C]=[Math.max(0,b[v][1]),Math.min(1,b[v][3])].map(E=>E*m);return new gt(l[v],new Ei(S,x,C-S,k-x),{height:a.getInputHeight(0),width:a.getInputWidth(0)})});return c.dispose(),u.dispose(),y}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return d$(t)}extractParams(t){return l$(t)}};function g$(e){let t=new $a;return t.extractWeights(e),t}function gde(e){return g$(e)}var BI=class extends $a{};var b$=.4,y$=[new Fe(.738768,.874946),new Fe(2.42204,2.65704),new Fe(4.30971,7.04493),new Fe(10.246,4.59428),new Fe(12.6868,11.8741)],v$=[new Fe(1.603231,2.094468),new Fe(6.041143,7.080126),new Fe(2.882459,3.518061),new Fe(4.266906,5.178857),new Fe(9.041765,10.66308)],x$=[117.001,114.697,97.404],w$="tiny_yolov2_model",I$="tiny_yolov2_separable_conv_model";var kg=e=>typeof e=="number";function WI(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(!kg(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=>kg(t.x)&&kg(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(kg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function bl(e){return O(()=>{let t=B(e,xe(.10000000149011612));return Y(Xe(de(e,t)),t)})}function Vs(e,t){return O(()=>{let n=gr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Dt(n,t.conv.filters,[1,1],"valid"),n=de(n,t.bn.sub),n=B(n,t.bn.truediv),n=Y(n,t.conv.bias),bl(n)})}function Us(e,t){return O(()=>{let n=gr(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Ca(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=Y(n,t.bias),bl(n)})}function bde(e,t){let n=ll(e,t);function r(o,i){let c=Ke(e(o)),u=Ke(e(o));return t.push({paramPath:`${i}/sub`},{paramPath:`${i}/truediv`}),{sub:c,truediv:u}}function s(o,i,c){let u=n(o,i,3,`${c}/conv`),l=r(i,`${c}/bn`);return{conv:u,bn:l}}let a=dl(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}}function k$(e,t,n,r){let{extractWeights:s,getRemainingWeights:a}=Rn(e),o=[],{extractConvParams:i,extractConvWithBatchNormParams:c,extractSeparableConvParams:u}=bde(s,o),l;if(t.withSeparableConvs){let[p,d,h,f,m,g,b,y,v]=r,x=t.isFirstLayerConv2d?i(p,d,3,"conv0"):u(p,d,"conv0"),k=u(d,h,"conv1"),S=u(h,f,"conv2"),C=u(f,m,"conv3"),E=u(m,g,"conv4"),$=u(g,b,"conv5"),F=y?u(b,y,"conv6"):void 0,A=v?u(y,v,"conv7"):void 0,R=i(v||y||b,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:S,conv3:C,conv4:E,conv5:$,conv6:F,conv7:A,conv8:R}}else{let[p,d,h,f,m,g,b,y,v]=r,x=c(p,d,"conv0"),k=c(d,h,"conv1"),S=c(h,f,"conv2"),C=c(f,m,"conv3"),E=c(m,g,"conv4"),$=c(g,b,"conv5"),F=c(b,y,"conv6"),A=c(y,v,"conv7"),R=i(v,5*n,1,"conv8");l={conv0:x,conv1:k,conv2:S,conv3:C,conv4:E,conv5:$,conv6:F,conv7:A,conv8:R}}if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:l,paramMappings:o}}function yde(e,t){let n=or(e,t);function r(i){let c=n(`${i}/sub`,1),u=n(`${i}/truediv`,1);return{sub:c,truediv:u}}function s(i){let c=n(`${i}/filters`,4),u=n(`${i}/bias`,1);return{filters:c,bias:u}}function a(i){let c=s(`${i}/conv`),u=r(`${i}/bn`);return{conv:c,bn:u}}let o=pl(n);return{extractConvParams:s,extractConvWithBatchNormParams:a,extractSeparableConvParams:o}}function S$(e,t){let n=[],{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:a}=yde(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 Fn(e,n),{params:o,paramMappings:n}}var es=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 VI=class extends an{constructor(n){super("TinyYolov2");WI(n),this._config=n}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(n,r){let s=Vs(n,r.conv0);return s=Rt(s,[2,2],[2,2],"same"),s=Vs(s,r.conv1),s=Rt(s,[2,2],[2,2],"same"),s=Vs(s,r.conv2),s=Rt(s,[2,2],[2,2],"same"),s=Vs(s,r.conv3),s=Rt(s,[2,2],[2,2],"same"),s=Vs(s,r.conv4),s=Rt(s,[2,2],[2,2],"same"),s=Vs(s,r.conv5),s=Rt(s,[2,2],[1,1],"same"),s=Vs(s,r.conv6),s=Vs(s,r.conv7),Pi(s,r.conv8,"valid",!1)}runMobilenet(n,r){let s=this.config.isFirstLayerConv2d?bl(Pi(n,r.conv0,"valid",!1)):Us(n,r.conv0);return s=Rt(s,[2,2],[2,2],"same"),s=Us(s,r.conv1),s=Rt(s,[2,2],[2,2],"same"),s=Us(s,r.conv2),s=Rt(s,[2,2],[2,2],"same"),s=Us(s,r.conv3),s=Rt(s,[2,2],[2,2],"same"),s=Us(s,r.conv4),s=Rt(s,[2,2],[2,2],"same"),s=Us(s,r.conv5),s=Rt(s,[2,2],[1,1],"same"),s=r.conv6?Us(s,r.conv6):s,s=r.conv7?Us(s,r.conv7):s,Pi(s,r.conv8,"valid",!1)}forwardInput(n,r){let{params:s}=this;if(!s)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let a=ce(n.toBatchTensor(r,!1),"float32");return a=this.config.meanRgb?Jr(a,this.config.meanRgb):a,a=a.div(255),this.config.withSeparableConvs?this.runMobilenet(a,s):this.runTinyYolov2(a,s)})}async forward(n,r){return this.forwardInput(await bt(n),r)}async detect(n,r={}){let{inputSize:s,scoreThreshold:a}=new es(r),o=await bt(n),i=await this.forwardInput(o,s),c=O(()=>lt(i)[0].expandDims()),u={width:o.getInputWidth(0),height:o.getInputHeight(0)},l=await this.extractBoxes(c,o.getReshapedInputDimensions(0),a);i.dispose(),c.dispose();let p=l.map(b=>b.box),d=l.map(b=>b.score),h=l.map(b=>b.classScore),f=l.map(b=>this.config.classes[b.label]);return bI(p.map(b=>b.rescale(s)),d,this.config.iouThreshold,!0).map(b=>new Ls(d[b],h[b],f[b],p[b],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return S$(n,this.config)}extractParams(n){let r=this.config.filterSizes||VI.DEFAULT_FILTER_SIZES,s=r?r.length:void 0;if(s!==7&&s!==8&&s!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${s} filterSizes in config`);return k$(n,this.config,this.boxEncodingSize,r)}async extractBoxes(n,r,s){let{width:a,height:o}=r,i=Math.max(a,o),c=i/a,u=i/o,l=n.shape[1],p=this.config.anchors.length,[d,h,f]=O(()=>{let y=n.reshape([l,l,p,this.boxEncodingSize]),v=y.slice([0,0,0,0],[l,l,p,4]),x=y.slice([0,0,0,4],[l,l,p,1]),k=this.withClassScores?Xr(y.slice([0,0,0,5],[l,l,p,this.config.classes.length]),3):xe(0);return[v,x,k]}),m=[],g=await h.array(),b=await d.array();for(let y=0;y<l;y++)for(let v=0;v<l;v++)for(let x=0;x<p;x++){let k=pp(g[y][v][x][0]);if(!s||k>s){let S=(v+pp(b[y][v][x][0]))/l*c,C=(y+pp(b[y][v][x][1]))/l*u,E=Math.exp(b[y][v][x][2])*this.config.anchors[x].x/l*c,$=Math.exp(b[y][v][x][3])*this.config.anchors[x].y/l*u,F=S-E/2,A=C-$/2,R={row:y,col:v,anchor:x},{classScore:T,label:L}=this.withClassScores?await this.extractPredictedClass(f,R):{classScore:1,label:0};m.push({box:new _i(F,A,F+E,A+$),score:k,classScore:k*T,label:L,...R})}}return d.dispose(),h.dispose(),f.dispose(),m}async extractPredictedClass(n,r){let{row:s,col:a,anchor:o}=r,i=await n.array();return Array(this.config.classes.length).fill(0).map((c,u)=>i[s][a][o][u]).map((c,u)=>({classScore:c,label:u})).reduce((c,u)=>c.classScore>u.classScore?c:u)}},Bi=VI;Bi.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Wi=class extends Bi{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:b$,classes:["face"],...t?{anchors:v$,meanRgb:x$}:{anchors:y$,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 gt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?I$:w$}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function vde(e,t=!0){let n=new Wi(t);return n.extractWeights(e),n}var Sp=class extends es{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var xr=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Vi(e,t,n,r,s=({alignedRect:a})=>a){let a=e.map(c=>Oi(c)?s(c):c.detection),o=r||(t instanceof Te?await ul(t,a):await cl(t,a)),i=await n(o);return o.forEach(c=>c instanceof Te&&c.dispose()),i}async function yl(e,t,n,r,s){return Vi([e],t,async a=>n(a[0]),r,s)}var T$=.4,C$=[new Fe(1.603231,2.094468),new Fe(6.041143,7.080126),new Fe(2.882459,3.518061),new Fe(4.266906,5.178857),new Fe(9.041765,10.66308)],N$=[117.001,114.697,97.404];var Ui=class extends Bi{constructor(){let t={withSeparableConvs:!0,iouThreshold:T$,classes:["face"],anchors:C$,meanRgb:N$,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 gt(s.score,s.relativeBox,{width:s.imageWidth,height:s.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var et={ssdMobilenetv1:new $a,tinyFaceDetector:new Ui,tinyYolov2:new Wi,faceLandmark68Net:new Mi,faceLandmark68TinyNet:new Ip,faceRecognitionNet:new Li,faceExpressionNet:new xp,ageGenderNet:new wp},_$=(e,t)=>et.ssdMobilenetv1.locateFaces(e,t),xde=(e,t)=>et.tinyFaceDetector.locateFaces(e,t),wde=(e,t)=>et.tinyYolov2.locateFaces(e,t),E$=e=>et.faceLandmark68Net.detectLandmarks(e),Ide=e=>et.faceLandmark68TinyNet.detectLandmarks(e),kde=e=>et.faceRecognitionNet.computeFaceDescriptor(e),Sde=e=>et.faceExpressionNet.predictExpressions(e),Tde=e=>et.ageGenderNet.predictAgeAndGender(e),A$=e=>et.ssdMobilenetv1.load(e),Cde=e=>et.tinyFaceDetector.load(e),Nde=e=>et.tinyYolov2.load(e),_de=e=>et.faceLandmark68Net.load(e),Ede=e=>et.faceLandmark68TinyNet.load(e),Ade=e=>et.faceRecognitionNet.load(e),$de=e=>et.faceExpressionNet.load(e),Dde=e=>et.ageGenderNet.load(e),Fde=A$,Rde=_$,Pde=E$;var Sg=class extends xr{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.extractedFaces=s}},Gi=class extends Sg{async run(){let t=await this.parentTask,n=await Vi(t,this.input,async r=>Promise.all(r.map(s=>et.faceExpressionNet.predictExpressions(s))),this.extractedFaces);return t.map((r,s)=>hg(r,n[s]))}withAgeAndGender(){return new qi(this,this.input)}},Hi=class extends Sg{async run(){let t=await this.parentTask;if(!t)return;let n=await yl(t,this.input,r=>et.faceExpressionNet.predictExpressions(r),this.extractedFaces);return hg(t,n)}withAgeAndGender(){return new ji(this,this.input)}},Da=class extends Gi{withAgeAndGender(){return new Ra(this,this.input)}withFaceDescriptors(){return new Gs(this,this.input)}},Fa=class extends Hi{withAgeAndGender(){return new Pa(this,this.input)}withFaceDescriptor(){return new Hs(this,this.input)}};var Tg=class extends xr{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.extractedFaces=s}},qi=class extends Tg{async run(){let t=await this.parentTask,n=await Vi(t,this.input,async r=>Promise.all(r.map(s=>et.ageGenderNet.predictAgeAndGender(s))),this.extractedFaces);return t.map((r,s)=>{let{age:a,gender:o,genderProbability:i}=n[s];return wg(Ig(r,o,i),a)})}withFaceExpressions(){return new Gi(this,this.input)}},ji=class extends Tg{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:r,genderProbability:s}=await yl(t,this.input,a=>et.ageGenderNet.predictAgeAndGender(a),this.extractedFaces);return wg(Ig(t,r,s),n)}withFaceExpressions(){return new Hi(this,this.input)}},Ra=class extends qi{withFaceExpressions(){return new Da(this,this.input)}withFaceDescriptors(){return new Gs(this,this.input)}},Pa=class extends ji{withFaceExpressions(){return new Fa(this,this.input)}withFaceDescriptor(){return new Hs(this,this.input)}};var Tp=class extends xr{constructor(n,r){super();this.parentTask=n;this.input=r}},Gs=class extends Tp{async run(){let t=await this.parentTask;return(await Vi(t,this.input,r=>Promise.all(r.map(s=>et.faceRecognitionNet.computeFaceDescriptor(s))),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}))).map((r,s)=>xg(t[s],r))}withFaceExpressions(){return new Da(this,this.input)}withAgeAndGender(){return new Ra(this,this.input)}},Hs=class extends Tp{async run(){let t=await this.parentTask;if(!t)return;let n=await yl(t,this.input,r=>et.faceRecognitionNet.computeFaceDescriptor(r),null,r=>r.landmarks.align(null,{useDlibAlignment:!0}));return xg(t,n)}withFaceExpressions(){return new Fa(this,this.input)}withAgeAndGender(){return new Pa(this,this.input)}};var Cp=class extends xr{constructor(n,r,s){super();this.parentTask=n;this.input=r;this.useTinyLandmarkNet=s}get landmarkNet(){return this.useTinyLandmarkNet?et.faceLandmark68TinyNet:et.faceLandmark68Net}},Np=class extends Cp{async run(){let t=await this.parentTask,n=t.map(o=>o.detection),r=this.input instanceof Te?await ul(this.input,n):await cl(this.input,n),s=await Promise.all(r.map(o=>this.landmarkNet.detectLandmarks(o)));return r.forEach(o=>o instanceof Te&&o.dispose()),t.filter((o,i)=>s[i]).map((o,i)=>ml(o,s[i]))}withFaceExpressions(){return new Da(this,this.input)}withAgeAndGender(){return new Ra(this,this.input)}withFaceDescriptors(){return new Gs(this,this.input)}},_p=class extends Cp{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,r=this.input instanceof Te?await ul(this.input,[n]):await cl(this.input,[n]),s=await this.landmarkNet.detectLandmarks(r[0]);return r.forEach(a=>a instanceof Te&&a.dispose()),ml(t,s)}withFaceExpressions(){return new Fa(this,this.input)}withAgeAndGender(){return new Pa(this,this.input)}withFaceDescriptor(){return new Hs(this,this.input)}};var Ep=class extends xr{constructor(n,r=new vr){super();this.input=n;this.options=r}},vl=class extends Ep{async run(){let{input:t,options:n}=this,r;if(n instanceof Sp)r=et.tinyFaceDetector.locateFaces(t,n);else if(n instanceof vr)r=et.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof es)r=et.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=>$i({},s)))).catch(r=>n(r))})}withFaceLandmarks(t=!1){return new Np(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Gi(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new qi(this.runAndExtendWithFaceDetections(),this.input)}},Ap=class extends Ep{async run(){let t=await new vl(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?$i({},n):void 0)})}withFaceLandmarks(t=!1){return new _p(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new Hi(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new ji(this.runAndExtendWithFaceDetection(),this.input)}};function Ode(e,t=new vr){return new Ap(e,t)}function Cg(e,t=new vr){return new vl(e,t)}async function $$(e,t){return Cg(e,new vr(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Mde(e,t={}){return Cg(e,new es(t)).withFaceLandmarks().withFaceDescriptors()}var Lde=$$;function UI(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 $p=class{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 bs)return o;if(o instanceof Float32Array)return new bs(a(),[o]);if(o.descriptor&&o.descriptor instanceof Float32Array)return new bs(a(),[o.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(r=>UI(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.distance<r.distance?n:r)}findBestMatch(t){let n=this.matchDescriptor(t);return n.distance<this._distanceThreshold?n:new al("unknown",n.distance)}toJSON(){return{distanceThreshold:this._distanceThreshold,labeledDescriptors:this._labeledDescriptors.map(t=>t.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(r=>bs.fromJSON(r));return new $p(n,t.distanceThreshold)}};function zde(e){let t=new Ui;return t.extractWeights(e),t}function D$(e,t){let{width:n,height:r}=new yn(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=>D$(s,{width:n,height:r}));if(Oi(e)){let s=e.detection.forSize(n,r),a=e.unshiftedLandmarks.forSize(s.box.width,s.box.height);return ml($i(e,s),a)}return ys(e)?$i(e,e.detection.forSize(n,r)):e instanceof ar||e instanceof gt?e.forSize(n,r):e}var Bde=JA;return gD(Wde);})();
|