4912 lines
1.2 MiB
4912 lines
1.2 MiB
/*
|
|
Face-API
|
|
homepage: <https://github.com/vladmandic/face-api>
|
|
author: <https://github.com/vladmandic>'
|
|
*/
|
|
|
|
var faceapi=(()=>{var ob=Object.defineProperty;var M$=Object.getOwnPropertyDescriptor;var P$=Object.getOwnPropertyNames;var O$=Object.prototype.hasOwnProperty;var L$=(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 dh=(e,t)=>{for(var n in t)ob(e,n,{get:t[n],enumerable:!0})},z$=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of P$(t))!O$.call(e,r)&&r!==n&&ob(e,r,{get:()=>t[r],enumerable:!(a=M$(t,r))||a.enumerable});return e};var W$=e=>z$(ob({},"__esModule",{value:!0}),e);var Cpe={};dh(Cpe,{AgeGenderNet:()=>vd,BoundingBox:()=>Eo,Box:()=>lt,ComposableTask:()=>wa,ComputeAllFaceDescriptorsTask:()=>Ur,ComputeFaceDescriptorsTaskBase:()=>Sd,ComputeSingleFaceDescriptorTask:()=>Gr,DetectAllFaceLandmarksTask:()=>Td,DetectAllFacesTask:()=>yp,DetectFaceLandmarksTaskBase:()=>Nd,DetectFacesTaskBase:()=>_d,DetectSingleFaceLandmarksTask:()=>Cd,DetectSingleFaceTask:()=>Ed,Dimensions:()=>yn,FACE_EXPRESSION_LABELS:()=>i1,FaceDetection:()=>bt,FaceDetectionNet:()=>h1,FaceExpressionNet:()=>xd,FaceExpressions:()=>Wr,FaceLandmark68Net:()=>Lo,FaceLandmark68TinyNet:()=>wd,FaceLandmarkNet:()=>p1,FaceLandmarks:()=>ra,FaceLandmarks5:()=>j0,FaceLandmarks68:()=>$o,FaceMatch:()=>ap,FaceMatcher:()=>Ad,FaceRecognitionNet:()=>zo,Gender:()=>vg,LabeledBox:()=>rp,LabeledFaceDescriptors:()=>xr,NetInput:()=>wr,NeuralNetwork:()=>on,ObjectDetection:()=>Or,Point:()=>Me,PredictedBox:()=>q0,Rect:()=>Ao,SsdMobilenetv1:()=>Es,SsdMobilenetv1Options:()=>va,TinyFaceDetector:()=>Go,TinyFaceDetectorOptions:()=>Id,TinyYolov2:()=>Vo,TinyYolov2Options:()=>ar,allFaces:()=>Spe,allFacesSsdMobilenetv1:()=>WA,allFacesTinyYolov2:()=>Ipe,awaitMediaLoaded:()=>e1,bufferToImage:()=>t1,computeFaceDescriptor:()=>upe,createCanvas:()=>Mo,createCanvasFromMedia:()=>fd,createFaceDetectionNet:()=>npe,createFaceRecognitionNet:()=>Hue,createSsdMobilenetv1:()=>NA,createTinyFaceDetector:()=>Npe,createTinyYolov2:()=>spe,detectAllFaces:()=>Eg,detectFaceLandmarks:()=>LA,detectFaceLandmarksTiny:()=>lpe,detectLandmarks:()=>wpe,detectSingleFace:()=>kpe,draw:()=>l1,env:()=>et,euclideanDistance:()=>g1,extendWithAge:()=>Sg,extendWithFaceDescriptor:()=>Ig,extendWithFaceDetection:()=>Fo,extendWithFaceExpressions:()=>gg,extendWithFaceLandmarks:()=>hp,extendWithGender:()=>Ng,extractFaceTensors:()=>op,extractFaces:()=>ip,fetchImage:()=>$ue,fetchJson:()=>r1,fetchNetWeights:()=>Fue,fetchOrThrow:()=>zr,fetchVideo:()=>Due,getContext2dOrThrow:()=>qn,getMediaDimensions:()=>Ro,imageTensorToCanvas:()=>n1,imageToSquare:()=>a1,inverseSigmoid:()=>Sue,iou:()=>V0,isMediaElement:()=>lg,isMediaLoaded:()=>md,isWithAge:()=>jue,isWithFaceDetection:()=>vr,isWithFaceExpressions:()=>o1,isWithFaceLandmarks:()=>Oo,isWithGender:()=>que,loadAgeGenderModel:()=>bpe,loadFaceDetectionModel:()=>xpe,loadFaceExpressionModel:()=>ype,loadFaceLandmarkModel:()=>mpe,loadFaceLandmarkTinyModel:()=>fpe,loadFaceRecognitionModel:()=>gpe,loadSsdMobilenetv1Model:()=>zA,loadTinyFaceDetectorModel:()=>dpe,loadTinyYolov2Model:()=>hpe,loadWeightMap:()=>s1,locateFaces:()=>vpe,matchDimensions:()=>Rue,minBbox:()=>U0,nets:()=>tt,nonMaxSuppression:()=>G0,normalize:()=>tr,padToSquare:()=>H0,predictAgeAndGender:()=>cpe,recognizeFaceExpressions:()=>ppe,resizeResults:()=>BA,resolveInput:()=>Do,shuffleArray:()=>Iue,sigmoid:()=>cd,ssdMobilenetv1:()=>OA,tf:()=>Le,tinyFaceDetector:()=>ipe,tinyYolov2:()=>ope,toNetInput:()=>xt,utils:()=>B0,validateConfig:()=>m1,version:()=>Tpe});var Le={};dh(Le,{Abs:()=>Dl,Acos:()=>Rl,Acosh:()=>Ml,AdadeltaOptimizer:()=>If,AdagradOptimizer:()=>Sf,AdamOptimizer:()=>Nf,AdamaxOptimizer:()=>Tf,Add:()=>ys,AddN:()=>vi,All:()=>Pl,Any:()=>Ol,ArgMax:()=>wi,ArgMin:()=>dc,Asin:()=>Ll,Asinh:()=>zl,Atan:()=>Wl,Atan2:()=>Vl,Atanh:()=>Bl,AvgPool:()=>ki,AvgPool3D:()=>hc,AvgPool3DGrad:()=>mm,AvgPoolGrad:()=>hm,BackendWasm:()=>eA,BatchMatMul:()=>Ii,BatchToSpaceND:()=>Ul,Bincount:()=>fm,BroadcastArgs:()=>gm,BroadcastTo:()=>EI,Callback:()=>$N,CallbackList:()=>M2,Cast:()=>Si,Ceil:()=>Ni,ClipByValue:()=>bs,Complex:()=>ym,ComplexAbs:()=>mc,Concat:()=>Gl,Conv2D:()=>Ti,Conv2DBackpropFilter:()=>bm,Conv2DBackpropInput:()=>Ci,Conv3D:()=>fc,Conv3DBackpropFilterV2:()=>xm,Conv3DBackpropInputV2:()=>vm,Cos:()=>_i,Cosh:()=>Ei,CropAndResize:()=>jl,Cumprod:()=>Hl,Cumsum:()=>Ai,CustomCallback:()=>O2,DataStorage:()=>pm,DenseBincount:()=>wm,DepthToSpace:()=>ql,DepthwiseConv2dNative:()=>$i,DepthwiseConv2dNativeBackpropFilter:()=>km,DepthwiseConv2dNativeBackpropInput:()=>Im,Diag:()=>Sm,Dilation2D:()=>gc,Dilation2DBackpropFilter:()=>zh,Dilation2DBackpropInput:()=>Lh,ENV:()=>Cx,EarlyStopping:()=>FN,Einsum:()=>Nm,Elu:()=>Di,EluGrad:()=>Tm,Environment:()=>CI,Equal:()=>Xl,Erf:()=>Kl,Exp:()=>Ri,ExpandDims:()=>Yl,Expm1:()=>Jl,FFT:()=>Cm,Fill:()=>yc,FlipLeftRight:()=>Zl,Floor:()=>Mi,FloorDiv:()=>Pi,FromPixels:()=>Wh,FusedBatchNorm:()=>Oi,FusedConv2D:()=>ai,FusedDepthwiseConv2D:()=>ri,GPGPUContext:()=>Dh,GatherNd:()=>eu,GatherV2:()=>Ql,GraphModel:()=>nT,Greater:()=>tu,GreaterEqual:()=>Li,History:()=>P2,IFFT:()=>_m,Identity:()=>zi,Imag:()=>Em,InputSpec:()=>Wt,IsFinite:()=>nu,IsInf:()=>au,IsNan:()=>ru,KernelBackend:()=>cc,LRN:()=>vc,LRNGrad:()=>$m,LayerVariable:()=>$2,LayersModel:()=>Er,LeakyRelu:()=>Wi,Less:()=>su,LessEqual:()=>iu,LinSpace:()=>Am,Log:()=>Bi,Log1p:()=>ou,LogSoftmax:()=>AI,LogicalAnd:()=>lu,LogicalNot:()=>bc,LogicalOr:()=>xc,MathBackendWebGL:()=>Jf,Max:()=>Vi,MaxPool:()=>Gi,MaxPool3D:()=>wc,MaxPool3DGrad:()=>Dm,MaxPoolGrad:()=>Fm,MaxPoolWithArgmax:()=>Rm,Maximum:()=>Ui,Mean:()=>Hi,Min:()=>ji,Minimum:()=>qi,MirrorPad:()=>Ki,Mod:()=>uu,MomentumOptimizer:()=>Cf,Multinomial:()=>Mm,Multiply:()=>Xi,Neg:()=>pu,NonMaxSuppressionV3:()=>du,NonMaxSuppressionV4:()=>hu,NonMaxSuppressionV5:()=>mu,NotEqual:()=>cu,OP_SCOPE_SUFFIX:()=>WI,OneHot:()=>Yi,OnesLike:()=>fu,Optimizer:()=>Dr,OptimizerConstructors:()=>Yr,Pack:()=>gu,PadV2:()=>Ji,Pool:()=>MF,Pow:()=>Zi,Prelu:()=>Qi,Prod:()=>yu,RMSPropOptimizer:()=>_f,RNN:()=>yr,Range:()=>kc,Rank:()=>Tb,Real:()=>Pm,RealDiv:()=>Fi,Reciprocal:()=>bu,Reduction:()=>In,Relu:()=>eo,Relu6:()=>no,Reshape:()=>xu,ResizeBilinear:()=>to,ResizeBilinearGrad:()=>Lm,ResizeNearestNeighbor:()=>Ic,ResizeNearestNeighborGrad:()=>Om,Reverse:()=>ao,RotateWithOffset:()=>Mu,Round:()=>ro,Rsqrt:()=>so,SGDOptimizer:()=>Gc,ScatterNd:()=>vu,Select:()=>wu,Selu:()=>ku,Sequential:()=>Cl,Sigmoid:()=>oo,Sign:()=>Nu,Sin:()=>io,Sinh:()=>Su,Slice:()=>Iu,Softmax:()=>po,Softplus:()=>Tu,SpaceToBatchND:()=>Cu,SparseFillEmptyRows:()=>Sc,SparseReshape:()=>Eu,SparseSegmentMean:()=>Nc,SparseSegmentSum:()=>Tc,SparseToDense:()=>zm,SplitV:()=>_u,Sqrt:()=>lo,Square:()=>Cc,SquaredDifference:()=>co,Step:()=>vs,StridedSlice:()=>Au,StringNGrams:()=>Wm,StringSplit:()=>Bm,StringToHashBucketFast:()=>Vm,Sub:()=>ho,Sum:()=>uo,SymbolicTensor:()=>Ua,Tan:()=>mo,Tanh:()=>fo,Tensor:()=>Ae,TensorBuffer:()=>jt,Tile:()=>xs,TopK:()=>$u,Transform:()=>Fu,Transpose:()=>go,Unique:()=>Um,Unpack:()=>Du,UnsortedSegmentSum:()=>_c,Variable:()=>is,ZerosLike:()=>Ru,_FusedMatMul:()=>ni,abs:()=>zt,acos:()=>Ux,acosh:()=>Gx,add:()=>J,addN:()=>xS,all:()=>Xm,any:()=>ec,argMax:()=>oi,argMin:()=>Hx,asin:()=>jx,asinh:()=>qx,atan:()=>Kx,atan2:()=>Xx,atanh:()=>Yx,avgPool:()=>ga,avgPool3d:()=>Zx,backend:()=>bS,backend_util:()=>_,basicLSTMCell:()=>CM,batchNorm:()=>Ar,batchNorm2d:()=>IS,batchNorm3d:()=>SS,batchNorm4d:()=>NS,batchToSpaceND:()=>Mc,bincount:()=>Qx,booleanMaskAsync:()=>D3,broadcastArgs:()=>TS,broadcastTo:()=>yl,broadcast_util:()=>Pu,browser:()=>yo,buffer:()=>He,callbacks:()=>s6,cast:()=>oe,ceil:()=>ev,clipByValue:()=>nn,clone:()=>_r,complex:()=>os,concat:()=>Qe,concat1d:()=>CS,concat2d:()=>_S,concat3d:()=>ES,concat4d:()=>AS,constraints:()=>b2,conv1d:()=>Ym,conv2d:()=>Rt,conv2dTranspose:()=>Jm,conv3d:()=>nv,conv3dTranspose:()=>FS,copyRegisteredKernels:()=>zF,cos:()=>Pc,cosh:()=>Zm,cosineWindow:()=>Ev,cumprod:()=>av,cumsum:()=>Qm,customGrad:()=>cr,data:()=>aT,denseBincount:()=>DS,deprecationWarn:()=>Vx,depthToSpace:()=>rv,depthwiseConv2d:()=>Is,deregisterOp:()=>l6,device_util:()=>Fc,diag:()=>rP,dilation2d:()=>sv,disableDeprecationWarnings:()=>zR,dispose:()=>De,disposeVariables:()=>WR,div:()=>fe,divNoNan:()=>iv,dot:()=>RS,dropout:()=>t2,einsum:()=>MS,elu:()=>Ou,enableDebugMode:()=>LR,enableProdMode:()=>OR,enclosingPowerOfTwo:()=>n2,engine:()=>sr,env:()=>X,equal:()=>ea,erf:()=>ov,exp:()=>gn,expandDims:()=>mn,expm1:()=>lv,eye:()=>uv,fft:()=>Vc,fill:()=>_n,findBackend:()=>qR,findBackendFactory:()=>KR,floor:()=>Lu,floorDiv:()=>Km,forceHalfFloat:()=>k_,fused:()=>us,gather:()=>ui,gatherND:()=>e2,gather_util:()=>Px,getBackend:()=>HR,getGradient:()=>Sb,getKernel:()=>Bh,getKernelsForBackend:()=>Vh,getThreadsCount:()=>pue,gpgpu_util:()=>e_,grad:()=>DP,grads:()=>RP,greater:()=>Gn,greaterEqual:()=>Ss,ifft:()=>Sl,imag:()=>ef,image:()=>Ln,inTopKAsync:()=>G3,initializers:()=>k2,input:()=>J2,io:()=>Qt,irfft:()=>ff,isFinite:()=>PS,isInf:()=>OS,isNaN:()=>pv,keep:()=>en,kernel_impls:()=>gr,layers:()=>E2,leakyRelu:()=>Oc,less:()=>tf,lessEqual:()=>Ns,linalg:()=>d2,linspace:()=>LS,loadGraphModel:()=>cH,loadLayersModel:()=>fU,localResponseNormalization:()=>cv,log:()=>ta,log1p:()=>Lc,logSigmoid:()=>WS,logSoftmax:()=>af,logSumExp:()=>mv,logicalAnd:()=>_a,logicalNot:()=>zc,logicalOr:()=>rf,logicalXor:()=>GS,losses:()=>Tz,matMul:()=>Fe,math:()=>eS,max:()=>Ta,maxPool:()=>Pt,maxPool3d:()=>fv,maxPoolWithArgmax:()=>HS,maximum:()=>fr,mean:()=>Et,memory:()=>Hh,meshgrid:()=>nO,metrics:()=>_N,min:()=>tc,minimum:()=>zu,mirrorPad:()=>gv,mod:()=>yv,model:()=>hU,models:()=>EN,moments:()=>sf,movingAverage:()=>P3,mul:()=>W,multiRNNCell:()=>pO,multinomial:()=>jS,neg:()=>St,nextFrame:()=>Fv,norm:()=>bf,notEqual:()=>ci,oneHot:()=>kl,ones:()=>Zn,onesLike:()=>na,op:()=>z,outerProduct:()=>fO,pad:()=>ya,pad1d:()=>bO,pad2d:()=>vO,pad3d:()=>kO,pad4d:()=>SO,pool:()=>qS,pow:()=>$r,prelu:()=>Bc,print:()=>YI,prod:()=>of,profile:()=>BR,rand:()=>DO,randomGamma:()=>OO,randomNormal:()=>KS,randomUniform:()=>Wu,range:()=>Il,ready:()=>GR,real:()=>nc,reciprocal:()=>vv,registerBackend:()=>qm,registerCallbackConstructor:()=>gU,registerGradient:()=>$I,registerKernel:()=>Ec,registerOp:()=>o6,regularizers:()=>AN,relu:()=>Xe,relu6:()=>lf,removeBackend:()=>jR,reshape:()=>V,reverse:()=>aa,reverse1d:()=>jO,reverse2d:()=>KO,reverse3d:()=>YO,reverse4d:()=>ZO,rfft:()=>Uc,round:()=>uf,rsqrt:()=>pf,scalar:()=>ke,scatterND:()=>QS,scatter_util:()=>Ox,selu:()=>cf,separableConv2d:()=>xo,sequential:()=>mU,serialization:()=>se,setBackend:()=>UR,setPlatform:()=>XR,setThreadsCount:()=>uue,setWasmPath:()=>oue,setWasmPaths:()=>lue,setWebGLContext:()=>SC,setdiff1dAsync:()=>XS,sigmoid:()=>ma,sign:()=>wv,signal:()=>Nz,sin:()=>df,sinh:()=>hf,slice:()=>Ge,slice1d:()=>mf,slice2d:()=>kv,slice3d:()=>Bu,slice4d:()=>ac,slice_util:()=>qt,softmax:()=>Ja,softplus:()=>bo,spaceToBatchND:()=>Wc,sparse:()=>Op,sparseToDense:()=>_v,spectral:()=>Sz,split:()=>zn,sqrt:()=>un,square:()=>ut,squaredDifference:()=>gf,squeeze:()=>dr,stack:()=>Mt,step:()=>Vu,stridedSlice:()=>Iv,string:()=>Th,sub:()=>ce,sum:()=>be,sumOutType:()=>Hm,tan:()=>Sv,tanh:()=>li,tensor:()=>Qn,tensor1d:()=>qe,tensor2d:()=>Ha,tensor3d:()=>jm,tensor4d:()=>Za,tensor5d:()=>S3,tensor6d:()=>N3,tensor_util:()=>Ga,test_util:()=>fS,tidy:()=>O,tile:()=>On,time:()=>VR,topk:()=>Nv,train:()=>Gs,transpose:()=>Pe,truncatedNormal:()=>yf,unique:()=>qh,unregisterGradient:()=>LF,unregisterKernel:()=>OF,unsortedSegmentSum:()=>Tv,unstack:()=>mt,upcastType:()=>fa,util:()=>k,valueAndGrad:()=>MP,valueAndGrads:()=>PP,variable:()=>YS,variableGrads:()=>zS,version:()=>wue,version_converter:()=>dH,version_core:()=>PR,version_layers:()=>ew,version_wasm:()=>cue,version_webgl:()=>w9,webgl:()=>k9,webgl_util:()=>IC,where:()=>fn,whereAsync:()=>Cv,zeros:()=>kt,zerosLike:()=>Ke});var B$=Object.create,kx=Object.defineProperty,V$=Object.getOwnPropertyDescriptor,U$=Object.getOwnPropertyNames,G$=Object.getPrototypeOf,H$=Object.prototype.hasOwnProperty,ft=(e,t)=>()=>(t||e((t={exports:{}}).exports,t),t.exports),Re=(e,t)=>{for(var n in t)kx(e,n,{get:t[n],enumerable:!0})},j$=(e,t,n,a)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of U$(t))!H$.call(e,r)&&r!==n&&kx(e,r,{get:()=>t[r],enumerable:!(a=V$(t,r))||a.enumerable});return e},bi=(e,t,n)=>(n=e!=null?B$(G$(e)):{},j$(t||!e||!e.__esModule?kx(n,"default",{value:e,enumerable:!0}):n,e)),q$=ft((e,t)=>{t.exports=a;var n=null;try{n=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(S){}function a(S,M,B){this.low=S|0,this.high=M|0,this.unsigned=!!B}a.prototype.__isLong__,Object.defineProperty(a.prototype,"__isLong__",{value:!0});function r(S){return(S&&S.__isLong__)===!0}a.isLong=r;var s={},i={};function o(S,M){var B,j,q;return M?(S>>>=0,(q=0<=S&&S<256)&&(j=i[S],j)?j:(B=u(S,(S|0)<0?-1:0,!0),q&&(i[S]=B),B)):(S|=0,(q=-128<=S&&S<128)&&(j=s[S],j)?j:(B=u(S,S<0?-1:0,!1),q&&(s[S]=B),B))}a.fromInt=o;function l(S,M){if(isNaN(S))return M?v:x;if(M){if(S<0)return v;if(S>=g)return $}else{if(S<=-y)return P;if(S+1>=y)return E}return S<0?l(-S,M).neg():u(S%f|0,S/f|0,M)}a.fromNumber=l;function u(S,M,B){return new a(S,M,B)}a.fromBits=u;var p=Math.pow;function d(S,M,B){if(S.length===0)throw Error("empty string");if(S==="NaN"||S==="Infinity"||S==="+Infinity"||S==="-Infinity")return x;if(typeof M=="number"?(B=M,M=!1):M=!!M,B=B||10,B<2||36<B)throw RangeError("radix");var j;if((j=S.indexOf("-"))>0)throw Error("interior hyphen");if(j===0)return d(S.substring(1),M,B).neg();for(var q=l(p(B,8)),K=x,Q=0;Q<S.length;Q+=8){var ee=Math.min(8,S.length-Q),re=parseInt(S.substring(Q,Q+ee),B);if(ee<8){var Z=l(p(B,ee));K=K.mul(Z).add(l(re))}else K=K.mul(q),K=K.add(l(re))}return K.unsigned=M,K}a.fromString=d;function c(S,M){return typeof S=="number"?l(S,M):typeof S=="string"?d(S,M):u(S.low,S.high,typeof M=="boolean"?M:S.unsigned)}a.fromValue=c;var h=1<<16,m=1<<24,f=h*h,g=f*f,y=g/2,b=o(m),x=o(0);a.ZERO=x;var v=o(0,!0);a.UZERO=v;var w=o(1);a.ONE=w;var T=o(1,!0);a.UONE=T;var C=o(-1);a.NEG_ONE=C;var E=u(-1,2147483647,!1);a.MAX_VALUE=E;var $=u(-1,-1,!0);a.MAX_UNSIGNED_VALUE=$;var P=u(0,-2147483648,!1);a.MIN_VALUE=P;var F=a.prototype;F.toInt=function(){return this.unsigned?this.low>>>0:this.low},F.toNumber=function(){return this.unsigned?(this.high>>>0)*f+(this.low>>>0):this.high*f+(this.low>>>0)},F.toString=function(S){if(S=S||10,S<2||36<S)throw RangeError("radix");if(this.isZero())return"0";if(this.isNegative())if(this.eq(P)){var M=l(S),B=this.div(M),j=B.mul(M).sub(this);return B.toString(S)+j.toInt().toString(S)}else return"-"+this.neg().toString(S);for(var q=l(p(S,6),this.unsigned),K=this,Q="";;){var ee=K.div(q),re=K.sub(ee.mul(q)).toInt()>>>0,Z=re.toString(S);if(K=ee,K.isZero())return Z+Q;for(;Z.length<6;)Z="0"+Z;Q=""+Z+Q}},F.getHighBits=function(){return this.high},F.getHighBitsUnsigned=function(){return this.high>>>0},F.getLowBits=function(){return this.low},F.getLowBitsUnsigned=function(){return this.low>>>0},F.getNumBitsAbs=function(){if(this.isNegative())return this.eq(P)?64:this.neg().getNumBitsAbs();for(var S=this.high!=0?this.high:this.low,M=31;M>0&&(S&1<<M)==0;M--);return this.high!=0?M+33:M+1},F.isZero=function(){return this.high===0&&this.low===0},F.eqz=F.isZero,F.isNegative=function(){return!this.unsigned&&this.high<0},F.isPositive=function(){return this.unsigned||this.high>=0},F.isOdd=function(){return(this.low&1)===1},F.isEven=function(){return(this.low&1)===0},F.equals=function(S){return r(S)||(S=c(S)),this.unsigned!==S.unsigned&&this.high>>>31===1&&S.high>>>31===1?!1:this.high===S.high&&this.low===S.low},F.eq=F.equals,F.notEquals=function(S){return!this.eq(S)},F.neq=F.notEquals,F.ne=F.notEquals,F.lessThan=function(S){return this.comp(S)<0},F.lt=F.lessThan,F.lessThanOrEqual=function(S){return this.comp(S)<=0},F.lte=F.lessThanOrEqual,F.le=F.lessThanOrEqual,F.greaterThan=function(S){return this.comp(S)>0},F.gt=F.greaterThan,F.greaterThanOrEqual=function(S){return this.comp(S)>=0},F.gte=F.greaterThanOrEqual,F.ge=F.greaterThanOrEqual,F.compare=function(S){if(r(S)||(S=c(S)),this.eq(S))return 0;var M=this.isNegative(),B=S.isNegative();return M&&!B?-1:!M&&B?1:this.unsigned?S.high>>>0>this.high>>>0||S.high===this.high&&S.low>>>0>this.low>>>0?-1:1:this.sub(S).isNegative()?-1:1},F.comp=F.compare,F.negate=function(){return!this.unsigned&&this.eq(P)?P:this.not().add(w)},F.neg=F.negate,F.add=function(S){r(S)||(S=c(S));var M=this.high>>>16,B=this.high&65535,j=this.low>>>16,q=this.low&65535,K=S.high>>>16,Q=S.high&65535,ee=S.low>>>16,re=S.low&65535,Z=0,ie=0,ae=0,le=0;return le+=q+re,ae+=le>>>16,le&=65535,ae+=j+ee,ie+=ae>>>16,ae&=65535,ie+=B+Q,Z+=ie>>>16,ie&=65535,Z+=M+K,Z&=65535,u(ae<<16|le,Z<<16|ie,this.unsigned)},F.subtract=function(S){return r(S)||(S=c(S)),this.add(S.neg())},F.sub=F.subtract,F.multiply=function(S){if(this.isZero())return x;if(r(S)||(S=c(S)),n){var M=n.mul(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(S.isZero())return x;if(this.eq(P))return S.isOdd()?P:x;if(S.eq(P))return this.isOdd()?P:x;if(this.isNegative())return S.isNegative()?this.neg().mul(S.neg()):this.neg().mul(S).neg();if(S.isNegative())return this.mul(S.neg()).neg();if(this.lt(b)&&S.lt(b))return l(this.toNumber()*S.toNumber(),this.unsigned);var B=this.high>>>16,j=this.high&65535,q=this.low>>>16,K=this.low&65535,Q=S.high>>>16,ee=S.high&65535,re=S.low>>>16,Z=S.low&65535,ie=0,ae=0,le=0,ue=0;return ue+=K*Z,le+=ue>>>16,ue&=65535,le+=q*Z,ae+=le>>>16,le&=65535,le+=K*re,ae+=le>>>16,le&=65535,ae+=j*Z,ie+=ae>>>16,ae&=65535,ae+=q*re,ie+=ae>>>16,ae&=65535,ae+=K*ee,ie+=ae>>>16,ae&=65535,ie+=B*Z+j*re+q*ee+K*Q,ie&=65535,u(le<<16|ue,ie<<16|ae,this.unsigned)},F.mul=F.multiply,F.divide=function(S){if(r(S)||(S=c(S)),S.isZero())throw Error("division by zero");if(n){if(!this.unsigned&&this.high===-2147483648&&S.low===-1&&S.high===-1)return this;var M=(this.unsigned?n.div_u:n.div_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}if(this.isZero())return this.unsigned?v:x;var B,j,q;if(this.unsigned){if(S.unsigned||(S=S.toUnsigned()),S.gt(this))return v;if(S.gt(this.shru(1)))return T;q=v}else{if(this.eq(P)){if(S.eq(w)||S.eq(C))return P;if(S.eq(P))return w;var K=this.shr(1);return B=K.div(S).shl(1),B.eq(x)?S.isNegative()?w:C:(j=this.sub(S.mul(B)),q=B.add(j.div(S)),q)}else if(S.eq(P))return this.unsigned?v:x;if(this.isNegative())return S.isNegative()?this.neg().div(S.neg()):this.neg().div(S).neg();if(S.isNegative())return this.div(S.neg()).neg();q=x}for(j=this;j.gte(S);){B=Math.max(1,Math.floor(j.toNumber()/S.toNumber()));for(var Q=Math.ceil(Math.log(B)/Math.LN2),ee=Q<=48?1:p(2,Q-48),re=l(B),Z=re.mul(S);Z.isNegative()||Z.gt(j);)B-=ee,re=l(B,this.unsigned),Z=re.mul(S);re.isZero()&&(re=w),q=q.add(re),j=j.sub(Z)}return q},F.div=F.divide,F.modulo=function(S){if(r(S)||(S=c(S)),n){var M=(this.unsigned?n.rem_u:n.rem_s)(this.low,this.high,S.low,S.high);return u(M,n.get_high(),this.unsigned)}return this.sub(this.div(S).mul(S))},F.mod=F.modulo,F.rem=F.modulo,F.not=function(){return u(~this.low,~this.high,this.unsigned)},F.and=function(S){return r(S)||(S=c(S)),u(this.low&S.low,this.high&S.high,this.unsigned)},F.or=function(S){return r(S)||(S=c(S)),u(this.low|S.low,this.high|S.high,this.unsigned)},F.xor=function(S){return r(S)||(S=c(S)),u(this.low^S.low,this.high^S.high,this.unsigned)},F.shiftLeft=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low<<S,this.high<<S|this.low>>>32-S,this.unsigned):u(0,this.low<<S-32,this.unsigned)},F.shl=F.shiftLeft,F.shiftRight=function(S){return r(S)&&(S=S.toInt()),(S&=63)===0?this:S<32?u(this.low>>>S|this.high<<32-S,this.high>>S,this.unsigned):u(this.high>>S-32,this.high>=0?0:-1,this.unsigned)},F.shr=F.shiftRight,F.shiftRightUnsigned=function(S){if(r(S)&&(S=S.toInt()),S&=63,S===0)return this;var M=this.high;if(S<32){var B=this.low;return u(B>>>S|M<<32-S,M>>>S,this.unsigned)}else return S===32?u(M,0,this.unsigned):u(M>>>S-32,0,this.unsigned)},F.shru=F.shiftRightUnsigned,F.shr_u=F.shiftRightUnsigned,F.toSigned=function(){return this.unsigned?u(this.low,this.high,!1):this},F.toUnsigned=function(){return this.unsigned?this:u(this.low,this.high,!0)},F.toBytes=function(S){return S?this.toBytesLE():this.toBytesBE()},F.toBytesLE=function(){var S=this.high,M=this.low;return[M&255,M>>>8&255,M>>>16&255,M>>>24,S&255,S>>>8&255,S>>>16&255,S>>>24]},F.toBytesBE=function(){var S=this.high,M=this.low;return[S>>>24,S>>>16&255,S>>>8&255,S&255,M>>>24,M>>>16&255,M>>>8&255,M&255]},a.fromBytes=function(S,M,B){return B?a.fromBytesLE(S,M):a.fromBytesBE(S,M)},a.fromBytesLE=function(S,M){return new a(S[0]|S[1]<<8|S[2]<<16|S[3]<<24,S[4]|S[5]<<8|S[6]<<16|S[7]<<24,M)},a.fromBytesBE=function(S,M){return new a(S[4]<<24|S[5]<<16|S[6]<<8|S[7],S[0]<<24|S[1]<<16|S[2]<<8|S[3],M)}}),K$=ft(()=>{}),X$=ft(()=>{}),Y$=ft((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=d.toString();for(var c=0;c<d.length;c++){u+=d.charCodeAt(c);var h=.02519603282416938*u;u=h>>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),J$=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Z$=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,d==p.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),Q$=ft((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h<c.length;++h)f[h&7]=f[h&7]<<15^c.charCodeAt(h)+f[h+1&7]<<13;for(;f.length<8;)f.push(0);for(h=0;h<8&&f[h]===0;++h);for(h==8?m=f[7]=-1:m=f[h],d.x=f,d.i=0,h=256;h>0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),eF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g<x;++g)c&&(m^=c.charCodeAt((g+32)%c.length)),g===0&&(y=m),m^=m<<10,m^=m>>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),tF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d<p.length+20;d++)u.b^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.a=l.a,u.b=l.b,u.c=l.c,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),hI=ft(()=>{}),nF=ft((e,t)=>{(function(n,a){var r=this,s=256,i=6,o=52,l="random",u=a.pow(s,i),p=a.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var E=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(n)]:w==null?x():w,3),E),P=new f(E),F=function(){for(var S=P.g(i),M=u,B=0;S<p;)S=(S+B)*s,M*=s,B=P.g(1);for(;S>=d;)S/=2,M/=2,B>>>=1;return(S+B)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),n),(T.pass||C||function(S,M,B,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),B?(a[l]=S,M):S})(F,$,"global"in T?T.global:this==a,T.state)}a["seed"+l]=m;function f(w){var T,C=w.length,E=this,$=0,P=E.i=E.j=0,F=E.S=[];for(C||(w=[C++]);$<s;)F[$]=$++;for($=0;$<s;$++)F[$]=F[P=c&P+w[$%C]+(T=F[$])],F[P]=T;(E.g=function(S){for(var M,B=0,j=E.i,q=E.j,K=E.S;S--;)M=K[j=c&j+1],B=B*s+K[c&(K[j]=K[q=c&q+M])+(K[q]=M)];return E.i=j,E.j=q,B})(s)}function g(w,T){return T.i=w.i,T.j=w.j,T.S=w.S.slice(),T}function y(w,T){var C=[],E=typeof w,$;if(T&&E=="object")for($ in w)try{C.push(y(w[$],T-1))}catch(P){}return C.length?C:E=="string"?w:w+"\0"}function b(w,T){for(var C=w+"",E,$=0;$<C.length;)T[c&$]=c&(E^=T[c&$]*19)+C.charCodeAt($++);return v(T)}function x(){try{var w;return h&&(w=h.randomBytes)?w=w(s):(w=new Uint8Array(s),(r.crypto||r.msCrypto).getRandomValues(w)),v(w)}catch(E){var T=r.navigator,C=T&&T.plugins;return[+new Date,r,C,r.screen,v(n)]}}function v(w){return String.fromCharCode.apply(0,w)}if(b(a.random(),n),typeof t=="object"&&t.exports){t.exports=m;try{h=hI()}catch(w){}}else typeof define=="function"&&define.amd&&define(function(){return m})})([],Math)}),mI=ft((e,t)=>{var n=Y$(),a=J$(),r=Z$(),s=Q$(),i=eF(),o=tF(),l=nF();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),aF=ft((e,t)=>{(function(n,a,r){function s(u){var p=this,d=l();p.next=function(){var c=2091639*p.s0+p.c*23283064365386963e-26;return p.s0=p.s1,p.s1=p.s2,p.s2=c-(p.c=c|0)},p.c=1,p.s0=d(" "),p.s1=d(" "),p.s2=d(" "),p.s0-=d(u),p.s0<0&&(p.s0+=1),p.s1-=d(u),p.s1<0&&(p.s1+=1),p.s2-=d(u),p.s2<0&&(p.s2+=1),d=null}function i(u,p){return p.c=u.c,p.s0=u.s0,p.s1=u.s1,p.s2=u.s2,p}function o(u,p){var d=new s(u),c=p&&p.state,h=d.next;return h.int32=function(){return d.next()*4294967296|0},h.double=function(){return h()+(h()*2097152|0)*11102230246251565e-32},h.quick=h,c&&(typeof c=="object"&&i(c,d),h.state=function(){return i(d,{})}),h}function l(){var u=4022871197,p=function(d){d=String(d);for(var c=0;c<d.length;c++){u+=d.charCodeAt(c);var h=.02519603282416938*u;u=h>>>0,h-=u,h*=u,u=h>>>0,h-=u,u+=h*4294967296}return(u>>>0)*23283064365386963e-26};return p}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.alea=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),rF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.x=0,u.y=0,u.z=0,u.w=0,u.next=function(){var c=u.x^u.x<<11;return u.x=u.y,u.y=u.z,u.z=u.w,u.w^=u.w>>>19^c^c>>>8},l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor128=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),sF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.x^u.x>>>2;return u.x=u.y,u.y=u.z,u.z=u.w,u.w=u.v,(u.d=u.d+362437|0)+(u.v=u.v^u.v<<4^(c^c<<1))|0},u.x=0,u.y=0,u.z=0,u.w=0,u.v=0,l===(l|0)?u.x=l:p+=l;for(var d=0;d<p.length+64;d++)u.x^=p.charCodeAt(d)|0,d==p.length&&(u.d=u.x<<10^u.x>>>4),u.next()}function i(l,u){return u.x=l.x,u.y=l.y,u.z=l.z,u.w=l.w,u.v=l.v,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorwow=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),iF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.x,c=u.i,h,m,f;return h=d[c],h^=h>>>7,m=h^h<<24,h=d[c+1&7],m^=h^h>>>10,h=d[c+3&7],m^=h^h>>>3,h=d[c+4&7],m^=h^h<<7,h=d[c+7&7],h=h^h<<13,m^=h^h<<9,d[c]=m,u.i=c+1&7,m};function p(d,c){var h,m,f=[];if(c===(c|0))m=f[0]=c;else for(c=""+c,h=0;h<c.length;++h)f[h&7]=f[h&7]<<15^c.charCodeAt(h)+f[h+1&7]<<13;for(;f.length<8;)f.push(0);for(h=0;h<8&&f[h]===0;++h);for(h==8?m=f[7]=-1:m=f[h],d.x=f,d.i=0,h=256;h>0;--h)d.next()}p(u,l)}function i(l,u){return u.x=l.x.slice(),u.i=l.i,u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.x&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xorshift7=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),oF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this;u.next=function(){var d=u.w,c=u.X,h=u.i,m,f;return u.w=d=d+1640531527|0,f=c[h+34&127],m=c[h=h+1&127],f^=f<<13,m^=m<<17,f^=f>>>15,m^=m>>>12,f=c[h]=f^m,u.i=h,f+(d^d>>>16)|0};function p(d,c){var h,m,f,g,y,b=[],x=128;for(c===(c|0)?(m=c,c=null):(c=c+"\0",m=0,x=Math.max(x,c.length)),f=0,g=-32;g<x;++g)c&&(m^=c.charCodeAt((g+32)%c.length)),g===0&&(y=m),m^=m<<10,m^=m>>>15,m^=m<<4,m^=m>>>13,g>=0&&(y=y+1640531527|0,h=b[g&127]^=m+y,f=h==0?f+1:0);for(f>=128&&(b[(c&&c.length||0)&127]=-1),f=127,g=4*128;g>0;--g)m=b[f+34&127],h=b[f=f+1&127],m^=m<<13,h^=h<<17,m^=m>>>15,h^=h>>>12,b[f]=m^h;d.w=y,d.X=b,d.i=f}p(u,l)}function i(l,u){return u.i=l.i,u.w=l.w,u.X=l.X.slice(),u}function o(l,u){l==null&&(l=+new Date);var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(d.X&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.xor4096=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),lF=ft((e,t)=>{(function(n,a,r){function s(l){var u=this,p="";u.next=function(){var c=u.b,h=u.c,m=u.d,f=u.a;return c=c<<25^c>>>7^h,h=h-m|0,m=m<<24^m>>>8^f,f=f-c|0,u.b=c=c<<20^c>>>12^h,u.c=h=h-m|0,u.d=m<<16^h>>>16^f,u.a=f-c|0},u.a=0,u.b=0,u.c=-1640531527,u.d=1367130551,l===Math.floor(l)?(u.a=l/4294967296|0,u.b=l|0):p+=l;for(var d=0;d<p.length+20;d++)u.b^=p.charCodeAt(d)|0,u.next()}function i(l,u){return u.a=l.a,u.b=l.b,u.c=l.c,u.d=l.d,u}function o(l,u){var p=new s(l),d=u&&u.state,c=function(){return(p.next()>>>0)/4294967296};return c.double=function(){do var h=p.next()>>>11,m=(p.next()>>>0)/4294967296,f=(h+m)/(1<<21);while(f===0);return f},c.int32=p.next,c.quick=c,d&&(typeof d=="object"&&i(d,p),c.state=function(){return i(p,{})}),c}a&&a.exports?a.exports=o:r&&r.amd?r(function(){return o}):this.tychei=o})(e,typeof t=="object"&&t,typeof define=="function"&&define)}),uF=ft((e,t)=>{(function(n,a,r){var s=256,i=6,o=52,l="random",u=r.pow(s,i),p=r.pow(2,o),d=p*2,c=s-1,h;function m(w,T,C){var E=[];T=T==!0?{entropy:!0}:T||{};var $=b(y(T.entropy?[w,v(a)]:w==null?x():w,3),E),P=new f(E),F=function(){for(var S=P.g(i),M=u,B=0;S<p;)S=(S+B)*s,M*=s,B=P.g(1);for(;S>=d;)S/=2,M/=2,B>>>=1;return(S+B)/M};return F.int32=function(){return P.g(4)|0},F.quick=function(){return P.g(4)/4294967296},F.double=F,b(v(P.S),a),(T.pass||C||function(S,M,B,j){return j&&(j.S&&g(j,P),S.state=function(){return g(P,{})}),B?(r[l]=S,M):S})(F,$,"global"in T?T.global:this==r,T.state)}function f(w){var T,C=w.length,E=this,$=0,P=E.i=E.j=0,F=E.S=[];for(C||(w=[C++]);$<s;)F[$]=$++;for($=0;$<s;$++)F[$]=F[P=c&P+w[$%C]+(T=F[$])],F[P]=T;(E.g=function(S){for(var M,B=0,j=E.i,q=E.j,K=E.S;S--;)M=K[j=c&j+1],B=B*s+K[c&(K[j]=K[q=c&q+M])+(K[q]=M)];return E.i=j,E.j=q,B})(s)}function g(w,T){return T.i=w.i,T.j=w.j,T.S=w.S.slice(),T}function y(w,T){var C=[],E=typeof w,$;if(T&&E=="object")for($ in w)try{C.push(y(w[$],T-1))}catch(P){}return C.length?C:E=="string"?w:w+"\0"}function b(w,T){for(var C=w+"",E,$=0;$<C.length;)T[c&$]=c&(E^=T[c&$]*19)+C.charCodeAt($++);return v(T)}function x(){try{var w;return h&&(w=h.randomBytes)?w=w(s):(w=new Uint8Array(s),(n.crypto||n.msCrypto).getRandomValues(w)),v(w)}catch(E){var T=n.navigator,C=T&&T.plugins;return[+new Date,n,C,n.screen,v(a)]}}function v(w){return String.fromCharCode.apply(0,w)}if(b(r.random(),a),typeof t=="object"&&t.exports){t.exports=m;try{h=hI()}catch(w){}}else typeof define=="function"&&define.amd?define(function(){return m}):r["seed"+l]=m})(typeof self!="undefined"?self:e,[],Math)}),fI=ft((e,t)=>{var n=aF(),a=rF(),r=sF(),s=iF(),i=oF(),o=lF(),l=uF();l.alea=n,l.xor128=a,l.xorwow=r,l.xorshift7=s,l.xor4096=i,l.tychei=o,t.exports=l}),gI=ft(()=>{}),Ix=ft(()=>{}),Mh=ft(()=>{}),pF=ft(()=>{}),cF=ft(()=>{}),dF=ft(()=>{}),hF=ft((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};function s(){return Te.buffer!=xn&&Ra(Te.buffer),Fd}function i(){return Te.buffer!=xn&&Ra(Te.buffer),Dd}function o(){return Te.buffer!=xn&&Ra(Te.buffer),xp}function l(){return Te.buffer!=xn&&Ra(Te.buffer),Rd}function u(){return Te.buffer!=xn&&Ra(Te.buffer),Md}function p(){return Te.buffer!=xn&&Ra(Te.buffer),Pd}function d(){return Te.buffer!=xn&&Ra(Te.buffer),Od}var c=typeof r!="undefined"?r:{},h,m;c.ready=new Promise(function(N,D){h=N,m=D});var f;typeof process!="undefined"&&process.listeners&&(f={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var g=Object.assign({},c),y=[],b="./this.program",x=(N,D)=>{throw D},v=typeof window=="object",w=typeof importScripts=="function",T=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",C=c.ENVIRONMENT_IS_PTHREAD||!1,E="";function $(N){return c.locateFile?c.locateFile(N,E):E+N}var P,F,S,M;function B(N){N instanceof Ep||Z("exiting due to exception: "+N)}var j,q,K;if(T){w?E=Mh().dirname(E)+"/":E=__dirname+"/",K=()=>{q||(j=Ix(),q=Mh())},P=function(D,U){return K(),D=q.normalize(D),j.readFileSync(D,U?void 0:"utf8")},S=D=>{var U=P(D,!0);return U.buffer||(U=new Uint8Array(U)),U},F=(D,U,Y)=>{K(),D=q.normalize(D),j.readFile(D,function(pe,he){pe?Y(pe):U(he.buffer)})},process.argv.length>1&&(b=process.argv[1].replace(/\\/g,"/")),y=process.argv.slice(2),process.on("uncaughtException",function(D){if(!(D instanceof Ep))throw D}),process.on("unhandledRejection",function(D){throw D}),x=(D,U)=>{if(Ps())throw process.exitCode=D,U;B(U),process.exit(D)},c.inspect=function(){return"[Emscripten Module object]"};let N;try{N=pF()}catch(D){throw console.error('The "worker_threads" module is not supported in this node.js build - perhaps a newer version is needed?'),D}global.Worker=N.Worker}else(v||w)&&(w?E=self.location.href:typeof document!="undefined"&&document.currentScript&&(E=document.currentScript.src),typeof a!="undefined"&&a&&(E=a),E.indexOf("blob:")!==0?E=E.substr(0,E.replace(/[?#].*/,"").lastIndexOf("/")+1):E="",T||(P=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.send(null),D.responseText},w&&(S=N=>{var D=new XMLHttpRequest;return D.open("GET",N,!1),D.responseType="arraybuffer",D.send(null),new Uint8Array(D.response)}),F=(N,D,U)=>{var Y=new XMLHttpRequest;Y.open("GET",N,!0),Y.responseType="arraybuffer",Y.onload=()=>{if(Y.status==200||Y.status==0&&Y.response){D(Y.response);return}U()},Y.onerror=U,Y.send(null)}),M=N=>document.title=N);T&&typeof performance=="undefined"&&(global.performance=cF().performance);var Q=console.log.bind(console),ee=console.warn.bind(console);T&&(K(),Q=N=>j.writeSync(1,N+`
|
|
`),ee=N=>j.writeSync(2,N+`
|
|
`));var re=c.print||Q,Z=c.printErr||ee;Object.assign(c,g),g=null,c.arguments&&(y=c.arguments),c.thisProgram&&(b=c.thisProgram),c.quit&&(x=c.quit);var ie=4;function ae(N){ae.shown||(ae.shown={}),ae.shown[N]||(ae.shown[N]=1,Z(N))}function le(N,D){if(typeof WebAssembly.Function=="function"){for(var U={i:"i32",j:"i64",f:"f32",d:"f64"},Y={parameters:[],results:D[0]=="v"?[]:[U[D[0]]]},pe=1;pe<D.length;++pe)Y.parameters.push(U[D[pe]]);return new WebAssembly.Function(Y,N)}var he=[1,0,1,96],ve=D.slice(0,1),Ce=D.slice(1),_t={i:127,j:126,f:125,d:124};he.push(Ce.length);for(var pe=0;pe<Ce.length;++pe)he.push(_t[Ce[pe]]);ve=="v"?he.push(0):he=he.concat([1,_t[ve]]),he[1]=he.length-2;var La=new Uint8Array([0,97,115,109,1,0,0,0].concat(he,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0])),za=new WebAssembly.Module(La),ch=new WebAssembly.Instance(za,{e:{f:N}}),Ap=ch.exports.f;return Ap}var ue=[],we;function ye(){if(ue.length)return ue.pop();try{la.grow(1)}catch(N){throw N instanceof RangeError?"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.":N}return la.length-1}function Ie(N,D){for(var U=N;U<N+D;U++){var Y=el(U);Y&&we.set(Y,U)}}var Ee=0,$e=N=>{Ee=N},We=Atomics.load,je=Atomics.store,st=Atomics.compareExchange,nt;c.wasmBinary&&(nt=c.wasmBinary);var at=c.noExitRuntime||!0;typeof WebAssembly!="object"&&Jo("no native wasm support detected");var Te,gt,ct=!1,bn;function Yt(N,D){N||Jo(D)}function Dn(N){var D=c["_"+N];return D}function Ut(N,D,U,Y,pe){var he={string:function(ua){var ol=0;if(ua!=null&&ua!==0){var O1=(ua.length<<2)+1;ol=il(O1),Rs(ua,ol,O1)}return ol},array:function(ua){var ol=il(ua.length);return kr(ua,ol),ol}};function ve(ua){return D==="string"?oa(ua):D==="boolean"?Boolean(ua):ua}var Ce=Dn(N),_t=[],La=0;if(Y)for(var za=0;za<Y.length;za++){var ch=he[U[za]];ch?(La===0&&(La=sb()),_t[za]=ch(Y[za])):_t[za]=Y[za]}var Ap=Ce.apply(null,_t);function R$(ua){return La!==0&&oh(La),ve(ua)}return Ap=R$(Ap),Ap}function Jt(N,D,U,Y){U=U||[];var pe=U.every(function(ve){return ve==="number"}),he=D!=="string";return he&&pe&&!Y?Dn(N):function(){return Ut(N,D,U,arguments,Y)}}var Da=1;function Rn(N){var D=new TextDecoder(N);this.decode=U=>(U.buffer instanceof SharedArrayBuffer&&(U=new Uint8Array(U)),D.decode.call(D,U))}var Gt=typeof TextDecoder!="undefined"?new Rn("utf8"):void 0;function ia(N,D,U){for(var Y=D+U,pe=D;N[pe]&&!(pe>=Y);)++pe;if(pe-D>16&&N.subarray&&Gt)return Gt.decode(N.subarray(D,pe));for(var he="";D<pe;){var ve=N[D++];if(!(ve&128)){he+=String.fromCharCode(ve);continue}var Ce=N[D++]&63;if((ve&224)==192){he+=String.fromCharCode((ve&31)<<6|Ce);continue}var _t=N[D++]&63;if((ve&240)==224?ve=(ve&15)<<12|Ce<<6|_t:ve=(ve&7)<<18|Ce<<12|_t<<6|N[D++]&63,ve<65536)he+=String.fromCharCode(ve);else{var La=ve-65536;he+=String.fromCharCode(55296|La>>10,56320|La&1023)}}return he}function oa(N,D){return N?ia(i(),N,D):""}function Hr(N,D,U,Y){if(!(Y>0))return 0;for(var pe=U,he=U+Y-1,ve=0;ve<N.length;++ve){var Ce=N.charCodeAt(ve);if(Ce>=55296&&Ce<=57343){var _t=N.charCodeAt(++ve);Ce=65536+((Ce&1023)<<10)|_t&1023}if(Ce<=127){if(U>=he)break;D[U++]=Ce}else if(Ce<=2047){if(U+1>=he)break;D[U++]=192|Ce>>6,D[U++]=128|Ce&63}else if(Ce<=65535){if(U+2>=he)break;D[U++]=224|Ce>>12,D[U++]=128|Ce>>6&63,D[U++]=128|Ce&63}else{if(U+3>=he)break;D[U++]=240|Ce>>18,D[U++]=128|Ce>>12&63,D[U++]=128|Ce>>6&63,D[U++]=128|Ce&63}}return D[U]=0,U-pe}function Rs(N,D,U){return Hr(N,i(),D,U)}function $d(N){for(var D=0,U=0;U<N.length;++U){var Y=N.charCodeAt(U);Y>=55296&&Y<=57343&&(Y=65536+((Y&1023)<<10)|N.charCodeAt(++U)&1023),Y<=127?++D:Y<=2047?D+=2:Y<=65535?D+=3:D+=4}return D}var jr=typeof TextDecoder!="undefined"?new Rn("utf-16le"):void 0;function kr(N,D){s().set(N,D)}function bp(N,D,U){for(var Y=0;Y<N.length;++Y)s()[D++>>0]=N.charCodeAt(Y);U||(s()[D>>0]=0)}function Xo(N,D){return N%D>0&&(N+=D-N%D),N}var xn,Fd,Dd,xp,Rd,Md,y1,Pd,Od;C&&(xn=c.buffer);function Ra(N){xn=N,c.HEAP8=Fd=new Int8Array(N),c.HEAP16=xp=new Int16Array(N),c.HEAP32=Md=new Int32Array(N),c.HEAPU8=Dd=new Uint8Array(N),c.HEAPU16=Rd=new Uint16Array(N),c.HEAPU32=y1=new Uint32Array(N),c.HEAPF32=Pd=new Float32Array(N),c.HEAPF64=Od=new Float64Array(N)}var Ld=c.INITIAL_MEMORY||16777216;if(C)Te=c.wasmMemory,xn=c.buffer;else if(c.wasmMemory)Te=c.wasmMemory;else if(Te=new WebAssembly.Memory({initial:Ld/65536,maximum:32768,shared:!0}),!(Te.buffer instanceof SharedArrayBuffer))throw Z("requested a shared WebAssembly.Memory but the returned buffer is not a SharedArrayBuffer, indicating that while the browser has SharedArrayBuffer it does not have WebAssembly threads support - you may need to set a flag"),T&&console.log("(on node you may need: --experimental-wasm-threads --experimental-wasm-bulk-memory and also use a recent version)"),Error("bad memory");Te&&(xn=Te.buffer),Ld=xn.byteLength,Ra(xn);var la,Yo=[],qr=[],Ag=[],zd=[],Ms=!1,$g=!1,Wd=0;function Ps(){return at||Wd>0}function vn(){if(c.preRun)for(typeof c.preRun=="function"&&(c.preRun=[c.preRun]);c.preRun.length;)b1(c.preRun.shift());Gd(Yo)}function vp(){Ms=!0,!C&&Gd(qr)}function Fg(){C||(_e.terminateAllThreads(),$g=!0)}function Dg(){if(!C){if(c.postRun)for(typeof c.postRun=="function"&&(c.postRun=[c.postRun]);c.postRun.length;)wp(c.postRun.shift());Gd(zd)}}function b1(N){Yo.unshift(N)}function x1(N){qr.unshift(N)}function wp(N){zd.unshift(N)}var Kr=0,Bd=null,Ma=null;function kp(N){Kr++,c.monitorRunDependencies&&c.monitorRunDependencies(Kr)}function v1(N){if(Kr--,c.monitorRunDependencies&&c.monitorRunDependencies(Kr),Kr==0&&(Bd!==null&&(clearInterval(Bd),Bd=null),Ma)){var D=Ma;Ma=null,D()}}c.preloadedImages={},c.preloadedAudios={};function Jo(N){C?postMessage({cmd:"onAbort",arg:N}):c.onAbort&&c.onAbort(N),N="Aborted("+N+")",Z(N),ct=!0,bn=1,N+=". Build with -s ASSERTIONS=1 for more info.";var D=new WebAssembly.RuntimeError(N);throw m(D),D}var Rg="data:application/octet-stream;base64,";function Ip(N){return N.startsWith(Rg)}function Vd(N){return N.startsWith("file://")}var wn;wn="tfjs-backend-wasm-threaded-simd.wasm",Ip(wn)||(wn=$(wn));function Ud(N){try{if(N==wn&&nt)return new Uint8Array(nt);if(S)return S(N);throw"both async and sync fetching of the wasm failed"}catch(D){Jo(D)}}function Zo(){if(!nt&&(v||w)){if(typeof fetch=="function"&&!Vd(wn))return fetch(wn,{credentials:"same-origin"}).then(function(N){if(!N.ok)throw"failed to load wasm binary file at '"+wn+"'";return N.arrayBuffer()}).catch(function(){return Ud(wn)});if(F)return new Promise(function(N,D){F(wn,function(U){N(new Uint8Array(U))},D)})}return Promise.resolve().then(function(){return Ud(wn)})}function Mg(){var N={env:nh,wasi_snapshot_preview1:nh};function D(ve,Ce){var _t=ve.exports;if(c.asm=_t,Vg(c.asm.emscripten_tls_init),la=c.asm.__indirect_function_table,x1(c.asm.__wasm_call_ctors),gt=Ce,!C){var La=_e.unusedWorkers.length;_e.unusedWorkers.forEach(function(za){_e.loadWasmModuleToWorker(za,function(){--La||v1("wasm-instantiate")})})}}C||kp("wasm-instantiate");function U(ve){D(ve.instance,ve.module)}function Y(ve){return Zo().then(function(Ce){return WebAssembly.instantiate(Ce,N)}).then(function(Ce){return Ce}).then(ve,function(Ce){Z("failed to asynchronously prepare wasm: "+Ce),Jo(Ce)})}function pe(){return!nt&&typeof WebAssembly.instantiateStreaming=="function"&&!Ip(wn)&&!Vd(wn)&&typeof fetch=="function"?fetch(wn,{credentials:"same-origin"}).then(function(ve){var Ce=WebAssembly.instantiateStreaming(ve,N);return Ce.then(U,function(_t){return Z("wasm streaming compile failed: "+_t),Z("falling back to ArrayBuffer instantiation"),Y(U)})}):Y(U)}if(c.instantiateWasm)try{var he=c.instantiateWasm(N,D);return he}catch(ve){return Z("Module.instantiateWasm callback failed with error: "+ve),!1}return pe().catch(m),{}}var w1,k1,Pg={};function Gd(N){for(;N.length>0;){var D=N.shift();if(typeof D=="function"){D(c);continue}var U=D.func;typeof U=="number"?D.arg===void 0?el(U)():el(U)(D.arg):U(D.arg===void 0?null:D.arg)}}function Qo(N){var D=sb(),U=N();return oh(D),U}function VA(N){return N}function I1(N){var D=/\b_Z[\w\d_]+/g;return N.replace(D,function(U){var Y=U;return U===Y?U:Y+" ["+U+"]"})}function Og(N){u()[N>>2]=0;var D=_e.pthreads[N];delete _e.pthreads[N],D.worker.terminate(),rb(N),_e.runningWorkers.splice(_e.runningWorkers.indexOf(D.worker),1),D.worker.pthread=void 0}function Lg(N){var D=_e.pthreads[N];D.worker.postMessage({cmd:"cancel"})}function Hd(N){var D=_e.pthreads[N];if(D){u()[N>>2]=0;var U=D.worker;_e.returnWorkerToPool(U)}}function jd(N){$$(N)}function zg(N){if(N instanceof Ep||N=="unwind")return bn;x(1,N)}var _e={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],init:function(){C?_e.initWorker():_e.initMainThread()},initMainThread:function(){for(var N=8,D=0;D<N;++D)_e.allocateUnusedWorker()},initWorker:function(){at=!1},pthreads:{},setExitStatus:function(N){bn=N},terminateAllThreads:function(){for(var N in _e.pthreads){var D=_e.pthreads[N];D&&D.worker&&_e.returnWorkerToPool(D.worker)}for(var U=0;U<_e.unusedWorkers.length;++U){var Y=_e.unusedWorkers[U];Y.terminate()}_e.unusedWorkers=[]},returnWorkerToPool:function(N){_e.runWithoutMainThreadQueuedCalls(function(){delete _e.pthreads[N.pthread.threadInfoStruct],_e.unusedWorkers.push(N),_e.runningWorkers.splice(_e.runningWorkers.indexOf(N),1),rb(N.pthread.threadInfoStruct),N.pthread=void 0})},runWithoutMainThreadQueuedCalls:function(N){u()[P1>>2]=0;try{N()}finally{u()[P1>>2]=1}},receiveObjectTransfer:function(N){},threadInit:function(){for(var N in _e.tlsInitFunctions)_e.tlsInitFunctions[N]()},loadWasmModuleToWorker:function(N,D){N.onmessage=U=>{var Y=U.data,pe=Y.cmd;if(N.pthread&&(_e.currentProxiedOperationCallerThread=N.pthread.threadInfoStruct),Y.targetThread&&Y.targetThread!=ih()){var he=_e.pthreads[Y.targetThread];he?he.worker.postMessage(Y,Y.transferList):Z('Internal error! Worker sent a message "'+pe+'" to target pthread '+Y.targetThread+", but that thread no longer exists!"),_e.currentProxiedOperationCallerThread=void 0;return}pe==="processQueuedMainThreadWork"?$1():pe==="spawnThread"?Kd(Y):pe==="cleanupThread"?Hd(Y.thread):pe==="killThread"?Og(Y.thread):pe==="cancelThread"?Lg(Y.thread):pe==="loaded"?(N.loaded=!0,D&&D(N),N.runPthread&&(N.runPthread(),delete N.runPthread)):pe==="print"?re("Thread "+Y.threadId+": "+Y.text):pe==="printErr"?Z("Thread "+Y.threadId+": "+Y.text):pe==="alert"?alert("Thread "+Y.threadId+": "+Y.text):Y.target==="setimmediate"?N.postMessage(Y):pe==="onAbort"?c.onAbort&&c.onAbort(Y.arg):Z("worker sent an unknown command "+pe),_e.currentProxiedOperationCallerThread=void 0},N.onerror=U=>{var Y="worker sent an error!";throw Z(Y+" "+U.filename+":"+U.lineno+": "+U.message),U},T&&(N.on("message",function(U){N.onmessage({data:U})}),N.on("error",function(U){N.onerror(U)}),N.on("detachedExit",function(){})),N.postMessage({cmd:"load",urlOrBlob:c.mainScriptUrlOrBlob||a,wasmMemory:Te,wasmModule:gt})},allocateUnusedWorker:function(){var N=$("tfjs-backend-wasm-threaded-simd.worker.js");_e.unusedWorkers.push(new Worker(N))},getNewWorker:function(){return _e.unusedWorkers.length==0&&(_e.allocateUnusedWorker(),_e.loadWasmModuleToWorker(_e.unusedWorkers[0])),_e.unusedWorkers.pop()}};function Wg(){var N=ih(),D=u()[N+44>>2],U=u()[N+48>>2],Y=D-U;M1(D,Y),oh(D)}c.establishStackSpace=Wg;function qd(N){if(C)return zs(1,0,N);try{jd(N)}catch(D){zg(D)}}var Os=[];function el(N){var D=Os[N];return D||(N>=Os.length&&(Os.length=N+1),Os[N]=D=la.get(N)),D}function Bg(N,D){return el(N)(D)}c.invokeEntryPoint=Bg;function S1(){var N=new Error;if(!N.stack){try{throw new Error}catch(D){N=D}if(!N.stack)return"(no stack trace available)"}return N.stack.toString()}function Vg(N,D,U){_e.tlsInitFunctions.push(N)}function N1(N,D){la.set(N,D),Os[N]=D}var Ls;T?Ls=()=>{var N=process.hrtime();return N[0]*1e3+N[1]/1e6}:C?Ls=()=>performance.now()-c.__performance_now_clock_drift:Ls=()=>performance.now();var Ug=!0;function Gg(N){return u()[A1()>>2]=N,N}function Hg(N,D){var U;if(N===0)U=Date.now();else if((N===1||N===4)&&Ug)U=Ls();else return Gg(28),-1;return u()[D>>2]=U/1e3|0,u()[D+4>>2]=U%1e3*1e3*1e3|0,0}function jg(N,D){return Hg(N,D)}function qg(N){F1(N,!w,1,!v),_e.threadInit()}function Kg(N){C?postMessage({cmd:"cleanupThread",thread:N}):Hd(N)}function Kd(N){var D=_e.getNewWorker();if(!D)return 6;_e.runningWorkers.push(D);var U=_e.pthreads[N.pthread_ptr]={worker:D,threadInfoStruct:N.pthread_ptr};D.pthread=U;var Y={cmd:"run",start_routine:N.startRoutine,arg:N.arg,threadInfoStruct:N.pthread_ptr};return D.runPthread=()=>{Y.time=performance.now(),D.postMessage(Y,N.transferList)},D.loaded&&(D.runPthread(),delete D.runPthread),0}function Xg(N,D,U,Y){if(typeof SharedArrayBuffer=="undefined")return Z("Current environment does not support SharedArrayBuffer, pthreads are not available!"),6;var pe=[],he=0;if(C&&(pe.length===0||he))return D1(687865856,N,D,U,Y);if(he)return he;var ve={startRoutine:U,pthread_ptr:N,arg:Y,transferList:pe};return C?(ve.cmd="spawnThread",postMessage(ve,pe),0):Kd(ve)}function Yg(){return 2097152}function Jg(N,D){if(N==D)postMessage({cmd:"processQueuedMainThreadWork"});else if(C)postMessage({targetThread:N,cmd:"processThreadQueue"});else{var U=_e.pthreads[N],Y=U&&U.worker;if(!Y)return;Y.postMessage({cmd:"processThreadQueue"})}return 1}function Zg(){Jo("")}function Qg(){T||w||ae("Blocking on the main thread is very dangerous, see https://emscripten.org/docs/porting/pthreads.html#blocking-on-the-main-browser-thread")}function Xd(){return 2147483648}function ey(N,D,U){i().copyWithin(N,D,D+U)}function ty(){return T?dF().cpus().length:navigator.hardwareConcurrency}function zs(N,D){var U=arguments.length-2,Y=arguments;return Qo(function(){for(var pe=U,he=il(pe*8),ve=he>>3,Ce=0;Ce<U;Ce++){var _t=Y[2+Ce];d()[ve+Ce]=_t}return R1(N,pe,he,D)})}var Sp=[];function ny(N,D,U){Sp.length=D;for(var Y=U>>3,pe=0;pe<D;pe++)Sp[pe]=d()[Y+pe];var he=N<0,ve=he?Pg[-N-1]:wy[N];return ve.apply(null,Sp)}function ay(N){try{return Te.grow(N-xn.byteLength+65535>>>16),Ra(Te.buffer),1}catch(D){}}function ry(N){var D=i().length;if(N=N>>>0,N<=D)return!1;var U=Xd();if(N>U)return!1;for(var Y=1;Y<=4;Y*=2){var pe=D*(1+.2/Y);pe=Math.min(pe,N+100663296);var he=Math.min(U,Xo(Math.max(N,pe),65536)),ve=ay(he);if(ve)return!0}return!1}var Ve={inEventHandler:0,removeAllEventListeners:function(){for(var N=Ve.eventHandlers.length-1;N>=0;--N)Ve._removeHandler(N);Ve.eventHandlers=[],Ve.deferredCalls=[]},registerRemoveEventListeners:function(){Ve.removeEventListenersRegistered||(Ag.push(Ve.removeAllEventListeners),Ve.removeEventListenersRegistered=!0)},deferredCalls:[],deferCall:function(N,D,U){function Y(ve,Ce){if(ve.length!=Ce.length)return!1;for(var _t in ve)if(ve[_t]!=Ce[_t])return!1;return!0}for(var pe in Ve.deferredCalls){var he=Ve.deferredCalls[pe];if(he.targetFunction==N&&Y(he.argsList,U))return}Ve.deferredCalls.push({targetFunction:N,precedence:D,argsList:U}),Ve.deferredCalls.sort(function(ve,Ce){return ve.precedence<Ce.precedence})},removeDeferredCalls:function(N){for(var D=0;D<Ve.deferredCalls.length;++D)Ve.deferredCalls[D].targetFunction==N&&(Ve.deferredCalls.splice(D,1),--D)},canPerformEventHandlerRequests:function(){return Ve.inEventHandler&&Ve.currentEventHandler.allowsDeferredCalls},runDeferredCalls:function(){if(Ve.canPerformEventHandlerRequests())for(var N=0;N<Ve.deferredCalls.length;++N){var D=Ve.deferredCalls[N];Ve.deferredCalls.splice(N,1),--N,D.targetFunction.apply(null,D.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:function(N,D){for(var U=0;U<Ve.eventHandlers.length;++U)Ve.eventHandlers[U].target==N&&(!D||D==Ve.eventHandlers[U].eventTypeString)&&Ve._removeHandler(U--)},_removeHandler:function(N){var D=Ve.eventHandlers[N];D.target.removeEventListener(D.eventTypeString,D.eventListenerFunc,D.useCapture),Ve.eventHandlers.splice(N,1)},registerOrRemoveHandler:function(N){var D=function(Y){++Ve.inEventHandler,Ve.currentEventHandler=N,Ve.runDeferredCalls(),N.handlerFunc(Y),Ve.runDeferredCalls(),--Ve.inEventHandler};if(N.callbackfunc)N.eventListenerFunc=D,N.target.addEventListener(N.eventTypeString,D,N.useCapture),Ve.eventHandlers.push(N),Ve.registerRemoveEventListeners();else for(var U=0;U<Ve.eventHandlers.length;++U)Ve.eventHandlers[U].target==N.target&&Ve.eventHandlers[U].eventTypeString==N.eventTypeString&&Ve._removeHandler(U--)},queueEventHandlerOnThread_iiii:function(N,D,U,Y,pe){Qo(function(){var he=il(12);u()[he>>2]=U,u()[he+4>>2]=Y,u()[he+8>>2]=pe,ab(N,637534208,D,Y,he)})},getTargetThreadForEventCallback:function(N){switch(N){case 1:return 0;case 2:return _e.currentProxiedOperationCallerThread;default:return N}},getNodeNameForTarget:function(N){return N?N==window?"#window":N==screen?"#screen":N&&N.nodeName?N.nodeName:"":""},fullscreenEnabled:function(){return document.fullscreenEnabled||document.webkitFullscreenEnabled}};function sy(N){var D=$d(N)+1,U=nb(D);return Rs(N,U,D),U}function iy(N,D,U,Y){Qo(function(){var pe=il(12),he=0;D&&(he=sy(D)),u()[pe>>2]=he,u()[pe+4>>2]=U,u()[pe+8>>2]=Y,ab(N,657457152,0,he,pe)})}function oy(N,D,U,Y){D=D?oa(D):"",iy(N,D,U,Y)}function ly(N){return N>2?oa(N):N}var uy=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];function py(N){N=ly(N);var D=uy[N]||(typeof document!="undefined"?document.querySelector(N):void 0);return D}function Np(N){return py(N)}function Yd(N,D,U){var Y=Np(N);if(!Y)return-4;if(Y.canvasSharedPtr&&(u()[Y.canvasSharedPtr>>2]=D,u()[Y.canvasSharedPtr+4>>2]=U),Y.offscreenCanvas||!Y.controlTransferredOffscreen){Y.offscreenCanvas&&(Y=Y.offscreenCanvas);var pe=!1;if(Y.GLctxObject&&Y.GLctxObject.GLctx){var he=Y.GLctxObject.GLctx.getParameter(2978);pe=he[0]===0&&he[1]===0&&he[2]===Y.width&&he[3]===Y.height}Y.width=D,Y.height=U,pe&&Y.GLctxObject.GLctx.viewport(0,0,D,U)}else if(Y.canvasSharedPtr){var ve=u()[Y.canvasSharedPtr+8>>2];return oy(ve,N,D,U),1}else return-4;return 0}function Jd(N,D,U){return C?zs(2,1,N,D,U):Yd(N,D,U)}function cy(N,D,U){var Y=Np(N);return Y?Yd(N,D,U):Jd(N,D,U)}function dy(){throw"unwind"}function hy(N){var D=N.getExtension("ANGLE_instanced_arrays");if(D)return N.vertexAttribDivisor=function(U,Y){D.vertexAttribDivisorANGLE(U,Y)},N.drawArraysInstanced=function(U,Y,pe,he){D.drawArraysInstancedANGLE(U,Y,pe,he)},N.drawElementsInstanced=function(U,Y,pe,he,ve){D.drawElementsInstancedANGLE(U,Y,pe,he,ve)},1}function my(N){var D=N.getExtension("OES_vertex_array_object");if(D)return N.createVertexArray=function(){return D.createVertexArrayOES()},N.deleteVertexArray=function(U){D.deleteVertexArrayOES(U)},N.bindVertexArray=function(U){D.bindVertexArrayOES(U)},N.isVertexArray=function(U){return D.isVertexArrayOES(U)},1}function fy(N){var D=N.getExtension("WEBGL_draw_buffers");if(D)return N.drawBuffers=function(U,Y){D.drawBuffersWEBGL(U,Y)},1}function gy(N){return!!(N.multiDrawWebgl=N.getExtension("WEBGL_multi_draw"))}var Ct={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function(N){Ct.lastError||(Ct.lastError=N)},getNewId:function(N){for(var D=Ct.counter++,U=N.length;U<D;U++)N[U]=null;return D},getSource:function(N,D,U,Y){for(var pe="",he=0;he<D;++he){var ve=Y?u()[Y+he*4>>2]:-1;pe+=oa(u()[U+he*4>>2],ve<0?void 0:ve)}return pe},createContext:function(N,D){N.getContextSafariWebGL2Fixed||(N.getContextSafariWebGL2Fixed=N.getContext,N.getContext=function(pe,he){var ve=N.getContextSafariWebGL2Fixed(pe,he);return pe=="webgl"==ve instanceof WebGLRenderingContext?ve:null});var U=N.getContext("webgl",D);if(!U)return 0;var Y=Ct.registerContext(U,D);return Y},registerContext:function(N,D){var U=nb(8);u()[U+4>>2]=ih();var Y={handle:U,attributes:D,version:D.majorVersion,GLctx:N};return N.canvas&&(N.canvas.GLctxObject=Y),Ct.contexts[U]=Y,(typeof D.enableExtensionsByDefault=="undefined"||D.enableExtensionsByDefault)&&Ct.initExtensions(Y),U},makeContextCurrent:function(N){return Ct.currentContext=Ct.contexts[N],c.ctx=th=Ct.currentContext&&Ct.currentContext.GLctx,!(N&&!th)},getContext:function(N){return Ct.contexts[N]},deleteContext:function(N){Ct.currentContext===Ct.contexts[N]&&(Ct.currentContext=null),typeof Ve=="object"&&Ve.removeAllHandlersOnTarget(Ct.contexts[N].GLctx.canvas),Ct.contexts[N]&&Ct.contexts[N].GLctx.canvas&&(Ct.contexts[N].GLctx.canvas.GLctxObject=void 0),E1(Ct.contexts[N].handle),Ct.contexts[N]=null},initExtensions:function(N){if(N||(N=Ct.currentContext),!N.initExtensionsDone){N.initExtensionsDone=!0;var D=N.GLctx;hy(D),my(D),fy(D),D.disjointTimerQueryExt=D.getExtension("EXT_disjoint_timer_query"),gy(D);var U=D.getSupportedExtensions()||[];U.forEach(function(Y){!Y.includes("lose_context")&&!Y.includes("debug")&&D.getExtension(Y)})}}},yy=["default","low-power","high-performance"];function by(N,D){var U=D>>2,Y=u()[U+6],pe={alpha:!!u()[U+0],depth:!!u()[U+1],stencil:!!u()[U+2],antialias:!!u()[U+3],premultipliedAlpha:!!u()[U+4],preserveDrawingBuffer:!!u()[U+5],powerPreference:yy[Y],failIfMajorPerformanceCaveat:!!u()[U+7],majorVersion:u()[U+8],minorVersion:u()[U+9],enableExtensionsByDefault:u()[U+10],explicitSwapControl:u()[U+11],proxyContextToMainThread:u()[U+12],renderViaOffscreenBackBuffer:u()[U+13]},he=Np(N);if(!he||pe.explicitSwapControl)return 0;var ve=Ct.createContext(he,pe);return ve}function xy(N,D){return by(N,D)}var tl={mappings:{},buffers:[null,[],[]],printChar:function(N,D){var U=tl.buffers[N];D===0||D===10?((N===1?re:Z)(ia(U,0)),U.length=0):U.push(D)},varargs:void 0,get:function(){tl.varargs+=4;var N=u()[tl.varargs-4>>2];return N},getStr:function(N){var D=oa(N);return D},get64:function(N,D){return N}};function Zd(N){return C?zs(3,1,N):0}function Qd(N,D,U,Y,pe){if(C)return zs(4,1,N,D,U,Y,pe)}function eh(N,D,U,Y){if(C)return zs(5,1,N,D,U,Y);for(var pe=0,he=0;he<U;he++){var ve=u()[D>>2],Ce=u()[D+4>>2];D+=8;for(var _t=0;_t<Ce;_t++)tl.printChar(N,i()[ve+_t]);pe+=Ce}return u()[Y>>2]=pe,0}function vy(N){$e(N)}_e.init();var th,wy=[null,qd,Jd,Zd,Qd,eh],T1=!1,nh={__clock_gettime:jg,__emscripten_init_main_thread_js:qg,__emscripten_thread_cleanup:Kg,__pthread_create_js:Xg,_emscripten_default_pthread_stack_size:Yg,_emscripten_notify_thread_queue:Jg,abort:Zg,emscripten_check_blocking_allowed:Qg,emscripten_get_heap_max:Xd,emscripten_get_now:Ls,emscripten_memcpy_big:ey,emscripten_num_logical_cores:ty,emscripten_receive_on_main_thread_js:ny,emscripten_resize_heap:ry,emscripten_set_canvas_element_size:cy,emscripten_unwind_to_js_event_loop:dy,emscripten_webgl_create_context:xy,exit:jd,fd_close:Zd,fd_seek:Qd,fd_write:eh,memory:Te||c.wasmMemory,setTempRet0:vy},C1=Mg(),ky=c.___wasm_call_ctors=function(){return(ky=c.___wasm_call_ctors=c.asm.__wasm_call_ctors).apply(null,arguments)},Iy=c._init=function(){return(Iy=c._init=c.asm.init).apply(null,arguments)},Sy=c._init_with_threads_count=function(){return(Sy=c._init_with_threads_count=c.asm.init_with_threads_count).apply(null,arguments)},Ny=c._get_threads_count=function(){return(Ny=c._get_threads_count=c.asm.get_threads_count).apply(null,arguments)},Ty=c._register_tensor=function(){return(Ty=c._register_tensor=c.asm.register_tensor).apply(null,arguments)},Cy=c._dispose_data=function(){return(Cy=c._dispose_data=c.asm.dispose_data).apply(null,arguments)},_y=c._dispose=function(){return(_y=c._dispose=c.asm.dispose).apply(null,arguments)},Ey=c._Abs=function(){return(Ey=c._Abs=c.asm.Abs).apply(null,arguments)},Ay=c._Add=function(){return(Ay=c._Add=c.asm.Add).apply(null,arguments)},$y=c._AddN=function(){return($y=c._AddN=c.asm.AddN).apply(null,arguments)},Fy=c._All=function(){return(Fy=c._All=c.asm.All).apply(null,arguments)},Dy=c._Any=function(){return(Dy=c._Any=c.asm.Any).apply(null,arguments)},Ry=c._ArgMax=function(){return(Ry=c._ArgMax=c.asm.ArgMax).apply(null,arguments)},My=c._AvgPool=function(){return(My=c._AvgPool=c.asm.AvgPool).apply(null,arguments)},Py=c._BatchMatMul=function(){return(Py=c._BatchMatMul=c.asm.BatchMatMul).apply(null,arguments)},Oy=c._Ceil=function(){return(Oy=c._Ceil=c.asm.Ceil).apply(null,arguments)},Ly=c._ClipByValue=function(){return(Ly=c._ClipByValue=c.asm.ClipByValue).apply(null,arguments)},zy=c._Conv2D=function(){return(zy=c._Conv2D=c.asm.Conv2D).apply(null,arguments)},Wy=c._Conv2DBackpropInput=function(){return(Wy=c._Conv2DBackpropInput=c.asm.Conv2DBackpropInput).apply(null,arguments)},By=c._Cos=function(){return(By=c._Cos=c.asm.Cos).apply(null,arguments)},Vy=c._Cosh=function(){return(Vy=c._Cosh=c.asm.Cosh).apply(null,arguments)},Uy=c._CropAndResize=function(){return(Uy=c._CropAndResize=c.asm.CropAndResize).apply(null,arguments)},Gy=c._Cumprod=function(){return(Gy=c._Cumprod=c.asm.Cumprod).apply(null,arguments)},Hy=c._Cumsum=function(){return(Hy=c._Cumsum=c.asm.Cumsum).apply(null,arguments)},jy=c._DepthToSpace=function(){return(jy=c._DepthToSpace=c.asm.DepthToSpace).apply(null,arguments)},qy=c._DepthwiseConv2dNative=function(){return(qy=c._DepthwiseConv2dNative=c.asm.DepthwiseConv2dNative).apply(null,arguments)},Ky=c._Elu=function(){return(Ky=c._Elu=c.asm.Elu).apply(null,arguments)},Xy=c._Equal=function(){return(Xy=c._Equal=c.asm.Equal).apply(null,arguments)},Yy=c._Exp=function(){return(Yy=c._Exp=c.asm.Exp).apply(null,arguments)},Jy=c._FlipLeftRight=function(){return(Jy=c._FlipLeftRight=c.asm.FlipLeftRight).apply(null,arguments)},ah=c._Floor=function(){return(ah=c._Floor=c.asm.Floor).apply(null,arguments)},rh=c._FloorDiv=function(){return(rh=c._FloorDiv=c.asm.FloorDiv).apply(null,arguments)},Tp=c._FusedBatchNorm=function(){return(Tp=c._FusedBatchNorm=c.asm.FusedBatchNorm).apply(null,arguments)},Zy=c._FusedConv2D=function(){return(Zy=c._FusedConv2D=c.asm.FusedConv2D).apply(null,arguments)},Qy=c._FusedDepthwiseConv2D=function(){return(Qy=c._FusedDepthwiseConv2D=c.asm.FusedDepthwiseConv2D).apply(null,arguments)},nl=c._Gather=function(){return(nl=c._Gather=c.asm.Gather).apply(null,arguments)},Cp=c._GatherNd=function(){return(Cp=c._GatherNd=c.asm.GatherNd).apply(null,arguments)},_p=c._Greater=function(){return(_p=c._Greater=c.asm.Greater).apply(null,arguments)},_1=c._GreaterEqual=function(){return(_1=c._GreaterEqual=c.asm.GreaterEqual).apply(null,arguments)},al=c._LeakyRelu=function(){return(al=c._LeakyRelu=c.asm.LeakyRelu).apply(null,arguments)},rl=c._Less=function(){return(rl=c._Less=c.asm.Less).apply(null,arguments)},eb=c._LessEqual=function(){return(eb=c._LessEqual=c.asm.LessEqual).apply(null,arguments)},G=c._Log=function(){return(G=c._Log=c.asm.Log).apply(null,arguments)},te=c._LogicalAnd=function(){return(te=c._LogicalAnd=c.asm.LogicalAnd).apply(null,arguments)},de=c._Max=function(){return(de=c._Max=c.asm.Max).apply(null,arguments)},Se=c._MaxPool=function(){return(Se=c._MaxPool=c.asm.MaxPool).apply(null,arguments)},Ze=c._Maximum=function(){return(Ze=c._Maximum=c.asm.Maximum).apply(null,arguments)},rt=c._Mean=function(){return(rt=c._Mean=c.asm.Mean).apply(null,arguments)},Ue=c._Min=function(){return(Ue=c._Min=c.asm.Min).apply(null,arguments)},Be=c._Minimum=function(){return(Be=c._Minimum=c.asm.Minimum).apply(null,arguments)},Lt=c._MirrorPad=function(){return(Lt=c._MirrorPad=c.asm.MirrorPad).apply(null,arguments)},Pa=c._Multiply=function(){return(Pa=c._Multiply=c.asm.Multiply).apply(null,arguments)},Oa=c._Neg=function(){return(Oa=c._Neg=c.asm.Neg).apply(null,arguments)},sl=c._NonMaxSuppressionV3=function(){return(sl=c._NonMaxSuppressionV3=c.asm.NonMaxSuppressionV3).apply(null,arguments)},Ws=c._NonMaxSuppressionV4=function(){return(Ws=c._NonMaxSuppressionV4=c.asm.NonMaxSuppressionV4).apply(null,arguments)},tb=c._NonMaxSuppressionV5=function(){return(tb=c._NonMaxSuppressionV5=c.asm.NonMaxSuppressionV5).apply(null,arguments)},Mn=c._NotEqual=function(){return(Mn=c._NotEqual=c.asm.NotEqual).apply(null,arguments)},Xr=c._OneHot=function(){return(Xr=c._OneHot=c.asm.OneHot).apply(null,arguments)},sh=c._PadV2=function(){return(sh=c._PadV2=c.asm.PadV2).apply(null,arguments)},UA=c._Pow=function(){return(UA=c._Pow=c.asm.Pow).apply(null,arguments)},GA=c._Prelu=function(){return(GA=c._Prelu=c.asm.Prelu).apply(null,arguments)},HA=c._Prod=function(){return(HA=c._Prod=c.asm.Prod).apply(null,arguments)},jA=c._RealDiv=function(){return(jA=c._RealDiv=c.asm.RealDiv).apply(null,arguments)},qA=c._Relu=function(){return(qA=c._Relu=c.asm.Relu).apply(null,arguments)},KA=c._Relu6=function(){return(KA=c._Relu6=c.asm.Relu6).apply(null,arguments)},XA=c._ResizeBilinear=function(){return(XA=c._ResizeBilinear=c.asm.ResizeBilinear).apply(null,arguments)},YA=c._Reverse=function(){return(YA=c._Reverse=c.asm.Reverse).apply(null,arguments)},JA=c._RotateWithOffset=function(){return(JA=c._RotateWithOffset=c.asm.RotateWithOffset).apply(null,arguments)},ZA=c._Round=function(){return(ZA=c._Round=c.asm.Round).apply(null,arguments)},QA=c._Rsqrt=function(){return(QA=c._Rsqrt=c.asm.Rsqrt).apply(null,arguments)},e$=c._ScatterNd=function(){return(e$=c._ScatterNd=c.asm.ScatterNd).apply(null,arguments)},t$=c._SelectV2=function(){return(t$=c._SelectV2=c.asm.SelectV2).apply(null,arguments)},n$=c._Sigmoid=function(){return(n$=c._Sigmoid=c.asm.Sigmoid).apply(null,arguments)},a$=c._Sin=function(){return(a$=c._Sin=c.asm.Sin).apply(null,arguments)},r$=c._Softmax=function(){return(r$=c._Softmax=c.asm.Softmax).apply(null,arguments)},s$=c._SparseFillEmptyRows=function(){return(s$=c._SparseFillEmptyRows=c.asm.SparseFillEmptyRows).apply(null,arguments)},i$=c._SparseReshape=function(){return(i$=c._SparseReshape=c.asm.SparseReshape).apply(null,arguments)},o$=c._SparseSegmentReduction=function(){return(o$=c._SparseSegmentReduction=c.asm.SparseSegmentReduction).apply(null,arguments)},l$=c._Sqrt=function(){return(l$=c._Sqrt=c.asm.Sqrt).apply(null,arguments)},u$=c._Square=function(){return(u$=c._Square=c.asm.Square).apply(null,arguments)},p$=c._SquaredDifference=function(){return(p$=c._SquaredDifference=c.asm.SquaredDifference).apply(null,arguments)},c$=c._Step=function(){return(c$=c._Step=c.asm.Step).apply(null,arguments)},d$=c._StridedSlice=function(){return(d$=c._StridedSlice=c.asm.StridedSlice).apply(null,arguments)},h$=c._Sub=function(){return(h$=c._Sub=c.asm.Sub).apply(null,arguments)},m$=c._Sum=function(){return(m$=c._Sum=c.asm.Sum).apply(null,arguments)},f$=c._Tan=function(){return(f$=c._Tan=c.asm.Tan).apply(null,arguments)},g$=c._Tanh=function(){return(g$=c._Tanh=c.asm.Tanh).apply(null,arguments)},y$=c._Tile=function(){return(y$=c._Tile=c.asm.Tile).apply(null,arguments)},b$=c._TopK=function(){return(b$=c._TopK=c.asm.TopK).apply(null,arguments)},x$=c._Transform=function(){return(x$=c._Transform=c.asm.Transform).apply(null,arguments)},v$=c._Transpose=function(){return(v$=c._Transpose=c.asm.Transpose).apply(null,arguments)},w$=c.__FusedMatMul=function(){return(w$=c.__FusedMatMul=c.asm._FusedMatMul).apply(null,arguments)},nb=c._malloc=function(){return(nb=c._malloc=c.asm.malloc).apply(null,arguments)},E1=c._free=function(){return(E1=c._free=c.asm.free).apply(null,arguments)},k$=c._emscripten_tls_init=function(){return(k$=c._emscripten_tls_init=c.asm.emscripten_tls_init).apply(null,arguments)},A1=c.___errno_location=function(){return(A1=c.___errno_location=c.asm.__errno_location).apply(null,arguments)},ih=c._pthread_self=function(){return(ih=c._pthread_self=c.asm.pthread_self).apply(null,arguments)},$1=c._emscripten_main_thread_process_queued_calls=function(){return($1=c._emscripten_main_thread_process_queued_calls=c.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},I$=c.__emscripten_thread_crashed=function(){return(I$=c.__emscripten_thread_crashed=c.asm._emscripten_thread_crashed).apply(null,arguments)},F1=c.__emscripten_thread_init=function(){return(F1=c.__emscripten_thread_init=c.asm._emscripten_thread_init).apply(null,arguments)},S$=c._emscripten_current_thread_process_queued_calls=function(){return(S$=c._emscripten_current_thread_process_queued_calls=c.asm.emscripten_current_thread_process_queued_calls).apply(null,arguments)},N$=c._emscripten_main_browser_thread_id=function(){return(N$=c._emscripten_main_browser_thread_id=c.asm.emscripten_main_browser_thread_id).apply(null,arguments)},T$=c._emscripten_sync_run_in_main_thread_2=function(){return(T$=c._emscripten_sync_run_in_main_thread_2=c.asm.emscripten_sync_run_in_main_thread_2).apply(null,arguments)},D1=c._emscripten_sync_run_in_main_thread_4=function(){return(D1=c._emscripten_sync_run_in_main_thread_4=c.asm.emscripten_sync_run_in_main_thread_4).apply(null,arguments)},R1=c._emscripten_run_in_main_runtime_thread_js=function(){return(R1=c._emscripten_run_in_main_runtime_thread_js=c.asm.emscripten_run_in_main_runtime_thread_js).apply(null,arguments)},ab=c._emscripten_dispatch_to_thread_=function(){return(ab=c._emscripten_dispatch_to_thread_=c.asm.emscripten_dispatch_to_thread_).apply(null,arguments)},rb=c.__emscripten_thread_free_data=function(){return(rb=c.__emscripten_thread_free_data=c.asm._emscripten_thread_free_data).apply(null,arguments)},C$=c.__emscripten_thread_exit=function(){return(C$=c.__emscripten_thread_exit=c.asm._emscripten_thread_exit).apply(null,arguments)},_$=c._memalign=function(){return(_$=c._memalign=c.asm.memalign).apply(null,arguments)},M1=c._emscripten_stack_set_limits=function(){return(M1=c._emscripten_stack_set_limits=c.asm.emscripten_stack_set_limits).apply(null,arguments)},sb=c.stackSave=function(){return(sb=c.stackSave=c.asm.stackSave).apply(null,arguments)},oh=c.stackRestore=function(){return(oh=c.stackRestore=c.asm.stackRestore).apply(null,arguments)},il=c.stackAlloc=function(){return(il=c.stackAlloc=c.asm.stackAlloc).apply(null,arguments)},E$=c.dynCall_iijjiiii=function(){return(E$=c.dynCall_iijjiiii=c.asm.dynCall_iijjiiii).apply(null,arguments)},A$=c.dynCall_jiji=function(){return(A$=c.dynCall_jiji=c.asm.dynCall_jiji).apply(null,arguments)},P1=c.__emscripten_allow_main_runtime_queued_calls=21464;c.cwrap=Jt,c.keepRuntimeAlive=Ps,c.PThread=_e,c.PThread=_e,c.wasmMemory=Te,c.ExitStatus=Ep;var lh;function Ep(N){this.name="ExitStatus",this.message="Program terminated with exit("+N+")",this.status=N}Ma=function N(){lh||ib(),lh||(Ma=N)};function ib(N){if(N=N||y,Kr>0)return;if(C){h(c),vp(),postMessage({cmd:"loaded"});return}if(vn(),Kr>0)return;function D(){lh||(lh=!0,c.calledRun=!0,!ct&&(vp(),h(c),c.onRuntimeInitialized&&c.onRuntimeInitialized(),Dg()))}c.setStatus?(c.setStatus("Running..."),setTimeout(function(){setTimeout(function(){c.setStatus("")},1),D()},1)):D()}c.run=ib;function $$(N,D){if(bn=N,!D&&C)throw qd(N),"unwind";Ps()||Fg(),F$(N)}function F$(N){bn=N,Ps()||(_e.terminateAllThreads(),c.onExit&&c.onExit(N),ct=!0),x(N,new Ep(N))}if(c.preInit)for(typeof c.preInit=="function"&&(c.preInit=[c.preInit]);c.preInit.length>0;)c.preInit.pop()();ib();var uh;f&&(uh={uncaughtException:process.listeners("uncaughtException").filter(function(N){return!f.uncaughtException.indexOf(N)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(N){return!f.unhandledRejection.indexOf(N)>-1})});var ph;if(typeof WasmBackendModule!="undefined")ph=WasmBackendModule;else if(typeof r!="undefined")ph=r;else throw new Error("Could not find wasm module in post.js");if(uh){var D$=ph._dispose;ph._dispose=function(){D$(),uh.uncaughtException.forEach(function(N){process.removeListener("uncaughtException",N)}),uh.unhandledRejection.forEach(function(N){process.removeListener("unhandledRejection",N)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModuleThreadedSimd=n)}),mF=ft((e,t)=>{var n=(()=>{var a=typeof document!="undefined"&&document.currentScript?document.currentScript.src:void 0;return typeof __filename!="undefined"&&(a=a||__filename),function(r){r=r||{};var s=typeof r!="undefined"?r:{},i,o;s.ready=new Promise(function(G,te){i=G,o=te});var l;typeof process!="undefined"&&process.listeners&&(l={uncaughtException:process.listeners("uncaughtException"),unhandledRejection:process.listeners("unhandledRejection")});var u=Object.assign({},s),p=[],d="./this.program",c=(G,te)=>{throw te},h=typeof window=="object",m=typeof importScripts=="function",f=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string",g="";function y(G){return s.locateFile?s.locateFile(G,g):g+G}var b,x,v,w;function T(G){G instanceof Cp||F("exiting due to exception: "+G)}var C,E,$;f?(m?g=Mh().dirname(g)+"/":g=__dirname+"/",$=()=>{E||(C=Ix(),E=Mh())},b=function(G,te){return $(),G=E.normalize(G),C.readFileSync(G,te?void 0:"utf8")},v=G=>{var te=b(G,!0);return te.buffer||(te=new Uint8Array(te)),te},x=(G,te,de)=>{$(),G=E.normalize(G),C.readFile(G,function(Se,Ze){Se?de(Se):te(Ze.buffer)})},process.argv.length>1&&(d=process.argv[1].replace(/\\/g,"/")),p=process.argv.slice(2),process.on("uncaughtException",function(G){if(!(G instanceof Cp))throw G}),process.on("unhandledRejection",function(G){throw G}),c=(G,te)=>{if(xp())throw process.exitCode=G,te;T(te),process.exit(G)},s.inspect=function(){return"[Emscripten Module object]"}):(h||m)&&(m?g=self.location.href:typeof document!="undefined"&&document.currentScript&&(g=document.currentScript.src),a&&(g=a),g.indexOf("blob:")!==0?g=g.substr(0,g.replace(/[?#].*/,"").lastIndexOf("/")+1):g="",b=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.send(null),te.responseText},m&&(v=G=>{var te=new XMLHttpRequest;return te.open("GET",G,!1),te.responseType="arraybuffer",te.send(null),new Uint8Array(te.response)}),x=(G,te,de)=>{var Se=new XMLHttpRequest;Se.open("GET",G,!0),Se.responseType="arraybuffer",Se.onload=()=>{if(Se.status==200||Se.status==0&&Se.response){te(Se.response);return}de()},Se.onerror=de,Se.send(null)},w=G=>document.title=G);var P=s.print||console.log.bind(console),F=s.printErr||console.warn.bind(console);Object.assign(s,u),u=null,s.arguments&&(p=s.arguments),s.thisProgram&&(d=s.thisProgram),s.quit&&(c=s.quit);var S=4;function M(G){M.shown||(M.shown={}),M.shown[G]||(M.shown[G]=1,F(G))}function B(G,te){if(typeof WebAssembly.Function=="function"){for(var de={i:"i32",j:"i64",f:"f32",d:"f64"},Se={parameters:[],results:te[0]=="v"?[]:[de[te[0]]]},Ze=1;Ze<te.length;++Ze)Se.parameters.push(de[te[Ze]]);return new WebAssembly.Function(Se,G)}var rt=[1,0,1,96],Ue=te.slice(0,1),Be=te.slice(1),Lt={i:127,j:126,f:125,d:124};rt.push(Be.length);for(var Ze=0;Ze<Be.length;++Ze)rt.push(Lt[Be[Ze]]);Ue=="v"?rt.push(0):rt=rt.concat([1,Lt[Ue]]),rt[1]=rt.length-2;var Pa=new Uint8Array([0,97,115,109,1,0,0,0].concat(rt,[2,7,1,1,101,1,102,0,0,7,5,1,1,102,0,0])),Oa=new WebAssembly.Module(Pa),sl=new WebAssembly.Instance(Oa,{e:{f:G}}),Ws=sl.exports.f;return Ws}var j=[],q;function K(){if(j.length)return j.pop();try{jr.grow(1)}catch(G){throw G instanceof RangeError?"Unable to grow wasm table. Set ALLOW_TABLE_GROWTH.":G}return jr.length-1}function Q(G,te){for(var de=G;de<G+te;de++){var Se=kp(de);Se&&q.set(Se,de)}}var ee=0,re=G=>{ee=G},Z;s.wasmBinary&&(Z=s.wasmBinary);var ie=s.noExitRuntime||!0;typeof WebAssembly!="object"&&Ms("no native wasm support detected");var ae,le=!1,ue;function we(G,te){G||Ms(te)}function ye(G){var te=s["_"+G];return te}function Ie(G,te,de,Se,Ze){var rt={string:function(Mn){var Xr=0;if(Mn!=null&&Mn!==0){var sh=(Mn.length<<2)+1;Xr=Tp(sh),at(Mn,Xr,sh)}return Xr},array:function(Mn){var Xr=Tp(Mn.length);return ct(Mn,Xr),Xr}};function Ue(Mn){return te==="string"?st(Mn):te==="boolean"?Boolean(Mn):Mn}var Be=ye(G),Lt=[],Pa=0;if(Se)for(var Oa=0;Oa<Se.length;Oa++){var sl=rt[de[Oa]];sl?(Pa===0&&(Pa=ah()),Lt[Oa]=sl(Se[Oa])):Lt[Oa]=Se[Oa]}var Ws=Be.apply(null,Lt);function tb(Mn){return Pa!==0&&rh(Pa),Ue(Mn)}return Ws=tb(Ws),Ws}function Ee(G,te,de,Se){de=de||[];var Ze=de.every(function(Ue){return Ue==="number"}),rt=te!=="string";return rt&&Ze&&!Se?ye(G):function(){return Ie(G,te,de,arguments,Se)}}var $e=1,We=typeof TextDecoder!="undefined"?new TextDecoder("utf8"):void 0;function je(G,te,de){for(var Se=te+de,Ze=te;G[Ze]&&!(Ze>=Se);)++Ze;if(Ze-te>16&&G.subarray&&We)return We.decode(G.subarray(te,Ze));for(var rt="";te<Ze;){var Ue=G[te++];if(!(Ue&128)){rt+=String.fromCharCode(Ue);continue}var Be=G[te++]&63;if((Ue&224)==192){rt+=String.fromCharCode((Ue&31)<<6|Be);continue}var Lt=G[te++]&63;if((Ue&240)==224?Ue=(Ue&15)<<12|Be<<6|Lt:Ue=(Ue&7)<<18|Be<<12|Lt<<6|G[te++]&63,Ue<65536)rt+=String.fromCharCode(Ue);else{var Pa=Ue-65536;rt+=String.fromCharCode(55296|Pa>>10,56320|Pa&1023)}}return rt}function st(G,te){return G?je(Jt,G,te):""}function nt(G,te,de,Se){if(!(Se>0))return 0;for(var Ze=de,rt=de+Se-1,Ue=0;Ue<G.length;++Ue){var Be=G.charCodeAt(Ue);if(Be>=55296&&Be<=57343){var Lt=G.charCodeAt(++Ue);Be=65536+((Be&1023)<<10)|Lt&1023}if(Be<=127){if(de>=rt)break;te[de++]=Be}else if(Be<=2047){if(de+1>=rt)break;te[de++]=192|Be>>6,te[de++]=128|Be&63}else if(Be<=65535){if(de+2>=rt)break;te[de++]=224|Be>>12,te[de++]=128|Be>>6&63,te[de++]=128|Be&63}else{if(de+3>=rt)break;te[de++]=240|Be>>18,te[de++]=128|Be>>12&63,te[de++]=128|Be>>6&63,te[de++]=128|Be&63}}return te[de]=0,de-Ze}function at(G,te,de){return nt(G,Jt,te,de)}function Te(G){for(var te=0,de=0;de<G.length;++de){var Se=G.charCodeAt(de);Se>=55296&&Se<=57343&&(Se=65536+((Se&1023)<<10)|G.charCodeAt(++de)&1023),Se<=127?++te:Se<=2047?te+=2:Se<=65535?te+=3:te+=4}return te}var gt=typeof TextDecoder!="undefined"?new TextDecoder("utf-16le"):void 0;function ct(G,te){Ut.set(G,te)}function bn(G,te,de){for(var Se=0;Se<G.length;++Se)Ut[te++>>0]=G.charCodeAt(Se);de||(Ut[te>>0]=0)}function Yt(G,te){return G%te>0&&(G+=te-G%te),G}var Dn,Ut,Jt,Da,Rn,Gt,ia,oa,Hr;function Rs(G){Dn=G,s.HEAP8=Ut=new Int8Array(G),s.HEAP16=Da=new Int16Array(G),s.HEAP32=Gt=new Int32Array(G),s.HEAPU8=Jt=new Uint8Array(G),s.HEAPU16=Rn=new Uint16Array(G),s.HEAPU32=ia=new Uint32Array(G),s.HEAPF32=oa=new Float32Array(G),s.HEAPF64=Hr=new Float64Array(G)}var $d=s.INITIAL_MEMORY||16777216,jr,kr=[],bp=[],Xo=[],xn=!1,Fd=!1,Dd=0;function xp(){return ie||Dd>0}function Rd(){if(s.preRun)for(typeof s.preRun=="function"&&(s.preRun=[s.preRun]);s.preRun.length;)Od(s.preRun.shift());wp(kr)}function Md(){xn=!0,wp(bp)}function y1(){Fd=!0}function Pd(){if(s.postRun)for(typeof s.postRun=="function"&&(s.postRun=[s.postRun]);s.postRun.length;)Ld(s.postRun.shift());wp(Xo)}function Od(G){kr.unshift(G)}function Ra(G){bp.unshift(G)}function Ld(G){Xo.unshift(G)}var la=0,Yo=null,qr=null;function Ag(G){la++,s.monitorRunDependencies&&s.monitorRunDependencies(la)}function zd(G){if(la--,s.monitorRunDependencies&&s.monitorRunDependencies(la),la==0&&(Yo!==null&&(clearInterval(Yo),Yo=null),qr)){var te=qr;qr=null,te()}}s.preloadedImages={},s.preloadedAudios={};function Ms(G){s.onAbort&&s.onAbort(G),G="Aborted("+G+")",F(G),le=!0,ue=1,G+=". Build with -s ASSERTIONS=1 for more info.";var te=new WebAssembly.RuntimeError(G);throw o(te),te}var $g="data:application/octet-stream;base64,";function Wd(G){return G.startsWith($g)}function Ps(G){return G.startsWith("file://")}var vn;vn="tfjs-backend-wasm.wasm",Wd(vn)||(vn=y(vn));function vp(G){try{if(G==vn&&Z)return new Uint8Array(Z);if(v)return v(G);throw"both async and sync fetching of the wasm failed"}catch(te){Ms(te)}}function Fg(){if(!Z&&(h||m)){if(typeof fetch=="function"&&!Ps(vn))return fetch(vn,{credentials:"same-origin"}).then(function(G){if(!G.ok)throw"failed to load wasm binary file at '"+vn+"'";return G.arrayBuffer()}).catch(function(){return vp(vn)});if(x)return new Promise(function(G,te){x(vn,function(de){G(new Uint8Array(de))},te)})}return Promise.resolve().then(function(){return vp(vn)})}function Dg(){var G={env:Qo,wasi_snapshot_preview1:Qo};function te(Ue,Be){var Lt=Ue.exports;s.asm=Lt,ae=s.asm.memory,Rs(ae.buffer),jr=s.asm.__indirect_function_table,Ra(s.asm.__wasm_call_ctors),zd("wasm-instantiate")}Ag("wasm-instantiate");function de(Ue){te(Ue.instance)}function Se(Ue){return Fg().then(function(Be){return WebAssembly.instantiate(Be,G)}).then(function(Be){return Be}).then(Ue,function(Be){F("failed to asynchronously prepare wasm: "+Be),Ms(Be)})}function Ze(){return!Z&&typeof WebAssembly.instantiateStreaming=="function"&&!Wd(vn)&&!Ps(vn)&&typeof fetch=="function"?fetch(vn,{credentials:"same-origin"}).then(function(Ue){var Be=WebAssembly.instantiateStreaming(Ue,G);return Be.then(de,function(Lt){return F("wasm streaming compile failed: "+Lt),F("falling back to ArrayBuffer instantiation"),Se(de)})}):Se(de)}if(s.instantiateWasm)try{var rt=s.instantiateWasm(G,te);return rt}catch(Ue){return F("Module.instantiateWasm callback failed with error: "+Ue),!1}return Ze().catch(o),{}}var b1,x1;function wp(G){for(;G.length>0;){var te=G.shift();if(typeof te=="function"){te(s);continue}var de=te.func;typeof de=="number"?te.arg===void 0?kp(de)():kp(de)(te.arg):de(te.arg===void 0?null:te.arg)}}function Kr(G){return G}function Bd(G){var te=/\b_Z[\w\d_]+/g;return G.replace(te,function(de){var Se=de;return de===Se?de:Se+" ["+de+"]"})}var Ma=[];function kp(G){var te=Ma[G];return te||(G>=Ma.length&&(Ma.length=G+1),Ma[G]=te=jr.get(G)),te}function v1(){var G=new Error;if(!G.stack){try{throw new Error}catch(te){G=te}if(!G.stack)return"(no stack trace available)"}return G.stack.toString()}function Jo(G,te){jr.set(G,te),Ma[G]=te}function Rg(){Ms("")}function Ip(){return 2147483648}function Vd(G,te,de){Jt.copyWithin(G,te,te+de)}function wn(G){try{return ae.grow(G-Dn.byteLength+65535>>>16),Rs(ae.buffer),1}catch(te){}}function Ud(G){var te=Jt.length;G=G>>>0;var de=Ip();if(G>de)return!1;for(var Se=1;Se<=4;Se*=2){var Ze=te*(1+.2/Se);Ze=Math.min(Ze,G+100663296);var rt=Math.min(de,Yt(Math.max(G,Ze),65536)),Ue=wn(rt);if(Ue)return!0}return!1}var Zo={mappings:{},buffers:[null,[],[]],printChar:function(G,te){var de=Zo.buffers[G];te===0||te===10?((G===1?P:F)(je(de,0)),de.length=0):de.push(te)},varargs:void 0,get:function(){Zo.varargs+=4;var G=Gt[Zo.varargs-4>>2];return G},getStr:function(G){var te=st(G);return te},get64:function(G,te){return G}};function Mg(G){return 0}function w1(G,te,de,Se,Ze){}function k1(G,te,de,Se){for(var Ze=0,rt=0;rt<de;rt++){var Ue=Gt[te>>2],Be=Gt[te+4>>2];te+=8;for(var Lt=0;Lt<Be;Lt++)Zo.printChar(G,Jt[Ue+Lt]);Ze+=Be}return Gt[Se>>2]=Ze,0}function Pg(G){re(G)}var Gd=!1,Qo={abort:Rg,emscripten_get_heap_max:Ip,emscripten_memcpy_big:Vd,emscripten_resize_heap:Ud,fd_close:Mg,fd_seek:w1,fd_write:k1,setTempRet0:Pg},VA=Dg(),I1=s.___wasm_call_ctors=function(){return(I1=s.___wasm_call_ctors=s.asm.__wasm_call_ctors).apply(null,arguments)},Og=s._init=function(){return(Og=s._init=s.asm.init).apply(null,arguments)},Lg=s._init_with_threads_count=function(){return(Lg=s._init_with_threads_count=s.asm.init_with_threads_count).apply(null,arguments)},Hd=s._get_threads_count=function(){return(Hd=s._get_threads_count=s.asm.get_threads_count).apply(null,arguments)},jd=s._register_tensor=function(){return(jd=s._register_tensor=s.asm.register_tensor).apply(null,arguments)},zg=s._dispose_data=function(){return(zg=s._dispose_data=s.asm.dispose_data).apply(null,arguments)},_e=s._dispose=function(){return(_e=s._dispose=s.asm.dispose).apply(null,arguments)},Wg=s._Abs=function(){return(Wg=s._Abs=s.asm.Abs).apply(null,arguments)},qd=s._Add=function(){return(qd=s._Add=s.asm.Add).apply(null,arguments)},Os=s._AddN=function(){return(Os=s._AddN=s.asm.AddN).apply(null,arguments)},el=s._All=function(){return(el=s._All=s.asm.All).apply(null,arguments)},Bg=s._Any=function(){return(Bg=s._Any=s.asm.Any).apply(null,arguments)},S1=s._ArgMax=function(){return(S1=s._ArgMax=s.asm.ArgMax).apply(null,arguments)},Vg=s._AvgPool=function(){return(Vg=s._AvgPool=s.asm.AvgPool).apply(null,arguments)},N1=s._BatchMatMul=function(){return(N1=s._BatchMatMul=s.asm.BatchMatMul).apply(null,arguments)},Ls=s._Ceil=function(){return(Ls=s._Ceil=s.asm.Ceil).apply(null,arguments)},Ug=s._ClipByValue=function(){return(Ug=s._ClipByValue=s.asm.ClipByValue).apply(null,arguments)},Gg=s._Conv2D=function(){return(Gg=s._Conv2D=s.asm.Conv2D).apply(null,arguments)},Hg=s._Conv2DBackpropInput=function(){return(Hg=s._Conv2DBackpropInput=s.asm.Conv2DBackpropInput).apply(null,arguments)},jg=s._Cos=function(){return(jg=s._Cos=s.asm.Cos).apply(null,arguments)},qg=s._Cosh=function(){return(qg=s._Cosh=s.asm.Cosh).apply(null,arguments)},Kg=s._CropAndResize=function(){return(Kg=s._CropAndResize=s.asm.CropAndResize).apply(null,arguments)},Kd=s._Cumprod=function(){return(Kd=s._Cumprod=s.asm.Cumprod).apply(null,arguments)},Xg=s._Cumsum=function(){return(Xg=s._Cumsum=s.asm.Cumsum).apply(null,arguments)},Yg=s._DepthToSpace=function(){return(Yg=s._DepthToSpace=s.asm.DepthToSpace).apply(null,arguments)},Jg=s._DepthwiseConv2dNative=function(){return(Jg=s._DepthwiseConv2dNative=s.asm.DepthwiseConv2dNative).apply(null,arguments)},Zg=s._Elu=function(){return(Zg=s._Elu=s.asm.Elu).apply(null,arguments)},Qg=s._Equal=function(){return(Qg=s._Equal=s.asm.Equal).apply(null,arguments)},Xd=s._Exp=function(){return(Xd=s._Exp=s.asm.Exp).apply(null,arguments)},ey=s._FlipLeftRight=function(){return(ey=s._FlipLeftRight=s.asm.FlipLeftRight).apply(null,arguments)},ty=s._Floor=function(){return(ty=s._Floor=s.asm.Floor).apply(null,arguments)},zs=s._FloorDiv=function(){return(zs=s._FloorDiv=s.asm.FloorDiv).apply(null,arguments)},Sp=s._FusedBatchNorm=function(){return(Sp=s._FusedBatchNorm=s.asm.FusedBatchNorm).apply(null,arguments)},ny=s._FusedConv2D=function(){return(ny=s._FusedConv2D=s.asm.FusedConv2D).apply(null,arguments)},ay=s._FusedDepthwiseConv2D=function(){return(ay=s._FusedDepthwiseConv2D=s.asm.FusedDepthwiseConv2D).apply(null,arguments)},ry=s._Gather=function(){return(ry=s._Gather=s.asm.Gather).apply(null,arguments)},Ve=s._GatherNd=function(){return(Ve=s._GatherNd=s.asm.GatherNd).apply(null,arguments)},sy=s._Greater=function(){return(sy=s._Greater=s.asm.Greater).apply(null,arguments)},iy=s._GreaterEqual=function(){return(iy=s._GreaterEqual=s.asm.GreaterEqual).apply(null,arguments)},oy=s._LeakyRelu=function(){return(oy=s._LeakyRelu=s.asm.LeakyRelu).apply(null,arguments)},ly=s._Less=function(){return(ly=s._Less=s.asm.Less).apply(null,arguments)},uy=s._LessEqual=function(){return(uy=s._LessEqual=s.asm.LessEqual).apply(null,arguments)},py=s._Log=function(){return(py=s._Log=s.asm.Log).apply(null,arguments)},Np=s._LogicalAnd=function(){return(Np=s._LogicalAnd=s.asm.LogicalAnd).apply(null,arguments)},Yd=s._Max=function(){return(Yd=s._Max=s.asm.Max).apply(null,arguments)},Jd=s._MaxPool=function(){return(Jd=s._MaxPool=s.asm.MaxPool).apply(null,arguments)},cy=s._Maximum=function(){return(cy=s._Maximum=s.asm.Maximum).apply(null,arguments)},dy=s._Mean=function(){return(dy=s._Mean=s.asm.Mean).apply(null,arguments)},hy=s._Min=function(){return(hy=s._Min=s.asm.Min).apply(null,arguments)},my=s._Minimum=function(){return(my=s._Minimum=s.asm.Minimum).apply(null,arguments)},fy=s._MirrorPad=function(){return(fy=s._MirrorPad=s.asm.MirrorPad).apply(null,arguments)},gy=s._Multiply=function(){return(gy=s._Multiply=s.asm.Multiply).apply(null,arguments)},Ct=s._Neg=function(){return(Ct=s._Neg=s.asm.Neg).apply(null,arguments)},yy=s._NonMaxSuppressionV3=function(){return(yy=s._NonMaxSuppressionV3=s.asm.NonMaxSuppressionV3).apply(null,arguments)},by=s._NonMaxSuppressionV4=function(){return(by=s._NonMaxSuppressionV4=s.asm.NonMaxSuppressionV4).apply(null,arguments)},xy=s._NonMaxSuppressionV5=function(){return(xy=s._NonMaxSuppressionV5=s.asm.NonMaxSuppressionV5).apply(null,arguments)},tl=s._NotEqual=function(){return(tl=s._NotEqual=s.asm.NotEqual).apply(null,arguments)},Zd=s._OneHot=function(){return(Zd=s._OneHot=s.asm.OneHot).apply(null,arguments)},Qd=s._PadV2=function(){return(Qd=s._PadV2=s.asm.PadV2).apply(null,arguments)},eh=s._Pow=function(){return(eh=s._Pow=s.asm.Pow).apply(null,arguments)},vy=s._Prelu=function(){return(vy=s._Prelu=s.asm.Prelu).apply(null,arguments)},th=s._Prod=function(){return(th=s._Prod=s.asm.Prod).apply(null,arguments)},wy=s._RealDiv=function(){return(wy=s._RealDiv=s.asm.RealDiv).apply(null,arguments)},T1=s._Relu=function(){return(T1=s._Relu=s.asm.Relu).apply(null,arguments)},nh=s._Relu6=function(){return(nh=s._Relu6=s.asm.Relu6).apply(null,arguments)},C1=s._ResizeBilinear=function(){return(C1=s._ResizeBilinear=s.asm.ResizeBilinear).apply(null,arguments)},ky=s._Reverse=function(){return(ky=s._Reverse=s.asm.Reverse).apply(null,arguments)},Iy=s._RotateWithOffset=function(){return(Iy=s._RotateWithOffset=s.asm.RotateWithOffset).apply(null,arguments)},Sy=s._Round=function(){return(Sy=s._Round=s.asm.Round).apply(null,arguments)},Ny=s._Rsqrt=function(){return(Ny=s._Rsqrt=s.asm.Rsqrt).apply(null,arguments)},Ty=s._ScatterNd=function(){return(Ty=s._ScatterNd=s.asm.ScatterNd).apply(null,arguments)},Cy=s._SelectV2=function(){return(Cy=s._SelectV2=s.asm.SelectV2).apply(null,arguments)},_y=s._Sigmoid=function(){return(_y=s._Sigmoid=s.asm.Sigmoid).apply(null,arguments)},Ey=s._Sin=function(){return(Ey=s._Sin=s.asm.Sin).apply(null,arguments)},Ay=s._Softmax=function(){return(Ay=s._Softmax=s.asm.Softmax).apply(null,arguments)},$y=s._SparseFillEmptyRows=function(){return($y=s._SparseFillEmptyRows=s.asm.SparseFillEmptyRows).apply(null,arguments)},Fy=s._SparseReshape=function(){return(Fy=s._SparseReshape=s.asm.SparseReshape).apply(null,arguments)},Dy=s._SparseSegmentReduction=function(){return(Dy=s._SparseSegmentReduction=s.asm.SparseSegmentReduction).apply(null,arguments)},Ry=s._Sqrt=function(){return(Ry=s._Sqrt=s.asm.Sqrt).apply(null,arguments)},My=s._Square=function(){return(My=s._Square=s.asm.Square).apply(null,arguments)},Py=s._SquaredDifference=function(){return(Py=s._SquaredDifference=s.asm.SquaredDifference).apply(null,arguments)},Oy=s._Step=function(){return(Oy=s._Step=s.asm.Step).apply(null,arguments)},Ly=s._StridedSlice=function(){return(Ly=s._StridedSlice=s.asm.StridedSlice).apply(null,arguments)},zy=s._Sub=function(){return(zy=s._Sub=s.asm.Sub).apply(null,arguments)},Wy=s._Sum=function(){return(Wy=s._Sum=s.asm.Sum).apply(null,arguments)},By=s._Tan=function(){return(By=s._Tan=s.asm.Tan).apply(null,arguments)},Vy=s._Tanh=function(){return(Vy=s._Tanh=s.asm.Tanh).apply(null,arguments)},Uy=s._Tile=function(){return(Uy=s._Tile=s.asm.Tile).apply(null,arguments)},Gy=s._TopK=function(){return(Gy=s._TopK=s.asm.TopK).apply(null,arguments)},Hy=s._Transform=function(){return(Hy=s._Transform=s.asm.Transform).apply(null,arguments)},jy=s._Transpose=function(){return(jy=s._Transpose=s.asm.Transpose).apply(null,arguments)},qy=s.__FusedMatMul=function(){return(qy=s.__FusedMatMul=s.asm._FusedMatMul).apply(null,arguments)},Ky=s._malloc=function(){return(Ky=s._malloc=s.asm.malloc).apply(null,arguments)},Xy=s._free=function(){return(Xy=s._free=s.asm.free).apply(null,arguments)},Yy=s.___errno_location=function(){return(Yy=s.___errno_location=s.asm.__errno_location).apply(null,arguments)},Jy=s._emscripten_main_thread_process_queued_calls=function(){return(Jy=s._emscripten_main_thread_process_queued_calls=s.asm.emscripten_main_thread_process_queued_calls).apply(null,arguments)},ah=s.stackSave=function(){return(ah=s.stackSave=s.asm.stackSave).apply(null,arguments)},rh=s.stackRestore=function(){return(rh=s.stackRestore=s.asm.stackRestore).apply(null,arguments)},Tp=s.stackAlloc=function(){return(Tp=s.stackAlloc=s.asm.stackAlloc).apply(null,arguments)},Zy=s.dynCall_iijjiiii=function(){return(Zy=s.dynCall_iijjiiii=s.asm.dynCall_iijjiiii).apply(null,arguments)},Qy=s.dynCall_jiji=function(){return(Qy=s.dynCall_jiji=s.asm.dynCall_jiji).apply(null,arguments)};s.cwrap=Ee;var nl;function Cp(G){this.name="ExitStatus",this.message="Program terminated with exit("+G+")",this.status=G}qr=function G(){nl||_p(),nl||(qr=G)};function _p(G){if(G=G||p,la>0||(Rd(),la>0))return;function te(){nl||(nl=!0,s.calledRun=!0,!le&&(Md(),i(s),s.onRuntimeInitialized&&s.onRuntimeInitialized(),Pd()))}s.setStatus?(s.setStatus("Running..."),setTimeout(function(){setTimeout(function(){s.setStatus("")},1),te()},1)):te()}s.run=_p;function _1(G){ue=G,xp()||(s.onExit&&s.onExit(G),le=!0),c(G,new Cp(G))}if(s.preInit)for(typeof s.preInit=="function"&&(s.preInit=[s.preInit]);s.preInit.length>0;)s.preInit.pop()();_p();var al;l&&(al={uncaughtException:process.listeners("uncaughtException").filter(function(G){return!l.uncaughtException.indexOf(G)>-1}),unhandledRejection:process.listeners("unhandledRejection").filter(function(G){return!l.unhandledRejection.indexOf(G)>-1})});var rl;if(typeof r!="undefined")rl=r;else if(typeof WasmBackendModuleThreadedSimd!="undefined")rl=WasmBackendModuleThreadedSimd;else throw new Error("Could not find wasm module in post.js");if(al){var eb=rl._dispose;rl._dispose=function(){eb(),al.uncaughtException.forEach(function(G){process.removeListener("uncaughtException",G)}),al.unhandledRejection.forEach(function(G){process.removeListener("unhandledRejection",G)})}}return r.ready}})();typeof e=="object"&&typeof t=="object"?t.exports=n:typeof define=="function"&&define.amd?define([],function(){return n}):typeof e=="object"&&(e.WasmBackendModule=n)}),pm=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}},cc=class{refCount(e){return pa("refCount")}incRef(e){return pa("incRef")}timerAvailable(){return!0}time(e){return pa("time")}read(e){return pa("read")}readSync(e){return pa("readSync")}readToGPU(e,t){return pa("readToGPU")}numDataIds(){return pa("numDataIds")}disposeData(e,t){return pa("disposeData")}write(e,t,n){return pa("write")}move(e,t,n,a,r){return pa("move")}memory(){return pa("memory")}floatPrecision(){return pa("floatPrecision")}epsilon(){return this.floatPrecision()===32?1e-7:1e-4}dispose(){return pa("dispose")}};function pa(e){throw new Error(`'${e}' not yet implemented or not found in the registry. This kernel may not be supported by the tfjs backend you have chosen`)}function yI(e){let t=e.length,n=0;for(;t>0;)n=Math.random()*t|0,t--,Ph(e,t,n)}function fF(e,t){if(e.length!==t.length)throw new Error(`Array sizes must match to be shuffled together First array length was ${e.length}Second array length was ${t.length}`);let n=e.length,a=0;for(;n>0;)a=Math.random()*n|0,n--,Ph(e,n,a),Ph(t,n,a)}function Xp(e,t,n){return Math.max(e,Math.min(t,n))}function gF(e){return e%2===0?e:e+1}function Ph(e,t,n){let a=e[t];e[t]=e[n],e[n]=a}function yF(e){let t=0;for(let n=0;n<e.length;n++)t+=e[n];return t}function bF(e,t){let n=Math.random();return t*n+(1-n)*e}function xF(e,t){let n=0;for(let a=0;a<e.length;a++){let r=Number(e[a])-Number(t[a]);n+=r*r}return n}function R(e,t){if(!e)throw new Error(typeof t=="string"?t:t())}function Tn(e,t,n=""){R(gs(e,t),()=>n+` Shapes ${e} and ${t} must match`)}function xi(e){R(e!=null,()=>"The input to the tensor constructor must be a non-null value.")}function ti(e,t=[],n=!1){if(t==null&&(t=[]),Array.isArray(e)||hn(e)&&!n)for(let a=0;a<e.length;++a)ti(e[a],t,n);else t.push(e);return t}function wt(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 vF(e){return e.length===0}function gs(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 xl(e){return e%1===0}function wF(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 kF(e){let t=Math.ceil(Math.sqrt(e));return[t,Math.ceil(e/t)]}function IF(e){let t=new Uint32Array(e);for(let n=0;n<e;++n)t[n]=n;return yI(t),t}function Hp(e,t){return t<=e.length?e:e+" ".repeat(t-e.length)}function SF(e,t=a=>0,n){return new Promise((a,r)=>{let s=0,i=()=>{if(e()){a();return}s++;let o=t(s);if(n!=null&&s>=n){r();return}setTimeout(i,o)};i()})}function NF(e,t){let n=1,a=-1;for(let s=0;s<e.length;++s)if(e[s]>=0)n*=e[s];else if(e[s]===-1){if(a!==-1)throw Error(`Shapes can only have 1 implicit size. Found -1 at dim ${a} and dim ${s}`);a=s}else if(e[s]<0)throw Error(`Shapes can not be < 0. Found ${e[s]} at dim ${s}`);if(a===-1){if(t>0&&t!==n)throw Error(`Size(${t}) must match the product of shape ${e}`);return e}if(n===0)throw Error(`Cannot infer the missing size in [${e}] when there are 0 elements`);if(t%n!==0)throw Error(`The implicit shape can't be a fractional number. Got ${t} / ${n}`);let r=e.slice();return r[a]=t/n,r}function Ea(e,t){let n=t.length;return e=e==null?t.map((a,r)=>r):[].concat(e),R(e.every(a=>a>=-n&&a<n),()=>`All values in axis param must be in range [-${n}, ${n}) but got axis ${e}`),R(e.every(a=>xl(a)),()=>`All values in axis param must be integers but got axis ${e}`),e.map(a=>a<0?n+a:a)}function bI(e,t){let n=[],a=[],r=t!=null&&Array.isArray(t)&&t.length===0,s=t==null||r?null:Ea(t,e).sort(),i=0;for(let o=0;o<e.length;++o){if(s!=null){if(s[i]===o&&e[o]!==1)throw new Error(`Can't squeeze axis ${o} since its dim '${e[o]}' is not 1`);(s[i]==null||s[i]>o)&&e[o]===1&&(n.push(e[o]),a.push(o)),s[i]<=o&&i++}e[o]!==1&&(n.push(e[o]),a.push(o))}return{newShape:n,keptDims:a}}function xI(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 vI(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 wI(e,t){for(let n=0;n<e.length;n++){let a=e[n];if(isNaN(a)||!isFinite(a))throw Error(`A tensor of type ${t} being uploaded contains ${a}.`)}}function kI(e){return e==="bool"||e==="complex64"||e==="float32"||e==="int32"||e==="string"}function TF(e,t){return!(t==="complex64"||t==="float32"&&e!=="complex64"||t==="int32"&&e!=="float32"&&e!=="complex64"||t==="bool"&&e==="bool")}function hn(e){return e instanceof Float32Array||e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray}function Ib(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 II(e){if(e==null)return 0;let t=0;return e.forEach(n=>t+=n.length),t}function Qr(e){return typeof e=="string"||e instanceof String}function SI(e){return typeof e=="boolean"}function NI(e){return typeof e=="number"}function cm(e){return Array.isArray(e)?cm(e[0]):e instanceof Float32Array?"float32":e instanceof Int32Array||e instanceof Uint8Array||e instanceof Uint8ClampedArray?"int32":NI(e)?"float32":Qr(e)?"string":SI(e)?"bool":"float32"}function ss(e){return!!(e&&e.constructor&&e.call&&e.apply)}function Oh(e,t){for(let n=t;n<e;++n)if(e%n===0)return n;return e}function Fl(e){let t=e.length;if(t<2)return[];let n=new Array(t-1);n[t-2]=e[t-1];for(let a=t-3;a>=0;--a)n[a]=n[a+1]*e[a+1];return n}function TI(e,t,n,a=!1){let r=new Array;if(t.length===1){let s=t[0]*(a?2:1);for(let i=0;i<s;i++)r[i]=n[e+i]}else{let s=t[0],i=t.slice(1),o=i.reduce((l,u)=>l*u)*(a?2:1);for(let l=0;l<s;l++)r[l]=TI(e+l*o,i,n,a)}return r}function ml(e,t,n=!1){if(e.length===0)return t[0];let a=e.reduce((r,s)=>r*s)*(n?2:1);if(a===0)return[];if(a!==t.length)throw new Error(`[${e}] does not match the input size ${t.length}${n?" for a complex tensor":""}.`);return TI(0,e,t,n)}function Sx(e,t){let n=dm(e,t);for(let a=0;a<n.length;a++)n[a]=1;return n}function dm(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 CF(e,t){let n=e.reduce((a,r)=>a*r,1);if(t==null||t==="float32")return ml(e,new Float32Array(n));if(t==="int32")return ml(e,new Int32Array(n));if(t==="bool")return ml(e,new Uint8Array(n));throw new Error(`Unknown data type ${t}`)}function Nx(e){e.forEach(t=>{R(Number.isInteger(t)&&t>=0,()=>`Tensor must have a shape comprised of positive integers but got shape [${e}].`)})}function _F(e,t,n){if(t===0)return 0;if(t===1)return e[0];let a=e[e.length-1];for(let r=0;r<e.length-1;++r)a+=n[r]*e[r];return a}function EF(e,t,n){if(t===0)return[];if(t===1)return[e];let a=new Array(t);for(let r=0;r<a.length-1;++r)a[r]=Math.floor(e/n[r]),e-=a[r]*n[r];return a[a.length-1]=e,a}function Tx(e){return e&&e.then&&typeof e.then=="function"}var L1="tfjsflags",CI=class{constructor(e){this.global=e,this.flags={},this.flagRegistry={},this.urlFlags={},this.getQueryParams=AF,this.populateURLFlags()}setPlatform(e,t){this.platform!=null&&(X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(`Platform ${this.platformName} has already been set. Overwriting the platform with ${e}.`)),this.platformName=e,this.platform=t}registerFlag(e,t,n){if(this.flagRegistry[e]={evaluationFn:t,setHook:n},this.urlFlags[e]!=null){let a=this.urlFlags[e];X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(`Setting feature override from URL ${e}: ${a}.`),this.set(e,a)}}async getAsync(e){return e in this.flags?this.flags[e]:(this.flags[e]=await this.evaluateFlag(e),this.flags[e])}get(e){if(e in this.flags)return this.flags[e];let t=this.evaluateFlag(e);if(Tx(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);L1 in e&&e[L1].split(",").forEach(t=>{let[n,a]=t.split(":");this.urlFlags[n]=FF(n,a)})}};function AF(e){let t={};return e.replace(/[?&]([^=?&]+)(?:=([^&]*))?/g,(n,...a)=>($F(t,a[0],a[1]),a.join("="))),t}function $F(e,t,n){e[decodeURIComponent(t)]=decodeURIComponent(n||"")}function FF(e,t){if(t=t.toLowerCase(),t==="true"||t==="false")return t==="true";if(`${+t}`===t)return+t;throw new Error(`Could not parse value flag value ${t} for flag ${e}.`)}function X(){return Cx}var Cx=null;function DF(e){Cx=e}var lb;function _I(){if(lb==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");lb=e}return lb}function RF(){let e=_I();return e._tfGlobals==null&&(e._tfGlobals=new Map),e._tfGlobals}function _x(e,t){let n=RF();if(n.has(e))return n.get(e);{let a=t();return n.set(e,a),n.get(e)}}var Dl="Abs",Rl="Acos",Ml="Acosh",ys="Add",vi="AddN",Pl="All",Ol="Any",wi="ArgMax",dc="ArgMin",Ll="Asin",zl="Asinh",Wl="Atan",Bl="Atanh",Vl="Atan2",ki="AvgPool",hm="AvgPoolGrad",hc="AvgPool3D",mm="AvgPool3DGrad",Ii="BatchMatMul",Ul="BatchToSpaceND",fm="Bincount",EI="BroadcastTo",gm="BroadcastArgs",Si="Cast",Ni="Ceil",bs="ClipByValue",ym="Complex",mc="ComplexAbs",Gl="Concat",Ti="Conv2D",bm="Conv2DBackpropFilter",Ci="Conv2DBackpropInput",fc="Conv3D",xm="Conv3DBackpropFilterV2",vm="Conv3DBackpropInputV2",_i="Cos",Ei="Cosh",Hl="Cumprod",Ai="Cumsum",jl="CropAndResize",wm="DenseBincount",ql="DepthToSpace",$i="DepthwiseConv2dNative",km="DepthwiseConv2dNativeBackpropFilter",Im="DepthwiseConv2dNativeBackpropInput",Sm="Diag",gc="Dilation2D",Lh="Dilation2DBackpropInput",zh="Dilation2DBackpropFilter",Fi="RealDiv",Nm="Einsum",Di="Elu",Tm="EluGrad",Kl="Erf",Xl="Equal",Ri="Exp",Yl="ExpandDims",Jl="Expm1",Cm="FFT",yc="Fill",Zl="FlipLeftRight",Mi="Floor",Pi="FloorDiv",Oi="FusedBatchNorm",Ql="GatherV2",eu="GatherNd",tu="Greater",Li="GreaterEqual",zi="Identity",_m="IFFT",Em="Imag",nu="IsFinite",au="IsInf",ru="IsNan",Wi="LeakyRelu",su="Less",iu="LessEqual",Am="LinSpace",Bi="Log",ou="Log1p",lu="LogicalAnd",bc="LogicalNot",xc="LogicalOr",AI="LogSoftmax",vc="LRN",$m="LRNGrad",Vi="Max",Ui="Maximum",Gi="MaxPool",Fm="MaxPoolGrad",wc="MaxPool3D",Dm="MaxPool3DGrad",Rm="MaxPoolWithArgmax",Hi="Mean",ji="Min",qi="Minimum",Ki="MirrorPad",uu="Mod",Mm="Multinomial",Xi="Multiply",pu="Neg",cu="NotEqual",du="NonMaxSuppressionV3",hu="NonMaxSuppressionV4",mu="NonMaxSuppressionV5",fu="OnesLike",Yi="OneHot",gu="Pack",Ji="PadV2",MF="Pool",Zi="Pow",Qi="Prelu",yu="Prod",kc="Range",Pm="Real",bu="Reciprocal",eo="Relu",xu="Reshape",Ic="ResizeNearestNeighbor",Om="ResizeNearestNeighborGrad",to="ResizeBilinear",Lm="ResizeBilinearGrad",no="Relu6",ao="Reverse",ro="Round",so="Rsqrt",vu="ScatterNd",wu="Select",ku="Selu",Iu="Slice",io="Sin",Su="Sinh",Nu="Sign",oo="Sigmoid",Tu="Softplus",lo="Sqrt",uo="Sum",Cu="SpaceToBatchND",_u="SplitV",po="Softmax",Sc="SparseFillEmptyRows",Eu="SparseReshape",Nc="SparseSegmentMean",Tc="SparseSegmentSum",zm="SparseToDense",co="SquaredDifference",Cc="Square",Au="StridedSlice",Wm="StringNGrams",Bm="StringSplit",Vm="StringToHashBucketFast",ho="Sub",mo="Tan",fo="Tanh",xs="Tile",$u="TopK",Fu="Transform",go="Transpose",Um="Unique",Du="Unpack",_c="UnsortedSegmentSum",Ru="ZerosLike",vs="Step",Wh="FromPixels",Mu="RotateWithOffset",ni="_FusedMatMul",ai="FusedConv2D",ri="FusedDepthwiseConv2D";function Zr(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.warn(...e)}function PF(...e){X().getBool("IS_TEST")||X().getBool("PROD")||console.log(...e)}var vl=_x("kernelRegistry",()=>new Map),Yp=_x("gradRegistry",()=>new Map);function Bh(e,t){let n=Ex(e,t);return vl.get(n)}function Sb(e){return Yp.get(e)}function Vh(e){let t=vl.entries(),n=[];for(;;){let{done:a,value:r}=t.next();if(a)break;let[s,i]=r,[o]=s.split("_");o===e&&n.push(i)}return n}function Ec(e){let{kernelName:t,backendName:n}=e,a=Ex(t,n);vl.has(a)&&Zr(`The kernel '${t}' for backend '${n}' is already registered`),vl.set(a,e)}function $I(e){let{kernelName:t}=e;Yp.has(t)&&X().getBool("DEBUG")&&Zr(`Overriding the gradient for '${t}'`),Yp.set(t,e)}function OF(e,t){let n=Ex(e,t);if(!vl.has(n))throw new Error(`The kernel '${e}' for backend '${t}' is not registered`);vl.delete(n)}function LF(e){if(!Yp.has(e))throw new Error(`The gradient '${e}' for backend is not registered`);Yp.delete(e)}function zF(e,t){Vh(e).forEach(n=>{let a=Object.assign({},n,{backendName:t});Ec(a)})}function Ex(e,t){return`${t}_${e}`}var k={};Re(k,{arraysEqual:()=>gs,assert:()=>R,assertNonNegativeIntegerDimensions:()=>Nx,assertNonNull:()=>xi,assertShapesMatch:()=>Tn,bytesFromStringArray:()=>II,bytesPerElement:()=>Ib,checkConversionForErrors:()=>wI,clamp:()=>Xp,computeStrides:()=>Fl,createScalarValue:()=>HF,createShuffledIndices:()=>IF,decodeString:()=>Uh,distSquared:()=>xF,encodeString:()=>$c,fetch:()=>qF,fingerPrint64:()=>GF,flatten:()=>ti,getArrayFromDType:()=>vI,getTypedArrayFromDType:()=>xI,hasEncodingLoss:()=>TF,hexToLong:()=>Ac,indexToLoc:()=>EF,inferDtype:()=>cm,inferFromImplicitShape:()=>NF,isBoolean:()=>SI,isFunction:()=>ss,isInt:()=>xl,isNumber:()=>NI,isPromise:()=>Tx,isScalarShape:()=>vF,isString:()=>Qr,isTypedArray:()=>hn,isValidDtype:()=>kI,locToIndex:()=>_F,makeOnesTypedArray:()=>Sx,makeZerosNestedTypedArray:()=>CF,makeZerosTypedArray:()=>dm,nearestDivisor:()=>Oh,nearestLargerEven:()=>gF,now:()=>Jp,parseAxisParam:()=>Ea,randUniform:()=>bF,repeatedTry:()=>SF,rightPad:()=>Hp,shuffle:()=>yI,shuffleCombo:()=>fF,sizeFromShape:()=>wt,sizeToSquarishShape:()=>kF,squeezeShape:()=>bI,sum:()=>yF,swap:()=>Ph,tanh:()=>wF,toNestedArray:()=>ml,toTypedArray:()=>Gm});var z1=bi(q$()),Hs=z1.default||z1;function Ac(e){return Hs.fromString(e,!0,16)}var FI=Ac("c3a5c85c97cb3127"),Us=Ac("b492b66fbe98f273"),kn=Ac("9ae16a3b2f90404f");function Nb(e){return e.xor(e.shru(47))}function DI(e,t,n){let a=e.slice(t,t+n);return Hs.fromBytes(Array.from(a),!0,!0)}function yt(e,t){return DI(e,t,8)}function W1(e,t){return DI(e,t,4)}function Zt(e,t){return t===0?e:e.shru(t).or(e.shl(64-t))}function ns(e,t,n=Ac("9ddfea08eb382d69")){let a=e.xor(t).mul(n);a=a.xor(a.shru(47));let r=t.xor(a).mul(n);return r=r.xor(r.shru(47)),r=r.mul(n),r}function WF(e,t,n,a,r,s){r=r.add(e),s=Zt(s.add(r).add(a),21);let i=r;return r=r.add(t),r=r.add(n),s=s.add(Zt(r,44)),[r.add(a),s.add(i)]}function hh(e,t,n,a){return WF(yt(e,t),yt(e,t+8),yt(e,t+16),yt(e,t+24),n,a)}function BF(e,t=e.length){if(t>=8){let n=kn.add(t*2),a=yt(e,0).add(kn),r=yt(e,t-8),s=Zt(r,37).mul(n).add(a),i=Zt(a,25).add(r).mul(n);return ns(s,i,n)}if(t>=4){let n=kn.add(t*2),a=W1(e,0);return ns(a.shl(3).add(t),W1(e,t-4),n)}if(t>0){let n=e[0],a=e[t>>1],r=e[t-1],s=n+(a<<8),i=t+(r<<2);return Nb(kn.mul(s).xor(FI.mul(i))).mul(kn)}return kn}function VF(e,t=e.length){let n=kn.add(t*2),a=yt(e,0).mul(Us),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(kn);return ns(Zt(a.add(r),43).add(Zt(s,30)).add(i),a.add(Zt(r.add(kn),18)).add(s),n)}function UF(e,t=e.length){let n=kn.add(t*2),a=yt(e,0).mul(kn),r=yt(e,8),s=yt(e,t-8).mul(n),i=yt(e,t-16).mul(kn),o=Zt(a.add(r),43).add(Zt(s,30)).add(i),l=ns(o,a.add(Zt(r.add(kn),18)).add(s),n),u=yt(e,16).mul(n),p=yt(e,24),d=o.add(yt(e,t-32)).mul(n),c=l.add(yt(e,t-24)).mul(n);return ns(Zt(u.add(p),43).add(Zt(d,30)).add(c),u.add(Zt(p.add(a),18)).add(d),n)}function GF(e,t=e.length){let n=Hs.fromNumber(81,!0);if(t<=32)return t<=16?BF(e,t):VF(e,t);if(t<=64)return UF(e,t);let a=n,r=n.mul(Us).add(113),s=Nb(r.mul(kn).add(113)).mul(kn),i=[Hs.UZERO,Hs.UZERO],o=[Hs.UZERO,Hs.UZERO];a=a.mul(kn).add(yt(e,0));let l=0,u=(t-1>>6)*64,p=u+(t-1&63)-63;do a=Zt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(Us),r=Zt(r.add(i[1]).add(yt(e,l+48)),42).mul(Us),a=a.xor(o[1]),r=r.add(i[0]).add(yt(e,l+40)),s=Zt(s.add(o[0]),33).mul(Us),i=hh(e,l,i[1].mul(Us),a.add(o[0])),o=hh(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],l+=64;while(l!==u);let d=Us.add(s.and(255).shl(1));return l=p,o[0]=o[0].add(t-1&63),i[0]=i[0].add(o[0]),o[0]=o[0].add(i[0]),a=Zt(a.add(r).add(i[0]).add(yt(e,l+8)),37).mul(d),r=Zt(r.add(i[1]).add(yt(e,l+48)),42).mul(d),a=a.xor(o[1].mul(9)),r=r.add(i[0].mul(9).add(yt(e,l+40))),s=Zt(s.add(o[0]),33).mul(d),i=hh(e,l,i[1].mul(d),a.add(o[0])),o=hh(e,l+32,s.add(o[1]),r.add(yt(e,l+16))),[s,a]=[a,s],ns(ns(i[0],o[0],d).add(Nb(r).mul(FI)).add(s),ns(i[1],o[1],d).add(a),d)}function HF(e,t){return t==="string"?$c(e):Gm([e],t)}function jF(e,t){return e instanceof Float32Array&&t==="float32"||e instanceof Int32Array&&t==="int32"||e instanceof Uint8Array&&t==="bool"}function Gm(e,t){if(t==="string")throw new Error("Cannot convert a string[] to a TypedArray");if(Array.isArray(e)&&(e=ti(e)),X().getBool("DEBUG")&&wI(e,t),jF(e,t))return e;if(t==null||t==="float32"||t==="complex64")return new Float32Array(e);if(t==="int32")return new Int32Array(e);if(t==="bool"){let n=new Uint8Array(e.length);for(let a=0;a<n.length;++a)Math.round(e[a])!==0&&(n[a]=1);return n}else throw new Error(`Unknown data type ${t}`)}function Jp(){return X().platform.now()}function qF(e,t){return X().platform.fetch(e,t)}function $c(e,t="utf-8"){return t=t||"utf-8",X().platform.encode(e,t)}function Uh(e,t="utf-8"){return t=t||"utf-8",X().platform.decode(e,t)}var KF=class{constructor(e,t){this.backendTimer=e,this.logger=t,t==null&&(this.logger=new YF)}profileKernel(e,t,n){let a,r=()=>{a=n()},s,i=Jp();if(this.backendTimer.timerAvailable())s=this.backendTimer.time(r);else{r();for(let o of a)o.dataSync();s=Promise.resolve({kernelMs:Jp()-i})}if(X().getBool("CHECK_COMPUTATION_FOR_ERRORS"))for(let o=0;o<a.length;o++){let l=a[o];l.data().then(u=>{XF(u,l.dtype,e)})}return{kernelName:e,outputs:a,inputs:t,timeMs:s.then(o=>o.kernelMs),extraInfo:s.then(o=>o.getExtraProfileInfo!=null?o.getExtraProfileInfo():"")}}logKernelProfile(e){let{kernelName:t,outputs:n,timeMs:a,inputs:r,extraInfo:s}=e;n.forEach(i=>{Promise.all([i.data(),a,s]).then(o=>{this.logger.logKernelProfile(t,i,o[0],o[1],r,o[2])})})}};function XF(e,t,n){if(t!=="float32")return!1;for(let a=0;a<e.length;a++){let r=e[a];if(isNaN(r)||!isFinite(r))return console.warn(`Found ${r} in the result of '${n}'`),!0}return!1}var YF=class{logKernelProfile(e,t,n,a,r,s){let i=typeof a=="number"?Hp(`${a}ms`,9):a.error,o=Hp(e,25),l=t.rank,u=t.size,p=Hp(t.shape.toString(),14),d="";for(let c in r){let h=r[c];if(h!=null){let m=h.shape||t.shape,f=m.length;d+=`${c}: ${f}D ${f>0?m:""} `}}console.log(`%c${o} %c${i} %c${l}D ${p} %c${u} %c${d} %c${s}`,"font-weight:bold","color:red","color:blue","color: orange","color: green","color: steelblue")}};function JF(e,t,n){let a={},r={};for(let l=0;l<t.length;l++)a[t[l].id]=!0;for(let l=0;l<e.length;l++){let u=e[l],p=u.inputs;for(let d in p){let c=p[d],h=!1;for(let m=0;m<t.length;m++)if(a[c.id]){u.outputs.forEach(f=>a[f.id]=!0),h=!0,r[u.id]=!0;break}if(h)break}}let s={};s[n.id]=!0;let i={};for(let l=e.length-1;l>=0;l--){let u=e[l],p=u.inputs;for(let d=0;d<u.outputs.length;d++)if(s[u.outputs[d].id]){for(let c in p)s[p[c].id]=!0,i[u.id]=!0;break}}let o=[];for(let l=0;l<e.length;l++){let u=e[l];if(r[u.id]&&i[u.id]){let p={};for(let c in u.inputs){let h=u.inputs[c];a[h.id]&&(p[c]=h)}let d=Object.assign({},u);d.inputs=p,d.outputs=u.outputs,o.push(d)}}return o}function ZF(e,t,n,a){for(let r=t.length-1;r>=0;r--){let s=t[r],i=[];if(s.outputs.forEach(l=>{let u=e[l.id];u!=null?i.push(u):i.push(null)}),s.gradient==null)throw new Error(`Cannot compute gradient: gradient function not found for ${s.kernelName}.`);let o=s.gradient(i);for(let l in s.inputs){if(!(l in o))throw new Error(`Cannot backprop through input ${l}. Available gradients found: ${Object.keys(o)}.`);let u=n(()=>o[l]());if(u.dtype!=="float32")throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input ${l} must have 'float32' dtype, but has '${u.dtype}'`);let p=s.inputs[l];if(!gs(u.shape,p.shape))throw new Error(`Error in gradient for op ${s.kernelName}. The gradient of input '${l}' has shape '${u.shape}', which does not match the shape of the input '${p.shape}'`);if(e[p.id]==null)e[p.id]=u;else{let d=e[p.id];e[p.id]=a(d,u),d.dispose()}}}}var B1=20,$p=3,ub=7;function QF(e,t,n,a){let r=Fl(t),s=eD(e,t,n,r),i=t.length,o=Sh(e,t,n,r,s),l=["Tensor"];return a&&(l.push(` dtype: ${n}`),l.push(` rank: ${i}`),l.push(` shape: [${t}]`),l.push(" values:")),l.push(o.map(u=>" "+u).join(`
|
|
`)),l.join(`
|
|
`)}function eD(e,t,n,a){let r=wt(t),s=a[a.length-1],i=new Array(s).fill(0),o=t.length,l=n==="complex64"?Pp(e):e;if(o>1)for(let u=0;u<r/s;u++){let p=u*s;for(let d=0;d<s;d++)i[d]=Math.max(i[d],Mp(l[p+d],0,n).length)}return i}function Mp(e,t,n){let a;return Array.isArray(e)?a=`${parseFloat(e[0].toFixed(ub))} + ${parseFloat(e[1].toFixed(ub))}j`:Qr(e)?a=`'${e}'`:n==="bool"?a=RI(e):a=parseFloat(e.toFixed(ub)).toString(),Hp(a,t)}function RI(e){return e===0?"false":"true"}function Sh(e,t,n,a,r,s=!0){let i=n==="complex64"?2:1,o=t[0],l=t.length;if(l===0){if(n==="complex64"){let f=Pp(e);return[Mp(f[0],0,n)]}return n==="bool"?[RI(e[0])]:[e[0].toString()]}if(l===1){if(o>B1){let g=$p*i,y=Array.from(e.slice(0,g)),b=Array.from(e.slice((o-$p)*i,o*i));return n==="complex64"&&(y=Pp(y),b=Pp(b)),["["+y.map((x,v)=>Mp(x,r[v],n)).join(", ")+", ..., "+b.map((x,v)=>Mp(x,r[o-$p+v],n)).join(", ")+"]"]}let f=n==="complex64"?Pp(e):Array.from(e);return["["+f.map((g,y)=>Mp(g,r[y],n)).join(", ")+"]"]}let u=t.slice(1),p=a.slice(1),d=a[0]*i,c=[];if(o>B1){for(let f=0;f<$p;f++){let g=f*d,y=g+d;c.push(...Sh(e.slice(g,y),u,n,p,r,!1))}c.push("...");for(let f=o-$p;f<o;f++){let g=f*d,y=g+d;c.push(...Sh(e.slice(g,y),u,n,p,r,f===o-1))}}else for(let f=0;f<o;f++){let g=f*d,y=g+d;c.push(...Sh(e.slice(g,y),u,n,p,r,f===o-1))}let h=l===2?",":"";c[0]="["+c[0]+h;for(let f=1;f<c.length-1;f++)c[f]=" "+c[f]+h;let m=`,
|
|
`;for(let f=2;f<l;f++)m+=`
|
|
`;return c[c.length-1]=" "+c[c.length-1]+"]"+(s?"":m),c}function Pp(e){let t=[];for(let n=0;n<e.length;n+=2)t.push([e[n],e[n+1]]);return t}var jt=class{constructor(e,t,n){if(this.dtype=t,this.shape=e.slice(),this.size=wt(e),n!=null){let a=n.length;R(a===this.size,()=>`Length of values '${a}' does not match the size inferred by the shape '${this.size}'.`)}if(t==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=n||vI(t,this.size),this.strides=Fl(e)}set(e,...t){t.length===0&&(t=[0]),R(t.length===this.rank,()=>`The number of provided coordinates (${t.length}) must match the rank (${this.rank})`);let n=this.locToIndex(t);this.values[n]=e}get(...e){e.length===0&&(e=[0]);let t=0;for(let a of e){if(a<0||a>=this.shape[t]){let r=`Requested out of range element at ${e}. Buffer shape=${this.shape}`;throw new Error(r)}t++}let n=e[e.length-1];for(let a=0;a<e.length-1;++a)n+=this.strides[a]*e[a];return this.values[n]}locToIndex(e){if(this.rank===0)return 0;if(this.rank===1)return e[0];let t=e[e.length-1];for(let n=0;n<e.length-1;++n)t+=this.strides[n]*e[n];return t}indexToLoc(e){if(this.rank===0)return[];if(this.rank===1)return[e];let t=new Array(this.shape.length);for(let n=0;n<t.length-1;++n)t[n]=Math.floor(e/this.strides[n]),e-=t[n]*this.strides[n];return t[t.length-1]=e,t}get rank(){return this.shape.length}toTensor(){return Wa().makeTensor(this.values,this.shape,this.dtype)}},Wa=null,cl=null,tD=null;function nD(e){Wa=e}function aD(e){cl=e}function rD(e){tD=e}var Ae=class{constructor(e,t,n,a){this.kept=!1,this.isDisposedInternal=!1,this.shape=e.slice(),this.dtype=t||"float32",this.size=wt(e),this.strides=Fl(e),this.dataId=n,this.id=a,this.rankType=this.rank<5?this.rank.toString():"higher"}get rank(){return this.shape.length}async buffer(){let e=await this.data();return cl.buffer(this.shape,this.dtype,e)}bufferSync(){return cl.buffer(this.shape,this.dtype,this.dataSync())}async array(){let e=await this.data();return ml(this.shape,e,this.dtype==="complex64")}arraySync(){return ml(this.shape,this.dataSync(),this.dtype==="complex64")}async data(){this.throwIfDisposed();let e=Wa().read(this.dataId);if(this.dtype==="string"){let t=await e;try{return t.map(n=>Uh(n))}catch(n){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return e}dataToGPU(e){return this.throwIfDisposed(),Wa().readToGPU(this.dataId,e)}dataSync(){this.throwIfDisposed();let e=Wa().readSync(this.dataId);if(this.dtype==="string")try{return e.map(t=>Uh(t))}catch(t){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return e}async bytes(){this.throwIfDisposed();let e=await Wa().read(this.dataId);return this.dtype==="string"?e:new Uint8Array(e.buffer)}dispose(){this.isDisposed||(Wa().disposeTensor(this),this.isDisposedInternal=!0)}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(e=!1){return cl.print(this,e)}clone(){return this.throwIfDisposed(),cl.clone(this)}toString(e=!1){let t=this.dataSync();return QF(t,this.shape,this.dtype,e)}cast(e){return this.throwIfDisposed(),cl.cast(this,e)}variable(e=!0,t,n){return this.throwIfDisposed(),Wa().makeVariable(this,e,t,n)}};Object.defineProperty(Ae,Symbol.hasInstance,{value:e=>!!e&&e.data!=null&&e.dataSync!=null&&e.throwIfDisposed!=null});function ne(){return _x("Tensor",()=>Ae)}ne();var is=class extends Ae{constructor(e,t,n,a){super(e.shape,e.dtype,e.dataId,a),this.trainable=t,this.name=n}assign(e){if(e.dtype!==this.dtype)throw new Error(`dtype of the new value (${e.dtype}) and previous value (${this.dtype}) must match`);if(!gs(e.shape,this.shape))throw new Error(`shape of the new value (${e.shape}) and previous value (${this.shape}) must match`);Wa().disposeTensor(this),this.dataId=e.dataId,Wa().incRef(this,null)}dispose(){Wa().disposeVariable(this),this.isDisposedInternal=!0}};Object.defineProperty(is,Symbol.hasInstance,{value:e=>e instanceof Ae&&e.assign!=null&&e.assign instanceof Function});var Ga={};Re(Ga,{assertTypesMatch:()=>MI,getTensorsInContainer:()=>Ax,isTensorInList:()=>iD,makeTypesMatch:()=>$t});var Tb;(function(e){e.R0="R0",e.R1="R1",e.R2="R2",e.R3="R3",e.R4="R4",e.R5="R5",e.R6="R6"})(Tb||(Tb={}));var Cb;(function(e){e.float32="float32",e.int32="int32",e.bool="int32",e.complex64="complex64"})(Cb||(Cb={}));var _b;(function(e){e.float32="float32",e.int32="int32",e.bool="bool",e.complex64="complex64"})(_b||(_b={}));var Eb;(function(e){e.float32="float32",e.int32="float32",e.bool="float32",e.complex64="complex64"})(Eb||(Eb={}));var Ab;(function(e){e.float32="complex64",e.int32="complex64",e.bool="complex64",e.complex64="complex64"})(Ab||(Ab={}));var sD={float32:Eb,int32:Cb,bool:_b,complex64:Ab};function fa(e,t){if(e==="string"||t==="string"){if(e==="string"&&t==="string")return"string";throw new Error(`Can not upcast ${e} with ${t}`)}return sD[e][t]}function Hm(e){return fa(e,"int32")}function $t(e,t){if(e.dtype===t.dtype)return[e,t];let n=fa(e.dtype,t.dtype);return[e.cast(n),t.cast(n)]}function MI(e,t){R(e.dtype===t.dtype,()=>`The dtypes of the first(${e.dtype}) and second(${t.dtype}) input must match`)}function iD(e,t){return t.some(n=>n.id===e.id)}function Ax(e){let t=[];return PI(e,t,new Set),t}function PI(e,t,n){if(e==null)return;if(e instanceof Ae){t.push(e);return}if(!oD(e))return;let a=e;for(let r in a){let s=a[r];n.has(s)||(n.add(s),PI(s,t,n))}}function oD(e){return Array.isArray(e)||typeof e=="object"}function pb(e){return e.kernelName!=null}var V1=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()}},Zp=class{constructor(e){this.ENV=e,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new V1}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?(Zr(`${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 KF(this.backendInstance),!0}setupRegisteredKernels(){Vh(this.backendName).forEach(e=>{e.setupFunc!=null&&e.setupFunc(this.backendInstance)})}disposeRegisteredKernels(e){Vh(e).forEach(t=>{t.disposeFunc!=null&&t.disposeFunc(this.registry[e])})}initializeBackend(e){let t=this.registryFactory[e];if(t==null)throw new Error(`Cannot initialize backend ${e}, no registration found.`);try{let n=t.factory();if(n&&!(n instanceof cc)&&typeof n.then=="function"){let a=++this.pendingBackendInitId,r=n.then(s=>a<this.pendingBackendInitId?!1:(this.registry[e]=s,this.pendingBackendInit=null,!0)).catch(s=>(a<this.pendingBackendInitId||(this.pendingBackendInit=null,Zr(`Initialization of backend ${e} failed`),Zr(s.stack||s.message)),!1));return this.pendingBackendInit=r,{success:r,asyncInit:!0}}else return this.registry[e]=n,{success:!0,asyncInit:!1}}catch(n){return Zr(`Initialization of backend ${e} failed`),Zr(n.stack||n.message),{success:!1,asyncInit:!1}}}removeBackend(e){if(!(e in this.registryFactory))throw new Error(`${e} backend not found in registry`);this.backendName===e&&this.pendingBackendInit!=null&&this.pendingBackendInitId++,e in this.registry&&(this.disposeRegisteredKernels(e),this.registry[e].dispose(),delete this.registry[e]),delete this.registryFactory[e],this.backendName===e&&(this.pendingBackendInit=null,this.backendName=null,this.backendInstance=null)}getSortedBackends(){if(Object.keys(this.registryFactory).length===0)throw new Error("No backend found in registry.");return Object.keys(this.registryFactory).sort((e,t)=>this.registryFactory[t].priority-this.registryFactory[e].priority)}initializeBackendsAndReturnBest(){let e=this.getSortedBackends();for(let t=0;t<e.length;t++){let n=e[t],{success:a,asyncInit:r}=this.initializeBackend(n);if(r||a)return{name:n,asyncInit:r}}throw new Error("Could not initialize any backends, all backend initializations failed.")}moveData(e,t){let n=this.state.tensorInfo.get(t),a=n.backend,r=this.readSync(t),s=a.refCount(t);a.disposeData(t,!0),n.backend=e,e.move(t,r,n.shape,n.dtype,s),this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack[this.state.numDataMovesStack.length-1]++}tidy(e,t){let n=null;if(t==null){if(typeof e!="function")throw new Error("Please provide a function to tidy()");t=e}else{if(typeof e!="string"&&!(e instanceof String))throw new Error("When calling with two arguments, the first argument to tidy() must be a string");if(typeof t!="function")throw new Error("When calling with two arguments, the 2nd argument to tidy() must be a function");n=e}let a;return this.scopedRun(()=>this.startScope(n),()=>this.endScope(a),()=>(a=t(),a instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),a))}scopedRun(e,t,n){e();try{let a=n();return t(),a}catch(a){throw t(),a}}nextTensorId(){return Zp.nextTensorId++}nextVariableId(){return Zp.nextVariableId++}clone(e){let t=L.runKernel(zi,{x:e}),n={x:e},a=s=>({x:()=>{let i="float32",o={x:s},l={dtype:i};return L.runKernel(Si,o,l)}}),r=[];return this.addTapeNode(this.state.activeScope.name,n,[t],a,r,{}),t}runKernel(e,t,n){if(this.backendName==null&&this.backend,Bh(e,this.backendName)==null)throw new Error(`Kernel '${e}' not registered for backend '${this.backendName}'`);return this.runKernelFunc({kernelName:e,inputs:t,attrs:n})}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(e,t,n){let a=this.backend.numDataIds(),r=0;n.forEach(o=>{r+=o.dtype==="complex64"?3:1});let s=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],i=a-t-r-s;if(i>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${i} data ids) after running '${e}'`)}runKernelFunc(e){let t,n=[],a=this.isTapeOn(),r=this.state.numBytes,s=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let i;this.backendName==null&&this.backend;let o,l=pb(e)?e.kernelName:this.state.activeScope!=null?this.state.activeScope.name:"";if(pb(e)){let{kernelName:h,inputs:m,attrs:f}=e;this.backendName==null&&this.backend;let g=Bh(h,this.backendName);R(g!=null,()=>`Cannot find registered kernel '${h}' for backend '${this.backendName}'`),i=()=>{let y=this.backend.numDataIds();o=g.kernelFunc({inputs:m,attrs:f,backend:this.backend});let b=Array.isArray(o)?o:[o];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(h,y,b);let x=b.map(v=>{if(v.rank!=null)return v;let{dataId:w,shape:T,dtype:C}=v;return this.makeTensorFromDataId(w,T,C)});if(a){let v=this.getTensorsForGradient(h,m,x);n=this.saveTensorsForBackwardMode(v)}return x}}else{let{forwardFunc:h}=e,m=f=>{!a||(n=f.map(g=>this.keep(this.clone(g))))};i=()=>{let f=this.backend.numDataIds();o=this.tidy(()=>h(this.backend,m));let g=Array.isArray(o)?o:[o];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(l,f,g),g}}let{inputs:u,attrs:p}=e,d=pb(e)?null:e.backwardsFunc,c;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?t=i():(c=this.profiler.profileKernel(l,u,()=>i()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(c),t=c.outputs)}),a&&this.addTapeNode(l,u,t,d,n,p),this.state.profiling&&this.state.activeProfile.kernels.push({name:l,bytesAdded:this.state.numBytes-r,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-s,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(u).map(h=>u[h]!=null?u[h].shape:null),outputShapes:t.map(h=>h.shape),kernelTimeMs:c.timeMs,extraInfo:c.extraInfo}),Array.isArray(o)?t:t[0]}saveTensorsForBackwardMode(e){return e.map(t=>this.keep(this.clone(t)))}getTensorsForGradient(e,t,n){let a=Sb(e);if(a!=null){let r=a.inputsToSave||[],s=a.outputsToSave||[],i;a.saveAllInputs?(R(Array.isArray(t),()=>"saveAllInputs is true, expected inputs to be an array."),i=Object.keys(t).map(l=>t[l])):i=r.map(l=>t[l]);let o=n.filter((l,u)=>s[u]);return i.concat(o)}return[]}makeTensor(e,t,n,a){if(e==null)throw new Error("Values passed to engine.makeTensor() are null");n=n||"float32",a=a||this.backend;let r=e;n==="string"&&Qr(e[0])&&(r=e.map(o=>$c(o)));let s=a.write(r,t,n),i=new Ae(t,n,s,this.nextTensorId());if(this.trackTensor(i,a),n==="string"){let o=this.state.tensorInfo.get(s),l=II(r);this.state.numBytes+=l-o.bytes,o.bytes=l}return i}makeTensorFromDataId(e,t,n,a){n=n||"float32";let r=new Ae(t,n,e,this.nextTensorId());return this.trackTensor(r,a),r}makeVariable(e,t=!0,n,a){n=n||this.nextVariableId().toString(),a!=null&&a!==e.dtype&&(e=e.cast(a));let r=new is(e,t,n,this.nextTensorId());if(this.state.registeredVariables[r.name]!=null)throw new Error(`Variable with name ${r.name} was already registered`);return this.state.registeredVariables[r.name]=r,this.incRef(r,this.backend),r}trackTensor(e,t){this.state.numTensors++,e.dtype==="string"&&this.state.numStringTensors++;let n=0;e.dtype!=="complex64"&&e.dtype!=="string"&&(n=e.size*Ib(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 is||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*Ib(e.dtype);this.state.numBytes-=n}t.backend.disposeData(e.dataId)&&this.removeDataId(e.dataId,t.backend)}disposeVariables(){for(let e in this.state.registeredVariables){let t=this.state.registeredVariables[e];this.disposeVariable(t)}}disposeVariable(e){this.disposeTensor(e),this.state.registeredVariables[e.name]!=null&&delete this.state.registeredVariables[e.name]}memory(){let e=this.backend.memory();return e.numTensors=this.state.numTensors,e.numDataBuffers=this.state.numDataBuffers,e.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(e.unreliable=!0,e.reasons==null&&(e.reasons=[]),e.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),e}async profile(e){this.state.profiling=!0;let t=this.state.numBytes,n=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await e(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(a=>a.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-t,this.state.activeProfile.newTensors=this.state.numTensors-n;for(let a of this.state.activeProfile.kernels)a.kernelTimeMs=await a.kernelTimeMs,a.extraInfo=await a.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(e,t,n,a,r,s){let i={id:this.state.nextTapeNodeId++,kernelName:e,inputs:t,outputs:n,saved:r},o=Sb(e);o!=null&&(a=o.gradFunc),a!=null&&(i.gradient=l=>(l=l.map((u,p)=>{if(u==null){let d=n[p],c=dm(d.size,d.dtype);return this.makeTensor(c,d.shape,d.dtype)}return u}),a(l.length>1?l:l[0],r,s))),this.state.activeTape.push(i)}keep(e){return e.kept=!0,e}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(e){let t={track:[],name:"unnamed scope",id:this.state.nextScopeId++};e&&(t.name=e),this.state.scopeStack.push(t),this.state.activeScope=t}endScope(e){let t=Ax(e),n=new Set(t.map(r=>r.id));for(let r=0;r<this.state.activeScope.track.length;r++){let s=this.state.activeScope.track[r];!s.kept&&!n.has(s.id)&&s.dispose()}let a=this.state.scopeStack.pop();this.state.activeScope=this.state.scopeStack.length===0?null:this.state.scopeStack[this.state.scopeStack.length-1],t.forEach(r=>{!r.kept&&r.scopeId===a.id&&this.track(r)})}gradients(e,t,n,a=!1){if(R(t.length>0,()=>"gradients() received an empty list of xs."),n!=null&&n.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${n.dtype}'`);let r=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",e));R(r instanceof Ae,()=>"The result y returned by f() must be a tensor.");let s=JF(this.state.activeTape,t,r);if(!a&&s.length===0&&t.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{let i={};i[r.id]=n==null?lD(r.shape):n,ZF(i,s,l=>this.tidy(l),uD);let o=t.map(l=>i[l.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(l=>{for(let u of l.saved)u.dispose()}),this.state.activeTape=null),{value:r,grads:o}})}customGrad(e){return R(ss(e),()=>"The f passed in customGrad(f) must be a function."),(...t)=>{R(t.every(i=>i instanceof Ae),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let n,a={};t.forEach((i,o)=>{a[o]=i});let r=(i,o)=>(n=e(...t,o),R(n.value instanceof Ae,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),R(ss(n.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),n.value),s=(i,o)=>{let l=n.gradFunc(i,o),u=Array.isArray(l)?l:[l];R(u.length===t.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),R(u.every(d=>d instanceof Ae),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");let p={};return u.forEach((d,c)=>{p[c]=()=>d}),p};return this.runKernelFunc({forwardFunc:r,backwardsFunc:s,inputs:a})}}readSync(e){return this.state.tensorInfo.get(e).backend.readSync(e)}read(e){return this.state.tensorInfo.get(e).backend.read(e)}readToGPU(e,t){return this.state.tensorInfo.get(e).backend.readToGPU(e,t)}async time(e){let t=Jp(),n=await this.backend.time(e);return n.wallMs=Jp()-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 V1;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}};Zp.nextTensorId=0;Zp.nextVariableId=0;function lD(e){let t=Sx(wt(e),"float32");return L.makeTensor(t,e,"float32")}function OI(){let e=_I();if(e._tfengine==null){let t=new CI(e);e._tfengine=new Zp(t)}return DF(e._tfengine.ENV),nD(()=>e._tfengine),e._tfengine}var L=OI();function uD(e,t){let n={a:e,b:t};return L.runKernel(ys,n)}var Fc={};Re(Fc,{isBrowser:()=>LI,isMobile:()=>dD,mockIsMobile:()=>cD});function pD(){return typeof navigator!="undefined"&&navigator!=null}var $b;function cD(e){$b=e}function dD(e){if($b!==void 0)return $b;if(e||pD()){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 LI(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}var Ca=X();Ca.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.")});Ca.registerFlag("IS_BROWSER",()=>LI());Ca.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ca.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ca.registerFlag("PROD",()=>!1);Ca.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ca.getBool("DEBUG"));Ca.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ca.registerFlag("IS_TEST",()=>!1);Ca.registerFlag("CHECK_COMPUTATION_FOR_ERRORS",()=>!0);Ca.registerFlag("WRAP_TO_IMAGEBITMAP",()=>!1);Ca.registerFlag("ENGINE_COMPILE_ONLY",()=>!1);function pr(e,t){let n=e;if(hn(e))return t==="string"?[]:[e.length];if(!Array.isArray(e))return[];let a=[];for(;Array.isArray(n)||hn(n)&&t!=="string";)a.push(n.length),n=n[0];return Array.isArray(e)&&X().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&zI(e,a,[]),a}function zI(e,t,n){if(n=n||[],!Array.isArray(e)&&!hn(e)){R(t.length===0,()=>`Element arr[${n.join("][")}] is a primitive, but should be an array/TypedArray of ${t[0]} elements`);return}R(t.length>0,()=>`Element arr[${n.join("][")}] should be a primitive, but is an array of ${e.length} elements`),R(e.length===t[0],()=>`Element arr[${n.join("][")}] should have ${t[0]} elements, but has ${e.length} elements`);let a=t.slice(1);for(let r=0;r<e.length;++r)zI(e[r],a,n.concat(r))}function U1(e,t,n,a){if(e!=="string_or_numeric"){if(e==null)throw new Error("Expected dtype cannot be null.");if(e!=="numeric"&&e!==t||e==="numeric"&&t==="string")throw new Error(`Argument '${n}' passed to '${a}' must be ${e} tensor, but got ${t} tensor`)}}function A(e,t,n,a="numeric"){if(e instanceof Ae)return U1(a,e.dtype,t,n),e;let r=cm(e);if(r!=="string"&&["bool","int32","float32"].indexOf(a)>=0&&(r=a),U1(a,r,t,n),e==null||!hn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string"){let o=e==null?"null":e.constructor.name;throw new Error(`Argument '${t}' passed to '${n}' must be a Tensor or TensorLike, but got '${o}'`)}let s=pr(e,r);!hn(e)&&!Array.isArray(e)&&(e=[e]);let i=r!=="string"?Gm(e,r):ti(e,[],!0);return L.makeTensor(i,s,r)}function Qp(e,t,n,a="numeric"){if(!Array.isArray(e))throw new Error(`Argument ${t} passed to ${n} must be a \`Tensor[]\` or \`TensorLike[]\``);return e.map((r,s)=>A(r,`${t}[${s}]`,n,a))}var WI="__op";function z(e){let t=Object.keys(e);if(t.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${t.length} keys.`);let n=t[0],a=e[n];n.endsWith("_")&&(n=n.substring(0,n.length-1)),n=n+WI;let r=(...s)=>{L.startScope(n);try{let i=a(...s);return Tx(i)&&console.error("Cannot return a Promise inside of tidy."),L.endScope(i),i}catch(i){throw L.endScope(null),i}};return Object.defineProperty(r,"name",{value:n,configurable:!0}),r}function hD(e,t){let n=A(e,"real","complex"),a=A(t,"imag","complex");Tn(n.shape,a.shape,`real and imag shapes, ${n.shape} and ${a.shape}, must match in call to tf.complex().`);let r={real:n,imag:a};return L.runKernel(ym,r)}var os=z({complex_:hD});function ws(e,t,n,a){if(a==null&&(a=cm(e)),a==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!hn(e)&&!Array.isArray(e)&&typeof e!="number"&&typeof e!="boolean"&&typeof e!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(t!=null){Nx(t);let r=wt(t),s=wt(n);R(r===s,()=>`Based on the provided shape, [${t}], the tensor should have ${r} values but has ${s}`);for(let i=0;i<n.length;++i){let o=n[i],l=i===n.length-1?o!==wt(t.slice(i)):!0;R(n[i]===t[i]||!l,()=>`Error creating a new Tensor. Inferred shape (${n}) does not match the provided shape (${t}). `)}}return!hn(e)&&!Array.isArray(e)&&(e=[e]),t=t||n,e=a!=="string"?Gm(e,a):ti(e,[],!0),L.makeTensor(e,t,a)}function Qn(e,t,n){let a=pr(e,n);return ws(e,t,a,n)}var Fb={float32:4,float16:2,int32:4,uint16:2,uint8:1,bool:1,complex64:8},Gh=4;async function mD(e,t){let n=[],a=[],r=Array.isArray(e)?e.map(i=>i.name):Object.keys(e);for(let i=0;i<r.length;++i){let o=r[i],l=Array.isArray(e)?e[i].tensor:e[o];if(l.dtype!=="float32"&&l.dtype!=="int32"&&l.dtype!=="bool"&&l.dtype!=="string"&&l.dtype!=="complex64")throw new Error(`Unsupported dtype in weight '${o}': ${l.dtype}`);let u={name:o,shape:l.shape,dtype:l.dtype};if(l.dtype==="string"){let p=new Promise(async d=>{let c=await l.bytes(),h=c.reduce((g,y)=>g+y.length,0)+Gh*c.length,m=new Uint8Array(h),f=0;for(let g=0;g<c.length;g++){let y=c[g],b=new Uint8Array(new Uint32Array([y.length]).buffer);m.set(b,f),f+=Gh,m.set(y,f),f+=y.length}d(m)});a.push(p)}else a.push(l.data());t!=null&&(u.group=t),n.push(u)}let s=await Promise.all(a);return{data:fD(s),specs:n}}function BI(e,t){let n={},a,r=0;for(let s of t){let i=s.name,o=s.dtype,l=s.shape,u=wt(l),p;if("quantization"in s){let d=s.quantization;if(d.dtype==="uint8"||d.dtype==="uint16"){if(!("min"in d&&"scale"in d))throw new Error(`Weight ${s.name} with quantization ${d.dtype} doesn't have corresponding metadata min and scale.`)}else if(d.dtype==="float16"){if(o!=="float32")throw new Error(`Weight ${s.name} is quantized with ${d.dtype} which only supports weights of type float32 not ${o}.`)}else throw new Error(`Weight ${s.name} has unknown quantization dtype ${d.dtype}. Supported quantization dtypes are: 'uint8', 'uint16', and 'float16'.`);let c=Fb[d.dtype],h=e.slice(r,r+u*c),m=d.dtype==="uint8"?new Uint8Array(h):new Uint16Array(h);if(o==="float32")if(d.dtype==="uint8"||d.dtype==="uint16"){p=new Float32Array(m.length);for(let f=0;f<m.length;f++){let g=m[f];p[f]=g*d.scale+d.min}}else if(d.dtype==="float16")a===void 0&&(a=wD()),p=a(m);else throw new Error(`Unsupported quantization type ${d.dtype} for weight type float32.`);else if(o==="int32"){if(d.dtype!=="uint8"&&d.dtype!=="uint16")throw new Error(`Unsupported quantization type ${d.dtype} for weight type int32.`);p=new Int32Array(m.length);for(let f=0;f<m.length;f++){let g=m[f];p[f]=Math.round(g*d.scale+d.min)}}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);r+=u*c}else if(o==="string"){let d=wt(s.shape);p=[];for(let c=0;c<d;c++){let h=new Uint32Array(e.slice(r,r+Gh))[0];r+=Gh;let m=new Uint8Array(e.slice(r,r+h));p.push(m),r+=h}}else{let d=Fb[o],c=e.slice(r,r+u*d);if(o==="float32")p=new Float32Array(c);else if(o==="int32")p=new Int32Array(c);else if(o==="bool")p=new Uint8Array(c);else if(o==="complex64"){p=new Float32Array(c);let h=new Float32Array(p.length/2),m=new Float32Array(p.length/2);for(let y=0;y<h.length;y++)h[y]=p[y*2],m[y]=p[y*2+1];let f=Qn(h,l,"float32"),g=Qn(m,l,"float32");n[i]=os(f,g),f.dispose(),g.dispose()}else throw new Error(`Unsupported dtype in weight '${i}': ${o}`);r+=u*d}o!=="complex64"&&(n[i]=Qn(p,l,o))}return n}function fD(e){if(e===null)throw new Error(`Invalid input value: ${JSON.stringify(e)}`);let t=0,n=[];e.forEach(s=>{if(t+=s.byteLength,n.push(s.byteLength===s.buffer.byteLength?s:new s.constructor(s)),!(s instanceof Float32Array||s instanceof Int32Array||s instanceof Uint8Array))throw new Error(`Unsupported TypedArray subtype: ${s.constructor.name}`)});let a=new Uint8Array(t),r=0;return n.forEach(s=>{a.set(new Uint8Array(s.buffer),r),r+=s.byteLength}),a.buffer}var $x=typeof Buffer!="undefined"&&(typeof Blob=="undefined"||typeof atob=="undefined"||typeof btoa=="undefined");function G1(e){return $x?Buffer.byteLength(e):new Blob([e]).size}function gD(e){if($x)return Buffer.from(e).toString("base64");let t=new Uint8Array(e),n="";for(let a=0,r=t.length;a<r;a++)n+=String.fromCharCode(t[a]);return btoa(n)}function yD(e){if($x){let a=Buffer.from(e,"base64");return a.buffer.slice(a.byteOffset,a.byteOffset+a.byteLength)}let t=atob(e),n=new Uint8Array(t.length);for(let a=0;a<t.length;++a)n.set([t.charCodeAt(a)],a);return n.buffer}function Fx(e){if(e.length===1)return e[0];let t=0;e.forEach(r=>{t+=r.byteLength});let n=new Uint8Array(t),a=0;return e.forEach(r=>{n.set(new Uint8Array(r),a),a+=r.byteLength}),n.buffer}function H1(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 VI(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,weightsManifest:t};return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),n}async function Dx(e,t){let n={modelTopology:e.modelTopology,format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy};if(e.trainingConfig!=null&&(n.trainingConfig=e.trainingConfig),e.weightsManifest!=null){let[a,r]=await t(e.weightsManifest);n.weightSpecs=a,n.weightData=r}return e.signature!=null&&(n.signature=e.signature),e.userDefinedMetadata!=null&&(n.userDefinedMetadata=e.userDefinedMetadata),e.modelInitializer!=null&&(n.modelInitializer=e.modelInitializer),n}function Dc(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:G1(JSON.stringify(e.modelTopology)),weightSpecsBytes:e.weightSpecs==null?0:G1(JSON.stringify(e.weightSpecs)),weightDataBytes:e.weightData==null?0:e.weightData.byteLength}}function bD(){let e=n=>{let a=n<<13,r=0;for(;(a&8388608)===0;)r-=8388608,a<<=1;return a&=-8388609,r+=947912704,a|r},t=new Uint32Array(2048);t[0]=0;for(let n=1;n<1024;n++)t[n]=e(n);for(let n=1024;n<2048;n++)t[n]=939524096+(n-1024<<13);return t}function xD(){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 vD(){let e=new Uint32Array(64);for(let t=0;t<64;t++)e[t]=1024;return e[0]=e[32]=0,e}function wD(){let e=bD(),t=xD(),n=vD();return a=>{let r=new ArrayBuffer(4*a.length),s=new Uint32Array(r);for(let i=0;i<a.length;i++){let o=a[i],l=e[n[o>>10]+(o&1023)]+t[o>>10];s[i]=l}return new Float32Array(r)}}var Dt=class{constructor(){this.saveRouters=[],this.loadRouters=[]}static getInstance(){return Dt.instance==null&&(Dt.instance=new Dt),Dt.instance}static registerSaveRouter(e){Dt.getInstance().saveRouters.push(e)}static registerLoadRouter(e){Dt.getInstance().loadRouters.push(e)}static getSaveHandlers(e){return Dt.getHandlers(e,"save")}static getLoadHandlers(e,t){return Dt.getHandlers(e,"load",t)}static getHandlers(e,t,n){let a=[];return(t==="load"?Dt.getInstance().loadRouters:Dt.getInstance().saveRouters).forEach(r=>{let s=r(e,n);s!==null&&a.push(s)}),a}},kD=e=>Dt.registerSaveRouter(e),ID=e=>Dt.registerLoadRouter(e),SD=e=>Dt.getSaveHandlers(e),ND=(e,t)=>Dt.getLoadHandlers(e,t),Db="tensorflowjs",Rb=1,Xs="models_store",es="model_info_store";function UI(){if(!X().getBool("IS_BROWSER"))throw new Error("Failed to obtain IndexedDB factory because the current environmentis not a web browser.");let e=typeof window=="undefined"?self:window,t=e.indexedDB||e.mozIndexedDB||e.webkitIndexedDB||e.msIndexedDB||e.shimIndexedDB;if(t==null)throw new Error("The current browser does not appear to support IndexedDB.");return t}function Mb(e){let t=e.result;t.createObjectStore(Xs,{keyPath:"modelPath"}),t.createObjectStore(es,{keyPath:"modelPath"})}var si=class{constructor(e){if(this.indexedDB=UI(),e==null||!e)throw new Error("For IndexedDB, modelPath must not be null, undefined or empty.");this.modelPath=e}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");return this.databaseAction(this.modelPath,e)}async load(){return this.databaseAction(this.modelPath)}databaseAction(e,t){return new Promise((n,a)=>{let r=this.indexedDB.open(Db,Rb);r.onupgradeneeded=()=>Mb(r),r.onsuccess=()=>{let s=r.result;if(t==null){let i=s.transaction(Xs,"readonly"),o=i.objectStore(Xs).get(this.modelPath);o.onsuccess=()=>{if(o.result==null)return s.close(),a(new Error(`Cannot find model with path '${this.modelPath}' in IndexedDB.`));n(o.result.modelArtifacts)},o.onerror=l=>(s.close(),a(o.error)),i.oncomplete=()=>s.close()}else{let i=Dc(t),o=s.transaction(es,"readwrite"),l=o.objectStore(es),u=l.put({modelPath:this.modelPath,modelArtifactsInfo:i}),p;u.onsuccess=()=>{p=s.transaction(Xs,"readwrite");let d=p.objectStore(Xs).put({modelPath:this.modelPath,modelArtifacts:t,modelArtifactsInfo:i});d.onsuccess=()=>n({modelArtifactsInfo:i}),d.onerror=c=>{l=o.objectStore(es);let h=l.delete(this.modelPath);h.onsuccess=()=>(s.close(),a(d.error)),h.onerror=m=>(s.close(),a(d.error))}},u.onerror=d=>(s.close(),a(u.error)),o.oncomplete=()=>{p==null?s.close():p.oncomplete=()=>s.close()}}},r.onerror=s=>a(r.error)})}};si.URL_SCHEME="indexeddb://";var GI=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(si.URL_SCHEME)?TD(e.slice(si.URL_SCHEME.length)):null;Dt.registerSaveRouter(GI);Dt.registerLoadRouter(GI);function TD(e){return new si(e)}function CD(e){return e.startsWith(si.URL_SCHEME)?e.slice(si.URL_SCHEME.length):e}var _D=class{constructor(){this.indexedDB=UI()}async listModels(){return new Promise((e,t)=>{let n=this.indexedDB.open(Db,Rb);n.onupgradeneeded=()=>Mb(n),n.onsuccess=()=>{let a=n.result,r=a.transaction(es,"readonly"),s=r.objectStore(es).getAll();s.onsuccess=()=>{let i={};for(let o of s.result)i[o.modelPath]=o.modelArtifactsInfo;e(i)},s.onerror=i=>(a.close(),t(s.error)),r.oncomplete=()=>a.close()},n.onerror=a=>t(n.error)})}async removeModel(e){return e=CD(e),new Promise((t,n)=>{let a=this.indexedDB.open(Db,Rb);a.onupgradeneeded=()=>Mb(a),a.onsuccess=()=>{let r=a.result,s=r.transaction(es,"readwrite"),i=s.objectStore(es),o=i.get(e),l;o.onsuccess=()=>{if(o.result==null)return r.close(),n(new Error(`Cannot find model with path '${e}' in IndexedDB.`));{let u=i.delete(e),p=()=>{l=r.transaction(Xs,"readwrite");let d=l.objectStore(Xs).delete(e);d.onsuccess=()=>t(o.result.modelArtifactsInfo),d.onerror=c=>n(o.error)};u.onsuccess=p,u.onerror=d=>(p(),r.close(),n(o.error))}},o.onerror=u=>(r.close(),n(o.error)),s.oncomplete=()=>{l==null?r.close():l.oncomplete=()=>r.close()}},a.onerror=r=>n(a.error)})}},Tr="/",dl="tensorflowjs_models",HI="info",ED="model_topology",AD="weight_specs",$D="weight_data",FD="model_metadata";function jI(e){return{info:[dl,e,HI].join(Tr),topology:[dl,e,ED].join(Tr),weightSpecs:[dl,e,AD].join(Tr),weightData:[dl,e,$D].join(Tr),modelMetadata:[dl,e,FD].join(Tr)}}function qI(e){for(let t of Object.values(e))window.localStorage.removeItem(t)}function DD(e){let t=e.split(Tr);if(t.length<3)throw new Error(`Invalid key format: ${e}`);return t.slice(1,t.length-1).join(Tr)}function RD(e){return e.startsWith(ii.URL_SCHEME)?e.slice(ii.URL_SCHEME.length):e}var ii=class{constructor(e){if(!X().getBool("IS_BROWSER")||typeof window=="undefined"||typeof window.localStorage=="undefined")throw new Error("The current environment does not support local storage.");if(this.LS=window.localStorage,e==null||!e)throw new Error("For local storage, modelPath must not be null, undefined or empty.");this.modelPath=e,this.keys=jI(this.modelPath)}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserLocalStorage.save() does not support saving model topology in binary formats yet.");{let t=JSON.stringify(e.modelTopology),n=JSON.stringify(e.weightSpecs),a=Dc(e);try{this.LS.setItem(this.keys.info,JSON.stringify(a)),this.LS.setItem(this.keys.topology,t),this.LS.setItem(this.keys.weightSpecs,n),this.LS.setItem(this.keys.weightData,gD(e.weightData));let r={format:e.format,generatedBy:e.generatedBy,convertedBy:e.convertedBy,signature:e.signature!=null?e.signature:void 0,userDefinedMetadata:e.userDefinedMetadata!=null?e.userDefinedMetadata:void 0,modelInitializer:e.modelInitializer!=null?e.modelInitializer:void 0,trainingConfig:e.trainingConfig!=null?e.trainingConfig:void 0};return this.LS.setItem(this.keys.modelMetadata,JSON.stringify(r)),{modelArtifactsInfo:a}}catch(r){throw qI(this.keys),new Error(`Failed to save model '${this.modelPath}' to local storage: size quota being exceeded is a possible cause of this failure: modelTopologyBytes=${a.modelTopologyBytes}, weightSpecsBytes=${a.weightSpecsBytes}, weightDataBytes=${a.weightDataBytes}.`)}}}async load(){let e=JSON.parse(this.LS.getItem(this.keys.info));if(e==null)throw new Error(`In local storage, there is no model with name '${this.modelPath}'`);if(e.modelTopologyType!=="JSON")throw new Error("BrowserLocalStorage does not support loading non-JSON model topology yet.");let t={},n=JSON.parse(this.LS.getItem(this.keys.topology));if(n==null)throw new Error(`In local storage, the topology of model '${this.modelPath}' is missing.`);t.modelTopology=n;let a=JSON.parse(this.LS.getItem(this.keys.weightSpecs));if(a==null)throw new Error(`In local storage, the weight specs of model '${this.modelPath}' are missing.`);t.weightSpecs=a;let r=this.LS.getItem(this.keys.modelMetadata);if(r!=null){let i=JSON.parse(r);t.format=i.format,t.generatedBy=i.generatedBy,t.convertedBy=i.convertedBy,i.signature!=null&&(t.signature=i.signature),i.userDefinedMetadata!=null&&(t.userDefinedMetadata=i.userDefinedMetadata),i.modelInitializer!=null&&(t.modelInitializer=i.modelInitializer),i.trainingConfig!=null&&(t.trainingConfig=i.trainingConfig)}let s=this.LS.getItem(this.keys.weightData);if(s==null)throw new Error(`In local storage, the binary weight values of model '${this.modelPath}' are missing.`);return t.weightData=yD(s),t}};ii.URL_SCHEME="localstorage://";var KI=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(ii.URL_SCHEME)?MD(e.slice(ii.URL_SCHEME.length)):null;Dt.registerSaveRouter(KI);Dt.registerLoadRouter(KI);function MD(e){return new ii(e)}var PD=class{constructor(){R(X().getBool("IS_BROWSER"),()=>"Current environment is not a web browser"),R(typeof window=="undefined"||typeof window.localStorage!="undefined",()=>"Current browser does not appear to support localStorage"),this.LS=window.localStorage}async listModels(){let e={},t=dl+Tr,n=Tr+HI;for(let a=0;a<this.LS.length;++a){let r=this.LS.key(a);if(r.startsWith(t)&&r.endsWith(n)){let s=DD(r);e[s]=JSON.parse(this.LS.getItem(r))}}return e}async removeModel(e){e=RD(e);let t=jI(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 qI(t),n}},fl="://",ca=class{constructor(){this.managers={}}static getInstance(){return ca.instance==null&&(ca.instance=new ca),ca.instance}static registerManager(e,t){R(e!=null,()=>"scheme must not be undefined or null."),e.endsWith(fl)&&(e=e.slice(0,e.indexOf(fl))),R(e.length>0,()=>"scheme must not be an empty string.");let n=ca.getInstance();R(n.managers[e]==null,()=>`A model store manager is already registered for scheme '${e}'.`),n.managers[e]=t}static getManager(e){let t=this.getInstance().managers[e];if(t==null)throw new Error(`Cannot find model manager for scheme '${e}'`);return t}static getSchemes(){return Object.keys(this.getInstance().managers)}};function Nh(e){if(e.indexOf(fl)===-1)throw new Error(`The url string provided does not contain a scheme. Supported schemes are: ${ca.getSchemes().join(",")}`);return{scheme:e.split(fl)[0],path:e.split(fl)[1]}}async function XI(e,t,n=!1){R(e!==t,()=>`Old path and new path are the same: '${e}'`);let a=Dt.getLoadHandlers(e);R(a.length>0,()=>`Copying failed because no load handler is found for source URL ${e}.`),R(a.length<2,()=>`Copying failed because more than one (${a.length}) load handlers for source URL ${e}.`);let r=a[0],s=Dt.getSaveHandlers(t);R(s.length>0,()=>`Copying failed because no save handler is found for destination URL ${t}.`),R(s.length<2,()=>`Copying failed because more than one (${a.length}) save handlers for destination URL ${t}.`);let i=s[0],o=Nh(e).scheme,l=Nh(e).path,u=o===Nh(e).scheme,p=await r.load();n&&u&&await ca.getManager(o).removeModel(l);let d=await i.save(p);return n&&!u&&await ca.getManager(o).removeModel(l),d.modelArtifactsInfo}async function OD(){let e=ca.getSchemes(),t={};for(let n of e){let a=await ca.getManager(n).listModels();for(let r in a){let s=n+fl+r;t[s]=a[r]}}return t}async function LD(e){let t=Nh(e);return ca.getManager(t.scheme).removeModel(t.path)}async function zD(e,t){return XI(e,t,!1)}async function WD(e,t){return XI(e,t,!0)}var BD=class{fetch(e,t){return fetch(e,t)}now(){return performance.now()}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Browser's encoder only supports utf-8, but got ${t}`);return this.textEncoder==null&&(this.textEncoder=new TextEncoder),this.textEncoder.encode(e)}decode(e,t){return new TextDecoder(t).decode(e)}};if(X().get("IS_BROWSER")){X().setPlatform("browser",new BD);try{ca.registerManager(ii.URL_SCHEME,new PD)}catch(e){}try{ca.registerManager(si.URL_SCHEME,new _D)}catch(e){}}var VD={importFetch:()=>K$()},cb,UD=class{constructor(){this.util=X$(),this.textEncoder=new this.util.TextEncoder}fetch(e,t){return X().global.fetch!=null?X().global.fetch(e,t):(cb==null&&(cb=VD.importFetch()),cb(e,t))}now(){let e=process.hrtime();return e[0]*1e3+e[1]/1e6}encode(e,t){if(t!=="utf-8"&&t!=="utf8")throw new Error(`Node built-in encoder only supports utf-8, but got ${t}`);return this.textEncoder.encode(e)}decode(e,t){return e.length===0?"":new this.util.TextDecoder(t).decode(e)}};X().get("IS_NODE")&&!X().get("IS_BROWSER")&&X().setPlatform("node",new UD);function He(e,t="float32",n){return t=t||"float32",Nx(e),new jt(e,t,n)}function GD(e,t){let n=A(e,"x","cast");if(!kI(t))throw new Error(`Failed to cast to unknown dtype ${t}`);if(t==="string"&&n.dtype!=="string"||t!=="string"&&n.dtype==="string")throw new Error("Only strings can be casted to strings");let a={x:n},r={dtype:t};return L.runKernel(Si,a,r)}var oe=z({cast_:GD});function HD(e){let t={x:A(e,"x","clone","string_or_numeric")};return L.runKernel(zi,t)}var _r=z({clone_:HD});function YI(e,t=!1){console.log(e.toString(t))}OI();var jD={buffer:He,cast:oe,clone:_r,print:YI};aD(jD);var Qt={};Re(Qt,{browserFiles:()=>QD,browserHTTPRequest:()=>rR,concatenateArrayBuffers:()=>Fx,copyModel:()=>zD,decodeWeights:()=>BI,encodeWeights:()=>mD,fromMemory:()=>iR,getLoadHandlers:()=>ND,getModelArtifactsForJSON:()=>Dx,getModelArtifactsInfoForJSON:()=>Dc,getSaveHandlers:()=>SD,http:()=>Mx,isHTTPScheme:()=>Pb,listModels:()=>OD,loadWeights:()=>eR,moveModel:()=>WD,registerLoadRouter:()=>ID,registerSaveRouter:()=>kD,removeModel:()=>LD,weightsLoaderFactory:()=>ZI,withSaveHandler:()=>oR});var qD="model",KD=".json",XD=".weights.bin";function j1(e){return new Promise(t=>setTimeout(t)).then(e)}var wl=class{constructor(e){if(!X().getBool("IS_BROWSER"))throw new Error("browserDownloads() cannot proceed because the current environment is not a browser.");e.startsWith(wl.URL_SCHEME)&&(e=e.slice(wl.URL_SCHEME.length)),(e==null||e.length===0)&&(e=qD),this.modelJsonFileName=e+KD,this.weightDataFileName=e+XD}async save(e){if(typeof document=="undefined")throw new Error("Browser downloads are not supported in this environment since `document` is not present");let t=window.URL.createObjectURL(new Blob([e.weightData],{type:"application/octet-stream"}));if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserDownloads.save() does not support saving model topology in binary formats yet.");{let n=[{paths:["./"+this.weightDataFileName],weights:e.weightSpecs}],a=VI(e,n),r=window.URL.createObjectURL(new Blob([JSON.stringify(a)],{type:"application/json"})),s=this.modelJsonAnchor==null?document.createElement("a"):this.modelJsonAnchor;if(s.download=this.modelJsonFileName,s.href=r,await j1(()=>s.dispatchEvent(new MouseEvent("click"))),e.weightData!=null){let i=this.weightDataAnchor==null?document.createElement("a"):this.weightDataAnchor;i.download=this.weightDataFileName,i.href=t,await j1(()=>i.dispatchEvent(new MouseEvent("click")))}return{modelArtifactsInfo:Dc(e)}}}};wl.URL_SCHEME="downloads://";var YD=class{constructor(e){if(e==null||e.length<1)throw new Error(`When calling browserFiles, at least 1 file is required, but received ${e}`);this.jsonFile=e[0],this.weightsFiles=e.slice(1)}async load(){return new Promise((e,t)=>{let n=new FileReader;n.onload=a=>{let r=JSON.parse(a.target.result),s=r.modelTopology;if(s==null){t(new Error(`modelTopology field is missing from file ${this.jsonFile.name}`));return}if(r.weightsManifest==null){t(new Error(`weightManifest field is missing from file ${this.jsonFile.name}`));return}if(this.weightsFiles.length===0){e({modelTopology:s});return}let i=Dx(r,o=>this.loadWeights(o));e(i)},n.onerror=a=>t(`Failed to read model topology and weights manifest JSON from file '${this.jsonFile.name}'. BrowserFiles supports loading Keras-style tf.Model artifacts only.`),n.readAsText(this.jsonFile)})}loadWeights(e){let t=[],n=[];for(let s of e)t.push(...s.weights),n.push(...s.paths);let a=this.checkManifestAndWeightFiles(e),r=n.map(s=>this.loadWeightsFile(s,a[s]));return Promise.all(r).then(s=>[t,Fx(s)])}loadWeightsFile(e,t){return new Promise((n,a)=>{let r=new FileReader;r.onload=s=>{let i=s.target.result;n(i)},r.onerror=s=>a(`Failed to weights data from file of path '${e}'.`),r.readAsArrayBuffer(t)})}checkManifestAndWeightFiles(e){let t=[],n=this.weightsFiles.map(r=>H1(r.name)),a={};for(let r of e)r.paths.forEach(s=>{let i=H1(s);if(t.indexOf(i)!==-1)throw new Error(`Duplicate file basename found in weights manifest: '${i}'`);if(t.push(i),n.indexOf(i)===-1)throw new Error(`Weight file with basename '${i}' is not provided.`);a[s]=this.weightsFiles[n.indexOf(i)]});if(t.length!==this.weightsFiles.length)throw new Error(`Mismatch in the number of files in weights manifest (${t.length}) and the number of weight files provided (${this.weightsFiles.length}).`);return a}},JD=e=>X().getBool("IS_BROWSER")&&!Array.isArray(e)&&e.startsWith(wl.URL_SCHEME)?ZD(e.slice(wl.URL_SCHEME.length)):null;Dt.registerSaveRouter(JD);function ZD(e="model"){return new wl(e)}function QD(e){return new YD(e)}function q1(e,t,n,a){i(e),n=n==null?0:n,a=a==null?1:a,o(n,a);let r=0,s=l=>(l.then(u=>{let p=n+ ++r/e.length*(a-n);return t(p),u}),l);function i(l){R(l!=null&&Array.isArray(l)&&l.length>0,()=>"promises must be a none empty array")}function o(l,u){R(l>=0&&l<=1,()=>`Progress fraction must be in range [0, 1], but got startFraction ${l}`),R(u>=0&&u<=1,()=>`Progress fraction must be in range [0, 1], but got endFraction ${u}`),R(u>=l,()=>`startFraction must be no more than endFraction, but got startFraction ${l} and endFraction ${u}`)}return Promise.all(e.map(s))}async function JI(e,t){t==null&&(t={});let n=t.fetchFunc==null?X().platform.fetch:t.fetchFunc,a=e.map(u=>n(u,t.requestInit,{isBinary:!0})),r=0,s=.5,i=(t.onProgress==null?await Promise.all(a):await q1(a,t.onProgress,r,s)).map(u=>u.arrayBuffer()),o=.5,l=1;return t.onProgress==null?await Promise.all(i):await q1(i,t.onProgress,o,l)}async function eR(e,t="",n,a){return ZI(r=>JI(r,{requestInit:a}))(e,t,n)}function ZI(e){return async(t,n="",a)=>{let r=t.map(()=>!1),s={},i=a!=null?a.map(()=>!1):[],o=[];if(t.forEach((h,m)=>{let f=0;h.weights.forEach(g=>{let y="quantization"in g?g.quantization.dtype:g.dtype,b=Fb[y]*wt(g.shape),x=()=>{r[m]=!0,s[m]==null&&(s[m]=[]),s[m].push({manifestEntry:g,groupOffset:f,sizeBytes:b})};a!=null?a.forEach((v,w)=>{v===g.name&&(x(),i[w]=!0)}):x(),o.push(g.name),f+=b})}),!i.every(h=>h)){let h=a.filter((m,f)=>!i[f]);throw new Error(`Could not find weights in manifest with names: ${h.join(", ")}.
|
|
Manifest JSON has weights with names: ${o.join(", ")}.`)}let l=r.reduce((h,m,f)=>(m&&h.push(f),h),[]),u=[];l.forEach(h=>{t[h].paths.forEach(m=>{let f=n+(n.endsWith("/")?"":"/")+m;u.push(f)})});let p=await e(u),d={},c=0;return l.forEach(h=>{let m=t[h].paths.length,f=0;for(let x=0;x<m;x++)f+=p[c+x].byteLength;let g=new ArrayBuffer(f),y=new Uint8Array(g),b=0;for(let x=0;x<m;x++){let v=new Uint8Array(p[c+x]);y.set(v,b),b+=v.byteLength}s[h].forEach(x=>{let v=g.slice(x.groupOffset,x.groupOffset+x.sizeBytes),w=BI(v,[x.manifestEntry]);for(let T in w)d[T]=w[T]}),c+=m}),d}}var tR="application/octet-stream",nR="application/json",Rx=class{constructor(e,t){if(this.DEFAULT_METHOD="POST",t==null&&(t={}),this.weightPathPrefix=t.weightPathPrefix,this.onProgress=t.onProgress,this.weightUrlConverter=t.weightUrlConverter,t.fetchFunc!=null?(R(typeof t.fetchFunc=="function",()=>"Must pass a function that matches the signature of `fetch` (see https://developer.mozilla.org/en-US/docs/Web/API/Fetch_API)"),this.fetch=t.fetchFunc):this.fetch=X().platform.fetch,R(e!=null&&e.length>0,()=>"URL path for http must not be null, undefined or empty."),Array.isArray(e)&&R(e.length===2,()=>`URL paths for http must have a length of 2, (actual length is ${e.length}).`),this.path=e,t.requestInit!=null&&t.requestInit.body!=null)throw new Error("requestInit is expected to have no pre-existing body, but has one.");this.requestInit=t.requestInit||{}}async save(e){if(e.modelTopology instanceof ArrayBuffer)throw new Error("BrowserHTTPRequest.save() does not support saving model topology in binary formats yet.");let t=Object.assign({method:this.DEFAULT_METHOD},this.requestInit);t.body=new FormData;let n=[{paths:["./model.weights.bin"],weights:e.weightSpecs}],a=VI(e,n);t.body.append("model.json",new Blob([JSON.stringify(a)],{type:nR}),"model.json"),e.weightData!=null&&t.body.append("model.weights.bin",new Blob([e.weightData],{type:tR}),"model.weights.bin");let r=await this.fetch(this.path,t);if(r.ok)return{modelArtifactsInfo:Dc(e),responses:[r]};throw new Error(`BrowserHTTPRequest.save() failed due to HTTP response status ${r.status}.`)}async load(){let e=await this.fetch(this.path,this.requestInit);if(!e.ok)throw new Error(`Request to ${this.path} failed with status code ${e.status}. Please verify this URL points to the model JSON of the model to load.`);let t;try{t=await e.json()}catch(r){let s=`Failed to parse model JSON of response from ${this.path}.`;throw this.path.endsWith(".pb")?s+=" Your path contains a .pb file extension. Support for .pb models have been removed in TensorFlow.js 1.0 in favor of .json models. You can re-convert your Python TensorFlow model using the TensorFlow.js 1.0 conversion scripts or you can convert your.pb models with the 'pb2json'NPM script in the tensorflow/tfjs-converter repository.":s+=" Please make sure the server is serving valid JSON for this request.",new Error(s)}let n=t.modelTopology,a=t.weightsManifest;if(n==null&&a==null)throw new Error(`The JSON from HTTP path ${this.path} contains neither model topology or manifest for weights.`);return Dx(t,r=>this.loadWeights(r))}async loadWeights(e){let t=Array.isArray(this.path)?this.path[1]:this.path,[n,a]=aR(t),r=this.weightPathPrefix||n,s=[];for(let u of e)s.push(...u.weights);let i=[],o=[];for(let u of e)for(let p of u.paths)this.weightUrlConverter!=null?o.push(this.weightUrlConverter(p)):i.push(r+p+a);this.weightUrlConverter&&i.push(...await Promise.all(o));let l=await JI(i,{requestInit:this.requestInit,fetchFunc:this.fetch,onProgress:this.onProgress});return[s,Fx(l)]}};Rx.URL_SCHEME_REGEX=/^https?:\/\//;function aR(e){let t=e.lastIndexOf("/"),n=e.lastIndexOf("?"),a=e.substring(0,t),r=n>t?e.substring(n):"";return[a+"/",r]}function Pb(e){return e.match(Rx.URL_SCHEME_REGEX)!=null}var QI=(e,t)=>{if(typeof fetch=="undefined"&&(t==null||t.fetchFunc==null))return null;{let n=!0;if(Array.isArray(e)?n=e.every(a=>Pb(a)):n=Pb(e),n)return Mx(e,t)}return null};Dt.registerSaveRouter(QI);Dt.registerLoadRouter(QI);function Mx(e,t){return new Rx(e,t)}function rR(e,t){return Mx(e,t)}var db=class{constructor(e){this.modelArtifacts=e}async load(){return this.modelArtifacts}},sR=class{constructor(e){this.saveHandler=e}async save(e){return this.saveHandler(e)}};function iR(e,t,n,a){return arguments.length===1?e.modelTopology!=null||e.weightSpecs!=null?new db(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 db({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 db({modelTopology:e,weightSpecs:t,weightData:n,trainingConfig:a}))}function oR(e){return new sR(e)}var eS={};Re(eS,{confusionMatrix:()=>dR});function lR(e,t,n=!1,a=!1){let r=A(e,"a","matMul"),s=A(t,"b","matMul");[r,s]=$t(r,s);let i={a:r,b:s},o={transposeA:n,transposeB:a};return L.runKernel(Ii,i,o)}var Fe=z({matMul_:lR});function uR(e,t,n=1,a=0){if(t<2)throw new Error(`Error in oneHot: depth must be >=2, but it is ${t}`);let r={indices:A(e,"indices","oneHot","int32")},s={depth:t,onValue:n,offValue:a};return L.runKernel(Yi,r,s)}var kl=z({oneHot_:uR});function pR(e,t){let n=A(e,"x","transpose");if(t==null&&(t=n.shape.map((s,i)=>i).reverse()),R(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of perm ${t}.`),t.forEach(s=>{R(s>=0&&s<n.rank,()=>`All entries in 'perm' must be between 0 and ${n.rank-1} but got ${t}`)}),n.rank<=1)return n.clone();let a={x:n},r={perm:t};return L.runKernel(go,a,r)}var Pe=z({transpose_:pR});function cR(e,t,n){let a=A(e,"labels","confusionMatrix"),r=A(t,"predictions","confusionMatrix");R(n==null||n>0&&Number.isInteger(n),()=>`If provided, numClasses must be a positive integer, but got ${n}`),R(a.rank===1,()=>`Expected the rank of labels to be 1, but got ${a.rank}`),R(r.rank===1,()=>`Expected the rank of predictions to be 1, but got ${r.rank}`),R(a.shape[0]===r.shape[0],()=>`Mismatch in the number of examples: ${a.shape[0]} vs. ${r.shape[0]}. Labels and predictions should have the same number of elements.`),R(n>0&&Number.isInteger(n),()=>`numClasses is required to be a positive integer, but got ${n}`);let s=kl(oe(a,"int32"),n),i=kl(oe(r,"int32"),n),o=Pe(s),l=Fe(o,i);return oe(l,"int32")}var dR=z({confusionMatrix_:cR}),Pu={};Re(Pu,{assertAndGetBroadcastShape:()=>ht,getBroadcastDims:()=>tS,getReductionAxes:()=>Bt});function tS(e,t){let n=e.length,a=[];for(let r=0;r<n;r++){let s=n-1-r,i=e[s]||1;(t[t.length-1-r]||1)>1&&i===1&&a.unshift(s)}return a}function Bt(e,t){let n=[];for(let a=0;a<t.length;a++){let r=e[e.length-a-1],s=t.length-a-1,i=t[s];(r==null||r===1&&i>1)&&n.unshift(s)}return n}function ht(e,t){let n=[],a=Math.max(e.length,t.length);for(let r=0;r<a;r++){let s=e[e.length-r-1];s==null&&(s=1);let i=t[t.length-r-1];if(i==null&&(i=1),s===1)n.unshift(i);else if(i===1)n.unshift(s);else if(s!==i){let o=`Operands could not be broadcast together with shapes ${e} and ${t}.`;throw Error(o)}else n.unshift(s)}return n}var yo={};Re(yo,{fromPixels:()=>xR,fromPixelsAsync:()=>yR,toPixels:()=>bR});function jm(e,t,n){if(xi(e),t!=null&&t.length!==3)throw new Error("tensor3d() requires shape to have three numbers");let a=pr(e,n);if(a.length!==3&&a.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return ws(e,t,a,n)}var Bs;function nS(e,t=3){if(t>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(e==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let n=!1,a=!1,r=!1,s=!1,i=!1,o=!1;if(e.data instanceof Uint8Array)n=!0;else if(typeof ImageData!="undefined"&&e instanceof ImageData)a=!0;else if(typeof HTMLVideoElement!="undefined"&&e instanceof HTMLVideoElement)r=!0;else if(typeof HTMLImageElement!="undefined"&&e instanceof HTMLImageElement)s=!0;else if(e.getContext!=null)i=!0;else if(typeof ImageBitmap!="undefined"&&e instanceof ImageBitmap)o=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${e.constructor.name}`);if(r&&r&&e.readyState<2)throw new Error("The video element has not loaded data yet. Please wait for `loadeddata` event on the <video> element.");if(Bh(Wh,L.backendName)!=null){let c={pixels:e},h={numChannels:t};return L.runKernel(Wh,c,h)}let[l,u]=r?[e.videoWidth,e.videoHeight]:[e.width,e.height],p;if(i)p=e.getContext("2d").getImageData(0,0,l,u).data;else if(a||n)p=e.data;else if(s||r||o){if(Bs==null)if(typeof document=="undefined")if(typeof OffscreenCanvas!="undefined"&&typeof OffscreenCanvasRenderingContext2D!="undefined")Bs=new OffscreenCanvas(1,1).getContext("2d");else throw new Error("Cannot parse input in current context. Reason: OffscreenCanvas Context2D rendering is not supported.");else Bs=document.createElement("canvas").getContext("2d");Bs.canvas.width=l,Bs.canvas.height=u,Bs.drawImage(e,0,0,l,u),p=Bs.getImageData(0,0,l,u).data}let d;if(t===4)d=new Int32Array(p);else{let c=l*u;d=new Int32Array(c*t);for(let h=0;h<c;h++)for(let m=0;m<t;++m)d[h*t+m]=p[h*4+m]}return jm(d,[u,l,t],"int32")}function hR(e){return e!=null&&e.data instanceof Uint8Array}function mR(){return typeof window!="undefined"&&typeof ImageBitmap!="undefined"&&window.hasOwnProperty("createImageBitmap")}function fR(e){return e!=null&&e.width!==0&&e.height!==0}function gR(e){return mR()&&!(e instanceof ImageBitmap)&&fR(e)&&!hR(e)}async function yR(e,t=3){let n=null;if(X().getBool("WRAP_TO_IMAGEBITMAP")&&gR(e)){let a;try{a=await createImageBitmap(e,{premultiplyAlpha:"none"})}catch(r){a=null}a!=null&&a.width===e.width&&a.height===e.height?n=a:n=e}else n=e;return nS(n,t)}async function bR(e,t){let n=A(e,"img","toPixels");if(!(e instanceof Ae)){let u=n;n=oe(u,"int32"),u.dispose()}if(n.rank!==2&&n.rank!==3)throw new Error(`toPixels only supports rank 2 or 3 tensors, got rank ${n.rank}.`);let[a,r]=n.shape.slice(0,2),s=n.rank===2?1:n.shape[2];if(s>4||s===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${s}`);if(n.dtype!=="float32"&&n.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${n.dtype}. Please use float32 or int32 tensors.`);let i=await n.data(),o=n.dtype==="float32"?255:1,l=new Uint8ClampedArray(r*a*4);for(let u=0;u<a*r;++u){let p=[0,0,0,255];for(let c=0;c<s;c++){let h=i[u*s+c];if(n.dtype==="float32"){if(h<0||h>1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${h}.`)}else if(n.dtype==="int32"&&(h<0||h>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${h}.`);s===1?(p[0]=h*o,p[1]=h*o,p[2]=h*o):p[c]=h*o}let d=u*4;l[d+0]=Math.round(p[0]),l[d+1]=Math.round(p[1]),l[d+2]=Math.round(p[2]),l[d+3]=Math.round(p[3])}if(t!=null){t.width=r,t.height=a;let u=t.getContext("2d"),p=new ImageData(l,r,a);u.putImageData(p,0,0)}return n!==e&&n.dispose(),l}var xR=z({fromPixels_:nS}),Px={};Re(Px,{prepareAndValidate:()=>aS});function aS(e,t){let n=e.shape.length,a=t.shape.length;if(n<1)throw new Error(`tf.gatherND() expects the input to be rank 1 or higher, but the rank was ${n}.`);if(a<1)throw new Error(`tf.gatherND() expects the indices to be rank 1 or higher, but the rank was ${a}.`);if(t.dtype!=="int32")throw new Error(`tf.gatherND() expects the indices to be int32 type, but the dtype was ${t.dtype}.`);if(t.shape[a-1]>n)throw new Error(`index innermost dimension length must be <= tensor rank; saw: ${t.shape[a-1]} vs. ${n}`);if(wt(e.shape)===0)throw new Error(`Requested more than 0 entries, but input is empty. Input shape: ${e.shape}.`);let r=t.shape,s=r[r.length-1],i=1;for(let d=0;d<r.length-1;++d)i*=r[d];let o=e.shape,l=r.slice();l.pop();let u=1;for(let d=s;d<n;++d)u*=o[d],l.push(o[d]);let p=[...Fl(e.shape).map(d=>d/u),1].slice(0,s);return[l,i,u,p]}var Ox={};Re(Ox,{calculateShapes:()=>rS,validateInput:()=>zx,validateUpdateShape:()=>Lx});function Lx(e,t,n){let a=t.rank>1?t.shape[t.rank-1]:1,r=t.rank>1?t.rank-1:1,s=`Must have updates.shape = indices.shape[:batchDim] + shape[sliceDim:], got updates.shape: ${n.shape}, indices.shape: ${t.shape}, shape: ${e}, sliceDim: ${a}, and batchDim: ${r}.`;if(n.rank<r)throw new Error(s+` update.rank < ${r}. `);if(e.length<a+(n.rank-r))throw new Error(s+` Output shape length < ${a+(n.rank-r)}`);if(n.rank!==r+e.length-a)throw new Error(s+` update.rank != ${r+e.length-a}`);for(let i=0;i<r;++i)if(n.shape[i]!==t.shape[i])throw new Error(s+` updates.shape[${i}] (${n.shape[i]}) != indices.shape[${i}] (${t.shape[i]}).`);for(let i=0;i<n.rank-r;++i)if(n.shape[i+r]!==e[i+a])throw new Error(s+` updates.shape[${i+r}] (${n.shape[i+r]}) != shape[${i+r}] (${e[i+r]})`)}function zx(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}`)}Lx(n,t,e)}function rS(e,t,n){let a=t.shape.length,r=a>1?t.shape[a-1]:1,s=n.length,i=1;for(let d=r;d<s;++d)i*=n[d];let o=r<1?1:r,l=wt(t.shape)/o,u=[...Fl(n.slice(0,r)),1],p=wt(n);return{sliceRank:r,numUpdates:l,sliceSize:i,strides:u,outputSize:p}}var qt={};Re(qt,{assertParamsValid:()=>wR,computeFlatOffset:()=>TR,computeOutShape:()=>IR,getNormalizedAxes:()=>SR,isSliceContinous:()=>NR,maskToAxes:()=>kR,parseSliceParams:()=>hS,sliceInfo:()=>CR,startForAxis:()=>cS,startIndicesWithElidedDims:()=>lS,stopForAxis:()=>dS,stopIndicesWithElidedDims:()=>uS,stridesForAxis:()=>pS,stridesWithElidedDims:()=>sS});var Ob=-2,vR=-1;function wR(e,t,n){let a=e.shape.length;R(a===t.length,()=>`Error in slice${a}D: Length of begin ${t} must match the rank of the array (${a}).`),R(a===n.length,()=>`Error in slice${a}D: Length of size ${n} must match the rank of the array (${a}).`);for(let r=0;r<a;++r)R(t[r]+n[r]<=e.shape[r],()=>`Error in slice${a}D: begin[${r}] + size[${r}] (${t[r]+n[r]}) would overflow input.shape[${r}] (${e.shape[r]})`)}function kR(e){let t=[],n=0;for(;e>0;)e&1&&t.push(n),e/=2,n++;return t}function IR(e,t,n){let a=[];for(let r=0;r<e.length;r++)a[r]=Math.ceil((t[r]-e[r])/n[r]);return a}function sS(e,t,n,a){let r=[...e];for(let s=r.length;s<a.length;s++)r.push(1);for(let s=0;s<n;s++)s===0?r[t]=1:(r.splice(t,0,1),r.pop());return r}function iS(e,t,n){return n<=e?n:n-(t-1)}function oS(e,t){let n=[];for(let a=0;a<e;a++)n.push(t+a);return n}function SR(e,t,n,a,r,s,i,o,l){let u=e.length,p=new Array(u),d=new Array(u),c=new Array(u);if(t.length&&n>0){let h=t[0],m=n+1;p=lS(i,h,m,a,e),d=uS(o,h,m,r,e),c=sS(s,h,m,e)}else for(let h=0;h<u;h++)p[h]=cS(i,a,s,e,h,l),d[h]=dS(o,r,s,e,h,l),c[h]=pS(s,h,l);return{begin:p,end:d,strides:c}}function lS(e,t,n,a,r){let s=[...r],i=oS(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=0;else{let l=iS(t,n,o),u=a[l];e&1<<l&&(u=0),s[o]=u}return s}function uS(e,t,n,a,r){let s=[...r],i=oS(n,t);for(let o=0;o<s.length;o++)if(i.indexOf(o)>-1)s[o]=Number.MAX_SAFE_INTEGER;else{let l=iS(t,n,o),u=a[l];e&1<<l&&(u=Number.MAX_SAFE_INTEGER),s[o]=u}for(let o=0;o<s.length;o++){let l=r[o];s[o]<0&&(s[o]+=l),s[o]=Xp(0,s[o],r[o])}return s}function pS(e,t,n){let a=e[t];return(n&1<<t||a==null)&&(a=1),a}function cS(e,t,n,a,r,s){let i=t[r],o=n[r]||1;(e&1<<r||s&1<<r||i==null)&&(o>0?i=Number.MIN_SAFE_INTEGER:i=Number.MAX_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),i=Xp(0,i,l-1),i}function dS(e,t,n,a,r,s){let i=t[r],o=n[r]||1;(e&1<<r||s&1<<r||i==null)&&(o>0?i=Number.MAX_SAFE_INTEGER:i=Number.MIN_SAFE_INTEGER);let l=a[r];return i<0&&(i+=l),o>0?i=Xp(0,i,l):i=Xp(-1,i,l-1),i}function NR(e,t,n){let a=n.length;for(let r=0;r<n.length;r++)if(n[r]>1){a=r;break}for(let r=a+1;r<n.length;r++)if(t[r]>0||n[r]!==e[r])return!1;return!0}function TR(e,t){let n=e.length>0?e[e.length-1]:1;for(let a=0;a<e.length-1;a++)n+=e[a]*t[a];return n}function hS(e,t,n){let a,r=e.shape.length;typeof t=="number"?a=[t,...new Array(r-1).fill(0)]:t.length<r?a=t.concat(new Array(r-t.length).fill(0)):a=t.slice(),a.forEach(i=>{R(i!==-1,()=>"slice() does not support negative begin indexing.")});let s;return n==null?s=new Array(r).fill(-1):typeof n=="number"?s=[n,...new Array(r-1).fill(-1)]:n.length<r?s=n.concat(new Array(r-n.length).fill(-1)):s=n,s=s.map((i,o)=>i>=0?i:(R(i===-1,()=>`Negative size values should be exactly -1 but got ${i} for the slice() size at index ${o}.`),e.shape[o]-a[o])),[a,s]}function CR(e,t,n,a,r,s,i,o,l){let u;if(a==null?(u=new Array(t.length),u.fill(1)):u=a,i!=null&&(i&i-1)!==0)throw new Error("Multiple ellipses in slice is not allowed.");let p=!1,d={dims:u.length,numAddAxisAfterEllipsis:0,begin:t.slice(),end:n.slice(),strides:u.slice(),beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};for(let b=0;b<d.dims;b++)p&&(1<<b&o)!==0&&d.numAddAxisAfterEllipsis++,1<<b&i&&(p=!0);p||(d.ellipsisMask|=1<<d.dims,d.dims++);let c={dims:e.length,beginMask:0,endMask:0,beginValid:!1,endValid:!1};_R(d,c);let h=!0,m=!0,f=!0,g=[],y=[];for(let b=0;b<e.length;++b){if(c.strides[b]===0)throw Error(`strides[${b}] must be non-zero`);let x=!!(c.shrinkAxisMask&1<<b),v=e[b];if(v===-1){g.push(x?1:-1);continue}let w=[c.beginMask&1<<b,c.endMask&1<<b],T=[c.strides[b]>0?0:-1,c.strides[b]>0?v:v-1];if(x&&c.strides[b]<=0)throw Error("only stride 1 allowed on non-range indexing.");f=f&&c.strides[b]===1;let C=!!(c.beginMask&1<<b&&c.endMask&1<<b);if(c.beginValid&&c.endValid){if(x){let F=c.begin[b]<0?v+c.begin[b]:c.begin[b];if(c.begin[b]=F,c.end[b]=c.begin[b]+1,F<0||F>=v)throw Error(`slice index ${c.begin[b]} of dimension ${b} out of bounds.`)}else c.begin[b]=K1(c.begin[b],0,c.strides[b],v,w,T),c.end[b]=K1(c.end[b],1,c.strides[b],v,w,T);let P=c.strides[b]===1&&c.begin[b]===0&&c.end[b]===v;h=h&&P,m=m&&(b===0&&c.strides[b]===1||P)}else h=h&&c.strides[b]===1&&C,m=m&&(b===0&&c.strides[b]===1||C);let E,$=!1;if(c.beginValid&&c.endValid?(E=c.end[b]-c.begin[b],$=!0):x?(E=1,$=!0):C&&v>=0&&(c.strides[b]<0?E=-v:E=v,$=!0),$){let P;E===0||E<0!=c.strides[b]<0?P=0:P=Math.trunc(E/c.strides[b])+(E%c.strides[b]!==0?1:0),g.push(P)}else g.push(-1)}for(let b=0;b<c.finalShapeGatherIndices.length;++b){let x=c.finalShapeGatherIndices[b];x>=0?y.push(g[x]):x===Ob&&y.push(1)}return{finalShapeSparse:y.filter((b,x)=>c.finalShapeGatherIndices[x]!==Ob),finalShape:y,isIdentity:h,sliceDim0:m,isSimpleSlice:f,begin:c.begin,end:c.end,strides:c.strides}}function _R(e,t){t.beginMask=0,t.endMask=0,t.shrinkAxisMask=0;let n=0;t.beginValid=e.begin!=null,t.endValid=e.end!=null,t.begin=new Array(t.dims),t.end=new Array(t.dims),t.strides=new Array(t.dims),t.finalShapeGatherIndices=[],t.finalShapeGatherIndicesSparse=[],t.inputShapeGatherIndicesSparse=new Array(t.dims);for(let a=0;a<e.dims;a++)if(1<<a&e.ellipsisMask){let r=Math.min(t.dims-(e.dims-a)+1+e.numAddAxisAfterEllipsis,t.dims);for(;n<r;n++)t.begin[n]=0,t.end[n]=0,t.strides[n]=1,t.beginMask|=1<<n,t.endMask|=1<<n,t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(-1),t.inputShapeGatherIndicesSparse[n]=a}else if(1<<a&e.newAxisMask)t.finalShapeGatherIndices.push(Ob),t.finalShapeGatherIndicesSparse.push(-1);else{if(n===t.begin.length)throw Error(`Index out of range using input dim ${n}; input has only ${t.dims} dims, ${t.begin.length}.`);e.begin!=null&&(t.begin[n]=e.begin[a]),e.end!=null&&(t.end[n]=e.end[a]),t.strides[n]=e.strides[a],e.beginMask&1<<a&&(t.beginMask|=1<<n),e.endMask&1<<a&&(t.endMask|=1<<n),e.shrinkAxisMask&1<<a?(t.finalShapeGatherIndices.push(vR),t.finalShapeGatherIndicesSparse.push(-1),t.shrinkAxisMask|=1<<n):(t.finalShapeGatherIndices.push(n),t.finalShapeGatherIndicesSparse.push(a)),t.inputShapeGatherIndicesSparse[n]=a,n++}}function K1(e,t,n,a,r,s){if(r[t])return n>0?s[t]:s[t+1&1];{let i=e<0?a+e:e;return i<s[0]?s[0]:i>s[1]?s[1]:i}}var se={};Re(se,{Serializable:()=>mS,SerializationMap:()=>js,registerClass:()=>ks});var mS=class{getClassName(){return this.constructor.className}static fromConfig(e,t){return new e(t)}},js=class{constructor(){this.classNameMap={}}static getMap(){return js.instance==null&&(js.instance=new js),js.instance}static register(e){js.getMap().classNameMap[e.className]=[e,e.fromConfig]}};function ks(e){R(e.className!=null,()=>"Class being registered does not have the static className property defined."),R(typeof e.className=="string",()=>"className is required to be a string, but got type "+typeof e.className),R(e.className.length>0,()=>"Class being registered has an empty-string as its className, which is disallowed."),js.register(e)}var fS={};Re(fS,{TEST_EPSILON_FLOAT16:()=>gS,encodeStrings:()=>yS,expectArrayBuffersEqual:()=>MR,expectArraysClose:()=>AR,expectArraysEqual:()=>FR,expectNumbersClose:()=>DR,expectPromiseToFail:()=>$R,expectValuesInRange:()=>RR,testEpsilon:()=>Wx});var ER=.001,gS=.1;function AR(e,t,n){return n==null&&(n=Wx()),Lb(e,t,(a,r)=>Bx(a,r,n))}function Wx(){return L.backend.floatPrecision()===32?ER:gS}function Lb(e,t,n){let a=!0;if((hn(e)||hn(t))&&(a=!1),hn(e)&&hn(t)&&(a=!0),a){let i=e.constructor.name,o=t.constructor.name;if(i!==o)throw new Error(`Arrays are of different type. Actual: ${i}. Expected: ${o}`)}if(Array.isArray(e)&&Array.isArray(t)){let i=pr(e),o=pr(t);if(!gs(i,o))throw new Error(`Arrays have different shapes. Actual: [${i}]. Expected: [${o}]`)}let r=hn(e)?e:ti(e),s=hn(t)?t:ti(t);if(r.length!==s.length)throw new Error(`Arrays have different lengths actual: ${r.length} vs expected: ${s.length}.
|
|
Actual: ${r}.
|
|
Expected: ${s}.`);for(let i=0;i<s.length;++i){let o=r[i],l=s[i];if(!n(o,l))throw new Error(`Arrays differ: actual[${i}] = ${o}, expected[${i}] = ${l}.
|
|
Actual: ${r}.
|
|
Expected: ${s}.`)}}function $R(e,t){e().then(()=>t.fail(),()=>t())}function FR(e,t){let n=typeof t=="string"||typeof t=="number"||typeof t=="boolean"?[t]:t;return Qr(e)||Qr(e[0])||Qr(t)||Qr(t[0])?Lb(e,n,(a,r)=>a==r):Lb(e,t,(a,r)=>Bx(a,r,0))}function DR(e,t,n){if(n==null&&(n=Wx()),!Bx(e,t,n))throw new Error(`Numbers differ: actual === ${e}, expected === ${t}`)}function Bx(e,t,n){return!isFinite(e)&&!isFinite(t)?!0:!(isNaN(e)||isNaN(t)||Math.abs(e-t)>n)}function RR(e,t,n){for(let a=0;a<e.length;a++)if(e[a]<t||e[a]>n)throw new Error(`Value out of range:${e[a]} low: ${t}, high: ${n}`)}function MR(e,t){let n=new Float32Array(e),a=new Float32Array(t);if(n.length!==a.length)throw new Error(`Expected ArrayBuffer to be of length ${a.length}, but it was ${n.length}`);for(let r=0;r<a.length;r++)if(n[r]!==a[r])throw new Error(`Expected ArrayBuffer value at ${r} to be ${a[r]} but got ${n[r]} instead`)}function yS(e){for(let t=0;t<e.length;t++){let n=e[t];Array.isArray(n)?yS(n):e[t]=$c(n)}return e}var PR="3.15.0";function OR(){X().set("PROD",!0)}function LR(){X().set("DEBUG",!0)}function zR(){X().set("DEPRECATION_WARNINGS_ENABLED",!1),console.warn("TensorFlow.js deprecation warnings have been disabled.")}function Vx(e){X().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(e+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}rD(Vx);function WR(){L.disposeVariables()}function sr(){return L}function Hh(){return L.memory()}function BR(e){return L.profile(e)}function O(e,t){return L.tidy(e,t)}function De(e){Ax(e).forEach(t=>t.dispose())}function en(e){return L.keep(e)}function VR(e){return L.time(e)}function UR(e){return L.setBackend(e)}function GR(){return L.ready()}function HR(){return L.backendName}function jR(e){L.removeBackend(e)}function qR(e){return L.findBackend(e)}function KR(e){return L.findBackendFactory(e)}function qm(e,t,n=1){return L.registerBackend(e,t,n)}function bS(){return L.backend}function XR(e,t){X().setPlatform(e,t)}function YR(e,t){let n=A(e,"a","add"),a=A(t,"b","add");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(ys,r)}var J=z({add_:YR});function JR(e,t){let n=A(e,"a","floorDiv"),a=A(t,"b","floorDiv");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Pi,r)}var Km=z({floorDiv_:JR});function ZR(e,t){let n=A(e,"a","div"),a=A(t,"b","div");if([n,a]=$t(n,a),n.dtype==="int32"&&a.dtype==="int32")return Km(n,a);let r={a:n,b:a},s={};return L.runKernel(Fi,r,s)}var fe=z({div_:ZR});function QR(e,t){let n=A(e,"a","mul"),a=A(t,"b","mul");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Xi,r)}var W=z({mul_:QR});function eM(e){let t=A(e,"x","abs");if(t.dtype==="complex64"){let n={x:t};return L.runKernel(mc,n)}else{let n={x:t};return L.runKernel(Dl,n)}}var zt=z({abs_:eM});function tM(e){let t={x:A(e,"x","acos")};return L.runKernel(Rl,t)}var Ux=z({acos_:tM});function nM(e){let t={x:A(e,"x","acosh")};return L.runKernel(Ml,t)}var Gx=z({acosh_:nM});function aM(e){R(Array.isArray(e),()=>"The argument passed to tf.addN() must be a list of tensors"),R(e.length>=1,()=>`Must pass at least one tensor to tf.addN(), but got ${e.length}`);let t=e.map((r,s)=>A(r,`tensors${s}`,"addN")),n=t[0];t.forEach(r=>{if(r.dtype!==n.dtype)throw new Error("All tensors passed to tf.addN() must have the same dtype")}),t.forEach(r=>{if(!gs(r.shape,n.shape))throw new Error("All tensors passed to tf.addN() must have the same shape")});let a=t;return L.runKernel(vi,a)}var xS=z({addN_:aM});function rM(e,t=null,n=!1){let a={x:A(e,"x","all","bool")},r={axis:t,keepDims:n};return L.runKernel(Pl,a,r)}var Xm=z({all_:rM});function sM(e,t=null,n=!1){let a={x:A(e,"x","any","bool")},r={axis:t,keepDims:n};return L.runKernel(Ol,a,r)}var ec=z({any_:sM});function iM(e,t=0){let n={x:A(e,"x","argMax")},a={axis:t};return L.runKernel(wi,n,a)}var oi=z({argMax_:iM});function oM(e,t=0){let n={x:A(e,"x","argMin")},a={axis:t};return L.runKernel(dc,n,a)}var Hx=z({argMin_:oM});function lM(e){let t={x:A(e,"x","asin")};return L.runKernel(Ll,t)}var jx=z({asin_:lM});function uM(e){let t={x:A(e,"x","asinh")};return L.runKernel(zl,t)}var qx=z({asinh_:uM});function pM(e){let t={x:A(e,"x","atan")};return L.runKernel(Wl,t)}var Kx=z({atan_:pM});function cM(e,t){let n=A(e,"a","atan2"),a=A(t,"b","atan2");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Vl,r)}var Xx=z({atan2_:cM});function dM(e){let t={x:A(e,"x","atanh")};return L.runKernel(Bl,t)}var Yx=z({atanh_:dM});function hM(e,t,n,a,r="NHWC",s){let i=e[3],o=[...t,i],l=kS(r);return Rc(e,o,n,s,a,null,null,l)}function vS(e,t,n,a,r,s,i="channelsLast"){let[o,l]=jh(t),u;if(i==="channelsLast")u=[o,l,e[3],e[3]];else if(i==="channelsFirst")u=[o,l,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return Rc(e,u,n,a,r,s,!1,i)}function mM(e,t,n,a,r,s,i="NDHWC"){let[o,l,u]=zb(t),p,d;if(i==="NDHWC")d="channelsLast",p=[o,l,u,e[4],e[4]];else if(i==="NCDHW")d="channelsFirst",p=[o,l,u,e[1],e[1]];else throw new Error(`Unknown dataFormat ${i}`);return wS(e,p,n,a,r,!1,d,s)}function Rc(e,t,n,a,r,s,i=!1,o="channelsLast"){let[l,u,p,d]=[-1,-1,-1,-1];if(o==="channelsLast")[l,u,p,d]=e;else if(o==="channelsFirst")[l,d,u,p]=e;else throw new Error(`Unknown dataFormat ${o}`);let[c,h,,m]=t,[f,g]=jh(n),[y,b]=jh(a),x=gl(c,y),v=gl(h,b),{padInfo:w,outHeight:T,outWidth:C}=yM(r,u,p,f,g,x,v,s,o),E=i?m*d:m,$;return o==="channelsFirst"?$=[l,E,T,C]:o==="channelsLast"&&($=[l,T,C,E]),{batchSize:l,dataFormat:o,inHeight:u,inWidth:p,inChannels:d,outHeight:T,outWidth:C,outChannels:E,padInfo:w,strideHeight:f,strideWidth:g,filterHeight:c,filterWidth:h,effectiveFilterHeight:x,effectiveFilterWidth:v,dilationHeight:y,dilationWidth:b,inShape:e,outShape:$,filterShape:t}}function wS(e,t,n,a,r,s=!1,i="channelsLast",o){let[l,u,p,d,c]=[-1,-1,-1,-1,-1];if(i==="channelsLast")[l,u,p,d,c]=e;else if(i==="channelsFirst")[l,c,u,p,d]=e;else throw new Error(`Unknown dataFormat ${i}`);let[h,m,f,,g]=t,[y,b,x]=zb(n),[v,w,T]=zb(a),C=gl(h,v),E=gl(m,w),$=gl(f,T),{padInfo:P,outDepth:F,outHeight:S,outWidth:M}=bM(r,u,p,d,y,b,x,C,E,$,o),B=s?g*c:g,j;return i==="channelsFirst"?j=[l,B,F,S,M]:i==="channelsLast"&&(j=[l,F,S,M,B]),{batchSize:l,dataFormat:i,inDepth:u,inHeight:p,inWidth:d,inChannels:c,outDepth:F,outHeight:S,outWidth:M,outChannels:B,padInfo:P,strideDepth:y,strideHeight:b,strideWidth:x,filterDepth:h,filterHeight:m,filterWidth:f,effectiveFilterDepth:C,effectiveFilterHeight:E,effectiveFilterWidth:$,dilationDepth:v,dilationHeight:w,dilationWidth:T,inShape:e,outShape:j,filterShape:t}}function fM(e,t,n,a,r){a==null&&(a=Jx(e,t,n));let s=e[0],i=e[1],o=Zs((s-t+2*a)/n+1,r),l=Zs((i-t+2*a)/n+1,r);return[o,l]}function gM(e,t,n,a,r,s){r==null&&(r=Jx(e,t,a));let i=e[0],o=e[1],l=e[2],u=Zs((i-t+2*r)/a+1,s),p=Zs((o-t+2*r)/a+1,s),d=Zs((l-t+2*r)/a+1,s);return[u,p,d,n]}function Jx(e,t,n,a=1){let r=gl(t,a);return Math.floor((e[0]*(n-1)-n+r)/2)}function jh(e){return typeof e=="number"?[e,e,e]:e.length===2?[e[0],e[1],1]:e}function zb(e){return typeof e=="number"?[e,e,e]:e}function gl(e,t){return t<=1?e:e+(e-1)*(t-1)}function yM(e,t,n,a,r,s,i,o,l){let u,p,d;if(typeof e=="number"){u={top:e,bottom:e,left:e,right:e,type:e===0?"VALID":"NUMBER"};let c=fM([t,n],s,a,e,o);p=c[0],d=c[1]}else if(e==="same"){p=Math.ceil(t/a),d=Math.ceil(n/r);let c=Math.max(0,(p-1)*a+s-t),h=Math.max(0,(d-1)*r+i-n),m=Math.floor(c/2),f=c-m,g=Math.floor(h/2),y=h-g;u={top:m,bottom:f,left:g,right:y,type:"SAME"}}else if(e==="valid")u={top:0,bottom:0,left:0,right:0,type:"VALID"},p=Math.ceil((t-s+1)/a),d=Math.ceil((n-i+1)/r);else if(typeof e=="object"){let c=l==="channelsLast"?e[1][0]:e[2][0],h=l==="channelsLast"?e[1][1]:e[2][1],m=l==="channelsLast"?e[2][0]:e[3][0],f=l==="channelsLast"?e[2][1]:e[3][1];u={top:c,bottom:h,left:m,right:f,type:c===0&&h===0&&m===0&&f===0?"VALID":"EXPLICIT"},p=Zs((t-s+c+h)/a+1,o),d=Zs((n-i+m+f)/r+1,o)}else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:u,outHeight:p,outWidth:d}}function bM(e,t,n,a,r,s,i,o,l,u,p){let d,c,h,m;if(typeof e=="number"){d={top:e,bottom:e,left:e,right:e,front:e,back:e,type:e===0?"VALID":"NUMBER"};let f=gM([t,n,a,1],o,1,r,e,p);c=f[0],h=f[1],m=f[2]}else if(e==="same"){c=Math.ceil(t/r),h=Math.ceil(n/s),m=Math.ceil(a/i);let f=(c-1)*r+o-t,g=(h-1)*s+l-n,y=(m-1)*i+u-a,b=Math.floor(f/2),x=f-b,v=Math.floor(g/2),w=g-v,T=Math.floor(y/2),C=y-T;d={top:v,bottom:w,left:T,right:C,front:b,back:x,type:"SAME"}}else if(e==="valid")d={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},c=Math.ceil((t-o+1)/r),h=Math.ceil((n-l+1)/s),m=Math.ceil((a-u+1)/i);else throw Error(`Unknown padding parameter: ${e}`);return{padInfo:d,outDepth:c,outHeight:h,outWidth:m}}function Zs(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 ls(e){let[t,n,a]=jh(e);return t===1&&n===1&&a===1}function mr(e,t){return ls(e)||ls(t)}function kS(e){if(e==="NHWC")return"channelsLast";if(e==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${e}`)}function Cn(e,t,n){if(n!=null){if(typeof t=="string")throw Error(`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);if(typeof t=="number")R(xl(t),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${t}.`);else if(typeof t=="object")t.forEach(a=>{a.forEach(r=>{R(xl(r),()=>`Error in ${e}: pad must be an integer when using dimRoundingMode ${n} but got pad ${r}.`)})});else throw Error(`Error in ${e}: Unknown padding parameter: ${t}`)}}function xM(e,t){let n={x:A(e,"x","reshape","string_or_numeric")},a={shape:t};return L.runKernel(xu,n,a)}var V=z({reshape_:xM});function vM(e,t,n,a,r){let s=A(e,"x","avgPool","float32"),i=1;R(mr(n,i),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);let o=s,l=!1;s.rank===3&&(l=!0,o=V(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(o.rank===4,()=>`Error in avgPool: x must be rank 4 but got rank ${o.rank}.`),Cn("avgPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=L.runKernel(ki,u,p);return d=oe(d,s.dtype),l?V(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var ga=z({avgPool_:vM});function wM(e,t,n,a,r,s="NDHWC"){let i=A(e,"x","avgPool3d","float32"),o=i,l=!1;i.rank===4&&(l=!0,o=V(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(o.rank===5,()=>`Error in avgPool3d: x must be rank 5 but got rank ${o.rank}.`),R(s==="NDHWC",()=>`Error in avgPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Cn("avgPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=L.runKernel(hc,u,p);return d=oe(d,o.dtype),l?V(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var Zx=z({avgPool3d_:wM});function kM(e,t=0){R(e.length>=1,()=>"Pass at least one tensor to concat");let n=Qp(e,"tensors","concat","string_or_numeric");if(n[0].dtype==="complex64"&&n.forEach(s=>{if(s.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor
|
|
with dtype ${s.dtype}. `)}),n.length===1)return _r(n[0]);let a=n,r={axis:t};return L.runKernel(Gl,a,r)}var Qe=z({concat_:kM});function IM(e){let t={x:A(e,"x","sigmoid","float32")};return L.runKernel(oo,t)}var ma=z({sigmoid_:IM});function SM(e,t,n){let a=A(e,"x","slice","string_or_numeric");if(a.rank===0)throw new Error("Slicing scalar is not possible");let r={x:a},s={begin:t,size:n};return L.runKernel(Iu,r,s)}var Ge=z({slice_:SM});function NM(e){let t={x:A(e,"x","tanh","float32")};return L.runKernel(fo,t)}var li=z({tanh_:NM});function TM(e,t,n,a,r,s){let i=A(e,"forgetBias","basicLSTMCell"),o=A(t,"lstmKernel","basicLSTMCell"),l=A(n,"lstmBias","basicLSTMCell"),u=A(a,"data","basicLSTMCell"),p=A(r,"c","basicLSTMCell"),d=A(s,"h","basicLSTMCell"),c=Qe([u,d],1),h=Fe(c,o),m=J(h,l),f=m.shape[0],g=m.shape[1]/4,y=[f,g],b=Ge(m,[0,0],y),x=Ge(m,[0,g],y),v=Ge(m,[0,g*2],y),w=Ge(m,[0,g*3],y),T=J(W(ma(b),li(x)),W(p,ma(J(i,v)))),C=W(li(T),ma(w));return[T,C]}var CM=z({basicLSTMCell_:TM});function _M(e,t,n){let a=A(e,"x","batchToSpaceND"),r=t.reduce((o,l)=>o*l);R(a.rank>=1+t.length,()=>`input rank is ${a.rank} but should be > than blockShape.length ${t.length}`),R(n.length===t.length,()=>`crops.length is ${n.length} but should be equal to blockShape.length ${t.length}`),R(a.shape[0]%r===0,()=>`input tensor batch is ${a.shape[0]} but is not divisible by the product of the elements of blockShape ${t.join(" * ")} === ${r}`);let s={x:a},i={blockShape:t,crops:n};return L.runKernel(Ul,s,i)}var Mc=z({batchToSpaceND_:_M});function EM(e){let t;return e.rank===0||e.rank===1?t=V(e,[1,1,1,e.size]):e.rank===2?t=V(e,[1,1,e.shape[0],e.shape[1]]):e.rank===3?t=V(e,[1,e.shape[0],e.shape[1],e.shape[2]]):t=e,t}function AM(e,t,n,a,r,s){s==null&&(s=.001);let i=A(e,"x","batchNorm"),o=A(t,"mean","batchNorm"),l=A(n,"variance","batchNorm"),u;r!=null&&(u=A(r,"scale","batchNorm"));let p;a!=null&&(p=A(a,"offset","batchNorm")),R(o.rank===l.rank,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),R(p==null||o.rank===p.rank,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),R(u==null||o.rank===u.rank,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let d={x:EM(i),scale:u,offset:p,mean:o,variance:l},c={varianceEpsilon:s},h=L.runKernel(Oi,d,c);return V(h,i.shape)}var Ar=z({batchNorm_:AM});function $M(e,t,n,a,r,s){let i=A(e,"x","batchNorm"),o=A(t,"mean","batchNorm"),l=A(n,"variance","batchNorm"),u;r!=null&&(u=A(r,"scale","batchNorm"));let p;return a!=null&&(p=A(a,"offset","batchNorm")),R(i.rank===2,()=>`Error in batchNorm2D: x must be rank 2 but got rank ${i.rank}.`),R(o.rank===2||o.rank===1,()=>`Error in batchNorm2D: mean must be rank 2 or rank 1 but got rank ${o.rank}.`),R(l.rank===2||l.rank===1,()=>`Error in batchNorm2D: variance must be rank 2 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===2||u.rank===1,()=>`Error in batchNorm2D: scale must be rank 2 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===2||p.rank===1,()=>`Error in batchNorm2D: offset must be rank 2 or rank 1 but got rank ${p.rank}.`),Ar(i,o,l,p,u,s)}var IS=z({batchNorm2d_:$M});function FM(e,t,n,a,r,s){let i=A(e,"x","batchNorm"),o=A(t,"mean","batchNorm"),l=A(n,"variance","batchNorm"),u;r!=null&&(u=A(r,"scale","batchNorm"));let p;return a!=null&&(p=A(a,"offset","batchNorm")),R(i.rank===3,()=>`Error in batchNorm3D: x must be rank 3 but got rank ${i.rank}.`),R(o.rank===3||o.rank===1,()=>`Error in batchNorm3D: mean must be rank 3 or rank 1 but got rank ${o.rank}.`),R(l.rank===3||l.rank===1,()=>`Error in batchNorm3D: variance must be rank 3 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===3||u.rank===1,()=>`Error in batchNorm3D: scale must be rank 3 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===3||p.rank===1,()=>`Error in batchNorm3D: offset must be rank 3 or rank 1 but got rank ${p.rank}.`),Ar(i,o,l,p,u,s)}var SS=z({batchNorm3d_:FM});function DM(e,t,n,a,r,s){let i=A(e,"x","batchNorm"),o=A(t,"mean","batchNorm"),l=A(n,"variance","batchNorm"),u;r!=null&&(u=A(r,"scale","batchNorm"));let p;return a!=null&&(p=A(a,"offset","batchNorm")),R(i.rank===4,()=>`Error in batchNorm4D: x must be rank 4 but got rank ${i.rank}.`),R(o.rank===4||o.rank===1,()=>`Error in batchNorm4D: mean must be rank 4 or rank 1 but got rank ${o.rank}.`),R(l.rank===4||l.rank===1,()=>`Error in batchNorm4D: variance must be rank 4 or rank 1 but got rank ${l.rank}.`),u!=null&&R(u.rank===4||u.rank===1,()=>`Error in batchNorm4D: scale must be rank 4 or rank 1 but got rank ${u.rank}.`),p!=null&&R(p.rank===4||p.rank===1,()=>`Error in batchNorm4D: offset must be rank 4 or rank 1 but got rank ${p.rank}.`),Ar(i,o,l,p,u,s)}var NS=z({batchNorm4d_:DM});function RM(e,t,n){let a=A(e,"x","bincount"),r=A(t,"weights","bincount");R(a.dtype==="int32",()=>`Error in bincount: input dtype must be int32, but got ${a.dtype}`),R(n>=0,()=>`size must be non-negative, but got ${n}.`),R(r.size===a.size||r.size===0,()=>`Error in bincount: weights must have the same size as input or0-length, but got input shape: ${a.shape}, weights shape: ${r.shape}.`);let s={x:a,weights:r},i={size:n};return L.runKernel(fm,s,i)}var Qx=z({bincount_:RM});function MM(e,t){let n=A(e,"s0","broadcastArgs","int32"),a=A(t,"s1","broadcastArgs","int32");if(n.rank!==1)throw new Error(`broadcastArgs(): first input must be a vector (rank=1). Has rank ${n.rank}`);if(a.rank!==1)throw new Error(`broadcastArgs(): second input must be a vector (rank=1). Has rank ${a.rank}`);let r={s0:n,s1:a};return L.runKernel(gm,r)}var TS=z({broadcastArgs_:MM});function PM(e,t){let n=A(e,"broadcastTo","x"),a=n.shape;if(t.some(l=>!(l>0)||l%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${t}].`);if(t.length<n.rank)throw new Error(`broadcastTo(): shape.length=${t.length} < input.rank=${n.rank}.`);if(t.length>n.rank){let l=n.shape.slice();for(;l.length<t.length;)l.unshift(1);n=V(n,l)}let r=n.shape,s=Array.from(t);for(let l=t.length-1;l>=0;l--)if(r[l]===t[l])s[l]=1;else if(n.shape[l]!==1)throw new Error(`broadcastTo(): [${a}] cannot be broadcast to [${t}].`);if(s.map((l,u)=>l>1?u:-1).filter(l=>l>=0).length===0)return _r(n);let i={x:n},o={reps:s};return L.runKernel(xs,i,o)}var yl=z({broadcastTo_:PM});function OM(e){let t={x:A(e,"x","ceil","float32")};return L.runKernel(Ni,t)}var ev=z({ceil_:OM});function LM(e,t,n){let a=A(e,"x","clipByValue");R(t<=n,()=>`Error in clip: min (${t}) must be less than or equal to max (${n}).`);let r={x:a},s={clipValueMin:t,clipValueMax:n};return L.runKernel(bs,r,s)}var nn=z({clipByValue_:LM});function zM(e){return Qe(e,0)}var CS=z({concat1d_:zM});function WM(e,t){return Qe(e,t)}var _S=z({concat2d_:WM});function BM(e,t){return Qe(e,t)}var ES=z({concat3d_:BM});function VM(e,t){return Qe(e,t)}var AS=z({concat4d_:VM});function UM(e,t,n,a,r="NHWC",s=[1,1],i){let o=A(e,"x","conv2d","float32"),l=A(t,"filter","conv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(u.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${u.rank}.`),R(l.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${l.rank}.`),Cn("conv2d",a,i);let d=r==="NHWC"?u.shape[3]:u.shape[1];R(d===l.shape[2],()=>`Error in conv2d: depth of input (${d}) must match input depth for filter ${l.shape[2]}.`),R(mr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`);let c={x:u,filter:l},h={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},m=L.runKernel(Ti,c,h);return p?V(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var Rt=z({conv2d_:UM});function GM(e,t,n,a,r="NWC",s=1,i){let o=A(e,"x","conv1d"),l=A(t,"filter","conv1d"),u=o,p=!1;o.rank===2&&(p=!0,u=V(o,[1,o.shape[0],o.shape[1]])),R(u.rank===3,()=>`Error in conv1d: input must be rank 3, but got rank ${u.rank}.`),R(l.rank===3,()=>`Error in conv1d: filter must be rank 3, but got rank ${l.rank}.`),Cn("conv1d",a,i),R(u.shape[2]===l.shape[1],()=>`Error in conv1d: depth of input (${u.shape[2]}) must match input depth for filter ${l.shape[1]}.`),R(mr(n,s),()=>`Error in conv1D: Either stride or dilation must be 1. Got stride ${n} and dilation '${s}'`),R(r==="NWC",()=>`Error in conv1d: got dataFormat of ${r} but only NWC is currently supported.`);let d=V(l,[1,l.shape[0],l.shape[1],l.shape[2]]),c=V(u,[u.shape[0],1,u.shape[1],u.shape[2]]),h=Rt(c,d,[1,n],a,"NHWC",[1,s],i);return p?V(h,[h.shape[2],h.shape[3]]):V(h,[h.shape[0],h.shape[2],h.shape[3]])}var Ym=z({conv1d_:GM});function HM(e,t,n,a,r,s="NHWC",i){R(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let o=e,l=t,u=!1;t.rank===3&&(u=!0,l=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]),o=[1,e[0],e[1],e[2]]),R(o.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${o.length}.`),R(l.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${l.rank}`),R(n.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${n.rank}`);let p=s==="NHWC"?o[3]:o[1],d=s==="NHWC"?l.shape[3]:l.shape[1];R(p===n.shape[2],()=>`Error in conv2dDerInput: depth of input (${p}) must match input depth for filter ${n.shape[2]}.`),R(d===n.shape[3],()=>`Error in conv2dDerInput: depth of output (${d}) must match output depth for filter ${n.shape[3]}.`),Cn("conv2dDerInput",r,i);let c={dy:l,filter:n},h={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,inputShape:o},m=L.runKernel(Ci,c,h);return u?V(m,[m.shape[1],m.shape[2],m.shape[3]]):m}var tv=z({conv2DBackpropInput_:HM});function jM(e,t,n,a,r,s){let i=A(e,"x","conv2dTranspose"),o=A(t,"filter","conv2dTranspose");return tv(n,i,o,a,r,"NHWC",s)}var Jm=z({conv2dTranspose_:jM});function qM(e,t,n,a,r="NDHWC",s=[1,1,1]){let i=A(e,"x","conv3d"),o=A(t,"filter","conv3d"),l=i,u=!1;i.rank===4&&(u=!0,l=V(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(l.rank===5,()=>`Error in conv3d: input must be rank 5, but got rank ${l.rank}.`),R(o.rank===5,()=>`Error in conv3d: filter must be rank 5, but got rank ${o.rank}.`),R(l.shape[4]===o.shape[3],()=>`Error in conv3d: depth of input (${l.shape[4]}) must match input depth for filter ${o.shape[3]}.`),R(mr(n,s),()=>`Error in conv3D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),R(r==="NDHWC",()=>`Error in conv3d: got dataFormat of ${r} but only NDHWC is currently supported.`);let p={x:l,filter:o},d={strides:n,pad:a,dataFormat:r,dilations:s},c=L.runKernel(fc,p,d);return u?V(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var nv=z({conv3d_:qM});function KM(e,t,n,a,r){R(e.length===t.rank,()=>`Length of inShape (${e.length}) and rank of dy (${t.rank}) must match`);let s=e,i=t,o=!1;t.rank===4&&(o=!0,i=V(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]]),s=[1,e[0],e[1],e[2],e[3]]);let l=s[4],u=i.shape[4];R(s.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${s.length}.`),R(i.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${i.rank}`),R(n.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${n.rank}`),R(l===n.shape[3],()=>`Error in conv3dDerInput: depth of input (${l}) must match input depth for filter ${n.shape[3]}.`),R(u===n.shape[4],()=>`Error in conv3dDerInput: depth of output (${u}) must match output depth for filter ${n.shape[4]}.`);let p={dy:i,filter:n},d={pad:r,strides:a,inputShape:s},c=L.runKernel(vm,p,d);return o?V(c,[c.shape[1],c.shape[2],c.shape[3],c.shape[4]]):c}var $S=z({conv3DBackpropInput_:KM});function XM(e,t,n,a,r){let s=A(e,"x","conv3dTranspose"),i=A(t,"filter","conv3dTranspose");return $S(n,s,i,a,r)}var FS=z({conv3dTranspose_:XM});function YM(e){let t={x:A(e,"x","cos","float32")};return L.runKernel(_i,t)}var Pc=z({cos_:YM});function JM(e){let t={x:A(e,"x","cosh","float32")};return L.runKernel(Ei,t)}var Zm=z({cosh_:JM});function ZM(e,t=0,n=!1,a=!1){let r={x:A(e,"x","cumprod")},s={axis:t,exclusive:n,reverse:a};return L.runKernel(Hl,r,s)}var av=z({cumprod_:ZM});function QM(e,t=0,n=!1,a=!1){let r={x:A(e,"x","cumsum")},s={axis:t,exclusive:n,reverse:a};return L.runKernel(Ai,r,s)}var Qm=z({cumsum_:QM});function eP(e,t,n,a=!1){let r=A(e,"x","denseBincount"),s=A(t,"weights","denseBincount");R(r.dtype==="int32",()=>`Error in denseBincount: input dtype must be int32, but got ${r.dtype}`),R(r.rank<=2,()=>`Error in denseBincount: input must be at most rank 2, but got rank ${r.rank}.`),R(n>=0,()=>`size must be non-negative, but got ${n}.`),R(s.size===r.size||s.size===0,()=>`Error in denseBincount: weights must have the same shape as x or 0-length, but got x shape: ${r.shape}, weights shape: ${s.shape}.`);let i={x:r,weights:s},o={size:n,binaryOutput:a};return L.runKernel(wm,i,o)}var DS=z({denseBincount_:eP});function tP(e,t,n="NHWC"){let a=A(e,"x","depthToSpace","float32"),r=n==="NHWC"?a.shape[1]:a.shape[2],s=n==="NHWC"?a.shape[2]:a.shape[3],i=n==="NHWC"?a.shape[3]:a.shape[1];R(t>1,()=>`blockSize should be > 1 for depthToSpace, but was: ${t}`),R(r*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${r} and ${t} for depthToSpace with input shape
|
|
${a.shape}`),R(s*t>=0,()=>`Negative dimension size caused by overflow when multiplying
|
|
${s} and ${t} for depthToSpace with input shape
|
|
${a.shape}`),R(i%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${i} for depthToSpace with input shape ${a.shape}`);let o={x:a},l={blockSize:t,dataFormat:n};return L.runKernel(ql,o,l)}var rv=z({depthToSpace_:tP});function nP(e,t,n,a,r="NHWC",s=[1,1],i){let o=A(e,"x","depthwiseConv2d","float32"),l=A(t,"filter","depthwiseConv2d","float32"),u=o,p=!1;o.rank===3&&(p=!0,u=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(u.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${u.rank}.`),R(l.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${l.rank}.`),R(u.shape[3]===l.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${u.shape[3]}) must match the inChannels dimension in filter ${l.shape[2]}.`),Cn("depthwiseConv2d",a,i);let d={x:u,filter:l},c={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i},h=L.runKernel($i,d,c);return p?V(h,[h.shape[1],h.shape[2],h.shape[3]]):h}var Is=z({depthwiseConv2d_:nP});function aP(e){let t={x:A(e,"x","diag")};return L.runKernel(Sm,t)}var rP=z({diag_:aP});function sP(e,t,n,a,r=[1,1],s="NHWC"){let i=A(e,"x","dilation2d"),o=A(t,"filter","dilation2d");R(i.rank===3||i.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${i.rank}.`),R(o.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${o.rank}.`),R(s==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${s}`);let l=i,u=!1;i.rank===3&&(l=V(i,[1,i.shape[0],i.shape[1],i.shape[2]]),u=!0);let p={x:l,filter:o},d={strides:n,pad:a,dilations:r},c=L.runKernel(gc,p,d);return u?V(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var sv=z({dilation2d_:sP});function iP(e,t){let n=A(e,"a","equal","string_or_numeric"),a=A(t,"b","equal","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(Xl,r)}var ea=z({equal_:iP});function oP(e,t,n){let a=A(t,"a","where"),r=A(n,"b","where"),s=A(e,"condition","where","bool"),i=ht(ht(s.shape,a.shape),r.shape),o=yl(s,i),l=yl(a,i),u=yl(r,i),p={condition:o,t:l,e:u};return L.runKernel(wu,p)}var fn=z({where_:oP});function lP(e){let t={x:A(e,"x","zerosLike")};return L.runKernel(Ru,t)}var Ke=z({zerosLike_:lP});function uP(e,t){let n=A(e,"a","div"),a=A(t,"b","div");[n,a]=$t(n,a);let r=fe(n,a),s=Ke(r),i=ea(a,s);return fn(i,s,r)}var iv=z({divNoNan_:uP});function pP(e,t){let n=A(e,"t1","dot"),a=A(t,"t2","dot");R((n.rank===1||n.rank===2)&&(a.rank===1||a.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${a.rank}.`);let r=n.rank===1?n.size:n.shape[1],s=a.rank===1?a.size:a.shape[0];if(R(r===s,()=>`Error in dot: inner dimensions of inputs must match, but got ${r} and ${s}.`),n.rank===1&&a.rank===1){let i=V(n,[1,-1]),o=V(a,[-1,1]),l=Fe(i,o);return V(l,[])}else if(n.rank===1&&a.rank===2){let i=V(n,[1,-1]),o=V(a,[a.shape[0],a.shape[1]]),l=Fe(i,o);return V(l,[l.size])}else if(n.rank===2&&a.rank===1){let i=V(a,[-1,1]),o=Fe(n,i);return V(o,[o.size])}else{let i=V(a,[a.shape[0],a.shape[1]]);return Fe(n,i)}}var RS=z({dot_:pP});function cP(e,...t){let n=t.map((r,s)=>A(r,`tensors${s}`,"einsum")),a={equation:e};return L.runKernel(Nm,n,a)}var MS=z({einsum_:cP});function dP(e){let t={x:A(e,"x","elu","float32")};return L.runKernel(Di,t)}var Ou=z({elu_:dP});function hP(e){let t=A(e,"x","erf");R(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=oe(t,"float32"));let n={x:t};return L.runKernel(Kl,n)}var ov=z({erf_:hP});function mP(e){let t={x:A(e,"x","exp")};return L.runKernel(Ri,t)}var gn=z({exp_:mP});function fP(e,t=0){let n=A(e,"x","expandDims","string_or_numeric");R(t<=n.rank,()=>"Axis must be <= rank of the tensor");let a={input:n},r={dim:t};return L.runKernel(Yl,a,r)}var mn=z({expandDims_:fP});function gP(e){let t={x:A(e,"x","expm1")};return L.runKernel(Jl,t)}var lv=z({expm1_:gP});function yP(e,t){let n=A(e,"x","tile","string_or_numeric");R(n.rank===t.length,()=>`Error in transpose: rank of input ${n.rank} must match length of reps ${t}.`);let a={x:n},r={reps:t};return L.runKernel(xs,a,r)}var On=z({tile_:yP});function bP(e,t,n,a="float32"){t==null&&(t=e);let r=He([e,t],a),s=e<=t?e:t;for(let o=0;o<s;++o)r.set(1,o,o);let i=V(r.toTensor(),[e,t]);if(n==null)return i;if(n.length===1)return On(mn(i,0),[n[0],1,1]);if(n.length===2)return On(mn(mn(i,0),0),[n[0],n[1],1,1]);if(n.length===3)return On(mn(mn(mn(i,0),0),0),[n[0],n[1],n[2],1,1]);throw new Error(`eye() currently supports only 1D and 2D batchShapes, but received ${n.length}D.`)}var uv=z({eye_:bP});function _n(e,t,n){let a={shape:e,value:t,dtype:n};return L.runKernel(yc,{},a)}function xP(e){let t={x:A(e,"x","floor","float32")};return L.runKernel(Mi,t)}var Lu=z({floor_:xP});function vP(e,t,n=0,a=0){let r=A(e,"x","gather"),s=A(t,"indices","gather","int32"),i={x:r,indices:s},o={axis:n,batchDims:a};return L.runKernel(Ql,i,o)}var ui=z({gather_:vP});function wP(e,t){let n=A(e,"a","greater","string_or_numeric"),a=A(t,"b","greater","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(tu,r)}var Gn=z({greater_:wP});function kP(e,t){let n=A(e,"a","greaterEqual","string_or_numeric"),a=A(t,"b","greaterEqual","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(Li,r)}var Ss=z({greaterEqual_:kP});function IP(e){let t={input:A(e,"input","imag")};return L.runKernel(Em,t)}var ef=z({imag_:IP});function SP(e){let t={x:A(e,"x","isFinite")};return L.runKernel(nu,t)}var PS=z({isFinite_:SP});function NP(e){let t={x:A(e,"x","isInf")};return L.runKernel(au,t)}var OS=z({isInf_:NP});function TP(e){let t={x:A(e,"x","isNaN")};return L.runKernel(ru,t)}var pv=z({isNaN_:TP});function CP(e,t=.2){let n={x:A(e,"x","leakyRelu")},a={alpha:t};return L.runKernel(Wi,n,a)}var Oc=z({leakyRelu_:CP});function _P(e,t){let n=A(e,"a","less","string_or_numeric"),a=A(t,"b","less","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(su,r)}var tf=z({less_:_P});function EP(e,t){let n=A(e,"a","lessEqual","string_or_numeric"),a=A(t,"b","lessEqual","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(iu,r)}var Ns=z({lessEqual_:EP});function LS(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");let a={start:e,stop:t,num:n};return L.runKernel(Am,{},a)}function AP(e,t=5,n=1,a=1,r=.5){let s=A(e,"x","localResponseNormalization");R(s.rank===4||s.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got
|
|
rank ${s.rank}.`),R(xl(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let i=s,o=!1;s.rank===3&&(o=!0,i=V(s,[1,s.shape[0],s.shape[1],s.shape[2]]));let l={x:i},u={depthRadius:t,bias:n,alpha:a,beta:r},p=L.runKernel(vc,l,u);return o?V(p,[p.shape[1],p.shape[2],p.shape[3]]):p}var cv=z({localResponseNormalization_:AP});function $P(e){let t={x:A(e,"x","log","float32")};return L.runKernel(Bi,t)}var ta=z({log_:$P});function FP(e){let t={x:A(e,"x","log1p")};return L.runKernel(ou,t)}var Lc=z({log1p_:FP});function DP(e){return R(ss(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{let a=A(t,"x","tf.grad","string_or_numeric"),r=n!=null?A(n,"dy","tf.grad"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(a),[a],r);return r!=null&&Tn(s.shape,r.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),nf(i),i[0]})}}function RP(e){return R(ss(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{R(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");let a=Qp(t,"args","tf.grads","string_or_numeric"),r=n!=null?A(n,"dy","tf.grads"):null;return L.tidy(()=>{let{value:s,grads:i}=L.gradients(()=>e(...a),a,r);return r!=null&&Tn(s.shape,r.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),nf(i),i})}}function MP(e){return R(ss(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{R(t instanceof Ae,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),R(n==null||n instanceof Ae,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");let{grads:a,value:r}=L.gradients(()=>e(t),[t],n);return nf(a),{grad:a[0],value:r}}}function PP(e){return R(ss(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{R(Array.isArray(t)&&t.every(r=>r instanceof Ae),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),R(n==null||n instanceof Ae,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");let a=L.gradients(()=>e(...t),t,n);return n!=null&&Tn(a.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),nf(a.grads),a}}function zS(e,t){R(ss(e),()=>"The f passed in variableGrads(f) must be a function"),R(t==null||Array.isArray(t)&&t.every(u=>u instanceof is),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");let n=t!=null;if(!n){t=[];for(let u in L.registeredVariables)t.push(L.registeredVariables[u])}let a=n?t.filter(u=>!u.trainable):null,r=t.length;t=t.filter(u=>u.trainable),R(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${r} variables is trainable.`);let s=!0,{value:i,grads:o}=L.gradients(e,t,null,s);R(o.some(u=>u!=null),()=>"Cannot find a connection between any variable and the result of the loss function y=f(x). Please make sure the operations that use variables are inside the function f passed to minimize()."),R(i.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${i.rank} tensor`);let l={};return t.forEach((u,p)=>{o[p]!=null&&(l[u.name]=o[p])}),a!=null&&a.forEach(u=>l[u.name]=null),{value:i,grads:l}}function cr(e){return L.customGrad(e)}function nf(e){if(e.filter(t=>t==null).length>0)throw new Error(`Cannot compute gradient of y=f(x) with respect to x. Make sure that
|
|
the f you passed encloses all operations that lead from x to y.`)}function OP(e){let t={x:A(e,"x","neg")};return L.runKernel(pu,t)}var St=z({neg_:OP});function LP(e){let t={x:A(e,"x","softplus")};return L.runKernel(Tu,t)}var bo=z({softplus_:LP});function zP(e){let t=A(e,"x","logSigmoid");return cr(n=>({value:St(bo(St(n))),gradFunc:a=>W(a,ma(St(n)))}))(t)}var WS=z({logSigmoid_:zP});function WP(e,t=null,n=!1){let a={x:A(e,"x","max")},r={reductionIndices:t,keepDims:n};return L.runKernel(Vi,a,r)}var Ta=z({max_:WP});function BP(e,t){let n=A(e,"a","sub"),a=A(t,"b","sub");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(ho,r)}var ce=z({sub_:BP});function VP(e,t=null,n=!1){let a=A(e,"x","sum");a.dtype==="bool"&&(a=oe(a,"int32"));let r={x:a},s={axis:t,keepDims:n};return L.runKernel(uo,r,s)}var be=z({sum_:VP});function UP(e,t=-1){let n=A(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 cr((a,r)=>{let s=Ta(a,t,!0),i=ce(a,s),o=ce(oe(i,"float32"),ta(be(gn(i),t,!0)));return r([o]),{value:o,gradFunc:(l,u)=>{let[p]=u,d=!0,c=gn(p);return ce(l,W(be(l,t,d),c))}}})(n)}var af=z({logSoftmax_:UP});function dv(e,t){for(let n=0;n<e.length;++n)if(e[e.length-n-1]!==t-1-n)return!1;return!0}function BS(e,t,n){let a=e.length+t.length,r=[],s=0,i=0;for(let o=0;o<a;o++)n.indexOf(o)===-1?r.push(e[s++]):r.push(t[i++]);return r}function VS(e,t){let n=[],a=e.length;for(let s=0;s<a;s++)t.indexOf(s)===-1&&n.push(e[s]);let r=t.map(s=>e[s]);return[n,r]}function pi(e,t){let n=t.map(a=>1);return BS(e,n,t)}function GP(e,t,n){R(dv(t,n),()=>`${e} supports only inner-most axes for now. Got axes ${t} and rank-${n} input.`)}function US(e,t){if(dv(e,t))return null;let n=[];for(let a=0;a<t;++a)e.indexOf(a)===-1&&n.push(a);return e.forEach(a=>n.push(a)),n}function hv(e){return e.map((t,n)=>[n,t]).sort((t,n)=>t[1]-n[1]).map(t=>t[0])}function HP(e,t){let n=[];for(let a=t-e;a<t;++a)n.push(a);return n}function jP(e,t=null,n=!1){let a=A(e,"x","logSumExp"),r=Ea(t,a.shape),s=Ta(a,r,!0),i=ce(a,s),o=gn(i),l=be(o,r),u=ta(l),p=J(V(s,u.shape),u);if(n){let d=pi(p.shape,r);return V(p,d)}return p}var mv=z({logSumExp_:jP});function qP(e,t){let n=A(e,"a","logicalAnd","bool"),a=A(t,"b","logicalAnd","bool");ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(lu,r)}var _a=z({logicalAnd_:qP});function KP(e){let t={x:A(e,"x","logicalNot","bool")};return L.runKernel(bc,t)}var zc=z({logicalNot_:KP});function XP(e,t){let n=A(e,"a","logicalOr","bool"),a=A(t,"b","logicalOr","bool");ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(xc,r)}var rf=z({logicalOr_:XP});function YP(e,t){let n=A(e,"a","logicalXor","bool"),a=A(t,"b","logicalXor","bool");return ht(n.shape,a.shape),_a(rf(e,t),zc(_a(e,t)))}var GS=z({logicalXor_:YP});function JP(e,t,n,a,r){let s=A(e,"x","maxPool"),i=1,o=s,l=!1;s.rank===3&&(l=!0,o=V(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(o.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${o.rank}.`),R(mr(n,i),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),Cn("maxPool",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r},d=L.runKernel(Gi,u,p);return l?V(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var Pt=z({maxPool_:JP});function ZP(e,t=[1,1,1],n,a,r,s="NDHWC"){let i=A(e,"x","maxPool3d"),o=i,l=!1;i.rank===4&&(l=!0,o=V(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]])),R(o.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${o.rank}.`),R(s==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${s}`),Cn("maxPool3d",a,r);let u={x:o},p={filterSize:t,strides:n,pad:a,dimRoundingMode:r,dataFormat:s},d=L.runKernel(wc,u,p);return l?V(d,[d.shape[1],d.shape[2],d.shape[3],d.shape[4]]):d}var fv=z({maxPool3d_:ZP});function QP(e,t,n,a,r=!1){let s={x:A(e,"x","maxPoolWithArgmax")},i={filterSize:t,strides:n,pad:a,includeBatchInIndex:r},o=L.runKernel(Rm,s,i);return{result:o[0],indexes:o[1]}}var HS=z({maxPoolWithArgmax_:QP});function eO(e,t){let n=A(e,"a","maximum"),a=A(t,"b","maximum");[n,a]=$t(n,a),n.dtype==="bool"&&(n=oe(n,"int32"),a=oe(a,"int32")),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(Ui,r)}var fr=z({maximum_:eO});function tO(e,t=null,n=!1){let a={x:A(e,"x","mean")},r={axis:t,keepDims:n};return L.runKernel(Hi,a,r)}var Et=z({mean_:tO});function kt(e,t="float32"){if(t==="complex64"){let a=kt(e,"float32"),r=kt(e,"float32");return os(a,r)}let n=dm(wt(e),t);return L.makeTensor(n,e,t)}function Zn(e,t="float32"){if(t==="complex64"){let a=Zn(e,"float32"),r=kt(e,"float32");return os(a,r)}let n=Sx(wt(e),t);return L.makeTensor(n,e,t)}function nO(e,t,{indexing:n="xy"}={}){if(n!=="xy"&&n!=="ij")throw new TypeError(`${n} is not a valid third argument to meshgrid`);if(e===void 0)return[];let a=A(e,"x","meshgrid",e instanceof Ae?e.dtype:"float32");if(t===void 0)return[a];let r=A(t,"y","meshgrid",t instanceof Ae?t.dtype:"float32"),s=wt(a.shape),i=wt(r.shape);return n==="xy"?(a=V(a,[1,-1]),r=V(r,[-1,1]),[Fe(Zn([i,1],a.dtype),a),Fe(r,Zn([1,s],r.dtype))]):(a=V(a,[-1,1]),r=V(r,[1,-1]),[Fe(a,Zn([1,i],a.dtype)),Fe(Zn([s,1],r.dtype),r)])}function aO(e,t=null,n=!1){let a={x:A(e,"x","min")},r={axis:t,keepDims:n};return L.runKernel(ji,a,r)}var tc=z({min_:aO});function rO(e,t){let n=A(e,"a","minimum"),a=A(t,"b","minimum");[n,a]=$t(n,a),n.dtype==="bool"&&(n=oe(n,"int32"),a=oe(a,"int32")),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(qi,r)}var zu=z({minimum_:rO});function sO(e,t,n){R(n==="reflect"||n==="symmetric",()=>`Invalid mode. Mode must be either reflect or symmetric. Got ${n}.`);let a=A(e,"x","mirrorPad");if(a.rank===0)throw new Error("mirrorPad(scalar) is not defined. Pass non-scalar to mirrorPad");R(t.length===a.rank,()=>`Padding doesn't match input. Must be ${a.rank}. Got ${t.length}.`);let r=n==="reflect"?1:0;for(let o=0;o<a.rank;o++)R(t[o].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),R(t[o][0]>=0&&t[o][0]<=a.shape[o]-r&&t[o][1]>=0&&t[o][1]<=a.shape[o]-r,()=>`Padding in dimension ${o} cannot be greater than or equal to ${a.shape[o]-r} or less than 0 for input of shape ${a.shape}`);let s={paddings:t,mode:n},i={x:a};return L.runKernel(Ki,i,s)}var gv=z({mirrorPad_:sO});function iO(e,t){let n=A(e,"a","mod"),a=A(t,"b","mod");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(uu,r)}var yv=z({mod_:iO});function oO(e){let t=A(e,"x","square"),n={};return L.runKernel("Square",{x:t},n)}var ut=z({square_:oO});function lO(e,t=null,n=!1){e=A(e,"x","moments");let a=Ea(t,e.shape),r=Et(e,a,n),s=r.shape;n||(s=pi(r.shape,a));let i=ut(ce(oe(e,"float32"),V(r,s))),o=Et(i,a,n);return{mean:r,variance:o}}var sf=z({moments_:lO});function uO(e,t,n,a){let r=A(t,"data","multiRNNCell"),s=Qp(n,"c","multiRNNCell"),i=Qp(a,"h","multiRNNCell"),o=r,l=[];for(let d=0;d<e.length;d++){let c=e[d](o,s[d],i[d]);l.push(c[0]),l.push(c[1]),o=c[1]}let u=[],p=[];for(let d=0;d<l.length;d+=2)u.push(l[d]),p.push(l[d+1]);return[u,p]}var pO=z({multiRNNCell_:uO});function cO(e,t,n,a=!1){let r=A(e,"logits","multinomial"),s=r.size,i=r.rank;if(s<2)throw new Error(`Error in multinomial: you need at least 2 outcomes, but got ${s}.`);if(i>2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${i}`);n=n||Math.random();let o={logits:i===1?V(r,[1,-1]):r},l={numSamples:t,seed:n,normalized:a},u=L.runKernel(Mm,o,l);return i===1?V(u,[u.size]):u}var jS=z({multinomial_:cO});function dO(e,t){let n=A(e,"a","notEqual","string_or_numeric"),a=A(t,"b","notEqual","string_or_numeric");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a};return L.runKernel(cu,r)}var ci=z({notEqual_:dO});function hO(e){let t={x:A(e,"x","onesLike")};return L.runKernel(fu,t)}var na=z({onesLike_:hO});function mO(e,t){let n=A(e,"v1","outerProduct"),a=A(t,"v2","outerProduct");R(n.rank===1&&a.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${a.rank}.`);let r=V(n,[-1,1]),s=V(a,[1,-1]);return Fe(r,s)}var fO=z({outerProduct_:mO});function gO(e,t,n=0){let a=A(e,"x","pad");if(a.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");let r={paddings:t,constantValue:n},s={x:a};return L.runKernel(Ji,s,r)}var ya=z({pad_:gO});function yO(e,t,n=0){return R(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),ya(e,[t],n)}var bO=z({pad1d_:yO});function xO(e,t,n=0){return R(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ya(e,t,n)}var vO=z({pad2d_:xO});function wO(e,t,n=0){return R(t.length===3&&t[0].length===2&&t[1].length===2&&t[2].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ya(e,t,n)}var kO=z({pad3d_:wO});function IO(e,t,n=0){return R(t.length===4&&t[0].length===2&&t[1].length===2&&t[2].length===2&&t[3].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),ya(e,t,n)}var SO=z({pad4d_:IO});function NO(e,t,n){let a=A(e,"x","spaceToBatchND");R(a.rank>=1+t.length,()=>`input rank ${a.rank} should be > than [blockShape] ${t.length}`),R(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),R(a.shape.reduce((i,o,l)=>l>0&&l<=t.length?i&&(o+n[l-1][0]+n[l-1][1])%t[l-1]===0:i,!0),()=>`input spatial dimensions ${a.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);let r={x:a},s={blockShape:t,paddings:n};return L.runKernel(Cu,r,s)}var Wc=z({spaceToBatchND_:NO});function TO(e,t,n,a,r,s,i){r==null&&(r=[1,1]),s==null&&(s=1),a===0&&(a="valid");let o=A(e,"x","maxPool"),l=o,u=!1;o.rank===3&&(u=!0,l=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),R(mr(s,r),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${s} and dilations '${r}'`);let p=vS(l.shape,t,s,r,a),d=[p.dilationHeight,p.dilationWidth],c;a==="same"?c=_O([p.filterHeight,p.filterWidth],d):c=[[0,0],[0,0]];let h=d[0]===1&&d[1]===1,[m,f]=CO([p.inHeight,p.inWidth],d,c),g=h?a:"valid",y=h?l:Wc(l,d,m),b=(n==="avg"?()=>ga(y,t,s,g,i):()=>Pt(y,t,s,g,i))(),x=h?b:Mc(b,d,f);return u?V(x,[x.shape[1],x.shape[2],x.shape[3]]):x}function CO(e,t,n){let a=n.map(p=>p[0]),r=n.map(p=>p[1]),s=e.concat(a,r),i=t.map((p,d)=>(p-s[d]%p)%p),o=r.map((p,d)=>p+i[d]),l=t.map((p,d)=>[a[d],o[d]]),u=t.map((p,d)=>[0,i[d]]);return[l,u]}function _O(e,t){let n=e.map((s,i)=>s+(s-1)*(t[i]-1)).map(s=>s-1),a=n.map(s=>Math.floor(s/2)),r=n.map((s,i)=>s-a[i]);return n.map((s,i)=>[a[i],r[i]])}var qS=z({pool_:TO});function EO(e,t){let n=A(e,"base","pow"),a=A(t,"exp","pow");[n,a]=$t(n,a);let r={a:n,b:a};return L.runKernel(Zi,r)}var $r=z({pow_:EO});function AO(e,t){let n=A(e,"x","prelu"),a=A(t,"alpha","prelu"),r={x:n,alpha:a};return L.runKernel(Qi,r)}var Bc=z({prelu_:AO});function $O(e,t=null,n=!1){let a=A(e,"x","prod");a.dtype==="bool"&&(a=oe(a,"int32"));let r={x:a},s={axis:t,keepDims:n};return L.runKernel(yu,r,s)}var of=z({prod_:$O});function FO(e,t,n){let a=wt(e),r=null;if(n==null||n==="float32")r=new Float32Array(a);else if(n==="int32")r=new Int32Array(a);else if(n==="bool")r=new Uint8Array(a);else throw new Error(`Unknown data type ${n}`);for(let s=0;s<a;s++)r[s]=t();return L.makeTensor(r,e,n)}var DO=z({rand_:FO}),bv=bi(mI()),xv=class{constructor(e,t,n,a,r){this.mean=e,this.stdDev=t,this.dtype=n,this.nextVal=NaN,this.truncated=a,this.truncated&&(this.upper=this.mean+this.stdDev*2,this.lower=this.mean-this.stdDev*2);let s=r||Math.random();this.random=bv.alea(s.toString())}nextValue(){if(!isNaN(this.nextVal)){let a=this.nextVal;return this.nextVal=NaN,a}let e,t,n=!1;for(;!n;){let a,r,s;do a=2*this.random()-1,r=2*this.random()-1,s=a*a+r*r;while(s>=1||s===0);let i=Math.sqrt(-2*Math.log(s)/s);e=this.mean+this.stdDev*a*i,t=this.mean+this.stdDev*r*i,(!this.truncated||this.isValidTruncated(e))&&(n=!0)}return(!this.truncated||this.isValidTruncated(t))&&(this.nextVal=this.convertValue(t)),this.convertValue(e)}convertValue(e){return this.dtype==null||this.dtype==="float32"?e:Math.round(e)}isValidTruncated(e){return e<=this.upper&&e>=this.lower}},RO=class{constructor(e,t,n,a){this.alpha=e,this.beta=1/t,this.dtype=n;let r=a||Math.random();this.randu=bv.alea(r.toString()),this.randn=new xv(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,a,r,s;for(;;){do a=this.randn.nextValue(),s=1+this.c*a;while(s<=0);if(s*=s*s,e=a*a,t=1-.331*e*e,n=.5*e+this.d*(1-s+Math.log(s)),r=this.randu(),r<t||Math.log(r)<n)break}return s=1/this.beta*this.d*s,this.alpha<1&&(s*=Math.pow(this.randu(),1/this.alpha)),this.convertValue(s)}convertValue(e){return this.dtype==="float32"?e:Math.round(e)}},MO=class{constructor(e=0,t=1,n,a){if(this.canReturnFloat=()=>this.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,a==null&&(a=Math.random()),typeof a=="number"&&(a=a.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=bv.alea(a)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}};function PO(e,t,n=1,a="float32",r){if(n==null&&(n=1),a==null&&(a="float32"),a!=="float32"&&a!=="int32")throw new Error(`Unsupported data type ${a}`);let s=new RO(t,n,a,r),i=He(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var OO=z({randomGamma_:PO});function LO(e,t=0,n=1,a,r){if(a!=null&&a==="bool")throw new Error(`Unsupported data type ${a}`);let s=new xv(t,n,a,!1,r),i=He(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var KS=z({randomNormal_:LO});function zO(e,t=0,n=1,a="float32",r){let s=He(e,a),i=new MO(t,n,null,r);for(let o=0;o<s.values.length;o++)s.values[o]=i.nextValue();return s.toTensor()}var Wu=z({randomUniform_:zO});function Il(e,t,n=1,a="float32"){if(n===0)throw new Error("Cannot have a step of zero");let r={start:e,stop:t,step:n,dtype:a};return L.runKernel(kc,{},r)}function WO(e){let t={input:A(e,"input","real")};return L.runKernel(Pm,t)}var nc=z({real_:WO});function BO(e){let t={x:A(e,"x","reciprocal")};return L.runKernel(bu,t)}var vv=z({reciprocal_:BO});function VO(e){let t={x:A(e,"x","relu")};return L.runKernel(eo,t)}var Xe=z({relu_:VO});function UO(e){let t={x:A(e,"x","relu6")};return L.runKernel(no,t)}var lf=z({relu6_:UO});function GO(e,t){let n={x:A(e,"x","reverse")},a={dims:t};return L.runKernel(ao,n,a)}var aa=z({reverse_:GO});function HO(e){let t=A(e,"x","reverse");return R(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),aa(t,0)}var jO=z({reverse1d_:HO});function qO(e,t){let n=A(e,"x","reverse");return R(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),aa(n,t)}var KO=z({reverse2d_:qO});function XO(e,t){let n=A(e,"x","reverse");return R(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),aa(n,t)}var YO=z({reverse3d_:XO});function JO(e,t){let n=A(e,"x","reverse");return R(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),aa(n,t)}var ZO=z({reverse4d_:JO});function QO(e){let t={x:A(e,"x","round")};return L.runKernel(ro,t)}var uf=z({round_:QO});function e3(e){let t={x:A(e,"x","rsqrt","float32")};return L.runKernel(so,t)}var pf=z({rsqrt_:e3});function ke(e,t){if((hn(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"&&hn(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");return ws(e,[],[],t)}function t3(e){let t={x:A(e,"x","selu")};return L.runKernel(ku,t)}var cf=z({selu_:t3});function n3(e,t,n,a,r,s=[1,1],i="NHWC"){let o=A(e,"x","separableConv2d"),l=A(t,"depthwiseFilter","separableConv2d"),u=A(n,"pointwiseFilter","separableConv2d"),p=o,d=!1;if(o.rank===3&&(d=!0,p=V(o,[1,o.shape[0],o.shape[1],o.shape[2]])),i==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");R(p.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${p.rank}.`),R(l.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${l.rank}.`),R(u.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${l.rank}.`),R(u.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${u.shape[0]}.`),R(u.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${u.shape[1]}.`);let c=l.shape[2],h=l.shape[3];R(u.shape[2]===c*h,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${c*h}, but got ${u.shape[2]}.`);let m=Is(p,l,a,r,i,s),f=Rt(m,u,1,"valid",i);return d?V(f,[f.shape[1],f.shape[2],f.shape[3]]):f}var xo=z({separableConv2d_:n3});async function a3(e,t){let n=A(e,"x","setdiff1d"),a=A(t,"y","setdiff1d");R(n.dtype===a.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${a.dtype}).`),R(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),R(a.rank===1,()=>`y should be 1D tensor, but got y (${a.shape}).`);let r=await n.data(),s=await a.data(),i=new Set(s),o=0;for(let p=0;p<r.length;p++)i.has(r[p])||o++;let l=new jt([o],n.dtype),u=new jt([o],"int32");for(let p=0,d=0;p<r.length;p++)i.has(r[p])||(l.values[d]=r[p],u.values[d]=p,d++);return[l.toTensor(),u.toTensor()]}var XS=a3;function r3(e){let t={x:A(e,"x","sign")};return L.runKernel(Nu,t)}var wv=z({sign_:r3});function s3(e){let t={x:A(e,"x","sin","float32")};return L.runKernel(io,t)}var df=z({sin_:s3});function i3(e){let t={x:A(e,"x","sinh")};return L.runKernel(Su,t)}var hf=z({sinh_:i3});function o3(e,t,n){let a=A(e,"x","slice1d");return R(a.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${a.rank} tensor`),Ge(a,[t],[n])}var mf=z({slice1d_:o3});function l3(e,t,n){let a=A(e,"x","slice2d");return R(a.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${a.rank} tensor`),Ge(a,t,n)}var kv=z({slice2d_:l3});function u3(e,t,n){let a=A(e,"x","slice3d");return R(a.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${a.rank} tensor`),Ge(a,t,n)}var Bu=z({slice3d_:u3});function p3(e,t,n){let a=A(e,"x","slice4d");return R(a.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${a.rank} tensor`),Ge(a,t,n)}var ac=z({slice4d_:p3});function c3(e,t=-1){let n=A(e,"logits","softmax","float32");if(t===-1&&(t=n.rank-1),t!==n.rank-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${n.rank} and dim was ${t}`);let a={logits:n},r={dim:t};return L.runKernel(po,a,r)}var Ja=z({softmax_:c3});function d3(e){R(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(Cm,t)}var Vc=z({fft_:d3});function h3(e){R(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);let t={input:e};return L.runKernel(_m,t)}var Sl=z({ifft_:h3});function m3(e){let t=e.shape[e.shape.length-1],n=e.size/t,a;if(t<=2){let r=V(e,[n,t]);a=Sl(r)}else{let r=[n,2*(t-1)],s=V(nc(e),[n,t]),i=V(ef(e),[n,t]),o=aa(Ge(s,[0,1],[n,t-2]),1),l=W(aa(Ge(i,[0,1],[n,t-2]),1),ke(-1)),u=Qe([s,o],1),p=Qe([i,l],1),d=V(os(u,p),[r[0],r[1]]);a=Sl(d)}if(a=nc(a),e.rank===3&&e.shape[0]!==0){let r=a,s=e.shape[0];a=V(a,[s,a.shape[0]/s,a.shape[1]]),r.dispose()}return a}var ff=z({irfft_:m3});function f3(e,t,n=0){let a={x:A(e,"x","split")},r={numOrSizeSplits:t,axis:n};return L.runKernel(_u,a,r)}var zn=z({split_:f3});function g3(e,t){R(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1],a=e.size/n,r;if(t!=null&&t<n){let m=e.shape.map(g=>0),f=e.shape.map(g=>g);f[e.shape.length-1]=t,r=Ge(e,m,f),n=t}else if(t!=null&&t>n){let m=e.shape.map(f=>f);m[e.shape.length-1]=t-n,r=Qe([e,kt(m)],e.shape.length-1),n=t}else r=e;let s=Ke(r),i=V(os(r,s),[a,n]),o=Vc(i),l=Math.floor(n/2)+1,u=nc(o),p=ef(o),d=zn(u,[l,n-l],u.shape.length-1),c=zn(p,[l,n-l],p.shape.length-1),h=r.shape.slice();return h[r.shape.length-1]=l,V(os(d[0],c[0]),h)}var Uc=z({rfft_:g3});function y3(e){let t={x:A(e,"x","sqrt","float32")};return L.runKernel(lo,t)}var un=z({sqrt_:y3});function b3(e,t){let n=A(e,"a","squaredDifference"),a=A(t,"b","squaredDifference");[n,a]=$t(n,a),ht(n.shape,a.shape);let r={a:n,b:a},s={};return L.runKernel(co,r,s)}var gf=z({squaredDifference_:b3});function x3(e,t){let n=A(e,"x","squeeze");return V(n,bI(n.shape,t).newShape)}var dr=z({squeeze_:x3});function v3(e,t=0){let n=Qp(e,"tensors","stack","string_or_numeric");R(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length>0&&R(t<=n[0].rank,()=>"Axis must be <= rank of the tensor");let a=n,r={axis:t};return L.runKernel(gu,a,r)}var Mt=z({stack_:v3});function w3(e,t=0){let n={x:A(e,"x","step")},a={alpha:t};return L.runKernel(vs,n,a)}var Vu=z({step_:w3});function k3(e,t,n,a,r=0,s=0,i=0,o=0,l=0){let u={x:A(e,"x","stridedSlice","string_or_numeric")},p={begin:t,end:n,strides:a,beginMask:r,endMask:s,ellipsisMask:i,newAxisMask:o,shrinkAxisMask:l};return L.runKernel(Au,u,p)}var Iv=z({stridedSlice_:k3});function I3(e){let t={x:A(e,"x","tan","float32")};return L.runKernel(mo,t)}var Sv=z({tan_:I3});function qe(e,t){xi(e);let n=pr(e,t);if(n.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");return ws(e,null,n,t)}function Ha(e,t,n){if(xi(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");let a=pr(e,n);if(a.length!==2&&a.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return ws(e,t,a,n)}function Za(e,t,n){if(xi(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");let a=pr(e,n);if(a.length!==4&&a.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return ws(e,t,a,n)}function S3(e,t,n){if(xi(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");let a=pr(e,n);if(a.length!==5&&a.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return ws(e,t,a,n)}function N3(e,t,n){if(xi(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");let a=pr(e,n);if(a.length!==6&&a.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(a.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||a,ws(e,t,a,n)}function T3(e,t=1,n=!0){let a=A(e,"x","topk");if(a.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");let r=a.shape[a.shape.length-1];if(t<0)throw new Error(`'k' passed to topk() must be >= 0 but got ${t}`);if(t>r)throw new Error(`'k' passed to topk() must be <= the last dimension (${r}) but got ${t}`);let s={x:a},i={k:t,sorted:n},[o,l]=L.runKernel($u,s,i);return{values:o,indices:l}}var Nv=z({topk_:T3});function C3(e,t=0,n=1,a,r){if(a!=null&&a==="bool")throw new Error("Unsupported data type $ { dtype }");let s=new xv(t,n,a,!0,r),i=He(e,a);for(let o=0;o<i.values.length;o++)i.values[o]=s.nextValue();return i.toTensor()}var yf=z({truncatedNormal_:C3});function _3(e,t=0){let n=A(e,"x","unique","string_or_numeric");R(n.rank>0,()=>"The input tensor must be at least 1D");let a={x:n},r={axis:t},[s,i]=L.runKernel(Um,a,r);return{values:s,indices:i}}var qh=z({unique_:_3});function E3(e,t,n){let a=A(e,"x","unsortedSegmentSum"),r=A(t,"segmentIds","unsortedSegmentSum","int32");R(xl(n),()=>"numSegments must be of dtype int");let s={x:a,segmentIds:r},i={numSegments:n};return L.runKernel(_c,s,i)}var Tv=z({unsortedSegmentSum_:E3});function A3(e,t=0){let n=A(e,"x","unstack","string_or_numeric");R(t>=-n.shape.length&&t<n.shape.length,()=>`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`);let a={value:n},r={axis:t};return L.runKernel(Du,a,r)}var mt=z({unstack_:A3});function YS(e,t=!0,n,a){return L.makeVariable(e,t,n,a)}function JS(e,t){let n=[];for(let s=0;s<t.length;s++)t[s]&&n.push(s);let a=He(e,"int32"),r=He([n.length,e.length],"int32");for(let s=0;s<n.length;s++){let i=a.indexToLoc(n[s]),o=s*e.length;r.values.set(i,o)}return r.toTensor()}async function $3(e){let t=A(e,"condition","whereAsync","bool"),n=await t.data(),a=JS(t.shape,n);return e!==t&&t.dispose(),a}var Cv=$3;async function F3(e,t,n){let a=A(e,"tensor","boolMask"),r=A(t,"mask","boolMask","bool"),s=n==null?0:n,i=r.rank,o=a.shape;R(i>0,()=>"mask cannot be scalar"),Tn(o.slice(s,s+i),r.shape,"mask's shape must match the first K dimensions of tensor's shape,");let l=1;for(let f=s;f<s+i;f++)l*=o[f];let u=o.slice(0,s).concat([l],o.slice(s+i)),p=V(a,u),d=V(r,[-1]),c=await Cv(d),h=dr(c,[1]),m=ui(p,h,s);return e!==a&&a.dispose(),t!==r&&r.dispose(),h.dispose(),p.dispose(),d.dispose(),c.dispose(),m}var D3=F3;function R3(e,t="euclidean",n=null,a=!1){e=A(e,"x","norm");let r=ZS(e,t,n),s=r.shape;if(a){let i=Ea(n,e.shape);s=pi(r.shape,i)}return V(r,s)}function ZS(e,t,n=null){if(e.rank===0)return zt(e);if(e.rank!==1&&n===null)return ZS(V(e,[-1]),t,n);if(e.rank===1||typeof n=="number"||Array.isArray(n)&&n.length===1){if(t===1)return be(zt(e),n);if(t===1/0)return Ta(zt(e),n);if(t===-1/0)return tc(zt(e),n);if(t==="euclidean"||t===2)return un(be($r(zt(e),ke(2,"int32")),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}if(Array.isArray(n)&&n.length===2){if(t===1)return Ta(be(zt(e),n[0]),n[1]-1);if(t===1/0)return Ta(be(zt(e),n[1]),n[0]);if(t===-1/0)return tc(be(zt(e),n[1]),n[0]);if(t==="fro"||t==="euclidean")return un(be(ut(e),n));throw new Error(`Error in norm: invalid ord value: ${t}`)}throw new Error(`Error in norm: invalid axis: ${n}`)}var bf=z({norm_:R3});function M3(e,t,n,a,r=!0){let s=A(e,"v","movingAverage"),i=A(t,"x","movingAverage"),o=A(n,"decay","movingAverage");MI(s,i),R(gs(s.shape,i.shape),()=>"Shape mismatch in v and x");let l=ke(1),u=ce(l,o),p=W(ce(i,s),u);if(r){R(a!=null,()=>"When using zeroDebias: true, step is required.");let d=A(a,"step","movingAverage");p=fe(p,ce(l,$r(o,d)))}return J(s,p)}var P3=z({movingAverage_:M3});function O3(e,t,n){let a=A(e,"indices","scatterND","int32"),r=A(t,"updates","scatterND");zx(r,a,n);let s={indices:a,updates:r},i={shape:n};return L.runKernel(vu,s,i)}var QS=z({scatterND_:O3});function L3(e,t,n,a){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);let r=e.rank>0?e.shape[0]:1,s=e.rank>1?e.shape[1]:1;if(n.length!==s)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${s}.`);let i=t.size;if(!(t.rank===0||t.rank===1&&i===r))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${r}]`);if(t.dtype!==a.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function z3(e,t,n,a=0){let r=A(e,"sparseIndices","sparseToDense","int32"),s=A(t,"sparseValues","sparseToDense"),i=A(a,"defaultValue","sparseToDense",s.dtype);L3(r,s,n,i);let o={sparseIndices:r,sparseValues:s,defaultValue:i},l={outputShape:n};return L.runKernel(zm,o,l)}var _v=z({sparseToDense_:z3});function W3(e,t){let n=A(t,"indices","gatherND","int32"),a={params:A(e,"x","gatherND","string_or_numeric"),indices:n};return L.runKernel(eu,a)}var e2=z({gatherND_:W3});function B3(e,t){if(t==null)return e.shape.slice();if(gs(e.shape,t))return t;if(e.shape.length===t.length){let n=[];for(let a=0;a<e.shape.length;a++)t[a]==null&&e.shape[a]!=null?n.push(e.shape[a]):n.push(t[a]);return n}return t}function V3(e,t,n,a){let r=A(e,"x","dropout");if(R(r.dtype==="float32",()=>`x has to be a floating point tensor since it's going to be scaled, but got a ${r.dtype} tensor instead.`),R(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof Ae?r.clone():r;let s=B3(r,n),i=1-t,o=fe(Lu(J(Wu(s,0,1,"float32",a),i)),i);return W(r,o)}var t2=z({dropout_:V3});function n2(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function Ev(e,t,n){let a=1-e%2,r=new Float32Array(e);for(let s=0;s<e;++s){let i=2*Math.PI*s/(e+a-1);r[s]=t-n*Math.cos(i)}return qe(r,"float32")}async function U3(e,t,n=1){let a=A(e,"predictions","inTopK"),r=A(t,"targets","inTopK");R(a.rank>1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${a.rank}`),R(a.rank-1===r.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${a.rank} and targets rank ${r.rank}`),Tn(a.shape.slice(0,a.shape.length-1),r.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");let s=a.shape[a.shape.length-1];R(n>0&&n<=s,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${s}), but got ${n}`);let i=await a.data(),o=await r.data(),[l,u]=[i.length/s,s],p=xI("bool",l);for(let d=0;d<l;d++){let c=d*u,h=i.subarray(c,c+u),m=[];for(let f=0;f<h.length;f++)m.push({value:h[f],index:f});m.sort((f,g)=>g.value-f.value),p[d]=0;for(let f=0;f<n;f++)if(m[f].index===o[d]){p[d]=1;break}}return e!==a&&a.dispose(),t!==r&&r.dispose(),Qn(p,r.shape,"bool")}var G3=U3,us={};Re(us,{conv2d:()=>q3,depthwiseConv2d:()=>J3,matMul:()=>Q3});function H3(e,t,n,a,r,s="NHWC",i){let o=e;e.rank===3&&(o=V(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=V(t,[1,t.shape[0],t.shape[1],t.shape[2]])),R(o.rank===4,()=>`Error in conv2dDerFilter: input must be rank 4, but got shape ${o.shape}.`),R(l.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${l.shape}.`),R(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);let u=s==="NHWC"?o.shape[3]:o.shape[1],p=s==="NHWC"?l.shape[3]:l.shape[1];R(u===n[2],()=>`Error in conv2dDerFilter: depth of input ${u}) must match input depth in filter (${n[2]}.`),R(p===n[3],()=>`Error in conv2dDerFilter: depth of dy (${p}) must match output depth for filter (${n[3]}).`),Cn("conv2dDerFilter",r,i);let d={x:o,dy:l},c={strides:a,pad:r,dataFormat:s,dimRoundingMode:i,filterShape:n};return L.runKernel(bm,d,c)}var Av=z({conv2DBackpropFilter_:H3});function xf(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return W(e,Vu(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function vf(e,t){let n=t,a=Bt(e.shape,t.shape);return a.length>0&&(n=be(n,a)),V(n,e.shape)}function wf(e,t,n,a){if(t==="linear")return e;if(t==="relu")return Xe(e);if(t==="elu")return Ou(e);if(t==="relu6")return lf(e);if(t==="prelu")return Bc(e,n);if(t==="leakyrelu")return Oc(e,a);if(t==="sigmoid")return ma(e);throw new Error(`Unknown fused activation ${t}.`)}var kf=(e,t)=>!(e>0)||t==="linear";function j3({x:e,filter:t,strides:n,pad:a,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(l=l||"linear",kf(L.state.gradientDepth,l)===!1){let w=Rt(e,t,n,a,r,s,i);return o!=null&&(w=J(w,o)),wf(w,l,u,p)}let d=A(e,"x","conv2d","float32"),c=A(t,"filter","conv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=V(d,[1,d.shape[0],d.shape[1],d.shape[2]])),R(h.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${h.rank}.`),R(c.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${c.rank}.`),Cn("fused conv2d",a,i),R(h.shape[3]===c.shape[2],()=>`Error in conv2d: depth of input (${h.shape[3]}) must match input depth for filter ${c.shape[2]}.`),R(mr(n,s),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),R(r==="NHWC",()=>`Error in conv2d: got dataFormat of ${r} but only NHWC is currently supported.`);let f=Rc(h.shape,c.shape,n,s,a,i),g;o!=null&&(g=A(o,"bias","fused conv2d"),[g]=$t(g,d),ht(f.outShape,g.shape));let y;u!=null&&(y=A(u,"prelu weights","fused conv2d"));let b=(w,T)=>{let[C,E,$,P]=T,F=xf(w,$,l);R(ls(s),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`);let S=tv(E.shape,F,C,n,a),M=Av(E,F,C.shape,n,a),B=[S,M];if(P!=null){let j=vf(P,F);B.push(j)}return B},x={x:h,filter:c,bias:g,preluActivationWeights:y},v={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?cr((w,T,C)=>{let E=L.runKernel(ai,x,v);return C([T,w,E]),m&&(E=V(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:b}})(h,c):cr((w,T,C,E)=>{let $=L.runKernel(ai,x,v);return E([T,w,$,C]),m&&($=V($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:b}})(h,c,g)}var q3=z({fusedConv2d_:j3});function K3(e,t,n,a,r,s=[1,1],i){let o=e;e.rank===3&&(o=V(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let l=t;l.rank===3&&(l=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={x:o,dy:l},p={strides:a,pad:r,dimRoundingMode:i,dilations:s,filterShape:n};return L.runKernel(km,u,p)}var a2=z({depthwiseConv2dNativeBackpropFilter_:K3});function X3(e,t,n,a,r,s=[1,1],i){let o=t,l=!1;t.rank===3&&(l=!0,o=V(t,[1,t.shape[0],t.shape[1],t.shape[2]]));let u={dy:o,filter:n},p={strides:a,pad:r,dimRoundingMode:i,dilations:s,inputShape:e},d=L.runKernel(Im,u,p);return l?V(d,[d.shape[1],d.shape[2],d.shape[3]]):d}var r2=z({depthwiseConv2dNativeBackpropInput_:X3});function Y3({x:e,filter:t,strides:n,pad:a,dataFormat:r="NHWC",dilations:s=[1,1],dimRoundingMode:i,bias:o,activation:l="linear",preluActivationWeights:u,leakyreluAlpha:p}){if(kf(L.state.gradientDepth,l)===!1){let w=Is(e,t,n,a,r,s,i);return o!=null&&(w=J(w,o)),wf(w,l,u,p)}let d=A(e,"x","depthwiseConv2d","float32"),c=A(t,"filter","depthwiseConv2d","float32"),h=d,m=!1;d.rank===3&&(m=!0,h=V(d,[1,d.shape[0],d.shape[1],d.shape[2]])),R(h.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${h.rank}.`),R(c.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${c.rank}.`),R(h.shape[3]===c.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${h.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),s==null&&(s=[1,1]),R(mr(n,s),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${s}'`),Cn("fused depthwiseConv2d",a,i);let f=Rc(h.shape,c.shape,n,s,a,i,!0),g;o!=null&&(g=A(o,"bias","fused conv2d"),[g]=$t(g,d),ht(f.outShape,g.shape));let y;u!=null&&(y=A(u,"prelu weights","fused depthwiseConv2d"));let b=(w,T)=>{R(ls(s),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);let[C,E,$,P]=T,F=xf(w,$,l),S=r2(E.shape,F,C,n,a,s,i),M=a2(E,F,C.shape,n,a,s,i);if(P!=null){let B=vf(g,F);return[S,M,B]}return[S,M]},x={x:h,filter:c,bias:g,preluActivationWeights:y},v={strides:n,pad:a,dataFormat:r,dilations:s,dimRoundingMode:i,activation:l,leakyreluAlpha:p};return o==null?cr((w,T,C)=>{let E=L.runKernel(ri,x,v);return C([T,w,E]),m&&(E=V(E,[E.shape[1],E.shape[2],E.shape[3]])),{value:E,gradFunc:b}})(h,c):cr((w,T,C,E)=>{let $=L.runKernel(ri,x,v);return E([T,w,$,C]),m&&($=V($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:b}})(h,c,g)}var J3=z({fusedDepthwiseConv2d_:Y3});function Z3({a:e,b:t,transposeA:n=!1,transposeB:a=!1,bias:r,activation:s="linear",preluActivationWeights:i,leakyreluAlpha:o}){if(kf(L.state.gradientDepth,s)===!1){let P=Fe(e,t,n,a);return r!=null&&(P=J(P,r)),wf(P,s,i,o)}let l=A(e,"a","fused matMul"),u=A(t,"b","fused matMul");[l,u]=$t(l,u);let p=n?l.shape[l.rank-2]:l.shape[l.rank-1],d=a?u.shape[u.rank-1]:u.shape[u.rank-2],c=n?l.shape[l.rank-1]:l.shape[l.rank-2],h=a?u.shape[u.rank-2]:u.shape[u.rank-1],m=l.shape.slice(0,-2),f=u.shape.slice(0,-2),g=wt(m),y=wt(f);R(p===d,()=>`Error in fused matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${l.shape} and ${u.shape} and transposeA=${n} and transposeB=${a} must match.`);let b=ht(l.shape.slice(0,-2),u.shape.slice(0,-2)).concat([c,h]),x=n?V(l,[g,p,c]):V(l,[g,c,p]),v=a?V(u,[y,h,d]):V(u,[y,d,h]),w;r!=null&&(w=A(r,"bias","fused matMul"),[w]=$t(w,l),ht(b,w.shape));let T;i!=null&&(T=A(i,"prelu weights","fused matMul"));let C=(P,F)=>{let[S,M,B,j]=F,q=xf(V(P,B.shape),B,s),K,Q;if(!n&&!a?(K=Fe(q,M,!1,!0),Q=Fe(S,q,!0,!1)):!n&&a?(K=Fe(q,M,!1,!1),Q=Fe(q,S,!0,!1)):n&&!a?(K=Fe(M,q,!1,!0),Q=Fe(S,q,!1,!1)):(K=Fe(M,q,!0,!0),Q=Fe(q,S,!0,!0)),r!=null){let ee=vf(j,q);return[K,Q,ee]}else return[K,Q]},E={a:x,b:v,bias:w,preluActivationWeights:T},$={transposeA:n,transposeB:a,activation:s,leakyreluAlpha:o};return r==null?cr((P,F,S)=>{let M=L.runKernel(ni,E,$);return S([P,F,M]),{value:V(M,b),gradFunc:C}})(x,v):cr((P,F,S,M)=>{let B=L.runKernel(ni,E,$);return M([P,F,B,S]),{value:V(B,b),gradFunc:C}})(x,v,w)}var Q3=z({fusedMatMul_:Z3});function eL(e){return Ev(e,.54,.46)}var tL=z({hammingWindow_:eL});function nL(e){return Ev(e,.5,.5)}var s2=z({hannWindow_:nL});function aL(e,t,n,a=!1,r=0){let s=0,i=[];for(;s+t<=e.size;)i.push(Ge(e,s,t)),s+=n;if(a)for(;s<e.size;){let o=s+t-e.size,l=Qe([Ge(e,s,t-o),_n([o],r)]);i.push(l),s+=n}return i.length===0?Ha([],[0,t]):V(Qe(i),[i.length,t])}var i2=z({frame_:aL});function rL(e,t,n,a,r=s2){a==null&&(a=n2(t));let s=i2(e,t,n),i=W(s,r(t));return Uc(i,a)}var sL=z({stft_:rL});function iL(e,t,n,a,r="bilinear",s=0){let i=A(e,"image","cropAndResize"),o=A(t,"boxes","cropAndResize","float32"),l=A(n,"boxInd","cropAndResize","int32"),u=o.shape[0];R(i.rank===4,()=>`Error in cropAndResize: image must be rank 4,but got rank ${i.rank}.`),R(o.rank===2&&o.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${u},4] but had shape ${o.shape}.`),R(l.rank===1&&l.shape[0]===u,()=>`Error in cropAndResize: boxInd must be have size [${u}] but had shape ${o.shape}.`),R(a.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${a.length}.`),R(a[0]>=1&&a[1]>=1,()=>`cropSize must be atleast [1,1], but was ${a}`),R(r==="bilinear"||r==="nearest",()=>`method must be bilinear or nearest, but was ${r}`);let p={image:i,boxes:o,boxInd:l},d={method:r,extrapolationValue:s,cropSize:a};return L.runKernel(jl,p,d)}var oL=z({cropAndResize_:iL});function lL(e){let t=A(e,"image","flipLeftRight","float32");R(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);let n={image:t};return L.runKernel(Zl,n,{})}var uL=z({flipLeftRight_:lL});function pL(e){let t=A(e,"image","grayscaleToRGB"),n=t.rank-1,a=t.shape[n];R(t.rank>=2,()=>`Error in grayscaleToRGB: images must be at least rank 2, but got rank ${t.rank}.`),R(a===1,()=>`Error in grayscaleToRGB: last dimension of a grayscale image should be size 1, but got size ${a}.`);let r=new Array(t.rank);return r.fill(1,0,n),r[n]=3,On(t,r)}var cL=z({grayscaleToRGB_:pL});function dL(e,t,n=0,a=.5){let r=A(e,"image","rotateWithOffset","float32");R(r.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${r.rank}.`);let s={image:r},i={radians:t,fillValue:n,center:a};return L.runKernel(Mu,s,i)}var hL=z({rotateWithOffset_:dL});function Uu(e,t,n,a,r,s){a==null&&(a=.5),r==null&&(r=Number.NEGATIVE_INFINITY),s==null&&(s=0);let i=e.shape[0];return n=Math.min(n,i),R(0<=a&&a<=1,()=>`iouThreshold must be in [0, 1], but was '${a}'`),R(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),R(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),R(t.rank===1,()=>"scores must be a 1D tensor"),R(t.shape[0]===i,()=>`scores has incompatible shape with boxes. Expected ${i}, but was ${t.shape[0]}`),R(0<=s&&s<=1,()=>`softNmsSigma must be in [0, 1], but was '${s}'`),{maxOutputSize:n,iouThreshold:a,scoreThreshold:r,softNmsSigma:s}}function mL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=A(e,"boxes","nonMaxSuppression","float32"),i=A(t,"scores","nonMaxSuppression","float32"),o=Uu(s,i,n,a,r);n=o.maxOutputSize,a=o.iouThreshold,r=o.scoreThreshold;let l={maxOutputSize:n,iouThreshold:a,scoreThreshold:r};return L.runKernel(du,{boxes:s,scores:i},l)}var fL=z({nonMaxSuppression_:mL});function gL(e,t,n){let a=yL(e,t,n),r=a<0?-(a+1):a;e.splice(r,0,t)}function yL(e,t,n){return xL(e,t,n||bL)}function bL(e,t){return e>t?1:e<t?-1:0}function xL(e,t,n){let a=0,r=e.length,s=0,i=!1;for(;a<r;){s=a+(r-a>>>1);let o=n(t,e[s]);o>0?a=s+1:(r=s,i=!o)}return i?a:-a-1}function o2(e,t,n,a,r){return $v(e,t,n,a,r,0)}function l2(e,t,n,a,r,s){return $v(e,t,n,a,r,0,!1,s,!0)}function u2(e,t,n,a,r,s){return $v(e,t,n,a,r,s,!0)}function $v(e,t,n,a,r,s,i=!1,o=!1,l=!1){let u=[];for(let g=0;g<t.length;g++)t[g]>r&&u.push({score:t[g],boxIndex:g,suppressBeginIndex:0});u.sort(X1);let p=s>0?-.5/s:0,d=[],c=[];for(;d.length<n&&u.length>0;){let g=u.pop(),{score:y,boxIndex:b,suppressBeginIndex:x}=g;if(y<r)break;let v=!1;for(let w=d.length-1;w>=x;--w){let T=vL(e,b,d[w]);if(T>=a){v=!0;break}if(g.score=g.score*wL(a,p,T),g.score<=r)break}g.suppressBeginIndex=d.length,v||(g.score===y?(d.push(b),c.push(g.score)):g.score>r&&gL(u,g,X1))}let h=d.length,m=n-h;o&&m>0&&(d.push(...new Array(m).fill(0)),c.push(...new Array(m).fill(0)));let f={selectedIndices:d};return i&&(f.selectedScores=c),l&&(f.validOutputs=h),f}function vL(e,t,n){let a=e.subarray(t*4,t*4+4),r=e.subarray(n*4,n*4+4),s=Math.min(a[0],a[2]),i=Math.min(a[1],a[3]),o=Math.max(a[0],a[2]),l=Math.max(a[1],a[3]),u=Math.min(r[0],r[2]),p=Math.min(r[1],r[3]),d=Math.max(r[0],r[2]),c=Math.max(r[1],r[3]),h=(o-s)*(l-i),m=(d-u)*(c-p);if(h<=0||m<=0)return 0;let f=Math.max(s,u),g=Math.max(i,p),y=Math.min(o,d),b=Math.min(l,c),x=Math.max(y-f,0)*Math.max(b-g,0);return x/(h+m-x)}function wL(e,t,n){let a=Math.exp(t*n*n);return n<=e?a:0}function X1(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function kL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY){let s=A(e,"boxes","nonMaxSuppressionAsync"),i=A(t,"scores","nonMaxSuppressionAsync"),o=Uu(s,i,n,a,r);n=o.maxOutputSize,a=o.iouThreshold,r=o.scoreThreshold;let l=await Promise.all([s.data(),i.data()]),u=l[0],p=l[1],{selectedIndices:d}=o2(u,p,n,a,r);return s!==e&&s.dispose(),i!==t&&i.dispose(),qe(d,"int32")}var IL=kL;function SL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=A(e,"boxes","nonMaxSuppression"),o=A(t,"scores","nonMaxSuppression"),l=Uu(i,o,n,a,r,s);n=l.maxOutputSize,a=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u={boxes:i,scores:o},p={maxOutputSize:n,iouThreshold:a,scoreThreshold:r,softNmsSigma:s},d=L.runKernel(mu,u,p);return{selectedIndices:d[0],selectedScores:d[1]}}var NL=z({nonMaxSuppressionWithScore_:SL});async function TL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=0){let i=A(e,"boxes","nonMaxSuppressionAsync"),o=A(t,"scores","nonMaxSuppressionAsync"),l=Uu(i,o,n,a,r,s);n=l.maxOutputSize,a=l.iouThreshold,r=l.scoreThreshold,s=l.softNmsSigma;let u=await Promise.all([i.data(),o.data()]),p=u[0],d=u[1],{selectedIndices:c,selectedScores:h}=u2(p,d,n,a,r,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:qe(c,"int32"),selectedScores:qe(h)}}var CL=TL;function _L(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=A(e,"boxes","nonMaxSuppression"),o=A(t,"scores","nonMaxSuppression"),l=Uu(i,o,n,a,r,null),u=l.maxOutputSize,p=l.iouThreshold,d=l.scoreThreshold,c={boxes:i,scores:o},h={maxOutputSize:u,iouThreshold:p,scoreThreshold:d,padToMaxOutputSize:s},m=L.runKernel(hu,c,h);return{selectedIndices:m[0],validOutputs:m[1]}}var EL=z({nonMaxSuppressionPadded_:_L});async function AL(e,t,n,a=.5,r=Number.NEGATIVE_INFINITY,s=!1){let i=A(e,"boxes","nonMaxSuppressionAsync"),o=A(t,"scores","nonMaxSuppressionAsync"),l=Uu(i,o,n,a,r,null),u=l.maxOutputSize,p=l.iouThreshold,d=l.scoreThreshold,[c,h]=await Promise.all([i.data(),o.data()]),{selectedIndices:m,validOutputs:f}=l2(c,h,u,p,d,s);return i!==e&&i.dispose(),o!==t&&o.dispose(),{selectedIndices:qe(m,"int32"),validOutputs:ke(f,"int32")}}var $L=AL;function FL(e,t,n=!1,a=!1){let r=A(e,"images","resizeBilinear");R(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),R(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`),R(a===!1||n===!1,()=>"Error in resizeBilinear: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=V(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=L.runKernel(to,o,l);return i?V(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var p2=z({resizeBilinear_:FL});function DL(e,t,n=!1,a=!1){let r=A(e,"images","resizeNearestNeighbor");R(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),R(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),R(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype"),R(a===!1||n===!1,()=>"Error in resizeNearestNeighbor: If halfPixelCenters is true, alignCorners must be false.");let s=r,i=!1;r.rank===3&&(i=!0,s=V(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let[]=t,o={images:s},l={alignCorners:n,halfPixelCenters:a,size:t},u=L.runKernel(Ic,o,l);return i?V(u,[u.shape[1],u.shape[2],u.shape[3]]):u}var c2=z({resizeNearestNeighbor_:DL});function RL(e,t="binary",n=!1,a=.5){let r=A(e,"image","threshold"),s=.2989,i=.587,o=.114,l=r.shape[0]*r.shape[1],u=W(qe([a]),255),p,d,c,h;if(R(r.rank===3,()=>`Error in threshold: image must be rank 3,but got rank ${r.rank}.`),R(r.shape[2]===3||r.shape[2]===1,()=>`Error in threshold: image color channel must be equal to 3 or 1but got ${r.shape[2]}.`),R(r.dtype==="int32"||r.dtype==="float32",()=>`Error in dtype: image dtype must be int32 or float32,but got dtype ${r.dtype}.`),R(t==="otsu"||t==="binary",()=>`Method must be binary or otsu, but was ${t}`),r.shape[2]===3){[p,d,c]=zn(r,[1,1,1],-1);let f=W(p,s),g=W(d,i),y=W(c,o);h=J(J(f,g),y)}else h=e;if(t==="otsu"){let f=Qx(oe(uf(h),"int32"),Qn([]),256);u=ML(f,l)}let m=n?Ns(h,u):Gn(h,u);return oe(W(m,255),"int32")}function ML(e,t){let n=qe([-1]),a=qe([0]),r=qe([0]),s,i,o,l,u,p;for(let d=0;d<e.size-1;d++){s=Ge(e,0,d+1),i=Ge(e,d+1),u=fe(be(s),t),p=fe(be(i),t);let c=be(W(s,Il(0,s.size)));o=fe(c,be(s));let h=_n(i.shape,s.size),m=J(Il(0,i.size),h),f=W(i,m);l=fe(be(f),be(i));let g=ce(o,l),y=ce(o,l),b=W(u,p);r=W(W(b,g),y);let x=Gn(r,a);a=fn(x,r,a),n=fn(x,qe([d]),n)}return n}var PL=z({threshold_:RL});function OL(e,t,n="nearest",a="constant",r=0,s){let i=A(e,"image","transform","float32"),o=A(t,"transforms","transform","float32");R(i.rank===4,()=>`Error in transform: image must be rank 4,but got rank ${i.rank}.`),R(o.rank===2&&(o.shape[0]===i.shape[0]||o.shape[0]===1)&&o.shape[1]===8,()=>"Error in transform: Input transform should be batch x 8 or 1 x 8"),R(s==null||s.length===2,()=>`Error in transform: outputShape must be [height, width] or null, but got ${s}.`);let l={image:i,transforms:o},u={interpolation:n,fillMode:a,fillValue:r,outputShape:s};return L.runKernel(Fu,l,u)}var LL=z({transform_:OL});function zL(e,t,n){R(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),R(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);let a=A(e,"a","bandPart");R(a.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${a.rank}.`);let r=a.shape,[s,i]=a.shape.slice(-2);if(!(t<=s))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${s}).`);if(!(n<=i))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${i}).`);t<0&&(t=s),n<0&&(n=i);let o=V(Il(0,s,1,"int32"),[-1,1]),l=Il(0,i,1,"int32"),u=ce(o,l),p=_a(Ns(u,ke(+t,"int32")),Ss(u,ke(-n,"int32"))),d=kt([s,i],a.dtype);return V(Mt(mt(V(a,[-1,s,i])).map(c=>fn(p,c,d))),r)}var WL=z({bandPart_:zL});function BL(e){let t;if(Array.isArray(e)){t=!1,R(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");let r=e[0].shape[0];for(let s=1;s<e.length;++s)R(e[s].shape[0]===r,()=>`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[s].shape[0]} vs. ${r})`)}else t=!0,e=zn(e,e.shape[0],0).map(r=>dr(r,[0]));R(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);let n=[],a=e;for(let r=0;r<e.length;++r)n.push(L.tidy(()=>{let s=a[r];if(r>0)for(let i=0;i<r;++i){let o=W(be(W(n[i],s)),n[i]);s=ce(s,o)}return fe(s,bf(s,"euclidean"))}));return t?Mt(n,0):n}var VL=z({gramSchmidt_:BL});function UL(e,t=!1){if(R(e.rank>=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return Y1(e,t);{let n=e.shape.slice(0,e.shape.length-2).reduce((l,u)=>l*u),a=mt(V(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),r=[],s=[];a.forEach(l=>{let[u,p]=Y1(l,t);r.push(u),s.push(p)});let i=V(Mt(r,0),e.shape),o=V(Mt(s,0),e.shape);return[i,o]}}function Y1(e,t=!1){return L.tidy(()=>{R(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);let n=e.shape[0],a=e.shape[1],r=uv(n),s=_r(e),i=Ha([[1]],[1,1]),o=_r(i),l=n>=a?a:n;for(let u=0;u<l;++u){let p=s,d=o,c=r;[o,s,r]=L.tidy(()=>{let h=Ge(s,[u,u],[n-u,1]),m=bf(h),f=Ge(s,[u,u],[1,1]),g=fn(Gn(f,0),Ha([[-1]]),Ha([[1]])),y=ce(f,W(g,m)),b=fe(h,y);b.shape[0]===1?o=_r(i):o=Qe([i,Ge(b,[1,0],[b.shape[0]-1,b.shape[1]])],0);let x=St(fe(Fe(g,y),m)),v=Ge(s,[u,0],[n-u,a]),w=W(x,o),T=Pe(o);if(u===0)s=ce(v,Fe(w,Fe(T,v)));else{let $=ce(v,Fe(w,Fe(T,v)));s=Qe([Ge(s,[0,0],[u,a]),$],0)}let C=Pe(w),E=Ge(r,[0,u],[n,r.shape[1]-u]);if(u===0)r=ce(E,Fe(Fe(E,o),C));else{let $=ce(E,Fe(Fe(E,o),C));r=Qe([Ge(r,[0,0],[n,u]),$],1)}return[o,s,r]}),De([p,d,c])}return!t&&n>a&&(r=Ge(r,[0,0],[n,a]),s=Ge(s,[0,0],[a,a])),[r,s]})}var GL=z({qr_:UL}),In;(function(e){e[e.NONE=0]="NONE",e[e.MEAN=1]="MEAN",e[e.SUM=2]="SUM",e[e.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(In||(In={}));function HL(e,t,n=In.SUM_BY_NONZERO_WEIGHTS){let a=A(e,"losses","computeWeightedLoss"),r=null;t!=null&&(r=A(t,"weights","computeWeightedLoss"));let s=r==null?a:W(a,r);if(n===In.NONE)return s;if(n===In.SUM)return be(s);if(n===In.MEAN){if(r==null)return Et(s);{let i=a.size/r.size,o=fe(be(s),be(r));return i>1?fe(o,ke(i)):o}}if(n===In.SUM_BY_NONZERO_WEIGHTS){if(r==null)return fe(be(s),ke(a.size));{let i=W(r,Zn(a.shape)),o=oe(be(ci(i,ke(0))),"float32");return fe(be(s),o)}}throw Error(`Unknown reduction: ${n}`)}var Fr=z({computeWeightedLoss_:HL});function jL(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=A(e,"labels","absoluteDifference"),s=A(t,"predictions","absoluteDifference"),i=null;n!=null&&(i=A(n,"weights","absoluteDifference")),Tn(r.shape,s.shape,"Error in absoluteDifference: ");let o=zt(ce(r,s));return Fr(o,i,a)}var qL=z({absoluteDifference_:jL});function KL(e,t,n,a,r=In.SUM_BY_NONZERO_WEIGHTS){let s=A(e,"labels","cosineDistance"),i=A(t,"predictions","cosineDistance"),o=null;a!=null&&(o=A(a,"weights","cosineDistance")),Tn(s.shape,i.shape,"Error in cosineDistance: ");let l=ke(1),u=ce(l,be(W(s,i),n,!0));return Fr(u,o,r)}var XL=z({cosineDistance_:KL});function YL(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=A(e,"labels","hingeLoss"),s=A(t,"predictions","hingeLoss"),i=null;n!=null&&(i=A(n,"weights","hingeLoss")),Tn(r.shape,s.shape,"Error in hingeLoss: ");let o=ke(1);r=ce(W(ke(2),r),o);let l=Xe(ce(o,W(r,s)));return Fr(l,i,a)}var JL=z({hingeLoss_:YL});function ZL(e,t,n,a=1,r=In.SUM_BY_NONZERO_WEIGHTS){let s=A(e,"labels","huberLoss"),i=A(t,"predictions","huberLoss"),o=null;n!=null&&(o=A(n,"weights","huberLoss")),Tn(s.shape,i.shape,"Error in huberLoss: ");let l=ke(a),u=zt(ce(i,s)),p=zu(u,l),d=ce(u,p),c=J(W(ke(.5),ut(p)),W(l,d));return Fr(c,o,r)}var QL=z({huberLoss_:ZL});function ez(e,t,n,a=1e-7,r=In.SUM_BY_NONZERO_WEIGHTS){let s=A(e,"labels","logLoss"),i=A(t,"predictions","logLoss"),o=null;n!=null&&(o=A(n,"weights","logLoss")),Tn(s.shape,i.shape,"Error in logLoss: ");let l=ke(1),u=ke(a),p=St(W(s,ta(J(i,u)))),d=W(ce(l,s),ta(J(ce(l,i),u))),c=ce(p,d);return Fr(c,o,r)}var tz=z({logLoss_:ez});function nz(e,t,n,a=In.SUM_BY_NONZERO_WEIGHTS){let r=A(e,"labels","meanSquaredError"),s=A(t,"predictions","meanSquaredError"),i=null;n!=null&&(i=A(n,"weights","meanSquaredError")),Tn(r.shape,s.shape,"Error in meanSquaredError: ");let o=gf(r,s);return Fr(o,i,a)}var az=z({meanSquaredError_:nz});function rz(e,t){let n=A(e,"labels","sigmoidCrossEntropyWithLogits"),a=A(t,"logits","sigmoidCrossEntropyWithLogits");Tn(n.shape,a.shape,"Error in sigmoidCrossEntropyWithLogits: ");let r=Xe(a),s=W(a,n),i=Lc(gn(St(zt(a))));return J(ce(r,s),i)}function sz(e,t,n,a=0,r=In.SUM_BY_NONZERO_WEIGHTS){let s=A(e,"multiClassLabels","sigmoidCrossEntropy"),i=A(t,"logits","sigmoidCrossEntropy"),o=null;if(n!=null&&(o=A(n,"weights","sigmoidCrossEntropy")),Tn(s.shape,i.shape,"Error in sigmoidCrossEntropy: "),a>0){let u=ke(a),p=ke(1),d=ke(.5);s=J(W(s,ce(p,u)),W(d,u))}let l=rz(s,i);return Fr(l,o,r)}var iz=z({sigmoidCrossEntropy_:sz});function oz(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 cr((a,r,s)=>{let i=mv(r,[n],!0),o=ce(oe(r,"float32"),i);s([a,o]);let l=St(W(o,a));return{value:be(l,[n]),gradFunc:(u,p)=>{let[d,c]=p,h=pi(u.shape,[n]);return[W(V(u,h),ce(oe(d,"float32"),gn(c))),W(V(u,h),ce(gn(c),oe(d,"float32")))]}}})(e,t)}function lz(e,t,n,a=0,r=In.SUM_BY_NONZERO_WEIGHTS){let s=A(e,"onehotLabels","softmaxCrossEntropy"),i=A(t,"logits","softmaxCrossEntropy"),o=null;if(n!=null&&(o=A(n,"weights","softmaxCrossEntropy")),Tn(s.shape,i.shape,"Error in softmaxCrossEntropy: "),a>0){let u=ke(a),p=ke(1),d=ke(s.shape[1]);s=J(W(s,ce(p,u)),fe(u,d))}let l=oz(s,i);return Fr(l,o,r)}var uz=z({softmaxCrossEntropy_:lz});function pz(e,t,n,a){let r=A(e,"indices","sparseFillEmptyRows","int32"),s=A(t,"values","sparseFillEmptyRows"),i=A(n,"denseShape","sparseFillEmptyRows","int32"),o=A(a,"defaultValue","sparseFillEmptyRows",s.dtype);if(r.rank!==2)throw new Error(`Indices should be Tensor2D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Values should be Tensor1D but received shape ${s.shape}`);if(i.rank!==1)throw new Error(`Dense shape should be Tensor1D but received shape ${i.shape}`);if(o.rank!==0)throw new Error(`Default value should be a scalar but received shape ${o.shape}`);let l={indices:r,values:s,denseShape:i,defaultValue:o},u=L.runKernel(Sc,l);return{outputIndices:u[0],outputValues:u[1],emptyRowIndicator:u[2],reverseIndexMap:u[3]}}var cz=z({sparseFillEmptyRows_:pz});function dz(e,t,n){let a=A(e,"inputIndices","sparseReshape","int32"),r=A(t,"inputShape","sparseReshape","int32"),s=A(n,"newShape","sparseReshape","int32");if(a.rank!==2)throw new Error(`Input indices should be Tensor2D but received shape
|
|
${a.shape}`);if(r.rank!==1)throw new Error(`Input shape should be Tensor1D but received shape ${r.shape}`);if(s.rank!==1)throw new Error(`New shape should be Tensor1D but received shape ${s.shape}`);let i={inputIndices:a,inputShape:r,newShape:s},o=L.runKernel(Eu,i);return{outputIndices:o[0],outputShape:o[1]}}var hz=z({sparseReshape_:dz});function mz(e,t,n){let a=A(e,"data","sparseSegmentMean"),r=A(t,"indices","sparseSegmentMean","int32"),s=A(n,"segmentIds","sparseSegmentMean","int32");if(a.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
|
|
${s.shape}`);let i={data:a,indices:r,segmentIds:s};return L.runKernel(Nc,i)}var fz=z({sparseSegmentMean_:mz});function gz(e,t,n){let a=A(e,"data","sparseSegmentSum"),r=A(t,"indices","sparseSegmentSum","int32"),s=A(n,"segmentIds","sparseSegmentSum","int32");if(a.rank<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.rank!==1)throw new Error(`Indices should be Tensor1D but received shape
|
|
${r.shape}`);if(s.rank!==1)throw new Error(`Segment ids should be Tensor1D but received shape
|
|
${s.shape}`);let i={data:a,indices:r,segmentIds:s};return L.runKernel(Tc,i)}var yz=z({sparseSegmentSum_:gz});function bz(e,t,n,a,r,s,i,o){let l=A(e,"data","stringNGrams","string");if(l.dtype!=="string")throw new Error("Data must be of datatype string");if(l.shape.length!==1)throw new Error(`Data must be a vector, saw: ${l.shape}`);let u=A(t,"dataSplits","stringNGrams");if(u.dtype!=="int32")throw new Error("Data splits must be of datatype int32");let p={separator:n,nGramWidths:a,leftPad:r,rightPad:s,padWidth:i,preserveShortSequences:o},d={data:l,dataSplits:u},c=L.runKernel(Wm,d,p);return{nGrams:c[0],nGramsSplits:c[1]}}var xz=z({stringNGrams_:bz});function vz(e,t,n=!0){let a=A(e,"input","stringSplit","string"),r=A(t,"delimiter","stringSplit","string");if(a.rank!==1)throw new Error(`Input should be Tensor1D but received shape ${a.shape}`);if(r.rank!==0)throw new Error(`Delimiter should be a scalar but received shape ${r.shape}`);let s={skipEmpty:n},i={input:a,delimiter:r},o=L.runKernel(Bm,i,s);return{indices:o[0],values:o[1],shape:o[2]}}var wz=z({stringSplit_:vz});function kz(e,t){let n=A(e,"input","stringToHashBucketFast","string"),a={numBuckets:t};if(t<=0)throw new Error("Number of buckets must be at least 1");let r={input:n};return L.runKernel(Vm,r,a)}var Iz=z({stringToHashBucketFast_:kz}),Sz={fft:Vc,ifft:Sl,rfft:Uc,irfft:ff},Nz={hammingWindow:tL,hannWindow:s2,frame:i2,stft:sL},Ln={flipLeftRight:uL,grayscaleToRGB:cL,resizeNearestNeighbor:c2,resizeBilinear:p2,rotateWithOffset:hL,cropAndResize:oL,nonMaxSuppression:fL,nonMaxSuppressionAsync:IL,nonMaxSuppressionWithScore:NL,nonMaxSuppressionWithScoreAsync:CL,nonMaxSuppressionPadded:EL,nonMaxSuppressionPaddedAsync:$L,threshold:PL,transform:LL},d2={bandPart:WL,gramSchmidt:VL,qr:GL},Tz={absoluteDifference:qL,computeWeightedLoss:Fr,cosineDistance:XL,hingeLoss:JL,huberLoss:QL,logLoss:tz,meanSquaredError:az,sigmoidCrossEntropy:iz,softmaxCrossEntropy:uz},Op={sparseFillEmptyRows:cz,sparseReshape:hz,sparseSegmentMean:fz,sparseSegmentSum:yz},Th={stringNGrams:xz,stringSplit:wz,stringToHashBucketFast:Iz},Dr=class extends mS{minimize(e,t=!1,n){let{value:a,grads:r}=this.computeGradients(e,n);if(n!=null){let s=n.map(i=>({name:i.name,tensor:r[i.name]}));this.applyGradients(s)}else this.applyGradients(r);return De(r),t?a:(a.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return zS(e,t)}dispose(){this.iterations_!=null&&De(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:ke(this.iterations_,"int32")}}async getWeights(){throw new Error("getWeights() is not implemented for this optimizer yet.")}async setWeights(e){throw new Error(`setWeights() is not implemented for this optimizer class ${this.getClassName()}`)}async extractIterations(e){return this.iterations_=(await e[0].tensor.data())[0],e.slice(1)}};Object.defineProperty(Dr,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});var If=class extends Dr{constructor(e,t,n=null){super(),this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t],r=!1;this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accum_grad`,variable:O(()=>Ke(a).variable(r))}),this.accumulatedUpdates[n]==null&&(this.accumulatedUpdates[n]={originalName:`${t}/accum_var`,variable:O(()=>Ke(a).variable(r))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedGrads[n].variable,o=this.accumulatedUpdates[n].variable;O(()=>{let l=J(W(i,this.rho),W(ut(s),1-this.rho)),u=W(fe(un(J(o,this.epsilon)),un(J(i,this.epsilon))),s),p=J(W(o,this.rho),W(ut(u),1-this.rho));i.assign(l),o.assign(p);let d=J(W(u,-this.learningRate),a);a.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(De(this.accumulatedGrads.map(e=>e.variable)),De(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){let e=[...this.accumulatedGrads,...this.accumulatedUpdates];return[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}};If.className="Adadelta";ks(If);var Sf=class extends Dr{constructor(e,t=.1){super(),this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t];this.accumulatedGrads[n]==null&&(this.accumulatedGrads[n]={originalName:`${t}/accumulator`,variable:O(()=>_n(a.shape,this.initialAccumulatorValue).variable(!1))});let r=Array.isArray(e)?e[n].tensor:e[t];if(r==null)return;let s=this.accumulatedGrads[n].variable;O(()=>{let i=J(s,ut(r));s.assign(i);let o=J(W(fe(r,un(J(i,L.backend.epsilon()))),-this.learningRate),a);a.assign(o)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&De(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)}};Sf.className="Adagrad";ks(Sf);var Nf=class extends Dr{constructor(e,t,n,a=null){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=a,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],O(()=>{this.accBeta1=ke(t).variable(),this.accBeta2=ke(n).variable()}),a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=ce(1,this.accBeta1),a=ce(1,this.accBeta2);t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:O(()=>Ke(i).variable(o))}),this.accumulatedSecondMoment[s]==null&&(this.accumulatedSecondMoment[s]={originalName:`${r}/v`,variable:O(()=>Ke(i).variable(o))});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedSecondMoment[s].variable,d=J(W(u,this.beta1),W(l,1-this.beta1)),c=J(W(p,this.beta2),W(ut(l),1-this.beta2)),h=fe(d,n),m=fe(c,a);u.assign(d),p.assign(c);let f=J(W(fe(h,J(un(m),this.epsilon)),-this.learningRate),i);i.assign(f)}),this.accBeta1.assign(W(this.accBeta1,this.beta1)),this.accBeta2.assign(W(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&De(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&De(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($r(this.beta1,this.iterations_+1)),this.accBeta2.assign($r(this.beta2,this.iterations_+1))});let t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}};Nf.className="Adam";ks(Nf);var Tf=class extends Dr{constructor(e,t,n,a=null,r=0){super(),this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=a,this.decay=r,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],O(()=>{this.iteration=ke(0).variable(),this.accBeta1=ke(t).variable()}),a==null&&(this.epsilon=L.backend.epsilon())}applyGradients(e){let t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{let n=ce(1,this.accBeta1),a=fe(-this.learningRate,J(W(this.iteration,this.decay),1));t.forEach((r,s)=>{let i=L.registeredVariables[r],o=!1;this.accumulatedFirstMoment[s]==null&&(this.accumulatedFirstMoment[s]={originalName:`${r}/m`,variable:Ke(i).variable(o)}),this.accumulatedWeightedInfNorm[s]==null&&(this.accumulatedWeightedInfNorm[s]={originalName:`${r}/v`,variable:Ke(i).variable(o)});let l=Array.isArray(e)?e[s].tensor:e[r];if(l==null)return;let u=this.accumulatedFirstMoment[s].variable,p=this.accumulatedWeightedInfNorm[s].variable,d=J(W(u,this.beta1),W(l,1-this.beta1)),c=W(p,this.beta2),h=zt(l),m=fr(c,h);u.assign(d),p.assign(m);let f=J(W(fe(a,n),fe(d,J(m,this.epsilon))),i);i.assign(f)}),this.iteration.assign(J(this.iteration,1)),this.accBeta1.assign(W(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&De(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&De(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)}};Tf.className="Adamax";ks(Tf);var Gc=class extends Dr{constructor(e){super(),this.learningRate=e,this.setLearningRate(e)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=Array.isArray(e)?e[n].tensor:e[t];if(a==null)return;let r=L.registeredVariables[t];O(()=>{let s=J(W(this.c,a),r);r.assign(s)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=en(ke(-e))}dispose(){this.c.dispose()}async getWeights(){return[await this.saveIterations()]}async setWeights(e){if(e=await this.extractIterations(e),e.length!==0)throw new Error("SGD optimizer does not have settable weights.")}getConfig(){return{learningRate:this.learningRate}}static fromConfig(e,t){return new e(t.learningRate)}};Gc.className="SGD";ks(Gc);var Cf=class extends Gc{constructor(e,t,n=!1){super(e),this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=ke(this.momentum)}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t];this.accumulations[n]==null&&(this.accumulations[n]={originalName:`${t}/momentum`,variable:O(()=>Ke(a).variable(!1))});let r=this.accumulations[n].variable,s=Array.isArray(e)?e[n].tensor:e[t];s!=null&&O(()=>{let i,o=J(W(this.m,r),s);this.useNesterov?i=J(W(this.c,J(s,W(o,this.m))),a):i=J(W(this.c,o),a),r.assign(o),a.assign(i)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&De(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)}};Cf.className="Momentum";ks(Cf);var _f=class extends Dr{constructor(e,t=.9,n=0,a=null,r=!1){if(super(),this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=a,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=r,a==null&&(this.epsilon=L.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){(Array.isArray(e)?e.map(t=>t.name):Object.keys(e)).forEach((t,n)=>{let a=L.registeredVariables[t],r=!1;this.accumulatedMeanSquares[n]==null&&(this.accumulatedMeanSquares[n]={originalName:`${t}/rms`,variable:O(()=>Ke(a).variable(r))}),this.accumulatedMoments[n]==null&&(this.accumulatedMoments[n]={originalName:`${t}/momentum`,variable:O(()=>Ke(a).variable(r))}),this.accumulatedMeanGrads[n]==null&&this.centered&&(this.accumulatedMeanGrads[n]={originalName:`${t}/mg`,variable:O(()=>Ke(a).variable(r))});let s=Array.isArray(e)?e[n].tensor:e[t];if(s==null)return;let i=this.accumulatedMeanSquares[n].variable,o=this.accumulatedMoments[n].variable;O(()=>{let l=J(W(i,this.decay),W(ut(s),1-this.decay));if(this.centered){let u=this.accumulatedMeanGrads[n].variable,p=J(W(u,this.decay),W(s,1-this.decay)),d=fe(W(s,this.learningRate),un(ce(l,J(ut(p),this.epsilon)))),c=J(W(o,this.momentum),d);i.assign(l),u.assign(p),o.assign(c);let h=ce(a,c);a.assign(h)}else{let u=J(W(i,this.decay),W(ut(s),1-this.decay)),p=J(W(o,this.momentum),fe(W(s,this.learningRate),un(J(u,this.epsilon))));i.assign(u),o.assign(p);let d=ce(a,p);a.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&De(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&De(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&De(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){let e=[...this.accumulatedMeanSquares,...this.accumulatedMoments];return this.centered&&e.push(...this.accumulatedMeanGrads),[await this.saveIterations()].concat(e.map(t=>({name:t.originalName,tensor:t.variable})))}async setWeights(e){e=await this.extractIterations(e);let t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(a=>({originalName:a.name,variable:a.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}};_f.className="RMSProp";ks(_f);var Yr=class{static sgd(e){return new Gc(e)}static momentum(e,t,n=!1){return new Cf(e,t,n)}static rmsprop(e,t=.9,n=0,a=null,r=!1){return new _f(e,t,n,a,r)}static adam(e=.001,t=.9,n=.999,a=null){return new Nf(e,t,n,a)}static adadelta(e=.001,t=.95,n=null){return new If(e,t,n)}static adamax(e=.002,t=.9,n=.999,a=null,r=0){return new Tf(e,t,n,a,r)}static adagrad(e,t=.1){return new Sf(e,t)}},Gs={sgd:Yr.sgd,momentum:Yr.momentum,adadelta:Yr.adadelta,adagrad:Yr.adagrad,rmsprop:Yr.rmsprop,adamax:Yr.adamax,adam:Yr.adam},Cz=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function Fv(){return new Promise(e=>Cz(()=>e()))}var _={};Re(_,{ERF_A1:()=>Lz,ERF_A2:()=>zz,ERF_A3:()=>Wz,ERF_A4:()=>Bz,ERF_A5:()=>Vz,ERF_P:()=>Oz,PARALLELIZE_THRESHOLD:()=>Dv,SELU_SCALE:()=>m2,SELU_SCALEALPHA:()=>h2,applyActivation:()=>wf,assertAndGetBroadcastShape:()=>ht,assertAxesAreInnerMostDims:()=>GP,assertParamsConsistent:()=>_z,assignToTypedArray:()=>Kz,axesAreInnerMostDims:()=>dv,calculateShapes:()=>rS,checkEinsumDimSizes:()=>eW,checkPadOnDimRoundingMode:()=>Cn,combineLocations:()=>BS,complexWithEvenIndex:()=>Hz,complexWithOddIndex:()=>jz,computeConv2DInfo:()=>Rc,computeConv3DInfo:()=>wS,computeDefaultPad:()=>Jx,computeDilation2DInfo:()=>hM,computeOptimalWindowSize:()=>Az,computeOutAndReduceShapes:()=>VS,computeOutShape:()=>Ez,computePool2DInfo:()=>vS,computePool3DInfo:()=>mM,convertConv2DDataFormat:()=>kS,decodeEinsumEquation:()=>Zz,eitherStridesOrDilationsAreOne:()=>mr,expandShapeToKeepDim:()=>pi,exponent:()=>Yz,exponents:()=>Xz,fromStringArrayToUint8:()=>wW,fromUint8ToStringArray:()=>vW,getAxesPermutation:()=>US,getBroadcastDims:()=>tS,getComplexWithIndex:()=>qz,getEinsumComputePath:()=>tW,getEinsumPermutation:()=>Qz,getFusedBiasGradient:()=>vf,getFusedDyActivation:()=>xf,getImageCenter:()=>$z,getInnerMostAxes:()=>HP,getPermuted:()=>Dz,getReductionAxes:()=>Bt,getReshaped:()=>Fz,getReshapedPermuted:()=>Rz,getSliceBeginCoords:()=>Mz,getSliceSize:()=>Pz,getSparseFillEmptyRowsIndicesDenseShapeMismatch:()=>sW,getSparseFillEmptyRowsNegativeIndexErrorMessage:()=>iW,getSparseFillEmptyRowsOutOfRangeIndexErrorMessage:()=>oW,getSparseReshapeEmptyTensorZeroOutputDimErrorMessage:()=>pW,getSparseReshapeInputOutputMismatchErrorMessage:()=>dW,getSparseReshapeInputOutputMultipleErrorMessage:()=>cW,getSparseReshapeMultipleNegativeOneOutputDimErrorMessage:()=>lW,getSparseReshapeNegativeOutputDimErrorMessage:()=>uW,getSparseSegmentReductionIndicesOutOfRangeErrorMessage:()=>gW,getSparseSegmentReductionNegativeSegmentIdsErrorMessage:()=>hW,getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage:()=>mW,getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage:()=>fW,getUndoAxesPermutation:()=>hv,isIdentityPermutation:()=>nW,log:()=>PF,mergeRealAndImagArrays:()=>Uz,prepareAndValidate:()=>aS,prepareSplitSize:()=>rW,segment_util:()=>f2,shouldFuse:()=>kf,slice_util:()=>qt,splitRealAndImagArrays:()=>Gz,tupleValuesAreOne:()=>ls,upcastType:()=>fa,validateInput:()=>zx,validateUpdateShape:()=>Lx,warn:()=>Zr});function _z(e,t){let n=e[0].length;e.forEach((r,s)=>{R(r.length===n,()=>`Error in concat${n}D: rank of tensors[${s}] must be the same as the rank of the rest (${n})`)}),R(t>=0&&t<n,()=>`Error in concat${n}D: axis must be between 0 and ${n-1}.`);let a=e[0];e.forEach((r,s)=>{for(let i=0;i<n;i++)R(i===t||r[i]===a[i],()=>`Error in concat${n}D: Shape of tensors[${s}] (${r}) does not match the shape of the rest (${a}) along the non-concatenated axis ${s}.`)})}function Ez(e,t){let n=e[0].slice();for(let a=1;a<e.length;a++)n[t]+=e[a][t];return n}var Dv=30;function Az(e){return e<=Dv?e:Oh(e,Math.floor(Math.sqrt(e)))}function $z(e,t,n){let a=n*(typeof e=="number"?e:e[0]),r=t*(typeof e=="number"?e:e[1]);return[a,r]}function Fz(e,t,n,a=!0){let r=[];if(a)r=r.concat(t.slice(0)),r.push(e[0]/n),r=r.concat(e.slice(1));else{r=r.concat(e[0]);let s=t.length;for(let i=0;i<s;++i)r=r.concat([e[i+1]/t[i],t[i]]);r=r.concat(e.slice(s+1))}return r}function Dz(e,t,n=!0){let a=[];if(n){a.push(t);for(let r=t+1;r<e;++r)r<=2*t?(a.push(r),a.push(r-(t+1))):a.push(r)}else{let r=[],s=[];for(let i=1;i<e;++i)i>=t*2+1||i%2===1?s.push(i):r.push(i);a.push(...r),a.push(0),a.push(...s)}return a}function Rz(e,t,n,a=!0){let r=[];a?r.push(e[0]/n):r.push(e[0]*n);for(let s=1;s<e.length;++s)s<=t.length?a?r.push(t[s-1]*e[s]):r.push(e[s]/t[s-1]):r.push(e[s]);return r}function Mz(e,t){let n=[0];for(let a=0;a<t;++a)n.push(e[a][0]);return n}function Pz(e,t,n){let a=e.slice(0,1);for(let r=0;r<n;++r)a.push(e[r+1]-t[r][0]-t[r][1]);return a}var h2=1.7580993408473768,m2=1.0507009873554805,Oz=.3275911,Lz=.254829592,zz=-.284496736,Wz=1.421413741,Bz=-1.453152027,Vz=1.061405429;function Uz(e,t){if(e.length!==t.length)throw new Error(`Cannot merge real and imag arrays of different lengths. real:${e.length}, imag: ${t.length}.`);let n=new Float32Array(e.length*2);for(let a=0;a<n.length;a+=2)n[a]=e[a/2],n[a+1]=t[a/2];return n}function Gz(e){let t=new Float32Array(e.length/2),n=new Float32Array(e.length/2);for(let a=0;a<e.length;a+=2)t[a/2]=e[a],n[a/2]=e[a+1];return{real:t,imag:n}}function Hz(e){let t=Math.ceil(e.length/4),n=new Float32Array(t),a=new Float32Array(t);for(let r=0;r<e.length;r+=4)n[Math.floor(r/4)]=e[r],a[Math.floor(r/4)]=e[r+1];return{real:n,imag:a}}function jz(e){let t=Math.floor(e.length/4),n=new Float32Array(t),a=new Float32Array(t);for(let r=2;r<e.length;r+=4)n[Math.floor(r/4)]=e[r],a[Math.floor(r/4)]=e[r+1];return{real:n,imag:a}}function qz(e,t){let n=e[t*2],a=e[t*2+1];return{real:n,imag:a}}function Kz(e,t,n,a){e[a*2]=t,e[a*2+1]=n}function Xz(e,t){let n=new Float32Array(e/2),a=new Float32Array(e/2);for(let r=0;r<Math.ceil(e/2);r++){let s=(t?2:-2)*Math.PI*(r/e);n[r]=Math.cos(s),a[r]=Math.sin(s)}return{real:n,imag:a}}function Yz(e,t,n){let a=(n?2:-2)*Math.PI*(e/t),r=Math.cos(a),s=Math.sin(a);return{real:r,imag:s}}var hb="->",Jz=/->/g,J1=",",Z1="...";function Zz(e,t){e=e.replace(/\s/g,"");let n=(e.length-e.replace(Jz,"").length)/hb.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 ("${hb}").`);let[a,r]=e.split(hb);R(a.indexOf(Z1)===-1,()=>`The ellipsis notation ("${Z1}") is not supported yet.`);let s=a.split(J1),i=s.length;if(t!==i)throw new Error(`Expected ${i} input tensors, received ${t}`);if(i>2)throw new Error("Support for more than 2 input tensors is not implemented yet.");let o=[];for(let c=0;c<r.length;++c){let h=r[c];if(!s.some(m=>m.indexOf(h)!==-1))throw new Error(`Output subscripts contain the label ${h} not present in the input subscripts.`);o.indexOf(h)===-1&&o.push(h)}for(let c=0;c<a.length;++c){let h=a[c];o.indexOf(h)===-1&&h!==J1&&o.push(h)}let l=new Array(s.length);for(let c=0;c<i;++c){if(new Set(s[c].split("")).size!==s[c].length)throw new Error(`Found duplicate axes in input component ${s[c]}. Support for duplicate axes in input is not implemented yet.`);l[c]=[];for(let h=0;h<s[c].length;++h)l[c].push(o.indexOf(s[c][h]))}let u=o.length,p=r.length,d=[];for(let c=p;c<u;++c)d.push(c);return{allDims:o,summedDims:d,idDims:l}}function Qz(e,t){let n=new Array(e);n.fill(-1);for(let r=0;r<t.length;++r)n[t[r]]=r;let a=[];for(let r=0;r<e;++r)n[r]===-1&&a.push(r);return n=n.filter(r=>r!==-1),{permutationIndices:n,expandDims:a}}function eW(e,t,n){let a=new Array(e);for(let r=0;r<n.length;++r){let s=n[r].shape;for(let i=0;i<t[r].length;++i)a[t[r][i]]===void 0?a[t[r][i]]=s[i]:R(a[t[r][i]]===s[i],()=>`Expected dimension ${a[t[r][i]]} at axis ${i} of input shaped ${JSON.stringify(s)}, but got dimension ${s[i]}`)}}function tW(e,t){let n=e,a=[],r=0;e.length===0&&n.push(-1),r=e.length+1;for(let i=0;i<r;++i)a.push([]);let s=[];for(let i=0;i<n.length;++i){let o=n[i],l=aW(t,o);for(let u of l)s.indexOf(u)===-1&&(a[i].push(u),s.push(u))}return{path:n,steps:a}}function nW(e){return e.every((t,n)=>t===n)}function aW(e,t){let n=[];for(let a=0;a<e.length;++a)(e[a].length===0||e[a].indexOf(t)!==-1||t===-1)&&n.push(a);return n}function rW(e,t,n=0){let a=[];if(typeof t=="number")R(e.shape[n]%t===0,()=>"Number of splits must evenly divide the axis."),a=new Array(t).fill(e.shape[n]/t);else{let r=t.reduce((i,o)=>(o===-1&&(i+=1),i),0);R(r<=1,()=>"There should be only one negative value in split array.");let s=t.indexOf(-1);if(s!==-1){let i=t.reduce((o,l)=>l>0?o+l:o);t[s]=e.shape[n]-i}R(e.shape[n]===t.reduce((i,o)=>i+o),()=>"The sum of sizes must match the size of the axis dimension."),a=t}return a}function sW(e){return`Received SparseTensor with denseShape[0] = 0 but
|
|
indices.shape[0] = ${e}`}function iW(e,t){return`indices(${e}, 0) is invalid: ${t} < 0`}function oW(e,t,n){return`indices(${e}, 0) is invalid: ${t} >= ${n}`}function lW(e,t){return`only one output dimension may be -1, not both ${e} and ${t}`}function uW(e,t){return`size ${e} must be non-negative, not ${t}`}function pW(){return"reshape cannot infer the missing input size for an empty tensor unless all specified input sizes are non-zero"}function cW(e,t){let n=wt(e),a=wt(t);return`Input to reshape is a SparseTensor with ${n}
|
|
dense values, but the requested shape requires a multiple of ${a}. inputShape=${e} outputShape= ${t}`}function dW(e,t){let n=wt(e),a=wt(t);return`Input to reshape is a tensor with ${n} dense values, but the requested shape has ${a}. inputShape=${e} outputShape=${t}`}function hW(){return"segment ids must be >= 0"}function mW(){return"segment ids are not increasing"}function fW(e,t){return`Segment id ${e} out of range [0, ${t}), possibly because segmentIds input is not sorted.`}function gW(e,t,n){return`Bad: indices[${e}] == ${t} out of range [0, ${n})`}var f2={};Re(f2,{collectGatherOpShapeInfo:()=>xW,computeOutShape:()=>bW,segOpComputeOptimalWindowSize:()=>yW});function yW(e,t){let n=!1,a;for(e<=Dv?(a=e,n=!0):a=Oh(e,Math.floor(Math.sqrt(e)));!n;)a>t||a===e?n=!0:a=Oh(e,a+1);return a}function bW(e,t,n){let a=[],r=e.length;for(let s=0;s<r;s++)s!==t?a.push(e[s]):a.push(n);return a}function xW(e,t,n,a){let r=t.shape.length,s=e.shape.length;if(a!==0&&(a<-r||a>r))throw new Error(`Expect batchDims in the range of [-${r}, ${r}], but got ${a}`);if(a<0&&(a+=r),a>s)throw new Error(`batchDims (${a}) must be less than rank(x) (
|
|
${s}).`);if(n<a)throw new Error(`batchDims (${a}) must be less than or equal to axis (${n}).`);for(let d=0;d<a;++d)if(e.shape[d]!==t.shape[d])throw new Error(`x.shape[${d}]: ${e.shape[d]} should be equal to indices.shape[${d}]: ${t.shape[d]}.`);let i=e.shape[n],o=[],l=1,u=1,p=1;for(let d=0;d<a;++d)o.push(e.shape[d]),l*=e.shape[d];for(let d=a;d<n;d++)o.push(e.shape[d]),u*=e.shape[d];for(let d=a;d<r;d++)o.push(t.shape[d]);for(let d=n+1;d<s;d++)o.push(e.shape[d]),p*=e.shape[d];return{batchSize:l,sliceSize:p,outerSize:u,dimSize:i,outputShape:o}}function vW(e){try{return e.map(t=>Uh(t))}catch(t){throw new Error(`Failed to decode encoded string bytes into utf-8, error: ${t}`)}}function wW(e){return e.map(t=>$c(t))}var gr={};Re(gr,{nonMaxSuppressionV3Impl:()=>o2,nonMaxSuppressionV4Impl:()=>l2,nonMaxSuppressionV5Impl:()=>u2,whereImpl:()=>JS});var g2={kernelName:Dl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,Vu(oe(n,"float32"),-1))}}},kW={kernelName:Rl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=ut(oe(n,"float32")),r=un(ce(ke(1),a));return St(fe(e,r))}}}},IW={kernelName:Ml,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=un(ce(ut(oe(n,"float32")),1));return fe(e,a)}}}},SW={kernelName:ys,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=e,i=Bt(n.shape,r);return i.length>0&&(s=be(s,i)),V(s,n.shape)},b:()=>{let s=e,i=Bt(a.shape,r);return i.length>0&&(s=be(s,i)),V(s,a.shape)}}}},NW={kernelName:vi,saveAllInputs:!0,gradFunc:(e,t)=>{let n={};return t.forEach((a,r)=>{n[r]=()=>e.clone()}),n}},TW={kernelName:wi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ke(n)}}},CW={kernelName:dc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>Ke(n)}}},_W={kernelName:Ll,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,un(ce(ke(1),ut(oe(n,"float32")))))}}},EW={kernelName:zl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=un(J(ke(1),ut(oe(n,"float32"))));return fe(e,a)}}}},AW={kernelName:Vl,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=J(ut(n),ut(a)),i=W(e,fe(a,s)),o=Bt(n.shape,r);return o.length>0&&(i=be(i,o)),V(i,n.shape)},b:()=>{let s=J(ut(n),ut(a)),i=St(W(e,fe(n,s))),o=Bt(a.shape,r);return o.length>0&&(i=be(i,o)),V(i,a.shape)}}}},$W={kernelName:Wl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,J(ut(oe(n,"float32")),1))}}},FW={kernelName:Bl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ce(ke(1),ut(oe(n,"float32"))))}}};function DW(e,t,n,a,r,s){let i=A(e,"dy","avgPool3dGrad"),o=A(t,"input","avgPool3dGrad"),l=i,u=o,p=!1;o.rank===4&&(p=!0,l=V(i,[1,i.shape[0],i.shape[1],i.shape[2],i.shape[3]]),u=V(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]])),R(l.rank===5,()=>`Error in avgPool3dGrad: dy must be rank 5 but got rank ${l.rank}.`),R(u.rank===5,()=>`Error in avgPool3dGrad: input must be rank 5 but got rank ${u.rank}.`),Cn("avgPool3dGrad",r,s);let d={dy:l,input:u},c={filterSize:n,strides:a,pad:r,dimRoundingMode:s},h=L.runKernel(mm,d,c);return p?V(h,[h.shape[1],h.shape[2],h.shape[3],h.shape[4]]):h}var RW=z({avgPool3dGrad_:DW}),MW={kernelName:hc,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i,dimRoundingMode:o}=n;return{x:()=>RW(e,a,r,s,i,o)}}};function PW(e,t,n,a,r){let s=A(e,"dy","avgPoolGrad"),i=A(t,"input","avgPoolGrad");R(i.rank===s.rank,()=>`Rank of input (${i.rank}) does not match rank of dy (${s.rank})`);let o=i,l=s,u=!1;i.rank===3&&(u=!0,o=V(i,[1,i.shape[0],i.shape[1],i.shape[2]]),l=V(s,[1,s.shape[0],s.shape[1],s.shape[2]])),R(l.rank===4,()=>`Error in avgPoolGrad: dy must be rank 4 but got rank ${l.rank}.`),R(o.rank===4,()=>`Error in avgPoolGrad: input must be rank 4 but got rank ${o.rank}.`);let p={dy:l,input:o},d={filterSize:n,strides:a,pad:r},c=L.runKernel(hm,p,d);return u?V(c,[c.shape[1],c.shape[2],c.shape[3]]):c}var OW=z({avgPoolGrad_:PW}),LW={kernelName:ki,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{filterSize:r,strides:s,pad:i}=n;return{x:()=>OW(e,a,r,s,i)}}},zW={kernelName:Ii,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{let[a,r]=t,{transposeA:s,transposeB:i}=n;return!s&&!i?{a:()=>Fe(e,r,!1,!0),b:()=>Fe(a,e,!0,!1)}:!s&&i?{a:()=>Fe(e,r,!1,!1),b:()=>Fe(e,a,!0,!1)}:s&&!i?{a:()=>Fe(r,e,!1,!0),b:()=>Fe(a,e,!1,!1)}:{a:()=>Fe(r,e,!0,!0),b:()=>Fe(e,a,!0,!0)}}},WW={kernelName:Ul,gradFunc:(e,t,n)=>{let{blockShape:a,crops:r}=n;return{x:()=>Wc(e,a,r)}}},BW={kernelName:EI,gradFunc:(e,t,n)=>{let a=n,r=a.inputShape,s=a.shape,i=Array.from(s);for(let l=r.length-1;l>=0;l--)if(r[l]===s[l])i[l]=1;else if(r[l]!==1)throw new Error(`broadcastTo(): [${r}] cannot be broadcast to [${s}].`);let o=[];for(let l=0;l<i.length;l++)i[l]>1&&o.push(l);return{x:()=>be(e,o,!0)}}},VW={kernelName:Si,gradFunc:e=>({x:()=>e.clone()})},UW={kernelName:Ni,gradFunc:e=>({x:()=>Ke(e)})},GW={kernelName:bs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{clipValueMin:r,clipValueMax:s}=n;return{x:()=>fn(_a(Ss(a,r),Ns(a,s)),e,Ke(e))}}},HW={kernelName:mc,inputsToSave:["x"],gradFunc:g2.gradFunc},jW={kernelName:Gl,saveAllInputs:!0,gradFunc:(e,t,n)=>{let a=t.map(o=>o.shape),{axis:r}=n,s=Ea(r,t[0].shape)[0],i=a.map(o=>o[s]);return zn(e,i,s).map(o=>()=>o)}},qW={kernelName:Ti,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{dilations:s,strides:i,pad:o,dataFormat:l}=n;return R(ls(s),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${s}'`),{x:()=>tv(a.shape,e,r,i,o,l),filter:()=>Av(a,e,r.shape,i,o,l)}}},KW={kernelName:Ci,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,{strides:s,pad:i,dataFormat:o,dimRoundingMode:l}=n;return{dy:()=>Rt(e,r,s,i,o,1,l),filter:()=>Av(e,a,r.shape,s,i,o,l)}}};function XW(e,t,n,a,r){let s=e;e.rank===4&&(s=V(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let i=t;i.rank===4&&(i=V(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),R(s.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${s.shape}.`),R(i.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${i.shape}.`),R(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),R(s.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${s.shape[4]}) must match input depth in filter (${n[3]}.`),R(i.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${i.shape[4]}) must match output depth for filter (${n[4]}).`);let o={x:s,dy:i},l={strides:a,pad:r,filterShape:n};return L.runKernel(xm,o,l)}var YW=z({conv3DBackpropFilter_:XW}),JW={kernelName:fc,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s}=n;R(ls(a),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${a}'`);let[i,o]=t;return{x:()=>$S(i.shape,e,o,r,s),filter:()=>YW(i,e,o.shape,r,s)}}},ZW={kernelName:_i,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(St(df(oe(n,"float32"))),e)}}},QW={kernelName:Ei,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(hf(oe(n,"float32")),e)}}},eB={kernelName:Ai,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r,exclusive:s,reverse:i}=n;return{x:()=>{let o=US([r],a.rank),l=Qm(e,r,s,!i);return o!=null&&(l=Pe(l,o)),l}}}},tB={kernelName:$i,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let{dilations:a,strides:r,pad:s,dimRoundingMode:i}=n,o=a==null?[1,1]:a;R(ls(o),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${o}'`);let[l,u]=t;return R(l.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${l.rank}.`),R(u.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${u.rank}.`),R(l.shape[3]===u.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${l.shape[3]}) must match the inChannels dimension in filter ${u.shape[2]}.`),R(mr(r,o),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${r} and dilations '${o}'.`),Cn("depthwiseConv2d",s,i),{x:()=>r2(l.shape,e,u,r,s,o,i),filter:()=>a2(l,e,u.shape,r,s,o,i)}}},nB={kernelName:gc,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{let[a,r]=t,s={x:a,filter:r,dy:e},i={x:a,filter:r,dy:e};return{x:()=>L.runKernel(Lh,s,n),filter:()=>L.runKernel(zh,i,n)}}},aB={kernelName:Di,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t,a={dy:e,y:n};return{x:()=>L.runKernel(Tm,a)}}},rB={kernelName:Kl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=W(gn(St(ut(n))),2/Math.sqrt(Math.PI));return{x:()=>W(e,a)}}},sB={kernelName:Ri,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,n)}}},iB={kernelName:Yl,inputsToSave:["input"],gradFunc:(e,t)=>{let[n]=t;return{input:()=>V(e,n.shape)}}},oB={kernelName:Jl,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,gn(n))}}},lB={kernelName:Mi,gradFunc:e=>({x:()=>Ke(e)})},uB={kernelName:Pi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=fe(e,oe(a,"float32")),i=Bt(n.shape,r);return i.length>0?V(be(s,i),n.shape):s},b:()=>{let s=W(e,oe(n,"float32")),i=Bt(a.shape,r);i.length>0&&(s=V(be(s,i),a.shape));let o=ut(a);return St(fe(s,oe(o,"float32")))}}}},pB={kernelName:Oi,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{let{varianceEpsilon:a}=n,[r,s,i,o]=t,l=o==null?ke(1):o,u=Bt(s.shape,r.shape),p=[];if(s.rank===1){for(let f=0;f<r.shape.length-1;++f)p.push(r.shape[f]);p.push(1)}let d=ce(r,s),c=W(e,l),h=pf(J(i,ke(a))),m=W(W(W(h,h),h),ke(-.5));return{x:()=>s.rank===1?V(W(W(e,On(V(h,[1,1,1,s.shape[0]]),p)),l),r.shape):V(W(W(e,h),l),r.shape),mean:()=>{let f=W(W(h,ke(-1)),c);return s.rank===1&&(f=be(f,u)),V(f,s.shape)},variance:()=>{let f=W(W(m,d),c);return s.rank===1&&(f=be(f,u)),V(f,s.shape)},scale:()=>{let f=W(d,h),g=W(e,f);return s.rank===1&&(g=be(g,u)),V(g,s.shape)},offset:()=>{let f=e;return s.rank===1&&(f=be(f,u)),V(f,s.shape)}}}},cB={kernelName:Ql,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{let[a,r]=t,{axis:s}=n,i=Ea(s,a.shape)[0];return{x:()=>{let o=a.shape,l=r.size,u=o.slice(0,i),p=u.length,d=o.slice(s,o.length).slice(1),c=d.length,h=Q1(0,p),m=Q1(p+1,p+1+c),f=ek([u,[l],d]),g=V(e,f),y=V(r,[l]),b=ek([[p],h,m]),x=Pe(g,b),v=Tv(x,y,a.shape[i]),w=hv(b);return v=Pe(v,w),v},indices:()=>r}}};function Q1(e,t){let n=[];for(let a=e;a<t;++a)n.push(a);return n}function ek(e){let t=[];for(let n=0;n<e.length;++n)for(let a=0;a<e[n].length;++a)t.push(e[n][a]);return t}var dB={kernelName:Li,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>Ke(n),b:()=>Ke(a)}}},hB={kernelName:zi,gradFunc:e=>({x:()=>oe(e,"float32")})},mB={kernelName:nu,gradFunc:e=>({x:()=>Ke(e)})},fB={kernelName:au,gradFunc:e=>({x:()=>Ke(e)})},gB={kernelName:ru,gradFunc:e=>({x:()=>Ke(e)})},yB={kernelName:Wi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{alpha:r}=n,s=Gn(a,0);return{x:()=>fn(s,e,W(e,r))}}},bB={kernelName:ou,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,J(n,1))}}},xB={kernelName:Bi,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,oe(n,"float32"))}}},vB={kernelName:AI,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n;return{logits:()=>{let s=gn(a);return ce(e,W(be(e,r,!0),s))}}}};function wB(e,t,n,a=5,r=1,s=1,i=.5){let o={x:e,y:t,dy:n},l={depthRadius:a,bias:r,alpha:s,beta:i};return L.runKernel($m,o,l)}var kB=z({localResponseNormalizationBackprop_:wB}),IB={kernelName:vc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{depthRadius:s,bias:i,alpha:o,beta:l}=n;return{x:()=>kB(a,r,e,s,i,o,l)}}};function y2(e,t,n,a){return t.rank<n.rank&&(t=V(t,pi(t.shape,a))),e.rank<n.rank&&(e=V(e,pi(e.shape,a))),{x:()=>W(e,oe(ea(n,t),e.dtype))}}var tk={kernelName:Vi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{reductionIndices:r}=a,s=t[0],i=t[1],o=Ea(r,s.shape),l=y2(e,i,s,o);return{x:()=>l.x()}}},SB={kernelName:Ui,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>W(e,oe(Ss(n,a),"float32")),b:()=>W(e,oe(tf(n,a),"float32"))}}};function NB(e,t,n,a,r,s,i){let o=A(e,"dy","maxPool3dGrad"),l=A(t,"input","maxPool3dGrad"),u=A(n,"output","maxPool3dGrad"),p=o,d=l,c=u,h=!1;l.rank===4&&(h=!0,p=V(o,[1,o.shape[0],o.shape[1],o.shape[2],o.shape[3]]),d=V(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),c=V(u,[1,u.shape[0],u.shape[1],u.shape[2],u.shape[3]])),R(p.rank===5,()=>`Error in maxPool3dGrad: dy must be rank 5 but got rank ${p.rank}.`),R(d.rank===5,()=>`Error in maxPool3dGrad: input must be rank 5 but got rank ${d.rank}.`),R(c.rank===5,()=>`Error in maxPool3dGrad: output must be rank 5 but got rank ${c.rank}.`),Cn("maxPool3dGrad",s,i);let m={dy:p,input:d,output:c},f={filterSize:a,strides:r,pad:s,dimRoundingMode:i},g=L.runKernel(Dm,m,f);return h?V(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}var TB=z({maxPool3dGrad_:NB}),CB={kernelName:wc,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=n;return{x:()=>TB(e,a,r,s,i,o,l)}}};function _B(e,t,n,a,r,s,i){let o=A(e,"dy","maxPoolGrad"),l=A(t,"input","maxPoolGrad"),u=A(n,"output","maxPoolGrad");R(l.rank===o.rank,()=>`Rank of input (${l.rank}) does not match rank of dy (${o.rank})`),R(o.rank===4,()=>`Error in maxPoolGrad: dy must be rank 4 but got rank ${o.rank}.`),R(l.rank===4,()=>`Error in maxPoolGrad: input must be rank 4 but got rank ${l.rank}.`),Cn("maxPoolGrad",s,i);let p={dy:o,input:l,output:u},d={filterSize:a,strides:r,pad:s,dimRoundingMode:i};return L.runKernel(Fm,p,d)}var EB=z({maxPoolGrad_:_B}),AB={kernelName:Gi,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a,r]=t,{filterSize:s,strides:i,pad:o}=n;return{x:()=>EB(e,a,r,s,i,o)}}},$B={kernelName:Hi,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{axis:r}=n,s=Ea(r,a.shape),i=VS(a.shape,s)[1],o=wt(i);return{x:()=>{let l=a.shape.slice();s.forEach(p=>{l[p]=1});let u=V(e,l);return fe(W(u,Zn(a.shape,"float32")),o)}}}},FB={kernelName:ji,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{let a=n,{axis:r}=a,[s,i]=t,o=Ea(r,s.shape),l=y2(e,i,s,o);return{x:()=>l.x()}}},DB={kernelName:qi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t;return{a:()=>W(e,oe(Ns(n,a),"float32")),b:()=>W(e,oe(Gn(n,a),"float32"))}}},RB={kernelName:Ki,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>Ge(e,s,a.shape)}}},MB={kernelName:uu,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=Bt(n.shape,r);return s.length>0?V(be(e,s),n.shape):e},b:()=>{let s=W(e,St(Lu(fe(n,a)))),i=Bt(a.shape,r);return i.length>0?V(be(s,i),a.shape):s}}}},PB={kernelName:Xi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=W(e,oe(a,"float32")),i=Bt(n.shape,r);return i.length>0?V(be(s,i),n.shape):s},b:()=>{let s=W(e,oe(n,"float32")),i=Bt(a.shape,r);return i.length>0?V(be(s,i),a.shape):s}}}},OB={kernelName:pu,gradFunc:e=>({x:()=>St(e)})},LB={kernelName:Yi,inputsToSave:["indices"],gradFunc:(e,t)=>{let n=t[0];return{indices:()=>kt(n.shape,"float32")}}},zB={kernelName:fu,gradFunc:e=>({x:()=>Ke(e)})},WB={kernelName:gu,saveAllInputs:!0,gradFunc:(e,t,n)=>{let{axis:a}=n;return mt(e,a).map(r=>()=>r)}},nk={kernelName:Ji,inputsToSave:["x"],gradFunc:(e,t,n)=>{let a=t[0],{paddings:r}=n,s=r.map(i=>i[0]);return{x:()=>Ge(e,s,a.shape)}}},BB={kernelName:Zi,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{let[n,a,r]=t,s=n,i=a,o=ht(s.shape,i.shape);return{a:()=>{let l=oe(i,"float32"),u=W(e,W(l,$r(s,ce(l,ke(1))))),p=Bt(s.shape,o);return p.length>0&&(u=be(u,p)),V(u,s.shape)},b:()=>{let l=Gn(s,0),u=fn(l,ta(s),Ke(s)),p=W(e,W(r,u)),d=Bt(i.shape,o);return d.length>0&&(p=be(p,d)),V(p,i.shape)}}}},VB={kernelName:Qi,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{let[n,a]=t,r=Gn(n,0);return{x:()=>fn(r,e,W(e,a)),alpha:()=>{let s=fn(r,Ke(e),W(e,n)),i=Bt(a.shape,e.shape);return i.length>0&&(s=be(s,i)),V(s,a.shape)}}}},UB={kernelName:Fi,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=fe(e,oe(a,"float32")),i=Bt(n.shape,r);return i.length>0?V(be(s,i),n.shape):s},b:()=>{let s=W(e,oe(n,"float32")),i=Bt(a.shape,r);i.length>0&&(s=V(be(s,i),a.shape));let o=ut(a);return St(fe(s,oe(o,"float32")))}}}},GB={kernelName:bu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,St(ut(n)))}}},HB={kernelName:no,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t,a=W(Ns(n,6),Vu(n));return{x:()=>W(e,oe(a,"float32"))}}},jB={kernelName:eo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,oe(Vu(n),"float32"))}}},qB={kernelName:xu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>V(e,n.shape)}}},KB={kernelName:to,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>L.runKernel(Lm,r,n)}}},XB={kernelName:Ic,inputsToSave:["images"],gradFunc:(e,t,n)=>{let[a]=t,r={dy:e,images:a};return{images:()=>L.runKernel(Om,r,n)}}},YB={kernelName:ao,gradFunc:(e,t,n)=>{let{dims:a}=n,r=Ea(a,e.shape);return{x:()=>aa(e,r)}}},JB={kernelName:ro,gradFunc:e=>({x:()=>Ke(e)})},ZB={kernelName:so,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>St(fe(e,W($r(n,1.5),2)))}}},QB={kernelName:wu,inputsToSave:["condition"],gradFunc:(e,t)=>{let[n]=t;return{condition:()=>oe(Ke(n),"float32"),t:()=>W(e,oe(n,e.dtype)),e:()=>W(e,oe(zc(n),e.dtype))}}},e4={kernelName:ku,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>{let a=Gn(n,ke(0)),r=ke(h2),s=ke(m2),i=W(e,s),o=W(W(e,r),gn(oe(n,"float32")));return fn(a,i,o)}}}},t4={kernelName:oo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(n,ce(ke(1),n)))}}},n4={kernelName:Nu,gradFunc:e=>({x:()=>Ke(e)})},a4={kernelName:io,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(Pc(oe(n,"float32")),e)}}},r4={kernelName:Su,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(Zm(oe(n,"float32")),e)}}},s4={kernelName:Iu,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{begin:r,size:s}=n,i=a.shape,[o,l]=hS(a,r,s),u=[];for(let p=0;p<e.rank;p++)u.push([o[p],i[p]-o[p]-l[p]]);return{x:()=>ya(e,u)}}},i4={kernelName:po,outputsToSave:[!0],gradFunc:(e,t,n)=>{let[a]=t,{dim:r}=n,s=!0,i=W(e,a);return{logits:()=>ce(i,W(be(i,[r],s),a))}}},o4={kernelName:Tu,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,ma(n))}}},ak={kernelName:Cu,gradFunc:(e,t,n)=>{let{blockShape:a,paddings:r}=n;return{x:()=>Mc(e,a,r)}}},rk={kernelName:_u,gradFunc:(e,t,n)=>{let{axis:a}=n;return{x:()=>Qe(e,a)}}},l4={kernelName:lo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,W(un(oe(n,"float32")),2))}}},u4={kernelName:Cc,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(e,W(oe(n,"float32"),2))}}},p4={kernelName:co,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ke(2);return{a:()=>W(e,W(r,ce(n,a))),b:()=>W(e,W(r,ce(a,n)))}}},c4={kernelName:vs,gradFunc:e=>({x:()=>Ke(e)})},d4={kernelName:ho,inputsToSave:["a","b"],gradFunc:(e,t)=>{let[n,a]=t,r=ht(n.shape,a.shape);return{a:()=>{let s=e,i=Bt(n.shape,r);return i.length>0&&(s=be(s,i)),V(s,n.shape)},b:()=>{let s=e,i=Bt(a.shape,r);return i.length>0&&(s=be(s,i)),V(St(s),a.shape)}}}},h4={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,r=a.shape.slice(),{axis:s}=n;Ea(s,a.shape).forEach(l=>{r[l]=1});let i=V(e,r),o=W(i,Zn(a.shape,"float32"));return{x:()=>o}}},m4={kernelName:mo,inputsToSave:["x"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>fe(e,ut(Pc(n)))}}},f4={kernelName:fo,outputsToSave:[!0],gradFunc:(e,t)=>{let[n]=t;return{x:()=>W(ce(ke(1),ut(n)),e)}}},g4={kernelName:xs,inputsToSave:["x"],gradFunc:(e,t,n)=>{let[a]=t,{reps:r}=n;return{x:()=>{let s=Ke(a);if(a.rank===1)for(let i=0;i<r[0];++i)s=J(s,Ge(e,[i*a.shape[0]],[a.shape[0]]));else if(a.rank===2)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)s=J(s,Ge(e,[i*a.shape[0],o*a.shape[1]],[a.shape[0],a.shape[1]]));else if(a.rank===3)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)for(let l=0;l<r[2];++l)s=J(s,Ge(e,[i*a.shape[0],o*a.shape[1],l*a.shape[2]],[a.shape[0],a.shape[1],a.shape[2]]));else if(a.rank===4)for(let i=0;i<r[0];++i)for(let o=0;o<r[1];++o)for(let l=0;l<r[2];++l)for(let u=0;u<r[3];++u)s=J(s,Ge(e,[i*a.shape[0],o*a.shape[1],l*a.shape[2],u*a.shape[3]],[a.shape[0],a.shape[1],a.shape[2],a.shape[3]]));else throw new Error(`Gradient for tile operation is not implemented for rank-${a.rank} tensors yet.`);return s}}}},y4={kernelName:go,gradFunc:(e,t,n)=>{let a=n,{perm:r}=a,s=hv(r);return{x:()=>Pe(e,s)}}},b4={kernelName:Du,gradFunc:(e,t,n)=>{let a=n,{axis:r}=a;return{value:()=>Mt(e,r)}}},x4={kernelName:_c,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{let[n]=t;return{x:()=>v4(e,n)}}};function v4(e,t){let n=fr(t,Ke(t)),a=ui(e,n),r=Ss(t,ke(0,"int32")),s=a.rank-r.rank;for(let o=0;o<s;++o)r=mn(r,o+1);r=_a(r,Zn(a.shape,"bool"));let i=Ke(a);return fn(r,a,i)}var w4={kernelName:Ru,gradFunc:e=>({x:()=>Ke(e)})},k4=[g2,kW,IW,SW,NW,TW,CW,_W,EW,AW,$W,FW,MW,LW,zW,WW,BW,VW,UW,GW,HW,jW,KW,qW,JW,ZW,QW,eB,tB,nB,UB,aB,rB,sB,iB,oB,uB,lB,pB,cB,dB,hB,mB,fB,gB,yB,bB,xB,vB,IB,tk,tk,SB,CB,AB,$B,FB,DB,RB,MB,PB,OB,LB,zB,WB,nk,nk,BB,VB,GB,HB,jB,qB,KB,XB,YB,JB,ZB,QB,e4,t4,n4,a4,r4,s4,i4,o4,ak,ak,rk,rk,l4,p4,u4,c4,d4,h4,m4,f4,g4,y4,b4,x4,w4];for(let e of k4)$I(e);ne().prototype.abs=function(){return this.throwIfDisposed(),zt(this)};ne().prototype.acos=function(){return this.throwIfDisposed(),Ux(this)};ne().prototype.acosh=function(){return this.throwIfDisposed(),Gx(this)};ne().prototype.add=function(e){return this.throwIfDisposed(),J(this,e)};ne().prototype.all=function(e,t){return this.throwIfDisposed(),Xm(this,e,t)};ne().prototype.any=function(e,t){return this.throwIfDisposed(),ec(this,e,t)};ne().prototype.argMax=function(e){return this.throwIfDisposed(),oi(this,e)};ne().prototype.argMin=function(e){return this.throwIfDisposed(),Hx(this,e)};ne().prototype.asScalar=function(){return this.throwIfDisposed(),R(this.size===1,()=>"The array must have only 1 element."),V(this,[])};ne().prototype.asType=function(e){return this.throwIfDisposed(),oe(this,e)};ne().prototype.as1D=function(){return this.throwIfDisposed(),V(this,[this.size])};ne().prototype.as2D=function(e,t){return this.throwIfDisposed(),V(this,[e,t])};ne().prototype.as3D=function(e,t,n){return this.throwIfDisposed(),V(this,[e,t,n])};ne().prototype.as4D=function(e,t,n,a){return this.throwIfDisposed(),V(this,[e,t,n,a])};ne().prototype.as5D=function(e,t,n,a,r){return this.throwIfDisposed(),V(this,[e,t,n,a,r])};ne().prototype.asin=function(){return this.throwIfDisposed(),jx(this)};ne().prototype.asinh=function(){return this.throwIfDisposed(),qx(this)};ne().prototype.atan=function(){return this.throwIfDisposed(),Kx(this)};ne().prototype.atan2=function(e){return this.throwIfDisposed(),Xx(this,e)};ne().prototype.atanh=function(){return this.throwIfDisposed(),Yx(this)};ne().prototype.avgPool=function(e,t,n,a){return this.throwIfDisposed(),ga(this,e,t,n,a)};ne().prototype.batchToSpaceND=function(e,t){return this.throwIfDisposed(),Mc(this,e,t)};ne().prototype.batchNorm=function(e,t,n,a,r){return this.throwIfDisposed(),Ar(this,e,t,n,a,r)};ne().prototype.broadcastTo=function(e){return this.throwIfDisposed(),yl(this,e)};ne().prototype.cast=function(e){return this.throwIfDisposed(),oe(this,e)};ne().prototype.ceil=function(){return this.throwIfDisposed(),ev(this)};ne().prototype.clipByValue=function(e,t){return this.throwIfDisposed(),nn(this,e,t)};ne().prototype.concat=function(e,t){return this.throwIfDisposed(),e instanceof Ae&&(e=[e]),Qe([this,...e],t)};ne().prototype.conv1d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Ym(this,e,t,n,a,r,s)};ne().prototype.conv2dTranspose=function(e,t,n,a,r){return this.throwIfDisposed(),Jm(this,e,t,n,a,r)};ne().prototype.conv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Rt(this,e,t,n,a,r,s)};ne().prototype.cos=function(){return this.throwIfDisposed(),Pc(this)};ne().prototype.cosh=function(){return this.throwIfDisposed(),Zm(this)};ne().prototype.cumprod=function(e,t,n){return this.throwIfDisposed(),av(this,e,t,n)};ne().prototype.cumsum=function(e,t,n){return this.throwIfDisposed(),Qm(this,e,t,n)};ne().prototype.depthToSpace=function(e,t){return this.throwIfDisposed(),rv(this,e,t)};ne().prototype.depthwiseConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),Is(this,e,t,n,a,r,s)};ne().prototype.dilation2d=function(e,t,n,a,r){return this.throwIfDisposed(),sv(this,e,t,n,a,r)};ne().prototype.divNoNan=function(e){return this.throwIfDisposed(),iv(this,e)};ne().prototype.div=function(e){return this.throwIfDisposed(),fe(this,e)};ne().prototype.dot=function(e){return this.throwIfDisposed(),RS(this,e)};ne().prototype.elu=function(){return this.throwIfDisposed(),Ou(this)};ne().prototype.equal=function(e){return this.throwIfDisposed(),ea(this,e)};ne().prototype.erf=function(){return this.throwIfDisposed(),ov(this)};ne().prototype.exp=function(){return this.throwIfDisposed(),gn(this)};ne().prototype.expandDims=function(e){return this.throwIfDisposed(),mn(this,e)};ne().prototype.expm1=function(){return this.throwIfDisposed(),lv(this)};ne().prototype.fft=function(){return this.throwIfDisposed(),Vc(this)};ne().prototype.flatten=function(){return this.throwIfDisposed(),V(this,[this.size])};ne().prototype.floor=function(){return this.throwIfDisposed(),Lu(this)};ne().prototype.floorDiv=function(e){return this.throwIfDisposed(),Km(this,e)};ne().prototype.gather=function(e,t){return this.throwIfDisposed(),ui(this,e,t)};ne().prototype.greaterEqual=function(e){return this.throwIfDisposed(),Ss(this,e)};ne().prototype.greater=function(e){return this.throwIfDisposed(),Gn(this,e)};ne().prototype.ifft=function(){return this.throwIfDisposed(),Sl(this)};ne().prototype.irfft=function(){return this.throwIfDisposed(),ff(this)};ne().prototype.isFinite=function(){return this.throwIfDisposed(),PS(this)};ne().prototype.isInf=function(){return this.throwIfDisposed(),OS(this)};ne().prototype.isNaN=function(){return this.throwIfDisposed(),pv(this)};ne().prototype.leakyRelu=function(e){return this.throwIfDisposed(),Oc(this,e)};ne().prototype.lessEqual=function(e){return this.throwIfDisposed(),Ns(this,e)};ne().prototype.less=function(e){return this.throwIfDisposed(),tf(this,e)};ne().prototype.localResponseNormalization=function(e,t,n,a){return this.throwIfDisposed(),cv(this,e,t,n,a)};ne().prototype.logSigmoid=function(){return this.throwIfDisposed(),WS(this)};ne().prototype.logSoftmax=function(e){return this.throwIfDisposed(),af(this,e)};ne().prototype.logSumExp=function(e,t){return this.throwIfDisposed(),mv(this,e,t)};ne().prototype.log=function(){return this.throwIfDisposed(),ta(this)};ne().prototype.log1p=function(){return this.throwIfDisposed(),Lc(this)};ne().prototype.logicalAnd=function(e){return this.throwIfDisposed(),_a(this,e)};ne().prototype.logicalNot=function(){return this.throwIfDisposed(),zc(this)};ne().prototype.logicalOr=function(e){return this.throwIfDisposed(),rf(this,e)};ne().prototype.logicalXor=function(e){return this.throwIfDisposed(),GS(this,e)};ne().prototype.matMul=function(e,t,n){return this.throwIfDisposed(),Fe(this,e,t,n)};ne().prototype.maxPool=function(e,t,n,a){return this.throwIfDisposed(),Pt(this,e,t,n,a)};ne().prototype.max=function(e,t){return this.throwIfDisposed(),Ta(this,e,t)};ne().prototype.maximum=function(e){return this.throwIfDisposed(),fr(this,e)};ne().prototype.mean=function(e,t){return this.throwIfDisposed(),Et(this,e,t)};ne().prototype.min=function(e,t){return this.throwIfDisposed(),tc(this,e,t)};ne().prototype.minimum=function(e){return this.throwIfDisposed(),zu(this,e)};ne().prototype.mirrorPad=function(e,t){return this.throwIfDisposed(),gv(this,e,t)};ne().prototype.mod=function(e){return this.throwIfDisposed(),yv(this,e)};ne().prototype.mul=function(e){return this.throwIfDisposed(),W(this,e)};ne().prototype.neg=function(){return this.throwIfDisposed(),St(this)};ne().prototype.norm=function(e,t,n){return this.throwIfDisposed(),bf(this,e,t,n)};ne().prototype.notEqual=function(e){return this.throwIfDisposed(),ci(this,e)};ne().prototype.oneHot=function(e,t=1,n=0){return this.throwIfDisposed(),kl(this,e,t,n)};ne().prototype.onesLike=function(){return this.throwIfDisposed(),na(this)};ne().prototype.pad=function(e,t){return this.throwIfDisposed(),ya(this,e,t)};ne().prototype.pool=function(e,t,n,a,r,s){return this.throwIfDisposed(),qS(this,e,t,n,a,r,s)};ne().prototype.pow=function(e){return this.throwIfDisposed(),$r(this,e)};ne().prototype.prelu=function(e){return this.throwIfDisposed(),Bc(this,e)};ne().prototype.prod=function(e,t){return this.throwIfDisposed(),of(this,e,t)};ne().prototype.reciprocal=function(){return this.throwIfDisposed(),vv(this)};ne().prototype.relu=function(){return this.throwIfDisposed(),Xe(this)};ne().prototype.relu6=function(){return this.throwIfDisposed(),lf(this)};ne().prototype.reshapeAs=function(e){return this.throwIfDisposed(),V(this,e.shape)};ne().prototype.reshape=function(e){return this.throwIfDisposed(),V(this,e)};ne().prototype.resizeBilinear=function(e,t,n){return this.throwIfDisposed(),p2(this,e,t,n)};ne().prototype.resizeNearestNeighbor=function(e,t,n){return this.throwIfDisposed(),c2(this,e,t,n)};ne().prototype.reverse=function(e){return this.throwIfDisposed(),aa(this,e)};ne().prototype.rfft=function(){return this.throwIfDisposed(),Uc(this)};ne().prototype.round=function(){return this.throwIfDisposed(),uf(this)};ne().prototype.rsqrt=function(){return this.throwIfDisposed(),pf(this)};ne().prototype.selu=function(){return this.throwIfDisposed(),cf(this)};ne().prototype.separableConv2d=function(e,t,n,a,r,s){return this.throwIfDisposed(),xo(this,e,t,n,a,r,s)};ne().prototype.sigmoid=function(){return this.throwIfDisposed(),ma(this)};ne().prototype.sign=function(){return this.throwIfDisposed(),wv(this)};ne().prototype.sin=function(){return this.throwIfDisposed(),df(this)};ne().prototype.sinh=function(){return this.throwIfDisposed(),hf(this)};ne().prototype.slice=function(e,t){return this.throwIfDisposed(),Ge(this,e,t)};ne().prototype.softmax=function(e){return this.throwIfDisposed(),Ja(this,e)};ne().prototype.softplus=function(){return this.throwIfDisposed(),bo(this)};ne().prototype.spaceToBatchND=function(e,t){return this.throwIfDisposed(),Wc(this,e,t)};ne().prototype.split=function(e,t){return this.throwIfDisposed(),zn(this,e,t)};ne().prototype.sqrt=function(){return this.throwIfDisposed(),un(this)};ne().prototype.square=function(){return this.throwIfDisposed(),ut(this)};ne().prototype.squaredDifference=function(e){return this.throwIfDisposed(),gf(this,e)};ne().prototype.squeeze=function(e){return this.throwIfDisposed(),dr(this,e)};ne().prototype.stack=function(e,t){this.throwIfDisposed();let n=e instanceof Ae?[this,e]:[this,...e];return Mt(n,t)};ne().prototype.step=function(e){return this.throwIfDisposed(),Vu(this,e)};ne().prototype.stridedSlice=function(e,t,n,a,r,s,i,o){return this.throwIfDisposed(),Iv(this,e,t,n,a,r,s,i,o)};ne().prototype.sub=function(e){return this.throwIfDisposed(),ce(this,e)};ne().prototype.sum=function(e,t){return this.throwIfDisposed(),be(this,e,t)};ne().prototype.tan=function(){return this.throwIfDisposed(),Sv(this)};ne().prototype.tanh=function(){return this.throwIfDisposed(),li(this)};ne().prototype.tile=function(e){return this.throwIfDisposed(),On(this,e)};ne().prototype.toBool=function(){return this.throwIfDisposed(),oe(this,"bool")};ne().prototype.toFloat=function(){return this.throwIfDisposed(),oe(this,"float32")};ne().prototype.toInt=function(){return this.throwIfDisposed(),oe(this,"int32")};ne().prototype.topk=function(e,t){return this.throwIfDisposed(),Nv(this,e,t)};ne().prototype.transpose=function(e){return this.throwIfDisposed(),Pe(this,e)};ne().prototype.unique=function(e){return this.throwIfDisposed(),qh(this,e)};ne().prototype.unsortedSegmentSum=function(e,t){return this.throwIfDisposed(),Tv(this,e,t)};ne().prototype.unstack=function(e){return this.throwIfDisposed(),mt(this,e)};ne().prototype.where=function(e,t){return this.throwIfDisposed(),fn(e,this,t)};ne().prototype.zerosLike=function(){return this.throwIfDisposed(),Ke(this)};var b2={};Re(b2,{maxNorm:()=>T4,minMaxNorm:()=>E4,nonNeg:()=>_4,unitNorm:()=>C4});var mb;function Ht(){return mb==null&&(mb=bS().epsilon()),mb}function Ka(){return"channelsLast"}var Ir=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Ir.prototype)}},Va=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Va.prototype)}},H=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,H.prototype)}},Oe=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,Oe.prototype)}},x2=class extends Error{constructor(e){super(e),Object.setPrototypeOf(this,x2.prototype)}};function di(e,t){if(Array.isArray(e)){let n=[];for(let a=0;a<t;a++)n=n.concat(e);return n}else{let n=new Array(t);return n.fill(e),n}}function ir(e,t){if(!e)throw new x2(t)}function sk(e,t){let n=0;for(let a of e)a===t&&n++;return n}function Pn(e){return e.length===1?e[0]:e}function vt(e){return Array.isArray(e)?e:[e]}function Sr(e){let t=e.replace(/(.)([A-Z][a-z0-9]+)/g,"$1_$2").replace(/([a-z])([A-Z])/g,"$1_$2").toLowerCase();return t[0]!=="_"?t:"private"+t}function qs(e){return e.length<=1||e.indexOf("_")===-1?e:e.replace(/[_]+(\w|$)/g,(t,n)=>n.toUpperCase())}var ka={};function Rv(e){if(e==null)return null;let t={};return t.className=e.getClassName(),t.config=e.getConfig(),t}function Wb(e){if(!(e==null||typeof e!="object"))if(Array.isArray(e))e.forEach(t=>Wb(t));else{let t=Object.keys(e);for(let n of t){let a=e[n];a!=null&&typeof a=="object"&&(!Array.isArray(a)&&a.type==="ndarray"&&typeof a.value=="number"?e[n]=a.value:Wb(a))}}}function Hc(e,t={},n={},a="object",r=!1){if(typeof e=="string"){let s=e,i;if(s in n)i=n[s];else if(s in ka)i=ka[s];else if(i=t[s],i==null)throw new H(`Unknown ${a}: ${e}. This may be due to one of the following reasons:
|
|
1. The ${a} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${a} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);return i}else{let s=e;if(s.className==null||s.config==null)throw new H(`${a}: Improper config format: ${JSON.stringify(s)}.
|
|
'className' and 'config' must set.`);let i=s.className,o,l;if(i in n?[o,l]=n[i]:i in ka?[o,l]=ka.className:i in t&&([o,l]=t[i]),o==null)throw new H(`Unknown ${a}: ${i}. This may be due to one of the following reasons:
|
|
1. The ${a} is defined in Python, in which case it needs to be ported to TensorFlow.js or your JavaScript code.
|
|
2. The custom ${a} is defined in JavaScript, but is not registered properly with tf.serialization.registerClass().`);if(l!=null){let u={};for(let h of Object.keys(ka))u[h]=ka[h];for(let h of Object.keys(n))u[h]=n[h];let p=s.config;p.customObjects=u;let d=Object.assign({},ka);for(let h of Object.keys(n))ka[h]=n[h];Wb(s.config);let c=l(o,s.config,n,r);return ka=Object.assign({},d),c}else{let u=Object.assign({},ka);for(let d of Object.keys(n))ka[d]=n[d];let p=new o(s.config);return ka=Object.assign({},u),p}}}function I4(e,t){return e<t?-1:e>t?1:0}function mh(e,t){return-1*I4(e,t)}function as(e){if(e==null)return e;let t=[];for(let n of e)t.indexOf(n)===-1&&t.push(n);return t}function S4(e){if(e==null)throw new H(`Invalid value in obj: ${JSON.stringify(e)}`);for(let t in e)if(e.hasOwnProperty(t))return!1;return!0}function vo(e,t,n){if(n!=null&&e.indexOf(n)<0)throw new H(`${n} is not a valid ${t}. Valid values are ${e} or null/undefined.`)}function Mv(e,t,n=0,a=1/0){return ir(n>=0),ir(a>=n),Array.isArray(e)&&e.length>=n&&e.length<=a&&e.every(r=>typeof r===t)}function tn(e,t){Array.isArray(e)?(k.assert(e.length>0,()=>`${t} is unexpectedly an empty array.`),e.forEach((n,a)=>tn(n,`element ${a+1} of ${t}`))):k.assert(Number.isInteger(e)&&e>0,()=>`Expected ${t} to be a positive integer, but got ${v2(e)}.`)}function v2(e){return e===null?"null":Array.isArray(e)?"["+e.map(t=>v2(t)).join(",")+"]":typeof e=="string"?`"${e}"`:`${e}`}function N4(e,t,n){let a=n!=null?n():k.now(),r;return(...s)=>{let i=n!=null?n():k.now();return i-a<t||(a=i,r=e(...s)),r}}function w2(e){return e==="relu"?"relu":e==="linear"?"linear":e==="elu"?"elu":null}function Pv(e,t){return O(()=>un(be(W(e,e),t,!0)))}var jc=class extends se.Serializable{getConfig(){return{}}},Ov=class extends jc{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=Pv(e,this.axis),n=nn(t,0,this.maxValue);return W(e,fe(n,J(Ht(),t)))})}getConfig(){return{maxValue:this.maxValue,axis:this.axis}}};Ov.className="MaxNorm";se.registerClass(Ov);var Lv=class extends jc{constructor(e){super(),this.defaultAxis=0,this.axis=e.axis!=null?e.axis:this.defaultAxis}apply(e){return O(()=>fe(e,J(Ht(),Pv(e,this.axis))))}getConfig(){return{axis:this.axis}}};Lv.className="UnitNorm";se.registerClass(Lv);var zv=class extends jc{apply(e){return Xe(e)}};zv.className="NonNeg";se.registerClass(zv);var Wv=class extends jc{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=Pv(e,this.axis),n=J(W(this.rate,nn(t,this.minValue,this.maxValue)),W(1-this.rate,t));return W(e,fe(n,J(Ht(),t)))})}getConfig(){return{minValue:this.minValue,maxValue:this.maxValue,rate:this.rate,axis:this.axis}}};Wv.className="MinMaxNorm";se.registerClass(Wv);var ik={maxNorm:"MaxNorm",minMaxNorm:"MinMaxNorm",nonNeg:"NonNeg",unitNorm:"UnitNorm"};function Kt(e){return Rv(e)}function ok(e,t={}){return Hc(e,se.SerializationMap.getMap().classNameMap,t,"constraint")}function Xt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in ik?ik[e]:e,config:{}};return ok(t)}else return e instanceof jc?e:ok(e)}function T4(e){return new Ov(e)}function C4(e){return new Lv(e)}function _4(){return new zv}function E4(e){return new Wv(e)}var k2={};Re(k2,{constant:()=>Z4,glorotNormal:()=>sV,glorotUniform:()=>rV,heNormal:()=>iV,heUniform:()=>oV,identity:()=>nV,leCunNormal:()=>lV,leCunUniform:()=>uV,ones:()=>J4,orthogonal:()=>pV,randomNormal:()=>eV,randomUniform:()=>Q4,truncatedNormal:()=>tV,varianceScaling:()=>aV,zeros:()=>Y4});var A4=["channelsFirst","channelsLast"],$4=["nearest","bilinear"],F4=["valid","same","causal"],D4=["max","avg"],R4=["sum","mul","concat","ave"],ll=new Map;function Ot(e){vo(A4,"DataFormat",e)}function M4(e){vo($4,"InterpolationFormat",e)}function ba(e){vo(F4,"PaddingMode",e)}function I2(e){vo(D4,"PoolMode",e)}var jp=[],lk="/";function Qs(e,t){jp.push(e);try{let n=t();return jp.pop(),n}catch(n){throw jp.pop(),n}}function P4(){return jp.length===0?"":jp.join(lk)+lk}function S2(e){if(!T2(e))throw new Error("Not a valid tensor name: '"+e+"'");return P4()+e}function N2(e){if(!T2(e))throw new Error("Not a valid tensor name: '"+e+"'");ll.has(e)||ll.set(e,0);let t=ll.get(e);if(ll.set(e,ll.get(e)+1),t>0){let n=`${e}_${t}`;return ll.set(n,1),n}else return e}var O4=new RegExp(/^[A-Za-z0-9][-A-Za-z0-9\._\/]*$/);function T2(e){return!!e.match(O4)}function L4(e){return e===parseInt(e.toString(),10)}function rs(e,t,n){t==null&&(t=0),n==null&&(n=e.length);let a=1;for(let r=t;r<n;++r)a*=e[r];return a}function Nl(e){if(e.length===0)return Number.NaN;let t=Number.POSITIVE_INFINITY;for(let n=0;n<e.length;n++){let a=e[n];a<t&&(t=a)}return t}function ps(e){if(e.length===0)return Number.NaN;let t=Number.NEGATIVE_INFINITY;for(let n=0;n<e.length;n++){let a=e[n];a>t&&(t=a)}return t}function Xa(e,t){if(t<e)throw new H(`end (${t}) < begin (${e}) is forbidden.`);let n=[];for(let a=e;a<t;++a)n.push(a);return n}function Ef(e,t){return oe(e,t)}function qc(e,t=-1){let n=e.shape.slice();return t<0&&(t=n.length+t+1),n.splice(t,0,1),V(e,n)}function z4(e,t){return O(()=>{if(e.shape.length!==2)throw new H(`repeat() expects a rank-2 tensor, but received a rank-${e.shape.length} tensor.`);let n=qc(e,1);return Bb(n,[1,t,1])})}function W4(e){let t=[rs(e.shape)];return V(e,t)}function B4(e){if(e.rank<=1)throw new H(`batchFlatten requires a minimum rank of 2. Got rank: ${e.rank}.`);let t=[e.shape[0],rs(e.shape,1)];return V(e,t)}function ei(e,t,n){return O(()=>{switch(e.rank){case 1:return mf(e,t,n);case 2:return kv(e,[t,0],[n,e.shape[1]]);case 3:return Bu(e,[t,0,0],[n,e.shape[1],e.shape[2]]);case 4:return ac(e,[t,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3]]);case 5:return Ge(e,[t,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4]]);case 6:return Ge(e,[t,0,0,0,0,0],[n,e.shape[1],e.shape[2],e.shape[3],e.shape[4],e.shape[5]]);default:throw new H(`sliceAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}})}function fb(e,t,n){return O(()=>{switch(e.rank){case 1:return mf(e,t,n);case 2:return kv(e,[0,t],[e.shape[0],n]);case 3:return Bu(e,[0,0,t],[e.shape[0],e.shape[1],n]);case 4:return ac(e,[0,0,0,t],[e.shape[0],e.shape[1],e.shape[2],n]);default:throw new H(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function fh(e,t,n,a){return O(()=>{switch(e.rank){case 1:return mf(e,t,n);case 2:switch(a){case 1:return ei(e,t,n);case 2:return fb(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}case 3:switch(a){case 1:return ei(e,t,n);case 2:return Bu(e,[0,t,0],[e.shape[0],n,e.shape[2]]);case 3:return fb(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}case 4:switch(a){case 1:return ei(e,t,n);case 2:return ac(e,[0,t,0,0],[e.shape[0],n,e.shape[2],e.shape[3]]);case 3:return ac(e,[0,0,t,0],[e.shape[0],e.shape[1],n,e.shape[3]]);case 4:return fb(e,t,n);default:throw new H(`The axis is not within the rank of the tensor ${a}`)}default:throw new H(`sliceAlongLastAxis() received an unsupported tensor rank: ${e.rank}`)}})}function Bv(e,t=-1){let n;return t<0&&(n=e[0].rank,n!==0?t=n:t=0),t===e[0].rank&&(t=-1),Qe(e,t)}function uk(e,t){switch(e.rank){case 1:return CS([e,t]);case 2:return _S([e,t],0);case 3:return ES([e,t],0);case 4:return AS([e,t],0);default:throw new H(`concatAlongFirstAxis() received an unsupported tensor rank: ${e.rank}`)}}function Bb(e,t){if(Array.isArray(t)||(t=[t]),e.rank!==t.length)throw new H(`The length of input n (${t.length}) does not match the number of dimensions in input x (${e.rank})`);return On(e,t)}function Af(e,t=0,n=1,a,r){return KS(e,t,n,a,r)}function ur(e,t,n,a){if(e.rank<2||t.rank<2)throw new Oe(`dot requires both inputs to be rank >= 2 but got x shape = ${e.shape} and y shape = ${t.shape}`);if(t.rank>=3){let r=e.shape.slice(-1)[0],s=t.shape.slice(-2)[0];if(r!==s)throw new Oe(`If rank y >= 3, then the second last dim of y must equal the last dim of x but got x shape = ${e.shape} and y shape = ${t.shape}`)}if(e.rank===2&&t.rank===2)return us.matMul({a:e,b:t,transposeA:!1,transposeB:!1,bias:a?Vb(e.rank,a,Ka()):null,activation:n});{let r=e.shape.slice(),s=r.pop();e=V(e,[-1,s]);let i=t.shape.slice(),o=i.pop(),l=i.pop(),u=[...i,o],p=Array.from({length:t.rank},(m,f)=>f===0?t.rank-2:f<=t.rank-2?f-1:f);t=V(Pe(t,p),[l,-1]);let d=[...r,...u],c=!1,h=!1;return V(us.matMul({a:e,b:t,transposeA:c,transposeB:h,bias:a?Vb(e.rank,a,Ka()):null,activation:n}),d)}}function C2(e,t,n){return O(()=>(Array.isArray(t)?t=qe(t,"int32"):t=oe(t,"int32"),ui(e,t,n)))}function Kc(e){return W(e,e)}function Vb(e,t,n){let a=t.shape;if(t.rank!==1&&t.rank!==e)throw new H(`Unexpected bias dimensions: ${t.rank}; expected it to be 1 or ${e}`);if(e===5){if(n==="channelsFirst")return a.length===1?V(t,[1,a[0],1,1,1]):V(t,[1,a[3],a[0],a[1],a[2]]);if(n==="channelsLast")return a.length===1?V(t,[1,1,1,1,a[0]]):V(t,[1].concat(a))}else if(e===4){if(n==="channelsFirst")return a.length===1?V(t,[1,a[0],1,1]):V(t,[1,a[2],a[0],a[1]]);if(n==="channelsLast")return a.length===1?V(t,[1,1,1,a[0]]):V(t,[1].concat(a))}else if(e===3){if(n==="channelsFirst")return a.length===1?V(t,[1,a[0],1]):V(t,[1,a[1],a[0]]);if(n==="channelsLast")return a.length===1?V(t,[1,1,a[0]]):V(t,[1].concat(a))}else if(e<3)return t;throw new H(`Unsupported input rank by biasAdd: ${t.rank}`)}function Qa(e,t,n){return O(()=>(n==null&&(n=Ka()),Ot(n),J(e,Vb(e.rank,t,n))))}function V4(e,t=1){if(t!==1)throw new Oe(`Support for alpha values other than 1 (${t}) is not implemented yet.`);return Ou(e)}function U4(e){return O(()=>fe(e,J(zt(e),1)))}function _2(e,t,n,a){return O(()=>t2(e,t,n,a))}function G4(e){return O(()=>{let t=J(.5,W(.2,e));return nn(t,0,1)})}function Xc(e,t,n=!1){return n?e():t()}var H4=["fanIn","fanOut","fanAvg"],j4=["normal","uniform","truncatedNormal"];function q4(e){vo(H4,"FanMode",e)}function K4(e){vo(j4,"Distribution",e)}var Aa=class extends se.Serializable{fromConfigUsesCustomObjects(){return!1}getConfig(){return{}}},Vv=class extends Aa{apply(e,t){return kt(e,t)}};Vv.className="Zeros";se.registerClass(Vv);var $f=class extends Aa{apply(e,t){return Zn(e,t)}};$f.className="Ones";se.registerClass($f);var Uv=class extends Aa{constructor(e){if(super(),typeof e!="object")throw new H(`Expected argument of type ConstantConfig but got ${e}`);if(e.value===void 0)throw new H(`config must have value set but got ${e}`);this.value=e.value}apply(e,t){return O(()=>W(ke(this.value),Zn(e,t)))}getConfig(){return{value:this.value}}};Uv.className="Constant";se.registerClass(Uv);var Gv=class extends Aa{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 Wu(e,this.minval,this.maxval,t)}getConfig(){return{minval:this.minval,maxval:this.maxval,seed:this.seed}}};Gv.className="RandomUniform";se.registerClass(Gv);var Hv=class extends Aa{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Oe(`randomNormal does not support dType ${t}.`);return Af(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};Hv.className="RandomNormal";se.registerClass(Hv);var jv=class extends Aa{constructor(e){super(),this.DEFAULT_MEAN=0,this.DEFAULT_STDDEV=.05,this.mean=e.mean||this.DEFAULT_MEAN,this.stddev=e.stddev||this.DEFAULT_STDDEV,this.seed=e.seed}apply(e,t){if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Oe(`truncatedNormal does not support dType ${t}.`);return yf(e,this.mean,this.stddev,t,this.seed)}getConfig(){return{mean:this.mean,stddev:this.stddev,seed:this.seed}}};jv.className="TruncatedNormal";se.registerClass(jv);var qv=class extends Aa{constructor(e){super(),this.gain=e.gain!=null?e.gain:1}apply(e,t){return O(()=>{if(e.length!==2||e[0]!==e[1])throw new H("Identity matrix initializer can only be used for 2D square matrices.");return W(this.gain,uv(e[0]))})}getConfig(){return{gain:this.gain}}};qv.className="Identity";se.registerClass(qv);function X4(e,t="channelsLast"){let n,a;if(Ot(t),e.length===2)n=e[0],a=e[1];else if([3,4,5].indexOf(e.length)!==-1){if(t==="channelsFirst"){let r=rs(e,2);n=e[1]*r,a=e[0]*r}else if(t==="channelsLast"){let r=rs(e,0,e.length-2);n=e[e.length-2]*r,a=e[e.length-1]*r}}else{let r=rs(e);n=Math.sqrt(r),a=Math.sqrt(r)}return[n,a]}var Bn=class extends Aa{constructor(e){if(super(),e.scale<0)throw new H(`scale must be a positive float. Got: ${e.scale}`);this.scale=e.scale==null?1:e.scale,this.mode=e.mode==null?"fanIn":e.mode,q4(this.mode),this.distribution=e.distribution==null?"normal":e.distribution,K4(this.distribution),this.seed=e.seed}apply(e,t){let n=X4(e),a=n[0],r=n[1],s=this.scale;if(this.mode==="fanIn"?s/=Math.max(1,a):this.mode==="fanOut"?s/=Math.max(1,r):s/=Math.max(1,(a+r)/2),this.distribution==="normal"){let i=Math.sqrt(s);if(t=t||"float32",t!=="float32"&&t!=="int32")throw new Oe(`${this.getClassName()} does not support dType ${t}.`);return yf(e,0,i,t,this.seed)}else{let i=Math.sqrt(3*s);return Wu(e,-i,i,t)}}getConfig(){return{scale:this.scale,mode:this.mode,distribution:this.distribution,seed:this.seed}}};Bn.className="VarianceScaling";se.registerClass(Bn);var Ff=class extends Bn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Ff.className="GlorotUniform";se.registerClass(Ff);var Df=class extends Bn{constructor(e){super({scale:1,mode:"fanAvg",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Df.className="GlorotNormal";se.registerClass(Df);var Rf=class extends Bn{constructor(e){super({scale:2,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Rf.className="HeNormal";se.registerClass(Rf);var Mf=class extends Bn{constructor(e){super({scale:2,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Mf.className="HeUniform";se.registerClass(Mf);var Pf=class extends Bn{constructor(e){super({scale:1,mode:"fanIn",distribution:"normal",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Pf.className="LeCunNormal";se.registerClass(Pf);var Of=class extends Bn{constructor(e){super({scale:1,mode:"fanIn",distribution:"uniform",seed:e==null?null:e.seed})}getClassName(){return Bn.className}};Of.className="LeCunNormal";se.registerClass(Of);var Kv=class extends Aa{constructor(e){if(super(),this.DEFAULT_GAIN=1,this.gain=e.gain==null?this.DEFAULT_GAIN:e.gain,this.seed=e.seed,this.seed!=null)throw new Oe("Random seed is not implemented for Orthogonal Initializer yet.")}apply(e,t){return O(()=>{if(e.length<2)throw new Oe("Shape must be at least 2D.");e[0]*e[1]>2e3&&console.warn(`Orthogonal initializer is being called on a matrix with more than 2000 (${e[0]*e[1]}) elements: Slowness may result.`);let n=e[0]>e[1]?[e[1],e[0]]:e,a=Af(n,0,1,"float32"),r=d2.gramSchmidt(a);return e[0]>e[1]&&(r=Pe(r)),W(this.gain,r)})}getConfig(){return{gain:this.gain,seed:this.seed}}};Kv.className="Orthogonal";se.registerClass(Kv);var pk={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 ck(e,t={}){return Hc(e,se.SerializationMap.getMap().classNameMap,t,"initializer")}function At(e){return Rv(e)}function It(e){if(typeof e=="string"){let t=e in pk?pk[e]:e;if(t==="GlorotNormal")return new Df;if(t==="GlorotUniform")return new Ff;if(t==="HeNormal")return new Rf;if(t==="HeUniform")return new Mf;if(t==="LeCunNormal")return new Pf;if(t==="LeCunUniform")return new Of;{let n={};return n.className=t,n.config={},ck(n)}}else return e instanceof Aa?e:ck(e)}function Y4(){return new Vv}function J4(){return new $f}function Z4(e){return new Uv(e)}function Q4(e){return new Gv(e)}function eV(e){return new Hv(e)}function tV(e){return new jv(e)}function nV(e){return new qv(e)}function aV(e){return new Bn(e)}function rV(e){return new Ff(e)}function sV(e){return new Df(e)}function iV(e){return new Rf(e)}function oV(e){return new Mf(e)}function lV(e){return new Pf(e)}function uV(e){return new Of(e)}function pV(e){return new Kv(e)}var E2={};Re(E2,{Layer:()=>Ye,RNN:()=>yr,RNNCell:()=>ed,activation:()=>jU,add:()=>tG,alphaDropout:()=>LG,average:()=>nG,averagePooling1d:()=>n0,averagePooling2d:()=>a0,averagePooling3d:()=>r0,avgPool1d:()=>cG,avgPool2d:()=>hG,avgPool3d:()=>fG,avgPooling1d:()=>dG,avgPooling2d:()=>mG,avgPooling3d:()=>gG,batchNormalization:()=>lG,bidirectional:()=>AG,concatenate:()=>aG,conv1d:()=>OU,conv2d:()=>LU,conv2dTranspose:()=>zU,conv3d:()=>WU,conv3dTranspose:()=>BU,convLstm2d:()=>TG,convLstm2dCell:()=>CG,cropping2D:()=>UU,dense:()=>qU,depthwiseConv2d:()=>HU,dot:()=>oG,dropout:()=>KU,elu:()=>$U,embedding:()=>eG,flatten:()=>YU,gaussianDropout:()=>OG,gaussianNoise:()=>PG,globalAveragePooling1d:()=>yG,globalAveragePooling2d:()=>bG,globalMaxPool1d:()=>FG,globalMaxPool2d:()=>DG,globalMaxPooling1d:()=>SN,globalMaxPooling2d:()=>NN,gru:()=>vG,gruCell:()=>wG,input:()=>J2,inputLayer:()=>AU,layerNormalization:()=>uG,leakyReLU:()=>DU,lstm:()=>kG,lstmCell:()=>IG,masking:()=>zG,maxPool1d:()=>RG,maxPool2d:()=>MG,maxPooling1d:()=>TN,maxPooling2d:()=>CN,maxPooling3d:()=>xG,maximum:()=>rG,minimum:()=>sG,multiply:()=>iG,permute:()=>QU,prelu:()=>RU,reLU:()=>FU,repeatVector:()=>JU,reshape:()=>ZU,rnn:()=>_G,separableConv2d:()=>VU,simpleRNN:()=>SG,simpleRNNCell:()=>NG,softmax:()=>MU,spatialDropout1d:()=>XU,stackedRNNCells:()=>EG,thresholdedReLU:()=>PU,timeDistributed:()=>$G,upSampling2d:()=>GU,zeroPadding2d:()=>pG});var cV=0;function A2(){return cV++}var gh={};function Lf(e=""){return e in gh||(gh[e]=0),gh[e]+=1,e+gh[e].toString()}function Ub(e){return Array.isArray(e)&&Array.isArray(e[0])}function Kh(e){return e.length===0?[]:Array.isArray(e[0])?e:[e]}function ze(e){let t;if(Array.isArray(e)){if(e.length!==1)throw new H(`Expected Tensor length to be 1; got ${e.length}`);t=e[0]}else t=e;return t}function it(e){if(Array.isArray(e)&&Array.isArray(e[0])){if(e.length===1)return e=e,e[0];throw new H(`Expected exactly 1 Shape; got ${e.length}`)}else return e}function Xh(e){let t=0;for(let n of e)n.shape.length===0?t+=1:t+=n.shape.reduce((a,r)=>a*r);return t}var dk="Variable",$2=class{constructor(e,t="float32",n=dk,a=!0,r=null){this.dtype=t==null?"float32":t,this.shape=e.shape,this.id=A2(),n=n==null?dk:n,this.originalName=S2(n),this.name=N2(this.originalName),this.trainable_=a,this.constraint=r,this.val=YS(e,this.trainable_,this.name,this.dtype)}read(){return this.assertNotDisposed(),this.val}write(e){return this.assertNotDisposed(),dV(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 dV(e,t){if(e.shape.toString()!==t.shape.toString())throw new Error("Shape mismatch: "+JSON.stringify(e.shape)+" vs. "+JSON.stringify(t.shape))}function Gb(e){return e.map(t=>t.read())}function Xv(e){e.forEach(t=>{t[0].write(t[1])})}var Wt=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||{}}},Ua=class{constructor(e,t,n,a,r,s,i){this.dtype=e,this.shape=t,this.sourceLayer=n,this.inputs=a,this.callArgs=r,this.outputTensorIndex=i,this.id=A2(),s!=null&&(this.originalName=S2(s),this.name=N2(this.originalName)),this.rank=t.length}},hV=0,zf=class{constructor(e,t){this.callArgs=t,this.id=hV++,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}}},mV=0,Ye=class extends se.Serializable{constructor(e={}){super(),this._callHook=null,this._addedWeightNames=[],this._stateful=!1,this.id=mV++,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=Sr(n)+"_"+Lf(n)}if(this.name=t,this.trainable_=e.trainable==null?!0:e.trainable,e.inputShape!=null||e.batchInputShape!=null){let n;if(e.batchInputShape!=null)n=e.batchInputShape;else if(e.inputShape!=null){let r=null;e.batchSize!=null&&(r=e.batchSize),n=[r].concat(e.inputShape)}this.batchInputShape=n;let a=e.dtype;a==null&&(a=e.inputDType),a==null&&(a="float32"),this.dtype=a}e.weights!=null?this.initialWeights=e.weights:this.initialWeights=null,this._refCount=null,this.fastWeightInitDuringBuild=!1}static nodeKey(e,t){return e.name+"_ib-"+t.toString()}getNodeAtIndex(e,t){if(this.inboundNodes.length===0)throw new Va(`The layer has never been called and thus has no defined ${t}.`);if(this.inboundNodes.length<=e)throw new H(`Asked to get ${t} at node ${e}, but the layer has only ${this.inboundNodes.length} inbound nodes.`);return this.inboundNodes[e]}getInputAt(e){return Pn(this.getNodeAtIndex(e,"input").inputTensors)}getOutputAt(e){return Pn(this.getNodeAtIndex(e,"output").outputTensors)}get input(){if(this.inboundNodes.length>1)throw new Ir(`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 Ir(`Layer ${this.name} is not connected, no input to return.`);return Pn(this.getNodeAtIndex(0,"input").inputTensors)}get output(){if(this.inboundNodes.length===0)throw new Ir(`Layer ${this.name} has no inbound nodes.`);if(this.inboundNodes.length>1)throw new Ir(`Layer ${this.name} has multiple inbound nodes, hence the notion of "layer output" is ill-defined. Use \`getOutputAt(nodeIndex)\` instead.`);return Pn(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 H(`Layer ${this.name} expects ${t.length} inputs, but it received ${e.length} input tensors. Input received: ${e}`);for(let n=0;n<e.length;n++){let a=e[n],r=t[n];if(r==null)continue;let s=a.rank;if(r.ndim!=null&&s!==r.ndim)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected ndim=${r.ndim}, found ndim=${s}`);if(r.maxNDim!=null&&s>r.maxNDim)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected max_ndim=${r.maxNDim}, found ndim=${s}`);if(r.minNDim!=null&&s<r.minNDim)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected min_ndim=${r.minNDim}, found ndim=${s}.`);if(r.dtype!=null&&a.dtype!==r.dtype)throw new H(`Input ${n} is incompatible with layer ${this.name} : expected dtype=${r.dtype}, found dtype=${a.dtype}.`);if(r.axes){let i=a.shape;for(let o in r.axes){let l=Number(o),u=r.axes[o],p=l>=0?i[l]:i[i.length+l];if(u!=null&&[u,null].indexOf(p)===-1)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected axis ${l} of input shape to have value ${u} but got shape ${i}.`)}}if(r.shape!=null)for(let i=0;i<r.shape.length;++i){let o=r.shape[i],l=a.shape[i];if(o!=null&&l!=null&&o!==l)throw new H(`Input ${n} is incompatible with layer ${this.name}: expected shape=${r.shape}, found shape=${a.shape}.`)}}}call(e,t){return e}invokeCallHook(e,t){this._callHook!=null&&this._callHook(e,t)}setCallHook(e){this._callHook=e}clearCallHook(){this._callHook=null}apply(e,t){t=t||{},this.assertNotDisposed();let n=vt(e),a=!0;for(let s of n)if(!(s instanceof Ua)){a=!1;break}let r=!0;for(let s of n)if(s instanceof Ua){r=!1;break}if(a===r)throw new H("Arguments to apply() must be all SymbolicTensors or all Tensors");return Qs(this.name,()=>{if(!this.built){this.assertInputCompatibility(e);let s=[];for(let i of vt(e))s.push(i.shape);this.build(Pn(s)),this.built=!0,this.initialWeights&&this.setWeights(this.initialWeights),this._refCount===null&&r&&(this._refCount=1)}if(this.assertInputCompatibility(e),r){let s=this.call(e,t),i=vt(s),o=[];for(let l of i)n.indexOf(l)!==-1&&(l=l.clone()),o.push(l);if(s=Pn(o),this.activityRegularizer!=null)throw new Oe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return s}else{let s=fV(e),i=this.computeOutputShape(s),o,l=gV(e);if(this.warnOnIncompatibleInputShape(Array.isArray(e)?s[0]:s),i!=null&&i.length>0&&Array.isArray(i[0])?o=i.map((u,p)=>new Ua(l,u,this,vt(e),t,this.name,p)):o=new Ua(l,i,this,vt(e),t,this.name),this.addInboundNode(e,o,null,null,s,i,t),this._refCount++,this.activityRegularizer!=null)throw new Oe("Layer invocation in the presence of activity regularizer(s) is not supported yet.");return o}})}warnOnIncompatibleInputShape(e){if(this.batchInputShape!=null)if(e.length!==this.batchInputShape.length)console.warn(`The rank of the input tensor provided (shape: ${JSON.stringify(e)}) does not match that of the batchInputShape (${JSON.stringify(this.batchInputShape)}) of the layer ${this.name}`);else{let t=!1;this.batchInputShape.forEach((n,a)=>{n!=null&&e[a]!=null&&e[a]!==n&&(t=!0)}),t&&console.warn(`The shape of the input tensor (${JSON.stringify(e)}) does not match the expectation of layer ${this.name}: ${JSON.stringify(this.batchInputShape)}`)}}get outputShape(){if(this.inboundNodes==null||this.inboundNodes.length===0)throw new Ir(`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 Ir(`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 Va(`You tried to call countParams() on ${this.name}, but the layer is not built yet. Build it first by calling build(batchInputShape).`);return Xh(this.weights)}build(e){this.built=!0}getWeights(e=!1){return Gb(e?this.trainableWeights:this.weights)}setWeights(e){O(()=>{let t=this.weights;if(t.length!==e.length)throw new H(`You called setWeights(weights) on layer "${this.name}" with a weight list of length ${e.length}, but the layer was expecting ${t.length} weights. Provided weights: ${e}...`);if(t.length===0)return;let n=[],a=Gb(t);for(let r=0;r<a.length;++r){let s=a[r],i=t[r],o=e[r];if(!k.arraysEqual(s.shape,o.shape))throw new H(`Layer weight shape ${s.shape} not compatible with provided weight shape ${o.shape}`);n.push([i,o])}Xv(n)})}addWeight(e,t,n,a,r,s,i,o){if(this._addedWeightNames.indexOf(e)!==-1)throw new H(`Duplicate weight name ${e} for layer ${this.name}`);this._addedWeightNames.push(e),n==null&&(n="float32"),this.fastWeightInitDuringBuild&&(a=o!=null?o():It("zeros"));let l=a.apply(t,n),u=new $2(l,n,e,s,i);return l.dispose(),r!=null&&this.addLoss(()=>r.apply(u.read())),s==null&&(s=!0),s?this._trainableWeights.push(u):this._nonTrainableWeights.push(u),u}setFastWeightInitDuringBuild(e){this.fastWeightInitDuringBuild=e}addLoss(e){e==null||Array.isArray(e)&&e.length===0||(e=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,a,r,s,i=null){let o=vt(e);t=vt(t),n=vt(n),a=vt(a),r=Kh(r),s=Kh(s);let l=[],u=[],p=[];for(let d of o)l.push(d.sourceLayer),u.push(d.nodeIndex),p.push(d.tensorIndex);new zf({outboundLayer:this,inboundLayers:l,nodeIndices:u,tensorIndices:p,inputTensors:o,outputTensors:t,inputMasks:n,outputMasks:a,inputShapes:r,outputShapes:s},i);for(let d=0;d<t.length;d++)t[d].sourceLayer=this,t[d].nodeIndex=this.inboundNodes.length-1,t[d].tensorIndex=d}getConfig(){let e={name:this.name,trainable:this.trainable};return this.batchInputShape!=null&&(e.batchInputShape=this.batchInputShape),this.dtype!=null&&(e.dtype=this.dtype),e}disposeWeights(){return this.weights.forEach(e=>e.dispose()),this.weights.length}assertNotDisposed(){if(this._refCount===0)throw new Error(`Layer '${this.name}' is already disposed.`)}dispose(){if(!this.built)throw new Error(`Cannot dispose Layer ${this.name} because it has not been built yet.`);if(this._refCount===null)throw new Error(`Cannot dispose Layer ${this.name} because it has not been used yet.`);this.assertNotDisposed();let e=0;return--this._refCount===0&&(e=this.disposeWeights()),{refCountAfterDispose:this._refCount,numDisposedVariables:e}}};function fV(e){e=vt(e);let t=[];for(let n of e)t.push(n.shape);return Pn(t)}function gV(e){return"float32"}function F2(e,t,n){if((t==null||n!=null&&n>0)&&(t=e.sourceLayer,n=e.nodeIndex),t.inboundNodes.length===0)return[e];{let a=t.inboundNodes[n];if(a.inboundLayers.length===0)return a.inputTensors;{let r=[];for(let s=0;s<a.inboundLayers.length;s++){let i=a.inputTensors[s],o=a.inboundLayers[s],l=a.nodeIndices[s],u=F2(i,o,l);for(let p of u)r.indexOf(p)===-1&&r.push(p)}return r}}}var Gu=class extends Ye{constructor(e){if(super({dtype:e.dtype,name:e.name!=null?e.name:Lf("input").toString()}),e.batchSize==null&&(e.batchSize=null),e.sparse==null&&(e.sparse=!1),this.trainable=!1,this.built=!0,this.sparse=e.sparse,e.inputShape!=null&&e.batchInputShape!=null)throw new H("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 H("An InputLayer should be passed either a `batchInputShape` or an `inputShape`.");t=[e.batchSize].concat(e.inputShape)}else if(e.batchSize!=null)throw new H("Cannot specify batchSize if batchInputShape is specified when creating an InputLayer.");let n=e.dtype||"float32";this.batchInputShape=t,this.dtype=n,this.inputSpec=[{shape:t}];let a=new Ua(this.dtype,this.batchInputShape,this,[],{},this.name);a.nodeIndex=0,a.tensorIndex=0,new zf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:[a],outputTensors:[a],inputMasks:[null],outputMasks:[null],inputShapes:[t],outputShapes:[t]})}apply(e,t){throw new H(`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}}};Gu.className="InputLayer";se.registerClass(Gu);function D2(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 H("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 Gu({batchInputShape:t,name:e.name,dtype:n,sparse:e.sparse}).inboundNodes[0].outputTensors[0]}async function Jr(e){if(e==null)return;let t=[],n=[],a=[];for(let r in e){let s=e[r];if(typeof s!="number"){let i=s;t.push(i.data()),n.push(r),a.push(i)}}if(t.length>0){let r=await Promise.all(t);for(let s=0;s<r.length;++s)e[n[s]]=r[s][0];De(a)}}function R2(e){if(e!=null)for(let t in e){let n=e[t];typeof n!="number"&&n.dispose()}}var hk;(function(e){e[e.SILENT=0]="SILENT",e[e.VERBOSE=1]="VERBOSE"})(hk||(hk={}));var yV=125,Tl=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){}},M2=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)}},bV=class extends Tl{constructor(){super()}async onEpochBegin(e){this.seen=0,this.totals={}}async onBatchEnd(e,t){t==null&&(t={});let n=t.size==null?0:t.size;this.seen+=n;for(let a in t){let r=t[a];if(typeof r=="number")this.totals.hasOwnProperty(a)||(this.totals[a]=0),this.totals[a]=this.totals[a]+r*n;else{let s;a in this.totals?s=this.totals[a]:this.totals[a]=0;let i=O(()=>J(this.totals[a],W(r,n)));this.totals[a]=i,s!=null&&s.dispose()}}}async onEpochEnd(e,t){if(t!=null)for(let n of this.params.metrics)this.totals[n]!=null&&(typeof this.totals[n]=="number"?t[n]=this.totals[n]/this.seen:O(()=>{let a=W(fe(1,this.seen),this.totals[n]);t[n]=a,this.totals[n].dispose(),en(t[n])}))}},P2=class extends Tl{async onTrainBegin(e){this.epoch=[],this.history={}}async onEpochEnd(e,t){t==null&&(t={}),this.epoch.push(e);for(let n in t)this.history[n]==null&&(this.history[n]=[]),this.history[n].push(t[n])}async syncData(){let e=[],t=[],n=[];for(let r in this.history){let s=this.history[r];for(let i=0;i<s.length;++i)if(typeof s[i]!="number"){let o=s[i];e.push(o.data()),t.push(r),n.push(i)}}let a=await Promise.all(e);for(let r=0;r<a.length;++r)this.history[t[r]][n[r]].dispose(),this.history[t[r]][n[r]]=a[r][0]}},O2=class extends Tl{constructor(e,t){if(super(),this.currentEpoch=0,this.nowFunc=e.nowFunc,this.nextFrameFunc=e.nextFrameFunc||Fv,this.yieldEvery=t||"auto",this.yieldEvery==="auto"&&(this.yieldEvery=yV),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");k.isNumber(this.yieldEvery)&&(this.maybeWait=N4(this.maybeWait.bind(this),this.yieldEvery,this.nowFunc)),this.trainBegin=e.onTrainBegin,this.trainEnd=e.onTrainEnd,this.epochBegin=e.onEpochBegin,this.epochEnd=e.onEpochEnd,this.batchBegin=e.onBatchBegin,this.batchEnd=e.onBatchEnd,this.yield=e.onYield}async maybeWait(e,t,n){let a=[];this.yield!=null&&(await Jr(n),a.push(this.yield(e,t,n))),a.push(this.nextFrameFunc()),await Promise.all(a)}async onEpochBegin(e,t){this.currentEpoch=e,this.epochBegin!=null&&(await Jr(t),await this.epochBegin(e,t))}async onEpochEnd(e,t){let n=[];this.epochEnd!=null&&(await Jr(t),n.push(this.epochEnd(e,t))),this.yieldEvery==="epoch"&&n.push(this.nextFrameFunc()),await Promise.all(n)}async onBatchBegin(e,t){this.batchBegin!=null&&(await Jr(t),await this.batchBegin(e,t))}async onBatchEnd(e,t){let n=[];this.batchEnd!=null&&(await Jr(t),n.push(this.batchEnd(e,t))),this.yieldEvery==="batch"?n.push(this.nextFrameFunc()):k.isNumber(this.yieldEvery)&&n.push(this.maybeWait(this.currentEpoch,e,t)),await Promise.all(n)}async onTrainBegin(e){this.trainBegin!=null&&(await Jr(e),await this.trainBegin(e))}async onTrainEnd(e){this.trainEnd!=null&&(await Jr(e),await this.trainEnd(e))}};function L2(e,t){return e==null&&(e={}),e instanceof Tl?[e]:Array.isArray(e)&&e[0]instanceof Tl?e:vt(e).map(n=>new O2(n,t))}var Sa=class{constructor(){}static registerCallbackConstructor(e,t){k.assert(e>=0&&Number.isInteger(e),()=>`Verbosity level is expected to be an integer >= 0, but got ${e}`),Sa.checkForDuplicate(t),Sa.constructors[e]==null&&(Sa.constructors[e]=[]),Sa.constructors[e].push(t)}static checkForDuplicate(e){for(let t in Sa.constructors)Sa.constructors[+t].forEach(n=>{if(n===e)throw new H("Duplicate callback constructor.")})}static clear(){Sa.constructors={}}static createCallbacks(e){let t=[];for(let n in Sa.constructors){let a=+n;e>=a&&t.push(...Sa.constructors[a])}return t.map(n=>new n)}};Sa.constructors={};function z2(e,t,n,a,r,s,i,o,l){let u=new P2,p=[new bV,...Sa.createCallbacks(t)];e!=null&&p.push(...e),p.push(u);let d=new M2(p);return d.setParams({epochs:n,initialEpoch:a,samples:r,steps:s,batchSize:i,verbose:t,doValidation:o,metrics:l}),{callbackList:d,history:u}}function ja(e,t={},n=!1){return Hc(e,se.SerializationMap.getMap().classNameMap,t,"layer",n)}function Yh(e,t){return O(()=>{e.dtype!=="float32"&&(e=oe(e,"float32"));let n=be(Kc(e),t,!0),a=_n(n.shape,Ht()),r=un(fr(n,a));return fe(e,r)})}function wo(e,t){return O(()=>Et(Kc(ce(t,e)),-1))}function Wf(e,t){return O(()=>Et(zt(ce(t,e)),-1))}function Hu(e,t){return O(()=>{let n=ce(e,t),a=nn(zt(e),Ht(),Number.MAX_VALUE),r=zt(fe(n,a));return W(100,Et(r,-1))})}function xV(e,t){return O(()=>{let n=nn(t,Ht(),Number.MAX_VALUE),a=ta(J(1,n)),r=nn(e,Ht(),Number.MAX_VALUE),s=ta(J(1,r));return Et(Kc(ce(a,s)),-1)})}function vV(e,t){return O(()=>{let n=fr(0,ce(1,W(e,t)));return Et(Kc(n),-1)})}function wV(e,t){return O(()=>{let n=fr(0,ce(1,W(e,t)));return Et(n,-1)})}function kV(e,t){return O(()=>{let n=be(W(e,t),-1),a=Ta(W(ce(1,e),t),-1);return fr(0,J(1,ce(a,n)))})}function IV(e,t){return O(()=>{let n=Math.log(2),a=ce(t,e),r=ce(J(a,bo(W(-2,a))),n);return Et(r,-1)})}function rc(e,t,n=!1){return O(()=>{if(n)t=Ja(t);else{let a=be(t,t.shape.length-1,!0);t=fe(t,a)}return t=nn(t,Ht(),1-Ht()),St(be(W(oe(e,"float32"),ta(t)),t.shape.length-1))})}function Jh(e,t,n=!1){return O(()=>{let a=oe(Lu(W4(e)),"int32");t=nn(t,Ht(),1-Ht());let r=t.shape,s=V(kl(a,r[r.length-1]),r);return rc(s,t,n)})}function SV(e,t){if(!k.arraysEqual(e.shape,t.shape))throw new H(`logits and labels must have the same shape, but got shapes ${JSON.stringify(e.shape)} and ${JSON.stringify(t.shape)}`);return O(()=>{let n=Xe(t),a=St(zt(t));return J(ce(n,W(t,e)),Lc(gn(a)))})}function Bf(e,t){return O(()=>{let n;return n=nn(t,Ht(),1-Ht()),n=ta(fe(n,ce(1,n))),Et(SV(e,n),-1)})}function NV(e,t){return O(()=>{let n=nn(e,Ht(),1),a=nn(t,Ht(),1);return be(W(e,ta(fe(n,a))),-1)})}function TV(e,t){return O(()=>{let n=ta(J(Ht(),t));return Et(ce(t,W(e,n)),-1)})}function Yv(e,t){return O(()=>{let n=Yh(e,-1),a=Yh(t,-1),r=W(n,a);return St(be(r,-1))})}var Zh={meanSquaredError:wo,meanAbsoluteError:Wf,meanAbsolutePercentageError:Hu,meanSquaredLogarithmicError:xV,squaredHinge:vV,hinge:wV,categoricalHinge:kV,logcosh:IV,categoricalCrossentropy:rc,sparseCategoricalCrossentropy:Jh,binaryCrossentropy:Bf,kullbackLeiblerDivergence:NV,poisson:TV,cosineProximity:Yv};function gb(e){if(typeof e=="string"){if(e in Zh)return Zh[e];let t=`Unknown loss ${e}`;throw e.toLowerCase().includes("softmaxcrossentropy")&&(t=`Unknown loss ${e}. Use "categoricalCrossentropy" as the string name for tf.losses.softmaxCrossEntropy`),new H(t)}else return e}function Jv(e,t){return O(()=>{let n=W(.5,na(t)),a=Ef(Gn(t,n),e.dtype);return Et(ea(e,a),-1)})}function Zv(e,t){return O(()=>Ef(ea(oi(e,-1),oi(t,-1)),"float32"))}function W2(e,t){return O(()=>oe(be(_a(ea(e,1),ea(t,1))),"float32"))}function CV(e,t){return O(()=>oe(be(_a(ea(e,1),ea(t,0))),"float32"))}function _V(e,t){return O(()=>oe(be(_a(ea(e,0),ea(t,1))),"float32"))}function B2(e,t){return O(()=>{let n=W2(e,t),a=_V(e,t),r=J(n,a);return oe(fn(Gn(r,0),fe(n,r),0),"float32")})}function EV(e,t){return O(()=>{let n=W2(e,t),a=CV(e,t),r=J(n,a);return oe(fn(Gn(r,0),fe(n,r),0),"float32")})}function V2(e,t){return Bf(e,t)}function U2(e,t){return e.rank===t.rank&&(e=dr(e,[e.rank-1])),t=oi(t,-1),t.dtype!==e.dtype&&(t=oe(t,e.dtype)),oe(ea(e,t),"float32")}var AV=wo,$V=wo,FV=Wf,DV=Wf,RV=Hu,MV=Hu,Qv=rc,PV=Yv,G2=Jh,Qh={binaryAccuracy:Jv,categoricalAccuracy:Zv,precision:B2,categoricalCrossentropy:Qv,sparseCategoricalCrossentropy:G2,mse:AV,MSE:$V,mae:FV,MAE:DV,mape:RV,MAPE:MV,cosine:PV};function OV(e){if(typeof e=="string"&&e in Qh)return Qh[e];if(typeof e!="string"&&e!=null)return e;throw new H(`Unknown metric ${e}`)}function yh(e){if(ir(e!==null,`Unknown LossOrMetricFn ${e}`),typeof e=="string")return e;{let t;for(let n of Object.keys(Zh))if(Zh[n]===e){t=n;break}if(t!==void 0)return t;for(let n of Object.keys(Qh))if(Qh[n]===e){t=n;break}return t!==void 0?t:e.name}}function LV(e){let t={Adagrad:()=>Gs.adagrad(.01),Adadelta:()=>Gs.adadelta(1,.95,Ht()),Adam:()=>Gs.adam(.001,.9,.999,Ht()),Adamax:()=>Gs.adamax(.002,.9,.999,Ht(),0),RMSProp:()=>Gs.rmsprop(.001,.9,0,Ht()),SGD:()=>Gs.sgd(.01)};if(t.adagrad=t.Adagrad,t.adadelta=t.Adadelta,t.adam=t.Adam,t.adamax=t.Adamax,t.rmsprop=t.RMSProp,t.sgd=t.SGD,e in t)return t[e]();throw new H(`Unknown Optimizer ${e}`)}function mk(e,t,n=!1){if(e==null||typeof e!="object"||Object.getPrototypeOf(e)!==Object.prototype||!Hb(e))throw new Error("User-defined metadata is expected to be a JSON object, but is not.");if(n){let a=JSON.stringify(e);a.length>1048576&&console.warn(`User-defined metadata of model "${t}" is too large in size (length=${a.length} when serialized). It is not recommended to store such large objects in user-defined metadata. Please make sure its serialized length is <= ${1048576}.`)}}function Hb(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"||!Hb(e[n]))return!1;return!0}else if(Array.isArray(e)){for(let t of e)if(!Hb(t))return!1;return!0}else return!1;else{let t=typeof e;return t==="string"||t==="number"||t==="boolean"}}function zV(e,t,n,a=console.log){let r=BV(e),s=["Layer (type)","Input Shape","Output shape","Param #"];r?(t=t||90,n=n||[.32,.61,.89,1]):(t=t||115,n=n||[.24,.48,.7,.8,1]),n[n.length-1]<=1&&(n=n.map(p=>Math.floor(t*p)));let i;if(!r){s.push("Receives inputs"),i=[];for(let p in e.nodesByDepth)i.push(...e.nodesByDepth[p])}a("_".repeat(t)),em(s,n,a),a("=".repeat(t));let o=e.layers;for(let p=0;p<o.length;++p)r?VV(o[p],n,a):UV(o[p],n,i,a),a((p===o.length-1?"=":"_").repeat(t));e.checkTrainableWeightsConsistency();let l=WV(e),u=Xh(e.nonTrainableWeights);a(`Total params: ${l+u}`),a(`Trainable params: ${l}`),a(`Non-trainable params: ${u}`),a("_".repeat(t))}function WV(e){let t;return e.collectedTrainableWeights!=null?t=Xh(e.collectedTrainableWeights):t=Xh(e.trainableWeights),t}function BV(e){let t=!0,n=[],a=[];for(let r in e.nodesByDepth)n.push(e.nodesByDepth[r]);for(let r of n){if(r.length>1||r.length===1&&r[0].inboundLayers.length>1){t=!1;break}a.push(...r)}if(t)for(let r of e.layers){let s=!1;for(let i of r.inboundNodes)if(a.indexOf(i)!==-1)if(s){t=!1;break}else s=!0;if(!t)break}return t}function em(e,t,n=console.log){let a="";for(let r=0;r<e.length;++r)r>0&&(a=a.slice(0,a.length-1)+" "),a+=e[r],a=a.slice(0,t[r]),a+=" ".repeat(t[r]-a.length);n(a)}function VV(e,t,n){let a,r;try{r=e.inboundNodes.map(l=>JSON.stringify(l.inputShapes)).join(",")}catch(l){r="multiple"}try{a=JSON.stringify(e.outputShape)}catch(l){a="multiple"}let s=e.name,i=e.getClassName(),o=[`${s} (${i})`,r,a,e.countParams().toString()];em(o,t,n)}function UV(e,t,n,a){let r,s;try{s=e.inboundNodes.map(d=>JSON.stringify(d.inputShapes)).join(",")}catch(d){s="multiple"}try{r=JSON.stringify(e.outputShape)}catch(d){r="multiple"}let i=[];for(let d of e.inboundNodes)if(!(n!=null&&n.length>0&&n.indexOf(d)===-1))for(let c=0;c<d.inboundLayers.length;++c){let h=d.inboundLayers[c].name,m=d.nodeIndices[c],f=d.tensorIndices[c];i.push(`${h}[${m}][${f}]`)}let o=e.name,l=e.getClassName(),u=i.length===0?"":i[0],p=[`${o} (${l})`,s,r,e.countParams().toString(),u];em(p,t,a);for(let d=1;d<i.length;++d)em(["","","","",i[d]],t,a)}function H2(e,t,n){return(e==="inboundNodes"||e==="outputLayers"||e==="inputLayers")&&t===0&&typeof n=="string"}function sc(e,t){if(e===null)return null;if(typeof e=="string")return qs(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],a=e.length;for(let r=0;r<a;++r){let s=e[r];H2(t,r,s)?n.push(s):n.push(sc(s,t))}return n}else{let n={};for(let a of Object.keys(e)){let r=e[a];if(a==="name"&&typeof r=="string")n[a]=r;else{let s=qs(a);n[s]=sc(r,s)}}return n}}function jb(e,t){if(e==null)return null;if(typeof e=="string")return Sr(e);if(typeof e=="number"||typeof e=="boolean")return e;if(e instanceof Array){let n=[],a=e.length;for(let r=0;r<a;++r){let s=e[r];H2(t,r,s)?n.push(s):n.push(jb(s,t))}return n}else{let n={};for(let a of Object.keys(e)){let r=e[a],s=Sr(a);(a==="name"||a==="className")&&typeof r=="string"?n[s]=r:n[s]=jb(r,a)}return n}}var ew="3.15.0";function GV(e,t){if(e.dtype==null||e.dtype===t.dtype)return t;try{return oe(t,e.dtype)}catch(n){throw new H(`The dtype of the feed (${t.dtype}) can not be cast to the dtype of the key '${e.name}' (${e.dtype}).`)}}var Ys=class{constructor(e){if(this.id2Value={},this.id2Mask={},this.name2Id={},e instanceof Ys)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]=GV(e,t),this.name2Id[e.name]=e.id,n!=null&&(this.id2Mask[e.id]=n);else throw new H(`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 Ua){if(this.id2Value[e.id]==null)throw new H(`Nonexistent key: ${e.name}`);return this.id2Value[e.id]}else{let t=this.name2Id[e];if(t==null)throw new H(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Value[t]}}getMask(e){if(e instanceof Ua){if(this.id2Value[e.id]==null)throw new H(`Nonexistent key: ${e.name}`);return this.id2Mask[e.id]}else{let t=this.name2Id[e];if(t==null)throw new H(`Feed dict has no SymbolicTensor name: ${e}`);return this.id2Mask[t]}}disposeMasks(){this.id2Mask!=null&&De(this.id2Mask)}},yb={},fk={};function Lp(e,t,n,a){let r=n==null?!1:n.training,s=Array.isArray(e),i=s?e:[e],o=i.map(m=>m.name),l=[],u=t.names();for(let m of o)u.indexOf(m)!==-1?l.push(t.getValue(m)):l.push(null);a!=null&&(a.maxNumTensors=-1/0,a.minNumTensors=1/0);let p=o.join(",")+"|"+t.names().join(","),d,c;if(yb[p]==null){let m=HV(i,t);d=m.sorted,c=m.recipientCounts,yb[p]=d,fk[p]=c}d=yb[p],c={},r||Object.assign(c,fk[p]);let h=new Ys(t);for(let m=0;m<d.length;++m){if(a!=null){let $=Hh().numTensors;$>a.maxNumTensors&&(a.maxNumTensors=$),$<a.minNumTensors&&(a.minNumTensors=$)}let f=d[m],g=f.sourceLayer;if(g instanceof Gu)continue;let y=[],b=[],x=[],v=!1;for(let $ of f.inputs){let P=h.getValue($),F=h.getMask($);y.push(P),b.push(F),F!=null&&(v=!0),r||(c[$.name]--,c[$.name]===0&&!t.hasKey($)&&o.indexOf($.name)===-1&&!P.isDisposed&&$.sourceLayer.stateful!==!0&&x.push(P))}v&&(n=n||{},n.mask=b[0]);let w=vt(g.apply(y,n)),T=null;g.supportsMasking&&(T=g.computeMask(y,b));let C=qV(f),E=Array.isArray(C)?C:[C];for(let $=0;$<E.length;++$){h.hasKey(E[$])||h.add(E[$],w[$],Array.isArray(T)?T[0]:T);let P=o.indexOf(E[$].name);P!==-1&&(l[P]=w[$])}r||De(x)}return h.disposeMasks(),s?l:l[0]}function HV(e,t){k.assert(e!=null&&e.length>0,()=>"Expected at least one fetch, got none");let n=[],a={};if(e.length===1){let r=gk(e[0],t);n=r.sorted,a=r.recipientMap}else{let r=new Set;for(let s of e){let{sorted:i,recipientMap:o}=gk(s,t);for(let l of i)r.has(l.name)||(n.push(l),r.add(l.name));for(let l in o)a[l]==null&&(a[l]=new Set),o[l].forEach(u=>a[l].add(u))}}return{sorted:n,recipientCounts:jV(a)}}function jV(e){let t={};for(let n in e)t[n]=e[n].size;return t}function gk(e,t){let n=new Set,a=[],r={};for(let o of t.names())n.add(o);let s=[],i=[];for(s.push(e);s.length>0;){let o=s[s.length-1];if(n.has(o.name)){s.pop();continue}let l=i[i.length-1]===s.length-1;if(o.inputs.length===0||l)s.pop(),a.push(o),n.add(o.name),l&&i.pop();else{i.push(s.length-1);for(let u of o.inputs)r[u.name]==null&&(r[u.name]=new Set),r[u.name].add(o.name),!n.has(u.name)&&s.push(u)}}return{sorted:a,recipientMap:r}}function qV(e){let t;if(e.sourceLayer.inboundNodes.length===1)t=e.sourceLayer.output;else{let n=null;for(let a=0;a<e.sourceLayer.inboundNodes.length;++a)for(let r of e.sourceLayer.inboundNodes[a].outputTensors)if(r.id===e.id){n=a;break}t=e.sourceLayer.getOutputAt(n)}return t}var rr=class extends Ye{constructor(e){if(super({}),this.containerNodes=new Set,this.name=e.name,this.name==null){let y=this.getClassName().toLowerCase();this.name=Lf(y)}if(this.supportsMasking=!1,this.trainable_=!0,Array.isArray(e.inputs)?this.inputs=e.inputs.slice():this.inputs=[e.inputs],Array.isArray(e.outputs)?this.outputs=e.outputs.slice():this.outputs=[e.outputs],as(this.inputs).length!==this.inputs.length)throw new H(`The list of inputs passed to the model is redundant. All inputs should only appear once. Found: ${this.inputs.map(y=>y.name)}`);as(this.outputs).length!==this.outputs.length&&console.warn(`The list of outputs passed to the model is redundant. All outputs should only appear once. Found: ${this.outputs.map(y=>y.name)}`),this.inputLayers=[],this.inputLayersNodeIndices=[],this.inputLayersTensorIndices=[],this.outputLayers=[],this.outputLayersNodeIndices=[],this.outputLayersTensorIndices=[],this.layers=[],this.internalContainerRefs=[];for(let y of this.outputs){let b=y.sourceLayer,x=y.nodeIndex,v=y.tensorIndex;this.outputLayers.push(b),this.outputLayersNodeIndices.push(x),this.outputLayersTensorIndices.push(v)}for(let y of this.inputs){let b=y.sourceLayer,x=y.nodeIndex,v=y.tensorIndex;ir(x===0,"input layer has >1 nodes"),ir(v===0,"input layer has >1 tensors"),this.inputLayers.push(b),this.inputLayersNodeIndices.push(x),this.inputLayersTensorIndices.push(v)}this.inputNames=[],this.outputNames=[],this.feedInputShapes=[],this.feedInputNames=[],this.feedOutputNames=[];for(let y=0;y<this.inputLayers.length;y++){let b=this.inputLayers[y];if(!(b instanceof Gu))throw new TypeError(`Input layers to a LayersModel must be InputLayer objects. Received inputs: ${e.inputs}. Input ${y} (0-based) originates from layer type ${b.getClassName()}.`);this.inputNames.push(b.name),this.feedInputShapes.push(b.batchInputShape),this.feedInputNames.push(b.name)}for(let y of this.outputLayers)this.outputNames.push(y.name);this.internalInputShapes=this.inputs.map(y=>y.shape),this.internalOutputShapes=this.outputs.map(y=>y.shape);let t={},n={},a={},r={},s={},i=[],o=(y,b,x,v,w,T)=>{(v==null||w==null||T==null)&&(v=y.sourceLayer,w=y.nodeIndex,T=y.tensorIndex);let C=v.inboundNodes[w];if(x.indexOf(C)!==-1)throw new Va(`The tensor ${y.name} at layer "${v.name}" is part of a cycle.`);if(b.indexOf(C)!==-1)return;this.containerNodes.add(rr.nodeKey(v,w)),v.id in s||(s[v.id]=Object.keys(s).length),x.indexOf(C)===-1&&x.push(C);let E=C.inboundLayers.length;for(let $=0;$<E;$++){let P=C.inputTensors[$],F=C.inboundLayers[$],S=C.nodeIndices[$],M=C.tensorIndices[$];o(P,b,x,F,S,M)}for(b.push(C);x.indexOf(C)>=0;)x.splice(x.indexOf(C),1);i.push(C)},l=[],u=[];for(let y of this.outputs)o(y,l,u);let p=i.slice().reverse();for(let y of p){n[y.id]=y,y.id in t||(t[y.id]=0);let b=t[y.id],x=a[y.outboundLayer.id]==null?0:a[y.outboundLayer.id];b=Math.max(b,x),a[y.outboundLayer.id]=b,r[y.outboundLayer.id]=y.outboundLayer,t[y.id]=b;for(let v=0;v<y.inboundLayers.length;v++){let w=y.inboundLayers[v],T=y.nodeIndices[v],C=w.inboundNodes[T],E=t[C.id]==null?0:t[C.id];t[C.id]=Math.max(b+1,E),n[C.id]=C}}let d={};for(let y in t){let b=t[y];b in d||(d[b]=[]),d[b].push(n[y])}let c={};for(let y in a){let b=a[y];b in c||(c[b]=[]),c[b].push(r[y])}let h=Object.keys(c).map(y=>parseInt(y,10)).sort(mh);this.layers=[];for(let y of h){let b=c[y];b.sort((x,v)=>{let w=s[x.id],T=s[v.id];return w<T?-1:w>T?1:0});for(let x of b)x instanceof rr&&this.internalContainerRefs.push(x),this.layers.push(x)}this.layersByDepth=c,h=Object.keys(d).map(y=>parseInt(y,10)).sort(mh);let m=this.inputs.slice(),f=[];for(let y of h)for(let b of d[y]){let x=b.outboundLayer;if(x!=null){for(let v of b.inputTensors)if(m.indexOf(v)===-1)throw new Va(`Graph disconnected: cannot obtain value for tensor ${v} at layer "${x.name}". The following previous layers were accessed without issue: ${f}`);for(let v of b.outputTensors)m.push(v);f.push(x.name)}}this.nodesByDepth=d;let g=this.layers.map(y=>y.name);for(let y of g){let b=g.filter(x=>x===y).length;if(b!==1)throw new Va(`The name "${y}" is used ${b} times in the model. All layer names should be unique. Layer names: `+JSON.stringify(g))}this.outboundNodes=[],this.inboundNodes=[],new zf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:this.inputs.map(y=>null),outputMasks:this.outputs.map(y=>null),inputShapes:this.inputs.map(y=>y.shape),outputShapes:this.outputs.map(y=>y.shape)}),this.built=!0,this._refCount=1}assertNotDisposed(){if(this._refCount===0)throw new Error(`Container '${this.name}' is already disposed.`)}dispose(){this.assertNotDisposed();let e={refCountAfterDispose:null,numDisposedVariables:0};if(--this._refCount===0){for(let t of this.layers)e.numDisposedVariables+=t.dispose().numDisposedVariables;for(let t of this.internalContainerRefs)e.numDisposedVariables+=t.dispose().numDisposedVariables}return e.refCountAfterDispose=this._refCount,e}get trainable(){return this.trainable_}set trainable(e){this.layers.forEach(t=>{t._trainableWeights.forEach(n=>n.trainable=e)}),this.trainable_=e}get trainableWeights(){if(this._trainableWeights.length>0)throw new H("Container instance unexpectedly contains _trainableWeights.The trainable weights of a Container are a union of the trainable weights of its consituent Layers. Its own _trainableWeights must remain an empty Array.");if(!this.trainable)return[];let e=[];for(let t of this.layers)e=e.concat(t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.layers)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.layers)t.push(...n.trainableWeights);return t.concat(e)}return e}get weights(){return this.trainableWeights.concat(this.nonTrainableWeights)}loadWeights(e,t=!0){let n={},a=0;for(let s of this.layers)for(let i of s.weights){if(n[i.originalName]!=null)throw new H(`Duplicate weight name: ${i.originalName}`);n[i.originalName]=i,a++}let r=[];for(let s in e){let i=s;if(n[s]==null){let o=s.split("/");i=o.slice(0,-2).concat([o[o.length-1]]).join("/")}if(n[i]!=null)r.push([n[i],e[s]]);else if(t)throw new H(`Provided weight data has no target variable: ${s}`);delete n[i]}if(t){let s=[];for(let i in n)s.push(i);if(s.length>0)throw new H(`${s.length} of ${a} weights are not set: ${s}`)}Xv(r)}updatedConfig(){let e=this.getConfig(),t={};return t.className=this.getClassName(),t.config=e,t.kerasVersion=`tfjs-layers ${ew}`,t.backend="TensorFlow.js",t}toJSON(e,t=!0){let n=jb(this.updatedConfig());return t?JSON.stringify(n):n}call(e,t){return O(()=>{e=vt(e);let n=new Ys;for(let a=0;a<this.inputs.length;++a)n.add(this.inputs[a],e[a]);return Lp(this.outputs,n,t)})}computeMask(e,t){return O(()=>{e=vt(e);let n;return t==null?n=di(null,e.length):n=vt(t),this.runInternalGraph(e,n)[1]})}computeOutputShape(e){let t=Kh(e);if(t.length!==this.inputLayers.length)throw new H(`Invalid inputShape argument ${e}: model has ${this.inputLayers.length} tensor inputs.`);let n={};for(let i=0;i<t.length;i++){let o=this.inputLayers[i],l=t[i],u=o.name+"_0_0";n[u]=l}let a=Object.keys(this.nodesByDepth).map(i=>parseInt(i,10)).sort(mh);if(a.length>1)for(let i of a){let o=this.nodesByDepth[i];for(let l of o){let u=l.outboundLayer;if(this.inputLayers.map(m=>m.id).indexOf(u.id)!==-1)continue;let p=[];for(let m=0;m<l.inboundLayers.length;m++){let f=l.inboundLayers[m],g=l.nodeIndices[m],y=l.tensorIndices[m],b=`${f.name}_${g}_${y}`,x=n[b];p.push(x)}let d=u.computeOutputShape(Pn(p)),c=Kh(d),h=u.inboundNodes.indexOf(l);for(let m=0;m<c.length;m++){let f=`${u.name}_${h}_${m}`;n[f]=c[m]}}}let r=[],s=[];for(let i=0;i<this.outputLayers.length;i++){let o=this.outputLayers[i],l=this.outputLayersNodeIndices[i],u=this.outputLayersTensorIndices[i],p=`${o.name}_${l}_${u}`;s.push(p)}for(let i=0;i<s.length;i++){let o=s[i];ir(o in n),r.push(n[o])}return Pn(r)}runInternalGraph(e,t){t==null&&(t=di(null,e.length));let n={};for(let o=0;o<this.inputs.length;++o){let l=this.inputs[o],u=e[o],p=t[o];n[l.id]=[u,p]}let a=Object.keys(this.nodesByDepth).map(o=>parseInt(o,10)).sort(mh);for(let o of a){let l=this.nodesByDepth[o];for(let u of l){let p=u.outboundLayer,d=u.inputTensors,c=u.outputTensors,h=new Array;for(let m of d)m.id in n&&h.push(n[m.id]);if(h.length===d.length){let m={},f,g,y,b;if(u.callArgs!=null&&(m=u.callArgs),h.length===1){let[x,v]=h[0];m.mask==null&&(m.mask=v),y=vt(p.call(x,m)),b=vt(p.computeMask(x,v)),f=[x],g=[v]}else f=h.map(x=>x[0]),g=h.map(x=>x[1]),m.mask==null&&(m.mask=g),y=vt(p.call(f,m)),b=vt(p.computeMask(f,g));if(p.activityRegularizer)throw new Oe("LayersModel invocation with concrete Tensor value(s) in the presence of activity regularizer(s) is not supported yet.");for(let x=0;x<c.length;++x){let v=c[x],w=y[x],T=b[x];n[v.id]=[w,T]}}}}let r=[],s=[],i=[];for(let o of this.outputs){ir(o.id in n,`Could not compute output ${o.name} : ${o.id}`);let[l,u]=n[o.id];i.push(l.shape),r.push(l),s.push(u)}return[r,s,i]}buildNodeConversionMap(e){let t={},n;for(let a of this.layers){n=a instanceof rr?1:0;for(let r=0;r<a.inboundNodes.length;r++){let s=rr.nodeKey(a,r);this.containerNodes.has(s)&&(t[s]=n,n+=1)}}return t}getLayer(e,t){if(t!=null){if(this.layers.length<=t)throw new H(`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 H("Provide either a layer name or layer index");for(let n of this.layers)if(n.name===e)return n;throw new H(`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 a=rr.nodeKey(t,n);this.containerNodes.has(a)&&e.push(...t.calculateLosses())}return e})}getConfig(){let e={name:this.name},t=this.buildNodeConversionMap(this.layers),n=[];for(let s of this.layers){let i=s.getClassName(),o=s.getConfig(),l=[];for(let p=0;p<s.inboundNodes.length;p++){let d=s.inboundNodes[p],c=rr.nodeKey(s,p),h={};if(this.containerNodes.has(c)){if(d.callArgs)try{JSON.stringify(d.callArgs),h=d.callArgs}catch(m){console.warn(`Layer ${s.name} was passed non-serializable keyword arguments: ${d.callArgs}. They will not be included in the serialized model (and thus will be missing at deserialization time).`),h={}}if(d.inboundLayers.length>0){let m=[];for(let f=0;f<d.inboundLayers.length;f++){let g=d.inboundLayers[f],y=d.nodeIndices[f],b=d.tensorIndices[f],x=rr.nodeKey(g,y),v=t[x];v==null&&(v=0),m.push([g.name,v,b,h])}l.push(m)}}}let u={};u.name=s.name,u.className=i,u.config=o,u.inboundNodes=l,n.push(u)}e.layers=n;let a=[];for(let s=0;s<this.inputLayers.length;s++){let i=this.inputLayers[s],o=this.inputLayersNodeIndices[s],l=rr.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let p=this.inputLayersTensorIndices[s];a.push([i.name,u,p])}e.inputLayers=a;let r=[];for(let s=0;s<this.outputLayers.length;s++){let i=this.outputLayers[s],o=this.outputLayersNodeIndices[s],l=rr.nodeKey(i,o);if(!this.containerNodes.has(l))continue;let u=t[l];u==null&&(u=0);let p=this.outputLayersTensorIndices[s];r.push([i.name,u,p])}return e.outputLayers=r,e}static fromConfig(e,t,n={},a=!1){let r={},s={};function i(f,g){f.name in s?s[f.name].push(g):s[f.name]=[g]}function o(f,g){let y=[],b;for(let x of g){let v=x[0],w=x[1],T=x[2];if(b=x[3]==null?{}:x[3],!(v in r)){i(f,g);return}let C=r[v];if(C.inboundNodes.length<=w){i(f,g);return}let E=C.inboundNodes[w];y.push(E.outputTensors[T])}y.length>0&&f.apply(Pn(y),b)}function l(f){let g=f.name,y=ja(f,t.customObjects!=null?t.customObjects:{});y.setFastWeightInitDuringBuild(a),r[g]=y,f.inboundNodes.forEach(b=>{if(!(b instanceof Array))throw new H(`Corrupted configuration, expected array for nodeData: ${b}`);i(y,b)})}let u=t.name,p=t.layers;for(let f of p)l(f);for(;!S4(s);)for(let f of p){let g=r[f.name];if(g.name in s){let y=s[g.name];delete s[g.name];for(let b of y)o(g,b)}}let d=[],c=[],h=t.inputLayers;for(let f of h){let g=f[0],y=f[1],b=f[2];ir(g in r);let x=r[g].inboundNodes[y].outputTensors;d.push(x[b])}let m=t.outputLayers;for(let f of m){let g=f[0],y=f[1],b=f[2];ir(g in r);let x=r[g].inboundNodes[y].outputTensors;c.push(x[b])}return new e({inputs:d,outputs:c,name:u})}get stateful(){if(this._stateful)throw new H("Container instance unexpectedly has _stateful = true. The statefulness of a Container is determined by the Layers it contains. Its _stateful property must remain the default false.");for(let e of this.layers)if(e.stateful)return!0;return!1}resetStates(){O(()=>{this.layers.forEach(e=>{e.stateful&&e.resetStates()})})}};function KV(e,t,n){let a=t.length;if(e==null||Array.isArray(e)&&e.length===0)return t.map(r=>null);if(a===1)return Array.isArray(e)&&e.length===1?e:typeof e=="object"&&t[0]in e?[e[t[0]]]:[e];if(Array.isArray(e)){if(e.length!==a)throw new Error(`Provided ${n} is an array of ${e.length} element(s), but the model has ${a} outputs. Make sure a set of weights is provided for each model output.`);return e}else if(typeof e=="object"&&Object.keys(e).length>0&&typeof e[Object.keys(e)[0]]=="object"){let r=[];return t.forEach(s=>{s in e?r.push(e[s]):r.push(null)}),r}else throw new Error(`The model has multiple (${a}) outputs, so ${n} must be either an array with ${a} elements or an object with ${t} keys. Provided ${n} not understood: ${JSON.stringify(e)}`)}function j2(e,t){return KV(e,t,"classWeight")}async function q2(e,t,n,a){if(t!=null||a!=null)throw new Error("Support sampleWeight is not implemented yet");if(n!=null){let r=O(()=>{if(e.shape.length===1)return _r(e);if(e.shape.length===2){if(e.shape[1]>1)return oi(e,1);if(e.shape[1]===1)return V(e,[e.shape[0]]);throw new Error(`Encountered unexpected last-dimension size (${e.shape[1]}) during handling of class weights. The size is expected to be >= 1.`)}else throw new Error(`Unexpected rank of target (y) tensor (${e.rank}) during handling of class weights. The rank is expected to be 1 or 2.`)}),s=Array.from(await r.data());De(r);let i=[];return s.forEach(o=>{if(n[o]==null)throw new Error(`classWeight must contain all classes in the training data. The class ${o} exists in the data but not in classWeight`);i.push(n[o])}),qe(i,"float32")}else return null}function XV(e,t){return W(e,t)}var YV=32;function K2(e,t){let n,a,r=t;n=r.xs,a=r.ys,k.assert(n!=null&&a!=null,()=>`A Dataset iterator for fitDataset() is expected to generate objects of the form \`{xs: xVal, ys: yVal}\`, where the two values may be \`tf.Tensor\`, an array of Tensors, or a map of string to Tensor. The provided Dataset instead generates ${t}`);let s=yk("input",e.inputNames,n),i=yk("output",e.outputNames,a),o=s[0].shape[0];k.assert(s.length===e.inputs.length,()=>`LayersModel has ${e.inputs.length} inputs, but the dataset provides ${s.length} inputs. (Expected input keys: ${JSON.stringify(e.inputNames)})`),k.assert(i.length===e.outputs.length,()=>`LayersModel has ${e.outputs.length} outputs, but the dataset provides ${i.length} outputs. (Expected output keys: ${JSON.stringify(e.outputNames)})`);for(let l=0;l<s.length;l++)k.assert(s[l].shape[0]===o,()=>`Batch size mismatch: input ${e.inputNames[l]} has ${s[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);for(let l=0;l<i.length;l++)k.assert(i[l].shape[0]===o,()=>`Batch size mismatch: output ${e.outputNames[l]} has ${i[l].shape[0]}; expected ${o} based on input ${e.inputNames[0]}.`);return{xs:s,ys:i}}function yk(e,t,n){if(n instanceof Ae)return[n];if(Array.isArray(n))return k.assert(n.length===t.length,()=>`Received an array of ${n.length} Tensors, but expected ${t.length} to match the ${e} keys ${t}.`),n;{let a=[];for(let r of t){if(n[r]==null)throw new H(`The feature data generated by the dataset lacks the required ${e} key '${r}'.`);a.push(n[r])}return a}}function JV(e){if(e.length===3)throw new Oe("Validation with sample weights is not implemented yet.");return{xs:e[0],ys:e[1]}}async function ZV(e,t,n){let a=n.batchesPerEpoch!=null;if(k.assert(e.optimizer!=null,()=>"You must compile a model before training/testing. Use LayersModel.compile(modelCompileConfig)."),k.assert(n!=null,()=>"For fitDataset(), the 2nd argument (config) is required, but it is not provided in this call."),k.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}`),k.assert(!a||n.batchesPerEpoch>0&&Number.isInteger(n.batchesPerEpoch),()=>`For fitDataset(), config.batchesPerEpoch is expected to be a positive integer if specified, but got ${n.batchesPerEpoch}`),k.assert(n.validationSplit==null,()=>"`validationSplit` is not supported by `fitDataset()`. Use validationData instead."),e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;try{let r=n.validationData!=null,s,i;if(r)if(bk(n.validationData))k.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=JV(n.validationData);s=g.xs,i=g.ys}let o=e.makeTrainFunction(),l=e.getDedupedMetricsNames(),u;r?u=l.slice().concat(l.map(g=>"val_"+g)):u=l.slice();let p=L2(n.callbacks,n.yieldEvery),d=n.verbose==null?1:n.verbose,{callbackList:c,history:h}=z2(p,d,n.epochs,null,null,QV(t,n),null,r,u);c.setModel(e),e.history=h,await c.onTrainBegin(),e.stopTraining_=!1;let m=n.initialEpoch==null?0:n.initialEpoch,f=await t.iterator();for(;m<n.epochs;){let g={};await c.onEpochBegin(m);let y=0,b=0;for(a||(f=await t.iterator());!a||y<n.batchesPerEpoch;){let x=await f.next();if(a&&x.done){console.warn(`You provided \`batchesPerEpoch\` as ${n.batchesPerEpoch}, but your dataset iterator ran out of data after ${y} batches; interrupting training. Make sure that your dataset can generate at least \`batchesPerEpoch * epochs\` batches (in this case, ${n.batchesPerEpoch*n.epochs} batches). You may need to use the repeat() function when building your dataset.`);break}if(x.value!=null){let{xs:v,ys:w}=K2(e,x.value),T={};T.batch=b,T.size=v[0].shape[0],await c.onBatchBegin(b,T);let C=[];if(n.classWeight!=null){let P=j2(n.classWeight,e.outputNames);for(let F=0;F<P.length;++F)C.push(await q2(w[F],null,P[F]))}let E=v.concat(w).concat(C),$=o(E);De(E);for(let P=0;P<l.length;++P){let F=l[P],S=$[P];T[F]=S,en(S)}await c.onBatchEnd(b,T),R2(T),b++,y++}if(a?y>=n.batchesPerEpoch:x.done){if(r){let v;bk(n.validationData)?v=vt(await e.evaluateDataset(n.validationData,{batches:n.validationBatches})):v=vt(e.evaluate(s,i,{batchSize:n.validationBatchSize==null?YV:n.validationBatchSize,verbose:0}));for(let w=0;w<e.metricsNames.length;++w)g[`val_${e.metricsNames[w]}`]=v[w]}break}if(e.stopTraining_)break}if(await c.onEpochEnd(m,g),m++,e.stopTraining_)break}return await c.onTrainEnd(),await e.history.syncData(),e.history}finally{e.isTraining=!1}}function QV(e,t){let n=null;return t.batchesPerEpoch!=null?n=t.batchesPerEpoch:Number.isFinite(e.size)&&(n=e.size),n}function bk(e){return typeof e.iterator=="function"}function eU(e){return typeof e.next=="function"}async function tU(e,t,n){n=n||{};let a=n.batches!=null,r=e.testFunction,s=[];if(n.verbose>0)throw new Oe("Verbose mode is not implemented yet.");k.assert(!a||n.batches>0&&Number.isInteger(n.batches),()=>`Test loop expects \`batches\` to be a positive integer, but received ${JSON.stringify(n.batches)}`);let i=eU(t)?t:await t.iterator(),o=0,l=0;for(;!a||l<n.batches;){let u=await i.next();if(s=O(()=>{if(u.value){let{xs:p,ys:d}=K2(e,u.value),c=p.concat(d),h=O(()=>r(c));if(De(c),l===0)for(let f=0;f<h.length;++f)s.push(ke(0));let m=c[0].shape[0];for(let f=0;f<h.length;++f){let g=h[f],y=s[f];s[f]=O(()=>J(s[f],W(m,g))),l>0&&De(y)}De(h),o+=m,++l}return s}),u.done){a&&console.warn(`Your dataset iterator ran out of data during evaluateDataset(). Interrupting evalution. Make sure that your dataset can generate at least \`batches\` batches (in this case, ${n.batches} batches). You may need to use the repeat() function when building your dataset.`);break}}for(let u=0;u<s.length;++u){let p=s[u];s[u]=fe(s[u],o),De(p)}return Pn(s)}function qb(e){k.assert(e>0&&Number.isInteger(e),()=>`batchSize is required to be a positive integer, but got ${e}`)}function zp(e,t,n){return e==null?[null]:Array.isArray(e)?e.map(a=>ei(a,t,n-t)):ei(e,t,n-t)}function tw(e,t){return O(()=>e==null?null:Array.isArray(e)?e.map(n=>tw(n,t)):C2(e,t.dtype==="int32"?t:oe(t,"int32")))}function Kb(e,t){let n=[],a=0,r=null;for(;a<e;)r=a+t,r>=e&&(r=e),n.push([a,r]),a=r;return n}async function nU(e,t,n,a,r,s,i,o,l,u,p,d,c,h,m){r==null&&(r=32),s==null&&(s=1),p==null&&(p=!0),c==null&&(c=0);let f=!1;if(l!=null&&u!=null&&(f=!0),m!=null&&(f=!0,h==null))throw new H("Can only use `validationSteps` when doing step-wise training, i.e., `stepsPerEpoch` must be set.");let g=e.checkNumSamples(n,r,h,"steps_per_epoch"),y;g!=null&&(y=Xa(0,g)),i==null&&(i=1);let{callbackList:b,history:x}=z2(o,i,s,c,g,h,r,f,d);b.setModel(e),e.history=x,await b.onTrainBegin(),e.stopTraining_=!1;for(let v=c;v<s;++v){await b.onEpochBegin(v);let w={};if(h!=null)throw new Oe("stepsPerEpoch mode is not implemented yet.");{if(p==="batch")throw new Oe("batch shuffling is not implemneted yet");p&&k.shuffle(y);let T=qe(y),C=Kb(g,r);for(let E=0;E<C.length;++E){let $={};if(await b.onBatchBegin(E,$),O(()=>{let P=C[E][0],F=C[E][1],S=ei(T,P,F-P);$.batch=E,$.size=F-P;let M=tw(n,S),B=t(M);for(let j=0;j<a.length;++j){let q=a[j],K=B[j];$[q]=K,en(K)}if(E===C.length-1&&f){let j=e.testLoop(l,u,r);for(let q=0;q<a.length;++q){let K=a[q],Q=j[q];en(Q),w["val_"+K]=Q}}}),await b.onBatchEnd(E,$),R2($),e.stopTraining_)break}T.dispose()}if(await b.onEpochEnd(v,w),e.stopTraining_)break}return await b.onTrainEnd(),await e.history.syncData(),e.history}async function aU(e,t,n,a={}){if(e.isTraining)throw new Error("Cannot start training because another fit() call is ongoing.");e.isTraining=!0;let r,s,i,o,l,u,p,d,c;try{let h=a.batchSize==null?32:a.batchSize;qb(h);let m=!1,f=await e.standardizeUserData(t,n,a.sampleWeight,a.classWeight,m,h);r=f[0],s=f[1],c=f[2];let g=!1,y;if(a.validationData!=null&&a.validationData.length>0){if(g=!0,a.validationData.length===2)l=a.validationData[0],u=a.validationData[1];else throw a.validationData.length===3?new Oe("validationData including sample weights is not supported yet."):new H(`When passing validation data, it must contain 2 (valX, valY) or 3 (valX, valY, valSampleWeight) items; ${a.validationData} is invalid.`);let E=!0,$=await e.standardizeUserData(l,u,null,null,E,h);p=$[0],d=$[1],y=p.concat(d)}else if(a.validationSplit!=null&&a.validationSplit>0&&a.validationSplit<1){g=!0;let E=Math.floor(r[0].shape[0]*(1-a.validationSplit)),$=r[0].shape[0];p=zp(r,E,$),i=r,r=zp(r,0,E),d=zp(s,E,$),o=s,s=zp(s,0,E),y=p.concat(d)}else a.validationSteps!=null&&(g=!0);let b=r.concat(s).concat(c);e.checkTrainableWeightsConsistency();let x=e.makeTrainFunction(),v=e.getDedupedMetricsNames(),w,T;g?(e.makeTestFunction(),w=e.testFunction,T=v.slice().concat(v.map(E=>"val_"+E))):(w=null,y=[],T=v.slice());let C=L2(a.callbacks,a.yieldEvery);return await nU(e,x,b,v,h,a.epochs,a.verbose,C,w,y,a.shuffle,T,a.initialEpoch,null,null)}finally{e.isTraining=!1,Ba(r,t),Ba(s,n),Ba(i,t),Ba(o,n),Ba(p,l),Ba(d,u),c!=null&&De(c)}}function X2(e){let t=[];e instanceof Ae&&(e=[e]);for(let n=0;n<e.length;++n){let a=e[n];if(a.rank===1)t.push(qc(a,1));else{if(a.rank===0)throw new Error("Expected tensor to be at least 1D, but received a 0D tensor (scalar).");t.push(a)}}return t}function Ba(e,t){if(e==null)return;let n=[];if(t instanceof Ae)n.push(t.id);else if(Array.isArray(t))t.forEach(r=>n.push(r.id));else if(t!=null)for(let r in t){let s=t[r];n.push(s.id)}let a=[];if(e instanceof Ae)n.indexOf(e.id)===-1&&a.push(e);else if(Array.isArray(e))e.forEach(r=>{n.indexOf(r.id)===-1&&a.push(r)});else if(e!=null)for(let r in e){let s=e[r];n.indexOf(s.id)===-1&&a.push(s)}a.forEach(r=>{r.isDisposed||r.dispose()})}function rU(e){return e instanceof Ae}function Xb(e){return Array.isArray(e)}function xk(e){return!rU(e)&&!Xb(e)}function vk(e,t,n,a=!0,r=""){if(t==null||t.length===0){if(e!=null){let i=!1;if(Xb(e)&&e.length>0)i=!0;else if(xk(e)){for(let o in e)if(e.hasOwnProperty(o)){i=!0;break}}else i=!0;if(i)throw new H(`Error when checking model ${r} expected no data, but got ${e}`)}return[]}if(e==null)return t.map(i=>null);let s;if(xk(e)){e=e,s=[];for(let i of t){if(e[i]==null)throw new H(`No data provided for "${i}". Need data for each key in: ${t}`);s.push(e[i])}}else if(Xb(e)){if(e=e,e.length!==t.length)throw new H(`Error when checking model ${r}: the Array of Tensors that you are passing to your model is not the size the model expected. Expected to see ${t.length} Tensor(s), but instead got the following list of Tensor(s): ${e}`);s=e}else{if(e=e,t.length>1)throw new H(`The model ${r} expects ${t.length} Tensor(s), but only received one Tensor. Found: Tensor with shape ${e.shape}`);s=[e]}if(s=X2(s),n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new H(`Error when checking ${r}: expected ${t[i]} to have ${n[i].length} dimension(s). but got array with shape ${o.shape}`);for(let l=0;l<n[i].length;++l){if(l===0&&!a)continue;let u=o.shape[l],p=n[i][l];if(p!=null&&p>=0&&u!==p)throw new H(`${r} expected a batch of elements where each example has shape [${n[i].slice(1,n[i].length)}] (i.e.,tensor shape [*,${n[i].slice(1,n[i].length)}]) but the ${r} received an input with ${o.shape[0]} examples, each with shape [${o.shape.slice(1,o.shape.length)}] (tensor shape [${o.shape}])`)}}return s}function sU(e,t,n){let a=as(e.map(s=>s.shape[0]));a.sort();let r=as(t.map(s=>s.shape[0]));if(r.sort(),a.length>1)throw new H(`All input Tensors (x) should have the same number of samples. Got array shapes: ${JSON.stringify(e.map(s=>s.shape))}`);if(r.length>1)throw new H(`All target Tensors (y) should have the same number of samples. Got array shapes: ${JSON.stringify(t.map(s=>s.shape))}`);if(a.length>0&&r.length>0&&!k.arraysEqual(a,r))throw new H(`Input Tensors should have the same number of samples as target Tensors. Found ${a[0]} input sample(s) and ${r[0]} target sample(s).`)}function iU(e,t,n){let a=[wo,Bf,rc];for(let r=0;r<e.length;++r){let s=e[r],i=t[r],o=n[r];if(i!=null){if(i===rc&&s.shape[s.shape.length-1]===1)throw new H(`You are passing a target array of shape ${s.shape} while using a loss 'categorical_crossentropy'. 'categorical_crossentropy'expects targets to be binary matrices (1s and 0s) of shape [samples, classes].`);if(a.indexOf(i)!==-1){let l=s.shape.slice(1),u=o.slice(1);for(let p=0;p<l.length;++p){let d=l[p],c=u[p];if(c!=null&&d!==c)throw new H(`A target Tensor with shape ${s.shape} was passed for an output of shape ${o}, while using a loss function that expects targets to have the same shape as the output.`)}}}}}function wk(e,t,n,a=!0,r=""){let s;if(Array.isArray(e)){if(e.length!==t.length)throw new H(`Error when checking model ${r}: the Array of Tensors that you are passing to your model is not the size the the model expected. Expected to see ${t.length} Tensor(s), but instead got ${e.length} Tensors(s).`);s=e}else{if(t.length>1)throw new H(`The model expects ${t.length} ${r} Tensors, but only received one Tensor. Found: array with shape ${JSON.stringify(e.shape)}.`);s=[e]}if(n!=null)for(let i=0;i<t.length;++i){if(n[i]==null)continue;let o=s[i];if(o.shape.length!==n[i].length)throw new H(`Error when checking ${r}: expected ${t[i]} to have ${n[i].length} dimension(s), but got array with shape ${JSON.stringify(o.shape)}`);for(let l=0;l<n[i].length;++l){if(l===0&&!a)continue;let u=o.shape[l],p=n[i][l];if(p!=null&&p!==u)throw new H(`Error when checking ${r}: expected ${t[i]} to have shape ${JSON.stringify(n[i])} but got array with shape ${JSON.stringify(o.shape)}.`)}}}function oU(e,t){if(e==null||Array.isArray(e)&&e.length===0)return t.map(a=>[]);let n;if(typeof e=="string"||typeof e=="function")n=[e];else if(Array.isArray(e)||typeof e=="object")n=e;else throw new TypeError(`Type of metrics argument not understood. Expected an string,function, Array, or Object, found: ${e}`);if(Array.isArray(n))return t.map(a=>n);{let a=[];for(let r of t){let s=n.hasOwnProperty(r)?n[r]:[];Array.isArray(s)||(s=[s]),a.push(s)}return a}}var lU="layers-model",Er=class extends rr{constructor(e){super(e),this.isTraining=!1}summary(e,t,n=console.log){if(!this.built)throw new H("This model has never been called, thus its weights have not been created yet. So no summary can be displayed. Build the model first (e.g., by calling it on some test data).");zV(this,e,t,n)}compile(e){if(e.loss==null&&(e.loss=[]),this.loss=e.loss,typeof e.optimizer=="string")this.optimizer_=LV(e.optimizer),this.isOptimizerOwned=!0;else{if(!(e.optimizer instanceof Dr))throw new H("User-defined optimizer must be an instance of tf.Optimizer.");this.optimizer_=e.optimizer,this.isOptimizerOwned=!1}let t=[];if(!Array.isArray(e.loss)&&typeof e.loss!="string"&&typeof e.loss!="function"){e.loss=e.loss;for(let s in e.loss)if(this.outputNames.indexOf(s)===-1)throw new H(`Unknown entry in loss dictionary: "${s}". Only expected the following keys: ${this.outputNames}`);for(let s of this.outputNames)e.loss[s]==null&&console.warn(`Output "${s}" is missing from loss dictionary. We assume this was done on purpose, and we will not be expecting data to be passed to ${s} during training`),t.push(gb(e.loss[s]))}else if(Array.isArray(e.loss)){if(e.loss.length!==this.outputs.length)throw new H(`When passing an Array as loss, it should have one entry per model output. The model has ${this.outputs.length} output(s), but you passed loss=${e.loss}.`);t=e.loss.map(s=>gb(s))}else{let s=gb(e.loss);this.outputs.forEach(i=>{t.push(s)})}this.lossFunctions=t,this.feedOutputNames=[],this.feedOutputShapes=[],this.feedLossFns=[];for(let s=0;s<this.outputs.length;++s){let i=this.internalOutputShapes[s],o=this.outputNames[s];this.feedOutputNames.push(o),this.feedOutputShapes.push(i),this.feedLossFns.push(this.lossFunctions[s])}let n=[];this.metrics=e.metrics,this.metricsNames=["loss"],this.metricsTensors=[],Qs("loss",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=this.lossFunctions[s];this.outputs.length>1&&(this.metricsTensors.push([i,s]),this.metricsNames.push(this.outputNames[s]+"_loss"))}});let a=oU(e.metrics,this.outputNames),r=(s,i,o)=>{this.outputNames.length>1&&(i=this.outputNames[s]+"_"+i),this.metricsNames.push(i),this.metricsTensors.push([o,s])};Qs("metric",()=>{for(let s=0;s<this.outputs.length;++s){if(n.indexOf(s)!==-1)continue;let i=a[s];(o=>{let l="",u,p,d;for(let c of o){if(typeof c=="string"&&["accuracy","acc","crossentropy","ce"].indexOf(c)!==-1){let m=this.internalOutputShapes[s];m[m.length-1]===1||this.lossFunctions[s]===Bf?["accuracy","acc"].indexOf(c)!==-1?p=Jv:["crossentropy","ce"].indexOf(c)!==-1&&(p=V2):this.lossFunctions[s]===Jh?["accuracy","acc"].indexOf(c)!==-1?p=U2:["crossentropy","ce"].indexOf(c)!==-1&&(p=G2):["accuracy","acc"].indexOf(c)!==-1?p=Zv:["crossentropy","ce"].indexOf(c)!==-1&&(p=Qv);let f;["accuracy","acc"].indexOf(c)!==-1?f="acc":["crossentropy","ce"].indexOf(c)!==-1&&(f="ce"),d=p,u=l+f}else d=OV(c),u=l+yh(c);let h;Qs(u,()=>{h=d}),r(s,u,h)}})(i)}}),this.collectedTrainableWeights=this.trainableWeights}checkTrainableWeightsConsistency(){this.collectedTrainableWeights!=null&&this.trainableWeights.length!==this.collectedTrainableWeights.length&&console.warn("Discrepancy between trainableweights and collected trainable weights. Did you set `model.trainable` without calling `model.compile()` afterwards?")}evaluate(e,t,n={}){let a=n.batchSize==null?32:n.batchSize;qb(a);let r=!0,s=this.standardizeUserDataXY(e,t,r,a);try{let i=s[0].concat(s[1]);this.makeTestFunction();let o=this.testFunction,l=this.testLoop(o,i,a,n.verbose,n.steps);return Pn(l)}finally{Ba(s[0],e),Ba(s[1],t)}}async evaluateDataset(e,t){return this.makeTestFunction(),tU(this,e,t)}checkNumSamples(e,t,n,a="steps"){let r;if(n!=null){if(r=null,t!=null)throw new H(`If ${a} is set, batchSize must be null or undefined.Got batchSize = ${t}`)}else if(e!=null)Array.isArray(e)?r=e[0].shape[0]:r=e.shape[0];else throw new H(`Either the input data should have a defined shape, or ${a} shoud be specified.`);return r}execute(e,t){if(Array.isArray(t)&&t.length===0)throw new H("`outputs` is an empty Array, which is not allowed.");let n=Array.isArray(t),a=n?t:[t],r=this.retrieveSymbolicTensors(a),s=new Ys;if(e instanceof Ae&&(e=[e]),Array.isArray(e)){if(e.length!==this.inputs.length)throw new H(`The number of inputs provided (${e.length}) does not match the number of inputs of this model (${this.inputs.length}).`);for(let o=0;o<this.inputs.length;++o)s.add(this.inputs[o],e[o])}else for(let o of this.inputs){let l=e[o.name];if(l==null)throw new H(`No value is provided for the model's input ${o.name}`);s.add(o,l)}let i=Lp(r,s);return n?i:i[0]}retrieveSymbolicTensors(e){let t=di(null,e.length),n=e.length;for(let a of this.layers){let r=Array.isArray(a.output)?a.output:[a.output],s=r.map(i=>i.name);for(let i=0;i<e.length;++i){let o=s.indexOf(e[i]);if(o!==-1&&(t[i]=r[o],n--),n===0)break}if(n===0)break}if(n>0){let a=[];throw t.forEach((r,s)=>{r==null&&a.push(e[s])}),new H(`Cannot find SymbolicTensors for output name(s): ${JSON.stringify(a)}`)}return t}predictLoop(e,t=32,n=!1){return O(()=>{let a=this.checkNumSamples(e);if(n)throw new Oe("Verbose predictLoop() is not implemented yet.");let r=Kb(a,t),s=this.outputs.map(i=>[]);for(let i=0;i<r.length;++i)O(()=>{let o=r[i][0],l=r[i][1],u=zp(e,o,l),p=[];if(Array.isArray(u))for(let c=0;c<u.length;++c)p.push({key:this.inputs[c],value:u[c]});else p.push({key:this.inputs[0],value:u});let d=new Ys(p);return Lp(this.outputs,d)}).forEach((o,l)=>s[l].push(o));return Pn(s.map(i=>Qe(i,0)))})}predict(e,t={}){let n=X2(e);wk(n,this.inputNames,this.feedInputShapes,!1);try{let a=t.batchSize==null?32:t.batchSize;return qb(a),this.predictLoop(n,a)}finally{Ba(n,e)}}predictOnBatch(e){wk(e,this.inputNames,this.feedInputShapes,!0);let t=(Array.isArray(e)?e[0]:e).shape[0];return this.predictLoop(e,t)}standardizeUserDataXY(e,t,n=!0,a){if(this.optimizer_==null)throw new Va("You must compile a model before training/testing. Use LayersModel.compile(modelCompileArgs).");let r=[];for(let s=0;s<this.feedOutputShapes.length;++s){let i=this.feedOutputShapes[s];this.feedLossFns[s]===Jh?r.push(i.slice(0,i.length-1).concat([1])):r.push(i)}if(e=vk(e,this.feedInputNames,this.feedInputShapes,!1,"input"),t=vk(t,this.feedOutputNames,r,!1,"target"),sU(e,t,null),iU(t,this.feedLossFns,this.feedOutputShapes),this.stateful&&a!=null&&a>0&&e[0].shape[0]%a!==0)throw new H(`In a stateful network, you should only pass inputs with a number of samples that is divisible by the batch size ${a}. Found: ${e[0].shape[0]} sample(s).`);return[e,t]}async standardizeUserData(e,t,n,a,r=!0,s){let[i,o]=this.standardizeUserDataXY(e,t,r,s);if(n!=null)throw new Error("sample weight is not supported yet.");let l=null;if(a!=null){let u=j2(a,this.outputNames);l=[];for(let p=0;p<u.length;++p)l.push(await q2(o[p],null,u[p]))}return[i,o,l]}testLoop(e,t,n,a=0,r){return O(()=>{let s=this.checkNumSamples(t,n,r,"steps"),i=[];if(a>0)throw new Oe("Verbose mode is not implemented yet.");if(r!=null)throw new Oe("steps mode in testLoop() is not implemented yet");{let o=Kb(s,n),l=qe(Xa(0,s));for(let u=0;u<o.length;++u){let p=o[u][0],d=o[u][1],c=ei(l,p,d-p),h=tw(t,c),m=e(h);if(u===0)for(let f=0;f<m.length;++f)i.push(ke(0));for(let f=0;f<m.length;++f){let g=m[f];i[f]=J(i[f],W(d-p,g))}}for(let u=0;u<i.length;++u)i[u]=fe(i[u],s)}return i})}getDedupedMetricsNames(){let e=this.metricsNames,t=[];for(let n=0;n<e.length;++n){let a=e[n],r=a;sk(e,a)>1&&(r+=`_${sk(e.slice(0,n),a)}`),t.push(r)}return t}makeTrainFunction(){return e=>{let t=[],n=e.slice(0,this.inputs.length),a=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),r=e.slice(this.inputs.length+this.outputs.length,this.inputs.length+this.outputs.length*2),s=[],i=()=>{let u=[];for(let h=0;h<this.inputs.length;++h)u.push({key:this.inputs[h],value:n[h]});let p=new Ys(u),d=Lp(this.outputs,p,{training:!0}),c;for(let h=0;h<this.lossFunctions.length;++h){let m=this.lossFunctions[h](a[h],d[h]);r[h]!=null&&(m=XV(m,r[h]));let f=Et(m);t.push(f),h===0?c=m:c=J(c,m)}for(let h=0;h<this.metricsTensors.length;++h){let m;if(this.outputs.length>1&&h<this.outputs.length)m=t[h];else{let f=this.metricsTensors[h][0],g=this.metricsTensors[h][1];m=Et(f(a[g],d[g]))}en(m),s.push(m)}return c=Et(c),this.calculateLosses().forEach(h=>{c=J(c,h)}),c},o=this.collectedTrainableWeights.map(u=>u.read()),l=!0;return[this.optimizer_.minimize(i,l,o)].concat(s)}}makeTestFunction(){this.testFunction=e=>O(()=>{let t=[],n,a=e.slice(0,this.inputs.length),r=e.slice(this.inputs.length,this.inputs.length+this.outputs.length),s=[];for(let l=0;l<this.inputs.length;++l)s.push({key:this.inputs[l],value:a[l]});let i=new Ys(s),o=Lp(this.outputs,i);for(let l=0;l<this.lossFunctions.length;++l){let u=this.lossFunctions[l],p=Et(u(r[l],o[l]));l===0?n=p:n=J(n,p),t.push(n)}for(let l=0;l<this.metricsTensors.length;++l){let u=this.metricsTensors[l][0],p=this.metricsTensors[l][1],d=Et(u(r[p],o[p]));t.push(d)}return t})}async fit(e,t,n={}){return aU(this,e,t,n)}async fitDataset(e,t){return ZV(this,e,t)}async trainOnBatch(e,t){let n=await this.standardizeUserData(e,t),a=n[0],r=n[1],s=this.makeTrainFunction()(a.concat(r)),i=[];for(let o of s){let l=await o.data();i.push(l[0])}return De(s),Ba(n[0],e),Ba(n[1],t),Pn(i)}getNamedWeights(e){let t=[],n=e!=null&&e.trainableOnly,a=n?this.trainableWeights:this.weights,r=this.getWeights(n);for(let s=0;s<a.length;++s)n&&!a[s].trainable||t.push({name:a[s].originalName,tensor:r[s]});return t}set stopTraining(e){this.stopTraining_=e}get stopTraining(){return this.stopTraining_}get optimizer(){return this.optimizer_}set optimizer(e){this.optimizer_!==e&&(this.optimizer_=e,this.isOptimizerOwned=!1)}dispose(){let e=super.dispose();if(e.refCountAfterDispose===0&&this.optimizer!=null&&this.isOptimizerOwned){let t=Hh().numTensors;this.optimizer_.dispose(),e.numDisposedVariables+=t-Hh().numTensors}return e}getLossIdentifiers(){let e;if(typeof this.loss=="string")e=Sr(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=>Sr(t))}else{let t=Object.keys(this.loss);e={};let n=this.loss;for(let a of t)if(typeof n[a]=="string")e[a]=Sr(n[a]);else throw new Error("Serialization of non-string loss is not supported.")}return e}getMetricIdentifiers(){if(typeof this.metrics=="string"||typeof this.metrics=="function")return[Sr(yh(this.metrics))];if(Array.isArray(this.metrics))return this.metrics.map(e=>Sr(yh(e)));{let e={};for(let t in this.metrics)e[t]=Sr(yh(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=sc(e.optimizer_config),n=ja(t),a;if(typeof e.loss=="string")a=qs(e.loss);else if(Array.isArray(e.loss))a=e.loss.map(s=>qs(s));else if(e.loss!=null){a={};for(let s in e.loss)a[s]=qs(e.loss[s])}let r;if(Array.isArray(e.metrics))r=e.metrics.map(s=>qs(s));else if(e.metrics!=null){r={};for(let s in e.metrics)r[s]=qs(e.metrics[s])}this.compile({loss:a,metrics:r,optimizer:n})}async save(e,t){if(typeof e=="string"){let i=Qt.getSaveHandlers(e);if(i.length===0)throw new H(`Cannot find any save handlers for URL '${e}'`);if(i.length>1)throw new H(`Found more than one (${i.length}) save handlers for URL '${e}'`);e=i[0]}if(e.save==null)throw new H("LayersModel.save() cannot proceed because the IOHandler provided does not have the `save` attribute defined.");let n=await Qt.encodeWeights(this.getNamedWeights(t)),a=!1,r=null,s={modelTopology:this.toJSON(r,a),format:lU,generatedBy:`TensorFlow.js tfjs-layers v${ew}`,convertedBy:null};if((t==null?!1:t.includeOptimizer)&&this.optimizer!=null){s.trainingConfig=this.getTrainingConfig();let i="optimizer",{data:o,specs:l}=await Qt.encodeWeights(await this.optimizer.getWeights(),i);n.specs.push(...l),n.data=Qt.concatenateArrayBuffers([n.data,o])}return this.userDefinedMetadata!=null&&(mk(this.userDefinedMetadata,this.name,!0),s.userDefinedMetadata=this.userDefinedMetadata),s.weightData=n.data,s.weightSpecs=n.specs,e.save(s)}setUserDefinedMetadata(e){mk(e,this.name),this.userDefinedMetadata=e}getUserDefinedMetadata(){return this.userDefinedMetadata}};Er.className="Model";se.registerClass(Er);var Y2=class extends Er{};Y2.className="Functional";se.registerClass(Y2);async function uU(e,t){"modelTopology"in e||(e={modelTopology:e}),e=e;let n=e.modelTopology;n.model_config!=null&&(n=n.model_config);let a=sc(n),r=ja(a,t);if(e.weightsManifest!=null){let s=await Qt.loadWeights(e.weightsManifest,e.pathPrefix,r.weights.map(o=>o.originalName)),i={};for(let o of r.weights)i[o.originalName]=s[o.originalName];r.loadWeights(i),De(s)}return r}async function pU(e,t){if(t==null&&(t={}),typeof e=="string"){let n=Qt.getLoadHandlers(e,t);if(n.length===0)n.push(Qt.browserHTTPRequest(e,t));else if(n.length>1)throw new H(`Found more than one (${n.length}) load handlers for URL '${e}'`);e=n[0]}return cU(e,void 0,t)}async function cU(e,t,n){if(n==null&&(n={}),e.load==null)throw new H("Cannot proceed with model loading because the IOHandler provided does not have the `load` method implemented.");let a=await e.load(),r=a.modelTopology;r.model_config!=null&&(r=r.model_config);let s=n.strict==null?!0:n.strict,i=a.weightData!=null&&a.weightSpecs!=null&&s,o=ja(sc(r),t,i),l=a.trainingConfig;if(l!=null&&o.loadTrainingConfig(l),a.userDefinedMetadata!=null&&o.setUserDefinedMetadata(a.userDefinedMetadata),a.weightData!=null){if(a.weightSpecs==null)throw new H("LayersModel artifacts contains weight data, but not weight specs. Therefore loading of weights cannot proceed.");let{modelWeights:u,optimizerWeights:p}=dU(a.weightData,a.weightSpecs);o.loadWeights(u,s),o.optimizer!=null&&p.length>0&&await o.optimizer.setWeights(p),De(u),De(p.map(d=>d.tensor))}return o}function dU(e,t){let n=Qt.decodeWeights(e,t),a={},r=[];return t.forEach(s=>{s.group==="optimizer"?r.push({name:s.name,tensor:n[s.name]}):a[s.name]=n[s.name]}),{modelWeights:a,optimizerWeights:r}}var Cl=class extends Er{constructor(e){if(super({inputs:[],outputs:[]}),e=e||{},this.trainable=!0,this.built=!1,this.name=e.name!=null?e.name:Lf("sequential_"),e.layers!=null)for(let t of e.layers)this.add(t)}checkShape(e){if(e.inboundNodes[0].outputTensors[0].shape.some(t=>t<0))throw new H(`Negative dimension size caused by adding layer ${e.name} with input shape [${e.inboundNodes[0].inputTensors[0].shape}]`)}add(e){let t=e instanceof Cl||e instanceof Er,n;if(t){if(n=e,n.outputs.length!==1)throw new H("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");if(n.inputs.length!==1)throw new H("All layers in a Sequential model should have a single input tensor. For multi-input layers, use the functional API.")}if(this.outputs.length===0){if(e.inboundNodes.length===0){if(e.batchInputShape==null)throw new H("The first layer in a Sequential model must get an `inputShape` or `batchInputShape` argument.");let a=D2({batchShape:e.batchInputShape,dtype:e.dtype,name:e.name+"_input"});e.apply(a)}if(t)this.outputs=n.outputs,this.inputs=n.inputs;else{if(e.inboundNodes.length!==1)throw new H(`A layer added to a Sequential model must not already be connected somewhere else. LayersModel received layer ${e.name} which has ${e.inboundNodes.length} pre-existing inbound connections.`);if(e.inboundNodes[0].outputTensors.length!==1)throw new H("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[e.inboundNodes[0].outputTensors[0]],this.inputs=F2(this.outputs[0])}this.inboundNodes=[],new zf({outboundLayer:this,inboundLayers:[],nodeIndices:[],tensorIndices:[],inputTensors:this.inputs,outputTensors:this.outputs,inputMasks:di(null,this.inputs.length),outputMasks:[null],inputShapes:this.inputs.map(a=>a.shape),outputShapes:this.outputs[0].shape})}else{let a=e.apply(this.outputs[0]);if(Array.isArray(a))throw new TypeError("All layers in a Sequential model should have a single output tensor. For multi-output layers, use the functional API.");this.checkShape(e),this.outputs=[a],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}this.layers.push(e),this.built=!1}pop(){if(this.layers.length===0)throw new TypeError("There are no layers in the model.");if(this.layers.pop(),this.layers.length===0)this.outputs=[],this.inboundNodes=[],this.outboundNodes=[];else{let e=this.layers.length-1;this.layers[e].outboundNodes=[],this.outputs=[this.layers[e].output],this.inboundNodes[0].outputTensors=this.outputs,this.inboundNodes[0].outputShapes=[this.outputs[0].shape]}}call(e,t){return this.model==null&&this.build(),this.model.call(e,t)}build(e){if(it(e),this.inputs.length===0||this.outputs.length===0)throw new TypeError("Sequential model cannot be built: model is empty. Add some layers first.");this.model=new Er({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 Va("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 Va("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 Va("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 Va("The model needs to be compiled before being used.");return this.model.fitDataset(e,t)}async trainOnBatch(e,t){return this.model.trainOnBatch(e,t)}static fromConfig(e,t,n={},a=!1){let r,s={};if(t instanceof Array){if(t[0].className==null||t[0].className==="Merge")throw new H("Legacy serialization format not supported yet.");r=t}else k.assert(t.layers!=null,()=>"When the config data for a Sequential model is not an Array, it must be an Object that contains the 'layers' field."),r=t.layers,delete t.layers,s=t;let i=new e(s);if(!(i instanceof Cl))throw new Oe(`Sequential.fromConfig called on non-Sequential input: ${i}`);for(let o of r){let l=ja(o,void 0,a);a&&l.setFastWeightInitDuringBuild(!0),i.add(l)}return i}set stopTraining(e){if(this.model==null)throw new H("Cannot set the stopTraining property of a sequential model before it is compiled.");this.model.stopTraining=e}get stopTraining(){if(this.model==null)throw new H("Cannot get the stopTraining property of a sequential model before it is compiled.");return this.model.stopTraining}getConfig(){let e=[];for(let t of this.layers){let n={};n.className=t.getClassName(),n.config=t.getConfig(),e.push(n)}return{name:this.name,layers:e}}};Cl.className="Sequential";se.registerClass(Cl);function hU(e){return new Er(e)}function mU(e){return new Cl(e)}function fU(e,t){return t==null&&(t={}),pU(e,t)}function J2(e){return D2(e)}function gU(e,t){Sa.registerCallbackConstructor(e,t)}var Hn=class extends se.Serializable{getConfig(){return{}}},Z2=class extends Hn{apply(e,t=1){return V4(e,t)}};Z2.className="elu";se.registerClass(Z2);var Q2=class extends Hn{apply(e){return cf(e)}};Q2.className="selu";se.registerClass(Q2);var eN=class extends Hn{apply(e){return Xe(e)}};eN.className="relu";se.registerClass(eN);var tN=class extends Hn{apply(e){return O(()=>zu(6,Xe(e)))}};tN.className="relu6";se.registerClass(tN);var nN=class extends Hn{apply(e){return e}};nN.className="linear";se.registerClass(nN);var aN=class extends Hn{apply(e){return ma(e)}};aN.className="sigmoid";se.registerClass(aN);var rN=class extends Hn{apply(e){return G4(e)}};rN.className="hardSigmoid";se.registerClass(rN);var sN=class extends Hn{apply(e){return bo(e)}};sN.className="softplus";se.registerClass(sN);var iN=class extends Hn{apply(e){return U4(e)}};iN.className="softsign";se.registerClass(iN);var oN=class extends Hn{apply(e){return li(e)}};oN.className="tanh";se.registerClass(oN);var nw=class extends Hn{apply(e,t=-1){return Ja(e,t)}};nw.className="softmax";se.registerClass(nw);var lN=class extends Hn{apply(e,t=-1){return af(e,t)}};lN.className="logSoftmax";se.registerClass(lN);var uN=class extends Hn{apply(e,t=1){return O(()=>W(ma(W(e,t)),e))}};uN.className="swish";se.registerClass(uN);var pN=class extends Hn{apply(e){return O(()=>W(e,li(bo(e))))}};pN.className="mish";se.registerClass(pN);function cs(e){return e.getClassName()}function bb(e,t={}){return Hc(e,se.SerializationMap.getMap().classNameMap,t,"activation")}function ds(e){if(e==null){let t={};return t.className="linear",t.config={},bb(t)}if(typeof e=="string"){let t={};return t.className=e,t.config={},bb(t)}else return e instanceof Hn?e:bb(e)}function aw(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 cN=class extends se.Serializable{},Yc=class extends cN{constructor(e){super(),aw(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=J(t,be(W(this.l1,zt(e))))),this.hasL2&&(t=J(t,be(W(this.l2,Kc(e))))),V(t,[])})}getConfig(){return{l1:this.l1,l2:this.l2}}static fromConfig(e,t){return new e({l1:t.l1,l2:t.l2})}};Yc.className="L1L2";se.registerClass(Yc);function yU(e){return aw(e),new Yc({l1:e!=null?e.l1:null,l2:0})}function bU(e){return aw(e),new Yc({l2:e!=null?e.l2:null,l1:0})}var kk={l1l2:"L1L2"};function dt(e){return Rv(e)}function Ik(e,t={}){return Hc(e,se.SerializationMap.getMap().classNameMap,t,"regularizer")}function Nt(e){if(e==null)return null;if(typeof e=="string"){let t={className:e in kk?kk[e]:e,config:{}};return Ik(t)}else return e instanceof cN?e:Ik(e)}var rw=class extends Ye{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null&&(this.maxValue=e.maxValue)}call(e,t){e=ze(e);let n=Xe(e);return this.maxValue!=null&&(n=nn(n,0,this.maxValue)),n}computeOutputShape(e){return e}getConfig(){let e={maxValue:this.maxValue},t=super.getConfig();return Object.assign(e,t),e}};rw.className="ReLU";se.registerClass(rw);var sw=class extends Ye{constructor(e){super(e==null?{}:e),this.DEFAULT_ALPHA=.3,e==null&&(e={}),this.alpha=e.alpha==null?this.DEFAULT_ALPHA:e.alpha}call(e,t){let n=ze(e);return Oc(n,this.alpha)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};sw.className="LeakyReLU";se.registerClass(sw);var iw=class extends Ye{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA_INITIALIZER="zeros",e==null&&(e={}),this.supportsMasking=!0,this.alphaInitializer=It(e.alphaInitializer||this.DEFAULT_ALPHA_INITIALIZER),this.alphaRegularizer=Nt(e.alphaRegularizer),this.alphaConstraint=Xt(e.alphaConstraint),e.sharedAxes==null)this.sharedAxes=null;else if(Array.isArray(e.sharedAxes))this.sharedAxes=e.sharedAxes;else if(typeof e.sharedAxes=="number")this.sharedAxes=[e.sharedAxes];else throw new H(`Expected sharedAxes to be a number or an array of numbers, but got ${e.sharedAxes}`)}build(e){e=it(e);let t=e.slice(1);if(this.sharedAxes!=null)for(let a of this.sharedAxes)t[a-1]=1;this.alpha=this.addWeight("alpha",t,"float32",this.alphaInitializer,this.alphaRegularizer,!0,this.alphaConstraint);let n={};if(this.sharedAxes!=null)for(let a=1;a<e.length;++a)n[a]=e[a];this.inputSpec=[new Wt({ndim:e.length,axes:n})],this.built=!0}call(e,t){return e=ze(e),Bc(e,this.alpha.read())}getConfig(){let e={alphaInitializer:At(this.alphaInitializer),alphaRegularizer:dt(this.alphaRegularizer),alphaConstraint:Kt(this.alphaConstraint),sharedAxes:this.sharedAxes},t=super.getConfig();return Object.assign(e,t),e}};iw.className="PReLU";se.registerClass(iw);var ow=class extends Ye{constructor(e){if(super(e==null?{}:e),this.DEFAULT_ALPHA=1,e==null&&(e={}),e.alpha!=null&&e.alpha!==this.DEFAULT_ALPHA)throw new Oe(`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=ze(e);return Ou(n)}computeOutputShape(e){return e}getConfig(){let e={alpha:this.alpha},t=super.getConfig();return Object.assign(e,t),e}};ow.className="ELU";se.registerClass(ow);var lw=class extends Ye{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=ze(e);return W(n,oe(Gn(n,this.theta),"float32"))}computeOutputShape(e){return e}getConfig(){let e={theta:this.theta},t=super.getConfig();return Object.assign(e,t),e}};lw.className="ThresholdedReLU";se.registerClass(lw);var uw=class extends Ye{constructor(e){super(e==null?{}:e),this.DEFAULT_AXIS=1,e==null&&(e={}),this.softmax=new nw().apply,this.axis=e.axis==null?this.DEFAULT_AXIS:e.axis}call(e,t){let n=ze(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}};uw.className="Softmax";se.registerClass(uw);function bl(e,t,n){if(typeof e=="number")return di(e,t);if(e.length!==t)throw new H(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${e.length} elements.`);for(let a=0;a<t;++a){let r=e[a];if(!L4(r))throw new H(`The ${n} argument must be an integer or tuple of ${t} integers. Received: ${JSON.stringify(e)} including a non-integer number ${r}`)}return e}function qa(e,t,n,a,r=1){if(e==null)return e;let s=t+(t-1)*(r-1),i;return n==="same"?i=e:i=e-s+1,Math.floor((i+a-1)/a)}function or(e,t,n,a){if(e==null)return null;if(a==="valid")e=e*t+ps([n-t,0]);else if(a==="same")e=e*t;else throw new H(`Unsupport padding mode: ${a}.`);return e}function pw(e,t){return O(()=>(Ot(t),t==="channelsFirst"?Pe(e,[0,2,3,1]):e))}function dN(e,t){return O(()=>(Ot(t),t==="channelsFirst"?Pe(e,[0,2,3,4,1]):e))}function xU(e,t,n,a=1,r="valid",s,i=1){return O(()=>{if(s==null&&(s=Ka()),Ot(s),e.shape.length!==3)throw new H(`The input of a conv1dWithBias operation should be 3, but is ${e.shape.length} instead.`);if(t.shape.length!==3)throw new H(`The kernel for a conv1dWithBias operation should be 3, but is ${t.shape.length} instead`);if(n!=null&&n.shape.length!==1)throw new H(`The bias for a conv1dWithBias operation should be 1, but is ${t.shape.length} instead`);if(s==="channelsFirst"&&(e=Pe(e,[0,2,1])),r==="causal")throw new Oe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");let o=Ym(e,t,a,r==="same"?"same":"valid","NWC",i);return n!=null&&(o=Qa(o,n)),o})}function Sk(e,t,n,a=[1,1],r="valid",s,i,o=null){return O(()=>{if(s==null&&(s=Ka()),Ot(s),e.rank!==3&&e.rank!==4)throw new H(`conv2dWithBiasActivation expects input to be of rank 3 or 4, but received ${e.rank}.`);if(t.rank!==3&&t.rank!==4)throw new H(`conv2dWithBiasActivation expects kernel to be of rank 3 or 4, but received ${e.rank}.`);let l=pw(e,s);if(r==="causal")throw new Oe("The support for CAUSAL padding mode in conv1dWithBias is not implemented yet.");return l=us.conv2d({x:l,filter:t,strides:a,pad:r==="same"?"same":"valid",dilations:i,dataFormat:"NHWC",bias:n,activation:o}),s==="channelsFirst"&&(l=Pe(l,[0,3,1,2])),l})}function vU(e,t,n,a=[1,1,1],r="valid",s,i){return O(()=>{if(s==null&&(s=Ka()),Ot(s),e.rank!==4&&e.rank!==5)throw new H(`conv3dWithBias expects input to be of rank 4 or 5, but received ${e.rank}.`);if(t.rank!==4&&t.rank!==5)throw new H(`conv3dWithBias expects kernel to be of rank 4 or 5, but received ${e.rank}.`);let o=dN(e,s);if(r==="causal")throw new Oe("The support for CAUSAL padding mode in conv3dWithBias is not implemented yet.");return o=nv(o,t,a,r==="same"?"same":"valid","NDHWC",i),n!=null&&(o=Qa(o,n)),s==="channelsFirst"&&(o=Pe(o,[0,4,1,2,3])),o})}var cw=class extends Ye{constructor(e,t){if(super(t),this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",cw.verifyArgs(t),this.rank=e,tn(this.rank,"rank"),this.rank!==1&&this.rank!==2&&this.rank!==3)throw new Oe(`Convolution layer for rank other than 1, 2, or 3 (${this.rank}) is not implemented yet.`);if(this.kernelSize=bl(t.kernelSize,e,"kernelSize"),this.strides=bl(t.strides==null?1:t.strides,e,"strides"),this.padding=t.padding==null?"valid":t.padding,ba(this.padding),this.dataFormat=t.dataFormat==null?"channelsLast":t.dataFormat,Ot(this.dataFormat),this.activation=ds(t.activation),this.useBias=t.useBias==null?!0:t.useBias,this.biasInitializer=It(t.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.biasConstraint=Xt(t.biasConstraint),this.biasRegularizer=Nt(t.biasRegularizer),this.activityRegularizer=Nt(t.activityRegularizer),this.dilationRate=bl(t.dilationRate==null?1:t.dilationRate,e,"dilationRate"),this.rank===1&&Array.isArray(this.dilationRate)&&this.dilationRate.length!==1)throw new H(`dilationRate must be a number or an array of a single number for 1D convolution, but received ${JSON.stringify(this.dilationRate)}`);if(this.rank===2){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==2)throw new H(`dilationRate must be a number or array of two numbers for 2D convolution, but received ${JSON.stringify(this.dilationRate)}`)}else if(this.rank===3){if(typeof this.dilationRate=="number")this.dilationRate=[this.dilationRate,this.dilationRate,this.dilationRate];else if(this.dilationRate.length!==3)throw new H(`dilationRate must be a number or array of three numbers for 3D convolution, but received ${JSON.stringify(this.dilationRate)}`)}}static verifyArgs(e){if(ir("kernelSize"in e,"required key 'kernelSize' not in config"),typeof e.kernelSize!="number"&&!Mv(e.kernelSize,"number",1,3))throw new H(`BaseConv expects config.kernelSize to be number or number[] with length 1, 2, or 3, but received ${JSON.stringify(e.kernelSize)}.`)}getConfig(){let e={kernelSize:this.kernelSize,strides:this.strides,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,activation:cs(this.activation),useBias:this.useBias,biasInitializer:At(this.biasInitializer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),biasConstraint:Kt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}},Jc=class extends cw{constructor(e,t){super(e,t),this.kernel=null,Jc.verifyArgs(t),this.filters=t.filters,tn(this.filters,"filters"),this.kernelInitializer=It(t.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.kernelConstraint=Xt(t.kernelConstraint),this.kernelRegularizer=Nt(t.kernelRegularizer)}build(e){e=it(e);let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new H(`The channel dimension of the input should be defined. Found ${e[t]}`);let n=e[t],a=this.kernelSize.concat([n,this.filters]);this.kernel=this.addWeight("kernel",a,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[{ndim:this.rank+2,axes:{[t]:n}}],this.built=!0}call(e,t){return O(()=>{e=ze(e);let n,a=this.bias==null?null:this.bias.read(),r=w2(this.activation.getClassName());if(r!=null&&this.rank===2)n=Sk(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate,r);else{if(this.rank===1)n=xU(e,this.kernel.read(),a,this.strides[0],this.padding,this.dataFormat,this.dilationRate[0]);else if(this.rank===2)n=Sk(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else if(this.rank===3)n=vU(e,this.kernel.read(),a,this.strides,this.padding,this.dataFormat,this.dilationRate);else throw new Oe("convolutions greater than 3D are not implemented yet.");this.activation!=null&&(n=this.activation.apply(n))}return n})}computeOutputShape(e){e=it(e);let t=[],n=this.dataFormat==="channelsLast"?e.slice(1,e.length-1):e.slice(2);for(let r=0;r<n.length;++r){let s=qa(n[r],this.kernelSize[r],this.padding,this.strides[r],typeof this.dilationRate=="number"?this.dilationRate:this.dilationRate[r]);t.push(s)}let a=[e[0]];return this.dataFormat==="channelsLast"?(a=a.concat(t),a.push(this.filters)):(a.push(this.filters),a=a.concat(t)),a}getConfig(){let e={filters:this.filters,kernelInitializer:At(this.kernelInitializer),kernelRegularizer:dt(this.kernelRegularizer),kernelConstraint:Kt(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 H(`Convolution layer expected config.filters to be a 'number' > 0 but got ${JSON.stringify(e.filters)}`)}},Zc=class extends Jc{constructor(e){super(2,e),Zc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!Mv(e.kernelSize,"number",1,2))throw new H(`Conv2D expects config.kernelSize to be number or number[] with length 1 or 2, but received ${JSON.stringify(e.kernelSize)}.`)}};Zc.className="Conv2D";se.registerClass(Zc);var Qc=class extends Jc{constructor(e){super(3,e),Qc.verifyArgs(e)}getConfig(){let e=super.getConfig();return delete e.rank,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!(Array.isArray(e.kernelSize)&&(e.kernelSize.length===1||e.kernelSize.length===3)))throw new H(`Conv3D expects config.kernelSize to be number or [number, number, number], but received ${JSON.stringify(e.kernelSize)}.`)}};Qc.className="Conv3D";se.registerClass(Qc);var dw=class extends Zc{constructor(e){if(super(e),this.inputSpec=[new Wt({ndim:4})],this.padding!=="same"&&this.padding!=="valid")throw new H(`Conv2DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=it(e),e.length!==4)throw new H("Input should have rank 4; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new H("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],a=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",a,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Wt({ndim:4,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=ze(e);if(n.shape.length!==4)throw new H(`Conv2DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let a=n.shape,r=a[0],s,i;this.dataFormat==="channelsFirst"?(s=2,i=3):(s=1,i=2);let o=a[s],l=a[i],u=this.kernelSize[0],p=this.kernelSize[1],d=this.strides[0],c=this.strides[1],h=or(o,d,u,this.padding),m=or(l,c,p,this.padding),f=[r,h,m,this.filters];this.dataFormat!=="channelsLast"&&(n=Pe(n,[0,2,3,1]));let g=Jm(n,this.kernel.read(),f,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(g=Pe(g,[0,3,1,2])),this.bias!=null&&(g=Qa(g,this.bias.read(),this.dataFormat)),this.activation!=null&&(g=this.activation.apply(g)),g})}computeOutputShape(e){e=it(e);let t=e.slice(),n,a,r;this.dataFormat==="channelsFirst"?(n=1,a=2,r=3):(n=3,a=1,r=2);let s=this.kernelSize[0],i=this.kernelSize[1],o=this.strides[0],l=this.strides[1];return t[n]=this.filters,t[a]=or(t[a],o,s,this.padding),t[r]=or(t[r],l,i,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};dw.className="Conv2DTranspose";se.registerClass(dw);var hw=class extends Qc{constructor(e){if(super(e),this.inputSpec=[new Wt({ndim:5})],this.padding!=="same"&&this.padding!=="valid")throw new H(`Conv3DTranspose currently supports only padding modes 'same' and 'valid', but received padding mode ${this.padding}`)}build(e){if(e=it(e),e.length!==5)throw new H("Input should have rank 5; Received input shape: "+JSON.stringify(e));let t=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[t]==null)throw new H("The channel dimension of the inputs should be defined. Found `None`.");let n=e[t],a=this.kernelSize.concat([this.filters,n]);this.kernel=this.addWeight("kernel",a,"float32",this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint)),this.inputSpec=[new Wt({ndim:5,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{let n=ze(e);if(n.shape.length!==5)throw new H(`Conv3DTranspose.call() expects input tensor to be rank-4, but received a tensor of rank-${n.shape.length}`);let a=n.shape,r=a[0],s,i,o;this.dataFormat==="channelsFirst"?(o=2,s=3,i=4):(o=1,s=2,i=3);let l=a[o],u=a[s],p=a[i],d=this.kernelSize[0],c=this.kernelSize[1],h=this.kernelSize[2],m=this.strides[0],f=this.strides[1],g=this.strides[2],y=or(l,m,d,this.padding),b=or(u,f,c,this.padding),x=or(p,g,h,this.padding),v=[r,y,b,x,this.filters];this.dataFormat!=="channelsLast"&&(n=Pe(n,[0,2,3,4,1]));let w=FS(n,this.kernel.read(),v,this.strides,this.padding);return this.dataFormat!=="channelsLast"&&(w=Pe(w,[0,4,1,2,3])),this.bias!==null&&(w=Qa(w,this.bias.read(),this.dataFormat)),this.activation!==null&&(w=this.activation.apply(w)),w})}computeOutputShape(e){e=it(e);let t=e.slice(),n,a,r,s;this.dataFormat==="channelsFirst"?(n=1,a=2,r=3,s=4):(n=4,a=1,r=2,s=3);let i=this.kernelSize[0],o=this.kernelSize[1],l=this.kernelSize[2],u=this.strides[0],p=this.strides[1],d=this.strides[2];return t[n]=this.filters,t[a]=or(t[a],u,i,this.padding),t[r]=or(t[r],p,o,this.padding),t[s]=or(t[s],d,l,this.padding),t}getConfig(){let e=super.getConfig();return delete e.dilationRate,e}};hw.className="Conv3DTranspose";se.registerClass(hw);var hN=class extends Jc{constructor(e,t){if(super(e,t),this.DEFAULT_DEPTHWISE_INITIALIZER="glorotUniform",this.DEFAULT_POINTWISE_INITIALIZER="glorotUniform",this.depthwiseKernel=null,this.pointwiseKernel=null,t.filters==null)throw new H("The `filters` configuration field is required by SeparableConv, but is unspecified.");if(t.kernelInitializer!=null||t.kernelRegularizer!=null||t.kernelConstraint!=null)throw new H("Fields kernelInitializer, kernelRegularizer and kernelConstraint are invalid for SeparableConv2D. Use depthwiseInitializer, depthwiseRegularizer, depthwiseConstraint, pointwiseInitializer, pointwiseRegularizer and pointwiseConstraint instead.");if(t.padding!=null&&t.padding!=="same"&&t.padding!=="valid")throw new H(`SeparableConv${this.rank}D supports only padding modes: 'same' and 'valid', but received ${JSON.stringify(t.padding)}`);this.depthMultiplier=t.depthMultiplier==null?1:t.depthMultiplier,this.depthwiseInitializer=It(t.depthwiseInitializer||this.DEFAULT_DEPTHWISE_INITIALIZER),this.depthwiseRegularizer=Nt(t.depthwiseRegularizer),this.depthwiseConstraint=Xt(t.depthwiseConstraint),this.pointwiseInitializer=It(t.depthwiseInitializer||this.DEFAULT_POINTWISE_INITIALIZER),this.pointwiseRegularizer=Nt(t.pointwiseRegularizer),this.pointwiseConstraint=Xt(t.pointwiseConstraint)}build(e){if(e=it(e),e.length<this.rank+2)throw new H(`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 H(`The channel dimension of the inputs should be defined, but found ${JSON.stringify(e[t])}`);let n=e[t],a=this.kernelSize.concat([n,this.depthMultiplier]),r=[];for(let i=0;i<this.rank;++i)r.push(1);r.push(n*this.depthMultiplier,this.filters);let s=!0;this.depthwiseKernel=this.addWeight("depthwise_kernel",a,"float32",this.depthwiseInitializer,this.depthwiseRegularizer,s,this.depthwiseConstraint),this.pointwiseKernel=this.addWeight("pointwise_kernel",r,"float32",this.pointwiseInitializer,this.pointwiseRegularizer,s,this.pointwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[this.filters],"float32",this.biasInitializer,this.biasRegularizer,s,this.biasConstraint):this.bias=null,this.inputSpec=[new Wt({ndim:this.rank+2,axes:{[t]:n}})],this.built=!0}call(e,t){return O(()=>{e=ze(e);let n;if(this.rank===1)throw new Oe("1D separable convolution is not implemented yet.");return this.rank===2&&(this.dataFormat==="channelsFirst"&&(e=Pe(e,[0,2,3,1])),n=xo(e,this.depthwiseKernel.read(),this.pointwiseKernel.read(),this.strides,this.padding,this.dilationRate,"NHWC")),this.useBias&&(n=Qa(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),this.dataFormat==="channelsFirst"&&(n=Pe(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=At(this.depthwiseInitializer),e.pointwiseInitializer=At(this.pointwiseInitializer),e.depthwiseRegularizer=dt(this.depthwiseRegularizer),e.pointwiseRegularizer=dt(this.pointwiseRegularizer),e.depthwiseConstraint=Kt(this.depthwiseConstraint),e.pointwiseConstraint=Kt(this.pointwiseConstraint),e}};hN.className="SeparableConv";var mw=class extends hN{constructor(e){super(2,e)}};mw.className="SeparableConv2D";se.registerClass(mw);var Vf=class extends Jc{constructor(e){super(1,e),Vf.verifyArgs(e),this.inputSpec=[{ndim:3}]}getConfig(){let e=super.getConfig();return delete e.rank,delete e.dataFormat,e}static verifyArgs(e){if(typeof e.kernelSize!="number"&&!Mv(e.kernelSize,"number",1,1))throw new H(`Conv1D expects config.kernelSize to be number or number[] with length 1, but received ${JSON.stringify(e.kernelSize)}.`)}};Vf.className="Conv1D";se.registerClass(Vf);var fw=class extends Ye{constructor(e){super(e),typeof e.cropping=="number"?this.cropping=[[e.cropping,e.cropping],[e.cropping,e.cropping]]:typeof e.cropping[0]=="number"?this.cropping=[[e.cropping[0],e.cropping[0]],[e.cropping[1],e.cropping[1]]]:this.cropping=e.cropping,this.dataFormat=e.dataFormat===void 0?"channelsLast":e.dataFormat,this.inputSpec=[{ndim:4}]}computeOutputShape(e){return this.dataFormat==="channelsFirst"?[e[0],e[1],e[2]-this.cropping[0][0]-this.cropping[0][1],e[3]-this.cropping[1][0]-this.cropping[1][1]]:[e[0],e[1]-this.cropping[0][0]-this.cropping[0][1],e[2]-this.cropping[1][0]-this.cropping[1][1],e[3]]}call(e,t){return O(()=>{if(e=ze(e),this.dataFormat==="channelsLast"){let n=fh(e,this.cropping[0][0],e.shape[1]-this.cropping[0][0]-this.cropping[0][1],2);return fh(n,this.cropping[1][0],e.shape[2]-this.cropping[1][1]-this.cropping[1][0],3)}else{let n=fh(e,this.cropping[0][0],e.shape[2]-this.cropping[0][0]-this.cropping[0][1],3);return fh(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}};fw.className="Cropping2D";se.registerClass(fw);var gw=class extends Ye{constructor(e){super(e),this.DEFAULT_SIZE=[2,2],this.inputSpec=[{ndim:4}],this.size=e.size==null?this.DEFAULT_SIZE:e.size,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ot(this.dataFormat),this.interpolation=e.interpolation==null?"nearest":e.interpolation,M4(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=ze(e),a=n.shape;if(this.dataFormat==="channelsFirst"){n=Pe(n,[0,2,3,1]);let r=this.size[0]*a[2],s=this.size[1]*a[3],i=this.interpolation==="nearest"?Ln.resizeNearestNeighbor(n,[r,s]):Ln.resizeBilinear(n,[r,s]);return Pe(i,[0,3,1,2])}else{let r=this.size[0]*a[1],s=this.size[1]*a[2];return this.interpolation==="nearest"?Ln.resizeNearestNeighbor(n,[r,s]):Ln.resizeBilinear(n,[r,s])}})}getConfig(){let e={size:this.size,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};gw.className="UpSampling2D";se.registerClass(gw);function wU(e,t,n=[1,1],a="valid",r,s){return O(()=>{r==null&&(r=Ka()),Ot(r);let i=pw(e,r);if(e.rank!==4)throw new H(`Input for depthwiseConv2d is required to be 4-D, but is instead ${e.rank}-D`);if(t.rank!==4)throw new H(`depthwiseKernel is required to be 4-D, but is instead ${t.rank}-D`);return i=Is(i,t,n,a==="same"?"same":"valid","NHWC",s),r==="channelsFirst"&&(i=Pe(i,[0,3,1,2])),i})}var yw=class extends cw{constructor(e){super(2,e),this.depthwiseKernel=null,this.depthMultiplier=e.depthMultiplier==null?1:e.depthMultiplier,this.depthwiseInitializer=It(e.depthwiseInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.depthwiseConstraint=Xt(e.depthwiseConstraint),this.depthwiseRegularizer=Nt(e.depthwiseRegularizer)}build(e){if(e=it(e),e.length<4)throw new H(`Inputs to DepthwiseConv2D should have rank 4. Received input shape: ${JSON.stringify(e)}.`);let t=this.dataFormat==="channelsFirst"?1:3;if(e[t]==null||e[t]<0)throw new H(`The channel dimension of the inputs to DepthwiseConv2D should be defined, but is not (${e[t]}).`);let n=e[t],a=[this.kernelSize[0],this.kernelSize[1],n,this.depthMultiplier];this.depthwiseKernel=this.addWeight("depthwise_kernel",a,null,this.depthwiseInitializer,this.depthwiseRegularizer,!0,this.depthwiseConstraint),this.useBias?this.bias=this.addWeight("bias",[n*this.depthMultiplier],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return O(()=>{e=ze(e);let n=wU(e,this.depthwiseKernel.read(),this.strides,this.padding,this.dataFormat,null);return this.useBias&&(n=Qa(n,this.bias.read(),this.dataFormat)),this.activation!=null&&(n=this.activation.apply(n)),n})}computeOutputShape(e){e=it(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],a=this.dataFormat==="channelsFirst"?e[1]*this.depthMultiplier:e[3]*this.depthMultiplier,r=qa(t,this.kernelSize[0],this.padding,this.strides[0]),s=qa(n,this.kernelSize[1],this.padding,this.strides[1]);return this.dataFormat==="channelsFirst"?[e[0],a,r,s]:[e[0],r,s,a]}getConfig(){let e=super.getConfig();return e.depthMultiplier=this.depthMultiplier,e.depthwiseInitializer=At(this.depthwiseInitializer),e.depthwiseRegularizer=dt(this.depthwiseRegularizer),e.depthwiseConstraint=Kt(this.depthwiseRegularizer),e}};yw.className="DepthwiseConv2D";se.registerClass(yw);function mN(e,t,n,a){if(Array.isArray(e)){if(t!=null||n!=null)throw new H("When inputs is an array, neither initialState or constants should be provided");a!=null&&(n=e.slice(e.length-a,e.length),e=e.slice(0,e.length-a)),e.length>1&&(t=e.slice(1,e.length)),e=e[0]}function r(s){return s==null||Array.isArray(s)?s:[s]}return t=r(t),n=r(n),{inputs:e,initialState:t,constants:n}}function fN(e,t,n,a=!1,r,s,i=!1,o=!1){return O(()=>{let l=t.shape.length;if(l<3)throw new H(`Input should be at least 3D, but is ${l}D.`);let u=[1,0].concat(Xa(2,l));if(t=Pe(t,u),s!=null)throw new Oe("The rnn() functoin of the deeplearn.js backend does not support constants yet.");i&&console.warn("Backend rnn(): the unroll = true option is not applicable to the imperative deeplearn.js backend."),r!=null&&(r=oe(oe(r,"bool"),"float32"),r.rank===l-1&&(r=mn(r,-1)),r=Pe(r,u)),a&&(t=aa(t,0),r!=null&&(r=aa(r,0)));let p=[],d,c=n,h=t.shape[0],m=mt(t),f;r!=null&&(f=mt(r));for(let y=0;y<h;++y){let b=m[y],x=O(()=>e(b,c));if(r==null)d=x[0],c=x[1];else{let v=O(()=>{let w=f[y],T=ce(na(w),w),C=J(W(x[0],w),W(c[0],T)),E=c.map(($,P)=>J(W(x[1][P],w),W($,T)));return{output:C,newStates:E}});d=v.output,c=v.newStates}o&&p.push(d)}let g;return o&&(g=Mt(p,1)),[d,g,c]})}var yr=class extends Ye{constructor(e){super(e);let t;if(e.cell==null)throw new H("cell property is missing for the constructor of RNN.");if(Array.isArray(e.cell)?t=new Hf({cells:e.cell}):t=e.cell,t.stateSize==null)throw new H("The RNN cell should have an attribute `stateSize` (tuple of integers, one integer per RNN state).");this.cell=t,this.returnSequences=e.returnSequences==null?!1:e.returnSequences,this.returnState=e.returnState==null?!1:e.returnState,this.goBackwards=e.goBackwards==null?!1:e.goBackwards,this._stateful=e.stateful==null?!1:e.stateful,this.unroll=e.unroll==null?!1:e.unroll,this.supportsMasking=!0,this.inputSpec=[new Wt({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 Xa(0,e).map(t=>null)}else return this.states_}setStates(e){this.states_=e}computeOutputShape(e){Ub(e)&&(e=e[0]),e=e;let t=this.cell.stateSize;Array.isArray(t)||(t=[t]);let n=t[0],a;if(this.returnSequences?a=[e[0],e[1],n]:a=[e[0],n],this.returnState){let r=[];for(let s of t)r.push([e[0],s]);return[a].concat(r)}else return a}computeMask(e,t){return O(()=>{Array.isArray(t)&&(t=t[0]);let n=this.returnSequences?t:null;if(this.returnState){let a=this.states.map(r=>null);return[n].concat(a)}else return n})}get states(){if(this.states_==null){let e=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1,t=[];for(let n=0;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 Oe("Constants support is not implemented in RNN yet.");Ub(e)&&(e=e[0]),e=e;let t=this.stateful?e[0]:null,n=e.slice(2);this.inputSpec[0]=new Wt({shape:[t,null,...n]});let a=[e[0]].concat(e.slice(2));this.cell.build(a);let r;if(Array.isArray(this.cell.stateSize)?r=this.cell.stateSize:r=[this.cell.stateSize],this.stateSpec!=null){if(!k.arraysEqual(this.stateSpec.map(s=>s.shape[s.shape.length-1]),r))throw new H(`An initialState was passed that is not compatible with cell.stateSize. Received stateSpec=${this.stateSpec}; However cell.stateSize is ${this.cell.stateSize}`)}else this.stateSpec=r.map(s=>new Wt({shape:[null,s]}));this.stateful&&this.resetStates()}resetStates(e,t=!1){O(()=>{if(!this.stateful)throw new Ir("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape[0];if(n==null)throw new H("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.states_==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(a=>kt([n,a])):this.states_=[kt([n,this.cell.stateSize])];else if(e==null)De(this.states_),this.keptStates!=null&&(De(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(a=>kt([n,a])):this.states_[0]=kt([n,this.cell.stateSize]);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new H(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t===!0?this.keptStates.push(this.states_.slice()):De(this.states_);for(let a=0;a<this.states_.length;++a){let r=e[a],s=Array.isArray(this.cell.stateSize)?this.cell.stateSize[a]:this.cell.stateSize,i=[n,s];if(!k.arraysEqual(r.shape,i))throw new H(`State ${a} is incompatible with layer ${this.name}: expected shape=${i}, received shape=${r.shape}`);this.states_[a]=r}}this.states_=this.states_.map(a=>en(a.clone()))})}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=mN(e,n,a,this.numConstants);e=r.inputs,n=r.initialState,a=r.constants;let s=[],i=[];if(n!=null){t.initialState=n,s=s.concat(n),this.stateSpec=[];for(let o of n)this.stateSpec.push(new Wt({shape:o.shape}));i=i.concat(this.stateSpec)}if(a!=null&&(t.constants=a,s=s.concat(a),this.numConstants=a.length),s[0]instanceof Ua){let o=[e].concat(s),l=this.inputSpec.concat(i),u=this.inputSpec;this.inputSpec=l;let p=super.apply(o,t);return this.inputSpec=u,p}else return super.apply(e,t)}call(e,t){return O(()=>{let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;e=ze(e),r==null&&(this.stateful?r=this.states_:r=this.getInitialState(e));let s=Array.isArray(this.cell.stateSize)?this.cell.stateSize.length:1;if(r.length!==s)throw new H(`RNN Layer has ${s} state(s) but was passed ${r.length} initial state(s).`);this.unroll&&console.warn("Ignoring unroll = true for RNN layer, due to imperative backend.");let i={training:a},o=fN((c,h)=>{let m=this.cell.call([c].concat(h),i);return[m[0],m.slice(1)]},e,r,this.goBackwards,n,null,this.unroll,this.returnSequences),l=o[0],u=o[1],p=o[2];this.stateful&&this.resetStates(p,a);let d=this.returnSequences?u:l;return this.returnState?[d].concat(p):d})}getInitialState(e){return O(()=>{let t=kt(e.shape);return t=be(t,[1,2]),t=qc(t),Array.isArray(this.cell.stateSize)?this.cell.stateSize.map(n=>n>1?Bb(t,[1,n]):t):this.cell.stateSize>1?[Bb(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()===yr.className&&(t.cell={className:this.cell.getClassName(),config:n}),Object.assign({},n,e,t)}static fromConfig(e,t,n={}){let a=t.cell,r=ja(a,n);return new e(Object.assign(t,{cell:r}))}};yr.className="RNN";se.registerClass(yr);var ed=class extends Ye{},Uf=class extends ed{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,tn(this.units,"units"),this.activation=ds(e.activation==null?this.DEFAULT_ACTIVATION:e.activation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=It(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=It(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=It(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Nt(e.kernelRegularizer),this.recurrentRegularizer=Nt(e.recurrentRegularizer),this.biasRegularizer=Nt(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Nl([1,ps([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,ps([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=it(e),this.kernel=this.addWeight("kernel",[e[e.length-1],this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return O(()=>{if(e=e,e.length!==2)throw new H(`SimpleRNNCell expects 2 input Tensors, got ${e.length}.`);let n=e[1];e=e[0];let a=t.training==null?!1:t.training;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=hs({ones:()=>na(e),rate:this.dropout,training:a,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=hs({ones:()=>na(n),rate:this.recurrentDropout,training:a,dropoutFunc:this.dropoutFunc}));let r,s=this.dropoutMask,i=this.recurrentDropoutMask;s!=null?r=ur(W(e,s),this.kernel.read()):r=ur(e,this.kernel.read()),this.bias!=null&&(r=Qa(r,this.bias.read())),i!=null&&(n=W(n,i));let o=J(r,ur(n,this.recurrentKernel.read()));return this.activation!=null&&(o=this.activation.apply(o)),[o,o]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:cs(this.activation),useBias:this.useBias,kernelInitializer:At(this.kernelInitializer),recurrentInitializer:At(this.recurrentInitializer),biasInitializer:At(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),recurrentConstraint:Kt(this.recurrentConstraint),biasConstraint:Kt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout};return Object.assign({},e,t)}};Uf.className="SimpleRNNCell";se.registerClass(Uf);var bw=class extends yr{constructor(e){e.cell=new Uf(e),super(e)}call(e,t){return O(()=>{this.cell.dropoutMask!=null&&(De(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(De(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return new e(t)}};bw.className="SimpleRNN";se.registerClass(bw);var Gf=class extends ed{constructor(e){if(super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.resetAfter)throw new H("GRUCell does not support reset_after parameter set to true.");this.units=e.units,tn(this.units,"units"),this.activation=ds(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=ds(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=It(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=It(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=It(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelRegularizer=Nt(e.kernelRegularizer),this.recurrentRegularizer=Nt(e.recurrentRegularizer),this.biasRegularizer=Nt(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Nl([1,ps([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,ps([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=this.units,this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){e=it(e);let t=e[e.length-1];this.kernel=this.addWeight("kernel",[t,this.units*3],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*3],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias?this.bias=this.addWeight("bias",[this.units*3],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint):this.bias=null,this.built=!0}call(e,t){return O(()=>{if(e=e,e.length!==2)throw new H(`GRUCell expects 2 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training==null?!1:t.training,a=e[1];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=hs({ones:()=>na(e),rate:this.dropout,training:n,count:3,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=hs({ones:()=>na(a),rate:this.recurrentDropout,training:n,count:3,dropoutFunc:this.dropoutFunc}));let r=this.dropoutMask,s=this.recurrentDropoutMask,i,o,l;0<this.dropout&&this.dropout<1&&(e=W(e,r[0]));let u=ur(e,this.kernel.read());this.useBias&&(u=Qa(u,this.bias.read())),0<this.recurrentDropout&&this.recurrentDropout<1&&(a=W(a,s[0]));let p=this.recurrentKernel.read(),[d,c]=zn(p,[2*this.units,this.units],p.rank-1),h=ur(a,d),[m,f,g]=zn(u,3,u.rank-1),[y,b]=zn(h,2,h.rank-1);i=this.recurrentActivation.apply(J(m,y)),o=this.recurrentActivation.apply(J(f,b));let x=ur(W(o,a),c);l=this.activation.apply(J(g,x));let v=J(W(i,a),W(J(1,St(i)),l));return[v,v]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:cs(this.activation),recurrentActivation:cs(this.recurrentActivation),useBias:this.useBias,kernelInitializer:At(this.kernelInitializer),recurrentInitializer:At(this.recurrentInitializer),biasInitializer:At(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),recurrentConstraint:Kt(this.recurrentConstraint),biasConstraint:Kt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation,resetAfter:!1};return Object.assign({},e,t)}};Gf.className="GRUCell";se.registerClass(Gf);var xw=class extends yr{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 Gf(e),super(e)}call(e,t){return O(()=>{this.cell.dropoutMask!=null&&(De(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(De(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};xw.className="GRU";se.registerClass(xw);var td=class extends ed{constructor(e){super(e),this.DEFAULT_ACTIVATION="tanh",this.DEFAULT_RECURRENT_ACTIVATION="hardSigmoid",this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_RECURRENT_INITIALIZER="orthogonal",this.DEFAULT_BIAS_INITIALIZER="zeros",this.units=e.units,tn(this.units,"units"),this.activation=ds(e.activation===void 0?this.DEFAULT_ACTIVATION:e.activation),this.recurrentActivation=ds(e.recurrentActivation===void 0?this.DEFAULT_RECURRENT_ACTIVATION:e.recurrentActivation),this.useBias=e.useBias==null?!0:e.useBias,this.kernelInitializer=It(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.recurrentInitializer=It(e.recurrentInitializer||this.DEFAULT_RECURRENT_INITIALIZER),this.biasInitializer=It(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.unitForgetBias=e.unitForgetBias,this.kernelRegularizer=Nt(e.kernelRegularizer),this.recurrentRegularizer=Nt(e.recurrentRegularizer),this.biasRegularizer=Nt(e.biasRegularizer),this.kernelConstraint=Xt(e.kernelConstraint),this.recurrentConstraint=Xt(e.recurrentConstraint),this.biasConstraint=Xt(e.biasConstraint),this.dropout=Nl([1,ps([0,e.dropout==null?0:e.dropout])]),this.recurrentDropout=Nl([1,ps([0,e.recurrentDropout==null?0:e.recurrentDropout])]),this.dropoutFunc=e.dropoutFunc,this.implementation=e.implementation,this.stateSize=[this.units,this.units],this.dropoutMask=null,this.recurrentDropoutMask=null}build(e){var t;e=it(e);let n=e[e.length-1];this.kernel=this.addWeight("kernel",[n,this.units*4],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.recurrentKernel=this.addWeight("recurrent_kernel",[this.units,this.units*4],null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint);let a;if(this.useBias){if(this.unitForgetBias){let r=this.biasInitializer,s=this.units;a=new(t=class extends Aa{apply(i,o){let l=r.apply([s]),u=new $f().apply([s]),p=r.apply([s*2]);return uk(uk(l,u),p)}},t.className="CustomInit",t)}else a=this.biasInitializer;this.bias=this.addWeight("bias",[this.units*4],null,a,this.biasRegularizer,!0,this.biasConstraint)}else this.bias=null;this.built=!0}call(e,t){return O(()=>{let n=t.training==null?!1:t.training;if(e=e,e.length!==3)throw new H(`LSTMCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let a=e[1],r=e[2];e=e[0],0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=hs({ones:()=>na(e),rate:this.dropout,training:n,count:4,dropoutFunc:this.dropoutFunc})),0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=hs({ones:()=>na(a),rate:this.recurrentDropout,training:n,count:4,dropoutFunc:this.dropoutFunc}));let s=this.dropoutMask,i=this.recurrentDropoutMask,o,l,u,p;0<this.dropout&&this.dropout<1&&(e=W(e,s[0]));let d=ur(e,this.kernel.read());0<this.recurrentDropout&&this.recurrentDropout<1&&(a=W(a,i[0])),d=J(d,ur(a,this.recurrentKernel.read())),this.useBias&&(d=Qa(d,this.bias.read()));let[c,h,m,f]=zn(d,4,d.rank-1);o=this.recurrentActivation.apply(c),l=this.recurrentActivation.apply(h),u=J(W(l,r),W(o,this.activation.apply(m))),p=this.recurrentActivation.apply(f);let g=W(p,this.activation.apply(u));return[g,g,u]})}getConfig(){let e=super.getConfig(),t={units:this.units,activation:cs(this.activation),recurrentActivation:cs(this.recurrentActivation),useBias:this.useBias,kernelInitializer:At(this.kernelInitializer),recurrentInitializer:At(this.recurrentInitializer),biasInitializer:At(this.biasInitializer),unitForgetBias:this.unitForgetBias,kernelRegularizer:dt(this.kernelRegularizer),recurrentRegularizer:dt(this.recurrentRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),recurrentConstraint:Kt(this.recurrentConstraint),biasConstraint:Kt(this.biasConstraint),dropout:this.dropout,recurrentDropout:this.recurrentDropout,implementation:this.implementation};return Object.assign({},e,t)}};td.className="LSTMCell";se.registerClass(td);var vw=class extends yr{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 td(e),super(e)}call(e,t){return O(()=>{this.cell.dropoutMask!=null&&(De(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(De(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null);let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}static fromConfig(e,t){return t.implmentation===0&&(t.implementation=1),new e(t)}};vw.className="LSTM";se.registerClass(vw);var Hf=class extends ed{constructor(e){super(e),this.cells=e.cells}get stateSize(){let e=[];for(let t of this.cells.slice().reverse())Array.isArray(t.stateSize)?e.push(...t.stateSize):e.push(t.stateSize);return e}call(e,t){return O(()=>{e=e;let n=e.slice(1),a=[];for(let i of this.cells.slice().reverse())Array.isArray(i.stateSize)?a.push(n.splice(0,i.stateSize.length)):a.push(n.splice(0,1));a.reverse();let r=[],s;for(let i=0;i<this.cells.length;++i){let o=this.cells[i];n=a[i],i===0?s=[e[0]].concat(n):s=[s[0]].concat(n),s=o.call(s,t),r.push(s.slice(1))}n=[];for(let i of r.slice().reverse())n.push(...i);return[s[0]].concat(n)})}build(e){Ub(e)&&(e=e[0]),e=e;let t;this.cells.forEach((n,a)=>{Qs(`RNNCell_${a}`,()=>{n.build(e),Array.isArray(n.stateSize)?t=n.stateSize[0]:t=n.stateSize,e=[e[0],t]})}),this.built=!0}getConfig(){let e=super.getConfig(),t=a=>({className:a.getClassName(),config:a.getConfig()}),n={cells:this.cells.map(t)};return Object.assign({},e,n)}static fromConfig(e,t,n={}){let a=[];for(let r of t.cells)a.push(ja(r,n));return new e({cells:a})}get trainableWeights(){if(!this.trainable)return[];let e=[];for(let t of this.cells)e.push(...t.trainableWeights);return e}get nonTrainableWeights(){let e=[];for(let t of this.cells)e.push(...t.nonTrainableWeights);if(!this.trainable){let t=[];for(let n of this.cells)t.push(...n.trainableWeights);return t.concat(e)}return e}getWeights(){let e=[];for(let t of this.cells)e.push(...t.weights);return Gb(e)}setWeights(e){let t=[];for(let n of this.cells){let a=n.weights.length,r=e.splice(a);for(let s=0;s<n.weights.length;++s)t.push([n.weights[s],r[s]])}Xv(t)}};Hf.className="StackedRNNCells";se.registerClass(Hf);function hs(e){let{ones:t,rate:n,training:a=!1,count:r=1,dropoutFunc:s}=e,i=()=>s!=null?s(t(),n):_2(t(),n),o=()=>Xc(i,t,a);return!r||r<=1?en(o().clone()):Array(r).fill(void 0).map(o).map(l=>en(l.clone()))}var kU=function(e,t){var n={};for(var a in e)Object.prototype.hasOwnProperty.call(e,a)&&t.indexOf(a)<0&&(n[a]=e[a]);if(e!=null&&typeof Object.getOwnPropertySymbols=="function")for(var r=0,a=Object.getOwnPropertySymbols(e);r<a.length;r++)t.indexOf(a[r])<0&&Object.prototype.propertyIsEnumerable.call(e,a[r])&&(n[a[r]]=e[a[r]]);return n},gN=class extends yr{constructor(e){if(e.unroll)throw new Oe("Unrolling is not possible with convolutional RNNs.");if(Array.isArray(e.cell))throw new Oe("It is not possible at the moment to stack convolutional cells.");super(e),this.inputSpec=[new Wt({ndim:5})]}call(e,t){return O(()=>{if(this.cell.dropoutMask!=null&&(De(this.cell.dropoutMask),this.cell.dropoutMask=null),this.cell.recurrentDropoutMask!=null&&(De(this.cell.recurrentDropoutMask),this.cell.recurrentDropoutMask=null),t&&t.constants)throw new H("ConvRNN2D cell does not support constants");let n=t==null?null:t.mask,a=t==null?null:t.training,r=t==null?null:t.initialState;return super.call(e,{mask:n,training:a,initialState:r})})}computeOutputShape(e){let t=this.computeSingleOutputShape(e);return this.returnSequences||(t=[t[0],...t.slice(2)]),this.returnState&&(t=[t,...Array(2).fill([e[0],...t.slice(-3)])]),t}getInitialState(e){return O(()=>{let{stateSize:t}=this.cell,n=e.shape,a=this.computeSingleOutputShape(n),r=[a[0],...a.slice(2)],s=kt(r);return Array.isArray(t)?Array(t.length).fill(s):[s]})}resetStates(e,t=!1){O(()=>{if(!this.stateful)throw new Ir("Cannot call resetStates() on an RNN Layer that is not stateful.");let n=this.inputSpec[0].shape,a=this.computeSingleOutputShape(n),r=[a[0],...a.slice(2)];if(n[0]==null)throw new H("If an RNN is stateful, it needs to know its batch size. Specify the batch size of your input tensors: \n- If using a Sequential model, specify the batch size by passing a `batchInputShape` option to your first layer.\n- If using the functional API, specify the batch size by passing a `batchShape` option to your Input layer.");if(this.getStates()==null)Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>kt(r)):this.states_=[kt(r)];else if(e==null)De(this.states_),this.keptStates!=null&&(De(this.keptStates),this.keptStates=[]),Array.isArray(this.cell.stateSize)?this.states_=this.cell.stateSize.map(()=>kt(r)):this.states_[0]=kt(r);else{if(Array.isArray(e)||(e=[e]),e.length!==this.states_.length)throw new H(`Layer ${this.name} expects ${this.states_.length} state(s), but it received ${e.length} state value(s). Input received: ${e}`);t?this.keptStates.push(this.states_.slice()):De(this.states_);for(let s=0;s<this.states_.length;++s){let i=e[s],o=r;if(!k.arraysEqual(i.shape,o))throw new H(`State ${s} is incompatible with layer ${this.name}: expected shape=${o}, received shape=${i.shape}`);this.states_[s]=i}}this.states_=this.states_.map(s=>en(s.clone()))})}computeSingleOutputShape(e){let{dataFormat:t,filters:n,kernelSize:a,padding:r,strides:s,dilationRate:i}=this.cell,o=t==="channelsFirst",l=e[o?3:2],u=e[o?4:3],p=qa(l,a[0],r,s[0],i[0]),d=qa(u,a[1],r,s[1],i[1]);return[...e.slice(0,2),...o?[n,p,d]:[p,d,n]]}};gN.className="ConvRNN2D";var jf=class extends td{constructor(e){let{filters:t,kernelSize:n,strides:a,padding:r,dataFormat:s,dilationRate:i}=e;super(Object.assign({},e,{units:t})),this.filters=t,tn(this.filters,"filters"),this.kernelSize=bl(n,2,"kernelSize"),this.kernelSize.forEach(o=>tn(o,"kernelSize")),this.strides=bl(a||1,2,"strides"),this.strides.forEach(o=>tn(o,"strides")),this.padding=r||"valid",ba(this.padding),this.dataFormat=s||"channelsLast",Ot(this.dataFormat),this.dilationRate=bl(i||1,2,"dilationRate"),this.dilationRate.forEach(o=>tn(o,"dilationRate"))}build(e){var t;e=it(e);let n=this.dataFormat==="channelsFirst"?1:e.length-1;if(e[n]==null)throw new H(`The channel dimension of the input should be defined. Found ${e[n]}`);let a=e[n],r=4,s=this.kernelSize.concat([a,this.filters*r]);this.kernel=this.addWeight("kernel",s,null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint);let i=this.kernelSize.concat([this.filters,this.filters*r]);if(this.recurrentKernel=this.addWeight("recurrent_kernel",i,null,this.recurrentInitializer,this.recurrentRegularizer,!0,this.recurrentConstraint),this.useBias){let o;if(this.unitForgetBias){let l=this.biasInitializer,u=this.filters;o=new(t=class extends Aa{apply(p,d){let c=l.apply([u]),h=Zn([u]),m=l.apply([u*2]);return Bv([c,h,m])}},t.className="CustomInit",t)}else o=this.biasInitializer;this.bias=this.addWeight("bias",[this.filters*r],null,o,this.biasRegularizer,!0,this.biasConstraint)}this.built=!0}call(e,t){return O(()=>{if(e.length!==3)throw new H(`ConvLSTM2DCell expects 3 input Tensors (inputs, h, c), got ${e.length}.`);let n=t.training||!1,a=e[0],r=e[1],s=e[2],i=4;0<this.dropout&&this.dropout<1&&this.dropoutMask==null&&(this.dropoutMask=hs({ones:()=>na(a),rate:this.dropout,training:n,count:i,dropoutFunc:this.dropoutFunc}));let o=this.dropoutMask,l=(ee,re,Z)=>!re||!re[Z]?ee:W(re[Z],ee),u=l(a,o,0),p=l(a,o,1),d=l(a,o,2),c=l(a,o,3);0<this.recurrentDropout&&this.recurrentDropout<1&&this.recurrentDropoutMask==null&&(this.recurrentDropoutMask=hs({ones:()=>na(r),rate:this.recurrentDropout,training:n,count:i,dropoutFunc:this.dropoutFunc}));let h=this.recurrentDropoutMask,m=l(r,h,0),f=l(r,h,1),g=l(r,h,2),y=l(r,h,3),b=3,[x,v,w,T]=zn(this.kernel.read(),i,b),[C,E,$,P]=this.useBias?zn(this.bias.read(),i):[null,null,null,null];u=this.inputConv(u,x,C,this.padding),p=this.inputConv(p,v,E,this.padding),d=this.inputConv(d,w,$,this.padding),c=this.inputConv(c,T,P,this.padding);let[F,S,M,B]=zn(this.recurrentKernel.read(),i,b);m=this.recurrentConv(m,F),f=this.recurrentConv(f,S),g=this.recurrentConv(g,M),y=this.recurrentConv(y,B);let j=this.recurrentActivation.apply(J(u,m)),q=this.recurrentActivation.apply(J(p,f)),K=J(W(q,s),W(j,this.activation.apply(J(d,g)))),Q=W(this.recurrentActivation.apply(J(c,y)),this.activation.apply(K));return[Q,Q,K]})}getConfig(){let e=super.getConfig(),{units:t}=e,n=kU(e,["units"]),a={filters:this.filters,kernelSize:this.kernelSize,padding:this.padding,dataFormat:this.dataFormat,dilationRate:this.dilationRate,strides:this.strides};return Object.assign({},n,a)}inputConv(e,t,n,a){let r=Rt(e,t,this.strides,a||"valid",this.dataFormat==="channelsFirst"?"NCHW":"NHWC",this.dilationRate);return n?Qa(r,n,this.dataFormat):r}recurrentConv(e,t){return Rt(e,t,1,"same",this.dataFormat==="channelsFirst"?"NCHW":"NHWC")}};jf.className="ConvLSTM2DCell";se.registerClass(jf);var ww=class extends gN{constructor(e){let t=new jf(e);super(Object.assign({},e,{cell:t}))}static fromConfig(e,t){return new e(t)}};ww.className="ConvLSTM2D";se.registerClass(ww);var qf=class extends Ye{constructor(e){super(e),this.rate=Math.max(Math.min(e.rate,1),0),this.noiseShape=e.noiseShape,this.seed=e.seed,this.supportsMasking=!0}getNoiseShape(e){if(this.noiseShape==null)return this.noiseShape;let t=e.shape,n=[];for(let a=0;a<this.noiseShape.length;++a)n.push(this.noiseShape[a]==null?t[a]:this.noiseShape[a]);return n}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);if(0<this.rate&&this.rate<1){let a=t.training==null?!1:t.training,r=this.getNoiseShape(n);return Xc(()=>_2(n,this.rate,r,this.seed),()=>n,a)}return e})}getConfig(){let e={rate:this.rate,noiseShape:this.noiseShape,seed:this.seed},t=super.getConfig();return Object.assign(e,t),e}dispose(){return super.dispose()}};qf.className="Dropout";se.registerClass(qf);var kw=class extends qf{constructor(e){super(e),this.inputSpec=[{ndim:3}]}getNoiseShape(e){let t=e.shape;return[t[0],1,t[2]]}};kw.className="SpatialDropout1D";se.registerClass(kw);var Iw=class extends Ye{constructor(e){if(super(e),this.activation=null,this.useBias=!0,this.kernel=null,this.bias=null,this.DEFAULT_KERNEL_INITIALIZER="glorotNormal",this.DEFAULT_BIAS_INITIALIZER="zeros",e.batchInputShape==null&&e.inputShape==null&&e.inputDim!=null){let t=null;e.batchSize!=null&&(t=e.batchSize),this.batchInputShape=[t,e.inputDim]}this.units=e.units,tn(this.units,"units"),this.activation=ds(e.activation),e.useBias!=null&&(this.useBias=e.useBias),this.kernelInitializer=It(e.kernelInitializer||this.DEFAULT_KERNEL_INITIALIZER),this.biasInitializer=It(e.biasInitializer||this.DEFAULT_BIAS_INITIALIZER),this.kernelConstraint=Xt(e.kernelConstraint),this.biasConstraint=Xt(e.biasConstraint),this.kernelRegularizer=Nt(e.kernelRegularizer),this.biasRegularizer=Nt(e.biasRegularizer),this.activityRegularizer=Nt(e.activityRegularizer),this.supportsMasking=!0,this.inputSpec=[{minNDim:2}]}build(e){e=it(e);let t=e[e.length-1];this.kernel==null&&(this.kernel=this.addWeight("kernel",[t,this.units],null,this.kernelInitializer,this.kernelRegularizer,!0,this.kernelConstraint),this.useBias&&(this.bias=this.addWeight("bias",[this.units],null,this.biasInitializer,this.biasRegularizer,!0,this.biasConstraint))),this.inputSpec=[{minNDim:2,axes:{[-1]:t}}],this.built=!0}computeOutputShape(e){e=it(e);let t=e.slice();return t[t.length-1]=this.units,t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e),a=w2(this.activation.getClassName()),r;return a!=null?r=ur(n,this.kernel.read(),a,this.bias?this.bias.read():null):(r=ur(n,this.kernel.read()),this.bias!=null&&(r=Qa(r,this.bias.read())),this.activation!=null&&(r=this.activation.apply(r))),r})}getConfig(){let e={units:this.units,activation:cs(this.activation),useBias:this.useBias,kernelInitializer:At(this.kernelInitializer),biasInitializer:At(this.biasInitializer),kernelRegularizer:dt(this.kernelRegularizer),biasRegularizer:dt(this.biasRegularizer),activityRegularizer:dt(this.activityRegularizer),kernelConstraint:Kt(this.kernelConstraint),biasConstraint:Kt(this.biasConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Iw.className="Dense";se.registerClass(Iw);var Sw=class extends Ye{constructor(e){e=e||{},super(e),this.inputSpec=[{minNDim:3}],this.dataFormat=e.dataFormat}computeOutputShape(e){e=it(e);for(let t of e.slice(1))if(t==null)throw new H(`The shape of the input to "Flatten" is not fully defined (got ${e.slice(1)}). Make sure to pass a complete "input_shape" or "batch_input_shape" argument to the first layer in your model.`);return[e[0],rs(e,1)]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);if(this.dataFormat==="channelsFirst"&&n.rank>1){let a=[0];for(let r=2;r<n.rank;++r)a.push(r);a.push(1),n=Pe(n,a)}return B4(n)})}getConfig(){let e={};this.dataFormat!=null&&(e.dataFormat=this.dataFormat);let t=super.getConfig();return Object.assign(e,t),e}};Sw.className="Flatten";se.registerClass(Sw);var Nw=class extends Ye{constructor(e){super(e),this.supportsMasking=!0,this.activation=ds(e.activation)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);return this.activation.apply(n)})}getConfig(){let e={activation:cs(this.activation)},t=super.getConfig();return Object.assign(e,t),e}};Nw.className="Activation";se.registerClass(Nw);var Tw=class extends Ye{constructor(e){super(e),this.n=e.n,this.inputSpec=[{ndim:2}]}computeOutputShape(e){return[e[0],this.n,e[1]]}call(e,t){return O(()=>(e=ze(e),z4(e,this.n)))}getConfig(){let e={n:this.n},t=super.getConfig();return Object.assign(e,t),e}};Tw.className="RepeatVector";se.registerClass(Tw);var Cw=class extends Ye{constructor(e){super(e),this.targetShape=e.targetShape;for(let t=0;t<this.targetShape.length;++t)this.isUnknown(this.targetShape[t])&&(this.targetShape[t]=null)}isUnknown(e){return e<0||e==null}fixUnknownDimension(e,t){let n="Total size of new array must be unchanged.",a=t.slice(),r=1,s=null;for(let o=0;o<a.length;++o){let l=a[o];if(this.isUnknown(l))if(s===null)s=o;else throw new H("Can only specifiy one unknown dimension.");else r*=l}let i=rs(e);if(s!==null){if(r===0||i%r!==0)throw new H(n);a[s]=i/r}else if(i!==r)throw new H(n);return a}computeOutputShape(e){let t=!1;for(let n=0;n<e.length;++n)if(this.isUnknown(e[n])){t=!0;break}return t?e.slice(0,1).concat(this.targetShape):e.slice(0,1).concat(this.fixUnknownDimension(e.slice(1),this.targetShape))}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e),a=n.shape,r=a.slice(0,1).concat(this.fixUnknownDimension(a.slice(1),this.targetShape));return V(n,r)})}getConfig(){let e={targetShape:this.targetShape},t=super.getConfig();return Object.assign(e,t),e}};Cw.className="Reshape";se.registerClass(Cw);var _w=class extends Ye{constructor(e){if(super(e),e.dims==null)throw new Error("Required configuration field `dims` is missing during Permute constructor call.");if(!Array.isArray(e.dims))throw new Error(`Permute constructor requires \`dims\` to be an Array, but received ${e.dims} instead.`);let t=Xa(1,e.dims.length+1);if(!k.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 Wt({ndim:this.dims.length+1})]}computeOutputShape(e){e=it(e);let t=e.slice();return this.dims.forEach((n,a)=>{t[a+1]=e[n]}),t}call(e,t){return Pe(ze(e),this.dimsIncludingBatch)}getConfig(){let e={dims:this.dims},t=super.getConfig();return Object.assign(e,t),e}};_w.className="Permute";se.registerClass(_w);var Ew=class extends Ye{constructor(e){super(e==null?{}:e),this.supportsMasking=!0,e!=null?this.maskValue=e.maskValue==null?0:e.maskValue:this.maskValue=0}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={maskValue:this.maskValue};return Object.assign(t,e),t}computeMask(e,t){let n=ze(e),a=-1;return ec(ci(n,this.maskValue),a)}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e),a=-1,r=!0,s=ec(ci(n,this.maskValue),a,r);return W(n,oe(s,n.dtype))})}};Ew.className="Masking";se.registerClass(Ew);var Aw=class extends Ye{constructor(e){if(super(e),this.embeddings=null,this.DEFAULT_EMBEDDINGS_INITIALIZER="randomUniform",e.batchInputShape==null&&e.inputShape==null){let t=null;e.batchSize!=null&&(t=e.batchSize),e.inputLength==null?this.batchInputShape=[t,null]:this.batchInputShape=[t].concat(vt(e.inputLength))}this.inputDim=e.inputDim,tn(this.inputDim,"inputDim"),this.outputDim=e.outputDim,tn(this.outputDim,"outputDim"),this.embeddingsInitializer=It(e.embeddingsInitializer||this.DEFAULT_EMBEDDINGS_INITIALIZER),this.embeddingsRegularizer=Nt(e.embeddingsRegularizer),this.activityRegularizer=Nt(e.activityRegularizer),this.embeddingsConstraint=Xt(e.embeddingsConstraint),this.maskZero=e.maskZero,this.supportsMasking=e.maskZero,this.inputLength=e.inputLength}build(e){this.embeddings=this.addWeight("embeddings",[this.inputDim,this.outputDim],this.dtype,this.embeddingsInitializer,this.embeddingsRegularizer,!0,this.embeddingsConstraint),this.built=!0}warnOnIncompatibleInputShape(e){}computeMask(e,t){return O(()=>this.maskZero?(e=ze(e),ci(e,Ke(e))):null)}computeOutputShape(e){if(e=it(e),this.inputLength==null)return[...e,this.outputDim];let t=vt(this.inputLength);if(t.length!==e.length-1)throw new H(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);{let n=0;for(let a=0;a<t.length;++a){let r=t[a],s=e[a+1];if(r!=null&&s!=null&&r!==s)throw new H(`"inputLength" is ${this.inputLength}, but received input shape has shape ${e}`);r==null&&(t[n]=s),n++}}return[e[0],...t,this.outputDim]}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);n.dtype!=="int32"&&(n=Ef(n,"int32"));let a=C2(this.embeddings.read(),V(n,[n.size]));return V(a,it(this.computeOutputShape(n.shape)))})}getConfig(){let e={inputDim:this.inputDim,outputDim:this.outputDim,embeddingsInitializer:At(this.embeddingsInitializer),embeddingsRegularizer:dt(this.embeddingsRegularizer),activityRegularizer:dt(this.activityRegularizer),embeddingsConstraint:Kt(this.embeddingsConstraint),maskZero:this.maskZero,inputLength:this.inputLength},t=super.getConfig();return Object.assign(e,t),e}};Aw.className="Embedding";se.registerClass(Aw);var ko=class extends Ye{constructor(e){super(e||{}),this.supportsMasking=!0}mergeFunction(e){throw new Oe}computeElementwiseOpOutputShape(e,t){if(e==null||t==null)return null;if(e.length<t.length)return this.computeElementwiseOpOutputShape(t,e);if(t.length===0)return e;let n=e.slice(0,e.length-t.length);for(let a=0;a<t.length;++a){let r=e[e.length-t.length+a],s=t[a];if(r==null||s==null||r<0||s<0)n.push(null);else if(r===1)n.push(s);else if(s===1)n.push(r);else{if(r!==s)throw new H("Operands could not be broadcast together with shapes "+JSON.stringify(e)+" "+JSON.stringify(t));n.push(r)}}return n}build(e){if(Array.isArray(e)&&!Array.isArray(e[0])&&(e=[it(e)]),e=e,e.length<2)throw new H(`A merge layer should be called on an Array of at least 2 inputs. Got ${e.length} input(s).`);let t=[];for(let r of e)r!=null&&r[0]!==null&&t.push(r[0]);if(t=as(t),t.length>1)throw new H(`Can not merge tensors with different batch sizes. Got tensors with shapes: ${JSON.stringify(e)}.`);let n=e[0]==null?null:e[0].slice(1);for(let r=1;r<e.length;++r){let s=e[r]==null?null:e[r].slice(1);n=this.computeElementwiseOpOutputShape(n,s)}let a=e.map(r=>r.length);e.indexOf(null)===-1&&as(a).length===1?this.reshapeRequired=!1:this.reshapeRequired=!0}call(e,t){return O(()=>{if(e=e,this.reshapeRequired){let n=[],a=e.map(r=>r.rank);if(a.indexOf(null)===-1){let r=ps(a);for(let s of e){let i=s.rank;for(let o=0;o<r-i;++o)s=qc(s,1);n.push(s)}return this.mergeFunction(n)}else{let r=!1;for(let o of e){let l=o.rank;if(l==null){let u=o.shape,p=u[0],d=u.slice(1).concat([p]),c=V(o,[p].concat(rs(u.slice(1))));c=Pe(c,[1,0]),c=V(c,d),n.push(c),r=!0}else if(l>1){let u=Xa(1,l).concat([0]);n.push(Pe(o,u)),r=!0}else n.push(o)}let s=this.mergeFunction(n),i=s.rank;if(r){if(i==null){let o=s.shape,l=o.length,u=o[l-1],p=[u].concat(o.slice(0,o.length-1));s=V(Pe(V(s,[-1,u]),[1,0]),p)}else if(i>1){let o=[i-1].concat(Xa(0,i-1));s=Pe(s,o)}}return s}}else return this.mergeFunction(e)})}computeOutputShape(e){e=e;let t;e[0]==null?t=null:t=e[0].slice(1);for(let a=1;a<e.length;++a){let r=e[a]==null?null:e[a].slice(1);t=this.computeElementwiseOpOutputShape(t,r)}let n=[];for(let a of e)a!=null&&a[0]!==null&&n.push(a[0]);return n=as(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 H("`mask` should be an Array");if(!Array.isArray(e))throw new H("`inputs` should be an Array");if(t.length!==e.length)throw new H(`The Array 'inputs' and 'mask' are expected to have the same length, but have different lengths (${e.length} vs ${t.length})`);if(t.every(a=>a==null))return null;t=t.map(a=>a==null?a:mn(a,0));let n=t[0];for(let a=1;a<t.length-1;++a)n=_a(n,t[a]);return n})}},$w=class extends ko{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=J(t,e[n]);return t})}};$w.className="Add";se.registerClass($w);var Fw=class extends ko{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=W(t,e[n]);return t})}};Fw.className="Multiply";se.registerClass(Fw);var Dw=class extends ko{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0].clone();for(let n=1;n<e.length;++n)t=J(t,e[n]);return W(1/e.length,t)})}};Dw.className="Average";se.registerClass(Dw);var Rw=class extends ko{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=fr(t,e[n]);return t})}};Rw.className="Maximum";se.registerClass(Rw);var Mw=class extends ko{constructor(e){super(e)}mergeFunction(e){return O(()=>{let t=e[0];for(let n=1;n<e.length;++n)t=zu(t,e[n]);return t})}};Mw.className="Minimum";se.registerClass(Mw);var Pw=class extends ko{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 H("A `Concatenate` layer should be called on a list of at least 2 inputs");e=e;let t=!0;for(let a of e)if(a!=null){t=!1;break}if(t)return;let n=[];for(let a=0;a<e.length;++a){let r=e[a].slice();r.splice(this.axis,1);let s=!1;for(let i of n)if(k.arraysEqual(i,r)){s=!0;break}s||n.push(r)}if(n.length>1)throw new H("A `Concatenate` layer requires inputs with matching shapes except for the concat axis. Got input shapes: "+JSON.stringify(e))}mergeFunction(e){return O(()=>Bv(e,this.axis))}computeOutputShape(e){if(!(Array.isArray(e)&&Array.isArray(e[0])))throw new H("A `Concatenate` layer should be called on a list of inputs.");let t=e,n=t[0].slice(),a=this.axis<0?n.length+this.axis:this.axis;for(let r of t.slice(1)){if(n[a]==null||r[a]==null){n[a]=null;break}n[a]+=r[a]}return n}computeMask(e,t){if(t==null)return null;if(!Array.isArray(t))throw new H("`mask` should be an array for Concatenate");if(!Array.isArray(e))throw new H("`inputs` should be an array for Concatenate");if(t.length!==e.length)throw new H(`Mismatch in the length of mask (${t.length}) and the legnth of inputs (${e.length})`);return O(()=>{let n=!0;if(t.forEach(s=>{if(s!=null){n=!1;return}}),n)return null;let a=[];for(let s=0;s<e.length;++s)t[s]==null?a.push(oe(na(e[s]),"bool")):t[s].rank<e[s].rank?a.push(mn(t[s],-1)):a.push(t[s]);let r=Qe(a,this.axis);return Xm(r,-1,!1)})}getConfig(){let e={axis:this.axis},t=super.getConfig();return Object.assign(e,t),e}};Pw.className="Concatenate";se.registerClass(Pw);function Fp(e,t){for(;e<0;)e+=t;return e}function IU(e,t,n){if(e.shape.length>3||t.shape.length>3)throw new Oe("batchDot is not implemented for tensors of 4D or higher rank yet");if(k.assert(e.shape.length>=2,()=>`batchDot requires the rank of x to be >= 2, but got ${e.shape.length}`),k.assert(e.shape.length>=2,()=>`batchDot requires the rank of y to be >= 2, but got ${t.shape.length}`),typeof n=="number"&&(n=[n,n]),e.dtype==="complex64"||t.dtype==="complex64")throw new Oe("batchDot is not implemented for complex64-type Tensors yet.");let a=e.shape.length,r=t.shape.length;n==null&&(n=[a-1,r-2]);let s=n;return O(()=>{let i;if(a>r){i=a-r;let l=[];for(let u=0;u<i;++u)l.push(1);t=V(t,t.shape.concat(l))}else if(r>a){i=r-a;let l=[];for(let u=0;u<i;++u)l.push(1);e=V(e,e.shape.concat(l))}else i=0;let o;if(e.shape.length===2&&t.shape.length===2)s[0]===s[1]?o=be(W(e,t),s[0]):o=be(W(Pe(e,[1,0]),t),s[1]);else{let l=s[0]!==e.shape.length-1,u=s[1]===t.shape.length-1;o=Fe(e,t,l,u)}if(i>0){let l;a>r?l=a+r-3:l=a-1;let u=[];for(let p=l;p<l+i;++p)u.push(p);o=dr(o,u)}return o.shape.length===1&&(o=mn(o,1)),o})}var Ow=class extends ko{constructor(e){super(e),this.axes=e.axes,this.normalize=e.normalize==null?!1:e.normalize,this.supportsMasking=!0,this.reshapeRequired=!1}build(e){k.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 Oe("Dot layer does not support tensors of 4D or higher rank yet.");let a=this.interpretAxes(t,n);if(t[a[0]]!==n[a[1]])throw new H(`Dimension incompatibility: ${t[a[0]]} !== ${n[a[1]]}`)}mergeFunction(e){if(e.length!==2)throw new H(`A \`Dot\` layer must be called on exactly 2 inputs, but received ${e.length} input(s).`);let t=e[0],n=e[1],a;return Array.isArray(this.axes)?a=this.axes.map((r,s)=>Fp(r,e[s].shape.length)):a=[Fp(this.axes,t.shape.length),Fp(this.axes,n.shape.length)],this.normalize&&(t=Yh(t,a[0]),n=Yh(n,a[1])),IU(t,n,a)}interpretAxes(e,t){let n;return Array.isArray(this.axes)?n=this.axes:n=[Fp(this.axes,e.length),Fp(this.axes,t.length)],n}computeOutputShape(e){k.assert(Array.isArray(e)&&e.length===2&&Array.isArray(e[0])&&Array.isArray(e[1]),()=>"A `Dot` layer should be called on a list of exactly 2 inputs.");let t=e[0].slice(),n=e[1].slice();if(t.length>3||n.length>3)throw new Oe("Dot layer does not support tensors of 4D or higher rank yet.");let a=this.interpretAxes(t,n);t.splice(a[0],1),n.splice(a[1],1),n.splice(0,1);let r=t.concat(n);return r.length===1&&r.push(1),r}computeMask(e,t){return null}getConfig(){let e={axes:this.axes,normalize:this.normalize},t=super.getConfig();return Object.assign(e,t),e}};Ow.className="Dot";se.registerClass(Ow);var Lw=class extends Ye{constructor(e){super(e),this.supportsMasking=!0,this.stddev=e.stddev}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={stddev:this.stddev};return Object.assign(t,e),t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);return Xc(()=>J(Af(n.shape,0,this.stddev),n),()=>n,t.training||!1)})}};Lw.className="GaussianNoise";se.registerClass(Lw);var zw=class extends Ye{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate}computeOutputShape(e){return e}getConfig(){let e=super.getConfig(),t={rate:this.rate};return Object.assign(t,e),t}call(e,t){return O(()=>{this.invokeCallHook(e,t);let n=ze(e);return this.rate>0&&this.rate<1?Xc(()=>{let a=Math.sqrt(this.rate/(1-this.rate));return W(n,Af(n.shape,1,a))},()=>n,t.training||!1):n})}};zw.className="GaussianDropout";se.registerClass(zw);var Ww=class extends Ye{constructor(e){super(e),this.supportsMasking=!0,this.rate=e.rate,this.noiseShape=e.noiseShape}_getNoiseShape(e){return this.noiseShape||ze(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 Xc(()=>{let a=ze(e),r=1.6732632423543772,s=1.0507009873554805,i=-r*s,o=Ss(Wu(n),this.rate);o=Ef(o,"float32");let l=((1-this.rate)*(1+this.rate*i**2))**-.5,u=-l*i*this.rate,p=J(W(a,o),W(J(o,-1),i));return J(W(p,l),u)},()=>ze(e),t.training||!1)}return e})}};Ww.className="AlphaDropout";se.registerClass(Ww);function ic(e,t,n,a,r,s=.001){let i;if(e.rank===2)i=IS(e,t,n,a,r,s);else if(e.rank===3)i=SS(e,t,n,a,r,s);else if(e.rank===4)i=NS(e,t,n,a,r,s);else throw new Oe(`batchNormalization is not implemented for array of rank ${e.rank} yet`);return i}function SU(e,t,n,a,r=.001){return O(()=>{let s=sf(e,a),i=s.mean,o=s.variance;return[ic(e,i,o,n,t,r),i,o]})}function NU(e,t,n,a,r=.001){return O(()=>{let s=sf(e,a),i=s.mean,o=s.variance,l=[];for(let h of Xa(0,e.rank))a.indexOf(h)!==-1?l.push(1):l.push(e.shape[h]);let u=V(i,l),p=V(o,l),d=t==null?null:V(t,l),c=n==null?null:V(n,l);return[ic(e,u,p,c,d,r),i,o]})}function TU(e,t,n,a,r=.001){return k.arraysEqual(a.slice().sort(),Xa(0,e.rank-1))?SU(e,t,n,a,r):NU(e,t,n,a,r)}var Bw=class extends Ye{constructor(e){e==null&&(e={}),super(e),this.supportsMasking=!0,this.axis=e.axis==null?-1:e.axis,this.momentum=e.momentum==null?.99:e.momentum,this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=It(e.betaInitializer||"zeros"),this.gammaInitializer=It(e.gammaInitializer||"ones"),this.movingMeanInitializer=It(e.movingMeanInitializer||"zeros"),this.movingVarianceInitializer=It(e.movingVarianceInitializer||"ones"),this.betaConstraint=Xt(e.betaConstraint),this.gammaConstraint=Xt(e.gammaConstraint),this.betaRegularizer=Nt(e.betaRegularizer),this.gammaRegularizer=Nt(e.gammaRegularizer)}build(e){e=it(e);let t=this.axis>=0?this.axis:this.axis+e.length,n=e[t];if(n==null)throw new H(`Axis ${t} of input tensor should have a defined dimension but the layer received an input with shape ${JSON.stringify(e)}.`);this.inputSpec=[new Wt({ndim:e.length,axes:{[t]:n}})];let a=[n];this.scale&&(this.gamma=this.addWeight("gamma",a,null,this.gammaInitializer,this.gammaRegularizer,!0,this.gammaConstraint)),this.center&&(this.beta=this.addWeight("beta",a,null,this.betaInitializer,this.betaRegularizer,!0,this.betaConstraint)),this.movingMean=this.addWeight("moving_mean",a,null,this.movingMeanInitializer,null,!1),this.movingVariance=this.addWeight("moving_variance",a,null,this.movingVarianceInitializer,null,!1),this.built=!0}call(e,t){return O(()=>{let n=t.training==null?!1:t.training,a=ze(e),r=a.shape,s=r.length,i=Xa(0,s),o=this.axis>=0?this.axis:this.axis+s;i.splice(o,1);let l=di(1,s);l[o]=r[o];let u=i.slice();u.sort();let p=!k.arraysEqual(u,Xa(0,s).slice(0,s-1)),d=()=>{if(p){let g=V(this.movingMean.read(),l),y=V(this.movingVariance.read(),l),b=this.center?V(this.beta.read(),l):null,x=this.scale?V(this.gamma.read(),l):null;return ic(a,g,y,b,x,this.epsilon)}else return ic(a,this.movingMean.read(),this.movingVariance.read(),this.beta==null?null:this.beta.read(),this.gamma==null?null:this.gamma.read(),this.epsilon)};if(!n)return d();let[c,h,m]=TU(a,this.gamma.read(),this.beta.read(),i,this.epsilon),f=(g,y,b)=>{O(()=>{let x=1-b,v=g.read(),w=W(ce(v,y),x);g.write(ce(v,w))})};return f(this.movingMean,h,this.momentum),f(this.movingVariance,m,this.momentum),c})}getConfig(){let e={axis:this.axis,momentum:this.momentum,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:At(this.betaInitializer),gammaInitializer:At(this.gammaInitializer),movingMeanInitializer:At(this.movingMeanInitializer),movingVarianceInitializer:At(this.movingVarianceInitializer),betaRegularizer:dt(this.betaRegularizer),gammaRegularizer:dt(this.gammaRegularizer),betaConstraint:Kt(this.betaConstraint),gammaConstraint:Kt(this.gammaConstraint)},t=super.getConfig();return Object.assign(e,t),e}};Bw.className="BatchNormalization";se.registerClass(Bw);var Vw=class extends Ye{constructor(e){if(e==null&&(e={}),super(e),this.axis=e.axis==null?-1:e.axis,typeof this.axis=="number"){if(!Number.isInteger(this.axis))throw new Error(`Expected axis to be an integer, but received ${this.axis}`)}else if(Array.isArray(this.axis)){for(let t of this.axis)if(!Number.isInteger(t))throw new Error(`Expected axis to be an array of integers, but received ${JSON.stringify(this.axis)}`)}else throw new Error(`Expected axis to be an integer or an array of integers, but received ${JSON.stringify(this.axis)}`);this.epsilon=e.epsilon==null?.001:e.epsilon,this.center=e.center==null?!0:e.center,this.scale=e.scale==null?!0:e.scale,this.betaInitializer=It(e.betaInitializer||"zeros"),this.gammaInitializer=It(e.gammaInitializer||"ones"),this.betaRegularizer=Nt(e.betaRegularizer),this.gammaRegularizer=Nt(e.gammaRegularizer),this.supportsMasking=!0}build(e){e=it(e);let t=e.length;typeof this.axis=="number"&&(this.axis=[this.axis]);for(let r=0;r<this.axis.length;++r)this.axis[r]<0&&(this.axis[r]+=t);for(let r of this.axis)if(r<0||r>=t)throw new Error(`Invalid axis: ${r}`);if(this.axis.length!==as(this.axis).length)throw new Error(`Found duplicate axes in: ${this.axis}`);let n=this.axis.map(r=>e[r]),a=!0;this.scale?this.gamma=this.addWeight("gamma",n,"float32",this.gammaInitializer,this.gammaRegularizer,a):this.gamma=null,this.center?this.beta=this.addWeight("beta",n,"float32",this.betaInitializer,this.betaRegularizer,a):this.beta=null,this.built=!0}call(e,t){let n=ze(e),a=n.shape,r=a.length;return O(()=>{let{mean:s,variance:i}=sf(n,this.axis,!0),o=di(1,r);for(let h of this.axis)o[h]=a[h];let l=h=>h!=null&&h.shape.length!==r?V(h,o):h,u=l(this.gamma.read()),p=l(this.beta.read()),d=[],c=[];for(let h=0;h<r;++h)this.axis.indexOf(h)!==-1?(d.push(a[h]),c.push(1)):(d.push(1),c.push(a[h]));return s=On(s,d),i=On(i,d),u=On(u,c),p=On(p,c),ic(n,s,i,p,u,this.epsilon)})}getConfig(){let e={axis:this.axis,epsilon:this.epsilon,center:this.center,scale:this.scale,betaInitializer:At(this.betaInitializer),gammaInitializer:At(this.gammaInitializer),betaRegularizer:dt(this.betaRegularizer),gammaRegularizer:dt(this.gammaRegularizer)},t=super.getConfig();return Object.assign(e,t),e}};Vw.className="LayerNormalization";se.registerClass(Vw);function CU(e,t,n){return O(()=>{if(e.rank!==4)throw new H(`temporalPadding expects input tensor to be 4-D, but received a ${e.rank}-D tensor.`);if(t==null&&(t=[[1,1],[1,1]]),t.length!==2||t[0].length!==2||t[1].length!==2)throw new H("spatial2dPadding expects `padding` to be an Array of two Arrays, each of which is an Array of two integers.");if(n==null&&(n=Ka()),n!=="channelsLast"&&n!=="channelsFirst")throw new H(`Unknown data format: ${n}. Supported data formats are 'channelsLast' and 'channelsFirst.`);let a;return n==="channelsFirst"?a=[[0,0],[0,0],t[0],t[1]]:a=[[0,0],t[0],t[1],[0,0]],ya(e,a)})}var Uw=class extends Ye{constructor(e){if(e==null&&(e={}),super(e),this.dataFormat=e.dataFormat==null?Ka():e.dataFormat,e.padding==null)this.padding=[[1,1],[1,1]];else if(typeof e.padding=="number")this.padding=[[e.padding,e.padding],[e.padding,e.padding]];else{if(e.padding=e.padding,e.padding.length!==2)throw new H(`ZeroPadding2D expects padding to be a length-2 array, but received a length-${e.padding.length} array.`);let t,n;if(typeof e.padding[0]=="number")t=[e.padding[0],e.padding[0]],n=[e.padding[1],e.padding[1]];else{if(e.padding=e.padding,e.padding[0].length!==2)throw new H(`ZeroPadding2D expects height padding to be a length-2 array, but received a length-${e.padding[0].length} array.`);if(t=e.padding[0],e.padding[1].length!==2)throw new H(`ZeroPadding2D expects width padding to be a length-2 array, but received a length-${e.padding[1].length} array.`);n=e.padding[1]}this.padding=[t,n]}this.inputSpec=[new Wt({ndim:4})]}computeOutputShape(e){e=it(e);let t,n;return this.dataFormat==="channelsFirst"?(e[2]!=null&&e[2]>=0?t=e[2]+this.padding[0][0]+this.padding[0][1]:t=null,e[3]!=null&&e[3]>=0?n=e[3]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],e[1],t,n]):(e[1]!=null&&e[1]>=0?t=e[1]+this.padding[0][0]+this.padding[0][1]:t=null,e[2]!=null&&e[2]>=0?n=e[2]+this.padding[1][0]+this.padding[1][1]:n=null,[e[0],t,n,e[3]])}call(e,t){return O(()=>CU(ze(e),this.padding,this.dataFormat))}getConfig(){let e={padding:this.padding,dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}};Uw.className="ZeroPadding2D";se.registerClass(Uw);function Kf(e,t,n,a,r,s){return O(()=>{Ot(r),I2(s),ba(a),n==null&&(n=[1,1]),a==null&&(a="valid"),r==null&&(r=Ka()),s==null&&(s="max"),e=pw(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=Pt(e,t,n,o):i=ga(e,t,n,o),r==="channelsFirst"&&(i=Pe(i,[0,3,1,2])),i})}function yN(e,t,n,a,r,s){return O(()=>{Ot(r),I2(s),ba(a),n==null&&(n=[1,1,1]),a==null&&(a="valid"),r==null&&(r=Ka()),s==null&&(s="max"),e=dN(e,r);let i,o=a==="same"?"same":"valid";return s==="max"?i=fv(e,t,n,o):i=Zx(e,t,n,o),r==="channelsFirst"&&(i=Pe(i,[0,4,1,2,3])),i})}var bN=class extends Ye{constructor(e){if(e.poolSize==null&&(e.poolSize=2),super(e),typeof e.poolSize=="number")this.poolSize=[e.poolSize];else if(Array.isArray(e.poolSize)&&e.poolSize.length===1&&typeof e.poolSize[0]=="number")this.poolSize=e.poolSize;else throw new H(`poolSize for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.poolSize)}`);if(tn(this.poolSize,"poolSize"),e.strides==null)this.strides=this.poolSize;else if(typeof e.strides=="number")this.strides=[e.strides];else if(Array.isArray(e.strides)&&e.strides.length===1&&typeof e.strides[0]=="number")this.strides=e.strides;else throw new H(`strides for 1D convolutional layer must be a number or an Array of a single number, but received ${JSON.stringify(e.strides)}`);tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,ba(this.padding),this.inputSpec=[new Wt({ndim:3})]}computeOutputShape(e){e=it(e);let t=qa(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=qc(ze(e),2);let n=this.poolingFunction(ze(e),[this.poolSize[0],1],[this.strides[0],1],this.padding,"channelsLast");return dr(n,[2])})}getConfig(){let e={poolSize:this.poolSize,padding:this.padding,strides:this.strides},t=super.getConfig();return Object.assign(e,t),e}},Gw=class extends bN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),Kf(e,t,n,a,r,"max")}};Gw.className="MaxPooling1D";se.registerClass(Gw);var Hw=class extends bN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),Kf(e,t,n,a,r,"avg")}};Hw.className="AveragePooling1D";se.registerClass(Hw);var xN=class extends Ye{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==2)throw new H(`If the strides property of a 2D pooling layer is an Array, it is expected to have a length of 2, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides];tn(this.poolSize,"poolSize"),tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ot(this.dataFormat),ba(this.padding),this.inputSpec=[new Wt({ndim:4})]}computeOutputShape(e){e=it(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2];return t=qa(t,this.poolSize[0],this.padding,this.strides[0]),n=qa(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(ze(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}},jw=class extends xN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),Kf(e,t,n,a,r,"max")}};jw.className="MaxPooling2D";se.registerClass(jw);var qw=class extends xN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),Kf(e,t,n,a,r,"avg")}};qw.className="AveragePooling2D";se.registerClass(qw);var vN=class extends Ye{constructor(e){if(e.poolSize==null&&(e.poolSize=[2,2,2]),super(e),this.poolSize=Array.isArray(e.poolSize)?e.poolSize:[e.poolSize,e.poolSize,e.poolSize],e.strides==null)this.strides=this.poolSize;else if(Array.isArray(e.strides)){if(e.strides.length!==3)throw new H(`If the strides property of a 3D pooling layer is an Array, it is expected to have a length of 3, but received length ${e.strides.length}.`);this.strides=e.strides}else this.strides=[e.strides,e.strides,e.strides];tn(this.poolSize,"poolSize"),tn(this.strides,"strides"),this.padding=e.padding==null?"valid":e.padding,this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ot(this.dataFormat),ba(this.padding),this.inputSpec=[new Wt({ndim:5})]}computeOutputShape(e){e=it(e);let t=this.dataFormat==="channelsFirst"?e[2]:e[1],n=this.dataFormat==="channelsFirst"?e[3]:e[2],a=this.dataFormat==="channelsFirst"?e[4]:e[3];return t=qa(t,this.poolSize[0],this.padding,this.strides[0]),n=qa(n,this.poolSize[1],this.padding,this.strides[1]),a=qa(a,this.poolSize[2],this.padding,this.strides[2]),this.dataFormat==="channelsFirst"?[e[0],e[1],t,n,a]:[e[0],t,n,a,e[4]]}call(e,t){return O(()=>(this.invokeCallHook(e,t),this.poolingFunction(ze(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}},Kw=class extends vN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),yN(e,t,n,a,r,"max")}};Kw.className="MaxPooling3D";se.registerClass(Kw);var Xw=class extends vN{constructor(e){super(e)}poolingFunction(e,t,n,a,r){return Ot(r),ba(a),yN(e,t,n,a,r,"avg")}};Xw.className="AveragePooling3D";se.registerClass(Xw);var wN=class extends Ye{constructor(e){super(e),this.inputSpec=[new Wt({ndim:3})]}computeOutputShape(e){return[e[0],e[2]]}call(e,t){throw new Oe}},Yw=class extends wN{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=ze(e);return Et(n,1)})}};Yw.className="GlobalAveragePooling1D";se.registerClass(Yw);var Jw=class extends wN{constructor(e){super(e||{})}call(e,t){return O(()=>{let n=ze(e);return Ta(n,1)})}};Jw.className="GlobalMaxPooling1D";se.registerClass(Jw);var kN=class extends Ye{constructor(e){super(e),this.dataFormat=e.dataFormat==null?"channelsLast":e.dataFormat,Ot(this.dataFormat),this.inputSpec=[new Wt({ndim:4})]}computeOutputShape(e){return e=e,this.dataFormat==="channelsLast"?[e[0],e[3]]:[e[0],e[1]]}call(e,t){throw new Oe}getConfig(){let e={dataFormat:this.dataFormat},t=super.getConfig();return Object.assign(e,t),e}},Zw=class extends kN{call(e,t){return O(()=>{let n=ze(e);return this.dataFormat==="channelsLast"?Et(n,[1,2]):Et(n,[2,3])})}};Zw.className="GlobalAveragePooling2D";se.registerClass(Zw);var Qw=class extends kN{call(e,t){return O(()=>{let n=ze(e);return this.dataFormat==="channelsLast"?Ta(n,[1,2]):Ta(n,[2,3])})}};Qw.className="GlobalMaxPooling2D";se.registerClass(Qw);var IN=class extends Ye{constructor(e){super(e),this.layer=e.layer}build(e){this.built=!0}get trainable(){return this.layer!=null?this.layer.trainable:!1}set trainable(e){this.layer!=null&&(this.layer.trainable=e)}get trainableWeights(){return this.layer.trainableWeights}get nonTrainableWeights(){return this.layer.nonTrainableWeights}get updates(){return this.layer._updates}get losses(){return this.layer.losses}getWeights(){return this.layer.getWeights()}setWeights(e){this.layer.setWeights(e)}getConfig(){let e={layer:{className:this.layer.getClassName(),config:this.layer.getConfig()}},t=super.getConfig();return Object.assign(e,t),e}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.layer!=null&&this.layer.setFastWeightInitDuringBuild(e)}static fromConfig(e,t,n={}){let a=t.layer,r=ja(a,n);delete t.layer;let s={layer:r};return Object.assign(s,t),new e(s)}},e0=class extends IN{constructor(e){super(e),this.supportsMasking=!0}build(e){if(e=it(e),e.length<3)throw new H(`TimeDistributed layer expects an input shape >= 3D, but received input shape ${JSON.stringify(e)}`);this.inputSpec=[{shape:e}];let t=[e[0]].concat(e.slice(2));this.layer.built||(this.layer.build(t),this.layer.built=!0),super.build(e)}computeOutputShape(e){e=it(e);let t=[e[0]].concat(e.slice(2)),n=this.layer.computeOutputShape(t),a=e[1];return[n[0],a].concat(n.slice(1))}call(e,t){return O(()=>(e=ze(e),fN((n,a)=>[ze(this.layer.call(n,t)),[]],e,[],!1,null,null,!1,!0)[1]))}};e0.className="TimeDistributed";se.registerClass(e0);function _U(e){vo(R4,"BidirectionalMergeMode",e)}var EU="concat",t0=class extends IN{constructor(e){super(e);let t=e.layer.getConfig(),n={};n.className=e.layer.getClassName(),n.config=t,this.forwardLayer=ja(n),t.goBackwards=t.goBackwards!==!0;let a={};if(a.className=e.layer.getClassName(),a.config=t,this.backwardLayer=ja(a),this.forwardLayer.name="forward_"+this.forwardLayer.name,this.backwardLayer.name="backward_"+this.backwardLayer.name,this.mergeMode=e.mergeMode===void 0?EU:e.mergeMode,_U(this.mergeMode),e.weights)throw new Oe("weights support is not implemented for Bidirectional layer yet.");this._stateful=e.layer.stateful,this.returnSequences=e.layer.returnSequences,this.returnState=e.layer.returnState,this.supportsMasking=!0,this._trainable=!0,this.inputSpec=e.layer.inputSpec,this.numConstants=null}get trainable(){return this._trainable}set trainable(e){this._trainable=e,this.forwardLayer!=null&&(this.forwardLayer.trainable=e),this.backwardLayer!=null&&(this.backwardLayer.trainable=e)}getWeights(){return this.forwardLayer.getWeights().concat(this.backwardLayer.getWeights())}setWeights(e){let t=e.length,n=Math.floor(t/2);this.forwardLayer.setWeights(e.slice(0,n)),this.backwardLayer.setWeights(e.slice(n))}computeOutputShape(e){let t=this.forwardLayer.computeOutputShape(e);Array.isArray(t)&&Array.isArray(t[0])||(t=[t]),t=t;let n,a,r;return this.returnState&&(r=t.slice(1)),n=t[0],n=n,this.mergeMode==="concat"?(n[n.length-1]*=2,a=[n]):this.mergeMode==null?a=[n,n.slice()]:a=[n],this.returnState?this.mergeMode==null?a.concat(r).concat(r.slice()):[n].concat(r).concat(r.slice()):Pn(a)}apply(e,t){let n=t==null?null:t.initialState,a=t==null?null:t.constants;t==null&&(t={});let r=mN(e,n,a,this.numConstants);if(e=r.inputs,n=r.initialState,a=r.constants,Array.isArray(e)&&(n=e.slice(1),e=e[0]),(n==null||n.length===0)&&a==null)return super.apply(e,t);let s=[],i=[];if(n!=null){let l=n.length;if(l%2>0)throw new H("When passing `initialState` to a Bidrectional RNN, the state should be an Array containing the states of the underlying RNNs.");t.initialState=n,s.push(...n);let u=n.map(p=>new Wt({shape:p.shape}));this.forwardLayer.stateSpec=u.slice(0,l/2),this.backwardLayer.stateSpec=u.slice(l/2),i.push(...u)}if(a!=null)throw new Oe("Support for constants in Bidirectional layers is not implemented yet.");let o=s[0]instanceof Ua;for(let l of s)if(l instanceof Ua!==o)throw new H("The initial state of a Bidirectional layer cannot be specified as a mix of symbolic and non-symbolic tensors");if(o){let l=[e].concat(s),u=this.inputSpec.concat(i),p=this.inputSpec;this.inputSpec=u;let d=super.apply(l,t);return this.inputSpec=p,d}else return super.apply(e,t)}call(e,t){return O(()=>{let n=t.initialState,a,r;if(n==null)a=this.forwardLayer.call(e,t),r=this.backwardLayer.call(e,t);else{let o=n.slice(0,n.length/2),l=n.slice(n.length/2);a=this.forwardLayer.call(e,Object.assign(t,{initialState:o})),r=this.backwardLayer.call(e,Object.assign(t,{initialState:l}))}let s;this.returnState&&(Array.isArray(a)&&(s=a.slice(1).concat(r.slice(1))),a=a[0],r=r[0]),this.returnSequences&&(r=aa(r,1));let i;return this.mergeMode==="concat"?i=Bv([a,r]):this.mergeMode==="sum"?i=J(a,r):this.mergeMode==="ave"?i=W(.5,J(a,r)):this.mergeMode==="mul"?i=W(a,r):this.mergeMode==null&&(i=[a,r]),this.returnState?this.mergeMode==null?i.concat(s):[i].concat(s):i})}resetStates(e){this.forwardLayer.resetStates(),this.backwardLayer.resetStates()}build(e){Qs(this.forwardLayer.name,()=>{this.forwardLayer.build(e)}),Qs(this.backwardLayer.name,()=>{this.backwardLayer.build(e)}),this.built=!0}computeMask(e,t){Array.isArray(t)&&(t=t[0]);let n;if(this.returnSequences?this.mergeMode==null?n=[t,t]:n=t:this.mergeMode==null?n=[null,null]:n=null,this.returnState){let a=this.forwardLayer.states.map(r=>null);return Array.isArray(n)?n.concat(a).concat(a):[n].concat(a).concat(a)}else return n}get trainableWeights(){return this.forwardLayer.trainableWeights.concat(this.backwardLayer.trainableWeights)}get nonTrainableWeights(){return this.forwardLayer.nonTrainableWeights.concat(this.backwardLayer.nonTrainableWeights)}setFastWeightInitDuringBuild(e){super.setFastWeightInitDuringBuild(e),this.forwardLayer!=null&&this.forwardLayer.setFastWeightInitDuringBuild(e),this.backwardLayer!=null&&this.backwardLayer.setFastWeightInitDuringBuild(e)}getConfig(){let e={mergeMode:this.mergeMode},t=super.getConfig();return Object.assign(e,t),e}static fromConfig(e,t){let n=ja(t.layer);if(delete t.layer,t.numConstants!=null)throw new Oe("Deserialization of a Bidirectional layer with numConstants present is not supported yet.");let a=t;return a.layer=n,new e(a)}};t0.className="Bidirectional";se.registerClass(t0);function AU(e){return new Gu(e)}function $U(e){return new ow(e)}function FU(e){return new rw(e)}function DU(e){return new sw(e)}function RU(e){return new iw(e)}function MU(e){return new uw(e)}function PU(e){return new lw(e)}function OU(e){return new Vf(e)}function LU(e){return new Zc(e)}function zU(e){return new dw(e)}function WU(e){return new Qc(e)}function BU(e){return new hw(e)}function VU(e){return new mw(e)}function UU(e){return new fw(e)}function GU(e){return new gw(e)}function HU(e){return new yw(e)}function jU(e){return new Nw(e)}function qU(e){return new Iw(e)}function KU(e){return new qf(e)}function XU(e){return new kw(e)}function YU(e){return new Sw(e)}function JU(e){return new Tw(e)}function ZU(e){return new Cw(e)}function QU(e){return new _w(e)}function eG(e){return new Aw(e)}function tG(e){return new $w(e)}function nG(e){return new Dw(e)}function aG(e){return new Pw(e)}function rG(e){return new Rw(e)}function sG(e){return new Mw(e)}function iG(e){return new Fw(e)}function oG(e){return new Ow(e)}function lG(e){return new Bw(e)}function uG(e){return new Vw(e)}function pG(e){return new Uw(e)}function n0(e){return new Hw(e)}function cG(e){return n0(e)}function dG(e){return n0(e)}function a0(e){return new qw(e)}function hG(e){return a0(e)}function mG(e){return a0(e)}function r0(e){return new Xw(e)}function fG(e){return r0(e)}function gG(e){return r0(e)}function yG(e){return new Yw(e)}function bG(e){return new Zw(e)}function SN(e){return new Jw(e)}function NN(e){return new Qw(e)}function TN(e){return new Gw(e)}function CN(e){return new jw(e)}function xG(e){return new Kw(e)}function vG(e){return new xw(e)}function wG(e){return new Gf(e)}function kG(e){return new vw(e)}function IG(e){return new td(e)}function SG(e){return new bw(e)}function NG(e){return new Uf(e)}function TG(e){return new ww(e)}function CG(e){return new jf(e)}function _G(e){return new yr(e)}function EG(e){return new Hf(e)}function AG(e){return new t0(e)}function $G(e){return new e0(e)}var FG=SN,DG=NN,RG=TN,MG=CN;function PG(e){return new Lw(e)}function OG(e){return new zw(e)}function LG(e){return new Ww(e)}function zG(e){return new Ew(e)}var _N={};Re(_N,{MAPE:()=>YG,MSE:()=>QG,binaryAccuracy:()=>WG,binaryCrossentropy:()=>BG,categoricalAccuracy:()=>UG,categoricalCrossentropy:()=>GG,cosineProximity:()=>qG,mape:()=>JG,meanAbsoluteError:()=>KG,meanAbsolutePercentageError:()=>XG,meanSquaredError:()=>ZG,mse:()=>e6,precision:()=>HG,recall:()=>jG,sparseCategoricalAccuracy:()=>VG});function WG(e,t){return Jv(e,t)}function BG(e,t){return V2(e,t)}function VG(e,t){return U2(e,t)}function UG(e,t){return Zv(e,t)}function GG(e,t){return Qv(e,t)}function HG(e,t){return B2(e,t)}function jG(e,t){return EV(e,t)}function qG(e,t){return Yv(e,t)}function KG(e,t){return Wf(e,t)}function XG(e,t){return Hu(e,t)}function YG(e,t){return Hu(e,t)}function JG(e,t){return Hu(e,t)}function ZG(e,t){return wo(e,t)}function QG(e,t){return wo(e,t)}function e6(e,t){return wo(e,t)}var EN={};Re(EN,{modelFromJSON:()=>uU});var AN={};Re(AN,{l1:()=>n6,l1l2:()=>t6,l2:()=>a6});function t6(e){return new Yc(e)}function n6(e){return yU(e)}function a6(e){return bU(e)}var $N=class extends Tl{constructor(){super(...arguments),this.model=null}setModel(e){if(!(e instanceof Er))throw new Error("model must be a LayersModel, not some other Container");this.model=e}};function bh(e,t){return e<t}function Nk(e,t){return e>t}var FN=class extends $N{constructor(e){if(super(),e==null&&(e={}),e.restoreBestWeights)throw new Oe("restoreBestWeights = True is not implemented in EarlyStopping yet.");this.monitor=e.monitor||"val_loss",this.minDelta=Math.abs(e.minDelta||0),this.patience=e.patience||0,this.verbose=e.verbose||0,this.mode=e.mode||"auto",this.baseline=e.baseline,["auto","min","max"].indexOf(this.mode)===-1&&(console.warn(`EarlyStopping mode '${this.mode}' is invalid. Falling back to mode 'auto'.`),this.mode="auto"),this.mode==="min"?this.monitorFunc=bh:this.mode==="max"?this.monitorFunc=Nk:this.monitor.indexOf("acc")!==-1?this.monitorFunc=Nk:this.monitorFunc=bh,this.monitorFunc===bh&&(this.minDelta*=-1)}async onTrainBegin(e){this.wait=0,this.stoppedEpoch=0,this.baseline!=null?this.best=this.baseline:this.best=this.monitorFunc===bh?1/0:-1/0}async onEpochEnd(e,t){await Jr(t);let n=this.getMonitorValue(t);n!=null&&(this.monitorFunc(n-this.minDelta,this.best)?(this.best=n,this.wait=0):(this.wait++,this.wait>=this.patience&&(this.stoppedEpoch=e,this.model.stopTraining=!0)))}async onTrainEnd(e){this.stoppedEpoch>0&&this.verbose&&console.log(`Epoch ${this.stoppedEpoch}: early stopping.`)}getMonitorValue(e){e==null&&(e={});let t=e[this.monitor];return t==null&&console.warn(`Metric for EarlyStopping ${this.monitor} is not available. Available metrics are: ${Object.keys(e)}`),t}};function r6(e){return new FN(e)}var s6={earlyStopping:r6},i6=X();i6.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 Ia;(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"})(Ia||(Ia={}));var Tk;(function(e){let t;(function(n){n[n.LEGACY=0]="LEGACY",n[n.V1=1]="V1",n[n.V2=2]="V2"})(t=e.CheckpointFormatVersion||(e.CheckpointFormatVersion={}))})(Tk||(Tk={}));var s0={};function o6(e,t){let n={tfOpName:e,category:"custom",inputs:[],attrs:[],customExecutor:t};s0[e]=n}function DN(e){return s0[e]}function l6(e){delete s0[e]}function I(e,t,n,a,r){let s=t.inputParams[e];if(s&&s.inputIndexStart!==void 0){let o=s.inputIndexStart,l=s.inputIndexEnd===0?void 0:s.inputIndexEnd===void 0?o+1:s.inputIndexEnd;if(s.type==="tensor")return Sn(t.inputNames[s.inputIndexStart],n,a,r);if(s.type==="tensors")return t.inputNames.slice(o,l).map(d=>Sn(d,n,a,r));let u=Sn(t.inputNames.slice(o)[0],n,a,r),p=u.dataSync();return s.type==="number"?p[0]:k.toNestedArray(u.shape,p)}let i=t.attrParams[e];return i&&i.value}function Sn(e,t,n,a){let[r,s]=Yn(e);if(a!=null){let o=a.getHashTableHandleByName(r);if(o!=null)return o}let i=n.currentContextIds.find(o=>!!t[tm(r,o)]);return i!==void 0?t[tm(r,i)][s]:void 0}function u6(e,t,n){return t[tm(e,n.currentContextId)]}function lr(e,t){let[n,a,r]=Yn(e);return[tm(n,t&&t.currentContextId),a,r]}function tm(e,t){return t?`${e}-${t}`:e}function Yn(e){let t=e.split(":");if(t.length===1)return[e,0,void 0];let n=t[0],a=t.length===3?t[1]:void 0,r=Number(t[t.length-1]);return[n,r,a]}function Ch(e,t,n){let a=I("pad",e,t,n);if(a==="explicit"){a=I("explicitPaddings",e,t,n);let r=[[0,0],[0,0],[0,0],[0,0]];for(let s=0;s<4;s++)r[s][0]=a[s*2],r[s][1]=a[s*2+1];return r}return a}function Nr(e){return e.kept?e:_r(e)}var RN={};Re(RN,{json:()=>p6});var p6=[{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}]}],MN={};Re(MN,{json:()=>c6});var c6=[{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}]}],PN={};Re(PN,{json:()=>d6});var d6=[{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:"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"}]}],ON={};Re(ON,{json:()=>h6});var h6=[{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"}]},{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"}]}],LN={};Re(LN,{json:()=>m6});var m6=[{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",notSupported:!0}]},{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:"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"}]}],zN={};Re(zN,{json:()=>f6});var f6=[{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}]}],WN={};Re(WN,{json:()=>g6});var g6=[{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:"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"}]}],BN={};Re(BN,{json:()=>y6});var y6=[{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"}]}],VN={};Re(VN,{json:()=>b6});var b6=[{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"}]}],UN={};Re(UN,{json:()=>x6});var x6=[{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"}]}],GN={};Re(GN,{json:()=>v6});var v6=[{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}]}],HN={};Re(HN,{json:()=>w6});var w6=[{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:"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"}]}],jN={};Re(jN,{json:()=>k6});var k6=[{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}]}],qN={};Re(qN,{json:()=>I6});var I6=[{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"}]}],KN={};Re(KN,{json:()=>S6});var S6=[{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}]}],XN={};Re(XN,{json:()=>N6});var N6=[{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"}]}],YN={};Re(YN,{json:()=>T6});var T6=[{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}]}],JN={};Re(JN,{json:()=>C6});var C6=[{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"}]}],ZN={};Re(ZN,{json:()=>_6});var _6=[{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:[]}],Ck=class{static get Instance(){return this._instance||(this._instance=new this)}constructor(){let e=[RN,MN,PN,ON,LN,zN,WN,BN,VN,UN,GN,HN,jN,qN,KN,XN,YN,JN,ZN],t=[].concat(...e.map(n=>n.json));this.opMappers=t.reduce((n,a)=>(n[a.tfOpName]=a,n),{})}transformGraph(e,t={}){let n=e.node,a=[],r=[],s=[],i=n.reduce((m,f)=>(m[f.name]=this.mapNode(f),f.op.startsWith("Placeholder")?a.push(m[f.name]):f.op==="Const"?r.push(m[f.name]):(f.input==null||f.input.length===0)&&s.push(m[f.name]),m),{}),o=[],l=[],u={},p={};t!=null&&(u=this.mapSignatureEntries(t.inputs),p=this.mapSignatureEntries(t.outputs));let d=Object.keys(i);d.forEach(m=>{let f=i[m];f.inputNames.forEach((g,y)=>{let[b,,x]=lr(g),v=i[b];if(v.outputs!=null){let w=v.outputs.indexOf(x);if(w!==-1){let T=`${b}:${w}`;f.inputNames[y]=T}}f.inputs.push(v),v.children.push(f)})}),Object.keys(p).length===0?d.forEach(m=>{let f=i[m];f.children.length===0&&l.push(f)}):Object.keys(p).forEach(m=>{let[f]=lr(m),g=i[f];g!=null&&(g.signatureKey=p[m],l.push(g))}),Object.keys(u).length>0?Object.keys(u).forEach(m=>{let[f]=lr(m),g=i[f];g&&(g.signatureKey=u[m],o.push(g))}):o=a;let c={};e.library!=null&&e.library.function!=null&&(c=e.library.function.reduce((m,f)=>(m[f.signature.name]=this.mapFunction(f),m),{}));let h={nodes:i,inputs:o,outputs:l,weights:r,placeholders:a,signature:t,functions:c};return s.length>0&&(h.initNodes=s),h}mapSignatureEntries(e){return Object.keys(e||{}).reduce((t,n)=>(t[e[n].name]=n,t),{})}mapNode(e){let t=DN(e.op)||this.opMappers[e.op]||{};e.attr==null&&(e.attr={});let n={name:e.name,op:e.op,category:t.category,inputNames:(e.input||[]).map(a=>a.startsWith("^")?a.substr(1):a),inputs:[],children:[],inputParams:{},attrParams:{},rawAttrs:e.attr,outputs:t.outputs};return t.inputs!=null&&(n.inputParams=t.inputs.reduce((a,r)=>(a[r.name]={type:r.type,inputIndexStart:r.start,inputIndexEnd:r.end},a),{})),t.attrs!=null&&(n.attrParams=t.attrs.reduce((a,r)=>{let s=r.type,i;switch(r.type){case"string":i=Yb(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Yb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"string[]":i=ax(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=ax(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number":i=Zb(e.attr,r.tfName,r.defaultValue||0),i===void 0&&!!r.tfDeprecatedName&&(i=Zb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"number[]":i=nx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=nx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool":i=Jb(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Jb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"bool[]":i=sx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=sx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape":i=tx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=tx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"shape[]":i=rx(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=rx(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype":i=Qb(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=Qb(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"dtype[]":i=ex(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=ex(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"func":i=_k(e.attr,r.tfName,r.defaultValue),i===void 0&&!!r.tfDeprecatedName&&(i=_k(e.attr,r.tfDeprecatedName,r.defaultValue));break;case"tensor":case"tensors":break;default:throw new Error(`Unsupported param type: ${r.type} for op: ${e.op}`)}return a[r.name]={value:i,type:s},a},{})),n}mapFunction(e){let t=e.nodeDef,n=[],a=[],r={};t!=null&&(r=t.reduce((u,p)=>(u[p.name]=this.mapNode(p),p.op==="Const"&&a.push(u[p.name]),u),{}));let s=[],i=[];e.signature.inputArg.forEach(u=>{let[p]=lr(u.name),d={name:p,op:"Placeholder",inputs:[],inputNames:[],category:"graph",inputParams:{},attrParams:{dtype:{value:i0(u.type),type:"dtype"}},children:[]};d.signatureKey=u.name,s.push(d),r[p]=d}),Object.keys(r).forEach(u=>{let p=r[u];p.inputNames.forEach((d,c)=>{let[h,,m]=lr(d),f=r[h];if(f.outputs!=null){let g=f.outputs.indexOf(m);if(g!==-1){let y=`${h}:${g}`;p.inputNames[c]=y}}p.inputs.push(f),f.children.push(p)})});let o=e.ret;e.signature.outputArg.forEach(u=>{let[p,d]=lr(o[u.name]),c=r[p];c!=null&&(c.defaultOutput=d,i.push(c))});let l=this.mapArgsToSignature(e);return{nodes:r,inputs:s,outputs:i,weights:a,placeholders:n,signature:l}}mapArgsToSignature(e){return{methodName:e.signature.name,inputs:e.signature.inputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n),t),{}),outputs:e.signature.outputArg.reduce((t,n)=>(t[n.name]=this.mapArgToTensorInfo(n,e.ret),t),{})}}mapArgToTensorInfo(e,t){let n=e.name;return t!=null&&(n=t[n]),{name:n,dtype:e.type}}};function E6(e){let t=X().global;if(typeof t.atob!="undefined")return t.atob(e);if(typeof Buffer!="undefined")return new Buffer(e,"base64").toString();throw new Error("Unable to decode base64 in this environment. Missing built-in atob() or Buffer()")}function QN(e,t){let n=Array.isArray(e)?String.fromCharCode.apply(null,e):E6(e);return t?n:n.toLowerCase()}function Yb(e,t,n,a=!1){let r=e[t];return r!=null?QN(r.s,a):n}function Jb(e,t,n){let a=e[t];return a?a.b:n}function Zb(e,t,n){let a=e[t]||{},r=a.i!=null?a.i:a.f!=null?a.f:n;return typeof r=="number"?r:parseInt(r,10)}function i0(e){switch(typeof e=="string"&&(e=Ia[e]),e){case Ia.DT_FLOAT:case Ia.DT_HALF:return"float32";case Ia.DT_INT32:case Ia.DT_INT64:case Ia.DT_INT8:case Ia.DT_UINT8:return"int32";case Ia.DT_BOOL:return"bool";case Ia.DT_DOUBLE:return"float32";case Ia.DT_STRING:return"string";default:return null}}function _k(e,t,n){let a=e[t];return a&&a.func?a.func.name:n}function Qb(e,t,n){let a=e[t];return a&&a.type?i0(a.type):n}function ex(e,t,n){let a=e[t];return a&&a.list&&a.list.type?a.list.type.map(r=>i0(r)):n}function eT(e){if(!e.unknownRank)return e.dim!=null?e.dim.map(t=>typeof t.size=="number"?t.size:parseInt(t.size,10)):[]}function tx(e,t,n){let a=e[t];return a&&a.shape?eT(a.shape):n}function nx(e,t,n){let a=e[t];return a?((a.list.f&&a.list.f.length?a.list.f:a.list.i)||[]).map(r=>typeof r=="number"?r:parseInt(r,10)):n}function ax(e,t,n,a=!1){let r=e[t];return r&&r.list&&r.list.s?r.list.s.map(s=>QN(s,a)):n}function rx(e,t,n){let a=e[t];return a&&a.list&&a.list.shape?a.list.shape.map(r=>eT(r)):n}function sx(e,t,n){let a=e[t];return a&&a.list&&a.list.b?a.list.b:n}var A6=class{constructor(e,t,n){this.node=e,this.tensorMap=t,this.context=n,this.inputs=[],this.attrs={},this.inputs=e.inputNames.map(a=>this.getInput(a)),e.rawAttrs!=null&&(this.attrs=Object.keys(e.rawAttrs).reduce((a,r)=>(a[r]=this.getAttr(r),a),{}))}getInput(e){return 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 Zb(this.node.rawAttrs,e,t);if(n.s!=null)return Yb(this.node.rawAttrs,e,t);if(n.b!=null)return Jb(this.node.rawAttrs,e,t);if(n.shape!=null)return tx(this.node.rawAttrs,e,t);if(n.type!=null)return Qb(this.node.rawAttrs,e,t);if(n.list!=null){if(n.list.i!=null||n.list.f!=null)return nx(this.node.rawAttrs,e,t);if(n.list.s!=null)return ax(this.node.rawAttrs,e,t);if(n.list.shape!=null)return rx(this.node.rawAttrs,e,t);if(n.list.b!=null)return sx(this.node.rawAttrs,e,t);if(n.list.type!=null)return ex(this.node.rawAttrs,e,t)}return t}},$6=(e,t,n)=>{switch(e.op){case"BiasAdd":case"AddV2":case"Add":return[J(I("a",e,t,n),I("b",e,t,n))];case"AddN":return[xS(I("tensors",e,t,n))];case"FloorMod":case"Mod":return[yv(I("a",e,t,n),I("b",e,t,n))];case"Mul":return[W(I("a",e,t,n),I("b",e,t,n))];case"RealDiv":case"Div":return[fe(I("a",e,t,n),I("b",e,t,n))];case"DivNoNan":return[iv(I("a",e,t,n),I("b",e,t,n))];case"FloorDiv":return[Km(I("a",e,t,n),I("b",e,t,n))];case"Sub":return[ce(I("a",e,t,n),I("b",e,t,n))];case"Minimum":return[zu(I("a",e,t,n),I("b",e,t,n))];case"Maximum":return[fr(I("a",e,t,n),I("b",e,t,n))];case"Pow":return[$r(I("a",e,t,n),I("b",e,t,n))];case"SquaredDifference":return[gf(I("a",e,t,n),I("b",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},F6=(e,t,n)=>{switch(e.op){case"Abs":case"ComplexAbs":return[zt(I("x",e,t,n))];case"Acos":return[Ux(I("x",e,t,n))];case"Acosh":return[Gx(I("x",e,t,n))];case"Asin":return[jx(I("x",e,t,n))];case"Asinh":return[qx(I("x",e,t,n))];case"Atan":return[Kx(I("x",e,t,n))];case"Atan2":return[Xx(I("x",e,t,n),I("y",e,t,n))];case"Atanh":return[Yx(I("x",e,t,n))];case"Ceil":return[ev(I("x",e,t,n))];case"Complex":return[os(I("real",e,t,n),I("imag",e,t,n))];case"Cos":return[Pc(I("x",e,t,n))];case"Cosh":return[Zm(I("x",e,t,n))];case"Elu":return[Ou(I("x",e,t,n))];case"Erf":return[ov(I("x",e,t,n))];case"Exp":return[gn(I("x",e,t,n))];case"Expm1":return[lv(I("x",e,t,n))];case"Floor":return[Lu(I("x",e,t,n))];case"Log":return[ta(I("x",e,t,n))];case"Log1p":return[Lc(I("x",e,t,n))];case"Imag":return[ef(I("x",e,t,n))];case"Neg":return[St(I("x",e,t,n))];case"Reciprocal":return[vv(I("x",e,t,n))];case"Real":return[nc(I("x",e,t,n))];case"Relu":return[Xe(I("x",e,t,n))];case"Round":return[uf(I("x",e,t,n))];case"Selu":return[cf(I("x",e,t,n))];case"Sigmoid":return[ma(I("x",e,t,n))];case"Sin":return[df(I("x",e,t,n))];case"Sign":return[wv(I("x",e,t,n))];case"Sinh":return[hf(I("x",e,t,n))];case"Softplus":return[bo(I("x",e,t,n))];case"Sqrt":return[un(I("x",e,t,n))];case"Square":return[ut(I("x",e,t,n))];case"Tanh":return[li(I("x",e,t,n))];case"Tan":return[Sv(I("x",e,t,n))];case"ClipByValue":return[nn(I("x",e,t,n),I("clipValueMin",e,t,n),I("clipValueMax",e,t,n))];case"Relu6":return[lf(I("x",e,t,n))];case"Rsqrt":return[pf(Sn(e.inputNames[0],t,n))];case"Prod":return[of(I("x",e,t,n),I("axes",e,t,n))];case"LeakyRelu":return[Oc(I("x",e,t,n),I("alpha",e,t,n))];case"Prelu":return[Bc(I("x",e,t,n),I("alpha",e,t,n))];case"IsNan":return[pv(Sn(e.inputNames[0],t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Na(e,t,n=""){if(!(typeof e=="number"||typeof t=="number")){k.assert(e.length===t.length,()=>n+` Shapes ${e} and ${t} must match`);for(let a=0;a<e.length;a++){let r=e[a],s=t[a];k.assert(r<0||s<0||r===s,()=>n+` Shapes ${e} and ${t} must match`)}}}function Ek(e){return!(typeof e=="number"||e.some(t=>t<0))}function Dp(e,t,n){let a=ix(e,n),r=!Ek(a);if(r&&t.length===0)throw new Error(`Tried to calculate elements of an empty list with non-fully-defined elementShape: ${a}`);if(r&&t.forEach(s=>{a=ix(s.shape,a)}),!Ek(a))throw new Error(`Non-fully-defined elementShape: ${a}`);return a}function ix(e,t){if(typeof e=="number")return t;if(typeof t=="number")return e;if(e.length!==t.length)throw new Error(`Incompatible ranks during merge: ${e} vs. ${t}`);let n=[];for(let a=0;a<e.length;++a){let r=e[a],s=t[a];if(r>=0&&s>=0&&r!==s)throw new Error(`Incompatible shape during merge: ${e} vs. ${t}`);n[a]=r>=0?r:s}return n}var D6=class{constructor(e,t,n,a,r,s,i){this.name=e,this.dtype=t,this.maxSize=n,this.elementShape=a,this.identicalElementShapes=r,this.dynamicSize=s,this.clearAfterRead=i,this.tensors=[],this.closed_=!1,this.idTensor=ke(0),en(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),Na(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,en(t),n.written=!0,this.tensors[e]=n}writeMany(e,t){if(e.length!==t.length)throw new Error(`TensorArray ${this.name}: could not write multiple tensors,because the index size: ${e.length} is not the same as tensors size: ${t.length}.`);e.forEach((n,a)=>this.write(n,t[a]))}gather(e,t){if(!!t&&t!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but gather requested dtype ${t}`);if(e)e=e.slice(0,this.size());else{e=[];for(let a=0;a<this.size();a++)e.push(a)}if(e.length===0)return Qn([],[0].concat(this.elementShape));let n=this.readMany(e);return Na(this.elementShape,n[0].shape,"TensorArray shape mismatch: "),Mt(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 Qn([],[0].concat(this.elementShape));let t=[];for(let a=0;a<this.size();a++)t.push(a);let n=this.readMany(t);return Na(this.elementShape,n[0].shape,`TensorArray shape mismatch: tensor array shape (${this.elementShape}) vs first tensor shape (${n[0].shape})`),Qe(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,mt(t,0))}split(e,t){if(t.dtype!==this.dtype)throw new Error(`TensorArray dtype is ${this.dtype} but tensor has dtype ${t.dtype}`);let n=0,a=e.map(o=>(n+=o,n));if(n!==t.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${n}, and tensor's shape is: ${t.shape}`);if(!this.dynamicSize&&e.length!==this.maxSize)throw new Error(`TensorArray's size is not equal to the size of lengths (${this.maxSize} vs. ${e.length}), and the TensorArray is not marked as dynamically resizeable`);let r=n===0?0:t.size/n,s=[];O(()=>{t=V(t,[1,n,r]);for(let o=0;o<e.length;++o){let l=o===0?0:a[o-1],u=[0,l,0],p=[1,e[o],r];s[o]=V(Ge(t,u,p),this.elementShape)}return s});let i=[];for(let o=0;o<e.length;o++)i[o]=o;this.writeMany(i,s)}},nd=class{constructor(e,t,n,a=-1){this.tensors=e,this.elementShape=t,this.elementDtype=n,e!=null&&e.forEach(r=>{if(n!==r.dtype)throw new Error(`Invalid data types; op elements ${n}, but list elements ${r.dtype}`);Na(t,r.shape,"TensorList shape mismatch: "),en(r)}),this.idTensor=ke(0),this.maxNumElements=a,en(this.idTensor)}get id(){return this.idTensor.id}copy(){return new nd([...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.`);Na(e,this.elementShape,"TensorList shape mismatch: ");let a=Dp(this.elementShape,this.tensors,e);return O(()=>{let r=this.tensors.map(s=>V(s,a));return Mt(r,0)})}popBack(e,t){if(t!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t}, but list elements ${this.elementDtype}`);if(this.size()===0)throw new Error("Trying to pop from an empty list.");let n=Dp(this.elementShape,this.tensors,e),a=this.tensors.pop();return Na(a.shape,e,"TensorList shape mismatch: "),V(a,n)}pushBack(e){if(e.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${this.elementDtype}`);if(Na(e.shape,this.elementShape,"TensorList shape mismatch: "),this.maxNumElements===this.size())throw new Error("Trying to push element into a full list.");en(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}.`);this.tensors.length=e}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.`);Na(this.tensors[e].shape,t,"TensorList shape mismatch: ");let a=Dp(this.elementShape,this.tensors,t);return V(this.tensors[e],a)}setItem(e,t){if(t.dtype!==this.elementDtype)throw new Error(`Invalid data types; op elements ${t.dtype}, but list elements ${this.elementDtype}`);if(e<0||this.maxNumElements!==-1&&e>=this.maxNumElements)throw new Error(`Trying to set element ${e} in a list with max ${this.maxNumElements} elements.`);Na(this.elementShape,t.shape,"TensorList shape mismatch: "),en(t),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}`);Na(this.elementShape,n,"TensorList shape mismatch: "),e=e.slice(0,this.size());let a=Dp(this.elementShape,this.tensors,n);return e.length===0?Qn([],[0].concat(a)):O(()=>{let r=e.map(s=>V(this.tensors[s],a));return Mt(r,0)})}concat(e,t){if(!!e&&e!==this.elementDtype)throw new Error(`TensorList dtype is ${this.elementDtype} but concat requested dtype ${e}`);Na(this.elementShape,t,"TensorList shape mismatch: ");let n=Dp(this.elementShape,this.tensors,t);return this.size()===0?Qn([],[0].concat(n)):O(()=>{let a=this.tensors.map(r=>V(r,n));return Qe(a,0)})}};function R6(e,t,n){let a=e.dtype;if(e.shape.length<1)throw new Error(`Tensor must be at least a vector, but saw shape: ${e.shape}`);if(e.dtype!==n)throw new Error(`Invalid data types; op elements ${e.dtype}, but list elements ${n}`);let r=e.shape.slice(1);Na(r,t,"TensorList shape mismatch: ");let s=mt(e);return new nd(s,t,a)}function M6(e,t,n){return new nd([],e,t,n)}function P6(e,t,n,a){if(t.length!==e.shape[0])throw new Error(`Expected len(indices) == tensor.shape[0], but saw: ${t.length} vs. ${e.shape[0]}`);let r=Math.max(...t);if(a!=null&&a!==-1&&r>=a)throw new Error(`Max index must be < array size (${r} vs. ${a})`);let s=new nd([],n,e.dtype,a),i=mt(e,0);return t.forEach((o,l)=>{s.setItem(o,i[l])}),s}function O6(e,t,n){let a=0,r=t.map(p=>(a+=p,a));if(a!==e.shape[0])throw new Error(`Expected sum of lengths to be equal to
|
|
tensor.shape[0], but sum of lengths is
|
|
${a}, and tensor's shape is: ${e.shape}`);let s=e.shape.slice(1),i=ix(s,n),o=a===0?0:e.size/a,l=O(()=>{let p=[];e=V(e,[1,a,o]);for(let d=0;d<t.length;++d){let c=d===0?0:r[d-1],h=[0,c,0],m=[1,t[d],o];p[d]=V(Ge(e,h,m),i)}return e.dispose(),p}),u=new nd([],n,e.dtype,t.length);for(let p=0;p<l.length;p++)u.setItem(p,l[p]);return u}var L6=async(e,t,n)=>{switch(e.op){case"If":case"StatelessIf":{let a=I("thenBranch",e,t,n),r=I("elseBranch",e,t,n),s=I("cond",e,t,n),i=I("args",e,t,n);return(await s.data())[0]?n.functionMap[a].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap):n.functionMap[r].executeFunctionAsync(i,n.tensorArrayMap,n.tensorListMap)}case"While":case"StatelessWhile":{let a=I("body",e,t,n),r=I("cond",e,t,n),s=I("args",e,t,n),i=await n.functionMap[r].executeFunctionAsync(s,n.tensorArrayMap,n.tensorListMap),o=s.map(p=>p.id),l=await i[0].data();i.forEach(p=>{!p.kept&&o.indexOf(p.id)===-1&&p.dispose()});let u=s;for(;l[0];){let p=u;u=await n.functionMap[a].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);let d=u.map(h=>h.id);p.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&d.indexOf(h.id)===-1&&h.dispose()});let c=await n.functionMap[r].executeFunctionAsync(u,n.tensorArrayMap,n.tensorListMap);l=await c[0].data(),c.forEach(h=>{!h.kept&&o.indexOf(h.id)===-1&&d.indexOf(h.id)===-1&&h.dispose()})}return u}case"LoopCond":{let a=I("pred",e,t,n);return[Nr(a)]}case"Switch":{let a=I("pred",e,t,n),r=I("data",e,t,n);return r.kept||(r=Nr(r)),(await a.data())[0]?[void 0,r]:[r,void 0]}case"Merge":{let a=e.inputNames.find(r=>Sn(r,t,n)!==void 0);if(a){let r=Sn(a,t,n);return[Nr(r)]}return}case"Enter":{let a=I("frameName",e,t,n),r=I("tensor",e,t,n);return n.enterFrame(a),[Nr(r)]}case"Exit":{let a=I("tensor",e,t,n);return n.exitFrame(),[Nr(a)]}case"NextIteration":{let a=I("tensor",e,t,n);return n.nextIteration(),[Nr(a)]}case"TensorArrayV3":{let a=I("size",e,t,n),r=I("dtype",e,t,n),s=I("elementShape",e,t,n),i=I("dynamicSize",e,t,n),o=I("clearAfterRead",e,t,n),l=I("identicalElementShapes",e,t,n),u=I("name",e,t,n),p=new D6(u,r,a,s,l,i,o);return n.addTensorArray(p),[p.idTensor,ke(1)]}case"TensorArrayWriteV3":{let a=I("tensorArrayId",e,t,n),r=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(a.id);return i.write(r,s),[i.idTensor]}case"TensorArrayReadV3":{let a=I("tensorArrayId",e,t,n),r=I("index",e,t,n);return[n.getTensorArray(a.id).read(r)]}case"TensorArrayGatherV3":{let a=I("tensorArrayId",e,t,n),r=I("indices",e,t,n),s=I("dtype",e,t,n);return[n.getTensorArray(a.id).gather(r,s)]}case"TensorArrayScatterV3":{let a=I("tensorArrayId",e,t,n),r=I("indices",e,t,n),s=I("tensor",e,t,n),i=n.getTensorArray(a.id);return i.scatter(r,s),[i.idTensor]}case"TensorArrayConcatV3":{let a=I("tensorArrayId",e,t,n),r=n.getTensorArray(a.id),s=I("dtype",e,t,n);return[r.concat(s)]}case"TensorArraySplitV3":{let a=I("tensorArrayId",e,t,n),r=I("tensor",e,t,n),s=I("lengths",e,t,n),i=n.getTensorArray(a.id);return i.split(s,r),[i.idTensor]}case"TensorArraySizeV3":{let a=I("tensorArrayId",e,t,n),r=n.getTensorArray(a.id);return[ke(r.size(),"int32")]}case"TensorArrayCloseV3":{let a=I("tensorArrayId",e,t,n),r=n.getTensorArray(a.id);return r.clearAndClose(),[r.idTensor]}case"TensorListSetItem":{let a=I("tensorListId",e,t,n),r=I("index",e,t,n),s=I("tensor",e,t,n),i=n.getTensorList(a.id);return i.setItem(r,s),[i.idTensor]}case"TensorListGetItem":{let a=I("tensorListId",e,t,n),r=I("index",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(a.id).getItem(r,s,i)]}case"TensorListScatterV2":case"TensorListScatter":{let a=I("indices",e,t,n),r=I("tensor",e,t,n),s=I("elementShape",e,t,n),i=I("numElements",e,t,n),o=P6(r,a,s,i);return n.addTensorList(o),[o.idTensor]}case"TensorListReserve":case"EmptyTensorList":{let a=I("elementShape",e,t,n),r=I("elementDType",e,t,n),s;e.op==="TensorListReserve"?s="numElements":s="maxNumElements";let i=I(s,e,t,n),o=M6(a,r,i);return n.addTensorList(o),[o.idTensor]}case"TensorListGather":{let a=I("tensorListId",e,t,n),r=I("indices",e,t,n),s=I("elementShape",e,t,n),i=I("elementDType",e,t,n);return[n.getTensorList(a.id).gather(r,i,s)]}case"TensorListStack":{let a=I("tensorListId",e,t,n),r=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=I("numElements",e,t,n);return[n.getTensorList(a.id).stack(r,s,i)]}case"TensorListFromTensor":{let a=I("tensor",e,t,n),r=I("elementShape",e,t,n),s=I("elementDType",e,t,n),i=R6(a,r,s);return n.addTensorList(i),[i.idTensor]}case"TensorListConcat":{let a=I("tensorListId",e,t,n),r=n.getTensorList(a.id),s=I("dtype",e,t,n),i=I("elementShape",e,t,n);return[r.concat(s,i)]}case"TensorListPushBack":{let a=I("tensorListId",e,t,n),r=I("tensor",e,t,n),s=n.getTensorList(a.id);return s.pushBack(r),[s.idTensor]}case"TensorListPopBack":{let a=I("tensorListId",e,t,n),r=I("elementShape",e,t,n),s=I("elementDType",e,t,n);return[n.getTensorList(a.id).popBack(r,s)]}case"TensorListSplit":{let a=I("tensor",e,t,n),r=I("elementShape",e,t,n),s=I("lengths",e,t,n),i=O6(a,s,r);return n.addTensorList(i),[i.idTensor]}default:throw TypeError(`Node type ${e.op} is not implemented`)}};function Ak(e,t,n){let[a,r]=I("fusedOps",e,t,n),s=a==="biasadd",i=!s,o=r==="prelu",l=a==="fusedbatchnorm",u=I("numArgs",e,t,n);if(s){if(o&&u!==2)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!o&&s&&u!==1)throw new Error("FusedConv2d and DepthwiseConv2d with BiasAdd must have one extra argument: bias.")}if(l)throw new Error("FusedConv2d and DepthwiseConv2d with FusedBatchNorm is not supported");let p=I("strides",e,t,n),d=Ch(e,t,n),c=I("dataFormat",e,t,n).toUpperCase(),h=I("dilations",e,t,n),[m,f]=I("args",e,t,n);i&&(f=m,m=void 0);let g=I("leakyreluAlpha",e,t,n);return{stride:p,pad:d,dataFormat:c,dilations:h,biasArg:m,preluArg:f,activationFunc:r,leakyreluAlpha:g}}var z6=(e,t,n)=>{switch(e.op){case"Conv1D":{let a=I("stride",e,t,n),r=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilation",e,t,n);return[Ym(I("x",e,t,n),I("filter",e,t,n),a,r,s,i)]}case"Conv2D":{let a=I("strides",e,t,n),r=Ch(e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[Rt(I("x",e,t,n),I("filter",e,t,n),[a[1],a[2]],r,s,[i[1],i[2]])]}case"_FusedConv2D":{let{stride:a,pad:r,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:p}=Ak(e,t,n);return[us.conv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[a[1],a[2]],pad:r,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:p})]}case"FusedDepthwiseConv2dNative":{let{stride:a,pad:r,dataFormat:s,dilations:i,biasArg:o,preluArg:l,activationFunc:u,leakyreluAlpha:p}=Ak(e,t,n);return[us.depthwiseConv2d({x:I("x",e,t,n),filter:I("filter",e,t,n),strides:[a[1],a[2]],pad:r,dataFormat:s,dilations:[i[1],i[2]],bias:o,activation:u,preluActivationWeights:l,leakyreluAlpha:p})]}case"Conv2DBackpropInput":case"Conv2dTranspose":{let a=I("outputShape",e,t,n),r=I("strides",e,t,n),s=Ch(e,t,n);return[Jm(I("x",e,t,n),I("filter",e,t,n),a,[r[1],r[2]],s)]}case"DepthwiseConv2dNative":case"DepthwiseConv2d":{let a=I("strides",e,t,n),r=Ch(e,t,n),s=I("dilations",e,t,n),i=I("dataFormat",e,t,n).toUpperCase();return[Is(I("input",e,t,n),I("filter",e,t,n),[a[1],a[2]],r,i,[s[1],s[2]])]}case"Conv3D":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("dataFormat",e,t,n).toUpperCase(),i=I("dilations",e,t,n);return[nv(I("x",e,t,n),I("filter",e,t,n),[a[1],a[2],a[3]],r,s,[i[1],i[2],i[3]])]}case"AvgPool":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[ga(I("x",e,t,n),[s[1],s[2]],[a[1],a[2]],r)]}case"MaxPool":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Pt(I("x",e,t,n),[s[1],s[2]],[a[1],a[2]],r)]}case"MaxPoolWithArgmax":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("kernelSize",e,t,n),i=I("includeBatchInIndex",e,t,n),{result:o,indexes:l}=HS(I("x",e,t,n),[s[1],s[2]],[a[1],a[2]],r,i);return[o,l]}case"AvgPool3D":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[Zx(I("x",e,t,n),[s[1],s[2],s[3]],[a[1],a[2],a[3]],r)]}case"MaxPool3D":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("kernelSize",e,t,n);return[fv(I("x",e,t,n),[s[1],s[2],s[3]],[a[1],a[2],a[3]],r)]}case"Dilation2D":{let a=I("strides",e,t,n),r=I("pad",e,t,n),s=I("dilations",e,t,n),i=a[1],o=a[2],l=s[1],u=s[2];return[sv(I("x",e,t,n),I("filter",e,t,n),[i,o],r,[l,u],"NHWC")]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},W6=(e,t,n)=>{switch(e.op){case"Fill":{let a=I("shape",e,t,n),r=I("dtype",e,t,n),s=I("value",e,t,n);return[_n(a,s,r)]}case"LinSpace":{let a=I("start",e,t,n),r=I("stop",e,t,n),s=I("num",e,t,n);return[LS(a,r,s)]}case"Multinomial":{let a=I("logits",e,t,n),r=I("numSamples",e,t,n),s=I("seed",e,t,n);return[jS(a,r,s)]}case"OneHot":{let a=I("indices",e,t,n),r=I("depth",e,t,n),s=I("onValue",e,t,n),i=I("offValue",e,t,n);return[kl(a,r,s,i)]}case"Ones":return[Zn(I("shape",e,t,n),I("dtype",e,t,n))];case"OnesLike":return[na(I("x",e,t,n))];case"RandomUniform":return[Wu(I("shape",e,t,n),I("minval",e,t,n),I("maxval",e,t,n),I("dtype",e,t,n))];case"Range":{let a=I("start",e,t,n),r=I("stop",e,t,n),s=I("step",e,t,n);return[Il(a,r,s,I("dtype",e,t,n))]}case"TruncatedNormal":{let a=I("shape",e,t,n),r=I("mean",e,t,n),s=I("stdDev",e,t,n),i=I("seed",e,t,n);return[yf(a,r,s,I("dtype",e,t,n),i)]}case"Zeros":return[kt(I("shape",e,t,n),I("dtype",e,t,n))];case"ZerosLike":return[Ke(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function xb(e,t,n){let a=I("boxes",e,t,n),r=I("scores",e,t,n),s=I("maxOutputSize",e,t,n),i=I("iouThreshold",e,t,n),o=I("scoreThreshold",e,t,n),l=I("softNmsSigma",e,t,n);return{boxes:a,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}}var B6=async(e,t,n)=>{switch(e.op){case"NonMaxSuppressionV5":{let{boxes:a,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o,softNmsSigma:l}=xb(e,t,n),u=await Ln.nonMaxSuppressionWithScoreAsync(a,r,s,i,o,l);return[u.selectedIndices,u.selectedScores]}case"NonMaxSuppressionV4":{let{boxes:a,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=xb(e,t,n),l=I("padToMaxOutputSize",e,t,n),u=await Ln.nonMaxSuppressionPaddedAsync(a,r,s,i,o,l);return[u.selectedIndices,u.validOutputs]}case"NonMaxSuppressionV3":case"NonMaxSuppressionV2":{let{boxes:a,scores:r,maxOutputSize:s,iouThreshold:i,scoreThreshold:o}=xb(e,t,n);return[await Ln.nonMaxSuppressionAsync(a,r,s,i,o)]}case"Where":{let a=oe(I("condition",e,t,n),"bool"),r=[await Cv(a)];return a.dispose(),r}case"ListDiff":return XS(I("x",e,t,n),I("y",e,t,n));default:throw TypeError(`Node type ${e.op} is not implemented`)}},V6=(e,t,n)=>{switch(e.op){case"TopKV2":{let a=I("x",e,t,n),r=I("k",e,t,n),s=I("sorted",e,t,n),i=Nv(a,r,s);return[i.values,i.indices]}case"Unique":{let a=I("x",e,t,n),r=qh(a);return[r.values,r.indices]}case"UniqueV2":{let a=I("x",e,t,n),r=I("axis",e,t,n),s=qh(a,r);return[s.values,s.indices]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},U6=(e,t,n)=>{switch(e.op){case"Const":return t[e.name];case"PlaceholderWithDefault":let a=I("default",e,t,n);return[Sn(e.name,t,n)||a];case"Placeholder":return[Sn(e.name,t,n)];case"Identity":case"StopGradient":case"FakeQuantWithMinMaxVars":{let u=I("x",e,t,n);return[Nr(u)]}case"IdentityN":return I("x",e,t,n).map(u=>Nr(u));case"Snapshot":let r=I("x",e,t,n);return[Nr(r)];case"Shape":return[qe(I("x",e,t,n).shape,"int32")];case"ShapeN":return I("x",e,t,n).map(u=>qe(u.shape));case"Size":return[ke(I("x",e,t,n).size,"int32")];case"Rank":return[ke(I("x",e,t,n).rank,"int32")];case"NoOp":return[ke(1)];case"Print":let s=I("x",e,t,n),i=I("data",e,t,n),o=I("message",e,t,n),l=I("summarize",e,t,n);console.warn("The graph has a tf.print() operation,usually used for debugging, which slows down performance."),console.log(o);for(let u=0;u<i.length;u++)console.log(Array.prototype.slice.call(i[u].dataSync()).slice(0,l));return[s];default:throw TypeError(`Node type ${e.op} is not implemented`)}},G6=class{constructor(e,t){this.keyDType=e,this.valueDType=t,this.handle=ke(0),this.tensorMap=new Map,en(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 ke(this.size(),"int32")}async import(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return this.tensorMap.forEach(a=>a.dispose()),this.tensorMap.clear(),O(()=>{let a=mt(t),r=n.length,s=a.length;k.assert(r===s,()=>`The number of elements doesn't match, keys has ${r} elements, the values has ${s} elements.`);for(let i=0;i<r;i++){let o=n[i],l=a[i];en(l),this.tensorMap.set(o,l)}return this.handle})}async find(e,t){this.checkKeyAndValueTensor(e,t);let n=await e.data();return O(()=>{let a=[];for(let r=0;r<n.length;r++){let s=n[r],i=this.findWithDefault(s,t);a.push(i)}return Mt(a)})}findWithDefault(e,t){let n=this.tensorMap.get(e);return n!=null?n:t}checkKeyAndValueTensor(e,t){if(e.dtype!==this.keyDType)throw new Error(`Expect key dtype ${this.keyDType}, but got ${e.dtype}`);if(t.dtype!==this.valueDType)throw new Error(`Expect value dtype ${this.valueDType}, but got ${t.dtype}`)}},H6=async(e,t,n,a)=>{switch(e.op){case"HashTable":case"HashTableV2":{let r=I("keyDType",e,t,n),s=I("valueDType",e,t,n),i=new G6(r,s);return a.addHashTable(e.name,i),[i.handle]}case"LookupTableImport":case"LookupTableImportV2":{let r=I("tableHandle",e,t,n,a),s=I("keys",e,t,n),i=I("values",e,t,n);return[await a.getHashTableById(r.id).import(s,i)]}case"LookupTableFind":case"LookupTableFindV2":{let r=I("tableHandle",e,t,n,a),s=I("keys",e,t,n),i=I("defaultValue",e,t,n);return[await a.getHashTableById(r.id).find(s,i)]}case"LookupTableSize":case"LookupTableSizeV2":{let r=I("tableHandle",e,t,n,a);return[a.getHashTableById(r.id).tensorSize()]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},j6=(e,t,n)=>{switch(e.op){case"ResizeBilinear":{let a=I("images",e,t,n),r=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[Ln.resizeBilinear(a,[r[0],r[1]],s,i)]}case"ResizeNearestNeighbor":{let a=I("images",e,t,n),r=I("size",e,t,n),s=I("alignCorners",e,t,n),i=I("halfPixelCenters",e,t,n);return[Ln.resizeNearestNeighbor(a,[r[0],r[1]],s,i)]}case"CropAndResize":{let a=I("image",e,t,n),r=I("boxes",e,t,n),s=I("boxInd",e,t,n),i=I("cropSize",e,t,n),o=I("method",e,t,n),l=I("extrapolationValue",e,t,n);return[Ln.cropAndResize(a,r,s,i,o,l)]}case"ImageProjectiveTransformV3":{let a=I("images",e,t,n),r=I("transforms",e,t,n),s=I("outputShape",e,t,n),i=I("fillValue",e,t,n),o=I("interpolation",e,t,n),l=I("fillMode",e,t,n);return[Ln.transform(a,r,o.toLowerCase(),l.toLowerCase(),i,s)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},q6=(e,t,n)=>{switch(e.op){case"Equal":return[ea(I("a",e,t,n),I("b",e,t,n))];case"NotEqual":return[ci(I("a",e,t,n),I("b",e,t,n))];case"Greater":return[Gn(I("a",e,t,n),I("b",e,t,n))];case"GreaterEqual":return[Ss(I("a",e,t,n),I("b",e,t,n))];case"Less":return[tf(I("a",e,t,n),I("b",e,t,n))];case"LessEqual":return[Ns(I("a",e,t,n),I("b",e,t,n))];case"LogicalAnd":return[_a(I("a",e,t,n),I("b",e,t,n))];case"LogicalNot":return[zc(I("a",e,t,n))];case"LogicalOr":return[rf(I("a",e,t,n),I("b",e,t,n))];case"Select":case"SelectV2":return[fn(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`)}},K6=(e,t,n)=>{switch(e.op){case"BatchMatMul":case"BatchMatMulV2":case"MatMul":return[Fe(I("a",e,t,n),I("b",e,t,n),I("transposeA",e,t,n),I("transposeB",e,t,n))];case"Einsum":return[MS(I("equation",e,t,n),...I("tensors",e,t,n))];case"Transpose":return[Pe(I("x",e,t,n),I("perm",e,t,n))];case"_FusedMatMul":let[a,r]=I("fusedOps",e,t,n),s=a==="biasadd",i=r==="prelu",o=I("numArgs",e,t,n),l=I("leakyreluAlpha",e,t,n);if(s){if(i&&o!==2)throw new Error("Fused MatMul with BiasAdd and Prelu must have two extra arguments: bias and alpha.");if(!i&&o!==1)throw new Error("Fused MatMul with BiasAdd must have one extra argument: bias.")}let[u,p]=I("args",e,t,n);return[us.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:u,activation:r,preluActivationWeights:p,leakyreluAlpha:l})];default:throw TypeError(`Node type ${e.op} is not implemented`)}},X6=(e,t,n)=>{switch(e.op){case"FusedBatchNorm":case"FusedBatchNormV2":return[Ar(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[Ar(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[cv(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[Ja(I("x",e,t,n))];case"LogSoftmax":return[af(I("x",e,t,n))];case"SparseToDense":return[_v(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`)}},Y6=(e,t,n)=>{switch(e.op){case"Max":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Ta(I("x",e,t,n),i,o)]}case"Mean":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Et(I("x",e,t,n),i,o)]}case"Min":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[tc(I("x",e,t,n),i,o)]}case"Sum":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[be(I("x",e,t,n),i,o)]}case"All":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[Xm(I("x",e,t,n),i,o)]}case"Any":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[ec(I("x",e,t,n),i,o)]}case"ArgMax":{let i=I("axis",e,t,n);return[oi(I("x",e,t,n),i)]}case"ArgMin":{let i=I("axis",e,t,n);return[Hx(I("x",e,t,n),i)]}case"Prod":{let i=I("axis",e,t,n),o=I("keepDims",e,t,n);return[of(I("x",e,t,n),i,o)]}case"Cumprod":{let i=I("axis",e,t,n),o=I("exclusive",e,t,n),l=I("reverse",e,t,n);return[av(I("x",e,t,n),i,o,l)]}case"Cumsum":{let i=I("axis",e,t,n),o=I("exclusive",e,t,n),l=I("reverse",e,t,n);return[Qm(I("x",e,t,n),i,o,l)]}case"Bincount":let a=I("x",e,t,n),r=I("weights",e,t,n),s=I("size",e,t,n);return[Qx(a,r,s)];case"DenseBincount":{let i=I("x",e,t,n),o=I("weights",e,t,n),l=I("size",e,t,n),u=I("binaryOutput",e,t,n);return[DS(i,o,l,u)]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},J6=(e,t,n)=>{switch(e.op){case"ConcatV2":case"Concat":{let a=I("n",e,t,n),r=I("axis",e,t,n),s=I("tensors",e,t,n);return s=s.slice(0,a),[Qe(s,r)]}case"Gather":{let a=I("x",e,t,n),r=I("indices",e,t,n);return[ui(a,oe(r,"int32"),0)]}case"GatherV2":{let a=I("axis",e,t,n),r=I("batchDims",e,t,n),s=I("x",e,t,n),i=I("indices",e,t,n);return[ui(s,oe(i,"int32"),a,r)]}case"Reverse":{let a=I("dims",e,t,n),r=[];for(let i=0;i<a.length;i++)a[i]&&r.push(i);let s=I("x",e,t,n);return[aa(s,r)]}case"ReverseV2":{let a=I("axis",e,t,n),r=I("x",e,t,n);return[aa(r,a)]}case"Slice":{let a=I("begin",e,t,n),r=I("size",e,t,n);return[Ge(I("x",e,t,n),a,r)]}case"StridedSlice":{let a=I("begin",e,t,n),r=I("end",e,t,n),s=I("strides",e,t,n),i=I("beginMask",e,t,n),o=I("endMask",e,t,n),l=I("ellipsisMask",e,t,n),u=I("newAxisMask",e,t,n),p=I("shrinkAxisMask",e,t,n),d=I("x",e,t,n);return[Iv(d,a,r,s,i,o,l,u,p)]}case"Pack":return O(()=>{let a=I("axis",e,t,n),r=I("tensors",e,t,n),s=r[0].shape,i=dr(r[0]).shape,o=r.map(l=>{let u=k.arraysEqual(l.shape,s);if(!u&&!k.arraysEqual(dr(l).shape,i))throw new Error("the input tensors shape does not match");return u?l:V(l,s)});return[Mt(o,a)]});case"Unpack":{let a=I("axis",e,t,n),r=I("tensor",e,t,n);return mt(r,a)}case"Tile":{let a=I("reps",e,t,n);return[On(I("x",e,t,n),a)]}case"Split":case"SplitV":{let a=I("axis",e,t,n),r=I("numOrSizeSplits",e,t,n),s=I("x",e,t,n);return zn(s,r,a)}case"ScatterNd":{let a=I("indices",e,t,n),r=I("values",e,t,n),s=I("shape",e,t,n);return[QS(a,r,s)]}case"GatherNd":{let a=I("x",e,t,n),r=I("indices",e,t,n);return[e2(a,r)]}case"SparseToDense":{let a=I("sparseIndices",e,t,n),r=I("outputShape",e,t,n),s=I("sparseValues",e,t,n),i=I("defaultValue",e,t,n);return[_v(a,s,r,s.dtype===i.dtype?i:oe(i,s.dtype))]}default:throw TypeError(`Node type ${e.op} is not implemented`)}},Z6=(e,t,n)=>{switch(e.op){case"SparseFillEmptyRows":{let{outputIndices:a,outputValues:r,emptyRowIndicator:s,reverseIndexMap:i}=Op.sparseFillEmptyRows(I("indices",e,t,n),I("values",e,t,n),I("denseShape",e,t,n),I("defaultValue",e,t,n));return[a,r,s,i]}case"SparseReshape":{let{outputIndices:a,outputShape:r}=Op.sparseReshape(I("inputIndices",e,t,n),I("inputShape",e,t,n),I("newShape",e,t,n));return[a,r]}case"SparseSegmentMean":return[Op.sparseSegmentMean(I("data",e,t,n),I("indices",e,t,n),I("segmentIds",e,t,n))];case"SparseSegmentSum":return[Op.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`)}},Q6=(e,t,n)=>{switch(e.op){case"FFT":return[Vc(I("x",e,t,n))];case"IFFT":return[Sl(I("x",e,t,n))];case"RFFT":return[Uc(I("x",e,t,n))];case"IRFFT":return[ff(I("x",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},eH=(e,t,n)=>{switch(e.op){case"StringNGrams":{let{nGrams:a,nGramsSplits:r}=Th.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[a,r]}case"StringSplit":{let{indices:a,values:r,shape:s}=Th.stringSplit(I("input",e,t,n),I("delimiter",e,t,n),I("skipEmpty",e,t,n));return[a,r,s]}case"StringToHashBucketFast":return[Th.stringToHashBucketFast(I("input",e,t,n),I("numBuckets",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}},tH=(e,t,n)=>{switch(e.op){case"Cast":return[oe(I("x",e,t,n),I("dtype",e,t,n))];case"ExpandDims":{let a=I("axis",e,t,n);return[mn(I("x",e,t,n),a)]}case"Squeeze":{let a=I("axis",e,t,n);return[dr(I("x",e,t,n),a)]}case"Reshape":return[V(I("x",e,t,n),I("shape",e,t,n))];case"MirrorPad":return[gv(I("x",e,t,n),I("padding",e,t,n),I("mode",e,t,n))];case"PadV2":case"Pad":return[ya(I("x",e,t,n),I("padding",e,t,n),I("constantValue",e,t,n))];case"SpaceToBatchND":{let a=I("blockShape",e,t,n),r=I("paddings",e,t,n);return[Wc(I("x",e,t,n),a,r)]}case"BatchToSpaceND":{let a=I("blockShape",e,t,n),r=I("crops",e,t,n);return[Mc(I("x",e,t,n),a,r)]}case"DepthToSpace":{let a=I("blockSize",e,t,n),r=I("dataFormat",e,t,n).toUpperCase();return[rv(I("x",e,t,n),a,r)]}case"BroadcastTo":return[yl(I("x",e,t,n),I("shape",e,t,n))];case"BroadcastArgs":return[TS(I("s0",e,t,n),I("s1",e,t,n))];default:throw TypeError(`Node type ${e.op} is not implemented`)}};function $k(e,t,n,a){let r=((s,i,o)=>{switch(s.category){case"arithmetic":return O(()=>$6(s,i,o));case"basic_math":return O(()=>F6(s,i,o));case"control":return L6(s,i,o);case"convolution":return O(()=>z6(s,i,o));case"creation":return O(()=>W6(s,i,o));case"dynamic":return B6(s,i,o);case"evaluation":return O(()=>V6(s,i,o));case"image":return O(()=>j6(s,i,o));case"graph":return O(()=>U6(s,i,o));case"logical":return O(()=>q6(s,i,o));case"matrices":return O(()=>K6(s,i,o));case"normalization":return O(()=>X6(s,i,o));case"reduction":return O(()=>Y6(s,i,o));case"slice_join":return O(()=>J6(s,i,o));case"sparse":return O(()=>Z6(s,i,o));case"spectral":return O(()=>Q6(s,i,o));case"string":return O(()=>eH(s,i,o));case"transformation":return O(()=>tH(s,i,o));case"hash_table":return H6(s,i,o,a);case"custom":let l=DN(s.op);if(l&&l.customExecutor)return l.customExecutor(new A6(s,i,o));throw TypeError(`Custom op ${s.op} is not registered.`);default:throw TypeError(`Unknown op '${s.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 k.isPromise(r)?r.then(s=>[].concat(s)):[].concat(r)}var Fk=class{constructor(e={},t={},n={},a={}){this.weightMap=e,this.tensorArrayMap=t,this.tensorListMap=n,this.functionMap=a,this.rootContext={id:0,frameName:"",iterationId:0},this.contexts=[this.rootContext],this.lastId=0,this.generateCurrentContextIds()}newFrame(e,t){return{id:e,frameName:t,iterationId:0}}set currentContext(e){this.contexts!==e&&(this.contexts=e,this.generateCurrentContextIds())}get currentContext(){return this.contexts}get currentContextId(){return this._currentContextIds[0]}get currentContextIds(){return this._currentContextIds}generateCurrentContextIds(){let e=[];for(let t=0;t<this.contexts.length-1;t++){let n=this.contexts.slice(0,this.contexts.length-t);e.push(this.contextIdforContexts(n))}e.push(""),this._currentContextIds=e}contextIdforContexts(e){return e?e.map(t=>t.id===0&&t.iterationId===0?"":`${t.frameName}-${t.iterationId}`).join("/"):""}enterFrame(e){this.contexts&&(this.lastId++,this.contexts=this.contexts.slice(),this.contexts.push(this.newFrame(this.lastId,e)),this._currentContextIds.unshift(this.contextIdforContexts(this.contexts)))}exitFrame(){if(this.contexts&&this.contexts.length>1)this.contexts=this.contexts.slice(),this.contexts.splice(-1),this.currentContextIds.shift();else throw new Error("Cannot exit frame, the context is empty")}nextIteration(){if(this.contexts&&this.contexts.length>0){this.contexts=this.contexts.slice(),this.lastId++;let e=Object.assign({},this.contexts[this.contexts.length-1]);e.iterationId+=1,e.id=this.lastId,this.contexts.splice(-1,1,e),this._currentContextIds.splice(0,1,this.contextIdforContexts(this.contexts))}else throw new Error("Cannot increase frame iteration, the context is empty")}getWeight(e){return this.weightMap[e]}addTensorArray(e){this.tensorArrayMap[e.id]=e}getTensorArray(e){return this.tensorArrayMap[e]}addTensorList(e){this.tensorListMap[e.id]=e}getTensorList(e){return this.tensorListMap[e]}dispose(e){for(let t in this.tensorArrayMap)this.tensorArrayMap[t].clearAndClose(e);for(let t in this.tensorListMap)this.tensorListMap[t].clearAndClose(e)}};function Dk(e,t,n,a){let r=new Set,s=[],i=null,o=null,l=new Set,u=Object.keys(e).map(c=>Yn(c)[0]),p=[];a!=null&&(p=a.map(c=>Yn(c.name)[0]));let d=[...t];for(;d.length>0;){let c=d.pop();if((tT(c)||iH(c)||oH(c))&&i==null&&(i=c,o=i.children.map(h=>h.name).filter(h=>r.has(h))),r.add(c.name),n[c.name]==null&&u.indexOf(c.name)===-1&&p.indexOf(c.name)===-1){if(c.inputs.length===0){s.push(c.name);continue}c.inputs.forEach(h=>{l.has(h.name)||(l.add(h.name),d.push(h))})}}return{inputs:e,outputs:t,usedNodes:r,missingInputs:s,dynamicNode:i,syncInputs:o}}function nH(e,t,n){let{usedNodes:a,inputs:r}=n,s=[],i=Object.keys(r).map(p=>Yn(p)[0]).map(p=>e.nodes[p]),o=e.initNodes;i.forEach(p=>{a.has(p.name)&&s.push(p)}),e.weights.forEach(p=>{a.has(p.name)&&s.push(p)}),o!=null&&o.forEach(p=>{a.has(p.name)&&s.push(p)});let l=new Set,u=[];for(;s.length>0;){let p=s.pop();l.add(p.name),t[p.name]||u.push(p),p.children.forEach(d=>{!l.has(d.name)&&a.has(d.name)&&d.inputs.every(c=>l.has(c.name))&&s.push(d)})}return u}var aH=["Switch","Merge","Enter","Exit","NextIteration","StatelessIf","StatelessWhile","if","While"],rH=["NonMaxSuppressionV2","NonMaxSuppressionV3","NonMaxSuppressionV5","Where"],sH=["HashTable","HashTableV2","LookupTableImport","LookupTableImportV2","LookupTableFind","LookupTableFindV2","LookupTableSize","LookupTableSizeV2"];function tT(e){return aH.indexOf(e.op)>=0}function iH(e){return rH.indexOf(e.op)>=0}function oH(e){return sH.indexOf(e.op)>=0}var ox=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 ox(e.functions[n],this)})}get weightIds(){return this.parent?this.parent.weightIds:this._weightIds}get functionExecutorMap(){return this.parent?this.parent.functionExecutorMap:this._functionExecutorMap}get weightMap(){return this.parent?this.parent.weightMap:this._weightMap}set weightMap(e){let t=Object.keys(e).map(n=>e[n].map(a=>a.id));this._weightIds=[].concat(...t),this._weightMap=e}set resourceManager(e){this._resourceManager=e}get inputs(){return this._inputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get outputs(){return this._outputs.map(e=>({name:e.name,shape:e.attrParams.shape?e.attrParams.shape.value:void 0,dtype:e.attrParams.dtype?e.attrParams.dtype.value:void 0}))}get inputNodes(){return this._inputs.map(e=>e.signatureKey||e.name)}get outputNodes(){return this._outputs.map(e=>{let t=e.signatureKey||e.name;return e.defaultOutput?`${t}:${e.defaultOutput}`:t})}get functions(){return Object.keys(this._functions).reduce((e,t)=>(e[t]=this._functions[t].signature,e),{})}getCompilationKey(e,t){let n=e.map(r=>r.name).sort(),a=t.map(r=>r.name).sort();return n.join(this.SEPERATOR)+"--"+a.join(this.SEPERATOR)}compile(e,t){let n=Dk(e,t,this.weightMap,this._initNodes),{missingInputs:a,dynamicNode:r,syncInputs:s}=n;if(r!=null)throw new Error(`This execution contains the node '${r.name}', which has the dynamic op '${r.op}'. Please use model.executeAsync() instead. Alternatively, to avoid the dynamic ops, specify the inputs [${s}]`);if(a.length>0){let i=t.map(l=>l.name),o=Object.keys(e);throw new Error(`Cannot compute the outputs [${i}] from the provided inputs [${o}]. Missing the following inputs: [${a}]`)}return nH(this.graph,this.weightMap,n)}execute(e,t){e=this.mapInputs(e);let n=Object.keys(e).sort();this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t);let a=n.map(p=>this.graph.nodes[Yn(p)[0]]),r=t.map(p=>Yn(p)[0]),s=r.map(p=>this.graph.nodes[p]);this.resetIntermediateTensors(),s.length===0&&(s=this._outputs);let i=this.getCompilationKey(a,s),o=this.compiledMap.get(i);o==null&&(o=this.compile(e,s),this.compiledMap.set(i,o));let l={},u={};return O(()=>{let p=new Fk(this.weightMap,l,u,this.functionExecutorMap),d=Object.assign({},this.weightMap);Object.keys(e).forEach(m=>{let[f,g]=Yn(m),y=[];y[g]=e[m],d[f]=y});let c=this.getFrozenTensorIds(d),h={};for(let m=0;m<o.length;m++){let f=o[m];if(!d[f.name]){let g=$k(f,d,p,this._resourceManager);if(k.isPromise(g))throw new Error(`The execution of the op '${f.op}' returned a promise. Please use model.executeAsync() instead.`);d[f.name]=g,this.checkTensorForDisposal(f.name,f,d,p,c,r,h)}}return this.parent==null&&p.dispose(c),t.map(m=>Sn(m,d,p))})}getFrozenTensorIds(e){let t=[].concat.apply([],Object.keys(e).map(n=>e[n]).map(n=>n.map(a=>a.id)));return new Set(t)}checkTensorForDisposal(e,t,n,a,r,s,i){t.category==="control"||s.indexOf(e)!==-1||(n[e].forEach(o=>{o!=null&&(i[o.id]=(i[o.id]||0)+t.children.length)}),t.inputs.forEach(o=>{if(o.category!=="control"){let l=u6(o.name,n,a);l!=null&&l.forEach(u=>{if(u&&!u.kept&&!r.has(u.id)){let p=i[u.id];if(p===1){if(!this.keepTensorForDebug)u.dispose();else{let[d,c]=lr(t.name,a);this.intermediateTensors[d]?this.intermediateTensors[d][c]=u:(this.intermediateTensors[d]=[],this.intermediateTensors[d][c]=u)}delete i[u.id]}else p!=null&&i[u.id]--}})}}))}async executeAsync(e,t){return this._executeAsync(e,t)}disposeIntermediateTensors(){!this.intermediateTensors||(Object.keys(this.intermediateTensors).forEach(e=>this.intermediateTensors[e].forEach(t=>t.dispose())),this.disposeTensorsMap())}disposeTensorsMap(){!this.tensorsMap||Object.keys(this.tensorsMap).forEach(e=>{this.tensorsMap[e].forEach(t=>{t&&!t.kept&&!t.isDisposed&&!this.keepIds.has(t.id)&&t.dispose()})})}getIntermediateTensors(){return this.tensorsMap}resetIntermediateTensors(){for(let e in this.intermediateTensors)this.intermediateTensors[e].forEach(t=>t.dispose()),delete this.intermediateTensors[e]}async _executeAsync(e,t,n=!1,a={},r={}){n||(e=this.mapInputs(e),this.checkInputs(e),this.checkInputShapeAndType(e),t=this.mapOutputs(t),this.checkOutputs(t));try{this.keepTensorForDebug=X().getBool("KEEP_INTERMEDIATE_TENSORS")}catch(u){console.warn(u.message)}this.resetIntermediateTensors();let s=new Fk(this.weightMap,a,r,this.functionExecutorMap);this.tensorsMap=await this.executeWithControlFlow(e,s,t,n);let i=t.map(u=>Sn(u,this.tensorsMap,s)),o=i.map(u=>u.id),l=Object.keys(e).map(u=>e[u].id);return this.keepIds=new Set([...o,...l,...this.weightIds]),this.keepTensorForDebug||this.disposeTensorsMap(),this.parent==null&&s.dispose(this.keepIds),i}async executeFunctionAsync(e,t,n){let a=e.reduce((r,s,i)=>(r[this.inputs[i].name]=s,r),{});return this._executeAsync(a,this.outputNodes,!0,t,n)}async executeWithControlFlow(e,t,n,a){let r=Object.keys(e),s=r.map(b=>this.graph.nodes[Yn(b)[0]]),i=n.map(b=>Yn(b)[0]),o=i.map(b=>this.graph.nodes[b]);o.length===0&&(o=this._outputs);let{usedNodes:l,missingInputs:u,dynamicNode:p,syncInputs:d}=Dk(e,o,this.weightMap,this._initNodes),c=[...s,...this.graph.weights,...this._initNodes||[]].map(b=>({node:b,contexts:t.currentContext})),h=Object.assign({},this.weightMap);Object.keys(e).forEach(b=>{let[x,v]=Yn(b),w=[];w[v]=e[b],h[x]=w});let m={},f=this.getFrozenTensorIds(h),g={};for(;c.length>0;){let b=this.processStack(s,c,t,h,g,f,i,m,l);await Promise.all(b)}p==null&&!a&&console.warn("This model execution did not contain any nodes with control flow or dynamic output shapes. You can use model.execute() instead.");let y=o.filter(b=>!tT(b)&&!Sn(b.name,h,t)).map(b=>b.name);if(y.length>0){let b="";throw p!=null&&(b=`Alternatively, to avoid the dynamic ops, use model.execute() and specify the inputs [${d}]`),new Error(`Cannot compute the outputs [${y}] from the provided inputs [${r}]. Consider providing the following inputs: [${u}]. ${b}`)}return h}processStack(e,t,n,a,r,s,i,o,l){let u=[];for(;t.length>0;){let p=t.pop();n.currentContext=p.contexts;let d="";if(p.node.op==="Enter"&&I("isConstant",p.node,a,n)&&([d]=lr(p.node.name,n)),a[p.node.name]==null){let c=$k(p.node,a,n,this._resourceManager);d||([d]=lr(p.node.name,n));let h=n.currentContext;k.isPromise(c)?u.push(c.then(m=>(a[d]=m,n.currentContext=h,this.checkTensorForDisposal(d,p.node,a,n,s,i,o),this.processChildNodes(p.node,t,n,a,r,l),m))):(a[d]=c,this.checkTensorForDisposal(d,p.node,a,n,s,i,o),this.processChildNodes(p.node,t,n,a,r,l))}else this.processChildNodes(p.node,t,n,a,r,l)}return u}processChildNodes(e,t,n,a,r,s){e.children.forEach(i=>{let[o]=lr(i.name,n);r[o]||!s.has(i.name)||(i.op==="Merge"?i.inputNames.some(l=>!!Sn(l,a,n))&&(r[o]=!0,t.push({contexts:n.currentContext,node:i})):i.inputNames.every(l=>!!Sn(l,a,n))&&(r[o]=!0,t.push({contexts:n.currentContext,node:i})))})}dispose(){Object.keys(this.weightMap).forEach(e=>this.weightMap[e].forEach(t=>t.dispose()))}checkInputShapeAndType(e){Object.keys(e).forEach(t=>{let n=e[t],[a]=Yn(t),r=this.graph.nodes[a];if(r.attrParams.shape&&r.attrParams.shape.value){let s=r.attrParams.shape.value,i=s.length===n.shape.length&&n.shape.every((o,l)=>s[l]===-1||s[l]===o);k.assert(i,()=>`The shape of dict['${r.name}'] provided in model.execute(dict) must be [${s}], but was [${n.shape}]`)}r.attrParams.dtype&&r.attrParams.dtype.value&&k.assert(n.dtype===r.attrParams.dtype.value,()=>`The dtype of dict['${r.name}'] provided in model.execute(dict) must be ${r.attrParams.dtype.value}, but was ${n.dtype}`)})}mapInputs(e){let t={};for(let n in e)if(this._signature!=null&&this._signature.inputs!=null&&this._signature.inputs[n]!=null){let a=this._signature.inputs[n];t[a.name]=e[n]}else t[n]=e[n];return t}checkInputs(e){let t=Object.keys(e).filter(n=>{let[a]=Yn(n);return this.graph.nodes[a]==null});if(t.length>0)throw new Error(`The dict provided in model.execute(dict) has keys: [${t}] that are not part of graph`)}mapOutputs(e){return e.map(t=>this._signature!=null&&this._signature.outputs!=null&&this._signature.outputs[t]!=null?this._signature.outputs[t].name:t,{})}checkOutputs(e){e.forEach(t=>{let[n]=Yn(t);if(!this.graph.nodes[n])throw new Error(`The output '${t}' is not found in the graph`)})}},lH=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]}},uH="?tfjs-format=file",pH="model.json",nT=class{constructor(e,t={}){this.modelUrl=e,this.loadOptions=t,this.version="n/a",t==null&&(this.loadOptions={}),this.resourceManager=new lH}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}findIOHandler(){let e=this.modelUrl;if(e.load!=null)this.handler=e;else if(this.loadOptions.requestInit!=null)this.handler=Qt.browserHTTPRequest(e,this.loadOptions);else{let t=Qt.getLoadHandlers(e,this.loadOptions);if(t.length===0)t.push(Qt.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]}}async 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=await this.handler.load();return this.loadSync(e)}loadSync(e){this.artifacts=e;let t=this.artifacts.modelTopology,n;this.artifacts.userDefinedMetadata!=null&&this.artifacts.userDefinedMetadata.signature!=null?n=this.artifacts.userDefinedMetadata.signature:n=this.artifacts.signature,this.signature=n,this.version=`${t.versions.producer}.${t.versions.minConsumer}`;let a=Qt.decodeWeights(this.artifacts.weightData,this.artifacts.weightSpecs);if(this.executor=new ox(Ck.Instance.transformGraph(t,this.signature)),this.executor.weightMap=this.convertTensorMapToTensorsMap(a),this.executor.resourceManager=this.resourceManager,e.modelInitializer!=null&&e.modelInitializer.node!=null){let r=Ck.Instance.transformGraph(e.modelInitializer);this.initializer=new ox(r),this.initializer.weightMap=this.executor.weightMap,this.initializer.resourceManager=this.resourceManager,this.initializer.executeAsync({},[])}return!0}async save(e,t){if(typeof e=="string"){let n=Qt.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){return this.execute(e,this.outputNodes)}normalizeInputs(e){if(!(e instanceof Ae)&&!Array.isArray(e))return e;if(e=Array.isArray(e)?e:[e],e.length!==this.inputNodes.length)throw new Error(`Input tensor count mismatch,the graph model has ${this.inputNodes.length} placeholders, while there are ${e.length} input tensors.`);return this.inputNodes.reduce((t,n,a)=>(t[n]=e[a],t),{})}normalizeOutputs(e){return e=e||this.outputNodes,Array.isArray(e)?e:[e]}execute(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=this.executor.execute(e,t);return n.length>1?n:n[0]}async executeAsync(e,t){e=this.normalizeInputs(e),t=this.normalizeOutputs(t);let n=await this.executor.executeAsync(e,t);return n.length>1?n:n[0]}getIntermediateTensors(){return this.executor.getIntermediateTensors()}disposeIntermediateTensors(){this.executor.disposeIntermediateTensors()}convertTensorMapToTensorsMap(e){return Object.keys(e).reduce((t,n)=>(t[n]=[e[n]],t),{})}dispose(){this.executor.dispose(),this.initializer&&this.initializer.dispose(),this.resourceManager.dispose()}};async function cH(e,t={}){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&&e.load==null&&(e.endsWith("/")||(e=e+"/"),e=`${e}${pH}${uH}`);let n=new nT(e,t);return await n.load(),n}var dH="3.15.0",aT={};Re(aT,{CSVDataset:()=>dT,Dataset:()=>ju,FileDataSource:()=>xT,TextLineDataset:()=>cT,URLDataSource:()=>vT,array:()=>MH,csv:()=>jH,func:()=>qH,generator:()=>KH,microphone:()=>YH,version_data:()=>JH,webcam:()=>XH,zip:()=>PH});var hH=bi(fI()),mH=bi(fI());function fH(e,t){return nm(e,t)}function nm(e,t,n=new Map,a=new Set){if(e==null)return null;if(typeof Blob=="function"&&e instanceof Blob)return e.slice();if(a.has(e))throw new Error("Circular references are not supported.");if(n.has(e))return n.get(e);let r=t(e);if(r.recurse&&r.value!==null)throw new Error("A deep map function may not return both a value and recurse=true.");if(r.recurse)if(_l(e)){let s=Array.isArray(e)?[]:{};a.add(e);for(let i in e){let o=e[i],l=nm(o,t,n,a);s[i]=l}return a.delete(e),e.__proto__&&(s.__proto__=e.__proto__),s}else throw new Error(`Can't recurse into non-iterable type: ${e}`);else return n.set(e,r.value),r.value}function gH(e,t=sT){return rT(e,t)}function rT(e,t,n=new Set){let a=e[0];if(n.has(a))throw new Error("Circular references are not supported.");let r=t(e);if(r.recurse&&r.value!==null)throw new Error("A deep zip function may not return both a value and recurse=true.");if(r.recurse)if(_l(a)){let s=Array.isArray(a)?[]:{};n.add(a);for(let i in a){let o=e.map(u=>u[i]),l=rT(o,t,n);s[i]=l}return n.delete(a),s}else throw new Error(`Can't recurse into non-iterable type: ${a}`);else return r.value}function sT(e){return e===null?null:_l(e[0])?{value:null,recurse:!0}:{value:e,recurse:!1}}async function iT(e,t){let n=new Map;nm(e,t,n);for(let a of Array.from(n.keys())){let r=n.get(a);if(k.isPromise(r)){let s=await r;n.set(a,s)}}return nm(e,t,n)}function _l(e){let t=!1;if(X().get("IS_BROWSER"))t=e instanceof TextDecoder;else{let{StringDecoder:n}=gI();t=e instanceof n}return e!=null&&!ArrayBuffer.isView(e)&&(Array.isArray(e)||typeof e=="object"&&!(e instanceof Ae)&&!(e instanceof Promise)&&!t)}function yH(e){return e==null||bH(e)||Array.isArray(e)||typeof e=="object"&&e instanceof Ae||k.isTypedArray(e)}function bH(e){return e===null||typeof e!="object"&&typeof e!="function"}function xH(e){return fH(e,vH)}function vH(e){return e instanceof Ae?{value:e.clone(),recurse:!1}:_l(e)?{value:null,recurse:!0}:{value:e,recurse:!1}}var oT=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}},o0=class extends oT{constructor(){super(o0.INITIAL_CAPACITY)}isFull(){return!1}push(e){super.isFull()&&this.expand(),super.push(e)}unshift(e){super.isFull()&&this.expand(),super.unshift(e)}expand(){let e=this.capacity*2,t=new Array(e),n=this.length();for(let a=0;a<n;a++)t[a]=this.get(this.wrap(this.begin+a));this.data=t,this.capacity=e,this.doubledCapacity=2*this.capacity,this.begin=0,this.end=n}};o0.INITIAL_CAPACITY=32;function lT(e){return new IH(e)}function l0(e){return new SH(e)}function wH(e,t){return new uT(e,t)}function kH(e,t=ts.FAIL){return new DH(e,t)}var an=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 $H(this,e)}filter(e){return new EH(this,e)}map(e){return new AH(this,e)}mapAsync(e){return new Rk(this,e)}serialMapAsync(e){return new Rk(this,e).serial()}flatmap(e){return new FH(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 _H(this,e,t)}columnMajorBatch(e,t=!0,n=sT){return this.rowMajorBatch(e,t).map(a=>gH(a,n))}concatenate(e,t){return new uT(lT([this,e]),t)}take(e){return e<0||e==null?this:new CH(this,e)}skip(e){return e<0||e==null?this:new TH(this,e)}prefetch(e){return new pT(this,e)}shuffle(e,t){return new RH(this,e,t)}serial(){return new NH(this)}},IH=class extends an{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:xH(e),done:!1}}},SH=class extends an{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}}},NH=class extends an{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()}},TH=class extends an{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;De(e.value)}return this.upstream.next()}},CH=class extends an{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()}},_H=class extends an{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}}},EH=class extends an{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;De(e.value)}}},AH=class extends an{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=Ga.getTensorsInContainer(e.value),n=this.transform(e.value),a=Ga.getTensorsInContainer(n);for(let r of t)Ga.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},$H=class extends an{constructor(e,t){super(),this.upstream=e,this.handler=t,this.count=0,this.lastRead=Promise.resolve({value:null,done:!1})}summary(){return`${this.upstream.summary()} -> handleErrors`}async next(){return this.lastRead=this.lastRead.then(()=>this.serialNext()),this.lastRead}async serialNext(){for(;;)try{return await this.upstream.next()}catch(e){if(!this.handler(e))return{value:null,done:!0}}}},Rk=class extends an{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=Ga.getTensorsInContainer(e.value),n=await this.transform(e.value),a=Ga.getTensorsInContainer(n);for(let r of t)Ga.isTensorInList(r,a)||r.dispose();return{value:n,done:!1}}},u0=class extends an{constructor(){super(),this.outputQueue=new o0,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}}},FH=class extends u0{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=Ga.getTensorsInContainer(e.value),n=this.transform(e.value),a=Ga.getTensorsInContainer(n);this.outputQueue.pushAll(n);for(let r of t)Ga.isTensorInList(r,a)||r.dispose();return!0}},uT=class extends an{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}},ts;(function(e){e[e.FAIL=0]="FAIL",e[e.SHORTEST=1]="SHORTEST",e[e.LONGEST=2]="LONGEST"})(ts||(ts={}));var DH=class extends an{constructor(e,t=ts.FAIL){super(),this.iterators=e,this.mismatchMode=t,this.count=0,this.currentPromise=null}summary(){return"{TODO: fill in upstream of zip summaries} -> Zip"}async nextState(e){await e;let t=0,n=0;function a(s){return s instanceof an?{value:s.next().then(i=>(t++,i.done&&n++,i.value)),recurse:!1}:{value:null,recurse:!0}}let r=await iT(this.iterators,a);if(t===n)return{value:null,done:!0};if(n>0)switch(this.mismatchMode){case ts.FAIL:throw new Error(`Zipped streams should have the same length. Mismatched at element ${this.count}.`);case ts.SHORTEST:return{value:null,done:!0};case ts.LONGEST:default:}return this.count++,{value:r,done:!1}}async next(){return this.currentPromise=this.nextState(this.currentPromise),this.currentPromise}},pT=class extends an{constructor(e,t){super(),this.upstream=e,this.bufferSize=t,this.buffer=new oT(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()}},RH=class extends pT{constructor(e,t,n){super(e,t),this.upstream=e,this.windowSize=t,this.upstreamExhausted=!1,this.random=mH.alea(n||k.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;k.assert(e>0,()=>`batchSize needs to be positive, but it is
|
|
${e}`);let a;return this.size===1/0||this.size==null?a=this.size:t?a=Math.ceil(this.size/e):a=Math.floor(this.size/e),Xn(async()=>(await n.iterator()).columnMajorBatch(e,t,OH),a)}concatenate(e){let t=this,n;return this.size===1/0||e.size===1/0?n=1/0:this.size!=null&&e.size!=null?n=this.size+e.size:n=null,Xn(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,Xn(async()=>(await t.iterator()).filter(a=>O(()=>e(a))),n)}async forEachAsync(e){return(await this.iterator()).forEachAsync(e)}map(e){let t=this;return Xn(async()=>(await t.iterator()).map(n=>O(()=>e(n))),this.size)}mapAsync(e){let t=this;return Xn(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 Xn(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,Xn(async()=>{let a=l0(async()=>({value:await t.iterator(),done:!1}));return wH(a.take(e))},n)}skip(e){let t=this,n;return this.size!=null&&e>=0&&this.size>=e?n=this.size-e:this.size!=null&&(this.size<e||e===void 0||e<0)?n=0:n=null,Xn(async()=>(await t.iterator()).skip(e),n)}shuffle(e,t,n=!0){if(e==null||e<0)throw this.size==null?new RangeError("`Dataset.shuffle()` requires bufferSize to be specified."):new RangeError(`\`Dataset.shuffle()\` requires bufferSize to be specified. If your data fits in main memory (for regular JS objects), and/or GPU memory (for \`tf.Tensor\`s), consider setting bufferSize to the dataset size (${this.size} elements)`);let a=this,r=hH.alea(t||k.now().toString());return Xn(async()=>{let s=r.int32();return n&&(s+=r.int32()),(await a.iterator()).shuffle(e,s.toString())},this.size)}take(e){let t=this,n;return this.size!=null&&this.size>e?n=e:this.size!=null&&this.size<=e?n=this.size:n=null,Xn(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 Xn(e,t=null){return new class extends ju{constructor(){super(...arguments),this.size=t}async iterator(){return e()}}}function MH(e){return Xn(async()=>lT(e),e.length)}function PH(e){if(!_l(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 Xn(async()=>{let n=await iT(e,a=>{if(a instanceof ju)return{value:a.iterator(),recurse:!1};if(_l(a))return{value:null,recurse:!0};throw new Error("Leaves of the structure passed to zip() must be Datasets, not primitives.")});return kH(n,ts.SHORTEST)},t)}function OH(e){if(e===null)return null;let t=e[0];return yH(t)?{value:LH(e),recurse:!1}:{value:null,recurse:!0}}function LH(e){if(e.length===0)throw new Error("Can't make a batch of zero elements.");return e[0]instanceof Ae?Mt(e):Qn(e)}var cT=class extends ju{constructor(e){super(),this.input=e}async iterator(){return(await this.input.iterator()).decodeUTF8().split(`
|
|
`).map(e=>(e.endsWith("\r")&&(e=e.slice(0,-1)),e))}},xh='"',Rp=Symbol("out"),Mk=Symbol("field"),vh=Symbol("quote"),vb=Symbol("quoteafterquote"),Pk=Symbol("quoteinquote"),dT=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 cT(e),t||(t={}),this.hasHeader=t.hasHeader!==!1,this.fullColumnNames=t.columnNames,this.columnConfigs=t.columnConfigs,this.configuredColumnsOnly=t.configuredColumnsOnly,t.delimWhitespace?(k.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&&k.assert(e.length===this.fullColumnNames.length,()=>"The length of provided columnNames ("+this.fullColumnNames.length.toString()+") does not match the length of the header line read from file ("+e.length.toString()+")."),this.fullColumnNames||(this.fullColumnNames=e);let t=this.fullColumnNames.reduce((a,r)=>(a[r]=a[r]+1||1,a),{}),n=Object.keys(t).filter(a=>t[a]>1);if(k.assert(n.length===0,()=>"Duplicate column names found: "+n.toString()),this.columnConfigs){for(let a of Object.keys(this.columnConfigs))if(this.fullColumnNames.indexOf(a)===-1)throw new Error('The key "'+a+'" provided in columnConfigs does not match any of the column names ('+this.fullColumnNames.toString()+").")}this.columnNamesValidated=!0}async maybeReadHeaderLine(){if(this.hasHeader){let e=await(await this.base.iterator()).next();if(e.done)throw new Error("No data was found for CSV parsing.");let t=e.value;return this.parseRow(t,!1)}else return null}async iterator(){this.columnNamesValidated||await this.setColumnNames();let e=await this.base.iterator();return this.hasHeader&&(e=e.skip(1)),e.map(t=>this.makeDataElement(t))}makeDataElement(e){let t=this.parseRow(e),n={},a={};for(let r=0;r<this.fullColumnNames.length;r++){let s=this.fullColumnNames[r],i=this.columnConfigs?this.columnConfigs[s]:null;if(!(this.configuredColumnsOnly&&!i)){let o=t[r],l=null;if(o==="")if(i&&i.default!==void 0)l=i.default;else{if(i&&(i.required||i.isLabel))throw new Error(`Required column ${s} is empty in this line: ${e}`);l=void 0}else{let u=Number(o);if(isNaN(u))i&&i.dtype==="bool"?l=this.getBoolean(o):l=o;else if(!i||!i.dtype)l=u;else switch(i.dtype){case"float32":l=u;break;case"int32":l=Math.floor(u);break;case"bool":l=this.getBoolean(o);break;default:l=u}}i&&i.isLabel?a[s]=l:n[s]=l}}return Object.keys(a).length===0?n:{xs:n,ys:a}}getBoolean(e){return e==="1"||e.toLowerCase()==="true"?1:0}parseRow(e,t=!0){let n=[],a=0,r=e.length,s=Rp;for(let i=0;i<r;i++)switch(s){case Rp:switch(e.charAt(i)){case xh:a=i+1,s=vh;break;case this.delimiter:if(a=i+1,this.delimiter===" "&&this.delimWhitespace)break;n.push(""),s=Rp;break;default:s=Mk,a=i;break}break;case Mk:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(a,i)),s=Rp,a=i+1;break;default:}break;case vh:switch(e.charAt(i)){case xh:s=vb;break;default:}break;case vb:switch(e.charAt(i)){case this.delimiter:n.push(e.substring(a,i-1)),s=Rp,a=i+1;break;case xh:s=vh;break;default:s=Pk;break}break;case Pk:switch(e.charAt(i)){case xh:s=vh;break;default:}break;default:}if(s===vb?n.push(e.substring(a,r-1)):n.push(e.substring(a)),t&&n.length!==this.fullColumnNames.length)throw new Error(`Invalid row in csv file. Should have ${this.fullColumnNames.length} elements in a row, but got ${n}`);return n}},hT=class extends an{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(!X().get("IS_BROWSER"))throw new Error("microphone API is only supported in browser environment.");let t=new hT(e);return await t.start(),t}async start(){try{this.stream=await navigator.mediaDevices.getUserMedia({audio:this.audioTrackConstraints==null?!0:this.audioTrackConstraints,video:!1})}catch(n){throw new Error(`Error thrown while initializing video stream: ${n.message}`)}if(!this.stream)throw new Error("Could not obtain audio from microphone.");let e=window.AudioContext||window.webkitAudioContext;if(this.audioContext=new e,!this.sampleRateHz)this.sampleRateHz=this.audioContext.sampleRate;else if(this.audioContext.sampleRate!==this.sampleRateHz)throw new Error(`Mismatch in sampling rate: Expected: ${this.sampleRateHz}; Actual: ${this.audioContext.sampleRate}`);let t=this.audioContext.createMediaStreamSource(this.stream);this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=this.fftSize*2,this.analyser.smoothingTimeConstant=this.smoothingTimeConstant,t.connect(this.analyser),this.freqData=new Float32Array(this.fftSize),this.timeData=new Float32Array(this.fftSize)}async next(){if(this.isClosed)return{value:null,done:!0};let e,t,n=await this.getAudioData();if(this.includeSpectrogram){let a=this.flattenQueue(n.freqDataQueue);e=this.getTensorFromAudioDataArray(a,[this.numFrames,this.columnTruncateLength,1])}if(this.includeWaveform){let a=this.flattenQueue(n.timeDataQueue);t=this.getTensorFromAudioDataArray(a,[this.numFrames*this.fftSize,1])}return{value:{spectrogram:e,waveform:t},done:!1}}async capture(){return(await this.next()).value}async getAudioData(){let e=[],t=[],n=0;return new Promise(a=>{let r=setInterval(()=>{this.includeSpectrogram&&(this.analyser.getFloatFrequencyData(this.freqData),this.freqData[0]===-1/0&&a({freqDataQueue:e,timeDataQueue:t}),e.push(this.freqData.slice(0,this.columnTruncateLength))),this.includeWaveform&&(this.analyser.getFloatTimeDomainData(this.timeData),t.push(this.timeData.slice())),++n===this.numFrames&&(clearInterval(r),a({freqDataQueue:e,timeDataQueue:t}))},this.fftSize/this.sampleRateHz*1e3)})}stop(){this.isClosed||(this.isClosed=!0,this.analyser.disconnect(),this.audioContext.close(),this.stream!=null&&this.stream.getTracks().length>0&&this.stream.getTracks()[0].stop())}toArray(){throw new Error("Can not convert infinite audio stream to array.")}getSampleRate(){return this.sampleRateHz}flattenQueue(e){let t=e[0].length,n=new Float32Array(e.length*t);return e.forEach((a,r)=>n.set(a,r*t)),n}getTensorFromAudioDataArray(e,t){let n=new Float32Array(k.sizeFromShape(t));return n.set(e,n.length-e.length),Qn(n,t)}},mT=class extends an{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=qe([0],"int32"),this.webcamConfig.centerCrop){let n=this.webcamConfig.resizeWidth*1/this.webcamVideoElement.width,a=this.webcamConfig.resizeHeight*1/this.webcamVideoElement.height,r=(1-n)/2,s=(1-a)/2,i=r+n,o=a+s;this.cropBox=Ha([s,r,o,i],[1,4])}else this.cropBox=Ha([0,0,1,1],[1,4])}summary(){return"webcam"}static async create(e,t={}){if(!X().get("IS_BROWSER"))throw new Error("tf.data.webcam is only supported in browser environment.");if(!e){if(e=document.createElement("video"),!t.resizeWidth||!t.resizeHeight)throw new Error("Please provide webcam video element, or resizeWidth and resizeHeight to create a hidden video element.");e.width=t.resizeWidth,e.height=t.resizeHeight}let n=new mT(e,t);return await n.start(),n}async start(){this.webcamConfig.facingMode&&k.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=yo.fromPixels(this.webcamVideoElement)}catch(t){throw new Error(`Error thrown converting video to pixels: ${JSON.stringify(t)}`)}if(this.resize)try{return{value:this.cropAndResizeFrame(e),done:!1}}catch(t){throw new Error(`Error thrown cropping the video: ${t.message}`)}finally{e.dispose()}else return{value:e,done:!1}}needToResize(){return!!(this.webcamConfig.resizeWidth&&this.webcamConfig.resizeHeight&&(this.webcamVideoElement.width!==this.webcamConfig.resizeWidth||this.webcamVideoElement.height!==this.webcamConfig.resizeHeight))}cropAndResizeFrame(e){return O(()=>{let t=mn(oe(e,"float32"),0),n;n=Ln.cropAndResize(t,this.cropBox,this.cropBoxInd,this.cropSize,"bilinear");let a=n.shape;return V(n,a.slice(1))})}async capture(){return(await this.next()).value}stop(){this.stream.getTracks().forEach(e=>e.stop());try{this.webcamVideoElement.srcObject=null}catch(e){console.log(e),this.webcamVideoElement.src=null}this.isClosed=!0}toArray(){throw new Error("Can not convert infinite video stream to array.")}},fT=class{},gT=class extends an{split(e){return new zH(this,e)}},zH=class extends gT{constructor(e,t){super(),this.upstream=e,this.impl=new WH(e,t)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},WH=class extends u0{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}},BH=class extends an{decodeUTF8(){return new VH(this)}},VH=class extends gT{constructor(e){super(),this.upstream=e,this.impl=new UH(e)}summary(){return this.impl.summary()}async next(){return this.impl.next()}},UH=class extends u0{constructor(e){if(super(),this.upstream=e,X().get("IS_BROWSER"))this.decoder=new TextDecoder("utf-8");else{let{StringDecoder:t}=gI();this.decoder=new t("utf8")}}summary(){return`${this.upstream.summary()} -> Utf8`}async pump(){let e=await this.upstream.next(),t;if(e.done)return!1;t=e.value;let n;return X().get("IS_BROWSER")?n=this.decoder.decode(t,{stream:!0}):n=this.decoder.write(Buffer.from(t.buffer)),this.outputQueue.push(n),!0}},yT=class extends BH{constructor(e,t={}){super(),this.file=e,this.options=t,k.assert(e instanceof Uint8Array||(X().get("IS_BROWSER")?e instanceof File||e instanceof Blob:!1),()=>"FileChunkIterator only supports File, Blob and Uint8Array right now."),this.offset=t.offset||0,this.chunkSize=t.chunkSize||1024*1024}summary(){return`FileChunks ${this.file}`}async next(){return this.offset>=(this.file instanceof Uint8Array?this.file.byteLength:this.file.size)?{value:null,done:!0}:{value:await new Promise((e,t)=>{let n=this.offset+this.chunkSize;if(this.file instanceof Uint8Array)e(new Uint8Array(this.file.slice(this.offset,n)));else{let a=new FileReader;a.onload=s=>{let i=a.result;if(i instanceof ArrayBuffer&&(i=new Uint8Array(i)),!(i instanceof Uint8Array))return t(new TypeError("FileReader returned unknown type."));e(i)},a.onabort=s=>t(new Error("Aborted")),a.onerror=s=>t(new Error(s.type));let r=this.file.slice(this.offset,n);a.readAsArrayBuffer(r)}this.offset=n}),done:!1}}};async function GH(e,t={},n){let a,r;typeof e=="string"?a=e:(a=e.url,r=HH(e));let s=await(n||k.fetch)(a,r);if(s.ok){let i=new Uint8Array(await s.arrayBuffer());return new yT(i,t)}else throw new Error(s.statusText)}var HH=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 bT(e){return typeof e=="string"&&e.substr(0,7)==="file://"}var xT=class extends fT{constructor(e,t={}){super(),this.input=e,this.options=t}async iterator(){if(bT(this.input)&&X().get("IS_NODE")){let e=Ix();this.input=e.readFileSync(this.input.substr(7))}return new yT(this.input,this.options)}},vT=class extends fT{constructor(e,t={}){super(),this.url=e,this.fileOptions=t}async iterator(){return bT(this.url)?new xT(this.url,this.fileOptions).iterator():GH(this.url,this.fileOptions)}};function jH(e,t={}){return new dT(new vT(e),t)}function qH(e){let t=l0(e);return Xn(async()=>t)}function KH(e){return Xn(async()=>{let t=await e();return l0(()=>t.next())})}async function XH(e,t){return mT.create(e,t)}async function YH(e){return hT.create(e)}var JH="3.15.0";function xe(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the CPU backend.`)})}var ZH=gr.whereImpl,p0=class extends cc{constructor(){super(),this.blockSize=48,this.firstUse=!0,this.data=new pm(this,sr())}nextDataId(){return p0.nextDataId++}write(e,t,n){this.firstUse&&(this.firstUse=!1,X().get("IS_NODE")&&_.warn(`
|
|
============================
|
|
Hi there \u{1F44B}. Looks like you are running TensorFlow.js in Node.js. To speed things up dramatically, install our node backend, which binds to TensorFlow C++, by running npm i @tensorflow/tfjs-node, or npm i @tensorflow/tfjs-node-gpu if you have CUDA. Then call require('@tensorflow/tfjs-node'); (-gpu suffix for CUDA) at the start of your program. Visit https://github.com/tensorflow/tfjs-node for more details.
|
|
============================`));let a={id:this.nextDataId()};return this.data.set(a,{values:e,dtype:n,refCount:1}),a}makeTensorInfo(e,t,n){let a;if(t==="string"&&n!=null&&n.length>0&&k.isString(n[0])){let r=n.map(s=>k.encodeString(s));a=this.write(r,e,t)}else a=this.write(n,e,t);return{dataId:a,shape:e,dtype:t}}refCount(e){return this.data.has(e)?this.data.get(e).refCount:0}incRef(e){let t=this.data.get(e);t.refCount++}decRef(e){if(this.data.has(e)){let t=this.data.get(e);t.refCount--}}move(e,t,n,a,r){this.data.set(e,{values:t,dtype:a,refCount:r})}numDataIds(){return this.data.numDataIds()}async read(e){return this.readSync(e)}readSync(e){let{dtype:t,complexTensorInfos:n}=this.data.get(e);if(t==="complex64"){let a=this.readSync(n.real.dataId),r=this.readSync(n.imag.dataId);return _.mergeRealAndImagArrays(a,r)}return this.data.get(e).values}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(a=>k.decodeString(a))}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return He(e.shape,e.dtype,n)}makeOutput(e,t,n){let a=this.write(e,t,n);return sr().makeTensorFromDataId(a,t,n,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=k.now();return e(),{kernelMs:k.now()-t}}memory(){return{unreliable:!0,reasons:["The reported memory is an upper bound. Due to automatic garbage collection, the true allocated memory may be less."]}}where(e){xe([e],"where");let t=this.readSync(e.dataId);return ZH(e.shape,t)}dispose(){}floatPrecision(){return 32}epsilon(){return super.epsilon()}};p0.nextDataId=0;var wT={};Re(wT,{addImpl:()=>IT,bincountImpl:()=>d0,bincountReduceImpl:()=>ST,ceilImpl:()=>NT,concatImpl:()=>h0,equalImpl:()=>TT,expImpl:()=>_T,expm1Impl:()=>AT,floorImpl:()=>$T,gatherNdImpl:()=>FT,gatherV2Impl:()=>DT,greaterEqualImpl:()=>MT,greaterImpl:()=>RT,lessEqualImpl:()=>OT,lessImpl:()=>PT,linSpaceImpl:()=>LT,logImpl:()=>zT,maxImpl:()=>WT,maximumImpl:()=>BT,minimumImpl:()=>VT,multiplyImpl:()=>m0,negImpl:()=>UT,notEqualImpl:()=>GT,prodImpl:()=>HT,rangeImpl:()=>g0,rsqrtImpl:()=>jT,sigmoidImpl:()=>Wj,simpleAbsImpl:()=>kT,sliceImpl:()=>rm,sparseFillEmptyRowsImpl:()=>KT,sparseReshapeImpl:()=>XT,sparseSegmentReductionImpl:()=>y0,sqrtImpl:()=>Uj,squaredDifferenceImpl:()=>YT,stridedSliceImpl:()=>JT,stringNGramsImpl:()=>ZT,stringSplitImpl:()=>QT,stringToHashBucketFastImpl:()=>eC,subImpl:()=>tC,tileImpl:()=>nC,topKImpl:()=>rC,transposeImpl:()=>f0,uniqueImpl:()=>sC});function kT(e){let t=new Float32Array(e.length);for(let n=0;n<e.length;++n)t[n]=Math.abs(e[n]);return t}var QH=e=>{let{x:t}=e.inputs,n=e.backend;xe(t,"abs");let a=new Float32Array(k.sizeFromShape(t.shape)),r=n.data.get(t.dataId).values;return a=kT(r),n.makeOutput(a,t.shape,t.dtype)},ej={kernelName:Dl,backendName:"cpu",kernelFunc:QH};function Vt(e){return(t,n,a,r,s)=>{let i=_.assertAndGetBroadcastShape(t,n),o=i.length,l=k.computeStrides(i),u=k.sizeFromShape(i),p=k.getTypedArrayFromDType(s,u),d=t.length,c=n.length,h=k.computeStrides(t),m=k.computeStrides(n),f=_.getBroadcastDims(t,i),g=_.getBroadcastDims(n,i);if(f.length+g.length===0)for(let y=0;y<p.length;++y)p[y]=e(a[y%a.length],r[y%r.length]);else for(let y=0;y<p.length;++y){let b=k.indexToLoc(y,o,l),x=b.slice(-d);f.forEach(C=>x[C]=0);let v=k.locToIndex(x,d,h),w=b.slice(-c);g.forEach(C=>w[C]=0);let T=k.locToIndex(w,c,m);p[y]=e(a[v],r[T])}return[p,i]}}function Jn(e){let{inputs:t,backend:n}=e,{real:a,imag:r}=t,s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,o=n.makeTensorInfo(a.shape,"complex64"),l=n.data.get(o.dataId);return l.complexTensorInfos={real:n.makeTensorInfo(a.shape,"float32",s),imag:n.makeTensorInfo(r.shape,"float32",i)},o}var tj={kernelName:ym,backendName:"cpu",kernelFunc:Jn};function am(e,t,n="float32"){if(n==="complex64"){let r=am(e,t,"float32"),s=am(e,t,"float32");return Jn({inputs:{real:r,imag:s},backend:e})}let a=k.makeZerosTypedArray(k.sizeFromShape(t),n);return e.makeTensorInfo(t,n,a)}function hr(e){let{inputs:t,backend:n}=e,{x:a}=t;return n.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var nj={kernelName:zi,backendName:"cpu",kernelFunc:hr};function hi(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.data.get(a.dataId).complexTensorInfos.real,s=n.data.get(r.dataId).values;return n.makeTensorInfo(r.shape,r.dtype,s)}var aj={kernelName:Pm,backendName:"cpu",kernelFunc:hi};function ms(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return hr({inputs:{x:r},backend:n});let i=am(n,r.shape,r.dtype),o=ms({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),l=Jn({inputs:{real:o,imag:i},backend:n});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=hi({inputs:{input:r},backend:n}),o=ms({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(r.dtype,s)){let i=hr({inputs:{x:r},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32"){let i=n.data.get(r.dataId).values,o=Int32Array.from(i);return n.makeTensorInfo(r.shape,"int32",o)}if(s==="bool"){let i=n.data.get(r.dataId).values,o=k.toTypedArray([0],r.dtype),[l,u]=Vt((p,d)=>p!==d?1:0)(r.shape,[],i,o,"bool");return n.makeTensorInfo(u,"bool",l)}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var rj={kernelName:Si,backendName:"cpu",kernelFunc:ms};function rn(e,t,n,a){return n==null?({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;xe([i,o],e);let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,d=i.dtype==="string"?_.fromUint8ToStringArray(u):u,c=i.dtype==="string"?_.fromUint8ToStringArray(p):p,h=a||i.dtype,[m,f]=t(i.shape,o.shape,d,c,h);return l.makeTensorInfo(f,h,m)}:({inputs:r,backend:s})=>{let{a:i,b:o}=r,l=s;if(i.dtype==="complex64"||o.dtype==="complex64"){let u=ms({inputs:{x:i},backend:l,attrs:{dtype:"complex64"}}),p=l.data.get(u.dataId),d=p.complexTensorInfos.real,c=p.complexTensorInfos.imag,h=l.data.get(d.dataId).values,m=l.data.get(c.dataId).values,f=ms({inputs:{x:o},backend:l,attrs:{dtype:"complex64"}}),g=l.data.get(f.dataId),y=g.complexTensorInfos.real,b=g.complexTensorInfos.imag,x=l.data.get(y.dataId).values,v=l.data.get(b.dataId).values,[w,T,C]=n(i.shape,o.shape,h,m,x,v),E=l.makeTensorInfo(C,"float32",w),$=l.makeTensorInfo(C,"float32",T),P=Jn({inputs:{real:E,imag:$},backend:l});return l.disposeIntermediateTensorInfo(u),l.disposeIntermediateTensorInfo(f),l.disposeIntermediateTensorInfo(E),l.disposeIntermediateTensorInfo($),P}else{let u=l.data.get(i.dataId).values,p=l.data.get(o.dataId).values,d=a||i.dtype,[c,h]=t(i.shape,o.shape,u,p,d);return l.makeTensorInfo(h,d,c)}}}function c0(e){return(t,n,a,r,s,i)=>{let o=_.assertAndGetBroadcastShape(t,n),l=k.sizeFromShape(o),u=o.length,p=k.computeStrides(o),d=k.getTypedArrayFromDType("float32",l),c=k.getTypedArrayFromDType("float32",l),h=_.getBroadcastDims(t,o),m=_.getBroadcastDims(n,o),f=_.mergeRealAndImagArrays(a,r),g=_.mergeRealAndImagArrays(s,i),y=t.length,b=k.computeStrides(t),x=n.length,v=k.computeStrides(n);if(h.length+m.length===0)for(let w=0;w<d.length;w++){let T=w%f.length,C=w%g.length,E=e(f[T*2],f[T*2+1],g[C*2],g[C*2+1]);d[w]=E.real,c[w]=E.imag}else for(let w=0;w<d.length;w++){let T=k.indexToLoc(w,u,p),C=T.slice(-y);h.forEach(S=>C[S]=0);let E=k.locToIndex(C,y,b),$=T.slice(-x);m.forEach(S=>$[S]=0);let P=k.locToIndex($,x,v),F=e(f[E*2],f[E*2+1],g[P*2],g[P*2+1]);d[w]=F.real,c[w]=F.imag}return[d,c,o]}}var IT=Vt((e,t)=>e+t),sj=c0((e,t,n,a)=>({real:e+n,imag:t+a})),ad=rn(ys,IT,sj),ij={kernelName:ys,backendName:"cpu",kernelFunc:ad};function d0(e,t,n,a,r){let s=k.sizeFromShape(a),i=k.makeZerosTypedArray(r,n);for(let o=0;o<e.length;o++){let l=e[o];if(l<0)throw new Error("Input x must be non-negative!");l>=r||(s>0?i[l]+=t[o]:i[l]+=1)}return i}function ST(e,t,n,a=!1){let r=e.shape[0],s=e.shape[1],i=He([r,n],t.dtype);for(let o=0;o<r;o++)for(let l=0;l<s;l++){let u=e.get(o,l);if(u<0)throw new Error("Input x must be non-negative!");u>=n||(a?i.set(1,o,u):t.size>0?i.set(i.get(o,u)+t.get(o,l),o,u):i.set(i.get(o,u)+1,o,u))}return i}function Ts(e){return(t,n,a)=>{let r=k.getTypedArrayFromDType(n,t.length);for(let s=0;s<t.length;++s)r[s]=e(t[s],a);return r}}function ot(e,t,n){return({inputs:a,attrs:r,backend:s})=>{let{x:i}=a;if(xe(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=k.sizeFromShape(i.shape),p=n||i.dtype,d=k.getArrayFromDType(p,u);for(let c=0;c<u;++c)d[c]=t(l[c],r);return o.makeTensorInfo(i.shape,p,d)}}function qu(e,t,n){return({inputs:a,attrs:r,backend:s})=>{let{x:i}=a;if(xe(i,e),i.dtype==="string"||n==="string")throw new Error("unaryKernelFunc does not support string input/output");let o=s,l=o.data.get(i.dataId).values,u=n||i.dtype,p=t(l,u,r);return o.makeTensorInfo(i.shape,u,p)}}var NT=Ts(e=>Math.ceil(e)),oj=qu(Ni,NT),lj={kernelName:Ni,backendName:"cpu",kernelFunc:oj};function h0(e,t,n,a){let r=k.getArrayFromDType(n,k.sizeFromShape(t));if(a&&n!=="string"){let s=0;e.forEach(i=>{let o=k.sizeFromShape(i.shape);r.set(i.vals,s),s+=o})}else{let s=0;e.forEach(i=>{let o=n==="string"?_.fromUint8ToStringArray(i.vals):i.vals,l=0;for(let u=0;u<i.shape[0];++u){let p=u*t[1]+s;for(let d=0;d<i.shape[1];++d)r[p+d]=o[l++]}s+=i.shape[1]})}return r}var TT=Vt((e,t)=>e===t?1:0),CT=rn(Xl,TT,null,"bool"),uj={kernelName:Xl,backendName:"cpu",kernelFunc:CT},_T=Ts(e=>Math.exp(e)),ET=qu(Ri,_T,"float32"),pj={kernelName:Ri,backendName:"cpu",kernelFunc:ET},AT=Ts(e=>Math.expm1(e)),cj=qu(Jl,AT),dj={kernelName:Jl,backendName:"cpu",kernelFunc:cj},$T=Ts(e=>Math.floor(e)),hj=qu(Mi,$T),mj={kernelName:Mi,backendName:"cpu",kernelFunc:hj};function FT(e,t,n,a,r,s,i,o,l){let u=He([a,s],n);for(let p=0;p<a;p++){let d=[],c=0;for(let h=0;h<r;h++){let m=e[p*r+h];c+=m*i[h],d.push(m)}if(c<0||c>=l/s)throw new Error(`Invalid indices: ${d} does not index into ${o}`);for(let h=0;h<s;h++)u.values[p*s+h]=t.get(...t.indexToLoc(c*s+h))}return u}function DT(e,t,n){let a=He(n,e.dtype);for(let r=0;r<a.size;++r){let s=a.indexToLoc(r).slice(),i=s[0],o=s[2],l=t.locToIndex([i,o]);s[2]=t.values[l];let u=e.locToIndex(s);0<=u&&u<e.values.length&&(a.values[r]=e.values[u])}return a}var RT=Vt((e,t)=>e>t?1:0),fj=rn(tu,RT,null,"bool"),gj={kernelName:tu,backendName:"cpu",kernelFunc:fj},MT=Vt((e,t)=>e>=t?1:0),yj=rn(Li,MT,null,"bool"),bj={kernelName:Li,backendName:"cpu",kernelFunc:yj},PT=Vt((e,t)=>e<t?1:0),xj=rn(su,PT,null,"bool"),vj={kernelName:su,backendName:"cpu",kernelFunc:xj},OT=Vt((e,t)=>e<=t?1:0),wj=rn(iu,OT,null,"bool"),kj={kernelName:iu,backendName:"cpu",kernelFunc:wj};function LT(e,t,n){let a=(t-e)/(n-1),r=k.makeZerosTypedArray(n,"float32");r[0]=e;for(let s=1;s<r.length;s++)r[s]=r[s-1]+a;return r}var zT=Ts(e=>Math.log(e)),Ij=qu(Bi,zT),Sj={kernelName:Bi,backendName:"cpu",kernelFunc:Ij};function WT(e,t,n,a){let r=k.getTypedArrayFromDType(a,k.sizeFromShape(n));for(let s=0;s<r.length;++s){let i=s*t,o=e[i];for(let l=0;l<t;++l){let u=e[i+l];(Number.isNaN(u)||u>o)&&(o=u)}r[s]=o}return r}var BT=Vt((e,t)=>Math.max(e,t)),Nj=rn(Ui,BT),Tj={kernelName:Ui,backendName:"cpu",kernelFunc:Nj},VT=Vt((e,t)=>Math.min(e,t)),Cj=rn(qi,VT),_j={kernelName:qi,backendName:"cpu",kernelFunc:Cj},m0=Vt((e,t)=>e*t),Ej=c0((e,t,n,a)=>({real:e*n-t*a,imag:e*a+t*n})),Xf=rn(Xi,m0,Ej),Aj={kernelName:Xi,backendName:"cpu",kernelFunc:Xf};function UT(e,t,n){let a=k.createScalarValue(-1,n);return m0([],t,a,e,n)}function $j(e){let{inputs:t,backend:n}=e,{x:a}=t;xe(a,"neg");let r=n.data.get(a.dataId).values,[s,i]=UT(r,a.shape,a.dtype);return n.makeTensorInfo(i,a.dtype,s)}var Fj={kernelName:pu,backendName:"cpu",kernelFunc:$j},GT=Vt((e,t)=>e!==t?1:0),Dj=rn(cu,GT,null,"bool"),Rj={kernelName:cu,backendName:"cpu",kernelFunc:Dj};function f0(e,t,n,a,r){let s=t.length,i=k.sizeFromShape(t),o=k.computeStrides(t),l=k.computeStrides(r),u=k.getTypedArrayFromDType(n,k.sizeFromShape(r));for(let p=0;p<i;++p){let d=k.indexToLoc(p,s,o),c=new Array(d.length);for(let m=0;m<c.length;m++)c[m]=d[a[m]];let h=k.locToIndex(c,s,l);u[h]=e[p]}return u}function Vn(e){let{inputs:t,attrs:n,backend:a}=e,{x:r}=t,{perm:s}=n;xe(r,"transpose");let i=r.shape.length,o=new Array(i);for(let p=0;p<o.length;p++)o[p]=r.shape[s[p]];let l=a.data.get(r.dataId).values,u=f0(l,r.shape,r.dtype,s,o);return{dataId:a.write(u,o,r.dtype),shape:o,dtype:r.dtype}}var Mj={kernelName:go,backendName:"cpu",kernelFunc:Vn};function HT(e,t,n,a){let[r,s]=_.computeOutAndReduceShapes(e,a),i=fa(t,"int32"),o=k.makeZerosTypedArray(k.sizeFromShape(r),i),l=k.sizeFromShape(s);for(let u=0;u<o.length;++u){let p=u*l,d=1;for(let c=0;c<l;++c)d*=n[p+c];o[u]=d}return{outVals:o,outShape:r,outDtype:i}}function Pj(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"prod");let o=r.shape.length,l=k.parseAxisParam(s,r.shape),u=_.getAxesPermutation(l,o),p=l,d=r,c=[];u!=null&&(d=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),c.push(d),p=_.getInnerMostAxes(p.length,o));let h=n.data.get(d.dataId).values,{outVals:m,outShape:f,outDtype:g}=HT(d.shape,d.dtype,h,p),y=f;return i&&(y=_.expandShapeToKeepDim(f,l)),c.forEach(b=>n.disposeIntermediateTensorInfo(b)),n.makeTensorInfo(y,g,m)}var Oj={kernelName:yu,backendName:"cpu",kernelFunc:Pj};function g0(e,t,n,a){let r=e===t,s=e<t&&n<0,i=t<e&&n>1;if(r||s||i)return k.makeZerosTypedArray(0,a);let o=Math.abs(Math.ceil((t-e)/n)),l=k.makeZerosTypedArray(o,a);t<e&&n===1&&(n=-1),l[0]=e;for(let u=1;u<l.length;u++)l[u]=l[u-1]+n;return l}var jT=Ts(e=>1/Math.sqrt(e)),Lj=qu(so,jT),zj={kernelName:so,backendName:"cpu",kernelFunc:Lj},Wj=Ts(e=>1/(1+Math.exp(-e))),qT=ot(oo,e=>1/(1+Math.exp(-e))),Bj={kernelName:oo,backendName:"cpu",kernelFunc:qT};function rm(e,t,n,a,r){let s=qt.isSliceContinous(a,t,n),i=k.sizeFromShape(n),o=k.computeStrides(a);if(s){let d=qt.computeFlatOffset(t,o);return r==="string"?e.slice(d,d+i):e.subarray(d,d+i)}let l=r==="string"?_.fromUint8ToStringArray(e):e,u=He(a,r,l),p=He(n,r);for(let d=0;d<p.size;++d){let c=p.indexToLoc(d),h=c.map((m,f)=>m+t[f]);p.set(u.get(...h),...c)}return r==="string"?_.fromStringArrayToUint8(p.values):p.values}function mi(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a;xe(r,"slice");let[o,l]=qt.parseSliceParams(r,s,i);qt.assertParamsValid(r,o,l);let u=n.data.get(r.dataId).values,p=rm(u,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,p)}var Vj={kernelName:Iu,backendName:"cpu",kernelFunc:mi};function KT(e,t,n,a,r,s,i){let o=t[0],l=s[0],u=new Array(l),p=new Array(o),d=t[1];if(l===0){if(o!==0)throw new Error(_.getSparseFillEmptyRowsIndicesDenseShapeMismatch(o));let g=k.getArrayFromDType(n,0),y=k.getArrayFromDType(r,0);return[g,[0,d],y,u,p]}let c=!0,h=0,m=new Array(l).fill(0);for(let g=0;g<o;++g){let y=e[g*d];if(y<0)throw new Error(_.getSparseFillEmptyRowsNegativeIndexErrorMessage(g,y));if(y>=l)throw new Error(_.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage(g,y,l));++m[y],c=c&&y>=h,h=y}let f=!0;for(let g=0;g<l;++g){let y=m[g]===0;u[g]=y,f=f&&!y,m[g]=Math.max(m[g],1),g>0&&(m[g]+=m[g-1])}if(f&&c){let g=e,y=a;for(let b=0;b<o;++b)p[b]=b;return[g,[o,d],y,u,p]}else{let g=m[l-1],y=k.getArrayFromDType(n,g*d),b=k.getArrayFromDType(r,g),x=new Array(l).fill(0);for(let v=0;v<o;++v){let w=e[v*d],T=x[w],C=(w===0?0:m[w-1])+T;x[w]++;for(let E=0;E<d;++E)y[C*d+E]=e[v*d+E];b[C]=a[v],p[v]=C}for(let v=0;v<l;++v)if(x[v]===0){let w=v===0?0:m[v-1];y[w*d+0]=v;for(let T=1;T<d;++T)y[w*d+T]=0;b[w]=i}return[y,[g,d],b,u,p]}}function XT(e,t,n,a,r){let s=k.sizeFromShape(a),i=t[0],o=r.length,l=[],u=1,p=-1;for(let f=0;f<o;++f){let g=r[f];if(g===-1){if(p!==-1)throw new Error(_.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(p,f));p=f,l.push(1)}else{if(g<0)throw new Error(_.getSparseReshapeNegativeOutputDimErrorMessage(f,g));u*=g,l.push(g)}}if(p!==-1){if(u<=0)throw new Error(_.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage());let f=Math.trunc(s/u);if(u*f!==s)throw new Error(_.getSparseReshapeInputOutputMultipleErrorMessage(a,l));l[p]=f}if(k.sizeFromShape(l)!==s)throw new Error(_.getSparseReshapeInputOutputMismatchErrorMessage(a,l));let d=a.length,c=[];if(d>0){c[d-1]=1;for(let f=d-2;f>=0;--f)c[f]=c[f+1]*a[f+1]}let h=[];if(o>0){h[o-1]=1;for(let f=o-2;f>=0;--f)h[f]=h[f+1]*l[f+1]}let m=k.getArrayFromDType(n,i*o);for(let f=0;f<i;++f){let g=0;for(let y=0;y<d;++y)g+=e[f*d+y]*c[y];for(let y=0;y<o;++y)m[f*o+y]=Math.trunc(g/h[y]),g%=h[y]}return[m,[i,o],l]}function y0(e,t,n,a,r,s=!1,i=0){let o=a.length,l=[t[0],e.length/t[0]],u=l[1],p=o>0?r[o-1]+1:0;if(p<0)throw new Error(_.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let d=t.slice();d[0]=p;let c=d.reduce((b,x)=>b*x,1),h=k.getArrayFromDType(n,c);if(o===0)return p>0&&h.fill(i),[h,d];if(p<=0)throw new Error(_.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let m=0,f=1,g=0,y=r[m];for(;;){let b=0;if(f<o){if(b=r[f],y===b){++f;continue}if(y>=b)throw new Error(_.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage())}if(y<0||y>=p)throw new Error(_.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(y,p));y>g&&h.fill(i,g*u,y*u);for(let x=m;x<f;++x){let v=a[x];if(v<0||v>=l[0])throw new Error(_.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(x,a[x],l[0]));for(let w=0;w<u;w++)h[y*u+w]+=e[v*u+w]}if(s)for(let x=0;x<u;x++)h[y*u+x]/=f-m;if(m=f,++f,g=y+1,y=b,f>o)break}return g<p&&h.fill(i,g*u,p*u),[h,d]}var Uj=Ts(e=>Math.sqrt(e)),Gj=ot(lo,e=>Math.sqrt(e)),Hj={kernelName:lo,backendName:"cpu",kernelFunc:Gj},YT=Vt((e,t)=>{let n=e-t;return n*n}),jj=rn(co,YT),qj={kernelName:co,backendName:"cpu",kernelFunc:jj};function JT(e,t,n,a){let r=He(e,t.dtype);for(let s=0;s<r.size;s++){let i=r.indexToLoc(s),o=new Array(i.length);for(let l=0;l<o.length;l++)o[l]=i[l]*n[l]+a[l];r.set(t.get(...o),...i)}return r}var Kj=class{constructor(e,t,n,a,r,s){this.separator=k.encodeString(e),this.nGramWidths=t,this.leftPad=k.encodeString(n),this.rightPad=k.encodeString(a),this.padWidth=r,this.preserveShort=s}getPadWidth(e){return Math.min(this.padWidth<0?e-1:this.padWidth,e-1)}getNumNGrams(e,t){let n=this.getPadWidth(t);return Math.max(0,e+2*n-t+1)}createNGrams(e,t,n,a,r,s){for(let i=0;i<r;++i){let o=this.getPadWidth(s),l=Math.max(0,o-i),u=Math.max(0,o-(r-(i+1))),p=s-(l+u),d=t+(l>0?0:i-o),c=0;c+=l*this.leftPad.length;for(let g=0;g<p;++g)c+=e[d+g].length;c+=u*this.rightPad.length,c+=(l+u+p-1)*this.separator.length,n[a+i]=new Uint8Array(c);let h=n[a+i],m=0,f=g=>g.forEach(y=>h[m++]=y);for(let g=0;g<l;++g)f(this.leftPad),f(this.separator);for(let g=0;g<p-1;++g)f(e[d+g]),f(this.separator);if(p>0){f(e[d+p-1]);for(let g=0;g<u;++g)f(this.separator),f(this.rightPad)}else{for(let g=0;g<u-1;++g)f(this.rightPad),f(this.separator);f(this.rightPad)}}}compute(e,t){let n=e.length,a=t.length;if(a>0){let o=t[0];if(o!==0)throw new Error(`First split value must be 0, got ${o}`);for(let l=1;l<a;++l){let u=t[l]>=o;if(u=u&&t[l]<=n,!u)throw new Error(`Invalid split value ${t[l]}, must be in [${o}, ${n}]`);o=t[l]}if(o!==n)throw new Error(`Last split value must be data size. Expected ${n}, got ${o}`)}let r=a-1,s=k.getArrayFromDType("int32",a);if(n===0||a===0){let o=new Array(n);for(let l=0;l<=r;++l)s[l]=0;return[o,s]}s[0]=0;for(let o=1;o<=r;++o){let l=t[o]-t[o-1],u=0;this.nGramWidths.forEach(p=>{u+=this.getNumNGrams(l,p)}),this.preserveShort&&l>0&&u===0&&(u=1),s[o]=s[o-1]+u}let i=new Array(s[r]);for(let o=0;o<r;++o){let l=t[o],u=s[o];if(this.nGramWidths.forEach(p=>{let d=t[o+1]-t[o],c=this.getNumNGrams(d,p);this.createNGrams(e,l,i,u,c,p),u+=c}),this.preserveShort&&u===s[o]){let p=t[o+1]-t[o];if(p===0)continue;let d=p+2*this.padWidth,c=1;this.createNGrams(e,l,i,u,c,d)}}return[i,s]}};function ZT(e,t,n,a,r,s,i,o){return new Kj(n,a,r,s,i,o).compute(e,t)}function Xj(e,t,n,a){if(!e.length)return;if(t.length===0){for(let s=0;s<e.length;++s)a.push(e.subarray(s,s+1));return}if(t.length===1){let s=t[0],i=e.indexOf(s);for(;i!==-1;){let o=e.subarray(0,i);(!n||o.length!==0)&&a.push(o),e=e.subarray(i+1),i=e.indexOf(s)}(!n||e.length!==0)&&a.push(e);return}let r=0;for(let s=0;s<e.length+1;s++)if(s===e.length||t.indexOf(e[s])!==-1){let i=e.subarray(r,s);(!n||i.length!==0)&&a.push(i),r=s+1}}function QT(e,t,n){let a=e.length,r=[],s=0,i=0,o=new Array(a);for(let c=0;c<a;++c){let h=r.length;Xj(e[c],t,n,r);let m=r.length-h;o[c]=m,s+=m,i=Math.max(i,m)}let l=k.getArrayFromDType("int32",s*2),u=new Array(s),p=[a,i],d=0;for(let c=0;c<a;++c)for(let h=0;h<o[c];++h)l[d*2]=c,l[d*2+1]=h,u[d]=r[d],++d;return[l,u,p]}function eC(e,t){let n=k.getArrayFromDType("int32",e.length);for(let a=0;a<e.length;++a)n[a]=k.fingerPrint64(e[a]).modulo(t).getLowBitsUnsigned();return n}var tC=Vt((e,t)=>e-t),Yj=c0((e,t,n,a)=>({real:e-n,imag:t-a})),b0=rn(ho,tC,Yj),Jj={kernelName:ho,backendName:"cpu",kernelFunc:b0};function nC(e,t){let n=new Array(e.rank);for(let r=0;r<n.length;r++)n[r]=e.shape[r]*t[r];let a=He(n,e.dtype);for(let r=0;r<a.values.length;++r){let s=a.indexToLoc(r),i=new Array(e.rank);for(let l=0;l<i.length;l++)i[l]=s[l]%e.shape[l];let o=e.locToIndex(i);a.values[r]=e.values[o]}return a}var Wp=(e,t)=>{let n=t.value-e.value;return n===0?e.index-t.index:n};function aC(e,t,n=0,a=e.length-1){for(;a>n;){if(a-n>600){let o=a-n+1,l=t-n+1,u=Math.log(o),p=.5*Math.exp(2*u/3),d=.5*Math.sqrt(u*p*(o-p)/o)*Math.sign(l-o/2),c=Math.max(n,Math.floor(t-l*p/o+d)),h=Math.min(a,Math.floor(t+(o-l)*p/o+d));aC(e,t,c,h)}let r=e[t],s=n,i=a;for(k.swap(e,n,t),Wp(e[a],r)>0&&k.swap(e,n,a);s<i;){for(k.swap(e,s,i),s++,i--;Wp(e[s],r)<0;)s=s+1;for(;Wp(e[i],r)>0;)i=i-1}Wp(e[n],r)===0?k.swap(e,n,i):(i=i+1,k.swap(e,i,a)),i<=t&&(n=i+1),t<=i&&(a=i-1)}}function rC(e,t,n,a,r){let s=t[t.length-1],[i,o]=[e.length/s,s],l=k.getTypedArrayFromDType(n,i*a),u=k.getTypedArrayFromDType("int32",i*a);for(let d=0;d<i;d++){let c=d*o,h=e.subarray(c,c+o),m=new Array(h.length);h.forEach((b,x)=>m[x]={value:b,index:x}),a<m.length&&(aC(m,a),m=m.slice(0,a)),r&&m.sort(Wp);let f=d*a,g=l.subarray(f,f+a),y=u.subarray(f,f+a);for(let b=0;b<a;b++)g[b]=m[b].value,y[b]=m[b].index}let p=t.slice();return p[p.length-1]=a,[He(p,n,l),He(p,"int32",u)]}function sC(e,t,n,a){let r=k.parseAxisParam(t,n)[0],s=[1,n[0],1];for(let m=0;m<r;m++)s[0]*=n[m];s[1]=n[r];for(let m=r+1;m<n.length;m++)s[2]*=n[m];let i={},o=new Int32Array(n[r]),l=new jt(s,a,e),u=[],p=s[0]===1&&s[2]===1;for(let m=0;m<n[r];m++){let f;if(p)f=e[m].toString();else{let g=[];for(let y=0;y<s[0];y++)for(let b=0;b<s[2];b++)g.push(l.get(y,m,b));f=g.join(",")}if(i[f]!==void 0)o[m]=i[f];else{let g=Object.keys(i).length;i[f]=g,o[m]=g,u.push(m)}}let d=s.slice();d[1]=Object.keys(i).length;let c=new jt(d,a);u.forEach((m,f)=>{for(let g=0;g<s[0];g++)for(let y=0;y<s[2];y++)c.set(l.get(g,m,y),g,f,y)});let h=n.slice();return h[r]=d[1],{outputValues:c.values,outputShape:h,indices:o}}qm("cpu",()=>new p0,1);var iC=ot(Di,e=>e>=0?e:Math.exp(e)-1),Zj={kernelName:Di,backendName:"cpu",kernelFunc:iC};function oC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a;xe([r],"leakyRelu");let i=k.sizeFromShape(r.shape),o=n.data.get(r.dataId).values,l=k.getTypedArrayFromDType("float32",i);for(let u=0;u<o.length;u++)l[u]=o[u]<0?s*o[u]:o[u];return n.makeTensorInfo(r.shape,"float32",l)}var Qj={kernelName:Wi,backendName:"cpu",kernelFunc:oC},e5=Vt((e,t)=>e<0?t*e:e);function lC(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t;xe([a,r],"prelu");let s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,[o,l]=e5(a.shape,r.shape,s,i,"float32");return n.makeTensorInfo(l,"float32",o)}var t5={kernelName:Qi,backendName:"cpu",kernelFunc:lC},uC=ot(eo,e=>Math.max(0,e)),n5={kernelName:eo,backendName:"cpu",kernelFunc:uC},pC=ot(no,e=>Math.min(Math.max(0,e),6)),a5={kernelName:no,backendName:"cpu",kernelFunc:pC};function x0(e,t,n,a,r){if(n==="linear")return hr({inputs:{x:t},backend:e});if(n==="relu")return uC({inputs:{x:t},backend:e});if(n==="elu")return iC({inputs:{x:t},backend:e});if(n==="relu6")return pC({inputs:{x:t},backend:e});if(n==="prelu")return lC({inputs:{x:t,alpha:a},backend:e});if(n==="leakyrelu")return oC({inputs:{x:t},backend:e,attrs:{alpha:r}});if(n==="sigmoid")return qT({inputs:{x:t},backend:e});throw new Error(`Activation ${n} has not been implemented for the CPU backend.`)}function Tt(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{shape:s}=a,i=k.sizeFromShape(r.shape),o=k.inferFromImplicitShape(s,i),l=k.sizeFromShape(o);k.assert(i===l,()=>`The new shape (${o}) has ${l} elements and the old shape (${r.shape}) has ${i} elements. The new shape and old shape must have the same number of elements.`),n.incRef(r.dataId);let u=n.data.get(r.dataId);if(u.complexTensorInfos!=null){let p=u.complexTensorInfos.real,d=u.complexTensorInfos.imag;p.shape=o,d.shape=o}return{dataId:r.dataId,shape:o,dtype:r.dtype}}var r5={kernelName:xu,backendName:"cpu",kernelFunc:Tt};function cC(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;xe([r,s],"matMul");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],d=o?s.shape[u-1]:s.shape[u-2],c=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=k.sizeFromShape(m),y=k.sizeFromShape(f),b=Pu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([c,h]);k.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,p,c]:[g,c,p],v=o?[y,h,d]:[y,d,h],w=Tt({inputs:{x:r},backend:n,attrs:{shape:x}}),T=Tt({inputs:{x:s},backend:n,attrs:{shape:v}}),C=i?w.shape[1]:w.shape[2],E=i?w.shape[2]:w.shape[1],$=o?T.shape[1]:T.shape[2],P=Math.max(g,y),F=n.data.get(w.dataId).values,S=n.data.get(T.dataId).values,M=k.computeStrides(w.shape),B=k.computeStrides(T.shape),[j,q,K]=i?[M[0],1,M[1]]:[M[0],M[1],1],[Q,ee,re]=o?[1,B[1],B[0]]:[B[1],1,B[0]],Z=E*$,ie=He([P,E,$],w.dtype),ae=ie.values,le=n.blockSize;for(let ue=0;ue<P;ue++)for(let we=0;we<E;we+=le)for(let ye=0;ye<$;ye+=le)for(let Ie=0;Ie<C;Ie+=le){let Ee=Math.min(we+le,E),$e=Math.min(ye+le,$),We=Math.min(Ie+le,C);for(let je=we;je<Ee;je++)for(let st=ye;st<$e;st++){let nt=0;for(let at=Ie;at<We;at++){let Te=Math.min(ue,g-1)*j,gt=Math.min(ue,y-1)*re,ct=F[Te+je*q+at*K],bn=S[at*Q+st*ee+gt];nt+=ct*bn}ae[ue*Z+(je*$+st)]+=nt}}return n.disposeIntermediateTensorInfo(w),n.disposeIntermediateTensorInfo(T),n.makeTensorInfo(b,ie.dtype,ie.values)}var s5={kernelName:Ii,backendName:"cpu",kernelFunc:cC};function i5(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a,c,h,m,f=[];c=cC({inputs:{a:r,b:s},attrs:{transposeA:l,transposeB:u},backend:n}),i&&(h=ad({inputs:{a:c,b:i},backend:n}),f.push(c),c=h),p&&(m=x0(n,c,p,o,d),f.push(c),c=m);for(let g of f)n.disposeIntermediateTensorInfo(g);return c}var o5={kernelName:ni,backendName:"cpu",kernelFunc:i5},l5=ot(Rl,e=>Math.acos(e)),u5={kernelName:Rl,backendName:"cpu",kernelFunc:l5},p5=ot(Ml,e=>Math.acosh(e)),c5={kernelName:Ml,backendName:"cpu",kernelFunc:p5};function d5(e){let{inputs:t,backend:n}=e,a=t;xe(t,"addN");let r=a.map(o=>n.data.get(o.dataId).values),s=He(a[0].shape,a[0].dtype),i=s.values;for(let o=0;o<a.length;o++){let l=r[o];for(let u=0;u<i.length;u++)i[u]+=l[u]}return n.makeTensorInfo(s.shape,s.dtype,s.values)}var h5={kernelName:vi,backendName:"cpu",kernelFunc:d5};function m5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"all");let o=k.parseAxisParam(s,r.shape),l=o,u=_.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=_.getInnerMostAxes(l.length,r.shape.length)),_.assertAxesAreInnerMostDims("all",l,p.shape.length);let[d,c]=_.computeOutAndReduceShapes(p.shape,l),h=k.sizeFromShape(c),m=k.makeZerosTypedArray(k.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let v=0;v<h;++v){let w=f[b+v];x=x&&w}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=_.expandShapeToKeepDim(d,o),b=Tt({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var f5={kernelName:Pl,backendName:"cpu",kernelFunc:m5};function g5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"any");let o=k.parseAxisParam(s,r.shape),l=o,u=_.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=_.getInnerMostAxes(l.length,r.shape.length)),_.assertAxesAreInnerMostDims("any",l,p.shape.length);let[d,c]=_.computeOutAndReduceShapes(p.shape,l),h=k.sizeFromShape(c),m=k.makeZerosTypedArray(k.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let v=0;v<h;++v){let w=f[b+v];x=x||w}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=_.expandShapeToKeepDim(d,o),b=Tt({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var y5={kernelName:Ol,backendName:"cpu",kernelFunc:g5};function b5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a;xe(r,"argMax");let i=k.parseAxisParam(s,r.shape),o=_.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Vn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=_.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],_.assertAxesAreInnerMostDims("argMax",i,l.shape.length);let[p,d]=_.computeOutAndReduceShapes(l.shape,i),c=k.sizeFromShape(p),h=k.makeZerosTypedArray(c,"int32"),m=k.sizeFromShape(d),f=n.data.get(l.dataId).values;for(let g=0;g<h.length;++g){let y=g*m,b=f[y],x=0;for(let v=0;v<m;++v){let w=f[y+v];w>b&&(b=w,x=v)}h[g]=x}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var x5={kernelName:wi,backendName:"cpu",kernelFunc:b5};function v5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a;xe(r,"argMin");let i=k.parseAxisParam(s,r.shape),o=_.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=Vn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=_.getInnerMostAxes(i.length,l.shape.length)),i=[i[0]],_.assertAxesAreInnerMostDims("argMin",i,l.shape.length);let[p,d]=_.computeOutAndReduceShapes(l.shape,i),c=k.sizeFromShape(p),h=k.makeZerosTypedArray(c,"int32"),m=k.sizeFromShape(d),f=n.data.get(l.dataId).values;for(let g=0;g<h.length;++g){let y=g*m,b=f[y],x=0;for(let v=0;v<m;++v){let w=f[y+v];w<b&&(b=w,x=v)}h[g]=x}return u.forEach(g=>n.disposeIntermediateTensorInfo(g)),n.makeTensorInfo(p,"int32",h)}var w5={kernelName:dc,backendName:"cpu",kernelFunc:v5},k5=ot(Ll,e=>Math.asin(e)),I5={kernelName:Ll,backendName:"cpu",kernelFunc:k5},S5=ot(zl,e=>Math.asinh(e)),N5={kernelName:zl,backendName:"cpu",kernelFunc:S5},T5=ot(Wl,e=>Math.atan(e)),C5={kernelName:Wl,backendName:"cpu",kernelFunc:T5},_5=Vt((e,t)=>Math.atan2(e,t)),E5=rn(Vl,_5),A5={kernelName:Vl,backendName:"cpu",kernelFunc:E5},$5=ot(Bl,e=>Math.atanh(e)),F5={kernelName:Bl,backendName:"cpu",kernelFunc:$5};function v0(e,t,n,a,r,s){let i=r.strideHeight,o=r.strideWidth,l=r.dilationHeight,u=r.dilationWidth,p=r.effectiveFilterHeight,d=r.effectiveFilterWidth,c=r.padInfo.top,h=r.padInfo.left,m=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,f=He(r.outShape,n),g=f.values,y=r.outShape[1]*r.outShape[2]*r.outShape[3],b=r.outShape[2]*r.outShape[3],x=r.outShape[3];for(let v=0;v<r.batchSize;++v){let w=v*y,T=v*a[0];for(let C=0;C<r.inChannels;++C)for(let E=0;E<r.outHeight;++E){let $=E*i-c,P=Math.max(0,$),F=Math.min(r.inHeight,p+$),S=w+E*b;for(let M=0;M<r.outWidth;++M){let B=M*o-h,j=Math.max(0,B),q=Math.min(r.inWidth,d+B),K=m,Q=0,ee=0;for(let Z=P;Z<F;Z+=l){let ie=T+Z*a[1];for(let ae=j;ae<q;ae+=u){let le=ie+ae*a[2],ue=e[le+C];s==="max"&&ue>K?K=ue:s==="avg"&&(Q+=ue,ee++)}if(isNaN(K))break}let re=S+M*x+C;g[re]=s==="avg"?Q/ee:K}}}return f}function dC(e,t,n,a,r=!1,s=!1){let i=He(a.outShape,"int32"),o=a.strideHeight,l=a.strideWidth,u=a.dilationHeight,p=a.dilationWidth,d=a.effectiveFilterHeight,c=a.effectiveFilterWidth,h=a.padInfo.top,m=a.padInfo.left,f=He(t,n,e);for(let g=0;g<a.batchSize;++g)for(let y=0;y<a.inChannels;++y)for(let b=0;b<a.outHeight;++b){let x=b*o-h,v=x;for(;v<0;)v+=u;let w=Math.min(a.inHeight,d+x);for(let T=0;T<a.outWidth;++T){let C=T*l-m,E=C;for(;E<0;)E+=p;let $=Math.min(a.inWidth,c+C),P=Number.NEGATIVE_INFINITY,F=-1;for(let S=v;S<w;S+=u){let M=S-x;for(let B=E;B<$;B+=p){let j=B-C,q=f.get(g,S,B,y);q>P&&(P=q,r?F=s?((g*a.inHeight+S)*a.inWidth+B)*a.inChannels+y:(S*a.inWidth+B)*a.inChannels+y:F=M*c+j)}}i.set(F,g,b,T,y)}}return i}function hC(e,t,n,a,r,s){let i=r.strideDepth,o=r.strideHeight,l=r.strideWidth,u=r.dilationDepth,p=r.dilationHeight,d=r.dilationWidth,c=r.effectiveFilterDepth,h=r.effectiveFilterHeight,m=r.effectiveFilterWidth,f=r.padInfo.front,g=r.padInfo.top,y=r.padInfo.left,b=s==="max"?Number.NEGATIVE_INFINITY:Number.POSITIVE_INFINITY,x=He(r.outShape,n),v=x.values,w=r.outShape[1]*r.outShape[2]*r.outShape[3]*r.outShape[4],T=r.outShape[2]*r.outShape[3]*r.outShape[4],C=r.outShape[3]*r.outShape[4],E=r.outShape[4];for(let $=0;$<r.batchSize;++$){let P=$*w,F=$*a[0];for(let S=0;S<r.inChannels;++S)for(let M=0;M<r.outDepth;++M){let B=M*i-f,j=B;for(;j<0;)j+=u;let q=Math.min(r.inDepth,c+B),K=P+M*T;for(let Q=0;Q<r.outHeight;++Q){let ee=Q*o-g,re=ee;for(;re<0;)re+=p;let Z=Math.min(r.inHeight,h+ee),ie=K+Q*C;for(let ae=0;ae<r.outWidth;++ae){let le=ae*l-y,ue=le;for(;ue<0;)ue+=d;let we=Math.min(r.inWidth,m+le),ye=ie+ae*E,Ie=b,Ee=0,$e=0;for(let je=j;je<q;je+=u){let st=F+je*a[1];for(let nt=re;nt<Z;nt+=p){let at=st+nt*a[2];for(let Te=ue;Te<we;Te+=d){let gt=at+Te*a[3],ct=e[gt+S];if(s==="max"&&ct>Ie?Ie=ct:s==="avg"&&(Ee+=ct,$e++),isNaN(Ie))break}if(isNaN(Ie))break}if(isNaN(Ie))break}let We=ye+S;v[We]=s==="avg"?Ee/$e:Ie}}}}return x}function D5(e,t){let n=He(t.outShape,"int32"),a=t.strideDepth,r=t.strideHeight,s=t.strideWidth,i=t.dilationDepth,o=t.dilationHeight,l=t.dilationWidth,u=t.effectiveFilterDepth,p=t.effectiveFilterHeight,d=t.effectiveFilterWidth,c=t.padInfo.front,h=t.padInfo.top,m=t.padInfo.left;for(let f=0;f<t.batchSize;++f)for(let g=0;g<t.inChannels;++g)for(let y=0;y<t.outDepth;++y){let b=y*a-c,x=b;for(;x<0;)x+=i;let v=Math.min(t.inDepth,u+b);for(let w=0;w<t.outHeight;++w){let T=w*r-h,C=T;for(;C<0;)C+=o;let E=Math.min(t.inHeight,p+T);for(let $=0;$<t.outWidth;++$){let P=$*s-m,F=P;for(;F<0;)F+=l;let S=Math.min(t.inWidth,d+P),M=Number.NEGATIVE_INFINITY,B=-1;for(let j=x;j<v;j+=i){let q=j-b;for(let K=C;K<E;K+=o){let Q=K-T;for(let ee=F;ee<S;ee+=l){let re=ee-P,Z=e.get(f,j,K,ee,g);Z>=M&&(M=Z,B=q*p*d+Q*p+re)}}}n.set(B,f,y,w,$,g)}}}return n}function R5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;xe(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;k.assert(_.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=_.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&k.arraysEqual(p.inShape,p.outShape))d=hr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=k.computeStrides(r.shape),m=v0(c,r.shape,r.dtype,h,p,"avg");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var M5={kernelName:ki,backendName:"cpu",kernelFunc:R5};function P5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;xe(r,"avgPool3d");let p=_.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=hC(d,r.shape,r.dtype,k.computeStrides(r.shape),p,"avg");return n.makeTensorInfo(c.shape,"float32",c.values)}var O5={kernelName:hc,backendName:"cpu",kernelFunc:P5};function L5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;xe([r,s],"avgPool3DGrad");let p=_.computePool3DInfo(s.shape,i,o,1,l,u),d=p.strideDepth,c=p.strideHeight,h=p.strideWidth,m=p.filterDepth,f=p.filterHeight,g=p.filterWidth,y=p.dilationDepth,b=p.dilationHeight,x=p.dilationWidth,v=p.effectiveFilterDepth,w=p.effectiveFilterHeight,T=p.effectiveFilterWidth,C=v-1-p.padInfo.front,E=T-1-p.padInfo.left,$=w-1-p.padInfo.top,P=He(s.shape,"float32"),F=1/(m*f*g),S=n.bufferSync(r);for(let M=0;M<p.batchSize;++M)for(let B=0;B<p.inChannels;++B)for(let j=0;j<p.inDepth;++j)for(let q=0;q<p.inHeight;++q)for(let K=0;K<p.inWidth;++K){let Q=j-C,ee=q-$,re=K-E,Z=0;for(let ie=0;ie<v;ie+=y){let ae=(Q+ie)/d;if(!(ae<0||ae>=p.outDepth||Math.floor(ae)!==ae))for(let le=0;le<w;le+=b){let ue=(ee+le)/c;if(!(ue<0||ue>=p.outHeight||Math.floor(ue)!==ue))for(let we=0;we<T;we+=x){let ye=(re+we)/h;ye<0||ye>=p.outWidth||Math.floor(ye)!==ye||(Z+=S.get(M,ae,ue,ye,B))}}}P.set(Z*F,M,j,q,K,B)}return n.makeTensorInfo(P.shape,P.dtype,P.values)}var z5={kernelName:mm,backendName:"cpu",kernelFunc:L5};function W5(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;xe([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=_.computePool2DInfo(i.shape,o,l,1,u),d=p.strideHeight,c=p.strideWidth,h=p.filterHeight,m=p.filterWidth,f=p.dilationHeight,g=p.dilationWidth,y=p.effectiveFilterHeight,b=p.effectiveFilterWidth,x=b-1-p.padInfo.left,v=y-1-p.padInfo.top,w=He(i.shape,"float32"),T=1/(h*m),C=n.data.get(r.dataId).values,E=He(r.shape,"float32",C);for(let $=0;$<p.batchSize;++$)for(let P=0;P<p.inChannels;++P)for(let F=0;F<p.inHeight;++F)for(let S=0;S<p.inWidth;++S){let M=F-v,B=S-x,j=0;for(let q=0;q<y;q+=f){let K=(M+q)/d;if(!(K<0||K>=p.outHeight||Math.floor(K)!==K))for(let Q=0;Q<b;Q+=g){let ee=(B+Q)/c;ee<0||ee>=p.outWidth||Math.floor(ee)!==ee||(j+=E.get($,K,ee,P))}}w.set(j*T,$,F,S,P)}return n.makeTensorInfo(w.shape,w.dtype,w.values)}var B5={kernelName:hm,backendName:"cpu",kernelFunc:W5};function V5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,scale:s,offset:i,mean:o,variance:l}=t;k.assert(o.shape.length===l.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||o.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(s==null||o.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks."),xe([r,o,l,s,i],"batchNorm");let{varianceEpsilon:u}=a;u==null&&(u=.001);let p=n.data.get(r.dataId).values,d=n.data.get(o.dataId).values,c=n.data.get(l.dataId).values,h=s?n.data.get(s.dataId).values:new Float32Array([1]),m=i?n.data.get(i.dataId).values:new Float32Array([0]),f=new Float32Array(p.length),g=m.length,y=h.length,b=c.length,x=d.length,v=0,w=0,T=0,C=0;for(let E=0;E<p.length;++E)f[E]=m[v++]+(p[E]-d[w++])*h[T++]/Math.sqrt(c[C++]+u),v>=g&&(v=0),w>=x&&(w=0),T>=y&&(T=0),C>=b&&(C=0);return n.makeTensorInfo(r.shape,r.dtype,f)}var U5={kernelName:Oi,backendName:"cpu",kernelFunc:V5};function G5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a;xe([r],"batchToSpaceND");let o=s.reduce((y,b)=>y*b),l=_.getReshaped(r.shape,s,o),u=_.getPermuted(l.length,s.length),p=_.getReshapedPermuted(r.shape,s,o),d=_.getSliceBeginCoords(i,s.length),c=_.getSliceSize(p,i,s.length),h=Tt({inputs:{x:r},backend:n,attrs:{shape:l}}),m=Vn({inputs:{x:h},backend:n,attrs:{perm:u}}),f=Tt({inputs:{x:m},backend:n,attrs:{shape:p}}),g=mi({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),g}var H5={kernelName:Ul,backendName:"cpu",kernelFunc:G5};function j5(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i}=a,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,u=d0(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var q5={kernelName:fm,backendName:"cpu",kernelFunc:j5};function K5(e){let{inputs:t,backend:n}=e,{s0:a,s1:r}=t,s=n.data.get(a.dataId).values,i=n.data.get(r.dataId).values,o=_.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var X5={kernelName:gm,backendName:"cpu",kernelFunc:K5},Y5=ot(bs,(e,t)=>{let n=t;return e>n.clipValueMax?n.clipValueMax:e<n.clipValueMin?n.clipValueMin:e}),J5={kernelName:bs,backendName:"cpu",kernelFunc:Y5},Z5=e=>{let{x:t}=e.inputs,n=e.backend,a=new Float32Array(k.sizeFromShape(t.shape)),r=n.data.get(t.dataId),s=r.complexTensorInfos.real,i=r.complexTensorInfos.imag,o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values;for(let u=0;u<o.length;u++){let p=o[u],d=l[u];a[u]=Math.hypot(p,d)}return n.makeOutput(a,t.shape,"float32")},Q5={kernelName:mc,backendName:"cpu",kernelFunc:Z5};function El(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.data.get(a.dataId).complexTensorInfos.imag,s=n.data.get(r.dataId).values;return n.makeTensorInfo(r.shape,r.dtype,s)}var eq={kernelName:Em,backendName:"cpu",kernelFunc:El};function Al(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a,s=k.parseAxisParam(r,t[0].shape)[0],i=_.computeOutShape(t.map(f=>f.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(f=>k.sizeFromShape(f.shape)>0);if(o.length===1)return hr({inputs:{x:o[0]},backend:n});let l=o.map(f=>f.shape);if(_.assertParamsConsistent(l,s),o[0].dtype==="complex64"){let f=o.map(v=>hi({inputs:{input:v},backend:n})),g=o.map(v=>El({inputs:{input:v},backend:n})),y=Al({inputs:f,backend:n,attrs:{axis:s}}),b=Al({inputs:g,backend:n,attrs:{axis:s}}),x=Jn({inputs:{real:y,imag:b},backend:n});return f.forEach(v=>n.disposeIntermediateTensorInfo(v)),g.forEach(v=>n.disposeIntermediateTensorInfo(v)),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(b),x}let u=o.map(f=>{let g=k.sizeFromShape(f.shape.slice(s));return Tt({inputs:{x:f},backend:n,attrs:{shape:[-1,g]}})}),p=u.map(f=>({vals:n.data.get(f.dataId).values,shape:f.shape}));i=_.computeOutShape(u.map(f=>f.shape),1);let d=u[0].shape[0]===1,c=h0(p,i,t[0].dtype,d),h=_.computeOutShape(o.map(f=>f.shape),s),m=n.makeTensorInfo(h,t[0].dtype,c);return u.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var tq={kernelName:Gl,backendName:"cpu",kernelFunc:Al};function mC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a;xe([r,s],"conv2d");let d=_.convertConv2DDataFormat(l),c=_.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,d),h=c.filterHeight,m=c.filterWidth,f=c.dilationHeight,g=c.dilationWidth,y=c.padInfo.left,b=c.padInfo.top,x=c.dataFormat==="channelsLast",v=new jt(c.outShape,r.dtype),w=k.computeStrides(r.shape),T=k.computeStrides(s.shape),C=w[0],E=x?w[1]:w[2],$=x?w[2]:1,P=x?1:w[1],F=v.strides[0],S=x?v.strides[1]:v.strides[2],M=x?v.strides[2]:1,B=x?1:v.strides[1],j=n.data.get(r.dataId).values,q=n.data.get(s.dataId).values,K=v.values;for(let Q=0;Q<c.batchSize;++Q){let ee=Q*C,re=Q*F;for(let Z=0;Z<c.outHeight;++Z){let ie=re+Z*S,ae=Z*c.strideHeight-b;for(let le=0;le<h;++le){let ue=ae+le*f;if(ue<0||ue>=c.inHeight)continue;let we=le*T[0],ye=ee+ue*E;for(let Ie=0;Ie<c.outWidth;++Ie){let Ee=ie+Ie*M,$e=Ie*c.strideWidth-y;for(let We=0;We<m;++We){let je=$e+We*g;if(je<0||je>=c.inWidth)continue;let st=we+We*T[1],nt=ye+je*$,at=st;for(let Te=0;Te<c.inChannels;++Te){let gt=j[nt+Te*P];for(let ct=0;ct<c.outChannels;++ct)K[Ee+ct*B]+=gt*q[at+ct];at+=c.outChannels}}}}}}return n.makeTensorInfo(v.shape,v.dtype,K)}var nq={kernelName:Ti,backendName:"cpu",kernelFunc:mC};function aq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=a;xe([r,s],"conv2dBackpropFilter");let d=_.convertConv2DDataFormat(l),c=_.computeConv2DInfo(r.shape,p,i,1,o,u,!1,d),{strideHeight:h,strideWidth:m,filterHeight:f,filterWidth:g}=c,y=c.dataFormat==="channelsLast",b=new jt(c.filterShape,"float32"),x=c.padInfo.left,v=c.padInfo.top,w=n.data.get(r.dataId).values,T=n.data.get(s.dataId).values,C=new jt(r.shape,r.dtype,w),E=new jt(s.shape,s.dtype,T);for(let $=0;$<f;++$){let P=Math.max(0,Math.ceil((v-$)/h)),F=Math.min(c.outHeight,(c.inHeight+v-$)/h);for(let S=0;S<g;++S){let M=Math.max(0,Math.ceil((x-S)/m)),B=Math.min(c.outWidth,(c.inWidth+x-S)/m);for(let j=0;j<c.inChannels;++j)for(let q=0;q<c.outChannels;++q){let K=0;for(let Q=0;Q<c.batchSize;++Q)for(let ee=P;ee<F;++ee){let re=$+ee*h-v;for(let Z=M;Z<B;++Z){let ie=S+Z*m-x;y?K+=C.get(Q,re,ie,j)*E.get(Q,ee,Z,q):K+=C.get(Q,j,re,ie)*E.get(Q,q,ee,Z)}}b.set(K,$,S,j,q)}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var rq={kernelName:bm,backendName:"cpu",kernelFunc:aq};function sq(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=a;xe([r,s],"conv2dBackpropInput");let d=k.computeStrides(s.shape),c=k.computeStrides(r.shape),h=_.convertConv2DDataFormat(u),m=_.computeConv2DInfo(i,s.shape,o,1,l,p,!1,h),f=new jt(m.inShape,"float32"),g=f.values,y=n.data.get(r.dataId).values,b=n.data.get(s.dataId).values,[x,v,w]=d,{batchSize:T,filterHeight:C,filterWidth:E,inChannels:$,inHeight:P,inWidth:F,outChannels:S,outHeight:M,outWidth:B,strideHeight:j,strideWidth:q}=m;h=m.dataFormat;let K=C-1-m.padInfo.top,Q=E-1-m.padInfo.left,ee=h==="channelsLast",re=f.strides[0],Z=ee?f.strides[1]:f.strides[2],ie=ee?f.strides[2]:1,ae=ee?1:f.strides[1],le=c[0],ue=ee?c[1]:c[2],we=ee?c[2]:1,ye=ee?1:c[1];for(let Ie=0;Ie<T;++Ie)for(let Ee=0;Ee<$;++Ee)for(let $e=0;$e<P;++$e){let We=$e-K,je=Math.max(0,Math.ceil(We/j)),st=Math.min(M,(C+We)/j);for(let nt=0;nt<F;++nt){let at=nt-Q,Te=Math.max(0,Math.ceil(at/q)),gt=Math.min(B,(E+at)/q),ct=0;for(let Yt=je;Yt<st;++Yt){let Dn=Yt*j-We;for(let Ut=Te;Ut<gt;++Ut){let Jt=Ut*q-at,Da=le*Ie+ue*Yt+we*Ut,Rn=x*(C-1-Dn)+v*(E-1-Jt)+w*Ee;for(let Gt=0;Gt<S;++Gt){let ia=y[Da+ye*Gt],oa=b[Rn+Gt];ct+=ia*oa}}}let bn=re*Ie+Z*$e+ie*nt+ae*Ee;g[bn]=ct}}return n.makeTensorInfo(f.shape,f.dtype,f.values)}var iq={kernelName:Ci,backendName:"cpu",kernelFunc:sq};function oq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a;xe([r,s],"conv3d");let u=_.computeConv3DInfo(r.shape,s.shape,i,l,o),{filterDepth:p,filterHeight:d,filterWidth:c,dilationDepth:h,dilationHeight:m,dilationWidth:f,padInfo:g}=u,y=g.front,b=g.left,x=g.top,v=new jt(u.outShape,r.dtype),w=n.data.get(r.dataId).values,T=n.data.get(s.dataId).values,C=v.values,E=k.computeStrides(r.shape),$=k.computeStrides(s.shape);for(let P=0;P<u.batchSize;++P){let F=P*E[0],S=P*v.strides[0];for(let M=0;M<u.outDepth;++M){let B=S+M*v.strides[1],j=M*u.strideDepth-y;for(let q=0;q<p;++q){let K=j+q*h;if(K<0||K>=u.inDepth)continue;let Q=q*$[0],ee=F+K*E[1];for(let re=0;re<u.outHeight;++re){let Z=B+re*v.strides[2],ie=re*u.strideHeight-x;for(let ae=0;ae<d;++ae){let le=ie+ae*m;if(le<0||le>=u.inHeight)continue;let ue=Q+ae*$[1],we=ee+le*E[2];for(let ye=0;ye<u.outWidth;++ye){let Ie=Z+ye*u.outChannels,Ee=ye*u.strideWidth-b;for(let $e=0;$e<c;++$e){let We=Ee+$e*f;if(We<0||We>=u.inWidth)continue;let je=ue+$e*$[2],st=we+We*u.inChannels,nt=je;for(let at=0;at<u.inChannels;++at){let Te=w[st+at];for(let gt=0;gt<u.outChannels;++gt)C[Ie+gt]+=Te*T[nt+gt];nt+=u.outChannels}}}}}}}}return n.makeTensorInfo(v.shape,v.dtype,v.values)}var lq={kernelName:fc,backendName:"cpu",kernelFunc:oq};function uq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=a;xe([r,s],"conv3dBackpropFilterV2");let u=k.computeStrides(r.shape),p=k.computeStrides(s.shape),d=_.computeConv3DInfo(r.shape,l,i,1,o),c=d.strideDepth,h=d.strideHeight,m=d.strideWidth,f=d.filterDepth,g=d.filterHeight,y=d.filterWidth,b=new jt(d.filterShape,"float32"),x=b.values,[v,w,T,C]=b.strides,E=n.data.get(s.dataId).values,[$,P,F,S]=p,M=n.data.get(r.dataId).values,[B,j,q,K]=u,Q=d.padInfo.front,ee=d.padInfo.left,re=d.padInfo.top;for(let Z=0;Z<f;++Z){let ie=Math.max(0,Math.ceil((Q-Z)/c)),ae=Math.min(d.outDepth,(d.inDepth+Q-Z)/c),le=Z*v;for(let ue=0;ue<g;++ue){let we=Math.max(0,Math.ceil((re-ue)/h)),ye=Math.min(d.outHeight,(d.inHeight+re-ue)/h),Ie=ue*w+le;for(let Ee=0;Ee<y;++Ee){let $e=Math.max(0,Math.ceil((ee-Ee)/m)),We=Math.min(d.outWidth,(d.inWidth+ee-Ee)/m),je=Ee*T+Ie;for(let st=0;st<d.inChannels;++st){let nt=st*C+je;for(let at=0;at<d.outChannels;++at){let Te=0;for(let gt=0;gt<d.batchSize;++gt){let ct=gt*B,bn=gt*$;for(let Yt=ie;Yt<ae;++Yt){let Dn=(Z+Yt*c-Q)*j+ct,Ut=Yt*P+bn;for(let Jt=we;Jt<ye;++Jt){let Da=(ue+Jt*h-re)*q+Dn,Rn=Jt*F+Ut;for(let Gt=$e;Gt<We;++Gt){let ia=(Ee+Gt*m-ee)*K+Da,oa=Gt*S+Rn;Te+=M[ia+st]*E[oa+at]}}}}x[nt+at]=Te}}}}}return n.makeTensorInfo(b.shape,b.dtype,b.values)}var pq={kernelName:xm,backendName:"cpu",kernelFunc:uq};function cq(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=a;xe([r],"conv3dBackpropInputV2");let u=k.computeStrides(r.shape),p=k.computeStrides(s.shape),d=_.computeConv3DInfo(l,s.shape,o,1,i),c=new jt(d.inShape,"float32"),h=c.values,[m,f,g,y]=c.strides,b=n.data.get(r.dataId).values,[x,v,w,T]=u,C=n.data.get(s.dataId).values,[E,$,P,F]=p,{batchSize:S,filterDepth:M,filterHeight:B,filterWidth:j,inChannels:q,inDepth:K,inHeight:Q,inWidth:ee,outChannels:re,outDepth:Z,outHeight:ie,outWidth:ae,strideDepth:le,strideHeight:ue,strideWidth:we}=d,ye=M-1-d.padInfo.front,Ie=B-1-d.padInfo.top,Ee=j-1-d.padInfo.left;for(let $e=0;$e<S;++$e)for(let We=0;We<q;++We)for(let je=0;je<K;++je){let st=je-ye,nt=Math.max(0,Math.ceil(st/le)),at=Math.min(Z,(M+st)/le);for(let Te=0;Te<Q;++Te){let gt=Te-Ie,ct=Math.max(0,Math.ceil(gt/ue)),bn=Math.min(ie,(B+gt)/ue);for(let Yt=0;Yt<ee;++Yt){let Dn=Yt-Ee,Ut=Math.max(0,Math.ceil(Dn/we)),Jt=Math.min(ae,(j+Dn)/we),Da=0;for(let Rn=nt;Rn<at;++Rn){let Gt=Rn*le-st;for(let ia=ct;ia<bn;++ia){let oa=ia*ue-gt;for(let Hr=Ut;Hr<Jt;++Hr){let Rs=Hr*we-Dn,$d=x*$e+v*Rn+w*ia+T*Hr,jr=E*(M-1-Gt)+$*(B-1-oa)+P*(j-1-Rs)+F*We;for(let kr=0;kr<re;++kr){let bp=b[$d+kr],Xo=C[jr+kr];Da+=bp*Xo}}}}h[m*$e+f*je+g*Te+y*Yt+We]=Da}}}return n.makeTensorInfo(c.shape,c.dtype,c.values)}var dq={kernelName:vm,backendName:"cpu",kernelFunc:cq},hq=ot(_i,e=>Math.cos(e)),mq={kernelName:_i,backendName:"cpu",kernelFunc:hq},fq=ot(Ei,e=>Math.cosh(e)),gq={kernelName:Ei,backendName:"cpu",kernelFunc:fq};function yq(e){let{inputs:t,backend:n,attrs:a}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=a,[p,d,c,h]=r.shape,m=s.shape[0],[f,g]=o,y=He([m,f,g,h],"float32"),b=n.data.get(s.dataId).values,x=n.data.get(i.dataId).values,v=n.data.get(r.dataId).values,w=k.computeStrides(r.shape),T=k.computeStrides(y.shape);for(let C=0;C<m;C++){let E=C*4,$=b[E],P=b[E+1],F=b[E+2],S=b[E+3],M=x[C];if(M>=p)continue;let B=f>1?(F-$)*(d-1)/(f-1):0,j=g>1?(S-P)*(c-1)/(g-1):0;for(let q=0;q<f;q++){let K=f>1?$*(d-1)+q*B:.5*($+F)*(d-1);if(K<0||K>d-1){for(let Q=0;Q<g;Q++)for(let ee=0;ee<h;ee++){let re=ee+Q*T[2]+q*T[1]+C*T[0];y.values[re]=u}continue}if(l==="bilinear"){let Q=Math.floor(K),ee=Math.ceil(K),re=K-Q;for(let Z=0;Z<g;Z++){let ie=g>1?P*(c-1)+Z*j:.5*(P+S)*(c-1);if(ie<0||ie>c-1){for(let we=0;we<h;we++){let ye=we+Z*T[2]+q*T[1]+C*T[0];y.values[ye]=u}continue}let ae=Math.floor(ie),le=Math.ceil(ie),ue=ie-ae;for(let we=0;we<h;we++){let ye=we+ae*w[2]+Q*w[1]+M*w[0],Ie=v[ye];ye=we+le*w[2]+Q*w[1]+M*w[0];let Ee=v[ye];ye=we+ae*w[2]+ee*w[1]+M*w[0];let $e=v[ye];ye=we+le*w[2]+ee*w[1]+M*w[0];let We=v[ye],je=Ie+(Ee-Ie)*ue,st=$e+(We-$e)*ue;ye=we+Z*T[2]+q*T[1]+C*T[0],y.values[ye]=je+(st-je)*re}}}else for(let Q=0;Q<g;++Q){let ee=g>1?P*(c-1)+Q*j:.5*(P+S)*(c-1);if(ee<0||ee>c-1){for(let ie=0;ie<h;ie++){let ae=ie+Q*T[2]+q*T[1]+C*T[0];y.values[ae]=u}continue}let re=Math.round(ee),Z=Math.round(K);for(let ie=0;ie<h;ie++){let ae=ie+re*w[2]+Z*w[1]+M*w[0],le=ie+Q*T[2]+q*T[1]+C*T[0];y.values[le]=v[ae]}}}}return n.makeTensorInfo(y.shape,y.dtype,y.values)}var bq={kernelName:jl,backendName:"cpu",kernelFunc:yq};function xq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;xe(r,"cumprod");let l=_.getAxesPermutation([s],r.shape.length),u=r;l!=null&&(u=Vn({inputs:{x:r},backend:n,attrs:{perm:l}}));let p=_.getInnerMostAxes(1,r.shape.length)[0];if(p!==u.shape.length-1)throw new Error(`backend.cumprod in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${p}`);let d=fa(u.dtype,"int32"),c=k.makeOnesTypedArray(k.sizeFromShape(u.shape),d),h=n.data.get(u.dataId).values,m=u.shape[u.shape.length-1],f=o?(y,b)=>y+m-b-1:(y,b)=>y+b;for(let y=0;y<h.length;y+=m)for(let b=0;b<m;b++){let x=f(y,b);if(b===0)c[x]=i?1:h[x];else{let v=f(y,b-1);c[x]=i?h[v]*c[v]:h[x]*c[v]}}let g=n.makeTensorInfo(u.shape,d,c);if(l!=null){let y=_.getUndoAxesPermutation(l),b=Vn({inputs:{x:g},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),b}return g}var vq={kernelName:Hl,backendName:"cpu",kernelFunc:xq};function wq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a;xe(r,"cumsum");let l=_.getAxesPermutation([s],r.shape.length),u=r;l!=null&&(u=Vn({inputs:{x:r},backend:n,attrs:{perm:l}}));let p=_.getInnerMostAxes(1,r.shape.length)[0];if(p!==u.shape.length-1)throw new Error(`backend.cumsum in CPU expects an inner-most axis=${u.shape.length-1} but got axis=${p}`);let d=fa(u.dtype,"int32"),c=k.makeZerosTypedArray(k.sizeFromShape(u.shape),d),h=n.data.get(u.dataId).values,m=u.shape[u.shape.length-1],f=o?(y,b)=>y+m-b-1:(y,b)=>y+b;for(let y=0;y<h.length;y+=m)for(let b=0;b<m;b++){let x=f(y,b);if(b===0)c[x]=i?0:h[x];else{let v=f(y,b-1);c[x]=i?h[v]+c[v]:h[x]+c[v]}}let g=n.makeTensorInfo(u.shape,d,c);if(l!=null){let y=_.getUndoAxesPermutation(l),b=Vn({inputs:{x:g},backend:n,attrs:{perm:y}});return n.disposeIntermediateTensorInfo(g),n.disposeIntermediateTensorInfo(u),b}return g}var kq={kernelName:Ai,backendName:"cpu",kernelFunc:wq};function Iq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=a;if(r.shape.length===1){let l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=d0(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=n.bufferSync(r),u=n.bufferSync(s),p=ST(l,u,i,o);return n.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var Sq={kernelName:wm,backendName:"cpu",kernelFunc:Iq};function Nq(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockSize:s,dataFormat:i}=a;k.assert(i==="NHWC",()=>`Only NHWC dataFormat supported on CPU for depthToSpace. Got ${i}`);let o=r.shape[0],l=r.shape[1],u=r.shape[2],p=r.shape[3],d=l*s,c=u*s,h=p/(s*s),m=n.data.get(r.dataId).values,f=new Float32Array(o*d*c*h),g=0;for(let y=0;y<o;++y)for(let b=0;b<d;++b){let x=Math.floor(b/s),v=b%s;for(let w=0;w<c;++w){let T=Math.floor(w/s),C=w%s,E=(v*s+C)*h;for(let $=0;$<h;++$){let P=$+E+p*(T+u*(x+l*y));f[g++]=m[P]}}}return n.makeTensorInfo([o,d,c,h],r.dtype,f)}var Tq={kernelName:ql,backendName:"cpu",kernelFunc:Nq};function fC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=a;xe([r,s],"depthwiseConv2DNative");let p=k.computeStrides(r.shape),d=k.computeStrides(s.shape),c=l;c==null&&(c=[1,1]),k.assert(_.eitherStridesOrDilationsAreOne(i,c),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${c}'`);let h=_.computeConv2DInfo(r.shape,s.shape,i,c,o,u,!0),{filterHeight:m,filterWidth:f,dilationHeight:g,dilationWidth:y,padInfo:b}=h,x=b.left,v=b.top,w=h.outChannels/h.inChannels,T=new jt(h.outShape,r.dtype),C=n.data.get(r.dataId).values,E=n.data.get(s.dataId).values,$=T.values;for(let P=0;P<h.batchSize;++P){let F=P*p[0],S=P*T.strides[0];for(let M=0;M<h.outHeight;++M){let B=S+M*T.strides[1],j=M*h.strideHeight-v;for(let q=0;q<m;++q){let K=j+q*g;if(K<0||K>=h.inHeight)continue;let Q=q*d[0],ee=F+K*p[1];for(let re=0;re<h.outWidth;++re){let Z=B+re*T.strides[2],ie=re*h.strideWidth-x;for(let ae=0;ae<f;++ae){let le=ie+ae*y;if(le<0||le>=h.inWidth)continue;let ue=Q+ae*d[1],we=ee+le*h.inChannels,ye=Z,Ie=ue;for(let Ee=0;Ee<h.inChannels;++Ee){let $e=C[we+Ee];for(let We=0;We<w;++We)$[ye+We]+=$e*E[Ie+We];ye+=w,Ie+=w}}}}}}return n.makeTensorInfo(T.shape,T.dtype,T.values)}var Cq={kernelName:$i,backendName:"cpu",kernelFunc:fC};function _q(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=a;xe([r,s],"depthwiseConv2dNativeBackpropFilter");let d=_.computeConv2DInfo(r.shape,p,i,o,l,u,!0),{strideHeight:c,strideWidth:h,filterHeight:m,filterWidth:f}=d,g=new jt(d.filterShape,"float32"),y=d.padInfo.left,b=d.padInfo.top,x=d.outChannels/d.inChannels,v=n.data.get(r.dataId).values,w=new jt(r.shape,r.dtype,v),T=n.data.get(s.dataId).values,C=new jt(s.shape,s.dtype,T);for(let E=0;E<m;++E){let $=Math.max(0,Math.ceil((b-E)/c)),P=Math.min(d.outHeight,(d.inHeight+b-E)/c);for(let F=0;F<f;++F){let S=Math.max(0,Math.ceil((y-F)/h)),M=Math.min(d.outWidth,(d.inWidth+y-F)/h);for(let B=0;B<d.outChannels;++B){let j=Math.trunc(B/x),q=B%x,K=0;for(let Q=0;Q<d.batchSize;++Q)for(let ee=$;ee<P;++ee){let re=E+ee*c-b;for(let Z=S;Z<M;++Z){let ie=F+Z*h-y;K+=w.get(Q,re,ie,j)*C.get(Q,ee,Z,B)}}g.set(K,E,F,j,q)}}}return n.makeTensorInfo(g.shape,g.dtype,g.values)}var Eq={kernelName:km,backendName:"cpu",kernelFunc:_q};function Aq(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=a;xe([r,s],"depthwiseConv2DNativeBackpropInput");let d=k.computeStrides(r.shape),c=k.computeStrides(s.shape),h=_.computeConv2DInfo(p,s.shape,i,o,l,u,!0),m=new jt(h.inShape,"float32"),f=m.values,[g,y,b]=m.strides,x=n.data.get(r.dataId).values,[v,w,T]=d,C=n.data.get(s.dataId).values,[E,$,P]=c,{batchSize:F,filterHeight:S,filterWidth:M,inChannels:B,inHeight:j,inWidth:q,outChannels:K,outHeight:Q,outWidth:ee,strideHeight:re,strideWidth:Z}=h,ie=S-1-h.padInfo.top,ae=M-1-h.padInfo.left,le=K/B;for(let ue=0;ue<F;++ue)for(let we=0;we<B;++we)for(let ye=0;ye<j;++ye){let Ie=ye-ie,Ee=Math.max(0,Math.ceil(Ie/re)),$e=Math.min(Q,(S+Ie)/re);for(let We=0;We<q;++We){let je=We-ae,st=Math.max(0,Math.ceil(je/Z)),nt=Math.min(ee,(M+je)/Z),at=0;for(let Te=Ee;Te<$e;++Te){let gt=Te*re-Ie;for(let ct=st;ct<nt;++ct){let bn=ct*Z-je,Yt=v*ue+w*Te+T*ct,Dn=E*(S-1-gt)+$*(M-1-bn)+P*we;for(let Ut=0;Ut<le;++Ut){let Jt=we*le+Ut,Da=x[Yt+Jt],Rn=C[Dn+Ut];at+=Da*Rn}}}f[g*ue+y*ye+b*We+we]=at}}return n.makeTensorInfo(m.shape,m.dtype,m.values)}var $q={kernelName:Im,backendName:"cpu",kernelFunc:Aq};function Fq(e){let{inputs:t,backend:n}=e,{x:a}=t,r=k.sizeFromShape(a.shape),s=n.data.get(a.dataId).values,i=He([r,r],a.dtype),o=i.values;for(let u=0;u<s.length;u++)o[u*r+u]=s[u];let l=[...a.shape,...a.shape];return n.makeTensorInfo(l,i.dtype,i.values)}var Dq={kernelName:Sm,backendName:"cpu",kernelFunc:Fq},Rq={kernelName:gc,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r}=e,{strides:s,pad:i,dilations:o}=n,l=t,u=l.data.get(a.dataId).values,p=a.shape.length,d=l.data.get(r.dataId).values,c=r.shape.length,{batchSize:h,inHeight:m,inWidth:f,inChannels:g,outHeight:y,outWidth:b,padInfo:x,strideHeight:v,strideWidth:w,filterHeight:T,filterWidth:C,dilationHeight:E,dilationWidth:$,outShape:P}=_.computeDilation2DInfo(a.shape,r.shape,s,i,"NHWC",o),F=k.sizeFromShape(P),S=P.length,M=k.getArrayFromDType(a.dtype,F);for(let B=0;B<h;++B)for(let j=0;j<y;++j){let q=j*v-x.top;for(let K=0;K<b;++K){let Q=K*w-x.left;for(let ee=0;ee<g;++ee){let re=Number.MIN_SAFE_INTEGER;for(let ie=0;ie<T;++ie){let ae=q+ie*E;if(ae>=0&&ae<m)for(let le=0;le<C;++le){let ue=Q+le*$;if(ue>=0&&ue<f){let we=k.locToIndex([B,ae,ue,ee],p,k.computeStrides(a.shape)),ye=k.locToIndex([ie,le,ee],c,k.computeStrides(r.shape)),Ie=u[we]+d[ye];Ie>re&&(re=Ie)}}}let Z=k.locToIndex([B,j,K,ee],S,k.computeStrides(P));M[Z]=re}}}return{dataId:l.write(k.toTypedArray(M,a.dtype),P,a.dtype),shape:P,dtype:a.dtype}}},Mq={kernelName:zh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,p=k.toNestedArray(a.shape,u.data.get(a.dataId).values),d=k.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:c,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:v,filterHeight:w,filterWidth:T,dilationHeight:C,dilationWidth:E,outShape:$}=_.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);k.assert(s.rank===$.length,()=>`Error in ${zh}, dy must have the same rank as output ${$.length}, but got ${s.rank}`);let P=k.toNestedArray($,u.data.get(s.dataId).values),F=k.makeZerosNestedTypedArray(r.shape,r.dtype);for(let S=0;S<c;++S)for(let M=0;M<g;++M){let B=M*x-b.top;for(let j=0;j<y;++j){let q=j*v-b.left;for(let K=0;K<f;++K){let Q=Number.MIN_SAFE_INTEGER,ee=0,re=0;for(let Z=0;Z<w;++Z){let ie=B+Z*C;if(ie>=0&&ie<h)for(let ae=0;ae<T;++ae){let le=q+ae*E;if(le>=0&&le<m){let ue=p[S][ie][le][K]+d[Z][ae][K];ue>Q&&(Q=ue,ee=Z,re=ae)}}}F[ee][re][K]+=P[S][M][j][K]}}}return{dataId:u.write(k.toTypedArray(F,a.dtype),r.shape,r.dtype),shape:r.shape,dtype:r.dtype}}},Pq={kernelName:Lh,backendName:"cpu",kernelFunc:({inputs:e,backend:t,attrs:n})=>{let{x:a,filter:r,dy:s}=e,{strides:i,pad:o,dilations:l}=n,u=t,p=k.toNestedArray(a.shape,u.data.get(a.dataId).values),d=k.toNestedArray(r.shape,u.data.get(r.dataId).values),{batchSize:c,inHeight:h,inWidth:m,inChannels:f,outHeight:g,outWidth:y,padInfo:b,strideHeight:x,strideWidth:v,filterHeight:w,filterWidth:T,dilationHeight:C,dilationWidth:E,outShape:$}=_.computeDilation2DInfo(a.shape,r.shape,i,o,"NHWC",l);k.assert(s.rank===$.length,()=>`Error in ${Lh}, dy must have the same rank as output ${$.length}, but got ${s.rank}`);let P=k.toNestedArray($,u.data.get(s.dataId).values),F=k.makeZerosNestedTypedArray(a.shape,a.dtype);for(let S=0;S<c;++S)for(let M=0;M<g;++M){let B=M*x-b.top;for(let j=0;j<y;++j){let q=j*v-b.left;for(let K=0;K<f;++K){let Q=Number.MIN_SAFE_INTEGER,ee=B<0?0:B,re=q<0?0:q;for(let Z=0;Z<w;++Z){let ie=B+Z*C;if(ie>=0&&ie<h)for(let ae=0;ae<T;++ae){let le=q+ae*E;if(le>=0&&le<m){let ue=p[S][ie][le][K]+d[Z][ae][K];ue>Q&&(Q=ue,ee=ie,re=le)}}}F[S][ee][re][K]+=P[S][M][j][K]}}}return{dataId:u.write(k.toTypedArray(F,a.dtype),a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}};function rd(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"sum");let o;r.dtype==="bool"?o=ms({inputs:{x:r},backend:n,attrs:{dtype:"int32"}}):o=hr({inputs:{x:r},backend:n});let l=o.shape.length,u=k.parseAxisParam(s,o.shape),p=_.getAxesPermutation(u,l),d=u,c=o;p!=null&&(c=Vn({inputs:{x:o},backend:n,attrs:{perm:p}}),d=_.getInnerMostAxes(d.length,l)),_.assertAxesAreInnerMostDims("sum",d,c.shape.length);let[h,m]=_.computeOutAndReduceShapes(c.shape,d),f=_.upcastType(c.dtype,"int32"),g=am(n,h,f),y=k.sizeFromShape(m),b=n.data.get(g.dataId).values,x=n.data.get(c.dataId).values;for(let v=0;v<b.length;++v){let w=v*y,T=0;for(let C=0;C<y;++C)T+=x[w+C];b[v]=T}if(i){let v=_.expandShapeToKeepDim(g.shape,u),w=g;g=Tt({inputs:{x:g},backend:n,attrs:{shape:v}}),n.disposeIntermediateTensorInfo(w)}return n.disposeIntermediateTensorInfo(o),p!=null&&n.disposeIntermediateTensorInfo(c),g}var Oq={kernelName:uo,backendName:"cpu",kernelFunc:rd};function Lq(e){let{inputs:t,backend:n,attrs:a}=e,{equation:r}=a,s=t,{allDims:i,summedDims:o,idDims:l}=_.decodeEinsumEquation(r,s.length);_.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=_.getEinsumComputePath(o,l),d=p.length,c=null,h=i.length,m=[];for(let f=0;f<d;++f){for(let g of p[f]){let{permutationIndices:y,expandDims:b}=_.getEinsumPermutation(h,l[g]),x;_.isIdentityPermutation(y)?x=s[g]:(x=Vn({inputs:{x:s[g]},backend:n,attrs:{perm:y}}),m.push(x));let v=x.shape.slice();for(let w=0;w<b.length;++w)v.splice(b[w],0,1);k.arraysEqual(x.shape,v)||(x=Tt({inputs:{x},backend:n,attrs:{shape:v}}),m.push(x)),c===null?c=x:(c=Xf({inputs:{a:x,b:c},backend:n}),m.push(c))}f<d-1&&(u[f]>=0&&(c=rd({inputs:{x:c},backend:n,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(c)),h--)}for(let f of m)f!==c&&n.disposeIntermediateTensorInfo(f);return c}var zq={kernelName:Nm,backendName:"cpu",kernelFunc:Lq};function Wq(e){let{inputs:t,backend:n}=e,{dy:a,y:r}=t;xe([a,r],"eluGrad");let s=new Float32Array(k.sizeFromShape(r.shape)),i=n.data.get(r.dataId).values,o=n.data.get(a.dataId).values;for(let l=0;l<i.length;++l){let u=i[l];u>=1?s[l]=o[l]:s[l]=o[l]*(u+1)}return n.makeTensorInfo(r.shape,"float32",s)}var Bq={kernelName:Tm,backendName:"cpu",kernelFunc:Wq},Vq=_.ERF_P,Uq=_.ERF_A1,Gq=_.ERF_A2,Hq=_.ERF_A3,jq=_.ERF_A4,qq=_.ERF_A5,Kq=ot(Kl,e=>{let t=Math.sign(e),n=Math.abs(e),a=1/(1+Vq*n);return t*(1-((((qq*a+jq)*a+Hq)*a+Gq)*a+Uq)*a*Math.exp(-n*n))}),Xq={kernelName:Kl,backendName:"cpu",kernelFunc:Kq};function sm(e){let{inputs:t,backend:n,attrs:a}=e,{input:r}=t,{dim:s}=a,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Tt({inputs:{x:r},backend:n,attrs:{shape:o}})}var Yq={kernelName:Yl,backendName:"cpu",kernelFunc:sm},Jq=Vt((e,t)=>e/t),w0=rn(Fi,Jq),lx={kernelName:Fi,backendName:"cpu",kernelFunc:w0};function gC(e,t,n){let a=e.shape,r=a[0],s=a[1],i=n.data.get(e.dataId),o=i.complexTensorInfos.real,l=i.complexTensorInfos.imag,u=[r,s],p=k.sizeFromShape(u),d=k.getTypedArrayFromDType("float32",p),c=k.getTypedArrayFromDType("float32",p);for(let g=0;g<r;g++){let y=mi({inputs:{x:o},backend:n,attrs:{begin:[g,0],size:[1,s]}}),b=mi({inputs:{x:l},backend:n,attrs:{begin:[g,0],size:[1,s]}}),x=Jn({inputs:{real:y,imag:b},backend:n}),{real:v,imag:w}=Zq(x,t,n),T=_.mergeRealAndImagArrays(v,w);for(let C=0;C<s;C++){let E=_.getComplexWithIndex(T,C);d[g*s+C]=E.real,c[g*s+C]=E.imag}n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(b),n.disposeIntermediateTensorInfo(x)}let h=n.makeTensorInfo(u,"float32",d),m=n.makeTensorInfo(u,"float32",c),f=Jn({inputs:{real:h,imag:m},backend:n});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),f}function Zq(e,t,n){let a=k.sizeFromShape(e.shape),r=n.data.get(e.dataId),s=n.data.get(r.complexTensorInfos.real.dataId).values,i=n.data.get(r.complexTensorInfos.imag.dataId).values;if(Qq(a)){let o=ux(s,i,a,t,n),l=[e.shape[0],e.shape[1]];if(t){let u=n.makeTensorInfo(l,"float32",o.real),p=n.makeTensorInfo(l,"float32",o.imag),d=n.makeTensorInfo([],"float32",k.createScalarValue(a,"float32")),c=hr({inputs:{x:d},backend:n}),h=lx.kernelFunc({inputs:{a:u,b:d},backend:n}),m=lx.kernelFunc({inputs:{a:p,b:c},backend:n}),f=n.data.get(h.dataId).values,g=n.data.get(m.dataId).values;return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),{real:f,imag:g}}return o}else{let o=_.mergeRealAndImagArrays(s,i),l=e8(o,a,t);return _.splitRealAndImagArrays(l)}}function Qq(e){return(e&e-1)===0}function ux(e,t,n,a,r){if(n===1)return{real:e,imag:t};let s=_.mergeRealAndImagArrays(e,t),i=n/2,o=_.complexWithEvenIndex(s),l=o.real,u=o.imag,p=[l.length],d=r.makeTensorInfo(p,"float32",l),c=r.makeTensorInfo(p,"float32",u),h=Jn({inputs:{real:d,imag:c},backend:r}),m=_.complexWithOddIndex(s),f=m.real,g=m.imag,y=[f.length],b=r.makeTensorInfo(y,"float32",f),x=r.makeTensorInfo(y,"float32",g),v=Jn({inputs:{real:b,imag:x},backend:r}),w=ux(l,u,i,a,r),T=w.real,C=w.imag,E=[T.length],$=r.makeTensorInfo(E,"float32",T),P=r.makeTensorInfo(E,"float32",C),F=Jn({inputs:{real:$,imag:P},backend:r}),S=ux(f,g,i,a,r),M=S.real,B=S.imag,j=[M.length],q=r.makeTensorInfo(j,"float32",M),K=r.makeTensorInfo(j,"float32",B),Q=Jn({inputs:{real:q,imag:K},backend:r}),ee=_.exponents(n,a),re=[ee.real.length],Z=r.makeTensorInfo(re,"float32",ee.real),ie=r.makeTensorInfo(re,"float32",ee.imag),ae=Jn({inputs:{real:Z,imag:ie},backend:r}),le=Xf({inputs:{a:ae,b:Q},backend:r}),ue=ad({inputs:{a:F,b:le},backend:r}),we=b0({inputs:{a:F,b:le},backend:r}),ye=hi({inputs:{input:ue},backend:r}),Ie=hi({inputs:{input:we},backend:r}),Ee=El({inputs:{input:ue},backend:r}),$e=El({inputs:{input:we},backend:r}),We=Al({inputs:[ye,Ie],backend:r,attrs:{axis:0}}),je=Al({inputs:[Ee,$e],backend:r,attrs:{axis:0}}),st=r.data.get(We.dataId).values,nt=r.data.get(je.dataId).values;return r.disposeIntermediateTensorInfo(d),r.disposeIntermediateTensorInfo(c),r.disposeIntermediateTensorInfo(h),r.disposeIntermediateTensorInfo(b),r.disposeIntermediateTensorInfo(x),r.disposeIntermediateTensorInfo(v),r.disposeIntermediateTensorInfo($),r.disposeIntermediateTensorInfo(P),r.disposeIntermediateTensorInfo(F),r.disposeIntermediateTensorInfo(q),r.disposeIntermediateTensorInfo(K),r.disposeIntermediateTensorInfo(Q),r.disposeIntermediateTensorInfo(Z),r.disposeIntermediateTensorInfo(ie),r.disposeIntermediateTensorInfo(ae),r.disposeIntermediateTensorInfo(le),r.disposeIntermediateTensorInfo(ue),r.disposeIntermediateTensorInfo(we),r.disposeIntermediateTensorInfo(ye),r.disposeIntermediateTensorInfo(Ee),r.disposeIntermediateTensorInfo(Ie),r.disposeIntermediateTensorInfo($e),r.disposeIntermediateTensorInfo(We),r.disposeIntermediateTensorInfo(je),{real:st,imag:nt}}function e8(e,t,n){let a=new Float32Array(t*2);for(let r=0;r<t;r++){let s=0,i=0;for(let o=0;o<t;o++){let l=_.exponent(r*o,t,n),u=_.getComplexWithIndex(e,o);s+=u.real*l.real-u.imag*l.imag,i+=u.real*l.imag+u.imag*l.real}n&&(s/=t,i/=t),_.assignToTypedArray(a,s,i,r)}return a}function t8(e){let{inputs:t,backend:n}=e,{input:a}=t,r=k.sizeFromShape(a.shape),s=a.shape[a.shape.length-1],i=r/s,o=Tt({inputs:{x:a},backend:n,attrs:{shape:[i,s]}}),l=gC(o,!1,n),u=Tt({inputs:{x:l},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var n8={kernelName:Cm,backendName:"cpu",kernelFunc:t8};function k0(e){let{backend:t,attrs:n}=e,{shape:a,value:r,dtype:s}=n,i=s||k.inferDtype(r),o=k.getArrayFromDType(i,k.sizeFromShape(a));return r8(o,r,i),t.makeTensorInfo(a,i,o)}var a8={kernelName:yc,backendName:"cpu",kernelFunc:k0};function r8(e,t,n){e.fill(t)}var s8={kernelName:Zl,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,r=n,s=k.getTypedArrayFromDType(a.dtype,k.sizeFromShape(a.shape)),[i,o,l,u]=a.shape,p=r.data.get(a.dataId).values;for(let d=0;d<i;d++){let c=d*l*o*u;for(let h=0;h<o;h++){let m=h*(l*u);for(let f=0;f<l;f++){let g=f*u;for(let y=0;y<u;y++){let b=Math.round(l-f-1),x=c+m+g+y,v=p[x];if(b>=0&&b<l){let w=b*u,T=c+m+w+y;v=p[T]}s[x]=v}}}}return{dataId:r.write(s,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},i8=Vt((e,t)=>Math.floor(e/t)),o8=rn(Pi,i8,null,"int32"),l8={kernelName:Pi,backendName:"cpu",kernelFunc:o8};function u8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=mC({inputs:{x:r,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c}});if(i){let g=f;f=ad({inputs:{a:f,b:i},backend:n}),n.disposeIntermediateTensorInfo(g)}if(h){let g=f;f=x0(n,f,h,o,m),n.disposeIntermediateTensorInfo(g)}return f}var p8={kernelName:ai,backendName:"cpu",kernelFunc:u8};function c8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=fC({inputs:{x:r,filter:s},backend:n,attrs:{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c}});if(i){let g=f;f=ad({inputs:{a:f,b:i},backend:n}),n.disposeIntermediateTensorInfo(g)}if(h){let g=f;f=x0(n,f,h,o,m),n.disposeIntermediateTensorInfo(g)}return f}var d8={kernelName:ri,backendName:"cpu",kernelFunc:c8};function h8(e){let{inputs:t,backend:n}=e,{params:a,indices:r}=t,s=k.sizeFromShape(a.shape),i=r.shape,o=i[i.length-1],[l,u,p,d]=_.prepareAndValidate(a,r);if(u===0)return n.makeTensorInfo(l,a.dtype,[]);let c=n.data.get(r.dataId).values,h=n.bufferSync(a),m=FT(c,h,a.dtype,u,o,p,d,a.shape,s);return n.makeTensorInfo(l,a.dtype,m.values)}var m8={kernelName:eu,backendName:"cpu",kernelFunc:h8};function f8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=a;xe([r,s],"gatherV2");let l=k.parseAxisParam(i,r.shape)[0],u=n.data.get(s.dataId).values,p=r.shape[l];for(let v=0;v<u.length;++v){let w=u[v];k.assert(w<=p-1&&w>=0,()=>`GatherV2: the index value ${w} is not in [0, ${p-1}]`)}let d=o;o==null&&(d=0);let c=k.sizeFromShape(s.shape),h=_.segment_util.collectGatherOpShapeInfo(r,s,l,d),m=Tt({inputs:{x:r},backend:n,attrs:{shape:[h.batchSize,h.outerSize,h.dimSize,h.sliceSize]}}),f=Tt({inputs:{x:s},backend:n,attrs:{shape:[h.batchSize,c/h.batchSize]}}),g=[h.batchSize,h.outerSize,c/h.batchSize,h.sliceSize],y=n.bufferSync(f),b=n.bufferSync(m),x=DT(b,y,g);return n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),n.makeTensorInfo(h.outputShape,x.dtype,x.values)}var g8={kernelName:Ql,backendName:"cpu",kernelFunc:f8};function y8(e){let{inputs:t,backend:n}=e,{input:a}=t,r=k.sizeFromShape(a.shape),s=a.shape[a.shape.length-1],i=r/s,o=Tt({inputs:{x:a},backend:n,attrs:{shape:[i,s]}}),l=gC(o,!0,n),u=Tt({inputs:{x:l},backend:n,attrs:{shape:a.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(l),u}var b8={kernelName:_m,backendName:"cpu",kernelFunc:y8},x8=ot(nu,e=>Number.isFinite(e)?1:0,"bool"),v8={kernelName:nu,backendName:"cpu",kernelFunc:x8},w8=ot(au,e=>Math.abs(e)===1/0?1:0,"bool"),k8={kernelName:au,backendName:"cpu",kernelFunc:w8},I8=ot(ru,e=>Number.isNaN(e)?1:0,"bool"),S8={kernelName:ru,backendName:"cpu",kernelFunc:I8};function N8(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=LT(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var T8={kernelName:Am,backendName:"cpu",kernelFunc:N8},C8=ot(ou,e=>Math.log1p(e)),_8={kernelName:ou,backendName:"cpu",kernelFunc:C8},E8=Vt((e,t)=>e&&t),A8=rn(lu,E8,null,"bool"),$8={kernelName:lu,backendName:"cpu",kernelFunc:A8},F8=ot(bc,e=>e?0:1,"bool"),D8={kernelName:bc,backendName:"cpu",kernelFunc:F8},R8=Vt((e,t)=>e||t),M8=rn(xc,R8,null,"bool"),P8={kernelName:xc,backendName:"cpu",kernelFunc:M8};function O8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a;xe(r,"LRN");let u=r.shape[3],p=u-1,d=n.data.get(r.dataId).values,c=k.sizeFromShape(r.shape),h=new Float32Array(c);function m(f){let g=f%u,y=f-g+Math.max(0,g-s),b=f-g+Math.min(g+s,p),x=0;for(;y<=b;y++){let v=d[y];x+=v*v}return x}for(let f=0;f<c;f++){let g=m(f),y=d[f]*Math.pow(i+o*g,-l);h[f]=y}return n.makeTensorInfo(r.shape,r.dtype,h)}var L8={kernelName:vc,backendName:"cpu",kernelFunc:O8};function z8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=a;xe(i,"LRNGrad");let d=k.sizeFromShape(i.shape),c=i.shape[3],h=n.data.get(i.dataId).values,m=n.data.get(r.dataId).values,f=n.data.get(s.dataId).values,g=new Float32Array(d),y=d;for(let b=0;b<y;b++){let x=b%c,v=b-x+Math.max(0,x-o),w=b-x+Math.min(c,x+o+1),T=0;for(let C=v;C<w;C++)T+=Math.pow(m[C],2);T=u*T+l;for(let C=v;C<w;C++){let E=-2*u*p*m[C]*f[b]/T;b===C&&(E+=Math.pow(T,-p)),E*=h[b],g[C]+=E}}return n.makeTensorInfo(i.shape,r.dtype,g)}var W8={kernelName:$m,backendName:"cpu",kernelFunc:z8};function yC(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=a,o=n,l=r.shape,u=l.length,p=k.parseAxisParam(s,l),d=p,c=_.getAxesPermutation(d,u),h=o.data.get(r.dataId).values;if(c!=null){let v=new Array(u);for(let w=0;w<v.length;w++)v[w]=l[c[w]];h=f0(h,l,r.dtype,c,v),d=_.getInnerMostAxes(d.length,u),l=v}xe(r,"max"),_.assertAxesAreInnerMostDims("max",d,u);let[m,f]=_.computeOutAndReduceShapes(l,d),g=k.sizeFromShape(f),y=WT(h,g,m,r.dtype),b=o.write(y,m,r.dtype),x=m;return i&&(x=_.expandShapeToKeepDim(m,p)),{dataId:b,shape:x,dtype:r.dtype}}var B8={kernelName:Vi,backendName:"cpu",kernelFunc:yC};function V8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;xe(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;k.assert(_.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=_.computePool2DInfo(r.shape,s,i,u,o,l),d;if(p.filterWidth===1&&p.filterHeight===1&&k.arraysEqual(p.inShape,p.outShape))d=hr({inputs:{x:r},backend:n});else{let c=n.data.get(r.dataId).values,h=k.computeStrides(r.shape),m=v0(c,r.shape,r.dtype,h,p,"max");d=n.makeTensorInfo(p.outShape,r.dtype,m.values)}return d}var U8={kernelName:Gi,backendName:"cpu",kernelFunc:V8};function G8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a;xe(r,"maxPool3d");let p=_.computePool3DInfo(r.shape,s,i,1,o,l,u),d=n.data.get(r.dataId).values,c=hC(d,r.shape,r.dtype,k.computeStrides(r.shape),p,"max");return n.makeTensorInfo(c.shape,"float32",c.values)}var H8={kernelName:wc,backendName:"cpu",kernelFunc:G8};function j8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=a;xe([r,s],"maxPool3DGrad");let p=_.computePool3DInfo(s.shape,i,o,1,l,u),d=n.bufferSync(s),c=D5(d,p),h=p.strideDepth,m=p.strideHeight,f=p.strideWidth,g=p.dilationDepth,y=p.dilationHeight,b=p.dilationWidth,x=p.effectiveFilterDepth,v=p.effectiveFilterHeight,w=p.effectiveFilterWidth,T=x-1-p.padInfo.front,C=w-1-p.padInfo.left,E=v-1-p.padInfo.top,$=He(s.shape,"float32"),P=n.bufferSync(r);for(let F=0;F<p.batchSize;++F)for(let S=0;S<p.inChannels;++S)for(let M=0;M<p.inDepth;++M)for(let B=0;B<p.inHeight;++B)for(let j=0;j<p.inWidth;++j){let q=M-T,K=B-E,Q=j-C,ee=0;for(let re=0;re<x;re+=g){let Z=(q+re)/h;if(!(Z<0||Z>=p.outDepth||Math.floor(Z)!==Z))for(let ie=0;ie<v;ie+=y){let ae=(K+ie)/m;if(!(ae<0||ae>=p.outHeight||Math.floor(ae)!==ae))for(let le=0;le<w;le+=b){let ue=(Q+le)/f;if(ue<0||ue>=p.outWidth||Math.floor(ue)!==ue)continue;let we=x*v*w-1-c.get(F,Z,ae,ue,S),ye=re*v*w+ie*w+le,Ie=we===ye?1:0;Ie!==0&&(ee+=P.get(F,Z,ae,ue,S)*Ie)}}}$.set(ee,F,M,B,j,S)}return n.makeTensorInfo($.shape,$.dtype,$.values)}var q8={kernelName:Dm,backendName:"cpu",kernelFunc:j8};function K8(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;xe([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=_.computePool2DInfo(o.shape,l,u,1,p,d),h=n.data.get(o.dataId).values,m=He(c.outShape,o.dtype,dC(h,o.shape,o.dtype,c).values),f=c.strideHeight,g=c.strideWidth,y=c.dilationHeight,b=c.dilationWidth,x=c.effectiveFilterHeight,v=c.effectiveFilterWidth,w=v-1-c.padInfo.left,T=x-1-c.padInfo.top,C=He(o.shape,"float32"),E=n.data.get(r.dataId).values,$=He(r.shape,"float32",E);for(let P=0;P<c.batchSize;++P)for(let F=0;F<c.inChannels;++F)for(let S=0;S<c.inHeight;++S)for(let M=0;M<c.inWidth;++M){let B=S-T,j=M-w,q=0;for(let K=0;K<x;K+=y){let Q=(B+K)/f;if(!(Q<0||Q>=c.outHeight||Math.floor(Q)!==Q))for(let ee=0;ee<v;ee+=b){let re=(j+ee)/g;if(re<0||re>=c.outWidth||Math.floor(re)!==re)continue;let Z=x*v-1-m.get(P,Q,re,F),ie=K*v+ee,ae=Z===ie?1:0;ae!==0&&(q+=$.get(P,Q,re,F)*ae)}}C.set(q,P,S,M,F)}return n.makeTensorInfo(C.shape,C.dtype,C.values)}var X8={kernelName:Fm,backendName:"cpu",kernelFunc:K8};function Y8(e,t,n,a,r){let s=k.computeStrides(t),i=v0(e,t,n,s,r,"max"),o=dC(e,t,n,r,!0,a);return[i.values,o.values]}var J8={kernelName:Rm,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;xe(a,"MaxPoolWithArgmax");let u=l.data.get(a.dataId).values,p=_.computePool2DInfo(a.shape,r,s,[1,1],i),[d,c]=Y8(u,a.shape,a.dtype,o,p),h=l.write(d,p.outShape,a.dtype),m=l.write(c,p.outShape,a.dtype);return[{dataId:h,shape:p.outShape,dtype:a.dtype},{dataId:m,shape:p.outShape,dtype:"int32"}]}};function Z8(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=k.parseAxisParam(s,r.shape),l=_.computeOutAndReduceShapes(r.shape,o)[1],u=k.sizeFromShape(l),p=[],d=n.makeTensorInfo([],"float32",new Float32Array([u]));p.push(d);let c=ms({inputs:{x:r},backend:n,attrs:{dtype:"float32"}});p.push(c);let h=w0({inputs:{a:c,b:d},backend:n});p.push(h);let m=rd({inputs:{x:h},backend:n,attrs:{axis:s,keepDims:i}});return p.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var Q8={kernelName:Hi,backendName:"cpu",kernelFunc:Z8};function eK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;xe(r,"min");let o=k.parseAxisParam(s,r.shape),l=o,u=_.getAxesPermutation(l,r.shape.length),p=r;u!=null&&(p=Vn({inputs:{x:r},backend:n,attrs:{perm:u}}),l=_.getInnerMostAxes(l.length,r.shape.length)),_.assertAxesAreInnerMostDims("min",l,p.shape.length);let[d,c]=_.computeOutAndReduceShapes(p.shape,l),h=k.sizeFromShape(c),m=k.makeZerosTypedArray(k.sizeFromShape(d),p.dtype),f=n.data.get(p.dataId).values;for(let y=0;y<m.length;++y){let b=y*h,x=f[b];for(let v=0;v<h;++v){let w=f[b+v];(Number.isNaN(w)||w<x)&&(x=w)}m[y]=x}u!=null&&n.disposeIntermediateTensorInfo(p);let g=n.makeTensorInfo(d,p.dtype,m);if(i){let y=_.expandShapeToKeepDim(d,o),b=Tt({inputs:{x:g},backend:n,attrs:{shape:y}});return n.disposeIntermediateTensorInfo(g),b}return g}var tK={kernelName:ji,backendName:"cpu",kernelFunc:eK};function nK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,mode:i}=a;xe(r,"mirrorPad");let o=s.map((b,x)=>b[0]+r.shape[x]+b[1]),l=s.map(b=>b[0]),u=s.map((b,x)=>b[0]+r.shape[x]),p=i==="reflect"?0:1,d=n.data.get(r.dataId).values,c=r.shape.length,h=k.computeStrides(r.shape),m=k.sizeFromShape(o),f=o.length,g=k.computeStrides(o),y=k.getTypedArrayFromDType(r.dtype,m);for(let b=0;b<m;b++){let x=k.indexToLoc(b,f,g);for(let w=0;w<f;w++)x[w]<l[w]?x[w]=l[w]*2-x[w]-p:x[w]>=u[w]&&(x[w]=(u[w]-1)*2-x[w]+p);x=x.map((w,T)=>w-l[T]);let v=k.locToIndex(x,c,h);y[b]=d[v]}return{dataId:n.write(y,o,r.dtype),shape:o,dtype:r.dtype}}var aK={kernelName:Ki,backendName:"cpu",kernelFunc:nK},rK=Vt((e,t)=>{let n=e%t;return e<0&&t<0||e>=0&&t>=0?n:(n+t)%t}),sK=rn(uu,rK),iK={kernelName:uu,backendName:"cpu",kernelFunc:sK},oK=bi(mI());function bC(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{dim:s}=a,i=r.shape.length,o=s;if(o===-1&&(o=i-1),o!==i-1)throw Error(`Softmax along a non-last dimension is not yet supported. Logits was rank ${i} and dim was ${o}`);let l=k.parseAxisParam([o],r.shape),u=yC({inputs:{x:r},backend:n,attrs:{reductionIndices:l,keepDims:!1}}),p=_.expandShapeToKeepDim(u.shape,l),d=Tt({inputs:{x:u},backend:n,attrs:{shape:p}}),c=b0({inputs:{a:r,b:d},backend:n}),h=ET({inputs:{x:c},backend:n}),m=rd({inputs:{x:h},backend:n,attrs:{axis:l,keepDims:!1}}),f=Tt({inputs:{x:m},backend:n,attrs:{shape:p}}),g=w0({inputs:{a:h,b:f},backend:n});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(f),g}var lK={kernelName:po,backendName:"cpu",kernelFunc:bC};function uK(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a;xe(r,"multinomial");let l=o?r:bC({inputs:{logits:r},backend:n,attrs:{dim:-1}}),u=l.shape[0],p=l.shape[1],d=n.data.get(l.dataId).values,c=[u,s],h=k.makeZerosTypedArray(k.sizeFromShape(c),"int32");for(let m=0;m<u;++m){let f=m*p,g=new Float32Array(p-1);g[0]=d[f];for(let x=1;x<g.length;++x)g[x]=g[x-1]+d[f+x];let y=oK.alea(i.toString()),b=m*s;for(let x=0;x<s;++x){let v=y();h[b+x]=g.length;for(let w=0;w<g.length;w++)if(v<g[w]){h[b+x]=w;break}}}return o||n.disposeIntermediateTensorInfo(l),n.makeTensorInfo(c,"int32",h)}var pK={kernelName:Mm,backendName:"cpu",kernelFunc:uK},cK=gr.nonMaxSuppressionV3Impl;function dK(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=a;xe(r,"NonMaxSuppression");let u=n.data.get(r.dataId).values,p=n.data.get(s.dataId).values,{selectedIndices:d}=cK(u,p,i,o,l);return n.makeTensorInfo([d.length],"int32",new Int32Array(d))}var hK={kernelName:du,backendName:"cpu",kernelFunc:dK},mK=gr.nonMaxSuppressionV4Impl;function fK(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=a;xe(r,"NonMaxSuppressionPadded");let p=n.data.get(r.dataId).values,d=n.data.get(s.dataId).values,{selectedIndices:c,validOutputs:h}=mK(p,d,i,o,l,u);return[n.makeTensorInfo([c.length],"int32",new Int32Array(c)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var gK={kernelName:hu,backendName:"cpu",kernelFunc:fK},yK=gr.nonMaxSuppressionV5Impl;function bK(e){let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=a;xe(r,"NonMaxSuppressionWithScore");let p=n.data.get(r.dataId).values,d=n.data.get(s.dataId).values,c=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=yK(p,d,c,h,m,f);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var xK={kernelName:mu,backendName:"cpu",kernelFunc:bK};function vK(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{depth:s,onValue:i,offValue:o}=a;xe(r,"oneHot");let l=k.sizeFromShape(r.shape),u=new Float32Array(l*s);u.fill(o);let p=n.data.get(r.dataId).values;for(let d=0;d<l;++d)p[d]>=0&&p[d]<s&&(u[d*s+p[d]]=i);return n.makeTensorInfo([...r.shape,s],"int32",u)}var wK={kernelName:Yi,backendName:"cpu",kernelFunc:vK};function im(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("zerosLike is not supported for string tensors");if(a.dtype==="complex64"){let r=hi({inputs:{input:a},backend:n}),s=im({inputs:{x:r},backend:n}),i=El({inputs:{input:a},backend:n}),o=im({inputs:{x:i},backend:n}),l=Jn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return k0({backend:n,attrs:{shape:a.shape,value:0,dtype:a.dtype}})}var kK={kernelName:Ru,backendName:"cpu",kernelFunc:im};function xC(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("onesLike is not supported for string tensors");if(a.dtype==="complex64"){let r=hi({inputs:{input:a},backend:n}),s=xC({inputs:{x:r},backend:n}),i=El({inputs:{input:a},backend:n}),o=im({inputs:{x:i},backend:n}),l=Jn({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return k0({backend:n,attrs:{shape:a.shape,value:1,dtype:a.dtype}})}var IK={kernelName:fu,backendName:"cpu",kernelFunc:xC};function vC(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return sm({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{k.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=sm({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=Al({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var SK={kernelName:gu,backendName:"cpu",kernelFunc:vC};function NK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,constantValue:i}=a;xe(r,"pad");let o=s.map((y,b)=>y[0]+r.shape[b]+y[1]),l=s.map(y=>y[0]),u=n.data.get(r.dataId).values,p=k.sizeFromShape(r.shape),d=r.shape.length,c=k.computeStrides(r.shape),h=k.sizeFromShape(o),m=o.length,f=k.computeStrides(o),g=k.getTypedArrayFromDType(r.dtype,h);i!==0&&g.fill(i);for(let y=0;y<p;y++){let b=k.indexToLoc(y,d,c).map((v,w)=>v+l[w]),x=k.locToIndex(b,m,f);g[x]=u[y]}return{dataId:n.write(g,o,r.dtype),shape:o,dtype:r.dtype}}var wC={kernelName:Ji,backendName:"cpu",kernelFunc:NK},TK=Vt((e,t)=>Math.pow(e,t)),CK=rn(Zi,TK),_K={kernelName:Zi,backendName:"cpu",kernelFunc:CK};function EK(e){let{backend:t,attrs:n}=e,{start:a,stop:r,dtype:s,step:i}=n,o=g0(a,r,i,s);return t.makeTensorInfo([o.length],s,o)}var AK={kernelName:kc,backendName:"cpu",kernelFunc:EK},$K=ot(bu,e=>1/e),FK={kernelName:bu,backendName:"cpu",kernelFunc:$K};function DK(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a;xe(r,"resizeBilinear");let l=k.computeStrides(r.shape),[u,p]=o,[d,c,h,m]=r.shape,f=n.data.get(r.dataId).values,g=new Float32Array(k.sizeFromShape([d,u,p,m])),y=[s&&u>1?c-1:c,s&&p>1?h-1:h],b=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=0,v=y[0]/b[0],w=y[1]/b[1];for(let T=0;T<d;T++)for(let C=0;C<u;C++){let E;i?E=v*(C+.5)-.5:E=v*C;let $=Math.max(0,Math.floor(E)),P=E-$,F=Math.min(c-1,Math.ceil(E)),S=T*l[0]+$*l[1],M=T*l[0]+F*l[1];for(let B=0;B<p;B++){let j;i?j=w*(B+.5)-.5:j=w*B;let q=Math.max(0,Math.floor(j)),K=j-q,Q=Math.min(h-1,Math.ceil(j)),ee=S+q*l[2],re=M+q*l[2],Z=S+Q*l[2],ie=M+Q*l[2];for(let ae=0;ae<m;ae++){let le=f[ee+ae],ue=f[re+ae],we=f[Z+ae],ye=f[ie+ae],Ie=le+(we-le)*K,Ee=ue+(ye-ue)*K,$e=Ie+(Ee-Ie)*P;g[x++]=$e}}}return n.makeTensorInfo([d,u,p,m],"float32",g)}var RK={kernelName:to,backendName:"cpu",kernelFunc:DK};function MK(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a;xe([s,r],"resizeBilinearGrad");let o=k.computeStrides(r.shape),[l,u,p,d]=r.shape,[,c,h]=s.shape,m=new Float32Array(l*u*p*d),f=[i&&c>1?u-1:u,i&&h>1?p-1:p],g=[i&&c>1?c-1:c,i&&h>1?h-1:h],y=f[0]/g[0],b=f[1]/g[1],x=n.data.get(s.dataId).values,v=0;for(let w=0;w<l;w++){let T=w*o[0];for(let C=0;C<c;C++){let E=C*y,$=Math.floor(E),P=Math.min(Math.ceil(E),u-1),F=T+$*o[1],S=T+P*o[1],M=E-$,B=1-M;for(let j=0;j<h;j++){let q=j*b,K=Math.floor(q),Q=Math.min(Math.ceil(q),p-1),ee=q-K,re=1-ee,Z=F+K*o[2],ie=F+Q*o[2],ae=S+K*o[2],le=S+Q*o[2],ue=B*re,we=B*ee,ye=M*re,Ie=M*ee;for(let Ee=0;Ee<d;Ee++){let $e=x[v++];m[Z+Ee]+=$e*ue,m[ie+Ee]+=$e*we,m[ae+Ee]+=$e*ye,m[le+Ee]+=$e*Ie}}}}return n.makeTensorInfo([l,p,u,d],"float32",m)}var PK={kernelName:Lm,backendName:"cpu",kernelFunc:MK};function OK(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a;xe(r,"resizeNearestNeighbor");let l=k.computeStrides(r.shape),[u,p]=o,[d,c,h,m]=r.shape,f=n.data.get(r.dataId).values,g=new Float32Array(d*u*p*m),y=[s&&u>1?c-1:c,s&&p>1?h-1:h],b=[s&&u>1?u-1:u,s&&p>1?p-1:p],x=y[0]/b[0],v=y[1]/b[1],w=0;for(let T=0;T<d;T++){let C=T*l[0];for(let E=0;E<u;E++){let $=i?x*(E+.5):x*E,P=Math.min(c-1,s?Math.round($):Math.floor($));i&&(P=Math.max(0,P));let F=C+P*l[1];for(let S=0;S<p;S++){let M=i?v*(S+.5):v*S,B=Math.min(h-1,s?Math.round(M):Math.floor(M));i&&(B=Math.max(0,B));let j=F+B*l[2];for(let q=0;q<m;q++){let K=f[j+q];g[w++]=K}}}}return n.makeTensorInfo([d,u,p,m],r.dtype,g)}var LK={kernelName:Ic,backendName:"cpu",kernelFunc:OK};function zK(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a;xe([s,r],"resizeNearestNeighborGrad");let o=k.computeStrides(r.shape),l=k.computeStrides(s.shape),[u,p,d,c]=r.shape,[,h,m]=s.shape,f=new Float32Array(u*p*d*c),g=n.data.get(s.dataId).values,y=[i&&h>1?p-1:p,i&&m>1?d-1:d],b=[i&&h>1?h-1:h,i&&m>1?m-1:m],x=y[0]/b[0],v=y[1]/b[1],w=1/x,T=1/v,C=Math.ceil(w)*2+2,E=Math.ceil(T)*2+2;for(let $=0;$<u;$++){let P=$*o[0];for(let F=0;F<p;F++){let S=P+F*o[1],M=Math.floor(F*w),B=Math.floor(M-C/2);for(let j=0;j<d;j++){let q=S+j*o[2],K=Math.floor(j*T),Q=Math.floor(K-E/2);for(let ee=0;ee<c;ee++){let re=0;for(let Z=0;Z<C;Z++){let ie=Z+B;if(ie<0||ie>=h)continue;let ae=P+ie*l[1],le=ie*x,ue=Math.min(p-1,i?Math.round(le):Math.floor(le));if(F===ue)for(let we=0;we<E;we++){let ye=we+Q;if(ye<0||ye>=m)continue;let Ie=ae+ye*l[2],Ee=ye*v,$e=Math.min(d-1,i?Math.round(Ee):Math.floor(Ee));j===$e&&(re+=g[Ie+ee])}}f[q+ee]=re}}}}return n.makeTensorInfo(r.shape,r.dtype,f)}var WK={kernelName:Om,backendName:"cpu",kernelFunc:zK};function BK(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a;xe(r,"reverse");let i=r.shape.length,o=k.parseAxisParam(s,r.shape);if(i===0)return hr({inputs:{x:r},backend:n});let l=new jt(r.shape,r.dtype),u=n.bufferSync(r);for(let p=0;p<l.size;p++){let d=l.indexToLoc(p),c=d.slice();o.forEach(h=>c[h]=r.shape[h]-1-c[h]),l.set(u.get(...c),...d)}return n.makeTensorInfo(l.shape,l.dtype,l.values)}var VK={kernelName:ao,backendName:"cpu",kernelFunc:BK},UK={kernelName:Mu,backendName:"cpu",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,{radians:r,fillValue:s,center:i}=t,o=n,l=k.getTypedArrayFromDType(a.dtype,k.sizeFromShape(a.shape)),[u,p,d,c]=a.shape,[h,m]=_.getImageCenter(i,p,d),f=255,g=Math.sin(r),y=Math.cos(r),b=o.data.get(a.dataId).values;for(let x=0;x<u;x++){let v=x*d*p*c;for(let w=0;w<p;w++){let T=w*(d*c);for(let C=0;C<d;C++){let E=C*c;for(let $=0;$<c;$++){let P=[u,w,C,$],F=P[2],S=P[1],M=(F-h)*y-(S-m)*g,B=(F-h)*g+(S-m)*y;M=Math.round(M+h),B=Math.round(B+m);let j=s;if(typeof s!="number"&&($===3?j=f:j=s[$]),M>=0&&M<d&&B>=0&&B<p){let K=B*(d*c),Q=M*c,ee=v+K+Q+$;j=b[ee]}let q=v+T+E+$;l[q]=j}}}}return{dataId:o.write(l,a.shape,a.dtype),shape:a.shape,dtype:a.dtype}}},GK=ot(ro,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}),HK={kernelName:ro,backendName:"cpu",kernelFunc:GK};function kC(e,t,n,a,r,s,i,o,l,u){let p=[a/r,r],d=e.values,c=t.values;if(a===0)return He(n,t.dtype);let h=He(p,t.dtype);h.values.fill(l);for(let m=0;m<s;m++){let f=[],g=0;for(let y=0;y<i;y++){let b=d[m*i+y];f.push(b),g+=b*o[y]}if(g<0||g>=a/r)throw new Error(`Invalid indices: ${f} does not index into ${n}`);for(let y=0;y<r;y++)u?h.values[g*r+y]+=c[m*r+y]:h.values[g*r+y]=t.rank===0?c[0]:c[m*r+y]}return h}function jK(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r,updates:s}=t,{shape:i}=a,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:d}=_.calculateShapes(s,r,i),c=!0,h=n.bufferSync(r),m=n.bufferSync(s),f=kC(h,m,i,d,u,l,o,p,0,c);return n.makeTensorInfo(i,f.dtype,f.values)}var qK={kernelName:vu,backendName:"cpu",kernelFunc:jK};function KK(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t;xe([a,r,s],"select");let i=a.shape.length,o=n.data.get(a.dataId).values,l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=fa(r.dtype,s.dtype),d=k.makeZerosTypedArray(k.sizeFromShape(r.shape),p),c=0,h=i===0||i>1||r.shape.length===1?1:k.sizeFromShape(r.shape.slice(1));for(let m=0;m<o.length;m++)for(let f=0;f<h;f++)o[m]===1?d[c++]=l[m]:d[c++]=u[m];return n.makeTensorInfo(r.shape,p,d)}var XK={kernelName:wu,backendName:"cpu",kernelFunc:KK},YK=_.SELU_SCALEALPHA,JK=_.SELU_SCALE,ZK=ot(ku,e=>e>=0?JK*e:YK*(Math.exp(e)-1)),QK={kernelName:ku,backendName:"cpu",kernelFunc:ZK},eX=ot(Nu,e=>e<0?-1:e>0?1:0),tX={kernelName:Nu,backendName:"cpu",kernelFunc:eX},nX=ot(io,e=>Math.sin(e)),aX={kernelName:io,backendName:"cpu",kernelFunc:nX},rX=ot(Su,e=>Math.sinh(e)),sX={kernelName:Su,backendName:"cpu",kernelFunc:rX},iX=11920928955078125e-23,Ok=Math.log(iX)+2,oX=ot(Tu,e=>{let t=e>-Ok,n=e<Ok,a=Math.exp(e),r;return n?r=a:t?r=e:r=Math.log(1+a),r}),lX={kernelName:Tu,backendName:"cpu",kernelFunc:oX};function uX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a;xe([r],"spaceToBatchND");let o=k.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g<r.shape.length;++g)l.push([0,0]);let u=wC.kernelFunc({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),p=_.getReshaped(u.shape,s,o,!1),d=_.getPermuted(p.length,s.length,!1),c=_.getReshapedPermuted(u.shape,s,o,!1),h=Tt({inputs:{x:u},backend:n,attrs:{shape:p}}),m=Vn({inputs:{x:h},backend:n,attrs:{perm:d}}),f=Tt({inputs:{x:m},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),f}var pX={kernelName:Cu,backendName:"cpu",kernelFunc:uX};function cX(e){let{inputs:t,backend:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
|
|
${s.shape}`);if(a.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw:
|
|
${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
|
|
${i.shape}`);let o=n.data.get(a.dataId).values,l=n.data.get(r.dataId).values,u=n.data.get(s.dataId).values,p=n.data.get(i.dataId).values[0],[d,c,h,m,f]=KT(o,a.shape,a.dtype,l,r.dtype,u,p);return[n.makeTensorInfo(c,a.dtype,d),n.makeTensorInfo([c[0]],r.dtype,h),n.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),n.makeTensorInfo([f.length],a.dtype,new Int32Array(f))]}var dX={kernelName:Sc,backendName:"cpu",kernelFunc:cX};function hX(e){let{inputs:t,backend:n}=e,{inputIndices:a,inputShape:r,newShape:s}=t;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.data.get(r.dataId).values),o=n.data.get(a.dataId).values,l=Array.from(n.data.get(s.dataId).values),[u,p,d]=XT(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var mX={kernelName:Eu,backendName:"cpu",kernelFunc:hX};function fX(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,[u,p]=y0(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var gX={kernelName:Nc,backendName:"cpu",kernelFunc:fX};function yX(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);if(r.shape[0]!==s.shape[0])throw new Error("segmentIds and indices should have same size.");let i=n.data.get(a.dataId).values,o=n.data.get(r.dataId).values,l=n.data.get(s.dataId).values,[u,p]=y0(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var bX={kernelName:Tc,backendName:"cpu",kernelFunc:yX};function xX(e){let{inputs:t,backend:n,attrs:a}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=a,{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=_.calculateShapes(s,r,o),h=!1,m=n.bufferSync(r),f=n.bufferSync(s),g=n.data.get(i.dataId).values[0],y=kC(m,f,o,c,p,u,l,d,g,h);return n.makeTensorInfo(o,y.dtype,y.values)}var vX={kernelName:zm,backendName:"cpu",kernelFunc:xX};function wX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=k.parseAxisParam(i,r.shape)[0],l=_.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(d=>{let c=[...p];c[o]=d;let h=mi({inputs:{x:r},backend:n,attrs:{begin:u,size:c}});return u[o]+=d,h})}var kX={kernelName:_u,backendName:"cpu",kernelFunc:wX},IX={kernelName:Cc,backendName:"cpu",kernelFunc:({inputs:e,backend:t})=>{let{x:n}=e,a=t;xe(n,"square");let r=a.data.get(n.dataId).values,s=new Float32Array(r.length);for(let i=0;i<r.length;++i){let o=r[i];s[i]=o*o}return{dataId:a.write(s,n.shape,n.dtype),shape:n.shape,dtype:n.dtype}}},SX=ot(vs,(e,t)=>{let n=t;return isNaN(e)?NaN:e>0?1:n.alpha}),NX={kernelName:vs,backendName:"cpu",kernelFunc:SX};function TX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a;xe(r,"stridedSlice");let{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:v}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),w;if(f)w=Tt({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||y){k.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=qt.computeOutShape(b,x,v),C=mi({inputs:{x:r},backend:n,attrs:{begin:b,size:T}});w=Tt({inputs:{x:C},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(C)}else{let T=n.bufferSync(r),C=JT(h,T,v,b);w=n.makeTensorInfo(m,C.dtype,C.values)}return w}var CX={kernelName:Au,backendName:"cpu",kernelFunc:TX};function _X(e){let{inputs:t,backend:n,attrs:a}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=a,{data:p,dataSplits:d}=t,c=n.data.get(p.dataId).values,h=n.data.get(d.dataId).values,[m,f]=ZT(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var EX={kernelName:Wm,backendName:"cpu",kernelFunc:_X};function AX(e){let{inputs:t,backend:n,attrs:a}=e,{skipEmpty:r}=a,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.data.get(s.dataId).values,l=n.data.get(i.dataId).values[0],[u,p,d]=QT(o,l,r),c=p.length;return[n.makeTensorInfo([c,2],"int32",u),n.makeTensorInfo([c],"string",p),n.makeTensorInfo([2],"int32",new Int32Array(d))]}var $X={kernelName:Bm,backendName:"cpu",kernelFunc:AX};function FX(e){let{inputs:t,backend:n,attrs:a}=e,{numBuckets:r}=a,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=n.data.get(s.dataId).values,o=eC(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var DX={kernelName:Vm,backendName:"cpu",kernelFunc:FX},RX=ot(mo,e=>Math.tan(e)),MX={kernelName:mo,backendName:"cpu",kernelFunc:RX},PX=ot(fo,e=>Math.tanh(e)),OX={kernelName:fo,backendName:"cpu",kernelFunc:PX};function LX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reps:s}=a;xe(r,"tile");let i=nC(n.bufferSync(r),s);return n.makeTensorInfo(i.shape,i.dtype,i.values)}var zX={kernelName:xs,backendName:"cpu",kernelFunc:LX};function WX(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{k:s,sorted:i}=a;xe(r,"topk");let o=n.data.get(r.dataId).values,[l,u]=rC(o,r.shape,r.dtype,s,i);return[n.makeTensorInfo(l.shape,l.dtype,l.values),n.makeTensorInfo(u.shape,u.dtype,u.values)]}var BX={kernelName:$u,backendName:"cpu",kernelFunc:WX};function VX(e){let{inputs:t,attrs:n,backend:a}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=n,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=k.computeStrides(r.shape),b=y[0],x=y[1],v=y[2],w=k.getTypedArrayFromDType(r.dtype,k.sizeFromShape(g));w.fill(l);let T=a.data.get(r.dataId).values,C=a.data.get(s.dataId).values;for(let E=0;E<p;++E){let $=s.shape[0]===1?C:C.subarray(E*8,E*8+8);for(let P=0;P<m;++P)for(let F=0;F<f;++F)for(let S=0;S<h;++S){let M,B=$[6]*F+$[7]*P+1;if(B===0)continue;let j=($[0]*F+$[1]*P+$[2])/B,q=($[3]*F+$[4]*P+$[5])/B,K=Lk(j,c,o),Q=Lk(q,d,o);switch(i){case"nearest":M=KX(T,d,c,b,x,v,E,Q,K,S,l);break;case"bilinear":M=XX(T,d,c,b,x,v,E,Q,K,S,l);break;default:throw new Error(`Error in Transform: Expect 'nearest' or 'bilinear', but got ${i}`)}let ee=E*b+P*x+F*v+S;w[ee]=M}return a.makeTensorInfo(g,r.dtype,w)}return{dataId:a.write(w,g,r.dtype),shape:r.shape,dtype:r.dtype}}var UX={kernelName:Fu,backendName:"cpu",kernelFunc:VX};function Lk(e,t,n){switch(n){case"reflect":return GX(e,t);case"wrap":return HX(e,t);case"nearest":return qX(e,t);case"constant":default:return jX(e,t)}}function GX(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let a=2*t;n<a&&(n=a*Math.trunc(-n/a)+n),n=n<-t?n+a:-n-1}else if(n>t-1)if(t<=1)n=0;else{let a=2*t;n-=a*Math.trunc(n/a),n>=t&&(n=a-n-1)}return k.clamp(0,n,t-1)}function HX(e,t){let n=e;if(n<0)if(t<=1)n=0;else{let a=t-1;n+=t*(Math.trunc(-n/a)+1)}else if(n>t-1)if(t<=1)n=0;else{let a=t-1;n-=t*Math.trunc(n/a)}return k.clamp(0,n,t-1)}function jX(e,t){return e}function qX(e,t){return k.clamp(0,e,t-1)}function Bp(e,t,n,a,r,s,i,o,l,u,p){let d=i*a+o*r+l*s+u;return 0<=o&&o<t&&0<=l&&l<n?e[d]:p}function KX(e,t,n,a,r,s,i,o,l,u,p){let d=Math.round(o),c=Math.round(l);return Bp(e,t,n,a,r,s,i,d,c,u,p)}function XX(e,t,n,a,r,s,i,o,l,u,p){let d=Math.floor(o),c=Math.floor(l),h=d+1,m=c+1,f=(m-l)*Bp(e,t,n,a,r,s,i,d,c,u,p)+(l-c)*Bp(e,t,n,a,r,s,i,d,m,u,p),g=(m-l)*Bp(e,t,n,a,r,s,i,h,c,u,p)+(l-c)*Bp(e,t,n,a,r,s,i,h,m,u,p);return(h-o)*f+(o-d)*g}function YX(e){let{inputs:t,attrs:n,backend:a}=e,{axis:r}=n,{x:s}=t;xe(s,"unique");let i=a.data.get(s.dataId).values,{outputValues:o,outputShape:l,indices:u}=sC(i,r,s.shape,s.dtype);return[a.makeTensorInfo(l,s.dtype,o),a.makeTensorInfo([u.length],"int32",u)]}var JX={kernelName:Um,backendName:"cpu",kernelFunc:YX};function ZX(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r.shape.length,o=r.shape[s],l=new Array(i-1),u=0;for(let h=0;h<i;h++)h!==s&&(l[u++]=r.shape[h]);let p=new Array(i).fill(0),d=r.shape.slice();d[s]=1;let c=new Array(o);for(let h=0;h<c.length;h++){p[s]=h;let m=mi({inputs:{x:r},backend:n,attrs:{begin:p,size:d}});c[h]=Tt({inputs:{x:m},backend:n,attrs:{shape:l}}),n.disposeIntermediateTensorInfo(m)}return c}var QX={kernelName:Du,backendName:"cpu",kernelFunc:ZX};function e7(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,segmentIds:s}=t,{numSegments:i}=a;xe(r,"unsortedSegmentSum");let o=r.shape.length,l=s.shape.length,u=[],p=[],d=o-l,c=s;for(let m=0;m<d;++m){let f=sm({inputs:{input:c},backend:n,attrs:{dim:m+1}});c=f,p.push(f)}for(let m=0;m<i;++m){let f=k.createScalarValue(m,"int32"),g=n.makeTensorInfo([],"int32",f),y=CT({inputs:{a:g,b:c},backend:n}),b=ms({inputs:{x:y},backend:n,attrs:{dtype:"float32"}}),x=Xf({inputs:{a:b,b:r},backend:n}),v=rd({inputs:{x},backend:n,attrs:{axis:0,keepDims:!1}});u.push(v),p.push(g),p.push(y),p.push(b),p.push(x),p.push(v)}let h=vC({inputs:u,backend:n,attrs:{axis:0}});return p.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var t7={kernelName:_c,backendName:"cpu",kernelFunc:e7},n7=[o5,ej,u5,c5,ij,h5,f5,y5,x5,w5,I5,N5,C5,A5,F5,M5,O5,z5,B5,s5,U5,H5,q5,X5,rj,lj,J5,tj,Q5,tq,nq,rq,iq,lq,pq,dq,mq,gq,bq,vq,kq,Sq,Tq,Cq,Eq,$q,Dq,Rq,Mq,Pq,zq,Zj,Bq,uj,Xq,pj,Yq,dj,n8,a8,s8,mj,l8,p8,d8,m8,g8,gj,bj,nj,b8,eq,v8,k8,S8,Qj,vj,kj,T8,Sj,_8,$8,D8,P8,L8,W8,B8,Tj,U8,H8,q8,X8,J8,Q8,tK,_j,aK,iK,pK,Aj,Fj,hK,gK,xK,Rj,wK,IK,SK,wC,_K,t5,Oj,AK,aj,lx,FK,n5,a5,r5,RK,PK,LK,WK,VK,UK,HK,zj,qK,XK,QK,Bj,tX,aX,sX,Vj,lK,lX,pX,dX,mX,gX,bX,vX,kX,Hj,IX,qj,NX,CX,EX,$X,DX,Jj,Oq,MX,OX,zX,BX,UX,Mj,JX,QX,t7,kK];for(let e of n7)Ec(e);var IC={};Re(IC,{assertNotComplex:()=>Xu,bindCanvasToFramebuffer:()=>h7,bindColorTextureToFramebuffer:()=>Eh,bindTextureToProgramUniformSampler:()=>zC,bindTextureUnit:()=>PC,bindVertexBufferToProgramAttribute:()=>px,callAndCheck:()=>ge,canBeRepresented:()=>NC,createFragmentShader:()=>_C,createFramebuffer:()=>MC,createProgram:()=>EC,createStaticIndexBuffer:()=>FC,createStaticVertexBuffer:()=>$C,createTexture:()=>DC,createVertexShader:()=>CC,getBatchDim:()=>fi,getExtensionOrThrow:()=>Vp,getFramebufferErrorMessage:()=>WC,getMaxTexturesInShader:()=>GC,getNumChannels:()=>c7,getProgramUniformLocation:()=>LC,getProgramUniformLocationOrThrow:()=>OC,getRowsCols:()=>gi,getShapeAs3D:()=>Ah,getTextureShapeFromLogicalShape:()=>VC,getWebGLDisjointQueryTimerVersion:()=>HC,getWebGLErrorMessage:()=>TC,getWebGLMaxTextureSize:()=>UC,hasExtension:()=>ha,isCapableOfRenderingToFloatTexture:()=>jC,isDownloadFloatTextureEnabled:()=>qC,isReshapeFree:()=>lc,isWebGLFenceEnabled:()=>KC,isWebGLVersionEnabled:()=>dx,linkProgram:()=>AC,logShaderSourceAndInfoLog:()=>S0,resetMaxTextureSize:()=>m7,resetMaxTexturesInShader:()=>f7,unbindColorTextureFromFramebuffer:()=>cx,unbindTextureUnit:()=>d7,validateFramebuffer:()=>Up,validateProgram:()=>_h,validateTextureSize:()=>RC});var Ks={},wb={alpha:!1,antialias:!1,premultipliedAlpha:!1,preserveDrawingBuffer:!1,depth:!1,stencil:!1,failIfMajorPerformanceCaveat:!0};function SC(e,t){Ks[e]=t}function Ya(e,t){if(!(e in Ks)||t!=null){let a=r7(e,t);if(a!==null)Ks[e]=a;else return console.log("Could not get context for WebGL version",e),null}let n=Ks[e];return n==null||n.isContextLost()?(delete Ks[e],Ya(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),Ks[e])}function a7(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 r7(e,t){if(e!==1&&e!==2)throw new Error("Cannot get WebGL rendering context, WebGL is disabled.");let n=t==null?a7(e):t;return n.addEventListener("webglcontextlost",a=>{a.preventDefault(),delete Ks[e]},!1),e===1?n.getContext("webgl",wb)||n.getContext("experimental-webgl",wb):n.getContext("webgl2",wb)}var oc;(function(e){e[e.DENSE=0]="DENSE",e[e.SHARED_BATCH=1]="SHARED_BATCH"})(oc||(oc={}));var da;(function(e){e[e.RENDER=0]="RENDER",e[e.UPLOAD=1]="UPLOAD",e[e.PIXELS=2]="PIXELS",e[e.DOWNLOAD=3]="DOWNLOAD"})(da||(da={}));var ln;(function(e){e[e.UNPACKED_FLOAT16=0]="UNPACKED_FLOAT16",e[e.UNPACKED_FLOAT32=1]="UNPACKED_FLOAT32",e[e.PACKED_4X1_UNSIGNED_BYTE=2]="PACKED_4X1_UNSIGNED_BYTE",e[e.PACKED_2X2_FLOAT32=3]="PACKED_2X2_FLOAT32",e[e.PACKED_2X2_FLOAT16=4]="PACKED_2X2_FLOAT16"})(ln||(ln={}));function sd(e,t){return[t,e]}function s7(e,t){return e*t}function wh(e){let t=k.sizeFromShape(e),n=Math.ceil(t/4);return k.sizeToSquarishShape(n)}function Ku(e,t){return[Math.max(1,Math.ceil(t/2)),Math.max(1,Math.ceil(e/2))]}function i7(e,t){let[n,a]=Ku(e,t);return n*a*4}function I0(e,t){let n=e,a,r,s,i,o,l,u,p,d,c;return X().getNumber("WEBGL_VERSION")===2?(a=n.R32F,r=n.R16F,s=n.RGBA16F,i=n.RGBA32F,o=n.RED,u=4,p=1,d=n.HALF_FLOAT,c=n.FLOAT,l=n.RGBA8):(a=e.RGBA,r=e.RGBA,s=e.RGBA,i=n.RGBA,o=e.RGBA,u=4,p=4,d=t!=null?t.HALF_FLOAT_OES:null,c=e.FLOAT,l=e.RGBA),{internalFormatFloat:a,internalFormatHalfFloat:r,internalFormatPackedHalfFloat:s,internalFormatPackedFloat:i,textureFormatFloat:o,downloadTextureFormat:l,downloadUnpackNumChannels:u,defaultNumChannels:p,textureTypeHalfFloat:d,textureTypeFloat:c}}function ge(e,t){let n=t();return X().getBool("DEBUG")&&o7(e),n}function o7(e){let t=e.getError();if(t!==e.NO_ERROR)throw new Error("WebGL Error: "+TC(e,t))}var l7=596e-10,u7=65504;function NC(e){return!!(X().getBool("WEBGL_RENDER_FLOAT32_ENABLED")||e===0||l7<Math.abs(e)&&Math.abs(e)<u7)}function TC(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 Vp(e,t){return Rr(e,()=>e.getExtension(t),'Extension "'+t+'" not supported on this browser.')}function CC(e,t){let n=Rr(e,()=>e.createShader(e.VERTEX_SHADER),"Unable to create vertex WebGLShader.");if(ge(e,()=>e.shaderSource(n,t)),ge(e,()=>e.compileShader(n)),e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw console.log(e.getShaderInfoLog(n)),new Error("Failed to compile vertex shader.");return n}function _C(e,t){let n=Rr(e,()=>e.createShader(e.FRAGMENT_SHADER),"Unable to create fragment WebGLShader.");if(ge(e,()=>e.shaderSource(n,t)),ge(e,()=>e.compileShader(n)),X().get("ENGINE_COMPILE_ONLY"))return n;if(e.getShaderParameter(n,e.COMPILE_STATUS)===!1)throw S0(t,e.getShaderInfoLog(n)),new Error("Failed to compile fragment shader.");return n}var p7=/ERROR: [0-9]+:([0-9]+):/g;function S0(e,t){let n=p7.exec(t);if(n==null){console.log(`Couldn't parse line number in error: ${t}`),console.log(e);return}let a=+n[1],r=e.split(`
|
|
`),s=r.length.toString().length+2,i=r.map((d,c)=>k.rightPad((c+1).toString(),s)+d),o=0;for(let d=0;d<i.length;d++)o=Math.max(i[d].length,o);let l=i.slice(0,a-1),u=i.slice(a-1,a),p=i.slice(a);console.log(l.join(`
|
|
`)),console.log(t.split(`
|
|
`)[0]),console.log(`%c ${k.rightPad(u[0],o)}`,"border:1px solid red; background-color:#e3d2d2; color:#a61717"),console.log(p.join(`
|
|
`))}function EC(e){return Rr(e,()=>e.createProgram(),"Unable to create WebGLProgram.")}function AC(e,t){if(ge(e,()=>e.linkProgram(t)),!X().get("ENGINE_COMPILE_ONLY")&&e.getProgramParameter(t,e.LINK_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Failed to link vertex and fragment shaders.")}function _h(e,t){if(ge(e,()=>e.validateProgram(t)),e.getProgramParameter(t,e.VALIDATE_STATUS)===!1)throw console.log(e.getProgramInfoLog(t)),new Error("Shader program validation failed.")}function $C(e,t){let n=Rr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),ge(e,()=>e.bufferData(e.ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function FC(e,t){let n=Rr(e,()=>e.createBuffer(),"Unable to create WebGLBuffer");return ge(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,n)),ge(e,()=>e.bufferData(e.ELEMENT_ARRAY_BUFFER,t,e.STATIC_DRAW)),n}function c7(){return X().getNumber("WEBGL_VERSION")===2?1:4}function DC(e){return Rr(e,()=>e.createTexture(),"Unable to create WebGLTexture.")}function RC(e,t){let n=X().getNumber("WEBGL_MAX_TEXTURE_SIZE");if(e<=0||t<=0){let a=`[${e}x${t}]`;throw new Error("Requested texture size "+a+" is invalid.")}if(e>n||t>n){let a=`[${e}x${t}]`,r=`[${n}x${n}]`;throw new Error("Requested texture size "+a+" greater than WebGL maximum on this browser / GPU "+r+".")}}function MC(e){return Rr(e,()=>e.createFramebuffer(),"Unable to create WebGLFramebuffer.")}function px(e,t,n,a,r,s,i){let o=e.getAttribLocation(t,n);return o===-1?!1:(ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,a)),ge(e,()=>e.vertexAttribPointer(o,r,e.FLOAT,!1,s,i)),ge(e,()=>e.enableVertexAttribArray(o)),!0)}function PC(e,t,n){BC(e,n),ge(e,()=>e.activeTexture(e.TEXTURE0+n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,t))}function d7(e,t){BC(e,t),ge(e,()=>e.activeTexture(e.TEXTURE0+t)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function OC(e,t,n){return Rr(e,()=>e.getUniformLocation(t,n),'uniform "'+n+'" not present in program.')}function LC(e,t,n){return e.getUniformLocation(t,n)}function zC(e,t,n,a){ge(e,()=>PC(e,t,a)),ge(e,()=>e.uniform1i(n,a))}function h7(e){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ge(e,()=>e.viewport(0,0,e.canvas.width,e.canvas.height)),ge(e,()=>e.scissor(0,0,e.canvas.width,e.canvas.height))}function Eh(e,t,n){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,n)),ge(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,t,0))}function cx(e,t){ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,t)),ge(e,()=>e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,null,0))}function Up(e){let t=e.checkFramebufferStatus(e.FRAMEBUFFER);if(t!==e.FRAMEBUFFER_COMPLETE)throw new Error("Error binding framebuffer: "+WC(e,t))}function WC(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 Rr(e,t,n){let a=ge(e,()=>t());if(a==null)throw new Error(n);return a}function BC(e,t){let n=e.MAX_COMBINED_TEXTURE_IMAGE_UNITS-1,a=t+e.TEXTURE0;if(a<e.TEXTURE0||a>n){let r=`[gl.TEXTURE0, gl.TEXTURE${n}]`;throw new Error(`textureUnit must be in ${r}.`)}}function fi(e,t=2){return k.sizeFromShape(e.slice(0,e.length-t))}function gi(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 Ah(e){let t=[1,1,1];return e.length===0||e.length===1&&e[0]===1||(t=[fi(e),...gi(e)]),t}function VC(e,t=!1){let n=X().getNumber("WEBGL_MAX_TEXTURE_SIZE");t&&(n=n*2,e=e.map((r,s)=>s>=e.length-2?k.nearestLargerEven(e[s]):e[s]),e.length===1&&(e=[2,e[0]])),e.length!==2&&(e=k.squeezeShape(e).newShape);let a=k.sizeFromShape(e);if(e.length<=1&&a<=n)return[1,a];if(e.length===2&&e[0]<=n&&e[1]<=n)return e;if(e.length===3&&e[0]*e[1]<=n&&e[2]<=n)return[e[0]*e[1],e[2]];if(e.length===3&&e[0]<=n&&e[1]*e[2]<=n)return[e[0],e[1]*e[2]];if(e.length===4&&e[0]*e[1]*e[2]<=n&&e[3]<=n)return[e[0]*e[1]*e[2],e[3]];if(e.length===4&&e[0]<=n&&e[1]*e[2]*e[3]<=n)return[e[0],e[1]*e[2]*e[3]];if(t){let r=fi(e),s=2,i=2;return e.length&&([s,i]=gi(e)),a=r*(s/2)*(i/2),k.sizeToSquarishShape(a).map(o=>o*2)}return k.sizeToSquarishShape(a)}function kh(e){return e%2===0}function lc(e,t){if(e=e.slice(-2),t=t.slice(-2),k.arraysEqual(e,t)||!e.length||!t.length||e[0]===0||e[1]===0||t[0]===0||t[1]===0)return!0;if(e.length!==t.length){let n=e.slice(-1)[0],a=t.slice(-1)[0];if(n===a||kh(n)&&kh(a)&&(e[0]===1||t[0]===1))return!0}return e[1]===t[1]&&kh(e[0])&&kh(t[0])}var $h,Fh;function UC(e){if($h==null){let t=Ya(e);$h=t.getParameter(t.MAX_TEXTURE_SIZE)}return $h}function m7(){$h=null}function f7(){Fh=null}function GC(e){if(Fh==null){let t=Ya(e);Fh=t.getParameter(t.MAX_TEXTURE_IMAGE_UNITS)}return Math.min(16,Fh)}function HC(e){if(e===0)return 0;let t,n=Ya(e);return ha(n,"EXT_disjoint_timer_query_webgl2")&&e===2?t=2:ha(n,"EXT_disjoint_timer_query")?t=1:t=0,t}function ha(e,t){return e.getExtension(t)!=null}function dx(e){try{if(Ya(e)!=null)return!0}catch(t){return console.log("Error when getting WebGL context: ",t),!1}return!1}function jC(e){if(e===0)return!1;let t=Ya(e);if(e===1){if(!ha(t,"OES_texture_float"))return!1}else if(!ha(t,"EXT_color_buffer_float"))return!1;return hx(t)}function qC(e){if(e===0)return!1;let t=Ya(e);if(e===1){if(!ha(t,"OES_texture_float")||!ha(t,"WEBGL_color_buffer_float"))return!1}else{if(ha(t,"EXT_color_buffer_float"))return hx(t);let n="EXT_color_buffer_half_float";if(ha(t,n)){let a=t.getExtension(n);return g7(t,a)}return!1}return hx(t)}function hx(e){let t=I0(e),n=e.createTexture();e.bindTexture(e.TEXTURE_2D,n);let a=1,r=1;e.texImage2D(e.TEXTURE_2D,0,t.internalFormatFloat,a,r,0,t.textureFormatFloat,t.textureTypeFloat,null);let s=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,s),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,n,0);let i=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(n),e.deleteFramebuffer(s),i}function g7(e,t){let n=I0(e,t),a=e.createTexture();e.bindTexture(e.TEXTURE_2D,a);let r=1,s=1;e.texImage2D(e.TEXTURE_2D,0,n.internalFormatHalfFloat,r,s,0,n.textureFormatFloat,n.textureTypeHalfFloat,null);let i=e.createFramebuffer();e.bindFramebuffer(e.FRAMEBUFFER,i),e.framebufferTexture2D(e.FRAMEBUFFER,e.COLOR_ATTACHMENT0,e.TEXTURE_2D,a,0);let o=e.checkFramebufferStatus(e.FRAMEBUFFER)===e.FRAMEBUFFER_COMPLETE;return e.bindTexture(e.TEXTURE_2D,null),e.bindFramebuffer(e.FRAMEBUFFER,null),e.deleteTexture(a),e.deleteFramebuffer(i),o}function KC(e){return e!==2?!1:Ya(e).fenceSync!=null}function Xu(e,t){Array.isArray(e)||(e=[e]),e.forEach(n=>{n!=null&&k.assert(n.dtype!=="complex64",()=>`${t} does not support complex64 tensors in the WebGL backend.`)})}var Ne=X();Ne.registerFlag("HAS_WEBGL",()=>Ne.getNumber("WEBGL_VERSION")>0);Ne.registerFlag("WEBGL_VERSION",()=>dx(2)?2:dx(1)?1:0);Ne.registerFlag("WEBGL_CHECK_NUMERICAL_PROBLEMS",()=>!1);Ne.registerFlag("WEBGL_BUFFER_SUPPORTED",()=>Ne.get("WEBGL_VERSION")===2);Ne.registerFlag("WEBGL_CPU_FORWARD",()=>!0);Ne.registerFlag("WEBGL_FORCE_F16_TEXTURES",()=>!1);Ne.registerFlag("WEBGL_PACK",()=>Ne.getBool("HAS_WEBGL"));Ne.registerFlag("WEBGL_PACK_NORMALIZATION",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_CLIP",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_DEPTHWISECONV",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_BINARY_OPERATIONS",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_UNARY_OPERATIONS",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_ARRAY_OPERATIONS",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_IMAGE_OPERATIONS",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_PACK_REDUCE",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_LAZILY_UNPACK",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_CONV_IM2COL",()=>Ne.getBool("WEBGL_PACK"));Ne.registerFlag("WEBGL_MAX_TEXTURE_SIZE",()=>UC(Ne.getNumber("WEBGL_VERSION")));Ne.registerFlag("WEBGL_MAX_TEXTURES_IN_SHADER",()=>GC(Ne.getNumber("WEBGL_VERSION")));Ne.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION",()=>{let e=Ne.getNumber("WEBGL_VERSION");return e===0?0:HC(e)});Ne.registerFlag("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE",()=>Ne.getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0&&!Fc.isMobile());Ne.registerFlag("WEBGL_RENDER_FLOAT32_CAPABLE",()=>jC(Ne.getNumber("WEBGL_VERSION")));Ne.registerFlag("WEBGL_RENDER_FLOAT32_ENABLED",()=>Ne.getBool("WEBGL_FORCE_F16_TEXTURES")?!1:Ne.getBool("WEBGL_RENDER_FLOAT32_CAPABLE"));Ne.registerFlag("WEBGL_DOWNLOAD_FLOAT_ENABLED",()=>qC(Ne.getNumber("WEBGL_VERSION")));Ne.registerFlag("WEBGL_FENCE_API_ENABLED",()=>KC(Ne.getNumber("WEBGL_VERSION")));Ne.registerFlag("WEBGL_SIZE_UPLOAD_UNIFORM",()=>Ne.getBool("WEBGL_RENDER_FLOAT32_ENABLED")?4:0);Ne.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}.`)});Ne.registerFlag("WEBGL_FLUSH_THRESHOLD",()=>Fc.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}.`)});Ne.registerFlag("CPU_HANDOFF_SIZE_THRESHOLD",()=>128);Ne.registerFlag("WEBGL_USE_SHAPES_UNIFORMS",()=>!1);Ne.registerFlag("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD",()=>1e5);Ne.registerFlag("TOPK_K_CPU_HANDOFF_THRESHOLD",()=>128);function En(){let e,t,n,a,r,s,i,o,l,u;return X().getNumber("WEBGL_VERSION")===2?(e="#version 300 es",t="in",n="out",a="in",r="texture",s="outputColor",i="out vec4 outputColor;",o=`
|
|
bool isnan_custom(float val) {
|
|
uint floatToUint = floatBitsToUint(val);
|
|
return (floatToUint & 0x7fffffffu) > 0x7f800000u;
|
|
}
|
|
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan_custom(val.x),
|
|
isnan_custom(val.y), isnan_custom(val.z), isnan_custom(val.w));
|
|
}
|
|
|
|
#define isnan(value) isnan_custom(value)
|
|
`,l="",u=`
|
|
#define round(value) newRound(value)
|
|
int newRound(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 newRound(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`):(e="",t="attribute",n="varying",a="varying",r="texture2D",s="gl_FragColor",i="",o=`
|
|
#define isnan(value) isnan_custom(value)
|
|
bool isnan_custom(float val) {
|
|
return (val > 0. || val < 1. || val == 0.) ? false : true;
|
|
}
|
|
bvec4 isnan_custom(vec4 val) {
|
|
return bvec4(isnan(val.x), isnan(val.y), isnan(val.z), isnan(val.w));
|
|
}
|
|
`,l=`
|
|
uniform float INFINITY;
|
|
|
|
bool isinf(float val) {
|
|
return abs(val) == INFINITY;
|
|
}
|
|
bvec4 isinf(vec4 val) {
|
|
return equal(abs(val), vec4(INFINITY));
|
|
}
|
|
`,u=`
|
|
int round(float value) {
|
|
return int(floor(value + 0.5));
|
|
}
|
|
|
|
ivec4 round(vec4 value) {
|
|
return ivec4(floor(value + vec4(0.5)));
|
|
}
|
|
`),{version:e,attribute:t,varyingVs:n,varyingFs:a,texture2D:r,output:s,defineOutput:i,defineSpecialNaN:o,defineSpecialInf:l,defineRound:u}}function Io(e,t,n="index"){let a=k.computeStrides(t);return a.map((r,s)=>{let i=`int ${e[s]} = ${n} / ${r}`,o=s===a.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * ${r}`:`index -= ${e[s]} * ${r}`;return`${i}; ${o};`}).join("")}function Yf(e,t,n="index"){let a=k.computeStrides(t);return a.map((r,s)=>{let i=`int ${e[s]} = ${n} / outShapeStrides[${s}]`,o=s===a.length-1?`int ${e[s+1]} = ${n} - ${e[s]} * outShapeStrides[${s}]`:`index -= ${e[s]} * outShapeStrides[${s}]`;return`${i}; ${o};`}).join("")}function y7(e,t){let n=e.length,a=e.map(s=>`${t}[${s}]`),r=new Array(n-1);r[n-2]=a[n-1];for(let s=n-3;s>=0;--s)r[s]=`(${r[s+1]} * ${a[s+1]})`;return r}function b7(e,t,n="index"){let a=e.map((s,i)=>i),r=y7(a,t);return r.map((s,i)=>{let o=`int ${e[i]} = ${n} / ${r[i]}`,l=i===r.length-1?`int ${e[i+1]} = ${n} - ${e[i]} * ${r[i]}`:`index -= ${e[i]} * ${r[i]}`;return`${o}; ${l};`}).join("")}function N0(e){let t=k.computeStrides(e).map(n=>n.toString());return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * ${t[0]} + coords.y * ${t[1]} + coords.z;
|
|
}
|
|
`}function T0(){return`
|
|
int getFlatIndex(ivec3 coords) {
|
|
return coords.x * outShapeStrides[0] + coords.y * outShapeStrides[1] + coords.z;
|
|
}
|
|
`}var XC=`
|
|
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:YC}=_;function x7(e,t,n){let a=[];if(e.forEach(c=>{let h=k.sizeFromShape(c.shapeInfo.logicalShape);if(c.shapeInfo.isUniform?a.push(`uniform float ${c.name}${h>1?`[${h}]`:""};`):(a.push(`uniform sampler2D ${c.name};`),a.push(`uniform int offset${c.name};`)),n.enableShapeUniforms){let{uniformShape:m}=C0(n.packedInputs,c.shapeInfo.logicalShape,c.shapeInfo.texShape);switch(m.length){case 1:a.push(`uniform int ${c.name}Shape;`);break;case 2:a.push(`uniform ivec2 ${c.name}Shape;`);break;case 3:a.push(`uniform ivec3 ${c.name}Shape;`);break;case 4:a.push(`uniform ivec4 ${c.name}Shape;`);break;default:break}a.push(`uniform ivec2 ${c.name}TexShape;`)}}),n.enableShapeUniforms){switch(t.logicalShape.length){case 1:a.push("uniform int outShape;");break;case 2:a.push("uniform ivec2 outShape;"),a.push("uniform int outShapeStrides;");break;case 3:a.push("uniform ivec3 outShape;"),a.push("uniform ivec2 outShapeStrides;");break;case 4:a.push("uniform ivec4 outShape;"),a.push("uniform ivec3 outShapeStrides;");break;default:break}a.push("uniform ivec2 outTexShape;")}n.customUniforms&&n.customUniforms.forEach(c=>{a.push(`uniform ${c.type} ${c.name}${c.arrayIndex?`[${c.arrayIndex}]`:""};`)});let r=a.join(`
|
|
`),s=e.map(c=>v7(c,t,n.packedInputs,n.enableShapeUniforms)).join(`
|
|
`),i=t.texShape,o=En(),l=I7(o),u,p,d=T7(o);return t.isPacked?(u=w7(t.logicalShape,i,n.enableShapeUniforms),p=N7(o)):(u=k7(t.logicalShape,i,n.enableShapeUniforms),p=S7(o)),n.packedInputs&&(d+=A7),[d,l,p,r,u,s,n.userCode].join(`
|
|
`)}function Yu(e,t=!1){let n=e.shapeInfo.logicalShape;switch(n.length){case 0:return V7(e,t);case 1:return G7(e,t);case 2:return j7(e,t);case 3:return K7(e,t);case 4:return Y7(e,t);case 5:return J7(e);case 6:return Z7(e);default:throw new Error(`${n.length}-D input sampling is not yet supported`)}}function JC(e,t){switch(e.shapeInfo.logicalShape.length){case 0:return B7(e);case 1:return U7(e,t);case 2:return H7(e,t);case 3:return q7(e,t);default:return X7(e,t)}}function v7(e,t,n=!1,a){let r="";n?r+=JC(e,a):r+=Yu(e,a);let s=e.shapeInfo.logicalShape,i=t.logicalShape;return s.length<=i.length&&(n?r+=Q7(e,t):r+=eY(e,t)),r}function w7(e,t,n){switch(e.length){case 0:return ZC();case 1:return $7(e,t,n);case 2:return z7(e,t,n);case 3:return D7(e,t,n);default:return M7(e,t,n)}}function k7(e,t,n){switch(e.length){case 0:return ZC();case 1:return F7(e,t,n);case 2:return W7(e,t,n);case 3:return R7(e,t,n);case 4:return P7(e,t,n);case 5:return O7(e,t);case 6:return L7(e,t);default:throw new Error(`${e.length}-D output sampling is not yet supported`)}}function I7(e){return`
|
|
float sampleTexture(sampler2D textureSampler, vec2 uv) {
|
|
return ${e.texture2D}(textureSampler, uv).r;
|
|
}
|
|
`}function S7(e){return`
|
|
void setOutput(float val) {
|
|
${e.output} = vec4(val, 0, 0, 0);
|
|
}
|
|
`}function N7(e){return`
|
|
void setOutput(vec4 val) {
|
|
${e.output} = val;
|
|
}
|
|
`}function T7(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);
|
|
}
|
|
|
|
${C7}
|
|
${_7}
|
|
${E7}
|
|
`}var C7=`
|
|
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);
|
|
}
|
|
`,_7=`
|
|
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);
|
|
}
|
|
`,E7=`
|
|
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);
|
|
}
|
|
`,A7=`
|
|
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 ZC(){return`
|
|
int getOutputCoords() {
|
|
return 0;
|
|
}
|
|
`}function $7(e,t,n){let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];return a[0]===1?n?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ceil(float(outTexShape[1]) / 2.0));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.x * ${a[1]}.0);
|
|
}
|
|
`:a[1]===1?n?`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ceil(float(outTexShape[0]) / 2.0));
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
return 2 * int(resultUV.y * ${a[0]}.0);
|
|
}
|
|
`:n?`
|
|
int getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
return 2 * (resTexRC.x * packedTexShape[1] + resTexRC.y);
|
|
}
|
|
`:`
|
|
int getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
return 2 * (resTexRC.x * ${a[1]} + resTexRC.y);
|
|
}
|
|
`}function F7(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 D7(e,t,n){if(n)return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
int texelsInLogicalRow = int(ceil(float(outShape[2]) / 2.0));
|
|
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
|
|
int b = index / texelsInBatch;
|
|
index -= b * texelsInBatch;
|
|
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`;let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[2]/2),s=r*Math.ceil(e[1]/2);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
|
|
int b = index / ${s};
|
|
index -= b * ${s};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec3(b, r, c);
|
|
}
|
|
`}function R7(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;
|
|
${Yf(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`;let a=Io(["r","c","d"],e);return`
|
|
ivec3 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${a}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}function M7(e,t,n){if(n)return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
|
|
int texelsInLogicalRow = int(ceil(float(outShape[3]) / 2.0));
|
|
int texelsInBatch = texelsInLogicalRow * int(ceil(float(outShape[2]) / 2.0));
|
|
int texelsInBatchN = texelsInBatch * outShape[1];
|
|
|
|
int b2 = index / texelsInBatchN;
|
|
index -= b2 * texelsInBatchN;
|
|
|
|
int b = index / texelsInBatch;
|
|
index -= b * texelsInBatch;
|
|
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec4(b2, b, r, c);
|
|
}
|
|
`;let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)],r=Math.ceil(e[e.length-1]/2),s=r*Math.ceil(e[e.length-2]/2),i=s,o="",l="b, r, c";for(let u=2;u<e.length-1;u++)i*=e[e.length-u-1],o=`
|
|
int b${u} = index / ${i};
|
|
index -= b${u} * ${i};
|
|
`+o,l=`b${u}, `+l;return`
|
|
ivec${e.length} getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
|
|
${o}
|
|
|
|
int b = index / ${s};
|
|
index -= b * ${s};
|
|
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec${e.length}(${l});
|
|
}
|
|
`}function P7(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;
|
|
${Yf(["r","c","d","d2"],e)}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`;let a=Io(["r","c","d","d2"],e);return`
|
|
ivec4 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${t[0]}, ${t[1]}));
|
|
int index = resTexRC.x * ${t[1]} + resTexRC.y;
|
|
${a}
|
|
return ivec4(r, c, d, d2);
|
|
}
|
|
`}function O7(e,t){let n=Io(["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 L7(e,t){let n=Io(["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 z7(e,t,n){let a=[Math.ceil(t[0]/2),Math.ceil(t[1]/2)];if(k.arraysEqual(e,t))return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
return 2 * ivec2(resultUV.yx * vec2(packedTexShape[0], packedTexShape[1]));
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
return 2 * ivec2(resultUV.yx * vec2(${a[0]}, ${a[1]}));
|
|
}
|
|
`;let r=Math.ceil(e[1]/2);return n?`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 packedTexShape = ivec2(ceil(float(outTexShape[0]) / 2.0), ceil(float(outTexShape[1]) / 2.0));
|
|
int texelsInLogicalRow = int(ceil(float(outShape[1]) / 2.0));
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(packedTexShape[0], packedTexShape[1]));
|
|
|
|
int index = resTexRC.x * packedTexShape[1] + resTexRC.y;
|
|
int r = 2 * (index / texelsInLogicalRow);
|
|
int c = imod(index, texelsInLogicalRow) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`:`
|
|
ivec2 getOutputCoords() {
|
|
ivec2 resTexRC = ivec2(resultUV.yx *
|
|
vec2(${a[0]}, ${a[1]}));
|
|
|
|
int index = resTexRC.x * ${a[1]} + resTexRC.y;
|
|
int r = 2 * (index / ${r});
|
|
int c = imod(index, ${r}) * 2;
|
|
|
|
return ivec2(r, c);
|
|
}
|
|
`}function W7(e,t,n){return k.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 So(e){return`offset${e}`}function B7(e){let t=e.name,n="get"+t.charAt(0).toUpperCase()+t.slice(1),a=En();return`
|
|
vec4 ${n}() {
|
|
return ${a.texture2D}(${t}, halfCR);
|
|
}
|
|
`}function V7(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`float ${a}() {return ${n};}`;let[r,s]=e.shapeInfo.texShape;if(r===1&&s===1)return`
|
|
float ${a}() {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let i=So(n);if(t)return`
|
|
float ${a}() {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let[o,l]=e.shapeInfo.texShape;return`
|
|
float ${a}() {
|
|
vec2 uv = uvFromFlat(${o}, ${l}, ${i});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function U7(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=e.shapeInfo.texShape,s=En();if(t)return`
|
|
vec4 ${a}(int index) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom1D(
|
|
packedTexShape[0], packedTexShape[1], index);
|
|
return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`;let i=[Math.ceil(r[0]/2),Math.ceil(r[1]/2)];return`
|
|
vec4 ${a}(int index) {
|
|
vec2 uv = packedUVfrom1D(
|
|
${i[0]}, ${i[1]}, index);
|
|
return ${s.texture2D}(${n}, uv);
|
|
}
|
|
`}function G7(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1);if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int index) {
|
|
${Ju(e)}
|
|
}
|
|
`;let r=e.shapeInfo.texShape,s=r[0],i=r[1];if(i===1&&s===1)return`
|
|
float ${a}(int index) {
|
|
return sampleTexture(${n}, halfCR);
|
|
}
|
|
`;let o=So(n);return i===1?t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / float(${n}TexShape[0]));
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2(0.5, (float(index + ${o}) + 0.5) / ${s}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:s===1?t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2((float(index + ${o}) + 0.5) / float(${n}TexShape[1]), 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = vec2((float(index + ${o}) + 0.5) / ${i}.0, 0.5);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:t?`
|
|
float ${a}(int index) {
|
|
vec2 uv = uvFromFlat(${n}TexShape[0], ${n}TexShape[1], index + ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`:`
|
|
float ${a}(int index) {
|
|
vec2 uv = uvFromFlat(${s}, ${i}, index + ${o});
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function H7(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape,i=s[0],o=s[1],l=En();if(s!=null&&k.arraysEqual(n,s))return t?`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`:`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${o}.0, ${i}.0);
|
|
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`;if(t)return`
|
|
vec4 ${r}(int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${a}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom2D(valuesPerRow, packedTexShape[0], packedTexShape[1], row, col);
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`;let u=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)],p=Math.ceil(n[1]/2);return`
|
|
vec4 ${r}(int row, int col) {
|
|
vec2 uv = packedUVfrom2D(${p}, ${u[0]}, ${u[1]}, row, col);
|
|
return ${l.texture2D}(${a}, uv);
|
|
}
|
|
`}function j7(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape;if(s!=null&&k.arraysEqual(n,s)){if(t)return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let c=s[0],h=s[1];return`
|
|
float ${r}(int row, int col) {
|
|
vec2 uv = (vec2(col, row) + halfCR) / vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}let{newShape:i,keptDims:o}=k.squeezeShape(n),l=i;if(l.length<n.length){let c=Zu(e,l),h=["row","col"];return`
|
|
${Yu(c,t)}
|
|
float ${r}(int row, int col) {
|
|
return ${r}(${Qu(h,o)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col) {
|
|
int index = round(dot(vec2(row, col), vec2(${n[1]}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let u=s[0],p=s[1],d=So(a);return p===1?t?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${a}Shape[1], 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / float(${a}TexShape[0]));
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2(0.5, (index + 0.5) / ${u}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:u===1?t?`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${a}Shape[1], 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / float(${a}TexShape[1]), 0.5);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
float index = dot(vec3(row, col, ${d}), vec3(${n[1]}, 1, 1));
|
|
vec2 uv = vec2((index + 0.5) / ${p}.0, 0.5);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:t?`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${a}Shape[1] + col + ${d};
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${n[1]} + col + ${d};
|
|
vec2 uv = uvFromFlat(${u}, ${p}, index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function q7(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=e.shapeInfo.texShape,i=[Math.ceil(s[0]/2),Math.ceil(s[1]/2)];if(n[0]===1){let c=n.slice(1),h=[1,2],m=Zu(e,c),f=["b","row","col"];return`
|
|
${JC(m,t)}
|
|
vec4 ${r}(int b, int row, int col) {
|
|
return ${r}(${Qu(f,h)});
|
|
}
|
|
`}let o=En();if(t)return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
ivec2 packedTexShape = ivec2(ceil(float(${a}TexShape[0]) / 2.0), ceil(float(${a}TexShape[1]) / 2.0));
|
|
int valuesPerRow = int(ceil(float(${a}Shape[2]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${a}Shape[1]) / 2.0));
|
|
vec2 uv = packedUVfrom3D(
|
|
packedTexShape[0], packedTexShape[1], texelsInBatch, valuesPerRow, b, row, col);
|
|
return ${o.texture2D}(${a}, uv);
|
|
}
|
|
`;let l=i[0],u=i[1],p=Math.ceil(n[2]/2),d=p*Math.ceil(n[1]/2);return`
|
|
vec4 ${r}(int b, int row, int col) {
|
|
vec2 uv = packedUVfrom3D(
|
|
${l}, ${u}, ${d}, ${p}, b, row, col);
|
|
return ${o.texture2D}(${a}, uv);
|
|
}
|
|
`}function K7(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=n[1]*n[2],i=n[2],{newShape:o,keptDims:l}=k.squeezeShape(n),u=o;if(u.length<n.length){let f=Zu(e,u),g=["row","col","depth"];return`
|
|
${Yu(f,t)}
|
|
float ${r}(int row, int col, int depth) {
|
|
return ${r}(${Qu(g,l)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth) {
|
|
int index = round(dot(vec3(row, col, depth),
|
|
vec3(${s}, ${i}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let p=e.shapeInfo.texShape,d=p[0],c=p[1],h=e.shapeInfo.flatOffset;if(c===s&&h==null)return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
int stride1 = ${a}Shape[2];
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(stride1, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = float(row);
|
|
float texC = dot(vec2(col, depth), vec2(${i}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${c}.0, ${d}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;if(c===i&&h==null)return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${a}Shape[1], 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
float texR = dot(vec2(row, col), vec2(${n[1]}, 1));
|
|
float texC = float(depth);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${c}.0, ${d}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let m=So(a);return t?`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int stride0 = ${a}Shape[1] * ${a}Shape[2];
|
|
int stride1 = ${a}Shape[2];
|
|
int index = row * ${s} + col * ${i} + depth + ${m};
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${s} + col * ${i} + depth + ${m};
|
|
vec2 uv = uvFromFlat(${d}, ${c}, index);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function X7(e,t){let n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=En();if(t)return`
|
|
vec4 ${a}(int b2, int b, int row, int col) {
|
|
int valuesPerRow = int(ceil(float(${n}Shape[3]) / 2.0));
|
|
int texelsInBatch = valuesPerRow * int(ceil(float(${n}Shape[2]) / 2.0));
|
|
int index = b * texelsInBatch + (row / 2) * valuesPerRow + (col / 2);
|
|
texelsInBatch *= ${n}Shape[1];
|
|
index = b2 * texelsInBatch + index;
|
|
ivec2 packedTexShape = ivec2(ceil(float(${n}TexShape[0]) / 2.0), ceil(float(${n}TexShape[1]) / 2.0));
|
|
int texR = index / packedTexShape[1];
|
|
int texC = index - texR * packedTexShape[1];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(packedTexShape[1], packedTexShape[0]); return ${r.texture2D}(${n}, uv);
|
|
}
|
|
`;let s=e.shapeInfo.logicalShape,i=s.length,o=e.shapeInfo.texShape,l=[Math.ceil(o[0]/2),Math.ceil(o[1]/2)],u=l[0],p=l[1],d=Math.ceil(s[i-1]/2),c=d*Math.ceil(s[i-2]/2),h="int b, int row, int col",m=`b * ${c} + (row / 2) * ${d} + (col / 2)`;for(let f=2;f<i-1;f++)h=`int b${f}, `+h,c*=s[i-f-1],m=`b${f} * ${c} + `+m;return`
|
|
vec4 ${a}(${h}) {
|
|
int index = ${m};
|
|
int texR = index / ${p};
|
|
int texC = index - texR * ${p};
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${p}, ${u});
|
|
return ${r.texture2D}(${n}, uv);
|
|
}
|
|
`}function Y7(e,t){let n=e.shapeInfo.logicalShape,a=e.name,r="get"+a.charAt(0).toUpperCase()+a.slice(1),s=n[3],i=n[2]*s,o=n[1]*i,{newShape:l,keptDims:u}=k.squeezeShape(n);if(l.length<n.length){let b=Zu(e,l),x=["row","col","depth","depth2"];return`
|
|
${Yu(b,t)}
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
return ${r}(${Qu(x,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
int index = round(dot(vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let p=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,c=d[0],h=d[1],m=`int stride2 = ${a}Shape[3];`,f=`int stride1 = ${a}Shape[2] * stride2;`,g=`int stride0 = ${a}Shape[1] * stride1;`;if(h===o&&p==null)return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
${m}
|
|
${f}
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(stride1, stride2, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = float(row);
|
|
float texC =
|
|
dot(vec3(col, depth, depth2),
|
|
vec3(${i}, ${s}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;if(h===s&&p==null)return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${a}Shape[1] * ${a}Shape[2], ${a}Shape[2], 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}TexShape[1], ${a}TexShape[0]);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
float texR = dot(vec3(row, col, depth),
|
|
vec3(${n[1]*n[2]}, ${n[2]}, 1));
|
|
float texC = float(depth2);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`;let y=So(a);return t?`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
${m}
|
|
${f}
|
|
${g}
|
|
int index = row * stride0 + col * stride1 +
|
|
depth * stride2 + depth2;
|
|
vec2 uv = uvFromFlat(${a}TexShape[0], ${a}TexShape[1], index + ${y});
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`:`
|
|
float ${r}(int row, int col, int depth, int depth2) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} +
|
|
depth * ${s} + depth2;
|
|
vec2 uv = uvFromFlat(${c}, ${h}, index + ${y});
|
|
return sampleTexture(${a}, uv);
|
|
}
|
|
`}function J7(e){let t=e.shapeInfo.logicalShape,n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),r=t[4],s=t[3]*r,i=t[2]*s,o=t[1]*i,{newShape:l,keptDims:u}=k.squeezeShape(t);if(l.length<t.length){let f=Zu(e,l),g=["row","col","depth","depth2","depth3"];return`
|
|
${Yu(f)}
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
return ${a}(${Qu(g,u)});
|
|
}
|
|
`}if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
float index = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${o}, ${i}, ${s}, ${r})) +
|
|
depth3;
|
|
${Ju(e)}
|
|
}
|
|
`;let p=e.shapeInfo.flatOffset,d=e.shapeInfo.texShape,c=d[0],h=d[1];if(h===o&&p==null)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${i}, ${s}, ${r}, 1));
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(h===r&&p==null)return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
float texR = dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]},
|
|
${t[2]*t[3]}, ${t[3]}, 1));
|
|
int texC = depth3;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${h}.0, ${c}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let m=So(n);return`
|
|
float ${a}(int row, int col, int depth, int depth2, int depth3) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${o} + col * ${i} + depth * ${s} +
|
|
depth2 * ${r} + depth3 + ${m};
|
|
vec2 uv = uvFromFlat(${c}, ${h}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Z7(e){let t=e.shapeInfo.logicalShape,n=e.name,a="get"+n.charAt(0).toUpperCase()+n.slice(1),{newShape:r,keptDims:s}=k.squeezeShape(t);if(r.length<t.length){let g=Zu(e,r),y=["row","col","depth","depth2","depth3","depth4"];return`
|
|
${Yu(g)}
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
return ${a}(${Qu(y,s)});
|
|
}
|
|
`}let i=t[5],o=t[4]*i,l=t[3]*o,u=t[2]*l,p=t[1]*u;if(e.shapeInfo.isUniform)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int index = round(dot(
|
|
vec4(row, col, depth, depth2),
|
|
vec4(${p}, ${u}, ${l}, ${o})) +
|
|
dot(
|
|
vec2(depth3, depth4),
|
|
vec2(${i}, 1)));
|
|
${Ju(e)}
|
|
}
|
|
`;let d=e.shapeInfo.flatOffset,c=e.shapeInfo.texShape,h=c[0],m=c[1];if(m===p&&d==null)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
int texR = row;
|
|
float texC = dot(vec4(col, depth, depth2, depth3),
|
|
vec4(${u}, ${l}, ${o}, ${i})) +
|
|
float(depth4);
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${m}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;if(m===i&&d==null)return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
float texR = dot(vec4(row, col, depth, depth2),
|
|
vec4(${t[1]*t[2]*t[3]*t[4]},
|
|
${t[2]*t[3]*t[4]},
|
|
${t[3]*t[4]},
|
|
${t[4]})) + float(depth3);
|
|
int texC = depth4;
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${m}.0, ${h}.0);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`;let f=So(n);return`
|
|
float ${a}(int row, int col, int depth,
|
|
int depth2, int depth3, int depth4) {
|
|
// Explicitly use integer operations as dot() only works on floats.
|
|
int index = row * ${p} + col * ${u} + depth * ${l} +
|
|
depth2 * ${o} + depth3 * ${i} + depth4 + ${f};
|
|
vec2 uv = uvFromFlat(${h}, ${m}, index);
|
|
return sampleTexture(${n}, uv);
|
|
}
|
|
`}function Ju(e){let t=e.name,n=k.sizeFromShape(e.shapeInfo.logicalShape);return n<2?`return ${t};`:`
|
|
for (int i = 0; i < ${n}; i++) {
|
|
if (i == index) {
|
|
return ${t}[i];
|
|
}
|
|
}
|
|
`}function Q7(e,t){let n=e.name,a=n.charAt(0).toUpperCase()+n.slice(1),r="get"+a+"AtOutCoords",s=e.shapeInfo.logicalShape.length,i=t.logicalShape.length,o=YC(e.shapeInfo.logicalShape,t.logicalShape),l=pt(i),u=i-s,p,d=["x","y","z","w","u","v"];s===0?p="":i<2&&o.length>=1?p="coords = 0;":p=o.map(g=>`coords.${d[g+u]} = 0;`).join(`
|
|
`);let c="";i<2&&s>0?c="coords":c=e.shapeInfo.logicalShape.map((g,y)=>`coords.${d[y+u]}`).join(", ");let h="return outputValue;",m=k.sizeFromShape(e.shapeInfo.logicalShape)===1,f=k.sizeFromShape(t.logicalShape)===1;if(s===1&&!m&&!f)h=`
|
|
return vec4(outputValue.xy, outputValue.xy);
|
|
`;else if(m&&!f)i===1?h=`
|
|
return vec4(outputValue.x, outputValue.x, 0., 0.);
|
|
`:h=`
|
|
return vec4(outputValue.x);
|
|
`;else if(o.length){let g=s-2,y=s-1;o.indexOf(g)>-1&&o.indexOf(y)>-1?h="return vec4(outputValue.x);":o.indexOf(g)>-1?h="return vec4(outputValue.x, outputValue.y, outputValue.x, outputValue.y);":o.indexOf(y)>-1&&(h="return vec4(outputValue.xx, outputValue.zz);")}return`
|
|
vec4 ${r}() {
|
|
${l} coords = getOutputCoords();
|
|
${p}
|
|
vec4 outputValue = get${a}(${c});
|
|
${h}
|
|
}
|
|
`}function eY(e,t){let n=e.name,a=n.charAt(0).toUpperCase()+n.slice(1),r="get"+a+"AtOutCoords",s=t.texShape,i=e.shapeInfo.texShape,o=e.shapeInfo.logicalShape.length,l=t.logicalShape.length;if(!e.shapeInfo.isUniform&&o===l&&e.shapeInfo.flatOffset==null&&k.arraysEqual(i,s))return`
|
|
float ${r}() {
|
|
return sampleTexture(${n}, resultUV);
|
|
}
|
|
`;let u=pt(l),p=YC(e.shapeInfo.logicalShape,t.logicalShape),d=l-o,c,h=["x","y","z","w","u","v"];o===0?c="":l<2&&p.length>=1?c="coords = 0;":c=p.map(f=>`coords.${h[f+d]} = 0;`).join(`
|
|
`);let m="";return l<2&&o>0?m="coords":m=e.shapeInfo.logicalShape.map((f,g)=>`coords.${h[g+d]}`).join(", "),`
|
|
float ${r}() {
|
|
${u} coords = getOutputCoords();
|
|
${c}
|
|
return get${a}(${m});
|
|
}
|
|
`}function pt(e){if(e<=1)return"int";if(e===2)return"ivec2";if(e===3)return"ivec3";if(e===4)return"ivec4";if(e===5)return"ivec5";if(e===6)return"ivec6";throw Error(`GPU for rank ${e} is not yet supported`)}function C0(e,t,n){let{newShape:a,keptDims:r}=k.squeezeShape(t),s=t.length,i=e&&s===3&&t[0]===1,o=i?t.slice(1):a,l=!e&&s>1&&!k.arraysEqual(t,n)&&a.length<s||i;return{useSqueezeShape:l,uniformShape:l?o:t,keptDims:r}}function Zu(e,t){let n=JSON.parse(JSON.stringify(e));return n.shapeInfo.logicalShape=t,n}function Qu(e,t){return t.map(n=>e[n]).join(", ")}function tY(e,t,n,a){let r=n.map((p,d)=>{let c={logicalShape:p.shape,texShape:p.isUniform?null:p.texData.texShape,isUniform:p.isUniform,isPacked:p.isUniform?!1:p.texData.isPacked,flatOffset:null};return p.texData!=null&&p.texData.slice!=null&&p.texData.slice.flatOffset>0&&(c.flatOffset=p.texData.slice.flatOffset),{name:t.variableNames[d],shapeInfo:c}}),s=r.map(p=>p.shapeInfo),i={logicalShape:a.shape,texShape:a.texData.texShape,isUniform:!1,isPacked:a.texData.isPacked,flatOffset:null},o=x7(r,i,t),l=_C(e.gl,o),u=e.createProgram(l);return X().get("ENGINE_COMPILE_ONLY")?{program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i,uniformLocations:null,customUniformLocations:null,infLoc:null,nanLoc:null,inShapesLocations:null,inTexShapesLocations:null,outShapeLocation:null,outShapeStridesLocation:null,outTexShapeLocation:null}:Object.assign({program:t,fragmentShader:l,source:o,webGLProgram:u,inShapeInfos:s,outShapeInfo:i},QC(e,t,u))}function QC(e,t,n){let a={},r={},s={},i=[],o,l,u,p=null,d=null;d=e.getUniformLocation(n,"NAN",!1),X().getNumber("WEBGL_VERSION")===1&&(p=e.getUniformLocation(n,"INFINITY",!1));let c=!1;for(let h=0;h<t.variableNames.length;h++){let m=t.variableNames[h];a[m]=e.getUniformLocation(n,m,c),a[`offset${m}`]=e.getUniformLocation(n,`offset${m}`,c),t.enableShapeUniforms&&(r[`${m}Shape`]=e.getUniformLocation(n,`${m}Shape`,c),s[`${m}TexShape`]=e.getUniformLocation(n,`${m}TexShape`,c))}return t.enableShapeUniforms&&(o=e.getUniformLocation(n,"outShape",c),u=e.getUniformLocation(n,"outShapeStrides",c),l=e.getUniformLocation(n,"outTexShape",c)),t.customUniforms&&t.customUniforms.forEach((h,m)=>{i[m]=e.getUniformLocation(n,h.name,c)}),{uniformLocations:a,customUniformLocations:i,infLoc:p,nanLoc:d,inShapesLocations:r,inTexShapesLocations:s,outShapeLocation:o,outShapeStridesLocation:u,outTexShapeLocation:l}}function zk(e,t){if(e.length!==t.length)throw Error(`Binary was compiled with ${e.length} inputs, but was executed with ${t.length} inputs`);e.forEach((n,a)=>{let r=n.logicalShape,s=t[a],i=s.shape;if(!k.arraysEqual(r,i))throw Error(`Binary was compiled with different shapes than the current args. Shapes ${r} and ${i} must match`);if(n.isUniform&&s.isUniform)return;let o=n.texShape,l=s.isUniform?null:s.texData.texShape;if(!k.arraysEqual(o,l))throw Error(`Binary was compiled with different texture shapes than the current args. Shape ${o} and ${l} must match`)})}function nY(e,t,n,a,r){t.program.enableShapeUniforms||(zk(t.inShapeInfos,n),zk([t.outShapeInfo],[a]));let s=a.texData.texture,i=a.texData.texShape;a.texData.isPacked?e.setOutputPackedMatrixTexture(s.texture,i[0],i[1]):e.setOutputMatrixTexture(s.texture,i[0],i[1]),e.setProgram(t.webGLProgram),X().getNumber("WEBGL_VERSION")===1&&t.infLoc!==null&&e.gl.uniform1f(t.infLoc,1/0),t.nanLoc!==null&&e.gl.uniform1f(t.nanLoc,NaN),n.forEach((l,u)=>{let p=t.program.variableNames[u],d=t.uniformLocations[p],c=t.uniformLocations[`offset${p}`],h=t.inShapesLocations[`${p}Shape`],m=t.inTexShapesLocations[`${p}TexShape`];if(h){let{uniformShape:f}=C0(t.program.packedInputs,l.shape,l.texData.texShape);switch(f.length){case 1:e.gl.uniform1iv(h,new Int32Array(f));break;case 2:e.gl.uniform2iv(h,new Int32Array(f));break;case 3:e.gl.uniform3iv(h,new Int32Array(f));break;case 4:e.gl.uniform4iv(h,new Int32Array(f));break;default:break}}if(m&&e.gl.uniform2i(m,l.texData.texShape[0],l.texData.texShape[1]),d!=null){if(l.isUniform){if(k.sizeFromShape(l.shape)<2)e.gl.uniform1f(d,l.uniformValues[0]);else{let f=l.uniformValues;f instanceof Float32Array||(f=new Float32Array(f)),e.gl.uniform1fv(d,f)}return}l.texData.slice!=null&&c!=null&&e.gl.uniform1i(c,l.texData.slice.flatOffset),e.setInputMatrixTexture(l.texData.texture.texture,d,u)}});let o=t.outShapeLocation;if(o)switch(a.shape.length){case 1:e.gl.uniform1iv(o,new Int32Array(a.shape));break;case 2:e.gl.uniform2iv(o,new Int32Array(a.shape));break;case 3:e.gl.uniform3iv(o,new Int32Array(a.shape));break;case 4:e.gl.uniform4iv(o,new Int32Array(a.shape));break;default:break}if(t.outShapeStridesLocation){let l=k.computeStrides(a.shape);switch(a.shape.length){case 2:e.gl.uniform1iv(t.outShapeStridesLocation,new Int32Array(l));break;case 3:e.gl.uniform2iv(t.outShapeStridesLocation,new Int32Array(l));break;case 4:e.gl.uniform3iv(t.outShapeStridesLocation,new Int32Array(l));break;default:break}}t.outTexShapeLocation&&e.gl.uniform2i(t.outTexShapeLocation,a.texData.texShape[0],a.texData.texShape[1]),t.program.customUniforms&&r&&t.program.customUniforms.forEach((l,u)=>{let p=t.customUniformLocations[u],d=r[u];if(l.type==="float")e.gl.uniform1fv(p,d);else if(l.type==="vec2")e.gl.uniform2fv(p,d);else if(l.type==="vec3")e.gl.uniform3fv(p,d);else if(l.type==="vec4")e.gl.uniform4fv(p,d);else if(l.type==="int")e.gl.uniform1iv(p,d);else if(l.type==="ivec2")e.gl.uniform2iv(p,d);else if(l.type==="ivec3")e.gl.uniform3iv(p,d);else if(l.type==="ivec4")e.gl.uniform4iv(p,d);else throw Error(`uniform type ${l.type} is not supported yet.`)}),e.executeProgram()}function aY(e,t,n){let a="";t.concat(n).forEach(i=>{let o=i.texData!=null&&i.texData.slice!=null&&i.texData.slice.flatOffset>0;if(e.enableShapeUniforms&&!i.isUniform){let l=i.texData.texShape,{useSqueezeShape:u,uniformShape:p,keptDims:d}=C0(e.packedInputs,i.shape,l),c="",h="",m="";if(p.length===1&&e.packedInputs){let w=[Math.ceil(l[0]/2),Math.ceil(l[1]/2)];c=`${w[0]>1}_${w[1]>1}`}else if(p.length===2&&!e.packedInputs)h=`${p[0]>1}_${p[1]>1}`;else if(p.length>2&&!e.packedInputs){let w=k.computeStrides(p);m=`${w[0]===l[1]}_${w[w.length-1]===l[1]}`}let f=i.shape.length,g=p.length===2&&k.arraysEqual(i.shape,l),y=k.sizeFromShape(i.shape)===1,b=_.getBroadcastDims(i.shape,n.shape),x=!e.packedInputs&&f===n.shape.length&&k.arraysEqual(l,n.texData.texShape),v=e.packedInputs||p.length>2?"":`${l[0]>1}_${l[1]>1}`;a+=`${f}_${x}_${u?d:""}_${p.length}_${y}_${b}_${g}_${c}_${h}_${m}_${v}_${o}`}else{let l=i.isUniform?"uniform":i.texData.texShape;a+=`${i.shape}_${l}_${o}`}});let r=e.userCode,s=e.constructor.name;return s+="_"+a+"_"+r+`${X().getNumber("WEBGL_VERSION")}`,s}function jn(e){return X().getBool("WEBGL_USE_SHAPES_UNIFORMS")&&e<=4}var rY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outPackingScheme=oc.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=En();this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?Yf(["r","c","d"],e):Io(["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;
|
|
}
|
|
`}},sY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outPackingScheme=oc.DENSE,this.customUniforms=[{name:"texShape",type:"ivec2"}];let t=En();this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length),this.userCode=`
|
|
ivec3 outCoordsFromFlatIndex(int index) {
|
|
${this.enableShapeUniforms?Yf(["r","c","d"],e):Io(["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;
|
|
}
|
|
`}},iY=class{constructor(e){this.variableNames=["A"],this.outTexUsage=da.DOWNLOAD;let t=En();this.outputShape=e,this.userCode=`
|
|
${XC}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},oY=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outTexUsage=da.DOWNLOAD;let t=En();this.outputShape=e,this.userCode=`
|
|
${XC}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
float x = getChannel(getAAtOutCoords(), vec2(coords.y, coords.z));
|
|
${t.output} = encode_float(x);
|
|
}
|
|
`}},lY=class{constructor(e,t=!1){this.variableNames=["A"],this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=En();this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length);let a="result";t&&(a="floor(result * 255. + 0.5)"),this.userCode=`
|
|
${this.enableShapeUniforms?T0():N0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
int flatIndex = getFlatIndex(coords);
|
|
int offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
vec4 values = ${n.texture2D}(A, uv);
|
|
|
|
float result;
|
|
|
|
if(offset == 0) {
|
|
result = values[0];
|
|
} else if(offset == 1) {
|
|
result = values[1];
|
|
} else if(offset == 2) {
|
|
result = values[2];
|
|
} else {
|
|
result = values[3];
|
|
}
|
|
|
|
${n.output} = vec4(${a}, 0., 0., 0.);
|
|
}
|
|
`}},uY=class{constructor(e,t=!1){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.customUniforms=[{name:"texShape",type:"ivec2"}];let n=En();this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length);let a="",r="result";t&&(r="floor(result * 255. + 0.5)");for(let s=0;s<=1;s++)for(let i=0;i<=1;i++){let o=s*2+i;a+=`
|
|
localCoords = coords;
|
|
if(localCoords[2] + ${i} < ${this.enableShapeUniforms?"outShape[2]":`${e[2]}`}) {
|
|
localCoords[2] += ${i};
|
|
if (localCoords[1] + ${s} < ${this.enableShapeUniforms?"outShape[1]":`${e[1]}`}) {
|
|
localCoords[1] += ${s};
|
|
|
|
flatIndex = getFlatIndex(localCoords);
|
|
offset = imod(flatIndex, 4);
|
|
|
|
flatIndex = idiv(flatIndex, 4, 1.);
|
|
|
|
int r = flatIndex / texShape[1];
|
|
int c = imod(flatIndex, texShape[1]);
|
|
vec2 uv = (vec2(c, r) + halfCR) / vec2(texShape[1], texShape[0]);
|
|
values = ${n.texture2D}(A, uv);
|
|
|
|
if (offset == 0) {
|
|
result[${o}] = values[0];
|
|
} else if (offset == 1) {
|
|
result[${o}] = values[1];
|
|
} else if (offset == 2) {
|
|
result[${o}] = values[2];
|
|
} else {
|
|
result[${o}] = values[3];
|
|
}
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
${this.enableShapeUniforms?T0():N0(e)}
|
|
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
|
|
vec4 result = vec4(0.);
|
|
int flatIndex, r, c, offset;
|
|
ivec3 localCoords;
|
|
vec2 uv;
|
|
vec4 values;
|
|
|
|
${a}
|
|
|
|
${n.output} = ${r};
|
|
}
|
|
`}},e_={};Re(e_,{bindVertexProgramAttributeStreams:()=>u_,createBufferFromOutputTexture:()=>d_,createFloat16MatrixTexture:()=>s_,createFloat16PackedMatrixTexture:()=>l_,createFloat32MatrixTexture:()=>r_,createIndexBuffer:()=>a_,createPackedMatrixTexture:()=>o_,createUnsignedBytesMatrixTexture:()=>i_,createVertexBuffer:()=>n_,createVertexShader:()=>t_,downloadByteEncodedFloatMatrixFromOutputTexture:()=>m_,downloadFloat32MatrixFromBuffer:()=>h_,downloadMatrixFromPackedOutputTexture:()=>g_,downloadPackedMatrixFromBuffer:()=>f_,getInternalFormatForFloat16MatrixTexture:()=>E0,getInternalFormatForFloat16PackedMatrixTexture:()=>F0,getInternalFormatForFloat32MatrixTexture:()=>_0,getInternalFormatForPackedMatrixTexture:()=>$0,getInternalFormatForUnsignedBytesMatrixTexture:()=>A0,uploadDenseMatrixToTexture:()=>p_,uploadPixelDataToTexture:()=>c_});function t_(e){let t=En(),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 CC(e,n)}function n_(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 $C(e,t)}function a_(e){let t=new Uint16Array([0,1,2,2,1,3]);return FC(e,t)}function id(e,t,n,a,r,s){RC(t,n);let i=DC(e),o=e.TEXTURE_2D;return ge(e,()=>e.bindTexture(o,i)),ge(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE)),ge(e,()=>e.texParameteri(o,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE)),ge(e,()=>e.texParameteri(o,e.TEXTURE_MIN_FILTER,e.NEAREST)),ge(e,()=>e.texParameteri(o,e.TEXTURE_MAG_FILTER,e.NEAREST)),X().getNumber("WEBGL_VERSION")===1?ge(e,()=>e.texImage2D(o,0,a,t,n,0,r,s,null)):ge(e,()=>e.texStorage2D(o,1,a,t,n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null)),{texture:i,texShape:[n,t]}}function _0(e){return e.internalFormatFloat}function r_(e,t,n,a){let[r,s]=sd(t,n);return id(e,r,s,_0(a),a.textureFormatFloat,e.FLOAT)}function E0(e){return e.internalFormatHalfFloat}function s_(e,t,n,a){let[r,s]=sd(t,n);return id(e,r,s,E0(a),a.textureFormatFloat,a.textureTypeHalfFloat)}function A0(e){return e.downloadTextureFormat}function i_(e,t,n,a){let[r,s]=sd(t,n);return id(e,r,s,A0(a),e.RGBA,e.UNSIGNED_BYTE)}function $0(e){return e.internalFormatPackedFloat}function o_(e,t,n,a){let[r,s]=Ku(t,n);return id(e,r,s,$0(a),e.RGBA,e.FLOAT)}function F0(e){return e.internalFormatPackedHalfFloat}function l_(e,t,n,a){let[r,s]=Ku(t,n);return id(e,r,s,F0(a),e.RGBA,a.textureTypeHalfFloat)}function u_(e,t,n){return ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,n)),px(e,t,"clipSpacePos",n,3,20,0)&&px(e,t,"uv",n,2,20,12)}function p_(e,t,n,a,r,s){ge(e,()=>e.bindTexture(e.TEXTURE_2D,t));let i,o,l;r instanceof Uint8Array?(i=new Uint8Array(n*a*4),o=e.UNSIGNED_BYTE,l=e.RGBA):(i=new Float32Array(n*a*4),o=e.FLOAT,l=s.internalFormatPackedFloat),i.set(r),X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n,a,e.RGBA,o,i)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,l,n,a,0,e.RGBA,o,i)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function c_(e,t,n){ge(e,()=>e.bindTexture(e.TEXTURE_2D,t)),n.data instanceof Uint8Array?X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,n.width,n.height,e.RGBA,e.UNSIGNED_BYTE,n.data)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,n.width,n.height,0,e.RGBA,e.UNSIGNED_BYTE,n.data)):X().getNumber("WEBGL_VERSION")===2?ge(e,()=>e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,n)):ge(e,()=>e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,n)),ge(e,()=>e.bindTexture(e.TEXTURE_2D,null))}function d_(e,t,n,a){let r=e.createBuffer();ge(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,r));let s=4*4*t*n;return ge(e,()=>e.bufferData(e.PIXEL_PACK_BUFFER,s,e.STREAM_READ)),ge(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,0)),ge(e,()=>e.bindBuffer(e.PIXEL_PACK_BUFFER,null)),r}function h_(e,t,n){let a=e,r=new Float32Array(n);return a.bindBuffer(a.PIXEL_PACK_BUFFER,t),a.getBufferSubData(a.PIXEL_PACK_BUFFER,0,r),a.bindBuffer(a.PIXEL_PACK_BUFFER,null),r}function m_(e,t,n,a){let[r,s]=sd(t,n),i=4,o=new Uint8Array(s7(t*n,i));return ge(e,()=>e.readPixels(0,0,r,s,a.downloadTextureFormat,e.UNSIGNED_BYTE,o)),new Float32Array(o.buffer)}function f_(e,t,n,a,r,s,i,o){let l=e,u=new Float32Array(i7(s,i));return l.bindBuffer(l.PIXEL_PACK_BUFFER,t),l.getBufferSubData(l.PIXEL_PACK_BUFFER,0,u),l.bindBuffer(l.PIXEL_PACK_BUFFER,null),u}function g_(e,t,n){let a=new Float32Array(t*n*4);return ge(e,()=>e.readPixels(0,0,n,t,e.RGBA,e.FLOAT,a)),a}var Dh=class{constructor(e){this.outputTexture=null,this.program=null,this.disposed=!1,this.vertexAttrsAreBound=!1,this.itemsToPoll=[];let t=X().getNumber("WEBGL_VERSION");e!=null?(this.gl=e,SC(t,e)):this.gl=Ya(t);let n="WEBGL_color_buffer_float",a="EXT_color_buffer_half_float";if(this.parallelCompilationExtension=this.gl.getExtension("KHR_parallel_shader_compile"),X().getNumber("WEBGL_VERSION")===1){let r="OES_texture_float",s="OES_texture_half_float";if(this.textureFloatExtension=Vp(this.gl,r),ha(this.gl,s))this.textureHalfFloatExtension=Vp(this.gl,s);else if(X().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support half float textures, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.");if(this.colorBufferFloatExtension=this.gl.getExtension(n),ha(this.gl,a))this.colorBufferHalfFloatExtension=Vp(this.gl,a);else if(X().get("WEBGL_FORCE_F16_TEXTURES"))throw new Error("GL context does not support color renderable half floats, yet the environment flag WEBGL_FORCE_F16_TEXTURES is set to true.")}else if(n="EXT_color_buffer_float",ha(this.gl,n))this.colorBufferFloatExtension=this.gl.getExtension(n);else if(ha(this.gl,a))this.colorBufferHalfFloatExtension=this.gl.getExtension(a);else throw new Error("GL context does not support color renderable floats");this.vertexBuffer=n_(this.gl),this.indexBuffer=a_(this.gl),this.framebuffer=MC(this.gl),this.textureConfig=I0(this.gl,this.textureHalfFloatExtension)}get debug(){return X().getBool("DEBUG")}dispose(){if(this.disposed)return;this.program!=null&&console.warn("Disposing a GPGPUContext that still has a bound WebGLProgram. This is probably a resource leak, delete the program with GPGPUContext.deleteProgram before disposing."),this.outputTexture!=null&&console.warn("Disposing a GPGPUContext that still has a bound output matrix texture. This is probably a resource leak, delete the output matrix texture with GPGPUContext.deleteMatrixTexture before disposing.");let e=this.gl;ge(e,()=>e.finish()),ge(e,()=>e.bindFramebuffer(e.FRAMEBUFFER,null)),ge(e,()=>e.deleteFramebuffer(this.framebuffer)),ge(e,()=>e.bindBuffer(e.ARRAY_BUFFER,null)),ge(e,()=>e.bindBuffer(e.ELEMENT_ARRAY_BUFFER,null)),ge(e,()=>e.deleteBuffer(this.indexBuffer)),this.disposed=!0}createFloat32MatrixTexture(e,t){return this.throwIfDisposed(),r_(this.gl,e,t,this.textureConfig)}createFloat16MatrixTexture(e,t){return this.throwIfDisposed(),s_(this.gl,e,t,this.textureConfig)}createUnsignedBytesMatrixTexture(e,t){return this.throwIfDisposed(),i_(this.gl,e,t,this.textureConfig)}uploadPixelDataToTexture(e,t){this.throwIfDisposed(),c_(this.gl,e,t)}uploadDenseMatrixToTexture(e,t,n,a){this.throwIfDisposed(),p_(this.gl,e,t,n,a,this.textureConfig)}createFloat16PackedMatrixTexture(e,t){return this.throwIfDisposed(),l_(this.gl,e,t,this.textureConfig)}createPackedMatrixTexture(e,t){return this.throwIfDisposed(),o_(this.gl,e,t,this.textureConfig)}deleteMatrixTexture(e){this.throwIfDisposed(),this.outputTexture===e&&(cx(this.gl,this.framebuffer),this.outputTexture=null),ge(this.gl,()=>this.gl.deleteTexture(e))}downloadByteEncodedFloatMatrixFromOutputTexture(e,t,n){return this.downloadMatrixDriver(e,()=>m_(this.gl,t,n,this.textureConfig))}downloadPackedMatrixFromBuffer(e,t,n,a,r,s){return f_(this.gl,e,t,n,a,r,s,this.textureConfig)}downloadFloat32MatrixFromBuffer(e,t){return h_(this.gl,e,t)}createBufferFromTexture(e,t,n){this.bindTextureToFrameBuffer(e);let a=d_(this.gl,t,n,this.textureConfig);return this.unbindTextureToFrameBuffer(),a}createAndWaitForFence(){let e=this.createFence(this.gl);return this.pollFence(e)}createFence(e){let t,n;if(X().getBool("WEBGL_FENCE_API_ENABLED")){let a=e,r=a.fenceSync(a.SYNC_GPU_COMMANDS_COMPLETE,0);e.flush(),n=()=>{let s=a.clientWaitSync(r,0,0);return s===a.ALREADY_SIGNALED||s===a.CONDITION_SATISFIED},t=r}else X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")>0?(t=this.beginQuery(),this.endQuery(),n=()=>this.isQueryAvailable(t,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))):n=()=>!0;return{query:t,isFencePassed:n}}downloadMatrixFromPackedTexture(e,t,n){return this.downloadMatrixDriver(e,()=>g_(this.gl,t,n))}createProgram(e){this.throwIfDisposed();let t=this.gl;this.vertexShader==null&&(this.vertexShader=t_(t));let n=EC(t);return ge(t,()=>t.attachShader(n,this.vertexShader)),ge(t,()=>t.attachShader(n,e)),AC(t,n),this.debug&&_h(t,n),this.vertexAttrsAreBound||(this.setProgram(n),this.vertexAttrsAreBound=u_(t,this.program,this.vertexBuffer)),n}deleteProgram(e){this.throwIfDisposed(),e===this.program&&(this.program=null),e!=null&&ge(this.gl,()=>this.gl.deleteProgram(e))}setProgram(e){this.throwIfDisposed(),this.program=e,this.program!=null&&this.debug&&_h(this.gl,this.program),ge(this.gl,()=>this.gl.useProgram(e))}getUniformLocation(e,t,n=!0){return this.throwIfDisposed(),n?OC(this.gl,e,t):LC(this.gl,e,t)}getAttributeLocation(e,t){return this.throwIfDisposed(),ge(this.gl,()=>this.gl.getAttribLocation(e,t))}getUniformLocationNoThrow(e,t){return this.throwIfDisposed(),this.gl.getUniformLocation(e,t)}setInputMatrixTexture(e,t,n){this.throwIfDisposed(),this.throwIfNoProgram(),zC(this.gl,e,t,n)}setOutputMatrixTexture(e,t,n){this.setOutputMatrixTextureDriver(e,n,t)}setOutputPackedMatrixTexture(e,t,n){this.throwIfDisposed();let[a,r]=Ku(t,n);this.setOutputMatrixTextureDriver(e,a,r)}setOutputMatrixWriteRegion(e,t,n,a){this.setOutputMatrixWriteRegionDriver(n,e,a,t)}setOutputPackedMatrixWriteRegion(e,t,n,a){throw new Error("setOutputPackedMatrixWriteRegion not implemented.")}debugValidate(){this.program!=null&&_h(this.gl,this.program),Up(this.gl)}executeProgram(){this.throwIfDisposed(),this.throwIfNoProgram();let e=this.gl;this.debug&&this.debugValidate(),ge(e,()=>e.drawElements(e.TRIANGLES,6,e.UNSIGNED_SHORT,0))}blockUntilAllProgramsCompleted(){this.throwIfDisposed(),ge(this.gl,()=>this.gl.finish())}getQueryTimerExtension(){return this.disjointQueryTimerExtension==null&&(this.disjointQueryTimerExtension=Vp(this.gl,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2?"EXT_disjoint_timer_query_webgl2":"EXT_disjoint_timer_query")),this.disjointQueryTimerExtension}getQueryTimerExtensionWebGL2(){return this.getQueryTimerExtension()}getQueryTimerExtensionWebGL1(){return this.getQueryTimerExtension()}beginQuery(){if(X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let n=this.gl,a=this.getQueryTimerExtensionWebGL2(),r=n.createQuery();return n.beginQuery(a.TIME_ELAPSED_EXT,r),r}let e=this.getQueryTimerExtensionWebGL1(),t=e.createQueryEXT();return e.beginQueryEXT(e.TIME_ELAPSED_EXT,t),t}endQuery(){if(X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION")===2){let t=this.gl,n=this.getQueryTimerExtensionWebGL2();t.endQuery(n.TIME_ELAPSED_EXT);return}let e=this.getQueryTimerExtensionWebGL1();e.endQueryEXT(e.TIME_ELAPSED_EXT)}async waitForQueryAndGetTime(e){return await k.repeatedTry(()=>this.disposed||this.isQueryAvailable(e,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))),this.getQueryTime(e,X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_VERSION"))}getQueryTime(e,t){if(t===0)return null;if(t===2){let n=this.gl;return n.getQueryParameter(e,n.QUERY_RESULT)/1e6}else{let n=this.getQueryTimerExtensionWebGL1();return n.getQueryObjectEXT(e,n.QUERY_RESULT_EXT)/1e6}}isQueryAvailable(e,t){if(t===0)return!0;if(t===2){let n=this.gl,a=this.getQueryTimerExtensionWebGL2(),r=n.getQueryParameter(e,n.QUERY_RESULT_AVAILABLE);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(a.GPU_DISJOINT_EXT)),r&&!this.disjoint}else{let n=this.getQueryTimerExtensionWebGL1(),a=n.getQueryObjectEXT(e,n.QUERY_RESULT_AVAILABLE_EXT);return this.disjoint==null&&(this.disjoint=this.gl.getParameter(n.GPU_DISJOINT_EXT)),a&&!this.disjoint}}pollFence(e){return new Promise(t=>{this.addItemToPoll(()=>e.isFencePassed(),()=>t())})}pollItems(){let e=pY(this.itemsToPoll.map(t=>t.isDoneFn));for(let t=0;t<=e;++t){let{resolveFn:n}=this.itemsToPoll[t];n()}this.itemsToPoll=this.itemsToPoll.slice(e+1)}addItemToPoll(e,t){this.itemsToPoll.push({isDoneFn:e,resolveFn:t}),!(this.itemsToPoll.length>1)&&k.repeatedTry(()=>(this.pollItems(),this.itemsToPoll.length===0))}bindTextureToFrameBuffer(e){this.throwIfDisposed(),Eh(this.gl,e,this.framebuffer),this.debug&&Up(this.gl)}unbindTextureToFrameBuffer(){this.outputTexture!=null?(Eh(this.gl,this.outputTexture,this.framebuffer),this.debug&&Up(this.gl)):cx(this.gl,this.framebuffer)}downloadMatrixDriver(e,t){this.bindTextureToFrameBuffer(e);let n=t();return this.unbindTextureToFrameBuffer(),n}setOutputMatrixTextureDriver(e,t,n){this.throwIfDisposed();let a=this.gl;Eh(a,e,this.framebuffer),this.debug&&Up(a),this.outputTexture=e,ge(a,()=>a.viewport(0,0,t,n)),ge(a,()=>a.scissor(0,0,t,n))}setOutputMatrixWriteRegionDriver(e,t,n,a){this.throwIfDisposed(),ge(this.gl,()=>this.gl.scissor(e,t,n,a))}throwIfDisposed(){if(this.disposed)throw new Error("Attempted to use disposed GPGPUContext.")}throwIfNoProgram(){if(this.program==null)throw new Error("No GPU program is currently set.")}};function pY(e){let t=0;for(;t<e.length&&e[t]();++t);return t-1}var{addImpl:cY,bincountImpl:y_,bincountReduceImpl:dY,ceilImpl:hY,concatImpl:mY,equalImpl:fY,expImpl:gY,expm1Impl:yY,floorImpl:bY,gatherNdImpl:xY,gatherV2Impl:vY,greaterImpl:wY,greaterEqualImpl:kY,lessImpl:IY,lessEqualImpl:SY,linSpaceImpl:NY,logImpl:TY,maxImpl:CY,maximumImpl:_Y,minimumImpl:EY,multiplyImpl:AY,negImpl:$Y,notEqualImpl:FY,prodImpl:DY,rangeImpl:RY,rsqrtImpl:MY,sigmoidImpl:PY,simpleAbsImpl:b_,sliceImpl:OY,sparseFillEmptyRowsImpl:LY,sparseReshapeImpl:zY,sparseSegmentReductionImpl:x_,sqrtImpl:WY,stridedSliceImpl:BY,stringNGramsImpl:VY,stringSplitImpl:UY,stringToHashBucketFastImpl:GY,subImpl:HY,tileImpl:jY,topKImpl:qY,transposeImpl:D0,uniqueImpl:KY}=wT;function v_(e,t){return["x","y","z","w","u","v"].slice(0,t).map(n=>`${e}.${n}`)}function Nn(e,t){return t===1?[e]:v_(e,t)}function XY(e,t){if(e===1)return"rc";let n="";for(let a=0;a<e;a++)n+=t[a],a<e-1&&(n+=",");return n}var YY=class{constructor(e){if(this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.enableShapeUniforms=jn(this.outputShape.length),this.rank===0)this.userCode=`
|
|
void main() {
|
|
setOutput(vec4(getA(), 0., 0., 0.));
|
|
}
|
|
`;else{let t=Nn("rc",this.rank),n=pt(this.rank),a=this.getOutOfBoundsCondition(t),r=this.getSetup(t),s=this.getOutput(t);this.userCode=`
|
|
void main() {
|
|
${n} rc = getOutputCoords();
|
|
|
|
if(${a}) {
|
|
setOutput(vec4(0));
|
|
} else {
|
|
${r}
|
|
|
|
setOutput(vec4(${s}));
|
|
}
|
|
}
|
|
`}}getSourceCoordsArr(e){let t=[];for(let n=0;n<=1;n++)for(let a=0;a<=1;a++){let r=`${n===0?"r":"rp1"}, ${a===0?"c":"cp1"}`;for(let s=2;s<this.rank;s++)r=`${e[e.length-1-s]},`+r;t.push(r)}return t}getOutOfBoundsCondition(e){if(this.rank===1)return`rc > ${this.enableShapeUniforms?"outShape":this.outputShape[0]}`;let t="";for(let n=this.rank-2;n<this.rank;n++)t+=`${e[n]} >= ${this.enableShapeUniforms?`outShape[${n}]`:this.outputShape[n]}`,n<this.rank-1&&(t+="||");return t}getSetup(e){if(this.rank===1)return"";let t=e.slice(-2),n=this.enableShapeUniforms?`outShape[${this.rank} - 1]`:this.outputShape[this.rank-1],a=this.enableShapeUniforms?`outShape[${this.rank} - 2]`:this.outputShape[this.rank-2];return`
|
|
int r = ${t[0]};
|
|
int c = ${t[1]};
|
|
int rp1 = r + 1;
|
|
int cp1 = c + 1;
|
|
|
|
bool cEdge = cp1 >= ${n};
|
|
bool rEdge = rp1 >= ${a};
|
|
`}getOutput(e){let t=this.getSourceCoordsArr(e);return this.rank===1?`getA(rc), (rc + 1 >= ${this.enableShapeUniforms?"outShape":this.outputShape[0]} ? 0. : getA(rc + 1)), 0, 0`:`getA(${t[0]}),
|
|
cEdge ? 0. : getA(${t[1]}),
|
|
rEdge ? 0. : getA(${t[2]}),
|
|
rEdge || cEdge ? 0. : getA(${t[3]})`}},w_=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"}],this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length);let n="";for(let a=0;a<4;a++){let r="thisRC = rc;";a%2===1&&(r+="thisRC.z += 1;"),a>1&&(r+="thisRC.y += 1;"),n+=`
|
|
${r}
|
|
${a>0?"if(thisRC.y < rows && thisRC.z < cols){":""}
|
|
int flatIndex = getFlatIndex(thisRC);
|
|
|
|
ivec3 inputRC = inputCoordsFromReshapedOutCoords(flatIndex);
|
|
vec2 inputRCInnerDims = vec2(float(inputRC.y),float(inputRC.z));
|
|
|
|
result[${a}] =
|
|
getChannel(getA(inputRC.x, inputRC.y, inputRC.z), inputRCInnerDims);
|
|
${a>0?"}":""}
|
|
`}this.userCode=`
|
|
${JY(t,this.enableShapeUniforms)}
|
|
${this.enableShapeUniforms?T0():N0(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 JY(e,t){return`
|
|
ivec3 inputCoordsFromReshapedOutCoords(int index) {
|
|
${t?b7(["r","c","d"],"inputShape"):Io(["r","c","d"],e)}
|
|
return ivec3(r, c, d);
|
|
}
|
|
`}var ZY=class{constructor(e){this.gpgpu=e,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0,this.freeTextures={},this.logEnabled=!1,this.usedTextures={}}acquireTexture(e,t,n){let a=Bk(t,n),r=Vk(e,a,n);r in this.freeTextures||(this.freeTextures[r]=[]),r in this.usedTextures||(this.usedTextures[r]=[]);let s=Wk(e,a,this.gpgpu.gl,this.gpgpu.textureConfig,n);if(this.freeTextures[r].length>0){this.numFreeTextures--,this.numUsedTextures++,this._numBytesFree-=s,this.log();let o=this.freeTextures[r].shift();return this.usedTextures[r].push(o),o}let i;return a===ln.PACKED_2X2_FLOAT32?i=this.gpgpu.createPackedMatrixTexture(e[0],e[1]):a===ln.PACKED_2X2_FLOAT16?i=this.gpgpu.createFloat16PackedMatrixTexture(e[0],e[1]):a===ln.UNPACKED_FLOAT32?i=this.gpgpu.createFloat32MatrixTexture(e[0],e[1]):a===ln.UNPACKED_FLOAT16?i=this.gpgpu.createFloat16MatrixTexture(e[0],e[1]):a===ln.PACKED_4X1_UNSIGNED_BYTE&&(i=this.gpgpu.createUnsignedBytesMatrixTexture(e[0],e[1])),this.usedTextures[r].push(i),this.numUsedTextures++,this._numBytesAllocated+=s,this.log(),i}releaseTexture(e,t,n,a){if(this.freeTextures==null)return;let r=Bk(n,a),s=Vk(t,r,a);s in this.freeTextures||(this.freeTextures[s]=[]);let i=Wk(t,r,this.gpgpu.gl,this.gpgpu.textureConfig,a),o=X().get("WEBGL_DELETE_TEXTURE_THRESHOLD");o!==-1&&this._numBytesAllocated>o?(this.gpgpu.deleteMatrixTexture(e.texture),this._numBytesAllocated-=i):(this.freeTextures[s].push(e),this.numFreeTextures++,this._numBytesFree+=i),this.numUsedTextures--;let l=this.usedTextures[s],u=l.indexOf(e);if(u<0)throw new Error("Cannot release a texture that was never provided by this texture manager");l.splice(u,1),this.log()}log(){if(!this.logEnabled)return;let e=this.numFreeTextures+this.numUsedTextures;console.log("Free/Used",`${this.numFreeTextures} / ${this.numUsedTextures}`,`(${e})`);let t=this._numBytesFree/this._numBytesAllocated;console.log(`Bytes allocated: ${this._numBytesAllocated}`),console.log(`Bytes unused: ${this._numBytesFree} (${Math.round(100*t)}%)`)}get numBytesAllocated(){return this._numBytesAllocated}get numBytesFree(){return this._numBytesFree}getNumUsedTextures(){return this.numUsedTextures}getNumFreeTextures(){return this.numFreeTextures}dispose(){if(this.freeTextures!=null){for(let e in this.freeTextures)this.freeTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});for(let e in this.usedTextures)this.usedTextures[e].forEach(t=>{this.gpgpu.deleteMatrixTexture(t.texture)});this.freeTextures=null,this.usedTextures=null,this.numUsedTextures=0,this.numFreeTextures=0,this._numBytesAllocated=0,this._numBytesFree=0}}};function QY(e,t){let n=e;if(t===n.R32F)return 4;if(t===n.R16F)return 2;if(t===n.RGBA32F||t===e.RGBA)return 16;if(t===n.RGBA16F)return 8;if(t===n.RGBA8)return 4;throw new Error(`Unknown internal format ${t}`)}function Wk(e,t,n,a,r){let s=e9(t,a),i;if(r){let[l,u]=Ku(e[0],e[1]);i=l*u}else{let[l,u]=sd(e[0],e[1]);i=l*u}let o=QY(n,s);return i*o}function e9(e,t){switch(e){case ln.PACKED_2X2_FLOAT32:return $0(t);case ln.PACKED_2X2_FLOAT16:return F0(t);case ln.UNPACKED_FLOAT32:return _0(t);case ln.UNPACKED_FLOAT16:return E0(t);case ln.PACKED_4X1_UNSIGNED_BYTE:return A0(t);default:throw new Error(`Unknown physical texture type ${e}`)}}function t9(e){return X().getBool("WEBGL_RENDER_FLOAT32_ENABLED")?e?ln.PACKED_2X2_FLOAT32:ln.UNPACKED_FLOAT32:e?ln.PACKED_2X2_FLOAT16:ln.UNPACKED_FLOAT16}function Bk(e,t){if(e===da.UPLOAD)return ln.PACKED_2X2_FLOAT32;if(e===da.RENDER||e==null)return t9(t);if(e===da.DOWNLOAD||e===da.PIXELS)return ln.PACKED_4X1_UNSIGNED_BYTE;throw new Error(`Unknown logical texture type ${e}`)}function Vk(e,t,n){return`${e[0]}_${e[1]}_${t}_${n}`}var Cr=class{constructor(e,t){this.variableNames=["A"],this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length),this.userCode=`
|
|
float unaryOperation(float x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
float x = getAAtOutCoords();
|
|
float y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},$a="if (isnan(x)) return x;",n9="return x;",Uk="return abs(x);",a9="return (x >= 0.0) ? x : (exp(x) - 1.0);",r9=$a+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,s9=$a+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,ul="return x;",i9="return 1.0 / (1.0 + exp(-1.0 * x));",o9="return x;",l9=`
|
|
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;
|
|
`,u9=`
|
|
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;
|
|
`,p9=`
|
|
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;
|
|
`,c9="return 1.0 / (1.0 + exp(-1.0 * x));",Js=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length),this.userCode=`
|
|
vec4 unaryOperation(vec4 x) {
|
|
${t}
|
|
}
|
|
|
|
void main() {
|
|
vec4 x = getAAtOutCoords();
|
|
vec4 y = unaryOperation(x);
|
|
|
|
setOutput(y);
|
|
}
|
|
`}},d9=class{constructor(e){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!1,this.outputShape=e,this.enableShapeUniforms=jn(this.outputShape.length);let t=e.length,n=Nn("rc",t),a=pt(t),r=XY(t,n),s=n.slice(-2),i=t<=1?"rc":`vec2(${s.join(",")})`;this.userCode=`
|
|
void main() {
|
|
${a} rc = getOutputCoords();
|
|
vec4 packedInput = getA(${r});
|
|
|
|
setOutput(getChannel(packedInput, ${i}));
|
|
}
|
|
`}},h9=gr.whereImpl,m9=1e-7,f9=1e-4,kb={};function g9(e){return e in kb||(kb[e]={}),kb[e]}var y9=X().getNumber("CPU_HANDOFF_SIZE_THRESHOLD"),b9=600;function x9(){return X().global.screen==null?1024:X().global.screen.height*X().global.screen.width*window.devicePixelRatio*b9/1024/1024}var Jf=class extends cc{constructor(e){if(super(),this.pendingRead=new WeakMap,this.pendingDisposal=new WeakSet,this.dataRefCount=new WeakMap,this.numBytesInGPU=0,this.uploadWaitMs=0,this.downloadWaitMs=0,this.lastGlFlushTime=0,this.warnedAboutMemory=!1,this.pendingDeletes=0,this.disposed=!1,!X().getBool("HAS_WEBGL"))throw new Error("WebGL is not supported on this device");let t;if(e!=null){if(e instanceof Dh)t=e;else{let n=Ya(X().getNumber("WEBGL_VERSION"),e);t=new Dh(n)}this.binaryCache={},this.gpgpuCreatedLocally=!1}else{let n=Ya(X().getNumber("WEBGL_VERSION"));t=new Dh(n),this.binaryCache=g9(X().getNumber("WEBGL_VERSION")),this.gpgpuCreatedLocally=!0}this.gpgpu=t,this.canvas=this.gpgpu.gl.canvas,this.textureManager=new ZY(this.gpgpu),this.numMBBeforeWarning=x9(),this.texData=new pm(this,sr())}nextDataId(){return Jf.nextDataId++}numDataIds(){return this.texData.numDataIds()-this.pendingDeletes}write(e,t,n){if((X().getBool("WEBGL_CHECK_NUMERICAL_PROBLEMS")||X().getBool("DEBUG"))&&this.checkNumericalProblems(e),n==="complex64"&&e!=null)throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");let a={id:this.nextDataId()};return this.texData.set(a,{shape:t,dtype:n,values:e,usage:da.UPLOAD,refCount:1}),a}refCount(e){return this.texData.has(e)?this.texData.get(e).refCount:0}incRef(e){let t=this.texData.get(e);t.refCount++}decRef(e){if(this.texData.has(e)){let t=this.texData.get(e);t.refCount--}}move(e,t,n,a,r){if(X().getBool("DEBUG")&&this.checkNumericalProblems(t),a==="complex64")throw new Error("Cannot write to a complex64 dtype. Please use tf.complex(real, imag).");this.texData.set(e,{shape:n,dtype:a,values:t,usage:da.UPLOAD,refCount:r})}disposeIntermediateTensorInfo(e){this.disposeData(e.dataId)}readSync(e){let t=this.texData.get(e),{values:n,dtype:a,complexTensorInfos:r,slice:s,shape:i,isPacked:o}=t;if(s!=null){let d;o?d=new Js(i,ul):d=new Cr(i,ul);let c=this.runWebGLProgram(d,[{dataId:e,shape:i,dtype:a}],a),h=this.readSync(c.dataId);return this.disposeIntermediateTensorInfo(c),h}if(n!=null)return this.convertAndCacheOnCPU(e);if(a==="string")return n;let l=this.activeTimers!=null,u;l&&(u=k.now());let p;if(a==="complex64"){let d=this.readSync(r.real.dataId),c=this.readSync(r.imag.dataId);p=_.mergeRealAndImagArrays(d,c)}else p=this.getValuesFromTexture(e);return l&&(this.downloadWaitMs+=k.now()-u),this.convertAndCacheOnCPU(e,p)}async read(e){if(this.pendingRead.has(e)){let h=this.pendingRead.get(e);return new Promise(m=>h.push(m))}let t=this.texData.get(e),{values:n,shape:a,slice:r,dtype:s,complexTensorInfos:i,isPacked:o}=t;if(r!=null){let h;o?h=new Js(a,ul):h=new Cr(a,ul);let m=this.runWebGLProgram(h,[{dataId:e,shape:a,dtype:s}],s),f=this.read(m.dataId);return this.disposeIntermediateTensorInfo(m),f}if(n!=null)return this.convertAndCacheOnCPU(e);if(X().getBool("DEBUG")&&!X().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")&&X().getNumber("WEBGL_VERSION")===2)throw new Error("tensor.data() with WEBGL_DOWNLOAD_FLOAT_ENABLED=false and WEBGL_VERSION=2 not yet supported.");let l=null,u;if(s!=="complex64"&&X().get("WEBGL_BUFFER_SUPPORTED")){u=this.decode(e);let h=this.texData.get(u.dataId);l=this.gpgpu.createBufferFromTexture(h.texture.texture,...wh(a))}this.pendingRead.set(e,[]),s!=="complex64"&&await this.gpgpu.createAndWaitForFence();let p;if(s==="complex64"){let h=await Promise.all([this.read(i.real.dataId),this.read(i.imag.dataId)]),m=h[0],f=h[1];p=_.mergeRealAndImagArrays(m,f)}else if(l==null)p=this.getValuesFromTexture(e);else{let h=k.sizeFromShape(a);p=this.gpgpu.downloadFloat32MatrixFromBuffer(l,h)}if(u!=null&&this.disposeIntermediateTensorInfo(u),l!=null){let h=this.gpgpu.gl;ge(h,()=>h.deleteBuffer(l))}let d=this.convertAndCacheOnCPU(e,p),c=this.pendingRead.get(e);return this.pendingRead.delete(e),c.forEach(h=>h(d)),this.pendingDisposal.has(e)&&(this.pendingDisposal.delete(e),this.disposeData(e)&&sr().removeDataId(e,this),this.pendingDeletes--),d}readToGPU(e,t={}){let n=this.texData.get(e),{values:a,shape:r,slice:s,dtype:i,isPacked:o,texture:l}=n;if(i==="complex64")throw new Error("Does not support reading texture for complex64 dtype.");if(s!=null){let c;o?c=new Js(r,ul):c=new Cr(r,ul);let h=this.runWebGLProgram(c,[{dataId:e,shape:r,dtype:i}],i),m=this.readToGPU(h,t);return this.disposeIntermediateTensorInfo(h),m}if(l==null)throw a!=null?new Error("Data is not on GPU but on CPU."):new Error("There is no data on GPU or CPU.");let u=this.decode(e,t.customTexShape),p=sr().makeTensorFromDataId(u.dataId,u.shape,u.dtype),d=this.texData.get(u.dataId);return Object.assign({tensorRef:p},d.texture)}bufferSync(e){let t=this.readSync(e.dataId),n=t;if(e.dtype==="string")try{n=t.map(a=>k.decodeString(a))}catch(a){throw new Error("Failed to decode encoded string bytes into utf-8")}return He(e.shape,e.dtype,n)}checkNumericalProblems(e){if(e!=null)for(let t=0;t<e.length;t++){let n=e[t];if(!NC(n))throw X().getBool("WEBGL_RENDER_FLOAT32_CAPABLE")?Error(`The value ${n} cannot be represented with your current settings. Consider enabling float32 rendering: 'tf.env().set('WEBGL_RENDER_FLOAT32_ENABLED', true);'`):Error(`The value ${n} cannot be represented on this device.`)}}getValuesFromTexture(e){let{shape:t,dtype:n,isPacked:a}=this.texData.get(e),r=k.sizeFromShape(t);if(X().getBool("WEBGL_DOWNLOAD_FLOAT_ENABLED")){let d=this.decode(e),c=this.texData.get(d.dataId),h=this.gpgpu.downloadMatrixFromPackedTexture(c.texture.texture,...wh(t)).subarray(0,r);return this.disposeIntermediateTensorInfo(d),h}let s=X().getBool("WEBGL_PACK")&&a===!0,i=s?Ah(t):t,o=s?new oY(i):new iY(i),l=this.runWebGLProgram(o,[{shape:i,dtype:n,dataId:e}],"float32"),u=this.texData.get(l.dataId),p=this.gpgpu.downloadByteEncodedFloatMatrixFromOutputTexture(u.texture.texture,u.texShape[0],u.texShape[1]).subarray(0,r);return this.disposeIntermediateTensorInfo(l),p}timerAvailable(){return X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0}time(e){let t=this.activeTimers,n=[],a=!1;this.programTimersStack==null?(this.programTimersStack=n,a=!0):this.activeTimers.push(n),this.activeTimers=n,e();let r=k.flatten(this.activeTimers.map(o=>o.query)).filter(o=>o!=null),s=k.flatten(this.activeTimers.map(o=>o.name)).filter(o=>o!=null);this.activeTimers=t,a&&(this.programTimersStack=null);let i={uploadWaitMs:this.uploadWaitMs,downloadWaitMs:this.downloadWaitMs,kernelMs:null,wallMs:null};return(async()=>{if(X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0){let o=await Promise.all(r);i.kernelMs=k.sum(o),i.getExtraProfileInfo=()=>o.map((l,u)=>({name:s[u],ms:l})).map(l=>`${l.name}: ${l.ms}`).join(", ")}else i.kernelMs={error:"WebGL query timers are not supported in this environment."};return this.uploadWaitMs=0,this.downloadWaitMs=0,i})()}memory(){return{unreliable:!1,numBytesInGPU:this.numBytesInGPU,numBytesInGPUAllocated:this.textureManager.numBytesAllocated,numBytesInGPUFree:this.textureManager.numBytesFree}}startTimer(){return X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?this.gpgpu.beginQuery():{startMs:k.now(),endMs:null}}endTimer(e){return X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0?(this.gpgpu.endQuery(),e):(e.endMs=k.now(),e)}async getQueryTime(e){if(X().getNumber("WEBGL_DISJOINT_QUERY_TIMER_EXTENSION_RELIABLE")>0)return this.gpgpu.waitForQueryAndGetTime(e);let t=e;return t.endMs-t.startMs}disposeData(e,t=!1){if(this.pendingDisposal.has(e))return!1;if(!this.texData.has(e))return!0;if(t?this.texData.get(e).refCount=0:this.texData.get(e).refCount--,!t&&this.texData.get(e).refCount>0)return!1;if(this.pendingRead.has(e))return this.pendingDisposal.add(e),this.pendingDeletes++,!1;this.releaseGPUData(e);let{complexTensorInfos:n}=this.texData.get(e);return n!=null&&(this.disposeData(n.real.dataId,t),this.disposeData(n.imag.dataId,t)),this.texData.delete(e),!0}releaseGPUData(e){let{texture:t,dtype:n,texShape:a,usage:r,isPacked:s,slice:i}=this.texData.get(e),o=i&&i.origDataId||e,l=this.dataRefCount.get(o);l>1?this.dataRefCount.set(o,l-1):(this.dataRefCount.delete(o),t!=null&&(this.numBytesInGPU-=this.computeBytes(a,n),this.textureManager.releaseTexture(t,a,r,s)));let u=this.texData.get(e);u.texture=null,u.texShape=null,u.isPacked=!1,u.slice=null}getTexture(e){return this.uploadToGPU(e),this.texData.get(e).texture.texture}getDataInfo(e){return this.texData.get(e)}shouldExecuteOnCPU(e,t=y9){return X().getBool("WEBGL_CPU_FORWARD")&&e.every(n=>this.texData.get(n.dataId).texture==null&&k.sizeFromShape(n.shape)<t)}getGPGPUContext(){return this.gpgpu}where(e){_.warn("tf.where() in webgl locks the UI thread. Call tf.whereAsync() instead");let t=e.dataSync();return h9(e.shape,t)}packedUnaryOp(e,t,n){let a=new Js(e.shape,t),r=this.compileAndRun(a,[e],n);return sr().makeTensorFromDataId(r.dataId,r.shape,r.dtype)}abs(e){if(this.shouldExecuteOnCPU([e])&&e.dtype!=="complex64"){let a=b_(this.texData.get(e.dataId).values);return this.makeOutput(e.shape,e.dtype,a)}if(X().getBool("WEBGL_PACK_UNARY_OPERATIONS"))return this.packedUnaryOp(e,Uk,e.dtype);let t=new Cr(e.shape,Uk),n=this.compileAndRun(t,[e]);return sr().makeTensorFromDataId(n.dataId,n.shape,n.dtype)}makeTensorInfo(e,t,n){let a;if(t==="string"&&n!=null&&n.length>0&&k.isString(n[0])){let r=n.map(s=>k.encodeString(s));a=this.write(r,e,t)}else a=this.write(n,e,t);return this.texData.get(a).usage=null,{dataId:a,shape:e,dtype:t}}makeOutput(e,t,n){let{dataId:a}=this.makeTensorInfo(e,t,n);return sr().makeTensorFromDataId(a,e,t,this)}unpackTensor(e){let t=new d9(e.shape);return this.runWebGLProgram(t,[e],e.dtype)}packTensor(e){let t=new YY(e.shape),n=!0;return this.runWebGLProgram(t,[e],e.dtype,null,n)}packedReshape(e,t){let n=[fi(e.shape),...gi(e.shape)],a={dtype:e.dtype,shape:n,dataId:e.dataId},r=[fi(t),...gi(t)],s=new w_(r,n),i=!0,o=[n],l=this.runWebGLProgram(s,[a],e.dtype,o,i);return{dataId:l.dataId,shape:t,dtype:l.dtype}}decode(e,t){let n=this.texData.get(e),{isPacked:a,shape:r,dtype:s}=n;if(t!=null){let d=k.sizeFromShape(r),c=t[0]*t[1]*4;k.assert(d<=c,()=>"customTexShape is too small. Row * Column * 4 should be equal or larger than the size of the tensor data.")}let i=Ah(r),o;a?o=new sY(i):o=new rY(i);let l=!0,u=[t!=null?t:wh(i)],p=this.runWebGLProgram(o,[{shape:i,dtype:s,dataId:e}],s,u,l,t);return{dtype:s,shape:r,dataId:p.dataId}}runWebGLProgram(e,t,n,a,r=!1,s){let i=this.makeTensorInfo(e.outputShape,n),o=this.texData.get(i.dataId);if(e.packedOutput&&(o.isPacked=!0),e.outPackingScheme===oc.DENSE){let g=s!=null?s:wh(e.outputShape);o.texShape=g.map(y=>y*2)}if(e.outTexUsage!=null&&(o.usage=e.outTexUsage),k.sizeFromShape(i.shape)===0)return o.values=k.getTypedArrayFromDType(i.dtype,0),i;let l=[],u=t.map(g=>{if(g.dtype==="complex64")throw new Error("GPGPUProgram does not support complex64 input. For complex64 dtypes, please separate the program into real and imaginary parts.");let y=this.texData.get(g.dataId);if(y.texture==null){if(!e.packedInputs&&k.sizeFromShape(g.shape)<=X().getNumber("WEBGL_SIZE_UPLOAD_UNIFORM"))return{shape:g.shape,texData:null,isUniform:!0,uniformValues:y.values};e.packedInputs&&(y.isPacked=!0,y.shape=g.shape)}if(this.uploadToGPU(g.dataId),!!y.isPacked!=!!e.packedInputs)g=y.isPacked?this.unpackTensor(g):this.packTensor(g),l.push(g),y=this.texData.get(g.dataId);else if(y.isPacked&&!lc(y.shape,g.shape)){let b=g,x=g.shape;g.shape=y.shape,g=this.packedReshape(g,x),l.push(g),y=this.texData.get(g.dataId),b.shape=x}return{shape:g.shape,texData:y,isUniform:!1}});this.uploadToGPU(i.dataId);let p={shape:i.shape,texData:o,isUniform:!1},d=aY(e,u,p),c=this.getAndSaveBinary(d,()=>tY(this.gpgpu,e,u,p)),h=this.activeTimers!=null,m;h&&(m=this.startTimer()),X().get("ENGINE_COMPILE_ONLY")||nY(this.gpgpu,c,u,p,a),l.forEach(g=>this.disposeIntermediateTensorInfo(g)),h&&(m=this.endTimer(m),this.activeTimers.push({name:e.constructor.name,query:this.getQueryTime(m)}));let f=X().get("WEBGL_FLUSH_THRESHOLD");if(f>0){let g=k.now();g-this.lastGlFlushTime>f&&(this.gpgpu.gl.flush(),this.lastGlFlushTime=g)}if(!X().getBool("WEBGL_LAZILY_UNPACK")&&o.isPacked&&r===!1){let g=this.unpackTensor(i);return this.disposeIntermediateTensorInfo(i),g}return i}compileAndRun(e,t,n,a,r=!1){return n=n||t[0].dtype,this.runWebGLProgram(e,t,n,a,r)}getAndSaveBinary(e,t){return e in this.binaryCache||(this.binaryCache[e]=t()),this.binaryCache[e]}getTextureManager(){return this.textureManager}dispose(){this.disposed||(X().getBool("IS_TEST")||Object.keys(this.binaryCache).forEach(e=>{this.gpgpu.deleteProgram(this.binaryCache[e].webGLProgram),delete this.binaryCache[e]}),this.textureManager.dispose(),this.canvas!=null&&typeof HTMLCanvasElement!="undefined"&&this.canvas instanceof HTMLCanvasElement?this.canvas.remove():this.canvas=null,this.gpgpuCreatedLocally&&(this.gpgpu.program=null,this.gpgpu.dispose()),this.disposed=!0)}floatPrecision(){return this.floatPrecisionValue==null&&(this.floatPrecisionValue=O(()=>{if(!X().get("WEBGL_RENDER_FLOAT32_ENABLED")){let e=X().getBool("DEBUG");X().set("DEBUG",!1);let t=this.abs(ke(1e-8)).dataSync()[0];if(X().set("DEBUG",e),t>0)return 32}return 16})),this.floatPrecisionValue}epsilon(){return this.floatPrecision()===32?m9:f9}uploadToGPU(e){let t=this.texData.get(e),{shape:n,dtype:a,values:r,texture:s,usage:i,isPacked:o}=t;if(s!=null)return;let l=this.activeTimers!=null,u;l&&(u=k.now());let p=t.texShape;if(p==null&&(p=VC(n,o),t.texShape=p),r!=null){let d=Ah(n),c,h=p[1],m=p[0],f=r instanceof Uint8Array||r instanceof Uint8ClampedArray;(o||!f)&&([h,m]=Ku(p[0],p[1])),o?c=new uY(d,f):c=new lY(d,f);let g=f?[m,h]:p,y=this.makeTensorInfo(g,a),b=this.texData.get(y.dataId);f?b.usage=da.PIXELS:b.usage=da.UPLOAD,b.texShape=g,this.gpgpu.uploadDenseMatrixToTexture(this.getTexture(y.dataId),h,m,r);let x=[[m,h]],v=!0,w=this.runWebGLProgram(c,[y],a,x,v),T=this.texData.get(w.dataId);t.texShape=T.texShape,t.isPacked=T.isPacked,t.usage=T.usage,X().get("ENGINE_COMPILE_ONLY")?this.disposeData(w.dataId):(t.texture=T.texture,t.values=null,this.texData.delete(w.dataId)),this.disposeIntermediateTensorInfo(y),l&&(this.uploadWaitMs+=k.now()-u)}else{let d=this.acquireTexture(p,i,a,o);t.texture=d}}convertAndCacheOnCPU(e,t){let n=this.texData.get(e),{dtype:a}=n;return this.releaseGPUData(e),t!=null&&(n.values=v9(t,a)),n.values}acquireTexture(e,t,n,a){if(this.numBytesInGPU+=this.computeBytes(e,n),!this.warnedAboutMemory&&this.numBytesInGPU>this.numMBBeforeWarning*1024*1024){let r=(this.numBytesInGPU/1024/1024).toFixed(2);this.warnedAboutMemory=!0,console.warn(`High memory usage in GPU: ${r} MB, most likely due to a memory leak`)}return this.textureManager.acquireTexture(e,t,a)}computeBytes(e,t){return e[0]*e[1]*k.bytesPerElement(t)}checkCompileCompletion(){for(let[,e]of Object.entries(this.binaryCache))this.checkCompletion_(e)}async checkCompileCompletionAsync(){let e=[];if(this.gpgpu.parallelCompilationExtension){for(let[,t]of Object.entries(this.binaryCache))e.push(this.checkCompletionAsync_(t));return Promise.all(e)}else{for(let[,t]of Object.entries(this.binaryCache)){let n=new Promise(a=>{try{this.checkCompletion_(t),a(!0)}catch(r){throw r}});e.push(n)}return Promise.all(e)}}async checkCompletionAsync_(e){return this.gpgpu.gl.getProgramParameter(e.webGLProgram,this.gpgpu.parallelCompilationExtension.COMPLETION_STATUS_KHR)?this.checkCompletion_(e):(await Fv(),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?(S0(e.source,this.gpgpu.gl.getShaderInfoLog(e.fragmentShader)),new Error("Failed to compile fragment shader.")):new Error("Failed to link vertex and fragment shaders.");return!0}getUniformLocations(){for(let[,e]of Object.entries(this.binaryCache)){let{uniformLocations:t,customUniformLocations:n,infLoc:a,nanLoc:r,inShapesLocations:s,inTexShapesLocations:i,outShapeLocation:o,outShapeStridesLocation:l,outTexShapeLocation:u}=QC(this.gpgpu,e.program,e.webGLProgram);e.uniformLocations=t,e.customUniformLocations=n,e.infLoc=a,e.nanLoc=r,e.inShapesLocations=s,e.inTexShapesLocations=i,e.outShapeLocation=o,e.outShapeStridesLocation=l,e.outTexShapeLocation=u}}};Jf.nextDataId=0;function v9(e,t){if(t==="float32"||t==="complex64")return e;if(t==="int32"||t==="bool"){let n=t==="int32"?new Int32Array(e.length):new Uint8Array(e.length);for(let a=0;a<n.length;++a)n[a]=Math.round(e[a]);return n}else throw new Error(`Unknown dtype ${t}`)}var w9="3.15.0";function k_(){X().set("WEBGL_FORCE_F16_TEXTURES",!0)}Fc.isBrowser()&&qm("webgl",()=>new Jf,2);var k9={forceHalfFloat:k_},I_=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,$l=class{constructor(e,t,n){this.variableNames=["A","B"],this.outputShape=_.assertAndGetBroadcastShape(t,n),this.enableShapeUniforms=jn(this.outputShape.length),this.userCode=`
|
|
float binaryOperation(float a, float b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
float a = getAAtOutCoords();
|
|
float b = getBAtOutCoords();
|
|
setOutput(binaryOperation(a, b));
|
|
}
|
|
`}},Zf=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`,od=class{constructor(e,t,n,a=!1){this.variableNames=["A","B"],this.supportsBroadcasting=!0,this.packedInputs=!0,this.packedOutput=!0,this.outputShape=_.assertAndGetBroadcastShape(t,n);let r=this.outputShape.length;this.enableShapeUniforms=jn(r);let s="";if(a)if(r===0||k.sizeFromShape(this.outputShape)===1)s=`
|
|
result.y = 0.;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else if(s=`
|
|
${pt(r)} coords = getOutputCoords();
|
|
`,r===1)this.enableShapeUniforms?s+=`
|
|
result.y = (coords + 1) >= outShape ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`:s+=`
|
|
result.y = (coords + 1) >= ${this.outputShape[0]} ? 0. : result.y;
|
|
result.z = 0.;
|
|
result.w = 0.;
|
|
`;else{let i=Nn("coords",r);this.enableShapeUniforms?s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[r-2]} + 1) >= outShape[${r} - 2];
|
|
bool nextColOutOfBounds =
|
|
(${i[r-1]} + 1) >= outShape[${r} - 1];
|
|
result.y = nextColOutOfBounds ? 0. : result.y;
|
|
result.z = nextRowOutOfBounds ? 0. : result.z;
|
|
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
|
|
`:s+=`
|
|
bool nextRowOutOfBounds =
|
|
(${i[r-2]} + 1) >= ${this.outputShape[r-2]};
|
|
bool nextColOutOfBounds =
|
|
(${i[r-1]} + 1) >= ${this.outputShape[r-1]};
|
|
result.y = nextColOutOfBounds ? 0. : result.y;
|
|
result.z = nextRowOutOfBounds ? 0. : result.z;
|
|
result.w = nextColOutOfBounds || nextRowOutOfBounds ? 0. : result.w;
|
|
`}this.userCode=`
|
|
vec4 binaryOperation(vec4 a, vec4 b) {
|
|
${e}
|
|
}
|
|
|
|
void main() {
|
|
vec4 a = getAAtOutCoords();
|
|
vec4 b = getBAtOutCoords();
|
|
|
|
vec4 result = binaryOperation(a, b);
|
|
${s}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}};function Un(e){let{inputs:t,backend:n}=e,{x:a}=t;return n.incRef(a.dataId),{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}var I9={kernelName:zi,backendName:"webgl",kernelFunc:Un};function Cs(e){let{inputs:t,backend:n}=e,{real:a,imag:r}=t,s=n.makeTensorInfo(a.shape,"complex64"),i=n.texData.get(s.dataId),o=Un({inputs:{x:a},backend:n}),l=Un({inputs:{x:r},backend:n});return i.complexTensorInfos={real:o,imag:l},s}var S9={kernelName:ym,backendName:"webgl",kernelFunc:Cs},S_="return (a < 0.) ? b * a : a;",N_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function N9(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{alpha:s}=a,i=n.makeTensorInfo([],"float32",k.createScalarValue(s,"float32")),o=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new od(N_,r.shape,i.shape):new $l(S_,r.shape,i.shape),l=n.runWebGLProgram(o,[r,i],"float32");return n.disposeIntermediateTensorInfo(i),l}var T9={kernelName:Wi,backendName:"webgl",kernelFunc:N9},T_="return (a < 0.) ? b * a : a;",C_=`
|
|
vec4 aLessThanZero = vec4(lessThan(a, vec4(0.)));
|
|
return (aLessThanZero * (b * a)) + ((vec4(1.0) - aLessThanZero) * a);
|
|
`;function C9(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new od(C_,a.shape,r.shape):new $l(T_,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],"float32")}var _9={kernelName:Qi,backendName:"webgl",kernelFunc:C9},ep="if (isnan(x)) return x;",E9=`
|
|
if (isnan(a)) return a;
|
|
if (isnan(b)) return b;
|
|
`,A9=`
|
|
result.r = isNaN.r > 0. ? NAN : result.r;
|
|
result.g = isNaN.g > 0. ? NAN : result.g;
|
|
result.b = isNaN.b > 0. ? NAN : result.b;
|
|
result.a = isNaN.a > 0. ? NAN : result.a;
|
|
`;function Je({opSnippet:e,packedOpSnippet:t,cpuKernelImpl:n,dtype:a}){return({inputs:r,backend:s})=>{let{x:i}=r,o=s,l=a||i.dtype;if(o.shouldExecuteOnCPU([i])&&n!=null){let d=o.texData.get(i.dataId),c=n(d.values,l);return o.makeTensorInfo(i.shape,l,c)}let u=X().getBool("WEBGL_PACK_UNARY_OPERATIONS")&&t!=null,p;return u?p=new Js(i.shape,t):p=new Cr(i.shape,e),o.runWebGLProgram(p,[i],l)}}function cn({opSnippet:e,packedOpSnippet:t,checkOutOfBounds:n=!1,supportsComplex:a=!1,cpuKernelImpl:r,dtype:s}){return({inputs:i,backend:o})=>{let{a:l,b:u}=i,p=o;if(a&&l.dtype==="complex64"){let m=p.texData.get(l.dataId),f=p.texData.get(u.dataId),[g,y]=[[m.complexTensorInfos.real,f.complexTensorInfos.real],[m.complexTensorInfos.imag,f.complexTensorInfos.imag]].map(x=>{let[v,w]=x,T={dataId:v.dataId,dtype:v.dtype,shape:l.shape},C={dataId:w.dataId,dtype:w.dtype,shape:u.shape},E=new $l(e,l.shape,u.shape);return p.runWebGLProgram(E,[T,C],fa(v.dtype,w.dtype))}),b=Cs({inputs:{real:g,imag:y},backend:p});return p.disposeIntermediateTensorInfo(g),p.disposeIntermediateTensorInfo(y),b}let d=s||fa(l.dtype,u.dtype);if((l.dtype==="string"||u.dtype==="string"||p.shouldExecuteOnCPU([l,u]))&&r!=null){let m=p.texData.get(l.dataId).values,f=p.texData.get(u.dataId).values,g=l.dtype==="string"?_.fromUint8ToStringArray(m):m,y=l.dtype==="string"?_.fromUint8ToStringArray(f):f,[b,x]=r(l.shape,u.shape,g,y,d),v=p.makeTensorInfo(x,d),w=p.texData.get(v.dataId);return w.values=b,v}let c=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")&&t!=null,h;return c?h=new od(t,l.shape,u.shape,n):h=new $l(e,l.shape,u.shape),p.runWebGLProgram(h,[l,u],d)}}function Qf(e,t=!1){if(e==="linear")return t?o9:n9;if(e==="relu")return t?u9:r9;if(e==="elu")return t?l9:a9;if(e==="relu6")return t?p9:s9;if(e==="prelu")return t?C_:T_;if(e==="leakyrelu")return t?N_:S_;if(e==="sigmoid")return t?c9:i9;throw new Error(`Activation ${e} has not been implemented for the WebGL backend.`)}var __=class{constructor(e,t,n,a=!1,r=!1,s=!1,i=null,o=!1,l=!1){this.variableNames=["matrixA","matrixB"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=n,this.enableShapeUniforms=jn(this.outputShape.length);let u=a?e[1]:e[2],p=Math.ceil(u/2),d=a?"i * 2, rc.y":"rc.y, i * 2",c=r?"rc.z, i * 2":"i * 2, rc.z",h=a?["a.xxyy","a.zzww"]:["a.xxzz","a.yyww"],m=r?["b.xzxz","b.ywyw"]:["b.xyxy","b.zwzw"],f="",g="";i&&(o?f=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${i}
|
|
}`:l?f=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${i}
|
|
}`:f=`vec4 activation(vec4 x) {
|
|
${i}
|
|
}`,g="result = activation(result);");let y=s?"result += getBiasAtOutCoords();":"";s&&this.variableNames.push("bias"),o&&this.variableNames.push("preluActivationWeights"),l&&this.variableNames.push("leakyreluAlpha");let b="rc.x",x="rc.x";e[0]<t[0]?b=`int(min(float(rc.x), ${e[0]-1}.))`:t[0]<e[0]&&(x=`int(min(float(rc.x), ${t[0]-1}.))`),this.userCode=`
|
|
${f}
|
|
// Don't use uniform for sharedDimensionPacked for performance.
|
|
const float sharedDimension = ${p}.0;
|
|
|
|
vec4 dot2x2ARowBCol(ivec3 rc) {
|
|
vec4 result = vec4(0);
|
|
for (int i = 0; i < ${p}; i++) {
|
|
int batchA = ${b};
|
|
int batchB = ${x};
|
|
vec4 a = getMatrixA(batchA, ${d});
|
|
vec4 b = getMatrixB(batchB, ${c});
|
|
|
|
// These swizzled products need to be separately added.
|
|
// See: https://github.com/tensorflow/tfjs/issues/1735
|
|
result += (${h[0]} * ${m[0]});
|
|
result += (${h[1]} * ${m[1]});
|
|
}
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec3 rc = getOutputCoords();
|
|
vec4 result = dot2x2ARowBCol(rc);
|
|
|
|
${y}
|
|
|
|
${g}
|
|
|
|
setOutput(result);
|
|
}
|
|
`}},Gk={REAL:"return areal * breal - aimag * bimag;",IMAG:"return areal * bimag + aimag * breal;"},Hk=class{constructor(e,t,n){this.variableNames=["AReal","AImag","BReal","BImag"],this.outputShape=_.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));
|
|
}
|
|
`}},jk="return a * b;";function R0(e){let{inputs:t,backend:n}=e,{a,b:r}=t,s=_.upcastType(a.dtype,r.dtype);if(a.dtype==="complex64"){let o=n.texData.get(a.dataId),l=n.texData.get(r.dataId),u=new Hk(Gk.REAL,a.shape,r.shape),p=new Hk(Gk.IMAG,a.shape,r.shape),d=[{dataId:o.complexTensorInfos.real.dataId,dtype:o.complexTensorInfos.real.dtype,shape:a.shape},{dataId:o.complexTensorInfos.imag.dataId,dtype:o.complexTensorInfos.imag.dtype,shape:a.shape},{dataId:l.complexTensorInfos.real.dataId,dtype:l.complexTensorInfos.real.dtype,shape:r.shape},{dataId:l.complexTensorInfos.imag.dataId,dtype:l.complexTensorInfos.imag.dtype,shape:r.shape}],c=n.runWebGLProgram(u,d,"float32"),h=n.runWebGLProgram(p,d,"float32"),m=Cs({inputs:{real:c,imag:h},backend:n});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),m}if(n.shouldExecuteOnCPU([a,r])){let o=n.texData.get(a.dataId),l=n.texData.get(r.dataId),[u,p]=AY(a.shape,r.shape,o.values,l.values,s),d=n.makeTensorInfo(p,s),c=n.texData.get(d.dataId);return c.values=u,d}let i;return X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?i=new od(jk,a.shape,r.shape):i=new $l(jk,a.shape,r.shape),n.runWebGLProgram(i,[a,r],s)}var $9={kernelName:Xi,backendName:"webgl",kernelFunc:R0};function F9(e,t,n){let a=[fi(e.shape),...gi(e.shape)],r={dtype:e.dtype,shape:a,dataId:e.dataId},s=[fi(t),...gi(t)],i=new w_(s,a),o=!0,l=[a],u=n.runWebGLProgram(i,[r],e.dtype,l,o);return{dataId:u.dataId,shape:t,dtype:u.dtype}}function me(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{shape:s}=a,i=n,o=k.sizeFromShape(r.shape),l=k.inferFromImplicitShape(s,o),u=k.sizeFromShape(l);k.assert(o===u,()=>`The new shape (${l}) has ${u} elements and the old shape (${r.shape}) has ${o} elements. The new shape and old shape must have the same number of elements.`);let p=i.texData.get(r.dataId);return p.isPacked&&!lc(r.shape,l)&&!(p.texture!==null&&lc(p.shape,l))?F9(r,l,i):(i.incRef(r.dataId),{dataId:r.dataId,shape:l,dtype:r.dtype})}var D9={kernelName:xu,backendName:"webgl",kernelFunc:me},qk=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:a,inSize:r,outSize:s}=e;this.outputShape=[a,s];let i=Math.floor(n/4)*4,o=n%4,l="sumValue += dot(values, ones);";if(t!=null){let p=1/t;l=`sumValue += dot(values * ${k.isInt(p)?p.toPrecision(2):p}, ones);`}let u="";r%n>0&&(u=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return 0.0;
|
|
}
|
|
`),this.userCode=`
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${u}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${i}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${l}
|
|
}
|
|
|
|
int inIdx = inOffset + ${i};
|
|
if (${o===1}) {
|
|
vec4 values = vec4(getValue(batch, inIdx), 0.0, 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1), 0.0, 0.0);
|
|
|
|
${l}
|
|
} else if (${o===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2), 0.0);
|
|
|
|
${l}
|
|
}
|
|
setOutput(sumValue);
|
|
}
|
|
`}},R9=class{constructor(e,t){this.variableNames=["x"];let{windowSize:n,batchSize:a,inSize:r,outSize:s}=e;this.outputShape=[a,s];let i="0.0",o="";t==="prod"?i="1.0":t==="min"?(i="1.0 / 1e-20",o="min"):t==="max"&&(i="-1.0 / 1e-20",o="max");let l=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="sum"?l="sumValue":t==="prod"?l="prodValue":t==="all"?l="allValue":t==="any"&&(l="anyValue");let u=Math.floor(n/4)*4,p=n%4,d=`
|
|
if (${t==="sum"}) {
|
|
sumValue += dot(values, ones);
|
|
} else if (${t==="prod"}) {
|
|
vec2 tmp = vec2(values[0], values[1]) * vec2(values[2], values[3]);
|
|
prodValue *= tmp[0] * tmp[1];
|
|
} else {
|
|
minMaxValue = ${o}(values, minMaxValue);
|
|
if (${t==="min"} || ${t==="max"}) {
|
|
minMaxValue = ${o}(values, minMaxValue);
|
|
bvec4 isNaN = isnan(values);
|
|
if (isNaN.r || isNaN.g || isNaN.b || isNaN.a) {
|
|
minMaxValue = vec4(NAN);
|
|
}
|
|
}
|
|
}
|
|
`,c="vec4";t==="all"?(i="1.0",d=`
|
|
bool reducedAllValue = all(values);
|
|
float floatedReducedAllValue = float(reducedAllValue);
|
|
allValue = float(allValue >= 1.0 && floatedReducedAllValue >= 1.0);
|
|
`,c="bvec4"):t==="any"&&(i="0.0",d=`
|
|
bool reducedAnyValue = any(values);
|
|
float floatedReducedAnyValue = float(reducedAnyValue);
|
|
anyValue = float(anyValue >= 1.0 || floatedReducedAnyValue >= 1.0);
|
|
`,c="bvec4");let h="";r%n>0&&(h=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return initializationValue;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${i};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${h}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${n};
|
|
|
|
vec4 minMaxValue = vec4(${i});
|
|
float prodValue = 1.0;
|
|
float sumValue = 0.0;
|
|
float allValue = 1.0;
|
|
float anyValue = 0.0;
|
|
|
|
for (int i = 0; i < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
${d}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${p===1}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===2}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===3}) {
|
|
${c} values = ${c}(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
${d}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function M9(e){let t=[];for(;t.length===0||t[t.length-1].outSize!==1;){let n=t.length?t[t.length-1].outSize:e[1],a=_.computeOptimalWindowSize(n);t.push({inSize:n,windowSize:a,outSize:Math.ceil(n/a)})}return t}function No(e,t,n,a){let r=M9(e.shape),s=e;for(let i=0;i<r.length;i++){let{inSize:o,windowSize:l,outSize:u}=r[i],p,d;n==="mean"?p=i===0?new qk({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},o):new qk({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u}):p=new R9({windowSize:l,inSize:o,batchSize:e.shape[0],outSize:u},n),d=s,s=a.runWebGLProgram(p,[s],t),d.dataId!==e.dataId&&a.disposeIntermediateTensorInfo(d)}return s}var P9=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[t[s]];this.outputShape=n,this.rank=n.length;let a=pt(this.rank),r=O9(t);this.userCode=`
|
|
void main() {
|
|
${a} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function O9(e){let t=e.length;if(t>6)throw Error(`Transpose for rank ${t} is not yet supported`);let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u","resRC.v"],a=new Array(t);for(let r=0;r<e.length;r++)a[e[r]]=n[r];return a.join()}var L9=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0;let n=new Array(e.length);for(let u=0;u<n.length;u++)n[u]=e[t[u]];if(this.outputShape=n,this.rank=n.length,this.rank>6)throw Error(`Packed transpose for rank ${this.rank} is not yet supported.`);let a=pt(this.rank),r=v_("rc",this.rank),s=new Array(this.rank);for(let u=0;u<t.length;u++)s[t[u]]=r[u];let i=`vec2(${s.slice(-2).join()})`,o=`++${r[this.rank-1]} < ${n[this.rank-1]}`,l=`getChannel(getA(${s.join()}), ${i})`;this.userCode=`
|
|
void main() {
|
|
${a} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result[0] = ${l};
|
|
if(${o}) {
|
|
result[1] = ${l};
|
|
}
|
|
--${r[this.rank-1]};
|
|
if(++${r[this.rank-2]} < ${n[this.rank-2]}) {
|
|
result[2] = ${l};
|
|
if(${o}) {
|
|
result[3] = ${l};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function eg(e,t,n){let a=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new L9(e.shape,t):new P9(e.shape,t);return n.runWebGLProgram(a,[e],e.dtype)}function z9(e,t,n,a){let r=t,s=e.shape.length,i=k.parseAxisParam(r,e.shape),o=i,l=_.getAxesPermutation(o,s),u=l!=null,p=e;u&&(p=eg(e,l,a),o=_.getInnerMostAxes(o.length,s)),_.assertAxesAreInnerMostDims("sum",o,s);let[d,c]=_.computeOutAndReduceShapes(p.shape,o),h=d;n&&(h=_.expandShapeToKeepDim(d,i));let m=k.sizeFromShape(c),f=k.sizeFromShape(e.shape)/m,g=me({inputs:{x:p},attrs:{shape:[f,m]},backend:a}),y=Hm(e.dtype),b=No(g,y,"sum",a),x=me({inputs:{x:b},attrs:{shape:h},backend:a});return a.disposeIntermediateTensorInfo(g),a.disposeIntermediateTensorInfo(b),u&&a.disposeIntermediateTensorInfo(p),x}function tg(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a;return z9(r,s,i,n)}var W9={kernelName:uo,backendName:"webgl",kernelFunc:tg};function pn(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{perm:s}=a,i=n,o=r.shape.length,l=new Array(o);for(let p=0;p<l.length;p++)l[p]=r.shape[s[p]];let u;if(i.shouldExecuteOnCPU([r])){let p=i.texData.get(r.dataId).values,d=D0(p,r.shape,r.dtype,s,l);u=i.makeTensorInfo(l,r.dtype);let c=i.texData.get(u.dataId);c.values=d}else u=eg(r,s,i);return u}var B9={kernelName:go,backendName:"webgl",kernelFunc:pn},E_=1e3;function om({a:e,b:t,transposeA:n,transposeB:a,backend:r,bias:s=null,preluActivationWeights:i=null,leakyreluAlpha:o=0,activation:l=null}){let u=e.shape.length,p=t.shape.length,d=n?e.shape[u-2]:e.shape[u-1],c=a?t.shape[p-1]:t.shape[p-2],h=n?e.shape[u-1]:e.shape[u-2],m=a?t.shape[p-2]:t.shape[p-1],f=e.shape.slice(0,-2),g=t.shape.slice(0,-2),y=k.sizeFromShape(f),b=k.sizeFromShape(g),x=Pu.assertAndGetBroadcastShape(e.shape.slice(0,-2),t.shape.slice(0,-2)).concat([h,m]);k.assert(d===c,()=>`Error in matMul: inner shapes (${d}) and (${c}) of Tensors with shapes ${e.shape} and ${t.shape} and transposeA=${n} and transposeB=${a} must match.`);let v=n?[y,d,h]:[y,h,d],w=a?[b,m,c]:[b,c,m],T=me({inputs:{x:e},backend:r,attrs:{shape:v}}),C=me({inputs:{x:t},backend:r,attrs:{shape:w}}),E=[T,C],$=Math.max(y,b),P=n?T.shape[1]:T.shape[2],F=s!=null,S=i!=null,M=l==="leakyrelu",B=l!=null?Qf(l,!0):null,j=F||S||M||B!=null,q;if((h===1||m===1)&&P>E_&&j===!1){let Q=T,ee=C;n&&(Q=pn({inputs:{x:T},backend:r,attrs:{perm:[0,2,1]}}),E.push(Q)),a&&(ee=pn({inputs:{x:C},backend:r,attrs:{perm:[0,2,1]}}),E.push(ee));let re=m!==1,Z=m===1,ie=Q;re&&(ie=me({inputs:{x:Q},backend:r,attrs:{shape:[$,P,1]}}),E.push(ie));let ae=m===1?2:1,le=ee;Z&&(le=me({inputs:{x:ee},backend:r,attrs:{shape:[$,1,P]}}),E.push(le));let ue=R0({inputs:{a:ie,b:le},backend:r});q=tg({inputs:{x:ue},backend:r,attrs:{axis:ae,keepDims:!0}}),E.push(ue)}else{let Q=fa(e.dtype,t.dtype),ee=new __(v,w,[$,h,m],n,a,F,B,S,M),re=[T,C];if(s!=null&&re.push(s),S&&re.push(i),M){let Z=r.makeTensorInfo([],"float32",k.createScalarValue(o,"float32"));re.push(Z),E.push(Z)}q=r.runWebGLProgram(ee,re,Q)}let K=me({inputs:{x:q},backend:r,attrs:{shape:x}});E.push(q);for(let Q of E)r.disposeIntermediateTensorInfo(Q);return K}function V9(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t,{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a;return om({a:r,b:s,transposeA:l,transposeB:u,backend:n,bias:i,preluActivationWeights:o,leakyreluAlpha:d,activation:p})}var U9={kernelName:ni,backendName:"webgl",kernelFunc:V9},Kk="return abs(x);";function G9(e){let{inputs:t,backend:n}=e,{x:a}=t;if(n.shouldExecuteOnCPU([a])&&a.dtype!=="complex64"){let s=n.texData.get(a.dataId),i=b_(s.values);return n.makeTensorInfo(a.shape,a.dtype,i)}let r;return X().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Js(a.shape,Kk):r=new Cr(a.shape,Kk),n.runWebGLProgram(r,[a],a.dtype)}var H9={kernelName:Dl,backendName:"webgl",kernelFunc:G9},j9=$a+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return acos(x);
|
|
`,q9=Je({opSnippet:j9}),K9={kernelName:Rl,backendName:"webgl",kernelFunc:q9},X9=$a+`
|
|
if (x < 1.0) return NAN;
|
|
return log(x + sqrt(x * x - 1.0));`,Y9=Je({opSnippet:X9}),J9={kernelName:Ml,backendName:"webgl",kernelFunc:Y9},Xk="return a + b;",Z9=cn({opSnippet:Xk,packedOpSnippet:Xk,supportsComplex:!0,cpuKernelImpl:cY}),Q9={kernelName:ys,backendName:"webgl",kernelFunc:Z9},eJ=class{constructor(e,t){this.outputShape=[],this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let n=[];this.variableNames.forEach(r=>{n.push(`float v${r} = get${r}AtOutCoords();`)});let a=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
float result = ${a};
|
|
setOutput(result);
|
|
}
|
|
`}},tJ=class{constructor(e,t){this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.variableNames=t.map((r,s)=>`T${s}`);let n=[];this.variableNames.forEach(r=>{n.push(`vec4 v${r} = get${r}AtOutCoords();`)});let a=this.variableNames.map(r=>`v${r}`).join(" + ");this.userCode=`
|
|
void main() {
|
|
${n.join(`
|
|
`)}
|
|
|
|
vec4 result = ${a};
|
|
setOutput(result);
|
|
}
|
|
`}};function Rh(e){let{inputs:t,backend:n}=e,a=t;if(a.length===1)return Un({inputs:{x:a[0]},backend:n});if(a.length>X().get("WEBGL_MAX_TEXTURES_IN_SHADER")){let o=Math.floor(a.length/2),l=Rh({inputs:a.slice(0,o),backend:n}),u=Rh({inputs:a.slice(o),backend:n});return Rh({inputs:[l,u],backend:n})}let r=a.map(o=>o.dtype).reduce((o,l)=>fa(o,l)),s=a.map(o=>o.shape),i=X().getBool("WEBGL_PACK")?new tJ(a[0].shape,s):new eJ(a[0].shape,s);return n.runWebGLProgram(i,a,r)}var nJ={kernelName:vi,backendName:"webgl",kernelFunc:Rh};function aJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=k.parseAxisParam(s,r.shape),u=l,p=_.getAxesPermutation(u,o),d=r;p!=null&&(d=pn({inputs:{x:r},backend:n,attrs:{perm:p}}),u=_.getInnerMostAxes(u.length,o)),_.assertAxesAreInnerMostDims("all",u,o);let[c,h]=_.computeOutAndReduceShapes(d.shape,u),m=k.sizeFromShape(h),f=me({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"all",n),y;if(i){let b=_.expandShapeToKeepDim(c,l);y=me({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=me({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var rJ={kernelName:Pl,backendName:"webgl",kernelFunc:aJ};function sJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=k.parseAxisParam(s,r.shape),u=l,p=_.getAxesPermutation(u,o),d=r;p!=null&&(d=pn({inputs:{x:r},backend:n,attrs:{perm:p}}),u=_.getInnerMostAxes(u.length,o)),_.assertAxesAreInnerMostDims("any",u,o);let[c,h]=_.computeOutAndReduceShapes(d.shape,u),m=k.sizeFromShape(h),f=me({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"any",n),y;if(i){let b=_.expandShapeToKeepDim(c,l);y=me({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=me({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var iJ={kernelName:Ol,backendName:"webgl",kernelFunc:sJ},oJ=class{constructor(e,t,n){this.variableNames=["A"];let{windowSize:a,batchSize:r,outSize:s}=e;n||this.variableNames.push("bestIndicesA"),this.outputShape=[r,s];let i=t==="max"?">":"<",o=n?"inOffset + i;":"round(getBestIndicesA(batch, inOffset + i));";this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = outIdx * ${a};
|
|
|
|
int bestIndex = inOffset;
|
|
float bestValue = getA(batch, bestIndex);
|
|
|
|
for (int i = 0; i < ${a}; i++) {
|
|
int inIdx = ${o};
|
|
float candidate = getA(batch, inIdx);
|
|
if (candidate ${i} bestValue) {
|
|
bestValue = candidate;
|
|
bestIndex = inIdx;
|
|
}
|
|
}
|
|
setOutput(float(bestIndex));
|
|
}
|
|
`}},lJ=class{constructor(e,t,n,a){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,k.assert(e.length>2,()=>`Packed arg${n.charAt(0).toUpperCase()+n.slice(1)} supports only inputs with rank above 2.`);let r=e[e.length-1],s=Math.ceil(r/t);this.outputShape=e.slice(0,-1),s>1&&this.outputShape.push(s),a||this.variableNames.push("bestIndicesA");let i=this.outputShape,o=i.length,l=pt(o),u=Nn("coords",o),p,d;if(s===1){d=o+1;let C=pt(d);p=`
|
|
${C} sourceLocR = ${C}(${u.join()}, 0);
|
|
++${u[o-1]};
|
|
${C} sourceLocG = ${C}(${u.join()}, 0);
|
|
++${u[o-2]};
|
|
${C} sourceLocA = ${C}(${u.join()}, 0);
|
|
--${u[o-1]};
|
|
${C} sourceLocB = ${C}(${u.join()}, 0);
|
|
--${u[o-2]};`}else d=o,p=`
|
|
${l} sourceLocR = coords;
|
|
++${u[o-1]};
|
|
${l} sourceLocG = coords;
|
|
++${u[o-2]};
|
|
${l} sourceLocA = coords;
|
|
--${u[o-1]};
|
|
${l} sourceLocB = coords;
|
|
--${u[o-2]};`;let c=["x","y","z","w","u","v"].slice(0,d),h="."+c[d-1],m=c.map(C=>"int "+C),f=Nn("sourceLocR",d-1).concat("inIdx.r"),g=Nn("sourceLocG",d-1).concat("inIdx.g"),y=Nn("sourceLocB",d-1).concat("inIdx.b"),b=Nn("sourceLocA",d-1).concat("inIdx.a"),x=n==="max"?"greaterThan":"lessThan",v=a?"":`
|
|
inIdx = round(vec4(getBestIndicesAChannel(${f.join()}),
|
|
getBestIndicesAChannel(${g.join()}),
|
|
getBestIndicesAChannel(${y.join()}),
|
|
getBestIndicesAChannel(${b.join()})));`,w=`vec4(
|
|
getAChannel(${f.join()}),
|
|
hasNextCol ? getAChannel(${g.join()}) : 0.,
|
|
hasNextRow ? getAChannel(${y.join()}) : 0.,
|
|
hasNextRow && hasNextCol ? getAChannel(${b.join()}) : 0.)`,T=a?"":`
|
|
float getBestIndicesAChannel(${m.join()}) {
|
|
return getChannel(getBestIndicesA(${c.join()}),
|
|
vec2(${c.slice(-2).join()}));
|
|
}`;this.userCode=`
|
|
float getAChannel(${m.join()}) {
|
|
return getChannel(getA(${c.join()}),
|
|
vec2(${c.slice(-2).join()}));
|
|
}
|
|
${T}
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
bool hasNextCol = ${u[o-1]} < ${i[o-1]-1};
|
|
bool hasNextRow = ${u[o-2]} < ${i[o-2]-1};
|
|
${p}
|
|
ivec4 srcIdx = ivec4(sourceLocR${h}, sourceLocG${h},
|
|
sourceLocB${h}, sourceLocA${h}) * ${t};
|
|
ivec4 inIdx = srcIdx;
|
|
vec4 bestIndex = vec4(inIdx);
|
|
vec4 bestValue = ${w};
|
|
|
|
for (int i = 0; i < ${t}; i++) {
|
|
inIdx = srcIdx;
|
|
${v}
|
|
vec4 candidate = ${w};
|
|
bvec4 nan = isnan(candidate);
|
|
bvec4 replace = bvec4(
|
|
vec4(${x}(candidate, bestValue)) * (vec4(1.0) - vec4(nan)));
|
|
|
|
bestValue = vec4(replace.x ? candidate.x : bestValue.x,
|
|
replace.y ? candidate.y : bestValue.y,
|
|
replace.z ? candidate.z : bestValue.z,
|
|
replace.w ? candidate.w : bestValue.w);
|
|
bestIndex = mix(bestIndex, vec4(inIdx), vec4(replace));
|
|
srcIdx++;
|
|
}
|
|
setOutput(bestIndex);
|
|
}
|
|
`}};function A_(e,t,n,a=null){let r=t.shape[0],s=t.shape[1];a!=null&&(r=a.shape[0],s=a.shape[1]);let i=_.computeOptimalWindowSize(s),o={windowSize:i,inSize:s,batchSize:r,outSize:Math.ceil(s/i)},l=new oJ(o,n,a==null),u=[t];a!=null&&u.push(a);let p=e.runWebGLProgram(l,u,"int32");if(p.shape[1]===1)return p;let d=A_(e,t,n,p);return e.disposeIntermediateTensorInfo(p),d}function $_(e,t,n,a=null){let r=a!=null?a.shape:t.shape,s=r[r.length-1],i=_.computeOptimalWindowSize(s),o=new lJ(r,i,n,a==null),l=a==null?[t]:[t,a],u=e.runWebGLProgram(o,l,"int32");if(u.shape.length===t.shape.length){let p=$_(e,t,n,u);return e.disposeIntermediateTensorInfo(u),p}return u}function F_(e,t,n,a){let r=[n];if(_.assertAxesAreInnerMostDims("arg"+a.charAt(0).toUpperCase()+a.slice(1),r,t.shape.length),!X().getBool("WEBGL_PACK_REDUCE")||t.shape.length<=2){let s=[],i=e.texData.get(t.dataId),o=i!==null&&i.isPacked,l=t;o&&(l=e.unpackTensor(t),s.push(l));let[u,p]=_.computeOutAndReduceShapes(l.shape,r),d=k.sizeFromShape(p),c=me({inputs:{x:l},backend:e,attrs:{shape:[-1,d]}});s.push(c);let h=A_(e,c,a);s.push(h);let m=me({inputs:{x:h},backend:e,attrs:{shape:u}});return s.forEach(f=>e.disposeIntermediateTensorInfo(f)),m}return $_(e,t,a)}function uJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=k.parseAxisParam(s,r.shape),o=_.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=pn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=_.getInnerMostAxes(i.length,l.shape.length)),_.assertAxesAreInnerMostDims("argMax",[i[0]],l.shape.length);let p=F_(n,l,i[0],"max");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var pJ={kernelName:wi,backendName:"webgl",kernelFunc:uJ};function cJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s}=a,i=k.parseAxisParam(s,r.shape),o=_.getAxesPermutation(i,r.shape.length),l=r,u=[];o!=null&&(l=pn({inputs:{x:r},backend:n,attrs:{perm:o}}),u.push(l),i=_.getInnerMostAxes(i.length,l.shape.length)),_.assertAxesAreInnerMostDims("argMin",[i[0]],l.shape.length);let p=F_(n,l,i[0],"min");return u.forEach(d=>n.disposeIntermediateTensorInfo(d)),p}var dJ={kernelName:dc,backendName:"webgl",kernelFunc:cJ},hJ=$a+`
|
|
if (abs(x) > 1.) {
|
|
return NAN;
|
|
}
|
|
return asin(x);
|
|
`,mJ=Je({opSnippet:hJ}),fJ={kernelName:Ll,backendName:"webgl",kernelFunc:mJ},gJ=$a+"return log(x + sqrt(x * x + 1.0));",yJ=Je({opSnippet:gJ}),bJ={kernelName:zl,backendName:"webgl",kernelFunc:yJ},xJ=$a+`
|
|
return atan(x);
|
|
`,vJ=Je({opSnippet:xJ}),wJ={kernelName:Wl,backendName:"webgl",kernelFunc:vJ},kJ=E9+`
|
|
return atan(a, b);
|
|
`,IJ=`
|
|
vec4 result = atan(a, b);
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+A9+`
|
|
return result;
|
|
`,SJ=cn({opSnippet:kJ,packedOpSnippet:IJ}),NJ={kernelName:Vl,backendName:"webgl",kernelFunc:SJ},TJ=$a+`
|
|
if ((x < -1.0) || (x > 1.0)) return NAN;
|
|
return (log(1.0 + x) - log(1.0 - x)) / 2.0;`,CJ=Je({opSnippet:TJ}),_J={kernelName:Bl,backendName:"webgl",kernelFunc:CJ},uc=class{constructor(e,t,n,a=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideHeight,o=e.strideWidth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterHeight,d=e.effectiveFilterWidth,c=e.padInfo.top,h=e.padInfo.left;this.outputShape=e.outShape;let m=t==="avg",f=`((batch * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + d`,g=`(xR * ${e.inWidth} + xC) * ${e.inChannels} + d`,y="0.0";if(m||(y="-1.0 / 1e-20"),n){let C=">=";this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${c}, ${h});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
float avgValue = 0.0;
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${d};
|
|
wC += ${u}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xR, xC, d);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${C} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${a?r?f:g:`wR * ${d} + wC`};
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let b="max",x=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(x="avgValue / count");let v=Math.floor(s/4)*4,w=s%4,T=`
|
|
if (${m}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${b}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec2 strides = ivec2(${i}, ${o});
|
|
const ivec2 pads = ivec2(${c}, ${h});
|
|
const float initializationValue = ${y};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xR, int xC, int d) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xR, xC, d);
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// max/min x(?, ?, d) to get y(yR, yC, d).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${y});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wR = 0; wR < ${p};
|
|
wR += ${l}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${v}; wC += 4) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
getValue(batch, xR, xC + 3 * ${u}, d)
|
|
);
|
|
|
|
${T}
|
|
}
|
|
|
|
int xC = xCCorner + ${v};
|
|
if (${w===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${w===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
} else if (${w===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xR, xC, d),
|
|
getValue(batch, xR, xC + ${u}, d),
|
|
getValue(batch, xR, xC + 2 * ${u}, d),
|
|
initializationValue
|
|
);
|
|
|
|
${T}
|
|
}
|
|
}
|
|
setOutput(${x});
|
|
}
|
|
`}},M0=class{constructor(e,t,n,a=!1,r=!1){if(this.variableNames=["x"],t==="avg"&&n)throw new Error("Cannot compute positions for average pool.");let s=e.filterWidth,i=e.strideDepth,o=e.strideHeight,l=e.strideWidth,u=e.dilationDepth,p=e.dilationHeight,d=e.dilationWidth,c=e.effectiveFilterDepth,h=e.effectiveFilterHeight,m=e.effectiveFilterWidth,f=e.padInfo.front,g=e.padInfo.top,y=e.padInfo.left;this.outputShape=e.outShape;let b=t==="avg",x="0.0";if(b||(x="-1.0 / 1e-20"),n){let $=">=";this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${f}, ${g}, ${y});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, ch) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
float minMaxValue = 0.0;
|
|
float minMaxValueFound = 0.0;
|
|
int minMaxPosition = 0;
|
|
|
|
for (int wD = 0; wD < ${c};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${p}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${m};
|
|
wC += ${d}) {
|
|
int xC = xCCorner + wC;
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float value = getX(batch, xD, xR, xC, ch);
|
|
|
|
// If a min / max value has already been found, use it. If not,
|
|
// use the current value.
|
|
float currMinMaxValue = mix(
|
|
value, minMaxValue, minMaxValueFound);
|
|
if (value ${$} currMinMaxValue) {
|
|
minMaxValue = value;
|
|
minMaxValueFound = 1.0;
|
|
minMaxPosition = ${a?r?`(((batch * ${e.inDepth} + xD) * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`((xD * ${e.inHeight} + xR) * ${e.inWidth} + xC) * ${e.inChannels} + ch`:`wD * ${h} * ${m} +
|
|
wR * ${m} + wC`};
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(float(minMaxPosition));
|
|
}
|
|
`;return}let v="max",w=`${t}(${t}(${t}(minMaxValue[0], minMaxValue[1]), minMaxValue[2]), minMaxValue[3])`;t==="avg"&&(w="avgValue / count");let T=Math.floor(s/4)*4,C=s%4,E=`
|
|
if (${b}) {
|
|
avgValue += dot(values, ones);
|
|
} else {
|
|
minMaxValue = ${v}(values, minMaxValue);
|
|
}
|
|
`;this.userCode=`
|
|
const ivec3 strides =
|
|
ivec3(${i}, ${o}, ${l});
|
|
const ivec3 pads = ivec3(${f}, ${g}, ${y});
|
|
const float initializationValue = ${x};
|
|
const vec4 ones = vec4(1.0, 1.0, 1.0, 1.0);
|
|
|
|
float count = 0.0;
|
|
|
|
float getValue(int batch, int xD, int xR, int xC, int ch) {
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
return initializationValue;
|
|
}
|
|
count += 1.0;
|
|
return getX(batch, xD, xR, xC, ch);
|
|
}
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 xCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xDCorner = xCorner.x;
|
|
int xRCorner = xCorner.y;
|
|
int xCCorner = xCorner.z;
|
|
|
|
// max/min x(?, ?, ?, d) to get y(yD, yR, yC, ch).
|
|
// ? = to be determined
|
|
vec4 minMaxValue = vec4(${x});
|
|
float avgValue = 0.0;
|
|
count = 0.0;
|
|
|
|
for (int wD = 0; wD < ${c};
|
|
wD += ${u}) {
|
|
int xD = xDCorner + wD;
|
|
|
|
if (xD < 0 || xD >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${h};
|
|
wR += ${p}) {
|
|
int xR = xRCorner + wR;
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${T}; wC += 4) {
|
|
int xC = xCCorner + wC * ${d};
|
|
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${d}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${d}, ch),
|
|
getValue(batch, xD, xR, xC + 3 * ${d}, ch)
|
|
);
|
|
|
|
${E}
|
|
}
|
|
|
|
int xC = xCCorner + ${T};
|
|
if (${C===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${d}, ch),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
} else if (${C===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, xD, xR, xC, ch),
|
|
getValue(batch, xD, xR, xC + ${d}, ch),
|
|
getValue(batch, xD, xR, xC + 2 * ${d}, ch),
|
|
initializationValue
|
|
);
|
|
|
|
${E}
|
|
}
|
|
}
|
|
setOutput(${w});
|
|
}
|
|
}
|
|
`}};function EJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;Xu(r,"avgPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;k.assert(_.eitherStridesOrDilationsAreOne(i,u),()=>`Error in avgPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=_.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&k.arraysEqual(p.inShape,p.outShape))return Un({inputs:{x:r},backend:n});let d=new uc(p,"avg",!1);return n.runWebGLProgram(d,[r],"float32")}var AJ={kernelName:ki,backendName:"webgl",kernelFunc:EJ};function $J(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dimRoundingMode:l,dataFormat:u}=a,p=[1,1,1],d=_.computePool3DInfo(r.shape,s,i,p,o,l,u),c=new M0(d,"avg",!1);return n.runWebGLProgram(c,[r],"float32")}var FJ={kernelName:hc,backendName:"webgl",kernelFunc:$J},DJ=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterHeight,l=e.effectiveFilterWidth,u=o-1-e.padInfo.top,p=l-1-e.padInfo.left,d=1/(t*n);this.userCode=`
|
|
const ivec2 pads = ivec2(${u}, ${p});
|
|
const float avgMultiplier = float(${d});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${o};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${l};
|
|
wC+= ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},RJ=class{constructor(e){this.variableNames=["dy"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,a=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.effectiveFilterDepth,d=e.effectiveFilterHeight,c=e.effectiveFilterWidth,h=p-1-e.padInfo.front,m=d-1-e.padInfo.top,f=c-1-e.padInfo.left,g=1/(t*n*a);this.userCode=`
|
|
const ivec3 pads = ivec3(${h}, ${m}, ${f});
|
|
const float avgMultiplier = float(${g});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, d) with pos mask(:, :, :, ch) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${p};
|
|
wD += ${o}) {
|
|
float dyD = float(dyDCorner + wD) / ${r}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${d};
|
|
wR += ${l}) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${c};
|
|
wC += ${u}) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
|
|
dotProd += dyValue * avgMultiplier;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function MJ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=a,d=[1,1,1],c=_.computePool3DInfo(i.shape,o,l,d,u,p),h=new RJ(c);return n.runWebGLProgram(h,[r],i.dtype)}var PJ={kernelName:mm,backendName:"webgl",kernelFunc:MJ};function OJ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s;Xu([r,s],"avgPoolGrad");let{filterSize:o,strides:l,pad:u}=a,p=_.computePool2DInfo(i.shape,o,l,1,u),d=new DJ(p);return n.runWebGLProgram(d,[r],i.dtype)}var LJ={kernelName:hm,backendName:"webgl",kernelFunc:OJ};function zJ(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;return om({a:r,b:s,transposeA:i,transposeB:o,backend:n})}var WJ={kernelName:Ii,backendName:"webgl",kernelFunc:zJ},BJ=class{constructor(e,t,n,a,r,s){this.outputShape=[],this.variableNames=["x","mean","variance"],_.assertAndGetBroadcastShape(e,t),_.assertAndGetBroadcastShape(e,n);let i="0.0";a!=null&&(_.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="1.0";r!=null&&(_.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
float x = getXAtOutCoords();
|
|
float mean = getMeanAtOutCoords();
|
|
float variance = getVarianceAtOutCoords();
|
|
float offset = ${i};
|
|
float scale = ${o};
|
|
float inv = scale * inversesqrt(variance + float(${s}));
|
|
setOutput(dot(vec3(x, -mean, offset), vec3(inv, inv, 1)));
|
|
}
|
|
`}},VJ=class{constructor(e,t,n,a,r,s){this.packedInputs=!0,this.packedOutput=!0,this.variableNames=["x","mean","variance"],_.assertAndGetBroadcastShape(e,t),_.assertAndGetBroadcastShape(e,n);let i="vec4(0.0)";a!=null&&(_.assertAndGetBroadcastShape(e,a),this.variableNames.push("offset"),i="getOffsetAtOutCoords()");let o="vec4(1.0)";r!=null&&(_.assertAndGetBroadcastShape(e,r),this.variableNames.push("scale"),o="getScaleAtOutCoords()"),this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
vec4 offset = ${i};
|
|
vec4 scale = ${o};
|
|
|
|
vec4 x = getXAtOutCoords();
|
|
vec4 mean = getMeanAtOutCoords();
|
|
vec4 variance = getVarianceAtOutCoords();
|
|
|
|
vec4 inv = scale * inversesqrt(variance + vec4(${s}));
|
|
|
|
setOutput((x - mean) * inv + offset);
|
|
}
|
|
`}},UJ=({inputs:e,backend:t,attrs:n})=>{let{x:a,mean:r,variance:s,offset:i,scale:o}=e;k.assert(r.shape.length===s.shape.length,()=>"Batch normalization gradient requires mean and variance to have equal ranks."),k.assert(i==null||r.shape.length===i.shape.length,()=>"Batch normalization gradient requires mean and offset to have equal ranks."),k.assert(o==null||r.shape.length===o.shape.length,()=>"Batch normalization gradient requires mean and scale to have equal ranks.");let{varianceEpsilon:l}=n;l==null&&(l=.001);let u=[a,r,s],p=null;i!=null&&(p=i.shape,u.push(i));let d=null;o!=null&&(d=o.shape,u.push(o));let c=X().getBool("WEBGL_PACK_NORMALIZATION")?new VJ(a.shape,r.shape,s.shape,p,d,l):new BJ(a.shape,r.shape,s.shape,p,d,l);return t.runWebGLProgram(c,u,u[0].dtype)},GJ={kernelName:Oi,backendName:"webgl",kernelFunc:UJ},HJ=class{constructor(e){this.variableNames=["source"],this.outputShape=e,this.rank=e.length;let t=pt(this.rank);this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let n=jJ(this.rank),a,r=e.map((s,i)=>`sourceLoc.${mx[i]} = start[${i}] + coords.${mx[i]};`);a=`
|
|
${t} sourceLoc;
|
|
${t} coords = getOutputCoords();
|
|
${r.join(`
|
|
`)}
|
|
`,this.userCode=`
|
|
void main() {
|
|
${a}
|
|
setOutput(getSource(${n}));
|
|
}
|
|
`}},mx=["x","y","z","w","u","v"];function jJ(e){if(e===1)return"sourceLoc";if(e<=6)return mx.slice(0,e).map(t=>"sourceLoc."+t).join(",");throw Error(`Slicing for rank ${e} is not yet supported`)}var qJ=class{constructor(e){this.variableNames=["source"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=e,this.rank=e.length,this.customUniforms=[{name:"start",arrayIndex:this.rank,type:"int"}];let t=pt(this.rank),n=Nn("coords",this.rank),a=Nn("sourceLoc",this.rank),r=this.rank===1?"sourceLoc":`vec2(${a.slice(-2).join()})`,s=`getChannel(getSource(${a.join()}), ${r})`,i=`
|
|
result.x = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${a[this.rank-1]};
|
|
result.y = ${s};
|
|
--${a[this.rank-1]};
|
|
}
|
|
`,o=this.rank===1?"":`
|
|
--${n[this.rank-1]};
|
|
if (++${n[this.rank-2]} < ${e[this.rank-2]}) {
|
|
++${a[this.rank-2]};
|
|
result.z = ${s};
|
|
if (++${n[this.rank-1]} < ${e[this.rank-1]}) {
|
|
++${a[this.rank-1]};
|
|
result.w = ${s};
|
|
}
|
|
}
|
|
`,l=this.rank<=4?`sourceLoc = coords +
|
|
${t}(${e.map((u,p)=>`start[${p}]`).join()});`:e.map((u,p)=>`${a[p]} = ${n[p]} + start[${p}];`).join(`
|
|
`);this.userCode=`
|
|
void main() {
|
|
${t} coords = getOutputCoords();
|
|
${t} sourceLoc;
|
|
${l}
|
|
vec4 result = vec4(0.);
|
|
${i}
|
|
${o}
|
|
setOutput(result);
|
|
}
|
|
`}};function KJ(e,t,n,a){let r=a.texData.get(e.dataId),s=a.makeTensorInfo(n,e.dtype),i=a.texData.get(s.dataId);Object.assign(i,r),i.refCount=1,i.shape=n,i.dtype=e.dtype;let o=qt.computeFlatOffset(t,k.computeStrides(e.shape));r.slice&&(o+=r.slice.flatOffset),i.slice={flatOffset:o,origDataId:r.slice&&r.slice.origDataId||e.dataId};let l=a.dataRefCount.get(i.slice.origDataId)||1;return a.dataRefCount.set(i.slice.origDataId,l+1),s}function tp(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,size:i}=a,[o,l]=qt.parseSliceParams(r,s,i);if(qt.assertParamsValid(r,o,l),k.sizeFromShape(l)===0)return n.makeTensorInfo(l,r.dtype,[]);if(n.shouldExecuteOnCPU([r])||r.dtype==="string"){let d=n.texData.get(r.dataId),c=OY(d.values,o,l,r.shape,r.dtype);return n.makeTensorInfo(l,r.dtype,c)}let{isPacked:u}=n.texData.get(r.dataId),p=qt.isSliceContinous(r.shape,o,l);if(u||!p){let d=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new qJ(l):new HJ(l),c=[o];return n.runWebGLProgram(d,[r],r.dtype,c)}return n.uploadToGPU(r.dataId),KJ(r,o,l,n)}var XJ={kernelName:Iu,backendName:"webgl",kernelFunc:tp},YJ=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a;k.assert(r.shape.length<=4,()=>"batchToSpaceND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((b,x)=>b*x),l=_.getReshaped(r.shape,s,o),u=_.getPermuted(l.length,s.length),p=_.getReshapedPermuted(r.shape,s,o),d=_.getSliceBeginCoords(i,s.length),c=_.getSliceSize(p,i,s.length),h=[],m=me({inputs:{x:r},backend:n,attrs:{shape:l}}),f=pn({inputs:{x:m},backend:n,attrs:{perm:u}}),g=me({inputs:{x:f},backend:n,attrs:{shape:p}}),y=tp({inputs:{x:g},backend:n,attrs:{begin:d,size:c}});return h.push(m),h.push(f),h.push(g),h.forEach(b=>n.disposeIntermediateTensorInfo(b)),y},JJ={kernelName:Ul,backendName:"webgl",kernelFunc:YJ};function ZJ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i}=a,o=n.readSync(r.dataId),l=n.readSync(s.dataId),u=y_(o,l,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,u)}var QJ={kernelName:fm,backendName:"webgl",kernelFunc:ZJ};function eZ(e){let{inputs:t,backend:n}=e,{s0:a,s1:r}=t,s=n.readSync(a.dataId),i=n.readSync(r.dataId),o=_.assertAndGetBroadcastShape(Array.from(s),Array.from(i));return n.makeTensorInfo([o.length],"int32",Int32Array.from(o))}var tZ={kernelName:gm,backendName:"webgl",kernelFunc:eZ},nZ="return float(a != b);",D_=cn({opSnippet:nZ,cpuKernelImpl:FY,dtype:"bool"}),aZ={kernelName:cu,backendName:"webgl",kernelFunc:D_};function ld(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return Un({inputs:{x:r.complexTensorInfos.real},backend:n})}var rZ={kernelName:Pm,backendName:"webgl",kernelFunc:ld},sZ="return float(int(x));";function iZ(e,t){let n=new Cr(e.shape,sZ),a=t.runWebGLProgram(n,[e],"int32");return{dataId:a.dataId,shape:a.shape,dtype:a.dtype}}function fx(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dtype:s}=a;if(s==="complex64"){if(r.dtype==="complex64")return Un({inputs:{x:r},backend:n});let i=kt(r.shape),o=fx({inputs:{x:r},backend:n,attrs:{dtype:"float32"}}),l=Cs({inputs:{real:o,imag:i},backend:n});return i.dispose(),n.disposeIntermediateTensorInfo(o),l}if(r.dtype==="complex64"){let i=ld({inputs:{input:r},backend:n}),o=fx({inputs:{x:i},backend:n,attrs:{dtype:s}});return n.disposeIntermediateTensorInfo(i),o}if(!k.hasEncodingLoss(r.dtype,s)){let i=Un({inputs:{x:r},backend:n});return{dataId:i.dataId,shape:i.shape,dtype:s}}if(s==="int32")return iZ(r,n);if(s==="bool"){let i=n.makeTensorInfo([],"bool",k.getTypedArrayFromDType("bool",1)),o=D_({inputs:{a:r,b:i},backend:n});return n.disposeIntermediateTensorInfo(i),o}throw new Error(`Error in Cast: failed to cast ${r.dtype} to ${s}`)}var oZ={kernelName:Si,backendName:"webgl",kernelFunc:fx},Yk="return ceil(x);",lZ=Je({opSnippet:Yk,packedOpSnippet:Yk,cpuKernelImpl:hY}),uZ={kernelName:Ni,backendName:"webgl",kernelFunc:lZ},pZ=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));
|
|
}
|
|
`}},cZ=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 dZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o;X().getBool("WEBGL_PACK_CLIP")?o=new cZ(r.shape):o=new pZ(r.shape);let l=[[s],[i]];return n.runWebGLProgram(o,[r],r.dtype,l)}var hZ={kernelName:bs,backendName:"webgl",kernelFunc:dZ},mZ=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 Jk(e,t){return{dataId:t.dataId,dtype:t.dtype,shape:e.shape}}function fZ(e){let{inputs:t,backend:n}=e,{x:a}=t,r=n.texData.get(a.dataId),s=new mZ(a.shape),i=[Jk(a,r.complexTensorInfos.real),Jk(a,r.complexTensorInfos.imag)];return n.runWebGLProgram(s,i,i[0].dtype)}var gZ={kernelName:mc,backendName:"webgl",kernelFunc:fZ},yZ=class{constructor(e){this.outputShape=[],this.outputShape=_.computeOutShape(e,1),this.variableNames=e.map((s,i)=>`T${i}`);let t=new Array(e.length-1);t[0]=e[0][1];for(let s=1;s<t.length;s++)t[s]=t[s-1]+e[s][1];let n=[`if (yC < ${t[0]}) setOutput(getT0(yR, yC));`];for(let s=1;s<t.length;s++){let i=t[s-1];n.push(`else if (yC < ${t[s]}) setOutput(getT${s}(yR, yC-${i}));`)}let a=t.length,r=t[t.length-1];n.push(`else setOutput(getT${a}(yR, yC-${r}));`),this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int yR = coords.x;
|
|
int yC = coords.y;
|
|
|
|
${n.join(`
|
|
`)}
|
|
}
|
|
`}},bZ=class{constructor(e,t){this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[],this.outputShape=_.computeOutShape(e,t);let n=this.outputShape,a=n.length,r=pt(a),s=Nn("coords",a),i=["x","y","z","w","u","v"].slice(0,a);this.variableNames=e.map((m,f)=>`T${f}`);let o=new Array(e.length-1);o[0]=e[0][t];for(let m=1;m<o.length;m++)o[m]=o[m-1]+e[m][t];let l=i[t],u=i.slice(-2),p=i.join(),d=`if (${l} < ${o[0]}) {
|
|
return getChannel(
|
|
getT0(${p}), vec2(${u.join()}));
|
|
}`;for(let m=1;m<o.length;m++){let f=o[m-1];d+=`
|
|
if (${l} < ${o[m]} && ${l} >= ${o[m-1]}) {
|
|
return getChannel(
|
|
getT${m}(${Ih(i,l,f)}),
|
|
vec2(${Ih(u,l,f)}));
|
|
}`}let c=o.length,h=o[o.length-1];d+=`
|
|
return getChannel(
|
|
getT${c}(${Ih(i,l,h)}),
|
|
vec2(${Ih(u,l,h)}));`,this.userCode=`
|
|
float getValue(${i.map(m=>"int "+m)}) {
|
|
${d}
|
|
}
|
|
|
|
void main() {
|
|
${r} coords = getOutputCoords();
|
|
vec4 result = vec4(getValue(${s}), 0., 0., 0.);
|
|
|
|
${s[a-1]} = ${s[a-1]} + 1;
|
|
if (${s[a-1]} < ${n[a-1]}) {
|
|
result.g = getValue(${s});
|
|
}
|
|
|
|
${s[a-2]} = ${s[a-2]} + 1;
|
|
if (${s[a-2]} < ${n[a-2]}) {
|
|
result.a = getValue(${s});
|
|
}
|
|
|
|
${s[a-1]} = ${s[a-1]} - 1;
|
|
if (${s[a-2]} < ${n[a-2]} &&
|
|
${s[a-1]} < ${n[a-1]}) {
|
|
result.b = getValue(${s});
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}};function Ih(e,t,n){let a=e.indexOf(t);return e.map((r,s)=>s===a?`${r} - ${n}`:r).join()}function ng(e){let{inputs:t,backend:n}=e,{input:a}=t,r=n.texData.get(a.dataId);return Un({inputs:{x:r.complexTensorInfos.imag},backend:n})}var xZ={kernelName:Em,backendName:"webgl",kernelFunc:ng};function hl(e,t,n){let a=e[0].dtype;if(a==="complex64"){let p=e.map(f=>ld({inputs:{input:f},backend:n})),d=e.map(f=>ng({inputs:{input:f},backend:n})),c=hl(p,t,n),h=hl(d,t,n),m=Cs({inputs:{real:c,imag:h},backend:n});return p.forEach(f=>n.disposeIntermediateTensorInfo(f)),d.forEach(f=>n.disposeIntermediateTensorInfo(f)),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),m}let r=n.shouldExecuteOnCPU(e);if(a==="string"&&(r=!0),r){let p=e.map(y=>{let b=k.sizeFromShape(y.shape.slice(t));return me({inputs:{x:y},backend:n,attrs:{shape:[-1,b]}})}),d=p.map(y=>({vals:n.readSync(y.dataId),shape:y.shape})),c=_.computeOutShape(p.map(y=>y.shape),1),h=p[0].shape[0]===1,m=mY(d,c,a,h),f=_.computeOutShape(e.map(y=>y.shape),t),g=n.makeTensorInfo(f,a,m);return p.forEach(y=>n.disposeIntermediateTensorInfo(y)),g}if(e.length>X().getNumber("WEBGL_MAX_TEXTURES_IN_SHADER")){let p=Math.floor(e.length/2),d=hl(e.slice(0,p),t,n),c=hl(e.slice(p),t,n),h=hl([d,c],t,n);return n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),h}if(X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")&&e[0].shape.length>1){let p=new bZ(e.map(d=>d.shape),t);return n.runWebGLProgram(p,e,a)}let{tensors2D:s,outShape:i}=vZ(e,t,n),o=new yZ(s.map(p=>p.shape)),l=n.runWebGLProgram(o,s,a);s.forEach(p=>n.disposeIntermediateTensorInfo(p));let u=me({inputs:{x:l},attrs:{shape:i},backend:n});return n.disposeIntermediateTensorInfo(l),u}function vZ(e,t,n){let a=_.computeOutShape(e.map(r=>r.shape),t);return{tensors2D:e.map(r=>me({inputs:{x:r},attrs:{shape:[-1,k.sizeFromShape(r.shape.slice(t))]},backend:n})),outShape:a}}function R_(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a,s=k.parseAxisParam(r,t[0].shape)[0],i=_.computeOutShape(t.map(u=>u.shape),s);if(k.sizeFromShape(i)===0)return n.makeTensorInfo(i,t[0].dtype,[]);let o=t.filter(u=>k.sizeFromShape(u.shape)>0);if(o.length===1)return Un({inputs:{x:o[0]},backend:n});let l=o.map(u=>u.shape);return _.assertParamsConsistent(l,s),hl(o,s,n)}var wZ={kernelName:Gl,backendName:"webgl",kernelFunc:R_},M_=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.outputShape=e.outShape;let s=e.padInfo.top,i=e.padInfo.left,o=e.strideHeight,l=e.strideWidth,u=e.dilationHeight,p=e.dilationWidth,d=e.filterHeight,c=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4,f=e.dataFormat==="channelsLast",g=f?1:2,y=f?2:3,b=f?3:1,x="",v="";n&&(a?x=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?x=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:x=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,v="result = activation(result);");let w=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${x}
|
|
|
|
const ivec2 strides = ivec2(${o}, ${l});
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d2 = coords[${b}];
|
|
|
|
ivec2 xRCCorner =
|
|
ivec2(coords[${g}], coords[${y}]) * strides - pads;
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, d2) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${d}; wR++) {
|
|
int xR = xRCorner + wR * ${u};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${c}; wC++) {
|
|
int xC = xCCorner + wC * ${p};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${h}; d1 += 4) {
|
|
vec4 wValues = vec4(
|
|
getW(wR, wC, d1, d2),
|
|
getW(wR, wC, d1 + 1, d2),
|
|
getW(wR, wC, d1 + 2, d2),
|
|
getW(wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
if (${f}) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xR, xC, d1),
|
|
getX(batch, xR, xC, d1 + 1),
|
|
getX(batch, xR, xC, d1 + 2),
|
|
getX(batch, xR, xC, d1 + 3)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec4 xValues = vec4(
|
|
getX(batch, d1, xR, xC),
|
|
getX(batch, d1 + 1, xR, xC),
|
|
getX(batch, d1 + 2, xR, xC),
|
|
getX(batch, d1 + 3, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
|
|
if (${m===1}) {
|
|
|
|
if (${f}) {
|
|
dotProd +=
|
|
getX(batch, xR, xC, ${h}) *
|
|
getW(wR, wC, ${h}, d2);
|
|
} else {
|
|
dotProd +=
|
|
getX(batch, ${h}, xR, xC) *
|
|
getW(wR, wC, ${h}, d2);
|
|
}
|
|
|
|
} else if (${m===2}) {
|
|
vec2 wValues = vec2(
|
|
getW(wR, wC, ${h}, d2),
|
|
getW(wR, wC, ${h} + 1, d2)
|
|
);
|
|
|
|
if (${f}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xR, xC, ${h}),
|
|
getX(batch, xR, xC, ${h} + 1)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec2 xValues = vec2(
|
|
getX(batch, ${h}, xR, xC),
|
|
getX(batch, ${h} + 1, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
} else if (${m===3}) {
|
|
vec3 wValues = vec3(
|
|
getW(wR, wC, ${h}, d2),
|
|
getW(wR, wC, ${h} + 1, d2),
|
|
getW(wR, wC, ${h} + 2, d2)
|
|
);
|
|
|
|
if (${f}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xR, xC, ${h}),
|
|
getX(batch, xR, xC, ${h} + 1),
|
|
getX(batch, xR, xC, ${h} + 2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else {
|
|
vec3 xValues = vec3(
|
|
getX(batch, ${h}, xR, xC),
|
|
getX(batch, ${h} + 1, xR, xC),
|
|
getX(batch, ${h} + 2, xR, xC)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${w}
|
|
${v}
|
|
setOutput(result);
|
|
}
|
|
`}},kZ=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let t=e.padInfo.front,n=e.padInfo.top,a=e.padInfo.left,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=e.dilationDepth,l=e.dilationHeight,u=e.dilationWidth,p=e.filterDepth,d=e.filterHeight,c=e.filterWidth,h=Math.floor(e.inChannels/4)*4,m=e.inChannels%4;this.userCode=`
|
|
const ivec3 strides = ivec3(${r}, ${s}, ${i});
|
|
const ivec3 pads = ivec3(${t}, ${n}, ${a});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d2 = coords.u;
|
|
|
|
ivec3 xFRCCorner = ivec3(coords.y, coords.z, coords.w) * strides - pads;
|
|
int xFCorner = xFRCCorner.x;
|
|
int xRCorner = xFRCCorner.y;
|
|
int xCCorner = xFRCCorner.z;
|
|
|
|
// Convolve x(?, ?, ?, d1) with w(:, :, :, d1, d2) to get
|
|
// y(yF, yR, yC, d2). ? = to be determined. : = across all
|
|
// values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${p}; wF++) {
|
|
int xF = xFCorner + wF * ${o};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wR = 0; wR < ${d}; wR++) {
|
|
int xR = xRCorner + wR * ${l};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${c}; wC++) {
|
|
int xC = xCCorner + wC * ${u};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int d1 = 0; d1 < ${h}; d1 += 4) {
|
|
vec4 xValues = vec4(
|
|
getX(batch, xF, xR, xC, d1),
|
|
getX(batch, xF, xR, xC, d1 + 1),
|
|
getX(batch, xF, xR, xC, d1 + 2),
|
|
getX(batch, xF, xR, xC, d1 + 3)
|
|
);
|
|
vec4 wValues = vec4(
|
|
getW(wF, wR, wC, d1, d2),
|
|
getW(wF, wR, wC, d1 + 1, d2),
|
|
getW(wF, wR, wC, d1 + 2, d2),
|
|
getW(wF, wR, wC, d1 + 3, d2)
|
|
);
|
|
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
|
|
if (${m===1}) {
|
|
dotProd +=
|
|
getX(batch, xF, xR, xC, ${h}) *
|
|
getW(wF, wR, wC, ${h}, d2);
|
|
} else if (${m===2}) {
|
|
vec2 xValues = vec2(
|
|
getX(batch, xF, xR, xC, ${h}),
|
|
getX(batch, xF, xR, xC, ${h} + 1)
|
|
);
|
|
vec2 wValues = vec2(
|
|
getW(wF, wR, wC, ${h}, d2),
|
|
getW(wF, wR, wC, ${h} + 1, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
} else if (${m===3}) {
|
|
vec3 xValues = vec3(
|
|
getX(batch, xF, xR, xC, ${h}),
|
|
getX(batch, xF, xR, xC, ${h} + 1),
|
|
getX(batch, xF, xR, xC, ${h} + 2)
|
|
);
|
|
vec3 wValues = vec3(
|
|
getW(wF, wR, wC, ${h}, d2),
|
|
getW(wF, wR, wC, ${h} + 1, d2),
|
|
getW(wF, wR, wC, ${h} + 2, d2)
|
|
);
|
|
dotProd += dot(xValues, wValues);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},IZ=class{constructor(e,t){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"inputShape",type:"ivec3"},{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=jn(this.outputShape.length);let{dataFormat:n}=t,a=En(),r=n==="channelsLast",s=r?0:1,i=r?1:2,o=this.enableShapeUniforms?"if(blockIndex < outShape[1] && pos < outShape[0]) {":`if(blockIndex < ${e[1]} && pos < ${e[0]}) {`,l="";for(let u=0;u<=1;u++)for(let p=0;p<=1;p++)l+=`
|
|
blockIndex = rc.y + ${p};
|
|
pos = rc.x + ${u};
|
|
|
|
${o}
|
|
offsetY = int(blockIndex / outWidth) * stride[0] - pad[0];
|
|
d0 = offsetY + dilation[0] * (pos / itemsPerBlockRow);
|
|
|
|
if(d0 < inputShape[${s}] && d0 >= 0) {
|
|
// Use custom imod instead mod. On Intel GPU, mod may generate
|
|
// unexpected value.
|
|
// https://github.com/tensorflow/tfjs/issues/5447
|
|
offsetX = imod(blockIndex, outWidth) * stride[1] - pad[1];
|
|
d1 = offsetX + dilation[1] * (imod(pos, itemsPerBlockRow) /
|
|
inChannels);
|
|
|
|
if(d1 < inputShape[${i}] && d1 >= 0) {
|
|
|
|
ch = imod(pos, inChannels);
|
|
|
|
if (${r}) {
|
|
innerDims = vec2(d1, ch);
|
|
result[${u*2+p}] = getChannel(
|
|
getA(d0, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
} else {
|
|
innerDims = vec2(d0, d1);
|
|
result[${u*2+p}] = getChannel(
|
|
getA(ch, int(innerDims.x),
|
|
int(innerDims.y)), innerDims);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
`;this.userCode=`
|
|
void main() {
|
|
ivec2 rc = getOutputCoords();
|
|
|
|
vec4 result = vec4(0);
|
|
|
|
int blockIndex, pos, offsetY, d0, offsetX, d1, ch;
|
|
vec2 innerDims;
|
|
|
|
${l}
|
|
|
|
${a.output} = result;
|
|
}
|
|
`}};function P_({x:e,filter:t,convInfo:n,backend:a,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let l=e.shape,u=a.texData.get(e.dataId),p=n.inChannels,d=l[0]*l[1]*l[2],c=n.outChannels,h=n.dataFormat==="channelsLast",m=!1,f=!1,g,y=[];if(!((d===1||c===1)&&p>E_)&&u.isPacked&&h&&u.texture!=null&&l[2]%2!==0&&k.arraysEqual(u.shape.slice(-3),l.slice(-3))){let b=l[0]*l[1]*(l[2]+1),x={dataId:e.dataId,shape:[1,b,n.inChannels],dtype:e.dtype},v=u.shape;u.shape=u.shape.slice(),u.shape[u.shape.length-2]++,k.assert(lc(u.shape,x.shape),()=>`packed reshape ${u.shape} to ${x.shape} isn't free`);let w=me({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}});y.push(w);let T=om({a:x,b:w,backend:a,transposeA:m,transposeB:f,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i}),C=a.texData.get(T.dataId);k.assert(C.isPacked,()=>"batchMatMul result is expected to be packed"),u.shape=v,C.shape=n.outShape,g=Un({inputs:{x:T},backend:a}),g.shape=n.outShape,y.push(T)}else{let b=h?l[0]*l[1]*l[2]:l[0]*l[2]*l[3],x=me({inputs:{x:e},backend:a,attrs:{shape:[1,b,n.inChannels]}}),v=me({inputs:{x:t},backend:a,attrs:{shape:[1,n.inChannels,n.outChannels]}}),w=om({a:x,b:v,transposeA:m,transposeB:f,backend:a,bias:r,activation:o,preluActivationWeights:s,leakyreluAlpha:i});g=me({inputs:{x:w},backend:a,attrs:{shape:n.outShape}}),y.push(x),y.push(v),y.push(w)}for(let b of y)a.disposeIntermediateTensorInfo(b);return g}function O_({x:e,filter:t,convInfo:n,backend:a,bias:r=null,preluActivationWeights:s=null,leakyreluAlpha:i=0,activation:o=null}){let{filterWidth:l,filterHeight:u,inChannels:p,outWidth:d,outHeight:c,dataFormat:h}=n,m=h==="channelsLast",f=l*u*p,g=c*d,y=[f,g],b=!0,x=!1,v=[],w=me({inputs:{x:e},backend:a,attrs:{shape:e.shape.slice(1)}}),T=me({inputs:{x:t},backend:a,attrs:{shape:[1,f,k.sizeFromShape(t.shape)/f]}});v.push(w),v.push(T);let C=new IZ(y,n),E=[w.shape,[n.padInfo.top,n.padInfo.left],[n.strideHeight,n.strideWidth],[n.dilationHeight,n.dilationWidth],[n.inChannels],[n.filterWidth*n.inChannels],[n.outWidth]],$=a.runWebGLProgram(C,[w],"float32",E),P=me({inputs:{x:$},backend:a,attrs:{shape:[1,y[0],y[1]]}});v.push($),v.push(P);let F=r!=null,S=s!=null,M=o==="leakyrelu",B=o?Qf(o,!0):null,j=new __(P.shape,T.shape,[1,g,n.outChannels],b,x,F,B,S,M),q=[P,T];if(r&&q.push(r),S&&q.push(s),M){let re=a.makeTensorInfo([],"float32",k.createScalarValue(i,"float32"));q.push(re),v.push(re)}let K=a.runWebGLProgram(j,q,"float32"),Q=m?[1,c,d,n.outChannels]:[1,n.outChannels,c,d],ee=me({inputs:{x:K},backend:a,attrs:{shape:Q}});v.push(K);for(let re of v)a.disposeIntermediateTensorInfo(re);return ee}function SZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dataFormat:l,dilations:u,dimRoundingMode:p}=a,d=_.convertConv2DDataFormat(l),c=_.computeConv2DInfo(r.shape,s.shape,i,u,o,p,!1,d),h;if(c.filterHeight===1&&c.filterWidth===1&&c.dilationHeight===1&&c.dilationWidth===1&&c.strideHeight===1&&c.strideWidth===1&&(c.padInfo.type==="SAME"||c.padInfo.type==="VALID"))h=P_({x:r,filter:s,convInfo:c,backend:n});else if(X().getBool("WEBGL_CONV_IM2COL")&&r.shape[0]===1)h=O_({x:r,filter:s,convInfo:c,backend:n});else{let f=new M_(c);h=n.runWebGLProgram(f,[r,s],"float32")}let m=me({inputs:{x:h},backend:n,attrs:{shape:c.outShape}});return n.disposeIntermediateTensorInfo(h),m}var NZ={kernelName:Ti,backendName:"webgl",kernelFunc:SZ},TZ=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,a=e.padInfo.top,r=e.padInfo.left,s=e.dataFormat==="channelsLast";this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int d2 = coords.w;
|
|
|
|
// Convolve x(?, ?, d1) with dy(:, :, d2) to get dw(wR, wC, d1, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${a};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${r};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
if (${s}) {
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
} else {
|
|
float dyValue = getDy(b, d2, yR, yC);
|
|
float xValue = getX(b, d1, xR, xC);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},CZ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=e.dataFormat==="channelsLast",i=t-1-e.padInfo.top,o=n-1-e.padInfo.left,l=s?1:2,u=s?2:3,p=s?3:1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[${p}];
|
|
|
|
ivec2 dyCorner = ivec2(coords[${l}], coords[${u}]) - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
// Convolve dy(?, ?, d2) with w(:, :, d1, d2) to compute dx(xR, xC, d1).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
|
|
if (${s}) {
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
} else {
|
|
float xValue = getDy(batch, d2, idyR, idyC);
|
|
float wValue = getW(wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},_Z=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideDepth,n=e.strideHeight,a=e.strideWidth,r=e.padInfo.front,s=e.padInfo.top,i=e.padInfo.left;this.userCode=`
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int wF = coords.x;
|
|
int wR = coords.y;
|
|
int wC = coords.z;
|
|
int d1 = coords.w;
|
|
int d2 = coords.u;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yF = 0; yF < ${e.outDepth}; yF++) {
|
|
int xF = wF + yF * ${t} - ${r};
|
|
|
|
if (xF < 0 || xF >= ${e.inDepth}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${n} - ${s};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${a} - ${i};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yF, yR, yC, d2);
|
|
float xValue = getX(b, xF, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},EZ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterDepth,n=e.filterHeight,a=e.filterWidth,r=e.strideDepth,s=e.strideHeight,i=e.strideWidth,o=t-1-e.padInfo.front,l=n-1-e.padInfo.top,u=a-1-e.padInfo.left;this.userCode=`
|
|
const ivec3 pads = ivec3(${o}, ${l}, ${u});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.u;
|
|
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyFCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
float dotProd = 0.0;
|
|
for (int wF = 0; wF < ${t}; wF++) {
|
|
float dyF = float(dyFCorner + wF) / ${r}.0;
|
|
|
|
if (dyF < 0.0 || dyF >= ${e.outDepth}.0 || fract(dyF) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyF = int(dyF);
|
|
|
|
int wFPerm = ${t} - 1 - wF;
|
|
|
|
for (int wR = 0; wR < ${n}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${s}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${n} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${a}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${i}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${a} - 1 - wC;
|
|
|
|
for (int d2 = 0; d2 < ${e.outChannels}; d2++) {
|
|
float xValue = getDy(batch, idyF, idyR, idyC, d2);
|
|
float wValue = getW(wFPerm, wRPerm, wCPerm, d1, d2);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function AZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,filterShape:p}=a,d=_.convertConv2DDataFormat(l),c=_.computeConv2DInfo(r.shape,p,i,1,o,u,!1,d),h=new TZ(c);return n.runWebGLProgram(h,[r,s],"float32")}var $Z={kernelName:bm,backendName:"webgl",kernelFunc:AZ};function FZ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{inputShape:i,strides:o,pad:l,dataFormat:u,dimRoundingMode:p}=a,d=_.convertConv2DDataFormat(u),c=_.computeConv2DInfo(i,s.shape,o,1,l,p,!1,d),h=new CZ(c);return n.runWebGLProgram(h,[r,s],"float32")}var DZ={kernelName:Ci,backendName:"webgl",kernelFunc:FZ};function RZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=_.computeConv3DInfo(r.shape,s.shape,i,l,o),p=new kZ(u);return n.runWebGLProgram(p,[r,s],"float32")}var MZ={kernelName:fc,backendName:"webgl",kernelFunc:RZ};function PZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,pad:o,filterShape:l}=a,u=_.computeConv3DInfo(r.shape,l,i,1,o),p=new _Z(u);return n.runWebGLProgram(p,[r,s],"float32")}var OZ={kernelName:xm,backendName:"webgl",kernelFunc:PZ};function LZ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{pad:i,strides:o,inputShape:l}=a,u=_.computeConv3DInfo(l,s.shape,o,1,i),p=new EZ(u);return n.runWebGLProgram(p,[r,s],"float32")}var zZ={kernelName:vm,backendName:"webgl",kernelFunc:LZ},WZ=ep+`
|
|
return cos(x);
|
|
`,BZ=Je({opSnippet:WZ}),VZ={kernelName:_i,backendName:"webgl",kernelFunc:BZ},UZ=`
|
|
float e2x = exp(-x);
|
|
return (e2x + 1.0 / e2x) / 2.0;
|
|
`,GZ=Je({opSnippet:UZ}),HZ={kernelName:Ei,backendName:"webgl",kernelFunc:GZ},jZ=class{constructor(e,t,n,a,r){this.variableNames=["Image","Boxes","BoxInd"],this.outputShape=[];let[s,i,o,l]=e,[u]=t,[p,d]=n;this.outputShape=[u,p,d,l];let c=a==="bilinear"?1:0,[h,m]=[`${i-1}.0`,`${o-1}.0`],[f,g,y]=p>1?[`${(i-1)/(p-1)}`,"(y2-y1) * height_ratio",`y1*${h} + float(y)*(height_scale)`]:["0.0","0.0",`0.5 * (y1+y2) * ${h}`],[b,x,v]=d>1?[`${(o-1)/(d-1)}`,"(x2-x1) * width_ratio",`x1*${m} + float(x)*(width_scale)`]:["0.0","0.0",`0.5 * (x1+x2) * ${m}`];this.userCode=`
|
|
const float height_ratio = float(${f});
|
|
const float width_ratio = float(${b});
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int y = coords[1];
|
|
int x = coords[2];
|
|
int d = coords[3];
|
|
|
|
// get box vals
|
|
float y1 = getBoxes(b,0);
|
|
float x1 = getBoxes(b,1);
|
|
float y2 = getBoxes(b,2);
|
|
float x2 = getBoxes(b,3);
|
|
|
|
// get image in batch index
|
|
int bInd = round(getBoxInd(b));
|
|
if(bInd < 0 || bInd >= ${s}) {
|
|
return;
|
|
}
|
|
|
|
float height_scale = ${g};
|
|
float width_scale = ${x};
|
|
|
|
float in_y = ${y};
|
|
if( in_y < 0.0 || in_y > ${h} ) {
|
|
setOutput(float(${r}));
|
|
return;
|
|
}
|
|
float in_x = ${v};
|
|
if( in_x < 0.0 || in_x > ${m} ) {
|
|
setOutput(float(${r}));
|
|
return;
|
|
}
|
|
|
|
vec2 sourceFracIndexCR = vec2(in_x,in_y);
|
|
if(${c} == 1) {
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorCR = ivec2(sourceFracIndexCR);
|
|
ivec2 sourceCeilCR = ivec2(ceil(sourceFracIndexCR));
|
|
|
|
float topLeft = getImage(b, sourceFloorCR.y, sourceFloorCR.x, d);
|
|
float bottomLeft = getImage(b, sourceCeilCR.y, sourceFloorCR.x, d);
|
|
float topRight = getImage(b, sourceFloorCR.y, sourceCeilCR.x, d);
|
|
float bottomRight = getImage(b, sourceCeilCR.y, sourceCeilCR.x, d);
|
|
|
|
vec2 fracCR = sourceFracIndexCR - vec2(sourceFloorCR);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracCR.x;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracCR.x;
|
|
float newValue = top + (bottom - top) * fracCR.y;
|
|
setOutput(newValue);
|
|
} else {
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestCR = ivec2(floor(
|
|
sourceFracIndexCR + vec2(0.5,0.5)));
|
|
float newValue = getImage(b, sourceNearestCR.y, sourceNearestCR.x, d);
|
|
setOutput(newValue);
|
|
}
|
|
}
|
|
`}},qZ=e=>{let{inputs:t,backend:n,attrs:a}=e,{image:r,boxes:s,boxInd:i}=t,{cropSize:o,method:l,extrapolationValue:u}=a,p=new jZ(r.shape,s.shape,o,l,u);return n.runWebGLProgram(p,[r,s,i],"float32")},KZ={kernelName:jl,backendName:"webgl",kernelFunc:qZ},Zk=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}],this.outputShape=e;let a=e.length,r=t?"1.0":`getX(${Qk(a,"coords")})`,s=e[e.length-1],i="",o="";t?(i=n?`end != ${s-1}`:"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`
|
|
void main() {
|
|
${pt(a)} coords = getOutputCoords();
|
|
int end = ${eI(a,"coords")};
|
|
float val = ${r};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${i}) {
|
|
int idx = ${o};
|
|
${eI(a,"coords")} = idx;
|
|
val *= getX(${Qk(a,"coords")});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}};function Qk(e,t){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 Error(`Cumulative product for rank ${e} is not yet supported`)}function eI(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative product for rank ${e} is not yet supported`)}function XZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length,u=_.getAxesPermutation([s],l),p=r;u!=null&&(p=pn({inputs:{x:r},backend:n,attrs:{perm:u}}));let d=_.getInnerMostAxes(1,l)[0];if(d!==l-1)throw new Error(`WebGL cumprod shader expects an inner-most axis=${r.shape.length-1} but got axis=${s}`);let c=p.shape[d],h=Un({inputs:{x:p},backend:n});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new Zk(p.shape,!1,o),g=[[m]],y=h;h=n.runWebGLProgram(f,[h],h.dtype,g),n.disposeIntermediateTensorInfo(y)}if(i){let m=new Zk(p.shape,i,o),f=h;h=n.runWebGLProgram(m,[h],h.dtype),n.disposeIntermediateTensorInfo(f)}if(u!=null){let m=_.getUndoAxesPermutation(u),f=pn({inputs:{x:h},backend:n,attrs:{perm:m}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(p),f}return h}var YZ={kernelName:Hl,backendName:"webgl",kernelFunc:XZ},tI=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"index",type:"float"}],this.outputShape=e;let a=e.length,r=t?"0.0":`getX(${nI(a,"coords")})`,s=e[e.length-1],i="",o="";t?(i=n?`end != ${s-1}`:"end != 0",o=n?"end + 1":"end - 1"):(i=n?`end + pow2 < ${s}`:"end >= pow2",o=n?"end + pow2":"end - pow2"),this.userCode=`
|
|
void main() {
|
|
${pt(a)} coords = getOutputCoords();
|
|
int end = ${aI(a,"coords")};
|
|
float val = ${r};
|
|
int pow2 = int(pow(2.0, index));
|
|
if (${i}) {
|
|
int idx = ${o};
|
|
${aI(a,"coords")} = idx;
|
|
val += getX(${nI(a,"coords")});
|
|
}
|
|
setOutput(val);
|
|
}
|
|
`}};function nI(e,t){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 Error(`Cumulative sum for rank ${e} is not yet supported`)}function aI(e,t){if(e===1)return`${t}`;if(e===2)return`${t}.y`;if(e===3)return`${t}.z`;if(e===4)return`${t}.w`;throw Error(`Cumulative sum for rank ${e} is not yet supported`)}function JZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length,u=_.getAxesPermutation([s],l),p=r;u!=null&&(p=pn({inputs:{x:r},backend:n,attrs:{perm:u}}));let d=_.getInnerMostAxes(1,l)[0];if(d!==l-1)throw new Error(`WebGL cumsum shader expects an inner-most axis=${r.shape.length-1} but got axis=${s}`);let c=p.shape[d],h=Un({inputs:{x:p},backend:n});for(let m=0;m<=Math.ceil(Math.log2(c))-1;m++){let f=new tI(p.shape,!1,o),g=[[m]],y=h;h=n.runWebGLProgram(f,[h],h.dtype,g),n.disposeIntermediateTensorInfo(y)}if(i){let m=new tI(p.shape,i,o),f=h;h=n.runWebGLProgram(m,[h],h.dtype),n.disposeIntermediateTensorInfo(f)}if(u!=null){let m=_.getUndoAxesPermutation(u),f=pn({inputs:{x:h},backend:n,attrs:{perm:m}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(p),f}return h}var ZZ={kernelName:Ai,backendName:"webgl",kernelFunc:JZ};function QZ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,weights:s}=t,{size:i,binaryOutput:o}=a;if(r.shape.length===1){let l=n.readSync(r.dataId),u=n.readSync(s.dataId),p=y_(l,u,s.dtype,s.shape,i);return n.makeTensorInfo([i],s.dtype,p)}else if(r.shape.length===2){let l=n.bufferSync(r),u=n.bufferSync(s),p=dY(l,u,i,o);return n.makeTensorInfo(p.shape,s.dtype,p.values)}throw new Error(`Error in denseBincount: input must be at most rank 2, but got rank${r.shape.length}.`)}var eQ={kernelName:wm,backendName:"webgl",kernelFunc:QZ},tQ=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 nQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockSize:s,dataFormat:i}=a,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],d=l*s,c=u*s,h=p/(s*s),m=i==="NHWC"?[o,d,c,h]:[o,h,d,c],f=new tQ(m,s,i);return n.runWebGLProgram(f,[r],r.dtype)}var aQ={kernelName:ql,backendName:"webgl",kernelFunc:nQ},L_=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=jn(this.outputShape.length);let s=e.filterHeight,i=e.filterWidth,o=e.outChannels/e.inChannels,l="",u="";n&&(a?l=`float activation(float a) {
|
|
float b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?l=`float activation(float a) {
|
|
float b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:l=`
|
|
float activation(float x) {
|
|
${n}
|
|
}
|
|
`,u="result = activation(result);");let p=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${l}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${o};
|
|
int q = d2 - d1 * ${o};
|
|
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
// Convolve x(?, ?, d1) with w(:, :, d1, q) to get y(yR, yC, d2).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
// TO DO(dsmilkov): Flatten the two for loops and vec4 the operations.
|
|
for (int wR = 0; wR < ${s}; wR++) {
|
|
int xR = xRCorner + wR * dilations[0];
|
|
|
|
if (xR < 0 || xR >= inDims[0]) {
|
|
continue;
|
|
}
|
|
|
|
for (int wC = 0; wC < ${i}; wC++) {
|
|
int xC = xCCorner + wC * dilations[1];
|
|
|
|
if (xC < 0 || xC >= inDims[1]) {
|
|
continue;
|
|
}
|
|
|
|
float xVal = getX(batch, xR, xC, d1);
|
|
float wVal = getW(wR, wC, d1, q);
|
|
dotProd += xVal * wVal;
|
|
}
|
|
}
|
|
|
|
float result = dotProd;
|
|
${p}
|
|
${u}
|
|
setOutput(result);
|
|
}
|
|
`}},z_=class{constructor(e,t=!1,n=null,a=!1,r=!1){this.variableNames=["x","W"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"pads",type:"ivec2"},{name:"strides",type:"ivec2"},{name:"dilations",type:"ivec2"},{name:"inDims",type:"ivec2"}],this.outputShape=e.outShape,this.enableShapeUniforms=jn(this.outputShape.length);let s=e.outChannels/e.inChannels,i=e.padInfo.left,o=e.strideWidth,l=e.dilationWidth,u=e.filterHeight,p=e.filterWidth,d=p,c=`
|
|
int xR; int xC; int xCOffset;
|
|
vec4 wTexel; vec4 previous; vec4 final;`;for(let g=0;g<p;g++)c+=`
|
|
vec4 xTexelC${g*2};
|
|
int xTexelC${g*2}Ready;
|
|
vec4 xTexelC${g*2+1};
|
|
int xTexelC${g*2+1}Ready;
|
|
vec4 xC${g};`;c+=`
|
|
for (int r = 0; r < ${u}; r++) {
|
|
`;for(let g=0;g<p;g++)c+=`
|
|
xTexelC${g*2} = vec4(0.0);
|
|
xTexelC${g*2}Ready = 0;
|
|
xTexelC${g*2+1} = vec4(0.0);
|
|
xTexelC${g*2+1}Ready = 0;
|
|
xC${g} = vec4(0.0);`;c+=`
|
|
xR = xRCorner + r * dilations[0];
|
|
if (xR >=0 && xR < inDims[0]) {
|
|
`;for(let g=0;g<(d+1)/2;g++){let y=g*2;if(c+=`
|
|
xC = xCCorner + ${y*l};
|
|
`,o===1){if(y<p&&(i%2===1?(c+=`
|
|
xCOffset = xC + 1;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
`,l===1&&y>0?c+=`
|
|
xC${y} = vec4(xTexelC${y-2}.zw, xTexelC${y}.xy);
|
|
`:c+=`
|
|
xCOffset = xC + 1 - 2;
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
previous = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
previous.zw = vec2(0.0);
|
|
}
|
|
|
|
xC${y} = vec4(previous.zw, xTexelC${y}.xy);
|
|
} else {
|
|
xC${y} = vec4(0.0, 0.0, xTexelC${y}.xy);
|
|
}
|
|
`):c+=`
|
|
if (xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
xC${y} = xTexelC${y};
|
|
`,y+1<p)){let b=i%2===0?k.nearestLargerEven(l):l;l%2===0&&i%2===1||l%2!==0&&i%2!==1?(c+=`
|
|
xCOffset = xC + imod(pads[1], 2) + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
`,l>1&&(c+=`
|
|
xCOffset -= 2;
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xCOffset, d1);
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
`),c+=`
|
|
xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.xy);
|
|
`):b===1?c+=`
|
|
xC${y+1} = xTexelC${y};
|
|
`:c+=`
|
|
xCOffset = xC + ${b};
|
|
|
|
if (xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y+1} = xTexelC${y+1};
|
|
`}}else y<p&&(i%2===1?(c+=`
|
|
xCOffset = xC + 1 - strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xCOffset, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
if(xC + 1 >= 0 && xC + 1 < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xC + 1, d1);
|
|
// Need to manually clear unused channels in case
|
|
// we're reading from recycled texture.
|
|
if (xC + 2 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw);
|
|
`,y+1<p&&(c+=`
|
|
final = vec4(0.0);
|
|
xCOffset = xC + 1 + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1]) {
|
|
final = getX(batch, xR, xCOffset, d1);
|
|
}
|
|
xC${y+1} = vec4(xTexelC${y+1}.xy, final.xy);
|
|
`)):(c+=`
|
|
if(xC >= 0 && xC < inDims[1] && xTexelC${y}Ready == 0) {
|
|
xTexelC${y} = getX(batch, xR, xC, d1);
|
|
if (xC + 1 >= inDims[1]) {
|
|
xTexelC${y}.zw = vec2(0.0);
|
|
}
|
|
xTexelC${y}Ready = 1;
|
|
}
|
|
|
|
xCOffset = xC + strides[1];
|
|
if(xCOffset >= 0 && xCOffset < inDims[1] && xTexelC${y+1}Ready == 0) {
|
|
xTexelC${y+1} = getX(batch, xR, xCOffset, d1);
|
|
if (xCOffset + 1 >= inDims[1]) {
|
|
xTexelC${y+1}.zw = vec2(0.);
|
|
}
|
|
xTexelC${y+1}Ready = 1;
|
|
}
|
|
|
|
xC${y} = vec4(
|
|
xTexelC${y}.xy, xTexelC${y+1}.xy);
|
|
`,y+1<p&&(c+=`
|
|
xC${y+1} = vec4(xTexelC${y}.zw, xTexelC${y+1}.zw);
|
|
`)));y<p&&(c+=`
|
|
wTexel = getW(r, ${y}, d1, q);
|
|
dotProd += xC${y} * vec4(wTexel.xz, wTexel.xz);
|
|
`,y+1<p&&(c+=`
|
|
wTexel = getW(r, ${y+1}, d1, q);
|
|
dotProd += xC${y+1} * vec4(wTexel.xz, wTexel.xz);
|
|
`))}c+=`
|
|
}
|
|
`,c+=`
|
|
}
|
|
`;let h="",m="";n&&(a?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getPreluActivationWeightsAtOutCoords();
|
|
${n}
|
|
}`:r?h=`vec4 activation(vec4 a) {
|
|
vec4 b = getLeakyreluAlphaAtOutCoords();
|
|
${n}
|
|
}`:h=`vec4 activation(vec4 x) {
|
|
${n}
|
|
}`,m="result = activation(result);");let f=t?"result += getBiasAtOutCoords();":"";t&&this.variableNames.push("bias"),a&&this.variableNames.push("preluActivationWeights"),r&&this.variableNames.push("leakyreluAlpha"),this.userCode=`
|
|
${h}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
ivec2 xRCCorner = coords.yz * strides - pads;
|
|
int d2 = coords.w;
|
|
int d1 = d2 / ${s};
|
|
int q = d2 - d1 * ${s};
|
|
int xRCorner = xRCCorner.x;
|
|
int xCCorner = xRCCorner.y;
|
|
|
|
//intialize dotProd with a small epsilon seems to reduce GPU accuracy loss.
|
|
vec4 dotProd = vec4(0.000000000000001);
|
|
|
|
${c}
|
|
|
|
vec4 result = dotProd - vec4(0.000000000000001);
|
|
${f}
|
|
${m}
|
|
setOutput(result);
|
|
}
|
|
`}};function rQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l,dimRoundingMode:u}=a,p=l;p==null&&(p=[1,1]),k.assert(_.eitherStridesOrDilationsAreOne(i,p),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${i} and dilations '${p}'`);let d=_.computeConv2DInfo(r.shape,s.shape,i,p,o,u,!0),c;X().getBool("WEBGL_PACK_DEPTHWISECONV")&&d.strideWidth<=2&&d.outChannels/d.inChannels===1?c=new z_(d):c=new L_(d);let h=[[d.padInfo.top,d.padInfo.left],[d.strideHeight,d.strideWidth],[d.dilationHeight,d.dilationWidth],[d.inHeight,d.inWidth]];return n.runWebGLProgram(c,[r,s],"float32",h)}var sQ={kernelName:$i,backendName:"webgl",kernelFunc:rQ},iQ=class{constructor(e){this.variableNames=["x","dy"],this.outputShape=e.filterShape;let t=e.strideHeight,n=e.strideWidth,a=e.padInfo.top,r=e.padInfo.left,s=e.outChannels/e.inChannels;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int wR = coords.x;
|
|
int wC = coords.y;
|
|
int d1 = coords.z;
|
|
int dm = coords.w;
|
|
int d2 = d1 * ${s} + dm;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
// TO DO: Vec4 over the batch size
|
|
for (int b = 0; b < ${e.batchSize}; b++) {
|
|
for (int yR = 0; yR < ${e.outHeight}; yR++) {
|
|
int xR = wR + yR * ${t} - ${a};
|
|
|
|
if (xR < 0 || xR >= ${e.inHeight}) {
|
|
continue;
|
|
}
|
|
|
|
for (int yC = 0; yC < ${e.outWidth}; yC++) {
|
|
int xC = wC + yC * ${n} - ${r};
|
|
|
|
if (xC < 0 || xC >= ${e.inWidth}) {
|
|
continue;
|
|
}
|
|
|
|
float dyValue = getDy(b, yR, yC, d2);
|
|
float xValue = getX(b, xR, xC, d1);
|
|
dotProd += (xValue * dyValue);
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},oQ=class{constructor(e){this.variableNames=["dy","W"],this.outputShape=e.inShape;let t=e.filterHeight,n=e.filterWidth,a=e.strideHeight,r=e.strideWidth,s=t-1-e.padInfo.top,i=n-1-e.padInfo.left,o=e.outChannels/e.inChannels;this.userCode=`
|
|
const ivec2 pads = ivec2(${s}, ${i});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int d1 = coords[3];
|
|
ivec2 dyCorner = coords.yz - pads;
|
|
int dyRCorner = dyCorner.x;
|
|
int dyCCorner = dyCorner.y;
|
|
|
|
float dotProd = 0.0;
|
|
|
|
for (int wR = 0; wR < ${t}; wR++) {
|
|
float dyR = float(dyRCorner + wR) / ${a}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
int wRPerm = ${t} - 1 - wR;
|
|
|
|
for (int wC = 0; wC < ${n}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${r}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
int wCPerm = ${n} - 1 - wC;
|
|
|
|
// TO DO: Vec4 over the channelMul
|
|
for (int dm = 0; dm < ${o}; dm++) {
|
|
int d2 = d1 * ${o} + dm;
|
|
float xValue = getDy(batch, idyR, idyC, d2);
|
|
float wValue = getW(wRPerm, wCPerm, d1, dm);
|
|
dotProd += xValue * wValue;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function lQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,dy:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,filterShape:p}=a,d=_.computeConv2DInfo(r.shape,p,i,o,l,u,!0),c=new iQ(d);return n.runWebGLProgram(c,[r,s],"float32")}var uQ={kernelName:km,backendName:"webgl",kernelFunc:lQ};function pQ(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,filter:s}=t,{strides:i,dilations:o,pad:l,dimRoundingMode:u,inputShape:p}=a,d=_.computeConv2DInfo(p,s.shape,i,o,l,u,!0),c=new oQ(d);return n.runWebGLProgram(c,[r,s],"float32")}var cQ={kernelName:Im,backendName:"webgl",kernelFunc:pQ},dQ=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 hQ(e){let{inputs:t,backend:n}=e,{x:a}=t,r=[...a.shape,...a.shape],s=k.sizeFromShape(a.shape),i=me({inputs:{x:a},backend:n,attrs:{shape:[s]}}),o=new dQ(s),l=n.runWebGLProgram(o,[i],i.dtype),u=me({inputs:{x:l},backend:n,attrs:{shape:r}});return n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(l),u}var mQ={kernelName:Sm,backendName:"webgl",kernelFunc:hQ},fQ=class{constructor(e){this.variableNames=["x","W"],this.outputShape=e.outShape;let{inHeight:t,inWidth:n,padInfo:a,strideHeight:r,strideWidth:s,filterHeight:i,filterWidth:o,dilationHeight:l,dilationWidth:u}=e,{top:p,left:d}=a;this.userCode=`
|
|
const ivec2 strides = ivec2(${r}, ${s});
|
|
const ivec2 pads = ivec2(${p}, ${d});
|
|
const float neg_infinity = -3.4e38;
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int d1 = coords.w;
|
|
ivec2 outTopLeftCorner =
|
|
coords.yz * strides - pads;
|
|
int hBeg = outTopLeftCorner.x;
|
|
int wBeg = outTopLeftCorner.y;
|
|
|
|
float curVal = neg_infinity;
|
|
for (int h = 0; h < ${i}; h++) {
|
|
int hIn = hBeg + h * ${l};
|
|
|
|
if (hIn >= 0 && hIn < ${t}) {
|
|
for (int w = 0; w < ${o}; w++) {
|
|
int wIn = wBeg + w * ${u};
|
|
|
|
if (wIn >= 0 && wIn < ${n}) {
|
|
float xVal = getX(batch, hIn, wIn, d1);
|
|
float wVal = getW(h, w, d1);
|
|
|
|
float val = xVal + wVal;
|
|
if (val > curVal) {
|
|
curVal = val;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
float result = curVal;
|
|
setOutput(result);
|
|
}
|
|
`}};function gQ(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s}=t,{strides:i,pad:o,dilations:l}=a,u=_.computeDilation2DInfo(r.shape,s.shape,i,o,"NHWC",l),p,d=new fQ(u);p=n.runWebGLProgram(d,[r,s],"float32");let c=me({inputs:{x:p},backend:n,attrs:{shape:u.outShape}});return n.disposeIntermediateTensorInfo(p),c}var yQ={kernelName:gc,backendName:"webgl",kernelFunc:gQ};function bQ(e){let{inputs:t,backend:n,attrs:a}=e,{equation:r}=a,s=t,{allDims:i,summedDims:o,idDims:l}=_.decodeEinsumEquation(r,s.length);_.checkEinsumDimSizes(i.length,l,s);let{path:u,steps:p}=_.getEinsumComputePath(o,l),d=p.length,c=null,h=i.length,m=[];for(let f=0;f<d;++f){for(let g of p[f]){let{permutationIndices:y,expandDims:b}=_.getEinsumPermutation(h,l[g]),x;_.isIdentityPermutation(y)?x=s[g]:(x=pn({inputs:{x:s[g]},backend:n,attrs:{perm:y}}),m.push(x));let v=x.shape.slice();for(let w=0;w<b.length;++w)v.splice(b[w],0,1);k.arraysEqual(x.shape,v)||(x=me({inputs:{x},backend:n,attrs:{shape:v}}),m.push(x)),c===null?c=x:(c=R0({inputs:{a:x,b:c},backend:n}),m.push(c))}f<d-1&&(u[f]>=0&&(c=tg({inputs:{x:c},backend:n,attrs:{axis:u[f]-(i.length-h),keepDims:!1}}),m.push(c)),h--)}for(let f of m)f!==c&&n.disposeIntermediateTensorInfo(f);return c}var xQ={kernelName:Nm,backendName:"webgl",kernelFunc:bQ},vQ="return (x >= 0.0) ? x : (exp(x) - 1.0);",wQ=`
|
|
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;
|
|
`,kQ=Je({opSnippet:vQ,packedOpSnippet:wQ}),IQ={kernelName:Di,backendName:"webgl",kernelFunc:kQ},SQ="return (b >= 1.0) ? a : a * (b + 1.0);",NQ=`
|
|
vec4 bGTEZero = vec4(greaterThanEqual(b, vec4(0.)));
|
|
return (bGTEZero * a) + ((vec4(1.0) - bGTEZero) * (a * (b + vec4(1.0))));
|
|
`,TQ=e=>{let{inputs:t,backend:n}=e,{dy:a,y:r}=t,s=X().getBool("WEBGL_PACK_BINARY_OPERATIONS")?new od(NQ,a.shape,r.shape):new $l(SQ,a.shape,r.shape);return n.runWebGLProgram(s,[a,r],a.dtype)},CQ={kernelName:Tm,backendName:"webgl",kernelFunc:TQ},_Q=`
|
|
return vec4(equal(a, b));
|
|
`,EQ="return float(a == b);",AQ=cn({opSnippet:EQ,packedOpSnippet:_Q,dtype:"bool",cpuKernelImpl:fY}),$Q={kernelName:Xl,backendName:"webgl",kernelFunc:AQ},FQ=`
|
|
// Error function is calculated approximately with elementary function.
|
|
// See "Handbook of Mathematical Functions with Formulas,
|
|
// Graphs, and Mathematical Tables", Abramowitz and Stegun.
|
|
float p = ${_.ERF_P};
|
|
float a1 = ${_.ERF_A1};
|
|
float a2 = ${_.ERF_A2};
|
|
float a3 = ${_.ERF_A3};
|
|
float a4 = ${_.ERF_A4};
|
|
float a5 = ${_.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));
|
|
`,DQ=Je({opSnippet:FQ}),RQ={kernelName:Kl,backendName:"webgl",kernelFunc:DQ},MQ=ep+`
|
|
return exp(x);
|
|
`,PQ=`
|
|
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;
|
|
`,W_=Je({opSnippet:MQ,packedOpSnippet:PQ,cpuKernelImpl:gY,dtype:"float32"}),OQ={kernelName:Ri,backendName:"webgl",kernelFunc:W_};function gx(e){let{inputs:t,attrs:n,backend:a}=e,{dim:r}=n,{input:s}=t,i=s.shape.length,o=s.shape.slice(),l=r;return r<0&&(k.assert(-(i+1)<=r,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+r+1),o.splice(l,0,1),me({inputs:{x:s},backend:a,attrs:{shape:o}})}var LQ={kernelName:Yl,backendName:"webgl",kernelFunc:gx},rI="return exp(x) - 1.0;",zQ=Je({opSnippet:rI,packedOpSnippet:rI,cpuKernelImpl:yY}),WQ={kernelName:Jl,backendName:"webgl",kernelFunc:zQ},sI=class{constructor(e,t,n){this.variableNames=["real","imag"];let a=t[1];this.outputShape=t;let r=n?`2.0 * ${Math.PI}`:`-2.0 * ${Math.PI}`,s=n?`${a}.0`:"1.0",i;if(e==="real")i="return real * expR - imag * expI;";else if(e==="imag")i="return real * expI + imag * expR;";else throw new Error(`FFT component must be either "real" or "imag", got ${e}.`);this.userCode=`
|
|
const float exponentMultiplier = ${r};
|
|
|
|
float unaryOpComplex(float real, float expR, float imag, float expI) {
|
|
${i}
|
|
}
|
|
|
|
float mulMatDFT(int batch, int index) {
|
|
float indexRatio = float(index) / float(${a});
|
|
float exponentMultiplierTimesIndexRatio =
|
|
exponentMultiplier * indexRatio;
|
|
|
|
float result = 0.0;
|
|
|
|
for (int i = 0; i < ${a}; i++) {
|
|
// x = (-2|2 * PI / N) * index * i;
|
|
float x = exponentMultiplierTimesIndexRatio * float(i);
|
|
float expR = cos(x);
|
|
float expI = sin(x);
|
|
float real = getReal(batch, i);
|
|
float imag = getImag(batch, i);
|
|
|
|
result +=
|
|
unaryOpComplex(real, expR, imag, expI) / ${s};
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
setOutput(mulMatDFT(coords[0], coords[1]));
|
|
}
|
|
`}};function B_(e,t,n){let a=n.texData.get(e.dataId),r=k.sizeFromShape(e.shape),s=e.shape[e.shape.length-1],i=r/s,o=me({inputs:{x:e},backend:n,attrs:{shape:[i,s]}}),l=o.shape,u=new sI("real",l,t),p=new sI("imag",l,t),d=[{dataId:a.complexTensorInfos.real.dataId,dtype:a.complexTensorInfos.real.dtype,shape:l},{dataId:a.complexTensorInfos.imag.dataId,dtype:a.complexTensorInfos.imag.dtype,shape:l}],c=n.runWebGLProgram(u,d,"float32"),h=n.runWebGLProgram(p,d,"float32"),m=Cs({inputs:{real:c,imag:h},backend:n});n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h);let f=me({inputs:{x:m},backend:n,attrs:{shape:e.shape}});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(m),f}function BQ(e){let{inputs:t,backend:n}=e,{input:a}=t;return B_(a,!1,n)}var VQ={kernelName:Cm,backendName:"webgl",kernelFunc:BQ},UQ=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 ud(e){let{backend:t,attrs:n}=e,{shape:a,value:r}=n,{dtype:s}=n;if(s=s||k.inferDtype(r),s==="string"){let i=k.getArrayFromDType(s,k.sizeFromShape(a));return i.fill(r),t.makeTensorInfo(a,s,i)}else{let i=new UQ(a,r),o=[[r]];return t.runWebGLProgram(i,[],s,o)}}var GQ={kernelName:yc,backendName:"webgl",kernelFunc:ud},HQ=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);
|
|
}
|
|
`}},jQ={kernelName:Zl,backendName:"webgl",kernelFunc:({inputs:e,backend:t})=>{let{image:n}=e,a=t,r=new HQ(n.shape);return a.runWebGLProgram(r,[n],n.dtype)}},iI="return floor(x);",qQ=Je({opSnippet:iI,packedOpSnippet:iI,cpuKernelImpl:bY}),KQ={kernelName:Mi,backendName:"webgl",kernelFunc:qQ},XQ=`
|
|
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;
|
|
}
|
|
`,YQ=`
|
|
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);
|
|
`,JQ=cn({opSnippet:XQ,packedOpSnippet:YQ,dtype:"int32"}),ZQ={kernelName:Pi,backendName:"webgl",kernelFunc:JQ},QQ=class{constructor(e){this.variableNames=["A"];let t=En(),[n,a]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
vec2 uv = (vec2(texC, texR) + halfCR) / vec2(${a}.0, ${n}.0);
|
|
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
setOutput(floor(value * 255.0 + 0.5));
|
|
}
|
|
`}},eee=class{constructor(e){this.variableNames=["A"],this.packedInputs=!1,this.packedOutput=!0;let t=En(),[n,a]=e;this.outputShape=e,this.userCode=`
|
|
void main() {
|
|
ivec3 coords = getOutputCoords();
|
|
int texR = coords[0];
|
|
int texC = coords[1];
|
|
int depth = coords[2];
|
|
|
|
vec4 result = vec4(0.);
|
|
|
|
for(int row=0; row<=1; row++) {
|
|
for(int col=0; col<=1; col++) {
|
|
texC = coords[1] + row;
|
|
depth = coords[2] + col;
|
|
|
|
vec2 uv = (vec2(texC, texR) + halfCR) /
|
|
vec2(${a}.0, ${n}.0);
|
|
vec4 values = ${t.texture2D}(A, uv);
|
|
float value;
|
|
if (depth == 0) {
|
|
value = values.r;
|
|
} else if (depth == 1) {
|
|
value = values.g;
|
|
} else if (depth == 2) {
|
|
value = values.b;
|
|
} else if (depth == 3) {
|
|
value = values.a;
|
|
}
|
|
|
|
result[row * 2 + col] = floor(value * 255.0 + 0.5);
|
|
}
|
|
}
|
|
|
|
${t.output} = result;
|
|
}
|
|
`}},tee={kernelName:Wh,backendName:"webgl",kernelFunc:nee},pl;function nee(e){let{inputs:t,backend:n,attrs:a}=e,{pixels:r}=t,{numChannels:s}=a,i=typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement,o=typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement,[l,u]=i?[r.videoWidth,r.videoHeight]:[r.width,r.height],p=[u,l],d=[u,l,s];(o||i)&&(pl==null&&(pl=document.createElement("canvas").getContext("2d")),pl.canvas.width=l,pl.canvas.height=u,pl.drawImage(r,0,0,l,u),r=pl.canvas);let c=n.makeTensorInfo(p,"int32");n.texData.get(c.dataId).usage=da.PIXELS,n.gpgpu.uploadPixelDataToTexture(n.getTexture(c.dataId),r);let h=X().getBool("WEBGL_PACK")?new eee(d):new QQ(d),m=n.runWebGLProgram(h,[c],"int32");return n.disposeData(c.dataId),m}function aee(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dataFormat:p,dilations:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=a,f=_.convertConv2DDataFormat(p),g=_.computeConv2DInfo(r.shape,s.shape,l,d,u,c,!1,f),y,b=[];if(g.filterHeight===1&&g.filterWidth===1&&g.dilationHeight===1&&g.dilationWidth===1&&g.strideHeight===1&&g.strideWidth===1&&(g.padInfo.type==="SAME"||g.padInfo.type==="VALID"))y=P_({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else if(X().getBool("WEBGL_CONV_IM2COL")&&r.shape[0]===1)y=O_({x:r,filter:s,convInfo:g,backend:n,bias:i,activation:h,preluActivationWeights:o,leakyreluAlpha:m});else{let v=i!=null,w=o!=null,T=h==="leakyrelu",C=h?Qf(h,!1):null,E=new M_(g,v,C,w,T),$=[r,s];if(i&&$.push(i),o&&$.push(o),T){let P=n.makeTensorInfo([],"float32",k.createScalarValue(m,"float32"));$.push(P),b.push(P)}y=n.runWebGLProgram(E,$,"float32")}let x=me({inputs:{x:y},backend:n,attrs:{shape:g.outShape}});return b.push(y),b.forEach(v=>n.disposeIntermediateTensorInfo(v)),x}var ree={kernelName:ai,backendName:"webgl",kernelFunc:aee};function see(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dimRoundingMode:d,activation:c,leakyreluAlpha:h}=a,m=[],f=p;f==null&&(f=[1,1]),k.assert(_.eitherStridesOrDilationsAreOne(l,f),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${l} and dilations '${f}'`);let g=_.computeConv2DInfo(r.shape,s.shape,l,f,u,d,!0),y=X().getBool("WEBGL_PACK_DEPTHWISECONV")&&g.strideWidth<=2&&g.outChannels/g.inChannels===1,b=c?Qf(c,y):null,x=[r,s],v=i!=null,w=o!=null,T=c==="leakyrelu";if(v&&x.push(i),w&&x.push(o),T){let P=n.makeTensorInfo([],"float32",k.createScalarValue(h,"float32"));x.push(P),m.push(P)}let C;y?C=new z_(g,v,b,w,T):C=new L_(g,v,b,w,T);let E=[[g.padInfo.top,g.padInfo.left],[g.strideHeight,g.strideWidth],[g.dilationHeight,g.dilationWidth],[g.inHeight,g.inWidth]],$=n.runWebGLProgram(C,x,"float32",E);return m.forEach(P=>n.disposeIntermediateTensorInfo(P)),$}var iee={kernelName:ri,backendName:"webgl",kernelFunc:see},oee=class{constructor(e,t,n){this.sliceDim=e,this.strides=t,this.variableNames=["x","indices"],this.outputShape=n;let a=pt(t.length),r=pt(n.length),s=this.sliceDim>1?"strides[j]":"strides";this.userCode=`
|
|
${a} strides = ${a}(${this.strides});
|
|
void main() {
|
|
${r} coords = getOutputCoords();
|
|
int flattenIndex = 0;
|
|
for (int j = 0; j < ${this.sliceDim}; j++) {
|
|
int index = round(getIndices(coords[0], j));
|
|
flattenIndex += index * ${s};
|
|
}
|
|
setOutput(getX(flattenIndex, coords[1]));
|
|
}
|
|
`}};function lee(e){let{inputs:t,backend:n}=e,{params:a,indices:r}=t,s=r.shape,i=s[s.length-1],o=k.sizeFromShape(a.shape),[l,u,p,d]=_.prepareAndValidate(a,r),c=me({inputs:{x:r},backend:n,attrs:{shape:[u,i]}}),h=me({inputs:{x:a},backend:n,attrs:{shape:[k.sizeFromShape(a.shape)/p,p]}});if(n.shouldExecuteOnCPU([a,r])||a.dtype==="string"){let y=n.readSync(r.dataId),b=n.bufferSync(a),x=xY(y,b,a.dtype,u,i,p,d,a.shape,o);return n.makeTensorInfo(l,a.dtype,x.values)}let m=new oee(i,d,[u,p]),f=n.runWebGLProgram(m,[h,c],h.dtype),g=me({inputs:{x:f},backend:n,attrs:{shape:l}});return n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(f),g}var uee={kernelName:eu,backendName:"webgl",kernelFunc:lee},pee=class{constructor(e,t){this.variableNames=["A","indices"],this.outputShape=t,this.rank=t.length;let n=pt(this.rank),a=cee(e,2);this.userCode=`
|
|
void main() {
|
|
${n} resRC = getOutputCoords();
|
|
int index = int(getIndices(resRC.x, resRC.z));
|
|
float inBounds = (index >= 0) && (index < ${e[2]}) ? 1.0 : 0.0;
|
|
setOutput(inBounds * getA(${a}));
|
|
}
|
|
`}};function cee(e,t){let n=["resRC.x","resRC.y","resRC.z","resRC.w"],a=[];for(let r=0;r<e.length;r++)r===2?a.push("index"):a.push(`${n[r]}`);return a.join()}function V_(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,indices:s}=t,{axis:i,batchDims:o}=a,l=k.parseAxisParam(i,r.shape)[0];if(X().get("DEBUG")){let b=n.readSync(s.dataId),x=r.shape[l];for(let v=0;v<b.length;++v){let w=b[v];k.assert(w<=x-1&&w>=0,()=>`GatherV2: the index value ${w} is not in [0, ${x-1}]`)}}let u=_.segment_util.collectGatherOpShapeInfo(r,s,l,o),p=k.sizeFromShape(s.shape),d=[],c=me({inputs:{x:r},backend:n,attrs:{shape:[u.batchSize,u.outerSize,u.dimSize,u.sliceSize]}}),h=me({inputs:{x:s},backend:n,attrs:{shape:[u.batchSize,p/u.batchSize]}});d.push(c),d.push(h);let m=[u.batchSize,u.outerSize,p/u.batchSize,u.sliceSize];if(n.shouldExecuteOnCPU([r,s])||r.dtype==="string"){let b=n.bufferSync(h),x=n.bufferSync(c),v=vY(x,b,m);return d.forEach(w=>n.disposeIntermediateTensorInfo(w)),n.makeTensorInfo(u.outputShape,v.dtype,v.values)}let f=new pee(c.shape,m),g=n.runWebGLProgram(f,[c,h],c.dtype);d.push(g);let y=me({inputs:{x:g},backend:n,attrs:{shape:u.outputShape}});return d.forEach(b=>n.disposeIntermediateTensorInfo(b)),y}var dee={kernelName:Ql,backendName:"webgl",kernelFunc:V_},hee="return float(a > b);",mee=`
|
|
return vec4(greaterThan(a, b));
|
|
`,fee=cn({opSnippet:hee,packedOpSnippet:mee,cpuKernelImpl:wY,dtype:"bool"}),gee={kernelName:tu,backendName:"webgl",kernelFunc:fee},yee="return float(a >= b);",bee=`
|
|
return vec4(greaterThanEqual(a, b));
|
|
`,xee=cn({opSnippet:yee,packedOpSnippet:bee,dtype:"bool",cpuKernelImpl:kY}),vee={kernelName:Li,backendName:"webgl",kernelFunc:xee};function wee(e){let{inputs:t,backend:n}=e,{input:a}=t;return B_(a,!0,n)}var kee={kernelName:_m,backendName:"webgl",kernelFunc:wee},Iee="return float(!isnan(x) && !isinf(x));",See=Je({opSnippet:Iee,dtype:"bool"}),Nee={kernelName:nu,backendName:"webgl",kernelFunc:See},Tee="return float(isinf(x));",Cee=Je({opSnippet:Tee,dtype:"bool"}),_ee={kernelName:au,backendName:"webgl",kernelFunc:Cee},Eee="return float(isnan(x));",Aee=Je({opSnippet:Eee,dtype:"bool"}),$ee={kernelName:ru,backendName:"webgl",kernelFunc:Aee},Fee="return float(a < b);",Dee=`
|
|
return vec4(lessThan(a, b));
|
|
`,Ree=cn({opSnippet:Fee,packedOpSnippet:Dee,cpuKernelImpl:IY,dtype:"bool"}),Mee={kernelName:su,backendName:"webgl",kernelFunc:Ree},Pee="return float(a <= b);",Oee=`
|
|
return vec4(lessThanEqual(a, b));
|
|
`,Lee=cn({opSnippet:Pee,packedOpSnippet:Oee,cpuKernelImpl:SY,dtype:"bool"}),zee={kernelName:iu,backendName:"webgl",kernelFunc:Lee};function Wee(e){let{backend:t,attrs:n}=e,{start:a,stop:r,num:s}=n,i=NY(a,r,s);return t.makeTensorInfo([i.length],"float32",i)}var Bee={kernelName:Am,backendName:"webgl",kernelFunc:Wee},Vee=ep+`
|
|
return x < 0.0 ? 0./0. : log(x);
|
|
`,Uee=`
|
|
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;
|
|
`,Gee=Je({opSnippet:Vee,packedOpSnippet:Uee,cpuKernelImpl:TY}),Hee={kernelName:Bi,backendName:"webgl",kernelFunc:Gee},jee=ep+`
|
|
return log(1.0 + x);
|
|
`,qee=Je({opSnippet:jee}),Kee={kernelName:ou,backendName:"webgl",kernelFunc:qee},Xee="return float(a >= 1.0 && b >= 1.0);",Yee=`
|
|
return vec4(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) *
|
|
vec4(greaterThanEqual(b, vec4(1.0))));
|
|
`,Jee=cn({opSnippet:Xee,packedOpSnippet:Yee,dtype:"bool"}),Zee={kernelName:lu,backendName:"webgl",kernelFunc:Jee},Qee="return float(!(x >= 1.0));",ete=Je({opSnippet:Qee}),tte={kernelName:bc,backendName:"webgl",kernelFunc:ete},nte="return float(a >= 1.0 || b >= 1.0);",ate=`
|
|
return min(
|
|
vec4(greaterThanEqual(a, vec4(1.0))) +
|
|
vec4(greaterThanEqual(b, vec4(1.0))),
|
|
vec4(1.0));
|
|
`,rte=cn({opSnippet:nte,packedOpSnippet:ate,dtype:"bool"}),ste={kernelName:xc,backendName:"webgl",kernelFunc:rte},ite=class{constructor(e,t,n,a,r){this.variableNames=["x"],this.outputShape=[];let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${a}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
int d = coords[3];
|
|
float x = getX(b, r, c, d);
|
|
float sum = 0.0;
|
|
for (int j = -${s}; j <= ${s}; j++) {
|
|
int idx = d + j;
|
|
if (idx >= 0 && idx <= ${i}) {
|
|
float z = getX(b, r, c, idx);
|
|
sum += z * z;
|
|
}
|
|
}
|
|
float val = x * ${o};
|
|
setOutput(val);
|
|
}
|
|
`}},ote=class{constructor(e,t,n,a,r){this.variableNames=["x"],this.outputShape=[],this.packedInputs=!0,this.packedOutput=!0;let s=t,i=e[3]-1;this.outputShape=e;let o,l=`float(${n}) + float(${a}) * sum`;r===.5?o=`inversesqrt(${l})`:r===1?o=`1.0/(${l})`:o=`exp(log(${l}) * float(-${r}));`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords.x;
|
|
int r = coords.y;
|
|
int c = coords.z;
|
|
int d = coords.w;
|
|
|
|
bool hasNextCol = d < ${this.outputShape[3]};
|
|
bool hasNextRow = c < ${this.outputShape[2]};
|
|
|
|
vec4 sum = vec4(0.);
|
|
vec4 xFragAtOutputCoords = getX(b, r, c, d);
|
|
|
|
vec4 xAtOutputCoords = vec4(
|
|
getChannel(xFragAtOutputCoords, vec2(c, d)),
|
|
hasNextCol ?
|
|
getChannel(xFragAtOutputCoords, vec2(c, d + 1)) : 0.0,
|
|
hasNextRow ?
|
|
getChannel(xFragAtOutputCoords , vec2(c + 1, d)) : 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getChannel(xFragAtOutputCoords, vec2(c + 1, d + 1)) : 0.0
|
|
);
|
|
|
|
int firstChannel = d - ${s};
|
|
vec2 cache = vec2(0.);
|
|
if(firstChannel >= 0){
|
|
vec4 firstChannelFrag = getX(b, r, c, firstChannel);
|
|
cache.x = getChannel(firstChannelFrag, vec2(c, firstChannel));
|
|
if(hasNextRow){
|
|
cache.y = getChannel(firstChannelFrag, vec2(c + 1, firstChannel));
|
|
}
|
|
}
|
|
|
|
ivec2 depth = ivec2(d, d + 1);
|
|
for (int j = - ${s}; j <= ${s}; j++) {
|
|
ivec2 idx = depth + j;
|
|
bvec2 aboveLowerBound = greaterThanEqual(idx, ivec2(0));
|
|
bvec2 belowUpperBound = lessThanEqual(idx, ivec2(${i}));
|
|
|
|
bool depthInRange = aboveLowerBound.x && belowUpperBound.x;
|
|
bool depthPlusOneInRange = aboveLowerBound.y && belowUpperBound.y;
|
|
|
|
if(depthInRange || depthPlusOneInRange){
|
|
vec4 z = vec4(0.);
|
|
vec4 xFragAtCurrentDepth;
|
|
z.xz = cache.xy;
|
|
if(depthPlusOneInRange && hasNextCol){
|
|
xFragAtCurrentDepth = idx.y != d ?
|
|
getX(b, r, c, idx.y) : xFragAtOutputCoords;
|
|
z.y = getChannel(xFragAtCurrentDepth, vec2(c, idx.y));
|
|
if(hasNextRow){
|
|
z.w = getChannel(xFragAtCurrentDepth, vec2(c + 1, idx.y));
|
|
}
|
|
}
|
|
cache.xy = z.yw;
|
|
sum += z * z;
|
|
}
|
|
}
|
|
vec4 result = xAtOutputCoords * ${o};
|
|
setOutput(result);
|
|
}
|
|
`}},lte=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{depthRadius:s,bias:i,alpha:o,beta:l}=a,u=X().getBool("WEBGL_PACK_NORMALIZATION")?new ote(r.shape,s,i,o,l):new ite(r.shape,s,i,o,l);return n.runWebGLProgram(u,[r],r.dtype)},ute={kernelName:vc,backendName:"webgl",kernelFunc:lte},pte=class{constructor(e,t,n,a,r){this.variableNames=["inputImage","outputImage","dy"],this.outputShape=[],this.outputShape=e,this.depth=e[3],this.depthRadius=t,this.bias=n,this.alpha=a,this.beta=r,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float result = 0.0;
|
|
for (int d = 0; d < ${this.depth}; ++d) {
|
|
int depthBegin = int(max(0.0, float(d - ${t})));
|
|
int depthEnd = int(min(float(${this.depth}),
|
|
float(d + ${t} + 1)));
|
|
|
|
const int MIN_DEPTH_BEGIN = 0;
|
|
const int MAX_DEPTH_END = ${this.depth};
|
|
|
|
float norm = 0.0;
|
|
for (int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k) {
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd) {
|
|
norm += getInputImage(b, r, c, k) * getInputImage(b, r, c, k);
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
|
|
norm = float(${a}) * norm + float(${n});
|
|
|
|
for(int k = MIN_DEPTH_BEGIN; k < MAX_DEPTH_END; ++k){
|
|
if (k < depthBegin){
|
|
continue;
|
|
}
|
|
else if (k >= depthBegin && k < depthEnd){
|
|
float dyi = -2.0 * float(${a})
|
|
* float(${r})
|
|
* getInputImage(b ,r ,c, k) * getOutputImage(b, r, c, d)
|
|
/ norm;
|
|
if (k == d) {
|
|
dyi += pow(norm, -1.0 * ${r});
|
|
}
|
|
if (k == coords[3]) {
|
|
dyi *= getDy(b, r, c, d);
|
|
result += dyi;
|
|
}
|
|
}
|
|
else {
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`}},cte=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r,y:s,dy:i}=t,{depthRadius:o,bias:l,alpha:u,beta:p}=a,d=new pte(r.shape,o,l,u,p);return n.runWebGLProgram(d,[r,s,i],r.dtype)},dte={kernelName:$m,backendName:"webgl",kernelFunc:cte};function hte(e,t,n,a){let r=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/r,i=me({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=No(i,e.dtype,"max",a),l=me({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}function U_(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reductionIndices:s,keepDims:i}=a,o=r.shape.length,l=k.parseAxisParam(s,r.shape),u=l,p=_.getAxesPermutation(u,o),d=p!=null,c=n.shouldExecuteOnCPU([r]),h=r;if(d){if(c){let b=n.texData.get(h.dataId).values,x=new Array(o);for(let T=0;T<x.length;T++)x[T]=r.shape[p[T]];let v=D0(b,r.shape,r.dtype,p,x);h=n.makeTensorInfo(x,r.dtype);let w=n.texData.get(h.dataId);w.values=v}else h=eg(r,p,n);u=_.getInnerMostAxes(u.length,o)}_.assertAxesAreInnerMostDims("max",u,o);let[m,f]=_.computeOutAndReduceShapes(h.shape,u),g=m;i&&(g=_.expandShapeToKeepDim(m,l));let y;if(c){let b=n.texData.get(h.dataId).values,x=CY(b,k.sizeFromShape(f),g,r.dtype);y=n.makeTensorInfo(g,r.dtype);let v=n.texData.get(y.dataId);v.values=x}else y=hte(h,f,g,n);return d&&n.disposeIntermediateTensorInfo(h),y}var mte={kernelName:Vi,backendName:"webgl",kernelFunc:U_},fte=I_+`
|
|
return max(a, b);
|
|
`,gte=`
|
|
vec4 result = vec4(max(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+Zf+`
|
|
return result;
|
|
`,yte=cn({opSnippet:fte,packedOpSnippet:gte,cpuKernelImpl:_Y}),bte={kernelName:Ui,backendName:"webgl",kernelFunc:yte};function xte(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t;Xu(r,"maxPool");let{filterSize:s,strides:i,pad:o,dimRoundingMode:l}=a,u=1;k.assert(_.eitherStridesOrDilationsAreOne(i,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${i} and dilations '${u}'`);let p=_.computePool2DInfo(r.shape,s,i,u,o,l);if(p.filterWidth===1&&p.filterHeight===1&&k.arraysEqual(p.inShape,p.outShape))return Un({inputs:{x:r},backend:n});let d=new uc(p,"max",!1);return n.runWebGLProgram(d,[r],r.dtype)}var vte={kernelName:Gi,backendName:"webgl",kernelFunc:xte};function wte(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{filterSize:s,strides:i,pad:o,dataFormat:l,dimRoundingMode:u}=a,p=[1,1,1],d=_.computePool3DInfo(r.shape,s,i,p,o,u,l),c=new M0(d,"max",!1);return n.runWebGLProgram(c,[r],r.dtype)}var kte={kernelName:wc,backendName:"webgl",kernelFunc:wte},Ite=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideHeight,n=e.strideWidth,a=e.dilationHeight,r=e.effectiveFilterHeight,s=e.effectiveFilterWidth,i=r-1-e.padInfo.top,o=s-1-e.padInfo.left,l=r*s-1;this.userCode=`
|
|
const ivec2 pads = ivec2(${i}, ${o});
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
|
|
ivec2 dyRCCorner = coords.yz - pads;
|
|
int dyRCorner = dyRCCorner.x;
|
|
int dyCCorner = dyRCCorner.y;
|
|
|
|
// Convolve dy(?, ?, d) with pos mask(:, :, d) to get dx(xR, xC, d).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
for (int wR = 0; wR < ${r};
|
|
wR += ${a}) {
|
|
float dyR = float(dyRCorner + wR) / ${t}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 || fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${s}; wC++) {
|
|
float dyC = float(dyCCorner + wC) / ${n}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(b, idyR, idyC, d);
|
|
int maxPosValue = ${l} - int(getMaxPos(b, idyR, idyC, d));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue = wR * ${s} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}},Ste=class{constructor(e){this.variableNames=["dy","maxPos"],this.outputShape=e.inShape;let t=e.strideDepth,n=e.strideHeight,a=e.strideWidth,r=e.dilationDepth,s=e.dilationHeight,i=e.dilationWidth,o=e.effectiveFilterDepth,l=e.effectiveFilterHeight,u=e.effectiveFilterWidth,p=o-1-e.padInfo.front,d=l-1-e.padInfo.top,c=u-1-e.padInfo.left,h=o*l*u-1;this.userCode=`
|
|
const ivec3 pads = ivec3(${p}, ${d}, ${c});
|
|
|
|
void main() {
|
|
ivec5 coords = getOutputCoords();
|
|
int batch = coords.x;
|
|
int ch = coords.u;
|
|
|
|
ivec3 dyCorner = ivec3(coords.y, coords.z, coords.w) - pads;
|
|
int dyDCorner = dyCorner.x;
|
|
int dyRCorner = dyCorner.y;
|
|
int dyCCorner = dyCorner.z;
|
|
|
|
// Convolve dy(?, ?, ?, ch) with pos mask(:, :, :, d) to get
|
|
// dx(xD, xR, xC, ch).
|
|
// ? = to be determined. : = across all values in that axis.
|
|
float dotProd = 0.0;
|
|
|
|
for (int wD = 0; wD < ${o};
|
|
wD += ${r}) {
|
|
float dyD = float(dyDCorner + wD) / ${t}.0;
|
|
|
|
if (dyD < 0.0 || dyD >= ${e.outDepth}.0 || fract(dyD) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyD = int(dyD);
|
|
|
|
for (int wR = 0; wR < ${l};
|
|
wR += ${s}) {
|
|
float dyR = float(dyRCorner + wR) / ${n}.0;
|
|
|
|
if (dyR < 0.0 || dyR >= ${e.outHeight}.0 ||
|
|
fract(dyR) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyR = int(dyR);
|
|
|
|
for (int wC = 0; wC < ${u};
|
|
wC += ${i}) {
|
|
float dyC = float(dyCCorner + wC) / ${a}.0;
|
|
|
|
if (dyC < 0.0 || dyC >= ${e.outWidth}.0 ||
|
|
fract(dyC) > 0.0) {
|
|
continue;
|
|
}
|
|
int idyC = int(dyC);
|
|
|
|
float dyValue = getDy(batch, idyD, idyR, idyC, ch);
|
|
int maxPosValue = ${h} -
|
|
int(getMaxPos(batch, idyD, idyR, idyC, ch));
|
|
|
|
// Get the current value, check it against the value from the
|
|
// position matrix.
|
|
int curPosValue =
|
|
wD * ${l} * ${u} +
|
|
wR * ${u} + wC;
|
|
float mask = float(maxPosValue == curPosValue ? 1.0 : 0.0);
|
|
|
|
dotProd += dyValue * mask;
|
|
}
|
|
}
|
|
}
|
|
setOutput(dotProd);
|
|
}
|
|
`}};function Nte(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s}=t,i=s,{filterSize:o,strides:l,pad:u,dimRoundingMode:p}=a,d=[1,1,1],c=_.computePool3DInfo(i.shape,o,l,d,u,p),h=new M0(c,"max",!0),m=n.runWebGLProgram(h,[i],i.dtype),f=new Ste(c),g=n.runWebGLProgram(f,[r,m],i.dtype);return n.disposeIntermediateTensorInfo(m),g}var Tte={kernelName:Dm,backendName:"webgl",kernelFunc:Nte};function Cte(e){let{inputs:t,backend:n,attrs:a}=e,{dy:r,input:s,output:i}=t,o=s;Xu([s,i],"maxPoolGrad");let{filterSize:l,strides:u,pad:p,dimRoundingMode:d}=a,c=_.computePool2DInfo(o.shape,l,u,1,p,d),h=!0,m=new uc(c,"max",h),f=n.runWebGLProgram(m,[o],o.dtype),g=new Ite(c),y=n.runWebGLProgram(g,[r,f],o.dtype);return n.disposeIntermediateTensorInfo(f),y}var _te={kernelName:Fm,backendName:"webgl",kernelFunc:Cte};function Ete(e,t,n,a){let r=new uc(n,"max",!1),s=a.runWebGLProgram(r,[e],"float32");r=new uc(n,"max",!0,!0,t);let i=a.runWebGLProgram(r,[e],"float32");return[s,i]}var Ate={kernelName:Rm,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{filterSize:r,strides:s,pad:i,includeBatchInIndex:o}=t,l=n;k.assert(a.shape.length===4,()=>`Error in maxPool: input must be rank 4 but got rank ${a.shape.length}.`);let u=[1,1];k.assert(_.eitherStridesOrDilationsAreOne(s,u),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${s} and dilations '${u}'`);let p=_.computePool2DInfo(a.shape,r,s,u,i),[d,c]=Ete(a,o,p,l);return[d,c]}};function $te(e,t,n,a){let r=k.sizeFromShape(t),s=k.sizeFromShape(e.shape)/r,i=me({inputs:{x:e},attrs:{shape:[s,r]},backend:a}),o=No(i,"float32","mean",a),l=me({inputs:{x:o},attrs:{shape:n},backend:a});return a.disposeIntermediateTensorInfo(i),a.disposeIntermediateTensorInfo(o),l}var Fte={kernelName:Hi,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{x:a}=e,{keepDims:r,axis:s}=t,i=n,o=a.shape.length,l=k.parseAxisParam(s,a.shape),u=l,p=_.getAxesPermutation(u,o),d=p!=null,c=i.shouldExecuteOnCPU([a]),h=[],m=a;if(d){if(c){let x=i.texData.get(m.dataId).values,v=new Array(o);for(let C=0;C<v.length;C++)v[C]=a.shape[p[C]];let w=D0(x,a.shape,a.dtype,p,v);m=i.makeTensorInfo(v,a.dtype);let T=i.texData.get(m.dataId);T.values=w}else m=eg(a,p,i);h.push(m),u=_.getInnerMostAxes(u.length,o)}_.assertAxesAreInnerMostDims("sum",u,o);let[f,g]=_.computeOutAndReduceShapes(m.shape,u),y=f;r&&(y=_.expandShapeToKeepDim(f,l));let b=$te(m,g,y,i);for(let x of h)i.disposeIntermediateTensorInfo(x);return b}};function Dte(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=k.parseAxisParam(s,r.shape),u=l,p=_.getAxesPermutation(u,o),d=r;p!=null&&(d=pn({inputs:{x:r},backend:n,attrs:{perm:p}}),u=_.getInnerMostAxes(u.length,r.shape.length)),_.assertAxesAreInnerMostDims("min",u,o);let[c,h]=_.computeOutAndReduceShapes(d.shape,u),m=k.sizeFromShape(h),f=me({inputs:{x:d},backend:n,attrs:{shape:[-1,m]}}),g=No(f,f.dtype,"min",n),y;if(i){let b=_.expandShapeToKeepDim(c,l);y=me({inputs:{x:g},backend:n,attrs:{shape:b}})}else y=me({inputs:{x:g},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(f),n.disposeIntermediateTensorInfo(g),p!=null&&n.disposeIntermediateTensorInfo(d),y}var Rte={kernelName:ji,backendName:"webgl",kernelFunc:Dte},Mte=I_+`
|
|
return min(a, b);
|
|
`,Pte=`
|
|
vec4 result = vec4(min(a, b));
|
|
vec4 isNaN = min(vec4(isnan(a)) + vec4(isnan(b)), vec4(1.0));
|
|
`+Zf+`
|
|
return result;
|
|
`,Ote=cn({opSnippet:Mte,packedOpSnippet:Pte,cpuKernelImpl:EY}),Lte={kernelName:qi,backendName:"webgl",kernelFunc:Ote},zte=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=t.map((u,p)=>u[0]+e[p]+u[1]);let a=e.length,r=pt(a),s=t.map(u=>u[0]).join(","),i=t.map((u,p)=>u[0]+e[p]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a),l=n==="reflect"?0:1;if(a===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start) {
|
|
outC = start * 2 - outC - ${l};
|
|
} else if(outC >= end) {
|
|
outC = (end - 1) * 2 - outC + ${l};
|
|
}
|
|
setOutput(getX(outC - start));
|
|
}
|
|
`;return}this.userCode=`
|
|
${r} start = ${r}(${s});
|
|
${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outC = getOutputCoords();
|
|
for (int i = 0; i < ${a}; i++) {
|
|
if (outC[i] < start[i]) {
|
|
outC[i] = start[i] * 2 - outC[i] - ${l};
|
|
} else if(outC[i] >= end[i]) {
|
|
outC[i] = (end[i] - 1) * 2 - outC[i] + ${l};
|
|
}
|
|
}
|
|
${r} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
`}},Wte=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=t.map((h,m)=>h[0]+e[m]+h[1]);let a=e.length,r=pt(a),s=t.map(h=>h[0]).join(","),i=t.map((h,m)=>h[0]+e[m]).join(","),o=Nn("rc",a),l=Nn("source",a),u=`${o[a-1]} < ${this.outputShape[a-1]}`,p=a===1?"source":`vec2(${l.slice(-2).join()})`,d=n==="reflect"?0:1,c="";if(a===1){let h=`
|
|
${r} source = rc;
|
|
if (source < start) {
|
|
source = start * 2 - source - ${d};
|
|
} else if (source >= end) {
|
|
source = (end - 1) * 2 - source + ${d};
|
|
}
|
|
source -= start;
|
|
`;c=`
|
|
${r} rc = outputLoc;
|
|
${h}
|
|
result[0] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
`}else{let h=`
|
|
${r} source = rc;
|
|
${r} lt = ${r}(lessThan(source, start));
|
|
${r} gte = ${r}(greaterThanEqual(source, end));
|
|
${r} orig = 1 - (lt + gte);
|
|
source = orig * source +
|
|
lt * (start * 2 - source - ${d}) +
|
|
gte * ((end - 1) * 2 - source + ${d});
|
|
source -= start;
|
|
`;c=`
|
|
${r} rc = outputLoc;
|
|
${h}
|
|
result[0] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[1] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
rc = outputLoc;
|
|
${o[a-2]} += 1;
|
|
if(${o[a-2]} < ${this.outputShape[a-2]}) {
|
|
${h}
|
|
result[2] = getChannel(getX(${l.join()}), ${p});
|
|
${o[a-1]} += 1;
|
|
if(${u}) {
|
|
${h}
|
|
result[3] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
}
|
|
`}this.userCode=`
|
|
const ${r} start = ${r}(${s});
|
|
const ${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${c}
|
|
setOutput(result);
|
|
}
|
|
`}},Bte=({inputs:e,backend:t,attrs:n})=>{let{x:a}=e,{paddings:r,mode:s}=n,i=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new Wte(a.shape,r,s):new zte(a.shape,r,s);return t.runWebGLProgram(i,[a],a.dtype)},Vte={kernelName:Ki,backendName:"webgl",kernelFunc:Bte},Ute=`if (b == 0.0) return NAN;
|
|
return mod(a, b);`,Gte=`
|
|
vec4 result = mod(a, b);
|
|
vec4 isNaN = vec4(equal(b, vec4(0.0)));
|
|
`+Zf+`
|
|
return result;
|
|
`,Hte=cn({opSnippet:Ute,packedOpSnippet:Gte}),jte={kernelName:uu,backendName:"webgl",kernelFunc:Hte},qte=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}));
|
|
}
|
|
`}},Kte=`
|
|
if (a == b) {
|
|
return 1.0;
|
|
};
|
|
return a / b;`,Xte=`
|
|
// 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;
|
|
`,G_=cn({opSnippet:Kte,packedOpSnippet:Xte,checkOutOfBounds:!0}),Yte={kernelName:Fi,backendName:"webgl",kernelFunc:G_},oI="return a - b;",H_=cn({opSnippet:oI,packedOpSnippet:oI,supportsComplex:!0,cpuKernelImpl:HY}),Jte={kernelName:ho,backendName:"webgl",kernelFunc:H_};function j_(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{dim:s}=a,i=k.parseAxisParam([s],r.shape),o=U_({inputs:{x:r},backend:n,attrs:{reductionIndices:i,keepDims:!1}}),l=_.expandShapeToKeepDim(o.shape,i),u=me({inputs:{x:o},backend:n,attrs:{shape:l}}),p=H_({inputs:{a:r,b:u},backend:n}),d=W_({inputs:{x:p},backend:n}),c=tg({inputs:{x:d},backend:n,attrs:{axis:i,keepDims:!1}}),h=me({inputs:{x:c},backend:n,attrs:{shape:l}}),m=G_({inputs:{a:d,b:h},backend:n});return n.disposeIntermediateTensorInfo(o),n.disposeIntermediateTensorInfo(u),n.disposeIntermediateTensorInfo(p),n.disposeIntermediateTensorInfo(d),n.disposeIntermediateTensorInfo(c),n.disposeIntermediateTensorInfo(h),m}var Zte={kernelName:po,backendName:"webgl",kernelFunc:j_};function Qte(e){let{inputs:t,backend:n,attrs:a}=e,{logits:r}=t,{numSamples:s,seed:i,normalized:o}=a,l=o?r:j_({inputs:{logits:r},backend:n,attrs:{dim:r.shape.length-1}}),u=l.shape[0],p=l.shape[1],d=new qte(u,p,s),c=[[i]],h=n.runWebGLProgram(d,[l],"int32",c);return o||n.disposeIntermediateTensorInfo(l),h}var ene={kernelName:Mm,backendName:"webgl",kernelFunc:Qte},tne=$a+`
|
|
return -x;
|
|
`,nne=`
|
|
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 ane(e){let{inputs:t,backend:n}=e,{x:a}=t;if(n.shouldExecuteOnCPU([a])){let s=n.texData.get(a.dataId),[i,o]=$Y(s.values,a.shape,a.dtype);return n.makeTensorInfo(o,a.dtype,i)}let r;return X().getBool("WEBGL_PACK_UNARY_OPERATIONS")?r=new Js(a.shape,nne):r=new Cr(a.shape,tne),n.runWebGLProgram(r,[a],a.dtype)}var rne={kernelName:pu,backendName:"webgl",kernelFunc:ane},sne=gr.nonMaxSuppressionV3Impl;function ine(e){_.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l}=a,u=n.readSync(r.dataId),p=n.readSync(s.dataId),{selectedIndices:d}=sne(u,p,i,o,l);return n.makeTensorInfo([d.length],"int32",new Int32Array(d))}var one={kernelName:du,backendName:"webgl",kernelFunc:ine},lne=gr.nonMaxSuppressionV4Impl;function une(e){_.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,padToMaxOutputSize:u}=a,p=n.readSync(r.dataId),d=n.readSync(s.dataId),{selectedIndices:c,validOutputs:h}=lne(p,d,i,o,l,u);return[n.makeTensorInfo([c.length],"int32",new Int32Array(c)),n.makeTensorInfo([],"int32",new Int32Array([h]))]}var pne={kernelName:hu,backendName:"webgl",kernelFunc:une},cne=gr.nonMaxSuppressionV5Impl;function dne(e){_.warn("tf.nonMaxSuppression() in webgl locks the UI thread. Call tf.nonMaxSuppressionAsync() instead");let{inputs:t,backend:n,attrs:a}=e,{boxes:r,scores:s}=t,{maxOutputSize:i,iouThreshold:o,scoreThreshold:l,softNmsSigma:u}=a,p=n.readSync(r.dataId),d=n.readSync(s.dataId),c=i,h=o,m=l,f=u,{selectedIndices:g,selectedScores:y}=cne(p,d,c,h,m,f);return[n.makeTensorInfo([g.length],"int32",new Int32Array(g)),n.makeTensorInfo([y.length],"float32",new Float32Array(y))]}var hne={kernelName:mu,backendName:"webgl",kernelFunc:dne},mne=class{constructor(e,t,n,a){this.variableNames=["indices"],this.outputShape=[e,t],this.userCode=`
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int index = round(getIndices(coords.x));
|
|
setOutput(mix(float(${a}), float(${n}),
|
|
float(index == coords.y)));
|
|
}
|
|
`}},fne=e=>{let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{depth:s,onValue:i,offValue:o}=a,l=k.sizeFromShape(r.shape),u=new mne(l,s,i,o),p=me({inputs:{x:r},backend:n,attrs:{shape:[l]}}),d=n.runWebGLProgram(u,[p],r.dtype);n.disposeIntermediateTensorInfo(p);let c=[...r.shape,s],h=me({inputs:{x:d},backend:n,attrs:{shape:c}});return n.disposeIntermediateTensorInfo(d),h},gne={kernelName:Yi,backendName:"webgl",kernelFunc:fne};function lm(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="complex64"){let r=ld({inputs:{input:a},backend:n}),s=lm({inputs:{x:r},backend:n}),i=ng({inputs:{input:a},backend:n}),o=lm({inputs:{x:i},backend:n}),l=Cs({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return ud({attrs:{shape:a.shape,dtype:a.dtype,value:a.dtype==="string"?"":0},backend:n})}var yne={kernelName:Ru,backendName:"webgl",kernelFunc:lm};function q_(e){let{inputs:t,backend:n}=e,{x:a}=t;if(a.dtype==="string")throw new Error("onesLike is not supported under string dtype");if(a.dtype==="complex64"){let r=ld({inputs:{input:a},backend:n}),s=q_({inputs:{x:r},backend:n}),i=ng({inputs:{input:a},backend:n}),o=lm({inputs:{x:i},backend:n}),l=Cs({inputs:{real:s,imag:o},backend:n});return n.disposeIntermediateTensorInfo(r),n.disposeIntermediateTensorInfo(s),n.disposeIntermediateTensorInfo(i),n.disposeIntermediateTensorInfo(o),l}else return ud({attrs:{shape:a.shape,dtype:a.dtype,value:1},backend:n})}var bne={kernelName:fu,backendName:"webgl",kernelFunc:q_};function xne(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return gx({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{k.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=gx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=R_({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeIntermediateTensorInfo(p)),u}var vne={kernelName:gu,backendName:"webgl",kernelFunc:xne},wne=class{constructor(e,t,n){this.variableNames=["x"],this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((l,u)=>l[0]+e[u]+l[1]);let a=e.length,r=pt(a),s=t.map(l=>l[0]).join(","),i=t.map((l,u)=>l[0]+e[u]).join(","),o=["coords[0]","coords[1]","coords[2]","coords[3]"].slice(0,a);if(a===1){this.userCode=`
|
|
int start = ${s};
|
|
int end = ${i};
|
|
|
|
void main() {
|
|
int outC = getOutputCoords();
|
|
if (outC < start || outC >= end) {
|
|
setOutput(value);
|
|
} else {
|
|
setOutput(getX(outC - start));
|
|
}
|
|
}
|
|
`;return}this.userCode=`
|
|
${r} start = ${r}(${s});
|
|
${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outC = getOutputCoords();
|
|
if (any(lessThan(outC, start)) || any(greaterThanEqual(outC, end))) {
|
|
setOutput(value);
|
|
} else {
|
|
${r} coords = outC - start;
|
|
setOutput(getX(${o}));
|
|
}
|
|
}
|
|
`}},kne=class{constructor(e,t,n){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0,this.customUniforms=[{name:"value",type:"float"}],this.outputShape=t.map((m,f)=>m[0]+e[f]+m[1]);let a=e.length,r=pt(a),s=t.map(m=>m[0]).join(","),i=t.map((m,f)=>m[0]+e[f]).join(","),o=Nn("rc",a),l=Nn("source",a),u=`${o[a-1]} < ${this.outputShape[a-1]}`,p=a===1?"source":`vec2(${l.slice(-2).join()})`,d=[`${r} rc = outputLoc;`,`${o[a-1]} += 1;
|
|
if(${u}) {
|
|
`,a===1?"":`}
|
|
rc = outputLoc;
|
|
${o[a-2]} += 1;
|
|
if(${o[a-2]} < ${this.outputShape[a-2]}) {`,a===1?"":` ${o[a-1]} += 1;
|
|
if(${u}) {`],c=a===1?"rc < start || rc >= end":"any(lessThan(rc, start)) || any(greaterThanEqual(rc, end))",h="";for(let m=0,f=a===1?2:4;m<f;m++)h+=`
|
|
${d[m]}
|
|
if (${c}) {
|
|
result[${m}] = float(value);
|
|
} else {
|
|
${r} source = rc - start;
|
|
result[${m}] = getChannel(getX(${l.join()}), ${p});
|
|
}
|
|
`;h+=a===1?"} ":"}}",this.userCode=`
|
|
const ${r} start = ${r}(${s});
|
|
const ${r} end = ${r}(${i});
|
|
|
|
void main() {
|
|
${r} outputLoc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
${h}
|
|
setOutput(result);
|
|
}
|
|
`}},K_=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{paddings:s,constantValue:i}=a;if(k.sizeFromShape(r.shape)===0){let u=s.map((p,d)=>p[0]+r.shape[d]+p[1]);return ud({backend:n,attrs:{shape:u,value:i,dtype:r.dtype}})}let o=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new kne(r.shape,s,i):new wne(r.shape,s,i),l=[[i]];return n.runWebGLProgram(o,[r],r.dtype,l)},Ine={kernelName:Ji,backendName:"webgl",kernelFunc:K_},Sne=`
|
|
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);
|
|
`,Nne=`
|
|
// isModRound1 has 1 for components with round(mod(b, 2.0)) == 1, 0 otherwise.
|
|
vec4 isModRound1 = vec4(equal(round(mod(b, 2.0)), ivec4(1)));
|
|
vec4 multiplier = sign(a) * isModRound1 + (vec4(1.0) - isModRound1);
|
|
vec4 result = multiplier * pow(abs(a), b);
|
|
|
|
// Ensure that a^0 = 1, including 0^0 = 1 as this correspond to TF and JS
|
|
bvec4 isExpZero = equal(b, vec4(0.0));
|
|
result.r = isExpZero.r ? 1.0 : result.r;
|
|
result.g = isExpZero.g ? 1.0 : result.g;
|
|
result.b = isExpZero.b ? 1.0 : result.b;
|
|
result.a = isExpZero.a ? 1.0 : result.a;
|
|
|
|
vec4 isNaN = vec4(lessThan(a, vec4(0.0))) * vec4(lessThan(floor(b), b));
|
|
`+Zf+`
|
|
return result;
|
|
`,Tne=cn({opSnippet:Sne,packedOpSnippet:Nne}),Cne={kernelName:Zi,backendName:"webgl",kernelFunc:Tne};function _ne(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,keepDims:i}=a,o=r.shape.length,l=[],u=k.parseAxisParam(s,r.shape),p=u,d=_.getAxesPermutation(p,o),c=r;d!=null&&(c=pn({inputs:{x:r},backend:n,attrs:{perm:d}}),p=_.getInnerMostAxes(p.length,o),l.push(c)),_.assertAxesAreInnerMostDims("prod",p,o);let h;if(n.shouldExecuteOnCPU([c])){let m=n.texData.get(c.dataId).values,{outVals:f,outShape:g,outDtype:y}=DY(c.shape,c.dtype,m,p);h=n.makeTensorInfo(g,y,f)}else{let[m,f]=_.computeOutAndReduceShapes(c.shape,p),g=k.sizeFromShape(f),y=me({inputs:{x:c},backend:n,attrs:{shape:[-1,g]}}),b=Hm(r.dtype),x=No(y,b,"prod",n);h=me({inputs:{x},backend:n,attrs:{shape:m}}),l.push(y),l.push(x)}if(i){l.push(h);let m=_.expandShapeToKeepDim(h.shape,u);h=me({inputs:{x:h},backend:n,attrs:{shape:m}})}return l.forEach(m=>n.disposeIntermediateTensorInfo(m)),h}var Ene={kernelName:yu,backendName:"webgl",kernelFunc:_ne},X_=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=RY(a,r,s,i);return t.makeTensorInfo([o.length],i,o)},Ane={kernelName:kc,backendName:"webgl",kernelFunc:X_},$ne="return 1.0 / x;",Fne=Je({opSnippet:$ne}),Dne={kernelName:bu,backendName:"webgl",kernelFunc:Fne},Rne=$a+`
|
|
return (x < 0.0) ? 0.0 : x;
|
|
`,Mne=`
|
|
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;
|
|
`,Pne=Je({opSnippet:Rne,packedOpSnippet:Mne}),One={kernelName:eo,backendName:"webgl",kernelFunc:Pne},Lne=$a+`
|
|
return (x < 0.0) ? 0.0 : min(6.0, x);
|
|
`,zne=`
|
|
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;
|
|
`,Wne=Je({opSnippet:Lne,packedOpSnippet:zne}),Bne={kernelName:no,backendName:"webgl",kernelFunc:Wne},Vne=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d;r?d="(vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC - vec2(0.5)":d="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the four integer indices.
|
|
ivec2 sourceFloorRC = ivec2(max(sourceFracIndexRC, vec2(0.0)));
|
|
ivec2 sourceCeilRC = ivec2(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
float topLeft = getA(b, sourceFloorRC.x, sourceFloorRC.y, d);
|
|
float bottomLeft = getA(b, sourceCeilRC.x, sourceFloorRC.y, d);
|
|
float topRight = getA(b, sourceFloorRC.x, sourceCeilRC.y, d);
|
|
float bottomRight = getA(b, sourceCeilRC.x, sourceCeilRC.y, d);
|
|
|
|
vec2 fracRC = sourceFracIndexRC - vec2(sourceFloorRC);
|
|
|
|
float top = topLeft + (topRight - topLeft) * fracRC.y;
|
|
float bottom = bottomLeft + (bottomRight - bottomLeft) * fracRC.y;
|
|
float newValue = top + (bottom - top) * fracRC.x;
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}},Une=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d;r?d="(vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC - vec3(0.5)":d="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]},
|
|
${u[1]/p[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${d};
|
|
|
|
// Compute the four integer indices.
|
|
ivec3 sourceFloorRC = ivec3(max(sourceFracIndexRC, vec3(0.0)));
|
|
ivec3 sourceCeilRC = ivec3(
|
|
min(inputShapeRC - 1.0, ceil(sourceFracIndexRC)));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-1};
|
|
|
|
// In parallel, construct four corners for all four components in
|
|
// packed 2x2 cell.
|
|
vec4 topLeft = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomLeft = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceFloorRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceFloorRC.z, d + 1) : 0.0);
|
|
|
|
vec4 topRight = vec4(
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceFloorRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceFloorRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec4 bottomRight = vec4(
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceCeilRC.x, sourceCeilRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceCeilRC.x, sourceCeilRC.z, d + 1) : 0.0);
|
|
|
|
vec3 fracRC = sourceFracIndexRC - vec3(sourceFloorRC);
|
|
|
|
vec4 top = mix(topLeft, topRight, fracRC.yyzz);
|
|
vec4 bottom = mix(bottomLeft, bottomRight, fracRC.yyzz);
|
|
vec4 newValue = mix(top, bottom, fracRC.x);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function Gne(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=X().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Une(r.shape,l,u,s,i):new Vne(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],"float32")}var Hne={kernelName:to,backendName:"webgl",kernelFunc:Gne},jne=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,a,r]=t,[,s,i]=e,o=[n&&s>1?a-1:a,n&&i>1?r-1:r],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],d=1/u,c=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(c)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${p});
|
|
|
|
const float invHeightScale = float(${d});
|
|
const float invWidthScale = float(${c});
|
|
|
|
const int winHeight = int(${h});
|
|
const int winWidth = int(${m});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(startRLerp - float(winHeight / 2));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(startCLerp - float(winWidth / 2));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float dxR = float(dyR) * heightScale;
|
|
int topDxRIndex = int(floor(dxR));
|
|
int bottomDxRIndex = int(min(ceil(dxR), ${a-1}.0));
|
|
float dxRLerp = dxR - float(topDxRIndex);
|
|
float inverseDxRLerp = 1.0 - dxRLerp;
|
|
|
|
float dxC = float(dyC) * widthScale;
|
|
int leftDxCIndex = int(floor(dxC));
|
|
int rightDxCIndex = int(min(ceil(dxC), ${r-1}.0));
|
|
float dxCLerp = dxC - float(leftDxCIndex);
|
|
float inverseDxCLerp = 1.0 - dxCLerp;
|
|
|
|
if (r == topDxRIndex && c == leftDxCIndex) {
|
|
// topLeft
|
|
accumulator +=
|
|
getDy(b, dyR, dyC, d) * inverseDxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == topDxRIndex && c == rightDxCIndex) {
|
|
// topRight
|
|
accumulator += getDy(b, dyR, dyC, d) * inverseDxRLerp * dxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == leftDxCIndex) {
|
|
// bottomLeft
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * inverseDxCLerp;
|
|
}
|
|
|
|
if (r == bottomDxRIndex && c == rightDxCIndex) {
|
|
// bottomRight
|
|
accumulator += getDy(b, dyR, dyC, d) * dxRLerp * dxCLerp;
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function qne(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new jne(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var Kne={kernelName:Lm,backendName:"webgl",kernelFunc:qne},Xne=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d=a?"0.5":"0.0",c;r?c="max((vec2(yRC) + vec2(0.5)) * effectiveInputOverOutputRatioRC, vec2(0.0))":c="vec2(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec2 effectiveInputOverOutputRatioRC = vec2(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]});
|
|
const vec2 inputShapeRC = vec2(${i}.0, ${o}.0);
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
ivec2 yRC = coords.yz;
|
|
|
|
// Fractional source index.
|
|
vec2 sourceFracIndexRC = ${c};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec2 sourceNearestRC = ivec2(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d})));
|
|
float newValue = getA(b, sourceNearestRC.x, sourceNearestRC.y, d);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}},Yne=class{constructor(e,t,n,a,r){this.variableNames=["A"],this.packedInputs=!0,this.packedOutput=!0,this.outputShape=[];let[s,i,o,l]=e;this.outputShape=[s,t,n,l];let u=[a&&t>1?i-1:i,a&&n>1?o-1:o],p=[a&&t>1?t-1:t,a&&n>1?n-1:n],d=a?"0.5":"0.0",c;r?c="max((vec3(yRC) + vec3(0.5)) * effectiveInputOverOutputRatioRC, vec3(0.0))":c="vec3(yRC) * effectiveInputOverOutputRatioRC",this.userCode=`
|
|
const vec3 effectiveInputOverOutputRatioRC = vec3(
|
|
${u[0]/p[0]},
|
|
${u[1]/p[1]},
|
|
${u[1]/p[1]});
|
|
const vec3 inputShapeRC = vec3(${i}.0, ${o}.0,
|
|
${o}.0);
|
|
|
|
float getAValue(int b, int r, int c, int d) {
|
|
return getChannel(getA(b, r, c, d), vec2(c, d));
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
// Calculate values for next column in yRC.z.
|
|
ivec3 yRC = coords.yzz + ivec3(0, 0, 1);
|
|
|
|
// Fractional source index.
|
|
vec3 sourceFracIndexRC = ${c};
|
|
|
|
// Compute the coordinators of nearest neighbor point.
|
|
ivec3 sourceNearestRC = ivec3(
|
|
min(inputShapeRC - 1.0, floor(sourceFracIndexRC + ${d})));
|
|
|
|
// Should we calculate next column and row elements in 2x2 packed cell.
|
|
bool hasNextCol = d < ${l-1};
|
|
bool hasNextRow = coords.z < ${n-1};
|
|
|
|
vec4 newValue = vec4(
|
|
getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d),
|
|
hasNextCol ? getAValue(b, sourceNearestRC.x, sourceNearestRC.y, d + 1)
|
|
: 0.0,
|
|
hasNextRow ? getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d)
|
|
: 0.0,
|
|
(hasNextRow && hasNextCol) ?
|
|
getAValue(b, sourceNearestRC.x, sourceNearestRC.z, d + 1) : 0.0);
|
|
|
|
setOutput(newValue);
|
|
}
|
|
`}};function Jne(e){let{inputs:t,backend:n,attrs:a}=e,{images:r}=t,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,p=X().getBool("WEBGL_PACK_IMAGE_OPERATIONS")?new Yne(r.shape,l,u,s,i):new Xne(r.shape,l,u,s,i);return n.runWebGLProgram(p,[r],r.dtype)}var Zne={kernelName:Ic,backendName:"webgl",kernelFunc:Jne},Qne=class{constructor(e,t,n){this.variableNames=["dy"],this.outputShape=[],this.outputShape=t;let[,a,r]=t,[,s,i]=e,o=[n&&s>1?a-1:a,n&&i>1?r-1:r],l=[n&&s>1?s-1:s,n&&i>1?i-1:i],u=o[0]/l[0],p=o[1]/l[1],d=1/u,c=1/p,h=Math.ceil(d)*2+2,m=Math.ceil(c)*2+2;this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int b = coords[0];
|
|
int d = coords[3];
|
|
int r = coords[1];
|
|
int c = coords[2];
|
|
|
|
float accumulator = 0.0;
|
|
|
|
const float heightScale = float(${u});
|
|
const float widthScale = float(${p});
|
|
|
|
const float invHeightScale = float(${d});
|
|
const float invWidthScale = float(${c});
|
|
|
|
const int winHeight = int(${h});
|
|
const int winWidth = int(${m});
|
|
|
|
// Compute bounds for where in dy we will look
|
|
float startRLerp = floor(float(r) * invHeightScale);
|
|
int startDyR = int(floor(startRLerp - float(winHeight / 2)));
|
|
|
|
float startCLerp = floor(float(c) * invWidthScale);
|
|
int startDyC = int(floor(startCLerp - float(winWidth / 2)));
|
|
|
|
// Loop over dy
|
|
for (int dyROffset = 0; dyROffset < winHeight; dyROffset++) {
|
|
int dyR = dyROffset + startDyR;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyR < 0 || dyR >= ${s}) {
|
|
continue;
|
|
}
|
|
|
|
for (int dyCOffset = 0; dyCOffset < winWidth; dyCOffset++) {
|
|
int dyC = dyCOffset + startDyC;
|
|
|
|
// Guard against the window exceeding the bounds of dy
|
|
if (dyC < 0 || dyC >= ${i}) {
|
|
continue;
|
|
}
|
|
|
|
float sourceFracRow =
|
|
float(${o[0]}) *
|
|
(float(dyR) / float(${l[0]}));
|
|
|
|
float sourceFracCol =
|
|
float(${o[1]}) *
|
|
(float(dyC) / float(${l[1]}));
|
|
|
|
int sourceNearestRow = int(min(
|
|
float(int(${a}) - 1),
|
|
${n} ? float(round(sourceFracRow)) :
|
|
float(floor(sourceFracRow))));
|
|
|
|
int sourceNearestCol = int(min(
|
|
float(int(${r}) - 1),
|
|
${n} ? float(round(sourceFracCol)) :
|
|
float(floor(sourceFracCol))));
|
|
|
|
if (r == sourceNearestRow && c == sourceNearestCol) {
|
|
accumulator += getDy(b, dyR, dyC, d);
|
|
}
|
|
}
|
|
}
|
|
// End loop over dy
|
|
|
|
setOutput(accumulator);
|
|
}
|
|
`}};function eae(e){let{inputs:t,backend:n,attrs:a}=e,{images:r,dy:s}=t,{alignCorners:i}=a,o=new Qne(s.shape,r.shape,i);return n.runWebGLProgram(o,[s],s.dtype)}var tae={kernelName:Om,backendName:"webgl",kernelFunc:eae},nae=class{constructor(e,t){this.variableNames=["x"];let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);if(this.outputShape=e,n===1){this.userCode=`
|
|
void main() {
|
|
int coord = getOutputCoords();
|
|
setOutput(getX(${e[0]} - coord - 1));
|
|
}
|
|
`;return}let a=i=>t.indexOf(i)!==-1&&e[i]!==1?`${e[i]} - coords[${i}] - 1`:`coords[${i}]`,r=e.map((i,o)=>a(o)).join(","),s=pt(n);this.userCode=`
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${r}));
|
|
}
|
|
`}},aae=class{constructor(e,t){this.variableNames=["x"],this.packedInputs=!0,this.packedOutput=!0;let n=e.length;if(n>4)throw new Error(`WebGL backend: Reverse of rank-${n} tensor is not yet supported`);this.outputShape=e;let a=Nn("rc",n),r=`${a[n-1]} + 1 < ${this.outputShape[n-1]}`,s=`${a[n-2]} + 1 < ${this.outputShape[n-2]}`,i=pt(n);n===1?this.userCode=`
|
|
void main(){
|
|
int rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = getChannel(getX(${e[0]} - rc - 1),
|
|
${e[0]} - rc - 1);
|
|
if(${r}){
|
|
result.g = getChannel(getX(${e[0]} - (rc + 1) - 1),
|
|
${e[0]} - (rc + 1) - 1);
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`:this.userCode=`
|
|
void main() {
|
|
${i} rc = getOutputCoords();
|
|
vec4 result = vec4(0.);
|
|
result.r = ${o(a.slice())};
|
|
if(${r}){
|
|
result.g = ${l(a.slice())};
|
|
}
|
|
if(${s}) {
|
|
result.b = ${u(a.slice())};
|
|
if(${r}) {
|
|
result.a = ${p(a.slice())};
|
|
}
|
|
}
|
|
setOutput(result);
|
|
}
|
|
`;function o(h){return d(h)}function l(h){return h[n-1]="("+h[n-1]+" + 1)",d(h)}function u(h){return h[n-2]="("+h[n-2]+" + 1)",d(h)}function p(h){return h[n-1]="("+h[n-1]+" + 1)",h[n-2]="("+h[n-2]+" + 1)",d(h)}function d(h){let m=e.map((y,b)=>c(b,h)),f=m.join(","),g=m.slice(-2).join(",");return`getChannel(getX(${f}), vec2(${g}))`}function c(h,m){return t.indexOf(h)!==-1&&e[h]!==1?`${e[h]} - ${m[h]} - 1`:`${m[h]}`}}};function rae(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a,i=r.shape.length,o=k.parseAxisParam(s,r.shape);if(i===0)return Un({inputs:{x:r},backend:n});let l=X().getBool("WEBGL_PACK_ARRAY_OPERATIONS")?new aae(r.shape,o):new nae(r.shape,o);return n.runWebGLProgram(l,[r],r.dtype)}var sae={kernelName:ao,backendName:"webgl",kernelFunc:rae},iae=class{constructor(e,t){this.variableNames=["Image"],this.outputShape=[],this.customUniforms=[{name:"params",type:"vec4"}];let n=e[1],a=e[2];this.outputShape=e;let r="";typeof t=="number"?r=`float outputValue = ${t.toFixed(2)};`:r=`
|
|
vec3 fill = vec3(${t.join(",")});
|
|
float outputValue = fill[coords[3]];`,this.userCode=`
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
float coordXFloat = (float(x) - params[0]) * params[3] -
|
|
(float(y) - params[1]) * params[2];
|
|
float coordYFloat = (float(x) - params[0]) * params[2] +
|
|
(float(y) - params[1]) * params[3];
|
|
int coordX = int(round(coordXFloat + params[0]));
|
|
int coordY = int(round(coordYFloat + params[1]));
|
|
${r}
|
|
if(coordX >= 0 && coordX < ${a} && coordY >= 0 && coordY < ${n}) {
|
|
outputValue = getImage(coords[0], coordY, coordX, coords[3]);
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}},oae={kernelName:Mu,backendName:"webgl",kernelFunc:({inputs:e,attrs:t,backend:n})=>{let{image:a}=e,{radians:r,fillValue:s,center:i}=t,o=n,l=new iae(a.shape,s),[u,p]=_.getImageCenter(i,a.shape[1],a.shape[2]),d=[[u,p,Math.sin(r),Math.cos(r)]];return o.runWebGLProgram(l,[a],a.dtype,d)}},lae=`
|
|
// 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;
|
|
}
|
|
}
|
|
`,uae=Je({opSnippet:lae}),pae={kernelName:ro,backendName:"webgl",kernelFunc:uae},cae="return inversesqrt(x);",dae=Je({opSnippet:cae,cpuKernelImpl:MY}),hae={kernelName:so,backendName:"webgl",kernelFunc:dae},Y_=class{constructor(e,t,n,a,r,s,i=!0){this.variableNames=["updates","indices","defaultValue"],this.outputShape=s;let o=pt(r.length),l=pt(s.length),u="";n===1?u="i":n===2&&(u="i, j");let p=`getIndices(${u})`,d="";a===1?d="i":a===2&&(d="i, coords[1]");let c=`getUpdates(${d})`,h=t>1?"strides[j]":"strides";this.userCode=`
|
|
${o} strides = ${o}(${r});
|
|
|
|
void main() {
|
|
${l} coords = getOutputCoords();
|
|
float sum = 0.0;
|
|
bool found = false;
|
|
for (int i = 0; i < ${e}; i++) {
|
|
int flattenedIndex = 0;
|
|
for (int j = 0; j < ${t}; j++) {
|
|
int index = round(${p});
|
|
flattenedIndex += index * ${h};
|
|
}
|
|
if (flattenedIndex == coords[0]) {
|
|
sum += ${c};
|
|
found = true;
|
|
}
|
|
}
|
|
setOutput(mix(getDefaultValue(), sum, float(found)));
|
|
}
|
|
`}};function mae(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r,updates:s}=t,{shape:i}=a,{sliceRank:o,numUpdates:l,sliceSize:u,strides:p,outputSize:d}=_.calculateShapes(s,r,i),c=[d/u,u];if(d===0)return n.makeTensorInfo(i,r.dtype);let h=me({inputs:{x:r},backend:n,attrs:{shape:[l,o]}}),m=me({inputs:{x:s},backend:n,attrs:{shape:[l,u]}}),f=n.makeTensorInfo([],"float32",new Float32Array([0])),g=new Y_(l,o,h.shape.length,m.shape.length,p,c),y=n.runWebGLProgram(g,[m,h,f],m.dtype),b=me({inputs:{x:y},backend:n,attrs:{shape:i}});return n.disposeIntermediateTensorInfo(h),n.disposeIntermediateTensorInfo(m),n.disposeIntermediateTensorInfo(y),n.disposeIntermediateTensorInfo(f),b}var fae={kernelName:vu,backendName:"webgl",kernelFunc:mae},gae=class{constructor(e,t,n){this.variableNames=["c","a","b"],this.outputShape=t;let a,r;if(n>4)throw Error(`Where for rank ${n} is not yet supported`);if(n===1)r="resRC",a="resRC";else{let i=["resRC.x","resRC.y","resRC.z","resRC.w"],o=[],l=[];for(let u=0;u<t.length;u++)l.push(`${i[u]}`),u<e&&o.push(`${i[u]}`);a=o.join(),r=l.join()}let s=pt(n);this.userCode=`
|
|
void main() {
|
|
${s} resRC = getOutputCoords();
|
|
float cVal = getC(${a});
|
|
if (cVal >= 1.0) {
|
|
setOutput(getA(${r}));
|
|
} else {
|
|
setOutput(getB(${r}));
|
|
}
|
|
}
|
|
`}};function yae(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=new gae(a.shape.length,r.shape,r.shape.length);return n.runWebGLProgram(i,[a,r,s],fa(r.dtype,s.dtype))}var bae={kernelName:wu,backendName:"webgl",kernelFunc:yae},xae=`
|
|
// Stable and Attracting Fixed Point (0, 1) for Normalized Weights.
|
|
// see: https://arxiv.org/abs/1706.02515
|
|
float scaleAlpha = ${_.SELU_SCALEALPHA};
|
|
float scale = ${_.SELU_SCALE};
|
|
return (x >= 0.0) ? scale * x : scaleAlpha * (exp(x) - 1.0);
|
|
`,vae=Je({opSnippet:xae}),wae={kernelName:ku,backendName:"webgl",kernelFunc:vae},kae=ep+`
|
|
return 1.0 / (1.0 + exp(-1.0 * x));
|
|
`,Iae=`
|
|
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;
|
|
`,Sae=Je({opSnippet:kae,packedOpSnippet:Iae,cpuKernelImpl:PY}),Nae={kernelName:oo,backendName:"webgl",kernelFunc:Sae},Tae=`
|
|
if (isnan(x)) { return 0.0; }
|
|
return sign(x);
|
|
`,Cae=Je({opSnippet:Tae}),_ae={kernelName:Nu,backendName:"webgl",kernelFunc:Cae},Eae=ep+`
|
|
return sin(x);
|
|
`,Aae=Je({opSnippet:Eae}),$ae={kernelName:io,backendName:"webgl",kernelFunc:Aae},Fae=`
|
|
float e2x = exp(x);
|
|
return (e2x - 1.0 / e2x) / 2.0;
|
|
`,Dae=Je({opSnippet:Fae}),Rae={kernelName:Su,backendName:"webgl",kernelFunc:Dae},Mae=`
|
|
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;
|
|
`,Pae=Je({opSnippet:Mae}),Oae={kernelName:Tu,backendName:"webgl",kernelFunc:Pae},Lae=e=>{let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a;k.assert(r.shape.length<=4,()=>"spaceToBatchND for rank > 4 with a WebGL backend not implemented yet");let o=s.reduce((y,b)=>y*b),l=[[0,0]];l.push(...i);for(let y=1+s.length;y<r.shape.length;++y)l.push([0,0]);let u=[],p=K_({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),d=_.getReshaped(p.shape,s,o,!1),c=_.getPermuted(d.length,s.length,!1),h=_.getReshapedPermuted(p.shape,s,o,!1),m=me({inputs:{x:p},backend:n,attrs:{shape:d}}),f=pn({inputs:{x:m},backend:n,attrs:{perm:c}}),g=me({inputs:{x:f},backend:n,attrs:{shape:h}});return u.push(p),u.push(m),u.push(f),u.forEach(y=>n.disposeIntermediateTensorInfo(y)),g},zae={kernelName:Cu,backendName:"webgl",kernelFunc:Lae};function Wae(e){let{inputs:t,backend:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=t;if(s.shape.length!==1)throw new Error(`Dense shape must be a vector, saw:
|
|
${s.shape}`);if(a.shape.length!==2)throw new Error(`Indices must be a matrix, saw:
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Values must be a vector, saw:
|
|
${r.shape}`);if(i.shape.length!==0)throw new Error(`Default value must be a scalar, saw:
|
|
${i.shape}`);let o=n.readSync(a.dataId),l=n.readSync(r.dataId),u=n.readSync(s.dataId),p=n.readSync(i.dataId)[0],[d,c,h,m,f]=LY(o,a.shape,a.dtype,l,r.dtype,u,p);return[n.makeTensorInfo(c,a.dtype,d),n.makeTensorInfo([c[0]],r.dtype,h),n.makeTensorInfo([m.length],"bool",new Uint8Array(m.map(g=>Number(g)))),n.makeTensorInfo([f.length],a.dtype,new Int32Array(f))]}var Bae={kernelName:Sc,backendName:"webgl",kernelFunc:Wae};function Vae(e){let{inputs:t,backend:n}=e,{inputIndices:a,inputShape:r,newShape:s}=t;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape ${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape ${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=Array.from(n.readSync(r.dataId)),o=n.readSync(a.dataId),l=Array.from(n.readSync(s.dataId)),[u,p,d]=zY(o,a.shape,a.dtype,i,l);return[n.makeTensorInfo(p,a.dtype,u),n.makeTensorInfo([d.length],s.dtype,new Int32Array(d))]}var Uae={kernelName:Eu,backendName:"webgl",kernelFunc:Vae};function Gae(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);let i=n.readSync(a.dataId),o=n.readSync(r.dataId),l=n.readSync(s.dataId),[u,p]=x_(i,a.shape,a.dtype,o,l,!0);return n.makeTensorInfo(p,a.dtype,u)}var Hae={kernelName:Nc,backendName:"webgl",kernelFunc:Gae};function jae(e){let{inputs:t,backend:n}=e,{data:a,indices:r,segmentIds:s}=t;if(a.shape.length<1)throw new Error("Data should be at least 1 dimensional but received scalar");if(r.shape.length!==1)throw new Error(`Indices should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Segment ids should be a vector but received shape
|
|
${s.shape}`);let i=n.readSync(a.dataId),o=n.readSync(r.dataId),l=n.readSync(s.dataId),[u,p]=x_(i,a.shape,a.dtype,o,l);return n.makeTensorInfo(p,a.dtype,u)}var qae={kernelName:Tc,backendName:"webgl",kernelFunc:jae};function Kae(e){let{inputs:t,backend:n,attrs:a}=e,{sparseIndices:r,sparseValues:s,defaultValue:i}=t,{outputShape:o}=a,{sliceRank:l,numUpdates:u,strides:p,outputSize:d}=_.calculateShapes(s,r,o),c=!1,h=new Y_(u,l,r.shape.length,s.shape.length,p,[d,1],c),m=n.runWebGLProgram(h,[s,r,i],s.dtype),f=me({inputs:{x:m},backend:n,attrs:{shape:o}});return n.disposeIntermediateTensorInfo(m),f}var Xae={kernelName:zm,backendName:"webgl",kernelFunc:Kae};function Yae(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=a,o=k.parseAxisParam(i,r.shape)[0],l=_.prepareSplitSize(r,s,o),u=r.shape.length,p=new Array(u).fill(0),d=r.shape.slice();return l.map(c=>{let h=[...d];h[o]=c;let m=tp({inputs:{x:r},backend:n,attrs:{begin:p,size:h}});return p[o]+=c,m})}var Jae={kernelName:_u,backendName:"webgl",kernelFunc:Yae},lI="return sqrt(x);",Zae=Je({opSnippet:lI,packedOpSnippet:lI,cpuKernelImpl:WY}),Qae={kernelName:lo,backendName:"webgl",kernelFunc:Zae},ere="return x * x;",tre=Je({opSnippet:ere}),nre={kernelName:Cc,backendName:"webgl",kernelFunc:tre},uI="return (a - b) * (a - b);",are=cn({opSnippet:uI,packedOpSnippet:uI}),rre={kernelName:co,backendName:"webgl",kernelFunc:are};function sre({inputs:e,attrs:t,backend:n}){let{x:a}=e,r=$a+`
|
|
return x > 0.0 ? 1.0 : float(${t.alpha});
|
|
`,s=new Cr(a.shape,r);return n.runWebGLProgram(s,[a],a.dtype)}var ire={kernelName:vs,backendName:"webgl",kernelFunc:sre},ore=class{constructor(e,t,n){this.variableNames=["x"],this.outputShape=n;let a=n.length,r=pt(n.length),s=pt(n.length),i="";if(a===1)i="coords * strides + begin";else{let o=0;i=n.map((l,u)=>(o++,n.length===1?`coords * strides[${u}] + begin[${u}]`:`coords[${o-1}] * strides[${u}] + begin[${u}]`)).join(",")}this.userCode=`
|
|
${r} begin = ${r}(${e});
|
|
${r} strides = ${r}(${t});
|
|
|
|
void main() {
|
|
${s} coords = getOutputCoords();
|
|
setOutput(getX(${i}));
|
|
}
|
|
`}};function lre(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:v}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),w;if(f)w=me({inputs:{x:r},backend:n,attrs:{shape:m}});else if(g||y){k.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let C=qt.computeOutShape(b,x,v),E=tp({inputs:{x:r},backend:n,attrs:{begin:b,size:C}});w=me({inputs:{x:E},backend:n,attrs:{shape:m}}),n.disposeIntermediateTensorInfo(E)}else if(n.shouldExecuteOnCPU([r])){let C=n.readSync(r.dataId),E=He(r.shape,r.dtype,C),$=BY(h,E,v,b);w=n.makeTensorInfo(m,r.dtype,$.values)}else{let C=new ore(b,v,h);w=n.runWebGLProgram(C,[r],r.dtype)}let T=me({inputs:{x:w},backend:n,attrs:{shape:m}});return n.disposeIntermediateTensorInfo(w),T}var ure={kernelName:Au,backendName:"webgl",kernelFunc:lre};function pre(e){let{inputs:t,backend:n,attrs:a}=e,{separator:r,nGramWidths:s,leftPad:i,rightPad:o,padWidth:l,preserveShortSequences:u}=a,{data:p,dataSplits:d}=t,c=n.readSync(p.dataId),h=n.readSync(d.dataId),[m,f]=VY(c,h,r,s,i,o,l,u);return[n.makeTensorInfo([m.length],"string",m),n.makeTensorInfo(d.shape,"int32",f)]}var cre={kernelName:Wm,backendName:"webgl",kernelFunc:pre};function dre(e){let{inputs:t,backend:n,attrs:a}=e,{skipEmpty:r}=a,{input:s,delimiter:i}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(s.shape.length!==1)throw new Error(`Input must be a vector, got shape: ${s.shape}`);if(i.shape.length!==0)throw new Error(`Delimiter must be a scalar, got shape: ${i.shape}`);let o=n.readSync(s.dataId),l=n.readSync(i.dataId)[0],[u,p,d]=UY(o,l,r),c=p.length;return[n.makeTensorInfo([c,2],"int32",u),n.makeTensorInfo([c],"string",p),n.makeTensorInfo([2],"int32",new Int32Array(d))]}var hre={kernelName:Bm,backendName:"webgl",kernelFunc:dre};function mre(e){let{inputs:t,backend:n,attrs:a}=e,{numBuckets:r}=a,{input:s}=t;if(s.dtype!=="string")throw new Error("Input must be of datatype string");if(r<=0)throw new Error("Number of buckets must be at least 1");let i=n.readSync(s.dataId),o=GY(i,r);return n.makeTensorInfo(s.shape,"int32",o)}var fre={kernelName:Vm,backendName:"webgl",kernelFunc:mre},gre="return tan(x);",yre=Je({opSnippet:gre}),bre={kernelName:mo,backendName:"webgl",kernelFunc:yre},xre=`
|
|
float e2x = exp(-2.0 * abs(x));
|
|
return sign(x) * (1.0 - e2x) / (1.0 + e2x);
|
|
`,vre=Je({opSnippet:xre}),wre={kernelName:fo,backendName:"webgl",kernelFunc:vre},kre=class{constructor(e,t){this.variableNames=["A"];let n=new Array(e.length);for(let s=0;s<n.length;s++)n[s]=e[s]*t[s];this.outputShape=n,this.rank=n.length;let a=pt(this.rank),r=Ire(e);this.userCode=`
|
|
void main() {
|
|
${a} resRC = getOutputCoords();
|
|
setOutput(getA(${r}));
|
|
}
|
|
`}};function Ire(e){let t=e.length;if(t>5)throw Error(`Tile for rank ${t} is not yet supported`);if(t===1)return`imod(resRC, ${e[0]})`;let n=["resRC.x","resRC.y","resRC.z","resRC.w","resRC.u"],a=[];for(let r=0;r<e.length;r++)a.push(`imod(${n[r]}, ${e[r]})`);return a.join()}function J_(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{reps:s}=a;if(r.dtype==="string"||r.shape.length>5){let o=n.readSync(r.dataId),l=r.dtype==="string"?o.map(d=>k.decodeString(d)):o,u=He(r.shape,r.dtype,l),p=jY(u,s);return n.makeTensorInfo(p.shape,p.dtype,p.values)}let i=new kre(r.shape,s);return n.runWebGLProgram(i,[r],r.dtype)}var Sre={kernelName:xs,backendName:"webgl",kernelFunc:J_},Nre=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));
|
|
}
|
|
}
|
|
`}},Tre=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 Vs(e,t){t!==null&&e.disposeIntermediateTensorInfo(t)}function pI(e){let t=1;for(;t<e;)t*=2;return t}function Cre(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{k:s,sorted:i}=a,o=X().getNumber("TOPK_LAST_DIM_CPU_HANDOFF_SIZE_THRESHOLD"),l=X().getNumber("TOPK_K_CPU_HANDOFF_THRESHOLD"),u=r.shape,p=u[u.length-1];if(n.shouldExecuteOnCPU([r])||p<o||s>l){let $=n.readSync(r.dataId),[P,F]=qY($,u,r.dtype,s,i);return[n.makeTensorInfo(P.shape,P.dtype,P.values),n.makeTensorInfo(F.shape,F.dtype,F.values)]}if(s===0)return u[u.length-1]=0,[n.makeTensorInfo(u,r.dtype,[]),n.makeTensorInfo(u,"int32",[])];if(p===1)return[r,ud({attrs:{shape:u,dtype:"int32",value:0},backend:n})];let d=n.texData.get(r.dataId),c=d!==null&&d.isPacked,h=c?n.unpackTensor(r):r,m=k.sizeFromShape(u)/p,f=me({inputs:{x:h},attrs:{shape:[m,p]},backend:n});c&&Vs(n,h);let g=pI(s),y=pI(p),b=null,x=()=>b===null?[f,f]:[f,b],v=($,P,F)=>{let S=x(),M=new Nre(F),B=[[p],[b===null?1:0],[Number.NEGATIVE_INFINITY],[$],[P]],j=b;b=n.runWebGLProgram(M,S,"int32",B),Vs(n,j)};for(let $=1;$<g;$*=2){let P=$*2;for(let F=$;F>=1;F/=2)v(P,F,[m,y])}for(let $=y;$>g;$/=2){let P=x(),F=new Tre([m,$/2]),S=[[p],[b===null?1:0],[g]],M=b;b=n.runWebGLProgram(F,P,"int32",S),Vs(n,M);let B=g/2,j=B*2;for(let q=B;q>=1;q/=2)v(j,q,b.shape)}let w=b;b=tp({inputs:{x:b},backend:n,attrs:{begin:0,size:[m,s]}}),Vs(n,w);let T=V_({inputs:{x:f,indices:b},backend:n,attrs:{axis:1,batchDims:1}});Vs(n,f);let C=u.slice(0,-1);C.push(s),w=b,b=me({inputs:{x:b},attrs:{shape:C},backend:n}),Vs(n,w);let E=T;return T=me({inputs:{x:T},attrs:{shape:C},backend:n}),Vs(n,E),[T,b]}var _re={kernelName:$u,backendName:"webgl",kernelFunc:Cre},Ere=class{constructor(e,t,n,a,r,s){this.variableNames=["Image","Transforms"],this.outputShape=s;let i=n==="nearest"?1:2,o;switch(a){case"constant":o=1;break;case"reflect":o=2;break;case"wrap":o=3;break;case"nearest":o=4;break;default:o=1;break}this.userCode=`
|
|
float mapCoord(float outCoord, float len) {
|
|
float inCoord = outCoord;
|
|
if(${o} == 2) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
if (inCoord < sz2) {
|
|
inCoord = sz2 * float(int(float(-inCoord / sz2))) +
|
|
inCoord;
|
|
}
|
|
inCoord = inCoord < -len ? inCoord + sz2 : -inCoord - 1.0;
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz2 = 2.0 * len;
|
|
inCoord -= sz2 * float(int(float(inCoord / sz2)));
|
|
if (inCoord >= len) {
|
|
inCoord = sz2 - inCoord - 1.0;
|
|
}
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 3) {
|
|
if (inCoord < 0.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord += len * (float(int(float(-inCoord / sz))) + 1.0);
|
|
}
|
|
} else if (inCoord > len - 1.0) {
|
|
if (len <= 1.0) {
|
|
inCoord = 0.0;
|
|
} else {
|
|
float sz = len - 1.0;
|
|
inCoord -= len * float(int(float(inCoord / sz)));
|
|
}
|
|
}
|
|
return clamp(inCoord, 0.0, len - 1.0);
|
|
} else if (${o} == 4) {
|
|
return clamp(outCoord, 0.0, len - 1.0);
|
|
} else {
|
|
return outCoord;
|
|
}
|
|
}
|
|
|
|
float readWithFillValue(int batch, int coordY, int coordX,
|
|
int channel) {
|
|
float outputValue;
|
|
if (0 <= coordY && coordY < ${e} && 0 <= coordX && coordX < ${t}) {
|
|
outputValue = getImage(batch, coordY, coordX, channel);
|
|
} else {
|
|
outputValue = float(${r});
|
|
}
|
|
return outputValue;
|
|
}
|
|
|
|
void main() {
|
|
ivec4 coords = getOutputCoords();
|
|
float outputValue;
|
|
int batch = coords[0];
|
|
int x = coords[2];
|
|
int y = coords[1];
|
|
int channel = coords[3];
|
|
float xf = float(x);
|
|
float yf = float(y);
|
|
float a1 = getTransforms(batch, 0);
|
|
float a2 = getTransforms(batch, 1);
|
|
float a3 = getTransforms(batch, 2);
|
|
float b1 = getTransforms(batch, 3);
|
|
float b2 = getTransforms(batch, 4);
|
|
float b3 = getTransforms(batch, 5);
|
|
float c1 = getTransforms(batch, 6);
|
|
float c2 = getTransforms(batch, 7);
|
|
float projection = c1 * xf + c2 * yf + 1.0;
|
|
if (projection == 0.0) {
|
|
outputValue = float(${r});
|
|
} else {
|
|
float inX = (a1 * xf + a2 * yf + a3) / projection;
|
|
float inY = (b1 * xf + b2 * yf + b3) / projection;
|
|
float mapX = mapCoord(inX, float(${t}));
|
|
float mapY = mapCoord(inY, float(${e}));
|
|
|
|
if (${i} == 1) {
|
|
int coordY = int(round(mapY));
|
|
int coordX = int(round(mapX));
|
|
outputValue = readWithFillValue(batch, coordY, coordX,
|
|
channel);
|
|
} else {
|
|
float yFloor = floor(mapY);
|
|
float xFloor = floor(mapX);
|
|
float yCeil = yFloor + 1.0;
|
|
float xCeil = xFloor + 1.0;
|
|
float valueYFloor = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yFloor), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yFloor), int(xCeil), channel);
|
|
float valueYCeil = (xCeil - mapX) *
|
|
readWithFillValue(batch, int(yCeil), int(xFloor), channel) +
|
|
(mapX - xFloor) *
|
|
readWithFillValue(batch, int(yCeil), int(xCeil), channel);
|
|
outputValue = (yCeil - mapY) * valueYFloor +
|
|
(mapY - yFloor) * valueYCeil;
|
|
}
|
|
}
|
|
setOutput(outputValue);
|
|
}
|
|
`}};function Are(e){let{inputs:t,backend:n,attrs:a}=e,{image:r,transforms:s}=t,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=new Ere(d,c,i,o,l,g);return n.runWebGLProgram(y,[r,s],"float32")}var $re={kernelName:Fu,backendName:"webgl",kernelFunc:Are};function Fre(e){let{inputs:t,attrs:n,backend:a}=e,{axis:r}=n,{x:s}=t;Xu(s,"unique"),console.warn("WARNING: ","UI might be locked temporarily as data is being downloaded");let i=a.readSync(s.dataId),{outputValues:o,outputShape:l,indices:u}=KY(i,r,s.shape,s.dtype);return[a.makeTensorInfo(l,s.dtype,o),a.makeTensorInfo([u.length],"int32",u)]}var Dre={kernelName:Um,backendName:"webgl",kernelFunc:Fre};function Rre(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r,o=i.shape.length,l=r.shape[s],u=new Array(o-1),p=0;for(let f=0;f<o;f++)f!==s&&(u[p++]=i.shape[f]);let d=[],c=new Array(o).fill(0),h=i.shape.slice();h[s]=1;let m=new Array(l);for(let f=0;f<m.length;f++){c[s]=f;let g=tp({inputs:{x:i},backend:n,attrs:{begin:c,size:h}}),y=me({inputs:{x:g},backend:n,attrs:{shape:u}});m[f]=y,d.push(g)}return d.forEach(f=>n.disposeIntermediateTensorInfo(f)),m}var Mre={kernelName:Du,backendName:"webgl",kernelFunc:Rre},Pre=class{constructor(e,t){this.variableNames=["x","segmentIds"];let n=e.windowSize,a=e.batchSize,r=e.inSize,s=e.numSegments,i=s*Math.ceil(r/n);this.outputShape=[a,i];let o="0.0",l="sumValue",u=Math.floor(n/4)*4,p=n%4,d=`
|
|
sumValue += dot(values, segFilter);
|
|
`,c="";r%n>0&&(c=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return initializationValue;
|
|
}
|
|
`);let h="";r%n>0&&(h=`
|
|
if (inIdx < 0 || inIdx >= ${r}) {
|
|
return -1.0;
|
|
}
|
|
`),this.userCode=`
|
|
const float initializationValue = ${o};
|
|
|
|
float getValue(int batch, int inIdx) {
|
|
${c}
|
|
return getX(batch, inIdx);
|
|
}
|
|
|
|
float getSegmentIdAtIndex(int inIdx) {
|
|
${h}
|
|
return getSegmentIds(inIdx);
|
|
}
|
|
|
|
void main() {
|
|
ivec2 coords = getOutputCoords();
|
|
int batch = coords[0];
|
|
int outIdx = coords[1];
|
|
int inOffset = int(floor(float(outIdx) / float(
|
|
${s})) * float(${n}));
|
|
int currentSeg = int(mod(float(outIdx), float(${s})));
|
|
|
|
float sumValue = 0.0;
|
|
|
|
for (int i = 0; i < ${u}; i += 4) {
|
|
int inIdx = inOffset + i;
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
getValue(batch, inIdx + 3)
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 3)) == currentSeg ? 1 : 0
|
|
);
|
|
|
|
${d}
|
|
}
|
|
|
|
int inIdx = inOffset + ${u};
|
|
if (${p===1}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
initializationValue,
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
int inIdxSeg = int(getSegmentIdAtIndex(inIdx));
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===2}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
initializationValue,
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
0,
|
|
0
|
|
);
|
|
|
|
${d}
|
|
} else if (${p===3}) {
|
|
vec4 values = vec4(
|
|
getValue(batch, inIdx),
|
|
getValue(batch, inIdx + 1),
|
|
getValue(batch, inIdx + 2),
|
|
initializationValue
|
|
);
|
|
|
|
vec4 segFilter = vec4(
|
|
int(getSegmentIdAtIndex(inIdx)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 1)) == currentSeg ? 1 : 0,
|
|
int(getSegmentIdAtIndex(inIdx + 2)) == currentSeg ? 1 : 0,
|
|
0
|
|
);
|
|
|
|
${d}
|
|
}
|
|
setOutput(${l});
|
|
}
|
|
`}};function Ore(e){let{inputs:t,backend:n,attrs:a}=e,{x:r,segmentIds:s}=t,{numSegments:i}=a,o=r.shape.length,l=[],u=0,p=_.getAxesPermutation([u],o),d=r;p!=null&&(d=pn({inputs:{x:r},backend:n,attrs:{perm:p}}),l.push(d),u=_.getInnerMostAxes(1,o)[0]);let c=_.segment_util.computeOutShape(d.shape,u,i),h=k.sizeFromShape([d.shape[u]]),m=me({inputs:{x:d},backend:n,attrs:{shape:[-1,h]}});l.push(m);let f=Hm(r.dtype),g=(v,w,T,C,E)=>{let $=v.shape[0],P=v.shape[1],F=_.segment_util.segOpComputeOptimalWindowSize(P,E),S={windowSize:F,inSize:P,batchSize:$,numSegments:E},M=new Pre(S,w),B=n.compileAndRun(M,[v,T],C);if(l.push(B),B.shape[1]===E)return B;let j=X_({backend:n,attrs:{start:0,stop:E,step:1,dtype:"float32"}}),q=J_({inputs:{x:j},backend:n,attrs:{reps:[P/F]}});return l.push(j),l.push(q),g(B,w,q,C,E)},y=g(m,"unsortedSegmentSum",s,f,i),b=me({inputs:{x:y},backend:n,attrs:{shape:c}}),x=b;if(p!=null){l.push(b);let v=_.getUndoAxesPermutation(p);x=pn({inputs:{x},backend:n,attrs:{perm:v}})}return l.forEach(v=>n.disposeIntermediateTensorInfo(v)),x}var Lre={kernelName:_c,backendName:"webgl",kernelFunc:Ore},zre=[U9,H9,K9,J9,Q9,nJ,rJ,iJ,pJ,dJ,fJ,bJ,wJ,NJ,_J,AJ,FJ,PJ,LJ,WJ,GJ,JJ,QJ,tZ,oZ,uZ,hZ,S9,gZ,wZ,NZ,$Z,DZ,MZ,OZ,zZ,VZ,HZ,KZ,YZ,ZZ,eQ,aQ,sQ,uQ,cQ,mQ,yQ,xQ,IQ,CQ,$Q,RQ,OQ,LQ,WQ,VQ,GQ,jQ,KQ,ZQ,tee,ree,iee,uee,dee,gee,vee,I9,kee,xZ,Nee,_ee,$ee,T9,Mee,zee,Bee,Hee,Kee,Zee,tte,ste,ute,dte,mte,bte,vte,kte,Tte,_te,Ate,Fte,Rte,Lte,Vte,jte,ene,$9,rne,one,pne,hne,aZ,gne,bne,vne,Ine,Cne,_9,Ene,Ane,rZ,Yte,Dne,One,Bne,D9,Hne,Kne,Zne,tae,sae,oae,pae,hae,fae,bae,wae,Nae,_ae,$ae,Rae,XJ,Zte,Oae,zae,Bae,Uae,Hae,qae,Xae,Jae,Qae,nre,rre,ire,ure,cre,hre,fre,Jte,W9,bre,wre,Sre,_re,$re,B9,Dre,Mre,Lre,yne];for(let e of zre)Ec(e);var Ft;(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"})(Ft||(Ft={}));var pc;(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"})(pc||(pc={}));var Z_;function Wre(e){Z_=e.wasm.cwrap(ni,null,["number","array","number","number","array","number","number","number","number","number","number","number","number"])}function Bre(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s,bias:i,preluActivationWeights:o}=t;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("_FusedMatMul for non non-float32 tensors not yet supported.");let{transposeA:l,transposeB:u,activation:p,leakyreluAlpha:d}=a,c=n.dataIdMap.get(r.dataId).id,h=n.dataIdMap.get(s.dataId).id,m=0;if(i!=null){let E=n.dataIdMap.get(i.dataId);if(E.shape.length!==1)throw new Error(`_FusedMatMul only supports rank-1 bias but got rank ${E.shape.length}.`);m=E.id}let f=o==null?0:n.dataIdMap.get(o.dataId).id,g=pc[p];if(g==null)throw new Error(`${p} activation not yet supported for FusedConv2D in the wasm backend.`);let y=l?r.shape[2]:r.shape[1],b=u?s.shape[1]:s.shape[2],x=Pu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)),v=n.makeOutput([...x,y,b],r.dtype),w=n.dataIdMap.get(v.dataId).id,T=new Uint8Array(new Int32Array(r.shape).buffer),C=new Uint8Array(new Int32Array(s.shape).buffer);return Z_(c,T,r.shape.length,h,C,s.shape.length,l,u,g,m,f,d||0,w),v}var Vre={kernelName:ni,backendName:"wasm",setupFunc:Wre,kernelFunc:Bre};function dn(e,t){let n;function a(s){n=s.wasm.cwrap(e,null,["number","number","number"])}function r(s){let{backend:i,inputs:{x:o}}=s,l=i.dataIdMap.get(o.dataId).id,u=i.makeOutput(o.shape,t||o.dtype),p=i.dataIdMap.get(u.dataId).id;return k.sizeFromShape(u.shape)===0||n(l,Ft[o.dtype],p),u}return{kernelName:e,backendName:"wasm",setupFunc:a,kernelFunc:r}}var Ure=dn(Dl);function An(e,t,n){let a;function r(i){a=i.wasm.cwrap(e,null,["number","array","number","number","array","number","number","number"])}function s(i){let{backend:o,inputs:l}=i,{a:u,b:p}=l,d=o.dataIdMap.get(u.dataId).id,c=o.dataIdMap.get(p.dataId).id,h=n!=null?n:u.dtype,m=_.assertAndGetBroadcastShape(u.shape,p.shape),f=o.makeOutput(m,h);if(k.sizeFromShape(m)===0)return f;let g=new Uint8Array(new Int32Array(u.shape).buffer),y=new Uint8Array(new Int32Array(p.shape).buffer),b=o.dataIdMap.get(f.dataId).id;return a(d,g,u.shape.length,c,y,p.shape.length,Ft[u.dtype],b),f}return{kernelName:e,backendName:"wasm",setupFunc:r,kernelFunc:s}}var Gre=!0,Hre=An(ys,Gre),Q_;function jre(e){Q_=e.wasm.cwrap(vi,null,["array","number","number","number"])}function qre(e){let{inputs:t,backend:n}=e,a=n.makeOutput(t[0].shape,t[0].dtype);if(k.sizeFromShape(a.shape)===0)return a;let r=t.map(o=>n.dataIdMap.get(o.dataId).id),s=new Uint8Array(new Int32Array(r).buffer),i=n.dataIdMap.get(a.dataId).id;return Q_(s,r.length,Ft[a.dtype],i),a}var Kre={kernelName:vi,backendName:"wasm",setupFunc:jre,kernelFunc:qre};function ag(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype),r=n.typedArrayFromHeap(t);return n.typedArrayFromHeap(a).set(r),a}var Xre={kernelName:zi,backendName:"wasm",kernelFunc:ag},eE;function Yre(e){eE=e.wasm.cwrap(go,null,["number","array","number","number","number","array","number"])}function fs(e){let{inputs:t,backend:n,attrs:a}=e,[r,s]=Zre(t.x.shape,a.perm),i=!0;for(let m=0;m<s.length;m++)s[m]!==m&&(i=!1);let o=Jre(t.x.shape,a.perm),l={dataId:t.x.dataId,shape:r,dtype:t.x.dtype};if(i){let m=ag({inputs:t,backend:n});return m.shape=o,m}let u=n.makeOutput(o,l.dtype),p=n.dataIdMap.get(l.dataId).id,d=n.dataIdMap.get(u.dataId).id,c=new Uint8Array(new Int32Array(s).buffer),h=new Uint8Array(new Int32Array(l.shape).buffer);return eE(p,h,l.shape.length,Ft[l.dtype],d,c,s.length),u}function Jre(e,t){let n=new Array(e.length);for(let a=0;a<n.length;a++)n[a]=e[t[a]];return n}function Zre(e,t){let n=[],a=[];for(let r=0;r<e.length;++r)e[r]!==1&&n.push(e[r]),e[t[r]]!==1&&a.push(t[r]);for(let r=0;r<a.length;++r){let s=-1;for(let i=0;i<a.length;++i)a[i]>=r&&(s===-1||a[s]>a[i])&&(s=i);a[s]=r}return[n,a]}var Qre={kernelName:go,backendName:"wasm",kernelFunc:fs,setupFunc:Yre};function _s(e,t,n){let a=e.shape,r=e.shape.length,s=k.parseAxisParam(t,a),i=s,o=_.getAxesPermutation(i,r),l=null,u=!1;if(o!=null){let p=new Array(r);for(let c=0;c<p.length;c++)p[c]=a[o[c]];i=_.getInnerMostAxes(i.length,r),l=fs({inputs:{x:e},attrs:{perm:o},backend:n});let d=n.dataIdMap.get(e.dataId).id;n.dataIdMap.get(l.dataId).id!==d&&(u=!0)}return{transposed:l,originalAxes:s,axes:i,inputWasTransposed:u}}var tE;function ese(e){tE=e.wasm.cwrap(Pl,null,["number, number, number"])}function tse(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=_s(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;_.assertAxesAreInnerMostDims("all",p,h);let[m,f]=_.computeOutAndReduceShapes(l.shape,p),g=k.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(k.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;tE(o,g,b)}if(c&&t.disposeData(u.dataId),s){let b=_.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var nse={kernelName:Pl,backendName:"wasm",setupFunc:ese,kernelFunc:tse},nE;function ase(e){nE=e.wasm.cwrap(Ol,null,["number, number, number"])}function rse(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=_s(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;_.assertAxesAreInnerMostDims("any",p,h);let[m,f]=_.computeOutAndReduceShapes(l.shape,p),g=k.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(k.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;nE(o,g,b)}if(c&&t.disposeData(u.dataId),s){let b=_.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var sse={kernelName:Ol,backendName:"wasm",setupFunc:ase,kernelFunc:rse},aE;function ise(e){aE=e.wasm.cwrap(wi,null,["number","number","number","number","number"])}function ose(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r}=a,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=i,l=s,{transposed:u,axes:p,inputWasTransposed:d}=_s(s,r,t);if(d){let y=t.dataIdMap.get(u.dataId).id;y!==i&&(l=u,o=y)}let c=l.shape.slice(0,-1),h=t.makeOutput(c,"int32"),m=t.dataIdMap.get(h.dataId).id,f=k.sizeFromShape(h.shape),g=l.shape[p[0]];return aE(o,Ft[l.dtype],f,g,m),d&&t.disposeData(u.dataId),h}var lse={kernelName:wi,backendName:"wasm",kernelFunc:ose,setupFunc:ise},rE;function use(e){rE=e.wasm.cwrap(ki,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function pse(e){let{inputs:t,attrs:n,backend:a}=e,r=t.x,s=a.dataIdMap.get(r.dataId).id,{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=_.computePool2DInfo(r.shape,i,o,1,l,u),d=p.filterHeight,c=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.strideHeight,b=p.strideWidth,x=p.inChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);if(p.dilationWidth!==1||p.dilationHeight!==1)throw new Error(`was backend only supports average pooling with dilation = [1, 1], got [${p.dilationHeight}, ${p.dilationWidth}].`);let v=a.makeOutput(p.outShape,"float32"),w=a.dataIdMap.get(v.dataId).id;return rE(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,y,b,x,w),v}var cse={kernelName:ki,backendName:"wasm",setupFunc:use,kernelFunc:pse};function Wn(e){let{inputs:t,attrs:n}=e,{x:a}=t,{shape:r}=n,s=k.sizeFromShape(a.shape),i=k.inferFromImplicitShape(r,s);return k.assert(s===k.sizeFromShape(i),()=>`new shape: ${i}, old shape: ${a.shape}. New shape and old shape must have the same number of elements.`),e.backend.incRef(a.dataId),{dataId:a.dataId,shape:i,dtype:a.dtype}}var dse={kernelName:xu,backendName:"wasm",kernelFunc:Wn},sE;function hse(e){sE=e.wasm.cwrap(Ii,null,["number","array","number","number","array","number","number","number","number"])}function mse(e){let{inputs:t,backend:n,attrs:a}=e,{a:r,b:s}=t,{transposeA:i,transposeB:o}=a;if(r.dtype!=="float32"||s.dtype!=="float32")throw new Error("BatchMatMul for non non-float32 tensors not yet supported.");let l=r.shape.length,u=s.shape.length,p=i?r.shape[l-2]:r.shape[l-1],d=o?s.shape[u-1]:s.shape[u-2],c=i?r.shape[l-1]:r.shape[l-2],h=o?s.shape[u-2]:s.shape[u-1],m=r.shape.slice(0,-2),f=s.shape.slice(0,-2),g=k.sizeFromShape(m),y=k.sizeFromShape(f),b=Pu.assertAndGetBroadcastShape(r.shape.slice(0,-2),s.shape.slice(0,-2)).concat([c,h]);k.assert(p===d,()=>`Error in matMul: inner shapes (${p}) and (${d}) of Tensors with shapes ${r.shape} and ${s.shape} and transposeA=${i} and transposeB=${o} must match.`);let x=i?[g,p,c]:[g,c,p],v=o?[y,h,d]:[y,d,h],w=Wn({inputs:{x:r},backend:n,attrs:{shape:x}}),T=Wn({inputs:{x:s},backend:n,attrs:{shape:v}}),C=n.dataIdMap.get(w.dataId).id,E=n.dataIdMap.get(T.dataId).id,$=i?w.shape[2]:w.shape[1],P=o?T.shape[1]:T.shape[2],F=Math.max(g,y),S=n.makeOutput([F,$,P],w.dtype),M=n.dataIdMap.get(S.dataId).id,B=new Uint8Array(new Int32Array(w.shape).buffer),j=new Uint8Array(new Int32Array(T.shape).buffer);return sE(C,B,w.shape.length,E,j,T.shape.length,i,o,M),n.disposeData(w.dataId),n.disposeData(T.dataId),S.shape=b,S}var fse={kernelName:Ii,backendName:"wasm",setupFunc:hse,kernelFunc:mse};function yi(e){let{inputs:{x:t},attrs:{begin:n,size:a},backend:r}=e,[s,i]=qt.parseSliceParams(t,n,a),o=qt.isSliceContinous(t.shape,s,i),l=r.readSync(t.dataId),u=r.makeOutput(i,t.dtype),p=k.computeStrides(t.shape),d=r.dataIdMap.get(u.dataId);if(o){let m=qt.computeFlatOffset(s,p);return t.dtype==="string"?d.stringBytes=l.slice(m,m+k.sizeFromShape(i)):r.typedArrayFromHeap(u).set(l.subarray(m,m+k.sizeFromShape(i))),u}if(t.dtype==="string"){let m=rm(l,s,i,t.shape,t.dtype);return d.stringBytes=m,u}let c=r.typedArrayFromHeap(u),h=t.shape.length;if(h===2)gse(l,p[0],c,s,i);else if(h===3)yse(l,p[0],p[1],c,s,i);else if(h===4)bse(l,p[0],p[1],p[2],c,s,i);else{let m=rm(l,s,i,t.shape,t.dtype);c.set(m)}return u}function gse(e,t,n,a,r){let s=0,i=a[0],o=a[1],l=i+r[0];for(let u=i;u<l;u++){let p=u*t+o;n.set(e.subarray(p,p+r[1]),s),s+=r[1]}}function yse(e,t,n,a,r,s){let i=0,o=r[0],l=r[1],u=r[2],p=o+s[0],d=l+s[1];for(let c=o;c<p;c++)for(let h=l;h<d;h++){let m=c*t+h*n+u;a.set(e.subarray(m,m+s[2]),i),i+=s[2]}}function bse(e,t,n,a,r,s,i){let o=0,l=s[0],u=s[1],p=s[2],d=l+i[0],c=u+i[1],h=p+i[2],m=s[3];for(let f=l;f<d;f++)for(let g=u;g<c;g++)for(let y=p;y<h;y++){let b=f*t+g*n+y*a+m;r.set(e.subarray(b,b+i[3]),o),o+=i[3]}}var xse={kernelName:Iu,backendName:"wasm",kernelFunc:yi};function vse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,crops:i}=a,o=s.reduce((y,b)=>y*b),l=_.getReshaped(r.shape,s,o),u=_.getPermuted(l.length,s.length),p=_.getReshapedPermuted(r.shape,s,o),d=_.getSliceBeginCoords(i,s.length),c=_.getSliceSize(p,i,s.length),h=Wn({inputs:{x:r},backend:n,attrs:{shape:l}}),m=fs({inputs:{x:h},backend:n,attrs:{perm:u}}),f=Wn({inputs:{x:m},backend:n,attrs:{shape:p}}),g=yi({inputs:{x:f},backend:n,attrs:{begin:d,size:c}});return n.disposeData(h.dataId),n.disposeData(m.dataId),n.disposeData(h.dataId),g}var wse={kernelName:Ul,backendName:"wasm",kernelFunc:vse};function pd(e){let{inputs:{x:t},attrs:{dtype:n},backend:a}=e,r=a.makeOutput(t.shape,n),s=a.typedArrayFromHeap(t);return a.typedArrayFromHeap(r).set(s),r}var kse={kernelName:Si,backendName:"wasm",kernelFunc:pd},Ise=dn(Ni),iE;function Sse(e){iE=e.wasm.cwrap(bs,null,["number","number","number","number"])}function Nse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{clipValueMin:s,clipValueMax:i}=a,o=n.dataIdMap.get(r.dataId).id,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(l.dataId).id;return iE(o,s,i,u),l}var Tse={kernelName:bs,backendName:"wasm",setupFunc:Sse,kernelFunc:Nse};function oE(e){let{inputs:t,backend:n}=e,a=k.parseAxisParam(e.attrs.axis,t[0].shape)[0],r=_.computeOutShape(t.map(h=>h.shape),a),s=t.filter(h=>k.sizeFromShape(h.shape)>0);if(s.length===1)return ag({inputs:{x:s[0]},backend:n});let i=n.makeOutput(r,t[0].dtype);if(k.sizeFromShape(r)===0)return i;let o=s.map(h=>h.shape);if(_.assertParamsConsistent(o,a),s[0].dtype==="string"){let h=s.map(x=>{let v=k.sizeFromShape(x.shape.slice(a));return Wn({inputs:{x},backend:n,attrs:{shape:[-1,v]}})}),m=h.map(x=>({vals:n.readSync(x.dataId),shape:x.shape}));r=_.computeOutShape(h.map(x=>x.shape),1);let f=h[0].shape[0]===1,g=h0(m,r,t[0].dtype,f),y=_.computeOutShape(s.map(x=>x.shape),a);i.shape=y;let b=n.dataIdMap.get(i.dataId);return b.stringBytes=_.fromStringArrayToUint8(g),h.forEach(x=>n.disposeData(x.dataId)),i}let l=k.sizeFromShape(s[0].shape.slice(0,a)),u=0,p=s.map(h=>{let m=k.sizeFromShape(h.shape.slice(a));return u+=m,m}),d=s.map(h=>n.typedArrayFromHeap(h)),c=n.typedArrayFromHeap(i);for(let h=0;h<l;h++){let m=h*u;for(let f=0;f<d.length;f++){let g=p[f],y=h*g,b=d[f].subarray(y,y+g);c.set(b,m),m+=g}}return i}var Cse={kernelName:Gl,backendName:"wasm",kernelFunc:oE},lE;function _se(e){lE=e.wasm.cwrap(Ti,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Ese(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s}=t,i=a.dataIdMap.get(r.dataId).id,o=a.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:d,dataFormat:c}=n,h=_.convertConv2DDataFormat(c),m=_.computeConv2DInfo(r.shape,s.shape,l,u,p,d,!1,h),f=m.filterHeight,g=m.filterWidth,y=m.padInfo.top,b=m.padInfo.right,x=m.padInfo.bottom,v=m.padInfo.left,w=m.dilationHeight,T=m.dilationWidth,C=m.strideHeight,E=m.strideWidth,$=m.inChannels,P=m.outChannels,F=m.padInfo.type==="SAME"?1:0;if(m.dataFormat!=="channelsLast")throw new Error(`wasm backend Conv2D does not support dataFormat:'${m.dataFormat}'. Please use 'channelsLast'.`);let S=a.makeOutput(m.outShape,"float32"),M=a.dataIdMap.get(S.dataId).id;return lE(i,r.shape[0],r.shape[1],r.shape[2],o,f,g,y,b,x,v,F,w,T,C,E,$,P,M),S}var Ase={kernelName:Ti,backendName:"wasm",setupFunc:_se,kernelFunc:Ese},uE;function $se(e){uE=e.wasm.cwrap(Ci,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 Fse(e){let{backend:t,inputs:n,attrs:a}=e,{dy:r,filter:s}=n,{strides:i,pad:o,dataFormat:l,dimRoundingMode:u,inputShape:p}=a,d=1,c=_.convertConv2DDataFormat(l),h=_.computeConv2DInfo(p,s.shape,i,d,o,u,!1,c),{batchSize:m,filterHeight:f,filterWidth:g,inChannels:y,inHeight:b,inWidth:x,outChannels:v,outHeight:w,outWidth:T,strideHeight:C,strideWidth:E}=h,$=f-1-h.padInfo.top,P=g-1-h.padInfo.left,F=h.dataFormat==="channelsLast",S=k.computeStrides(h.inShape),M=k.computeStrides(r.shape),[B,j,q]=k.computeStrides(s.shape),K=S[0],Q=F?S[1]:S[2],ee=F?S[2]:1,re=F?1:S[1],Z=M[0],ie=F?M[1]:M[2],ae=F?M[2]:1,le=F?1:M[1],ue=t.makeOutput(h.inShape,"float32"),we=t.dataIdMap.get(ue.dataId).id,ye=t.dataIdMap.get(r.dataId).id,Ie=t.dataIdMap.get(s.dataId).id;return uE(ye,Ie,m,f,g,b,x,y,w,T,v,C,E,$,P,B,j,q,K,Q,ee,re,Z,ie,ae,le,we),ue}var Dse={kernelName:Ci,backendName:"wasm",setupFunc:$se,kernelFunc:Fse},Rse=dn(_i),Mse=dn(Ei),yx;(function(e){e[e.bilinear=0]="bilinear",e[e.nearest=1]="nearest"})(yx||(yx={}));var pE;function Pse(e){pE=e.wasm.cwrap(jl,null,["number","number","number","number","array","number","number","number","number","number"])}function Ose(e){let{backend:t,inputs:n,attrs:a}=e,{method:r,extrapolationValue:s,cropSize:i}=a,{image:o,boxes:l,boxInd:u}=n,p=l.shape[0],[d,c]=i,h=[p,d,c,o.shape[3]],m=t.dataIdMap.get(o.dataId),f;o.dtype!=="float32"&&(f=pd({backend:t,inputs:{x:o},attrs:{dtype:"float32"}}),m=t.dataIdMap.get(f.dataId));let g=m.id,y=t.dataIdMap.get(l.dataId).id,b=t.dataIdMap.get(u.dataId).id,x=t.makeOutput(h,"float32"),v=t.dataIdMap.get(x.dataId).id,w=new Uint8Array(new Int32Array(o.shape).buffer);return pE(g,y,b,p,w,d,c,yx[r],s,v),f!=null&&t.disposeData(f.dataId),x}var Lse={kernelName:jl,backendName:"wasm",setupFunc:Pse,kernelFunc:Ose},cE;function zse(e){cE=e.wasm.cwrap(Hl,null,["number","number","number","number","number","number"])}function Wse(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length;k.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumprod does not support ${r.dtype} tensors in the WASM backend`);let u=_.getAxesPermutation([s],l),p=r;u!==null&&(p=fs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=_.getInnerMostAxes(1,l)[0];_.assertAxesAreInnerMostDims("cumprod",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;cE(m,i?1:0,o?1:0,h,f,Ft[r.dtype]);let g=c;if(u!==null){let y=_.getUndoAxesPermutation(u);g=fs({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var Bse={kernelName:Hl,backendName:"wasm",setupFunc:zse,kernelFunc:Wse},dE;function Vse(e){dE=e.wasm.cwrap(Ai,null,["number","number","number","number","number","number"])}function Use(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{axis:s,exclusive:i,reverse:o}=a,l=r.shape.length;k.assert(r.dtype==="float32"||r.dtype==="int32",()=>`cumsum does not support ${r.dtype} tensors in the WASM backend`);let u=_.getAxesPermutation([s],l),p=r;u!==null&&(p=fs({inputs:{x:r},attrs:{perm:u},backend:n}));let d=_.getInnerMostAxes(1,l)[0];_.assertAxesAreInnerMostDims("cumsum",[d],l);let c=n.makeOutput(p.shape,p.dtype),h=p.shape[d],m=n.dataIdMap.get(p.dataId).id,f=n.dataIdMap.get(c.dataId).id;dE(m,i?1:0,o?1:0,h,f,Ft[r.dtype]);let g=c;if(u!==null){let y=_.getUndoAxesPermutation(u);g=fs({inputs:{x:c},attrs:{perm:y},backend:n}),n.disposeData(p.dataId),n.disposeData(c.dataId)}return g}var Gse={kernelName:Ai,backendName:"wasm",setupFunc:Vse,kernelFunc:Use},hE;function Hse(e){hE=e.wasm.cwrap(ql,null,["number","number","number","array","number","array","array","number","number"])}function jse(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{blockSize:s,dataFormat:i}=a,o=r.shape[0],l=i==="NHWC"?r.shape[1]:r.shape[2],u=i==="NHWC"?r.shape[2]:r.shape[3],p=i==="NHWC"?r.shape[3]:r.shape[1],d=l*s,c=u*s,h=p/(s*s),m=i==="NHWC"?[o,d,c,h]:[o,h,d,c],f=t.makeOutput(m,"float32"),g=t.dataIdMap.get(r.dataId).id,y=new Uint8Array(new Int32Array(k.computeStrides(r.shape)).buffer),b=new Uint8Array(new Int32Array(m).buffer),x=new Uint8Array(new Int32Array(k.computeStrides(m)).buffer),v=t.dataIdMap.get(f.dataId).id;return hE(g,s,i==="NHWC"?1:0,y,r.shape.length-1,b,x,m.length,v),f}var qse={kernelName:ql,backendName:"wasm",setupFunc:Hse,kernelFunc:jse},mE;function Kse(e){mE=e.wasm.cwrap($i,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Xse(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s}=t,i=a.dataIdMap.get(r.dataId).id,o=a.dataIdMap.get(s.dataId).id,{strides:l,dilations:u,pad:p,dimRoundingMode:d}=n,c=u==null?[1,1]:u,h=_.computeConv2DInfo(r.shape,s.shape,l,c,p,d,!0),m=h.filterHeight,f=h.filterWidth,g=h.padInfo.top,y=h.padInfo.right,b=h.padInfo.bottom,x=h.padInfo.left,v=h.dilationHeight,w=h.dilationWidth,T=h.strideHeight,C=h.strideWidth,E=h.inChannels,$=h.outChannels,P=h.padInfo.type==="SAME"?1:0;if(h.dataFormat!=="channelsLast")throw new Error(`wasm backend DepthwiseConv2dNative does not support dataFormat:'${h.dataFormat}'. Please use 'channelsLast'.`);let F=a.makeOutput(h.outShape,"float32"),S=a.dataIdMap.get(F.dataId).id;return mE(i,r.shape[0],r.shape[1],r.shape[2],o,m,f,g,y,b,x,P,v,w,T,C,E,$,S),F}var Yse={kernelName:$i,backendName:"wasm",setupFunc:Kse,kernelFunc:Xse},Jse=dn(Di),Zse=!1,Qse=An(Xl,Zse,"bool"),eie=dn(Ri,"float32");function bx(e){let{inputs:t,attrs:n,backend:a}=e,{input:r}=t,{dim:s}=n,i=r.shape.length,o=r.shape.slice(),l=s;return s<0&&(k.assert(-(i+1)<=s,()=>`Axis must be in the interval [${-(i+1)}, ${i}]`),l=i+s+1),o.splice(l,0,1),Wn({inputs:{x:r},backend:a,attrs:{shape:o}})}var tie={kernelName:Yl,backendName:"wasm",kernelFunc:bx};function fE(e){let{attrs:{shape:t,value:n,dtype:a},backend:r}=e,s=r.makeOutput(t,a);return r.typedArrayFromHeap(s).fill(n),s}var nie={kernelName:yc,backendName:"wasm",kernelFunc:fE},gE;function aie(e){gE=e.wasm.cwrap(Zl,null,["number","number","number","number","number","number"])}function rie(e){let{inputs:t,backend:n}=e,{image:a}=t,r=n.makeOutput(a.shape,a.dtype),s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,[o,l,u,p]=a.shape;return gE(s,o,l,u,p,i),r}var sie={kernelName:Zl,backendName:"wasm",kernelFunc:rie,setupFunc:aie},iie=dn(Mi),oie=!1,lie=An(Pi,oie),yE;function uie(e){yE=e.wasm.cwrap(Oi,null,["number","number","number","number","number","number","number"])}function pie(e){let{backend:t,inputs:n,attrs:a}=e,{varianceEpsilon:r}=a,{x:s,mean:i,variance:o,offset:l,scale:u}=n,p=t.dataIdMap.get(s.dataId).id,d=t.dataIdMap.get(i.dataId).id,c=t.dataIdMap.get(o.dataId).id,h=l!=null?t.dataIdMap.get(l.dataId).id:0,m=u!=null?t.dataIdMap.get(u.dataId).id:0,f=t.makeOutput(s.shape,s.dtype);if(k.sizeFromShape(s.shape)===0)return f;let g=t.dataIdMap.get(f.dataId).id;return yE(p,d,c,h,m,r,g),f}var cie={kernelName:Oi,backendName:"wasm",setupFunc:uie,kernelFunc:pie},bE;function die(e){bE=e.wasm.cwrap(ai,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 hie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=_.computeConv2DInfo(r.shape,s.shape,l,p,u,c),g=pc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,v=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);v=ae.id}let w=f.filterHeight,T=f.filterWidth,C=f.padInfo.top,E=f.padInfo.right,$=f.padInfo.bottom,P=f.padInfo.left,F=f.dilationHeight,S=f.dilationWidth,M=f.strideHeight,B=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Q=f.inHeight,ee=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),Z=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return bE(y,K,Q,ee,b,w,T,v,C,E,$,P,q,F,S,M,B,j,x,g,ie,m||0,Z),re}var mie={kernelName:ai,backendName:"wasm",setupFunc:die,kernelFunc:hie},xE;function fie(e){xE=e.wasm.cwrap(ri,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 gie(e){let{inputs:t,attrs:n,backend:a}=e,{x:r,filter:s,bias:i,preluActivationWeights:o}=t,{strides:l,pad:u,dilations:p,dataFormat:d,dimRoundingMode:c,activation:h,leakyreluAlpha:m}=n,f=_.computeConv2DInfo(r.shape,s.shape,l,p,u,c,!0),g=pc[h];if(g==null)throw new Error(`${h} activation not yet supported for FusedDepthwiseConv2D in the wasm backend.`);let y=a.dataIdMap.get(r.dataId).id,b=a.dataIdMap.get(s.dataId).id,x=f.outChannels,v=0;if(i!=null){let ae=a.dataIdMap.get(i.dataId);if(ae.shape.length!==1)throw new Error(`FusedDepthwiseConv2D only supports rank-1 bias but got rank ${ae.shape.length}.`);if(ae.shape[0]!==x)throw new Error(`FusedDepthwiseConv2D bias shape (${ae.shape}) does not match the number of output channels (${x})`);v=ae.id}let w=f.filterHeight,T=f.filterWidth,C=f.padInfo.top,E=f.padInfo.right,$=f.padInfo.bottom,P=f.padInfo.left,F=f.dilationHeight,S=f.dilationWidth,M=f.strideHeight,B=f.strideWidth,j=f.inChannels,q=f.padInfo.type==="SAME"?1:0,K=f.batchSize,Q=f.inHeight,ee=f.inWidth;if(d!=="NHWC")throw new Error(`wasm backend FusedDepthwiseConv2D does not support dataFormat:'${d}'. Please use 'NHWC'.`);let re=a.makeOutput(f.outShape,"float32"),Z=a.dataIdMap.get(re.dataId).id,ie=o==null?0:a.dataIdMap.get(o.dataId).id;return xE(y,K,Q,ee,b,w,T,v,C,E,$,P,q,F,S,M,B,j,x,g,ie,m||0,Z),re}var yie={kernelName:ri,backendName:"wasm",setupFunc:fie,kernelFunc:gie},vE;function bie(e){vE=e.wasm.cwrap(eu,null,["number","number","number","number","number","number","array","number"])}function xie(e){let{backend:t,inputs:n}=e,{params:a,indices:r}=n,[s,i,o,l]=Px.prepareAndValidate(a,r),u=t.makeOutput(s,a.dtype);if(i===0)return u;let p=r.shape,d=p[p.length-1],c=t.dataIdMap.get(a.dataId).id,h=t.dataIdMap.get(r.dataId).id,m=new Uint8Array(new Int32Array(l).buffer),f=t.dataIdMap.get(u.dataId).id;return vE(c,Ft[a.dtype],h,i,d,o,m,f),u}var vie={kernelName:eu,backendName:"wasm",setupFunc:bie,kernelFunc:xie},wE;function wie(e){wE=e.wasm.cwrap("Gather",null,["number","number","array","number","number","number","array","number"])}function kie(e){let{backend:t,inputs:n,attrs:a}=e,{x:r,indices:s}=n,{axis:i,batchDims:o}=a,l=k.parseAxisParam(i,r.shape)[0],u=t.readSync(s.dataId),p=r.shape[l];for(let C=0;C<u.length;++C){let E=u[C];k.assert(E<=p-1&&E>=0,()=>`GatherV2: the index value ${E} is not in [0, ${p-1}]`)}let d=_.segment_util.collectGatherOpShapeInfo(r,s,l,o),c=Wn({inputs:{x:r},attrs:{shape:[d.batchSize,d.outerSize,d.dimSize,d.sliceSize]},backend:t}),h=k.sizeFromShape(s.shape),m=Wn({inputs:{x:s},attrs:{shape:[d.batchSize,h/d.batchSize]},backend:t}),f=[d.batchSize,d.outerSize,h/d.batchSize,d.sliceSize],g=t.makeOutput(f,r.dtype);if(k.sizeFromShape(r.shape)===0)return g;let y=c.shape.length-1,b=t.dataIdMap.get(c.dataId).id,x=t.dataIdMap.get(m.dataId).id,v=t.dataIdMap.get(g.dataId).id,w=new Uint8Array(new Int32Array(k.computeStrides(c.shape)).buffer),T=new Uint8Array(new Int32Array(k.computeStrides(f)).buffer);return wE(b,Ft[r.dtype],w,y,x,d.batchSize,T,v),t.disposeData(c.dataId),t.disposeData(m.dataId),g.shape=d.outputShape,g}var Iie={kernelName:Ql,backendName:"wasm",setupFunc:wie,kernelFunc:kie},Sie=!1,Nie=An(tu,Sie,"bool"),Tie=!1,Cie=An(Li,Tie,"bool"),kE;function _ie(e){kE=e.wasm.cwrap(Wi,null,["number","number","number","number"])}function Eie(e){let{inputs:{x:t},attrs:{alpha:n},backend:a}=e,r=a.dataIdMap.get(t.dataId).id,s=a.makeOutput(t.shape,"float32");if(k.sizeFromShape(t.shape)!==0){let i=a.dataIdMap.get(s.dataId).id;kE(r,Ft[t.dtype],n,i)}return s}var Aie={kernelName:Wi,backendName:"wasm",setupFunc:_ie,kernelFunc:Eie},$ie=!1,Fie=An(su,$ie,"bool"),Die=!1,Rie=An(iu,Die,"bool"),Mie=dn(Bi),Pie=!1,Oie=An(lu,Pie,"bool"),IE;function Lie(e){IE=e.wasm.cwrap(Vi,null,["number","number","number","number"])}function zie(e){let{backend:t,inputs:n,attrs:a}=e,{reductionIndices:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=i,{transposed:u,axes:p,originalAxes:d,inputWasTransposed:c}=_s(i,r,t);if(c){let b=t.dataIdMap.get(u.dataId).id;l=u,o=b}let h=l.shape.length;_.assertAxesAreInnerMostDims("max",p,h);let[m,f]=_.computeOutAndReduceShapes(l.shape,p),g=k.sizeFromShape(f),y=t.makeOutput(m,i.dtype);if(k.sizeFromShape(l.shape)!==0){let b=t.dataIdMap.get(y.dataId).id;IE(o,Ft[i.dtype],g,b)}if(c&&t.disposeData(u.dataId),s){let b=_.expandShapeToKeepDim(y.shape,d);y.shape=b}return y}var Wie={kernelName:Vi,backendName:"wasm",setupFunc:Lie,kernelFunc:zie},Bie=!1,Vie=An(Ui,Bie),SE;function Uie(e){SE=e.wasm.cwrap(Gi,null,["number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number","number"])}function Gie(e){let{inputs:t,attrs:n,backend:a}=e,r=t.x,s=a.dataIdMap.get(r.dataId).id;k.assert(r.dtype==="float32",()=>`Error in MaxPool: only float32 input is supported. Got ${r.dtype}.`);let{filterSize:i,strides:o,pad:l,dimRoundingMode:u}=n,p=_.computePool2DInfo(r.shape,i,o,1,l,u),d=p.filterHeight,c=p.filterWidth,h=p.padInfo.top,m=p.padInfo.right,f=p.padInfo.bottom,g=p.padInfo.left,y=p.dilationHeight,b=p.dilationWidth,x=p.strideHeight,v=p.strideWidth,w=p.inChannels,T=p.outChannels;if(p.dataFormat!=="channelsLast")throw new Error(`wasm backend does not support dataFormat:'${p.dataFormat}'. Please use 'channelsLast'.`);let C=a.makeOutput(p.outShape,"float32"),E=a.dataIdMap.get(C.dataId).id;return SE(s,r.shape[0],r.shape[1],r.shape[2],d,c,h,m,f,g,y,b,x,v,w,T,E),C}var Hie={kernelName:Gi,backendName:"wasm",setupFunc:Uie,kernelFunc:Gie},NE;function jie(e){NE=e.wasm.cwrap(Hi,null,["number, number, number"])}function qie(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=_s(i,r,t),m=d;if(h){let v=t.dataIdMap.get(p.dataId).id;v!==o&&(u=p,l=v,m=_.getInnerMostAxes(m.length,u.shape.length))}_.assertAxesAreInnerMostDims("mean",m,u.shape.length);let[f,g]=_.computeOutAndReduceShapes(u.shape,m),y=k.sizeFromShape(g),b=u;u.dtype!=="float32"&&(b=pd({backend:t,inputs:{x:u},attrs:{dtype:"float32"}}),l=t.dataIdMap.get(b.dataId).id);let x=t.makeOutput(f,"float32");if(k.sizeFromShape(u.shape)!==0){let v=t.dataIdMap.get(x.dataId).id;NE(l,y,v)}if(h&&t.disposeData(p.dataId),s){let v=_.expandShapeToKeepDim(x.shape,c);x.shape=v}return u.dtype!=="float32"&&t.disposeData(b.dataId),x}var Kie={kernelName:Hi,backendName:"wasm",setupFunc:jie,kernelFunc:qie},TE;function Xie(e){TE=e.wasm.cwrap(ji,null,["number","number","number","number"])}function Yie(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=_s(i,r,t);if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x)}let m=u.shape.length;_.assertAxesAreInnerMostDims("min",d,m);let[f,g]=_.computeOutAndReduceShapes(u.shape,d),y=k.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(k.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;TE(l,Ft[i.dtype],y,x)}if(h&&t.disposeData(p.dataId),s){let x=_.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Jie={kernelName:ji,backendName:"wasm",setupFunc:Xie,kernelFunc:Yie},Zie=!1,Qie=An(qi,Zie),xx;(function(e){e[e.reflect=0]="reflect",e[e.symmetric=1]="symmetric"})(xx||(xx={}));var CE;function eoe(e){CE=e.wasm.cwrap(Ki,null,["number","array","number","number","array","array","number","number"])}function toe(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,mode:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]),i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return CE(i,u,t.shape.length,Ft[t.dtype],c,h,xx[r],l),o}var noe={kernelName:Ki,backendName:"wasm",kernelFunc:toe,setupFunc:eoe},aoe=!0,roe=An(Xi,aoe),soe=dn(pu);function P0(e,t){let n=new Int32Array(e.wasm.HEAPU8.buffer,t,4),a=n[0],r=n[1],s=n[2],i=n[3];return e.wasm._free(t),{pSelectedIndices:a,selectedSize:r,pSelectedScores:s,pValidOutputs:i}}var _E;function ioe(e){_E=e.wasm.cwrap(du,"number",["number","number","number","number","number"])}function ooe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i}=a,{boxes:o,scores:l}=n,u=t.dataIdMap.get(o.dataId).id,p=t.dataIdMap.get(l.dataId).id,d=_E(u,p,s,r,i),{pSelectedIndices:c,selectedSize:h,pSelectedScores:m,pValidOutputs:f}=P0(t,d);return t.wasm._free(m),t.wasm._free(f),t.makeOutput([h],"int32",c)}var loe={kernelName:du,backendName:"wasm",setupFunc:ioe,kernelFunc:ooe},EE;function uoe(e){EE=e.wasm.cwrap(hu,"number",["number","number","number","number","number","bool"])}function poe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,padToMaxOutputSize:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=EE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=P0(t,c);t.wasm._free(f);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([],"int32",g);return[y,b]}var coe={kernelName:hu,backendName:"wasm",setupFunc:uoe,kernelFunc:poe},AE;function doe(e){AE=e.wasm.cwrap(mu,"number",["number","number","number","number","number","number"])}function hoe(e){let{backend:t,inputs:n,attrs:a}=e,{iouThreshold:r,maxOutputSize:s,scoreThreshold:i,softNmsSigma:o}=a,{boxes:l,scores:u}=n,p=t.dataIdMap.get(l.dataId).id,d=t.dataIdMap.get(u.dataId).id,c=AE(p,d,s,r,i,o),{pSelectedIndices:h,selectedSize:m,pSelectedScores:f,pValidOutputs:g}=P0(t,c);t.wasm._free(g);let y=t.makeOutput([m],"int32",h),b=t.makeOutput([m],"float32",f);return[y,b]}var moe={kernelName:mu,backendName:"wasm",setupFunc:doe,kernelFunc:hoe},foe=!1,goe=An(cu,foe,"bool"),$E;function yoe(e){$E=e.wasm.cwrap(Yi,null,["number","number","number","number","number"])}function boe(e){let{inputs:t,backend:n,attrs:a}=e,{indices:r}=t,{depth:s,onValue:i,offValue:o}=a,l=n.makeOutput([...r.shape,s],"int32"),u=n.dataIdMap.get(l.dataId).id,p=n.dataIdMap.get(r.dataId).id;return $E(p,s,i,o,u),l}var xoe={kernelName:Yi,backendName:"wasm",setupFunc:yoe,kernelFunc:boe};function voe(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(1),a}var woe={kernelName:fu,backendName:"wasm",kernelFunc:voe};function koe(e){let{inputs:t,backend:n,attrs:a}=e,{axis:r}=a;if(t.length===1)return bx({inputs:{input:t[0]},backend:n,attrs:{dim:r}});let s=t[0].shape,i=t[0].dtype;t.forEach(p=>{k.assertShapesMatch(s,p.shape,"All tensors passed to stack must have matching shapes"),k.assert(i===p.dtype,()=>"All tensors passed to stack must have matching dtypes")});let o=[],l=t.map(p=>{let d=bx({inputs:{input:p},backend:n,attrs:{dim:r}});return o.push(d),d}),u=oE({inputs:l,backend:n,attrs:{axis:r}});return o.forEach(p=>n.disposeData(p.dataId)),u}var Ioe={kernelName:gu,backendName:"wasm",kernelFunc:koe},FE;function Soe(e){FE=e.wasm.cwrap(Ji,null,["number","array","number","number","array","array","number","number"])}function Noe(e){let{inputs:{x:t},backend:n,attrs:{paddings:a,constantValue:r}}=e,s=a.map((m,f)=>m[0]+t.shape[f]+m[1]);if(k.sizeFromShape(t.shape)===0)return fE({backend:n,attrs:{shape:s,value:r,dtype:t.dtype}});let i=n.dataIdMap.get(t.dataId).id,o=n.makeOutput(s,t.dtype),l=n.dataIdMap.get(o.dataId).id,u=new Uint8Array(new Int32Array(t.shape).buffer),p=a.map(m=>m[0]),d=a.map(m=>m[1]),c=new Uint8Array(new Int32Array(p).buffer),h=new Uint8Array(new Int32Array(d).buffer);return FE(i,u,t.shape.length,Ft[t.dtype],c,h,r,l),o}var DE={kernelName:Ji,backendName:"wasm",kernelFunc:Noe,setupFunc:Soe},Toe=!1,Coe=An(Zi,Toe),RE;function _oe(e){RE=e.wasm.cwrap(Qi,null,["number","number","number"])}function Eoe(e){let{inputs:t,backend:n}=e,{x:a,alpha:r}=t,s=n.dataIdMap.get(a.dataId).id,i=n.dataIdMap.get(r.dataId).id,o=s,l=a,u=l;l.dtype!=="float32"&&(u=pd({backend:n,inputs:{x:a},attrs:{dtype:"float32"}}),o=n.dataIdMap.get(u.dataId).id);let p=n.makeOutput(a.shape,"float32"),d=n.dataIdMap.get(p.dataId).id;return RE(o,i,d),l.dtype!=="float32"&&n.disposeData(u.dataId),p}var Aoe={kernelName:Qi,backendName:"wasm",setupFunc:_oe,kernelFunc:Eoe},ME;function $oe(e){ME=e.wasm.cwrap(yu,null,["number","number","number","number"])}function Foe(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=_s(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=_.getInnerMostAxes(m.length,u.shape.length))}_.assertAxesAreInnerMostDims("prod",m,u.shape.length);let[f,g]=_.computeOutAndReduceShapes(u.shape,m),y=k.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(k.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;ME(l,y,Ft[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=_.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Doe={kernelName:yu,backendName:"wasm",setupFunc:$oe,kernelFunc:Foe},Roe=e=>{let{backend:t,attrs:n}=e,{start:a,stop:r,step:s,dtype:i}=n,o=g0(a,r,s,i),l=t.makeOutput([o.length],i);return t.typedArrayFromHeap(l).set(o),l},Moe={kernelName:kc,backendName:"wasm",kernelFunc:Roe},Poe=!0,Ooe=An(Fi,Poe),Loe=dn(eo),zoe=dn(no),PE;function Woe(e){PE=e.wasm.cwrap(to,null,["number","number","number","number","number","number","number","number","number","number"])}function Boe(e){let{backend:t,inputs:n,attrs:a}=e,{images:r}=n,{alignCorners:s,halfPixelCenters:i,size:o}=a,[l,u]=o,[p,d,c,h]=r.shape,m=[p,l,u,h],f=t.dataIdMap.get(r.dataId),g;f.dtype!=="float32"&&(g=pd({backend:t,inputs:{x:r},attrs:{dtype:"float32"}}),f=t.dataIdMap.get(g.dataId));let y=f.id,b=t.makeOutput(m,"float32");if(k.sizeFromShape(r.shape)===0)return b;let x=t.dataIdMap.get(b.dataId).id;return PE(y,p,d,c,h,l,u,s?1:0,i?1:0,x),g!=null&&t.disposeData(g.dataId),b}var Voe={kernelName:to,backendName:"wasm",setupFunc:Woe,kernelFunc:Boe},OE;function Uoe(e){OE=e.wasm.cwrap(ao,null,["number","array","number","array","number","number"])}function Goe(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{dims:s}=a,i=k.parseAxisParam(s,r.shape);if(r.shape.length===0)return ag({inputs:{x:r},backend:n});let o=n.makeOutput(r.shape,r.dtype),l=n.dataIdMap.get(r.dataId).id,u=n.dataIdMap.get(o.dataId).id,p=new Uint8Array(new Int32Array(i).buffer),d=new Uint8Array(new Int32Array(r.shape).buffer);OE(l,p,i.length,d,r.shape.length,u);let c=Wn({inputs:{x:o},attrs:{shape:r.shape},backend:n});return n.disposeData(o.dataId),c}var Hoe={kernelName:ao,backendName:"wasm",kernelFunc:Goe,setupFunc:Uoe},LE;function joe(e){LE=e.wasm.cwrap(Mu,null,["number","number","number","number","number","number","number","number","array","number","number"])}function qoe(e){let{inputs:t,backend:n,attrs:a}=e,{image:r}=t,{radians:s,fillValue:i,center:o}=a,l=n.makeOutput(r.shape,r.dtype),u=n.dataIdMap.get(r.dataId).id,p=n.dataIdMap.get(l.dataId).id,[d,c,h,m]=r.shape,[f,g]=_.getImageCenter(o,c,h),y=i===0,b=255,x=typeof i=="number"?[i,i,i,y?0:b]:[...i,b],v=new Uint8Array(new Int32Array(x).buffer);return LE(u,d,c,h,m,s,f,g,v,x.length,p),l}var Koe={kernelName:Mu,backendName:"wasm",kernelFunc:qoe,setupFunc:joe},Xoe=dn(ro),Yoe=dn(so),zE;function Joe(e){zE=e.wasm.cwrap(vu,null,["number","number","number","number","number","number","array","number","number"])}function Zoe(e){let{backend:t,inputs:n,attrs:a}=e,{indices:r,updates:s}=n,{shape:i}=a,o=t.makeOutput(i,s.dtype);if(k.sizeFromShape(i)===0)return o;let{sliceRank:l,numUpdates:u,sliceSize:p,strides:d,outputSize:c}=Ox.calculateShapes(s,r,i),h=t.dataIdMap.get(r.dataId).id,m=t.dataIdMap.get(s.dataId).id,f=new Uint8Array(new Int32Array(d).buffer),g=t.dataIdMap.get(o.dataId).id;return zE(h,m,Ft[s.dtype],l,u,p,f,c,g),o}var Qoe={kernelName:vu,backendName:"wasm",setupFunc:Joe,kernelFunc:Zoe},WE;function ele(e){WE=e.wasm.cwrap("SelectV2",null,["number","number","number","number","number"])}function tle(e){let{inputs:t,backend:n}=e,{condition:a,t:r,e:s}=t,i=n.dataIdMap.get(a.dataId).id,o=n.dataIdMap.get(r.dataId).id,l=n.dataIdMap.get(s.dataId).id,u=n.makeOutput(r.shape,r.dtype),p=n.dataIdMap.get(u.dataId).id,d=a.shape.length,c=r.shape.length,h=d===0||d>1||c===1?1:k.sizeFromShape(r.shape.slice(1));return WE(i,o,l,h,p),u}var nle={kernelName:wu,backendName:"wasm",kernelFunc:tle,setupFunc:ele},BE;function ale(e){BE=e.wasm.cwrap(oo,null,["number","number"])}function rle(e){let{backend:t,inputs:{x:n}}=e,a=t.dataIdMap.get(n.dataId).id,r=t.makeOutput(n.shape,n.dtype),s=t.dataIdMap.get(r.dataId).id;return k.sizeFromShape(r.shape)===0||BE(a,s),r}var sle={kernelName:"Sigmoid",backendName:"wasm",setupFunc:ale,kernelFunc:rle},ile=dn(io),VE;function ole(e){VE=e.wasm.cwrap(po,null,["number","number","number","number"])}function lle(e){let{backend:t,inputs:{logits:n},attrs:{dim:a}}=e,r=t.dataIdMap.get(n.dataId).id,s=t.makeOutput(n.shape,n.dtype),i=t.dataIdMap.get(s.dataId).id,o=n.shape[a],l=k.sizeFromShape(n.shape)/o;return k.sizeFromShape(s.shape)===0||VE(r,i,o,l),s}var ule={kernelName:po,backendName:"wasm",setupFunc:ole,kernelFunc:lle};function ple(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,{blockShape:s,paddings:i}=a,o=k.sizeFromShape(s),l=[[0,0]];l.push(...i);for(let g=1+s.length;g<r.shape.length;++g)l.push([0,0]);let u=DE.kernelFunc({inputs:{x:r},backend:n,attrs:{paddings:l,constantValue:0}}),p=_.getReshaped(u.shape,s,o,!1),d=_.getPermuted(p.length,s.length,!1),c=_.getReshapedPermuted(u.shape,s,o,!1),h=Wn({inputs:{x:u},backend:n,attrs:{shape:p}}),m=fs({inputs:{x:h},backend:n,attrs:{perm:d}}),f=Wn({inputs:{x:m},backend:n,attrs:{shape:c}});return n.disposeData(u.dataId),n.disposeData(h.dataId),n.disposeData(m.dataId),f}var cle={kernelName:Cu,backendName:"wasm",kernelFunc:ple},UE;function dle(e){UE=e.wasm.cwrap("SparseFillEmptyRows","number",["number","number","number","number","number","number","number","number","number","number","number","number"])}function hle(e){let{backend:t,inputs:n}=e,{indices:a,values:r,denseShape:s,defaultValue:i}=n,o=a.shape[0],l=a.shape[1],u=t.readSync(s.dataId)[0],p=[o+u,l],d=t.dataIdMap.get(a.dataId).id,c=t.dataIdMap.get(r.dataId).id,h=t.dataIdMap.get(i.dataId).id,m=t.makeOutput(p,a.dtype),f=t.dataIdMap.get(m.dataId).id,g=t.makeOutput(p.slice(0,1),r.dtype),y=t.dataIdMap.get(g.dataId).id,b=t.makeOutput([u],"bool"),x=t.dataIdMap.get(b.dataId).id,v=t.makeOutput([o],a.dtype),w=t.dataIdMap.get(v.dataId).id,T=t.makeOutput([4],"int32"),C=t.dataIdMap.get(T.dataId).id,E=UE(d,c,Ft[r.dtype],o,u,l,h,f,y,x,w,C),$=t.readSync(T.dataId),P;switch($[0]){case 1:{P=_.getSparseFillEmptyRowsIndicesDenseShapeMismatch($[1]);break}case 2:{P=_.getSparseFillEmptyRowsNegativeIndexErrorMessage($[1],$[2]);break}case 3:P=_.getSparseFillEmptyRowsOutOfRangeIndexErrorMessage($[1],$[2],$[3]);break;default:P=""}if(t.disposeData(T.dataId),P)throw t.disposeData(m.dataId),t.disposeData(g.dataId),t.disposeData(b.dataId),t.disposeData(v.dataId),new Error(P);let F=m,S=g;return E!==p[0]&&(F=yi({inputs:{x:m},attrs:{begin:0,size:[E,l]},backend:t}),S=yi({inputs:{x:g},attrs:{begin:0,size:E},backend:t}),t.disposeData(m.dataId),t.disposeData(g.dataId)),[F,S,b,v]}var mle={kernelName:Sc,backendName:"wasm",setupFunc:dle,kernelFunc:hle},GE;function fle(e){GE=e.wasm.cwrap(Eu,null,["number","number","number","number","number","number","number"])}function gle(e){let{backend:t,inputs:n}=e,{inputIndices:a,inputShape:r,newShape:s}=n;if(a.shape.length!==2)throw new Error(`Input indices should be a matrix but received shape
|
|
${a.shape}`);if(r.shape.length!==1)throw new Error(`Input shape should be a vector but received shape
|
|
${r.shape}`);if(s.shape.length!==1)throw new Error(`Target shape should be a vector but received shape ${s.shape}`);let i=t.dataIdMap.get(a.dataId).id,o=t.dataIdMap.get(r.dataId).id,l=t.dataIdMap.get(s.dataId).id,u=a.shape[0],p=k.sizeFromShape(s.shape),d=t.makeOutput([u,p],a.dtype),c=t.dataIdMap.get(d.dataId).id,h=t.makeOutput([p],s.dtype),m=t.dataIdMap.get(h.dataId).id,f=t.makeOutput([3],"int32"),g=t.dataIdMap.get(f.dataId).id;GE(i,o,l,u,c,m,g);let y=t.readSync(f.dataId),b;switch(y[0]){case 0:{b=_.getSparseReshapeMultipleNegativeOneOutputDimErrorMessage(y[1],y[2]);break}case 1:{b=_.getSparseReshapeNegativeOutputDimErrorMessage(y[1],y[2]);break}case 2:b=_.getSparseReshapeEmptyTensorZeroOutputDimErrorMessage();break;case 3:{let x=Array.from(t.readSync(r.dataId)),v=Array.from(t.readSync(h.dataId));b=_.getSparseReshapeInputOutputMultipleErrorMessage(x,v);break}case 4:{let x=Array.from(t.readSync(r.dataId)),v=Array.from(t.readSync(h.dataId));b=_.getSparseReshapeInputOutputMismatchErrorMessage(x,v);break}default:b=""}if(t.disposeData(f.dataId),b)throw t.disposeData(d.dataId),t.disposeData(h.dataId),new Error(b);return[d,h]}var yle={kernelName:Eu,backendName:"wasm",setupFunc:fle,kernelFunc:gle},HE;function jE(e){HE=e.wasm.cwrap("SparseSegmentReduction",null,["number","number","number","number","number","number","number","number","number"])}function qE(e,t){let{backend:n,inputs:a}=e,{data:r,indices:s,segmentIds:i}=a,o=s.shape[0],l=n.readSync(i.dataId,o-1,o)[0],u=o>0?l+1:0;if(u<0)throw new Error(_.getSparseSegmentReductionNegativeSegmentIdsErrorMessage());let p=r.shape.slice();p[0]=u;let d=n.dataIdMap.get(r.dataId).id,c=n.dataIdMap.get(s.dataId).id,h=n.dataIdMap.get(i.dataId).id,m=n.makeOutput(p,r.dtype),f=n.dataIdMap.get(m.dataId).id,g=n.makeOutput([4],"int32"),y=n.dataIdMap.get(g.dataId).id;HE(d,Ft[r.dtype],r.shape[0],c,h,f,y,t,0);let b=n.readSync(g.dataId),x;switch(b[0]){case 0:{x=_.getSparseSegmentReductionNegativeSegmentIdsErrorMessage();break}case 1:{x=_.getSparseSegmentReductionNonIncreasingSegmentIdsErrorMessage();break}case 2:x=_.getSparseSegmentReductionSegmentIdOutOfRangeErrorMessage(b[1],b[2]);break;case 3:x=_.getSparseSegmentReductionIndicesOutOfRangeErrorMessage(b[1],b[2],b[3]);break;default:x=""}if(n.disposeData(g.dataId),x)throw n.disposeData(m.dataId),new Error(x);return m}function ble(e){return qE(e,!0)}var xle={kernelName:Nc,backendName:"wasm",setupFunc:jE,kernelFunc:ble};function vle(e){return qE(e,!1)}var wle={kernelName:Tc,backendName:"wasm",setupFunc:jE,kernelFunc:vle};function kle(e){let{inputs:t,attrs:n,backend:a}=e,{x:r}=t,{numOrSizeSplits:s,axis:i}=n,o=k.parseAxisParam(i,r.shape)[0],l=_.prepareSplitSize(r,s,o),u=new Array(r.shape.length).fill(0),p=r.shape.slice();return l.map(d=>{let c=[...p];c[o]=d;let h=yi({inputs:{x:r},attrs:{begin:u,size:c},backend:a});return u[o]+=d,h})}var Ile={kernelName:_u,backendName:"wasm",kernelFunc:kle},Sle=dn(lo),Nle=dn(Cc),Tle=!0,Cle=An(co,Tle),KE;function _le(e){KE=e.wasm.cwrap(vs,null,["number","number","number","number"])}function Ele(e){let{backend:t,inputs:n,attrs:a}=e,{alpha:r}=a,{x:s}=n,i=t.dataIdMap.get(s.dataId).id,o=t.makeOutput(s.shape,s.dtype),l=t.dataIdMap.get(o.dataId).id;return KE(i,r,Ft[s.dtype],l),o}var Ale={kernelName:vs,backendName:"wasm",setupFunc:_le,kernelFunc:Ele},XE;function $le(e){XE=e.wasm.cwrap(Au,null,["number","array","number","array","array","array","array","array","number","number"])}function Fle(e){let{backend:t,inputs:n,attrs:a}=e,{x:r}=n,{begin:s,end:i,strides:o,beginMask:l,endMask:u,ellipsisMask:p,newAxisMask:d,shrinkAxisMask:c}=a,{finalShapeSparse:h,finalShape:m,isIdentity:f,sliceDim0:g,isSimpleSlice:y,begin:b,end:x,strides:v}=qt.sliceInfo(r.shape,s,i,o,l,u,p,d,c),w;if(f)w=Wn({inputs:{x:r},backend:t,attrs:{shape:m}});else if(g||y){k.assert(r.shape.length>=1,()=>`Input must have rank at least 1, got: ${r.shape.length}`);let T=qt.computeOutShape(b,x,v),C=yi({inputs:{x:r},backend:t,attrs:{begin:b,size:T}});w=Wn({inputs:{x:C},backend:t,attrs:{shape:m}}),t.disposeData(C.dataId)}else{let T=t.makeOutput(h,"float32"),C=t.dataIdMap.get(r.dataId).id,E=new Uint8Array(new Int32Array(k.computeStrides(r.shape)).buffer),$=new Uint8Array(new Int32Array(b).buffer),P=new Uint8Array(new Int32Array(x).buffer),F=new Uint8Array(new Int32Array(v).buffer),S=new Uint8Array(new Int32Array(h).buffer),M=new Uint8Array(new Int32Array(k.computeStrides(h)).buffer),B=t.dataIdMap.get(T.dataId).id;XE(C,E,r.shape.length,$,P,F,S,M,h.length,B),w=Wn({inputs:{x:T},backend:t,attrs:{shape:m}}),t.disposeData(T.dataId)}return w}var Dle={kernelName:Au,backendName:"wasm",setupFunc:$le,kernelFunc:Fle},Rle=!0,Mle=An(ho,Rle),YE;function Ple(e){YE=e.wasm.cwrap(uo,null,["number","number","number","number"])}function Ole(e){let{backend:t,inputs:n,attrs:a}=e,{axis:r,keepDims:s}=a,{x:i}=n,o=t.dataIdMap.get(i.dataId).id,l=o,u=i,{transposed:p,axes:d,originalAxes:c,inputWasTransposed:h}=_s(i,r,t),m=d;if(h){let x=t.dataIdMap.get(p.dataId).id;x!==o&&(u=p,l=x,m=_.getInnerMostAxes(m.length,u.shape.length))}_.assertAxesAreInnerMostDims("sum",m,u.shape.length);let[f,g]=_.computeOutAndReduceShapes(u.shape,m),y=k.sizeFromShape(g),b=t.makeOutput(f,u.dtype);if(k.sizeFromShape(u.shape)!==0){let x=t.dataIdMap.get(b.dataId).id;YE(l,y,Ft[b.dtype],x)}if(h&&t.disposeData(p.dataId),s){let x=_.expandShapeToKeepDim(b.shape,c);b.shape=x}return b}var Lle={kernelName:uo,backendName:"wasm",setupFunc:Ple,kernelFunc:Ole},zle=dn(mo),Wle=dn(fo),JE;function Ble(e){JE=e.wasm.cwrap(xs,null,["number","array","number","array","number","number"])}function Vle(e){let{inputs:t,backend:n,attrs:a}=e,{x:r}=t,s=n.dataIdMap.get(r.dataId).id,{reps:i}=a,o=new Array(r.shape.length);for(let c=0;c<o.length;c++)o[c]=r.shape[c]*i[c];let l=new Uint8Array(new Int32Array(r.shape).buffer),u=new Uint8Array(new Int32Array(o).buffer),p=n.makeOutput(o,r.dtype),d=n.dataIdMap.get(p.dataId).id;return JE(s,l,r.shape.length,u,o.length,Ft[p.dtype],d),p}var Ule={kernelName:xs,backendName:"wasm",setupFunc:Ble,kernelFunc:Vle},ZE;function Gle(e){ZE=e.wasm.cwrap($u,null,["number","array","number","number","number","bool","number","number"])}var Hle=({inputs:e,backend:t,attrs:n})=>{let{x:a}=e,{k:r,sorted:s}=n,i=t.dataIdMap.get(a.dataId).id,o=new Uint8Array(new Int32Array(a.shape).buffer),l=a.shape.slice();l[l.length-1]=r;let u=t.makeOutput(l,a.dtype),p=t.dataIdMap.get(u.dataId).id,d=t.makeOutput(l,"int32"),c=t.dataIdMap.get(d.dataId).id;return ZE(i,o,a.shape.length,Ft[a.dtype],r,s,p,c),[u,d]},jle={kernelName:$u,backendName:"wasm",setupFunc:Gle,kernelFunc:Hle},QE;function qle(e){QE=e.wasm.cwrap(Fu,null,["number","number","bool","number","number","number","number","number","number","array","number","number","number","number","number"])}function Kle(e){let{backend:t,inputs:n,attrs:a}=e,{image:r,transforms:s}=n,{interpolation:i,fillMode:o,fillValue:l,outputShape:u}=a,[p,d,c,h]=r.shape,[m,f]=u!=null?u:[d,c],g=[p,m,f,h],y=new Uint8Array(new Int32Array(k.computeStrides(r.shape)).buffer),b=t.makeOutput(g,r.dtype),x=t.dataIdMap.get(b.dataId).id,v=t.dataIdMap.get(r.dataId).id,w=t.dataIdMap.get(s.dataId).id,T=i==="nearest"?1:2,C;switch(o){case"constant":C=1;break;case"reflect":C=2;break;case"wrap":C=3;break;case"nearest":C=4;break;default:C=1;break}return QE(v,w,s.shape[0]>1,p,m,f,h,c,d,y,r.shape.length-1,T,C,l,x),b}var Xle={kernelName:Fu,backendName:"wasm",setupFunc:qle,kernelFunc:Kle};function Yle(e){let{inputs:t,backend:n,attrs:a}=e,{value:r}=t,{axis:s}=a;s<0&&(s+=r.shape.length);let i=r.shape[s],o=r.shape.length,l=new Array(o-1),u=0;for(let h=0;h<o;h++)h!==s&&(l[u++]=r.shape[h]);let p=new Array(i),d=new Array(o).fill(0),c=r.shape.slice();c[s]=1;for(let h=0;h<p.length;h++)d[s]=h,p[h]=yi({inputs:{x:r},attrs:{begin:d,size:c},backend:n});return p.map(({dataId:h,dtype:m})=>({dataId:h,dtype:m,shape:l}))}var Jle={kernelName:Du,backendName:"wasm",kernelFunc:Yle};function Zle(e){let{inputs:{x:t},backend:n}=e,a=n.makeOutput(t.shape,t.dtype);return n.typedArrayFromHeap(a).fill(0),a}var Qle={kernelName:Ru,backendName:"wasm",kernelFunc:Zle},eue=[Vre,Ure,Hre,Kre,nse,sse,lse,cse,fse,wse,kse,Ise,Tse,Cse,Ase,Dse,Rse,Mse,Lse,Bse,Gse,qse,Yse,Jse,Qse,eie,tie,nie,sie,iie,lie,cie,mie,yie,vie,Iie,Nie,Cie,Xre,Aie,Fie,Rie,Mie,Oie,Wie,Vie,Hie,Kie,Jie,Qie,noe,roe,soe,loe,coe,moe,goe,xoe,woe,Ioe,DE,Coe,Aoe,Doe,Moe,Ooe,Loe,zoe,dse,Voe,Hoe,Koe,Xoe,Yoe,Qoe,nle,sle,ile,xse,ule,cle,mle,yle,xle,wle,Ile,Sle,Nle,Cle,Ale,Dle,Mle,Lle,zle,Wle,Ule,jle,Xle,Qre,Jle,Qle];for(let e of eue)Ec(e);var vx=X();vx.registerFlag("WASM_HAS_SIMD_SUPPORT",async()=>WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,10,9,1,7,0,65,0,253,15,26,11])));vx.registerFlag("WASM_HAS_MULTITHREAD_SUPPORT",async()=>{if(vx.get("IS_NODE"))return!1;try{return new MessageChannel().port1.postMessage(new SharedArrayBuffer(1)),WebAssembly.validate(new Uint8Array([0,97,115,109,1,0,0,0,1,4,1,96,0,0,3,2,1,0,5,4,1,3,1,1,10,11,1,9,0,65,0,254,16,2,0,26,11]))}catch(e){return!1}});var cI=bi(hF()),tue=`"use strict";var Module={};var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";if(ENVIRONMENT_IS_NODE){var nodeWorkerThreads=require("worker_threads");var parentPort=nodeWorkerThreads.parentPort;parentPort.on("message",function(data){onmessage({data:data})});var fs=require("fs");Object.assign(global,{self:global,require:require,Module:Module,location:{href:__filename},Worker:nodeWorkerThreads.Worker,importScripts:function(f){(0,eval)(fs.readFileSync(f,"utf8"))},postMessage:function(msg){parentPort.postMessage(msg)},performance:global.performance||{now:function(){return Date.now()}}})}function threadPrintErr(){var text=Array.prototype.slice.call(arguments).join(" ");if(ENVIRONMENT_IS_NODE){fs.writeSync(2,text+"
|
|
");return}console.error(text)}function threadAlert(){var text=Array.prototype.slice.call(arguments).join(" ");postMessage({cmd:"alert",text:text,threadId:Module["_pthread_self"]()})}var err=threadPrintErr;self.alert=threadAlert;Module["instantiateWasm"]=((info,receiveInstance)=>{var instance=new WebAssembly.Instance(Module["wasmModule"],info);receiveInstance(instance);Module["wasmModule"]=null;return instance.exports});self.onmessage=(e=>{try{if(e.data.cmd==="load"){Module["wasmModule"]=e.data.wasmModule;Module["wasmMemory"]=e.data.wasmMemory;Module["buffer"]=Module["wasmMemory"].buffer;Module["ENVIRONMENT_IS_PTHREAD"]=true;if(typeof e.data.urlOrBlob==="string"){importScripts(e.data.urlOrBlob)}else{var objectUrl=URL.createObjectURL(e.data.urlOrBlob);importScripts(objectUrl);URL.revokeObjectURL(objectUrl)}WasmBackendModuleThreadedSimd(Module).then(function(instance){Module=instance})}else if(e.data.cmd==="run"){Module["__performance_now_clock_drift"]=performance.now()-e.data.time;Module["__emscripten_thread_init"](e.data.threadInfoStruct,0,0,1);Module["establishStackSpace"]();Module["PThread"].receiveObjectTransfer(e.data);Module["PThread"].threadInit();try{var result=Module["invokeEntryPoint"](e.data.start_routine,e.data.arg);if(Module["keepRuntimeAlive"]()){Module["PThread"].setExitStatus(result)}else{Module["__emscripten_thread_exit"](result)}}catch(ex){if(ex!="unwind"){if(ex instanceof Module["ExitStatus"]){if(Module["keepRuntimeAlive"]()){}else{Module["__emscripten_thread_exit"](ex.status)}}else{throw ex}}}}else if(e.data.cmd==="cancel"){if(Module["_pthread_self"]()){Module["__emscripten_thread_exit"](-1)}}else if(e.data.target==="setimmediate"){}else if(e.data.cmd==="processThreadQueue"){if(Module["_pthread_self"]()){Module["_emscripten_current_thread_process_queued_calls"]()}}else if(e.data.cmd==="processProxyingQueue"){if(Module["_pthread_self"]()){Module["_emscripten_proxy_execute_queue"](e.data.queue)}}else{err("worker.js received unknown command "+e.data.cmd);err(e.data)}}catch(ex){err("worker.js onmessage() captured an uncaught exception: "+ex);if(ex&&ex.stack)err(ex.stack);if(Module["__emscripten_thread_crashed"]){Module["__emscripten_thread_crashed"]()}throw ex}});`,nue=bi(mF()),eA=class extends cc{constructor(e){super(),this.wasm=e,this.dataIdNextNumber=1,this.wasm.tfjs.initWithThreadsCount(tA),wx=this.wasm.tfjs.getThreadsCount(),this.dataIdMap=new pm(this,sr())}write(e,t,n){let a={id:this.dataIdNextNumber++};return this.move(a,e,t,n,1),a}numDataIds(){return this.dataIdMap.numDataIds()}async time(e){let t=k.now();return e(),{kernelMs:k.now()-t}}move(e,t,n,a,r){let s=this.dataIdNextNumber++;if(a==="string"){let u=t;this.dataIdMap.set(e,{id:s,stringBytes:u,shape:n,dtype:a,memoryOffset:null,refCount:r});return}let i=k.sizeFromShape(n),o=i*k.bytesPerElement(a),l=this.wasm._malloc(o);this.dataIdMap.set(e,{id:s,memoryOffset:l,shape:n,dtype:a,refCount:r}),this.wasm.tfjs.registerTensor(s,i,l),t!=null&&this.wasm.HEAPU8.set(new Uint8Array(t.buffer,t.byteOffset,o),l)}async read(e){return this.readSync(e)}readSync(e,t,n){let{memoryOffset:a,dtype:r,shape:s,stringBytes:i}=this.dataIdMap.get(e);if(r==="string")return(t==null||t===0)&&(n==null||n>=i.length)?i:i.slice(t,n);t=t||0,n=n||k.sizeFromShape(s);let o=k.bytesPerElement(r),l=this.wasm.HEAPU8.slice(a+t*o,a+n*o);return sue(l.buffer,r)}disposeData(e,t=!1){if(this.dataIdMap.has(e)){let n=this.dataIdMap.get(e);if(n.refCount--,!t&&n.refCount>0)return!1;this.wasm._free(n.memoryOffset),this.wasm.tfjs.disposeData(n.id),this.dataIdMap.delete(e)}return!0}refCount(e){return this.dataIdMap.has(e)?this.dataIdMap.get(e).refCount:0}incRef(e){let t=this.dataIdMap.get(e);t!=null&&t.refCount++}floatPrecision(){return 32}getMemoryOffset(e){return this.dataIdMap.get(e).memoryOffset}dispose(){this.wasm.tfjs.dispose(),"PThread"in this.wasm&&this.wasm.PThread.terminateAllThreads(),this.wasm=null}memory(){return{unreliable:!1}}makeOutput(e,t,n){let a;if(n==null)a=this.write(null,e,t);else{let r=this.dataIdNextNumber++;a={id:r},this.dataIdMap.set(a,{id:r,memoryOffset:n,shape:e,dtype:t,refCount:1});let s=k.sizeFromShape(e);this.wasm.tfjs.registerTensor(r,s,n)}return{dataId:a,shape:e,dtype:t}}typedArrayFromHeap({shape:e,dtype:t,dataId:n}){let a=this.wasm.HEAPU8.buffer,{memoryOffset:r}=this.dataIdMap.get(n),s=k.sizeFromShape(e);switch(t){case"float32":return new Float32Array(a,r,s);case"int32":return new Int32Array(a,r,s);case"bool":return new Uint8Array(a,r,s);default:throw new Error(`Unknown dtype ${t}`)}}};function aue(e){return(t,n)=>(k.fetch(e,{credentials:"same-origin"}).then(a=>{a.ok||t.env.a(`failed to load wasm binary file at '${e}'`),a.arrayBuffer().then(r=>{WebAssembly.instantiate(r,t).then(s=>{n(s.instance,s.module)})})}),{})}function dI(e,t,n){if(um!=null)return um;let a="tfjs-backend-wasm.wasm";return e&&t?a="tfjs-backend-wasm-threaded-simd.wasm":e&&(a="tfjs-backend-wasm-simd.wasm"),qp!=null&&qp[a]!=null?qp[a]:n+a}async function rue(){let[e,t]=await Promise.all([X().getAsync("WASM_HAS_SIMD_SUPPORT"),X().getAsync("WASM_HAS_MULTITHREAD_SUPPORT")]);return new Promise((n,a)=>{let r={};r.locateFile=(o,l)=>{if(o.endsWith(".worker.js")){let u=tue.replace(/\n/g,"\\n"),p=new Blob([u],{type:"application/javascript"});return URL.createObjectURL(p)}return o.endsWith(".wasm")?dI(e,t,Gp!=null?Gp:l):l+o},O0&&(r.instantiateWasm=aue(dI(e,t,Gp!=null?Gp:"")));let s=!1;r.onAbort=()=>{s||Kp||(Kp=!0,a({message:"Make sure the server can serve the `.wasm` file relative to the bundled js file. For more details see https://github.com/tensorflow/tfjs/blob/master/tfjs-backend-wasm/README.md#using-bundlers"}))};let i;t&&e&&um==null?(r.mainScriptUrlOrBlob=new Blob(["var WasmBackendModuleThreadedSimd = "+cI.default.toString()],{type:"text/javascript"}),i=(0,cI.default)(r)):i=(0,nue.default)(r),i.then(o=>{s=!0,Kp=!1;let l=null;o.tfjs={init:o.cwrap("init",null,[]),initWithThreadsCount:o.cwrap("init_with_threads_count",null,["number"]),getThreadsCount:o.cwrap("get_threads_count","number",[]),registerTensor:o.cwrap("register_tensor",null,["number","number","number"]),disposeData:o.cwrap("dispose_data",l,["number"]),dispose:o.cwrap("dispose",l,[])},n({wasm:o})})})}function sue(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 iue=["tfjs-backend-wasm.wasm","tfjs-backend-wasm-simd.wasm","tfjs-backend-wasm-threaded-simd.wasm"],um=null,Gp=null,qp={},Kp=!1,O0=!1;function oue(e,t=!1){if(Vx("setWasmPath has been deprecated in favor of setWasmPaths and will be removed in a future release."),Kp)throw new Error("The WASM backend was already initialized. Make sure you call `setWasmPath()` before you call `tf.setBackend()` or `tf.ready()`");um=e,O0=t}function lue(e,t=!1){if(Kp)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")Gp=e;else{qp=e;let n=iue.filter(a=>qp[a]==null);if(n.length>0)throw new Error(`There were no entries found for the following binaries: ${n.join(",")}. Please either call setWasmPaths with a map providing a path for each binary, or with a string indicating the directory where all the binaries can be found.`)}O0=t}var tA=-1,wx=-1;function uue(e){tA=e}function pue(){if(wx===-1)throw new Error("WASM backend not initialized.");return wx}var cue="3.15.0",due=2;qm("wasm",async()=>{let{wasm:e}=await rue();return new eA(e)},due);var hue="3.15.0",mue="3.15.0",fue="3.15.0",gue="3.15.0",yue="3.15.0",bue="3.15.0",xue="3.15.0",vue="3.15.0",wue={tfjs:hue,"tfjs-core":mue,"tfjs-data":fue,"tfjs-layers":gue,"tfjs-converter":yue,"tfjs-backend-cpu":bue,"tfjs-backend-webgl":xue,"tfjs-backend-wasm":vue};var l1={};dh(l1,{AnchorPosition:()=>Q0,DrawBox:()=>hd,DrawBoxOptions:()=>og,DrawFaceLandmarks:()=>bg,DrawFaceLandmarksOptions:()=>yg,DrawTextField:()=>Lr,DrawTextFieldOptions:()=>sp,drawContour:()=>Mr,drawDetections:()=>Aue,drawFaceExpressions:()=>Mue,drawFaceLandmarks:()=>Oue});function Mr(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:a,y:r},s)=>{let i=t[s];e.moveTo(i.x,i.y),e.lineTo(a,r)}),n){let a=t[t.length-1],r=t[0];if(!a||!r)return;e.moveTo(a.x,a.y),e.lineTo(r.x,r.y)}e.stroke()}var B0={};dh(B0,{computeReshapedDimensions:()=>W0,getCenterPoint:()=>_o,isDimensions:()=>sg,isEven:()=>rg,isFloat:()=>z0,isTensor:()=>To,isTensor1D:()=>kue,isTensor2D:()=>L0,isTensor3D:()=>Pr,isTensor4D:()=>xa,isValidNumber:()=>er,isValidProbablitiy:()=>np,range:()=>br,round:()=>Co});var yn=class{constructor(t,n){if(!er(t)||!er(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 To(e,t){return e instanceof Ae&&e.shape.length===t}function kue(e){return To(e,1)}function L0(e){return To(e,2)}function Pr(e){return To(e,3)}function xa(e){return To(e,4)}function z0(e){return e%1!==0}function rg(e){return e%2===0}function Co(e,t=2){let n=10**t;return Math.floor(e*n)/n}function sg(e){return e&&e.width&&e.height}function W0({width:e,height:t},n){let a=n/Math.max(t,e);return new yn(Math.round(e*a),Math.round(t*a))}function _o(e){return e.reduce((t,n)=>t.add(n),new Me(0,0)).div(new Me(e.length,e.length))}function br(e,t,n){return Array(e).fill(0).map((a,r)=>t+r*n)}function er(e){return!!e&&e!==1/0&&e!==-1/0&&!Number.isNaN(e)||e===0}function np(e){return er(e)&&e>=0&&e<=1}var Me=class{constructor(t,n){this._x=t,this._y=n}get x(){return this._x}get y(){return this._y}add(t){return new Me(this.x+t.x,this.y+t.y)}sub(t){return new Me(this.x-t.x,this.y-t.y)}mul(t){return new Me(this.x*t.x,this.y*t.y)}div(t){return new Me(this.x/t.x,this.y/t.y)}abs(){return new Me(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(this.x**2+this.y**2)}floor(){return new Me(Math.floor(this.x),Math.floor(this.y))}};var lt=class{static isRect(t){return!!t&&[t.x,t.y,t.width,t.height].every(er)}static assertIsValidBox(t,n,a=!1){if(!lt.isRect(t))throw new Error(`${n} - invalid box: ${JSON.stringify(t)}, expected object with properties x, y, width, height`);if(!a&&(t.width<0||t.height<0))throw new Error(`${n} - width (${t.width}) and height (${t.height}) must be positive numbers`)}constructor(t,n=!0){let a=t||{},r=[a.left,a.top,a.right,a.bottom].every(er),s=[a.x,a.y,a.width,a.height].every(er);if(!s&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(a)}`);let[i,o,l,u]=s?[a.x,a.y,a.width,a.height]:[a.left,a.top,a.right-a.left,a.bottom-a.top];lt.assertIsValidBox({x:i,y:o,width:l,height:u},"Box.constructor",n),this._x=i,this._y=o,this._width=l,this._height=u}get x(){return this._x}get y(){return this._y}get width(){return this._width}get height(){return this._height}get left(){return this.x}get top(){return this.y}get right(){return this.x+this.width}get bottom(){return this.y+this.height}get area(){return this.width*this.height}get topLeft(){return new Me(this.left,this.top)}get topRight(){return new Me(this.right,this.top)}get bottomLeft(){return new Me(this.left,this.bottom)}get bottomRight(){return new Me(this.right,this.bottom)}round(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.round(s));return new lt({x:t,y:n,width:a,height:r})}floor(){let[t,n,a,r]=[this.x,this.y,this.width,this.height].map(s=>Math.floor(s));return new lt({x:t,y:n,width:a,height:r})}toSquare(){let{x:t,y:n,width:a,height:r}=this,s=Math.abs(a-r);return a<r&&(t-=s/2,a+=s),r<a&&(n-=s/2,r+=s),new lt({x:t,y:n,width:a,height:r})}rescale(t){let n=sg(t)?t.width:t,a=sg(t)?t.height:t;return new lt({x:this.x*n,y:this.y*a,width:this.width*n,height:this.height*a})}pad(t,n){let[a,r,s,i]=[this.x-t/2,this.y-n/2,this.width+t,this.height+n];return new lt({x:a,y:r,width:s,height:i})}clipAtImageBorders(t,n){let{x:a,y:r,right:s,bottom:i}=this,o=Math.max(a,0),l=Math.max(r,0),u=s-o,p=i-l,d=Math.min(u,t-o),c=Math.min(p,n-l);return new lt({x:o,y:l,width:d,height:c}).floor()}shift(t,n){let{width:a,height:r}=this,s=this.x+t,i=this.y+n;return new lt({x:s,y:i,width:a,height:r})}padAtBorders(t,n){let a=this.width+1,r=this.height+1,s=1,i=1,o=a,l=r,u=this.left,p=this.top,d=this.right,c=this.bottom;return d>n&&(o=-d+n+a,d=n),c>t&&(l=-c+t+r,c=t),u<1&&(l=2-u,u=1),p<1&&(l=2-p,p=1),{dy:i,edy:l,dx:s,edx:o,y:p,ey:c,x:u,ex:d,w:a,h:r}}calibrate(t){return new lt({left:this.left+t.left*this.width,top:this.top+t.top*this.height,right:this.right+t.right*this.width,bottom:this.bottom+t.bottom*this.height}).toSquare().round()}};var Eo=class extends lt{constructor(t,n,a,r,s=!1){super({left:t,top:n,right:a,bottom:r},s)}};var Or=class{constructor(t,n,a,r,s){this._imageDims=new yn(s.width,s.height),this._score=t,this._classScore=n,this._className=a,this._box=new lt(r).rescale(this._imageDims)}get score(){return this._score}get classScore(){return this._classScore}get className(){return this._className}get box(){return this._box}get imageDims(){return this._imageDims}get imageWidth(){return this.imageDims.width}get imageHeight(){return this.imageDims.height}get relativeBox(){return new lt(this._box).rescale(this.imageDims.reverse())}forSize(t,n){return new Or(this.score,this.classScore,this.className,this.relativeBox,{width:t,height:n})}};var bt=class extends Or{constructor(t,n,a){super(t,t,"",n,a)}forSize(t,n){let{score:a,relativeBox:r,imageDims:s}=super.forSize(t,n);return new bt(a,r,s)}};function V0(e,t,n=!0){let a=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),r=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),s=a*r;return n?s/(e.area+t.area-s):s/Math.min(e.area,t.area)}function U0(e){let t=e.map(o=>o.x),n=e.map(o=>o.y),a=t.reduce((o,l)=>l<o?l:o,1/0),r=n.reduce((o,l)=>l<o?l:o,1/0),s=t.reduce((o,l)=>o<l?l:o,0),i=n.reduce((o,l)=>o<l?l:o,0);return new Eo(a,r,s,i)}function G0(e,t,n,a=!0){let r=t.map((i,o)=>({score:i,boxIndex:o})).sort((i,o)=>i.score-o.score).map(i=>i.boxIndex),s=[];for(;r.length>0;){let i=r.pop();s.push(i);let o=r,l=[];for(let u=0;u<o.length;u++){let p=o[u],d=e[i],c=e[p];l.push(V0(d,c,a))}r=r.filter((u,p)=>l[p]<=n)}return s}function tr(e,t){return O(()=>{let[n,a,r]=t,s=_n([...e.shape.slice(0,3),1],n,"float32"),i=_n([...e.shape.slice(0,3),1],a,"float32"),o=_n([...e.shape.slice(0,3),1],r,"float32"),l=Qe([s,i,o],3);return ce(e,l)})}function H0(e,t=!1){return O(()=>{let[n,a]=e.shape.slice(1);if(n===a)return e;let r=Math.abs(n-a),s=Math.round(r*(t?.5:1)),i=n>a?2:1,o=c=>{let h=e.shape.slice();return h[i]=c,_n(h,0,"float32")},l=o(s),u=r-l.shape[i],d=[t&&u?o(u):null,e,l].filter(c=>!!c).map(c=>oe(c,"float32"));return Qe(d,i)})}function Iue(e){let t=e.slice();for(let n=t.length-1;n>0;n--){let a=Math.floor(Math.random()*(n+1)),r=t[n];t[n]=t[a],t[a]=r}return t}function cd(e){return 1/(1+Math.exp(-e))}function Sue(e){return Math.log(e/(1-e))}var Ao=class extends lt{constructor(t,n,a,r,s=!1){super({x:t,y:n,width:a,height:r},s)}};var Nue=.5,Tue=.43,Cue=.45,ra=class{constructor(t,n,a=new Me(0,0)){let{width:r,height:s}=n;this._imgDims=new yn(r,s),this._shift=a,this._positions=t.map(i=>i.mul(new Me(r,s)).add(a))}get shift(){return new Me(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 Me(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 Me(t,n))}shiftByPoint(t){return this.shiftBy(t.x,t.y)}align(t,n={}){if(t){let s=t instanceof bt?t.box.floor():new lt(t);return this.shiftBy(s.x,s.y).align(null,n)}let{useDlibAlignment:a,minBoxPadding:r}={useDlibAlignment:!1,minBoxPadding:.2,...n};return a?this.alignDlib():this.alignMinBbox(r)}alignDlib(){let t=this.getRefPointsForAlignment(),[n,a,r]=t,s=d=>r.sub(d).magnitude(),i=(s(n)+s(a))/2,o=Math.floor(i/Cue),l=_o(t),u=Math.floor(Math.max(0,l.x-Nue*o)),p=Math.floor(Math.max(0,l.y-Tue*o));return new Ao(u,p,Math.min(o,this.imageWidth+u),Math.min(o,this.imageHeight+p))}alignMinBbox(t){let n=U0(this.positions);return n.pad(n.width*t,n.height*t)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}};var j0=class extends ra{getRefPointsForAlignment(){let t=this.positions;return[t[0],t[1],_o([t[3],t[4]])]}};var $o=class extends ra{getJawOutline(){return this.positions.slice(0,17)}getLeftEyeBrow(){return this.positions.slice(17,22)}getRightEyeBrow(){return this.positions.slice(22,27)}getNose(){return this.positions.slice(27,36)}getLeftEye(){return this.positions.slice(36,42)}getRightEye(){return this.positions.slice(42,48)}getMouth(){return this.positions.slice(48,68)}getRefPointsForAlignment(){return[this.getLeftEye(),this.getRightEye(),this.getMouth()].map(_o)}};var ap=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?` (${Co(this.distance)})`:""}`}};var rp=class extends lt{constructor(n,a){super(n);this._label=a}static assertIsValidLabeledBox(n,a){if(lt.assertIsValidBox(n,a),!er(n.label))throw new Error(`${a} - expected property label (${n.label}) to be a number`)}get label(){return this._label}};var xr=class{constructor(t,n){if(typeof t!="string")throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(n)||n.some(a=>!(a instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=t,this._descriptors=n}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(t=>Array.from(t))}}static fromJSON(t){let n=t.descriptors.map(a=>new Float32Array(a));return new xr(t.label,n)}};var q0=class extends rp{constructor(n,a,r,s){super(n,a);this._score=r,this._classScore=s}static assertIsValidPredictedBox(n,a){if(rp.assertIsValidLabeledBox(n,a),!np(n.score)||!np(n.classScore))throw new Error(`${a} - expected properties score (${n.score}) and (${n.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}};function vr(e){return e.detection instanceof bt}function Fo(e,t){return{...e,...{detection:t}}}function K0(){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 dd(){return typeof global=="object"&&typeof process!="undefined"&&process.versions!=null&&process.versions.node!=null}function ig(e){let t="";if(!e&&dd())try{e=L$("fs")}catch(a){t=a.toString()}return{readFile:e?a=>new Promise((r,s)=>{e.readFile(a,(i,o)=>i?s(i):r(o))}):()=>{throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)}}}function X0(){let e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=global.Video||global.HTMLVideoElement,a=()=>{if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=()=>{if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},s=()=>{if(n)return new n;throw new Error("createVideoElement - missing Video implementation for nodejs environment")},i=global.fetch,o=ig();return{Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:a,createImageElement:r,createVideoElement:s,fetch:i,...o}}function Y0(){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 _ue(){if(!sn)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return sn}function J0(e){sn=e}function Z0(){return Y0()?J0(K0()):dd()?J0(X0()):null}function Eue(e){if(sn||Z0(),!sn)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");let{Canvas:t=sn.Canvas,Image:n=sn.Image}=e;sn.Canvas=t,sn.Image=n,sn.createCanvasElement=e.createCanvasElement||(()=>new t),sn.createImageElement=e.createImageElement||(()=>new n),sn.ImageData=e.ImageData||sn.ImageData,sn.Video=e.Video||sn.Video,sn.fetch=e.fetch||sn.fetch,sn.readFile=e.readFile||sn.readFile}var et={getEnv:_ue,setEnv:J0,initialize:Z0,createBrowserEnv:K0,createFileSystem:ig,createNodejsEnv:X0,monkeyPatch:Eue,isBrowser:Y0,isNodejs:dd};Z0();function Do(e){return!et.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function qn(e){let{Canvas:t,CanvasRenderingContext2D:n}=et.getEnv();if(e instanceof n)return e;let a=Do(e);if(!(a instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");let r=a.getContext("2d");if(!r)throw new Error("resolveContext2d - canvas 2d context is null");return r}var Q0=(r=>(r.TOP_LEFT="TOP_LEFT",r.TOP_RIGHT="TOP_RIGHT",r.BOTTOM_LEFT="BOTTOM_LEFT",r.BOTTOM_RIGHT="BOTTOM_RIGHT",r))(Q0||{}),sp=class{constructor(t={}){let{anchorPosition:n,backgroundColor:a,fontColor:r,fontSize:s,fontStyle:i,padding:o}=t;this.anchorPosition=n||"TOP_LEFT",this.backgroundColor=a||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=s||14,this.fontStyle=i||"Georgia",this.padding=o||4}},Lr=class{constructor(t,n,a={}){this.text=typeof t=="string"?[t]:t instanceof Lr?t.text:t,this.anchor=n,this.options=new sp(a)}measureWidth(t){let{padding:n}=this.options;return this.text.map(a=>t.measureText(a).width).reduce((a,r)=>a<r?r:a,0)+2*n}measureHeight(){let{fontSize:t,padding:n}=this.options;return this.text.length*t+2*n}getUpperLeft(t,n){let{anchorPosition:a}=this.options,r=a==="BOTTOM_RIGHT"||a==="TOP_RIGHT",s=a==="BOTTOM_LEFT"||a==="BOTTOM_RIGHT",i=this.measureWidth(t),o=this.measureHeight(),l=r?this.anchor.x-i:this.anchor.x,u=s?this.anchor.y-o:this.anchor.y;if(n){let{width:p,height:d}=n,c=Math.max(Math.min(l,p-i),0),h=Math.max(Math.min(u,d-o),0);return{x:c,y:h}}return{x:l,y:u}}draw(t){let n=Do(t),a=qn(n),{backgroundColor:r,fontColor:s,fontSize:i,fontStyle:o,padding:l}=this.options;a.font=`${i}px ${o}`;let u=this.measureWidth(a),p=this.measureHeight();a.fillStyle=r;let d=this.getUpperLeft(a,n);a.fillRect(d.x,d.y,u,p),a.fillStyle=s,this.text.forEach((c,h)=>{let m=l+d.x,f=l+d.y+(h+1)*i;a.fillText(c,m,f)})}};var og=class{constructor(t={}){let{boxColor:n,lineWidth:a,label:r,drawLabelOptions:s}=t;this.boxColor=n||"rgba(0, 0, 255, 1)",this.lineWidth=a||2,this.label=r;let i={anchorPosition:"BOTTOM_LEFT",backgroundColor:this.boxColor};this.drawLabelOptions=new sp({...i,...s})}},hd=class{constructor(t,n={}){this.box=new lt(t),this.options=new og(n)}draw(t){let n=qn(t),{boxColor:a,lineWidth:r}=this.options,{x:s,y:i,width:o,height:l}=this.box;n.strokeStyle=a,n.lineWidth=r,n.strokeRect(s,i,o,l);let{label:u}=this.options;u&&new Lr([u],{x:s-r/2,y:i},this.options.drawLabelOptions).draw(t)}};function Aue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof bt?a.score:vr(a)?a.detection.score:void 0,s=a instanceof bt?a.box:vr(a)?a.detection.box:new lt(a),i=r?`${Co(r)}`:void 0;new hd(s,{label:i}).draw(e)})}function md(e){let{Image:t,Video:n}=et.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function e1(e){return new Promise((t,n)=>{(e instanceof et.getEnv().Canvas||md(e))&&t(null);function a(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),n(s))}function r(s){!s.currentTarget||(s.currentTarget.removeEventListener("load",r),s.currentTarget.removeEventListener("error",a),t(s))}e.addEventListener("load",r),e.addEventListener("error",a)})}function t1(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToImage - expected buf to be of type: Blob"));let a=new FileReader;a.onload=()=>{typeof a.result!="string"&&n(new Error("bufferToImage - expected reader.result to be a string, in onload"));let r=et.getEnv().createImageElement();r.onload=()=>t(r),r.onerror=n,r.src=a.result},a.onerror=n,a.readAsDataURL(e)})}function Ro(e){let{Image:t,Video:n}=et.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 Mo({width:e,height:t}){let{createCanvasElement:n}=et.getEnv(),a=n();return a.width=e,a.height=t,a}function fd(e,t){let{ImageData:n}=et.getEnv();if(!(e instanceof n)&&!md(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");let{width:a,height:r}=t||Ro(e),s=Mo({width:a,height:r});return e instanceof n?qn(s).putImageData(e,0,0):qn(s).drawImage(e,0,0,a,r),s}async function n1(e,t){let n=t||et.getEnv().createCanvasElement(),[a,r,s]=e.shape.slice(xa(e)?1:0),i=O(()=>e.as3D(a,r,s).toInt());return await yo.toPixels(i,n),i.dispose(),n}function lg(e){let{Image:t,Canvas:n,Video:a}=et.getEnv();return e instanceof t||e instanceof n||e instanceof a}function a1(e,t,n=!1){let{Image:a,Canvas:r}=et.getEnv();if(!(e instanceof a||e instanceof r))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");if(t<=0)return Mo({width:1,height:1});let s=Ro(e),i=t/Math.max(s.height,s.width),o=i*s.width,l=i*s.height,u=Mo({width:t,height:t}),p=e instanceof r?e:fd(e),d=Math.abs(o-l)/2,c=n&&o<l?d:0,h=n&&l<o?d:0;return p.width>0&&p.height>0&&qn(u).drawImage(p,c,h,o,l),u}var wr=class{constructor(t,n=!1){this._imageTensors=[];this._canvases=[];this._treatAsBatchInput=!1;this._inputDimensions=[];this._inputSize=0;if(!Array.isArray(t))throw new Error(`NetInput.constructor - expected inputs to be an Array of TResolvedNetInput or to be instanceof tf.Tensor4D, instead have ${t}`);this._treatAsBatchInput=n,this._batchSize=t.length,t.forEach((a,r)=>{if(Pr(a)){this._imageTensors[r]=a,this._inputDimensions[r]=a.shape;return}if(xa(a)){let i=a.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=a,this._inputDimensions[r]=a.shape.slice(1);return}let s=a instanceof et.getEnv().Canvas?a:fd(a);this._canvases[r]=s,this._inputDimensions[r]=[s.height,s.width,3]})}get imageTensors(){return this._imageTensors}get canvases(){return this._canvases}get isBatchInput(){return this.batchSize>1||this._treatAsBatchInput}get batchSize(){return this._batchSize}get inputDimensions(){return this._inputDimensions}get inputSize(){return this._inputSize}get reshapedInputDimensions(){return br(this.batchSize,0,1).map((t,n)=>this.getReshapedInputDimensions(n))}getInput(t){return this.canvases[t]||this.imageTensors[t]}getInputDimensions(t){return this._inputDimensions[t]}getInputHeight(t){return this._inputDimensions[t][0]}getInputWidth(t){return this._inputDimensions[t][1]}getReshapedInputDimensions(t){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");let n=this.getInputWidth(t),a=this.getInputHeight(t);return W0({width:n,height:a},this.inputSize)}toBatchTensor(t,n=!0){return this._inputSize=t,O(()=>{let a=br(this.batchSize,0,1).map(s=>{let i=this.getInput(s);if(i instanceof Ae){let o=xa(i)?i:mn(i);return o=H0(o,n),(o.shape[1]!==t||o.shape[2]!==t)&&(o=Ln.resizeBilinear(o,[t,t],!1,!1)),o.as3D(t,t,3)}if(i instanceof et.getEnv().Canvas)return yo.fromPixels(a1(i,t,n));throw new Error(`toBatchTensor - at batchIdx ${s}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)});return Mt(a.map(s=>oe(s,"float32"))).as4D(this.batchSize,t,t,3)})}};async function xt(e){if(e instanceof wr)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");let n=r=>Array.isArray(e)?` at input index ${r}:`:"",a=t.map(Do);return a.forEach((r,s)=>{if(!lg(r)&&!Pr(r)&&!xa(r))throw typeof t[s]=="string"?new Error(`toNetInput -${n(s)} string passed, but could not resolve HTMLElement for element id ${t[s]}`):new Error(`toNetInput -${n(s)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(xa(r)){let i=r.shape[0];if(i!==1)throw new Error(`toNetInput -${n(s)} tf.Tensor4D with batchSize ${i} passed, but not supported in input array`)}}),await Promise.all(a.map(r=>lg(r)&&e1(r))),new wr(a,Array.isArray(e))}async function ip(e,t){let{Canvas:n}=et.getEnv(),a=e;if(!(e instanceof n)){let i=await xt(e);if(i.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");let o=i.getInput(0);a=o instanceof n?o:await n1(o)}let r=qn(a);return t.map(i=>i instanceof bt?i.forSize(a.width,a.height).box.floor():i).map(i=>i.clipAtImageBorders(a.width,a.height)).map(({x:i,y:o,width:l,height:u})=>{let p=Mo({width:l,height:u});return l>0&&u>0&&qn(p).putImageData(r.getImageData(i,o,l,u),0,0),p})}async function op(e,t){if(!Pr(e)&&!xa(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(xa(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{let[n,a,r]=e.shape.slice(xa(e)?1:0);return t.map(o=>o instanceof bt?o.forSize(a,n).box:o).map(o=>o.clipAtImageBorders(a,n)).filter(o=>o.width>0&&o.height>0).map(({x:o,y:l,width:u,height:p})=>Bu(e.as3D(n,a,r),[l,o,0],[p,u,r]))})}async function zr(e,t){let{fetch:n}=et.getEnv(),a=await n(e,t);if(!(a.status<400))throw new Error(`failed to fetch: (${a.status}) ${a.statusText}, from url: ${a.url}`);return a}async function $ue(e){let t=await zr(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 t1(n)}async function r1(e){return(await zr(e)).json()}async function Fue(e){return new Float32Array(await(await zr(e)).arrayBuffer())}function nA(e){return new Promise((t,n)=>{e instanceof Blob||n(new Error("bufferToVideo - expected buf to be of type: Blob"));let a=et.getEnv().createVideoElement();a.oncanplay=()=>t(a),a.onerror=n,a.playsInline=!0,a.muted=!0,a.src=URL.createObjectURL(e),a.play()})}async function Due(e){let t=await zr(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 nA(n)}function ug(e,t){let n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};let a=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(a,"");let r=e.split("/").filter(o=>o),s=e.endsWith(".json")?r[r.length-1]:n,i=a+(e.endsWith(".json")?r.slice(0,r.length-1):r).join("/");return i=e.startsWith("/")?`/${i}`:i,{modelBaseUri:i,manifestUri:i==="/"?`/${s}`:`${i}/${s}`}}async function s1(e,t){let{manifestUri:n,modelBaseUri:a}=ug(e,t),r=await r1(n);return Qt.loadWeights(r,a)}function Rue(e,t,n=!1){let{width:a,height:r}=n?Ro(t):t;return e.width=a,e.height=r,{width:a,height:r}}var on=class{constructor(t){this._params=void 0;this._paramMappings=[];this._name=t}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(t){let{obj:n,objProp:a}=this.traversePropertyPath(t);return n[a]}reassignParamFromPath(t,n){let{obj:a,objProp:r}=this.traversePropertyPath(t);a[r].dispose(),a[r]=n}getParamList(){return this._paramMappings.map(({paramPath:t})=>({path:t,tensor:this.getParamFromPath(t)}))}getTrainableParams(){return this.getParamList().filter(t=>t.tensor instanceof is)}getFrozenParams(){return this.getParamList().filter(t=>!(t.tensor instanceof is))}variable(){this.getFrozenParams().forEach(({path:t,tensor:n})=>{this.reassignParamFromPath(t,n.variable())})}freeze(){this.getTrainableParams().forEach(({path:t,tensor:n})=>{let a=Qn(n.dataSync());n.dispose(),this.reassignParamFromPath(t,a)})}dispose(t=!0){this.getParamList().forEach(n=>{if(t&&n.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${n.path}`);n.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:t})=>Array.from(t.dataSync())).reduce((t,n)=>t.concat(n)))}async load(t){if(t instanceof Float32Array){this.extractWeights(t);return}await this.loadFromUri(t)}async loadFromUri(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);let n=await s1(t,this.getDefaultModelName());this.loadFromWeightMap(n)}async loadFromDisk(t){if(t&&typeof t!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);let{readFile:n}=et.getEnv(),{manifestUri:a,modelBaseUri:r}=ug(t,this.getDefaultModelName()),s=u=>Promise.all(u.map(p=>n(p).then(d=>d.buffer))),i=Qt.weightsLoaderFactory(s),o=JSON.parse((await n(a)).toString()),l=await i(o,r);this.loadFromWeightMap(l)}loadFromWeightMap(t){let{paramMappings:n,params:a}=this.extractParamsFromWeightMap(t);this._paramMappings=n,this._params=a}extractWeights(t){let{paramMappings:n,params:a}=this.extractParams(t);this._paramMappings=n,this._params=a}traversePropertyPath(t){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");let n=t.split("/").reduce((s,i)=>{if(!s.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${t}`);return{obj:s.nextObj,objProp:i,nextObj:s.nextObj[i]}},{nextObj:this.params}),{obj:a,objProp:r}=n;if(!a||!r||!(a[r]instanceof Ae))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${t}`);return{obj:a,objProp:r}}};function Kn(e,t,n){return O(()=>{let a=xo(e,t.depthwise_filter,t.pointwise_filter,n,"same");return a=J(a,t.bias),a})}function pg(e,t,n=!1){return O(()=>{let a=Xe(n?J(Rt(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):Kn(e,t.conv0,[2,2])),r=Kn(a,t.conv1,[1,1]),s=Xe(J(a,r)),i=Kn(s,t.conv2,[1,1]);return Xe(J(a,J(r,i)))})}function gd(e,t,n=!1,a=!0){return O(()=>{let r=Xe(n?J(Rt(e,t.conv0.filters,a?[2,2]:[1,1],"same"),t.conv0.bias):Kn(e,t.conv0,a?[2,2]:[1,1])),s=Kn(r,t.conv1,[1,1]),i=Xe(J(r,s)),o=Kn(i,t.conv2,[1,1]),l=Xe(J(r,J(s,o))),u=Kn(l,t.conv3,[1,1]);return Xe(J(r,J(s,J(o,u))))})}function Po(e,t,n="same",a=!1){return O(()=>{let r=J(Rt(e,t.filters,[1,1],n),t.bias);return a?Xe(r):r})}function $n(e,t){Object.keys(e).forEach(n=>{t.some(a=>a.originalPath===n)||e[n].dispose()})}function lp(e,t){return(n,a,r,s)=>{let i=Za(e(n*a*r*r),[r,r,n,a]),o=qe(e(a));return t.push({paramPath:`${s}/filters`},{paramPath:`${s}/bias`}),{filters:i,bias:o}}}function cg(e,t){return(n,a,r)=>{let s=Ha(e(n*a),[n,a]),i=qe(e(a));return t.push({paramPath:`${r}/weights`},{paramPath:`${r}/bias`}),{weights:s,bias:i}}}var yd=class{constructor(t,n,a){this.depthwise_filter=t;this.pointwise_filter=n;this.bias=a}};function up(e,t){return(n,a,r)=>{let s=Za(e(9*n),[3,3,n,1]),i=Za(e(n*a),[1,1,n,a]),o=qe(e(a));return t.push({paramPath:`${r}/depthwise_filter`},{paramPath:`${r}/pointwise_filter`},{paramPath:`${r}/bias`}),new yd(s,i,o)}}function pp(e){return t=>{let n=e(`${t}/depthwise_filter`,4),a=e(`${t}/pointwise_filter`,4),r=e(`${t}/bias`,1);return new yd(n,a,r)}}function sa(e,t){return(n,a,r)=>{let s=e[n];if(!To(s,a))throw new Error(`expected weightMap[${n}] to be a Tensor${a}D, instead have ${s}`);return t.push({originalPath:n,paramPath:r||n}),s}}function Fn(e){let t=e;function n(r){let s=t.slice(0,r);return t=t.slice(r),s}function a(){return t}return{extractWeights:n,getRemainingWeights:a}}function dg(e,t){let n=lp(e,t),a=up(e,t);function r(i,o,l,u=!1){let p=u?n(i,o,3,`${l}/conv0`):a(i,o,`${l}/conv0`),d=a(o,o,`${l}/conv1`),c=a(o,o,`${l}/conv2`);return{conv0:p,conv1:d,conv2:c}}function s(i,o,l,u=!1){let{conv0:p,conv1:d,conv2:c}=r(i,o,l,u),h=a(o,o,`${l}/conv3`);return{conv0:p,conv1:d,conv2:c,conv3:h}}return{extractDenseBlock3Params:r,extractDenseBlock4Params:s}}function aA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Fn(e),{extractDenseBlock4Params:r}=dg(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2"),l=r(128,256,"dense3");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o,dense3:l}}}function hg(e){return t=>{let n=e(`${t}/filters`,4),a=e(`${t}/bias`,1);return{filters:n,bias:a}}}function mg(e,t){let n=sa(e,t),a=hg(n),r=pp(n);function s(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`);return{conv0:u,conv1:p,conv2:d}}function i(o,l=!1){let u=l?a(`${o}/conv0`):r(`${o}/conv0`),p=r(`${o}/conv1`),d=r(`${o}/conv2`),c=r(`${o}/conv3`);return{conv0:u,conv1:p,conv2:d,conv3:c}}return{extractDenseBlock3Params:s,extractDenseBlock4Params:i}}function rA(e){let t=[],{extractDenseBlock4Params:n}=mg(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return $n(e,t),{params:a,paramMappings:t}}var cp=class extends on{constructor(){super("FaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=tr(a,[122.782,117.001,104.298]).div(255),i=gd(s,n.dense0,!0);return i=gd(i,n.dense1),i=gd(i,n.dense2),i=gd(i,n.dense3),i=ga(i,[7,7],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await xt(t))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeightMap(t){return rA(t)}extractParams(t){return aA(t)}};function bd(e,t){return O(()=>J(Fe(e,t.weights),t.bias))}function sA(e,t,n){let a=[],{extractWeights:r,getRemainingWeights:s}=Fn(e),o=cg(r,a)(t,n,"fc");if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{paramMappings:a,params:{fc:o}}}function iA(e){let t=[],n=sa(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:a("fc")};return $n(e,t),{params:r,paramMappings:t}}function fg(e){let t={},n={};return Object.keys(e).forEach(a=>{let r=a.startsWith("fc")?n:t;r[a]=e[a]}),{featureExtractorMap:t,classifierMap:n}}var dp=class extends on{constructor(n,a){super(n);this._faceFeatureExtractor=a}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof wr?this.faceFeatureExtractor.forwardInput(n):n;return bd(r.as2D(r.shape[0],-1),a.fc)})}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return sA(n,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=fg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),iA(r)}extractParams(n){let a=this.getClassifierChannelsIn(),r=this.getClassifierChannelsOut(),s=r*a+r,i=n.slice(0,n.length-s),o=n.slice(n.length-s);return this.faceFeatureExtractor.extractWeights(i),this.extractClassifierParams(o)}};var i1=["neutral","happy","sad","angry","fearful","disgusted","surprised"],Wr=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}`);i1.forEach((n,a)=>{this[n]=t[a]})}asSortedArray(){return i1.map(t=>({expression:t,probability:this[t]})).sort((t,n)=>n.probability-t.probability)}};var xd=class extends dp{constructor(t=new cp){super("FaceExpressionNet",t)}forwardInput(t){return O(()=>Ja(this.runNet(t)))}async forward(t){return this.forwardInput(await xt(t))}async predictExpressions(t){let n=await xt(t),a=await this.forwardInput(n),r=await Promise.all(mt(a).map(async i=>{let o=i.dataSync();return i.dispose(),o}));a.dispose();let s=r.map(i=>new Wr(i));return n.isBatchInput?s:s[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}};function o1(e){return e.expressions instanceof Wr}function gg(e,t){return{...e,...{expressions:t}}}function Mue(e,t,n=.1,a){(Array.isArray(t)?t:[t]).forEach(s=>{let i=s instanceof Wr?s:o1(s)?s.expressions:void 0;if(!i)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");let l=i.asSortedArray().filter(d=>d.probability>n),u=vr(s)?s.detection.box.bottomLeft:a||new Me(0,0);new Lr(l.map(d=>`${d.expression} (${Co(d.probability)})`),u).draw(e)})}function Oo(e){return vr(e)&&e.landmarks instanceof ra&&e.unshiftedLandmarks instanceof ra&&e.alignedRect instanceof bt}function Pue(e){let t=(o,l,u,p)=>Math.atan2(p-l,u-o)%Math.PI,n=o=>o*180/Math.PI,a={roll:void 0,pitch:void 0,yaw:void 0};if(!e||!e._positions||e._positions.length!==68)return a;let r=e._positions;a.roll=-t(r[36]._x,r[36]._y,r[45]._x,r[45]._y),a.pitch=t(0,Math.abs(r[0]._x-r[30]._x)/r[30]._x,Math.PI,Math.abs(r[16]._x-r[30]._x)/r[30]._x);let s=r.reduce((o,l)=>o<l._y?o:l._y,1/0),i=r.reduce((o,l)=>o>l._y?o:l._y,-1/0);return a.yaw=Math.PI*(e._imgDims._height/(i-s)/1.4-1),a}function hp(e,t){let{box:n}=e.detection,a=t.shiftBy(n.x,n.y),r=a.align(),{imageDims:s}=e.detection,i=new bt(e.detection.score,r.rescale(s.reverse()),s),o=Pue(t);return{...e,...{landmarks:a,unshiftedLandmarks:t,alignedRect:i,angle:o}}}var yg=class{constructor(t={}){let{drawLines:n=!0,drawPoints:a=!0,lineWidth:r,lineColor:s,pointSize:i,pointColor:o}=t;this.drawLines=n,this.drawPoints=a,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=s||"rgba(0, 255, 255, 1)",this.pointColor=o||"rgba(255, 0, 255, 1)"}},bg=class{constructor(t,n={}){this.faceLandmarks=t,this.options=new yg(n)}draw(t){let n=qn(t),{drawLines:a,drawPoints:r,lineWidth:s,lineColor:i,pointSize:o,pointColor:l}=this.options;if(a&&this.faceLandmarks instanceof $o&&(n.strokeStyle=i,n.lineWidth=s,Mr(n,this.faceLandmarks.getJawOutline()),Mr(n,this.faceLandmarks.getLeftEyeBrow()),Mr(n,this.faceLandmarks.getRightEyeBrow()),Mr(n,this.faceLandmarks.getNose()),Mr(n,this.faceLandmarks.getLeftEye(),!0),Mr(n,this.faceLandmarks.getRightEye(),!0),Mr(n,this.faceLandmarks.getMouth(),!0)),r){n.strokeStyle=l,n.fillStyle=l;let u=p=>{n.beginPath(),n.arc(p.x,p.y,o,0,2*Math.PI),n.fill()};this.faceLandmarks.positions.forEach(u)}}};function Oue(e,t){(Array.isArray(t)?t:[t]).forEach(a=>{let r=a instanceof ra?a:Oo(a)?a.landmarks:void 0;if(!r)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks<WithFaceDetection<{}>> or array thereof");new bg(r).draw(e)})}var oA="1.6.7";function Wue(e,t){let n=lp(e,t),a=up(e,t);function r(i,o,l){let u=a(i,o,`${l}/separable_conv0`),p=a(o,o,`${l}/separable_conv1`),d=n(i,o,1,`${l}/expansion_conv`);return{separable_conv0:u,separable_conv1:p,expansion_conv:d}}function s(i,o){let l=a(i,i,`${o}/separable_conv0`),u=a(i,i,`${o}/separable_conv1`),p=a(i,i,`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:n,extractSeparableConvParams:a,extractReductionBlockParams:r,extractMainBlockParams:s}}function lA(e,t){let n=[],{extractWeights:a,getRemainingWeights:r}=Fn(e),{extractConvParams:s,extractSeparableConvParams:i,extractReductionBlockParams:o,extractMainBlockParams:l}=Wue(a,n),u=s(3,32,3,"entry_flow/conv_in"),p=o(32,64,"entry_flow/reduction_block_0"),d=o(64,128,"entry_flow/reduction_block_1"),c={conv_in:u,reduction_block_0:p,reduction_block_1:d},h={};br(t,0,1).forEach(y=>{h[`main_block_${y}`]=l(128,`middle_flow/main_block_${y}`)});let m=o(128,256,"exit_flow/reduction_block"),f=i(256,512,"exit_flow/separable_conv"),g={reduction_block:m,separable_conv:f};if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:n,params:{entry_flow:c,middle_flow:h,exit_flow:g}}}function Bue(e,t){let n=sa(e,t),a=hg(n),r=pp(n);function s(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=a(`${o}/expansion_conv`);return{separable_conv0:l,separable_conv1:u,expansion_conv:p}}function i(o){let l=r(`${o}/separable_conv0`),u=r(`${o}/separable_conv1`),p=r(`${o}/separable_conv2`);return{separable_conv0:l,separable_conv1:u,separable_conv2:p}}return{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}}function uA(e,t){let n=[],{extractConvParams:a,extractSeparableConvParams:r,extractReductionBlockParams:s,extractMainBlockParams:i}=Bue(e,n),o=a("entry_flow/conv_in"),l=s("entry_flow/reduction_block_0"),u=s("entry_flow/reduction_block_1"),p={conv_in:o,reduction_block_0:l,reduction_block_1:u},d={};br(t,0,1).forEach(f=>{d[`main_block_${f}`]=i(`middle_flow/main_block_${f}`)});let c=s("exit_flow/reduction_block"),h=r("exit_flow/separable_conv"),m={reduction_block:c,separable_conv:h};return $n(e,n),{params:{entry_flow:p,middle_flow:d,exit_flow:m},paramMappings:n}}function pA(e,t,n){return J(Rt(e,t.filters,n,"same"),t.bias)}function u1(e,t,n=!0){let a=n?Xe(e):e;return a=Kn(a,t.separable_conv0,[1,1]),a=Kn(Xe(a),t.separable_conv1,[1,1]),a=Pt(a,[3,3],[2,2],"same"),a=J(a,pA(e,t.expansion_conv,[2,2])),a}function Vue(e,t){let n=Kn(Xe(e),t.separable_conv0,[1,1]);return n=Kn(Xe(n),t.separable_conv1,[1,1]),n=Kn(Xe(n),t.separable_conv2,[1,1]),n=J(n,e),n}var xg=class extends on{constructor(n){super("TinyXception");this._numMainBlocks=n}forwardInput(n){let{params:a}=this;if(!a)throw new Error("TinyXception - load model before inference");return O(()=>{let r=oe(n.toBatchTensor(112,!0),"float32"),i=tr(r,[122.782,117.001,104.298]).div(255),o=Xe(pA(i,a.entry_flow.conv_in,[2,2]));return o=u1(o,a.entry_flow.reduction_block_0,!1),o=u1(o,a.entry_flow.reduction_block_1),br(this._numMainBlocks,0,1).forEach(l=>{o=Vue(o,a.middle_flow[`main_block_${l}`])}),o=u1(o,a.exit_flow.reduction_block),o=Xe(Kn(o,a.exit_flow.separable_conv,[1,1])),o})}async forward(n){return this.forwardInput(await xt(n))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeightMap(n){return uA(n,this._numMainBlocks)}extractParams(n){return lA(n,this._numMainBlocks)}};function cA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Fn(e),r=cg(n,t),s=r(512,1,"fc/age"),i=r(512,2,"fc/gender");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{fc:{age:s,gender:i}}}}function dA(e){let t=[],n=sa(e,t);function a(s){let i=n(`${s}/weights`,2),o=n(`${s}/bias`,1);return{weights:i,bias:o}}let r={fc:{age:a("fc/age"),gender:a("fc/gender")}};return $n(e,t),{params:r,paramMappings:t}}var vg=(n=>(n.FEMALE="female",n.MALE="male",n))(vg||{});var vd=class extends on{constructor(n=new xg(2)){super("AgeGenderNet");this._faceFeatureExtractor=n}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(n){let{params:a}=this;if(!a)throw new Error(`${this._name} - load model before inference`);return O(()=>{let r=n instanceof wr?this.faceFeatureExtractor.forwardInput(n):n,s=ga(r,[7,7],[2,2],"valid").as2D(r.shape[0],-1),i=bd(s,a.fc.age).as1D(),o=bd(s,a.fc.gender);return{age:i,gender:o}})}forwardInput(n){return O(()=>{let{age:a,gender:r}=this.runNet(n);return{age:a,gender:Ja(r)}})}async forward(n){return this.forwardInput(await xt(n))}async predictAgeAndGender(n){let a=await xt(n),r=await this.forwardInput(a),s=mt(r.age),i=mt(r.gender),o=s.map((u,p)=>({ageTensor:u,genderTensor:i[p]})),l=await Promise.all(o.map(async({ageTensor:u,genderTensor:p})=>{let d=u.dataSync()[0],c=p.dataSync()[0],h=c>.5,m=h?"male":"female",f=h?c:1-c;return u.dispose(),p.dispose(),{age:d,gender:m,genderProbability:f}}));return r.age.dispose(),r.gender.dispose(),a.isBatchInput?l:l[0]}getDefaultModelName(){return"age_gender_model"}dispose(n=!0){this.faceFeatureExtractor.dispose(n),super.dispose(n)}loadClassifierParams(n){let{params:a,paramMappings:r}=this.extractClassifierParams(n);this._params=a,this._paramMappings=r}extractClassifierParams(n){return cA(n)}extractParamsFromWeightMap(n){let{featureExtractorMap:a,classifierMap:r}=fg(n);return this.faceFeatureExtractor.loadFromWeightMap(a),dA(r)}extractParams(n){let r=n.slice(0,n.length-1539),s=n.slice(n.length-1539);return this.faceFeatureExtractor.extractWeights(r),this.extractClassifierParams(s)}};var mp=class extends dp{postProcess(t,n,a){let r=a.map(({width:i,height:o})=>{let l=n/Math.max(o,i);return{width:i*l,height:o*l}}),s=r.length;return O(()=>{let i=(d,c)=>Mt([_n([68],d,"float32"),_n([68],c,"float32")],1).as2D(1,136).as1D(),o=(d,c)=>{let{width:h,height:m}=r[d];return c(h,m)?Math.abs(h-m)/2:0},l=d=>o(d,(c,h)=>c<h),u=d=>o(d,(c,h)=>h<c);return t.mul(_n([s,136],n,"float32")).sub(Mt(Array.from(Array(s),(d,c)=>i(l(c),u(c))))).div(Mt(Array.from(Array(s),(d,c)=>i(r[c].width,r[c].height))))})}forwardInput(t){return O(()=>{let n=this.runNet(t);return this.postProcess(n,t.inputSize,t.inputDimensions.map(([a,r])=>({height:a,width:r})))})}async forward(t){return this.forwardInput(await xt(t))}async detectLandmarks(t){let n=await xt(t),a=O(()=>mt(this.forwardInput(n))),r=await Promise.all(a.map(async(s,i)=>{let o=Array.from(s.dataSync()),l=o.filter((p,d)=>rg(d)),u=o.filter((p,d)=>!rg(d));return new $o(Array(68).fill(0).map((p,d)=>new Me(l[d],u[d])),{height:n.getInputHeight(i),width:n.getInputWidth(i)})}));return a.forEach(s=>s.dispose()),n.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}};var Lo=class extends mp{constructor(t=new cp){super("FaceLandmark68Net",t)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}};function hA(e){let t=[],{extractDenseBlock3Params:n}=mg(e,t),a={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return $n(e,t),{params:a,paramMappings:t}}function mA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Fn(e),{extractDenseBlock3Params:r}=dg(n,t),s=r(3,32,"dense0",!0),i=r(32,64,"dense1"),o=r(64,128,"dense2");if(a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{paramMappings:t,params:{dense0:s,dense1:i,dense2:o}}}var wg=class extends on{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(112,!0),"float32"),s=tr(a,[122.782,117.001,104.298]).div(255),i=pg(s,n.dense0,!0);return i=pg(i,n.dense1),i=pg(i,n.dense2),i=ga(i,[14,14],[2,2],"valid"),i})}async forward(t){return this.forwardInput(await xt(t))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeightMap(t){return hA(t)}extractParams(t){return mA(t)}};var wd=class extends mp{constructor(t=new wg){super("FaceLandmark68TinyNet",t)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}};var p1=class extends Lo{};function fA(e,t){return J(W(e,t.weights),t.biases)}function c1(e,t,n,a,r="same"){let{filters:s,bias:i}=t.conv,o=Rt(e,s,n,r);return o=J(o,i),o=fA(o,t.scale),a?Xe(o):o}function gA(e,t){return c1(e,t,[1,1],!0)}function d1(e,t){return c1(e,t,[1,1],!1)}function kg(e,t){return c1(e,t,[2,2],!0,"valid")}function Uue(e,t){function n(o,l,u){let p=e(o),d=p.length/(l*u*u);if(z0(d))throw new Error(`depth has to be an integer: ${d}, weights.length: ${p.length}, numFilters: ${l}, filterSize: ${u}`);return O(()=>Pe(Za(p,[l,d,u,u]),[2,3,1,0]))}function a(o,l,u,p){let d=n(o,l,u),c=qe(e(l));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/bias`}),{filters:d,bias:c}}function r(o,l){let u=qe(e(o)),p=qe(e(o));return t.push({paramPath:`${l}/weights`},{paramPath:`${l}/biases`}),{weights:u,biases:p}}function s(o,l,u,p){let d=a(o,l,u,`${p}/conv`),c=r(l,`${p}/scale`);return{conv:d,scale:c}}function i(o,l,u,p,d=!1){let c=s((d?.5:1)*o,l,u,`${p}/conv1`),h=s(o,l,u,`${p}/conv2`);return{conv1:c,conv2:h}}return{extractConvLayerParams:s,extractResidualLayerParams:i}}function yA(e){let{extractWeights:t,getRemainingWeights:n}=Fn(e),a=[],{extractConvLayerParams:r,extractResidualLayerParams:s}=Uue(t,a),i=r(4704,32,7,"conv32_down"),o=s(9216,32,3,"conv32_1"),l=s(9216,32,3,"conv32_2"),u=s(9216,32,3,"conv32_3"),p=s(36864,64,3,"conv64_down",!0),d=s(36864,64,3,"conv64_1"),c=s(36864,64,3,"conv64_2"),h=s(36864,64,3,"conv64_3"),m=s(147456,128,3,"conv128_down",!0),f=s(147456,128,3,"conv128_1"),g=s(147456,128,3,"conv128_2"),y=s(589824,256,3,"conv256_down",!0),b=s(589824,256,3,"conv256_1"),x=s(589824,256,3,"conv256_2"),v=s(589824,256,3,"conv256_down_out"),w=O(()=>Pe(Ha(t(256*128),[128,256]),[1,0]));if(a.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);return{params:{conv32_down:i,conv32_1:o,conv32_2:l,conv32_3:u,conv64_down:p,conv64_1:d,conv64_2:c,conv64_3:h,conv128_down:m,conv128_1:f,conv128_2:g,conv256_down:y,conv256_1:b,conv256_2:x,conv256_down_out:v,fc:w},paramMappings:a}}function Gue(e,t){let n=sa(e,t);function a(i){let o=n(`${i}/scale/weights`,1),l=n(`${i}/scale/biases`,1);return{weights:o,biases:l}}function r(i){let o=n(`${i}/conv/filters`,4),l=n(`${i}/conv/bias`,1),u=a(i);return{conv:{filters:o,bias:l},scale:u}}function s(i){return{conv1:r(`${i}/conv1`),conv2:r(`${i}/conv2`)}}return{extractConvLayerParams:r,extractResidualLayerParams:s}}function bA(e){let t=[],{extractConvLayerParams:n,extractResidualLayerParams:a}=Gue(e,t),r=n("conv32_down"),s=a("conv32_1"),i=a("conv32_2"),o=a("conv32_3"),l=a("conv64_down"),u=a("conv64_1"),p=a("conv64_2"),d=a("conv64_3"),c=a("conv128_down"),h=a("conv128_1"),m=a("conv128_2"),f=a("conv256_down"),g=a("conv256_1"),y=a("conv256_2"),b=a("conv256_down_out"),{fc:x}=e;if(t.push({originalPath:"fc",paramPath:"fc"}),!L0(x))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${x}`);let v={conv32_down:r,conv32_1:s,conv32_2:i,conv32_3:o,conv64_down:l,conv64_1:u,conv64_2:p,conv64_3:d,conv128_down:c,conv128_1:h,conv128_2:m,conv256_down:f,conv256_1:g,conv256_2:y,conv256_down_out:b,fc:x};return $n(e,t),{params:v,paramMappings:t}}function nr(e,t){let n=gA(e,t.conv1);return n=d1(n,t.conv2),n=J(n,e),n=Xe(n),n}function kd(e,t){let n=kg(e,t.conv1);n=d1(n,t.conv2);let a=ga(e,2,2,"valid"),r=kt(a.shape),s=a.shape[3]!==n.shape[3];if(a.shape[1]!==n.shape[1]||a.shape[2]!==n.shape[2]){let o=[...n.shape];o[1]=1;let l=kt(o);n=Qe([n,l],1);let u=[...n.shape];u[2]=1;let p=kt(u);n=Qe([n,p],2)}return a=s?Qe([a,r],3):a,n=J(a,n),n=Xe(n),n}var zo=class extends on{constructor(){super("FaceRecognitionNet")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(150,!0),"float32"),s=tr(a,[122.782,117.001,104.298]).div(255),i=kg(s,n.conv32_down);i=Pt(i,3,2,"valid"),i=nr(i,n.conv32_1),i=nr(i,n.conv32_2),i=nr(i,n.conv32_3),i=kd(i,n.conv64_down),i=nr(i,n.conv64_1),i=nr(i,n.conv64_2),i=nr(i,n.conv64_3),i=kd(i,n.conv128_down),i=nr(i,n.conv128_1),i=nr(i,n.conv128_2),i=kd(i,n.conv256_down),i=nr(i,n.conv256_1),i=nr(i,n.conv256_2),i=kd(i,n.conv256_down_out);let o=i.mean([1,2]);return Fe(o,n.fc)})}async forward(t){return this.forwardInput(await xt(t))}async computeFaceDescriptor(t){var s;if((s=t==null?void 0:t.shape)!=null&&s.some(i=>i<=0))return new Float32Array(128);let n=await xt(t),a=O(()=>mt(this.forwardInput(n))),r=await Promise.all(a.map(i=>i.data()));return a.forEach(i=>i.dispose()),n.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeightMap(t){return bA(t)}extractParams(t){return yA(t)}};function Hue(e){let t=new zo;return t.extractWeights(e),t}function Ig(e,t){return{...e,...{descriptor:t}}}function jue(e){return typeof e.age=="number"}function Sg(e,t){return{...e,...{age:t}}}function que(e){return(e.gender==="male"||e.gender==="female")&&np(e.genderProbability)}function Ng(e,t,n){return{...e,...{gender:t,genderProbability:n}}}function Kue(e,t){function n(l,u){let p=Za(e(9*l),[3,3,l,1]),d=qe(e(l)),c=qe(e(l)),h=qe(e(l)),m=qe(e(l));return t.push({paramPath:`${u}/filters`},{paramPath:`${u}/batch_norm_scale`},{paramPath:`${u}/batch_norm_offset`},{paramPath:`${u}/batch_norm_mean`},{paramPath:`${u}/batch_norm_variance`}),{filters:p,batch_norm_scale:d,batch_norm_offset:c,batch_norm_mean:h,batch_norm_variance:m}}function a(l,u,p,d,c){let h=Za(e(l*u*p*p),[p,p,l,u]),m=qe(e(u));return t.push({paramPath:`${d}/filters`},{paramPath:`${d}/${c?"batch_norm_offset":"bias"}`}),{filters:h,bias:m}}function r(l,u,p,d){let{filters:c,bias:h}=a(l,u,p,d,!0);return{filters:c,batch_norm_offset:h}}function s(l,u,p){let d=n(l,`${p}/depthwise_conv`),c=r(l,u,1,`${p}/pointwise_conv`);return{depthwise_conv:d,pointwise_conv:c}}function i(){let l=r(3,32,3,"mobilenetv1/conv_0"),u=s(32,64,"mobilenetv1/conv_1"),p=s(64,128,"mobilenetv1/conv_2"),d=s(128,128,"mobilenetv1/conv_3"),c=s(128,256,"mobilenetv1/conv_4"),h=s(256,256,"mobilenetv1/conv_5"),m=s(256,512,"mobilenetv1/conv_6"),f=s(512,512,"mobilenetv1/conv_7"),g=s(512,512,"mobilenetv1/conv_8"),y=s(512,512,"mobilenetv1/conv_9"),b=s(512,512,"mobilenetv1/conv_10"),x=s(512,512,"mobilenetv1/conv_11"),v=s(512,1024,"mobilenetv1/conv_12"),w=s(1024,1024,"mobilenetv1/conv_13");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,conv_8:g,conv_9:y,conv_10:b,conv_11:x,conv_12:v,conv_13:w}}function o(){let l=r(1024,256,1,"prediction_layer/conv_0"),u=r(256,512,3,"prediction_layer/conv_1"),p=r(512,128,1,"prediction_layer/conv_2"),d=r(128,256,3,"prediction_layer/conv_3"),c=r(256,128,1,"prediction_layer/conv_4"),h=r(128,256,3,"prediction_layer/conv_5"),m=r(256,64,1,"prediction_layer/conv_6"),f=r(64,128,3,"prediction_layer/conv_7"),g=a(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),y=a(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),b=a(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),x=a(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),v=a(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),w=a(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),T=a(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),C=a(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),E=a(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),$=a(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),P=a(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),F=a(128,18,1,"prediction_layer/box_predictor_5/class_predictor");return{conv_0:l,conv_1:u,conv_2:p,conv_3:d,conv_4:c,conv_5:h,conv_6:m,conv_7:f,box_predictor_0:{box_encoding_predictor:g,class_predictor:y},box_predictor_1:{box_encoding_predictor:b,class_predictor:x},box_predictor_2:{box_encoding_predictor:v,class_predictor:w},box_predictor_3:{box_encoding_predictor:T,class_predictor:C},box_predictor_4:{box_encoding_predictor:E,class_predictor:$},box_predictor_5:{box_encoding_predictor:P,class_predictor:F}}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:o}}function xA(e){let t=[],{extractWeights:n,getRemainingWeights:a}=Fn(e),{extractMobilenetV1Params:r,extractPredictionLayerParams:s}=Kue(n,t),i=r(),o=s(),u={extra_dim:jm(n(5118*4),[1,5118,4])};if(t.push({paramPath:"output_layer/extra_dim"}),a().length!==0)throw new Error(`weights remaing after extract: ${a().length}`);return{params:{mobilenetv1:i,prediction_layer:o,output_layer:u},paramMappings:t}}function Xue(e,t){let n=sa(e,t);function a(u,p,d){let c=n(`${u}/Conv2d_${p}_pointwise/weights`,4,`${d}/filters`),h=n(`${u}/Conv2d_${p}_pointwise/convolution_bn_offset`,1,`${d}/batch_norm_offset`);return{filters:c,batch_norm_offset:h}}function r(u){let p=`mobilenetv1/conv_${u}`,d=`MobilenetV1/Conv2d_${u}_depthwise`,c=`${p}/depthwise_conv`,h=`${p}/pointwise_conv`,m=n(`${d}/depthwise_weights`,4,`${c}/filters`),f=n(`${d}/BatchNorm/gamma`,1,`${c}/batch_norm_scale`),g=n(`${d}/BatchNorm/beta`,1,`${c}/batch_norm_offset`),y=n(`${d}/BatchNorm/moving_mean`,1,`${c}/batch_norm_mean`),b=n(`${d}/BatchNorm/moving_variance`,1,`${c}/batch_norm_variance`);return{depthwise_conv:{filters:m,batch_norm_scale:f,batch_norm_offset:g,batch_norm_mean:y,batch_norm_variance:b},pointwise_conv:a("MobilenetV1",u,h)}}function s(){return{conv_0:a("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:r(1),conv_2:r(2),conv_3:r(3),conv_4:r(4),conv_5:r(5),conv_6:r(6),conv_7:r(7),conv_8:r(8),conv_9:r(9),conv_10:r(10),conv_11:r(11),conv_12:r(12),conv_13:r(13)}}function i(u,p){let d=n(`${u}/weights`,4,`${p}/filters`),c=n(`${u}/biases`,1,`${p}/bias`);return{filters:d,bias:c}}function o(u){let p=i(`Prediction/BoxPredictor_${u}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${u}/box_encoding_predictor`),d=i(`Prediction/BoxPredictor_${u}/ClassPredictor`,`prediction_layer/box_predictor_${u}/class_predictor`);return{box_encoding_predictor:p,class_predictor:d}}function l(){return{conv_0:a("Prediction",0,"prediction_layer/conv_0"),conv_1:a("Prediction",1,"prediction_layer/conv_1"),conv_2:a("Prediction",2,"prediction_layer/conv_2"),conv_3:a("Prediction",3,"prediction_layer/conv_3"),conv_4:a("Prediction",4,"prediction_layer/conv_4"),conv_5:a("Prediction",5,"prediction_layer/conv_5"),conv_6:a("Prediction",6,"prediction_layer/conv_6"),conv_7:a("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:o(0),box_predictor_1:o(1),box_predictor_2:o(2),box_predictor_3:o(3),box_predictor_4:o(4),box_predictor_5:o(5)}}return{extractMobilenetV1Params:s,extractPredictionLayerParams:l}}function vA(e){let t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:a}=Xue(e,t),r=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Pr(r))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${r}`);let s={mobilenetv1:n(),prediction_layer:a(),output_layer:{extra_dim:r}};return $n(e,t),{params:s,paramMappings:t}}function Fa(e,t,n){return O(()=>{let a=Rt(e,t.filters,n,"same");return a=J(a,t.batch_norm_offset),nn(a,0,6)})}var Yue=.0010000000474974513;function Jue(e,t,n){return O(()=>{let a=Is(e,t.filters,n,"same");return a=Ar(a,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,Yue),nn(a,0,6)})}function Zue(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function wA(e,t){return O(()=>{let n,a=Fa(e,t.conv_0,[2,2]);if([t.conv_1,t.conv_2,t.conv_3,t.conv_4,t.conv_5,t.conv_6,t.conv_7,t.conv_8,t.conv_9,t.conv_10,t.conv_11,t.conv_12,t.conv_13].forEach((s,i)=>{let o=i+1,l=Zue(o);a=Jue(a,s.depthwise_conv,l),a=Fa(a,s.pointwise_conv,[1,1]),o===11&&(n=a)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:a,conv11:n}})}function Que(e,t,n){let a=e.arraySync(),r=Math.min(a[t][0],a[t][2]),s=Math.min(a[t][1],a[t][3]),i=Math.max(a[t][0],a[t][2]),o=Math.max(a[t][1],a[t][3]),l=Math.min(a[n][0],a[n][2]),u=Math.min(a[n][1],a[n][3]),p=Math.max(a[n][0],a[n][2]),d=Math.max(a[n][1],a[n][3]),c=(i-r)*(o-s),h=(p-l)*(d-u);if(c<=0||h<=0)return 0;let m=Math.max(r,l),f=Math.max(s,u),g=Math.min(i,p),y=Math.min(o,d),b=Math.max(g-m,0)*Math.max(y-f,0);return b/(c+h-b)}function kA(e,t,n,a,r){let s=e.shape[0],i=Math.min(n,s),o=t.map((p,d)=>({score:p,boxIndex:d})).filter(p=>p.score>r).sort((p,d)=>d.score-p.score),l=p=>p<=a?1:0,u=[];return o.forEach(p=>{if(u.length>=i)return;let d=p.score;for(let c=u.length-1;c>=0;--c){let h=Que(e,p.boxIndex,u[c]);if(h!==0&&(p.score*=l(h),p.score<=r))break}d===p.score&&u.push(p.boxIndex)}),u}function epe(e){let t=mt(Pe(e,[1,0])),n=[ce(t[2],t[0]),ce(t[3],t[1])],a=[J(t[0],fe(n[0],2)),J(t[1],fe(n[1],2))];return{sizes:n,centers:a}}function tpe(e,t){let{sizes:n,centers:a}=epe(e),r=mt(Pe(t,[1,0])),s=fe(W(gn(fe(r[2],5)),n[0]),2),i=J(W(fe(r[0],10),n[0]),a[0]),o=fe(W(gn(fe(r[3],5)),n[1]),2),l=J(W(fe(r[1],10),n[1]),a[1]);return Pe(Mt([ce(i,s),ce(l,o),J(i,s),J(l,o)]),[1,0])}function IA(e,t,n){return O(()=>{let a=e.shape[0],r=tpe(V(On(n.extra_dim,[a,1,1]),[-1,4]),V(e,[-1,4]));r=V(r,[a,r.shape[0]/a,4]);let s=ma(Ge(t,[0,0,1],[-1,-1,-1])),i=Ge(s,[0,0,0],[-1,-1,1]);i=V(i,[a,i.shape[1]]);let o=mt(r),l=mt(i);return{boxes:o,scores:l}})}function Wo(e,t){return O(()=>{let n=e.shape[0],a=V(Po(e,t.box_encoding_predictor),[n,-1,1,4]),r=V(Po(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:a,classPrediction:r}})}function SA(e,t,n){return O(()=>{let a=Fa(e,n.conv_0,[1,1]),r=Fa(a,n.conv_1,[2,2]),s=Fa(r,n.conv_2,[1,1]),i=Fa(s,n.conv_3,[2,2]),o=Fa(i,n.conv_4,[1,1]),l=Fa(o,n.conv_5,[2,2]),u=Fa(l,n.conv_6,[1,1]),p=Fa(u,n.conv_7,[2,2]),d=Wo(t,n.box_predictor_0),c=Wo(e,n.box_predictor_1),h=Wo(r,n.box_predictor_2),m=Wo(i,n.box_predictor_3),f=Wo(l,n.box_predictor_4),g=Wo(p,n.box_predictor_5),y=Qe([d.boxPredictionEncoding,c.boxPredictionEncoding,h.boxPredictionEncoding,m.boxPredictionEncoding,f.boxPredictionEncoding,g.boxPredictionEncoding],1),b=Qe([d.classPrediction,c.classPrediction,h.classPrediction,m.classPrediction,f.classPrediction,g.classPrediction],1);return{boxPredictions:y,classPredictions:b}})}var va=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 Es=class extends on{constructor(){super("SsdMobilenetv1")}forwardInput(t){let{params:n}=this;if(!n)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{let a=oe(t.toBatchTensor(512,!1),"float32"),r=ce(fe(a,127.5),1),s=wA(r,n.mobilenetv1),{boxPredictions:i,classPredictions:o}=SA(s.out,s.conv11,n.prediction_layer);return IA(i,o,n.output_layer)})}async forward(t){return this.forwardInput(await xt(t))}async locateFaces(t,n={}){let{maxResults:a,minConfidence:r}=new va(n),s=await xt(t),{boxes:i,scores:o}=this.forwardInput(s),l=i[0],u=o[0];for(let x=1;x<i.length;x++)i[x].dispose(),o[x].dispose();let p=Array.from(u.dataSync()),c=kA(l,p,a,.5,r),h=s.getReshapedInputDimensions(0),m=s.inputSize,f=m/h.width,g=m/h.height,y=l.arraySync(),b=c.map(x=>{let[v,w]=[Math.max(0,y[x][0]),Math.min(1,y[x][2])].map(E=>E*g),[T,C]=[Math.max(0,y[x][1]),Math.min(1,y[x][3])].map(E=>E*f);return new bt(p[x],new Ao(T,v,C-T,w-v),{height:s.getInputHeight(0),width:s.getInputWidth(0)})});return l.dispose(),u.dispose(),b}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeightMap(t){return vA(t)}extractParams(t){return xA(t)}};function NA(e){let t=new Es;return t.extractWeights(e),t}function npe(e){return NA(e)}var h1=class extends Es{};var TA=.4,CA=[new Me(.738768,.874946),new Me(2.42204,2.65704),new Me(4.30971,7.04493),new Me(10.246,4.59428),new Me(12.6868,11.8741)],_A=[new Me(1.603231,2.094468),new Me(6.041143,7.080126),new Me(2.882459,3.518061),new Me(4.266906,5.178857),new Me(9.041765,10.66308)],EA=[117.001,114.697,97.404],AA="tiny_yolov2_model",$A="tiny_yolov2_separable_conv_model";var Tg=e=>typeof e=="number";function m1(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(!Tg(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=>Tg(t.x)&&Tg(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(Tg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function fp(e){return O(()=>{let t=W(e,ke(.10000000149011612));return J(Xe(ce(e,t)),t)})}function Br(e,t){return O(()=>{let n=ya(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Rt(n,t.conv.filters,[1,1],"valid"),n=ce(n,t.bn.sub),n=W(n,t.bn.truediv),n=J(n,t.conv.bias),fp(n)})}function Vr(e,t){return O(()=>{let n=ya(e,[[0,0],[1,1],[1,1],[0,0]]);return n=xo(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=J(n,t.bias),fp(n)})}function ape(e,t){let n=lp(e,t);function a(i,o){let l=qe(e(i)),u=qe(e(i));return t.push({paramPath:`${o}/sub`},{paramPath:`${o}/truediv`}),{sub:l,truediv:u}}function r(i,o,l){let u=n(i,o,3,`${l}/conv`),p=a(o,`${l}/bn`);return{conv:u,bn:p}}let s=up(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}}function FA(e,t,n,a){let{extractWeights:r,getRemainingWeights:s}=Fn(e),i=[],{extractConvParams:o,extractConvWithBatchNormParams:l,extractSeparableConvParams:u}=ape(r,i),p;if(t.withSeparableConvs){let[d,c,h,m,f,g,y,b,x]=a,v=t.isFirstLayerConv2d?o(d,c,3,"conv0"):u(d,c,"conv0"),w=u(c,h,"conv1"),T=u(h,m,"conv2"),C=u(m,f,"conv3"),E=u(f,g,"conv4"),$=u(g,y,"conv5"),P=b?u(y,b,"conv6"):void 0,F=x?u(b,x,"conv7"):void 0,S=o(x||b||y,5*n,1,"conv8");p={conv0:v,conv1:w,conv2:T,conv3:C,conv4:E,conv5:$,conv6:P,conv7:F,conv8:S}}else{let[d,c,h,m,f,g,y,b,x]=a,v=l(d,c,"conv0"),w=l(c,h,"conv1"),T=l(h,m,"conv2"),C=l(m,f,"conv3"),E=l(f,g,"conv4"),$=l(g,y,"conv5"),P=l(y,b,"conv6"),F=l(b,x,"conv7"),S=o(x,5*n,1,"conv8");p={conv0:v,conv1:w,conv2:T,conv3:C,conv4:E,conv5:$,conv6:P,conv7:F,conv8:S}}if(s().length!==0)throw new Error(`weights remaing after extract: ${s().length}`);return{params:p,paramMappings:i}}function rpe(e,t){let n=sa(e,t);function a(o){let l=n(`${o}/sub`,1),u=n(`${o}/truediv`,1);return{sub:l,truediv:u}}function r(o){let l=n(`${o}/filters`,4),u=n(`${o}/bias`,1);return{filters:l,bias:u}}function s(o){let l=r(`${o}/conv`),u=a(`${o}/bn`);return{conv:l,bn:u}}let i=pp(n);return{extractConvParams:r,extractConvWithBatchNormParams:s,extractSeparableConvParams:i}}function DA(e,t){let n=[],{extractConvParams:a,extractConvWithBatchNormParams:r,extractSeparableConvParams:s}=rpe(e,n),i;if(t.withSeparableConvs){let o=t.filterSizes&&t.filterSizes.length||9;i={conv0:t.isFirstLayerConv2d?a("conv0"):s("conv0"),conv1:s("conv1"),conv2:s("conv2"),conv3:s("conv3"),conv4:s("conv4"),conv5:s("conv5"),conv6:o>7?s("conv6"):void 0,conv7:o>8?s("conv7"):void 0,conv8:a("conv8")}}else i={conv0:r("conv0"),conv1:r("conv1"),conv2:r("conv2"),conv3:r("conv3"),conv4:r("conv4"),conv5:r("conv5"),conv6:r("conv6"),conv7:r("conv7"),conv8:a("conv8")};return $n(e,n),{params:i,paramMappings:n}}var ar=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 f1=class extends on{constructor(n){super("TinyYolov2");m1(n),this._config=n}get config(){return this._config}get withClassScores(){return this.config.withClassScores||this.config.classes.length>1}get boxEncodingSize(){return 5+(this.withClassScores?this.config.classes.length:0)}runTinyYolov2(n,a){let r=Br(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Br(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=Br(r,a.conv6),r=Br(r,a.conv7),Po(r,a.conv8,"valid",!1)}runMobilenet(n,a){let r=this.config.isFirstLayerConv2d?fp(Po(n,a.conv0,"valid",!1)):Vr(n,a.conv0);return r=Pt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv1),r=Pt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv2),r=Pt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv3),r=Pt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv4),r=Pt(r,[2,2],[2,2],"same"),r=Vr(r,a.conv5),r=Pt(r,[2,2],[1,1],"same"),r=a.conv6?Vr(r,a.conv6):r,r=a.conv7?Vr(r,a.conv7):r,Po(r,a.conv8,"valid",!1)}forwardInput(n,a){let{params:r}=this;if(!r)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let s=oe(n.toBatchTensor(a,!1),"float32");return s=this.config.meanRgb?tr(s,this.config.meanRgb):s,s=s.div(255),this.config.withSeparableConvs?this.runMobilenet(s,r):this.runTinyYolov2(s,r)})}async forward(n,a){return this.forwardInput(await xt(n),a)}async detect(n,a={}){let{inputSize:r,scoreThreshold:s}=new ar(a),i=await xt(n),o=await this.forwardInput(i,r),l=O(()=>mt(o)[0].expandDims()),u={width:i.getInputWidth(0),height:i.getInputHeight(0)},p=await this.extractBoxes(l,i.getReshapedInputDimensions(0),s);o.dispose(),l.dispose();let d=p.map(y=>y.box),c=p.map(y=>y.score),h=p.map(y=>y.classScore),m=p.map(y=>this.config.classes[y.label]);return G0(d.map(y=>y.rescale(r)),c,this.config.iouThreshold,!0).map(y=>new Or(c[y],h[y],m[y],d[y],u))}getDefaultModelName(){return""}extractParamsFromWeightMap(n){return DA(n,this.config)}extractParams(n){let a=this.config.filterSizes||f1.DEFAULT_FILTER_SIZES,r=a?a.length:void 0;if(r!==7&&r!==8&&r!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${r} filterSizes in config`);return FA(n,this.config,this.boxEncodingSize,a)}async extractBoxes(n,a,r){let{width:s,height:i}=a,o=Math.max(s,i),l=o/s,u=o/i,p=n.shape[1],d=this.config.anchors.length,[c,h,m]=O(()=>{let b=n.reshape([p,p,d,this.boxEncodingSize]),x=b.slice([0,0,0,0],[p,p,d,4]),v=b.slice([0,0,0,4],[p,p,d,1]),w=this.withClassScores?Ja(b.slice([0,0,0,5],[p,p,d,this.config.classes.length]),3):ke(0);return[x,v,w]}),f=[],g=await h.array(),y=await c.array();for(let b=0;b<p;b++)for(let x=0;x<p;x++)for(let v=0;v<d;v++){let w=cd(g[b][x][v][0]);if(!r||w>r){let T=(x+cd(y[b][x][v][0]))/p*l,C=(b+cd(y[b][x][v][1]))/p*u,E=Math.exp(y[b][x][v][2])*this.config.anchors[v].x/p*l,$=Math.exp(y[b][x][v][3])*this.config.anchors[v].y/p*u,P=T-E/2,F=C-$/2,S={row:b,col:x,anchor:v},{classScore:M,label:B}=this.withClassScores?await this.extractPredictedClass(m,S):{classScore:1,label:0};f.push({box:new Eo(P,F,P+E,F+$),score:w,classScore:w*M,label:B,...S})}}return c.dispose(),h.dispose(),m.dispose(),f}async extractPredictedClass(n,a){let{row:r,col:s,anchor:i}=a,o=await n.array();return Array(this.config.classes.length).fill(0).map((l,u)=>o[r][s][i][u]).map((l,u)=>({classScore:l,label:u})).reduce((l,u)=>l.classScore>u.classScore?l:u)}},Bo=f1;Bo.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];var Vo=class extends Bo{constructor(t=!0){let n={withSeparableConvs:t,iouThreshold:TA,classes:["face"],...t?{anchors:_A,meanRgb:EA}:{anchors:CA,withClassScores:!0}};super(n)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new bt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?$A:AA}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};function spe(e,t=!0){let n=new Vo(t);return n.extractWeights(e),n}var Id=class extends ar{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}};var wa=class{async then(t){return t(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}};async function Uo(e,t,n,a,r=({alignedRect:s})=>s){let s=e.map(l=>Oo(l)?r(l):l.detection),i=a||(t instanceof Ae?await op(t,s):await ip(t,s)),o=await n(i);return i.forEach(l=>l instanceof Ae&&l.dispose()),o}async function gp(e,t,n,a,r){return Uo([e],t,async s=>n(s[0]),a,r)}var RA=.4,MA=[new Me(1.603231,2.094468),new Me(6.041143,7.080126),new Me(2.882459,3.518061),new Me(4.266906,5.178857),new Me(9.041765,10.66308)],PA=[117.001,114.697,97.404];var Go=class extends Bo{constructor(){let t={withSeparableConvs:!0,iouThreshold:RA,classes:["face"],anchors:MA,meanRgb:PA,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(t)}get anchors(){return this.config.anchors}async locateFaces(t,n){return(await this.detect(t,n)).map(r=>new bt(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeightMap(t){return super.extractParamsFromWeightMap(t)}};var tt={ssdMobilenetv1:new Es,tinyFaceDetector:new Go,tinyYolov2:new Vo,faceLandmark68Net:new Lo,faceLandmark68TinyNet:new wd,faceRecognitionNet:new zo,faceExpressionNet:new xd,ageGenderNet:new vd},OA=(e,t)=>tt.ssdMobilenetv1.locateFaces(e,t),ipe=(e,t)=>tt.tinyFaceDetector.locateFaces(e,t),ope=(e,t)=>tt.tinyYolov2.locateFaces(e,t),LA=e=>tt.faceLandmark68Net.detectLandmarks(e),lpe=e=>tt.faceLandmark68TinyNet.detectLandmarks(e),upe=e=>tt.faceRecognitionNet.computeFaceDescriptor(e),ppe=e=>tt.faceExpressionNet.predictExpressions(e),cpe=e=>tt.ageGenderNet.predictAgeAndGender(e),zA=e=>tt.ssdMobilenetv1.load(e),dpe=e=>tt.tinyFaceDetector.load(e),hpe=e=>tt.tinyYolov2.load(e),mpe=e=>tt.faceLandmark68Net.load(e),fpe=e=>tt.faceLandmark68TinyNet.load(e),gpe=e=>tt.faceRecognitionNet.load(e),ype=e=>tt.faceExpressionNet.load(e),bpe=e=>tt.ageGenderNet.load(e),xpe=zA,vpe=OA,wpe=LA;var Cg=class extends wa{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},Ho=class extends Cg{async run(){let t=await this.parentTask,n=await Uo(t,this.input,async a=>Promise.all(a.map(r=>tt.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return t.map((a,r)=>gg(a,n[r]))}withAgeAndGender(){return new qo(this,this.input)}},jo=class extends Cg{async run(){let t=await this.parentTask;if(!t)return;let n=await gp(t,this.input,a=>tt.faceExpressionNet.predictExpressions(a),this.extractedFaces);return gg(t,n)}withAgeAndGender(){return new Ko(this,this.input)}},As=class extends Ho{withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new Ur(this,this.input)}},$s=class extends jo{withAgeAndGender(){return new Ds(this,this.input)}withFaceDescriptor(){return new Gr(this,this.input)}};var _g=class extends wa{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.extractedFaces=r}},qo=class extends _g{async run(){let t=await this.parentTask,n=await Uo(t,this.input,async a=>Promise.all(a.map(r=>tt.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return t.map((a,r)=>{let{age:s,gender:i,genderProbability:o}=n[r];return Sg(Ng(a,i,o),s)})}withFaceExpressions(){return new Ho(this,this.input)}},Ko=class extends _g{async run(){let t=await this.parentTask;if(!t)return;let{age:n,gender:a,genderProbability:r}=await gp(t,this.input,s=>tt.ageGenderNet.predictAgeAndGender(s),this.extractedFaces);return Sg(Ng(t,a,r),n)}withFaceExpressions(){return new jo(this,this.input)}},Fs=class extends qo{withFaceExpressions(){return new As(this,this.input)}withFaceDescriptors(){return new Ur(this,this.input)}},Ds=class extends Ko{withFaceExpressions(){return new $s(this,this.input)}withFaceDescriptor(){return new Gr(this,this.input)}};var Sd=class extends wa{constructor(n,a){super();this.parentTask=n;this.input=a}},Ur=class extends Sd{async run(){let t=await this.parentTask;return(await Uo(t,this.input,a=>Promise.all(a.map(r=>tt.faceRecognitionNet.computeFaceDescriptor(r))),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}))).map((a,r)=>Ig(t[r],a))}withFaceExpressions(){return new As(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}},Gr=class extends Sd{async run(){let t=await this.parentTask;if(!t)return;let n=await gp(t,this.input,a=>tt.faceRecognitionNet.computeFaceDescriptor(a),null,a=>a.landmarks.align(null,{useDlibAlignment:!0}));return Ig(t,n)}withFaceExpressions(){return new $s(this,this.input)}withAgeAndGender(){return new Ds(this,this.input)}};var Nd=class extends wa{constructor(n,a,r){super();this.parentTask=n;this.input=a;this.useTinyLandmarkNet=r}get landmarkNet(){return this.useTinyLandmarkNet?tt.faceLandmark68TinyNet:tt.faceLandmark68Net}},Td=class extends Nd{async run(){let t=await this.parentTask,n=t.map(i=>i.detection),a=this.input instanceof Ae?await op(this.input,n):await ip(this.input,n),r=await Promise.all(a.map(i=>this.landmarkNet.detectLandmarks(i)));return a.forEach(i=>i instanceof Ae&&i.dispose()),t.filter((i,o)=>r[o]).map((i,o)=>hp(i,r[o]))}withFaceExpressions(){return new As(this,this.input)}withAgeAndGender(){return new Fs(this,this.input)}withFaceDescriptors(){return new Ur(this,this.input)}},Cd=class extends Nd{async run(){let t=await this.parentTask;if(!t)return;let{detection:n}=t,a=this.input instanceof Ae?await op(this.input,[n]):await ip(this.input,[n]),r=await this.landmarkNet.detectLandmarks(a[0]);return a.forEach(s=>s instanceof Ae&&s.dispose()),hp(t,r)}withFaceExpressions(){return new $s(this,this.input)}withAgeAndGender(){return new Ds(this,this.input)}withFaceDescriptor(){return new Gr(this,this.input)}};var _d=class extends wa{constructor(n,a=new va){super();this.input=n;this.options=a}},yp=class extends _d{async run(){let{input:t,options:n}=this,a;if(n instanceof Id)a=tt.tinyFaceDetector.locateFaces(t,n);else if(n instanceof va)a=tt.ssdMobilenetv1.locateFaces(t,n);else if(n instanceof ar)a=tt.tinyYolov2.locateFaces(t,n);else throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | TinyYolov2Options");return a}runAndExtendWithFaceDetections(){return new Promise((t,n)=>{this.run().then(a=>t(a.map(r=>Fo({},r)))).catch(a=>n(a))})}withFaceLandmarks(t=!1){return new Td(this.runAndExtendWithFaceDetections(),this.input,t)}withFaceExpressions(){return new Ho(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new qo(this.runAndExtendWithFaceDetections(),this.input)}},Ed=class extends _d{async run(){let t=await new yp(this.input,this.options),n=t[0];return t.forEach(a=>{a.score>n.score&&(n=a)}),n}runAndExtendWithFaceDetection(){return new Promise(async t=>{let n=await this.run();t(n?Fo({},n):void 0)})}withFaceLandmarks(t=!1){return new Cd(this.runAndExtendWithFaceDetection(),this.input,t)}withFaceExpressions(){return new jo(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ko(this.runAndExtendWithFaceDetection(),this.input)}};function kpe(e,t=new va){return new Ed(e,t)}function Eg(e,t=new va){return new yp(e,t)}async function WA(e,t){return Eg(e,new va(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Ipe(e,t={}){return Eg(e,new ar(t)).withFaceLandmarks().withFaceDescriptors()}var Spe=WA;function g1(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");let n=Array.from(e),a=Array.from(t);return Math.sqrt(n.map((r,s)=>r-a[s]).reduce((r,s)=>r+s**2,0))}var Ad=class{constructor(t,n=.6){this._distanceThreshold=n;let a=Array.isArray(t)?t:[t];if(!a.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1,s=()=>`person ${r++}`;this._labeledDescriptors=a.map(i=>{if(i instanceof xr)return i;if(i instanceof Float32Array)return new xr(s(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new xr(s(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array | Array<LabeledFaceDescriptors | WithFaceDescriptor<any> | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(t,n){return n.map(a=>g1(a,t)).reduce((a,r)=>a+r,0)/(n.length||1)}matchDescriptor(t){return this.labeledDescriptors.map(({descriptors:n,label:a})=>new ap(a,this.computeMeanDistance(t,n))).reduce((n,a)=>n.distance<a.distance?n:a)}findBestMatch(t){let n=this.matchDescriptor(t);return n.distance<this._distanceThreshold?n:new ap("unknown",n.distance)}toJSON(){return{distanceThreshold:this._distanceThreshold,labeledDescriptors:this._labeledDescriptors.map(t=>t.toJSON())}}static fromJSON(t){let n=t.labeledDescriptors.map(a=>xr.fromJSON(a));return new Ad(n,t.distanceThreshold)}};function Npe(e){let t=new Go;return t.extractWeights(e),t}function BA(e,t){let{width:n,height:a}=new yn(t.width,t.height);if(n<=0||a<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:a})}`);if(Array.isArray(e))return e.map(r=>BA(r,{width:n,height:a}));if(Oo(e)){let r=e.detection.forSize(n,a),s=e.unshiftedLandmarks.forSize(r.box.width,r.box.height);return hp(Fo(e,r),s)}return vr(e)?Fo(e,e.detection.forSize(n,a)):e instanceof ra||e instanceof bt?e.forSize(n,a):e}var Tpe=oA;return W$(Cpe);})();
|
|
/**
|
|
* @license
|
|
* Copyright 2017 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
*
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2019 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google Inc. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC
|
|
*
|
|
* Use of this source code is governed by an MIT-style
|
|
* license that can be found in the LICENSE file or at
|
|
* https://opensource.org/licenses/MIT.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2020 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the License);
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an AS IS BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2021 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* https://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2022 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2022 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the 'License');
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an 'AS IS' BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/**
|
|
* @license
|
|
* Copyright 2018 Google LLC. All Rights Reserved.
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
*
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
*
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
* =============================================================================
|
|
*/
|
|
/** @license See the LICENSE file. */
|