diff --git a/README.md b/README.md index efe9efe..67a191a 100644 --- a/README.md +++ b/README.md @@ -2,8 +2,8 @@ ## Note -This is updated **face-api.js** with latest available tensorflow/js as original face-api.js is not compatible with **tfjs 2.0+**. -If original repository is updated, this one will become obsolete. +This is updated **face-api.js** with latest available TensorFlow/JS as the original face-api.js is not compatible with **tfjs 2.0+**. +Currently based on **TFJS-Core 2.4.0**. Forked from **face-api.js** version **0.22.2** released on March 22nd, 2020 @@ -14,13 +14,15 @@ Forked from **face-api.js** version **0.22.2** released on March 22nd, 2020 - Removed tests, docs, examples - Updated all package dependencies -- Modified to make compatible with TensorFlow/JS 2.0+ -- Trivial code changes for updated TypeScript type checking +- Compatible with TensorFlow/JS 2.0+ +- Updated type casting for TypeScript type checking - Removed unnecesary package dependencies (karma, jasmine, etc.) -- Updated Typescript build process to target ES2018 instead of dual ES5/ES6 -- Changed browser bundle process to use ESBuild instead of Rollup -- Updated TensorFlow/JS dependencies since backends were removed from @tensorflow/tfjs-core +- Typescript build process now targets ES2017 and instead of dual ES5/ES6 +- Browser bundle process uses ESBuild instead of Rollup +- New TensorFlow/JS dependencies since backends were removed from @tensorflow/tfjs-core - Updated mobileNetv1 model due to batchNorm() dependency +- Fully tree shakable when imported as an ESM module +- Added `version` class that returns JSON objecgt with version of FaceAPI as well as linked TFJS - Removed following models as they are either obsolete or non-functional with tfjs 2.0+ - mtcnn: Mostly obsolete - tinyYolov2: Non-functional since weights are missing diff --git a/build/package.json b/build/package.json index 6cb11e4..5d9c00d 100644 --- a/build/package.json +++ b/build/package.json @@ -1,6 +1,6 @@ { "name": "@vladmandic/face-api", - "version": "0.5.1", + "version": "0.5.2", "description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS", "main": "dist/face-api.node.js", "browser": "dist/face-api.esm.js", @@ -11,7 +11,7 @@ "type": "module", "scripts": { "compile": "tsc", - "clean": "rimraf build dist", + "clean": "rimraf build/ dist/", "cjs": "esbuild --bundle --outfile=./dist/face-api.cjs.js --target=es2017 --platform=browser --format=cjs --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js", "node": "esbuild --bundle --outfile=./dist/face-api.node.js --target=es2017 --platform=node --format=esm --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js", "esm": "esbuild --bundle --outfile=./dist/face-api.esm.js --target=es2017 --platform=browser --format=esm --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js", diff --git a/dist/face-api.cjs.js b/dist/face-api.cjs.js index 84c3df9..06a3480 100644 --- a/dist/face-api.cjs.js +++ b/dist/face-api.cjs.js @@ -24061,7 +24061,7 @@ function resizeResults(results, dimensions) { } // build/package.json -var version2 = "0.5.1"; +var version2 = "0.5.2"; // build/src/index.js __export(exports, { diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 6d12b06..7429a85 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -24061,7 +24061,7 @@ function resizeResults(results, dimensions) { } // build/package.json -var version2 = "0.5.1"; +var version2 = "0.5.2"; // build/src/index.js const node = typeof process !== "undefined" ? process.version : false; diff --git a/dist/face-api.iife.js b/dist/face-api.iife.js index 7206b9a..3691736 100644 --- a/dist/face-api.iife.js +++ b/dist/face-api.iife.js @@ -24192,7 +24192,7 @@ Expected: ${expectedFlat}.`); } // build/package.json - var version2 = "0.5.1"; + var version2 = "0.5.2"; return require_src(); })(); //# sourceMappingURL=face-api.iife.js.map diff --git a/dist/face-api.min.js b/dist/face-api.min.js index e51f88e..5c80966 100644 --- a/dist/face-api.min.js +++ b/dist/face-api.min.js @@ -14,7 +14,7 @@ Expected: ${i}.`)}}function lx(e,t){e().then(()=>t.fail(),()=>t())}function hx(e ${i} and ${t} for depthToSpace with input shape ${r.shape}`),f(a%(t*t)===0,()=>`Dimension size must be evenly divisible by ${t*t} but is ${a} for depthToSpace with input shape ${r.shape}`);const s=l=>l.depthToSpace(r,t,n),c={x:r},p={blockSize:t,dataFormat:n};return b.runKernelFunc(s,c,null,jc,p)}const fd=m({depthToSpace_:_y});function Cy(e,t,n,r,o="NHWC",i=[1,1],a){const s=u(e,"x","depthwiseConv2d"),c=u(t,"filter","depthwiseConv2d");let p=s,l=!1;s.rank===3&&(l=!0,p=y(s,[1,s.shape[0],s.shape[1],s.shape[2]])),f(p.rank===4,()=>`Error in depthwiseConv2d: input must be rank 4, but got rank ${p.rank}.`),f(c.rank===4,()=>`Error in depthwiseConv2d: filter must be rank 4, but got rank ${c.rank}.`),f(p.shape[3]===c.shape[2],()=>`Error in depthwiseConv2d: number of input channels (${p.shape[3]}) must match the inChannels dimension in filter ${c.shape[2]}.`),a!=null&&f(X(r),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`);const h=(w,L)=>{i==null&&(i=[1,1]),f(le(n,i),()=>`Error in depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`);const S=je(p.shape,c.shape,n,i,r,a,!0),I=w.depthwiseConv2D(p,c,S);return L([p,c]),I},d={x:p,filter:c},g={strides:n,pad:r,dataFormat:o,dilations:i,dimRoundingMode:a},x=b.runKernelFunc(h,d,null,Uo,g);return l?y(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const wn=m({depthwiseConv2d_:Cy});function Ey(e){const t=u(e,"x","diag"),n=o=>{const i=y(t,[t.size]),a=o.diag(i),s=[...e.shape,...e.shape];return y(a,s)},r={x:t};return b.runKernelFunc(n,r,null,qc)}const gd=m({diag_:Ey});function Oy(e,t,n,r,o=[1,1],i="NHWC"){const a=u(e,"x","dilation2d"),s=u(t,"filter","dilation2d");f(a.rank===3||a.rank===4,()=>`Error in dilation2d: input must be rank 3 or 4, but got rank ${a.rank}.`),f(s.rank===3,()=>`Error in dilation2d: filter must be rank 3, but got rank ${s.rank}.`),f(i==="NHWC",()=>`Error in dilation2d: Only NHWC is currently supported, but got dataFormat of ${i}`);let c=a,p=!1;a.rank===3&&(c=y(a,[1,a.shape[0],a.shape[1],a.shape[2]]),p=!0);const l={x:c,filter:s},h={strides:n,pad:r,dilations:o},d=b.runKernel(Wo,l,h);return p?y(d,[d.shape[1],d.shape[2],d.shape[3]]):d}const bd=m({dilation2d_:Oy});function ky(e,t){const n=e.length,r=[];for(let o=0;o1&&a===1&&r.unshift(i)}return r}function ae(e,t){const n=[];for(let r=0;r1)&&n.unshift(i)}return n}function q(e,t){const n=[],r=Math.max(e.length,t.length);for(let o=0;oa.equal(n,r),i={a:n,b:r};return b.runKernelFunc(o,i,null,Vc)}const xn=m({equal_:Dy});function Fy(e,t,n){const r=u(t,"a","where"),o=u(n,"b","where"),i=u(e,"condition","where","bool"),a=q(r.shape,o.shape),s=us(r,a),c=us(o,a);i.rank===1&&f(i.shape[0]===r.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),i.rank!==1&&G(i.shape,c.shape,"Error in where: ");const p=(h,d)=>{const g=h.select(i,s,c);return d([i]),g},l={condition:i,t:s,e:c};return b.runKernelFunc(p,l,null,Ai)}const De=m({where_:Fy});function My(e){const t=u(e,"x","zerosLike"),n={x:t};return b.runKernelFunc(r=>r.zerosLike(t),n,null,Yi)}const B=m({zerosLike_:My});function Uy(e,t){let n=u(e,"a","div"),r=u(t,"b","div");[n,r]=Y(n,r);const o=D(n,r),i=B(o),a=xn(r,i);return De(a,i,o)}const wd=m({divNoNan_:Uy});function Wy(e,t){const n=u(e,"t1","dot"),r=u(t,"t2","dot");f((n.rank===1||n.rank===2)&&(r.rank===1||r.rank===2),()=>`Error in dot: inputs must all be rank 1 or 2, but got ranks ${n.rank} and ${r.rank}.`);const o=n.rank===1?n.size:n.shape[1],i=r.rank===1?r.size:r.shape[0];if(f(o===i,()=>`Error in dot: inner dimensions of inputs must match, but got ${o} and ${i}.`),n.rank===1&&r.rank===1){const a=y(n,[1,-1]),s=y(r,[-1,1]),c=V(a,s);return y(c,[])}else if(n.rank===1&&r.rank===2){const a=y(n,[1,-1]),s=y(r,[r.shape[0],r.shape[1]]),c=V(a,s);return y(c,[c.size])}else if(n.rank===2&&r.rank===1){const a=y(r,[-1,1]),s=V(n,a);return y(s,[s.size])}else{const a=y(r,[r.shape[0],r.shape[1]]),s=V(n,a);return s}}const xd=m({dot_:Wy});function By(e){const t=u(e,"x","elu"),n=(o,i)=>{const a=o.elu(t);return i([a]),a},r={x:t};return b.runKernelFunc(n,r,null,$o)}const La=m({elu_:By});function $y(e){let t=u(e,"x","erf");f(t.dtype==="int32"||t.dtype==="float32",()=>"Input dtype must be `int32` or `float32`."),t.dtype==="int32"&&(t=_(t,"float32"));const n={x:t};return b.runKernelFunc((r,o)=>{const i=r.erf(t);return o([t]),i},n,null,jo)}const yd=m({erf_:$y});function jy(e){const t=u(e,"x","exp"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.exp(t);return o([i]),i},n,null,Go)}const Te=m({exp_:jy});function Gy(e,t=0){const n=null,r=u(e,"x","expandDims",n);f(t<=r.rank,()=>"Axis must be <= rank of the tensor");const o=r.shape.slice();return t<0&&(f(-(r.rank+1)<=t,()=>`Axis must be in the interval [${-(r.rank+1)}, ${r.rank}]`),t=r.rank+t+1),o.splice(t,0,1),y(r,o)}const nt=m({expandDims_:Gy});function Py(e){const t=u(e,"x","expm1"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.expm1(t);return o([t]),i},n,null,Po)}const Ld=m({expm1_:Py});function qy(e,t){const n=null,r=u(e,"x","tile",n);f(r.rank===t.length,()=>`Error in transpose: rank of input ${r.rank} must match length of reps ${t}.`);const o=(c,p)=>{const l=c.tile(r,t);return p([r]),l},i=[r],a={x:r},s={reps:t};return b.runKernelFunc(o,a,null,Pi,s,i)}const Gt=m({tile_:qy});function zy(e,t,n,r="float32"){t==null&&(t=e);const o=Ee([e,t],r),i=e<=t?e:t;for(let s=0;so.fill(e,t,n),{},null,Jc,r)}function Hy(e){const t=u(e,"x","floor"),n={x:t};return b.runKernelFunc(r=>r.floor(t),n,null,qo)}const Er=m({floor_:Hy});const Sa=30;function Yy(e){return e<=Sa?e:gr(e,Math.floor(Math.sqrt(e)))}const vd={};_e(vd,{collectGatherOpShapeInfo:()=>bl,computeOutShape:()=>Ky,segOpComputeOptimalWindowSize:()=>Vy});function Vy(e,t){let n=!1,r;for(e<=Sa?(r=e,n=!0):r=gr(e,Math.floor(Math.sqrt(e)));!n;)r>t||r===e?n=!0:r=gr(e,r+1);return r}function Ky(e,t,n){const r=[],o=e.length;for(let i=0;i{const l=H(n,r.shape)[0],h=bl(r,o,l),d=c.gather(r,y(o,[o.size]),l);return p([r,o]),y(d,h.outputShape)};return b.runKernelFunc(s,i,null,Yo,a)}const Or=m({gather_:Jy});function Xy(e,t){let n=u(e,"a","greater"),r=u(t,"b","greater");[n,r]=Y(n,r),q(n.shape,r.shape);const o=a=>a.greater(n,r),i={a:n,b:r};return b.runKernelFunc(o,i,null,Qc)}const rt=m({greater_:Xy});function Zy(e,t){let n=u(e,"a","greaterEqual"),r=u(t,"b","greaterEqual");[n,r]=Y(n,r),q(n.shape,r.shape);const o=(a,s)=>{const c=a.greaterEqual(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,Vo)}const gt=m({greaterEqual_:Zy});function Qy(e){const t=u(e,"input","imag"),n=o=>o.imag(t),r={input:t};return b.runKernelFunc(n,r,null,tp)}const yn=m({imag_:Qy});function eL(e){const t=u(e,"x","isFinite"),n={x:t};return b.runKernelFunc(r=>r.isFinite(t),n,null,Jo)}const Sd=m({isFinite_:eL});function tL(e){const t=u(e,"x","isInf"),n={x:t};return b.runKernelFunc(r=>r.isInf(t),n,null,Xo)}const Id=m({isInf_:tL});function nL(e){const t=u(e,"x","isNaN"),n={x:t};return b.runKernelFunc(r=>r.isNaN(t),n,null,Zo)}const Td=m({isNaN_:nL});function rL(e,t){let n=u(e,"a","maximum"),r=u(t,"b","maximum");[n,r]=Y(n,r),n.dtype==="bool"&&(n=_(n,"int32"),r=_(r,"int32")),q(n.shape,r.shape);const o=(a,s)=>{const c=a.maximum(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,oi)}const Pt=m({maximum_:rL});function C(e,t){if((Ne(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"&&Ne(e)&&!(e instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const n=[],r=[];return Pe(e,n,r,t)}function oL(e,t=.2){const n=u(e,"x","leakyRelu");return Pt(v(C(t),n),n)}const Ad=m({leakyRelu_:oL});function iL(e,t){let n=u(e,"a","less"),r=u(t,"b","less");[n,r]=Y(n,r),q(n.shape,r.shape);const o=a=>a.less(n,r),i={a:n,b:r};return b.runKernelFunc(o,i,null,np)}const kr=m({less_:iL});function sL(e,t){let n=u(e,"a","lessEqual"),r=u(t,"b","lessEqual");[n,r]=Y(n,r),q(n.shape,r.shape);const o=(a,s)=>{const c=a.lessEqual(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,rp)}const bt=m({lessEqual_:sL});function Nd(e,t,n){if(n<=0)throw new Error("The number of values should be positive.");const r={start:e,stop:t,num:n};return b.runKernelFunc(o=>o.linspace(e,t,n),{},null,op,r)}function aL(e,t=5,n=1,r=1,o=.5){const i=u(e,"x","localResponseNormalization");f(i.rank===4||i.rank===3,()=>`Error in localResponseNormalization: x must be rank 3 or 4 but got rank ${i.rank}.`),f(X(t),()=>`Error in localResponseNormalization: depthRadius must be an integer but got depthRadius ${t}.`);let a=i,s=!1;i.rank===3&&(s=!0,a=y(i,[1,i.shape[0],i.shape[1],i.shape[2]]));const c=(d,g)=>{const x=d.localResponseNormalization4D(a,t,n,r,o);return g([a,x]),x},p={x:a},l={depthRadius:t,bias:n,alpha:r,beta:o},h=b.runKernelFunc(c,p,null,ni,l);return s?y(h,[h.shape[1],h.shape[2],h.shape[3]]):h}const Rd=m({localResponseNormalization_:aL});function cL(e){const t=u(e,"x","log"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.log(t);return o([t]),i},n,null,Qo)}const Rt=m({log_:cL});function pL(e){const t=u(e,"x","log1p"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.log1p(t);return o([t]),i},n,null,ei)}const Ia=m({log1p_:pL});function lL(e){return f(Mt(e),()=>"The f passed in grad(f) must be a function"),(t,n)=>{const r=u(t,"x","tf.grad",null),o=n!=null?u(n,"dy","tf.grad"):null;return b.tidy(()=>{const{value:i,grads:a}=b.gradients(()=>e(r),[r],o);return o!=null&&G(i.shape,o.shape,"The shape of dy passed in grad(f)(x, dy) must match the shape returned by f(x)"),Ta(a),a[0]})}}function hL(e){return f(Mt(e),()=>"The f passed in grads(f) must be a function"),(t,n)=>{f(Array.isArray(t),()=>"The args passed in grads(f)(args) must be an array of `Tensor`s or `TensorLike`s");const r=Jt(t,"args","tf.grads",null),o=n!=null?u(n,"dy","tf.grads"):null;return b.tidy(()=>{const{value:i,grads:a}=b.gradients(()=>e(...r),r,o);return o!=null&&G(i.shape,o.shape,"The shape of dy passed in grads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Ta(a),a})}}function uL(e){return f(Mt(e),()=>"The f passed in valueAndGrad(f) must be a function"),(t,n)=>{f(t instanceof te,()=>"The x passed in valueAndGrad(f)(x) must be a tensor"),f(n==null||n instanceof te,()=>"The dy passed in valueAndGrad(f)(x, dy) must be a tensor");const{grads:r,value:o}=b.gradients(()=>e(t),[t],n);return Ta(r),{grad:r[0],value:o}}}function dL(e){return f(Mt(e),()=>"The f passed in valueAndGrads(f) must be a function"),(t,n)=>{f(Array.isArray(t)&&t.every(o=>o instanceof te),()=>"The args passed in valueAndGrads(f)(args) must be array of tensors"),f(n==null||n instanceof te,()=>"The dy passed in valueAndGrads(f)(args, dy) must be a tensor");const r=b.gradients(()=>e(...t),t,n);return n!=null&&G(r.value.shape,n.shape,"The shape of dy passed in valueAndGrads(f)([x1,...], dy) must match the shape returned by f([x1,...])"),Ta(r.grads),r}}function wl(e,t){f(Mt(e),()=>"The f passed in variableGrads(f) must be a function"),f(t==null||Array.isArray(t)&&t.every(p=>p instanceof $t),()=>"The varList passed in variableGrads(f, varList) must be an array of variables");const n=t!=null;if(!n){t=[];for(const p in b.registeredVariables)t.push(b.registeredVariables[p])}const r=n?t.filter(p=>!p.trainable):null,o=t.length;t=t.filter(p=>p.trainable),f(t.length>0,()=>`variableGrads() expects at least one of the input variables to be trainable, but none of the ${o} variables is trainable.`);const i=!0,{value:a,grads:s}=b.gradients(e,t,null,i);f(s.some(p=>p!=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()."),f(a.rank===0,()=>`The f passed in variableGrads(f) must return a scalar, but it returned a rank-${a.rank} tensor`);const c={};return t.forEach((p,l)=>{s[l]!=null&&(c[p.name]=s[l])}),r!=null&&r.forEach(p=>c[p.name]=null),{value:a,grads:c}}function ze(e){return b.customGrad(e)}function Ta(e){const t=e.filter(n=>n==null).length;if(t>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 mL(e){const t=u(e,"x","neg"),n={x:t};return b.runKernelFunc(r=>r.neg(t),n,null,hi)}const re=m({neg_:mL});function fL(e){const t=u(e,"x","softplus"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.softplus(t);return o([t]),i},n,null,ki)}const Aa=m({softplus_:fL});function gL(e){const t=u(e,"x","logSigmoid"),n=ze(r=>{const o=re(Aa(re(r))),i=a=>{const s=v(a,ft(re(r)));return s};return{value:o,gradFunc:i}});return n(t)}const _d=m({logSigmoid_:gL});function bL(e,t=null,n=!1){const r=u(e,"x","max"),o=(s,c)=>{const p=H(t,r.shape);let l=p;const h=fe(l,r.rank);let d=r;h!=null&&(d=K(r,h),l=ke(l.length,d.rank));const g=s.max(d,l);h!=null&&d.dispose();let x=g;if(n){const w=we(x.shape,H(t,r.shape));x=y(x,w),g.dispose()}return c([r,x]),x},i={x:r},a={reductionIndices:t,keepDims:n};return b.runKernelFunc(o,i,null,ri,a)}const qt=m({max_:bL});function wL(e,t){let n=u(e,"a","sub"),r=u(t,"b","sub");[n,r]=Y(n,r);const o=(a,s)=>{const c=a.subtract(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,$i)}const k=m({sub_:wL});function xL(e,t=null,n=!1){let r=u(e,"x","sum");r.dtype==="bool"&&(r=_(r,"int32"));const o=(s,c)=>{c([r]);const p=H(t,r.shape),l=fe(p,r.rank);let h=p,d=r;l!=null&&(d=K(r,l),h=ke(h.length,r.rank));let g=s.sum(d,h);if(n){const x=we(g.shape,p);g=y(g,x)}return g},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,Fi,a)}const W=m({sum_:xL});function yL(e,t=-1){const n=u(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}`);const r=(a,s)=>{const c=!0,p=qt(e,t,!0),l=k(e,p),h=k(_(l,"float32"),Rt(W(Te(l),t,c)));return s([h]),h},o={logits:n},i={axis:t};return b.runKernelFunc(r,o,null,ti,i)}const Cd=m({logSoftmax_:yL});function LL(e,t=null,n=!1){const r=u(e,"x","logSumExp"),o=H(t,r.shape),i=qt(r,o,!0),a=k(r,i),s=Te(a),c=W(s,o),p=Rt(c),l=N(y(i,p.shape),p);if(n){const h=we(l.shape,o);return y(l,h)}return l}const Na=m({logSumExp_:LL});function vL(e,t){const n=u(e,"a","logicalAnd","bool"),r=u(t,"b","logicalAnd","bool");q(n.shape,r.shape);const o={a:n,b:r};return b.runKernelFunc(i=>i.logicalAnd(n,r),o,null,ip)}const _t=m({logicalAnd_:vL});function SL(e){const t=u(e,"x","logicalNot","bool"),n={x:t};return b.runKernelFunc(r=>r.logicalNot(t),n,null,sp)}const Dr=m({logicalNot_:SL});function IL(e,t){const n=u(e,"a","logicalOr","bool"),r=u(t,"b","logicalOr","bool");q(n.shape,r.shape);const o={a:n,b:r};return b.runKernelFunc(i=>i.logicalOr(n,r),o,null,ap)}const Ra=m({logicalOr_:IL});function TL(e,t){const n=u(e,"a","logicalXor","bool"),r=u(t,"b","logicalXor","bool");return q(n.shape,r.shape),_t(Ra(e,t),Dr(_t(e,t)))}const Ed=m({logicalXor_:TL});function AL(e,t,n,r,o){const i=u(e,"x","maxPool"),a=1;let s=i,c=!1;i.rank===3&&(c=!0,s=y(i,[1,i.shape[0],i.shape[1],i.shape[2]])),f(s.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${s.rank}.`),f(le(n,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),o!=null&&f(X(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${o} but got pad ${r}.`);const p=(g,x)=>{const w=Nt(s.shape,t,n,1,r,o);let L;return w.filterWidth===1&&w.filterHeight===1&&Se(w.inShape,w.outShape)?L=s.clone():L=g.maxPool(s,w),x([s,L]),L},l={x:s},h={filterSize:t,strides:n,pad:r,dimRoundingMode:o},d=b.runKernelFunc(p,l,null,ii,h);return c?y(d,[d.shape[1],d.shape[2],d.shape[3]]):d}const Re=m({maxPool_:AL});function NL(e,t=[1,1,1],n,r,o,i="NDHWC",a){a==null?a=[1,1,1]:ye("dilations is deprecated, this field will be gone in v3.0.0.");const s=u(e,"x","maxPool3d");let c=s,p=!1;s.rank===4&&(p=!0,c=y(s,[1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]])),f(c.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${c.rank}.`),f(i==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${i}`),f(le(n,a),()=>`Error in maxPool3d: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),o!=null&&f(X(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${o} but got pad ${r}.`);const l=(x,w)=>{a==null&&(a=[1,1,1]);const L=Xt(c.shape,t,n,a,r,o,i),S=x.maxPool3d(c,L);return w([c,S]),S},h={x:c},d={filterSize:t,strides:n,pad:r,dimRoundingMode:o,dataFormat:i,dilations:a},g=b.runKernelFunc(l,h,null,si,d);return p?y(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}const Od=m({maxPool3d_:NL});function RL(e,t,n,r,o=!1){const i=u(e,"x","maxPoolWithArgmax"),a={x:i},s={filterSize:t,strides:n,pad:r,includeBatchInIndex:o},c=b.runKernel(hp,a,s);return{result:c[0],indexes:c[1]}}const kd=m({maxPoolWithArgmax_:RL});function Ce(e,t="float32"){if(t==="complex64"){const r=Ce(e,"float32"),o=Ce(e,"float32");return Je(r,o)}const n=Wt(ee(e),t);return b.makeTensor(n,e,t)}function Ct(e,t="float32"){if(t==="complex64"){const r=Ct(e,"float32"),o=Ce(e,"float32");return Je(r,o)}const n=Zi(ee(e),t);return b.makeTensor(n,e,t)}function _L(e,t=null,n=!1){const r=u(e,"x","mean"),o=H(t,r.shape),i=ul(r.shape,o),a=i[1],s=ee(a),c=ze(p=>{const l=C(s),h=l.dtype===p.dtype?p:_(p,l.dtype),d=D(h,l),g=W(d,t,n),x=w=>{const L=p.shape.slice();o.forEach(R=>{L[R]=1});const S=y(w,L),I=D(v(S,Ct(p.shape,"float32")),s);return I};return{value:g,gradFunc:x}});return c(r)}const Un=m({mean_:_L});function CL(e,t=null,n=!1){const r=u(e,"x","min"),o=(s,c)=>{const p=H(t,r.shape);let l=p;const h=fe(l,r.rank);let d=r;h!=null&&(d=K(r,h),l=ke(l.length,r.rank));const g=s.min(d,l);h!=null&&d.dispose();let x=g;if(n){const w=we(x.shape,p);x=y(g,w),g.dispose()}return c([r,x]),x},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,ai,a)}const ds=m({min_:CL});function EL(e,t){let n=u(e,"a","minimum"),r=u(t,"b","minimum");[n,r]=Y(n,r),n.dtype==="bool"&&(n=_(n,"int32"),r=_(r,"int32")),q(n.shape,r.shape);const o=(a,s)=>{const c=a.minimum(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,ci)}const Fr=m({minimum_:EL});function OL(e,t){let n=u(e,"a","mod"),r=u(t,"b","mod");[n,r]=Y(n,r);const o=(a,s)=>{const c=a.mod(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,pi)}const _a=m({mod_:OL});function kL(e){const t=u(e,"x","square"),n={},r=[t],o=[];return b.runKernelFunc((i,a)=>(a([t]),i.square(t)),{x:t},null,"Square",n,r,o)}const z=m({square_:kL});function DL(e,t=null,n=!1){e=u(e,"x","moments");const r=H(t,e.shape),o=Un(e,r,n);let i=o.shape;n||(i=we(o.shape,r));const a=z(k(_(e,"float32"),y(o,i))),s=Un(a,r,n);return{mean:o,variance:s}}const Dd=m({moments_:DL});function FL(e,t,n,r){const o=u(t,"data","multiRNNCell"),i=Jt(n,"c","multiRNNCell"),a=Jt(r,"h","multiRNNCell");let s=o;const c=[];for(let h=0;h2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);n=n||Math.random();const s=a===1?y(o,[1,-1]):o,c=b.runKernelFunc(p=>p.multinomial(s,r,t,n),{logits2D:s});return a===1?y(c,[c.size]):c}const Md=m({multinomial_:ML});function UL(e,t){let n=u(e,"a","notEqual"),r=u(t,"b","notEqual");[n,r]=Y(n,r),q(n.shape,r.shape);const o=a=>a.notEqual(n,r),i={a:n,b:r};return b.runKernelFunc(o,i,null,up)}const Mr=m({notEqual_:UL});function WL(e){const t=u(e,"input","real"),n=o=>o.real(t),r={input:t};return b.runKernelFunc(n,r,null,wp)}const Zt=m({real_:WL});function BL(e){const t=u(e,"x","onesLike"),n=(o,i)=>{if(t.dtype==="complex64"){const a=xl(Zt(t)),s=B(yn(t));return Je(a,s)}return o.onesLike(t)},r={x:t};return b.runKernelFunc(n,r,null,ui)}const xl=m({onesLike_:BL});function $L(e,t){const n=u(e,"v1","outerProduct"),r=u(t,"v2","outerProduct");f(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);const o=y(n,[-1,1]),i=y(r,[1,-1]);return V(o,i)}const Ud=m({outerProduct_:$L});function jL(e,t,n=0){const r=u(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const o=(s,c)=>(c([r]),s.pad(r,t,n)),i={paddings:t,constantValue:n},a={x:r};return b.runKernelFunc(o,a,null,mi,i)}const He=m({pad_:jL});function GL(e,t,n=0){return f(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),He(e,[t],n)}const Wd=m({pad1d_:GL});function PL(e,t,n=0){return f(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),He(e,t,n)}const Bd=m({pad2d_:PL});function qL(e,t,n=0){return f(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."),He(e,t,n)}const $d=m({pad3d_:qL});function zL(e,t,n=0){return f(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."),He(e,t,n)}const jd=m({pad4d_:zL});function HL(e,t,n){const r=u(e,"x","spaceToBatchND");f(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),f(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),f(r.shape.reduce((s,c,p)=>p>0&&p<=t.length?s&&(c+n[p-1][0]+n[p-1][1])%t[p-1]===0:s,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);const o=s=>s.spaceToBatchND(r,t,n),i={x:r},a={blockShape:t,paddings:n};return b.runKernelFunc(o,i,null,Mi,a)}const Ur=m({spaceToBatchND_:HL});function KL(e,t,n,r,o,i){o==null&&(o=[1,1]),i==null&&(i=1),r===0&&(r="valid");const a=u(e,"x","maxPool");let s=a,c=!1;a.rank===3&&(c=!0,s=y(a,[1,a.shape[0],a.shape[1],a.shape[2]])),f(le(i,o),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${i} and dilations '${o}'`);const p=Nt(s.shape,t,i,o,r),l=[p.dilationHeight,p.dilationWidth];let h;r==="same"?h=VL([p.filterHeight,p.filterWidth],l):h=[[0,0],[0,0]];const d=l[0]===1&&l[1]===1,[g,x]=YL([p.inHeight,p.inWidth],l,h),w=d?r:"valid",L=d?s:Ur(s,l,g),S=n==="avg"?()=>mt(L,t,i,w):()=>Re(L,t,i,w),I=S(),R=d?I:Nr(I,l,x);return c?y(R,[R.shape[1],R.shape[2],R.shape[3]]):R}function YL(e,t,n){const r=n.map(l=>l[0]),o=n.map(l=>l[1]),i=e.concat(r,o),a=t.map((l,h)=>(l-i[h]%l)%l),s=o.map((l,h)=>l+a[h]),c=t.map((l,h)=>[r[h],s[h]]),p=t.map((l,h)=>[0,a[h]]);return[c,p]}function VL(e,t){const n=e.map((a,s)=>a+(a-1)*(t[s]-1)),r=n.map(a=>a-1),o=r.map(a=>Math.floor(a/2)),i=r.map((a,s)=>a-o[s]);return r.map((a,s)=>[o[s],i[s]])}const Gd=m({pool_:KL});function JL(e,t){let n=u(e,"base","pow"),r=u(t,"exp","pow");[n,r]=Y(n,r);const o={a:n,b:r},i=(a,s)=>{const c=a.pow(n,r);return s([n,r,c]),c};return b.runKernelFunc(i,o,null,fi)}const Qe=m({pow_:JL});function XL(e,t){const n=u(e,"x","prelu"),r=u(t,"alpha","prelu"),o=(a,s)=>{const c=a.prelu(n,r);return s([n,r]),c},i={x:n,alpha:r};return b.runKernelFunc(o,i,null,gi)}const Ca=m({prelu_:XL});function ZL(e,t=null,n=!1){let r=u(e,"x","prod");const o=s=>{r.dtype==="bool"&&(r=_(r,"int32"));const c=H(t,r.shape),p=fe(c,r.rank);let l=c,h=r;p!=null&&(h=K(r,p),l=ke(l.length,r.rank));let d=s.prod(h,l);if(n){const g=we(d.shape,c);d=y(d,g)}return d},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,gp,a)}const Pd=m({prod_:ZL});function QL(e,t,n){const r=ee(e);let o=null;if(n==null||n==="float32")o=new Float32Array(r);else if(n==="int32")o=new Int32Array(r);else if(n==="bool")o=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let i=0;i=1||i===0);const a=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*r*a,t=this.mean+this.stdDev*o*a,(!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}}class zd{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;const o=r||Math.random();this.randu=Ea.alea(o.toString()),this.randn=new ms(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,o,i;for(;;){do r=this.randn.nextValue(),i=1+this.c*r;while(i<=0);if(i*=i*i,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-i+Math.log(i)),o=this.randu(),othis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Ea.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}}function ev(e,t,n=1,r="float32",o){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);const i=new zd(t,n,r,o),a=Ee(e,r);for(let s=0;s{const a=e===t,s=e1;if(a||s||c)return Ce([0],r);const p=Math.abs(Math.ceil((t-e)/n)),l=Wt(p,r);t{const i=r.reciprocal(t);return o([t]),i},n,null,bi)}const Kd=m({reciprocal_:rv});function ov(e){const t=u(e,"x","relu"),n=(o,i)=>(i([t]),t.dtype==="bool"?_(t,"int32"):o.relu(t)),r={x:t};return b.runKernelFunc(n,r,null,wi)}const ie=m({relu_:ov});function iv(e){const t=u(e,"x","relu6"),n=(o,i)=>(i([t]),t.dtype==="bool"?_(t,"int32"):o.relu6(t)),r={x:t};return b.runKernelFunc(n,r,null,vi)}const ka=m({relu6_:iv});function sv(e,t){const n=u(e,"x","reverse"),r=a=>{const s=H(t,n.shape);if(n.rank===0)return dt(n);const c=a.reverse(n,s);return y(c,n.shape)},o={x:n},i={dims:t};return b.runKernelFunc(r,o,null,Si,i)}const et=m({reverse_:sv});function av(e){const t=u(e,"x","reverse");return f(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),et(t,0)}const Jd=m({reverse1d_:av});function cv(e,t){const n=u(e,"x","reverse");return f(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),et(n,t)}const Xd=m({reverse2d_:cv});function pv(e,t){const n=u(e,"x","reverse");return f(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),et(n,t)}const Zd=m({reverse3d_:pv});function lv(e,t){const n=u(e,"x","reverse");return f(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),et(n,t)}const Qd=m({reverse4d_:lv});function hv(e){const t=u(e,"x","round"),n={x:t};return b.runKernelFunc(r=>r.round(t),n,null,Ii)}const em=m({round_:hv});function uv(e){const t=u(e,"x","rsqrt"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.rsqrt(t);return o([t]),i},n,null,Ti)}const Da=m({rsqrt_:uv});function dv(e){const t=u(e,"x","selu"),n=(o,i)=>{const a=o.selu(t);return i([t]),a},r={x:t};return b.runKernelFunc(n,r,null,Ni)}const tm=m({selu_:dv});function mv(e,t,n,r,o,i=[1,1],a="NHWC"){const s=u(e,"x","separableConv2d"),c=u(t,"depthwiseFilter","separableConv2d"),p=u(n,"pointwiseFilter","separableConv2d");let l=s,h=!1;if(s.rank===3&&(h=!0,l=y(s,[1,s.shape[0],s.shape[1],s.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");f(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),f(c.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${c.rank}.`),f(p.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${c.rank}.`),f(p.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${p.shape[0]}.`),f(p.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${p.shape[1]}.`);const d=c.shape[2],g=c.shape[3];f(p.shape[2]===d*g,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*g}, but got ${p.shape[2]}.`);const x=wn(l,c,r,o,a,i),w=1,L=ve(x,p,w,"valid",a);return h?y(L,[L.shape[1],L.shape[2],L.shape[3]]):L}const Wr=m({separableConv2d_:mv});async function fv(e,t){const n=u(e,"x","setdiff1d"),r=u(t,"y","setdiff1d");f(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),f(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),f(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);const o=await n.data(),i=await r.data(),a=new Set(i);let s=0;for(let l=0;lr.sign(t),n,null,Ei)}const rm=m({sign_:gv});function bv(e){const t=u(e,"x","sin"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sin(t);return o([t]),i},n,null,_i)}const Fa=m({sin_:bv});function wv(e){const t=u(e,"x","sinh"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sinh(t);return o([t]),i},n,null,Ci)}const Ma=m({sinh_:wv});function xv(e,t,n){const r=u(e,"x","slice1d");return f(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),P(r,[t],[n])}const om=m({slice1d_:xv});function yv(e,t,n){const r=u(e,"x","slice2d");return f(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const im=m({slice2d_:yv});function Lv(e,t,n){const r=u(e,"x","slice3d");return f(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const Ua=m({slice3d_:Lv});function vv(e,t,n){const r=u(e,"x","slice4d");return f(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const sm=m({slice4d_:vv});function Sv(e,t=-1){const n=u(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}`);const r={logits:n},o={dim:t};return b.runKernelFunc((i,a)=>{const s=i.softmax(n,t);return a([s]),s},r,null,Wi,o)}const Ln=m({softmax_:Sv});function Iv(e){f(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);const t={input:e};return b.runKernelFunc(n=>{const r=e.shape[e.shape.length-1],o=e.size/r,i=e.as2D(o,r),a=n.fft(i);return a.reshape(e.shape)},t,null,Kc)}const Br=m({fft_:Iv});function Tv(e){f(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);const t={input:e};return b.runKernelFunc(n=>{const r=e.shape[e.shape.length-1],o=e.size/r,i=y(e,[o,r]),a=n.ifft(i);return y(a,e.shape)},t,null,ep)}const Wn=m({ifft_:Tv});function Av(e){const t=e.shape[e.shape.length-1],n=e.size/t;let r;if(t<=2){const o=y(e,[n,t]);r=Wn(o)}else{const o=[n,2*(t-1)],i=y(Zt(e),[n,t]),a=y(yn(e),[n,t]),s=et(P(i,[0,1],[n,t-2]),1),c=v(et(P(a,[0,1],[n,t-2]),1),C(-1)),p=Z([i,s],1),l=Z([a,c],1),h=y(Je(p,l),[o[0],o[1]]);r=Wn(h)}if(r=Zt(r),e.rank===3&&e.shape[0]!==0){const o=r,i=e.shape[0];r=y(r,[i,r.shape[0]/i,r.shape[1]]),o.dispose()}return r}const Wa=m({irfft_:Av});function yl(e,t,n=0){let r=[];if(typeof t=="number")f(e.shape[n]%t===0,()=>"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{const o=t.reduce((a,s)=>(s===-1&&(a+=1),a),0);f(o<=1,()=>"There should be only one negative value in split array.");const i=t.indexOf(-1);if(i!==-1){const a=t.reduce((s,c)=>c>0?s+c:s);t[i]=e.shape[n]-a}f(e.shape[n]===t.reduce((a,s)=>a+s),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}function Nv(e,t,n=0){const r=u(e,"x","split"),o=(s,c)=>{const p=H(n,r.shape)[0],l=yl(r,t,p);return s.split(r,l,p)},i={x:r},a={numOrSizeSplits:t,axis:n};return b.runKernelFunc(o,i,null,Ui,a)}const Qt=m({split_:Nv});function Rv(e,t){f(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1];const r=e.size/n;let o;if(t!=null&&t0),w=e.shape.map(L=>L);w[e.shape.length-1]=t,o=P(e,x,w),n=t}else if(t!=null&&t>n){const x=e.shape.map(w=>w);x[e.shape.length-1]=t-n,o=Z([e,Ce(x)],e.shape.length-1),n=t}else o=e;const i=B(o),a=y(Je(o,i),[r,n]),s=Br(a),c=Math.floor(n/2)+1,p=Zt(s),l=yn(s),h=Qt(p,[c,n-c],p.shape.length-1),d=Qt(l,[c,n-c],l.shape.length-1),g=o.shape.slice();return g[o.shape.length-1]=c,y(Je(h[0],d[0]),g)}const $r=m({rfft_:Rv});function _v(e){const t=u(e,"x","sqrt"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sqrt(t);return o([t]),i},n,null,Di)}const ge=m({sqrt_:_v});function Cv(e,t){let n=u(e,"a","squaredDifference"),r=u(t,"b","squaredDifference");[n,r]=Y(n,r),q(n.shape,r.shape);const o=(s,c)=>{const p=s.squaredDifference(n,r);return c([n,r]),p},i={a:n,b:r},a={};return b.runKernelFunc(o,i,null,Bi,a)}const jr=m({squaredDifference_:Cv});function Ev(e,t){const n=u(e,"x","squeeze");return y(n,Cp(n.shape,t).newShape)}const Gr=m({squeeze_:Ev});function Ov(e,t=0){const n=Jt(e,"tensors","stack");if(f(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length===1)return nt(n[0],t);const r=n[0].rank,o=n[0].shape,i=n[0].dtype;f(t<=r,()=>"Axis must be <= rank of the tensor"),n.forEach(s=>{G(o,s.shape,"All tensors passed to stack must have matching shapes"),f(i===s.dtype,()=>"All tensors passed to stack must have matching dtypes")});const a=n.map(s=>nt(s,t));return Z(a,t)}const Fe=m({stack_:Ov});function kv(e,t=0){const n=u(e,"x","step"),r={x:n},o={alpha:t};return b.runKernelFunc(i=>i.step(n,t),r,null,Vi,o)}const zt=m({step_:kv});function Dv(e,t,n,r,o=0,i=0,a=0,s=0,c=0){let p=u(e,"x","stridedSlice");const l=g=>{r==null&&(r=new Array(t.length));const x=ps(a);if(x.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(a!==0&&s!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(a!==0&&c!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");const w=p.rank-t.length,L=ps(s),S=p.shape.slice();L.forEach(U=>{t[U]=0,n[U]=1,S.splice(U,0,1)}),p=y(p,S);const{begin:I,end:R,strides:A}=il(p.shape,x,w,t,n,r,o,i,a);t=I,n=R,r=A;const E=ps(c);E.forEach(U=>{n[U]=t[U]+1,r[U]=1});const F=ol(t,n,r),M=F.filter((U,Q)=>E.indexOf(Q)===-1),j=r.every(U=>U===1);if(j)return y(P(p,t,F),M);const $=g.stridedSlice(p,t,n,r);return y($,M)},h={x:p},d={begin:t,end:n,strides:r,beginMask:o,endMask:i,ellipsisMask:a,newAxisMask:s,shrinkAxisMask:c};return b.runKernelFunc(l,h,null,Ip,d)}const am=m({stridedSlice_:Dv});function Fv(e){const t=u(e,"x","tan"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.tan(t);return o([t]),i},n,null,ji)}const cm=m({tan_:Fv});function wt(e,t,n){if(at(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const r=Be(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Pe(e,t,r,n)}function xt(e,t,n){if(at(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");const r=Be(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Pe(e,t,r,n)}function pm(e,t,n){if(at(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");const r=Be(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Pe(e,t,r,n)}function lm(e,t,n){if(at(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");const r=Be(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,Pe(e,t,r,n)}function Mv(e,t=1,n=!0){const r=u(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");const o=r.shape[r.shape.length-1];if(t>o)throw new Error(`'k' passed to topk() must be <= the last dimension (${o}) but got ${t}`);const i={x:r},a={k:t,sorted:n},[s,c]=b.runKernelFunc(p=>p.topk(r,t,n),i,null,Tp,a);return{values:s,indices:c}}const hm=m({topk_:Mv});function Uv(e,t=0,n=1,r,o){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");const i=new ms(t,n,r,!0,o),a=Ee(e,r);for(let s=0;s"numSegments must be of dtype int");const i={x:r,segmentIds:o},a={numSegments:n},s=(c,p)=>{const l=c.unsortedSegmentSum(r,o,n);return p([o]),l};return b.runKernelFunc(s,i,null,Hi,a)}const Ba=m({unsortedSegmentSum_:Wv});function Bv(e,t=0){const n=u(e,"x","unstack");f(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`),t<0&&(t+=n.shape.length);const r={value:n},o={axis:t},i=a=>a.unstack(n,t);return b.runKernelFunc(i,r,null,zi,o)}const Ae=m({unstack_:Bv});function dm(e,t=!0,n,r){return b.makeVariable(e,t,n,r)}function $a(e,t){const n=[];for(let i=0;i0,()=>"mask cannot be scalar"),G(s.slice(i,i+a),o.shape,"mask's shape must match the first K dimensions of tensor's shape,");let c=1;for(let w=i;w"Shape mismatch in v and x");const c=C(1),p=k(c,s);let l=v(k(a,i),p);if(o){f(r!=null,()=>"When using zeroDebias: true, step is required.");const h=u(r,"step","movingAverage");l=D(l,k(c,Qe(s,h)))}return N(i,l)}const LS=m({movingAverage_:yS});function vS(e,t,n){const r=u(e,"indices","scatterND","int32"),o=u(t,"updates","scatterND");ma(o,r,n);const i=c=>c.scatterND(r,o,n),a={indices:r,updates:o},s={shape:n};return b.runKernelFunc(i,a,null,Lp,s)}const SS=m({scatterND_:vS});function fm(e,t,n,r){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);const o=e.rank>0?e.shape[0]:1,i=e.rank>1?e.shape[1]:1;if(n.length!==i)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${i}.`);const a=t.size;if(!(t.rank===0||t.rank===1&&a===o))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${o}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function IS(e,t,n,r=0){const o=u(e,"sparseIndices","sparseToDense","int32"),i=u(t,"sparseValues","sparseToDense"),a=u(r,"defaultValue","sparseToDense",i.dtype);fm(o,i,n,a);const s={sparseIndices:o,sparseValues:i,defaultValue:a},c={outputShape:n};return b.runKernelFunc(p=>p.sparseToDense(o,i,n,a),s,null,Sp,c)}const TS=m({sparseToDense_:IS});function AS(e,t){const n=u(t,"indices","gatherND","int32"),r=u(e,"x","gatherND"),o=a=>a.gatherND(r,n),i={params:r,indices:n};return b.runKernelFunc(o,i,null,Zc)}const NS=m({gatherND_:AS});function gm(e,t){if(t==null)return e.shape.slice();if(Se(e.shape,t))return t;if(e.shape.length===t.length){const n=[];for(let r=0;r`x has to be a floating point tensor since it's going to be scaled, but got a ${o.dtype} tensor instead.`),f(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof te?o.clone():o;const i=gm(o,n),a=1-t,s=D(Er(N(Oa(i,0,1,"float32",r),a)),a);return v(o,s)}const _S=m({dropout_:RS});function Ll(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function bs(e,t,n){const r=1-e%2,o=new Float32Array(e);for(let i=0;i1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),f(r.rank-1===o.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${o.rank}`),G(r.shape.slice(0,r.shape.length-1),o.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");const i=r.shape[r.shape.length-1];f(n>0&&n<=i,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${i}), but got ${n}`);const a=await r.data(),s=await o.data(),[c,p]=[a.length/i,i],l=mr("bool",c);for(let h=0;hL.value-w.value),l[h]=0;for(let w=0;w`Error in conv2dDerFilter: input must be rank 4, but got shape ${s.shape}.`),f(c.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${c.shape}.`),f(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);const p=i==="NHWC"?s.shape[3]:s.shape[1],l=i==="NHWC"?c.shape[3]:c.shape[1];f(p===n[2],()=>`Error in conv2dDerFilter: depth of input ${p}) must match input depth in filter (${n[2]}.`),f(l===n[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${n[3]}).`),a!=null&&f(X(o),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);const h=x=>{const w=1,L=gn(i),S=je(s.shape,n,r,w,o,a,!1,L);return x.conv2dDerFilter(s,c,S)},d={x:s,dy:c},g={strides:r,pad:o,dataFormat:i,dimRoundingMode:a};return b.runKernelFunc(h,d,null,Uc,g)}const Pr=m({conv2DBackpropFilter_:OS});function Bn(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return v(e,zt(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function $n(e,t){let n=t;const r=ae(e.shape,t.shape);return r.length>0&&(n=W(n,r)),y(n,e.shape)}function jn(e,t,n){if(t==="linear")return e;if(t==="relu")return ie(e);if(t==="elu")return La(e);if(t==="relu6")return ka(e);if(t==="prelu")return Ca(e,n);throw new Error(`Unknown fused activation ${t}.`)}const Gn=(e,t)=>{const n=e>0;return!n||t==="linear"};function kS({x:e,filter:t,strides:n,pad:r,dataFormat:o="NHWC",dilations:i=[1,1],dimRoundingMode:a,bias:s,activation:c="linear",preluActivationWeights:p}){if(c=c||"linear",Gn(b.state.gradientDepth,c)===!1){let E=ve(e,t,n,r,o,i,a);return s!=null&&(E=N(E,s)),jn(E,c,p)}const l=u(e,"x","conv2d"),h=u(t,"filter","conv2d");let d=l,g=!1;l.rank===3&&(g=!0,d=y(l,[1,l.shape[0],l.shape[1],l.shape[2]])),f(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),f(h.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${h.rank}.`),a!=null&&f(X(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),f(d.shape[3]===h.shape[2],()=>`Error in conv2d: depth of input (${d.shape[3]}) must match input depth for filter ${h.shape[2]}.`),f(le(n,i),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),f(o==="NHWC",()=>`Error in conv2d: got dataFormat of ${o} but only NHWC is currently supported.`);const x=je(d.shape,h.shape,n,i,r,a);let w;s!=null&&(w=u(s,"bias","fused conv2d"),[w]=Y(w,l),q(x.outShape,w.shape));let L;p!=null&&(L=u(p,"prelu weights","fused conv2d"));const S=(E,F)=>{const[M,j,$,U]=F,Q=Bn(E,$,c);f(ct(i),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${i}'`);const ne=_r(j.shape,Q,M,n,r),he=Pr(j,Q,M.shape,n,r),xe=[ne,he];if(U!=null){const Ue=$n(U,Q);xe.push(Ue)}return xe},I=E=>{const F=E.fusedConv2d({input:d,filter:h,convInfo:x,bias:w,activation:c,preluActivationWeights:L});return F},R={x:d,filter:h,bias:w,preluActivationWeights:L},A={strides:n,pad:r,dataFormat:o,dilations:i,dimRoundingMode:a,activation:c};if(s==null){const E=ze((F,M,j)=>{let $=b.runKernelFunc(I,R,null,oa,A);return j([M,F,$]),g&&($=y($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:S}});return E(d,h)}else{const E=ze((F,M,j,$)=>{let U=b.runKernelFunc(I,R,null,oa,A);return $([M,F,U,j]),g&&(U=y(U,[U.shape[1],U.shape[2],U.shape[3]])),{value:U,gradFunc:S}});return E(d,h,w)}}const DS=m({fusedConv2d_:kS});function FS(e,t,n,r){let o=e;e.rank===3&&(o=y(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let i=t;i.rank===3&&(i=y(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const a=c=>c.depthwiseConv2DDerFilter(o,i,r),s={x:o,dy:i};return b.runKernelFunc(a,s,null,Gc)}const Ga=m({depthwiseConv2dNativeBackpropFilter_:FS});function MS(e,t,n,r){let o=t,i=!1;t.rank===3&&(i=!0,o=y(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const a=p=>p.depthwiseConv2DDerInput(o,n,r),s={dy:o},c=b.runKernelFunc(a,s,null,Pc);return i?y(c,[c.shape[1],c.shape[2],c.shape[3]]):c}const Pa=m({depthwiseConv2dNativeBackpropInput_:MS});function US({x:e,filter:t,strides:n,pad:r,dataFormat:o="NHWC",dilations:i=[1,1],dimRoundingMode:a,bias:s,activation:c="linear",preluActivationWeights:p}){if(Gn(b.state.gradientDepth,c)===!1){let E=wn(e,t,n,r,o,i,a);return s!=null&&(E=N(E,s)),jn(E,c,p)}const l=u(e,"x","depthwiseConv2d"),h=u(t,"filter","depthwiseConv2d");let d=l,g=!1;l.rank===3&&(g=!0,d=y(l,[1,l.shape[0],l.shape[1],l.shape[2]])),f(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),f(h.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${h.rank}.`),f(d.shape[3]===h.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${h.shape[2]}.`),i==null&&(i=[1,1]),f(le(n,i),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&f(X(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`);const x=je(d.shape,h.shape,n,i,r,a,!0);let w;s!=null&&(w=u(s,"bias","fused conv2d"),[w]=Y(w,l),q(x.outShape,w.shape));let L;p!=null&&(L=u(p,"prelu weights","fused depthwiseConv2d"));const S=(E,F)=>{f(ct(i),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);const[M,j,$,U]=F,Q=Bn(E,$,c),ne=Pa(j.shape,Q,M,x),he=Ga(j,Q,M.shape,x);if(U!=null){const xe=$n(w,Q);return[ne,he,xe]}return[ne,he]},I=E=>{const F=E.fusedDepthwiseConv2D({input:d,filter:h,convInfo:x,bias:w,activation:c,preluActivationWeights:L});return F},R={x:d,filter:h,bias:w,preluActivationWeights:L},A={strides:n,pad:r,dataFormat:o,dilations:i,dimRoundingMode:a,activation:c};if(s==null){const E=ze((F,M,j)=>{let $=b.runKernelFunc(I,R,null,ia,A);return j([M,F,$]),g&&($=y($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:S}});return E(d,h)}else{const E=ze((F,M,j,$)=>{let U=b.runKernelFunc(I,R,null,ia,A);return $([M,F,U,j]),g&&(U=y(U,[U.shape[1],U.shape[2],U.shape[3]])),{value:U,gradFunc:S}});return E(d,h,w)}}const WS=m({fusedDepthwiseConv2d_:US});function BS({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:o,activation:i="linear",preluActivationWeights:a}){if(Gn(b.state.gradientDepth,i)===!1){let U=V(e,t,n,r);return o!=null&&(U=N(U,o)),jn(U,i,a)}let s=u(e,"a","fused matMul"),c=u(t,"b","fused matMul");[s,c]=Y(s,c);const p=n?s.shape[s.rank-2]:s.shape[s.rank-1],l=r?c.shape[c.rank-1]:c.shape[c.rank-2],h=n?s.shape[s.rank-1]:s.shape[s.rank-2],d=r?c.shape[c.rank-2]:c.shape[c.rank-1],g=s.shape.slice(0,-2),x=c.shape.slice(0,-2),w=ee(g),L=ee(x);f(s.rank>=2&&c.rank>=2&&s.rank===c.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${s.rank} and ${c.rank}.`),f(Se(g,x),()=>`Error in fused matMul: outer dimensions (${g}) and (${x}) of Tensors with shapes ${s.shape} and ${c.shape} must match.`),f(p===l,()=>`Error in fused matMul: inner shapes (${p}) and (${l}) of Tensors with shapes ${s.shape} and ${c.shape} and transposeA=${n} and transposeB=${r} must match.`);const S=s.shape.slice(0,-2).concat([h,d]),I=n?y(s,[w,p,h]):y(s,[w,h,p]),R=r?y(c,[L,d,l]):y(c,[L,l,d]);let A;o!=null&&(A=u(o,"bias","fused matMul"),[A]=Y(A,s),q(S,A.shape));let E;a!=null&&(E=u(a,"prelu weights","fused matMul"));const F=(U,Q)=>{const[ne,he,xe,Ue]=Q,vt=Bn(y(U,xe.shape),xe,i);let sn,tr;if(!n&&!r?(sn=V(vt,he,!1,!0),tr=V(ne,vt,!0,!1)):!n&&r?(sn=V(vt,he,!1,!1),tr=V(vt,ne,!0,!1)):n&&!r?(sn=V(he,vt,!1,!0),tr=V(ne,vt,!1,!1)):(sn=V(he,vt,!0,!0),tr=V(vt,ne,!0,!0)),o!=null){const Ab=$n(Ue,vt);return[sn,tr,Ab]}else return[sn,tr]},M=U=>{const Q=U.fusedBatchMatMul({a:I,b:R,transposeA:n,transposeB:r,bias:A,activation:i,preluActivationWeights:E});return Q},j={a:I,b:R,bias:A,preluActivationWeights:E},$={transposeA:n,transposeB:r,activation:i};if(o==null){const U=ze((Q,ne,he)=>{const xe=b.runKernelFunc(M,j,null,ra,$);return he([Q,ne,xe]),{value:y(xe,S),gradFunc:F}});return U(I,R)}else{const U=ze((Q,ne,he,xe)=>{const Ue=b.runKernelFunc(M,j,null,ra,$);return xe([Q,ne,Ue,he]),{value:y(Ue,S),gradFunc:F}});return U(I,R,A)}}const $S=m({fusedMatMul_:BS});const bm={};_e(bm,{conv2d:()=>DS,depthwiseConv2d:()=>WS,matMul:()=>$S});function jS(e){return bs(e,.54,.46)}const wm=m({hammingWindow_:jS});function GS(e){return bs(e,.5,.5)}const qa=m({hannWindow_:GS});function PS(e,t,n,r=!1,o=0){let i=0;const a=[];for(;i+t<=e.size;)a.push(P(e,i,t)),i+=n;if(r)for(;i`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),f(s.rank===2&&s.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${p},4] but had shape ${s.shape}.`),f(c.rank===1&&c.shape[0]===p,()=>`Error in cropAndResize: boxInd must be have size [${p}] but had shape ${s.shape}.`),f(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),f(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),f(o==="bilinear"||o==="nearest",()=>`method must be bilinear or nearest, but was ${o}`);const l=x=>x.cropAndResize(a,s,c,r,o,i),h={image:a,boxes:s,boxInd:c},d={method:o,extrapolationValue:i,cropSize:r},g=b.runKernelFunc(l,h,null,$c,d);return g}const ym=m({cropAndResize_:zS});function HS(e){const t=u(e,"image","flipLeftRight","float32");f(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);const n={image:t},r=b.runKernel(Xc,n,{});return r}const Lm=m({flipLeftRight_:HS});function YS(e,t,n=0,r=.5){const o=u(e,"image","rotateWithOffset","float32");f(o.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${o.rank}.`);const i={image:o},a={radians:t,fillValue:n,center:r},s=b.runKernel(Ap,i,a);return s}const vm=m({rotateWithOffset_:YS});function yt(e,t,n,r,o,i){r==null&&(r=.5),o==null&&(o=Number.NEGATIVE_INFINITY),i==null&&(i=0);const a=e.shape[0];return n=Math.min(n,a),f(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),f(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),f(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),f(t.rank===1,()=>"scores must be a 1D tensor"),f(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),f(0<=i&&i<=1,()=>`softNmsSigma must be in [0, 1], but was '${i}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:i}}function VS(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY){const i=u(e,"boxes","nonMaxSuppression"),a=u(t,"scores","nonMaxSuppression"),s=yt(i,a,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;const c={maxOutputSize:n,iouThreshold:r,scoreThreshold:o};return b.runKernelFunc(p=>p.nonMaxSuppression(i,a,n,r,o),{boxes:i,scores:a},null,dp,c)}const Sm=m({nonMaxSuppression_:VS});function Im(e,t,n){const r=KS(e,t,n),o=r<0?-(r+1):r;e.splice(o,0,t)}function KS(e,t,n){return XS(e,t,n||JS)}function JS(e,t){return e>t?1:e>>1);const s=n(t,e[i]);s>0?r=i+1:(o=i,a=!s)}return a?r:-r-1}function Ha(e,t,n,r,o){return vl(e,t,n,r,o,0).selectedIndices}function Ya(e,t,n,r,o,i){return vl(e,t,n,r,o,0,!1,i,!0)}function Va(e,t,n,r,o,i){return vl(e,t,n,r,o,i,!0)}function vl(e,t,n,r,o,i,a=!1,s=!1,c=!1){const p=[];for(let L=0;Lo&&p.push({score:t[L],boxIndex:L,suppressBeginIndex:0});p.sort(Tm);const l=i>0?-.5/i:0,h=[],d=[];for(;h.length0;){const L=p.pop(),{score:S,boxIndex:I,suppressBeginIndex:R}=L;if(S=R;--E){const F=ZS(e,I,h[E]);if(F>=r){A=!0;break}if(L.score=L.score*QS(r,l,F),L.score<=o)break}L.suppressBeginIndex=h.length,A||(L.score===S?(h.push(I),d.push(L.score)):L.score>o&&Im(p,L,Tm))}const g=h.length,x=n-g;s&&x>0&&(h.push(...new Array(x).fill(0)),d.push(...new Array(x).fill(0)));const w={selectedIndices:ce(h,"int32")};return a&&(w.selectedScores=ce(d,"float32")),c&&(w.validOutputs=C(g,"int32")),w}function ZS(e,t,n){const r=e.subarray(t*4,t*4+4),o=e.subarray(n*4,n*4+4),i=Math.min(r[0],r[2]),a=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),c=Math.max(r[1],r[3]),p=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),d=Math.max(o[1],o[3]),g=(s-i)*(c-a),x=(h-p)*(d-l);if(g<=0||x<=0)return 0;const w=Math.max(i,p),L=Math.max(a,l),S=Math.min(s,h),I=Math.min(c,d),R=Math.max(S-w,0)*Math.max(I-L,0);return R/(g+x-R)}function QS(e,t,n){const r=Math.exp(t*n*n);return n<=e?r:0}function Tm(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function eI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY){const i=u(e,"boxes","nonMaxSuppressionAsync"),a=u(t,"scores","nonMaxSuppressionAsync"),s=yt(i,a,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;const c=await Promise.all([i.data(),a.data()]),p=c[0],l=c[1],h=Ha(p,l,n,r,o);return i!==e&&i.dispose(),a!==t&&a.dispose(),h}const Am=eI;function tI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=0){const a=u(e,"boxes","nonMaxSuppression"),s=u(t,"scores","nonMaxSuppression"),c=yt(a,s,n,r,o,i);n=c.maxOutputSize,r=c.iouThreshold,o=c.scoreThreshold,i=c.softNmsSigma;const p={boxes:a,scores:s},l={maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:i},h=b.runKernel(fp,p,l);return{selectedIndices:h[0],selectedScores:h[1]}}const Nm=m({nonMaxSuppressionWithScore_:tI});async function nI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=0){const a=u(e,"boxes","nonMaxSuppressionAsync"),s=u(t,"scores","nonMaxSuppressionAsync"),c=yt(a,s,n,r,o,i);n=c.maxOutputSize,r=c.iouThreshold,o=c.scoreThreshold,i=c.softNmsSigma;const p=await Promise.all([a.data(),s.data()]),l=p[0],h=p[1],d=Va(l,h,n,r,o,i);return a!==e&&a.dispose(),s!==t&&s.dispose(),d}const Rm=nI;function rI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=!1){const a=u(e,"boxes","nonMaxSuppression"),s=u(t,"scores","nonMaxSuppression"),c=yt(a,s,n,r,o,null),p=c.maxOutputSize,l=c.iouThreshold,h=c.scoreThreshold,d={boxes:a,scores:s},g={maxOutputSize:p,iouThreshold:l,scoreThreshold:h,padToMaxOutputSize:i},x=b.runKernel(mp,d,g);return{selectedIndices:x[0],validOutputs:x[1]}}const _m=m({nonMaxSuppressionPadded_:rI});async function oI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=!1){const a=u(e,"boxes","nonMaxSuppressionAsync"),s=u(t,"scores","nonMaxSuppressionAsync"),c=yt(a,s,n,r,o,null),p=c.maxOutputSize,l=c.iouThreshold,h=c.scoreThreshold,[d,g]=await Promise.all([a.data(),s.data()]),x=Ya(d,g,p,l,h,i);return a!==e&&a.dispose(),s!==t&&s.dispose(),x}const Cm=oI;function iI(e,t,n=!1){const r=u(e,"images","resizeBilinear");f(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),f(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`);let o=r,i=!1;r.rank===3&&(i=!0,o=y(r,[1,r.shape[0],r.shape[1],r.shape[2]]));const[a,s]=t,c=(d,g)=>(g([o]),d.resizeBilinear(o,a,s,n)),p={images:o},l={alignCorners:n,size:t},h=b.runKernelFunc(c,p,null,Li,l);return i?y(h,[h.shape[1],h.shape[2],h.shape[3]]):h}const Em=m({resizeBilinear_:iI});function sI(e,t,n=!1){const r=u(e,"images","resizeNearestNeighbor");f(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),f(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),f(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let o=r,i=!1;r.rank===3&&(i=!0,o=y(r,[1,r.shape[0],r.shape[1],r.shape[2]]));const[a,s]=t,c={images:o},p={alignCorners:n,size:t},l=(d,g)=>(g([o]),d.resizeNearestNeighbor(o,a,s,n)),h=b.runKernelFunc(l,c,null,yi,p);return i?y(h,[h.shape[1],h.shape[2],h.shape[3]]):h}const Om=m({resizeNearestNeighbor_:sI});function aI(e,t,n){f(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),f(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);const r=u(e,"a","bandPart");f(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);const o=r.shape,[i,a]=r.shape.slice(-2);if(!(t<=i))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${i}).`);if(!(n<=a))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${a}).`);t<0&&(t=i),n<0&&(n=a);const s=y(fs(0,i,1,"int32"),[-1,1]),c=fs(0,a,1,"int32"),p=k(s,c),l=_t(bt(p,C(+t,"int32")),gt(p,C(-n,"int32"))),h=Ce([i,a],r.dtype);return y(Fe(Ae(y(r,[-1,i,a])).map(d=>De(l,d,h))),o)}const km=m({bandPart_:aI});function cI(e){let t;if(Array.isArray(e)){t=!1,f(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const o=e[0].shape[0];for(let i=1;i`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[i].shape[0]} vs. ${o})`)}else t=!0,e=Qt(e,e.shape[0],0).map(o=>Gr(o,[0]));f(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);const n=[],r=e;for(let o=0;o{let i=r[o];if(o>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return Fm(e,t);{const n=e.shape.slice(0,e.shape.length-2).reduce((c,p)=>c*p),r=Ae(y(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),o=[],i=[];r.forEach(c=>{const[p,l]=Fm(c,t);o.push(p),i.push(l)});const a=y(Fe(o,0),e.shape),s=y(Fe(i,0),e.shape);return[a,s]}}function Fm(e,t=!1){return b.tidy(()=>{f(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);const n=e.shape[0],r=e.shape[1];let o=va(n),i=dt(e);const a=wt([[1]],[1,1]);let s=dt(a);const c=n>=r?r:n;for(let p=0;p{const g=P(i,[p,p],[n-p,1]),x=gs(g),w=P(i,[p,p],[1,1]),L=De(rt(w,0),wt([[-1]]),wt([[1]])),S=k(w,v(L,x)),I=D(g,S);I.shape[0]===1?s=dt(a):s=Z([a,P(I,[1,0],[I.shape[0]-1,I.shape[1]])],0);const R=re(D(V(L,S),x)),A=P(i,[p,0],[n-p,r]),E=v(R,s),F=K(s);if(p===0)i=k(A,V(E,V(F,A)));else{const $=k(A,V(E,V(F,A)));i=Z([P(i,[0,0],[p,r]),$],0)}const M=K(E),j=P(o,[0,p],[n,o.shape[1]-p]);if(p===0)o=k(j,V(V(j,s),M));else{const $=k(j,V(V(j,s),M));o=Z([P(o,[0,0],[n,p]),$],1)}return[s,i,o]}),Le([l,h,d])}return!t&&n>r&&(o=P(o,[0,0],[n,r]),i=P(i,[0,0],[r,r])),[o,i]})}const Mm=m({qr_:pI});var be;(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"})(be||(be={}));function lI(e,t,n=be.SUM_BY_NONZERO_WEIGHTS){const r=u(e,"losses","computeWeightedLoss");let o=null;t!=null&&(o=u(t,"weights","computeWeightedLoss"));const i=o==null?r:v(r,o);if(n===be.NONE)return i;if(n===be.SUM)return W(i);if(n===be.MEAN){if(o==null)return Un(i);{const a=r.size/o.size,s=D(W(i),W(o));return a>1?D(s,C(a)):s}}if(n===be.SUM_BY_NONZERO_WEIGHTS){if(o==null)return D(W(i),C(r.size));{const a=v(o,Ct(r.shape)),s=_(W(Mr(a,C(0))),"float32");return D(W(i),s)}}throw Error(`Unknown reduction: ${n}`)}const $e=m({computeWeightedLoss_:lI});function hI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){const o=u(e,"labels","absoluteDifference"),i=u(t,"predictions","absoluteDifference");let a=null;n!=null&&(a=u(n,"weights","absoluteDifference")),G(o.shape,i.shape,"Error in absoluteDifference: ");const s=Oe(k(o,i));return $e(s,a,r)}const Um=m({absoluteDifference_:hI});function uI(e,t,n,r,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","cosineDistance"),a=u(t,"predictions","cosineDistance");let s=null;r!=null&&(s=u(r,"weights","cosineDistance")),G(i.shape,a.shape,"Error in cosineDistance: ");const c=C(1),p=k(c,W(v(i,a),n,!0));return $e(p,s,o)}const Wm=m({cosineDistance_:uI});function dI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){let o=u(e,"labels","hingeLoss");const i=u(t,"predictions","hingeLoss");let a=null;n!=null&&(a=u(n,"weights","hingeLoss")),G(o.shape,i.shape,"Error in hingeLoss: ");const s=C(1);o=k(v(C(2),o),s);const c=ie(k(s,v(o,i)));return $e(c,a,r)}const Bm=m({hingeLoss_:dI});function mI(e,t,n,r=1,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","huberLoss"),a=u(t,"predictions","huberLoss");let s=null;n!=null&&(s=u(n,"weights","huberLoss")),G(i.shape,a.shape,"Error in huberLoss: ");const c=C(r),p=Oe(k(a,i)),l=Fr(p,c),h=k(p,l),d=N(v(C(.5),z(l)),v(c,h));return $e(d,s,o)}const $m=m({huberLoss_:mI});function fI(e,t,n,r=1e-7,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","logLoss"),a=u(t,"predictions","logLoss");let s=null;n!=null&&(s=u(n,"weights","logLoss")),G(i.shape,a.shape,"Error in logLoss: ");const c=C(1),p=C(r),l=re(v(i,Rt(N(a,p)))),h=v(k(c,i),Rt(N(k(c,a),p))),d=k(l,h);return $e(d,s,o)}const jm=m({logLoss_:fI});function gI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){const o=u(e,"labels","meanSquaredError"),i=u(t,"predictions","meanSquaredError");let a=null;n!=null&&(a=u(n,"weights","meanSquaredError")),G(o.shape,i.shape,"Error in meanSquaredError: ");const s=jr(o,i);return $e(s,a,r)}const Gm=m({meanSquaredError_:gI});function bI(e,t){const n=u(e,"labels","sigmoidCrossEntropyWithLogits"),r=u(t,"logits","sigmoidCrossEntropyWithLogits");G(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");const o=ie(r),i=v(r,n),a=Ia(Te(re(Oe(r))));return N(k(o,i),a)}function wI(e,t,n,r=0,o=be.SUM_BY_NONZERO_WEIGHTS){let i=u(e,"multiClassLabels","sigmoidCrossEntropy");const a=u(t,"logits","sigmoidCrossEntropy");let s=null;if(n!=null&&(s=u(n,"weights","sigmoidCrossEntropy")),G(i.shape,a.shape,"Error in sigmoidCrossEntropy: "),r>0){const p=C(r),l=C(1),h=C(.5);i=N(v(i,k(l,p)),v(h,p))}const c=bI(i,a);return $e(c,s,o)}const Pm=m({sigmoidCrossEntropy_:wI});function xI(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}`);const r=ze((o,i,a)=>{const s=!0,c=Na(i,[n],s),p=k(_(i,"float32"),c);a([o,p]);const l=re(v(p,o)),h=W(l,[n]),d=(g,x)=>{const[w,L]=x,S=we(g.shape,[n]);return[v(y(g,S),k(_(w,"float32"),Te(L))),v(y(g,S),k(Te(L),_(w,"float32")))]};return{value:h,gradFunc:d}});return r(e,t)}function yI(e,t,n,r=0,o=be.SUM_BY_NONZERO_WEIGHTS){let i=u(e,"onehotLabels","softmaxCrossEntropy");const a=u(t,"logits","softmaxCrossEntropy");let s=null;if(n!=null&&(s=u(n,"weights","softmaxCrossEntropy")),G(i.shape,a.shape,"Error in softmaxCrossEntropy: "),r>0){const p=C(r),l=C(1),h=C(i.shape[1]);i=N(v(i,k(l,p)),D(p,h))}const c=xI(i,a);return $e(c,s,o)}const qm=m({softmaxCrossEntropy_:yI});const LI={fft:Br,ifft:Wn,rfft:$r,irfft:Wa},vI={hammingWindow:wm,hannWindow:qa,frame:za,stft:xm},Sl={flipLeftRight:Lm,resizeNearestNeighbor:Om,resizeBilinear:Em,rotateWithOffset:vm,cropAndResize:ym,nonMaxSuppression:Sm,nonMaxSuppressionAsync:Am,nonMaxSuppressionWithScore:Nm,nonMaxSuppressionWithScoreAsync:Rm,nonMaxSuppressionPadded:_m,nonMaxSuppressionPaddedAsync:Cm},SI={bandPart:km,gramSchmidt:Dm,qr:Mm},II={absoluteDifference:Um,computeWeightedLoss:$e,cosineDistance:Wm,hingeLoss:Bm,huberLoss:$m,logLoss:jm,meanSquaredError:Gm,sigmoidCrossEntropy:Pm,softmaxCrossEntropy:qm};class ot extends sl{minimize(e,t=!1,n){const{value:r,grads:o}=this.computeGradients(e,n);if(n!=null){const i=n.map(a=>({name:a.name,tensor:o[a.name]}));this.applyGradients(i)}else this.applyGradients(o);return Le(o),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return wl(e,t)}dispose(){this.iterations_!=null&&Le(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:C(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(ot,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});class Pn extends ot{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n],i=!1;this.accumulatedGrads[r]==null&&(this.accumulatedGrads[r]={originalName:`${n}/accum_grad`,variable:O(()=>B(o).variable(i))}),this.accumulatedUpdates[r]==null&&(this.accumulatedUpdates[r]={originalName:`${n}/accum_var`,variable:O(()=>B(o).variable(i))});const a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;const s=this.accumulatedGrads[r].variable,c=this.accumulatedUpdates[r].variable;O(()=>{const p=N(v(s,this.rho),v(z(a),1-this.rho)),l=v(D(ge(N(c,this.epsilon)),ge(N(s,this.epsilon))),a),h=N(v(c,this.rho),v(z(l),1-this.rho));s.assign(p),c.assign(h);const d=N(v(l,-this.learningRate),o);o.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Le(this.accumulatedGrads.map(e=>e.variable)),Le(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){const 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);const t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}}Pn.className="Adadelta";Ze(Pn);class qn extends ot{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n];if(this.accumulatedGrads[r]==null){const s=!1;this.accumulatedGrads[r]={originalName:`${n}/accumulator`,variable:O(()=>qe(o.shape,this.initialAccumulatorValue).variable(s))}}const i=Array.isArray(e)?e[r].tensor:e[n];if(i==null)return;const a=this.accumulatedGrads[r].variable;O(()=>{const s=N(a,z(i));a.assign(s);const c=N(v(D(i,ge(N(s,b.backend.epsilon()))),-this.learningRate),o);o.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Le(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);const 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)}}qn.className="Adagrad";Ze(qn);class zn extends ot{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],O(()=>{this.accBeta1=C(t).variable(),this.accBeta2=C(n).variable()}),r==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{const n=k(1,this.accBeta1),r=k(1,this.accBeta2);t.forEach((o,i)=>{const a=b.registeredVariables[o],s=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${o}/m`,variable:O(()=>B(a).variable(s))}),this.accumulatedSecondMoment[i]==null&&(this.accumulatedSecondMoment[i]={originalName:`${o}/v`,variable:O(()=>B(a).variable(s))});const c=Array.isArray(e)?e[i].tensor:e[o];if(c==null)return;const p=this.accumulatedFirstMoment[i].variable,l=this.accumulatedSecondMoment[i].variable,h=N(v(p,this.beta1),v(c,1-this.beta1)),d=N(v(l,this.beta2),v(z(c),1-this.beta2)),g=D(h,n),x=D(d,r);p.assign(h),l.assign(d);const w=N(v(D(g,N(ge(x),this.epsilon)),-this.learningRate),a);a.assign(w)}),this.accBeta1.assign(v(this.accBeta1,this.beta1)),this.accBeta2.assign(v(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Le(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Le(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){const 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(Qe(this.beta1,this.iterations_+1)),this.accBeta2.assign(Qe(this.beta2,this.iterations_+1))});const t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}}zn.className="Adam";Ze(zn);class Hn extends ot{constructor(e,t,n,r=null,o=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=o,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],O(()=>{this.iteration=C(0).variable(),this.accBeta1=C(t).variable()}),r==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{const n=k(1,this.accBeta1),r=D(-this.learningRate,N(v(this.iteration,this.decay),1));t.forEach((o,i)=>{const a=b.registeredVariables[o],s=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${o}/m`,variable:B(a).variable(s)}),this.accumulatedWeightedInfNorm[i]==null&&(this.accumulatedWeightedInfNorm[i]={originalName:`${o}/v`,variable:B(a).variable(s)});const c=Array.isArray(e)?e[i].tensor:e[o];if(c==null)return;const p=this.accumulatedFirstMoment[i].variable,l=this.accumulatedWeightedInfNorm[i].variable,h=N(v(p,this.beta1),v(c,1-this.beta1)),d=v(l,this.beta2),g=Oe(c),x=Pt(d,g);p.assign(h),l.assign(x);const w=N(v(D(r,n),D(h,N(x,this.epsilon))),a);a.assign(w)}),this.iteration.assign(N(this.iteration,1)),this.accBeta1.assign(v(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Le(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Le(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)}}Hn.className="Adamax";Ze(Hn);class en extends ot{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;const i=b.registeredVariables[n];O(()=>{const a=N(v(this.c,o),i);i.assign(a)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=ll(C(-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)}}en.className="SGD";Ze(en);class Yn extends en{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=C(this.momentum)}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n];if(this.accumulations[r]==null){const s=!1;this.accumulations[r]={originalName:`${n}/momentum`,variable:O(()=>B(o).variable(s))}}const i=this.accumulations[r].variable,a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;O(()=>{let s;const c=N(v(this.m,i),a);this.useNesterov?s=N(v(this.c,N(a,v(c,this.m))),o):s=N(v(this.c,c),o),i.assign(c),o.assign(s)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Le(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);const 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)}}Yn.className="Momentum";Ze(Yn);class Vn extends ot{constructor(e,t=.9,n=0,r=null,o=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=o,r==null&&(this.epsilon=b.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n],i=!1;this.accumulatedMeanSquares[r]==null&&(this.accumulatedMeanSquares[r]={originalName:`${n}/rms`,variable:O(()=>B(o).variable(i))}),this.accumulatedMoments[r]==null&&(this.accumulatedMoments[r]={originalName:`${n}/momentum`,variable:O(()=>B(o).variable(i))}),this.accumulatedMeanGrads[r]==null&&this.centered&&(this.accumulatedMeanGrads[r]={originalName:`${n}/mg`,variable:O(()=>B(o).variable(i))});const a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;const s=this.accumulatedMeanSquares[r].variable,c=this.accumulatedMoments[r].variable;O(()=>{const p=N(v(s,this.decay),v(z(a),1-this.decay));if(this.centered){const l=this.accumulatedMeanGrads[r].variable,h=N(v(l,this.decay),v(a,1-this.decay)),d=D(v(a,this.learningRate),ge(k(p,N(z(h),this.epsilon)))),g=N(v(c,this.momentum),d);s.assign(p),l.assign(h),c.assign(g);const x=k(o,g);o.assign(x)}else{const l=N(v(s,this.decay),v(z(a),1-this.decay)),h=N(v(c,this.momentum),D(v(a,this.learningRate),ge(N(l,this.epsilon))));s.assign(l),c.assign(h);const d=k(o,h);o.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Le(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Le(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Le(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){const 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);const t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}}Vn.className="RMSProp";Ze(Vn);class vn{static sgd(e){return new en(e)}static momentum(e,t,n=!1){return new Yn(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,o=!1){return new Vn(e,t,n,r,o)}static adam(e=.001,t=.9,n=.999,r=null){return new zn(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new Pn(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,o=0){return new Hn(e,t,n,r,o)}static adagrad(e,t=.1){return new qn(e,t)}}Yn,en,Pn,qn,Vn,Hn,zn;const TI={sgd:vn.sgd,momentum:vn.momentum,adadelta:vn.adadelta,adagrad:vn.adagrad,rmsprop:vn.rmsprop,adamax:vn.adamax,adam:vn.adam};const AI=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function NI(){return new Promise(e=>AI(()=>e()))}function RI(e,t,n){const r=n*(typeof e=="number"?e:e[0]),o=t*(typeof e=="number"?e:e[1]);return[r,o]}function _I(e,t,n,r=!0){let o=[];if(r)o=o.concat(t.slice(0)),o.push(e[0]/n),o=o.concat(e.slice(1));else{o=o.concat(e[0]);const i=t.length;for(let a=0;a=t*2+1||a%2===1?i.push(a):o.push(a);r.push(...o),r.push(0),r.push(...i)}return r}function EI(e,t,n,r=!0){const o=[];r?o.push(e[0]/n):o.push(e[0]*n);for(let i=1;iFI,ERF_A2:()=>MI,ERF_A3:()=>UI,ERF_A4:()=>WI,ERF_A5:()=>BI,ERF_P:()=>DI,PARALLELIZE_THRESHOLD:()=>Sa,SELU_SCALE:()=>Tl,SELU_SCALEALPHA:()=>Il,applyActivation:()=>jn,assertAndGetBroadcastShape:()=>q,assertAxesAreInnerMostDims:()=>Bx,assertParamsConsistent:()=>fl,assignToTypedArray:()=>YI,axesAreInnerMostDims:()=>hl,calculateShapes:()=>_u,castTensor:()=>JI,combineLocations:()=>qu,complexWithEvenIndex:()=>qI,complexWithOddIndex:()=>zI,computeConv2DInfo:()=>je,computeConv3DInfo:()=>bn,computeDefaultPad:()=>ml,computeDilation2DInfo:()=>Kx,computeOptimalWindowSize:()=>Yy,computeOutAndReduceShapes:()=>ul,computeOutShape:()=>gl,computePool2DInfo:()=>Nt,computePool3DInfo:()=>Xt,convertConv2DDataFormat:()=>gn,eitherStridesOrDilationsAreOne:()=>le,expandShapeToKeepDim:()=>we,exponent:()=>KI,exponents:()=>VI,getAxesPermutation:()=>fe,getBroadcastDims:()=>ky,getComplexWithIndex:()=>HI,getFusedBiasGradient:()=>$n,getFusedDyActivation:()=>Bn,getImageCenter:()=>RI,getInnerMostAxes:()=>ke,getPermuted:()=>CI,getReductionAxes:()=>ae,getReshaped:()=>_I,getReshapedPermuted:()=>EI,getSliceBeginCoords:()=>OI,getSliceSize:()=>kI,getUndoAxesPermutation:()=>Fn,linspaceImpl:()=>ZI,log:()=>jI,mergeRealAndImagArrays:()=>GI,prepareAndValidate:()=>Nu,prepareSplitSize:()=>yl,reshapeTensor:()=>XI,segment_util:()=>vd,shouldFuse:()=>Gn,slice_util:()=>nl,splitRealAndImagArrays:()=>PI,tupleValuesAreOne:()=>ct,upcastType:()=>xr,validateInput:()=>ma,validateUpdateShape:()=>tl,warn:()=>$I});function JI(e,t,n){if(t==="complex64"){if(e.dtype==="complex64")return e.clone();const r=Ce(e.shape),o=_(e,"float32"),i=n.complex(o,r);return r.dispose(),o.dispose(),i}if(!kp(e.dtype,t))return b.makeTensorFromDataId(e.dataId,e.shape,t);if(e.dtype==="complex64"){const r=n.real(e),o=_(r,t);return r.dispose(),o}if(t==="int32")return n.int(e);if(t==="bool"){const r=C(0,e.dtype),o=n.notEqual(e,r);return r.dispose(),o}else throw new Error(`Error in Cast: failed to cast ${e.dtype} to ${t}`)}function XI(e,t){return b.makeTensorFromDataId(e.dataId,t,e.dtype)}function ZI(e,t,n){const r=(t-e)/(n-1),o=Wt(n,"float32");o[0]=e;for(let i=1;i{const a=[...o];a[n]=i;const s=P(e,r,a);return r[n]+=i,s})}function Ym(e,t){const n=new Array(e.rank);for(let o=0;oR.value-I.value);const w=h*r,L=c.subarray(w,w+r),S=p.subarray(w,w+r);for(let I=0;IHa,nonMaxSuppressionV4Impl:()=>Ya,nonMaxSuppressionV5Impl:()=>Va,split:()=>Hm,tile:()=>Ym,topkImpl:()=>Vm,whereImpl:()=>$a});const QI=1e-7,eT=1e-4;class tT{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}}class nT{time(e){return T("time")}read(e){return T("read")}readSync(e){return T("readSync")}numDataIds(){return T("numDataIds")}disposeData(e){return T("disposeData")}write(e,t,n){return T("write")}move(e,t,n,r){return T("move")}memory(){return T("memory")}floatPrecision(){return T("floatPrecision")}epsilon(){return this.floatPrecision()===32?QI:eT}batchMatMul(e,t,n,r){return T("batchMatMul")}fusedBatchMatMul({a:e,b:t,transposeA:n,transposeB:r,bias:o,activation:i,preluActivationWeights:a}){return T("fusedBatchMatMul")}slice(e,t,n){return T("slice")}stridedSlice(e,t,n,r){return T("stridedSlice")}unstack(e,t){return T("unstack")}reverse(e,t){return T("reverse")}concat(e,t){return T("concat")}neg(e){return T("neg")}add(e,t){return T("add")}addN(e){return T("addN")}subtract(e,t){return T("subtract")}multiply(e,t){return T("multiply")}realDivide(e,t){return T("realDivide")}floorDiv(e,t){return T("floorDiv")}sum(e,t){return T("sum")}prod(e,t){return T("prod")}unsortedSegmentSum(e,t,n){return T("unsortedSegmentSum")}argMin(e,t){return T("argMin")}argMax(e,t){return T("argMax")}equal(e,t){return T("equal")}notEqual(e,t){return T("notEqual")}less(e,t){return T("less")}lessEqual(e,t){return T("lessEqual")}greater(e,t){return T("greater")}greaterEqual(e,t){return T("greaterEqual")}logicalNot(e){return T("logicalNot")}logicalAnd(e,t){return T("logicalAnd")}logicalOr(e,t){return T("logicalOr")}where(e){return T("where")}select(e,t,n){return T("select")}topk(e,t,n){return T("topk")}min(e,t){return T("min")}minimum(e,t){return T("minimum")}mod(e,t){return T("mod")}max(e,t){return T("max")}maximum(e,t){return T("maximum")}all(e,t){return T("all")}any(e,t){return T("any")}squaredDifference(e,t){return T("squaredDifference")}ceil(e){return T("ceil")}floor(e){return T("floor")}round(e){return T("round")}sign(e){return T("sign")}isNaN(e){return T("isNaN")}isInf(e){return T("isInf")}isFinite(e){return T("isFinite")}pow(e,t){return T("pow")}exp(e){return T("exp")}expm1(e){return T("expm1")}softmax(e,t){return T("softmax")}log(e){return T("log")}log1p(e){return T("log1p")}sqrt(e){return T("sqrt")}rsqrt(e){return T("rsqrt")}square(e){return T("square")}reciprocal(e){return T("reciprocal")}relu(e){return T("relu")}relu6(e){return T("relu6")}prelu(e,t){return T("prelu")}elu(e){return T("elu")}eluDer(e,t){return T("eluDer")}selu(e){return T("selu")}int(e){return T("int")}clip(e,t,n){return T("clip")}abs(e){return T("abs")}complexAbs(e){return T("complexAbs")}sigmoid(e){return T("sigmoid")}softplus(e){return T("softplus")}sin(e){return T("sin")}cos(e){return T("cos")}tan(e){return T("tan")}asin(e){return T("asin")}acos(e){return T("acos")}atan(e){return T("atan")}atan2(e,t){return T("atan2")}sinh(e){return T("sinh")}cosh(e){return T("cosh")}tanh(e){return T("tanh")}asinh(e){return T("asinh")}acosh(e){return T("acosh")}atanh(e){return T("atanh")}erf(e){return T("erf")}step(e,t){return T("step")}fusedConv2d({input:e,filter:t,convInfo:n,bias:r,activation:o,preluActivationWeights:i}){return T("fusedConv2d")}conv2d(e,t,n){return T("conv2d")}conv2dDerInput(e,t,n){return T("conv2dDerInput")}conv2dDerFilter(e,t,n){return T("conv2dDerFilter")}fusedDepthwiseConv2D({input:e,filter:t,convInfo:n,bias:r,activation:o,preluActivationWeights:i}){return T("fusedDepthwiseConv2D")}depthwiseConv2D(e,t,n){return T("depthwiseConv2D")}depthwiseConv2DDerInput(e,t,n){return T("depthwiseConv2DDerInput")}depthwiseConv2DDerFilter(e,t,n){return T("depthwiseConv2DDerFilter")}conv3d(e,t,n){return T("conv3d")}conv3dDerInput(e,t,n){return T("conv3dDerInput")}conv3dDerFilter(e,t,n){return T("conv3dDerFilter")}maxPool(e,t){return T("maxPool")}maxPoolBackprop(e,t,n,r){return T("maxPoolBackprop")}avgPool(e,t){return T("avgPool")}avgPoolBackprop(e,t,n){return T("avgPoolBackprop")}avgPool3d(e,t){return T("avgPool3d")}avgPool3dBackprop(e,t,n){return T("avgPool3dBackprop")}maxPool3d(e,t){return T("maxPool3d")}maxPool3dBackprop(e,t,n,r){return T("maxPool3dBackprop")}reshape(e,t){return T("reshape")}cast(e,t){return T("cast")}tile(e,t){return T("tile")}pad(e,t,n){return T("pad")}transpose(e,t){return T("transpose")}gather(e,t,n){return T("gather")}gatherND(e,t){return T("gatherND")}scatterND(e,t,n){return T("scatterND")}batchToSpaceND(e,t,n){return T("batchToSpaceND")}spaceToBatchND(e,t,n){return T("spaceToBatchND")}resizeBilinear(e,t,n,r){return T("resizeBilinear")}resizeBilinearBackprop(e,t,n){return T("resizeBilinearBackprop")}resizeNearestNeighbor(e,t,n,r){return T("resizeNearestNeighbor")}resizeNearestNeighborBackprop(e,t,n){return T("resizeNearestNeighborBackprop")}batchNorm(e,t,n,r,o,i){return T("batchNorm")}localResponseNormalization4D(e,t,n,r,o){return T("localResponseNormalization4D")}LRNGrad(e,t,n,r,o,i,a){return T("LRNGrad")}multinomial(e,t,n,r){return T("multinomial")}oneHot(e,t,n,r){return T("oneHot")}cumsum(e,t,n,r){return T("cumsum")}nonMaxSuppression(e,t,n,r,o){return T("nonMaxSuppression")}fft(e){return T("fft")}ifft(e){return T("ifft")}complex(e,t){return T("complex")}real(e){return T("real")}imag(e){return T("imag")}cropAndResize(e,t,n,r,o,i){return T("cropAndResize")}depthToSpace(e,t,n){return T("depthToSpace")}split(e,t,n){return T("split")}sparseToDense(e,t,n,r){return T("sparseToDense")}diag(e){return T("diag")}fill(e,t,n){return T("fill")}onesLike(e){return T("onesLike")}zerosLike(e){return T("zerosLike")}linspace(e,t,n){return T("linspace")}dispose(){return T("dispose")}}function T(e){throw new Error(`'${e}' not yet implemented or not found in the registry. Did you forget to import the kernel?`)}const Jm={kernelName:ho,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,zt(_(n,"float32"),-1))}}};const Xm={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=z(_(n,"float32")),o=ge(k(C(1),r));return re(D(e,o))}}}};const Zm={kernelName:mo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=ge(k(z(_(n,"float32")),1));return D(e,r)}}}};const Qm={kernelName:Cn,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{let s=e;const c=ae(n.shape,o);return c.length>0&&(s=W(s,c)),y(s,n.shape)},a=()=>{let s=e;const c=ae(r.shape,o);return c.length>0&&(s=W(s,c)),y(s,r.shape)};return{a:i,b:a}}};const ef={kernelName:fo,saveAllInputs:!0,gradFunc:(e,t)=>{const n={};return t.forEach((r,o)=>{n[o]=()=>e.clone()}),n}};const tf={kernelName:go,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>B(n)}}};const nf={kernelName:bo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>B(n)}}};const rf={kernelName:wo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,ge(k(C(1),z(_(n,"float32")))))}}};const of={kernelName:xo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=ge(N(C(1),z(_(n,"float32"))));return D(e,r)}}}};const sf={kernelName:vo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=N(z(n),z(r));let c=v(e,D(r,s));const p=ae(n.shape,o);return p.length>0&&(c=W(c,p)),y(c,n.shape)},a=()=>{const s=N(z(n),z(r));let c=re(v(e,D(n,s)));const p=ae(r.shape,o);return p.length>0&&(c=W(c,p)),y(c,r.shape)};return{a:i,b:a}}};const af={kernelName:yo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,N(z(_(n,"float32")),1))}}};const cf={kernelName:Lo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,k(C(1),z(_(n,"float32"))))}}};function rT(e,t,n,r,o=[1,1,1],i,a){const s=u(e,"dy","avgPool3dBackprop"),c=u(t,"input","avgPool3dBackprop");let p=s,l=c,h=!1;c.rank===4&&(h=!0,p=y(s,[1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]]),l=y(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]])),f(p.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${p.rank}.`),f(l.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${l.rank}.`),f(le(r,o),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${r} and dilations '${o}'`),a!=null&&f(X(i),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const d=L=>{const S=Xt(l.shape,n,r,o,i,a);return L.avgPool3dBackprop(p,l,S)},g={dy:p,input:l},x={filterSize:n,strides:r,dilations:o,pad:i,dimRoundingMode:a},w=b.runKernelFunc(d,g,null,Fc,x);return h?y(w,[w.shape[1],w.shape[2],w.shape[3],w.shape[4]]):w}const pf=m({avgPool3dBackprop_:rT});const lf={kernelName:Io,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:o,strides:i,dilations:a,pad:s,dimRoundingMode:c}=n,p=a==null?[1,1,1]:a;return{x:()=>pf(e,r,o,i,p,s,c)}}};function oT(e,t,n,r,o){const i=u(e,"dy","avgPoolBackprop"),a=u(t,"input","avgPoolBackprop");f(a.rank===i.rank,()=>`Rank of input (${a.rank}) does not match rank of dy (${i.rank})`);let s=a,c=i,p=!1;a.rank===3&&(p=!0,s=y(a,[1,a.shape[0],a.shape[1],a.shape[2]]),c=y(i,[1,i.shape[0],i.shape[1],i.shape[2]])),f(c.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${c.rank}.`),f(s.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${s.rank}.`);const l=x=>{const w=Nt(s.shape,n,r,1,o);return x.avgPoolBackprop(c,s,w)},h={dy:c,input:s},d={filterSize:n,strides:r,pad:o},g=b.runKernelFunc(l,h,null,Dc,d);return p?y(g,[g.shape[1],g.shape[2],g.shape[3]]):g}const hf=m({avgPoolBackprop_:oT});const uf={kernelName:So,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:o,strides:i,pad:a}=n;return{x:()=>hf(e,r,o,i,a)}}};const df={kernelName:To,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{const[r,o]=t,{transposeA:i,transposeB:a}=n;return!i&&!a?{a:()=>V(e,o,!1,!0),b:()=>V(r,e,!0,!1)}:!i&&a?{a:()=>V(e,o,!1,!1),b:()=>V(e,r,!0,!1)}:i&&!a?{a:()=>V(o,e,!1,!0),b:()=>V(r,e,!1,!1)}:{a:()=>V(o,e,!0,!0),b:()=>V(e,r,!0,!0)}}};const mf={kernelName:Ao,gradFunc:(e,t,n)=>{const{blockShape:r,crops:o}=n;return{x:()=>Ur(e,r,o)}}};const ff={kernelName:No,gradFunc:(e,t,n)=>{const r=n,o=r.inputShape,i=r.shape,a=Array.from(i);for(let c=o.length-1;c>=0;c--)if(o[c]===i[c])a[c]=1;else if(o[c]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${i}].`);const s=[];for(let c=0;c1&&s.push(c);return{x:()=>W(e,s,!0)}}};const gf={kernelName:En,gradFunc:e=>({x:()=>e.clone()})};const bf={kernelName:Ro,gradFunc:e=>({x:()=>B(e)})};const wf={kernelName:_o,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{clipValueMin:o,clipValueMax:i}=n;return{x:()=>De(_t(gt(r,o),bt(r,i)),e,B(e))}}};const xf={kernelName:Co,saveAllInputs:!0,gradFunc:(e,t,n)=>{const r=t.map(c=>c.shape),{axis:o}=n,i=H(o,t[0].shape)[0],a=r.map(c=>c[i]),s=Qt(e,a,i);return s.map(c=>()=>c)}};const yf={kernelName:Eo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,{dilations:i,strides:a,pad:s,dataFormat:c}=n;return f(ct(i),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${i}'`),{x:()=>_r(r.shape,e,o,a,s,c),filter:()=>Pr(r,e,o.shape,a,s,c)}}};const Lf={kernelName:Oo,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,{strides:i,pad:a,dataFormat:s,dimRoundingMode:c}=n;return{dy:()=>ve(e,o,i,a,s,1,c),filter:()=>Pr(e,r,o.shape,i,a,s,c)}}};function iT(e,t,n,r,o){let i=e;e.rank===4&&(i=y(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let a=t;a.rank===4&&(a=y(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),f(i.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${i.shape}.`),f(a.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${a.shape}.`),f(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),f(i.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${i.shape[4]}) must match input depth in filter (${n[3]}.`),f(a.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${a.shape[4]}) must match output depth for filter (${n[4]}).`);const s=l=>{const h=1,d=bn(i.shape,n,r,h,o);return l.conv3dDerFilter(i,a,d)},c={x:i,y:a},p={strides:r,pad:o};return b.runKernelFunc(s,c,null,Wc,p)}const vf=m({conv3DBackpropFilter_:iT});const Sf={kernelName:ko,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:o,pad:i}=n;f(ct(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);const[a,s]=t;return{x:()=>wa(a.shape,e,s,o,i),filter:()=>vf(a,e,s.shape,o,i)}}};const If={kernelName:Do,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(re(Fa(_(n,"float32"))),e)}}};const Tf={kernelName:Fo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(Ma(_(n,"float32")),e)}}};const Af={kernelName:Mo,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{axis:o,exclusive:i,reverse:a}=n;return{x:()=>{const s=fe([o],r.rank);let c=ya(e,o,i,!a);return s!=null&&(c=K(c,s)),c}}}};const Nf={kernelName:Uo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:o,pad:i,dimRoundingMode:a}=n,s=r==null?[1,1]:r;f(ct(s),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);const[c,p]=t;f(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${c.rank}.`),f(p.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${p.rank}.`),f(c.shape[3]===p.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${p.shape[2]}.`),f(le(o,s),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'.`),a!=null&&f(X(i),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const l=je(c.shape,p.shape,o,s,i,a,!0);return{x:()=>Pa(c.shape,e,p,l),filter:()=>Ga(c,e,p.shape,l)}}};const Rf={kernelName:Wo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,i={x:r,filter:o,dy:e},a={x:r,filter:o,dy:e};return{x:()=>b.runKernel(zc,i,n),filter:()=>b.runKernel(Hc,a,n)}}};const _f={kernelName:Bo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=D(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{let s=v(e,_(n,"float32"));const c=ae(r.shape,o);c.length>0&&(s=y(W(s,c),r.shape));const p=z(r);return re(D(s,_(p,"float32")))};return{a:i,b:a}}};const Cf={kernelName:$o,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t,r=i=>i.eluDer(e,n),o={dy:e,y:n};return{x:()=>b.runKernelFunc(r,o,null,Yc)}}};const Ef={kernelName:jo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=v(Te(re(z(n))),2/Math.sqrt(Math.PI));return{x:()=>v(e,r)}}};const Of={kernelName:Go,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,n)}}};const kf={kernelName:Po,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,Te(n))}}};const Df={kernelName:qo,gradFunc:e=>({x:()=>B(e)})};const Ff={kernelName:zo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=D(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{let s=v(e,_(n,"float32"));const c=ae(r.shape,o);c.length>0&&(s=y(W(s,c),r.shape));const p=z(r);return re(D(s,_(p,"float32")))};return{a:i,b:a}}};const Mf={kernelName:Ho,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{const{varianceEpsilon:r}=n,[o,i,a,s]=t,c=s==null?C(1):s,p=ae(i.shape,o.shape),l=[];if(i.rank===1){for(let A=0;Ai.rank===1?y(v(v(e,Gt(y(g,[1,1,1,i.shape[0]]),l)),c),o.shape):y(v(v(e,g),c),o.shape),L=()=>{let A=v(v(g,C(-1)),d);return i.rank===1&&(A=W(A,p)),y(A,i.shape)},S=()=>{let A=v(v(x,h),d);return i.rank===1&&(A=W(A,p)),y(A,i.shape)},I=()=>{const A=v(h,g);let E=v(e,A);return i.rank===1&&(E=W(E,p)),y(E,i.shape)},R=()=>{let A=e;return i.rank===1&&(A=W(A,p)),y(A,i.shape)};return{x:w,mean:L,variance:S,scale:I,offset:R}}};const Bf={kernelName:Yo,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{const[r,o]=t,{axis:i}=n,a=H(i,r.shape)[0],s=()=>{const c=r.shape,p=o.size,l=c.slice(0,a),h=l.length,d=c.slice(i,c.length).slice(1),g=d.length,x=Uf(0,h),w=Uf(h+1,h+1+g),L=Wf([l,[p],d]),S=y(e,L),I=y(o,[p]),R=Wf([[h],x,w]),A=K(S,R);let E=Ba(A,I,r.shape[a]);const F=Fn(R);return E=K(E,F),E};return{x:s,indices:()=>o}}};function Uf(e,t){const n=[];for(let r=e;r{const[n,r]=t;return{a:()=>B(n),b:()=>B(r)}}};const jf={kernelName:Ko,gradFunc:e=>({x:()=>_(e,"float32")})};const Gf={kernelName:Jo,gradFunc:e=>({x:()=>B(e)})};const Pf={kernelName:Xo,gradFunc:e=>({x:()=>B(e)})};const qf={kernelName:Zo,gradFunc:e=>({x:()=>B(e)})};const zf={kernelName:ei,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,N(n,1))}}};const Hf={kernelName:Qo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,_(n,"float32"))}}};const Yf={kernelName:ti,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{axis:o}=n;return{logits:()=>{const i=!0,a=Te(r);return k(e,v(W(e,o,i),a))}}}};function sT(e,t,n,r=5,o=1,i=1,a=.5){const s=l=>l.LRNGrad(n,e,t,r,o,i,a),c={x:e,y:t,dy:n},p={depthRadius:r,bias:o,alpha:i,beta:a};return b.runKernelFunc(s,c,null,cp,p)}const Vf=m({localResponseNormalizationBackprop_:sT});const Kf={kernelName:ni,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{depthRadius:i,bias:a,alpha:s,beta:c}=n;return{x:()=>Vf(r,o,e,i,a,s,c)}}};function Ka(e,t,n,r,o){return t.rank{const i=v(e,_(xn(n,t),e.dtype));return o==null?i:K(i,o)}}}const Al={kernelName:ri,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{reductionIndices:o}=r,[i,a]=t,s=H(o,i.shape),c=fe(s,i.rank),p=Ka(e,a,i,s,c);return{x:()=>{let l=p.x();return c!=null&&(l=K(l)),l}}}};const Jf={kernelName:oi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=()=>v(e,_(gt(n,r),"float32")),i=()=>v(e,_(kr(n,r),"float32"));return{a:o,b:i}}};function aT(e,t,n,r,o,i=[1,1,1],a,s){const c=u(e,"dy","maxPool3dBackprop"),p=u(t,"input","maxPool3dBackprop"),l=u(n,"output","maxPool3dBackprop");let h=c,d=p,g=l,x=!1;p.rank===4&&(x=!0,h=y(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]]),d=y(p,[1,p.shape[0],p.shape[1],p.shape[2],p.shape[3]]),g=y(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),f(h.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${h.rank}.`),f(d.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${d.rank}.`),f(g.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${g.rank}.`),f(le(o,i),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${o} and dilations '${i}'`),s!=null&&f(X(a),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${s} but got pad ${a}.`);const w=R=>{const A=Xt(d.shape,r,o,i,a,s);return R.maxPool3dBackprop(h,d,g,A)},L={dy:h,input:d,output:g},S={filterSize:r,strides:o,dilations:i,pad:a,dimRoundingMode:s},I=b.runKernelFunc(w,L,null,lp,S);return x?y(I,[I.shape[1],I.shape[2],I.shape[3],I.shape[4]]):I}const Xf=m({maxPool3dBackprop_:aT});const Zf={kernelName:si,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{filterSize:i,strides:a,dilations:s,pad:c,dimRoundingMode:p}=n,l=s==null?[1,1,1]:s;return{x:()=>Xf(e,r,o,i,a,l,c,p)}}};function cT(e,t,n,r,o,i,a){const s=u(e,"dy","maxPoolBackprop"),c=u(t,"input","maxPoolBackprop"),p=u(n,"output","maxPoolBackprop");f(c.rank===s.rank,()=>`Rank of input (${c.rank}) does not match rank of dy (${s.rank})`),f(s.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${s.rank}.`),f(c.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${c.rank}.`),a!=null&&f(X(i),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const l=g=>{const x=Nt(c.shape,r,o,1,i,a);return g.maxPoolBackprop(s,c,p,x)},h={dy:s,input:c,output:p},d={filterSize:r,strides:o,pad:i,dimRoundingMode:a};return b.runKernelFunc(l,h,null,pp,d)}const Qf=m({maxPoolBackprop_:cT});const eg={kernelName:ii,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{filterSize:i,strides:a,pad:s}=n;return{x:()=>Qf(e,r,o,i,a,s)}}};const tg={kernelName:ai,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{axis:o}=r,[i,a]=t,s=H(o,i.shape),c=fe(s,i.rank),p=Ka(e,a,i,s,c);return{x:()=>{let l=p.x();return c!=null&&(l=K(l)),l}}}};const ng={kernelName:ci,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=()=>v(e,_(bt(n,r),"float32")),i=()=>v(e,_(rt(n,r),"float32"));return{a:o,b:i}}};const rg={kernelName:pi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=ae(n.shape,o);return s.length>0?y(W(e,s),n.shape):e},a=()=>{const s=v(e,re(Er(D(n,r)))),c=ae(r.shape,o);return c.length>0?y(W(s,c),r.shape):s};return{a:i,b:a}}};const og={kernelName:li,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=v(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{const s=v(e,_(n,"float32")),c=ae(r.shape,o);return c.length>0?y(W(s,c),r.shape):s};return{a:i,b:a}}};const ig={kernelName:hi,gradFunc:e=>({x:()=>re(e)})};const sg={kernelName:di,inputsToSave:["indices"],gradFunc:(e,t)=>{const n=t[0];return{indices:()=>Ce(n.shape,"float32")}}};const ag={kernelName:ui,gradFunc:e=>({x:()=>B(e)})};const Nl={kernelName:mi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const r=t[0],{paddings:o}=n,i=o.map(a=>a[0]);return{x:()=>P(e,i,r.shape)}}};const cg={kernelName:fi,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{const[n,r,o]=t,i=n,a=r,s=q(i.shape,a.shape),c=()=>{const l=_(a,"float32");let h=v(e,v(l,Qe(i,k(l,C(1)))));const d=ae(i.shape,s);return d.length>0&&(h=W(h,d)),y(h,i.shape)},p=()=>{const l=rt(i,0),h=De(l,Rt(i),B(i));let d=v(e,v(o,h));const g=ae(a.shape,s);return g.length>0&&(d=W(d,g)),y(d,a.shape)};return{a:c,b:p}}};const pg={kernelName:gi,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{const[n,r]=t,o=rt(n,0);return{x:()=>De(o,e,v(e,r)),alpha:()=>{let i=De(o,B(e),v(e,n));const a=ae(r.shape,e.shape);return a.length>0&&(i=W(i,a)),y(i,r.shape)}}}};const lg={kernelName:bi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,re(z(n)))}}};const hg={kernelName:vi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=v(bt(n,6),zt(n));return{x:()=>v(e,_(r,"float32"))}}};const ug={kernelName:wi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,_(zt(n),"float32"))}}};const dg={kernelName:xi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>y(e,n.shape)}}};const mg={kernelName:Li,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,o=s=>{const{alignCorners:c}=n;return s.resizeBilinearBackprop(e,r,c)},i={images:r},a=()=>b.runKernelFunc(o,i,null,yp,n);return{images:a}}};const fg={kernelName:yi,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,o=s=>{const{alignCorners:c}=n;return s.resizeNearestNeighborBackprop(e,r,c)},i={images:r},a=()=>b.runKernelFunc(o,i,null,xp,n);return{images:a}}};const gg={kernelName:Si,gradFunc:(e,t,n)=>{const{dims:r}=n,o=H(r,e.shape);return{x:()=>et(e,o)}}};const bg={kernelName:Ii,gradFunc:e=>({x:()=>B(e)})};const wg={kernelName:Ti,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>re(D(e,v(Qe(n,1.5),2)))}}};const xg={kernelName:Ai,inputsToSave:["condition"],gradFunc:(e,t)=>{const[n]=t;return{condition:()=>_(B(n),"float32"),t:()=>v(e,_(n,e.dtype)),e:()=>v(e,_(Dr(n),e.dtype))}}};const yg={kernelName:Ni,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=rt(n,C(0)),o=C(Il),i=C(Tl),a=v(e,i),s=v(v(e,o),Te(_(n,"float32")));return De(r,a,s)}}}};const Lg={kernelName:Oi,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,v(n,k(C(1),n)))}}};const vg={kernelName:Ei,gradFunc:e=>({x:()=>B(e)})};const Sg={kernelName:_i,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(Cr(_(n,"float32")),e)}}};const Ig={kernelName:Ci,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(xa(_(n,"float32")),e)}}};const Tg={kernelName:Ri,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{begin:o,size:i}=n,a=r.shape,[s,c]=ls(r,o,i),p=[];for(let l=0;lHe(e,p)}}};const Ag={kernelName:Wi,outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{dim:o}=n,i=!0,a=v(e,r);return{logits:()=>k(a,v(W(a,[o],i),r))}}};const Ng={kernelName:ki,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,ft(n))}}};const Rl={kernelName:Mi,gradFunc:(e,t,n)=>{const{blockShape:r,paddings:o}=n;return{x:()=>Nr(e,r,o)}}};const _l={kernelName:Ui,gradFunc:(e,t,n)=>{const{axis:r}=n;return{x:()=>Z(e,r)}}};const Rg={kernelName:Di,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,v(ge(_(n,"float32")),2))}}};const _g={kernelName:vp,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,v(_(n,"float32"),2))}}};const Cg={kernelName:Bi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=C(2),i=()=>v(e,v(o,k(n,r))),a=()=>v(e,v(o,k(r,n)));return{a:i,b:a}}};const Eg={kernelName:Vi,gradFunc:e=>({x:()=>B(e)})};const Og={kernelName:$i,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{let s=e;const c=ae(n.shape,o);return c.length>0&&(s=W(s,c)),y(s,n.shape)},a=()=>{let s=e;const c=ae(r.shape,o);return c.length>0&&(s=W(s,c)),y(re(s),r.shape)};return{a:i,b:a}}};const kg={kernelName:Fi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,o=r.shape.slice(),{axis:i}=n,a=H(i,r.shape);a.forEach(p=>{o[p]=1});const s=y(e,o),c=v(s,Ct(r.shape,"float32"));return{x:()=>c}}};const Dg={kernelName:ji,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,z(Cr(n)))}}};const Fg={kernelName:Gi,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(k(C(1),z(n)),e)}}};const Mg={kernelName:Pi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{reps:o}=n,i=()=>{let a=B(r);if(r.rank===1)for(let s=0;s{const r=n,{perm:o}=r,i=Fn(o);return{x:()=>K(e,i)}}};const Wg={kernelName:zi,gradFunc:(e,t,n)=>{const r=n,{axis:o}=r;return{value:()=>Fe(e,o)}}};const Bg={kernelName:Hi,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{const[n]=t,r=()=>pT(e,n);return{x:r}}};function pT(e,t){const n=Pt(t,B(t)),r=Or(e,n);let o=gt(t,C(0,"int32"));const i=r.rank-o.rank;for(let s=0;s({x:()=>B(e)})};const lT=[Jm,Xm,Zm,Qm,ef,tf,nf,rf,of,sf,af,cf,lf,uf,df,mf,ff,gf,bf,wf,xf,Lf,yf,Sf,If,Tf,Af,Nf,Rf,_f,Cf,Ef,Of,kf,Ff,Df,Mf,Bf,$f,jf,Gf,Pf,qf,zf,Hf,Yf,Kf,Al,Al,Jf,Zf,eg,tg,ng,rg,og,ig,sg,ag,Nl,Nl,cg,pg,lg,hg,ug,dg,mg,fg,gg,bg,wg,xg,yg,Lg,vg,Sg,Ig,Tg,Ag,Ng,Rl,Rl,_l,_l,Rg,Cg,_g,Eg,Og,kg,Dg,Fg,Mg,Ug,Wg,Bg,$g];for(const e of lT)Rp(e);const Rs={};_e(Rs,{Abs:()=>ho,Acos:()=>uo,Acosh:()=>mo,AdadeltaOptimizer:()=>Pn,AdagradOptimizer:()=>qn,AdamOptimizer:()=>zn,AdamaxOptimizer:()=>Hn,Add:()=>Cn,AddN:()=>fo,All:()=>Oc,Any:()=>kc,ArgMax:()=>go,ArgMin:()=>bo,Asin:()=>wo,Asinh:()=>xo,Atan:()=>yo,Atan2:()=>vo,Atanh:()=>Lo,AvgPool:()=>So,AvgPool3D:()=>Io,AvgPool3DBackprop:()=>Fc,AvgPoolBackprop:()=>Dc,BatchMatMul:()=>To,BatchToSpaceND:()=>Ao,BroadcastTo:()=>No,Cast:()=>En,Ceil:()=>Ro,ClipByValue:()=>_o,Complex:()=>Mc,Concat:()=>Co,Conv2D:()=>Eo,Conv2DBackpropFilter:()=>Uc,Conv2DBackpropInput:()=>Oo,Conv3D:()=>ko,Conv3DBackpropFilterV2:()=>Wc,Conv3DBackpropInputV2:()=>Bc,Cos:()=>Do,Cosh:()=>Fo,CropAndResize:()=>$c,Cumsum:()=>Mo,DataStorage:()=>tT,DepthToSpace:()=>jc,DepthwiseConv2dNative:()=>Uo,DepthwiseConv2dNativeBackpropFilter:()=>Gc,DepthwiseConv2dNativeBackpropInput:()=>Pc,Diag:()=>qc,Dilation2D:()=>Wo,Dilation2DBackpropFilter:()=>Hc,Dilation2DBackpropInput:()=>zc,Div:()=>Bo,ENV:()=>Rc,Elu:()=>$o,EluGrad:()=>Yc,Environment:()=>Nc,Equal:()=>Vc,Erf:()=>jo,Exp:()=>Go,Expm1:()=>Po,FFT:()=>Kc,Fill:()=>Jc,FlipLeftRight:()=>Xc,Floor:()=>qo,FloorDiv:()=>zo,FromPixels:()=>na,FusedBatchNorm:()=>Ho,FusedConv2D:()=>oa,FusedDepthwiseConv2D:()=>ia,GatherNd:()=>Zc,GatherV2:()=>Yo,Greater:()=>Qc,GreaterEqual:()=>Vo,IFFT:()=>ep,Identity:()=>Ko,Imag:()=>tp,IsFinite:()=>Jo,IsInf:()=>Xo,IsNan:()=>Zo,KernelBackend:()=>nT,LRN:()=>ni,LRNBackprop:()=>cp,Less:()=>np,LessEqual:()=>rp,LinSpace:()=>op,Log:()=>Qo,Log1p:()=>ei,LogSoftmax:()=>ti,LogicalAnd:()=>ip,LogicalNot:()=>sp,LogicalOr:()=>ap,Max:()=>ri,MaxPool:()=>ii,MaxPool3D:()=>si,MaxPool3DBackprop:()=>lp,MaxPoolBackprop:()=>pp,MaxPoolWithArgmax:()=>hp,Maximum:()=>oi,Mean:()=>qb,Min:()=>ai,Minimum:()=>ci,Mod:()=>pi,MomentumOptimizer:()=>Yn,Multiply:()=>li,Negate:()=>hi,NonMaxSuppressionV3:()=>dp,NonMaxSuppressionV4:()=>mp,NonMaxSuppressionV5:()=>fp,NotEqual:()=>up,OP_SCOPE_SUFFIX:()=>Hp,OneHot:()=>di,OnesLike:()=>ui,Optimizer:()=>ot,PadV2:()=>mi,Pool:()=>zb,Pow:()=>fi,Prelu:()=>gi,Prod:()=>gp,RMSPropOptimizer:()=>Vn,Range:()=>bp,Rank:()=>Wp,Real:()=>wp,Reciprocal:()=>bi,Reduction:()=>be,Relu:()=>wi,Relu6:()=>vi,Reshape:()=>xi,ResizeBilinear:()=>Li,ResizeBilinearGrad:()=>yp,ResizeNearestNeighbor:()=>yi,ResizeNearestNeighborGrad:()=>xp,Reverse:()=>Si,RotateWithOffset:()=>Ap,Round:()=>Ii,Rsqrt:()=>Ti,SGDOptimizer:()=>en,ScatterNd:()=>Lp,SelectV2:()=>Ai,Selu:()=>Ni,Sigmoid:()=>Oi,Sign:()=>Ei,Sin:()=>_i,Sinh:()=>Ci,Slice:()=>Ri,Softmax:()=>Wi,Softplus:()=>ki,SpaceToBatchND:()=>Mi,SparseToDense:()=>Sp,SplitV:()=>Ui,Sqrt:()=>Di,Square:()=>vp,SquaredDifference:()=>Bi,Step:()=>Vi,StridedSlice:()=>Ip,Sub:()=>$i,Sum:()=>Fi,Tan:()=>ji,Tanh:()=>Gi,Tensor:()=>te,TensorBuffer:()=>br,Tile:()=>Pi,TopK:()=>Tp,Transpose:()=>qi,Unpack:()=>zi,UnsortedSegmentSum:()=>Hi,Variable:()=>$t,ZerosLike:()=>Yi,_FusedMatMul:()=>ra,abs:()=>Oe,acos:()=>ju,acosh:()=>Gu,add:()=>N,addN:()=>Pu,addStrict:()=>lS,all:()=>zu,any:()=>Hu,argMax:()=>Yu,argMin:()=>Vu,asin:()=>Ku,asinh:()=>Ju,atan:()=>Xu,atan2:()=>Zu,atanh:()=>Qu,avgPool:()=>mt,avgPool3d:()=>ed,backend:()=>_x,backend_util:()=>zm,basicLSTMCell:()=>td,batchNorm:()=>jt,batchNorm2d:()=>rd,batchNorm3d:()=>od,batchNorm4d:()=>id,batchToSpaceND:()=>Nr,booleanMaskAsync:()=>Gv,broadcastTo:()=>us,browser:()=>Ir,buffer:()=>Ee,cast:()=>_,ceil:()=>sd,clipByValue:()=>Rr,clone:()=>dt,complex:()=>Je,concat:()=>Z,concat1d:()=>ad,concat2d:()=>cd,concat3d:()=>pd,concat4d:()=>ld,conv1d:()=>hd,conv2d:()=>ve,conv2dTranspose:()=>ud,conv3d:()=>dd,conv3dTranspose:()=>md,cos:()=>Cr,cosh:()=>xa,cosineWindow:()=>bs,cumsum:()=>ya,customGrad:()=>ze,deprecationWarn:()=>ye,depthToSpace:()=>fd,depthwiseConv2d:()=>wn,device_util:()=>du,diag:()=>gd,dilation2d:()=>bd,disableDeprecationWarnings:()=>bx,dispose:()=>Le,disposeVariables:()=>wx,div:()=>D,divNoNan:()=>wd,divStrict:()=>hS,dot:()=>xd,dropout:()=>_S,elu:()=>La,enableDebugMode:()=>gx,enableProdMode:()=>fx,enclosingPowerOfTwo:()=>Ll,engine:()=>xx,env:()=>pe,equal:()=>xn,equalStrict:()=>Kv,erf:()=>yd,exp:()=>Te,expandDims:()=>nt,expm1:()=>Ld,eye:()=>va,fft:()=>Br,fill:()=>qe,findBackend:()=>Ax,findBackendFactory:()=>Nx,floor:()=>Er,floorDiv:()=>fa,fused:()=>bm,gather:()=>Or,gatherND:()=>NS,gather_util:()=>Au,getBackend:()=>wc,getGradient:()=>sa,getKernel:()=>Ji,getKernelsForBackend:()=>aa,grad:()=>lL,grads:()=>hL,greater:()=>rt,greaterEqual:()=>gt,greaterEqualStrict:()=>Jv,greaterStrict:()=>Xv,ifft:()=>Wn,imag:()=>yn,image:()=>Sl,inTopKAsync:()=>ES,io:()=>vr,irfft:()=>Wa,isFinite:()=>Sd,isInf:()=>Id,isNaN:()=>Td,keep:()=>ll,kernel_impls:()=>Km,leakyRelu:()=>Ad,less:()=>kr,lessEqual:()=>bt,lessEqualStrict:()=>Zv,lessStrict:()=>Qv,linalg:()=>SI,linspace:()=>Nd,localResponseNormalization:()=>Rd,log:()=>Rt,log1p:()=>Ia,logSigmoid:()=>_d,logSoftmax:()=>Cd,logSumExp:()=>Na,logicalAnd:()=>_t,logicalNot:()=>Dr,logicalOr:()=>Ra,logicalXor:()=>Ed,losses:()=>II,matMul:()=>V,math:()=>Tu,max:()=>qt,maxPool:()=>Re,maxPool3d:()=>Od,maxPoolWithArgmax:()=>kd,maximum:()=>Pt,maximumStrict:()=>uS,mean:()=>Un,memory:()=>yx,min:()=>ds,minimum:()=>Fr,minimumStrict:()=>dS,mod:()=>_a,modStrict:()=>mS,moments:()=>Dd,movingAverage:()=>LS,mul:()=>v,mulStrict:()=>fS,multiRNNCell:()=>Fd,multinomial:()=>Md,neg:()=>re,nextFrame:()=>NI,norm:()=>gs,notEqual:()=>Mr,notEqualStrict:()=>eS,oneHot:()=>cs,ones:()=>Ct,onesLike:()=>xl,op:()=>m,outerProduct:()=>Ud,pad:()=>He,pad1d:()=>Wd,pad2d:()=>Bd,pad3d:()=>$d,pad4d:()=>jd,pool:()=>Gd,pow:()=>Qe,powStrict:()=>gS,prelu:()=>Ca,print:()=>da,prod:()=>Pd,profile:()=>Lx,rand:()=>qd,randomGamma:()=>Yd,randomNormal:()=>Vd,randomUniform:()=>Oa,range:()=>fs,ready:()=>Ix,real:()=>Zt,reciprocal:()=>Kd,registerBackend:()=>Rx,registerGradient:()=>Rp,registerKernel:()=>Hb,relu:()=>ie,relu6:()=>ka,removeBackend:()=>Tx,reshape:()=>y,reverse:()=>et,reverse1d:()=>Jd,reverse2d:()=>Xd,reverse3d:()=>Zd,reverse4d:()=>Qd,rfft:()=>$r,round:()=>em,rsqrt:()=>Da,scalar:()=>C,scatterND:()=>SS,scatter_util:()=>Ru,selu:()=>tm,separableConv2d:()=>Wr,serialization:()=>Wu,setBackend:()=>Sx,setPlatform:()=>Cx,setdiff1dAsync:()=>nm,sigmoid:()=>ft,sign:()=>rm,signal:()=>vI,sin:()=>Fa,sinh:()=>Ma,slice:()=>P,slice1d:()=>om,slice2d:()=>im,slice3d:()=>Ua,slice4d:()=>sm,slice_util:()=>nl,softmax:()=>Ln,softplus:()=>Aa,spaceToBatchND:()=>Ur,sparseToDense:()=>TS,spectral:()=>LI,split:()=>Qt,sqrt:()=>ge,square:()=>z,squaredDifference:()=>jr,squaredDifferenceStrict:()=>bS,squeeze:()=>Gr,stack:()=>Fe,step:()=>zt,stridedSlice:()=>am,sub:()=>k,subStrict:()=>wS,sum:()=>W,sumOutType:()=>mw,tan:()=>cm,tanh:()=>hs,tensor:()=>Xe,tensor1d:()=>ce,tensor2d:()=>wt,tensor3d:()=>Sr,tensor4d:()=>xt,tensor5d:()=>pm,tensor6d:()=>lm,tensor_util:()=>lu,test_util:()=>Bu,tidy:()=>O,tile:()=>Gt,time:()=>vx,topk:()=>hm,train:()=>TI,transpose:()=>K,truncatedNormal:()=>um,unregisterGradient:()=>Vb,unregisterKernel:()=>Yb,unsortedSegmentSum:()=>Ba,unstack:()=>Ae,upcastType:()=>xr,util:()=>Kh,valueAndGrad:()=>uL,valueAndGrads:()=>dL,variable:()=>dm,variableGrads:()=>wl,version_core:()=>xc,where:()=>De,whereAsync:()=>ja,zeros:()=>Ce,zerosLike:()=>B});function tn(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:r,y:o},i)=>{const a=t[i];e.moveTo(a.x,a.y),e.lineTo(r,o)}),n){const r=t[t.length-1],o=t[0];if(!r||!o)return;e.moveTo(r.x,r.y),e.lineTo(o.x,o.y)}e.stroke()}class Ke{constructor(e,t){if(!Et(e)||!Et(t))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:e,height:t})}`);this._width=e,this._height=t}get width(){return this._width}get height(){return this._height}reverse(){return new Ke(1/this.width,1/this.height)}}const Cs={};_e(Cs,{computeReshapedDimensions:()=>Ol,getCenterPoint:()=>Xn,isDimensions:()=>Xa,isEven:()=>Ja,isFloat:()=>El,isTensor:()=>Kn,isTensor1D:()=>hT,isTensor2D:()=>Cl,isTensor3D:()=>nn,isTensor4D:()=>pt,isValidNumber:()=>Et,isValidProbablitiy:()=>qr,range:()=>Ht,round:()=>Jn});function Kn(e,t){return e instanceof te&&e.shape.length===t}function hT(e){return Kn(e,1)}function Cl(e){return Kn(e,2)}function nn(e){return Kn(e,3)}function pt(e){return Kn(e,4)}function El(e){return e%1!==0}function Ja(e){return e%2===0}function Jn(e,t=2){const n=Math.pow(10,t);return Math.floor(e*n)/n}function Xa(e){return e&&e.width&&e.height}function Ol({width:e,height:t},n){const r=n/Math.max(t,e);return new Ke(Math.round(e*r),Math.round(t*r))}function Xn(e){return e.reduce((t,n)=>t.add(n),new J(0,0)).div(new J(e.length,e.length))}function Ht(e,t,n){return Array(e).fill(0).map((r,o)=>t+o*n)}function Et(e){return!!e&&e!==Infinity&&e!==-Infinity&&!isNaN(e)||e===0}function qr(e){return Et(e)&&0<=e&&e<=1}class J{constructor(e,t){this._x=e,this._y=t}get x(){return this._x}get y(){return this._y}add(e){return new J(this.x+e.x,this.y+e.y)}sub(e){return new J(this.x-e.x,this.y-e.y)}mul(e){return new J(this.x*e.x,this.y*e.y)}div(e){return new J(this.x/e.x,this.y/e.y)}abs(){return new J(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}floor(){return new J(Math.floor(this.x),Math.floor(this.y))}}class de{constructor(e,t=!0){const n=e||{},r=[n.left,n.top,n.right,n.bottom].every(Et),o=[n.x,n.y,n.width,n.height].every(Et);if(!o&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(n)}`);const[i,a,s,c]=o?[n.x,n.y,n.width,n.height]:[n.left,n.top,n.right-n.left,n.bottom-n.top];de.assertIsValidBox({x:i,y:a,width:s,height:c},"Box.constructor",t),this._x=i,this._y=a,this._width=s,this._height=c}static isRect(e){return!!e&&[e.x,e.y,e.width,e.height].every(Et)}static assertIsValidBox(e,t,n=!1){if(!de.isRect(e))throw new Error(`${t} - invalid box: ${JSON.stringify(e)}, expected object with properties x, y, width, height`);if(!n&&(e.width<0||e.height<0))throw new Error(`${t} - width (${e.width}) and height (${e.height}) must be positive numbers`)}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 J(this.left,this.top)}get topRight(){return new J(this.right,this.top)}get bottomLeft(){return new J(this.left,this.bottom)}get bottomRight(){return new J(this.right,this.bottom)}round(){const[e,t,n,r]=[this.x,this.y,this.width,this.height].map(o=>Math.round(o));return new de({x:e,y:t,width:n,height:r})}floor(){const[e,t,n,r]=[this.x,this.y,this.width,this.height].map(o=>Math.floor(o));return new de({x:e,y:t,width:n,height:r})}toSquare(){let{x:e,y:t,width:n,height:r}=this;const o=Math.abs(n-r);return nt&&(a=-l+t+n,l=t),h>e&&(s=-h+e+r,h=e),c<1&&(s=2-c,c=1),p<1&&(s=2-p,p=1),{dy:i,edy:s,dx:o,edx:a,y:p,ey:h,x:c,ex:l,w:n,h:r}}calibrate(e){return new de({left:this.left+e.left*this.width,top:this.top+e.top*this.height,right:this.right+e.right*this.width,bottom:this.bottom+e.bottom*this.height}).toSquare().round()}}class hr extends de{constructor(e,t,n,r,o=!1){super({left:e,top:t,right:n,bottom:r},o)}}class _n{constructor(e,t,n,r,o){this._imageDims=new Ke(o.width,o.height),this._score=e,this._classScore=t,this._className=n,this._box=new de(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 de(this._box).rescale(this.imageDims.reverse())}forSize(e,t){return new _n(this.score,this.classScore,this.className,this.relativeBox,{width:e,height:t})}}class me extends _n{constructor(e,t,n){super(e,e,"",t,n)}forSize(e,t){const{score:n,relativeBox:r,imageDims:o}=super.forSize(e,t);return new me(n,r,o)}}function Us(e,t,n=!0){const r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),o=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),i=r*o;return n?i/(e.area+t.area-i):i/Math.min(e.area,t.area)}function Ms(e){const t=e.map(s=>s.x),n=e.map(s=>s.y),r=t.reduce((s,c)=>ccss({score:a,boxIndex:s})).sort((a,s)=>a.score-s.score).map(a=>a.boxIndex);const i=[];for(;o.length>0;){const a=o.pop();i.push(a);const s=o,c=[];for(let p=0;pc[l]<=n)}return i}function ht(e,t){return O(()=>{const[n,r,o]=t,i=qe([...e.shape.slice(0,3),1],n),a=qe([...e.shape.slice(0,3),1],r),s=qe([...e.shape.slice(0,3),1],o),c=Z([i,a,s],3);return k(e,c)})}function Ds(e,t=!1){return O(()=>{const[n,r]=e.shape.slice(1);if(n===r)return e;const o=Math.abs(n-r),i=Math.round(o*(t?.5:1)),a=n>r?2:1,s=d=>{const g=e.shape.slice();return g[a]=d,qe(g,0)},c=s(i),p=o-c.shape[a],l=t&&p?s(p):null,h=[l,e,c].filter(d=>!!d).map(d=>_(d,"float32"));return Z(h,a)})}function gh(e){const t=e.slice();for(let n=t.length-1;n>0;n--){const r=Math.floor(Math.random()*(n+1)),o=t[n];t[n]=t[r],t[r]=o}return t}function or(e){return 1/(1+Math.exp(-e))}function bh(e){return Math.log(e/(1-e))}class pr extends de{constructor(e,t,n,r,o=!1){super({x:e,y:t,width:n,height:r},o)}}const uT=.5,dT=.43,mT=.45;class st{constructor(e,t,n=new J(0,0)){const{width:r,height:o}=t;this._imgDims=new Ke(r,o),this._shift=n,this._positions=e.map(i=>i.mul(new J(r,o)).add(n))}get shift(){return new J(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(e=>e.sub(this._shift).div(new J(this.imageWidth,this.imageHeight)))}forSize(e,t){return new this.constructor(this.relativePositions,{width:e,height:t})}shiftBy(e,t){return new this.constructor(this.relativePositions,this._imgDims,new J(e,t))}shiftByPoint(e){return this.shiftBy(e.x,e.y)}align(e,t={}){if(e){const o=e instanceof me?e.box.floor():new de(e);return this.shiftBy(o.x,o.y).align(null,t)}const{useDlibAlignment:n,minBoxPadding:r}=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},t);return n?this.alignDlib():this.alignMinBbox(r)}alignDlib(){const e=this.getRefPointsForAlignment(),[t,n,r]=e,o=l=>r.sub(l).magnitude(),i=(o(t)+o(n))/2,a=Math.floor(i/mT),s=Xn(e),c=Math.floor(Math.max(0,s.x-uT*a)),p=Math.floor(Math.max(0,s.y-dT*a));return new pr(c,p,Math.min(a,this.imageWidth+c),Math.min(a,this.imageHeight+p))}alignMinBbox(e){const t=Ms(this.positions);return t.pad(t.width*e,t.height*e)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}}class zh extends st{getRefPointsForAlignment(){const e=this.positions;return[e[0],e[1],Xn([e[3],e[4]])]}}class lr extends st{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(Xn)}}class lo{constructor(e,t){this._label=e,this._distance=t}get label(){return this._label}get distance(){return this._distance}toString(e=!0){return`${this.label}${e?` (${Jn(this.distance)})`:""}`}}class po extends de{constructor(e,t){super(e);this._label=t}static assertIsValidLabeledBox(e,t){if(de.assertIsValidBox(e,t),!Et(e.label))throw new Error(`${t} - expected property label (${e.label}) to be a number`)}get label(){return this._label}}class fn{constructor(e,t){if(!(typeof e=="string"))throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(t)||t.some(n=>!(n instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=e,this._descriptors=t}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(e=>Array.from(e))}}static fromJSON(e){const t=e.descriptors.map(n=>new Float32Array(n));return new fn(e.label,t)}}class qh extends po{constructor(e,t,n,r){super(e,t);this._score=n,this._classScore=r}static assertIsValidPredictedBox(e,t){if(po.assertIsValidLabeledBox(e,t),!qr(e.score)||!qr(e.classScore))throw new Error(`${t} - expected properties score (${e.score}) and (${e.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}}function It(e){return e.detection instanceof me}function ln(e,t){const n={detection:t};return Object.assign({},e,n)}function kl(){const e=window.fetch||function(){throw new Error("fetch - missing fetch implementation for browser environment")},t=function(){throw new Error("readFile - filesystem not available for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),fetch:e,readFile:t}}function Za(e){let t="";if(!e)try{e=require("fs")}catch(r){t=r.toString()}const n=e?function(r){return new Promise((o,i)=>{e.readFile(r,function(a,s){return a?i(a):o(s)})})}:function(){throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)};return{readFile:n}}function Dl(){const e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=function(){if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=function(){if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},o=global.fetch||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},i=Za();return As({Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:n,createImageElement:r,fetch:o},i)}function Fl(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}const Ml=zl(ph());let Me;function fT(){if(!Me)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return Me}function Ul(e){Me=e}function Wl(){if(Fl())return Ul(kl());if(Ml.isNodejs())return Ul(Dl())}function gT(e){if(Me||Wl(),!Me)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");const{Canvas:t=Me.Canvas,Image:n=Me.Image}=e;Me.Canvas=t,Me.Image=n,Me.createCanvasElement=e.createCanvasElement||(()=>new t),Me.createImageElement=e.createImageElement||(()=>new n),Me.ImageData=e.ImageData||Me.ImageData,Me.Video=e.Video||Me.Video,Me.fetch=e.fetch||Me.fetch,Me.readFile=e.readFile||Me.readFile}const se={getEnv:fT,setEnv:Ul,initialize:Wl,createBrowserEnv:kl,createFileSystem:Za,createNodejsEnv:Dl,monkeyPatch:gT,isBrowser:Fl,isNodejs:Ml.isNodejs};Wl();function un(e){return!se.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Ge(e){const{Canvas:t,CanvasRenderingContext2D:n}=se.getEnv();if(e instanceof n)return e;const r=un(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");const o=r.getContext("2d");if(!o)throw new Error("resolveContext2d - canvas 2d context is null");return o}var Yt;(function(e){e.TOP_LEFT="TOP_LEFT",e.TOP_RIGHT="TOP_RIGHT",e.BOTTOM_LEFT="BOTTOM_LEFT",e.BOTTOM_RIGHT="BOTTOM_RIGHT"})(Yt||(Yt={}));class Qa{constructor(e={}){const{anchorPosition:t,backgroundColor:n,fontColor:r,fontSize:o,fontStyle:i,padding:a}=e;this.anchorPosition=t||Yt.TOP_LEFT,this.backgroundColor=n||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=o||14,this.fontStyle=i||"Georgia",this.padding=a||4}}class zr{constructor(e,t,n={}){this.text=typeof e=="string"?[e]:e instanceof zr?e.text:e,this.anchor=t,this.options=new Qa(n)}measureWidth(e){const{padding:t}=this.options;return this.text.map(n=>e.measureText(n).width).reduce((n,r)=>n{const g=s+l.x,x=s+l.y+(d+1)*i;n.fillText(h,g,x)})}}class jg{constructor(e={}){const{boxColor:t,lineWidth:n,label:r,drawLabelOptions:o}=e;this.boxColor=t||"rgba(0, 0, 255, 1)",this.lineWidth=n||2,this.label=r;const i={anchorPosition:Yt.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Qa(Object.assign({},i,o))}}class Bl{constructor(e,t={}){this.box=new de(e),this.options=new jg(t)}draw(e){const t=Ge(e),{boxColor:n,lineWidth:r}=this.options,{x:o,y:i,width:a,height:s}=this.box;t.strokeStyle=n,t.lineWidth=r,t.strokeRect(o,i,a,s);const{label:c}=this.options;c&&new zr([c],{x:o-r/2,y:i},this.options.drawLabelOptions).draw(e)}}function bT(e,t){const n=Array.isArray(t)?t:[t];n.forEach(r=>{const o=r instanceof me?r.score:It(r)?r.detection.score:void 0,i=r instanceof me?r.box:It(r)?r.detection.box:new de(r),a=o?`${Jn(o)}`:void 0;new Bl(i,{label:a}).draw(e)})}function ar(e){const{Image:t,Video:n}=se.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function ea(e){return new Promise((t,n)=>{if(e instanceof se.getEnv().Canvas||ar(e))return t(null);function r(i){if(!i.currentTarget)return;i.currentTarget.removeEventListener("load",r),i.currentTarget.removeEventListener("error",o),t(i)}function o(i){if(!i.currentTarget)return;i.currentTarget.removeEventListener("load",r),i.currentTarget.removeEventListener("error",o),n(i)}e.addEventListener("load",r),e.addEventListener("error",o)})}function Qs(e){return new Promise((t,n)=>{if(!(e instanceof Blob))return n("bufferToImage - expected buf to be of type: Blob");const r=new FileReader;r.onload=()=>{if(typeof r.result!="string")return n("bufferToImage - expected reader.result to be a string, in onload");const o=se.getEnv().createImageElement();o.onload=()=>t(o),o.onerror=n,o.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function dn(e){const{Image:t,Video:n}=se.getEnv();return e instanceof t?new Ke(e.naturalWidth,e.naturalHeight):e instanceof n?new Ke(e.videoWidth,e.videoHeight):new Ke(e.width,e.height)}function Rn({width:e,height:t}){const{createCanvasElement:n}=se.getEnv(),r=n();return r.width=e,r.height=t,r}function cr(e,t){const{ImageData:n}=se.getEnv();if(!(e instanceof n)&&!ar(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");const{width:r,height:o}=t||dn(e),i=Rn({width:r,height:o});return e instanceof n?Ge(i).putImageData(e,0,0):Ge(i).drawImage(e,0,0,r,o),i}async function Xs(e,t){const n=t||se.getEnv().createCanvasElement(),[r,o,i]=e.shape.slice(pt(e)?1:0),a=O(()=>e.as3D(r,o,i).toInt());return await Ir.toPixels(a,n),a.dispose(),n}function co(e){const{Image:t,Canvas:n,Video:r}=se.getEnv();return e instanceof t||e instanceof n||e instanceof r}function Js(e,t,n=!1){const{Image:r,Canvas:o}=se.getEnv();if(!(e instanceof r||e instanceof o))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const i=dn(e),a=t/Math.max(i.height,i.width),s=a*i.width,c=a*i.height,p=Rn({width:t,height:t}),l=e instanceof o?e:cr(e),h=Math.abs(s-c)/2,d=n&&s{if(nn(n)){this._imageTensors[r]=n,this._inputDimensions[r]=n.shape;return}if(pt(n)){const i=n.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=n,this._inputDimensions[r]=n.shape.slice(1);return}const o=n instanceof se.getEnv().Canvas?n:cr(n);this._canvases[r]=o,this._inputDimensions[r]=[o.height,o.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 Ht(this.batchSize,0,1).map((e,t)=>this.getReshapedInputDimensions(t))}getInput(e){return this.canvases[e]||this.imageTensors[e]}getInputDimensions(e){return this._inputDimensions[e]}getInputHeight(e){return this._inputDimensions[e][0]}getInputWidth(e){return this._inputDimensions[e][1]}getReshapedInputDimensions(e){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const t=this.getInputWidth(e),n=this.getInputHeight(e);return Ol({width:t,height:n},this.inputSize)}toBatchTensor(e,t=!0){return this._inputSize=e,O(()=>{const n=Ht(this.batchSize,0,1).map(o=>{const i=this.getInput(o);if(i instanceof te){let a=pt(i)?i:i.expandDims();return a=Ds(a,t),(a.shape[1]!==e||a.shape[2]!==e)&&(a=Sl.resizeBilinear(a,[e,e])),a.as3D(e,e,3)}if(i instanceof se.getEnv().Canvas)return Ir.fromPixels(Js(i,e,t));throw new Error(`toBatchTensor - at batchIdx ${o}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)}),r=Fe(n.map(o=>_(o,"float32"))).as4D(this.batchSize,e,e,3);return r})}}async function ue(e){if(e instanceof Vt)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");const n=o=>Array.isArray(e)?` at input index ${o}:`:"",r=t.map(un);return r.forEach((o,i)=>{if(!co(o)&&!nn(o)&&!pt(o))throw typeof t[i]=="string"?new Error(`toNetInput -${n(i)} string passed, but could not resolve HTMLElement for element id ${t[i]}`):new Error(`toNetInput -${n(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(pt(o)){const a=o.shape[0];if(a!==1)throw new Error(`toNetInput -${n(i)} tf.Tensor4D with batchSize ${a} passed, but not supported in input array`)}}),await Promise.all(r.map(o=>co(o)&&ea(o))),new Vt(r,Array.isArray(e))}async function An(e,t){const{Canvas:n}=se.getEnv();let r=e;if(!(e instanceof n)){const a=await ue(e);if(a.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const s=a.getInput(0);r=s instanceof n?s:await Xs(s)}const o=Ge(r),i=t.map(a=>a instanceof me?a.forSize(r.width,r.height).box.floor():a).map(a=>a.clipAtImageBorders(r.width,r.height));return i.map(({x:a,y:s,width:c,height:p})=>{const l=Rn({width:c,height:p});return Ge(l).putImageData(o.getImageData(a,s,c,p),0,0),l})}async function Nn(e,t){if(!nn(e)&&!pt(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(pt(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{const[n,r,o]=e.shape.slice(pt(e)?1:0),i=t.map(s=>s instanceof me?s.forSize(r,n).box:s).map(s=>s.clipAtImageBorders(r,n)),a=i.map(({x:s,y:c,width:p,height:l})=>Ua(e.as3D(n,r,o),[c,s,0],[l,p,o]));return a})}async function mn(e,t){const n=se.getEnv().fetch,r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Ph(e){const t=await mn(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 Qs(n)}async function Zs(e){return(await mn(e)).json()}async function Gh(e){return new Float32Array(await(await mn(e)).arrayBuffer())}function ec(e,t){const n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};const r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(r,"");const o=e.split("/").filter(s=>s),i=e.endsWith(".json")?o[o.length-1]:n;let a=r+(e.endsWith(".json")?o.slice(0,o.length-1):o).join("/");return a=e.startsWith("/")?`/${a}`:a,{modelBaseUri:a,manifestUri:a==="/"?`/${i}`:`${a}/${i}`}}async function Ks(e,t){const{manifestUri:n,modelBaseUri:r}=ec(e,t);let o=await Zs(n);return vr.loadWeights(o,r)}function jh(e,t,n=!1){const{width:r,height:o}=n?dn(t):t;return e.width=r,e.height=o,{width:r,height:o}}class We{constructor(e){this._name=e,this._params=void 0,this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(e){const{obj:t,objProp:n}=this.traversePropertyPath(e);return t[n]}reassignParamFromPath(e,t){const{obj:n,objProp:r}=this.traversePropertyPath(e);n[r].dispose(),n[r]=t}getParamList(){return this._paramMappings.map(({paramPath:e})=>({path:e,tensor:this.getParamFromPath(e)}))}getTrainableParams(){return this.getParamList().filter(e=>e.tensor instanceof $t)}getFrozenParams(){return this.getParamList().filter(e=>!(e.tensor instanceof $t))}variable(){this.getFrozenParams().forEach(({path:e,tensor:t})=>{this.reassignParamFromPath(e,t.variable())})}freeze(){this.getTrainableParams().forEach(({path:e,tensor:t})=>{const n=Xe(t.dataSync());t.dispose(),this.reassignParamFromPath(e,n)})}dispose(e=!0){this.getParamList().forEach(t=>{if(e&&t.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${t.path}`);t.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:e})=>Array.from(e.dataSync())).reduce((e,t)=>e.concat(t)))}async load(e){if(e instanceof Float32Array){this.extractWeights(e);return}await this.loadFromUri(e)}async loadFromUri(e){if(e&&typeof e!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const t=await Ks(e,this.getDefaultModelName());this.loadFromWeightMap(t)}async loadFromDisk(e){if(e&&typeof e!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:t}=se.getEnv(),{manifestUri:n,modelBaseUri:r}=ec(e,this.getDefaultModelName()),o=c=>Promise.all(c.map(p=>t(p).then(l=>l.buffer))),i=vr.weightsLoaderFactory(o),a=JSON.parse((await t(n)).toString()),s=await i(a,r);this.loadFromWeightMap(s)}loadFromWeightMap(e){const{paramMappings:t,params:n}=this.extractParamsFromWeigthMap(e);this._paramMappings=t,this._params=n}extractWeights(e){const{paramMappings:t,params:n}=this.extractParams(e);this._paramMappings=t,this._params=n}traversePropertyPath(e){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const t=e.split("/").reduce((o,i)=>{if(!o.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${e}`);return{obj:o.nextObj,objProp:i,nextObj:o.nextObj[i]}},{nextObj:this.params}),{obj:n,objProp:r}=t;if(!n||!r||!(n[r]instanceof te))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${e}`);return{obj:n,objProp:r}}}function tt(e,t,n){return O(()=>{let r=Wr(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=N(r,t.bias),r})}function tc(e,t,n=!1){return O(()=>{const r=ie(n?N(ve(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):tt(e,t.conv0,[2,2])),o=tt(r,t.conv1,[1,1]),i=ie(N(r,o)),a=tt(i,t.conv2,[1,1]);return ie(N(r,N(o,a)))})}function ws(e,t,n=!1,r=!0){return O(()=>{const o=ie(n?N(ve(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):tt(e,t.conv0,r?[2,2]:[1,1])),i=tt(o,t.conv1,[1,1]),a=ie(N(o,i)),s=tt(a,t.conv2,[1,1]),c=ie(N(o,N(i,s))),p=tt(c,t.conv3,[1,1]);return ie(N(o,N(i,N(s,p))))})}function Zn(e,t,n="same",r=!1){return O(()=>{const o=N(ve(e,t.filters,[1,1],n),t.bias);return r?ie(o):o})}function Ye(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function Hr(e,t){return function(n,r,o,i){const a=xt(e(n*r*o*o),[o,o,n,r]),s=ce(e(r));return t.push({paramPath:`${i}/filters`},{paramPath:`${i}/bias`}),{filters:a,bias:s}}}function nc(e,t){return function(n,r,o){const i=wt(e(n*r),[n,r]),a=ce(e(r));return t.push({paramPath:`${o}/weights`},{paramPath:`${o}/bias`}),{weights:i,bias:a}}}class $l{constructor(e,t,n){this.depthwise_filter=e,this.pointwise_filter=t,this.bias=n}}function Yr(e,t){return function(n,r,o){const i=xt(e(3*3*n),[3,3,n,1]),a=xt(e(n*r),[1,1,n,r]),s=ce(e(r));return t.push({paramPath:`${o}/depthwise_filter`},{paramPath:`${o}/pointwise_filter`},{paramPath:`${o}/bias`}),new $l(i,a,s)}}function Vr(e){return function(t){const n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),o=e(`${t}/bias`,1);return new $l(n,r,o)}}function it(e,t){return function(n,r,o){const i=e[n];if(!Kn(i,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${i}`);return t.push({originalPath:n,paramPath:o||n}),i}}function Ve(e){let t=e;function n(o){const i=t.slice(0,o);return t=t.slice(o),i}function r(){return t}return{extractWeights:n,getRemainingWeights:r}}function rc(e,t){const n=Hr(e,t),r=Yr(e,t);function o(a,s,c,p=!1){const l=p?n(a,s,3,`${c}/conv0`):r(a,s,`${c}/conv0`),h=r(s,s,`${c}/conv1`),d=r(s,s,`${c}/conv2`);return{conv0:l,conv1:h,conv2:d}}function i(a,s,c,p=!1){const{conv0:l,conv1:h,conv2:d}=o(a,s,c,p),g=r(s,s,`${c}/conv3`);return{conv0:l,conv1:h,conv2:d,conv3:g}}return{extractDenseBlock3Params:o,extractDenseBlock4Params:i}}function Gg(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractDenseBlock4Params:o}=rc(n,t),i=o(3,32,"dense0",!0),a=o(32,64,"dense1"),s=o(64,128,"dense2"),c=o(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:i,dense1:a,dense2:s,dense3:c}}}function oc(e){return function(t){const n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function ic(e,t){const n=it(e,t),r=oc(n),o=Vr(n);function i(s,c=!1){const p=c?r(`${s}/conv0`):o(`${s}/conv0`),l=o(`${s}/conv1`),h=o(`${s}/conv2`);return{conv0:p,conv1:l,conv2:h}}function a(s,c=!1){const p=c?r(`${s}/conv0`):o(`${s}/conv0`),l=o(`${s}/conv1`),h=o(`${s}/conv2`),d=o(`${s}/conv3`);return{conv0:p,conv1:l,conv2:h,conv3:d}}return{extractDenseBlock3Params:i,extractDenseBlock4Params:a}}function Pg(e){const t=[],{extractDenseBlock4Params:n}=ic(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return Ye(e,t),{params:r,paramMappings:t}}class sc extends We{constructor(){super("FaceFeatureExtractor")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(255));let i=ws(o,t.dense0,!0);return i=ws(i,t.dense1),i=ws(i,t.dense2),i=ws(i,t.dense3),i=mt(i,[7,7],[2,2],"valid"),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(e){return Pg(e)}extractParams(e){return Gg(e)}}function xs(e,t){return O(()=>N(V(e,t.weights),t.bias))}function qg(e,t,n){const r=[],{extractWeights:o,getRemainingWeights:i}=Ve(e),a=nc(o,r),s=a(t,n,"fc");if(i().length!==0)throw new Error(`weights remaing after extract: ${i().length}`);return{paramMappings:r,params:{fc:s}}}function zg(e){const t=[],n=it(e,t);function r(i){const a=n(`${i}/weights`,2),s=n(`${i}/bias`,1);return{weights:a,bias:s}}const o={fc:r("fc")};return Ye(e,t),{params:o,paramMappings:t}}function ac(e){const t={},n={};return Object.keys(e).forEach(r=>{const o=r.startsWith("fc")?n:t;o[r]=e[r]}),{featureExtractorMap:t,classifierMap:n}}class cc extends We{constructor(e,t){super(e);this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){const{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return O(()=>{const n=e instanceof Vt?this.faceFeatureExtractor.forwardInput(e):e;return xs(n.as2D(n.shape[0],-1),t.fc)})}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){const{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return qg(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(e){const{featureExtractorMap:t,classifierMap:n}=ac(e);return this.faceFeatureExtractor.loadFromWeightMap(t),zg(n)}extractParams(e){const t=this.getClassifierChannelsIn(),n=this.getClassifierChannelsOut(),r=n*t+n,o=e.slice(0,e.length-r),i=e.slice(e.length-r);return this.faceFeatureExtractor.extractWeights(o),this.extractClassifierParams(i)}}const Hs=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class hn{constructor(e){if(e.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${e.length}`);Hs.forEach((t,n)=>{this[t]=e[n]})}asSortedArray(){return Hs.map(e=>({expression:e,probability:this[e]})).sort((e,t)=>t.probability-e.probability)}}class Ys extends cc{constructor(e=new sc){super("FaceExpressionNet",e)}forwardInput(e){return O(()=>Ln(this.runNet(e)))}async forward(e){return this.forwardInput(await ue(e))}async predictExpressions(e){const t=await ue(e),n=await this.forwardInput(t),r=await Promise.all(Ae(n).map(async i=>{const a=await i.data();return i.dispose(),a}));n.dispose();const o=r.map(i=>new hn(i));return t.isBatchInput?o:o[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function qs(e){return e.expressions instanceof hn}function io(e,t){const n={expressions:t};return Object.assign({},e,n)}function wT(e,t,n=.1,r){const o=Array.isArray(t)?t:[t];o.forEach(i=>{const a=i instanceof hn?i:qs(i)?i.expressions:void 0;if(!a)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const s=a.asSortedArray(),c=s.filter(h=>h.probability>n),p=It(i)?i.detection.box.bottomLeft:r||new J(0,0),l=new zr(c.map(h=>`${h.expression} (${Jn(h.probability)})`),p);l.draw(e)})}function pn(e){return It(e)&&e.landmarks instanceof st&&e.unshiftedLandmarks instanceof st&&e.alignedRect instanceof me}function Tn(e,t){const{box:n}=e.detection,r=t.shiftBy(n.x,n.y),o=r.align(),{imageDims:i}=e.detection,a=new me(e.detection.score,o.rescale(i.reverse()),i),s={landmarks:r,unshiftedLandmarks:t,alignedRect:a};return Object.assign({},e,s)}class Hg{constructor(e={}){const{drawLines:t=!0,drawPoints:n=!0,lineWidth:r,lineColor:o,pointSize:i,pointColor:a}=e;this.drawLines=t,this.drawPoints=n,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=o||"rgba(0, 255, 255, 1)",this.pointColor=a||"rgba(255, 0, 255, 1)"}}class Yg{constructor(e,t={}){this.faceLandmarks=e,this.options=new Hg(t)}draw(e){const t=Ge(e),{drawLines:n,drawPoints:r,lineWidth:o,lineColor:i,pointSize:a,pointColor:s}=this.options;if(n&&this.faceLandmarks instanceof lr&&(t.strokeStyle=i,t.lineWidth=o,tn(t,this.faceLandmarks.getJawOutline()),tn(t,this.faceLandmarks.getLeftEyeBrow()),tn(t,this.faceLandmarks.getRightEyeBrow()),tn(t,this.faceLandmarks.getNose()),tn(t,this.faceLandmarks.getLeftEye(),!0),tn(t,this.faceLandmarks.getRightEye(),!0),tn(t,this.faceLandmarks.getMouth(),!0)),r){t.strokeStyle=s,t.fillStyle=s;const c=p=>{t.beginPath(),t.arc(p.x,p.y,a,0,2*Math.PI),t.fill()};this.faceLandmarks.positions.forEach(c)}}}function xT(e,t){const n=Array.isArray(t)?t:[t];n.forEach(r=>{const o=r instanceof st?r:pn(r)?r.landmarks:void 0;if(!o)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new Yg(o).draw(e)})}const _s={};_e(_s,{AnchorPosition:()=>Yt,DrawBox:()=>Bl,DrawBoxOptions:()=>jg,DrawFaceLandmarks:()=>Yg,DrawFaceLandmarksOptions:()=>Hg,DrawTextField:()=>zr,DrawTextFieldOptions:()=>Qa,drawContour:()=>tn,drawDetections:()=>bT,drawFaceExpressions:()=>wT,drawFaceLandmarks:()=>xT});function yT(e,t){const n=Hr(e,t),r=Yr(e,t);function o(a,s,c){const p=r(a,s,`${c}/separable_conv0`),l=r(s,s,`${c}/separable_conv1`),h=n(a,s,1,`${c}/expansion_conv`);return{separable_conv0:p,separable_conv1:l,expansion_conv:h}}function i(a,s){const c=r(a,a,`${s}/separable_conv0`),p=r(a,a,`${s}/separable_conv1`),l=r(a,a,`${s}/separable_conv2`);return{separable_conv0:c,separable_conv1:p,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:o,extractMainBlockParams:i}}function Vg(e,t){const n=[],{extractWeights:r,getRemainingWeights:o}=Ve(e),{extractConvParams:i,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:c}=yT(r,n),p=i(3,32,3,"entry_flow/conv_in"),l=s(32,64,"entry_flow/reduction_block_0"),h=s(64,128,"entry_flow/reduction_block_1"),d={conv_in:p,reduction_block_0:l,reduction_block_1:h},g={};Ht(t,0,1).forEach(S=>{g[`main_block_${S}`]=c(128,`middle_flow/main_block_${S}`)});const x=s(128,256,"exit_flow/reduction_block"),w=a(256,512,"exit_flow/separable_conv"),L={reduction_block:x,separable_conv:w};if(o().length!==0)throw new Error(`weights remaing after extract: ${o().length}`);return{paramMappings:n,params:{entry_flow:d,middle_flow:g,exit_flow:L}}}function LT(e,t){const n=it(e,t),r=oc(n),o=Vr(n);function i(s){const c=o(`${s}/separable_conv0`),p=o(`${s}/separable_conv1`),l=r(`${s}/expansion_conv`);return{separable_conv0:c,separable_conv1:p,expansion_conv:l}}function a(s){const c=o(`${s}/separable_conv0`),p=o(`${s}/separable_conv1`),l=o(`${s}/separable_conv2`);return{separable_conv0:c,separable_conv1:p,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:a}}function Kg(e,t){const n=[],{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:a}=LT(e,n),s=r("entry_flow/conv_in"),c=i("entry_flow/reduction_block_0"),p=i("entry_flow/reduction_block_1"),l={conv_in:s,reduction_block_0:c,reduction_block_1:p},h={};Ht(t,0,1).forEach(w=>{h[`main_block_${w}`]=a(`middle_flow/main_block_${w}`)});const d=i("exit_flow/reduction_block"),g=o("exit_flow/separable_conv"),x={reduction_block:d,separable_conv:g};return Ye(e,n),{params:{entry_flow:l,middle_flow:h,exit_flow:x},paramMappings:n}}function Jg(e,t,n){return N(ve(e,t.filters,n,"same"),t.bias)}function jl(e,t,n=!0){let r=n?ie(e):e;return r=tt(r,t.separable_conv0,[1,1]),r=tt(ie(r),t.separable_conv1,[1,1]),r=Re(r,[3,3],[2,2],"same"),r=N(r,Jg(e,t.expansion_conv,[2,2])),r}function vT(e,t){let n=tt(ie(e),t.separable_conv0,[1,1]);return n=tt(ie(n),t.separable_conv1,[1,1]),n=tt(ie(n),t.separable_conv2,[1,1]),n=N(n,e),n}class Xg extends We{constructor(e){super("TinyXception");this._numMainBlocks=e}forwardInput(e){const{params:t}=this;if(!t)throw new Error("TinyXception - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(256));let i=ie(Jg(o,t.entry_flow.conv_in,[2,2]));return i=jl(i,t.entry_flow.reduction_block_0,!1),i=jl(i,t.entry_flow.reduction_block_1),Ht(this._numMainBlocks,0,1).forEach(a=>{i=vT(i,t.middle_flow[`main_block_${a}`])}),i=jl(i,t.exit_flow.reduction_block),i=ie(tt(i,t.exit_flow.separable_conv,[1,1])),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(e){return Kg(e,this._numMainBlocks)}extractParams(e){return Vg(e,this._numMainBlocks)}}function Zg(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),o=nc(n,t),i=o(512,1,"fc/age"),a=o(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:i,gender:a}}}}function Qg(e){const t=[],n=it(e,t);function r(i){const a=n(`${i}/weights`,2),s=n(`${i}/bias`,1);return{weights:a,bias:s}}const o={fc:{age:r("fc/age"),gender:r("fc/gender")}};return Ye(e,t),{params:o,paramMappings:t}}var Dt;(function(e){e.FEMALE="female",e.MALE="male"})(Dt||(Dt={}));class ta extends We{constructor(e=new Xg(2)){super("AgeGenderNet");this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){const{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return O(()=>{const n=e instanceof Vt?this.faceFeatureExtractor.forwardInput(e):e,r=mt(n,[7,7],[2,2],"valid").as2D(n.shape[0],-1),o=xs(r,t.fc.age).as1D(),i=xs(r,t.fc.gender);return{age:o,gender:i}})}forwardInput(e){return O(()=>{const{age:t,gender:n}=this.runNet(e);return{age:t,gender:Ln(n)}})}async forward(e){return this.forwardInput(await ue(e))}async predictAgeAndGender(e){const t=await ue(e),n=await this.forwardInput(t),r=Ae(n.age),o=Ae(n.gender),i=r.map((s,c)=>({ageTensor:s,genderTensor:o[c]})),a=await Promise.all(i.map(async({ageTensor:s,genderTensor:c})=>{const p=(await s.data())[0],l=(await c.data())[0],h=l>.5,d=h?Dt.MALE:Dt.FEMALE,g=h?l:1-l;return s.dispose(),c.dispose(),{age:p,gender:d,genderProbability:g}}));return n.age.dispose(),n.gender.dispose(),t.isBatchInput?a:a[0]}getDefaultModelName(){return"age_gender_model"}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){const{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return Zg(e)}extractParamsFromWeigthMap(e){const{featureExtractorMap:t,classifierMap:n}=ac(e);return this.faceFeatureExtractor.loadFromWeightMap(t),Qg(n)}extractParams(e){const t=512*1+1+(512*2+2),n=e.slice(0,e.length-t),r=e.slice(e.length-t);return this.faceFeatureExtractor.extractWeights(n),this.extractClassifierParams(r)}}class pc extends cc{postProcess(e,t,n){const r=n.map(({width:i,height:a})=>{const s=t/Math.max(a,i);return{width:i*s,height:a*s}}),o=r.length;return O(()=>{const i=(l,h)=>Fe([qe([68],l),qe([68],h)],1).as2D(1,136).as1D(),a=(l,h)=>{const{width:d,height:g}=r[l];return h(d,g)?Math.abs(d-g)/2:0},s=l=>a(l,(h,d)=>ha(l,(h,d)=>di(s(h),c(h))))).div(Fe(Array.from(Array(o),(l,h)=>i(r[h].width,r[h].height))));return p})}forwardInput(e){return O(()=>{const t=this.runNet(e);return this.postProcess(t,e.inputSize,e.inputDimensions.map(([n,r])=>({height:n,width:r})))})}async forward(e){return this.forwardInput(await ue(e))}async detectLandmarks(e){const t=await ue(e),n=O(()=>Ae(this.forwardInput(t))),r=await Promise.all(n.map(async(o,i)=>{const a=Array.from(await o.data()),s=a.filter((p,l)=>Ja(l)),c=a.filter((p,l)=>!Ja(l));return new lr(Array(68).fill(0).map((p,l)=>new J(s[l],c[l])),{height:t.getInputHeight(i),width:t.getInputWidth(i)})}));return n.forEach(o=>o.dispose()),t.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}}class sr extends pc{constructor(e=new sc){super("FaceLandmark68Net",e)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function eb(e){const t=[],{extractDenseBlock3Params:n}=ic(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return Ye(e,t),{params:r,paramMappings:t}}function tb(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractDenseBlock3Params:o}=rc(n,t),i=o(3,32,"dense0",!0),a=o(32,64,"dense1"),s=o(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:i,dense1:a,dense2:s}}}class nb extends We{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(255));let i=tc(o,t.dense0,!0);return i=tc(i,t.dense1),i=tc(i,t.dense2),i=mt(i,[14,14],[2,2],"valid"),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(e){return eb(e)}extractParams(e){return tb(e)}}class zs extends pc{constructor(e=new nb){super("FaceLandmark68TinyNet",e)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class $h extends sr{}function rb(e,t){return N(v(e,t.weights),t.biases)}function Gl(e,t,n,r,o="same"){const{filters:i,bias:a}=t.conv;let s=ve(e,i,n,o);return s=N(s,a),s=rb(s,t.scale),r?ie(s):s}function ob(e,t){return Gl(e,t,[1,1],!0)}function Pl(e,t){return Gl(e,t,[1,1],!1)}function lc(e,t){return Gl(e,t,[2,2],!0,"valid")}function ST(e,t){function n(s,c,p){const l=e(s),h=l.length/(c*p*p);if(El(h))throw new Error(`depth has to be an integer: ${h}, weights.length: ${l.length}, numFilters: ${c}, filterSize: ${p}`);return O(()=>K(xt(l,[c,h,p,p]),[2,3,1,0]))}function r(s,c,p,l){const h=n(s,c,p),d=ce(e(c));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:h,bias:d}}function o(s,c){const p=ce(e(s)),l=ce(e(s));return t.push({paramPath:`${c}/weights`},{paramPath:`${c}/biases`}),{weights:p,biases:l}}function i(s,c,p,l){const h=r(s,c,p,`${l}/conv`),d=o(c,`${l}/scale`);return{conv:h,scale:d}}function a(s,c,p,l,h=!1){const d=i((h?.5:1)*s,c,p,`${l}/conv1`),g=i(s,c,p,`${l}/conv2`);return{conv1:d,conv2:g}}return{extractConvLayerParams:i,extractResidualLayerParams:a}}function ib(e){const{extractWeights:t,getRemainingWeights:n}=Ve(e),r=[],{extractConvLayerParams:o,extractResidualLayerParams:i}=ST(t,r),a=o(4704,32,7,"conv32_down"),s=i(9216,32,3,"conv32_1"),c=i(9216,32,3,"conv32_2"),p=i(9216,32,3,"conv32_3"),l=i(36864,64,3,"conv64_down",!0),h=i(36864,64,3,"conv64_1"),d=i(36864,64,3,"conv64_2"),g=i(36864,64,3,"conv64_3"),x=i(147456,128,3,"conv128_down",!0),w=i(147456,128,3,"conv128_1"),L=i(147456,128,3,"conv128_2"),S=i(589824,256,3,"conv256_down",!0),I=i(589824,256,3,"conv256_1"),R=i(589824,256,3,"conv256_2"),A=i(589824,256,3,"conv256_down_out"),E=O(()=>K(wt(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);const F={conv32_down:a,conv32_1:s,conv32_2:c,conv32_3:p,conv64_down:l,conv64_1:h,conv64_2:d,conv64_3:g,conv128_down:x,conv128_1:w,conv128_2:L,conv256_down:S,conv256_1:I,conv256_2:R,conv256_down_out:A,fc:E};return{params:F,paramMappings:r}}function IT(e,t){const n=it(e,t);function r(a){const s=n(`${a}/scale/weights`,1),c=n(`${a}/scale/biases`,1);return{weights:s,biases:c}}function o(a){const s=n(`${a}/conv/filters`,4),c=n(`${a}/conv/bias`,1),p=r(a);return{conv:{filters:s,bias:c},scale:p}}function i(a){return{conv1:o(`${a}/conv1`),conv2:o(`${a}/conv2`)}}return{extractConvLayerParams:o,extractResidualLayerParams:i}}function sb(e){const t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=IT(e,t),o=n("conv32_down"),i=r("conv32_1"),a=r("conv32_2"),s=r("conv32_3"),c=r("conv64_down"),p=r("conv64_1"),l=r("conv64_2"),h=r("conv64_3"),d=r("conv128_down"),g=r("conv128_1"),x=r("conv128_2"),w=r("conv256_down"),L=r("conv256_1"),S=r("conv256_2"),I=r("conv256_down_out"),R=e.fc;if(t.push({originalPath:"fc",paramPath:"fc"}),!Cl(R))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${R}`);const A={conv32_down:o,conv32_1:i,conv32_2:a,conv32_3:s,conv64_down:c,conv64_1:p,conv64_2:l,conv64_3:h,conv128_down:d,conv128_1:g,conv128_2:x,conv256_down:w,conv256_1:L,conv256_2:S,conv256_down_out:I,fc:R};return Ye(e,t),{params:A,paramMappings:t}}function Ot(e,t){let n=ob(e,t.conv1);return n=Pl(n,t.conv2),n=N(n,e),n=ie(n),n}function ys(e,t){let n=lc(e,t.conv1);n=Pl(n,t.conv2);let r=mt(e,2,2,"valid");const o=Ce(r.shape),i=r.shape[3]!==n.shape[3],a=r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2];if(a){const s=[...n.shape];s[1]=1;const c=Ce(s);n=Z([n,c],1);const p=[...n.shape];p[2]=1;const l=Ce(p);n=Z([n,l],2)}return r=i?Z([r,o],3):r,n=N(r,n),n=ie(n),n}class ir extends We{constructor(){super("FaceRecognitionNet")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{const n=_(e.toBatchTensor(150,!0),"float32"),r=[122.782,117.001,104.298],o=ht(n,r).div(C(256));let i=lc(o,t.conv32_down);i=Re(i,3,2,"valid"),i=Ot(i,t.conv32_1),i=Ot(i,t.conv32_2),i=Ot(i,t.conv32_3),i=ys(i,t.conv64_down),i=Ot(i,t.conv64_1),i=Ot(i,t.conv64_2),i=Ot(i,t.conv64_3),i=ys(i,t.conv128_down),i=Ot(i,t.conv128_1),i=Ot(i,t.conv128_2),i=ys(i,t.conv256_down),i=Ot(i,t.conv256_1),i=Ot(i,t.conv256_2),i=ys(i,t.conv256_down_out);const a=i.mean([1,2]),s=V(a,t.fc);return s})}async forward(e){return this.forwardInput(await ue(e))}async computeFaceDescriptor(e){const t=await ue(e),n=O(()=>Ae(this.forwardInput(t))),r=await Promise.all(n.map(o=>o.data()));return n.forEach(o=>o.dispose()),t.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(e){return sb(e)}extractParams(e){return ib(e)}}function Bh(e){const t=new ir;return t.extractWeights(e),t}function so(e,t){const n={descriptor:t};return Object.assign({},e,n)}function Wh(e){return typeof e.age=="number"}function ao(e,t){const n={age:t};return Object.assign({},e,n)}function Uh(e){return(e.gender===Dt.MALE||e.gender===Dt.FEMALE)&&qr(e.genderProbability)}function oo(e,t,n){const r={gender:t,genderProbability:n};return Object.assign({},e,r)}function TT(e,t){function n(c,p){const l=xt(e(3*3*c),[3,3,c,1]),h=ce(e(c)),d=ce(e(c)),g=ce(e(c)),x=ce(e(c));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:l,batch_norm_scale:h,batch_norm_offset:d,batch_norm_mean:g,batch_norm_variance:x}}function r(c,p,l,h,d){const g=xt(e(c*p*l*l),[l,l,c,p]),x=ce(e(p));return t.push({paramPath:`${h}/filters`},{paramPath:`${h}/${d?"batch_norm_offset":"bias"}`}),{filters:g,bias:x}}function o(c,p,l,h){const{filters:d,bias:g}=r(c,p,l,h,!0);return{filters:d,batch_norm_offset:g}}function i(c,p,l){const h=n(c,`${l}/depthwise_conv`),d=o(c,p,1,`${l}/pointwise_conv`);return{depthwise_conv:h,pointwise_conv:d}}function a(){const c=o(3,32,3,"mobilenetv1/conv_0"),p=i(32,64,"mobilenetv1/conv_1"),l=i(64,128,"mobilenetv1/conv_2"),h=i(128,128,"mobilenetv1/conv_3"),d=i(128,256,"mobilenetv1/conv_4"),g=i(256,256,"mobilenetv1/conv_5"),x=i(256,512,"mobilenetv1/conv_6"),w=i(512,512,"mobilenetv1/conv_7"),L=i(512,512,"mobilenetv1/conv_8"),S=i(512,512,"mobilenetv1/conv_9"),I=i(512,512,"mobilenetv1/conv_10"),R=i(512,512,"mobilenetv1/conv_11"),A=i(512,1024,"mobilenetv1/conv_12"),E=i(1024,1024,"mobilenetv1/conv_13");return{conv_0:c,conv_1:p,conv_2:l,conv_3:h,conv_4:d,conv_5:g,conv_6:x,conv_7:w,conv_8:L,conv_9:S,conv_10:I,conv_11:R,conv_12:A,conv_13:E}}function s(){const c=o(1024,256,1,"prediction_layer/conv_0"),p=o(256,512,3,"prediction_layer/conv_1"),l=o(512,128,1,"prediction_layer/conv_2"),h=o(128,256,3,"prediction_layer/conv_3"),d=o(256,128,1,"prediction_layer/conv_4"),g=o(128,256,3,"prediction_layer/conv_5"),x=o(256,64,1,"prediction_layer/conv_6"),w=o(64,128,3,"prediction_layer/conv_7"),L=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),S=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),I=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),R=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),A=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),E=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),F=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),M=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),j=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),$=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),U=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),Q=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),ne={box_encoding_predictor:L,class_predictor:S},he={box_encoding_predictor:I,class_predictor:R},xe={box_encoding_predictor:A,class_predictor:E},Ue={box_encoding_predictor:F,class_predictor:M},vt={box_encoding_predictor:j,class_predictor:$},sn={box_encoding_predictor:U,class_predictor:Q};return{conv_0:c,conv_1:p,conv_2:l,conv_3:h,conv_4:d,conv_5:g,conv_6:x,conv_7:w,box_predictor_0:ne,box_predictor_1:he,box_predictor_2:xe,box_predictor_3:Ue,box_predictor_4:vt,box_predictor_5:sn}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:s}}function ab(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractMobilenetV1Params:o,extractPredictionLayerParams:i}=TT(n,t),a=o(),s=i(),c=Sr(n(5118*4),[1,5118,4]),p={extra_dim:c};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:a,prediction_layer:s,output_layer:p},paramMappings:t}}function AT(e,t){const n=it(e,t);function r(p,l,h){const d=n(`${p}/Conv2d_${l}_pointwise/weights`,4,`${h}/filters`),g=n(`${p}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${h}/batch_norm_offset`);return{filters:d,batch_norm_offset:g}}function o(p){const l=`mobilenetv1/conv_${p}`,h=`MobilenetV1/Conv2d_${p}_depthwise`,d=`${l}/depthwise_conv`,g=`${l}/pointwise_conv`,x=n(`${h}/depthwise_weights`,4,`${d}/filters`),w=n(`${h}/BatchNorm/gamma`,1,`${d}/batch_norm_scale`),L=n(`${h}/BatchNorm/beta`,1,`${d}/batch_norm_offset`),S=n(`${h}/BatchNorm/moving_mean`,1,`${d}/batch_norm_mean`),I=n(`${h}/BatchNorm/moving_variance`,1,`${d}/batch_norm_variance`);return{depthwise_conv:{filters:x,batch_norm_scale:w,batch_norm_offset:L,batch_norm_mean:S,batch_norm_variance:I},pointwise_conv:r("MobilenetV1",p,g)}}function i(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:o(1),conv_2:o(2),conv_3:o(3),conv_4:o(4),conv_5:o(5),conv_6:o(6),conv_7:o(7),conv_8:o(8),conv_9:o(9),conv_10:o(10),conv_11:o(11),conv_12:o(12),conv_13:o(13)}}function a(p,l){const h=n(`${p}/weights`,4,`${l}/filters`),d=n(`${p}/biases`,1,`${l}/bias`);return{filters:h,bias:d}}function s(p){const l=a(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),h=a(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:l,class_predictor:h}}function c(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:s(0),box_predictor_1:s(1),box_predictor_2:s(2),box_predictor_3:s(3),box_predictor_4:s(4),box_predictor_5:s(5)}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function cb(e){const t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=AT(e,t),o=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!nn(o))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${o}`);const i={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:o}};return Ye(e,t),{params:i,paramMappings:t}}function Lt(e,t,n){return O(()=>{let r=ve(e,t.filters,n,"same");return r=N(r,t.batch_norm_offset),Rr(r,0,6)})}const NT=.0010000000474974513;function RT(e,t,n){return O(()=>{let r=wn(e,t.filters,n,"same");return r=jt(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,NT),Rr(r,0,6)})}function _T(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function pb(e,t){return O(()=>{let n,r=Lt(e,t.conv_0,[2,2]);const o=[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];if(o.forEach((i,a)=>{const s=a+1,c=_T(s);r=RT(r,i.depthwise_conv,c),r=Lt(r,i.pointwise_conv,[1,1]),s===11&&(n=r)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}})}function lb(e,t,n,r,o){const i=e.shape[0],a=Math.min(n,i),s=t.map((l,h)=>({score:l,boxIndex:h})).filter(l=>l.score>o).sort((l,h)=>h.score-l.score),c=l=>l<=r?1:0,p=[];return s.forEach(l=>{if(p.length>=a)return;const h=l.score;for(let d=p.length-1;d>=0;--d){const g=CT(e,l.boxIndex,p[d]);if(g===0)continue;if(l.score*=c(g),l.score<=o)break}h===l.score&&p.push(l.boxIndex)}),p}function CT(e,t,n){const r=e.arraySync(),o=Math.min(r[t][0],r[t][2]),i=Math.min(r[t][1],r[t][3]),a=Math.max(r[t][0],r[t][2]),s=Math.max(r[t][1],r[t][3]),c=Math.min(r[n][0],r[n][2]),p=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),h=Math.max(r[n][1],r[n][3]),d=(a-o)*(s-i),g=(l-c)*(h-p);if(d<=0||g<=0)return 0;const x=Math.max(o,c),w=Math.max(i,p),L=Math.min(a,l),S=Math.min(s,h),I=Math.max(L-x,0)*Math.max(S-w,0);return I/(d+g-I)}function ET(e){const t=Ae(K(e,[1,0])),n=[k(t[2],t[0]),k(t[3],t[1])],r=[N(t[0],D(n[0],C(2))),N(t[1],D(n[1],C(2)))];return{sizes:n,centers:r}}function OT(e,t){const{sizes:n,centers:r}=ET(e),o=Ae(K(t,[1,0])),i=D(v(Te(D(o[2],C(5))),n[0]),C(2)),a=N(v(D(o[0],C(10)),n[0]),r[0]),s=D(v(Te(D(o[3],C(5))),n[1]),C(2)),c=N(v(D(o[1],C(10)),n[1]),r[1]);return K(Fe([k(a,i),k(c,s),N(a,i),N(c,s)]),[1,0])}function hb(e,t,n){return O(()=>{const r=e.shape[0];let o=OT(y(Gt(n.extra_dim,[r,1,1]),[-1,4]),y(e,[-1,4]));o=y(o,[r,o.shape[0]/r,4]);const i=ft(P(t,[0,0,1],[-1,-1,-1]));let a=P(i,[0,0,0],[-1,-1,1]);a=y(a,[r,a.shape[1]]);const s=Ae(o),c=Ae(a);return{boxes:s,scores:c}})}function Qn(e,t){return O(()=>{const n=e.shape[0],r=y(Zn(e,t.box_encoding_predictor),[n,-1,1,4]),o=y(Zn(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:o}})}function ub(e,t,n){return O(()=>{const r=Lt(e,n.conv_0,[1,1]),o=Lt(r,n.conv_1,[2,2]),i=Lt(o,n.conv_2,[1,1]),a=Lt(i,n.conv_3,[2,2]),s=Lt(a,n.conv_4,[1,1]),c=Lt(s,n.conv_5,[2,2]),p=Lt(c,n.conv_6,[1,1]),l=Lt(p,n.conv_7,[2,2]),h=Qn(t,n.box_predictor_0),d=Qn(e,n.box_predictor_1),g=Qn(o,n.box_predictor_2),x=Qn(a,n.box_predictor_3),w=Qn(c,n.box_predictor_4),L=Qn(l,n.box_predictor_5),S=Z([h.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,x.boxPredictionEncoding,w.boxPredictionEncoding,L.boxPredictionEncoding],1),I=Z([h.classPrediction,d.classPrediction,g.classPrediction,x.classPrediction,w.classPrediction,L.classPrediction],1);return{boxPredictions:S,classPredictions:I}})}class lt{constructor({minConfidence:e,maxResults:t}={}){if(this._name="SsdMobilenetv1Options",this._minConfidence=e||.5,this._maxResults=t||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}}class In extends We{constructor(){super("SsdMobilenetv1")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{const n=_(e.toBatchTensor(512,!1),"float32"),r=k(v(n,C(.007843137718737125)),C(1)),o=pb(r,t.mobilenetv1),{boxPredictions:i,classPredictions:a}=ub(o.out,o.conv11,t.prediction_layer);return hb(i,a,t.output_layer)})}async forward(e){return this.forwardInput(await ue(e))}async locateFaces(e,t={}){const{maxResults:n,minConfidence:r}=new lt(t),o=await ue(e),{boxes:i,scores:a}=this.forwardInput(o),s=i[0],c=a[0];for(let I=1;I{const[R,A]=[Math.max(0,L[I][0]),Math.min(1,L[I][2])].map(M=>M*w),[E,F]=[Math.max(0,L[I][1]),Math.min(1,L[I][3])].map(M=>M*x);return new me(p[I],new pr(E,R,F-E,A-R),{height:o.getInputHeight(0),width:o.getInputWidth(0)})});return s.dispose(),c.dispose(),S}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(e){return cb(e)}extractParams(e){return ab(e)}}function yc(e){const t=new In;return t.extractWeights(e),t}function mh(e){return yc(e)}class fh extends In{}const db=.4,mb=[new J(.738768,.874946),new J(2.42204,2.65704),new J(4.30971,7.04493),new J(10.246,4.59428),new J(12.6868,11.8741)],fb=[new J(1.603231,2.094468),new J(6.041143,7.080126),new J(2.882459,3.518061),new J(4.266906,5.178857),new J(9.041765,10.66308)],gb=[117.001,114.697,97.404],bb="tiny_yolov2_model",wb="tiny_yolov2_separable_conv_model";const hc=e=>typeof e=="number";function Es(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(!hc(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=>hc(t.x)&&hc(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(hc)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Kr(e){return O(()=>{const t=v(e,C(.10000000149011612));return N(ie(k(e,t)),t)})}function rn(e,t){return O(()=>{let n=He(e,[[0,0],[1,1],[1,1],[0,0]]);return n=ve(n,t.conv.filters,[1,1],"valid"),n=k(n,t.bn.sub),n=v(n,t.bn.truediv),n=N(n,t.conv.bias),Kr(n)})}function on(e,t){return O(()=>{let n=He(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Wr(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=N(n,t.bias),Kr(n)})}function kT(e,t){const n=Hr(e,t);function r(a,s){const c=ce(e(a)),p=ce(e(a));return t.push({paramPath:`${s}/sub`},{paramPath:`${s}/truediv`}),{sub:c,truediv:p}}function o(a,s,c){const p=n(a,s,3,`${c}/conv`),l=r(s,`${c}/bn`);return{conv:p,bn:l}}const i=Yr(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:o,extractSeparableConvParams:i}}function xb(e,t,n,r){const{extractWeights:o,getRemainingWeights:i}=Ve(e),a=[],{extractConvParams:s,extractConvWithBatchNormParams:c,extractSeparableConvParams:p}=kT(o,a);let l;if(t.withSeparableConvs){const[h,d,g,x,w,L,S,I,R]=r,A=t.isFirstLayerConv2d?s(h,d,3,"conv0"):p(h,d,"conv0"),E=p(d,g,"conv1"),F=p(g,x,"conv2"),M=p(x,w,"conv3"),j=p(w,L,"conv4"),$=p(L,S,"conv5"),U=I?p(S,I,"conv6"):void 0,Q=R?p(I,R,"conv7"):void 0,ne=s(R||I||S,5*n,1,"conv8");l={conv0:A,conv1:E,conv2:F,conv3:M,conv4:j,conv5:$,conv6:U,conv7:Q,conv8:ne}}else{const[h,d,g,x,w,L,S,I,R]=r,A=c(h,d,"conv0"),E=c(d,g,"conv1"),F=c(g,x,"conv2"),M=c(x,w,"conv3"),j=c(w,L,"conv4"),$=c(L,S,"conv5"),U=c(S,I,"conv6"),Q=c(I,R,"conv7"),ne=s(R,5*n,1,"conv8");l={conv0:A,conv1:E,conv2:F,conv3:M,conv4:j,conv5:$,conv6:U,conv7:Q,conv8:ne}}if(i().length!==0)throw new Error(`weights remaing after extract: ${i().length}`);return{params:l,paramMappings:a}}function DT(e,t){const n=it(e,t);function r(s){const c=n(`${s}/sub`,1),p=n(`${s}/truediv`,1);return{sub:c,truediv:p}}function o(s){const c=n(`${s}/filters`,4),p=n(`${s}/bias`,1);return{filters:c,bias:p}}function i(s){const c=o(`${s}/conv`),p=r(`${s}/bn`);return{conv:c,bn:p}}const a=Vr(n);return{extractConvParams:o,extractConvWithBatchNormParams:i,extractSeparableConvParams:a}}function yb(e,t){const n=[],{extractConvParams:r,extractConvWithBatchNormParams:o,extractSeparableConvParams:i}=DT(e,n);let a;if(t.withSeparableConvs){const s=t.filterSizes&&t.filterSizes.length||9;a={conv0:t.isFirstLayerConv2d?r("conv0"):i("conv0"),conv1:i("conv1"),conv2:i("conv2"),conv3:i("conv3"),conv4:i("conv4"),conv5:i("conv5"),conv6:s>7?i("conv6"):void 0,conv7:s>8?i("conv7"):void 0,conv8:r("conv8")}}else a={conv0:o("conv0"),conv1:o("conv1"),conv2:o("conv2"),conv3:o("conv3"),conv4:o("conv4"),conv5:o("conv5"),conv6:o("conv6"),conv7:o("conv7"),conv8:r("conv8")};return Ye(e,n),{params:a,paramMappings:n}}var Os;(function(e){e[e.XS=224]="XS",e[e.SM=320]="SM",e[e.MD=416]="MD",e[e.LG=608]="LG"})(Os||(Os={}));class kt{constructor({inputSize:e,scoreThreshold:t}={}){if(this._name="TinyYolov2Options",this._inputSize=e||416,this._scoreThreshold=t||.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}}class Jr extends We{constructor(e){super("TinyYolov2");Es(e),this._config=e}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(e,t){let n=rn(e,t.conv0);return n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv1),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv2),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv3),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv4),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv5),n=Re(n,[2,2],[1,1],"same"),n=rn(n,t.conv6),n=rn(n,t.conv7),Zn(n,t.conv8,"valid",!1)}runMobilenet(e,t){let n=this.config.isFirstLayerConv2d?Kr(Zn(e,t.conv0,"valid",!1)):on(e,t.conv0);return n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv1),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv2),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv3),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv4),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv5),n=Re(n,[2,2],[1,1],"same"),n=t.conv6?on(n,t.conv6):n,n=t.conv7?on(n,t.conv7):n,Zn(n,t.conv8,"valid",!1)}forwardInput(e,t){const{params:n}=this;if(!n)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let r=_(e.toBatchTensor(t,!1),"float32");return r=this.config.meanRgb?ht(r,this.config.meanRgb):r,r=r.div(C(256)),this.config.withSeparableConvs?this.runMobilenet(r,n):this.runTinyYolov2(r,n)})}async forward(e,t){return await this.forwardInput(await ue(e),t)}async detect(e,t={}){const{inputSize:n,scoreThreshold:r}=new kt(t),o=await ue(e),i=await this.forwardInput(o,n),a=O(()=>Ae(i)[0].expandDims()),s={width:o.getInputWidth(0),height:o.getInputHeight(0)},c=await this.extractBoxes(a,o.getReshapedInputDimensions(0),r);i.dispose(),a.dispose();const p=c.map(w=>w.box),l=c.map(w=>w.score),h=c.map(w=>w.classScore),d=c.map(w=>this.config.classes[w.label]),g=Fs(p.map(w=>w.rescale(n)),l,this.config.iouThreshold,!0),x=g.map(w=>new _n(l[w],h[w],d[w],p[w],s));return x}getDefaultModelName(){return""}extractParamsFromWeigthMap(e){return yb(e,this.config)}extractParams(e){const t=this.config.filterSizes||Jr.DEFAULT_FILTER_SIZES,n=t?t.length:void 0;if(n!==7&&n!==8&&n!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${n} filterSizes in config`);return xb(e,this.config,this.boxEncodingSize,t)}async extractBoxes(e,t,n){const{width:r,height:o}=t,i=Math.max(r,o),a=i/r,s=i/o,c=e.shape[1],p=this.config.anchors.length,[l,h,d]=O(()=>{const L=e.reshape([c,c,p,this.boxEncodingSize]),S=L.slice([0,0,0,0],[c,c,p,4]),I=L.slice([0,0,0,4],[c,c,p,1]),R=this.withClassScores?Ln(L.slice([0,0,0,5],[c,c,p,this.config.classes.length]),3):C(0);return[S,I,R]}),g=[],x=await h.array(),w=await l.array();for(let L=0;Ln){const A=(S+or(w[L][S][I][0]))/c*a,E=(L+or(w[L][S][I][1]))/c*s,F=Math.exp(w[L][S][I][2])*this.config.anchors[I].x/c*a,M=Math.exp(w[L][S][I][3])*this.config.anchors[I].y/c*s,j=A-F/2,$=E-M/2,U={row:L,col:S,anchor:I},{classScore:Q,label:ne}=this.withClassScores?await this.extractPredictedClass(d,U):{classScore:1,label:0};g.push(As({box:new hr(j,$,j+F,$+M),score:R,classScore:R*Q,label:ne},U))}}return l.dispose(),h.dispose(),d.dispose(),g}async extractPredictedClass(e,t){const{row:n,col:r,anchor:o}=t,i=await e.array();return Array(this.config.classes.length).fill(0).map((a,s)=>i[n][r][o][s]).map((a,s)=>({classScore:a,label:s})).reduce((a,s)=>a.classScore>s.classScore?a:s)}}Jr.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class nr extends Jr{constructor(e=!0){const t=Object.assign({},{withSeparableConvs:e,iouThreshold:db,classes:["face"]},e?{anchors:fb,meanRgb:gb}:{anchors:mb,withClassScores:!0});super(t)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(e,t){const n=await this.detect(e,t);return n.map(r=>new me(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?wb:bb}extractParamsFromWeigthMap(e){return super.extractParamsFromWeigthMap(e)}}function uh(e,t=!0){const n=new nr(t);return n.extractWeights(e),n}class ks extends kt{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class ut{async then(e){return e(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}async function er(e,t,n,r,o=({alignedRect:i})=>i){const i=e.map(c=>pn(c)?o(c):c.detection),a=r||(t instanceof te?await Nn(t,i):await An(t,i)),s=await n(a);return a.forEach(c=>c instanceof te&&c.dispose()),s}async function Xr(e,t,n,r,o){return er([e],t,async i=>n(i[0]),r,o)}const Lb=.4,vb=[new J(1.603231,2.094468),new J(6.041143,7.080126),new J(2.882459,3.518061),new J(4.266906,5.178857),new J(9.041765,10.66308)],Sb=[117.001,114.697,97.404];class rr extends Jr{constructor(){const e={withSeparableConvs:!0,iouThreshold:Lb,classes:["face"],anchors:vb,meanRgb:Sb,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(e)}get anchors(){return this.config.anchors}async locateFaces(e,t){const n=await this.detect(e,t);return n.map(r=>new me(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(e){return super.extractParamsFromWeigthMap(e)}}const oe={ssdMobilenetv1:new In,tinyFaceDetector:new rr,tinyYolov2:new nr,faceLandmark68Net:new sr,faceLandmark68TinyNet:new zs,faceRecognitionNet:new ir,faceExpressionNet:new Ys,ageGenderNet:new ta},vc=(e,t)=>oe.ssdMobilenetv1.locateFaces(e,t),wh=(e,t)=>oe.tinyFaceDetector.locateFaces(e,t),xh=(e,t)=>oe.tinyYolov2.locateFaces(e,t),Sc=e=>oe.faceLandmark68Net.detectLandmarks(e),yh=e=>oe.faceLandmark68TinyNet.detectLandmarks(e),Lh=e=>oe.faceRecognitionNet.computeFaceDescriptor(e),vh=e=>oe.faceExpressionNet.predictExpressions(e),Sh=e=>oe.ageGenderNet.predictAgeAndGender(e),Ic=e=>oe.ssdMobilenetv1.load(e),Ih=e=>oe.tinyFaceDetector.load(e),Th=e=>oe.tinyYolov2.load(e),Ah=e=>oe.faceLandmark68Net.load(e),Nh=e=>oe.faceLandmark68TinyNet.load(e),Rh=e=>oe.faceRecognitionNet.load(e),_h=e=>oe.faceExpressionNet.load(e),Ch=e=>oe.ageGenderNet.load(e),Eh=Ic,Oh=vc,kh=Sc;class Ib extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.extractedFaces=n}}class Ss extends Ib{async run(){const e=await this.parentTask,t=await er(e,this.input,async n=>await Promise.all(n.map(r=>oe.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return e.map((n,r)=>io(n,t[r]))}withAgeAndGender(){return new Ls(this,this.input)}}class Is extends Ib{async run(){const e=await this.parentTask;if(!e)return;const t=await Xr(e,this.input,n=>oe.faceExpressionNet.predictExpressions(n),this.extractedFaces);return io(e,t)}withAgeAndGender(){return new vs(this,this.input)}}class eo extends Ss{withAgeAndGender(){return new Zr(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class to extends Is{withAgeAndGender(){return new Qr(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Tb extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.extractedFaces=n}}class Ls extends Tb{async run(){const e=await this.parentTask,t=await er(e,this.input,async n=>await Promise.all(n.map(r=>oe.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return e.map((n,r)=>{const{age:o,gender:i,genderProbability:a}=t[r];return ao(oo(n,i,a),o)})}withFaceExpressions(){return new Ss(this,this.input)}}class vs extends Tb{async run(){const e=await this.parentTask;if(!e)return;const{age:t,gender:n,genderProbability:r}=await Xr(e,this.input,o=>oe.ageGenderNet.predictAgeAndGender(o),this.extractedFaces);return ao(oo(e,n,r),t)}withFaceExpressions(){return new Is(this,this.input)}}class Zr extends Ls{withFaceExpressions(){return new eo(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class Qr extends vs{withFaceExpressions(){return new to(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Ps extends ut{constructor(e,t){super();this.parentTask=e,this.input=t}}class an extends Ps{async run(){const e=await this.parentTask,t=await er(e,this.input,n=>Promise.all(n.map(r=>oe.faceRecognitionNet.computeFaceDescriptor(r))),null,n=>n.landmarks.align(null,{useDlibAlignment:!0}));return t.map((n,r)=>so(e[r],n))}withFaceExpressions(){return new eo(this,this.input)}withAgeAndGender(){return new Zr(this,this.input)}}class cn extends Ps{async run(){const e=await this.parentTask;if(!e)return;const t=await Xr(e,this.input,n=>oe.faceRecognitionNet.computeFaceDescriptor(n),null,n=>n.landmarks.align(null,{useDlibAlignment:!0}));return so(e,t)}withFaceExpressions(){return new to(this,this.input)}withAgeAndGender(){return new Qr(this,this.input)}}class $s extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.useTinyLandmarkNet=n}get landmarkNet(){return this.useTinyLandmarkNet?oe.faceLandmark68TinyNet:oe.faceLandmark68Net}}class js extends $s{async run(){const e=await this.parentTask,t=e.map(o=>o.detection),n=this.input instanceof te?await Nn(this.input,t):await An(this.input,t),r=await Promise.all(n.map(o=>this.landmarkNet.detectLandmarks(o)));return n.forEach(o=>o instanceof te&&o.dispose()),e.map((o,i)=>Tn(o,r[i]))}withFaceExpressions(){return new eo(this,this.input)}withAgeAndGender(){return new Zr(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class Gs extends $s{async run(){const e=await this.parentTask;if(!e)return;const{detection:t}=e,n=this.input instanceof te?await Nn(this.input,[t]):await An(this.input,[t]),r=await this.landmarkNet.detectLandmarks(n[0]);return n.forEach(o=>o instanceof te&&o.dispose()),Tn(e,r)}withFaceExpressions(){return new to(this,this.input)}withAgeAndGender(){return new Qr(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Ws extends ut{constructor(e,t=new lt){super();this.input=e,this.options=t}}class ro extends Ws{async run(){const{input:e,options:t}=this,n=t instanceof ks?r=>oe.tinyFaceDetector.locateFaces(r,t):t instanceof lt?r=>oe.ssdMobilenetv1.locateFaces(r,t):t instanceof kt?r=>oe.tinyYolov2.locateFaces(r,t):null;if(!n)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return n(e)}runAndExtendWithFaceDetections(){return new Promise(async e=>{const t=await this.run();return e(t.map(n=>ln({},n)))})}withFaceLandmarks(e=!1){return new js(this.runAndExtendWithFaceDetections(),this.input,e)}withFaceExpressions(){return new Ss(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Ls(this.runAndExtendWithFaceDetections(),this.input)}}class Bs extends Ws{async run(){const e=await new ro(this.input,this.options);let t=e[0];return e.forEach(n=>{n.score>t.score&&(t=n)}),t}runAndExtendWithFaceDetection(){return new Promise(async e=>{const t=await this.run();return e(t?ln({},t):void 0)})}withFaceLandmarks(e=!1){return new Gs(this.runAndExtendWithFaceDetection(),this.input,e)}withFaceExpressions(){return new Is(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new vs(this.runAndExtendWithFaceDetection(),this.input)}}function Dh(e,t=new lt){return new Bs(e,t)}function no(e,t=new lt){return new ro(e,t)}async function Tc(e,t){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await no(e,new lt(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Fh(e,t={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await no(e,new kt(t)).withFaceLandmarks().withFaceDescriptors()}const Mh=Tc;function Vs(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const n=Array.from(e),r=Array.from(t);return Math.sqrt(n.map((o,i)=>o-r[i]).reduce((o,i)=>o+Math.pow(i,2),0))}class Ac{constructor(e,t=.6){this._distanceThreshold=t;const n=Array.isArray(e)?e:[e];if(!n.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1;const o=()=>`person ${r++}`;this._labeledDescriptors=n.map(i=>{if(i instanceof fn)return i;if(i instanceof Float32Array)return new fn(o(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new fn(o(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(e,t){return t.map(n=>Vs(n,e)).reduce((n,r)=>n+r,0)/(t.length||1)}matchDescriptor(e){return this.labeledDescriptors.map(({descriptors:t,label:n})=>new lo(n,this.computeMeanDistance(e,t))).reduce((t,n)=>t.distancee.toJSON())}}static fromJSON(e){const t=e.labeledDescriptors.map(n=>fn.fromJSON(n));return new Ac(t,e.distanceThreshold)}}function dh(e){const t=new rr;return t.extractWeights(e),t}function Lc(e,t){const{width:n,height:r}=new Ke(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map(o=>Lc(o,{width:n,height:r}));if(pn(e)){const o=e.detection.forSize(n,r),i=e.unshiftedLandmarks.forSize(o.box.width,o.box.height);return Tn(ln(e,o),i)}return It(e)?ln(e,e.detection.forSize(n,r)):e instanceof st||e instanceof me?e.forSize(n,r):e}var lh="0.5.1";return Hh();})(); + the f you passed encloses all operations that lead from x to y.`)}function mL(e){const t=u(e,"x","neg"),n={x:t};return b.runKernelFunc(r=>r.neg(t),n,null,hi)}const re=m({neg_:mL});function fL(e){const t=u(e,"x","softplus"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.softplus(t);return o([t]),i},n,null,ki)}const Aa=m({softplus_:fL});function gL(e){const t=u(e,"x","logSigmoid"),n=ze(r=>{const o=re(Aa(re(r))),i=a=>{const s=v(a,ft(re(r)));return s};return{value:o,gradFunc:i}});return n(t)}const _d=m({logSigmoid_:gL});function bL(e,t=null,n=!1){const r=u(e,"x","max"),o=(s,c)=>{const p=H(t,r.shape);let l=p;const h=fe(l,r.rank);let d=r;h!=null&&(d=K(r,h),l=ke(l.length,d.rank));const g=s.max(d,l);h!=null&&d.dispose();let x=g;if(n){const w=we(x.shape,H(t,r.shape));x=y(x,w),g.dispose()}return c([r,x]),x},i={x:r},a={reductionIndices:t,keepDims:n};return b.runKernelFunc(o,i,null,ri,a)}const qt=m({max_:bL});function wL(e,t){let n=u(e,"a","sub"),r=u(t,"b","sub");[n,r]=Y(n,r);const o=(a,s)=>{const c=a.subtract(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,$i)}const k=m({sub_:wL});function xL(e,t=null,n=!1){let r=u(e,"x","sum");r.dtype==="bool"&&(r=_(r,"int32"));const o=(s,c)=>{c([r]);const p=H(t,r.shape),l=fe(p,r.rank);let h=p,d=r;l!=null&&(d=K(r,l),h=ke(h.length,r.rank));let g=s.sum(d,h);if(n){const x=we(g.shape,p);g=y(g,x)}return g},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,Fi,a)}const W=m({sum_:xL});function yL(e,t=-1){const n=u(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}`);const r=(a,s)=>{const c=!0,p=qt(e,t,!0),l=k(e,p),h=k(_(l,"float32"),Rt(W(Te(l),t,c)));return s([h]),h},o={logits:n},i={axis:t};return b.runKernelFunc(r,o,null,ti,i)}const Cd=m({logSoftmax_:yL});function LL(e,t=null,n=!1){const r=u(e,"x","logSumExp"),o=H(t,r.shape),i=qt(r,o,!0),a=k(r,i),s=Te(a),c=W(s,o),p=Rt(c),l=N(y(i,p.shape),p);if(n){const h=we(l.shape,o);return y(l,h)}return l}const Na=m({logSumExp_:LL});function vL(e,t){const n=u(e,"a","logicalAnd","bool"),r=u(t,"b","logicalAnd","bool");q(n.shape,r.shape);const o={a:n,b:r};return b.runKernelFunc(i=>i.logicalAnd(n,r),o,null,ip)}const _t=m({logicalAnd_:vL});function SL(e){const t=u(e,"x","logicalNot","bool"),n={x:t};return b.runKernelFunc(r=>r.logicalNot(t),n,null,sp)}const Dr=m({logicalNot_:SL});function IL(e,t){const n=u(e,"a","logicalOr","bool"),r=u(t,"b","logicalOr","bool");q(n.shape,r.shape);const o={a:n,b:r};return b.runKernelFunc(i=>i.logicalOr(n,r),o,null,ap)}const Ra=m({logicalOr_:IL});function TL(e,t){const n=u(e,"a","logicalXor","bool"),r=u(t,"b","logicalXor","bool");return q(n.shape,r.shape),_t(Ra(e,t),Dr(_t(e,t)))}const Ed=m({logicalXor_:TL});function AL(e,t,n,r,o){const i=u(e,"x","maxPool"),a=1;let s=i,c=!1;i.rank===3&&(c=!0,s=y(i,[1,i.shape[0],i.shape[1],i.shape[2]])),f(s.rank===4,()=>`Error in maxPool: input must be rank 4 but got rank ${s.rank}.`),f(le(n,a),()=>`Error in maxPool: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),o!=null&&f(X(r),()=>`Error in maxPool: pad must be an integer when using, dimRoundingMode ${o} but got pad ${r}.`);const p=(g,x)=>{const w=Nt(s.shape,t,n,1,r,o);let L;return w.filterWidth===1&&w.filterHeight===1&&Se(w.inShape,w.outShape)?L=s.clone():L=g.maxPool(s,w),x([s,L]),L},l={x:s},h={filterSize:t,strides:n,pad:r,dimRoundingMode:o},d=b.runKernelFunc(p,l,null,ii,h);return c?y(d,[d.shape[1],d.shape[2],d.shape[3]]):d}const Re=m({maxPool_:AL});function NL(e,t=[1,1,1],n,r,o,i="NDHWC",a){a==null?a=[1,1,1]:ye("dilations is deprecated, this field will be gone in v3.0.0.");const s=u(e,"x","maxPool3d");let c=s,p=!1;s.rank===4&&(p=!0,c=y(s,[1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]])),f(c.rank===5,()=>`Error in maxPool3d: x must be rank 5 but got rank ${c.rank}.`),f(i==="NDHWC",()=>`Error in maxPool3d: Only NDHWC is currently supported, but got dataFormat of ${i}`),f(le(n,a),()=>`Error in maxPool3d: Either strides or dilations must be 1. Got strides ${n} and dilations '${a}'`),o!=null&&f(X(r),()=>`Error in maxPool3d: pad must be an integer when using, dimRoundingMode ${o} but got pad ${r}.`);const l=(x,w)=>{a==null&&(a=[1,1,1]);const L=Xt(c.shape,t,n,a,r,o,i),S=x.maxPool3d(c,L);return w([c,S]),S},h={x:c},d={filterSize:t,strides:n,pad:r,dimRoundingMode:o,dataFormat:i,dilations:a},g=b.runKernelFunc(l,h,null,si,d);return p?y(g,[g.shape[1],g.shape[2],g.shape[3],g.shape[4]]):g}const Od=m({maxPool3d_:NL});function RL(e,t,n,r,o=!1){const i=u(e,"x","maxPoolWithArgmax"),a={x:i},s={filterSize:t,strides:n,pad:r,includeBatchInIndex:o},c=b.runKernel(hp,a,s);return{result:c[0],indexes:c[1]}}const kd=m({maxPoolWithArgmax_:RL});function Ce(e,t="float32"){if(t==="complex64"){const r=Ce(e,"float32"),o=Ce(e,"float32");return Je(r,o)}const n=Wt(ee(e),t);return b.makeTensor(n,e,t)}function Ct(e,t="float32"){if(t==="complex64"){const r=Ct(e,"float32"),o=Ce(e,"float32");return Je(r,o)}const n=Zi(ee(e),t);return b.makeTensor(n,e,t)}function _L(e,t=null,n=!1){const r=u(e,"x","mean"),o=H(t,r.shape),i=ul(r.shape,o),a=i[1],s=ee(a),c=ze(p=>{const l=C(s),h=l.dtype===p.dtype?p:_(p,l.dtype),d=D(h,l),g=W(d,t,n),x=w=>{const L=p.shape.slice();o.forEach(R=>{L[R]=1});const S=y(w,L),I=D(v(S,Ct(p.shape,"float32")),s);return I};return{value:g,gradFunc:x}});return c(r)}const Un=m({mean_:_L});function CL(e,t=null,n=!1){const r=u(e,"x","min"),o=(s,c)=>{const p=H(t,r.shape);let l=p;const h=fe(l,r.rank);let d=r;h!=null&&(d=K(r,h),l=ke(l.length,r.rank));const g=s.min(d,l);h!=null&&d.dispose();let x=g;if(n){const w=we(x.shape,p);x=y(g,w),g.dispose()}return c([r,x]),x},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,ai,a)}const ds=m({min_:CL});function EL(e,t){let n=u(e,"a","minimum"),r=u(t,"b","minimum");[n,r]=Y(n,r),n.dtype==="bool"&&(n=_(n,"int32"),r=_(r,"int32")),q(n.shape,r.shape);const o=(a,s)=>{const c=a.minimum(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,ci)}const Fr=m({minimum_:EL});function OL(e,t){let n=u(e,"a","mod"),r=u(t,"b","mod");[n,r]=Y(n,r);const o=(a,s)=>{const c=a.mod(n,r);return s([n,r]),c},i={a:n,b:r};return b.runKernelFunc(o,i,null,pi)}const _a=m({mod_:OL});function kL(e){const t=u(e,"x","square"),n={},r=[t],o=[];return b.runKernelFunc((i,a)=>(a([t]),i.square(t)),{x:t},null,"Square",n,r,o)}const z=m({square_:kL});function DL(e,t=null,n=!1){e=u(e,"x","moments");const r=H(t,e.shape),o=Un(e,r,n);let i=o.shape;n||(i=we(o.shape,r));const a=z(k(_(e,"float32"),y(o,i))),s=Un(a,r,n);return{mean:o,variance:s}}const Dd=m({moments_:DL});function FL(e,t,n,r){const o=u(t,"data","multiRNNCell"),i=Jt(n,"c","multiRNNCell"),a=Jt(r,"h","multiRNNCell");let s=o;const c=[];for(let h=0;h2)throw new Error(`Rank of probabilities must be 1 or 2, but is ${a}`);n=n||Math.random();const s=a===1?y(o,[1,-1]):o,c=b.runKernelFunc(p=>p.multinomial(s,r,t,n),{logits2D:s});return a===1?y(c,[c.size]):c}const Md=m({multinomial_:ML});function UL(e,t){let n=u(e,"a","notEqual"),r=u(t,"b","notEqual");[n,r]=Y(n,r),q(n.shape,r.shape);const o=a=>a.notEqual(n,r),i={a:n,b:r};return b.runKernelFunc(o,i,null,up)}const Mr=m({notEqual_:UL});function WL(e){const t=u(e,"input","real"),n=o=>o.real(t),r={input:t};return b.runKernelFunc(n,r,null,wp)}const Zt=m({real_:WL});function BL(e){const t=u(e,"x","onesLike"),n=(o,i)=>{if(t.dtype==="complex64"){const a=xl(Zt(t)),s=B(yn(t));return Je(a,s)}return o.onesLike(t)},r={x:t};return b.runKernelFunc(n,r,null,ui)}const xl=m({onesLike_:BL});function $L(e,t){const n=u(e,"v1","outerProduct"),r=u(t,"v2","outerProduct");f(n.rank===1&&r.rank===1,()=>`Error in outerProduct: inputs must be rank 1, but got ranks ${n.rank} and ${r.rank}.`);const o=y(n,[-1,1]),i=y(r,[1,-1]);return V(o,i)}const Ud=m({outerProduct_:$L});function jL(e,t,n=0){const r=u(e,"x","pad");if(r.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const o=(s,c)=>(c([r]),s.pad(r,t,n)),i={paddings:t,constantValue:n},a={x:r};return b.runKernelFunc(o,a,null,mi,i)}const He=m({pad_:jL});function GL(e,t,n=0){return f(t.length===2,()=>"Invalid number of paddings. Must be length of 2."),He(e,[t],n)}const Wd=m({pad1d_:GL});function PL(e,t,n=0){return f(t.length===2&&t[0].length===2&&t[1].length===2,()=>"Invalid number of paddings. Must be length of 2 each."),He(e,t,n)}const Bd=m({pad2d_:PL});function qL(e,t,n=0){return f(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."),He(e,t,n)}const $d=m({pad3d_:qL});function zL(e,t,n=0){return f(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."),He(e,t,n)}const jd=m({pad4d_:zL});function HL(e,t,n){const r=u(e,"x","spaceToBatchND");f(r.rank>=1+t.length,()=>`input rank ${r.rank} should be > than [blockShape] ${t.length}`),f(n.length===t.length,()=>`paddings.shape[0] ${n.length} must be equal to [blockShape] ${t.length}`),f(r.shape.reduce((s,c,p)=>p>0&&p<=t.length?s&&(c+n[p-1][0]+n[p-1][1])%t[p-1]===0:s,!0),()=>`input spatial dimensions ${r.shape.slice(1)} with paddings ${n.toString()} must be divisible by blockShapes ${t.toString()}`);const o=s=>s.spaceToBatchND(r,t,n),i={x:r},a={blockShape:t,paddings:n};return b.runKernelFunc(o,i,null,Mi,a)}const Ur=m({spaceToBatchND_:HL});function KL(e,t,n,r,o,i){o==null&&(o=[1,1]),i==null&&(i=1),r===0&&(r="valid");const a=u(e,"x","maxPool");let s=a,c=!1;a.rank===3&&(c=!0,s=y(a,[1,a.shape[0],a.shape[1],a.shape[2]])),f(le(i,o),()=>`Error in pool: Either strides or dilations must be 1. Got strides ${i} and dilations '${o}'`);const p=Nt(s.shape,t,i,o,r),l=[p.dilationHeight,p.dilationWidth];let h;r==="same"?h=VL([p.filterHeight,p.filterWidth],l):h=[[0,0],[0,0]];const d=l[0]===1&&l[1]===1,[g,x]=YL([p.inHeight,p.inWidth],l,h),w=d?r:"valid",L=d?s:Ur(s,l,g),S=n==="avg"?()=>mt(L,t,i,w):()=>Re(L,t,i,w),I=S(),R=d?I:Nr(I,l,x);return c?y(R,[R.shape[1],R.shape[2],R.shape[3]]):R}function YL(e,t,n){const r=n.map(l=>l[0]),o=n.map(l=>l[1]),i=e.concat(r,o),a=t.map((l,h)=>(l-i[h]%l)%l),s=o.map((l,h)=>l+a[h]),c=t.map((l,h)=>[r[h],s[h]]),p=t.map((l,h)=>[0,a[h]]);return[c,p]}function VL(e,t){const n=e.map((a,s)=>a+(a-1)*(t[s]-1)),r=n.map(a=>a-1),o=r.map(a=>Math.floor(a/2)),i=r.map((a,s)=>a-o[s]);return r.map((a,s)=>[o[s],i[s]])}const Gd=m({pool_:KL});function JL(e,t){let n=u(e,"base","pow"),r=u(t,"exp","pow");[n,r]=Y(n,r);const o={a:n,b:r},i=(a,s)=>{const c=a.pow(n,r);return s([n,r,c]),c};return b.runKernelFunc(i,o,null,fi)}const Qe=m({pow_:JL});function XL(e,t){const n=u(e,"x","prelu"),r=u(t,"alpha","prelu"),o=(a,s)=>{const c=a.prelu(n,r);return s([n,r]),c},i={x:n,alpha:r};return b.runKernelFunc(o,i,null,gi)}const Ca=m({prelu_:XL});function ZL(e,t=null,n=!1){let r=u(e,"x","prod");const o=s=>{r.dtype==="bool"&&(r=_(r,"int32"));const c=H(t,r.shape),p=fe(c,r.rank);let l=c,h=r;p!=null&&(h=K(r,p),l=ke(l.length,r.rank));let d=s.prod(h,l);if(n){const g=we(d.shape,c);d=y(d,g)}return d},i={x:r},a={axis:t,keepDims:n};return b.runKernelFunc(o,i,null,gp,a)}const Pd=m({prod_:ZL});function QL(e,t,n){const r=ee(e);let o=null;if(n==null||n==="float32")o=new Float32Array(r);else if(n==="int32")o=new Int32Array(r);else if(n==="bool")o=new Uint8Array(r);else throw new Error(`Unknown data type ${n}`);for(let i=0;i=1||i===0);const a=Math.sqrt(-2*Math.log(i)/i);e=this.mean+this.stdDev*r*a,t=this.mean+this.stdDev*o*a,(!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}}class zd{constructor(e,t,n,r){this.alpha=e,this.beta=1/t,this.dtype=n;const o=r||Math.random();this.randu=Ea.alea(o.toString()),this.randn=new ms(0,1,n,!1,this.randu()),e<1?this.d=e+2/3:this.d=e-1/3,this.c=1/Math.sqrt(9*this.d)}nextValue(){let e,t,n,r,o,i;for(;;){do r=this.randn.nextValue(),i=1+this.c*r;while(i<=0);if(i*=i*i,e=r*r,t=1-.331*e*e,n=.5*e+this.d*(1-i+Math.log(i)),o=this.randu(),othis.dtype==null||this.dtype==="float32",this.min=e,this.range=t-e,this.dtype=n,r==null&&(r=Math.random()),typeof r=="number"&&(r=r.toString()),!this.canReturnFloat()&&this.range<=1)throw new Error(`The difference between ${e} - ${t} <= 1 and dtype is not float`);this.random=Ea.alea(r)}convertValue(e){return this.canReturnFloat()?e:Math.round(e)}nextValue(){return this.convertValue(this.min+this.range*this.random())}}function ev(e,t,n=1,r="float32",o){if(n==null&&(n=1),r==null&&(r="float32"),r!=="float32"&&r!=="int32")throw new Error(`Unsupported data type ${r}`);const i=new zd(t,n,r,o),a=Ee(e,r);for(let s=0;s{const a=e===t,s=e1;if(a||s||c)return Ce([0],r);const p=Math.abs(Math.ceil((t-e)/n)),l=Wt(p,r);t{const i=r.reciprocal(t);return o([t]),i},n,null,bi)}const Kd=m({reciprocal_:rv});function ov(e){const t=u(e,"x","relu"),n=(o,i)=>(i([t]),t.dtype==="bool"?_(t,"int32"):o.relu(t)),r={x:t};return b.runKernelFunc(n,r,null,wi)}const ie=m({relu_:ov});function iv(e){const t=u(e,"x","relu6"),n=(o,i)=>(i([t]),t.dtype==="bool"?_(t,"int32"):o.relu6(t)),r={x:t};return b.runKernelFunc(n,r,null,vi)}const ka=m({relu6_:iv});function sv(e,t){const n=u(e,"x","reverse"),r=a=>{const s=H(t,n.shape);if(n.rank===0)return dt(n);const c=a.reverse(n,s);return y(c,n.shape)},o={x:n},i={dims:t};return b.runKernelFunc(r,o,null,Si,i)}const et=m({reverse_:sv});function av(e){const t=u(e,"x","reverse");return f(t.rank===1,()=>`Error in reverse1D: x must be rank 1 but got rank ${t.rank}.`),et(t,0)}const Jd=m({reverse1d_:av});function cv(e,t){const n=u(e,"x","reverse");return f(n.rank===2,()=>`Error in reverse2D: x must be rank 2 but got rank ${n.rank}.`),et(n,t)}const Xd=m({reverse2d_:cv});function pv(e,t){const n=u(e,"x","reverse");return f(n.rank===3,()=>`Error in reverse3D: x must be rank 3 but got rank ${n.rank}.`),et(n,t)}const Zd=m({reverse3d_:pv});function lv(e,t){const n=u(e,"x","reverse");return f(n.rank===4,()=>`Error in reverse4D: x must be rank 4 but got rank ${n.rank}.`),et(n,t)}const Qd=m({reverse4d_:lv});function hv(e){const t=u(e,"x","round"),n={x:t};return b.runKernelFunc(r=>r.round(t),n,null,Ii)}const em=m({round_:hv});function uv(e){const t=u(e,"x","rsqrt"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.rsqrt(t);return o([t]),i},n,null,Ti)}const Da=m({rsqrt_:uv});function dv(e){const t=u(e,"x","selu"),n=(o,i)=>{const a=o.selu(t);return i([t]),a},r={x:t};return b.runKernelFunc(n,r,null,Ni)}const tm=m({selu_:dv});function mv(e,t,n,r,o,i=[1,1],a="NHWC"){const s=u(e,"x","separableConv2d"),c=u(t,"depthwiseFilter","separableConv2d"),p=u(n,"pointwiseFilter","separableConv2d");let l=s,h=!1;if(s.rank===3&&(h=!0,l=y(s,[1,s.shape[0],s.shape[1],s.shape[2]])),a==="NCHW")throw new Error("separableConv2d currently does not support dataFormat NCHW; only NHWC is supported");f(l.rank===4,()=>`Error in separableConv2d: input must be rank 4, but got rank ${l.rank}.`),f(c.rank===4,()=>`Error in separableConv2d: depthwise filter must be rank 4, but got rank ${c.rank}.`),f(p.rank===4,()=>`Error in separableConv2d: pointwise filter must be rank 4, but got rank ${c.rank}.`),f(p.shape[0]===1,()=>`Error in separableConv2d: the first dimension of pointwise filter must be 1, but got ${p.shape[0]}.`),f(p.shape[1]===1,()=>`Error in separableConv2d: the second dimension of pointwise filter must be 1, but got ${p.shape[1]}.`);const d=c.shape[2],g=c.shape[3];f(p.shape[2]===d*g,()=>`Error in separableConv2d: the third dimension of pointwise filter must be ${d*g}, but got ${p.shape[2]}.`);const x=wn(l,c,r,o,a,i),w=1,L=ve(x,p,w,"valid",a);return h?y(L,[L.shape[1],L.shape[2],L.shape[3]]):L}const Wr=m({separableConv2d_:mv});async function fv(e,t){const n=u(e,"x","setdiff1d"),r=u(t,"y","setdiff1d");f(n.dtype===r.dtype,()=>`x and y should have the same dtype, but got x (${n.dtype}) and y (${r.dtype}).`),f(n.rank===1,()=>`x should be 1D tensor, but got x (${n.shape}).`),f(r.rank===1,()=>`y should be 1D tensor, but got y (${r.shape}).`);const o=await n.data(),i=await r.data(),a=new Set(i);let s=0;for(let l=0;lr.sign(t),n,null,Ei)}const rm=m({sign_:gv});function bv(e){const t=u(e,"x","sin"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sin(t);return o([t]),i},n,null,_i)}const Fa=m({sin_:bv});function wv(e){const t=u(e,"x","sinh"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sinh(t);return o([t]),i},n,null,Ci)}const Ma=m({sinh_:wv});function xv(e,t,n){const r=u(e,"x","slice1d");return f(r.rank===1,()=>`slice1d expects a rank-1 tensor, but got a rank-${r.rank} tensor`),P(r,[t],[n])}const om=m({slice1d_:xv});function yv(e,t,n){const r=u(e,"x","slice2d");return f(r.rank===2,()=>`slice2d expects a rank-2 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const im=m({slice2d_:yv});function Lv(e,t,n){const r=u(e,"x","slice3d");return f(r.rank===3,()=>`slice3d expects a rank-3 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const Ua=m({slice3d_:Lv});function vv(e,t,n){const r=u(e,"x","slice4d");return f(r.rank===4,()=>`slice4d expects a rank-4 tensor, but got a rank-${r.rank} tensor`),P(r,t,n)}const sm=m({slice4d_:vv});function Sv(e,t=-1){const n=u(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}`);const r={logits:n},o={dim:t};return b.runKernelFunc((i,a)=>{const s=i.softmax(n,t);return a([s]),s},r,null,Wi,o)}const Ln=m({softmax_:Sv});function Iv(e){f(e.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${e.dtype}.`);const t={input:e};return b.runKernelFunc(n=>{const r=e.shape[e.shape.length-1],o=e.size/r,i=e.as2D(o,r),a=n.fft(i);return a.reshape(e.shape)},t,null,Kc)}const Br=m({fft_:Iv});function Tv(e){f(e.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${e.dtype}.`);const t={input:e};return b.runKernelFunc(n=>{const r=e.shape[e.shape.length-1],o=e.size/r,i=y(e,[o,r]),a=n.ifft(i);return y(a,e.shape)},t,null,ep)}const Wn=m({ifft_:Tv});function Av(e){const t=e.shape[e.shape.length-1],n=e.size/t;let r;if(t<=2){const o=y(e,[n,t]);r=Wn(o)}else{const o=[n,2*(t-1)],i=y(Zt(e),[n,t]),a=y(yn(e),[n,t]),s=et(P(i,[0,1],[n,t-2]),1),c=v(et(P(a,[0,1],[n,t-2]),1),C(-1)),p=Z([i,s],1),l=Z([a,c],1),h=y(Je(p,l),[o[0],o[1]]);r=Wn(h)}if(r=Zt(r),e.rank===3&&e.shape[0]!==0){const o=r,i=e.shape[0];r=y(r,[i,r.shape[0]/i,r.shape[1]]),o.dispose()}return r}const Wa=m({irfft_:Av});function yl(e,t,n=0){let r=[];if(typeof t=="number")f(e.shape[n]%t===0,()=>"Number of splits must evenly divide the axis."),r=new Array(t).fill(e.shape[n]/t);else{const o=t.reduce((a,s)=>(s===-1&&(a+=1),a),0);f(o<=1,()=>"There should be only one negative value in split array.");const i=t.indexOf(-1);if(i!==-1){const a=t.reduce((s,c)=>c>0?s+c:s);t[i]=e.shape[n]-a}f(e.shape[n]===t.reduce((a,s)=>a+s),()=>"The sum of sizes must match the size of the axis dimension."),r=t}return r}function Nv(e,t,n=0){const r=u(e,"x","split"),o=(s,c)=>{const p=H(n,r.shape)[0],l=yl(r,t,p);return s.split(r,l,p)},i={x:r},a={numOrSizeSplits:t,axis:n};return b.runKernelFunc(o,i,null,Ui,a)}const Qt=m({split_:Nv});function Rv(e,t){f(e.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${e.dtype}`);let n=e.shape[e.shape.length-1];const r=e.size/n;let o;if(t!=null&&t0),w=e.shape.map(L=>L);w[e.shape.length-1]=t,o=P(e,x,w),n=t}else if(t!=null&&t>n){const x=e.shape.map(w=>w);x[e.shape.length-1]=t-n,o=Z([e,Ce(x)],e.shape.length-1),n=t}else o=e;const i=B(o),a=y(Je(o,i),[r,n]),s=Br(a),c=Math.floor(n/2)+1,p=Zt(s),l=yn(s),h=Qt(p,[c,n-c],p.shape.length-1),d=Qt(l,[c,n-c],l.shape.length-1),g=o.shape.slice();return g[o.shape.length-1]=c,y(Je(h[0],d[0]),g)}const $r=m({rfft_:Rv});function _v(e){const t=u(e,"x","sqrt"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.sqrt(t);return o([t]),i},n,null,Di)}const ge=m({sqrt_:_v});function Cv(e,t){let n=u(e,"a","squaredDifference"),r=u(t,"b","squaredDifference");[n,r]=Y(n,r),q(n.shape,r.shape);const o=(s,c)=>{const p=s.squaredDifference(n,r);return c([n,r]),p},i={a:n,b:r},a={};return b.runKernelFunc(o,i,null,Bi,a)}const jr=m({squaredDifference_:Cv});function Ev(e,t){const n=u(e,"x","squeeze");return y(n,Cp(n.shape,t).newShape)}const Gr=m({squeeze_:Ev});function Ov(e,t=0){const n=Jt(e,"tensors","stack");if(f(n.length>=1,()=>"Pass at least one tensor to tf.stack"),n.length===1)return nt(n[0],t);const r=n[0].rank,o=n[0].shape,i=n[0].dtype;f(t<=r,()=>"Axis must be <= rank of the tensor"),n.forEach(s=>{G(o,s.shape,"All tensors passed to stack must have matching shapes"),f(i===s.dtype,()=>"All tensors passed to stack must have matching dtypes")});const a=n.map(s=>nt(s,t));return Z(a,t)}const Fe=m({stack_:Ov});function kv(e,t=0){const n=u(e,"x","step"),r={x:n},o={alpha:t};return b.runKernelFunc(i=>i.step(n,t),r,null,Vi,o)}const zt=m({step_:kv});function Dv(e,t,n,r,o=0,i=0,a=0,s=0,c=0){let p=u(e,"x","stridedSlice");const l=g=>{r==null&&(r=new Array(t.length));const x=ps(a);if(x.length>1)throw new Error("Multiple ellipses in slice is not allowed.");if(a!==0&&s!==0)throw new Error("Using both ellipsisMask and newAxisMask is not yet supported.");if(a!==0&&c!==0)throw new Error("Using both ellipsisMask and shrinkAxisMask is not yet supported.");const w=p.rank-t.length,L=ps(s),S=p.shape.slice();L.forEach(U=>{t[U]=0,n[U]=1,S.splice(U,0,1)}),p=y(p,S);const{begin:I,end:R,strides:A}=il(p.shape,x,w,t,n,r,o,i,a);t=I,n=R,r=A;const E=ps(c);E.forEach(U=>{n[U]=t[U]+1,r[U]=1});const F=ol(t,n,r),M=F.filter((U,Q)=>E.indexOf(Q)===-1),j=r.every(U=>U===1);if(j)return y(P(p,t,F),M);const $=g.stridedSlice(p,t,n,r);return y($,M)},h={x:p},d={begin:t,end:n,strides:r,beginMask:o,endMask:i,ellipsisMask:a,newAxisMask:s,shrinkAxisMask:c};return b.runKernelFunc(l,h,null,Ip,d)}const am=m({stridedSlice_:Dv});function Fv(e){const t=u(e,"x","tan"),n={x:t};return b.runKernelFunc((r,o)=>{const i=r.tan(t);return o([t]),i},n,null,ji)}const cm=m({tan_:Fv});function wt(e,t,n){if(at(e),t!=null&&t.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const r=Be(e,n);if(r.length!==2&&r.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Pe(e,t,r,n)}function xt(e,t,n){if(at(e),t!=null&&t.length!==4)throw new Error("tensor4d() requires shape to have four numbers");const r=Be(e,n);if(r.length!==4&&r.length!==1)throw new Error("tensor4d() requires values to be number[][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor4d() requires shape to be provided when `values` are a flat array");return Pe(e,t,r,n)}function pm(e,t,n){if(at(e),t!=null&&t.length!==5)throw new Error("tensor5d() requires shape to have five numbers");const r=Be(e,n);if(r.length!==5&&r.length!==1)throw new Error("tensor5d() requires values to be number[][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor5d() requires shape to be provided when `values` are a flat array");return Pe(e,t,r,n)}function lm(e,t,n){if(at(e),t!=null&&t.length!==6)throw new Error("tensor6d() requires shape to have six numbers");const r=Be(e,n);if(r.length!==6&&r.length!==1)throw new Error("tensor6d() requires values to be number[][][][][][] or flat/TypedArray");if(r.length===1&&t==null)throw new Error("tensor6d() requires shape to be provided when `values` are a flat array");return t=t||r,Pe(e,t,r,n)}function Mv(e,t=1,n=!0){const r=u(e,"x","topk");if(r.rank===0)throw new Error("topk() expects the input to be of rank 1 or higher");const o=r.shape[r.shape.length-1];if(t>o)throw new Error(`'k' passed to topk() must be <= the last dimension (${o}) but got ${t}`);const i={x:r},a={k:t,sorted:n},[s,c]=b.runKernelFunc(p=>p.topk(r,t,n),i,null,Tp,a);return{values:s,indices:c}}const hm=m({topk_:Mv});function Uv(e,t=0,n=1,r,o){if(r!=null&&r==="bool")throw new Error("Unsupported data type $ { dtype }");const i=new ms(t,n,r,!0,o),a=Ee(e,r);for(let s=0;s"numSegments must be of dtype int");const i={x:r,segmentIds:o},a={numSegments:n},s=(c,p)=>{const l=c.unsortedSegmentSum(r,o,n);return p([o]),l};return b.runKernelFunc(s,i,null,Hi,a)}const Ba=m({unsortedSegmentSum_:Wv});function Bv(e,t=0){const n=u(e,"x","unstack");f(t>=-n.shape.length&&t`Axis = ${t} is not in [-${n.shape.length}, ${n.shape.length})`),t<0&&(t+=n.shape.length);const r={value:n},o={axis:t},i=a=>a.unstack(n,t);return b.runKernelFunc(i,r,null,zi,o)}const Ae=m({unstack_:Bv});function dm(e,t=!0,n,r){return b.makeVariable(e,t,n,r)}function $a(e,t){const n=[];for(let i=0;i0,()=>"mask cannot be scalar"),G(s.slice(i,i+a),o.shape,"mask's shape must match the first K dimensions of tensor's shape,");let c=1;for(let w=i;w"Shape mismatch in v and x");const c=C(1),p=k(c,s);let l=v(k(a,i),p);if(o){f(r!=null,()=>"When using zeroDebias: true, step is required.");const h=u(r,"step","movingAverage");l=D(l,k(c,Qe(s,h)))}return N(i,l)}const LS=m({movingAverage_:yS});function vS(e,t,n){const r=u(e,"indices","scatterND","int32"),o=u(t,"updates","scatterND");ma(o,r,n);const i=c=>c.scatterND(r,o,n),a={indices:r,updates:o},s={shape:n};return b.runKernelFunc(i,a,null,Lp,s)}const SS=m({scatterND_:vS});function fm(e,t,n,r){if(e.dtype!=="int32")throw new Error(`tf.sparseToDense() expects the indices to be int32 type, but the dtype was ${e.dtype}.`);if(e.rank>2)throw new Error(`sparseIndices should be a scalar, vector, or matrix, but got shape ${e.shape}.`);const o=e.rank>0?e.shape[0]:1,i=e.rank>1?e.shape[1]:1;if(n.length!==i)throw new Error(`outputShape has incorrect number of elements:, ${n.length}, should be: ${i}.`);const a=t.size;if(!(t.rank===0||t.rank===1&&a===o))throw new Error(`sparseValues has incorrect shape ${t.shape}, should be [] or [${o}]`);if(t.dtype!==r.dtype)throw new Error("sparseValues.dtype must match defaultValues.dtype")}function IS(e,t,n,r=0){const o=u(e,"sparseIndices","sparseToDense","int32"),i=u(t,"sparseValues","sparseToDense"),a=u(r,"defaultValue","sparseToDense",i.dtype);fm(o,i,n,a);const s={sparseIndices:o,sparseValues:i,defaultValue:a},c={outputShape:n};return b.runKernelFunc(p=>p.sparseToDense(o,i,n,a),s,null,Sp,c)}const TS=m({sparseToDense_:IS});function AS(e,t){const n=u(t,"indices","gatherND","int32"),r=u(e,"x","gatherND"),o=a=>a.gatherND(r,n),i={params:r,indices:n};return b.runKernelFunc(o,i,null,Zc)}const NS=m({gatherND_:AS});function gm(e,t){if(t==null)return e.shape.slice();if(Se(e.shape,t))return t;if(e.shape.length===t.length){const n=[];for(let r=0;r`x has to be a floating point tensor since it's going to be scaled, but got a ${o.dtype} tensor instead.`),f(t>=0&&t<1,()=>`rate must be a float in the range [0, 1), but got ${t}.`),t===0)return e instanceof te?o.clone():o;const i=gm(o,n),a=1-t,s=D(Er(N(Oa(i,0,1,"float32",r),a)),a);return v(o,s)}const _S=m({dropout_:RS});function Ll(e){return Math.floor(Math.pow(2,Math.ceil(Math.log(e)/Math.log(2))))}function bs(e,t,n){const r=1-e%2,o=new Float32Array(e);for(let i=0;i1,()=>`inTopK() expects the predictions to be of rank 2 or higher, but got ${r.rank}`),f(r.rank-1===o.rank,()=>`predictions rank should be 1 larger than targets rank, but got predictions rank ${r.rank} and targets rank ${o.rank}`),G(r.shape.slice(0,r.shape.length-1),o.shape,"predictions's shape should be align with the targets' shape, except the last dimension.");const i=r.shape[r.shape.length-1];f(n>0&&n<=i,()=>`'k' passed to inTopK() must be > 0 && <= the predictions last dimension (${i}), but got ${n}`);const a=await r.data(),s=await o.data(),[c,p]=[a.length/i,i],l=mr("bool",c);for(let h=0;hL.value-w.value),l[h]=0;for(let w=0;w`Error in conv2dDerFilter: input must be rank 4, but got shape ${s.shape}.`),f(c.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${c.shape}.`),f(n.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${n}.`);const p=i==="NHWC"?s.shape[3]:s.shape[1],l=i==="NHWC"?c.shape[3]:c.shape[1];f(p===n[2],()=>`Error in conv2dDerFilter: depth of input ${p}) must match input depth in filter (${n[2]}.`),f(l===n[3],()=>`Error in conv2dDerFilter: depth of dy (${l}) must match output depth for filter (${n[3]}).`),a!=null&&f(X(o),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${a} but got pad ${o}.`);const h=x=>{const w=1,L=gn(i),S=je(s.shape,n,r,w,o,a,!1,L);return x.conv2dDerFilter(s,c,S)},d={x:s,dy:c},g={strides:r,pad:o,dataFormat:i,dimRoundingMode:a};return b.runKernelFunc(h,d,null,Uc,g)}const Pr=m({conv2DBackpropFilter_:OS});function Bn(e,t,n){if(n==null||n==="linear")return e;if(n==="relu")return v(e,zt(t));throw new Error(`Cannot compute gradient for fused activation ${n}.`)}function $n(e,t){let n=t;const r=ae(e.shape,t.shape);return r.length>0&&(n=W(n,r)),y(n,e.shape)}function jn(e,t,n){if(t==="linear")return e;if(t==="relu")return ie(e);if(t==="elu")return La(e);if(t==="relu6")return ka(e);if(t==="prelu")return Ca(e,n);throw new Error(`Unknown fused activation ${t}.`)}const Gn=(e,t)=>{const n=e>0;return!n||t==="linear"};function kS({x:e,filter:t,strides:n,pad:r,dataFormat:o="NHWC",dilations:i=[1,1],dimRoundingMode:a,bias:s,activation:c="linear",preluActivationWeights:p}){if(c=c||"linear",Gn(b.state.gradientDepth,c)===!1){let E=ve(e,t,n,r,o,i,a);return s!=null&&(E=N(E,s)),jn(E,c,p)}const l=u(e,"x","conv2d"),h=u(t,"filter","conv2d");let d=l,g=!1;l.rank===3&&(g=!0,d=y(l,[1,l.shape[0],l.shape[1],l.shape[2]])),f(d.rank===4,()=>`Error in fused conv2d: input must be rank 4, but got rank ${d.rank}.`),f(h.rank===4,()=>`Error in fused conv2d: filter must be rank 4, but got rank ${h.rank}.`),a!=null&&f(X(r),()=>`Error in fused conv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${r}.`),f(d.shape[3]===h.shape[2],()=>`Error in conv2d: depth of input (${d.shape[3]}) must match input depth for filter ${h.shape[2]}.`),f(le(n,i),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),f(o==="NHWC",()=>`Error in conv2d: got dataFormat of ${o} but only NHWC is currently supported.`);const x=je(d.shape,h.shape,n,i,r,a);let w;s!=null&&(w=u(s,"bias","fused conv2d"),[w]=Y(w,l),q(x.outShape,w.shape));let L;p!=null&&(L=u(p,"prelu weights","fused conv2d"));const S=(E,F)=>{const[M,j,$,U]=F,Q=Bn(E,$,c);f(ct(i),()=>`Error in gradient of fused conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${i}'`);const ne=_r(j.shape,Q,M,n,r),he=Pr(j,Q,M.shape,n,r),xe=[ne,he];if(U!=null){const Ue=$n(U,Q);xe.push(Ue)}return xe},I=E=>{const F=E.fusedConv2d({input:d,filter:h,convInfo:x,bias:w,activation:c,preluActivationWeights:L});return F},R={x:d,filter:h,bias:w,preluActivationWeights:L},A={strides:n,pad:r,dataFormat:o,dilations:i,dimRoundingMode:a,activation:c};if(s==null){const E=ze((F,M,j)=>{let $=b.runKernelFunc(I,R,null,oa,A);return j([M,F,$]),g&&($=y($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:S}});return E(d,h)}else{const E=ze((F,M,j,$)=>{let U=b.runKernelFunc(I,R,null,oa,A);return $([M,F,U,j]),g&&(U=y(U,[U.shape[1],U.shape[2],U.shape[3]])),{value:U,gradFunc:S}});return E(d,h,w)}}const DS=m({fusedConv2d_:kS});function FS(e,t,n,r){let o=e;e.rank===3&&(o=y(e,[1,e.shape[0],e.shape[1],e.shape[2]]));let i=t;i.rank===3&&(i=y(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const a=c=>c.depthwiseConv2DDerFilter(o,i,r),s={x:o,dy:i};return b.runKernelFunc(a,s,null,Gc)}const Ga=m({depthwiseConv2dNativeBackpropFilter_:FS});function MS(e,t,n,r){let o=t,i=!1;t.rank===3&&(i=!0,o=y(t,[1,t.shape[0],t.shape[1],t.shape[2]]));const a=p=>p.depthwiseConv2DDerInput(o,n,r),s={dy:o},c=b.runKernelFunc(a,s,null,Pc);return i?y(c,[c.shape[1],c.shape[2],c.shape[3]]):c}const Pa=m({depthwiseConv2dNativeBackpropInput_:MS});function US({x:e,filter:t,strides:n,pad:r,dataFormat:o="NHWC",dilations:i=[1,1],dimRoundingMode:a,bias:s,activation:c="linear",preluActivationWeights:p}){if(Gn(b.state.gradientDepth,c)===!1){let E=wn(e,t,n,r,o,i,a);return s!=null&&(E=N(E,s)),jn(E,c,p)}const l=u(e,"x","depthwiseConv2d"),h=u(t,"filter","depthwiseConv2d");let d=l,g=!1;l.rank===3&&(g=!0,d=y(l,[1,l.shape[0],l.shape[1],l.shape[2]])),f(d.rank===4,()=>`Error in fused depthwiseConv2d: input must be rank 4, but got rank ${d.rank}.`),f(h.rank===4,()=>`Error in fused depthwiseConv2d: filter must be rank 4, but got rank ${h.rank}.`),f(d.shape[3]===h.shape[2],()=>`Error in fused depthwiseConv2d: number of input channels (${d.shape[3]}) must match the inChannels dimension in filter ${h.shape[2]}.`),i==null&&(i=[1,1]),f(le(n,i),()=>`Error in fused depthwiseConv2d: Either strides or dilations must be 1. Got strides ${n} and dilations '${i}'`),a!=null&&f(X(r),()=>`Error in fused depthwiseConv2d: pad must be an integer when using dimRoundingMode ${a} but got pad ${r}.`);const x=je(d.shape,h.shape,n,i,r,a,!0);let w;s!=null&&(w=u(s,"bias","fused conv2d"),[w]=Y(w,l),q(x.outShape,w.shape));let L;p!=null&&(L=u(p,"prelu weights","fused depthwiseConv2d"));const S=(E,F)=>{f(ct(i),()=>`Error in gradient of fused depthwiseConv2d: dilation rates greater than 1 are not yet supported. Got dilations '${i}'`);const[M,j,$,U]=F,Q=Bn(E,$,c),ne=Pa(j.shape,Q,M,x),he=Ga(j,Q,M.shape,x);if(U!=null){const xe=$n(w,Q);return[ne,he,xe]}return[ne,he]},I=E=>{const F=E.fusedDepthwiseConv2D({input:d,filter:h,convInfo:x,bias:w,activation:c,preluActivationWeights:L});return F},R={x:d,filter:h,bias:w,preluActivationWeights:L},A={strides:n,pad:r,dataFormat:o,dilations:i,dimRoundingMode:a,activation:c};if(s==null){const E=ze((F,M,j)=>{let $=b.runKernelFunc(I,R,null,ia,A);return j([M,F,$]),g&&($=y($,[$.shape[1],$.shape[2],$.shape[3]])),{value:$,gradFunc:S}});return E(d,h)}else{const E=ze((F,M,j,$)=>{let U=b.runKernelFunc(I,R,null,ia,A);return $([M,F,U,j]),g&&(U=y(U,[U.shape[1],U.shape[2],U.shape[3]])),{value:U,gradFunc:S}});return E(d,h,w)}}const WS=m({fusedDepthwiseConv2d_:US});function BS({a:e,b:t,transposeA:n=!1,transposeB:r=!1,bias:o,activation:i="linear",preluActivationWeights:a}){if(Gn(b.state.gradientDepth,i)===!1){let U=V(e,t,n,r);return o!=null&&(U=N(U,o)),jn(U,i,a)}let s=u(e,"a","fused matMul"),c=u(t,"b","fused matMul");[s,c]=Y(s,c);const p=n?s.shape[s.rank-2]:s.shape[s.rank-1],l=r?c.shape[c.rank-1]:c.shape[c.rank-2],h=n?s.shape[s.rank-1]:s.shape[s.rank-2],d=r?c.shape[c.rank-2]:c.shape[c.rank-1],g=s.shape.slice(0,-2),x=c.shape.slice(0,-2),w=ee(g),L=ee(x);f(s.rank>=2&&c.rank>=2&&s.rank===c.rank,()=>`Error in fused matMul: inputs must have the same rank of at least 2, got ranks ${s.rank} and ${c.rank}.`),f(Se(g,x),()=>`Error in fused matMul: outer dimensions (${g}) and (${x}) of Tensors with shapes ${s.shape} and ${c.shape} must match.`),f(p===l,()=>`Error in fused matMul: inner shapes (${p}) and (${l}) of Tensors with shapes ${s.shape} and ${c.shape} and transposeA=${n} and transposeB=${r} must match.`);const S=s.shape.slice(0,-2).concat([h,d]),I=n?y(s,[w,p,h]):y(s,[w,h,p]),R=r?y(c,[L,d,l]):y(c,[L,l,d]);let A;o!=null&&(A=u(o,"bias","fused matMul"),[A]=Y(A,s),q(S,A.shape));let E;a!=null&&(E=u(a,"prelu weights","fused matMul"));const F=(U,Q)=>{const[ne,he,xe,Ue]=Q,vt=Bn(y(U,xe.shape),xe,i);let sn,tr;if(!n&&!r?(sn=V(vt,he,!1,!0),tr=V(ne,vt,!0,!1)):!n&&r?(sn=V(vt,he,!1,!1),tr=V(vt,ne,!0,!1)):n&&!r?(sn=V(he,vt,!1,!0),tr=V(ne,vt,!1,!1)):(sn=V(he,vt,!0,!0),tr=V(vt,ne,!0,!0)),o!=null){const Ab=$n(Ue,vt);return[sn,tr,Ab]}else return[sn,tr]},M=U=>{const Q=U.fusedBatchMatMul({a:I,b:R,transposeA:n,transposeB:r,bias:A,activation:i,preluActivationWeights:E});return Q},j={a:I,b:R,bias:A,preluActivationWeights:E},$={transposeA:n,transposeB:r,activation:i};if(o==null){const U=ze((Q,ne,he)=>{const xe=b.runKernelFunc(M,j,null,ra,$);return he([Q,ne,xe]),{value:y(xe,S),gradFunc:F}});return U(I,R)}else{const U=ze((Q,ne,he,xe)=>{const Ue=b.runKernelFunc(M,j,null,ra,$);return xe([Q,ne,Ue,he]),{value:y(Ue,S),gradFunc:F}});return U(I,R,A)}}const $S=m({fusedMatMul_:BS});const bm={};_e(bm,{conv2d:()=>DS,depthwiseConv2d:()=>WS,matMul:()=>$S});function jS(e){return bs(e,.54,.46)}const wm=m({hammingWindow_:jS});function GS(e){return bs(e,.5,.5)}const qa=m({hannWindow_:GS});function PS(e,t,n,r=!1,o=0){let i=0;const a=[];for(;i+t<=e.size;)a.push(P(e,i,t)),i+=n;if(r)for(;i`Error in cropAndResize: image must be rank 4,but got rank ${a.rank}.`),f(s.rank===2&&s.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${p},4] but had shape ${s.shape}.`),f(c.rank===1&&c.shape[0]===p,()=>`Error in cropAndResize: boxInd must be have size [${p}] but had shape ${s.shape}.`),f(r.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${r.length}.`),f(r[0]>=1&&r[1]>=1,()=>`cropSize must be atleast [1,1], but was ${r}`),f(o==="bilinear"||o==="nearest",()=>`method must be bilinear or nearest, but was ${o}`);const l=x=>x.cropAndResize(a,s,c,r,o,i),h={image:a,boxes:s,boxInd:c},d={method:o,extrapolationValue:i,cropSize:r},g=b.runKernelFunc(l,h,null,$c,d);return g}const ym=m({cropAndResize_:zS});function HS(e){const t=u(e,"image","flipLeftRight","float32");f(t.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${t.rank}.`);const n={image:t},r=b.runKernel(Xc,n,{});return r}const Lm=m({flipLeftRight_:HS});function YS(e,t,n=0,r=.5){const o=u(e,"image","rotateWithOffset","float32");f(o.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${o.rank}.`);const i={image:o},a={radians:t,fillValue:n,center:r},s=b.runKernel(Ap,i,a);return s}const vm=m({rotateWithOffset_:YS});function yt(e,t,n,r,o,i){r==null&&(r=.5),o==null&&(o=Number.NEGATIVE_INFINITY),i==null&&(i=0);const a=e.shape[0];return n=Math.min(n,a),f(0<=r&&r<=1,()=>`iouThreshold must be in [0, 1], but was '${r}'`),f(e.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${e.rank}'`),f(e.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${e.shape[1]}`),f(t.rank===1,()=>"scores must be a 1D tensor"),f(t.shape[0]===a,()=>`scores has incompatible shape with boxes. Expected ${a}, but was ${t.shape[0]}`),f(0<=i&&i<=1,()=>`softNmsSigma must be in [0, 1], but was '${i}'`),{maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:i}}function VS(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY){const i=u(e,"boxes","nonMaxSuppression"),a=u(t,"scores","nonMaxSuppression"),s=yt(i,a,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;const c={maxOutputSize:n,iouThreshold:r,scoreThreshold:o};return b.runKernelFunc(p=>p.nonMaxSuppression(i,a,n,r,o),{boxes:i,scores:a},null,dp,c)}const Sm=m({nonMaxSuppression_:VS});function Im(e,t,n){const r=KS(e,t,n),o=r<0?-(r+1):r;e.splice(o,0,t)}function KS(e,t,n){return XS(e,t,n||JS)}function JS(e,t){return e>t?1:e>>1);const s=n(t,e[i]);s>0?r=i+1:(o=i,a=!s)}return a?r:-r-1}function Ha(e,t,n,r,o){return vl(e,t,n,r,o,0).selectedIndices}function Ya(e,t,n,r,o,i){return vl(e,t,n,r,o,0,!1,i,!0)}function Va(e,t,n,r,o,i){return vl(e,t,n,r,o,i,!0)}function vl(e,t,n,r,o,i,a=!1,s=!1,c=!1){const p=[];for(let L=0;Lo&&p.push({score:t[L],boxIndex:L,suppressBeginIndex:0});p.sort(Tm);const l=i>0?-.5/i:0,h=[],d=[];for(;h.length0;){const L=p.pop(),{score:S,boxIndex:I,suppressBeginIndex:R}=L;if(S=R;--E){const F=ZS(e,I,h[E]);if(F>=r){A=!0;break}if(L.score=L.score*QS(r,l,F),L.score<=o)break}L.suppressBeginIndex=h.length,A||(L.score===S?(h.push(I),d.push(L.score)):L.score>o&&Im(p,L,Tm))}const g=h.length,x=n-g;s&&x>0&&(h.push(...new Array(x).fill(0)),d.push(...new Array(x).fill(0)));const w={selectedIndices:ce(h,"int32")};return a&&(w.selectedScores=ce(d,"float32")),c&&(w.validOutputs=C(g,"int32")),w}function ZS(e,t,n){const r=e.subarray(t*4,t*4+4),o=e.subarray(n*4,n*4+4),i=Math.min(r[0],r[2]),a=Math.min(r[1],r[3]),s=Math.max(r[0],r[2]),c=Math.max(r[1],r[3]),p=Math.min(o[0],o[2]),l=Math.min(o[1],o[3]),h=Math.max(o[0],o[2]),d=Math.max(o[1],o[3]),g=(s-i)*(c-a),x=(h-p)*(d-l);if(g<=0||x<=0)return 0;const w=Math.max(i,p),L=Math.max(a,l),S=Math.min(s,h),I=Math.min(c,d),R=Math.max(S-w,0)*Math.max(I-L,0);return R/(g+x-R)}function QS(e,t,n){const r=Math.exp(t*n*n);return n<=e?r:0}function Tm(e,t){return e.score-t.score||e.score===t.score&&t.boxIndex-e.boxIndex}async function eI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY){const i=u(e,"boxes","nonMaxSuppressionAsync"),a=u(t,"scores","nonMaxSuppressionAsync"),s=yt(i,a,n,r,o);n=s.maxOutputSize,r=s.iouThreshold,o=s.scoreThreshold;const c=await Promise.all([i.data(),a.data()]),p=c[0],l=c[1],h=Ha(p,l,n,r,o);return i!==e&&i.dispose(),a!==t&&a.dispose(),h}const Am=eI;function tI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=0){const a=u(e,"boxes","nonMaxSuppression"),s=u(t,"scores","nonMaxSuppression"),c=yt(a,s,n,r,o,i);n=c.maxOutputSize,r=c.iouThreshold,o=c.scoreThreshold,i=c.softNmsSigma;const p={boxes:a,scores:s},l={maxOutputSize:n,iouThreshold:r,scoreThreshold:o,softNmsSigma:i},h=b.runKernel(fp,p,l);return{selectedIndices:h[0],selectedScores:h[1]}}const Nm=m({nonMaxSuppressionWithScore_:tI});async function nI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=0){const a=u(e,"boxes","nonMaxSuppressionAsync"),s=u(t,"scores","nonMaxSuppressionAsync"),c=yt(a,s,n,r,o,i);n=c.maxOutputSize,r=c.iouThreshold,o=c.scoreThreshold,i=c.softNmsSigma;const p=await Promise.all([a.data(),s.data()]),l=p[0],h=p[1],d=Va(l,h,n,r,o,i);return a!==e&&a.dispose(),s!==t&&s.dispose(),d}const Rm=nI;function rI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=!1){const a=u(e,"boxes","nonMaxSuppression"),s=u(t,"scores","nonMaxSuppression"),c=yt(a,s,n,r,o,null),p=c.maxOutputSize,l=c.iouThreshold,h=c.scoreThreshold,d={boxes:a,scores:s},g={maxOutputSize:p,iouThreshold:l,scoreThreshold:h,padToMaxOutputSize:i},x=b.runKernel(mp,d,g);return{selectedIndices:x[0],validOutputs:x[1]}}const _m=m({nonMaxSuppressionPadded_:rI});async function oI(e,t,n,r=.5,o=Number.NEGATIVE_INFINITY,i=!1){const a=u(e,"boxes","nonMaxSuppressionAsync"),s=u(t,"scores","nonMaxSuppressionAsync"),c=yt(a,s,n,r,o,null),p=c.maxOutputSize,l=c.iouThreshold,h=c.scoreThreshold,[d,g]=await Promise.all([a.data(),s.data()]),x=Ya(d,g,p,l,h,i);return a!==e&&a.dispose(),s!==t&&s.dispose(),x}const Cm=oI;function iI(e,t,n=!1){const r=u(e,"images","resizeBilinear");f(r.rank===3||r.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${r.rank}.`),f(t.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${t}.`);let o=r,i=!1;r.rank===3&&(i=!0,o=y(r,[1,r.shape[0],r.shape[1],r.shape[2]]));const[a,s]=t,c=(d,g)=>(g([o]),d.resizeBilinear(o,a,s,n)),p={images:o},l={alignCorners:n,size:t},h=b.runKernelFunc(c,p,null,Li,l);return i?y(h,[h.shape[1],h.shape[2],h.shape[3]]):h}const Em=m({resizeBilinear_:iI});function sI(e,t,n=!1){const r=u(e,"images","resizeNearestNeighbor");f(r.rank===3||r.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${r.rank}.`),f(t.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${t}.`),f(r.dtype==="float32"||r.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let o=r,i=!1;r.rank===3&&(i=!0,o=y(r,[1,r.shape[0],r.shape[1],r.shape[2]]));const[a,s]=t,c={images:o},p={alignCorners:n,size:t},l=(d,g)=>(g([o]),d.resizeNearestNeighbor(o,a,s,n)),h=b.runKernelFunc(l,c,null,yi,p);return i?y(h,[h.shape[1],h.shape[2],h.shape[3]]):h}const Om=m({resizeNearestNeighbor_:sI});function aI(e,t,n){f(t%1===0,()=>`bandPart(): numLower must be an integer, got ${t}.`),f(n%1===0,()=>`bandPart(): numUpper must be an integer, got ${n}.`);const r=u(e,"a","bandPart");f(r.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${r.rank}.`);const o=r.shape,[i,a]=r.shape.slice(-2);if(!(t<=i))throw new Error(`bandPart(): numLower (${t}) must not be greater than the number of rows (${i}).`);if(!(n<=a))throw new Error(`bandPart(): numUpper (${n}) must not be greater than the number of columns (${a}).`);t<0&&(t=i),n<0&&(n=a);const s=y(fs(0,i,1,"int32"),[-1,1]),c=fs(0,a,1,"int32"),p=k(s,c),l=_t(bt(p,C(+t,"int32")),gt(p,C(-n,"int32"))),h=Ce([i,a],r.dtype);return y(Fe(Ae(y(r,[-1,i,a])).map(d=>De(l,d,h))),o)}const km=m({bandPart_:aI});function cI(e){let t;if(Array.isArray(e)){t=!1,f(e!=null&&e.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const o=e[0].shape[0];for(let i=1;i`Gram-Schmidt: Non-unique lengths found in the input vectors: (${e[i].shape[0]} vs. ${o})`)}else t=!0,e=Qt(e,e.shape[0],0).map(o=>Gr(o,[0]));f(e.length<=e[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${e.length}) exceeds number of dimensions (${e[0].shape[0]}).`);const n=[],r=e;for(let o=0;o{let i=r[o];if(o>0)for(let a=0;a=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${e.rank}`),e.rank===2)return Fm(e,t);{const n=e.shape.slice(0,e.shape.length-2).reduce((c,p)=>c*p),r=Ae(y(e,[n,e.shape[e.shape.length-2],e.shape[e.shape.length-1]]),0),o=[],i=[];r.forEach(c=>{const[p,l]=Fm(c,t);o.push(p),i.push(l)});const a=y(Fe(o,0),e.shape),s=y(Fe(i,0),e.shape);return[a,s]}}function Fm(e,t=!1){return b.tidy(()=>{f(e.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${e.shape.length}D Tensor.`);const n=e.shape[0],r=e.shape[1];let o=va(n),i=dt(e);const a=wt([[1]],[1,1]);let s=dt(a);const c=n>=r?r:n;for(let p=0;p{const g=P(i,[p,p],[n-p,1]),x=gs(g),w=P(i,[p,p],[1,1]),L=De(rt(w,0),wt([[-1]]),wt([[1]])),S=k(w,v(L,x)),I=D(g,S);I.shape[0]===1?s=dt(a):s=Z([a,P(I,[1,0],[I.shape[0]-1,I.shape[1]])],0);const R=re(D(V(L,S),x)),A=P(i,[p,0],[n-p,r]),E=v(R,s),F=K(s);if(p===0)i=k(A,V(E,V(F,A)));else{const $=k(A,V(E,V(F,A)));i=Z([P(i,[0,0],[p,r]),$],0)}const M=K(E),j=P(o,[0,p],[n,o.shape[1]-p]);if(p===0)o=k(j,V(V(j,s),M));else{const $=k(j,V(V(j,s),M));o=Z([P(o,[0,0],[n,p]),$],1)}return[s,i,o]}),Le([l,h,d])}return!t&&n>r&&(o=P(o,[0,0],[n,r]),i=P(i,[0,0],[r,r])),[o,i]})}const Mm=m({qr_:pI});var be;(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"})(be||(be={}));function lI(e,t,n=be.SUM_BY_NONZERO_WEIGHTS){const r=u(e,"losses","computeWeightedLoss");let o=null;t!=null&&(o=u(t,"weights","computeWeightedLoss"));const i=o==null?r:v(r,o);if(n===be.NONE)return i;if(n===be.SUM)return W(i);if(n===be.MEAN){if(o==null)return Un(i);{const a=r.size/o.size,s=D(W(i),W(o));return a>1?D(s,C(a)):s}}if(n===be.SUM_BY_NONZERO_WEIGHTS){if(o==null)return D(W(i),C(r.size));{const a=v(o,Ct(r.shape)),s=_(W(Mr(a,C(0))),"float32");return D(W(i),s)}}throw Error(`Unknown reduction: ${n}`)}const $e=m({computeWeightedLoss_:lI});function hI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){const o=u(e,"labels","absoluteDifference"),i=u(t,"predictions","absoluteDifference");let a=null;n!=null&&(a=u(n,"weights","absoluteDifference")),G(o.shape,i.shape,"Error in absoluteDifference: ");const s=Oe(k(o,i));return $e(s,a,r)}const Um=m({absoluteDifference_:hI});function uI(e,t,n,r,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","cosineDistance"),a=u(t,"predictions","cosineDistance");let s=null;r!=null&&(s=u(r,"weights","cosineDistance")),G(i.shape,a.shape,"Error in cosineDistance: ");const c=C(1),p=k(c,W(v(i,a),n,!0));return $e(p,s,o)}const Wm=m({cosineDistance_:uI});function dI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){let o=u(e,"labels","hingeLoss");const i=u(t,"predictions","hingeLoss");let a=null;n!=null&&(a=u(n,"weights","hingeLoss")),G(o.shape,i.shape,"Error in hingeLoss: ");const s=C(1);o=k(v(C(2),o),s);const c=ie(k(s,v(o,i)));return $e(c,a,r)}const Bm=m({hingeLoss_:dI});function mI(e,t,n,r=1,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","huberLoss"),a=u(t,"predictions","huberLoss");let s=null;n!=null&&(s=u(n,"weights","huberLoss")),G(i.shape,a.shape,"Error in huberLoss: ");const c=C(r),p=Oe(k(a,i)),l=Fr(p,c),h=k(p,l),d=N(v(C(.5),z(l)),v(c,h));return $e(d,s,o)}const $m=m({huberLoss_:mI});function fI(e,t,n,r=1e-7,o=be.SUM_BY_NONZERO_WEIGHTS){const i=u(e,"labels","logLoss"),a=u(t,"predictions","logLoss");let s=null;n!=null&&(s=u(n,"weights","logLoss")),G(i.shape,a.shape,"Error in logLoss: ");const c=C(1),p=C(r),l=re(v(i,Rt(N(a,p)))),h=v(k(c,i),Rt(N(k(c,a),p))),d=k(l,h);return $e(d,s,o)}const jm=m({logLoss_:fI});function gI(e,t,n,r=be.SUM_BY_NONZERO_WEIGHTS){const o=u(e,"labels","meanSquaredError"),i=u(t,"predictions","meanSquaredError");let a=null;n!=null&&(a=u(n,"weights","meanSquaredError")),G(o.shape,i.shape,"Error in meanSquaredError: ");const s=jr(o,i);return $e(s,a,r)}const Gm=m({meanSquaredError_:gI});function bI(e,t){const n=u(e,"labels","sigmoidCrossEntropyWithLogits"),r=u(t,"logits","sigmoidCrossEntropyWithLogits");G(n.shape,r.shape,"Error in sigmoidCrossEntropyWithLogits: ");const o=ie(r),i=v(r,n),a=Ia(Te(re(Oe(r))));return N(k(o,i),a)}function wI(e,t,n,r=0,o=be.SUM_BY_NONZERO_WEIGHTS){let i=u(e,"multiClassLabels","sigmoidCrossEntropy");const a=u(t,"logits","sigmoidCrossEntropy");let s=null;if(n!=null&&(s=u(n,"weights","sigmoidCrossEntropy")),G(i.shape,a.shape,"Error in sigmoidCrossEntropy: "),r>0){const p=C(r),l=C(1),h=C(.5);i=N(v(i,k(l,p)),v(h,p))}const c=bI(i,a);return $e(c,s,o)}const Pm=m({sigmoidCrossEntropy_:wI});function xI(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}`);const r=ze((o,i,a)=>{const s=!0,c=Na(i,[n],s),p=k(_(i,"float32"),c);a([o,p]);const l=re(v(p,o)),h=W(l,[n]),d=(g,x)=>{const[w,L]=x,S=we(g.shape,[n]);return[v(y(g,S),k(_(w,"float32"),Te(L))),v(y(g,S),k(Te(L),_(w,"float32")))]};return{value:h,gradFunc:d}});return r(e,t)}function yI(e,t,n,r=0,o=be.SUM_BY_NONZERO_WEIGHTS){let i=u(e,"onehotLabels","softmaxCrossEntropy");const a=u(t,"logits","softmaxCrossEntropy");let s=null;if(n!=null&&(s=u(n,"weights","softmaxCrossEntropy")),G(i.shape,a.shape,"Error in softmaxCrossEntropy: "),r>0){const p=C(r),l=C(1),h=C(i.shape[1]);i=N(v(i,k(l,p)),D(p,h))}const c=xI(i,a);return $e(c,s,o)}const qm=m({softmaxCrossEntropy_:yI});const LI={fft:Br,ifft:Wn,rfft:$r,irfft:Wa},vI={hammingWindow:wm,hannWindow:qa,frame:za,stft:xm},Sl={flipLeftRight:Lm,resizeNearestNeighbor:Om,resizeBilinear:Em,rotateWithOffset:vm,cropAndResize:ym,nonMaxSuppression:Sm,nonMaxSuppressionAsync:Am,nonMaxSuppressionWithScore:Nm,nonMaxSuppressionWithScoreAsync:Rm,nonMaxSuppressionPadded:_m,nonMaxSuppressionPaddedAsync:Cm},SI={bandPart:km,gramSchmidt:Dm,qr:Mm},II={absoluteDifference:Um,computeWeightedLoss:$e,cosineDistance:Wm,hingeLoss:Bm,huberLoss:$m,logLoss:jm,meanSquaredError:Gm,sigmoidCrossEntropy:Pm,softmaxCrossEntropy:qm};class ot extends sl{minimize(e,t=!1,n){const{value:r,grads:o}=this.computeGradients(e,n);if(n!=null){const i=n.map(a=>({name:a.name,tensor:o[a.name]}));this.applyGradients(i)}else this.applyGradients(o);return Le(o),t?r:(r.dispose(),null)}get iterations(){return this.iterations_==null&&(this.iterations_=0),this.iterations_}incrementIterations(){this.iterations_=this.iterations+1}computeGradients(e,t){return wl(e,t)}dispose(){this.iterations_!=null&&Le(this.iterations_)}async saveIterations(){return this.iterations_==null&&(this.iterations_=0),{name:"iter",tensor:C(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(ot,Symbol.hasInstance,{value:e=>e.minimize!=null&&e.computeGradients!=null&&e.applyGradients!=null});class Pn extends ot{constructor(e,t,n=null){super();this.learningRate=e,this.rho=t,this.epsilon=n,this.accumulatedGrads=[],this.accumulatedUpdates=[],n==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n],i=!1;this.accumulatedGrads[r]==null&&(this.accumulatedGrads[r]={originalName:`${n}/accum_grad`,variable:O(()=>B(o).variable(i))}),this.accumulatedUpdates[r]==null&&(this.accumulatedUpdates[r]={originalName:`${n}/accum_var`,variable:O(()=>B(o).variable(i))});const a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;const s=this.accumulatedGrads[r].variable,c=this.accumulatedUpdates[r].variable;O(()=>{const p=N(v(s,this.rho),v(z(a),1-this.rho)),l=v(D(ge(N(c,this.epsilon)),ge(N(s,this.epsilon))),a),h=N(v(c,this.rho),v(z(l),1-this.rho));s.assign(p),c.assign(h);const d=N(v(l,-this.learningRate),o);o.assign(d)})}),this.incrementIterations()}dispose(){this.accumulatedUpdates!=null&&(Le(this.accumulatedGrads.map(e=>e.variable)),Le(this.accumulatedUpdates.map(e=>e.variable)))}async getWeights(){const 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);const t=e.length/2,n=!1;this.accumulatedGrads=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedUpdates=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,rho:this.rho,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.rho,t.epsilon)}}Pn.className="Adadelta";Ze(Pn);class qn extends ot{constructor(e,t=.1){super();this.learningRate=e,this.initialAccumulatorValue=t,this.accumulatedGrads=[]}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n];if(this.accumulatedGrads[r]==null){const s=!1;this.accumulatedGrads[r]={originalName:`${n}/accumulator`,variable:O(()=>qe(o.shape,this.initialAccumulatorValue).variable(s))}}const i=Array.isArray(e)?e[r].tensor:e[n];if(i==null)return;const a=this.accumulatedGrads[r].variable;O(()=>{const s=N(a,z(i));a.assign(s);const c=N(v(D(i,ge(N(s,b.backend.epsilon()))),-this.learningRate),o);o.assign(c)})}),this.incrementIterations()}dispose(){this.accumulatedGrads!=null&&Le(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);const 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)}}qn.className="Adagrad";Ze(qn);class zn extends ot{constructor(e,t,n,r=null){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.accumulatedFirstMoment=[],this.accumulatedSecondMoment=[],O(()=>{this.accBeta1=C(t).variable(),this.accBeta2=C(n).variable()}),r==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{const n=k(1,this.accBeta1),r=k(1,this.accBeta2);t.forEach((o,i)=>{const a=b.registeredVariables[o],s=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${o}/m`,variable:O(()=>B(a).variable(s))}),this.accumulatedSecondMoment[i]==null&&(this.accumulatedSecondMoment[i]={originalName:`${o}/v`,variable:O(()=>B(a).variable(s))});const c=Array.isArray(e)?e[i].tensor:e[o];if(c==null)return;const p=this.accumulatedFirstMoment[i].variable,l=this.accumulatedSecondMoment[i].variable,h=N(v(p,this.beta1),v(c,1-this.beta1)),d=N(v(l,this.beta2),v(z(c),1-this.beta2)),g=D(h,n),x=D(d,r);p.assign(h),l.assign(d);const w=N(v(D(g,N(ge(x),this.epsilon)),-this.learningRate),a);a.assign(w)}),this.accBeta1.assign(v(this.accBeta1,this.beta1)),this.accBeta2.assign(v(this.accBeta2,this.beta2))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.accBeta2.dispose(),this.accumulatedFirstMoment!=null&&Le(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedSecondMoment!=null&&Le(this.accumulatedSecondMoment.map(e=>e.variable))}async getWeights(){const 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(Qe(this.beta1,this.iterations_+1)),this.accBeta2.assign(Qe(this.beta2,this.iterations_+1))});const t=e.length/2,n=!1;this.accumulatedFirstMoment=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedSecondMoment=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)}))}getConfig(){return{learningRate:this.learningRate,beta1:this.beta1,beta2:this.beta2,epsilon:this.epsilon}}static fromConfig(e,t){return new e(t.learningRate,t.beta1,t.beta2,t.epsilon)}}zn.className="Adam";Ze(zn);class Hn extends ot{constructor(e,t,n,r=null,o=0){super();this.learningRate=e,this.beta1=t,this.beta2=n,this.epsilon=r,this.decay=o,this.accumulatedFirstMoment=[],this.accumulatedWeightedInfNorm=[],O(()=>{this.iteration=C(0).variable(),this.accBeta1=C(t).variable()}),r==null&&(this.epsilon=b.backend.epsilon())}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);O(()=>{const n=k(1,this.accBeta1),r=D(-this.learningRate,N(v(this.iteration,this.decay),1));t.forEach((o,i)=>{const a=b.registeredVariables[o],s=!1;this.accumulatedFirstMoment[i]==null&&(this.accumulatedFirstMoment[i]={originalName:`${o}/m`,variable:B(a).variable(s)}),this.accumulatedWeightedInfNorm[i]==null&&(this.accumulatedWeightedInfNorm[i]={originalName:`${o}/v`,variable:B(a).variable(s)});const c=Array.isArray(e)?e[i].tensor:e[o];if(c==null)return;const p=this.accumulatedFirstMoment[i].variable,l=this.accumulatedWeightedInfNorm[i].variable,h=N(v(p,this.beta1),v(c,1-this.beta1)),d=v(l,this.beta2),g=Oe(c),x=Pt(d,g);p.assign(h),l.assign(x);const w=N(v(D(r,n),D(h,N(x,this.epsilon))),a);a.assign(w)}),this.iteration.assign(N(this.iteration,1)),this.accBeta1.assign(v(this.accBeta1,this.beta1))}),this.incrementIterations()}dispose(){this.accBeta1.dispose(),this.iteration.dispose(),this.accumulatedFirstMoment!=null&&Le(this.accumulatedFirstMoment.map(e=>e.variable)),this.accumulatedWeightedInfNorm!=null&&Le(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)}}Hn.className="Adamax";Ze(Hn);class en extends ot{constructor(e){super();this.learningRate=e,this.setLearningRate(e)}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=Array.isArray(e)?e[r].tensor:e[n];if(o==null)return;const i=b.registeredVariables[n];O(()=>{const a=N(v(this.c,o),i);i.assign(a)})}),this.incrementIterations()}setLearningRate(e){this.learningRate=e,this.c!=null&&this.c.dispose(),this.c=ll(C(-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)}}en.className="SGD";Ze(en);class Yn extends en{constructor(e,t,n=!1){super(e);this.learningRate=e,this.momentum=t,this.useNesterov=n,this.accumulations=[],this.m=C(this.momentum)}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n];if(this.accumulations[r]==null){const s=!1;this.accumulations[r]={originalName:`${n}/momentum`,variable:O(()=>B(o).variable(s))}}const i=this.accumulations[r].variable,a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;O(()=>{let s;const c=N(v(this.m,i),a);this.useNesterov?s=N(v(this.c,N(a,v(c,this.m))),o):s=N(v(this.c,c),o),i.assign(c),o.assign(s)})}),this.incrementIterations()}dispose(){this.m.dispose(),this.accumulations!=null&&Le(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);const 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)}}Yn.className="Momentum";Ze(Yn);class Vn extends ot{constructor(e,t=.9,n=0,r=null,o=!1){super();if(this.learningRate=e,this.decay=t,this.momentum=n,this.epsilon=r,this.accumulatedMeanSquares=[],this.accumulatedMoments=[],this.accumulatedMeanGrads=[],this.centered=o,r==null&&(this.epsilon=b.backend.epsilon()),e==null)throw new Error("learningRate for RMSPropOptimizer must be defined.")}applyGradients(e){const t=Array.isArray(e)?e.map(n=>n.name):Object.keys(e);t.forEach((n,r)=>{const o=b.registeredVariables[n],i=!1;this.accumulatedMeanSquares[r]==null&&(this.accumulatedMeanSquares[r]={originalName:`${n}/rms`,variable:O(()=>B(o).variable(i))}),this.accumulatedMoments[r]==null&&(this.accumulatedMoments[r]={originalName:`${n}/momentum`,variable:O(()=>B(o).variable(i))}),this.accumulatedMeanGrads[r]==null&&this.centered&&(this.accumulatedMeanGrads[r]={originalName:`${n}/mg`,variable:O(()=>B(o).variable(i))});const a=Array.isArray(e)?e[r].tensor:e[n];if(a==null)return;const s=this.accumulatedMeanSquares[r].variable,c=this.accumulatedMoments[r].variable;O(()=>{const p=N(v(s,this.decay),v(z(a),1-this.decay));if(this.centered){const l=this.accumulatedMeanGrads[r].variable,h=N(v(l,this.decay),v(a,1-this.decay)),d=D(v(a,this.learningRate),ge(k(p,N(z(h),this.epsilon)))),g=N(v(c,this.momentum),d);s.assign(p),l.assign(h),c.assign(g);const x=k(o,g);o.assign(x)}else{const l=N(v(s,this.decay),v(z(a),1-this.decay)),h=N(v(c,this.momentum),D(v(a,this.learningRate),ge(N(l,this.epsilon))));s.assign(l),c.assign(h);const d=k(o,h);o.assign(d)}})}),this.incrementIterations()}dispose(){this.accumulatedMeanSquares!=null&&Le(this.accumulatedMeanSquares.map(e=>e.variable)),this.accumulatedMeanGrads!=null&&this.centered&&Le(this.accumulatedMeanGrads.map(e=>e.variable)),this.accumulatedMoments!=null&&Le(this.accumulatedMoments.map(e=>e.variable))}async getWeights(){const 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);const t=this.centered?e.length/3:e.length/2,n=!1;this.accumulatedMeanSquares=e.slice(0,t).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.accumulatedMoments=e.slice(t,t*2).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})),this.centered&&(this.accumulatedMeanGrads=e.slice(t*2,t*3).map(r=>({originalName:r.name,variable:r.tensor.variable(n)})))}getConfig(){return{learningRate:this.learningRate,decay:this.decay,momentum:this.momentum,epsilon:this.epsilon,centered:this.centered}}static fromConfig(e,t){return new e(t.learningRate,t.decay,t.momentum,t.epsilon,t.centered)}}Vn.className="RMSProp";Ze(Vn);class vn{static sgd(e){return new en(e)}static momentum(e,t,n=!1){return new Yn(e,t,n)}static rmsprop(e,t=.9,n=0,r=null,o=!1){return new Vn(e,t,n,r,o)}static adam(e=.001,t=.9,n=.999,r=null){return new zn(e,t,n,r)}static adadelta(e=.001,t=.95,n=null){return new Pn(e,t,n)}static adamax(e=.002,t=.9,n=.999,r=null,o=0){return new Hn(e,t,n,r,o)}static adagrad(e,t=.1){return new qn(e,t)}}Yn,en,Pn,qn,Vn,Hn,zn;const TI={sgd:vn.sgd,momentum:vn.momentum,adadelta:vn.adadelta,adagrad:vn.adagrad,rmsprop:vn.rmsprop,adamax:vn.adamax,adam:vn.adam};const AI=(()=>typeof requestAnimationFrame!="undefined"?requestAnimationFrame:typeof setImmediate!="undefined"?setImmediate:e=>e())();function NI(){return new Promise(e=>AI(()=>e()))}function RI(e,t,n){const r=n*(typeof e=="number"?e:e[0]),o=t*(typeof e=="number"?e:e[1]);return[r,o]}function _I(e,t,n,r=!0){let o=[];if(r)o=o.concat(t.slice(0)),o.push(e[0]/n),o=o.concat(e.slice(1));else{o=o.concat(e[0]);const i=t.length;for(let a=0;a=t*2+1||a%2===1?i.push(a):o.push(a);r.push(...o),r.push(0),r.push(...i)}return r}function EI(e,t,n,r=!0){const o=[];r?o.push(e[0]/n):o.push(e[0]*n);for(let i=1;iFI,ERF_A2:()=>MI,ERF_A3:()=>UI,ERF_A4:()=>WI,ERF_A5:()=>BI,ERF_P:()=>DI,PARALLELIZE_THRESHOLD:()=>Sa,SELU_SCALE:()=>Tl,SELU_SCALEALPHA:()=>Il,applyActivation:()=>jn,assertAndGetBroadcastShape:()=>q,assertAxesAreInnerMostDims:()=>Bx,assertParamsConsistent:()=>fl,assignToTypedArray:()=>YI,axesAreInnerMostDims:()=>hl,calculateShapes:()=>_u,castTensor:()=>JI,combineLocations:()=>qu,complexWithEvenIndex:()=>qI,complexWithOddIndex:()=>zI,computeConv2DInfo:()=>je,computeConv3DInfo:()=>bn,computeDefaultPad:()=>ml,computeDilation2DInfo:()=>Kx,computeOptimalWindowSize:()=>Yy,computeOutAndReduceShapes:()=>ul,computeOutShape:()=>gl,computePool2DInfo:()=>Nt,computePool3DInfo:()=>Xt,convertConv2DDataFormat:()=>gn,eitherStridesOrDilationsAreOne:()=>le,expandShapeToKeepDim:()=>we,exponent:()=>KI,exponents:()=>VI,getAxesPermutation:()=>fe,getBroadcastDims:()=>ky,getComplexWithIndex:()=>HI,getFusedBiasGradient:()=>$n,getFusedDyActivation:()=>Bn,getImageCenter:()=>RI,getInnerMostAxes:()=>ke,getPermuted:()=>CI,getReductionAxes:()=>ae,getReshaped:()=>_I,getReshapedPermuted:()=>EI,getSliceBeginCoords:()=>OI,getSliceSize:()=>kI,getUndoAxesPermutation:()=>Fn,linspaceImpl:()=>ZI,log:()=>jI,mergeRealAndImagArrays:()=>GI,prepareAndValidate:()=>Nu,prepareSplitSize:()=>yl,reshapeTensor:()=>XI,segment_util:()=>vd,shouldFuse:()=>Gn,slice_util:()=>nl,splitRealAndImagArrays:()=>PI,tupleValuesAreOne:()=>ct,upcastType:()=>xr,validateInput:()=>ma,validateUpdateShape:()=>tl,warn:()=>$I});function JI(e,t,n){if(t==="complex64"){if(e.dtype==="complex64")return e.clone();const r=Ce(e.shape),o=_(e,"float32"),i=n.complex(o,r);return r.dispose(),o.dispose(),i}if(!kp(e.dtype,t))return b.makeTensorFromDataId(e.dataId,e.shape,t);if(e.dtype==="complex64"){const r=n.real(e),o=_(r,t);return r.dispose(),o}if(t==="int32")return n.int(e);if(t==="bool"){const r=C(0,e.dtype),o=n.notEqual(e,r);return r.dispose(),o}else throw new Error(`Error in Cast: failed to cast ${e.dtype} to ${t}`)}function XI(e,t){return b.makeTensorFromDataId(e.dataId,t,e.dtype)}function ZI(e,t,n){const r=(t-e)/(n-1),o=Wt(n,"float32");o[0]=e;for(let i=1;i{const a=[...o];a[n]=i;const s=P(e,r,a);return r[n]+=i,s})}function Ym(e,t){const n=new Array(e.rank);for(let o=0;oR.value-I.value);const w=h*r,L=c.subarray(w,w+r),S=p.subarray(w,w+r);for(let I=0;IHa,nonMaxSuppressionV4Impl:()=>Ya,nonMaxSuppressionV5Impl:()=>Va,split:()=>Hm,tile:()=>Ym,topkImpl:()=>Vm,whereImpl:()=>$a});const QI=1e-7,eT=1e-4;class tT{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}}class nT{time(e){return T("time")}read(e){return T("read")}readSync(e){return T("readSync")}numDataIds(){return T("numDataIds")}disposeData(e){return T("disposeData")}write(e,t,n){return T("write")}move(e,t,n,r){return T("move")}memory(){return T("memory")}floatPrecision(){return T("floatPrecision")}epsilon(){return this.floatPrecision()===32?QI:eT}batchMatMul(e,t,n,r){return T("batchMatMul")}fusedBatchMatMul({a:e,b:t,transposeA:n,transposeB:r,bias:o,activation:i,preluActivationWeights:a}){return T("fusedBatchMatMul")}slice(e,t,n){return T("slice")}stridedSlice(e,t,n,r){return T("stridedSlice")}unstack(e,t){return T("unstack")}reverse(e,t){return T("reverse")}concat(e,t){return T("concat")}neg(e){return T("neg")}add(e,t){return T("add")}addN(e){return T("addN")}subtract(e,t){return T("subtract")}multiply(e,t){return T("multiply")}realDivide(e,t){return T("realDivide")}floorDiv(e,t){return T("floorDiv")}sum(e,t){return T("sum")}prod(e,t){return T("prod")}unsortedSegmentSum(e,t,n){return T("unsortedSegmentSum")}argMin(e,t){return T("argMin")}argMax(e,t){return T("argMax")}equal(e,t){return T("equal")}notEqual(e,t){return T("notEqual")}less(e,t){return T("less")}lessEqual(e,t){return T("lessEqual")}greater(e,t){return T("greater")}greaterEqual(e,t){return T("greaterEqual")}logicalNot(e){return T("logicalNot")}logicalAnd(e,t){return T("logicalAnd")}logicalOr(e,t){return T("logicalOr")}where(e){return T("where")}select(e,t,n){return T("select")}topk(e,t,n){return T("topk")}min(e,t){return T("min")}minimum(e,t){return T("minimum")}mod(e,t){return T("mod")}max(e,t){return T("max")}maximum(e,t){return T("maximum")}all(e,t){return T("all")}any(e,t){return T("any")}squaredDifference(e,t){return T("squaredDifference")}ceil(e){return T("ceil")}floor(e){return T("floor")}round(e){return T("round")}sign(e){return T("sign")}isNaN(e){return T("isNaN")}isInf(e){return T("isInf")}isFinite(e){return T("isFinite")}pow(e,t){return T("pow")}exp(e){return T("exp")}expm1(e){return T("expm1")}softmax(e,t){return T("softmax")}log(e){return T("log")}log1p(e){return T("log1p")}sqrt(e){return T("sqrt")}rsqrt(e){return T("rsqrt")}square(e){return T("square")}reciprocal(e){return T("reciprocal")}relu(e){return T("relu")}relu6(e){return T("relu6")}prelu(e,t){return T("prelu")}elu(e){return T("elu")}eluDer(e,t){return T("eluDer")}selu(e){return T("selu")}int(e){return T("int")}clip(e,t,n){return T("clip")}abs(e){return T("abs")}complexAbs(e){return T("complexAbs")}sigmoid(e){return T("sigmoid")}softplus(e){return T("softplus")}sin(e){return T("sin")}cos(e){return T("cos")}tan(e){return T("tan")}asin(e){return T("asin")}acos(e){return T("acos")}atan(e){return T("atan")}atan2(e,t){return T("atan2")}sinh(e){return T("sinh")}cosh(e){return T("cosh")}tanh(e){return T("tanh")}asinh(e){return T("asinh")}acosh(e){return T("acosh")}atanh(e){return T("atanh")}erf(e){return T("erf")}step(e,t){return T("step")}fusedConv2d({input:e,filter:t,convInfo:n,bias:r,activation:o,preluActivationWeights:i}){return T("fusedConv2d")}conv2d(e,t,n){return T("conv2d")}conv2dDerInput(e,t,n){return T("conv2dDerInput")}conv2dDerFilter(e,t,n){return T("conv2dDerFilter")}fusedDepthwiseConv2D({input:e,filter:t,convInfo:n,bias:r,activation:o,preluActivationWeights:i}){return T("fusedDepthwiseConv2D")}depthwiseConv2D(e,t,n){return T("depthwiseConv2D")}depthwiseConv2DDerInput(e,t,n){return T("depthwiseConv2DDerInput")}depthwiseConv2DDerFilter(e,t,n){return T("depthwiseConv2DDerFilter")}conv3d(e,t,n){return T("conv3d")}conv3dDerInput(e,t,n){return T("conv3dDerInput")}conv3dDerFilter(e,t,n){return T("conv3dDerFilter")}maxPool(e,t){return T("maxPool")}maxPoolBackprop(e,t,n,r){return T("maxPoolBackprop")}avgPool(e,t){return T("avgPool")}avgPoolBackprop(e,t,n){return T("avgPoolBackprop")}avgPool3d(e,t){return T("avgPool3d")}avgPool3dBackprop(e,t,n){return T("avgPool3dBackprop")}maxPool3d(e,t){return T("maxPool3d")}maxPool3dBackprop(e,t,n,r){return T("maxPool3dBackprop")}reshape(e,t){return T("reshape")}cast(e,t){return T("cast")}tile(e,t){return T("tile")}pad(e,t,n){return T("pad")}transpose(e,t){return T("transpose")}gather(e,t,n){return T("gather")}gatherND(e,t){return T("gatherND")}scatterND(e,t,n){return T("scatterND")}batchToSpaceND(e,t,n){return T("batchToSpaceND")}spaceToBatchND(e,t,n){return T("spaceToBatchND")}resizeBilinear(e,t,n,r){return T("resizeBilinear")}resizeBilinearBackprop(e,t,n){return T("resizeBilinearBackprop")}resizeNearestNeighbor(e,t,n,r){return T("resizeNearestNeighbor")}resizeNearestNeighborBackprop(e,t,n){return T("resizeNearestNeighborBackprop")}batchNorm(e,t,n,r,o,i){return T("batchNorm")}localResponseNormalization4D(e,t,n,r,o){return T("localResponseNormalization4D")}LRNGrad(e,t,n,r,o,i,a){return T("LRNGrad")}multinomial(e,t,n,r){return T("multinomial")}oneHot(e,t,n,r){return T("oneHot")}cumsum(e,t,n,r){return T("cumsum")}nonMaxSuppression(e,t,n,r,o){return T("nonMaxSuppression")}fft(e){return T("fft")}ifft(e){return T("ifft")}complex(e,t){return T("complex")}real(e){return T("real")}imag(e){return T("imag")}cropAndResize(e,t,n,r,o,i){return T("cropAndResize")}depthToSpace(e,t,n){return T("depthToSpace")}split(e,t,n){return T("split")}sparseToDense(e,t,n,r){return T("sparseToDense")}diag(e){return T("diag")}fill(e,t,n){return T("fill")}onesLike(e){return T("onesLike")}zerosLike(e){return T("zerosLike")}linspace(e,t,n){return T("linspace")}dispose(){return T("dispose")}}function T(e){throw new Error(`'${e}' not yet implemented or not found in the registry. Did you forget to import the kernel?`)}const Jm={kernelName:ho,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,zt(_(n,"float32"),-1))}}};const Xm={kernelName:uo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=z(_(n,"float32")),o=ge(k(C(1),r));return re(D(e,o))}}}};const Zm={kernelName:mo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=ge(k(z(_(n,"float32")),1));return D(e,r)}}}};const Qm={kernelName:Cn,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{let s=e;const c=ae(n.shape,o);return c.length>0&&(s=W(s,c)),y(s,n.shape)},a=()=>{let s=e;const c=ae(r.shape,o);return c.length>0&&(s=W(s,c)),y(s,r.shape)};return{a:i,b:a}}};const ef={kernelName:fo,saveAllInputs:!0,gradFunc:(e,t)=>{const n={};return t.forEach((r,o)=>{n[o]=()=>e.clone()}),n}};const tf={kernelName:go,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>B(n)}}};const nf={kernelName:bo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>B(n)}}};const rf={kernelName:wo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,ge(k(C(1),z(_(n,"float32")))))}}};const of={kernelName:xo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=ge(N(C(1),z(_(n,"float32"))));return D(e,r)}}}};const sf={kernelName:vo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=N(z(n),z(r));let c=v(e,D(r,s));const p=ae(n.shape,o);return p.length>0&&(c=W(c,p)),y(c,n.shape)},a=()=>{const s=N(z(n),z(r));let c=re(v(e,D(n,s)));const p=ae(r.shape,o);return p.length>0&&(c=W(c,p)),y(c,r.shape)};return{a:i,b:a}}};const af={kernelName:yo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,N(z(_(n,"float32")),1))}}};const cf={kernelName:Lo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,k(C(1),z(_(n,"float32"))))}}};function rT(e,t,n,r,o=[1,1,1],i,a){const s=u(e,"dy","avgPool3dBackprop"),c=u(t,"input","avgPool3dBackprop");let p=s,l=c,h=!1;c.rank===4&&(h=!0,p=y(s,[1,s.shape[0],s.shape[1],s.shape[2],s.shape[3]]),l=y(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]])),f(p.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${p.rank}.`),f(l.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${l.rank}.`),f(le(r,o),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${r} and dilations '${o}'`),a!=null&&f(X(i),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const d=L=>{const S=Xt(l.shape,n,r,o,i,a);return L.avgPool3dBackprop(p,l,S)},g={dy:p,input:l},x={filterSize:n,strides:r,dilations:o,pad:i,dimRoundingMode:a},w=b.runKernelFunc(d,g,null,Fc,x);return h?y(w,[w.shape[1],w.shape[2],w.shape[3],w.shape[4]]):w}const pf=m({avgPool3dBackprop_:rT});const lf={kernelName:Io,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:o,strides:i,dilations:a,pad:s,dimRoundingMode:c}=n,p=a==null?[1,1,1]:a;return{x:()=>pf(e,r,o,i,p,s,c)}}};function oT(e,t,n,r,o){const i=u(e,"dy","avgPoolBackprop"),a=u(t,"input","avgPoolBackprop");f(a.rank===i.rank,()=>`Rank of input (${a.rank}) does not match rank of dy (${i.rank})`);let s=a,c=i,p=!1;a.rank===3&&(p=!0,s=y(a,[1,a.shape[0],a.shape[1],a.shape[2]]),c=y(i,[1,i.shape[0],i.shape[1],i.shape[2]])),f(c.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${c.rank}.`),f(s.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${s.rank}.`);const l=x=>{const w=Nt(s.shape,n,r,1,o);return x.avgPoolBackprop(c,s,w)},h={dy:c,input:s},d={filterSize:n,strides:r,pad:o},g=b.runKernelFunc(l,h,null,Dc,d);return p?y(g,[g.shape[1],g.shape[2],g.shape[3]]):g}const hf=m({avgPoolBackprop_:oT});const uf={kernelName:So,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{filterSize:o,strides:i,pad:a}=n;return{x:()=>hf(e,r,o,i,a)}}};const df={kernelName:To,inputsToSave:["a","b"],gradFunc:(e,t,n)=>{const[r,o]=t,{transposeA:i,transposeB:a}=n;return!i&&!a?{a:()=>V(e,o,!1,!0),b:()=>V(r,e,!0,!1)}:!i&&a?{a:()=>V(e,o,!1,!1),b:()=>V(e,r,!0,!1)}:i&&!a?{a:()=>V(o,e,!1,!0),b:()=>V(r,e,!1,!1)}:{a:()=>V(o,e,!0,!0),b:()=>V(e,r,!0,!0)}}};const mf={kernelName:Ao,gradFunc:(e,t,n)=>{const{blockShape:r,crops:o}=n;return{x:()=>Ur(e,r,o)}}};const ff={kernelName:No,gradFunc:(e,t,n)=>{const r=n,o=r.inputShape,i=r.shape,a=Array.from(i);for(let c=o.length-1;c>=0;c--)if(o[c]===i[c])a[c]=1;else if(o[c]!==1)throw new Error(`broadcastTo(): [${o}] cannot be broadcast to [${i}].`);const s=[];for(let c=0;c1&&s.push(c);return{x:()=>W(e,s,!0)}}};const gf={kernelName:En,gradFunc:e=>({x:()=>e.clone()})};const bf={kernelName:Ro,gradFunc:e=>({x:()=>B(e)})};const wf={kernelName:_o,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{clipValueMin:o,clipValueMax:i}=n;return{x:()=>De(_t(gt(r,o),bt(r,i)),e,B(e))}}};const xf={kernelName:Co,saveAllInputs:!0,gradFunc:(e,t,n)=>{const r=t.map(c=>c.shape),{axis:o}=n,i=H(o,t[0].shape)[0],a=r.map(c=>c[i]),s=Qt(e,a,i);return s.map(c=>()=>c)}};const yf={kernelName:Eo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,{dilations:i,strides:a,pad:s,dataFormat:c}=n;return f(ct(i),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${i}'`),{x:()=>_r(r.shape,e,o,a,s,c),filter:()=>Pr(r,e,o.shape,a,s,c)}}};const Lf={kernelName:Oo,inputsToSave:["dy","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,{strides:i,pad:a,dataFormat:s,dimRoundingMode:c}=n;return{dy:()=>ve(e,o,i,a,s,1,c),filter:()=>Pr(e,r,o.shape,i,a,s,c)}}};function iT(e,t,n,r,o){let i=e;e.rank===4&&(i=y(e,[1,e.shape[0],e.shape[1],e.shape[2],e.shape[3]]));let a=t;a.rank===4&&(a=y(t,[1,t.shape[0],t.shape[1],t.shape[2],t.shape[3]])),f(i.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${i.shape}.`),f(a.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${a.shape}.`),f(n.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${n}.`),f(i.shape[4]===n[3],()=>`Error in conv3dDerFilter: depth of input ${i.shape[4]}) must match input depth in filter (${n[3]}.`),f(a.shape[4]===n[4],()=>`Error in conv3dDerFilter: depth of dy (${a.shape[4]}) must match output depth for filter (${n[4]}).`);const s=l=>{const h=1,d=bn(i.shape,n,r,h,o);return l.conv3dDerFilter(i,a,d)},c={x:i,y:a},p={strides:r,pad:o};return b.runKernelFunc(s,c,null,Wc,p)}const vf=m({conv3DBackpropFilter_:iT});const Sf={kernelName:ko,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:o,pad:i}=n;f(ct(r),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${r}'`);const[a,s]=t;return{x:()=>wa(a.shape,e,s,o,i),filter:()=>vf(a,e,s.shape,o,i)}}};const If={kernelName:Do,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(re(Fa(_(n,"float32"))),e)}}};const Tf={kernelName:Fo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(Ma(_(n,"float32")),e)}}};const Af={kernelName:Mo,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{axis:o,exclusive:i,reverse:a}=n;return{x:()=>{const s=fe([o],r.rank);let c=ya(e,o,i,!a);return s!=null&&(c=K(c,s)),c}}}};const Nf={kernelName:Uo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const{dilations:r,strides:o,pad:i,dimRoundingMode:a}=n,s=r==null?[1,1]:r;f(ct(s),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${s}'`);const[c,p]=t;f(c.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${c.rank}.`),f(p.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${p.rank}.`),f(c.shape[3]===p.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${c.shape[3]}) must match the inChannels dimension in filter ${p.shape[2]}.`),f(le(o,s),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${o} and dilations '${s}'.`),a!=null&&f(X(i),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const l=je(c.shape,p.shape,o,s,i,a,!0);return{x:()=>Pa(c.shape,e,p,l),filter:()=>Ga(c,e,p.shape,l)}}};const Rf={kernelName:Wo,inputsToSave:["x","filter"],gradFunc:(e,t,n)=>{const[r,o]=t,i={x:r,filter:o,dy:e},a={x:r,filter:o,dy:e};return{x:()=>b.runKernel(zc,i,n),filter:()=>b.runKernel(Hc,a,n)}}};const _f={kernelName:Bo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=D(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{let s=v(e,_(n,"float32"));const c=ae(r.shape,o);c.length>0&&(s=y(W(s,c),r.shape));const p=z(r);return re(D(s,_(p,"float32")))};return{a:i,b:a}}};const Cf={kernelName:$o,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t,r=i=>i.eluDer(e,n),o={dy:e,y:n};return{x:()=>b.runKernelFunc(r,o,null,Yc)}}};const Ef={kernelName:jo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=v(Te(re(z(n))),2/Math.sqrt(Math.PI));return{x:()=>v(e,r)}}};const Of={kernelName:Go,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,n)}}};const kf={kernelName:Po,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,Te(n))}}};const Df={kernelName:qo,gradFunc:e=>({x:()=>B(e)})};const Ff={kernelName:zo,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=D(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{let s=v(e,_(n,"float32"));const c=ae(r.shape,o);c.length>0&&(s=y(W(s,c),r.shape));const p=z(r);return re(D(s,_(p,"float32")))};return{a:i,b:a}}};const Mf={kernelName:Ho,inputsToSave:["x","mean","variance","scale"],gradFunc:(e,t,n)=>{const{varianceEpsilon:r}=n,[o,i,a,s]=t,c=s==null?C(1):s,p=ae(i.shape,o.shape),l=[];if(i.rank===1){for(let A=0;Ai.rank===1?y(v(v(e,Gt(y(g,[1,1,1,i.shape[0]]),l)),c),o.shape):y(v(v(e,g),c),o.shape),L=()=>{let A=v(v(g,C(-1)),d);return i.rank===1&&(A=W(A,p)),y(A,i.shape)},S=()=>{let A=v(v(x,h),d);return i.rank===1&&(A=W(A,p)),y(A,i.shape)},I=()=>{const A=v(h,g);let E=v(e,A);return i.rank===1&&(E=W(E,p)),y(E,i.shape)},R=()=>{let A=e;return i.rank===1&&(A=W(A,p)),y(A,i.shape)};return{x:w,mean:L,variance:S,scale:I,offset:R}}};const Bf={kernelName:Yo,inputsToSave:["x","indices"],gradFunc:(e,t,n)=>{const[r,o]=t,{axis:i}=n,a=H(i,r.shape)[0],s=()=>{const c=r.shape,p=o.size,l=c.slice(0,a),h=l.length,d=c.slice(i,c.length).slice(1),g=d.length,x=Uf(0,h),w=Uf(h+1,h+1+g),L=Wf([l,[p],d]),S=y(e,L),I=y(o,[p]),R=Wf([[h],x,w]),A=K(S,R);let E=Ba(A,I,r.shape[a]);const F=Fn(R);return E=K(E,F),E};return{x:s,indices:()=>o}}};function Uf(e,t){const n=[];for(let r=e;r{const[n,r]=t;return{a:()=>B(n),b:()=>B(r)}}};const jf={kernelName:Ko,gradFunc:e=>({x:()=>_(e,"float32")})};const Gf={kernelName:Jo,gradFunc:e=>({x:()=>B(e)})};const Pf={kernelName:Xo,gradFunc:e=>({x:()=>B(e)})};const qf={kernelName:Zo,gradFunc:e=>({x:()=>B(e)})};const zf={kernelName:ei,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,N(n,1))}}};const Hf={kernelName:Qo,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,_(n,"float32"))}}};const Yf={kernelName:ti,inputsToSave:[],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{axis:o}=n;return{logits:()=>{const i=!0,a=Te(r);return k(e,v(W(e,o,i),a))}}}};function sT(e,t,n,r=5,o=1,i=1,a=.5){const s=l=>l.LRNGrad(n,e,t,r,o,i,a),c={x:e,y:t,dy:n},p={depthRadius:r,bias:o,alpha:i,beta:a};return b.runKernelFunc(s,c,null,cp,p)}const Vf=m({localResponseNormalizationBackprop_:sT});const Kf={kernelName:ni,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{depthRadius:i,bias:a,alpha:s,beta:c}=n;return{x:()=>Vf(r,o,e,i,a,s,c)}}};function Ka(e,t,n,r,o){return t.rank{const i=v(e,_(xn(n,t),e.dtype));return o==null?i:K(i,o)}}}const Al={kernelName:ri,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{reductionIndices:o}=r,[i,a]=t,s=H(o,i.shape),c=fe(s,i.rank),p=Ka(e,a,i,s,c);return{x:()=>{let l=p.x();return c!=null&&(l=K(l)),l}}}};const Jf={kernelName:oi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=()=>v(e,_(gt(n,r),"float32")),i=()=>v(e,_(kr(n,r),"float32"));return{a:o,b:i}}};function aT(e,t,n,r,o,i=[1,1,1],a,s){const c=u(e,"dy","maxPool3dBackprop"),p=u(t,"input","maxPool3dBackprop"),l=u(n,"output","maxPool3dBackprop");let h=c,d=p,g=l,x=!1;p.rank===4&&(x=!0,h=y(c,[1,c.shape[0],c.shape[1],c.shape[2],c.shape[3]]),d=y(p,[1,p.shape[0],p.shape[1],p.shape[2],p.shape[3]]),g=y(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),f(h.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${h.rank}.`),f(d.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${d.rank}.`),f(g.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${g.rank}.`),f(le(o,i),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${o} and dilations '${i}'`),s!=null&&f(X(a),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${s} but got pad ${a}.`);const w=R=>{const A=Xt(d.shape,r,o,i,a,s);return R.maxPool3dBackprop(h,d,g,A)},L={dy:h,input:d,output:g},S={filterSize:r,strides:o,dilations:i,pad:a,dimRoundingMode:s},I=b.runKernelFunc(w,L,null,lp,S);return x?y(I,[I.shape[1],I.shape[2],I.shape[3],I.shape[4]]):I}const Xf=m({maxPool3dBackprop_:aT});const Zf={kernelName:si,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{filterSize:i,strides:a,dilations:s,pad:c,dimRoundingMode:p}=n,l=s==null?[1,1,1]:s;return{x:()=>Xf(e,r,o,i,a,l,c,p)}}};function cT(e,t,n,r,o,i,a){const s=u(e,"dy","maxPoolBackprop"),c=u(t,"input","maxPoolBackprop"),p=u(n,"output","maxPoolBackprop");f(c.rank===s.rank,()=>`Rank of input (${c.rank}) does not match rank of dy (${s.rank})`),f(s.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${s.rank}.`),f(c.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${c.rank}.`),a!=null&&f(X(i),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${a} but got pad ${i}.`);const l=g=>{const x=Nt(c.shape,r,o,1,i,a);return g.maxPoolBackprop(s,c,p,x)},h={dy:s,input:c,output:p},d={filterSize:r,strides:o,pad:i,dimRoundingMode:a};return b.runKernelFunc(l,h,null,pp,d)}const Qf=m({maxPoolBackprop_:cT});const eg={kernelName:ii,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r,o]=t,{filterSize:i,strides:a,pad:s}=n;return{x:()=>Qf(e,r,o,i,a,s)}}};const tg={kernelName:ai,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(e,t,n)=>{const r=n,{axis:o}=r,[i,a]=t,s=H(o,i.shape),c=fe(s,i.rank),p=Ka(e,a,i,s,c);return{x:()=>{let l=p.x();return c!=null&&(l=K(l)),l}}}};const ng={kernelName:ci,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=()=>v(e,_(bt(n,r),"float32")),i=()=>v(e,_(rt(n,r),"float32"));return{a:o,b:i}}};const rg={kernelName:pi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=ae(n.shape,o);return s.length>0?y(W(e,s),n.shape):e},a=()=>{const s=v(e,re(Er(D(n,r)))),c=ae(r.shape,o);return c.length>0?y(W(s,c),r.shape):s};return{a:i,b:a}}};const og={kernelName:li,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{const s=v(e,_(r,"float32")),c=ae(n.shape,o);return c.length>0?y(W(s,c),n.shape):s},a=()=>{const s=v(e,_(n,"float32")),c=ae(r.shape,o);return c.length>0?y(W(s,c),r.shape):s};return{a:i,b:a}}};const ig={kernelName:hi,gradFunc:e=>({x:()=>re(e)})};const sg={kernelName:di,inputsToSave:["indices"],gradFunc:(e,t)=>{const n=t[0];return{indices:()=>Ce(n.shape,"float32")}}};const ag={kernelName:ui,gradFunc:e=>({x:()=>B(e)})};const Nl={kernelName:mi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const r=t[0],{paddings:o}=n,i=o.map(a=>a[0]);return{x:()=>P(e,i,r.shape)}}};const cg={kernelName:fi,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(e,t)=>{const[n,r,o]=t,i=n,a=r,s=q(i.shape,a.shape),c=()=>{const l=_(a,"float32");let h=v(e,v(l,Qe(i,k(l,C(1)))));const d=ae(i.shape,s);return d.length>0&&(h=W(h,d)),y(h,i.shape)},p=()=>{const l=rt(i,0),h=De(l,Rt(i),B(i));let d=v(e,v(o,h));const g=ae(a.shape,s);return g.length>0&&(d=W(d,g)),y(d,a.shape)};return{a:c,b:p}}};const pg={kernelName:gi,inputsToSave:["x","alpha"],gradFunc:(e,t)=>{const[n,r]=t,o=rt(n,0);return{x:()=>De(o,e,v(e,r)),alpha:()=>{let i=De(o,B(e),v(e,n));const a=ae(r.shape,e.shape);return a.length>0&&(i=W(i,a)),y(i,r.shape)}}}};const lg={kernelName:bi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,re(z(n)))}}};const hg={kernelName:vi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t,r=v(bt(n,6),zt(n));return{x:()=>v(e,_(r,"float32"))}}};const ug={kernelName:wi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,_(zt(n),"float32"))}}};const dg={kernelName:xi,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>y(e,n.shape)}}};const mg={kernelName:Li,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,o=s=>{const{alignCorners:c}=n;return s.resizeBilinearBackprop(e,r,c)},i={images:r},a=()=>b.runKernelFunc(o,i,null,yp,n);return{images:a}}};const fg={kernelName:yi,inputsToSave:["images"],gradFunc:(e,t,n)=>{const[r]=t,o=s=>{const{alignCorners:c}=n;return s.resizeNearestNeighborBackprop(e,r,c)},i={images:r},a=()=>b.runKernelFunc(o,i,null,xp,n);return{images:a}}};const gg={kernelName:Si,gradFunc:(e,t,n)=>{const{dims:r}=n,o=H(r,e.shape);return{x:()=>et(e,o)}}};const bg={kernelName:Ii,gradFunc:e=>({x:()=>B(e)})};const wg={kernelName:Ti,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>re(D(e,v(Qe(n,1.5),2)))}}};const xg={kernelName:Ai,inputsToSave:["condition"],gradFunc:(e,t)=>{const[n]=t;return{condition:()=>_(B(n),"float32"),t:()=>v(e,_(n,e.dtype)),e:()=>v(e,_(Dr(n),e.dtype))}}};const yg={kernelName:Ni,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>{const r=rt(n,C(0)),o=C(Il),i=C(Tl),a=v(e,i),s=v(v(e,o),Te(_(n,"float32")));return De(r,a,s)}}}};const Lg={kernelName:Oi,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,v(n,k(C(1),n)))}}};const vg={kernelName:Ei,gradFunc:e=>({x:()=>B(e)})};const Sg={kernelName:_i,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(Cr(_(n,"float32")),e)}}};const Ig={kernelName:Ci,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(xa(_(n,"float32")),e)}}};const Tg={kernelName:Ri,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{begin:o,size:i}=n,a=r.shape,[s,c]=ls(r,o,i),p=[];for(let l=0;lHe(e,p)}}};const Ag={kernelName:Wi,outputsToSave:[!0],gradFunc:(e,t,n)=>{const[r]=t,{dim:o}=n,i=!0,a=v(e,r);return{logits:()=>k(a,v(W(a,[o],i),r))}}};const Ng={kernelName:ki,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,ft(n))}}};const Rl={kernelName:Mi,gradFunc:(e,t,n)=>{const{blockShape:r,paddings:o}=n;return{x:()=>Nr(e,r,o)}}};const _l={kernelName:Ui,gradFunc:(e,t,n)=>{const{axis:r}=n;return{x:()=>Z(e,r)}}};const Rg={kernelName:Di,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,v(ge(_(n,"float32")),2))}}};const _g={kernelName:vp,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(e,v(_(n,"float32"),2))}}};const Cg={kernelName:Bi,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=C(2),i=()=>v(e,v(o,k(n,r))),a=()=>v(e,v(o,k(r,n)));return{a:i,b:a}}};const Eg={kernelName:Vi,gradFunc:e=>({x:()=>B(e)})};const Og={kernelName:$i,inputsToSave:["a","b"],gradFunc:(e,t)=>{const[n,r]=t,o=q(n.shape,r.shape),i=()=>{let s=e;const c=ae(n.shape,o);return c.length>0&&(s=W(s,c)),y(s,n.shape)},a=()=>{let s=e;const c=ae(r.shape,o);return c.length>0&&(s=W(s,c)),y(re(s),r.shape)};return{a:i,b:a}}};const kg={kernelName:Fi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,o=r.shape.slice(),{axis:i}=n,a=H(i,r.shape);a.forEach(p=>{o[p]=1});const s=y(e,o),c=v(s,Ct(r.shape,"float32"));return{x:()=>c}}};const Dg={kernelName:ji,inputsToSave:["x"],gradFunc:(e,t)=>{const[n]=t;return{x:()=>D(e,z(Cr(n)))}}};const Fg={kernelName:Gi,outputsToSave:[!0],gradFunc:(e,t)=>{const[n]=t;return{x:()=>v(k(C(1),z(n)),e)}}};const Mg={kernelName:Pi,inputsToSave:["x"],gradFunc:(e,t,n)=>{const[r]=t,{reps:o}=n,i=()=>{let a=B(r);if(r.rank===1)for(let s=0;s{const r=n,{perm:o}=r,i=Fn(o);return{x:()=>K(e,i)}}};const Wg={kernelName:zi,gradFunc:(e,t,n)=>{const r=n,{axis:o}=r;return{value:()=>Fe(e,o)}}};const Bg={kernelName:Hi,inputsToSave:["segmentIds"],gradFunc:(e,t)=>{const[n]=t,r=()=>pT(e,n);return{x:r}}};function pT(e,t){const n=Pt(t,B(t)),r=Or(e,n);let o=gt(t,C(0,"int32"));const i=r.rank-o.rank;for(let s=0;s({x:()=>B(e)})};const lT=[Jm,Xm,Zm,Qm,ef,tf,nf,rf,of,sf,af,cf,lf,uf,df,mf,ff,gf,bf,wf,xf,Lf,yf,Sf,If,Tf,Af,Nf,Rf,_f,Cf,Ef,Of,kf,Ff,Df,Mf,Bf,$f,jf,Gf,Pf,qf,zf,Hf,Yf,Kf,Al,Al,Jf,Zf,eg,tg,ng,rg,og,ig,sg,ag,Nl,Nl,cg,pg,lg,hg,ug,dg,mg,fg,gg,bg,wg,xg,yg,Lg,vg,Sg,Ig,Tg,Ag,Ng,Rl,Rl,_l,_l,Rg,Cg,_g,Eg,Og,kg,Dg,Fg,Mg,Ug,Wg,Bg,$g];for(const e of lT)Rp(e);const Rs={};_e(Rs,{Abs:()=>ho,Acos:()=>uo,Acosh:()=>mo,AdadeltaOptimizer:()=>Pn,AdagradOptimizer:()=>qn,AdamOptimizer:()=>zn,AdamaxOptimizer:()=>Hn,Add:()=>Cn,AddN:()=>fo,All:()=>Oc,Any:()=>kc,ArgMax:()=>go,ArgMin:()=>bo,Asin:()=>wo,Asinh:()=>xo,Atan:()=>yo,Atan2:()=>vo,Atanh:()=>Lo,AvgPool:()=>So,AvgPool3D:()=>Io,AvgPool3DBackprop:()=>Fc,AvgPoolBackprop:()=>Dc,BatchMatMul:()=>To,BatchToSpaceND:()=>Ao,BroadcastTo:()=>No,Cast:()=>En,Ceil:()=>Ro,ClipByValue:()=>_o,Complex:()=>Mc,Concat:()=>Co,Conv2D:()=>Eo,Conv2DBackpropFilter:()=>Uc,Conv2DBackpropInput:()=>Oo,Conv3D:()=>ko,Conv3DBackpropFilterV2:()=>Wc,Conv3DBackpropInputV2:()=>Bc,Cos:()=>Do,Cosh:()=>Fo,CropAndResize:()=>$c,Cumsum:()=>Mo,DataStorage:()=>tT,DepthToSpace:()=>jc,DepthwiseConv2dNative:()=>Uo,DepthwiseConv2dNativeBackpropFilter:()=>Gc,DepthwiseConv2dNativeBackpropInput:()=>Pc,Diag:()=>qc,Dilation2D:()=>Wo,Dilation2DBackpropFilter:()=>Hc,Dilation2DBackpropInput:()=>zc,Div:()=>Bo,ENV:()=>Rc,Elu:()=>$o,EluGrad:()=>Yc,Environment:()=>Nc,Equal:()=>Vc,Erf:()=>jo,Exp:()=>Go,Expm1:()=>Po,FFT:()=>Kc,Fill:()=>Jc,FlipLeftRight:()=>Xc,Floor:()=>qo,FloorDiv:()=>zo,FromPixels:()=>na,FusedBatchNorm:()=>Ho,FusedConv2D:()=>oa,FusedDepthwiseConv2D:()=>ia,GatherNd:()=>Zc,GatherV2:()=>Yo,Greater:()=>Qc,GreaterEqual:()=>Vo,IFFT:()=>ep,Identity:()=>Ko,Imag:()=>tp,IsFinite:()=>Jo,IsInf:()=>Xo,IsNan:()=>Zo,KernelBackend:()=>nT,LRN:()=>ni,LRNBackprop:()=>cp,Less:()=>np,LessEqual:()=>rp,LinSpace:()=>op,Log:()=>Qo,Log1p:()=>ei,LogSoftmax:()=>ti,LogicalAnd:()=>ip,LogicalNot:()=>sp,LogicalOr:()=>ap,Max:()=>ri,MaxPool:()=>ii,MaxPool3D:()=>si,MaxPool3DBackprop:()=>lp,MaxPoolBackprop:()=>pp,MaxPoolWithArgmax:()=>hp,Maximum:()=>oi,Mean:()=>qb,Min:()=>ai,Minimum:()=>ci,Mod:()=>pi,MomentumOptimizer:()=>Yn,Multiply:()=>li,Negate:()=>hi,NonMaxSuppressionV3:()=>dp,NonMaxSuppressionV4:()=>mp,NonMaxSuppressionV5:()=>fp,NotEqual:()=>up,OP_SCOPE_SUFFIX:()=>Hp,OneHot:()=>di,OnesLike:()=>ui,Optimizer:()=>ot,PadV2:()=>mi,Pool:()=>zb,Pow:()=>fi,Prelu:()=>gi,Prod:()=>gp,RMSPropOptimizer:()=>Vn,Range:()=>bp,Rank:()=>Wp,Real:()=>wp,Reciprocal:()=>bi,Reduction:()=>be,Relu:()=>wi,Relu6:()=>vi,Reshape:()=>xi,ResizeBilinear:()=>Li,ResizeBilinearGrad:()=>yp,ResizeNearestNeighbor:()=>yi,ResizeNearestNeighborGrad:()=>xp,Reverse:()=>Si,RotateWithOffset:()=>Ap,Round:()=>Ii,Rsqrt:()=>Ti,SGDOptimizer:()=>en,ScatterNd:()=>Lp,SelectV2:()=>Ai,Selu:()=>Ni,Sigmoid:()=>Oi,Sign:()=>Ei,Sin:()=>_i,Sinh:()=>Ci,Slice:()=>Ri,Softmax:()=>Wi,Softplus:()=>ki,SpaceToBatchND:()=>Mi,SparseToDense:()=>Sp,SplitV:()=>Ui,Sqrt:()=>Di,Square:()=>vp,SquaredDifference:()=>Bi,Step:()=>Vi,StridedSlice:()=>Ip,Sub:()=>$i,Sum:()=>Fi,Tan:()=>ji,Tanh:()=>Gi,Tensor:()=>te,TensorBuffer:()=>br,Tile:()=>Pi,TopK:()=>Tp,Transpose:()=>qi,Unpack:()=>zi,UnsortedSegmentSum:()=>Hi,Variable:()=>$t,ZerosLike:()=>Yi,_FusedMatMul:()=>ra,abs:()=>Oe,acos:()=>ju,acosh:()=>Gu,add:()=>N,addN:()=>Pu,addStrict:()=>lS,all:()=>zu,any:()=>Hu,argMax:()=>Yu,argMin:()=>Vu,asin:()=>Ku,asinh:()=>Ju,atan:()=>Xu,atan2:()=>Zu,atanh:()=>Qu,avgPool:()=>mt,avgPool3d:()=>ed,backend:()=>_x,backend_util:()=>zm,basicLSTMCell:()=>td,batchNorm:()=>jt,batchNorm2d:()=>rd,batchNorm3d:()=>od,batchNorm4d:()=>id,batchToSpaceND:()=>Nr,booleanMaskAsync:()=>Gv,broadcastTo:()=>us,browser:()=>Ir,buffer:()=>Ee,cast:()=>_,ceil:()=>sd,clipByValue:()=>Rr,clone:()=>dt,complex:()=>Je,concat:()=>Z,concat1d:()=>ad,concat2d:()=>cd,concat3d:()=>pd,concat4d:()=>ld,conv1d:()=>hd,conv2d:()=>ve,conv2dTranspose:()=>ud,conv3d:()=>dd,conv3dTranspose:()=>md,cos:()=>Cr,cosh:()=>xa,cosineWindow:()=>bs,cumsum:()=>ya,customGrad:()=>ze,deprecationWarn:()=>ye,depthToSpace:()=>fd,depthwiseConv2d:()=>wn,device_util:()=>du,diag:()=>gd,dilation2d:()=>bd,disableDeprecationWarnings:()=>bx,dispose:()=>Le,disposeVariables:()=>wx,div:()=>D,divNoNan:()=>wd,divStrict:()=>hS,dot:()=>xd,dropout:()=>_S,elu:()=>La,enableDebugMode:()=>gx,enableProdMode:()=>fx,enclosingPowerOfTwo:()=>Ll,engine:()=>xx,env:()=>pe,equal:()=>xn,equalStrict:()=>Kv,erf:()=>yd,exp:()=>Te,expandDims:()=>nt,expm1:()=>Ld,eye:()=>va,fft:()=>Br,fill:()=>qe,findBackend:()=>Ax,findBackendFactory:()=>Nx,floor:()=>Er,floorDiv:()=>fa,fused:()=>bm,gather:()=>Or,gatherND:()=>NS,gather_util:()=>Au,getBackend:()=>wc,getGradient:()=>sa,getKernel:()=>Ji,getKernelsForBackend:()=>aa,grad:()=>lL,grads:()=>hL,greater:()=>rt,greaterEqual:()=>gt,greaterEqualStrict:()=>Jv,greaterStrict:()=>Xv,ifft:()=>Wn,imag:()=>yn,image:()=>Sl,inTopKAsync:()=>ES,io:()=>vr,irfft:()=>Wa,isFinite:()=>Sd,isInf:()=>Id,isNaN:()=>Td,keep:()=>ll,kernel_impls:()=>Km,leakyRelu:()=>Ad,less:()=>kr,lessEqual:()=>bt,lessEqualStrict:()=>Zv,lessStrict:()=>Qv,linalg:()=>SI,linspace:()=>Nd,localResponseNormalization:()=>Rd,log:()=>Rt,log1p:()=>Ia,logSigmoid:()=>_d,logSoftmax:()=>Cd,logSumExp:()=>Na,logicalAnd:()=>_t,logicalNot:()=>Dr,logicalOr:()=>Ra,logicalXor:()=>Ed,losses:()=>II,matMul:()=>V,math:()=>Tu,max:()=>qt,maxPool:()=>Re,maxPool3d:()=>Od,maxPoolWithArgmax:()=>kd,maximum:()=>Pt,maximumStrict:()=>uS,mean:()=>Un,memory:()=>yx,min:()=>ds,minimum:()=>Fr,minimumStrict:()=>dS,mod:()=>_a,modStrict:()=>mS,moments:()=>Dd,movingAverage:()=>LS,mul:()=>v,mulStrict:()=>fS,multiRNNCell:()=>Fd,multinomial:()=>Md,neg:()=>re,nextFrame:()=>NI,norm:()=>gs,notEqual:()=>Mr,notEqualStrict:()=>eS,oneHot:()=>cs,ones:()=>Ct,onesLike:()=>xl,op:()=>m,outerProduct:()=>Ud,pad:()=>He,pad1d:()=>Wd,pad2d:()=>Bd,pad3d:()=>$d,pad4d:()=>jd,pool:()=>Gd,pow:()=>Qe,powStrict:()=>gS,prelu:()=>Ca,print:()=>da,prod:()=>Pd,profile:()=>Lx,rand:()=>qd,randomGamma:()=>Yd,randomNormal:()=>Vd,randomUniform:()=>Oa,range:()=>fs,ready:()=>Ix,real:()=>Zt,reciprocal:()=>Kd,registerBackend:()=>Rx,registerGradient:()=>Rp,registerKernel:()=>Hb,relu:()=>ie,relu6:()=>ka,removeBackend:()=>Tx,reshape:()=>y,reverse:()=>et,reverse1d:()=>Jd,reverse2d:()=>Xd,reverse3d:()=>Zd,reverse4d:()=>Qd,rfft:()=>$r,round:()=>em,rsqrt:()=>Da,scalar:()=>C,scatterND:()=>SS,scatter_util:()=>Ru,selu:()=>tm,separableConv2d:()=>Wr,serialization:()=>Wu,setBackend:()=>Sx,setPlatform:()=>Cx,setdiff1dAsync:()=>nm,sigmoid:()=>ft,sign:()=>rm,signal:()=>vI,sin:()=>Fa,sinh:()=>Ma,slice:()=>P,slice1d:()=>om,slice2d:()=>im,slice3d:()=>Ua,slice4d:()=>sm,slice_util:()=>nl,softmax:()=>Ln,softplus:()=>Aa,spaceToBatchND:()=>Ur,sparseToDense:()=>TS,spectral:()=>LI,split:()=>Qt,sqrt:()=>ge,square:()=>z,squaredDifference:()=>jr,squaredDifferenceStrict:()=>bS,squeeze:()=>Gr,stack:()=>Fe,step:()=>zt,stridedSlice:()=>am,sub:()=>k,subStrict:()=>wS,sum:()=>W,sumOutType:()=>mw,tan:()=>cm,tanh:()=>hs,tensor:()=>Xe,tensor1d:()=>ce,tensor2d:()=>wt,tensor3d:()=>Sr,tensor4d:()=>xt,tensor5d:()=>pm,tensor6d:()=>lm,tensor_util:()=>lu,test_util:()=>Bu,tidy:()=>O,tile:()=>Gt,time:()=>vx,topk:()=>hm,train:()=>TI,transpose:()=>K,truncatedNormal:()=>um,unregisterGradient:()=>Vb,unregisterKernel:()=>Yb,unsortedSegmentSum:()=>Ba,unstack:()=>Ae,upcastType:()=>xr,util:()=>Kh,valueAndGrad:()=>uL,valueAndGrads:()=>dL,variable:()=>dm,variableGrads:()=>wl,version_core:()=>xc,where:()=>De,whereAsync:()=>ja,zeros:()=>Ce,zerosLike:()=>B});function tn(e,t,n=!1){if(e.beginPath(),t.slice(1).forEach(({x:r,y:o},i)=>{const a=t[i];e.moveTo(a.x,a.y),e.lineTo(r,o)}),n){const r=t[t.length-1],o=t[0];if(!r||!o)return;e.moveTo(r.x,r.y),e.lineTo(o.x,o.y)}e.stroke()}class Ke{constructor(e,t){if(!Et(e)||!Et(t))throw new Error(`Dimensions.constructor - expected width and height to be valid numbers, instead have ${JSON.stringify({width:e,height:t})}`);this._width=e,this._height=t}get width(){return this._width}get height(){return this._height}reverse(){return new Ke(1/this.width,1/this.height)}}const Cs={};_e(Cs,{computeReshapedDimensions:()=>Ol,getCenterPoint:()=>Xn,isDimensions:()=>Xa,isEven:()=>Ja,isFloat:()=>El,isTensor:()=>Kn,isTensor1D:()=>hT,isTensor2D:()=>Cl,isTensor3D:()=>nn,isTensor4D:()=>pt,isValidNumber:()=>Et,isValidProbablitiy:()=>qr,range:()=>Ht,round:()=>Jn});function Kn(e,t){return e instanceof te&&e.shape.length===t}function hT(e){return Kn(e,1)}function Cl(e){return Kn(e,2)}function nn(e){return Kn(e,3)}function pt(e){return Kn(e,4)}function El(e){return e%1!==0}function Ja(e){return e%2===0}function Jn(e,t=2){const n=Math.pow(10,t);return Math.floor(e*n)/n}function Xa(e){return e&&e.width&&e.height}function Ol({width:e,height:t},n){const r=n/Math.max(t,e);return new Ke(Math.round(e*r),Math.round(t*r))}function Xn(e){return e.reduce((t,n)=>t.add(n),new J(0,0)).div(new J(e.length,e.length))}function Ht(e,t,n){return Array(e).fill(0).map((r,o)=>t+o*n)}function Et(e){return!!e&&e!==Infinity&&e!==-Infinity&&!isNaN(e)||e===0}function qr(e){return Et(e)&&0<=e&&e<=1}class J{constructor(e,t){this._x=e,this._y=t}get x(){return this._x}get y(){return this._y}add(e){return new J(this.x+e.x,this.y+e.y)}sub(e){return new J(this.x-e.x,this.y-e.y)}mul(e){return new J(this.x*e.x,this.y*e.y)}div(e){return new J(this.x/e.x,this.y/e.y)}abs(){return new J(Math.abs(this.x),Math.abs(this.y))}magnitude(){return Math.sqrt(Math.pow(this.x,2)+Math.pow(this.y,2))}floor(){return new J(Math.floor(this.x),Math.floor(this.y))}}class de{constructor(e,t=!0){const n=e||{},r=[n.left,n.top,n.right,n.bottom].every(Et),o=[n.x,n.y,n.width,n.height].every(Et);if(!o&&!r)throw new Error(`Box.constructor - expected box to be IBoundingBox | IRect, instead have ${JSON.stringify(n)}`);const[i,a,s,c]=o?[n.x,n.y,n.width,n.height]:[n.left,n.top,n.right-n.left,n.bottom-n.top];de.assertIsValidBox({x:i,y:a,width:s,height:c},"Box.constructor",t),this._x=i,this._y=a,this._width=s,this._height=c}static isRect(e){return!!e&&[e.x,e.y,e.width,e.height].every(Et)}static assertIsValidBox(e,t,n=!1){if(!de.isRect(e))throw new Error(`${t} - invalid box: ${JSON.stringify(e)}, expected object with properties x, y, width, height`);if(!n&&(e.width<0||e.height<0))throw new Error(`${t} - width (${e.width}) and height (${e.height}) must be positive numbers`)}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 J(this.left,this.top)}get topRight(){return new J(this.right,this.top)}get bottomLeft(){return new J(this.left,this.bottom)}get bottomRight(){return new J(this.right,this.bottom)}round(){const[e,t,n,r]=[this.x,this.y,this.width,this.height].map(o=>Math.round(o));return new de({x:e,y:t,width:n,height:r})}floor(){const[e,t,n,r]=[this.x,this.y,this.width,this.height].map(o=>Math.floor(o));return new de({x:e,y:t,width:n,height:r})}toSquare(){let{x:e,y:t,width:n,height:r}=this;const o=Math.abs(n-r);return nt&&(a=-l+t+n,l=t),h>e&&(s=-h+e+r,h=e),c<1&&(s=2-c,c=1),p<1&&(s=2-p,p=1),{dy:i,edy:s,dx:o,edx:a,y:p,ey:h,x:c,ex:l,w:n,h:r}}calibrate(e){return new de({left:this.left+e.left*this.width,top:this.top+e.top*this.height,right:this.right+e.right*this.width,bottom:this.bottom+e.bottom*this.height}).toSquare().round()}}class hr extends de{constructor(e,t,n,r,o=!1){super({left:e,top:t,right:n,bottom:r},o)}}class _n{constructor(e,t,n,r,o){this._imageDims=new Ke(o.width,o.height),this._score=e,this._classScore=t,this._className=n,this._box=new de(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 de(this._box).rescale(this.imageDims.reverse())}forSize(e,t){return new _n(this.score,this.classScore,this.className,this.relativeBox,{width:e,height:t})}}class me extends _n{constructor(e,t,n){super(e,e,"",t,n)}forSize(e,t){const{score:n,relativeBox:r,imageDims:o}=super.forSize(e,t);return new me(n,r,o)}}function Us(e,t,n=!0){const r=Math.max(0,Math.min(e.right,t.right)-Math.max(e.left,t.left)),o=Math.max(0,Math.min(e.bottom,t.bottom)-Math.max(e.top,t.top)),i=r*o;return n?i/(e.area+t.area-i):i/Math.min(e.area,t.area)}function Ms(e){const t=e.map(s=>s.x),n=e.map(s=>s.y),r=t.reduce((s,c)=>ccss({score:a,boxIndex:s})).sort((a,s)=>a.score-s.score).map(a=>a.boxIndex);const i=[];for(;o.length>0;){const a=o.pop();i.push(a);const s=o,c=[];for(let p=0;pc[l]<=n)}return i}function ht(e,t){return O(()=>{const[n,r,o]=t,i=qe([...e.shape.slice(0,3),1],n),a=qe([...e.shape.slice(0,3),1],r),s=qe([...e.shape.slice(0,3),1],o),c=Z([i,a,s],3);return k(e,c)})}function Ds(e,t=!1){return O(()=>{const[n,r]=e.shape.slice(1);if(n===r)return e;const o=Math.abs(n-r),i=Math.round(o*(t?.5:1)),a=n>r?2:1,s=d=>{const g=e.shape.slice();return g[a]=d,qe(g,0)},c=s(i),p=o-c.shape[a],l=t&&p?s(p):null,h=[l,e,c].filter(d=>!!d).map(d=>_(d,"float32"));return Z(h,a)})}function gh(e){const t=e.slice();for(let n=t.length-1;n>0;n--){const r=Math.floor(Math.random()*(n+1)),o=t[n];t[n]=t[r],t[r]=o}return t}function or(e){return 1/(1+Math.exp(-e))}function bh(e){return Math.log(e/(1-e))}class pr extends de{constructor(e,t,n,r,o=!1){super({x:e,y:t,width:n,height:r},o)}}const uT=.5,dT=.43,mT=.45;class st{constructor(e,t,n=new J(0,0)){const{width:r,height:o}=t;this._imgDims=new Ke(r,o),this._shift=n,this._positions=e.map(i=>i.mul(new J(r,o)).add(n))}get shift(){return new J(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(e=>e.sub(this._shift).div(new J(this.imageWidth,this.imageHeight)))}forSize(e,t){return new this.constructor(this.relativePositions,{width:e,height:t})}shiftBy(e,t){return new this.constructor(this.relativePositions,this._imgDims,new J(e,t))}shiftByPoint(e){return this.shiftBy(e.x,e.y)}align(e,t={}){if(e){const o=e instanceof me?e.box.floor():new de(e);return this.shiftBy(o.x,o.y).align(null,t)}const{useDlibAlignment:n,minBoxPadding:r}=Object.assign({},{useDlibAlignment:!1,minBoxPadding:.2},t);return n?this.alignDlib():this.alignMinBbox(r)}alignDlib(){const e=this.getRefPointsForAlignment(),[t,n,r]=e,o=l=>r.sub(l).magnitude(),i=(o(t)+o(n))/2,a=Math.floor(i/mT),s=Xn(e),c=Math.floor(Math.max(0,s.x-uT*a)),p=Math.floor(Math.max(0,s.y-dT*a));return new pr(c,p,Math.min(a,this.imageWidth+c),Math.min(a,this.imageHeight+p))}alignMinBbox(e){const t=Ms(this.positions);return t.pad(t.width*e,t.height*e)}getRefPointsForAlignment(){throw new Error("getRefPointsForAlignment not implemented by base class")}}class zh extends st{getRefPointsForAlignment(){const e=this.positions;return[e[0],e[1],Xn([e[3],e[4]])]}}class lr extends st{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(Xn)}}class lo{constructor(e,t){this._label=e,this._distance=t}get label(){return this._label}get distance(){return this._distance}toString(e=!0){return`${this.label}${e?` (${Jn(this.distance)})`:""}`}}class po extends de{constructor(e,t){super(e);this._label=t}static assertIsValidLabeledBox(e,t){if(de.assertIsValidBox(e,t),!Et(e.label))throw new Error(`${t} - expected property label (${e.label}) to be a number`)}get label(){return this._label}}class fn{constructor(e,t){if(!(typeof e=="string"))throw new Error("LabeledFaceDescriptors - constructor expected label to be a string");if(!Array.isArray(t)||t.some(n=>!(n instanceof Float32Array)))throw new Error("LabeledFaceDescriptors - constructor expected descriptors to be an array of Float32Array");this._label=e,this._descriptors=t}get label(){return this._label}get descriptors(){return this._descriptors}toJSON(){return{label:this.label,descriptors:this.descriptors.map(e=>Array.from(e))}}static fromJSON(e){const t=e.descriptors.map(n=>new Float32Array(n));return new fn(e.label,t)}}class qh extends po{constructor(e,t,n,r){super(e,t);this._score=n,this._classScore=r}static assertIsValidPredictedBox(e,t){if(po.assertIsValidLabeledBox(e,t),!qr(e.score)||!qr(e.classScore))throw new Error(`${t} - expected properties score (${e.score}) and (${e.classScore}) to be a number between [0, 1]`)}get score(){return this._score}get classScore(){return this._classScore}}function It(e){return e.detection instanceof me}function ln(e,t){const n={detection:t};return Object.assign({},e,n)}function kl(){const e=window.fetch||function(){throw new Error("fetch - missing fetch implementation for browser environment")},t=function(){throw new Error("readFile - filesystem not available for browser environment")};return{Canvas:HTMLCanvasElement,CanvasRenderingContext2D,Image:HTMLImageElement,ImageData,Video:HTMLVideoElement,createCanvasElement:()=>document.createElement("canvas"),createImageElement:()=>document.createElement("img"),fetch:e,readFile:t}}function Za(e){let t="";if(!e)try{e=require("fs")}catch(r){t=r.toString()}const n=e?function(r){return new Promise((o,i)=>{e.readFile(r,function(a,s){return a?i(a):o(s)})})}:function(){throw new Error(`readFile - failed to require fs in nodejs environment with error: ${t}`)};return{readFile:n}}function Dl(){const e=global.Canvas||global.HTMLCanvasElement,t=global.Image||global.HTMLImageElement,n=function(){if(e)return new e;throw new Error("createCanvasElement - missing Canvas implementation for nodejs environment")},r=function(){if(t)return new t;throw new Error("createImageElement - missing Image implementation for nodejs environment")},o=global.fetch||function(){throw new Error("fetch - missing fetch implementation for nodejs environment")},i=Za();return As({Canvas:e||class{},CanvasRenderingContext2D:global.CanvasRenderingContext2D||class{},Image:t||class{},ImageData:global.ImageData||class{},Video:global.HTMLVideoElement||class{},createCanvasElement:n,createImageElement:r,fetch:o},i)}function Fl(){return typeof window=="object"&&typeof document!="undefined"&&typeof HTMLImageElement!="undefined"&&typeof HTMLCanvasElement!="undefined"&&typeof HTMLVideoElement!="undefined"&&typeof ImageData!="undefined"&&typeof CanvasRenderingContext2D!="undefined"}const Ml=zl(ph());let Me;function fT(){if(!Me)throw new Error("getEnv - environment is not defined, check isNodejs() and isBrowser()");return Me}function Ul(e){Me=e}function Wl(){if(Fl())return Ul(kl());if(Ml.isNodejs())return Ul(Dl())}function gT(e){if(Me||Wl(),!Me)throw new Error("monkeyPatch - environment is not defined, check isNodejs() and isBrowser()");const{Canvas:t=Me.Canvas,Image:n=Me.Image}=e;Me.Canvas=t,Me.Image=n,Me.createCanvasElement=e.createCanvasElement||(()=>new t),Me.createImageElement=e.createImageElement||(()=>new n),Me.ImageData=e.ImageData||Me.ImageData,Me.Video=e.Video||Me.Video,Me.fetch=e.fetch||Me.fetch,Me.readFile=e.readFile||Me.readFile}const se={getEnv:fT,setEnv:Ul,initialize:Wl,createBrowserEnv:kl,createFileSystem:Za,createNodejsEnv:Dl,monkeyPatch:gT,isBrowser:Fl,isNodejs:Ml.isNodejs};Wl();function un(e){return!se.isNodejs()&&typeof e=="string"?document.getElementById(e):e}function Ge(e){const{Canvas:t,CanvasRenderingContext2D:n}=se.getEnv();if(e instanceof n)return e;const r=un(e);if(!(r instanceof t))throw new Error("resolveContext2d - expected canvas to be of instance of Canvas");const o=r.getContext("2d");if(!o)throw new Error("resolveContext2d - canvas 2d context is null");return o}var Yt;(function(e){e.TOP_LEFT="TOP_LEFT",e.TOP_RIGHT="TOP_RIGHT",e.BOTTOM_LEFT="BOTTOM_LEFT",e.BOTTOM_RIGHT="BOTTOM_RIGHT"})(Yt||(Yt={}));class Qa{constructor(e={}){const{anchorPosition:t,backgroundColor:n,fontColor:r,fontSize:o,fontStyle:i,padding:a}=e;this.anchorPosition=t||Yt.TOP_LEFT,this.backgroundColor=n||"rgba(0, 0, 0, 0.5)",this.fontColor=r||"rgba(255, 255, 255, 1)",this.fontSize=o||14,this.fontStyle=i||"Georgia",this.padding=a||4}}class zr{constructor(e,t,n={}){this.text=typeof e=="string"?[e]:e instanceof zr?e.text:e,this.anchor=t,this.options=new Qa(n)}measureWidth(e){const{padding:t}=this.options;return this.text.map(n=>e.measureText(n).width).reduce((n,r)=>n{const g=s+l.x,x=s+l.y+(d+1)*i;n.fillText(h,g,x)})}}class jg{constructor(e={}){const{boxColor:t,lineWidth:n,label:r,drawLabelOptions:o}=e;this.boxColor=t||"rgba(0, 0, 255, 1)",this.lineWidth=n||2,this.label=r;const i={anchorPosition:Yt.BOTTOM_LEFT,backgroundColor:this.boxColor};this.drawLabelOptions=new Qa(Object.assign({},i,o))}}class Bl{constructor(e,t={}){this.box=new de(e),this.options=new jg(t)}draw(e){const t=Ge(e),{boxColor:n,lineWidth:r}=this.options,{x:o,y:i,width:a,height:s}=this.box;t.strokeStyle=n,t.lineWidth=r,t.strokeRect(o,i,a,s);const{label:c}=this.options;c&&new zr([c],{x:o-r/2,y:i},this.options.drawLabelOptions).draw(e)}}function bT(e,t){const n=Array.isArray(t)?t:[t];n.forEach(r=>{const o=r instanceof me?r.score:It(r)?r.detection.score:void 0,i=r instanceof me?r.box:It(r)?r.detection.box:new de(r),a=o?`${Jn(o)}`:void 0;new Bl(i,{label:a}).draw(e)})}function ar(e){const{Image:t,Video:n}=se.getEnv();return e instanceof t&&e.complete||e instanceof n&&e.readyState>=3}function ea(e){return new Promise((t,n)=>{if(e instanceof se.getEnv().Canvas||ar(e))return t(null);function r(i){if(!i.currentTarget)return;i.currentTarget.removeEventListener("load",r),i.currentTarget.removeEventListener("error",o),t(i)}function o(i){if(!i.currentTarget)return;i.currentTarget.removeEventListener("load",r),i.currentTarget.removeEventListener("error",o),n(i)}e.addEventListener("load",r),e.addEventListener("error",o)})}function Qs(e){return new Promise((t,n)=>{if(!(e instanceof Blob))return n("bufferToImage - expected buf to be of type: Blob");const r=new FileReader;r.onload=()=>{if(typeof r.result!="string")return n("bufferToImage - expected reader.result to be a string, in onload");const o=se.getEnv().createImageElement();o.onload=()=>t(o),o.onerror=n,o.src=r.result},r.onerror=n,r.readAsDataURL(e)})}function dn(e){const{Image:t,Video:n}=se.getEnv();return e instanceof t?new Ke(e.naturalWidth,e.naturalHeight):e instanceof n?new Ke(e.videoWidth,e.videoHeight):new Ke(e.width,e.height)}function Rn({width:e,height:t}){const{createCanvasElement:n}=se.getEnv(),r=n();return r.width=e,r.height=t,r}function cr(e,t){const{ImageData:n}=se.getEnv();if(!(e instanceof n)&&!ar(e))throw new Error("createCanvasFromMedia - media has not finished loading yet");const{width:r,height:o}=t||dn(e),i=Rn({width:r,height:o});return e instanceof n?Ge(i).putImageData(e,0,0):Ge(i).drawImage(e,0,0,r,o),i}async function Xs(e,t){const n=t||se.getEnv().createCanvasElement(),[r,o,i]=e.shape.slice(pt(e)?1:0),a=O(()=>e.as3D(r,o,i).toInt());return await Ir.toPixels(a,n),a.dispose(),n}function co(e){const{Image:t,Canvas:n,Video:r}=se.getEnv();return e instanceof t||e instanceof n||e instanceof r}function Js(e,t,n=!1){const{Image:r,Canvas:o}=se.getEnv();if(!(e instanceof r||e instanceof o))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const i=dn(e),a=t/Math.max(i.height,i.width),s=a*i.width,c=a*i.height,p=Rn({width:t,height:t}),l=e instanceof o?e:cr(e),h=Math.abs(s-c)/2,d=n&&s{if(nn(n)){this._imageTensors[r]=n,this._inputDimensions[r]=n.shape;return}if(pt(n)){const i=n.shape[0];if(i!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${i} passed, but not supported in input array`);this._imageTensors[r]=n,this._inputDimensions[r]=n.shape.slice(1);return}const o=n instanceof se.getEnv().Canvas?n:cr(n);this._canvases[r]=o,this._inputDimensions[r]=[o.height,o.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 Ht(this.batchSize,0,1).map((e,t)=>this.getReshapedInputDimensions(t))}getInput(e){return this.canvases[e]||this.imageTensors[e]}getInputDimensions(e){return this._inputDimensions[e]}getInputHeight(e){return this._inputDimensions[e][0]}getInputWidth(e){return this._inputDimensions[e][1]}getReshapedInputDimensions(e){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const t=this.getInputWidth(e),n=this.getInputHeight(e);return Ol({width:t,height:n},this.inputSize)}toBatchTensor(e,t=!0){return this._inputSize=e,O(()=>{const n=Ht(this.batchSize,0,1).map(o=>{const i=this.getInput(o);if(i instanceof te){let a=pt(i)?i:i.expandDims();return a=Ds(a,t),(a.shape[1]!==e||a.shape[2]!==e)&&(a=Sl.resizeBilinear(a,[e,e])),a.as3D(e,e,3)}if(i instanceof se.getEnv().Canvas)return Ir.fromPixels(Js(i,e,t));throw new Error(`toBatchTensor - at batchIdx ${o}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${i}`)}),r=Fe(n.map(o=>_(o,"float32"))).as4D(this.batchSize,e,e,3);return r})}}async function ue(e){if(e instanceof Vt)return e;let t=Array.isArray(e)?e:[e];if(!t.length)throw new Error("toNetInput - empty array passed as input");const n=o=>Array.isArray(e)?` at input index ${o}:`:"",r=t.map(un);return r.forEach((o,i)=>{if(!co(o)&&!nn(o)&&!pt(o))throw typeof t[i]=="string"?new Error(`toNetInput -${n(i)} string passed, but could not resolve HTMLElement for element id ${t[i]}`):new Error(`toNetInput -${n(i)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(pt(o)){const a=o.shape[0];if(a!==1)throw new Error(`toNetInput -${n(i)} tf.Tensor4D with batchSize ${a} passed, but not supported in input array`)}}),await Promise.all(r.map(o=>co(o)&&ea(o))),new Vt(r,Array.isArray(e))}async function An(e,t){const{Canvas:n}=se.getEnv();let r=e;if(!(e instanceof n)){const a=await ue(e);if(a.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const s=a.getInput(0);r=s instanceof n?s:await Xs(s)}const o=Ge(r),i=t.map(a=>a instanceof me?a.forSize(r.width,r.height).box.floor():a).map(a=>a.clipAtImageBorders(r.width,r.height));return i.map(({x:a,y:s,width:c,height:p})=>{const l=Rn({width:c,height:p});return Ge(l).putImageData(o.getImageData(a,s,c,p),0,0),l})}async function Nn(e,t){if(!nn(e)&&!pt(e))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(pt(e)&&e.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return O(()=>{const[n,r,o]=e.shape.slice(pt(e)?1:0),i=t.map(s=>s instanceof me?s.forSize(r,n).box:s).map(s=>s.clipAtImageBorders(r,n)),a=i.map(({x:s,y:c,width:p,height:l})=>Ua(e.as3D(n,r,o),[c,s,0],[l,p,o]));return a})}async function mn(e,t){const n=se.getEnv().fetch,r=await n(e,t);if(!(r.status<400))throw new Error(`failed to fetch: (${r.status}) ${r.statusText}, from url: ${r.url}`);return r}async function Ph(e){const t=await mn(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 Qs(n)}async function Zs(e){return(await mn(e)).json()}async function Gh(e){return new Float32Array(await(await mn(e)).arrayBuffer())}function ec(e,t){const n=`${t}-weights_manifest.json`;if(!e)return{modelBaseUri:"",manifestUri:n};if(e==="/")return{modelBaseUri:"/",manifestUri:`/${n}`};const r=e.startsWith("http://")?"http://":e.startsWith("https://")?"https://":"";e=e.replace(r,"");const o=e.split("/").filter(s=>s),i=e.endsWith(".json")?o[o.length-1]:n;let a=r+(e.endsWith(".json")?o.slice(0,o.length-1):o).join("/");return a=e.startsWith("/")?`/${a}`:a,{modelBaseUri:a,manifestUri:a==="/"?`/${i}`:`${a}/${i}`}}async function Ks(e,t){const{manifestUri:n,modelBaseUri:r}=ec(e,t);let o=await Zs(n);return vr.loadWeights(o,r)}function jh(e,t,n=!1){const{width:r,height:o}=n?dn(t):t;return e.width=r,e.height=o,{width:r,height:o}}class We{constructor(e){this._name=e,this._params=void 0,this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(e){const{obj:t,objProp:n}=this.traversePropertyPath(e);return t[n]}reassignParamFromPath(e,t){const{obj:n,objProp:r}=this.traversePropertyPath(e);n[r].dispose(),n[r]=t}getParamList(){return this._paramMappings.map(({paramPath:e})=>({path:e,tensor:this.getParamFromPath(e)}))}getTrainableParams(){return this.getParamList().filter(e=>e.tensor instanceof $t)}getFrozenParams(){return this.getParamList().filter(e=>!(e.tensor instanceof $t))}variable(){this.getFrozenParams().forEach(({path:e,tensor:t})=>{this.reassignParamFromPath(e,t.variable())})}freeze(){this.getTrainableParams().forEach(({path:e,tensor:t})=>{const n=Xe(t.dataSync());t.dispose(),this.reassignParamFromPath(e,n)})}dispose(e=!0){this.getParamList().forEach(t=>{if(e&&t.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${t.path}`);t.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:e})=>Array.from(e.dataSync())).reduce((e,t)=>e.concat(t)))}async load(e){if(e instanceof Float32Array){this.extractWeights(e);return}await this.loadFromUri(e)}async loadFromUri(e){if(e&&typeof e!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const t=await Ks(e,this.getDefaultModelName());this.loadFromWeightMap(t)}async loadFromDisk(e){if(e&&typeof e!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:t}=se.getEnv(),{manifestUri:n,modelBaseUri:r}=ec(e,this.getDefaultModelName()),o=c=>Promise.all(c.map(p=>t(p).then(l=>l.buffer))),i=vr.weightsLoaderFactory(o),a=JSON.parse((await t(n)).toString()),s=await i(a,r);this.loadFromWeightMap(s)}loadFromWeightMap(e){const{paramMappings:t,params:n}=this.extractParamsFromWeigthMap(e);this._paramMappings=t,this._params=n}extractWeights(e){const{paramMappings:t,params:n}=this.extractParams(e);this._paramMappings=t,this._params=n}traversePropertyPath(e){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const t=e.split("/").reduce((o,i)=>{if(!o.nextObj.hasOwnProperty(i))throw new Error(`traversePropertyPath - object does not have property ${i}, for path ${e}`);return{obj:o.nextObj,objProp:i,nextObj:o.nextObj[i]}},{nextObj:this.params}),{obj:n,objProp:r}=t;if(!n||!r||!(n[r]instanceof te))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${e}`);return{obj:n,objProp:r}}}function tt(e,t,n){return O(()=>{let r=Wr(e,t.depthwise_filter,t.pointwise_filter,n,"same");return r=N(r,t.bias),r})}function tc(e,t,n=!1){return O(()=>{const r=ie(n?N(ve(e,t.conv0.filters,[2,2],"same"),t.conv0.bias):tt(e,t.conv0,[2,2])),o=tt(r,t.conv1,[1,1]),i=ie(N(r,o)),a=tt(i,t.conv2,[1,1]);return ie(N(r,N(o,a)))})}function ws(e,t,n=!1,r=!0){return O(()=>{const o=ie(n?N(ve(e,t.conv0.filters,r?[2,2]:[1,1],"same"),t.conv0.bias):tt(e,t.conv0,r?[2,2]:[1,1])),i=tt(o,t.conv1,[1,1]),a=ie(N(o,i)),s=tt(a,t.conv2,[1,1]),c=ie(N(o,N(i,s))),p=tt(c,t.conv3,[1,1]);return ie(N(o,N(i,N(s,p))))})}function Zn(e,t,n="same",r=!1){return O(()=>{const o=N(ve(e,t.filters,[1,1],n),t.bias);return r?ie(o):o})}function Ye(e,t){Object.keys(e).forEach(n=>{t.some(r=>r.originalPath===n)||e[n].dispose()})}function Hr(e,t){return function(n,r,o,i){const a=xt(e(n*r*o*o),[o,o,n,r]),s=ce(e(r));return t.push({paramPath:`${i}/filters`},{paramPath:`${i}/bias`}),{filters:a,bias:s}}}function nc(e,t){return function(n,r,o){const i=wt(e(n*r),[n,r]),a=ce(e(r));return t.push({paramPath:`${o}/weights`},{paramPath:`${o}/bias`}),{weights:i,bias:a}}}class $l{constructor(e,t,n){this.depthwise_filter=e,this.pointwise_filter=t,this.bias=n}}function Yr(e,t){return function(n,r,o){const i=xt(e(3*3*n),[3,3,n,1]),a=xt(e(n*r),[1,1,n,r]),s=ce(e(r));return t.push({paramPath:`${o}/depthwise_filter`},{paramPath:`${o}/pointwise_filter`},{paramPath:`${o}/bias`}),new $l(i,a,s)}}function Vr(e){return function(t){const n=e(`${t}/depthwise_filter`,4),r=e(`${t}/pointwise_filter`,4),o=e(`${t}/bias`,1);return new $l(n,r,o)}}function it(e,t){return function(n,r,o){const i=e[n];if(!Kn(i,r))throw new Error(`expected weightMap[${n}] to be a Tensor${r}D, instead have ${i}`);return t.push({originalPath:n,paramPath:o||n}),i}}function Ve(e){let t=e;function n(o){const i=t.slice(0,o);return t=t.slice(o),i}function r(){return t}return{extractWeights:n,getRemainingWeights:r}}function rc(e,t){const n=Hr(e,t),r=Yr(e,t);function o(a,s,c,p=!1){const l=p?n(a,s,3,`${c}/conv0`):r(a,s,`${c}/conv0`),h=r(s,s,`${c}/conv1`),d=r(s,s,`${c}/conv2`);return{conv0:l,conv1:h,conv2:d}}function i(a,s,c,p=!1){const{conv0:l,conv1:h,conv2:d}=o(a,s,c,p),g=r(s,s,`${c}/conv3`);return{conv0:l,conv1:h,conv2:d,conv3:g}}return{extractDenseBlock3Params:o,extractDenseBlock4Params:i}}function Gg(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractDenseBlock4Params:o}=rc(n,t),i=o(3,32,"dense0",!0),a=o(32,64,"dense1"),s=o(64,128,"dense2"),c=o(128,256,"dense3");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:i,dense1:a,dense2:s,dense3:c}}}function oc(e){return function(t){const n=e(`${t}/filters`,4),r=e(`${t}/bias`,1);return{filters:n,bias:r}}}function ic(e,t){const n=it(e,t),r=oc(n),o=Vr(n);function i(s,c=!1){const p=c?r(`${s}/conv0`):o(`${s}/conv0`),l=o(`${s}/conv1`),h=o(`${s}/conv2`);return{conv0:p,conv1:l,conv2:h}}function a(s,c=!1){const p=c?r(`${s}/conv0`):o(`${s}/conv0`),l=o(`${s}/conv1`),h=o(`${s}/conv2`),d=o(`${s}/conv3`);return{conv0:p,conv1:l,conv2:h,conv3:d}}return{extractDenseBlock3Params:i,extractDenseBlock4Params:a}}function Pg(e){const t=[],{extractDenseBlock4Params:n}=ic(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2"),dense3:n("dense3")};return Ye(e,t),{params:r,paramMappings:t}}class sc extends We{constructor(){super("FaceFeatureExtractor")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("FaceFeatureExtractor - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(255));let i=ws(o,t.dense0,!0);return i=ws(i,t.dense1),i=ws(i,t.dense2),i=ws(i,t.dense3),i=mt(i,[7,7],[2,2],"valid"),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(e){return Pg(e)}extractParams(e){return Gg(e)}}function xs(e,t){return O(()=>N(V(e,t.weights),t.bias))}function qg(e,t,n){const r=[],{extractWeights:o,getRemainingWeights:i}=Ve(e),a=nc(o,r),s=a(t,n,"fc");if(i().length!==0)throw new Error(`weights remaing after extract: ${i().length}`);return{paramMappings:r,params:{fc:s}}}function zg(e){const t=[],n=it(e,t);function r(i){const a=n(`${i}/weights`,2),s=n(`${i}/bias`,1);return{weights:a,bias:s}}const o={fc:r("fc")};return Ye(e,t),{params:o,paramMappings:t}}function ac(e){const t={},n={};return Object.keys(e).forEach(r=>{const o=r.startsWith("fc")?n:t;o[r]=e[r]}),{featureExtractorMap:t,classifierMap:n}}class cc extends We{constructor(e,t){super(e);this._faceFeatureExtractor=t}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){const{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return O(()=>{const n=e instanceof Vt?this.faceFeatureExtractor.forwardInput(e):e;return xs(n.as2D(n.shape[0],-1),t.fc)})}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){const{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return qg(e,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(e){const{featureExtractorMap:t,classifierMap:n}=ac(e);return this.faceFeatureExtractor.loadFromWeightMap(t),zg(n)}extractParams(e){const t=this.getClassifierChannelsIn(),n=this.getClassifierChannelsOut(),r=n*t+n,o=e.slice(0,e.length-r),i=e.slice(e.length-r);return this.faceFeatureExtractor.extractWeights(o),this.extractClassifierParams(i)}}const Hs=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class hn{constructor(e){if(e.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${e.length}`);Hs.forEach((t,n)=>{this[t]=e[n]})}asSortedArray(){return Hs.map(e=>({expression:e,probability:this[e]})).sort((e,t)=>t.probability-e.probability)}}class Ys extends cc{constructor(e=new sc){super("FaceExpressionNet",e)}forwardInput(e){return O(()=>Ln(this.runNet(e)))}async forward(e){return this.forwardInput(await ue(e))}async predictExpressions(e){const t=await ue(e),n=await this.forwardInput(t),r=await Promise.all(Ae(n).map(async i=>{const a=await i.data();return i.dispose(),a}));n.dispose();const o=r.map(i=>new hn(i));return t.isBatchInput?o:o[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function qs(e){return e.expressions instanceof hn}function io(e,t){const n={expressions:t};return Object.assign({},e,n)}function wT(e,t,n=.1,r){const o=Array.isArray(t)?t:[t];o.forEach(i=>{const a=i instanceof hn?i:qs(i)?i.expressions:void 0;if(!a)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const s=a.asSortedArray(),c=s.filter(h=>h.probability>n),p=It(i)?i.detection.box.bottomLeft:r||new J(0,0),l=new zr(c.map(h=>`${h.expression} (${Jn(h.probability)})`),p);l.draw(e)})}function pn(e){return It(e)&&e.landmarks instanceof st&&e.unshiftedLandmarks instanceof st&&e.alignedRect instanceof me}function Tn(e,t){const{box:n}=e.detection,r=t.shiftBy(n.x,n.y),o=r.align(),{imageDims:i}=e.detection,a=new me(e.detection.score,o.rescale(i.reverse()),i),s={landmarks:r,unshiftedLandmarks:t,alignedRect:a};return Object.assign({},e,s)}class Hg{constructor(e={}){const{drawLines:t=!0,drawPoints:n=!0,lineWidth:r,lineColor:o,pointSize:i,pointColor:a}=e;this.drawLines=t,this.drawPoints=n,this.lineWidth=r||1,this.pointSize=i||2,this.lineColor=o||"rgba(0, 255, 255, 1)",this.pointColor=a||"rgba(255, 0, 255, 1)"}}class Yg{constructor(e,t={}){this.faceLandmarks=e,this.options=new Hg(t)}draw(e){const t=Ge(e),{drawLines:n,drawPoints:r,lineWidth:o,lineColor:i,pointSize:a,pointColor:s}=this.options;if(n&&this.faceLandmarks instanceof lr&&(t.strokeStyle=i,t.lineWidth=o,tn(t,this.faceLandmarks.getJawOutline()),tn(t,this.faceLandmarks.getLeftEyeBrow()),tn(t,this.faceLandmarks.getRightEyeBrow()),tn(t,this.faceLandmarks.getNose()),tn(t,this.faceLandmarks.getLeftEye(),!0),tn(t,this.faceLandmarks.getRightEye(),!0),tn(t,this.faceLandmarks.getMouth(),!0)),r){t.strokeStyle=s,t.fillStyle=s;const c=p=>{t.beginPath(),t.arc(p.x,p.y,a,0,2*Math.PI),t.fill()};this.faceLandmarks.positions.forEach(c)}}}function xT(e,t){const n=Array.isArray(t)?t:[t];n.forEach(r=>{const o=r instanceof st?r:pn(r)?r.landmarks:void 0;if(!o)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new Yg(o).draw(e)})}const _s={};_e(_s,{AnchorPosition:()=>Yt,DrawBox:()=>Bl,DrawBoxOptions:()=>jg,DrawFaceLandmarks:()=>Yg,DrawFaceLandmarksOptions:()=>Hg,DrawTextField:()=>zr,DrawTextFieldOptions:()=>Qa,drawContour:()=>tn,drawDetections:()=>bT,drawFaceExpressions:()=>wT,drawFaceLandmarks:()=>xT});function yT(e,t){const n=Hr(e,t),r=Yr(e,t);function o(a,s,c){const p=r(a,s,`${c}/separable_conv0`),l=r(s,s,`${c}/separable_conv1`),h=n(a,s,1,`${c}/expansion_conv`);return{separable_conv0:p,separable_conv1:l,expansion_conv:h}}function i(a,s){const c=r(a,a,`${s}/separable_conv0`),p=r(a,a,`${s}/separable_conv1`),l=r(a,a,`${s}/separable_conv2`);return{separable_conv0:c,separable_conv1:p,separable_conv2:l}}return{extractConvParams:n,extractSeparableConvParams:r,extractReductionBlockParams:o,extractMainBlockParams:i}}function Vg(e,t){const n=[],{extractWeights:r,getRemainingWeights:o}=Ve(e),{extractConvParams:i,extractSeparableConvParams:a,extractReductionBlockParams:s,extractMainBlockParams:c}=yT(r,n),p=i(3,32,3,"entry_flow/conv_in"),l=s(32,64,"entry_flow/reduction_block_0"),h=s(64,128,"entry_flow/reduction_block_1"),d={conv_in:p,reduction_block_0:l,reduction_block_1:h},g={};Ht(t,0,1).forEach(S=>{g[`main_block_${S}`]=c(128,`middle_flow/main_block_${S}`)});const x=s(128,256,"exit_flow/reduction_block"),w=a(256,512,"exit_flow/separable_conv"),L={reduction_block:x,separable_conv:w};if(o().length!==0)throw new Error(`weights remaing after extract: ${o().length}`);return{paramMappings:n,params:{entry_flow:d,middle_flow:g,exit_flow:L}}}function LT(e,t){const n=it(e,t),r=oc(n),o=Vr(n);function i(s){const c=o(`${s}/separable_conv0`),p=o(`${s}/separable_conv1`),l=r(`${s}/expansion_conv`);return{separable_conv0:c,separable_conv1:p,expansion_conv:l}}function a(s){const c=o(`${s}/separable_conv0`),p=o(`${s}/separable_conv1`),l=o(`${s}/separable_conv2`);return{separable_conv0:c,separable_conv1:p,separable_conv2:l}}return{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:a}}function Kg(e,t){const n=[],{extractConvParams:r,extractSeparableConvParams:o,extractReductionBlockParams:i,extractMainBlockParams:a}=LT(e,n),s=r("entry_flow/conv_in"),c=i("entry_flow/reduction_block_0"),p=i("entry_flow/reduction_block_1"),l={conv_in:s,reduction_block_0:c,reduction_block_1:p},h={};Ht(t,0,1).forEach(w=>{h[`main_block_${w}`]=a(`middle_flow/main_block_${w}`)});const d=i("exit_flow/reduction_block"),g=o("exit_flow/separable_conv"),x={reduction_block:d,separable_conv:g};return Ye(e,n),{params:{entry_flow:l,middle_flow:h,exit_flow:x},paramMappings:n}}function Jg(e,t,n){return N(ve(e,t.filters,n,"same"),t.bias)}function jl(e,t,n=!0){let r=n?ie(e):e;return r=tt(r,t.separable_conv0,[1,1]),r=tt(ie(r),t.separable_conv1,[1,1]),r=Re(r,[3,3],[2,2],"same"),r=N(r,Jg(e,t.expansion_conv,[2,2])),r}function vT(e,t){let n=tt(ie(e),t.separable_conv0,[1,1]);return n=tt(ie(n),t.separable_conv1,[1,1]),n=tt(ie(n),t.separable_conv2,[1,1]),n=N(n,e),n}class Xg extends We{constructor(e){super("TinyXception");this._numMainBlocks=e}forwardInput(e){const{params:t}=this;if(!t)throw new Error("TinyXception - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(256));let i=ie(Jg(o,t.entry_flow.conv_in,[2,2]));return i=jl(i,t.entry_flow.reduction_block_0,!1),i=jl(i,t.entry_flow.reduction_block_1),Ht(this._numMainBlocks,0,1).forEach(a=>{i=vT(i,t.middle_flow[`main_block_${a}`])}),i=jl(i,t.exit_flow.reduction_block),i=ie(tt(i,t.exit_flow.separable_conv,[1,1])),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(e){return Kg(e,this._numMainBlocks)}extractParams(e){return Vg(e,this._numMainBlocks)}}function Zg(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),o=nc(n,t),i=o(512,1,"fc/age"),a=o(512,2,"fc/gender");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{fc:{age:i,gender:a}}}}function Qg(e){const t=[],n=it(e,t);function r(i){const a=n(`${i}/weights`,2),s=n(`${i}/bias`,1);return{weights:a,bias:s}}const o={fc:{age:r("fc/age"),gender:r("fc/gender")}};return Ye(e,t),{params:o,paramMappings:t}}var Dt;(function(e){e.FEMALE="female",e.MALE="male"})(Dt||(Dt={}));class ta extends We{constructor(e=new Xg(2)){super("AgeGenderNet");this._faceFeatureExtractor=e}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(e){const{params:t}=this;if(!t)throw new Error(`${this._name} - load model before inference`);return O(()=>{const n=e instanceof Vt?this.faceFeatureExtractor.forwardInput(e):e,r=mt(n,[7,7],[2,2],"valid").as2D(n.shape[0],-1),o=xs(r,t.fc.age).as1D(),i=xs(r,t.fc.gender);return{age:o,gender:i}})}forwardInput(e){return O(()=>{const{age:t,gender:n}=this.runNet(e);return{age:t,gender:Ln(n)}})}async forward(e){return this.forwardInput(await ue(e))}async predictAgeAndGender(e){const t=await ue(e),n=await this.forwardInput(t),r=Ae(n.age),o=Ae(n.gender),i=r.map((s,c)=>({ageTensor:s,genderTensor:o[c]})),a=await Promise.all(i.map(async({ageTensor:s,genderTensor:c})=>{const p=(await s.data())[0],l=(await c.data())[0],h=l>.5,d=h?Dt.MALE:Dt.FEMALE,g=h?l:1-l;return s.dispose(),c.dispose(),{age:p,gender:d,genderProbability:g}}));return n.age.dispose(),n.gender.dispose(),t.isBatchInput?a:a[0]}getDefaultModelName(){return"age_gender_model"}dispose(e=!0){this.faceFeatureExtractor.dispose(e),super.dispose(e)}loadClassifierParams(e){const{params:t,paramMappings:n}=this.extractClassifierParams(e);this._params=t,this._paramMappings=n}extractClassifierParams(e){return Zg(e)}extractParamsFromWeigthMap(e){const{featureExtractorMap:t,classifierMap:n}=ac(e);return this.faceFeatureExtractor.loadFromWeightMap(t),Qg(n)}extractParams(e){const t=512*1+1+(512*2+2),n=e.slice(0,e.length-t),r=e.slice(e.length-t);return this.faceFeatureExtractor.extractWeights(n),this.extractClassifierParams(r)}}class pc extends cc{postProcess(e,t,n){const r=n.map(({width:i,height:a})=>{const s=t/Math.max(a,i);return{width:i*s,height:a*s}}),o=r.length;return O(()=>{const i=(l,h)=>Fe([qe([68],l),qe([68],h)],1).as2D(1,136).as1D(),a=(l,h)=>{const{width:d,height:g}=r[l];return h(d,g)?Math.abs(d-g)/2:0},s=l=>a(l,(h,d)=>ha(l,(h,d)=>di(s(h),c(h))))).div(Fe(Array.from(Array(o),(l,h)=>i(r[h].width,r[h].height))));return p})}forwardInput(e){return O(()=>{const t=this.runNet(e);return this.postProcess(t,e.inputSize,e.inputDimensions.map(([n,r])=>({height:n,width:r})))})}async forward(e){return this.forwardInput(await ue(e))}async detectLandmarks(e){const t=await ue(e),n=O(()=>Ae(this.forwardInput(t))),r=await Promise.all(n.map(async(o,i)=>{const a=Array.from(await o.data()),s=a.filter((p,l)=>Ja(l)),c=a.filter((p,l)=>!Ja(l));return new lr(Array(68).fill(0).map((p,l)=>new J(s[l],c[l])),{height:t.getInputHeight(i),width:t.getInputWidth(i)})}));return n.forEach(o=>o.dispose()),t.isBatchInput?r:r[0]}getClassifierChannelsOut(){return 136}}class sr extends pc{constructor(e=new sc){super("FaceLandmark68Net",e)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function eb(e){const t=[],{extractDenseBlock3Params:n}=ic(e,t),r={dense0:n("dense0",!0),dense1:n("dense1"),dense2:n("dense2")};return Ye(e,t),{params:r,paramMappings:t}}function tb(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractDenseBlock3Params:o}=rc(n,t),i=o(3,32,"dense0",!0),a=o(32,64,"dense1"),s=o(64,128,"dense2");if(r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{paramMappings:t,params:{dense0:i,dense1:a,dense2:s}}}class nb extends We{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("TinyFaceFeatureExtractor - load model before inference");return O(()=>{const n=e.toBatchTensor(112,!0),r=[122.782,117.001,104.298],o=ht(n,r).div(C(255));let i=tc(o,t.dense0,!0);return i=tc(i,t.dense1),i=tc(i,t.dense2),i=mt(i,[14,14],[2,2],"valid"),i})}async forward(e){return this.forwardInput(await ue(e))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(e){return eb(e)}extractParams(e){return tb(e)}}class zs extends pc{constructor(e=new nb){super("FaceLandmark68TinyNet",e)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class $h extends sr{}function rb(e,t){return N(v(e,t.weights),t.biases)}function Gl(e,t,n,r,o="same"){const{filters:i,bias:a}=t.conv;let s=ve(e,i,n,o);return s=N(s,a),s=rb(s,t.scale),r?ie(s):s}function ob(e,t){return Gl(e,t,[1,1],!0)}function Pl(e,t){return Gl(e,t,[1,1],!1)}function lc(e,t){return Gl(e,t,[2,2],!0,"valid")}function ST(e,t){function n(s,c,p){const l=e(s),h=l.length/(c*p*p);if(El(h))throw new Error(`depth has to be an integer: ${h}, weights.length: ${l.length}, numFilters: ${c}, filterSize: ${p}`);return O(()=>K(xt(l,[c,h,p,p]),[2,3,1,0]))}function r(s,c,p,l){const h=n(s,c,p),d=ce(e(c));return t.push({paramPath:`${l}/filters`},{paramPath:`${l}/bias`}),{filters:h,bias:d}}function o(s,c){const p=ce(e(s)),l=ce(e(s));return t.push({paramPath:`${c}/weights`},{paramPath:`${c}/biases`}),{weights:p,biases:l}}function i(s,c,p,l){const h=r(s,c,p,`${l}/conv`),d=o(c,`${l}/scale`);return{conv:h,scale:d}}function a(s,c,p,l,h=!1){const d=i((h?.5:1)*s,c,p,`${l}/conv1`),g=i(s,c,p,`${l}/conv2`);return{conv1:d,conv2:g}}return{extractConvLayerParams:i,extractResidualLayerParams:a}}function ib(e){const{extractWeights:t,getRemainingWeights:n}=Ve(e),r=[],{extractConvLayerParams:o,extractResidualLayerParams:i}=ST(t,r),a=o(4704,32,7,"conv32_down"),s=i(9216,32,3,"conv32_1"),c=i(9216,32,3,"conv32_2"),p=i(9216,32,3,"conv32_3"),l=i(36864,64,3,"conv64_down",!0),h=i(36864,64,3,"conv64_1"),d=i(36864,64,3,"conv64_2"),g=i(36864,64,3,"conv64_3"),x=i(147456,128,3,"conv128_down",!0),w=i(147456,128,3,"conv128_1"),L=i(147456,128,3,"conv128_2"),S=i(589824,256,3,"conv256_down",!0),I=i(589824,256,3,"conv256_1"),R=i(589824,256,3,"conv256_2"),A=i(589824,256,3,"conv256_down_out"),E=O(()=>K(wt(t(256*128),[128,256]),[1,0]));if(r.push({paramPath:"fc"}),n().length!==0)throw new Error(`weights remaing after extract: ${n().length}`);const F={conv32_down:a,conv32_1:s,conv32_2:c,conv32_3:p,conv64_down:l,conv64_1:h,conv64_2:d,conv64_3:g,conv128_down:x,conv128_1:w,conv128_2:L,conv256_down:S,conv256_1:I,conv256_2:R,conv256_down_out:A,fc:E};return{params:F,paramMappings:r}}function IT(e,t){const n=it(e,t);function r(a){const s=n(`${a}/scale/weights`,1),c=n(`${a}/scale/biases`,1);return{weights:s,biases:c}}function o(a){const s=n(`${a}/conv/filters`,4),c=n(`${a}/conv/bias`,1),p=r(a);return{conv:{filters:s,bias:c},scale:p}}function i(a){return{conv1:o(`${a}/conv1`),conv2:o(`${a}/conv2`)}}return{extractConvLayerParams:o,extractResidualLayerParams:i}}function sb(e){const t=[],{extractConvLayerParams:n,extractResidualLayerParams:r}=IT(e,t),o=n("conv32_down"),i=r("conv32_1"),a=r("conv32_2"),s=r("conv32_3"),c=r("conv64_down"),p=r("conv64_1"),l=r("conv64_2"),h=r("conv64_3"),d=r("conv128_down"),g=r("conv128_1"),x=r("conv128_2"),w=r("conv256_down"),L=r("conv256_1"),S=r("conv256_2"),I=r("conv256_down_out"),R=e.fc;if(t.push({originalPath:"fc",paramPath:"fc"}),!Cl(R))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${R}`);const A={conv32_down:o,conv32_1:i,conv32_2:a,conv32_3:s,conv64_down:c,conv64_1:p,conv64_2:l,conv64_3:h,conv128_down:d,conv128_1:g,conv128_2:x,conv256_down:w,conv256_1:L,conv256_2:S,conv256_down_out:I,fc:R};return Ye(e,t),{params:A,paramMappings:t}}function Ot(e,t){let n=ob(e,t.conv1);return n=Pl(n,t.conv2),n=N(n,e),n=ie(n),n}function ys(e,t){let n=lc(e,t.conv1);n=Pl(n,t.conv2);let r=mt(e,2,2,"valid");const o=Ce(r.shape),i=r.shape[3]!==n.shape[3],a=r.shape[1]!==n.shape[1]||r.shape[2]!==n.shape[2];if(a){const s=[...n.shape];s[1]=1;const c=Ce(s);n=Z([n,c],1);const p=[...n.shape];p[2]=1;const l=Ce(p);n=Z([n,l],2)}return r=i?Z([r,o],3):r,n=N(r,n),n=ie(n),n}class ir extends We{constructor(){super("FaceRecognitionNet")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("FaceRecognitionNet - load model before inference");return O(()=>{const n=_(e.toBatchTensor(150,!0),"float32"),r=[122.782,117.001,104.298],o=ht(n,r).div(C(256));let i=lc(o,t.conv32_down);i=Re(i,3,2,"valid"),i=Ot(i,t.conv32_1),i=Ot(i,t.conv32_2),i=Ot(i,t.conv32_3),i=ys(i,t.conv64_down),i=Ot(i,t.conv64_1),i=Ot(i,t.conv64_2),i=Ot(i,t.conv64_3),i=ys(i,t.conv128_down),i=Ot(i,t.conv128_1),i=Ot(i,t.conv128_2),i=ys(i,t.conv256_down),i=Ot(i,t.conv256_1),i=Ot(i,t.conv256_2),i=ys(i,t.conv256_down_out);const a=i.mean([1,2]),s=V(a,t.fc);return s})}async forward(e){return this.forwardInput(await ue(e))}async computeFaceDescriptor(e){const t=await ue(e),n=O(()=>Ae(this.forwardInput(t))),r=await Promise.all(n.map(o=>o.data()));return n.forEach(o=>o.dispose()),t.isBatchInput?r:r[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(e){return sb(e)}extractParams(e){return ib(e)}}function Bh(e){const t=new ir;return t.extractWeights(e),t}function so(e,t){const n={descriptor:t};return Object.assign({},e,n)}function Wh(e){return typeof e.age=="number"}function ao(e,t){const n={age:t};return Object.assign({},e,n)}function Uh(e){return(e.gender===Dt.MALE||e.gender===Dt.FEMALE)&&qr(e.genderProbability)}function oo(e,t,n){const r={gender:t,genderProbability:n};return Object.assign({},e,r)}function TT(e,t){function n(c,p){const l=xt(e(3*3*c),[3,3,c,1]),h=ce(e(c)),d=ce(e(c)),g=ce(e(c)),x=ce(e(c));return t.push({paramPath:`${p}/filters`},{paramPath:`${p}/batch_norm_scale`},{paramPath:`${p}/batch_norm_offset`},{paramPath:`${p}/batch_norm_mean`},{paramPath:`${p}/batch_norm_variance`}),{filters:l,batch_norm_scale:h,batch_norm_offset:d,batch_norm_mean:g,batch_norm_variance:x}}function r(c,p,l,h,d){const g=xt(e(c*p*l*l),[l,l,c,p]),x=ce(e(p));return t.push({paramPath:`${h}/filters`},{paramPath:`${h}/${d?"batch_norm_offset":"bias"}`}),{filters:g,bias:x}}function o(c,p,l,h){const{filters:d,bias:g}=r(c,p,l,h,!0);return{filters:d,batch_norm_offset:g}}function i(c,p,l){const h=n(c,`${l}/depthwise_conv`),d=o(c,p,1,`${l}/pointwise_conv`);return{depthwise_conv:h,pointwise_conv:d}}function a(){const c=o(3,32,3,"mobilenetv1/conv_0"),p=i(32,64,"mobilenetv1/conv_1"),l=i(64,128,"mobilenetv1/conv_2"),h=i(128,128,"mobilenetv1/conv_3"),d=i(128,256,"mobilenetv1/conv_4"),g=i(256,256,"mobilenetv1/conv_5"),x=i(256,512,"mobilenetv1/conv_6"),w=i(512,512,"mobilenetv1/conv_7"),L=i(512,512,"mobilenetv1/conv_8"),S=i(512,512,"mobilenetv1/conv_9"),I=i(512,512,"mobilenetv1/conv_10"),R=i(512,512,"mobilenetv1/conv_11"),A=i(512,1024,"mobilenetv1/conv_12"),E=i(1024,1024,"mobilenetv1/conv_13");return{conv_0:c,conv_1:p,conv_2:l,conv_3:h,conv_4:d,conv_5:g,conv_6:x,conv_7:w,conv_8:L,conv_9:S,conv_10:I,conv_11:R,conv_12:A,conv_13:E}}function s(){const c=o(1024,256,1,"prediction_layer/conv_0"),p=o(256,512,3,"prediction_layer/conv_1"),l=o(512,128,1,"prediction_layer/conv_2"),h=o(128,256,3,"prediction_layer/conv_3"),d=o(256,128,1,"prediction_layer/conv_4"),g=o(128,256,3,"prediction_layer/conv_5"),x=o(256,64,1,"prediction_layer/conv_6"),w=o(64,128,3,"prediction_layer/conv_7"),L=r(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),S=r(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),I=r(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),R=r(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),A=r(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),E=r(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),F=r(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),M=r(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),j=r(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),$=r(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),U=r(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),Q=r(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),ne={box_encoding_predictor:L,class_predictor:S},he={box_encoding_predictor:I,class_predictor:R},xe={box_encoding_predictor:A,class_predictor:E},Ue={box_encoding_predictor:F,class_predictor:M},vt={box_encoding_predictor:j,class_predictor:$},sn={box_encoding_predictor:U,class_predictor:Q};return{conv_0:c,conv_1:p,conv_2:l,conv_3:h,conv_4:d,conv_5:g,conv_6:x,conv_7:w,box_predictor_0:ne,box_predictor_1:he,box_predictor_2:xe,box_predictor_3:Ue,box_predictor_4:vt,box_predictor_5:sn}}return{extractMobilenetV1Params:a,extractPredictionLayerParams:s}}function ab(e){const t=[],{extractWeights:n,getRemainingWeights:r}=Ve(e),{extractMobilenetV1Params:o,extractPredictionLayerParams:i}=TT(n,t),a=o(),s=i(),c=Sr(n(5118*4),[1,5118,4]),p={extra_dim:c};if(t.push({paramPath:"output_layer/extra_dim"}),r().length!==0)throw new Error(`weights remaing after extract: ${r().length}`);return{params:{mobilenetv1:a,prediction_layer:s,output_layer:p},paramMappings:t}}function AT(e,t){const n=it(e,t);function r(p,l,h){const d=n(`${p}/Conv2d_${l}_pointwise/weights`,4,`${h}/filters`),g=n(`${p}/Conv2d_${l}_pointwise/convolution_bn_offset`,1,`${h}/batch_norm_offset`);return{filters:d,batch_norm_offset:g}}function o(p){const l=`mobilenetv1/conv_${p}`,h=`MobilenetV1/Conv2d_${p}_depthwise`,d=`${l}/depthwise_conv`,g=`${l}/pointwise_conv`,x=n(`${h}/depthwise_weights`,4,`${d}/filters`),w=n(`${h}/BatchNorm/gamma`,1,`${d}/batch_norm_scale`),L=n(`${h}/BatchNorm/beta`,1,`${d}/batch_norm_offset`),S=n(`${h}/BatchNorm/moving_mean`,1,`${d}/batch_norm_mean`),I=n(`${h}/BatchNorm/moving_variance`,1,`${d}/batch_norm_variance`);return{depthwise_conv:{filters:x,batch_norm_scale:w,batch_norm_offset:L,batch_norm_mean:S,batch_norm_variance:I},pointwise_conv:r("MobilenetV1",p,g)}}function i(){return{conv_0:r("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:o(1),conv_2:o(2),conv_3:o(3),conv_4:o(4),conv_5:o(5),conv_6:o(6),conv_7:o(7),conv_8:o(8),conv_9:o(9),conv_10:o(10),conv_11:o(11),conv_12:o(12),conv_13:o(13)}}function a(p,l){const h=n(`${p}/weights`,4,`${l}/filters`),d=n(`${p}/biases`,1,`${l}/bias`);return{filters:h,bias:d}}function s(p){const l=a(`Prediction/BoxPredictor_${p}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${p}/box_encoding_predictor`),h=a(`Prediction/BoxPredictor_${p}/ClassPredictor`,`prediction_layer/box_predictor_${p}/class_predictor`);return{box_encoding_predictor:l,class_predictor:h}}function c(){return{conv_0:r("Prediction",0,"prediction_layer/conv_0"),conv_1:r("Prediction",1,"prediction_layer/conv_1"),conv_2:r("Prediction",2,"prediction_layer/conv_2"),conv_3:r("Prediction",3,"prediction_layer/conv_3"),conv_4:r("Prediction",4,"prediction_layer/conv_4"),conv_5:r("Prediction",5,"prediction_layer/conv_5"),conv_6:r("Prediction",6,"prediction_layer/conv_6"),conv_7:r("Prediction",7,"prediction_layer/conv_7"),box_predictor_0:s(0),box_predictor_1:s(1),box_predictor_2:s(2),box_predictor_3:s(3),box_predictor_4:s(4),box_predictor_5:s(5)}}return{extractMobilenetV1Params:i,extractPredictionLayerParams:c}}function cb(e){const t=[],{extractMobilenetV1Params:n,extractPredictionLayerParams:r}=AT(e,t),o=e["Output/extra_dim"];if(t.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!nn(o))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${o}`);const i={mobilenetv1:n(),prediction_layer:r(),output_layer:{extra_dim:o}};return Ye(e,t),{params:i,paramMappings:t}}function Lt(e,t,n){return O(()=>{let r=ve(e,t.filters,n,"same");return r=N(r,t.batch_norm_offset),Rr(r,0,6)})}const NT=.0010000000474974513;function RT(e,t,n){return O(()=>{let r=wn(e,t.filters,n,"same");return r=jt(r,t.batch_norm_mean,t.batch_norm_variance,t.batch_norm_offset,t.batch_norm_scale,NT),Rr(r,0,6)})}function _T(e){return[2,4,6,12].some(t=>t===e)?[2,2]:[1,1]}function pb(e,t){return O(()=>{let n,r=Lt(e,t.conv_0,[2,2]);const o=[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];if(o.forEach((i,a)=>{const s=a+1,c=_T(s);r=RT(r,i.depthwise_conv,c),r=Lt(r,i.pointwise_conv,[1,1]),s===11&&(n=r)}),n===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:r,conv11:n}})}function lb(e,t,n,r,o){const i=e.shape[0],a=Math.min(n,i),s=t.map((l,h)=>({score:l,boxIndex:h})).filter(l=>l.score>o).sort((l,h)=>h.score-l.score),c=l=>l<=r?1:0,p=[];return s.forEach(l=>{if(p.length>=a)return;const h=l.score;for(let d=p.length-1;d>=0;--d){const g=CT(e,l.boxIndex,p[d]);if(g===0)continue;if(l.score*=c(g),l.score<=o)break}h===l.score&&p.push(l.boxIndex)}),p}function CT(e,t,n){const r=e.arraySync(),o=Math.min(r[t][0],r[t][2]),i=Math.min(r[t][1],r[t][3]),a=Math.max(r[t][0],r[t][2]),s=Math.max(r[t][1],r[t][3]),c=Math.min(r[n][0],r[n][2]),p=Math.min(r[n][1],r[n][3]),l=Math.max(r[n][0],r[n][2]),h=Math.max(r[n][1],r[n][3]),d=(a-o)*(s-i),g=(l-c)*(h-p);if(d<=0||g<=0)return 0;const x=Math.max(o,c),w=Math.max(i,p),L=Math.min(a,l),S=Math.min(s,h),I=Math.max(L-x,0)*Math.max(S-w,0);return I/(d+g-I)}function ET(e){const t=Ae(K(e,[1,0])),n=[k(t[2],t[0]),k(t[3],t[1])],r=[N(t[0],D(n[0],C(2))),N(t[1],D(n[1],C(2)))];return{sizes:n,centers:r}}function OT(e,t){const{sizes:n,centers:r}=ET(e),o=Ae(K(t,[1,0])),i=D(v(Te(D(o[2],C(5))),n[0]),C(2)),a=N(v(D(o[0],C(10)),n[0]),r[0]),s=D(v(Te(D(o[3],C(5))),n[1]),C(2)),c=N(v(D(o[1],C(10)),n[1]),r[1]);return K(Fe([k(a,i),k(c,s),N(a,i),N(c,s)]),[1,0])}function hb(e,t,n){return O(()=>{const r=e.shape[0];let o=OT(y(Gt(n.extra_dim,[r,1,1]),[-1,4]),y(e,[-1,4]));o=y(o,[r,o.shape[0]/r,4]);const i=ft(P(t,[0,0,1],[-1,-1,-1]));let a=P(i,[0,0,0],[-1,-1,1]);a=y(a,[r,a.shape[1]]);const s=Ae(o),c=Ae(a);return{boxes:s,scores:c}})}function Qn(e,t){return O(()=>{const n=e.shape[0],r=y(Zn(e,t.box_encoding_predictor),[n,-1,1,4]),o=y(Zn(e,t.class_predictor),[n,-1,3]);return{boxPredictionEncoding:r,classPrediction:o}})}function ub(e,t,n){return O(()=>{const r=Lt(e,n.conv_0,[1,1]),o=Lt(r,n.conv_1,[2,2]),i=Lt(o,n.conv_2,[1,1]),a=Lt(i,n.conv_3,[2,2]),s=Lt(a,n.conv_4,[1,1]),c=Lt(s,n.conv_5,[2,2]),p=Lt(c,n.conv_6,[1,1]),l=Lt(p,n.conv_7,[2,2]),h=Qn(t,n.box_predictor_0),d=Qn(e,n.box_predictor_1),g=Qn(o,n.box_predictor_2),x=Qn(a,n.box_predictor_3),w=Qn(c,n.box_predictor_4),L=Qn(l,n.box_predictor_5),S=Z([h.boxPredictionEncoding,d.boxPredictionEncoding,g.boxPredictionEncoding,x.boxPredictionEncoding,w.boxPredictionEncoding,L.boxPredictionEncoding],1),I=Z([h.classPrediction,d.classPrediction,g.classPrediction,x.classPrediction,w.classPrediction,L.classPrediction],1);return{boxPredictions:S,classPredictions:I}})}class lt{constructor({minConfidence:e,maxResults:t}={}){if(this._name="SsdMobilenetv1Options",this._minConfidence=e||.5,this._maxResults=t||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}}class In extends We{constructor(){super("SsdMobilenetv1")}forwardInput(e){const{params:t}=this;if(!t)throw new Error("SsdMobilenetv1 - load model before inference");return O(()=>{const n=_(e.toBatchTensor(512,!1),"float32"),r=k(v(n,C(.007843137718737125)),C(1)),o=pb(r,t.mobilenetv1),{boxPredictions:i,classPredictions:a}=ub(o.out,o.conv11,t.prediction_layer);return hb(i,a,t.output_layer)})}async forward(e){return this.forwardInput(await ue(e))}async locateFaces(e,t={}){const{maxResults:n,minConfidence:r}=new lt(t),o=await ue(e),{boxes:i,scores:a}=this.forwardInput(o),s=i[0],c=a[0];for(let I=1;I{const[R,A]=[Math.max(0,L[I][0]),Math.min(1,L[I][2])].map(M=>M*w),[E,F]=[Math.max(0,L[I][1]),Math.min(1,L[I][3])].map(M=>M*x);return new me(p[I],new pr(E,R,F-E,A-R),{height:o.getInputHeight(0),width:o.getInputWidth(0)})});return s.dispose(),c.dispose(),S}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(e){return cb(e)}extractParams(e){return ab(e)}}function yc(e){const t=new In;return t.extractWeights(e),t}function mh(e){return yc(e)}class fh extends In{}const db=.4,mb=[new J(.738768,.874946),new J(2.42204,2.65704),new J(4.30971,7.04493),new J(10.246,4.59428),new J(12.6868,11.8741)],fb=[new J(1.603231,2.094468),new J(6.041143,7.080126),new J(2.882459,3.518061),new J(4.266906,5.178857),new J(9.041765,10.66308)],gb=[117.001,114.697,97.404],bb="tiny_yolov2_model",wb="tiny_yolov2_separable_conv_model";const hc=e=>typeof e=="number";function Es(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(!hc(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=>hc(t.x)&&hc(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(hc)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(e.meanRgb)}`)}function Kr(e){return O(()=>{const t=v(e,C(.10000000149011612));return N(ie(k(e,t)),t)})}function rn(e,t){return O(()=>{let n=He(e,[[0,0],[1,1],[1,1],[0,0]]);return n=ve(n,t.conv.filters,[1,1],"valid"),n=k(n,t.bn.sub),n=v(n,t.bn.truediv),n=N(n,t.conv.bias),Kr(n)})}function on(e,t){return O(()=>{let n=He(e,[[0,0],[1,1],[1,1],[0,0]]);return n=Wr(n,t.depthwise_filter,t.pointwise_filter,[1,1],"valid"),n=N(n,t.bias),Kr(n)})}function kT(e,t){const n=Hr(e,t);function r(a,s){const c=ce(e(a)),p=ce(e(a));return t.push({paramPath:`${s}/sub`},{paramPath:`${s}/truediv`}),{sub:c,truediv:p}}function o(a,s,c){const p=n(a,s,3,`${c}/conv`),l=r(s,`${c}/bn`);return{conv:p,bn:l}}const i=Yr(e,t);return{extractConvParams:n,extractConvWithBatchNormParams:o,extractSeparableConvParams:i}}function xb(e,t,n,r){const{extractWeights:o,getRemainingWeights:i}=Ve(e),a=[],{extractConvParams:s,extractConvWithBatchNormParams:c,extractSeparableConvParams:p}=kT(o,a);let l;if(t.withSeparableConvs){const[h,d,g,x,w,L,S,I,R]=r,A=t.isFirstLayerConv2d?s(h,d,3,"conv0"):p(h,d,"conv0"),E=p(d,g,"conv1"),F=p(g,x,"conv2"),M=p(x,w,"conv3"),j=p(w,L,"conv4"),$=p(L,S,"conv5"),U=I?p(S,I,"conv6"):void 0,Q=R?p(I,R,"conv7"):void 0,ne=s(R||I||S,5*n,1,"conv8");l={conv0:A,conv1:E,conv2:F,conv3:M,conv4:j,conv5:$,conv6:U,conv7:Q,conv8:ne}}else{const[h,d,g,x,w,L,S,I,R]=r,A=c(h,d,"conv0"),E=c(d,g,"conv1"),F=c(g,x,"conv2"),M=c(x,w,"conv3"),j=c(w,L,"conv4"),$=c(L,S,"conv5"),U=c(S,I,"conv6"),Q=c(I,R,"conv7"),ne=s(R,5*n,1,"conv8");l={conv0:A,conv1:E,conv2:F,conv3:M,conv4:j,conv5:$,conv6:U,conv7:Q,conv8:ne}}if(i().length!==0)throw new Error(`weights remaing after extract: ${i().length}`);return{params:l,paramMappings:a}}function DT(e,t){const n=it(e,t);function r(s){const c=n(`${s}/sub`,1),p=n(`${s}/truediv`,1);return{sub:c,truediv:p}}function o(s){const c=n(`${s}/filters`,4),p=n(`${s}/bias`,1);return{filters:c,bias:p}}function i(s){const c=o(`${s}/conv`),p=r(`${s}/bn`);return{conv:c,bn:p}}const a=Vr(n);return{extractConvParams:o,extractConvWithBatchNormParams:i,extractSeparableConvParams:a}}function yb(e,t){const n=[],{extractConvParams:r,extractConvWithBatchNormParams:o,extractSeparableConvParams:i}=DT(e,n);let a;if(t.withSeparableConvs){const s=t.filterSizes&&t.filterSizes.length||9;a={conv0:t.isFirstLayerConv2d?r("conv0"):i("conv0"),conv1:i("conv1"),conv2:i("conv2"),conv3:i("conv3"),conv4:i("conv4"),conv5:i("conv5"),conv6:s>7?i("conv6"):void 0,conv7:s>8?i("conv7"):void 0,conv8:r("conv8")}}else a={conv0:o("conv0"),conv1:o("conv1"),conv2:o("conv2"),conv3:o("conv3"),conv4:o("conv4"),conv5:o("conv5"),conv6:o("conv6"),conv7:o("conv7"),conv8:r("conv8")};return Ye(e,n),{params:a,paramMappings:n}}var Os;(function(e){e[e.XS=224]="XS",e[e.SM=320]="SM",e[e.MD=416]="MD",e[e.LG=608]="LG"})(Os||(Os={}));class kt{constructor({inputSize:e,scoreThreshold:t}={}){if(this._name="TinyYolov2Options",this._inputSize=e||416,this._scoreThreshold=t||.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}}class Jr extends We{constructor(e){super("TinyYolov2");Es(e),this._config=e}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(e,t){let n=rn(e,t.conv0);return n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv1),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv2),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv3),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv4),n=Re(n,[2,2],[2,2],"same"),n=rn(n,t.conv5),n=Re(n,[2,2],[1,1],"same"),n=rn(n,t.conv6),n=rn(n,t.conv7),Zn(n,t.conv8,"valid",!1)}runMobilenet(e,t){let n=this.config.isFirstLayerConv2d?Kr(Zn(e,t.conv0,"valid",!1)):on(e,t.conv0);return n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv1),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv2),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv3),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv4),n=Re(n,[2,2],[2,2],"same"),n=on(n,t.conv5),n=Re(n,[2,2],[1,1],"same"),n=t.conv6?on(n,t.conv6):n,n=t.conv7?on(n,t.conv7):n,Zn(n,t.conv8,"valid",!1)}forwardInput(e,t){const{params:n}=this;if(!n)throw new Error("TinyYolov2 - load model before inference");return O(()=>{let r=_(e.toBatchTensor(t,!1),"float32");return r=this.config.meanRgb?ht(r,this.config.meanRgb):r,r=r.div(C(256)),this.config.withSeparableConvs?this.runMobilenet(r,n):this.runTinyYolov2(r,n)})}async forward(e,t){return await this.forwardInput(await ue(e),t)}async detect(e,t={}){const{inputSize:n,scoreThreshold:r}=new kt(t),o=await ue(e),i=await this.forwardInput(o,n),a=O(()=>Ae(i)[0].expandDims()),s={width:o.getInputWidth(0),height:o.getInputHeight(0)},c=await this.extractBoxes(a,o.getReshapedInputDimensions(0),r);i.dispose(),a.dispose();const p=c.map(w=>w.box),l=c.map(w=>w.score),h=c.map(w=>w.classScore),d=c.map(w=>this.config.classes[w.label]),g=Fs(p.map(w=>w.rescale(n)),l,this.config.iouThreshold,!0),x=g.map(w=>new _n(l[w],h[w],d[w],p[w],s));return x}getDefaultModelName(){return""}extractParamsFromWeigthMap(e){return yb(e,this.config)}extractParams(e){const t=this.config.filterSizes||Jr.DEFAULT_FILTER_SIZES,n=t?t.length:void 0;if(n!==7&&n!==8&&n!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${n} filterSizes in config`);return xb(e,this.config,this.boxEncodingSize,t)}async extractBoxes(e,t,n){const{width:r,height:o}=t,i=Math.max(r,o),a=i/r,s=i/o,c=e.shape[1],p=this.config.anchors.length,[l,h,d]=O(()=>{const L=e.reshape([c,c,p,this.boxEncodingSize]),S=L.slice([0,0,0,0],[c,c,p,4]),I=L.slice([0,0,0,4],[c,c,p,1]),R=this.withClassScores?Ln(L.slice([0,0,0,5],[c,c,p,this.config.classes.length]),3):C(0);return[S,I,R]}),g=[],x=await h.array(),w=await l.array();for(let L=0;Ln){const A=(S+or(w[L][S][I][0]))/c*a,E=(L+or(w[L][S][I][1]))/c*s,F=Math.exp(w[L][S][I][2])*this.config.anchors[I].x/c*a,M=Math.exp(w[L][S][I][3])*this.config.anchors[I].y/c*s,j=A-F/2,$=E-M/2,U={row:L,col:S,anchor:I},{classScore:Q,label:ne}=this.withClassScores?await this.extractPredictedClass(d,U):{classScore:1,label:0};g.push(As({box:new hr(j,$,j+F,$+M),score:R,classScore:R*Q,label:ne},U))}}return l.dispose(),h.dispose(),d.dispose(),g}async extractPredictedClass(e,t){const{row:n,col:r,anchor:o}=t,i=await e.array();return Array(this.config.classes.length).fill(0).map((a,s)=>i[n][r][o][s]).map((a,s)=>({classScore:a,label:s})).reduce((a,s)=>a.classScore>s.classScore?a:s)}}Jr.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class nr extends Jr{constructor(e=!0){const t=Object.assign({},{withSeparableConvs:e,iouThreshold:db,classes:["face"]},e?{anchors:fb,meanRgb:gb}:{anchors:mb,withClassScores:!0});super(t)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(e,t){const n=await this.detect(e,t);return n.map(r=>new me(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?wb:bb}extractParamsFromWeigthMap(e){return super.extractParamsFromWeigthMap(e)}}function uh(e,t=!0){const n=new nr(t);return n.extractWeights(e),n}class ks extends kt{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class ut{async then(e){return e(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}async function er(e,t,n,r,o=({alignedRect:i})=>i){const i=e.map(c=>pn(c)?o(c):c.detection),a=r||(t instanceof te?await Nn(t,i):await An(t,i)),s=await n(a);return a.forEach(c=>c instanceof te&&c.dispose()),s}async function Xr(e,t,n,r,o){return er([e],t,async i=>n(i[0]),r,o)}const Lb=.4,vb=[new J(1.603231,2.094468),new J(6.041143,7.080126),new J(2.882459,3.518061),new J(4.266906,5.178857),new J(9.041765,10.66308)],Sb=[117.001,114.697,97.404];class rr extends Jr{constructor(){const e={withSeparableConvs:!0,iouThreshold:Lb,classes:["face"],anchors:vb,meanRgb:Sb,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(e)}get anchors(){return this.config.anchors}async locateFaces(e,t){const n=await this.detect(e,t);return n.map(r=>new me(r.score,r.relativeBox,{width:r.imageWidth,height:r.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(e){return super.extractParamsFromWeigthMap(e)}}const oe={ssdMobilenetv1:new In,tinyFaceDetector:new rr,tinyYolov2:new nr,faceLandmark68Net:new sr,faceLandmark68TinyNet:new zs,faceRecognitionNet:new ir,faceExpressionNet:new Ys,ageGenderNet:new ta},vc=(e,t)=>oe.ssdMobilenetv1.locateFaces(e,t),wh=(e,t)=>oe.tinyFaceDetector.locateFaces(e,t),xh=(e,t)=>oe.tinyYolov2.locateFaces(e,t),Sc=e=>oe.faceLandmark68Net.detectLandmarks(e),yh=e=>oe.faceLandmark68TinyNet.detectLandmarks(e),Lh=e=>oe.faceRecognitionNet.computeFaceDescriptor(e),vh=e=>oe.faceExpressionNet.predictExpressions(e),Sh=e=>oe.ageGenderNet.predictAgeAndGender(e),Ic=e=>oe.ssdMobilenetv1.load(e),Ih=e=>oe.tinyFaceDetector.load(e),Th=e=>oe.tinyYolov2.load(e),Ah=e=>oe.faceLandmark68Net.load(e),Nh=e=>oe.faceLandmark68TinyNet.load(e),Rh=e=>oe.faceRecognitionNet.load(e),_h=e=>oe.faceExpressionNet.load(e),Ch=e=>oe.ageGenderNet.load(e),Eh=Ic,Oh=vc,kh=Sc;class Ib extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.extractedFaces=n}}class Ss extends Ib{async run(){const e=await this.parentTask,t=await er(e,this.input,async n=>await Promise.all(n.map(r=>oe.faceExpressionNet.predictExpressions(r))),this.extractedFaces);return e.map((n,r)=>io(n,t[r]))}withAgeAndGender(){return new Ls(this,this.input)}}class Is extends Ib{async run(){const e=await this.parentTask;if(!e)return;const t=await Xr(e,this.input,n=>oe.faceExpressionNet.predictExpressions(n),this.extractedFaces);return io(e,t)}withAgeAndGender(){return new vs(this,this.input)}}class eo extends Ss{withAgeAndGender(){return new Zr(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class to extends Is{withAgeAndGender(){return new Qr(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Tb extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.extractedFaces=n}}class Ls extends Tb{async run(){const e=await this.parentTask,t=await er(e,this.input,async n=>await Promise.all(n.map(r=>oe.ageGenderNet.predictAgeAndGender(r))),this.extractedFaces);return e.map((n,r)=>{const{age:o,gender:i,genderProbability:a}=t[r];return ao(oo(n,i,a),o)})}withFaceExpressions(){return new Ss(this,this.input)}}class vs extends Tb{async run(){const e=await this.parentTask;if(!e)return;const{age:t,gender:n,genderProbability:r}=await Xr(e,this.input,o=>oe.ageGenderNet.predictAgeAndGender(o),this.extractedFaces);return ao(oo(e,n,r),t)}withFaceExpressions(){return new Is(this,this.input)}}class Zr extends Ls{withFaceExpressions(){return new eo(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class Qr extends vs{withFaceExpressions(){return new to(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Ps extends ut{constructor(e,t){super();this.parentTask=e,this.input=t}}class an extends Ps{async run(){const e=await this.parentTask,t=await er(e,this.input,n=>Promise.all(n.map(r=>oe.faceRecognitionNet.computeFaceDescriptor(r))),null,n=>n.landmarks.align(null,{useDlibAlignment:!0}));return t.map((n,r)=>so(e[r],n))}withFaceExpressions(){return new eo(this,this.input)}withAgeAndGender(){return new Zr(this,this.input)}}class cn extends Ps{async run(){const e=await this.parentTask;if(!e)return;const t=await Xr(e,this.input,n=>oe.faceRecognitionNet.computeFaceDescriptor(n),null,n=>n.landmarks.align(null,{useDlibAlignment:!0}));return so(e,t)}withFaceExpressions(){return new to(this,this.input)}withAgeAndGender(){return new Qr(this,this.input)}}class $s extends ut{constructor(e,t,n){super();this.parentTask=e,this.input=t,this.useTinyLandmarkNet=n}get landmarkNet(){return this.useTinyLandmarkNet?oe.faceLandmark68TinyNet:oe.faceLandmark68Net}}class js extends $s{async run(){const e=await this.parentTask,t=e.map(o=>o.detection),n=this.input instanceof te?await Nn(this.input,t):await An(this.input,t),r=await Promise.all(n.map(o=>this.landmarkNet.detectLandmarks(o)));return n.forEach(o=>o instanceof te&&o.dispose()),e.map((o,i)=>Tn(o,r[i]))}withFaceExpressions(){return new eo(this,this.input)}withAgeAndGender(){return new Zr(this,this.input)}withFaceDescriptors(){return new an(this,this.input)}}class Gs extends $s{async run(){const e=await this.parentTask;if(!e)return;const{detection:t}=e,n=this.input instanceof te?await Nn(this.input,[t]):await An(this.input,[t]),r=await this.landmarkNet.detectLandmarks(n[0]);return n.forEach(o=>o instanceof te&&o.dispose()),Tn(e,r)}withFaceExpressions(){return new to(this,this.input)}withAgeAndGender(){return new Qr(this,this.input)}withFaceDescriptor(){return new cn(this,this.input)}}class Ws extends ut{constructor(e,t=new lt){super();this.input=e,this.options=t}}class ro extends Ws{async run(){const{input:e,options:t}=this,n=t instanceof ks?r=>oe.tinyFaceDetector.locateFaces(r,t):t instanceof lt?r=>oe.ssdMobilenetv1.locateFaces(r,t):t instanceof kt?r=>oe.tinyYolov2.locateFaces(r,t):null;if(!n)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return n(e)}runAndExtendWithFaceDetections(){return new Promise(async e=>{const t=await this.run();return e(t.map(n=>ln({},n)))})}withFaceLandmarks(e=!1){return new js(this.runAndExtendWithFaceDetections(),this.input,e)}withFaceExpressions(){return new Ss(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Ls(this.runAndExtendWithFaceDetections(),this.input)}}class Bs extends Ws{async run(){const e=await new ro(this.input,this.options);let t=e[0];return e.forEach(n=>{n.score>t.score&&(t=n)}),t}runAndExtendWithFaceDetection(){return new Promise(async e=>{const t=await this.run();return e(t?ln({},t):void 0)})}withFaceLandmarks(e=!1){return new Gs(this.runAndExtendWithFaceDetection(),this.input,e)}withFaceExpressions(){return new Is(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new vs(this.runAndExtendWithFaceDetection(),this.input)}}function Dh(e,t=new lt){return new Bs(e,t)}function no(e,t=new lt){return new ro(e,t)}async function Tc(e,t){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await no(e,new lt(t?{minConfidence:t}:{})).withFaceLandmarks().withFaceDescriptors()}async function Fh(e,t={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await no(e,new kt(t)).withFaceLandmarks().withFaceDescriptors()}const Mh=Tc;function Vs(e,t){if(e.length!==t.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const n=Array.from(e),r=Array.from(t);return Math.sqrt(n.map((o,i)=>o-r[i]).reduce((o,i)=>o+Math.pow(i,2),0))}class Ac{constructor(e,t=.6){this._distanceThreshold=t;const n=Array.isArray(e)?e:[e];if(!n.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let r=1;const o=()=>`person ${r++}`;this._labeledDescriptors=n.map(i=>{if(i instanceof fn)return i;if(i instanceof Float32Array)return new fn(o(),[i]);if(i.descriptor&&i.descriptor instanceof Float32Array)return new fn(o(),[i.descriptor]);throw new Error("FaceRecognizer.constructor - expected inputs to be of type LabeledFaceDescriptors | WithFaceDescriptor | Float32Array | Array | Float32Array>")})}get labeledDescriptors(){return this._labeledDescriptors}get distanceThreshold(){return this._distanceThreshold}computeMeanDistance(e,t){return t.map(n=>Vs(n,e)).reduce((n,r)=>n+r,0)/(t.length||1)}matchDescriptor(e){return this.labeledDescriptors.map(({descriptors:t,label:n})=>new lo(n,this.computeMeanDistance(e,t))).reduce((t,n)=>t.distancee.toJSON())}}static fromJSON(e){const t=e.labeledDescriptors.map(n=>fn.fromJSON(n));return new Ac(t,e.distanceThreshold)}}function dh(e){const t=new rr;return t.extractWeights(e),t}function Lc(e,t){const{width:n,height:r}=new Ke(t.width,t.height);if(n<=0||r<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:n,height:r})}`);if(Array.isArray(e))return e.map(o=>Lc(o,{width:n,height:r}));if(pn(e)){const o=e.detection.forSize(n,r),i=e.unshiftedLandmarks.forSize(o.box.width,o.box.height);return Tn(ln(e,o),i)}return It(e)?ln(e,e.detection.forSize(n,r)):e instanceof st||e instanceof me?e.forSize(n,r):e}var lh="0.5.2";return Hh();})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.node.js b/dist/face-api.node.js index 0e6e40c..4ba1e92 100644 --- a/dist/face-api.node.js +++ b/dist/face-api.node.js @@ -24057,7 +24057,7 @@ function resizeResults(results, dimensions) { } // build/package.json -var version2 = "0.5.1"; +var version2 = "0.5.2"; // build/src/index.js const node = typeof process !== "undefined" ? process.version : false; diff --git a/package-lock.json b/package-lock.json index 963ec48..e9f7170 100644 --- a/package-lock.json +++ b/package-lock.json @@ -18,9 +18,9 @@ } }, "@types/node": { - "version": "14.10.2", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.10.2.tgz", - "integrity": "sha512-IzMhbDYCpv26pC2wboJ4MMOa9GKtjplXfcAqrMeNJpUUwpM/2ATt2w1JPUXwS6spu856TvKZL2AOmeU2rAxskw==", + "version": "14.11.1", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.1.tgz", + "integrity": "sha512-oTQgnd0hblfLsJ6BvJzzSL+Inogp3lq9fGgqRkMB/ziKMgEUaFl801OncOzUmalfzt14N0oPHMK47ipl+wbTIw==", "dev": true }, "@types/offscreencanvas": { @@ -210,9 +210,9 @@ "dev": true }, "typescript": { - "version": "4.1.0-dev.20200916", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.0-dev.20200916.tgz", - "integrity": "sha512-ly2k/AZ3AyfIyLWhBSnW3x7aDufIS9uNRagFZin36jXb6DvZEZwtyx138u8iSvtKE1AV/VNyWLLBkZYojgBM1g==", + "version": "4.1.0-dev.20200918", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.1.0-dev.20200918.tgz", + "integrity": "sha512-cEcXJvz55OH3k3cmpMYoVfqdAQ2YvgeccUmccmleUnQ8VqR8T/7GI761Qky/vGZO/VhiU3Y8xJF3oLkAkNrG1g==", "dev": true }, "wrappy": { diff --git a/package.json b/package.json index 39810e1..fdfa77c 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "type": "module", "scripts": { "compile": "tsc", - "clean": "rimraf build dist", + "clean": "rimraf build/ dist/", "cjs": "esbuild --bundle --outfile=./dist/face-api.cjs.js --target=es2017 --platform=browser --format=cjs --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js", "node": "esbuild --bundle --outfile=./dist/face-api.node.js --target=es2017 --platform=node --format=esm --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js", "esm": "esbuild --bundle --outfile=./dist/face-api.esm.js --target=es2017 --platform=browser --format=esm --sourcemap --log-level=error --tsconfig=./tsconfig.json build/src/index.js",