From b8f0efb18b1b4b57505d00db8b05b926ac9d503f Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Tue, 3 Nov 2020 13:41:17 -0500 Subject: [PATCH] removed type from package.json and added nodejs example --- build/package.json | 9 +- dist/face-api.esm.js | 2 +- dist/face-api.esm.nobundle.js | 2 +- dist/face-api.js | 2 +- dist/face-api.node.js | 2 +- dist/face-api.node.nobundle.js | 2 +- example/node.js | 88 +++++ package-lock.json | 660 +++++++++++++++++++++++++++++++-- package.json | 7 +- 9 files changed, 735 insertions(+), 39 deletions(-) create mode 100644 example/node.js diff --git a/build/package.json b/build/package.json index 0defcf9..04b807c 100644 --- a/build/package.json +++ b/build/package.json @@ -1,6 +1,6 @@ { "name": "@vladmandic/face-api", - "version": "0.8.5", + "version": "0.8.6", "description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS", "main": "dist/face-api.node.js", "module": "dist/face-api.esm.js", @@ -9,7 +9,6 @@ "engines": { "node": ">=12.0.0" }, - "type": "module", "scripts": { "build-esm": "esbuild --bundle --format=esm --target=es2018 --platform=browser --minify --sourcemap --outfile=./dist/face-api.esm.js --log-level=error --tsconfig=./tsconfig.json --external:util --external:string_decoder --external:fs src/index.ts", "build-esm-nobundle": "esbuild --bundle --format=esm --target=es2018 --platform=browser --sourcemap --outfile=./dist/face-api.esm.nobundle.js --log-level=error --tsconfig=./tsconfig.json --external:@tensorflow --external:util --external:string_decoder --external:fs --global-name=faceapi src/index.ts", @@ -42,6 +41,8 @@ "homepage": "https://github.com/vladmandic/face-api#readme", "Dependencies": {}, "devDependencies": { + "@tensorflow/tfjs": "^2.7.0", + "@tensorflow/tfjs-node": "^2.7.0", "@types/node": "^14.11.8", "esbuild": "^0.6.34", "rimraf": "^3.0.2", @@ -49,7 +50,5 @@ "tslib": "^2.0.3", "typescript": "^4.1.0-dev.20201013" }, - "dependencies": { - "@tensorflow/tfjs": "^2.7.0" - } + "dependencies": {} } diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 5bba14a..1a82f1c 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -3959,7 +3959,7 @@ return a / b;`,d7=` `)}function jJ(r,l,u,p){const y=Zt(l),g=p[p.length-1],I=new Array(g).fill(0),S=l.length,T=u==="complex64"?Cu(r):r;if(S>1)for(let C=0;CjR){const P=vu*I;let ge=Array.from(r.slice(0,P)),ae=Array.from(r.slice((S-vu)*I,S*I));return u==="complex64"&&(ge=Cu(ge),ae=Cu(ae)),["["+ge.map((Le,ve)=>Nu(Le,y[ve],u)).join(", ")+", ..., "+ae.map((Le,ve)=>Nu(Le,y[S-vu+ve],u)).join(", ")+"]"]}const te=u==="complex64"?Cu(r):Array.from(r);return["["+te.map((P,ge)=>Nu(P,y[ge],u)).join(", ")+"]"]}const C=l.slice(1),D=p.slice(1),_=p[0]*I,A=[];if(S>jR){for(let te=0;te`Length of values '${p}' does not match the size inferred by the shape '${this.size}'.`)}if(l==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=u||a2(l,this.size),this.strides=Au(r)}set(r,...l){l.length===0&&(l=[0]),J(l.length===this.rank,()=>`The number of provided coordinates (${l.length}) must match the rank (${this.rank})`);const u=this.locToIndex(l);this.values[u]=r}get(...r){r.length===0&&(r=[0]);let l=0;for(const p of r){if(p<0||p>=this.shape[l]){const y=`Requested out of range element at ${r}. Buffer shape=${this.shape}`;throw new Error(y)}l++}let u=r[r.length-1];for(let p=0;poI(u))}catch(u){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return r}dataSync(){this.throwIfDisposed();const r=Bi().readSync(this.dataId);if(this.dtype==="string")try{return r.map(l=>oI(l))}catch(l){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return r}async bytes(){this.throwIfDisposed();const r=await Bi().read(this.dataId);return this.dtype==="string"?r:new Uint8Array(r.buffer)}dispose(){if(this.isDisposed)return;Bi().disposeTensor(this),this.isDisposedInternal=!0}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(r=!1){return Fc.print(this,r)}clone(){return this.throwIfDisposed(),Fc.clone(this)}toString(r=!1){const l=this.dataSync();return KR(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),Fc.cast(this,r)}variable(r=!0,l,u){return this.throwIfDisposed(),Bi().makeVariable(this,r,l,u)}}Object.defineProperty(En,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class eg extends En{constructor(r,l,u,p){super(r.shape,r.dtype,r.dataId,p);this.trainable=l,this.name=u}assign(r){if(r.dtype!==this.dtype)throw new Error(`dtype of the new value (${r.dtype}) and previous value (${this.dtype}) must match`);if(!Iu(r.shape,this.shape))throw new Error(`shape of the new value (${r.shape}) and previous value (${this.shape}) must match`);Bi().disposeTensor(this),this.dataId=r.dataId,Bi().incRef(this,null)}dispose(){Bi().disposeVariable(this),this.isDisposedInternal=!0}}Object.defineProperty(eg,Symbol.hasInstance,{value:r=>r instanceof En&&r.assign!=null&&r.assign instanceof Function});var tO;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(tO||(tO={}));var cI;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(cI||(cI={}));var lI;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(lI||(lI={}));var hI;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(hI||(hI={}));var uI;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(uI||(uI={}));const XJ={float32:hI,int32:cI,bool:lI,complex64:uI};function nO(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return XJ[r][l]}function Lt(r,l){if(r.dtype===l.dtype)return[r,l];const u=nO(r.dtype,l.dtype);return[r.cast(u),l.cast(u)]}function tg(r){const l=[],u=new Set;return sO(r,l,u),l}function sO(r,l,u){if(r==null)return;if(r instanceof En){l.push(r);return}if(!JJ(r))return;const p=r;for(const y in p){const g=p[y];u.has(g)||(u.add(g),sO(g,l,u))}}function JJ(r){return Array.isArray(r)||typeof r=="object"}class iO{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null}}dispose(){for(const r in this.registeredVariables)this.registeredVariables[r].dispose()}}class Ru{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new iO}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;const r=this.getSortedBackends();for(let l=0;l{l.setupFunc!=null&&l.setupFunc(this.backendInstance)})}disposeRegisteredKernels(r){const l=iI(r);l.forEach(u=>{u.disposeFunc!=null&&u.disposeFunc(this.registry[r])})}initializeBackend(r){const l=this.registryFactory[r];if(l==null)throw new Error(`Cannot initialize backend ${r}, no registration found.`);try{const u=l.factory();if(u&&!(u instanceof i2)&&typeof u.then=="function"){const p=++this.pendingBackendInitId,y=u.then(g=>p(pthis.registryFactory[l].priority-this.registryFactory[r].priority)}initializeBackendsAndReturnBest(){const r=this.getSortedBackends();for(let l=0;lthis.startScope(u),()=>this.endScope(p),()=>(p=l(),p instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),p))}scopedRun(r,l,u){r();try{const p=u();return l(),p}catch(p){throw l(),p}}nextTensorId(){return Ru.nextTensorId++}nextVariableId(){return Ru.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),u={x:r},p=g=>({x:()=>{const I="float32",S={x:g},T={dtype:I};return H.runKernelFunc(C=>C.cast(g,I),S,null,kc,T)}}),y=[];return this.addTapeNode(this.state.activeScope.name,u,[l],p,y,{}),l}runKernel(r,l,u,p,y){const g=null,I=null;return this.runKernelFunc(g,l,I,r,u,p,y)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,u){const p=this.backend.numDataIds();let y=0;u.forEach(S=>{y+=S.dtype==="complex64"?3:1});const g=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],I=p-l-y-g;if(I>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${I} data ids) after running '${r}'`)}runKernelFunc(r,l,u,p,y,g,I){let S,T=[];const C=this.isTapeOn();p==null&&(p=this.state.activeScope!=null?this.state.activeScope.name:"");const D=this.state.numBytes,_=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let A;const B=Jf(p,this.backendName);let ne;if(B!=null)A=()=>{const P=this.backend.numDataIds();ne=B.kernelFunc({inputs:l,attrs:y,backend:this.backend});const ge=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,P,ge);const ae=ge.map(({dataId:Le,shape:ve,dtype:Ve})=>this.makeTensorFromDataId(Le,ve,Ve));if(C){let Le=this.getTensorsForGradient(p,l,ae);if(Le==null){I==null&&(I=[]);const ve=ae.filter((Ve,at)=>I[at]);Le=(g||[]).slice().concat(ve)}T=this.saveTensorsForBackwardMode(Le)}return ae};else{const P=ge=>{if(!C)return;T=ge.map(ae=>this.keep(this.clone(ae)))};A=()=>{const ge=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,P));const ae=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,ge,ae),ae}}let te;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?S=A():(te=this.profiler.profileKernel(p,l,()=>A()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(te),S=te.outputs)}),C&&this.addTapeNode(p,l,S,u,T,y),this.state.profiling&&this.state.activeProfile.kernels.push({name:p,bytesAdded:this.state.numBytes-D,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-_,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(P=>l[P]!=null?l[P].shape:null),outputShapes:S.map(P=>P.shape),kernelTimeMs:te.timeMs,extraInfo:te.extraInfo}),Array.isArray(ne)?S:S[0]}saveTensorsForBackwardMode(r){const l=r.map(u=>this.keep(this.clone(u)));return l}getTensorsForGradient(r,l,u){const p=sI(r);if(p!=null){const y=p.inputsToSave||[],g=p.outputsToSave||[];let I;p.saveAllInputs?(J(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),I=Object.keys(l).map(T=>l[T])):I=y.map(T=>l[T]);const S=u.filter((T,C)=>g[C]);return I.concat(S)}return null}makeTensor(r,l,u,p){if(r==null)throw new Error("Values passed to engine.makeTensor() are null");u=u||"float32",p=p||this.backend;let y=r;u==="string"&&xu(r[0])&&(y=r.map(S=>GR(S)));const g=p.write(y,l,u),I=new En(l,u,g,this.nextTensorId());if(this.incRef(I,p),u==="string"){const S=this.state.tensorInfo.get(g),T=u2(y);this.state.numBytes+=T-S.bytes,S.bytes=T}return I}makeTensorFromDataId(r,l,u,p){u=u||"float32";const y=new En(l,u,r,this.nextTensorId());return this.incRef(y,p),y}makeVariable(r,l=!0,u,p){u=u||this.nextVariableId().toString(),p!=null&&p!==r.dtype&&(r=r.cast(p));const y=new eg(r,l,u,this.nextTensorId());if(this.state.registeredVariables[y.name]!=null)throw new Error(`Variable with name ${y.name} was already registered`);return this.state.registeredVariables[y.name]=y,this.incRef(y,this.backend),y}incRef(r,l){const u=this.state.tensorInfo.has(r.dataId)?this.state.tensorInfo.get(r.dataId).refCount:0;if(this.state.numTensors++,r.dtype==="string"&&this.state.numStringTensors++,u===0){this.state.numDataBuffers++;let p=0;r.dtype!=="complex64"&&r.dtype!=="string"&&(p=r.size*h2(r.dtype)),this.state.tensorInfo.set(r.dataId,{backend:l||this.backend,dtype:r.dtype,shape:r.shape,bytes:p,refCount:0}),this.state.numBytes+=p}this.state.tensorInfo.get(r.dataId).refCount++,r instanceof eg||this.track(r)}disposeTensor(r){if(!this.state.tensorInfo.has(r.dataId))return;this.state.numTensors--,r.dtype==="string"&&this.state.numStringTensors--;const l=this.state.tensorInfo.get(r.dataId),u=l.refCount;u<=1?(r.dtype!=="complex64"&&(this.state.numBytes-=l.bytes),this.state.numDataBuffers--,l.backend.disposeData(r.dataId),this.state.tensorInfo.delete(r.dataId)):this.state.tensorInfo.get(r.dataId).refCount--}disposeVariables(){for(const r in this.state.registeredVariables){const l=this.state.registeredVariables[r];this.disposeVariable(l)}}disposeVariable(r){this.disposeTensor(r),this.state.registeredVariables[r.name]!=null&&delete this.state.registeredVariables[r.name]}memory(){const r=this.backend.memory();return r.numTensors=this.state.numTensors,r.numDataBuffers=this.state.numDataBuffers,r.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(r.unreliable=!0,r.reasons==null&&(r.reasons=[]),r.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),r}async profile(r){this.state.profiling=!0;const l=this.state.numBytes,u=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await r(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(p=>p.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-l,this.state.activeProfile.newTensors=this.state.numTensors-u;for(const p of this.state.activeProfile.kernels)p.kernelTimeMs=await p.kernelTimeMs,p.extraInfo=await p.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(r,l,u,p,y,g){const I={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:u,saved:y},S=sI(r);S!=null&&(p=S.gradFunc),p!=null&&(I.gradient=T=>(T=T.map((C,D)=>{if(C==null){const _=u[D],A=na(_.size,_.dtype);return this.makeTensor(A,_.shape,_.dtype)}return C}),p(T.length>1?T:T[0],y,g))),this.state.activeTape.push(I)}keep(r){return r.kept=!0,r}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(r){const l={track:[],name:"unnamed scope",id:this.state.nextScopeId++};r&&(l.name=r),this.state.scopeStack.push(l),this.state.activeScope=l}endScope(r){const l=tg(r),u=new Set(l.map(y=>y.id));for(let y=0;y{!y.kept&&y.scopeId===p.id&&this.track(y)})}gradients(r,l,u,p=!1){if(J(l.length>0,()=>"gradients() received an empty list of xs."),u!=null&&u.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${u.dtype}'`);const y=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));J(y instanceof En,()=>"The result y returned by f() must be a tensor.");const g=HR(this.state.activeTape,l,y);if(!p&&g.length===0&&l.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{const I={};I[y.id]=u==null?ZJ(y.shape):u,qR(I,g,T=>this.tidy(T),QJ);const S=l.map(T=>I[T.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(T=>{for(const C of T.saved)C.dispose()}),this.state.activeTape=null),{value:y,grads:S}})}customGrad(r){return J(XS(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{J(l.every(y=>y instanceof En),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let u;const p={};return l.forEach((y,g)=>{p[g]=y}),this.runKernelFunc((y,g)=>(u=r(...l,g),J(u.value instanceof En,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),J(XS(u.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),u.value),p,(y,g)=>{const I=u.gradFunc(y,g),S=Array.isArray(I)?I:[I];J(S.length===l.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),J(S.every(C=>C instanceof En),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");const T={};return S.forEach((C,D)=>{T[D]=()=>C}),T})}}readSync(r){const l=this.state.tensorInfo.get(r);return l.backend.readSync(r)}read(r){const l=this.state.tensorInfo.get(r);return l.backend.read(r)}async time(r){const l=rI(),u=await this.backend.time(r);return u.wallMs=rI()-l,u}track(r){return this.state.activeScope!=null&&(r.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(r)),r}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new iO;for(const r in this.registry)this.disposeRegisteredKernels(r),this.registry[r].dispose(),delete this.registry[r];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}}Ru.nextTensorId=0;Ru.nextVariableId=0;function ZJ(r){const l=Jm(Zt(r),"float32");return H.makeTensor(l,r,"float32")}function dI(){const r=QS();if(r._tfengine==null){const l=new m2(r);r._tfengine=new Ru(l)}return g2(r._tfengine.ENV),ZR(()=>r._tfengine),r._tfengine}const H=dI();function QJ(r,l){const u={a:r,b:l};return H.runKernelFunc((p,y)=>{const g=p.add(r,l);return y([r,l]),g},u,null,Dc)}function rO(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const yr=Es();yr.registerFlag("DEBUG",()=>!1,r=>{r&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});yr.registerFlag("IS_BROWSER",()=>rO());yr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");yr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));yr.registerFlag("PROD",()=>!1);yr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>yr.getBool("DEBUG"));yr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);yr.registerFlag("IS_TEST",()=>!1);function br(r,l){let u=r;if(Os(r))return l==="string"?[]:[r.length];if(!Array.isArray(r))return[];const p=[];for(;Array.isArray(u)||Os(u)&&l!=="string";)p.push(u.length),u=u[0];return Array.isArray(r)&&Es().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&oO(r,p,[]),p}function oO(r,l,u){if(u=u||[],!Array.isArray(r)&&!Os(r)){J(l.length===0,()=>`Element arr[${u.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}J(l.length>0,()=>`Element arr[${u.join("][")}] should be a primitive, but is an array of ${r.length} elements`),J(r.length===l[0],()=>`Element arr[${u.join("][")}] should have ${l[0]} elements, but has ${r.length} elements`);const p=l.slice(1);for(let y=0;y=0&&(y=p),aO(p,y,l,u),r==null||!Os(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){const T=r==null?"null":r.constructor.name;throw new Error(`Argument '${l}' passed to '${u}' must be a Tensor or TensorLike, but got '${T}'`)}const g=br(r,y);!Os(r)&&!Array.isArray(r)&&(r=[r]);const I=!0,S=y!=="string"?Zf(r,y):ta(r,[],I);return H.makeTensor(S,g,y)}function ng(r,l,u,p="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${u} must be a \`Tensor[]\` or \`TensorLike[]\``);const y=r;return y.map((g,I)=>M(g,`${l}[${I}]`,u),p)}const cO="__op";function V(r){const l=Object.keys(r);if(l.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${l.length} keys.`);let u=l[0];const p=r[u];u.endsWith("_")&&(u=u.substring(0,u.length-1)),u=u+cO;const y=(...g)=>{H.startScope(u);try{const I=p(...g);return Qm(I)&&console.error("Cannot return a Promise inside of tidy."),H.endScope(I),I}catch(I){throw H.endScope(null),I}};return Object.defineProperty(y,"name",{value:u,configurable:!0}),y}function e9(r,l){const u=M(r,"real","complex"),p=M(l,"imag","complex");tn(u.shape,p.shape,`real and imag shapes, ${u.shape} and ${p.shape}, must match in call to tf.complex().`);const y=I=>I.complex(u,p),g={real:u,imag:p};return H.runKernelFunc(y,g,null,k2)}const Mi=V({complex_:e9});function Pi(r,l,u,p){if(p==null&&(p=Tu(r)),p==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Os(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(l!=null){Zm(l);const y=Zt(l),g=Zt(u);J(y===g,()=>`Based on the provided shape, [${l}], the tensor should have ${y} values but has ${g}`);for(let I=0;I`Error creating a new Tensor. Inferred shape (${u}) does not match the provided shape (${l}). `)}}return!Os(r)&&!Array.isArray(r)&&(r=[r]),l=l||u,r=p!=="string"?Zf(r,p):ta(r,[],!0),H.makeTensor(r,l,p)}function pI(r,l,u){const p=br(r,u);return Pi(r,l,p,u)}function Ou(r,l="float32",u){return l=l||"float32",Zm(r),new JR(r,l,u)}function t9(r,l){const u=M(r,"x","cast");if(!l2(l))throw new Error(`Failed to cast to unknown dtype ${l}`);if(l==="string"&&u.dtype!=="string"||l!=="string"&&u.dtype==="string")throw new Error("Only strings can be casted to strings");const p={x:u},y={dtype:l};return H.runKernelFunc(g=>g.cast(u,l),p,null,kc,y)}const Ie=V({cast_:t9});function n9(r){const l=M(r,"x","clone",null),u=()=>H.makeTensorFromDataId(l.dataId,l.shape,l.dtype),p={x:l};return H.runKernelFunc(u,p,null,yf)}const pi=V({clone_:n9});function mI(r,l=!1){console.log(r.toString(l))}dI();const s9={buffer:Ou,cast:Ie,clone:pi,print:mI};QR(s9);function i9(r,l){const u=M(r,"x","reshape",null),p={x:u},y={shape:l},g=(I,S)=>(l=r2(l,u.size),J(u.size===Zt(l),()=>"new shape and old shape must have the same number of elements."),S([u]),I.reshape(u,l));return H.runKernelFunc(g,p,null,Rf,y)}const re=V({reshape_:i9});function r9(r,l,u=!1,p=!1){let y=M(r,"a","matMul"),g=M(l,"b","matMul");[y,g]=Lt(y,g);const I=(C,D)=>{D([y,g]);const _=u?y.shape[y.rank-2]:y.shape[y.rank-1],A=p?g.shape[g.rank-1]:g.shape[g.rank-2],B=u?y.shape[y.rank-1]:y.shape[y.rank-2],ne=p?g.shape[g.rank-2]:g.shape[g.rank-1],te=y.shape.slice(0,-2),P=g.shape.slice(0,-2),ge=Zt(te),ae=Zt(P),Le=ge===ae||ge===1||ae===1;J(y.rank>=2&&g.rank>=2&&Le,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${te}) and (${P}).`),J(_===A,()=>`Error in matMul: inner shapes (${_}) and (${A}) of Tensors with shapes ${y.shape} and ${g.shape} and transposeA=${u} and transposeB=${p} must match.`);const ve=ge>ae?te:P,Ve=ve.concat([B,ne]),at=u?re(y,[ge,_,B]):re(y,[ge,B,_]),pt=p?re(g,[ae,ne,A]):re(g,[ae,A,ne]),$t=C.batchMatMul(at,pt,u,p);return re($t,Ve)},S={a:y,b:g},T={transposeA:u,transposeB:p};return H.runKernelFunc(I,S,null,tf,T)}const yn=V({matMul_:r9});function o9(r,l){const u=M(r,"x","transpose");if(l==null&&(l=u.shape.map((g,I)=>I).reverse()),J(u.rank===l.length,()=>`Error in transpose: rank of input ${u.rank} must match length of perm ${l}.`),l.forEach(g=>{J(g>=0&&g`All entries in 'perm' must be between 0 and ${u.rank-1} but got ${l}`)}),u.rank<=1)return u.clone();const p={x:u},y={perm:l};return H.runKernelFunc(g=>g.transpose(u,l),p,null,Hf,y)}const xn=V({transpose_:o9});function fI(r,l,u){if(Oc(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const p=br(r,u);if(p.length!==3&&p.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Pi(r,l,p,u)}const gI={};Pm(gI,{fromPixels:()=>l9,toPixels:()=>c9});let _c;function a9(r,l=3){if(l>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let u=!1,p=!1,y=!1,g=!1,I=!1;if(r.data instanceof Uint8Array)u=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)p=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)y=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)g=!0;else if(r.getContext!=null)I=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(y){const B=2;if(y&&r.readyState element.")}const S=Jf(tI,H.backendName);if(S!=null){const B={pixels:r},ne={numChannels:l};return H.runKernel(tI,B,ne)}const[T,C]=y?[r.videoWidth,r.videoHeight]:[r.width,r.height];let D;I?D=r.getContext("2d").getImageData(0,0,T,C).data:p||u?D=r.data:(g||y)&&(_c==null&&(_c=document.createElement("canvas").getContext("2d")),_c.canvas.width=T,_c.canvas.height=C,_c.drawImage(r,0,0,T,C),D=_c.getImageData(0,0,T,C).data);let _;if(l===4)_=new Int32Array(D);else{const B=T*C;_=new Int32Array(B*l);for(let ne=0;ne4||g===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${g}`);if(u.dtype!=="float32"&&u.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${u.dtype}. Please use float32 or int32 tensors.`);const I=await u.data(),S=u.dtype==="float32"?255:1,T=new Uint8ClampedArray(y*p*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${B}.`)}else if(u.dtype==="int32"&&(B<0||B>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${B}.`);g===1?(D[0]=B*S,D[1]=B*S,D[2]=B*S):D[A]=B*S}const _=C*4;T[_+0]=Math.round(D[0]),T[_+1]=Math.round(D[1]),T[_+2]=Math.round(D[2]),T[_+3]=Math.round(D[3])}if(l!=null){l.width=y,l.height=p;const C=l.getContext("2d"),D=new ImageData(T,y,p);C.putImageData(D,0,0)}return u!==r&&u.dispose(),T}const l9=V({fromPixels_:a9});function lO(r,l,u){const p=r.shape.length;J(p===l.length,()=>`Error in slice${p}D: Length of begin ${l} must match the rank of the array (${p}).`),J(p===u.length,()=>`Error in slice${p}D: Length of size ${u} must match the rank of the array (${p}).`);for(let y=0;y`Error in slice${p}D: begin[${y}] + size[${y}] (${l[y]+u[y]}) would overflow input.shape[${y}] (${r.shape[y]})`)}function sg(r,l,u){let p;const y=r.shape.length;typeof l=="number"?p=[l,...new Array(y-1).fill(0)]:l.length{J(I!==-1,()=>"slice() does not support negative begin indexing.")});let g;return u==null?g=new Array(y).fill(-1):typeof u=="number"?g=[u,...new Array(y-1).fill(-1)]:u.lengthI>=0?I:(J(I===-1,()=>`Negative size values should be exactly -1 but got ${I} for the slice() size at index ${S}.`),r.shape[S]-p[S])),[p,g]}function h9(r){Es().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}eO(h9);function hO(r,l){return H.tidy(r,l)}function uO(r){const l=tg(r);l.forEach(u=>u.dispose())}function u9(r,l){let u=M(r,"a","add"),p=M(l,"b","add");[u,p]=Lt(u,p);const y=(I,S)=>{const T=I.add(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Dc)}const vt=V({add_:u9});function d9(r,l){let u=M(r,"a","floorDiv"),p=M(l,"b","floorDiv");[u,p]=Lt(u,p);const y=(I,S)=>{const T=I.floorDiv(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,mf)}const yI=V({floorDiv_:d9});function p9(r,l){let u=M(r,"a","div"),p=M(l,"b","div");if([u,p]=Lt(u,p),u.dtype==="int32"&&p.dtype==="int32")return yI(u,p);const y=(S,T)=>{const C=S.realDivide(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,uf,I)}const Me=V({div_:p9});function m9(r,l){let u=M(r,"a","mul"),p=M(l,"b","mul");[u,p]=Lt(u,p);const y=(I,S)=>{const T=I.multiply(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Tf)}const le=V({mul_:m9});function f9(r){const l=M(r,"x","abs"),u={x:l};return H.runKernelFunc((p,y)=>(y([l]),l.dtype==="complex64"?p.complexAbs(l):p.abs(l)),u,null,ef)}const zn=V({abs_:f9});function g9(r,l){for(let u=0;ur[g]);return[u,y]}function rs(r,l){const u=l.map(p=>1);return y9(r,u,l)}function zi(r,l){if(g9(r,l))return null;const u=[];for(let p=0;pu.push(p)),u}function Wc(r){return r.map((l,u)=>[u,l]).sort((l,u)=>l[1]-u[1]).map(l=>l[0])}function io(r,l){const u=[];for(let p=l-r;p`The output # of rows (${S}) must be an integer. Change the stride and/or zero pad parameters`);const T=sa((I-l+2*p)/u+1,y);return J(nn(T),()=>`The output # of columns (${T}) must be an integer. Change the stride and/or zero pad parameters`),[S,T]}function S9(r,l,u,p,y,g){y==null&&(y=pO(r,l,p));const I=r[0],S=r[1],T=r[2],C=sa((I-l+2*y)/p+1,g);J(nn(C),()=>`The output # of depths (${C}) must be an integer. Change the stride and/or zero pad parameters`);const D=sa((S-l+2*y)/p+1,g);J(nn(D),()=>`The output # of rows (${D}) must be an integer. Change the stride and/or zero pad parameters`);const _=sa((T-l+2*y)/p+1,g);return J(nn(_),()=>`The output # of columns (${_}) must be an integer. Change the stride and/or zero pad parameters`),[C,D,_,u]}function pO(r,l,u,p=1){const y=$c(l,p);return Math.floor((r[0]*(u-1)-u+y)/2)}function ig(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function bI(r){return typeof r=="number"?[r,r,r]:r}function $c(r,l){return l<=1?r:r+(r-1)*(l-1)}function b9(r,l,u,p,y,g,I,S,T){let C,D,_;if(typeof r=="number"){const A=r===0?"VALID":"NUMBER";C={top:r,bottom:r,left:r,right:r,type:A};const B=L9([l,u],g,p,r,S);D=B[0],_=B[1]}else if(r==="same"){D=Math.ceil(l/p),_=Math.ceil(u/y);const A=Math.max(0,(D-1)*p+g-l),B=Math.max(0,(_-1)*y+I-u),ne=Math.floor(A/2),te=A-ne,P=Math.floor(B/2),ge=B-P;C={top:ne,bottom:te,left:P,right:ge,type:"SAME"}}else if(r==="valid")C={top:0,bottom:0,left:0,right:0,type:"VALID"},D=Math.ceil((l-g+1)/p),_=Math.ceil((u-I+1)/y);else if(typeof r=="object"){const A=T==="channelsLast"?r[1][0]:r[2][0],B=T==="channelsLast"?r[1][1]:r[2][1],ne=T==="channelsLast"?r[2][0]:r[3][0],te=T==="channelsLast"?r[2][1]:r[3][1],P=A===0&&B===0&&ne===0&&te===0?"VALID":"EXPLICIT";C={top:A,bottom:B,left:ne,right:te,type:P},D=sa((l-g+A+B)/p+1,S),_=sa((u-I+ne+te)/y+1,S)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:C,outHeight:D,outWidth:_}}function w9(r,l,u,p,y,g,I,S,T,C,D){let _,A,B,ne;if(typeof r=="number"){const te=r===0?"VALID":"NUMBER";_={top:r,bottom:r,left:r,right:r,front:r,back:r,type:te};const P=S9([l,u,p,1],S,1,y,r,D);A=P[0],B=P[1],ne=P[2]}else if(r==="same"){A=Math.ceil(l/y),B=Math.ceil(u/g),ne=Math.ceil(p/I);const te=(A-1)*y+S-l,P=(B-1)*g+T-u,ge=(ne-1)*I+C-p,ae=Math.floor(te/2),Le=te-ae,ve=Math.floor(P/2),Ve=P-ve,at=Math.floor(ge/2),pt=ge-at;_={top:ve,bottom:Ve,left:at,right:pt,front:ae,back:Le,type:"SAME"}}else if(r==="valid")_={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},A=Math.ceil((l-S+1)/y),B=Math.ceil((u-T+1)/g),ne=Math.ceil((p-C+1)/I);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:_,outDepth:A,outHeight:B,outWidth:ne}}function sa(r,l){if(!l)return r;switch(l){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${l}`)}}function ro(r){const[l,u,p]=ig(r);return l===1&&u===1&&p===1}function oo(r,l){return ro(r)||ro(l)}function Uc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function mO(r,l){const u=r[0].length;r.forEach((y,g)=>{J(y.length===u,()=>`Error in concat${u}D: rank of tensors[${g}] must be the same as the rank of the rest (${u})`)}),J(l>=0&&l`Error in concat${u}D: axis must be between 0 and ${u-1}.`);const p=r[0];r.forEach((y,g)=>{for(let I=0;I`Error in concat${u}D: Shape of tensors[${g}] (${y}) does not match the shape of the rest (${p}) along the non-concatenated axis ${g}.`)})}function fO(r,l){const u=r[0].slice();for(let p=1;p=1,()=>"Pass at least one tensor to concat");let u=ng(r,"tensors","concat");u[0].dtype==="complex64"&&u.forEach(I=>{if(I.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${I.dtype}. `)});const p=(I,S)=>{const T=ft(l,u[0].shape)[0],C=fO(u.map(A=>A.shape),T);if(Zt(C)===0)return pI([],C);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const D=u.map(A=>A.shape);mO(D,T);const _=I.concat(u,T);return S(u),_},y=u,g={axis:l};return H.runKernelFunc(p,y,null,rf,g)}const Tn=V({concat_:I9});function x9(r){const l=M(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sigmoid(l);return y([g]),g},u,null,Uf)}const wI=V({sigmoid_:x9});function T9(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const y=(S,T)=>{const[C,D]=sg(p,l,u);return lO(p,C,D),T([p]),S.slice(p,C,D)},g={x:p},I={begin:l,size:u};return H.runKernelFunc(y,g,null,_f,I)}const Tt=V({slice_:T9});function A9(r,l,u){const p=M(r,"x","batchToSpaceND"),y=l.reduce((T,C)=>T*C);J(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(p.shape[0]%y===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${y}`);const g=T=>T.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,nf,S)}const LI=V({batchToSpaceND_:A9});function v9(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(D=>!(D>0)||D%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const D=u.shape.slice();for(;D.length=0;D--)if(y[D]===l[D])g[D]=1;else if(u.shape[D]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=g.map((D,_)=>D>1?_:-1).filter(D=>D>=0);if(I.length===0)return pi(u);const S=D=>D.tile(u,g),T={x:u},C={shape:l,inputShape:y};return H.runKernelFunc(S,T,null,sf,C)}const ag=V({broadcastTo_:v9});function N9(r,l,u,p,y="NHWC",g=[1,1],I){const S=M(r,"x","conv2d"),T=M(l,"filter","conv2d");let C=S,D=!1;S.rank===3&&(D=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(C.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${C.rank}.`),J(T.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${T.rank}.`),I!=null&&J(nn(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const _=y==="NHWC"?C.shape[3]:C.shape[1];J(_===T.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${T.shape[2]}.`),J(oo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(P,ge)=>{const ae=Uc(y),Le=mi(C.shape,T.shape,u,g,p,I,!1,ae),ve=P.conv2d(C,T,Le);return ge([C,T]),ve},B={x:C,filter:T},ne={strides:u,pad:p,dataFormat:y,dilations:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,of,ne);return D?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const SI=V({conv2d_:N9});function C9(r,l,u,p,y,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,T=l,C=!1;l.rank===3&&(C=!0,T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(T.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${T.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const D=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?T.shape[3]:T.shape[1];J(D===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${D}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(y),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const A=(P,ge)=>{const ae=1,Le=Uc(g),ve=mi(S,u.shape,p,ae,y,I,!1,Le),Ve=P.conv2dDerInput(T,u,ve);return ge([T,u]),Ve},B={dy:T,filter:u},ne={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,inputShape:S},te=H.runKernelFunc(A,B,null,af,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const gO=V({conv2DBackpropInput_:C9});function R9(r,l,u,p,y){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const T=g[4],C=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(T===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${T}) must match input depth for filter ${u.shape[3]}.`),J(C===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[4]}.`);const D=ne=>{const te=1,P=Eu(g,u.shape,p,te,y);return ne.conv3dDerInput(I,u,P)},_={dy:I,filter:u},A={pad:y,strides:p,inputShape:g},B=H.runKernelFunc(D,_,null,$2,A);return S?re(B,[B.shape[1],B.shape[2],B.shape[3],B.shape[4]]):B}const yO=V({conv3DBackpropInput_:R9});function O9(r){const l=M(r,"x","cos"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cos(l);return y([l]),g},u,null,cf)}const Du=V({cos_:O9});function E9(r){const l=M(r,"x","cosh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cosh(l);return y([l]),g},u,null,lf)}const II=V({cosh_:E9});function D9(r,l=0,u=!1,p=!1){const y=M(r,"x","cumsum"),g=(T,C)=>{const D=zi([l],y.rank);let _=y;D!=null&&(_=xn(y,D));const A=io(1,y.rank)[0];let B=T.cumsum(_,A,u,p);if(C([y]),D!=null){const ne=Wc(D);B=xn(B,ne)}return B},I={x:y},S={axis:l,exclusive:u,reverse:p};return H.runKernelFunc(g,I,null,hf,S)}const xI=V({cumsum_:D9});function Ot(r,l){const u=[];for(let p=0;p1)&&u.unshift(g)}return u}function ot(r,l){const u=[],p=Math.max(r.length,l.length);for(let y=0;yI.equal(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,j2)}const TI=V({equal_:k9});function F9(r,l,u){const p=M(l,"a","where"),y=M(u,"b","where"),g=M(r,"condition","where","bool"),I=ot(p.shape,y.shape),S=ag(p,I),T=ag(y,I);g.rank===1&&J(g.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,T.shape,"Error in where: ");const C=(_,A)=>{const B=_.select(g,S,T);return A([g]),B},D={condition:g,t:S,e:T};return H.runKernelFunc(C,D,null,Ff)}const Vn=V({where_:F9});function _9(r){const l=M(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(p=>p.zerosLike(l),u,null,Kf)}const Ke=V({zerosLike_:_9});function W9(r){const l=M(r,"x","exp"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.exp(l);return y([g]),g},u,null,df)}const Gn=V({exp_:W9});function $9(r,l=0){const u=null,p=M(r,"x","expandDims",u);J(l<=p.rank,()=>"Axis must be <= rank of the tensor");const y=p.shape.slice();return l<0&&(J(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),y.splice(l,0,1),re(p,y)}const Ds=V({expandDims_:$9});function U9(r,l){const u=null,p=M(r,"x","tile",u);J(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const y=(T,C)=>{const D=T.tile(p,l);return C([p]),D},g=[p],I={x:p},S={reps:l};return H.runKernelFunc(y,I,null,Yf,S,g)}const ia=V({tile_:U9});function B9(r,l,u,p="float32"){l==null&&(l=r);const y=Ou([r,l],p),g=r<=l?r:l;for(let S=0;Sy.fill(r,l,u),{},null,J2,p)}function M9(r){const l=M(r,"x","floor"),u={x:l};return H.runKernelFunc(p=>p.floor(l),u,null,pf)}const NI=V({floor_:M9});function bO(r,l,u){const p=r.shape[u],y=[];let g=1,I=1;for(let S=0;S{const D=ft(u,p.shape)[0],_=bO(p,y,D),A=T.gather(p,re(y,[y.size]),D);return C([p,y]),re(A,_.outputShape)};return H.runKernelFunc(S,g,null,ff,I)}const CI=V({gather_:P9});function z9(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.greater(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,eR)}const fi=V({greater_:z9});function V9(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.greaterEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,gf)}const wr=V({greaterEqual_:V9});function G9(r){const l=M(r,"input","imag"),u=y=>y.imag(l),p={input:l};return H.runKernelFunc(u,p,null,nR)}const ku=V({imag_:G9});function Y9(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=Lt(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.maximum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Sf)}const RI=V({maximum_:Y9});function Fe(r,l){if((Os(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&Os(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return Pi(r,u,p,l)}function H9(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.less(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,oR)}const OI=V({less_:H9});function q9(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.lessEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,aR)}const Lr=V({lessEqual_:q9});function j9(r){const l=M(r,"x","log"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log(l);return y([l]),g},u,null,bf)}const ao=V({log_:j9});function K9(r){const l=M(r,"x","log1p"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log1p(l);return y([l]),g},u,null,wf)}const EI=V({log1p_:K9});function cg(r){return H.customGrad(r)}function X9(r){const l=M(r,"x","neg"),u={x:l};return H.runKernelFunc(p=>p.neg(l),u,null,Af)}const It=V({neg_:X9});function J9(r,l=null,u=!1){const p=M(r,"x","max"),y=(S,T)=>{const C=ft(l,p.shape);let D=C;const _=zi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=io(D.length,A.rank));const B=S.max(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=rs(ne.shape,ft(l,p.shape));ne=re(ne,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(y,g,null,Lf,I)}const ra=V({max_:J9});function Z9(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=Lt(u,p);const y=(I,S)=>{const T=I.subtract(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Gf)}const Be=V({sub_:Z9});function Q9(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Ie(p,"int32"));const y=(S,T)=>{T([p]);const C=ft(l,p.shape),D=zi(C,p.rank);let _=C,A=p;D!=null&&(A=xn(p,D),_=io(_.length,p.rank));let B=S.sum(A,_);if(u){const ne=rs(B.shape,C);B=re(B,ne)}return B},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,Mf,I)}const _e=V({sum_:Q9});function eZ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),y=ft(l,p.shape),g=ra(p,y,!0),I=Be(p,g),S=Gn(I),T=_e(S,y),C=ao(T),D=vt(re(g,C.shape),C);if(u){const _=rs(D.shape,y);return re(D,_)}return D}const DI=V({logSumExp_:eZ});function tZ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");ot(u.shape,p.shape);const y={a:u,b:p};return H.runKernelFunc(g=>g.logicalAnd(u,p),y,null,cR)}const oa=V({logicalAnd_:tZ});function nZ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(p=>p.logicalNot(l),u,null,lR)}const kI=V({logicalNot_:nZ});function ks(r,l="float32"){if(l==="complex64"){const p=ks(r,"float32"),y=ks(r,"float32");return Mi(p,y)}const u=na(Zt(r),l);return H.makeTensor(u,r,l)}function Vi(r,l="float32"){if(l==="complex64"){const p=Vi(r,"float32"),y=ks(r,"float32");return Mi(p,y)}const u=Jm(Zt(r),l);return H.makeTensor(u,r,l)}function sZ(r,l=null,u=!1){const p=M(r,"x","mean"),y=ft(l,p.shape),g=dO(p.shape,y),I=g[1],S=Zt(I),T={x:p},C={axis:l,keepDims:u},D=()=>{const A=Fe(S),B=A.dtype===p.dtype?p:Ie(p,A.dtype),ne=Me(B,A);return _e(ne,l,u)},_=cg(A=>{const B=H.runKernelFunc(D,T,null,yR,C),ne=te=>{const P=A.shape.slice();y.forEach(Le=>{P[Le]=1});const ge=re(te,P),ae=Me(le(ge,Vi(A.shape,"float32")),S);return ae};return{value:B,gradFunc:ne}});return _(p)}const FI=V({mean_:sZ});function iZ(r,l=null,u=!1){const p=M(r,"x","min"),y=(S,T)=>{const C=ft(l,p.shape);let D=C;const _=zi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=io(D.length,p.rank));const B=S.min(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=rs(ne.shape,C);ne=re(B,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,If,I)}const lg=V({min_:iZ});function rZ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=Lt(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.minimum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,xf)}const _I=V({minimum_:rZ});function oZ(r){const l=M(r,"x","square"),u={},p=[l],y=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,p,y)}const gt=V({square_:oZ});function aZ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.notEqual(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,LR)}const WI=V({notEqual_:aZ});function cZ(r){const l=M(r,"input","real"),u=y=>y.real(l),p={input:l};return H.runKernelFunc(u,p,null,CR)}const Bc=V({real_:cZ});function lZ(r,l,u=0){const p=M(r,"x","pad");if(p.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const y=(S,T)=>(T([p]),S.pad(p,l,u)),g={paddings:l,constantValue:u},I={x:p};return H.runKernelFunc(y,I,null,vf,g)}const $I=V({pad_:lZ});function hZ(r,l,u){const p=M(r,"x","spaceToBatchND");J(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(p.shape.reduce((S,T,C)=>C>0&&C<=l.length?S&&(T+u[C-1][0]+u[C-1][1])%l[C-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const y=S=>S.spaceToBatchND(p,l,u),g={x:p},I={blockShape:l,paddings:u};return H.runKernelFunc(y,g,null,Pf,I)}const UI=V({spaceToBatchND_:hZ});function uZ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=Lt(u,p);const y={a:u,b:p},g=(I,S)=>{const T=I.pow(u,p);return S([u,p,T]),T};return H.runKernelFunc(g,y,null,Nf)}const aa=V({pow_:uZ});function co(r,l){Oc(r);const u=br(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return Pi(r,p,u,l)}function hg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const y=()=>{const I=r===l,S=r1;if(I||S||T)return ks([0],p);const C=Math.abs(Math.ceil((l-r)/u)),D=na(C,p);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):y.relu(l)),p={x:l};return H.runKernelFunc(u,p,null,Cf)}const Fu=V({relu_:dZ});function pZ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ft(l,u.shape);if(u.rank===0)return pi(u);const T=I.reverse(u,S);return re(T,u.shape)},y={x:u},g={dims:l};return H.runKernelFunc(p,y,null,Df,g)}const Mc=V({reverse_:pZ});function mZ(r){const l=M(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.rsqrt(l);return y([l]),g},u,null,kf)}const BI=V({rsqrt_:mZ});function fZ(r){const l=M(r,"x","sin"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sin(l);return y([l]),g},u,null,Wf)}const MI=V({sin_:fZ});function gZ(r){const l=M(r,"x","sinh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sinh(l);return y([l]),g},u,null,$f)}const PI=V({sinh_:gZ});function yZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=r.as2D(y,p),I=u.fft(g);return I.reshape(r.shape)},l,null,X2)}const _u=V({fft_:yZ});function bZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=re(r,[y,p]),I=u.ifft(g);return re(I,r.shape)},l,null,tR)}const Pc=V({ifft_:bZ});function wZ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const y=re(r,[u,l]);p=Pc(y)}else{const y=[u,2*(l-1)],g=re(Bc(r),[u,l]),I=re(ku(r),[u,l]),S=Mc(Tt(g,[0,1],[u,l-2]),1),T=le(Mc(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),C=Tn([g,S],1),D=Tn([I,T],1),_=re(Mi(C,D),[y[0],y[1]]);p=Pc(_)}if(p=Bc(p),r.rank===3&&r.shape[0]!==0){const y=p,g=r.shape[0];p=re(p,[g,p.shape[0]/g,p.shape[1]]),y.dispose()}return p}const zI=V({irfft_:wZ});function wO(r,l,u=0){let p=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const y=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(y<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,T)=>T>0?S+T:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),p=l}return p}function LZ(r,l,u=0){const p=M(r,"x","split"),y=(S,T)=>{const C=ft(u,p.shape)[0],D=wO(p,l,C);return S.split(p,D,C)},g={x:p},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(y,g,null,zf,I)}const lo=V({split_:LZ});function SZ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const p=r.size/u;let y;if(l!=null&&l0),te=r.shape.map(P=>P);te[r.shape.length-1]=l,y=Tt(r,ne,te),u=l}else if(l!=null&&l>u){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-u,y=Tn([r,ks(ne)],r.shape.length-1),u=l}else y=r;const g=Ke(y),I=re(Mi(y,g),[p,u]),S=_u(I),T=Math.floor(u/2)+1,C=Bc(S),D=ku(S),_=lo(C,[T,u-T],C.shape.length-1),A=lo(D,[T,u-T],D.shape.length-1),B=y.shape.slice();return B[y.shape.length-1]=T,re(Mi(_[0],A[0]),B)}const Wu=V({rfft_:SZ});function IZ(r){const l=M(r,"x","sqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sqrt(l);return y([l]),g},u,null,Bf)}const fs=V({sqrt_:IZ});function xZ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(S,T)=>{const C=S.squaredDifference(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,Vf,I)}const VI=V({squaredDifference_:xZ});function TZ(r,l){const u=M(r,"x","squeeze");return re(u,o2(u.shape,l).newShape)}const GI=V({squeeze_:TZ});function AZ(r,l=0){const u=ng(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Ds(u[0],l);const p=u[0].rank,y=u[0].shape,g=u[0].dtype;J(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(y,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Ds(S,l));return Tn(I,l)}const Ys=V({stack_:AZ});function vZ(r,l=0){const u=M(r,"x","step"),p={x:u},y={alpha:l};return H.runKernelFunc(g=>g.step(u,l),p,null,Xf,y)}const ca=V({step_:vZ});function la(r,l,u){if(Oc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=br(r,u);if(p.length!==2&&p.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Pi(r,l,p,u)}function NZ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),y=M(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:p,segmentIds:y},I={numSegments:u},S=(T,C)=>{const D=T.unsortedSegmentSum(p,y,u);return C([y]),D};return H.runKernelFunc(S,g,null,jf,I)}const YI=V({unsortedSegmentSum_:NZ});function CZ(r,l=0){const u=M(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const p={value:u},y={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,p,null,qf,y)}const $u=V({unstack_:CZ});function RZ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const y=LO(r,l,u);let g=y.shape;if(p){const I=ft(u,r.shape);g=rs(y.shape,I)}return re(y,g)}function LO(r,l,u=null){if(r.rank===0)return zn(r);if(r.rank!==1&&u===null)return LO(re(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(zn(r),u);if(l===Infinity)return ra(zn(r),u);if(l===-Infinity)return lg(zn(r),u);if(l==="euclidean"||l===2)return fs(_e(aa(zn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ra(_e(zn(r),u[0]),u[1]-1);if(l===Infinity)return ra(_e(zn(r),u[1]),u[0]);if(l===-Infinity)return lg(_e(zn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return fs(_e(gt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const ug=V({norm_:RZ});function SO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function dg(r,l,u){const p=1-r%2,y=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(T.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${T.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const C=g==="NHWC"?S.shape[3]:S.shape[1],D=g==="NHWC"?T.shape[3]:T.shape[1];J(C===u[2],()=>`Error in conv2dDerFilter: depth of input ${C}) must match input depth in filter (${u[2]}.`),J(D===u[3],()=>`Error in conv2dDerFilter: depth of dy (${D}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(y),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const _=ne=>{const te=1,P=Uc(g),ge=mi(S.shape,u,p,te,y,I,!1,P);return ne.conv2dDerFilter(S,T,ge)},A={x:S,dy:T},B={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,F2,B)}const pg=V({conv2DBackpropFilter_:OZ});function EZ(r,l,u,p,y,g=[1,1],I){let S=r;r.rank===3&&(S=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let T=l;T.rank===3&&(T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=A=>{const B=mi(r.shape,u,p,g,y,I,!0);return A.depthwiseConv2DDerFilter(S,T,B)},D={x:S,dy:T},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(C,D,null,M2,_)}const IO=V({depthwiseConv2dNativeBackpropFilter_:EZ});function DZ(r,l,u,p,y,g=[1,1],I){let S=l,T=!1;l.rank===3&&(T=!0,S=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=B=>{const ne=mi(r,u.shape,p,g,y,I,!0);return B.depthwiseConv2DDerInput(S,u,ne)},D={dy:S,filter:u},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(C,D,null,P2,_);return T?re(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const xO=V({depthwiseConv2dNativeBackpropInput_:DZ});function kZ(r){return dg(r,.54,.46)}const TO=V({hammingWindow_:kZ});function FZ(r){return dg(r,.5,.5)}const mg=V({hannWindow_:FZ});function _Z(r,l,u,p=!1,y=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(p)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${C},4] but had shape ${S.shape}.`),J(T.rank===1&&T.shape[0]===C,()=>`Error in cropAndResize: boxInd must be have size [${C}] but had shape ${S.shape}.`),J(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),J(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),J(y==="bilinear"||y==="nearest",()=>`method must be bilinear or nearest, but was ${y}`);const D=ne=>ne.cropAndResize(I,S,T,p,y,g),_={image:I,boxes:S,boxInd:T},A={method:y,extrapolationValue:g,cropSize:p},B=H.runKernelFunc(D,_,null,U2,A);return B}const vO=V({cropAndResize_:$Z});function UZ(r){const l=M(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=H.runKernel(Z2,u,{});return p}const NO=V({flipLeftRight_:UZ});function BZ(r,l,u=0,p=.5){const y=M(r,"image","rotateWithOffset","float32");J(y.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${y.rank}.`);const g={image:y},I={radians:l,fillValue:u,center:p},S=H.runKernel(PR,g,I);return S}const CO=V({rotateWithOffset_:BZ});function Hs(r,l,u,p,y,g){p==null&&(p=.5),y==null&&(y=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g}}function MZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Hs(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T={maxOutputSize:u,iouThreshold:p,scoreThreshold:y};return H.runKernelFunc(C=>C.nonMaxSuppression(g,I,u,p,y),{boxes:g,scores:I},null,SR,T)}const RO=V({nonMaxSuppression_:MZ});function OO(r,l,u){const p=PZ(r,l,u),y=p<0?-(p+1):p;r.splice(y,0,l)}function PZ(r,l,u){return VZ(r,l,u||zZ)}function zZ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?p=g+1:(y=g,I=!S)}return I?p:-p-1}function EO(r,l,u,p,y){return HI(r,l,u,p,y,0).selectedIndices}function DO(r,l,u,p,y,g){return HI(r,l,u,p,y,0,!1,g,!0)}function kO(r,l,u,p,y,g){return HI(r,l,u,p,y,g,!0)}function HI(r,l,u,p,y,g,I=!1,S=!1,T=!1){const C=[];for(let P=0;Py&&C.push({score:l[P],boxIndex:P,suppressBeginIndex:0});C.sort(FO);const D=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const P=C.pop(),{score:ge,boxIndex:ae,suppressBeginIndex:Le}=P;if(ge=Le;--Ve){const at=GZ(r,ae,_[Ve]);if(at>=p){ve=!0;break}if(P.score=P.score*YZ(p,D,at),P.score<=y)break}P.suppressBeginIndex=_.length,ve||(P.score===ge?(_.push(ae),A.push(P.score)):P.score>y&&OO(C,P,FO))}const B=_.length,ne=u-B;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const te={selectedIndices:co(_,"int32")};return I&&(te.selectedScores=co(A,"float32")),T&&(te.validOutputs=Fe(B,"int32")),te}function GZ(r,l,u){const p=r.subarray(l*4,l*4+4),y=r.subarray(u*4,u*4+4),g=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),T=Math.max(p[1],p[3]),C=Math.min(y[0],y[2]),D=Math.min(y[1],y[3]),_=Math.max(y[0],y[2]),A=Math.max(y[1],y[3]),B=(S-g)*(T-I),ne=(_-C)*(A-D);if(B<=0||ne<=0)return 0;const te=Math.max(g,C),P=Math.max(I,D),ge=Math.min(S,_),ae=Math.min(T,A),Le=Math.max(ge-te,0)*Math.max(ae-P,0);return Le/(B+ne-Le)}function YZ(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function FO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function HZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Hs(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T=await Promise.all([g.data(),I.data()]),C=T[0],D=T[1],_=EO(C,D,u,p,y);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const _O=HZ;function qZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Hs(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C={boxes:I,scores:S},D={maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g},_=H.runKernel(xR,C,D);return{selectedIndices:_[0],selectedScores:_[1]}}const WO=V({nonMaxSuppressionWithScore_:qZ});async function jZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Hs(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C=await Promise.all([I.data(),S.data()]),D=C[0],_=C[1],A=kO(D,_,u,p,y,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const $O=jZ;function KZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Hs(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,A={boxes:I,scores:S},B={maxOutputSize:C,iouThreshold:D,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(IR,A,B);return{selectedIndices:ne[0],validOutputs:ne[1]}}const UO=V({nonMaxSuppressionPadded_:KZ});async function XZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Hs(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,[A,B]=await Promise.all([I.data(),S.data()]),ne=DO(A,B,C,D,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const BO=XZ;function JZ(r,l,u=!1){const p=M(r,"images","resizeBilinear");J(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T=(A,B)=>(B([y]),A.resizeBilinear(y,I,S,u)),C={images:y},D={alignCorners:u,size:l},_=H.runKernelFunc(T,C,null,Ef,D);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const MO=V({resizeBilinear_:JZ});function ZZ(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");J(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T={images:y},C={alignCorners:u,size:l},D=(A,B)=>(B([y]),A.resizeNearestNeighbor(y,I,S,u)),_=H.runKernelFunc(D,T,null,Of,C);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const PO=V({resizeNearestNeighbor_:ZZ});function QZ(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");J(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const y=p.shape,[g,I]=p.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=re(hg(0,g,1,"int32"),[-1,1]),T=hg(0,I,1,"int32"),C=Be(S,T),D=oa(Lr(C,Fe(+l,"int32")),wr(C,Fe(-u,"int32"))),_=ks([g,I],p.dtype);return re(Ys($u(re(p,[-1,g,I])).map(A=>Vn(D,A,_))),y)}const zO=V({bandPart_:QZ});function eQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const y=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${y})`)}else l=!0,r=lo(r,r.shape[0],0).map(y=>GI(y,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],p=r;for(let y=0;y{let g=p[y];if(y>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return GO(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((T,C)=>T*C),p=$u(re(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),y=[],g=[];p.forEach(T=>{const[C,D]=GO(T,l);y.push(C),g.push(D)});const I=re(Ys(y,0),r.shape),S=re(Ys(g,0),r.shape);return[I,S]}}function GO(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],p=r.shape[1];let y=AI(u),g=pi(r);const I=la([[1]],[1,1]);let S=pi(I);const T=u>=p?p:u;for(let C=0;C{const B=Tt(g,[C,C],[u-C,1]),ne=ug(B),te=Tt(g,[C,C],[1,1]),P=Vn(fi(te,0),la([[-1]]),la([[1]])),ge=Be(te,le(P,ne)),ae=Me(B,ge);ae.shape[0]===1?S=pi(I):S=Tn([I,Tt(ae,[1,0],[ae.shape[0]-1,ae.shape[1]])],0);const Le=It(Me(yn(P,ge),ne)),ve=Tt(g,[C,0],[u-C,p]),Ve=le(Le,S),at=xn(S);if(C===0)g=Be(ve,yn(Ve,yn(at,ve)));else{const Vt=Be(ve,yn(Ve,yn(at,ve)));g=Tn([Tt(g,[0,0],[C,p]),Vt],0)}const pt=xn(Ve),$t=Tt(y,[0,C],[u,y.shape[1]-C]);if(C===0)y=Be($t,yn(yn($t,S),pt));else{const Vt=Be($t,yn(yn($t,S),pt));y=Tn([Tt(y,[0,0],[u,C]),Vt],1)}return[S,g,y]}),uO([D,_,A])}return!l&&u>p&&(y=Tt(y,[0,0],[u,p]),g=Tt(g,[0,0],[p,p])),[y,g]})}const YO=V({qr_:tQ});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function nQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let y=null;l!=null&&(y=M(l,"weights","computeWeightedLoss"));const g=y==null?p:le(p,y);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(y==null)return FI(g);{const I=p.size/y.size,S=Me(_e(g),_e(y));return I>1?Me(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(y==null)return Me(_e(g),Fe(p.size));{const I=le(y,Vi(p.shape)),S=Ie(_e(WI(I,Fe(0))),"float32");return Me(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const Dn=V({computeWeightedLoss_:nQ});function sQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),tn(y.shape,g.shape,"Error in absoluteDifference: ");const S=zn(Be(y,g));return Dn(S,I,p)}const HO=V({absoluteDifference_:sQ});function iQ(r,l,u,p,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const T=Fe(1),C=Be(T,_e(le(g,I),u,!0));return Dn(C,S,y)}const qO=V({cosineDistance_:iQ});function rQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){let y=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),tn(y.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);y=Be(le(Fe(2),y),S);const T=Fu(Be(S,le(y,g)));return Dn(T,I,p)}const jO=V({hingeLoss_:rQ});function oQ(r,l,u,p=1,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const T=Fe(p),C=zn(Be(I,g)),D=_I(C,T),_=Be(C,D),A=vt(le(Fe(.5),gt(D)),le(T,_));return Dn(A,S,y)}const KO=V({huberLoss_:oQ});function aQ(r,l,u,p=1e-7,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const T=Fe(1),C=Fe(p),D=It(le(g,ao(vt(I,C)))),_=le(Be(T,g),ao(vt(Be(T,I),C))),A=Be(D,_);return Dn(A,S,y)}const XO=V({logLoss_:aQ});function cQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),tn(y.shape,g.shape,"Error in meanSquaredError: ");const S=VI(y,g);return Dn(S,I,p)}const JO=V({meanSquaredError_:cQ});function lQ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const y=Fu(p),g=le(p,u),I=EI(Gn(It(zn(p))));return vt(Be(y,g),I)}function hQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(.5);g=vt(le(g,Be(D,C)),le(_,C))}const T=lQ(g,I);return Dn(T,S,y)}const ZO=V({sigmoidCrossEntropy_:hQ});function uQ(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const p=cg((y,g,I)=>{const S=!0,T=DI(g,[u],S),C=Be(Ie(g,"float32"),T);I([y,C]);const D=It(le(C,y)),_=_e(D,[u]),A=(B,ne)=>{const[te,P]=ne,ge=rs(B.shape,[u]);return[le(re(B,ge),Be(Ie(te,"float32"),Gn(P))),le(re(B,ge),Be(Gn(P),Ie(te,"float32")))]};return{value:_,gradFunc:A}});return p(r,l)}function dQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(D,C)),Me(C,_))}const T=uQ(g,I);return Dn(T,S,y)}const QO=V({softmaxCrossEntropy_:dQ});const xve={fft:_u,ifft:Pc,rfft:Wu,irfft:zI},Cve={hammingWindow:TO,hannWindow:mg,frame:fg,stft:AO},e1={flipLeftRight:NO,resizeNearestNeighbor:PO,resizeBilinear:MO,rotateWithOffset:CO,cropAndResize:vO,nonMaxSuppression:RO,nonMaxSuppressionAsync:_O,nonMaxSuppressionWithScore:WO,nonMaxSuppressionWithScoreAsync:$O,nonMaxSuppressionPadded:UO,nonMaxSuppressionPaddedAsync:BO},Vve={bandPart:zO,gramSchmidt:VO,qr:YO},Qve={absoluteDifference:HO,computeWeightedLoss:Dn,cosineDistance:qO,hingeLoss:jO,huberLoss:KO,logLoss:XO,meanSquaredError:JO,sigmoidCrossEntropy:ZO,softmaxCrossEntropy:QO};const t1=1.7580993408473768,n1=1.0507009873554805;const s1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,ca(Ie(u,"float32"),-1))}}};const i1={kernelName:y2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=gt(Ie(u,"float32")),y=fs(Be(Fe(1),p));return It(Me(r,y))}}}};const r1={kernelName:b2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(Be(gt(Ie(u,"float32")),1));return Me(r,p)}}}};const o1={kernelName:Dc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Ot(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Ot(p.shape,y);return T.length>0&&(S=_e(S,T)),re(S,p.shape)};return{a:g,b:I}}};const a1={kernelName:w2,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,y)=>{u[y]=()=>r.clone()}),u}};const c1={kernelName:L2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Ke(u)}}};const l1={kernelName:S2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Ke(u)}}};const h1={kernelName:I2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,fs(Be(Fe(1),gt(Ie(u,"float32")))))}}};const u1={kernelName:x2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(vt(Fe(1),gt(Ie(u,"float32"))));return Me(r,p)}}}};const d1={kernelName:v2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=vt(gt(u),gt(p));let T=le(r,Me(p,S));const C=Ot(u.shape,y);return C.length>0&&(T=_e(T,C)),re(T,u.shape)},I=()=>{const S=vt(gt(u),gt(p));let T=It(le(r,Me(u,S)));const C=Ot(p.shape,y);return C.length>0&&(T=_e(T,C)),re(T,p.shape)};return{a:g,b:I}}};const p1={kernelName:T2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(gt(Ie(u,"float32")),1))}}};const m1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Be(Fe(1),gt(Ie(u,"float32"))))}}};function pQ(r,l,u,p,y=[1,1,1],g,I){const S=M(r,"dy","avgPool3dBackprop"),T=M(l,"input","avgPool3dBackprop");let C=S,D=T,_=!1;T.rank===4&&(_=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),D=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]])),J(C.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),J(D.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${D.rank}.`),J(oo(p,y),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${y}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=P=>{const ge=og(D.shape,u,p,y,g,I);return P.avgPool3dBackprop(C,D,ge)},B={dy:C,input:D},ne={filterSize:u,strides:p,dilations:y,pad:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,O2,ne);return _?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const f1=V({avgPool3dBackprop_:pQ});const g1={kernelName:R2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,dilations:I,pad:S,dimRoundingMode:T}=u,C=I==null?[1,1,1]:I;return{x:()=>f1(r,p,y,g,C,S,T)}}};function mQ(r,l,u,p,y){const g=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,T=g,C=!1;I.rank===3&&(C=!0,S=re(I,[1,I.shape[0],I.shape[1],I.shape[2]]),T=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(T.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${T.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const D=ne=>{const te=rg(S.shape,u,p,1,y);return ne.avgPoolBackprop(T,S,te)},_={dy:T,input:S},A={filterSize:u,strides:p,pad:y},B=H.runKernelFunc(D,_,null,C2,A);return C?re(B,[B.shape[1],B.shape[2],B.shape[3]]):B}const y1=V({avgPoolBackprop_:mQ});const b1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,pad:I}=u;return{x:()=>y1(r,p,y,g,I)}}};const w1={kernelName:tf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,y]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>yn(r,y,!1,!0),b:()=>yn(p,r,!0,!1)}:!g&&I?{a:()=>yn(r,y,!1,!1),b:()=>yn(r,p,!0,!1)}:g&&!I?{a:()=>yn(y,r,!1,!0),b:()=>yn(p,r,!1,!1)}:{a:()=>yn(y,r,!0,!0),b:()=>yn(r,p,!0,!0)}}};const L1={kernelName:nf,gradFunc:(r,l,u)=>{const{blockShape:p,crops:y}=u;return{x:()=>UI(r,p,y)}}};const S1={kernelName:sf,gradFunc:(r,l,u)=>{const p=u,y=p.inputShape,g=p.shape,I=Array.from(g);for(let T=y.length-1;T>=0;T--)if(y[T]===g[T])I[T]=1;else if(y[T]!==1)throw new Error(`broadcastTo(): [${y}] cannot be broadcast to [${g}].`);const S=[];for(let T=0;T1&&S.push(T);return{x:()=>_e(r,S,!0)}}};const I1={kernelName:kc,gradFunc:r=>({x:()=>r.clone()})};const x1={kernelName:E2,gradFunc:r=>({x:()=>Ke(r)})};const T1={kernelName:D2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:y,clipValueMax:g}=u;return{x:()=>Vn(oa(wr(p,y),Lr(p,g)),r,Ke(r))}}};const A1={kernelName:rf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(T=>T.shape),{axis:y}=u,g=ft(y,l[0].shape)[0],I=p.map(T=>T[g]),S=lo(r,I,g);return S.map(T=>()=>T)}};const v1={kernelName:of,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{dilations:g,strides:I,pad:S,dataFormat:T}=u;return J(ro(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>gO(p.shape,r,y,I,S,T),filter:()=>pg(p,r,y.shape,I,S,T)}}};const N1={kernelName:af,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:T}=u;return{dy:()=>SI(r,y,g,I,S,1,T),filter:()=>pg(r,p,y.shape,g,I,S,T)}}};function fQ(r,l,u,p,y){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=D=>{const _=1,A=Eu(g.shape,u,p,_,y);return D.conv3dDerFilter(g,I,A)},T={x:g,dy:I},C={strides:p,pad:y,filterShape:u};return H.runKernelFunc(S,T,null,W2,C)}const C1=V({conv3DBackpropFilter_:fQ});const R1={kernelName:_2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g}=u;J(ro(p),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${p}'`);const[I,S]=l;return{x:()=>yO(I.shape,r,S,y,g),filter:()=>C1(I,r,S.shape,y,g)}}};const O1={kernelName:cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(MI(Ie(u,"float32"))),r)}}};const E1={kernelName:lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(PI(Ie(u,"float32")),r)}}};const D1={kernelName:hf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:y,exclusive:g,reverse:I}=u;return{x:()=>{const S=zi([y],p.rank);let T=xI(r,y,g,!I);return S!=null&&(T=xn(T,S)),T}}}};const k1={kernelName:B2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g,dimRoundingMode:I}=u,S=p==null?[1,1]:p;J(ro(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[T,C]=l;return J(T.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${T.rank}.`),J(C.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${C.rank}.`),J(T.shape[3]===C.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${T.shape[3]}) must match the inChannels dimension in filter ${C.shape[2]}.`),J(oo(y,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${y} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>xO(T.shape,r,C,y,g,p,I),filter:()=>IO(T,r,C.shape,y,g,p,I)}}};const F1={kernelName:z2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,g={x:p,filter:y,dy:r},I={x:p,filter:y,dy:r};return{x:()=>H.runKernel(V2,g,u),filter:()=>H.runKernel(G2,I,u)}}};const _1={kernelName:uf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Ot(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=gt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const W1={kernelName:Y2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=g=>g.eluDer(r,u),y={dy:r,y:u};return{x:()=>H.runKernelFunc(p,y,null,H2)}}};const $1={kernelName:q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Gn(It(gt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,p)}}};const U1={kernelName:df,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const B1={kernelName:K2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Gn(u))}}};const M1={kernelName:pf,gradFunc:r=>({x:()=>Ke(r)})};const P1={kernelName:mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Ot(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=gt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const z1={kernelName:Q2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[y,g,I,S]=l,T=S==null?Fe(1):S,C=Ot(g.shape,y.shape),D=[];if(g.rank===1){for(let ve=0;veg.rank===1?re(le(le(r,ia(re(B,[1,1,1,g.shape[0]]),D)),T),y.shape):re(le(le(r,B),T),y.shape),P=()=>{let ve=le(le(B,Fe(-1)),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ge=()=>{let ve=le(le(ne,_),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ae=()=>{const ve=le(_,B);let Ve=le(r,ve);return g.rank===1&&(Ve=_e(Ve,C)),re(Ve,g.shape)},Le=()=>{let ve=r;return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)};return{x:te,mean:P,variance:ge,scale:ae,offset:Le}}};const Y1={kernelName:ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,y]=l,{axis:g}=u,I=ft(g,p.shape)[0],S=()=>{const T=p.shape,C=y.size,D=T.slice(0,I),_=D.length,A=T.slice(g,T.length).slice(1),B=A.length,ne=V1(0,_),te=V1(_+1,_+1+B),P=G1([D,[C],A]),ge=re(r,P),ae=re(y,[C]),Le=G1([[_],ne,te]),ve=xn(ge,Le);let Ve=YI(ve,ae,p.shape[I]);const at=Wc(Le);return Ve=xn(Ve,at),Ve};return{x:S,indices:()=>y}}};function V1(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>Ke(u),b:()=>Ke(p)}}};const q1={kernelName:yf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const j1={kernelName:sR,gradFunc:r=>({x:()=>Ke(r)})};const K1={kernelName:iR,gradFunc:r=>({x:()=>Ke(r)})};const X1={kernelName:rR,gradFunc:r=>({x:()=>Ke(r)})};const J1={kernelName:wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(u,1))}}};const Z1={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Ie(u,"float32"))}}};const Q1={kernelName:hR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:y}=u;return{logits:()=>{const g=!0,I=Gn(p);return Be(r,le(_e(r,y,g),I))}}}};function gQ(r,l,u,p=5,y=1,g=1,I=.5){const S=D=>D.LRNGrad(u,r,l,p,y,g,I),T={x:r,y:l,dy:u},C={depthRadius:p,bias:y,alpha:g,beta:I};return H.runKernelFunc(S,T,null,dR,C)}const eE=V({localResponseNormalizationBackprop_:gQ});const tE={kernelName:uR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{depthRadius:g,bias:I,alpha:S,beta:T}=u;return{x:()=>eE(p,y,r,g,I,S,T)}}};function gg(r,l,u,p){return l.rank{const y=le(r,Ie(TI(u,l),r.dtype));return y}}}const qI={kernelName:Lf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:y}=p,g=l[0],I=l[1],S=ft(y,g.shape),T=gg(r,I,g,S);return{x:()=>T.x()}}};const nE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(wr(u,p),"float32")),g=()=>le(r,Ie(OI(u,p),"float32"));return{a:y,b:g}}};function yQ(r,l,u,p,y,g=[1,1,1],I,S){const T=M(r,"dy","maxPool3dBackprop"),C=M(l,"input","maxPool3dBackprop"),D=M(u,"output","maxPool3dBackprop");let _=T,A=C,B=D,ne=!1;C.rank===4&&(ne=!0,_=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]]),A=re(C,[1,C.shape[0],C.shape[1],C.shape[2],C.shape[3]]),B=re(D,[1,D.shape[0],D.shape[1],D.shape[2],D.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(B.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${B.rank}.`),J(oo(y,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${y} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Le=>{const ve=og(A.shape,p,y,g,I,S);return Le.maxPool3dBackprop(_,A,B,ve)},P={dy:_,input:A,output:B},ge={filterSize:p,strides:y,dilations:g,pad:I,dimRoundingMode:S},ae=H.runKernelFunc(te,P,null,gR,ge);return ne?re(ae,[ae.shape[1],ae.shape[2],ae.shape[3],ae.shape[4]]):ae}const sE=V({maxPool3dBackprop_:yQ});const iE={kernelName:fR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,dilations:S,pad:T,dimRoundingMode:C}=u,D=S==null?[1,1,1]:S;return{x:()=>sE(r,p,y,g,I,D,T,C)}}};function bQ(r,l,u,p,y,g,I){const S=M(r,"dy","maxPoolBackprop"),T=M(l,"input","maxPoolBackprop"),C=M(u,"output","maxPoolBackprop");J(T.rank===S.rank,()=>`Rank of input (${T.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(T.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${T.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const D=B=>{const ne=rg(T.shape,p,y,1,g,I);return B.maxPoolBackprop(S,T,C,ne)},_={dy:S,input:T,output:C},A={filterSize:p,strides:y,pad:g,dimRoundingMode:I};return H.runKernelFunc(D,_,null,mR,A)}const rE=V({maxPoolBackprop_:bQ});const oE={kernelName:pR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>rE(r,p,y,g,I,S)}}};const aE={kernelName:If,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:y}=p,[g,I]=l,S=ft(y,g.shape),T=gg(r,I,g,S);return{x:()=>T.x()}}};const cE={kernelName:xf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(Lr(u,p),"float32")),g=()=>le(r,Ie(fi(u,p),"float32"));return{a:y,b:g}}};const lE={kernelName:bR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const hE={kernelName:wR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Ot(u.shape,y);return S.length>0?re(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(NI(Me(u,p)))),T=Ot(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const uE={kernelName:Tf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=le(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),T=Ot(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const dE={kernelName:Af,gradFunc:r=>({x:()=>It(r)})};const pE={kernelName:AR,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>ks(u.shape,"float32")}}};const mE={kernelName:TR,gradFunc:r=>({x:()=>Ke(r)})};const jI={kernelName:vf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const fE={kernelName:Nf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,y]=l,g=u,I=p,S=ot(g.shape,I.shape),T=()=>{const D=Ie(I,"float32");let _=le(r,le(D,aa(g,Be(D,Fe(1)))));const A=Ot(g.shape,S);return A.length>0&&(_=_e(_,A)),re(_,g.shape)},C=()=>{const D=fi(g,0),_=Vn(D,ao(g),Ke(g));let A=le(r,le(y,_));const B=Ot(I.shape,S);return B.length>0&&(A=_e(A,B)),re(A,I.shape)};return{a:T,b:C}}};const gE={kernelName:vR,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,y=fi(u,0);return{x:()=>Vn(y,r,le(r,p)),alpha:()=>{let g=Vn(y,Ke(r),le(r,u));const I=Ot(p.shape,r.shape);return I.length>0&&(g=_e(g,I)),re(g,p.shape)}}}};const yE={kernelName:RR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,It(gt(u)))}}};const bE={kernelName:DR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Lr(u,6),ca(u));return{x:()=>le(r,Ie(p,"float32"))}}};const wE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(ca(u),"float32"))}}};const LE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>re(r,u.shape)}}};const SE={kernelName:Ef,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeBilinearBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,ER,u);return{images:I}}};const IE={kernelName:Of,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeNearestNeighborBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,OR,u);return{images:I}}};const xE={kernelName:Df,gradFunc:(r,l,u)=>{const{dims:p}=u,y=ft(p,r.shape);return{x:()=>Mc(r,y)}}};const TE={kernelName:kR,gradFunc:r=>({x:()=>Ke(r)})};const AE={kernelName:kf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Me(r,le(aa(u,1.5),2)))}}};const vE={kernelName:Ff,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Ke(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(kI(u),r.dtype))}}};const NE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fi(u,Fe(0)),y=Fe(t1),g=Fe(n1),I=le(r,g),S=le(le(r,y),Gn(Ie(u,"float32")));return Vn(p,I,S)}}}};const CE={kernelName:Uf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const RE={kernelName:_R,gradFunc:r=>({x:()=>Ke(r)})};const OE={kernelName:Wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Du(Ie(u,"float32")),r)}}};const EE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(II(Ie(u,"float32")),r)}}};const DE={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:y,size:g}=u,I=p.shape,[S,T]=sg(p,y,g),C=[];for(let D=0;D$I(r,C)}}};const kE={kernelName:$R,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:y}=u,g=!0,I=le(r,p);return{logits:()=>Be(I,le(_e(I,[y],g),p))}}};const FE={kernelName:WR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,wI(u))}}};const KI={kernelName:Pf,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:y}=u;return{x:()=>LI(r,p,y)}}};const XI={kernelName:zf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>Tn(r,p)}}};const _E={kernelName:Bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,le(fs(Ie(u,"float32")),2))}}};const WE={kernelName:UR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const $E={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=Fe(2),g=()=>le(r,le(y,Be(u,p))),I=()=>le(r,le(y,Be(p,u)));return{a:g,b:I}}};const UE={kernelName:Xf,gradFunc:r=>({x:()=>Ke(r)})};const BE={kernelName:Gf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Ot(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Ot(p.shape,y);return T.length>0&&(S=_e(S,T)),re(It(S),p.shape)};return{a:g,b:I}}};const ME={kernelName:Mf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,y=p.shape.slice(),{axis:g}=u,I=ft(g,p.shape);I.forEach(C=>{y[C]=1});const S=re(r,y),T=le(S,Vi(p.shape,"float32"));return{x:()=>T}}};const PE={kernelName:BR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,gt(Du(u)))}}};const zE={kernelName:MR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),gt(u)),r)}}};const VE={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:y}=u,g=()=>{let I=Ke(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:y}=p,g=Wc(y);return{x:()=>xn(r,g)}}};const YE={kernelName:qf,gradFunc:(r,l,u)=>{const p=u,{axis:y}=p;return{value:()=>Ys(r,y)}}};const HE={kernelName:jf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>wQ(r,u);return{x:p}}};function wQ(r,l){const u=RI(l,Ke(l)),p=CI(r,u);let y=wr(l,Fe(0,"int32"));const g=p.rank-y.rank;for(let S=0;S({x:()=>Ke(r)})};const LQ=[s1,i1,r1,o1,a1,c1,l1,h1,u1,d1,p1,m1,g1,b1,w1,L1,S1,I1,x1,T1,A1,N1,v1,R1,O1,E1,D1,k1,F1,_1,W1,$1,U1,B1,P1,M1,z1,Y1,H1,q1,j1,K1,X1,J1,Z1,Q1,tE,qI,qI,nE,iE,oE,aE,cE,lE,hE,uE,dE,pE,mE,jI,jI,fE,gE,yE,bE,wE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,EE,DE,kE,FE,KI,KI,XI,XI,_E,$E,WE,UE,BE,ME,PE,zE,VE,GE,YE,HE,qE];for(const r of LQ)VR(r);function JI(r,l,u=!1){const{Image:p,Canvas:y}=St.getEnv();if(!(r instanceof p||r instanceof y))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ea(r),I=l/Math.max(g.height,g.width),S=I*g.width,T=I*g.height,C=Rc({width:l,height:l}),D=r instanceof y?r:Su(r),_=Math.abs(S-T)/2,A=u&&S{if(gr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Rs(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const y=u instanceof St.getEnv().Canvas?u:Su(u);this._canvases[p]=y,this._inputDimensions[p]=[y.height,y.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 _i(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return _S({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,hO(()=>{const u=_i(this.batchSize,0,1).map(y=>{const g=this.getInput(y);if(g instanceof En){let I=Rs(g)?g:g.expandDims();return I=BS(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=e1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof St.getEnv().Canvas)return gI.fromPixels(JI(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${y}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),p=Ys(u.map(y=>Ie(y,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Wt(r){if(r instanceof ho)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=y=>Array.isArray(r)?` at input index ${y}:`:"",p=l.map(Qo);return p.forEach((y,g)=>{if(!Xm(y)&&!gr(y)&&!Rs(y))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Rs(y)){const I=y.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(y=>Xm(y)&&qS(y))),new ho(p,Array.isArray(r))}async function zc(r,l){const{Canvas:u}=St.getEnv();let p=r;if(!(r instanceof u)){const I=await Wt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await KS(S)}const y=is(p),g=l.map(I=>I instanceof Jt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return g.map(({x:I,y:S,width:T,height:C})=>{const D=Rc({width:T,height:C});return is(D).putImageData(y.getImageData(I,S,T,C),0,0),D})}const yg=Je(Ze());async function Vc(r,l){if(!gr(r)&&!Rs(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Rs(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return yg.tidy(()=>{const[u,p,y]=r.shape.slice(Rs(r)?1:0),g=l.map(S=>S instanceof Jt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=g.map(({x:S,y:T,width:C,height:D})=>yg.slice3d(r.as3D(u,p,y),[T,S,0],[D,C,y]));return I})}async function ha(r,l){const u=St.getEnv().fetch,p=await u(r,l);if(!(p.status<400))throw new Error(`failed to fetch: (${p.status}) ${p.statusText}, from url: ${p.url}`);return p}async function SQ(r){const l=await ha(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return jS(u)}async function ZI(r){return(await ha(r)).json()}async function IQ(r){return new Float32Array(await(await ha(r)).arrayBuffer())}function bg(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const p=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(p,"");const y=r.split("/").filter(S=>S),g=r.endsWith(".json")?y[y.length-1]:u;let I=p+(r.endsWith(".json")?y.slice(0,y.length-1):y).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const jE=Je(Ze());async function QI(r,l){const{manifestUri:u,modelBaseUri:p}=bg(r,l);let y=await ZI(u);return jE.io.loadWeights(y,p)}function xQ(r,l,u=!1){const{width:p,height:y}=u?ea(l):l;return r.width=p,r.height=y,{width:p,height:y}}const Sr=Je(Ze());class Wn{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:p}=this.traversePropertyPath(r);u[p].dispose(),u[p]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Sr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Sr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Sr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await QI(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=St.getEnv(),{manifestUri:u,modelBaseUri:p}=bg(r,this.getDefaultModelName()),y=T=>Promise.all(T.map(C=>l(C).then(D=>D.buffer))),g=Sr.io.weightsLoaderFactory(y),I=JSON.parse((await l(u)).toString()),S=await g(I,p);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((y,g)=>{if(!y.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:y.nextObj,objProp:g,nextObj:y.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof Sr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Gc=Je(Ze());function os(r,l,u){return Gc.tidy(()=>{let p=Gc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Gc.add(p,l.bias),p})}const Bt=Je(Ze());function wg(r,l,u=!1){return Bt.tidy(()=>{const p=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):os(r,l.conv0,[2,2])),y=os(p,l.conv1,[1,1]),g=Bt.relu(Bt.add(p,y)),I=os(g,l.conv2,[1,1]);return Bt.relu(Bt.add(p,Bt.add(y,I)))})}function Uu(r,l,u=!1,p=!0){return Bt.tidy(()=>{const y=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):os(r,l.conv0,p?[2,2]:[1,1])),g=os(y,l.conv1,[1,1]),I=Bt.relu(Bt.add(y,g)),S=os(I,l.conv2,[1,1]),T=Bt.relu(Bt.add(y,Bt.add(g,S))),C=os(T,l.conv3,[1,1]);return Bt.relu(Bt.add(y,Bt.add(g,Bt.add(S,C))))})}const uo=Je(Ze());function ua(r,l,u="same",p=!1){return uo.tidy(()=>{const y=uo.add(uo.conv2d(r,l.filters,[1,1],u),l.bias);return p?uo.relu(y):y})}function Yn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const Lg=Je(Ze());function Yc(r,l){return function(u,p,y,g){const I=Lg.tensor4d(r(u*p*y*y),[y,y,u,p]),S=Lg.tensor1d(r(p));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const Sg=Je(Ze());function Ig(r,l){return function(u,p,y){const g=Sg.tensor2d(r(u*p),[u,p]),I=Sg.tensor1d(r(p));return l.push({paramPath:`${y}/weights`},{paramPath:`${y}/bias`}),{weights:g,bias:I}}}class ex{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const Bu=Je(Ze());function Hc(r,l){return function(u,p,y){const g=Bu.tensor4d(r(3*3*u),[3,3,u,1]),I=Bu.tensor4d(r(u*p),[1,1,u,p]),S=Bu.tensor1d(r(p));return l.push({paramPath:`${y}/depthwise_filter`},{paramPath:`${y}/pointwise_filter`},{paramPath:`${y}/bias`}),new ex(g,I,S)}}function qc(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),y=r(`${l}/bias`,1);return new ex(u,p,y)}}function gs(r,l){return function(u,p,y){const g=r[u];if(!jo(g,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${g}`);return l.push({originalPath:u,paramPath:y||u}),g}}function Hn(r){let l=r;function u(y){const g=l.slice(0,y);return l=l.slice(y),g}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function xg(r,l){const u=Yc(r,l),p=Hc(r,l);function y(I,S,T,C=!1){const D=C?u(I,S,3,`${T}/conv0`):p(I,S,`${T}/conv0`),_=p(S,S,`${T}/conv1`),A=p(S,S,`${T}/conv2`);return{conv0:D,conv1:_,conv2:A}}function g(I,S,T,C=!1){const{conv0:D,conv1:_,conv2:A}=y(I,S,T,C),B=p(S,S,`${T}/conv3`);return{conv0:D,conv1:_,conv2:A,conv3:B}}return{extractDenseBlock3Params:y,extractDenseBlock4Params:g}}function KE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractDenseBlock4Params:y}=xg(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2"),T=y(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:T}}}function Tg(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function Ag(r,l){const u=gs(r,l),p=Tg(u),y=qc(u);function g(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`);return{conv0:C,conv1:D,conv2:_}}function I(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`),A=y(`${S}/conv3`);return{conv0:C,conv1:D,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function XE(r){const l=[],{extractDenseBlock4Params:u}=Ag(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Yn(r,l),{params:p,paramMappings:l}}const po=Je(Ze());class vg extends Wn{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return po.tidy(()=>{const u=po.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(po.scalar(255));let g=Uu(y,l.dense0,!0);return g=Uu(g,l.dense1),g=Uu(g,l.dense2),g=Uu(g,l.dense3),g=po.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return XE(r)}extractParams(r){return KE(r)}}const jc=Je(Ze());function Mu(r,l){return jc.tidy(()=>jc.add(jc.matMul(r,l.weights),l.bias))}function JE(r,l,u){const p=[],{extractWeights:y,getRemainingWeights:g}=Hn(r),I=Ig(y,p),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:p,params:{fc:S}}}function ZE(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:p("fc")};return Yn(r,l),{params:y,paramMappings:l}}function Ng(r){const l={},u={};return Object.keys(r).forEach(p=>{const y=p.startsWith("fc")?u:l;y[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const QE=Je(Ze());class Cg extends Wn{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return QE.tidy(()=>{const u=r instanceof ho?this.faceFeatureExtractor.forwardInput(r):r;return Mu(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return JE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Ng(r);return this.faceFeatureExtractor.loadFromWeightMap(l),ZE(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,y=r.slice(0,r.length-p),g=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(y),this.extractClassifierParams(g)}}const tx=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class da{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);tx.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return tx.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Kc=Je(Ze());class nx extends Cg{constructor(r=new vg){super("FaceExpressionNet",r)}forwardInput(r){return Kc.tidy(()=>Kc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Wt(r))}async predictExpressions(r){const l=await Wt(r),u=await this.forwardInput(l),p=await Promise.all(Kc.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const y=p.map(g=>new da(g));return l.isBatchInput?y:y[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function sx(r){return r.expressions instanceof da}function Rg(r,l){const u={expressions:l};return Object.assign({},r,u)}function TQ(r,l,u=.1,p){const y=Array.isArray(l)?l:[l];y.forEach(g=>{const I=g instanceof da?g:sx(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),T=S.filter(_=>_.probability>u),C=$i(g)?g.detection.box.bottomLeft:p||new Qe(0,0),D=new Cc(T.map(_=>`${_.expression} (${Ko(_.probability)})`),C);D.draw(r)})}function pa(r){return $i(r)&&r.landmarks instanceof Gs&&r.unshiftedLandmarks instanceof Gs&&r.alignedRect instanceof Jt}function Xc(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),y=p.align(),{imageDims:g}=r.detection,I=new Jt(r.detection.score,y.rescale(g.reverse()),g),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class eD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:y,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=g||2,this.lineColor=y||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class tD{constructor(r,l={}){this.faceLandmarks=r,this.options=new eD(l)}draw(r){const l=is(r),{drawLines:u,drawPoints:p,lineWidth:y,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof wu&&(l.strokeStyle=g,l.lineWidth=y,fr(l,this.faceLandmarks.getJawOutline()),fr(l,this.faceLandmarks.getLeftEyeBrow()),fr(l,this.faceLandmarks.getRightEyeBrow()),fr(l,this.faceLandmarks.getNose()),fr(l,this.faceLandmarks.getLeftEye(),!0),fr(l,this.faceLandmarks.getRightEye(),!0),fr(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const T=C=>{l.beginPath(),l.arc(C.x,C.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(T)}}}function AQ(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const y=p instanceof Gs?p:pa(p)?p.landmarks:void 0;if(!y)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new tD(y).draw(r)})}const ix={};Pm(ix,{AnchorPosition:()=>Ui,DrawBox:()=>HS,DrawBoxOptions:()=>s2,DrawFaceLandmarks:()=>tD,DrawFaceLandmarksOptions:()=>eD,DrawTextField:()=>Cc,DrawTextFieldOptions:()=>jm,drawContour:()=>fr,drawDetections:()=>_J,drawFaceExpressions:()=>TQ,drawFaceLandmarks:()=>AQ});function vQ(r,l){const u=Yc(r,l),p=Hc(r,l);function y(I,S,T){const C=p(I,S,`${T}/separable_conv0`),D=p(S,S,`${T}/separable_conv1`),_=u(I,S,1,`${T}/expansion_conv`);return{separable_conv0:C,separable_conv1:D,expansion_conv:_}}function g(I,S){const T=p(I,I,`${S}/separable_conv0`),C=p(I,I,`${S}/separable_conv1`),D=p(I,I,`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:y,extractMainBlockParams:g}}function nD(r,l){const u=[],{extractWeights:p,getRemainingWeights:y}=Hn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:T}=vQ(p,u),C=g(3,32,3,"entry_flow/conv_in"),D=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:C,reduction_block_0:D,reduction_block_1:_},B={};_i(l,0,1).forEach(ge=>{B[`main_block_${ge}`]=T(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),P={reduction_block:ne,separable_conv:te};if(y().length!==0)throw new Error(`weights remaing after extract: ${y().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:B,exit_flow:P}}}function NQ(r,l){const u=gs(r,l),p=Tg(u),y=qc(u);function g(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=p(`${S}/expansion_conv`);return{separable_conv0:T,separable_conv1:C,expansion_conv:D}}function I(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=y(`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}}function sD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}=NQ(r,u),S=p("entry_flow/conv_in"),T=g("entry_flow/reduction_block_0"),C=g("entry_flow/reduction_block_1"),D={conv_in:S,reduction_block_0:T,reduction_block_1:C},_={};_i(l,0,1).forEach(te=>{_[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const A=g("exit_flow/reduction_block"),B=y("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:B};return Yn(r,u),{params:{entry_flow:D,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=Je(Ze());function iD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function rx(r,l,u=!0){let p=u?on.relu(r):r;return p=os(p,l.separable_conv0,[1,1]),p=os(on.relu(p),l.separable_conv1,[1,1]),p=on.maxPool(p,[3,3],[2,2],"same"),p=on.add(p,iD(r,l.expansion_conv,[2,2])),p}function CQ(r,l){let u=os(on.relu(r),l.separable_conv0,[1,1]);return u=os(on.relu(u),l.separable_conv1,[1,1]),u=os(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class rD extends Wn{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(on.scalar(256));let g=on.relu(iD(y,l.entry_flow.conv_in,[2,2]));return g=rx(g,l.entry_flow.reduction_block_0,!1),g=rx(g,l.entry_flow.reduction_block_1),_i(this._numMainBlocks,0,1).forEach(I=>{g=CQ(g,l.middle_flow[`main_block_${I}`])}),g=rx(g,l.exit_flow.reduction_block),g=on.relu(os(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return sD(r,this._numMainBlocks)}extractParams(r){return nD(r,this._numMainBlocks)}}function oD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),y=Ig(u,l),g=y(512,1,"fc/age"),I=y(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function aD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Yn(r,l),{params:y,paramMappings:l}}var Ir;(function(r){r.FEMALE="female",r.MALE="male"})(Ir||(Ir={}));const Gi=Je(Ze());class ox extends Wn{constructor(r=new rD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Gi.tidy(()=>{const u=r instanceof ho?this.faceFeatureExtractor.forwardInput(r):r,p=Gi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),y=Mu(p,l.fc.age).as1D(),g=Mu(p,l.fc.gender);return{age:y,gender:g}})}forwardInput(r){return Gi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Gi.softmax(u)}})}async forward(r){return this.forwardInput(await Wt(r))}async predictAgeAndGender(r){const l=await Wt(r),u=await this.forwardInput(l),p=Gi.unstack(u.age),y=Gi.unstack(u.gender),g=p.map((S,T)=>({ageTensor:S,genderTensor:y[T]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:T})=>{const C=(await S.data())[0],D=(await T.data())[0],_=D>.5,A=_?Ir.MALE:Ir.FEMALE,B=_?D:1-D;return S.dispose(),T.dispose(),{age:C,gender:A,genderProbability:B}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return oD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Ng(r);return this.faceFeatureExtractor.loadFromWeightMap(l),aD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),p=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(p)}}const ys=Je(Ze());class Og extends Cg{postProcess(r,l,u){const p=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),y=p.length;return ys.tidy(()=>{const g=(D,_)=>ys.stack([ys.fill([68],D,"float32"),ys.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(D,_)=>{const{width:A,height:B}=p[D];return _(A,B)?Math.abs(A-B)/2:0},S=D=>I(D,(_,A)=>_I(D,(_,A)=>A<_),C=r.mul(ys.fill([y,136],l,"float32")).sub(ys.stack(Array.from(Array(y),(D,_)=>g(S(_),T(_))))).div(ys.stack(Array.from(Array(y),(D,_)=>g(p[_].width,p[_].height))));return C})}forwardInput(r){return ys.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,p])=>({height:u,width:p})))})}async forward(r){return this.forwardInput(await Wt(r))}async detectLandmarks(r){const l=await Wt(r),u=ys.tidy(()=>ys.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(y,g)=>{const I=Array.from(await y.data()),S=I.filter((C,D)=>Vm(D)),T=I.filter((C,D)=>!Vm(D));return new wu(Array(68).fill(0).map((C,D)=>new Qe(S[D],T[D])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Pu extends Og{constructor(r=new vg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function cD(r){const l=[],{extractDenseBlock3Params:u}=Ag(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Yn(r,l),{params:p,paramMappings:l}}function lD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractDenseBlock3Params:y}=xg(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const mo=Je(Ze());class hD extends Wn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return mo.tidy(()=>{const u=mo.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(mo.scalar(255));let g=wg(y,l.dense0,!0);return g=wg(g,l.dense1),g=wg(g,l.dense2),g=mo.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return cD(r)}extractParams(r){return lD(r)}}class ax extends Og{constructor(r=new hD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class RQ extends Pu{}const Eg=Je(Ze());function uD(r,l){return Eg.add(Eg.mul(r,l.weights),l.biases)}const Jc=Je(Ze());function cx(r,l,u,p,y="same"){const{filters:g,bias:I}=l.conv;let S=Jc.conv2d(r,g,u,y);return S=Jc.add(S,I),S=uD(S,l.scale),p?Jc.relu(S):S}function dD(r,l){return cx(r,l,[1,1],!0)}function lx(r,l){return cx(r,l,[1,1],!1)}function Dg(r,l){return cx(r,l,[2,2],!0,"valid")}const bs=Je(Ze());function OQ(r,l){function u(S,T,C){const D=r(S),_=D.length/(T*C*C);if(FS(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${D.length}, numFilters: ${T}, filterSize: ${C}`);return bs.tidy(()=>bs.transpose(bs.tensor4d(D,[T,_,C,C]),[2,3,1,0]))}function p(S,T,C,D){const _=u(S,T,C),A=bs.tensor1d(r(T));return l.push({paramPath:`${D}/filters`},{paramPath:`${D}/bias`}),{filters:_,bias:A}}function y(S,T){const C=bs.tensor1d(r(S)),D=bs.tensor1d(r(S));return l.push({paramPath:`${T}/weights`},{paramPath:`${T}/biases`}),{weights:C,biases:D}}function g(S,T,C,D){const _=p(S,T,C,`${D}/conv`),A=y(T,`${D}/scale`);return{conv:_,scale:A}}function I(S,T,C,D,_=!1){const A=g((_?.5:1)*S,T,C,`${D}/conv1`),B=g(S,T,C,`${D}/conv2`);return{conv1:A,conv2:B}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function pD(r){const{extractWeights:l,getRemainingWeights:u}=Hn(r),p=[],{extractConvLayerParams:y,extractResidualLayerParams:g}=OQ(l,p),I=y(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),T=g(9216,32,3,"conv32_2"),C=g(9216,32,3,"conv32_3"),D=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),B=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),P=g(147456,128,3,"conv128_2"),ge=g(589824,256,3,"conv256_down",!0),ae=g(589824,256,3,"conv256_1"),Le=g(589824,256,3,"conv256_2"),ve=g(589824,256,3,"conv256_down_out"),Ve=bs.tidy(()=>bs.transpose(bs.tensor2d(l(256*128),[128,256]),[1,0]));if(p.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const at={conv32_down:I,conv32_1:S,conv32_2:T,conv32_3:C,conv64_down:D,conv64_1:_,conv64_2:A,conv64_3:B,conv128_down:ne,conv128_1:te,conv128_2:P,conv256_down:ge,conv256_1:ae,conv256_2:Le,conv256_down_out:ve,fc:Ve};return{params:at,paramMappings:p}}function EQ(r,l){const u=gs(r,l);function p(I){const S=u(`${I}/scale/weights`,1),T=u(`${I}/scale/biases`,1);return{weights:S,biases:T}}function y(I){const S=u(`${I}/conv/filters`,4),T=u(`${I}/conv/bias`,1),C=p(I);return{conv:{filters:S,bias:T},scale:C}}function g(I){return{conv1:y(`${I}/conv1`),conv2:y(`${I}/conv2`)}}return{extractConvLayerParams:y,extractResidualLayerParams:g}}function mD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=EQ(r,l),y=u("conv32_down"),g=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),T=p("conv64_down"),C=p("conv64_1"),D=p("conv64_2"),_=p("conv64_3"),A=p("conv128_down"),B=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),P=p("conv256_1"),ge=p("conv256_2"),ae=p("conv256_down_out"),Le=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!kS(Le))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Le}`);const ve={conv32_down:y,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:T,conv64_1:C,conv64_2:D,conv64_3:_,conv128_down:A,conv128_1:B,conv128_2:ne,conv256_down:te,conv256_1:P,conv256_2:ge,conv256_down_out:ae,fc:Le};return Yn(r,l),{params:ve,paramMappings:l}}const qn=Je(Ze());function gi(r,l){let u=dD(r,l.conv1);return u=lx(u,l.conv2),u=qn.add(u,r),u=qn.relu(u),u}function zu(r,l){let u=Dg(r,l.conv1);u=lx(u,l.conv2);let p=qn.avgPool(r,2,2,"valid");const y=qn.zeros(p.shape),g=p.shape[3]!==u.shape[3],I=p.shape[1]!==u.shape[1]||p.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const T=qn.zeros(S);u=qn.concat([u,T],1);const C=[...u.shape];C[2]=1;const D=qn.zeros(C);u=qn.concat([u,D],2)}return p=g?qn.concat([p,y],3):p,u=qn.add(p,u),u=qn.relu(u),u}const Fs=Je(Ze());class Vu extends Wn{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return Fs.tidy(()=>{const u=Fs.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(Fs.scalar(256));let g=Dg(y,l.conv32_down);g=Fs.maxPool(g,3,2,"valid"),g=gi(g,l.conv32_1),g=gi(g,l.conv32_2),g=gi(g,l.conv32_3),g=zu(g,l.conv64_down),g=gi(g,l.conv64_1),g=gi(g,l.conv64_2),g=gi(g,l.conv64_3),g=zu(g,l.conv128_down),g=gi(g,l.conv128_1),g=gi(g,l.conv128_2),g=zu(g,l.conv256_down),g=gi(g,l.conv256_1),g=gi(g,l.conv256_2),g=zu(g,l.conv256_down_out);const I=g.mean([1,2]),S=Fs.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Wt(r))}async computeFaceDescriptor(r){const l=await Wt(r),u=Fs.tidy(()=>Fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(y=>y.data()));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return mD(r)}extractParams(r){return pD(r)}}function DQ(r){const l=new Vu;return l.extractWeights(r),l}function kg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function kQ(r){return typeof r.age=="number"}function Fg(r,l){const u={age:l};return Object.assign({},r,u)}function FQ(r){return(r.gender===Ir.MALE||r.gender===Ir.FEMALE)&&vc(r.genderProbability)}function _g(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const yi=Je(Ze());function _Q(r,l){function u(T,C){const D=yi.tensor4d(r(3*3*T),[3,3,T,1]),_=yi.tensor1d(r(T)),A=yi.tensor1d(r(T)),B=yi.tensor1d(r(T)),ne=yi.tensor1d(r(T));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/batch_norm_scale`},{paramPath:`${C}/batch_norm_offset`},{paramPath:`${C}/batch_norm_mean`},{paramPath:`${C}/batch_norm_variance`}),{filters:D,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:B,batch_norm_variance:ne}}function p(T,C,D,_,A){const B=yi.tensor4d(r(T*C*D*D),[D,D,T,C]),ne=yi.tensor1d(r(C));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:B,bias:ne}}function y(T,C,D,_){const{filters:A,bias:B}=p(T,C,D,_,!0);return{filters:A,batch_norm_offset:B}}function g(T,C,D){const _=u(T,`${D}/depthwise_conv`),A=y(T,C,1,`${D}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const T=y(3,32,3,"mobilenetv1/conv_0"),C=g(32,64,"mobilenetv1/conv_1"),D=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),B=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),P=g(512,512,"mobilenetv1/conv_8"),ge=g(512,512,"mobilenetv1/conv_9"),ae=g(512,512,"mobilenetv1/conv_10"),Le=g(512,512,"mobilenetv1/conv_11"),ve=g(512,1024,"mobilenetv1/conv_12"),Ve=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,conv_8:P,conv_9:ge,conv_10:ae,conv_11:Le,conv_12:ve,conv_13:Ve}}function S(){const T=y(1024,256,1,"prediction_layer/conv_0"),C=y(256,512,3,"prediction_layer/conv_1"),D=y(512,128,1,"prediction_layer/conv_2"),_=y(128,256,3,"prediction_layer/conv_3"),A=y(256,128,1,"prediction_layer/conv_4"),B=y(128,256,3,"prediction_layer/conv_5"),ne=y(256,64,1,"prediction_layer/conv_6"),te=y(64,128,3,"prediction_layer/conv_7"),P=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ae=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Le=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),ve=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),at=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),pt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Vt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),qe=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),ln=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:P,class_predictor:ge},ws={box_encoding_predictor:ae,class_predictor:Le},Nr={box_encoding_predictor:ve,class_predictor:Ve},Cr={box_encoding_predictor:at,class_predictor:pt},ba={box_encoding_predictor:$t,class_predictor:Vt},hn={box_encoding_predictor:qe,class_predictor:ln};return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,box_predictor_0:bt,box_predictor_1:ws,box_predictor_2:Nr,box_predictor_3:Cr,box_predictor_4:ba,box_predictor_5:hn}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function fD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractMobilenetV1Params:y,extractPredictionLayerParams:g}=_Q(u,l),I=y(),S=g(),T=yi.tensor3d(u(5118*4),[1,5118,4]),C={extra_dim:T};if(l.push({paramPath:"output_layer/extra_dim"}),p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:C},paramMappings:l}}function WQ(r,l){const u=gs(r,l);function p(C,D,_){const A=u(`${C}/Conv2d_${D}_pointwise/weights`,4,`${_}/filters`),B=u(`${C}/Conv2d_${D}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:B}}function y(C){const D=`mobilenetv1/conv_${C}`,_=`MobilenetV1/Conv2d_${C}_depthwise`,A=`${D}/depthwise_conv`,B=`${D}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),te=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),P=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),ge=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ae=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:P,batch_norm_mean:ge,batch_norm_variance:ae},pointwise_conv:p("MobilenetV1",C,B)}}function g(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:y(1),conv_2:y(2),conv_3:y(3),conv_4:y(4),conv_5:y(5),conv_6:y(6),conv_7:y(7),conv_8:y(8),conv_9:y(9),conv_10:y(10),conv_11:y(11),conv_12:y(12),conv_13:y(13)}}function I(C,D){const _=u(`${C}/weights`,4,`${D}/filters`),A=u(`${C}/biases`,1,`${D}/bias`);return{filters:_,bias:A}}function S(C){const D=I(`Prediction/BoxPredictor_${C}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${C}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${C}/ClassPredictor`,`prediction_layer/box_predictor_${C}/class_predictor`);return{box_encoding_predictor:D,class_predictor:_}}function T(){return{conv_0:p("Prediction",0,"prediction_layer/conv_0"),conv_1:p("Prediction",1,"prediction_layer/conv_1"),conv_2:p("Prediction",2,"prediction_layer/conv_2"),conv_3:p("Prediction",3,"prediction_layer/conv_3"),conv_4:p("Prediction",4,"prediction_layer/conv_4"),conv_5:p("Prediction",5,"prediction_layer/conv_5"),conv_6:p("Prediction",6,"prediction_layer/conv_6"),conv_7:p("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:g,extractPredictionLayerParams:T}}function gD(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=WQ(r,l),y=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!gr(y))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${y}`);const g={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:y}};return Yn(r,l),{params:g,paramMappings:l}}const fo=Je(Ze());function qs(r,l,u){return fo.tidy(()=>{let p=fo.conv2d(r,l.filters,u,"same");return p=fo.add(p,l.batch_norm_offset),fo.clipByValue(p,0,6)})}const xr=Je(Ze()),$Q=.0010000000474974513;function UQ(r,l,u){return xr.tidy(()=>{let p=xr.depthwiseConv2d(r,l.filters,u,"same");return p=xr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,$Q),xr.clipByValue(p,0,6)})}function BQ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function yD(r,l){return xr.tidy(()=>{let u,p=qs(r,l.conv_0,[2,2]);const y=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(y.forEach((g,I)=>{const S=I+1,T=BQ(S);p=UQ(p,g.depthwise_conv,T),p=qs(p,g.pointwise_conv,[1,1]),S===11&&(u=p)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:p,conv11:u}})}function bD(r,l,u,p,y){const g=r.shape[0],I=Math.min(u,g),S=l.map((D,_)=>({score:D,boxIndex:_})).filter(D=>D.score>y).sort((D,_)=>_.score-D.score),T=D=>D<=p?1:0,C=[];return S.forEach(D=>{if(C.length>=I)return;const _=D.score;for(let A=C.length-1;A>=0;--A){const B=MQ(r,D.boxIndex,C[A]);if(B===0)continue;if(D.score*=T(B),D.score<=y)break}_===D.score&&C.push(D.boxIndex)}),C}function MQ(r,l,u){const p=r.arraySync(),y=Math.min(p[l][0],p[l][2]),g=Math.min(p[l][1],p[l][3]),I=Math.max(p[l][0],p[l][2]),S=Math.max(p[l][1],p[l][3]),T=Math.min(p[u][0],p[u][2]),C=Math.min(p[u][1],p[u][3]),D=Math.max(p[u][0],p[u][2]),_=Math.max(p[u][1],p[u][3]),A=(I-y)*(S-g),B=(D-T)*(_-C);if(A<=0||B<=0)return 0;const ne=Math.max(y,T),te=Math.max(g,C),P=Math.min(I,D),ge=Math.min(S,_),ae=Math.max(P-ne,0)*Math.max(ge-te,0);return ae/(A+B-ae)}const ke=Je(Ze());function PQ(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],p=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:p}}function zQ(r,l){const{sizes:u,centers:p}=PQ(r),y=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(y[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(y[0],ke.scalar(10)),u[0]),p[0]),S=ke.div(ke.mul(ke.exp(ke.div(y[3],ke.scalar(5))),u[1]),ke.scalar(2)),T=ke.add(ke.mul(ke.div(y[1],ke.scalar(10)),u[1]),p[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(T,S),ke.add(I,g),ke.add(T,S)]),[1,0])}function wD(r,l,u){return ke.tidy(()=>{const p=r.shape[0];let y=zQ(ke.reshape(ke.tile(u.extra_dim,[p,1,1]),[-1,4]),ke.reshape(r,[-1,4]));y=ke.reshape(y,[p,y.shape[0]/p,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[p,I.shape[1]]);const S=ke.unstack(y),T=ke.unstack(I);return{boxes:S,scores:T}})}const Gu=Je(Ze());function ma(r,l){return Gu.tidy(()=>{const u=r.shape[0],p=Gu.reshape(ua(r,l.box_encoding_predictor),[u,-1,1,4]),y=Gu.reshape(ua(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:y}})}const Yu=Je(Ze());function LD(r,l,u){return Yu.tidy(()=>{const p=qs(r,u.conv_0,[1,1]),y=qs(p,u.conv_1,[2,2]),g=qs(y,u.conv_2,[1,1]),I=qs(g,u.conv_3,[2,2]),S=qs(I,u.conv_4,[1,1]),T=qs(S,u.conv_5,[2,2]),C=qs(T,u.conv_6,[1,1]),D=qs(C,u.conv_7,[2,2]),_=ma(l,u.box_predictor_0),A=ma(r,u.box_predictor_1),B=ma(y,u.box_predictor_2),ne=ma(I,u.box_predictor_3),te=ma(T,u.box_predictor_4),P=ma(D,u.box_predictor_5),ge=Yu.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,B.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,P.boxPredictionEncoding],1),ae=Yu.concat([_.classPrediction,A.classPrediction,B.classPrediction,ne.classPrediction,te.classPrediction,P.classPrediction],1);return{boxPredictions:ge,classPredictions:ae}})}class bi{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const wi=Je(Ze());class Zc extends Wn{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return wi.tidy(()=>{const u=wi.cast(r.toBatchTensor(512,!1),"float32"),p=wi.sub(wi.mul(u,wi.scalar(.007843137718737125)),wi.scalar(1)),y=yD(p,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=LD(y.out,y.conv11,l.prediction_layer);return wD(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Wt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new bi(l),y=await Wt(r),{boxes:g,scores:I}=this.forwardInput(y),S=g[0],T=I[0];for(let ae=1;ae{const[Le,ve]=[Math.max(0,P[ae][0]),Math.min(1,P[ae][2])].map(pt=>pt*te),[Ve,at]=[Math.max(0,P[ae][1]),Math.min(1,P[ae][3])].map(pt=>pt*ne);return new Jt(C[ae],new bu(Ve,Le,at-Ve,ve-Le),{height:y.getInputHeight(0),width:y.getInputWidth(0)})});return S.dispose(),T.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return gD(r)}extractParams(r){return fD(r)}}function SD(r){const l=new Zc;return l.extractWeights(r),l}function VQ(r){return SD(r)}class GQ extends Zc{}const ID=.4,xD=[new Qe(.738768,.874946),new Qe(2.42204,2.65704),new Qe(4.30971,7.04493),new Qe(10.246,4.59428),new Qe(12.6868,11.8741)],TD=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],AD=[117.001,114.697,97.404],vD="tiny_yolov2_model",ND="tiny_yolov2_separable_conv_model";const Wg=r=>typeof r=="number";function hx(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!Wg(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>Wg(l.x)&&Wg(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(Wg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const js=Je(Ze());function Qc(r){return js.tidy(()=>{const l=js.mul(r,js.scalar(.10000000149011612));return js.add(js.relu(js.sub(r,l)),l)})}const Ks=Je(Ze());function Tr(r,l){return Ks.tidy(()=>{let u=Ks.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Ks.conv2d(u,l.conv.filters,[1,1],"valid"),u=Ks.sub(u,l.bn.sub),u=Ks.mul(u,l.bn.truediv),u=Ks.add(u,l.conv.bias),Qc(u)})}const go=Je(Ze());function Ar(r,l){return go.tidy(()=>{let u=go.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=go.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=go.add(u,l.bias),Qc(u)})}const ux=Je(Ze());function YQ(r,l){const u=Yc(r,l);function p(I,S){const T=ux.tensor1d(r(I)),C=ux.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:T,truediv:C}}function y(I,S,T){const C=u(I,S,3,`${T}/conv`),D=p(S,`${T}/bn`);return{conv:C,bn:D}}const g=Hc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}}function CD(r,l,u,p){const{extractWeights:y,getRemainingWeights:g}=Hn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:T,extractSeparableConvParams:C}=YQ(y,I);let D;if(l.withSeparableConvs){const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=l.isFirstLayerConv2d?S(_,A,3,"conv0"):C(_,A,"conv0"),Ve=C(A,B,"conv1"),at=C(B,ne,"conv2"),pt=C(ne,te,"conv3"),$t=C(te,P,"conv4"),Vt=C(P,ge,"conv5"),qe=ae?C(ge,ae,"conv6"):void 0,ln=Le?C(ae,Le,"conv7"):void 0,bt=S(Le||ae||ge,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Vt,conv6:qe,conv7:ln,conv8:bt}}else{const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=T(_,A,"conv0"),Ve=T(A,B,"conv1"),at=T(B,ne,"conv2"),pt=T(ne,te,"conv3"),$t=T(te,P,"conv4"),Vt=T(P,ge,"conv5"),qe=T(ge,ae,"conv6"),ln=T(ae,Le,"conv7"),bt=S(Le,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Vt,conv6:qe,conv7:ln,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:D,paramMappings:I}}function HQ(r,l){const u=gs(r,l);function p(S){const T=u(`${S}/sub`,1),C=u(`${S}/truediv`,1);return{sub:T,truediv:C}}function y(S){const T=u(`${S}/filters`,4),C=u(`${S}/bias`,1);return{filters:T,bias:C}}function g(S){const T=y(`${S}/conv`),C=p(`${S}/bn`);return{conv:T,bn:C}}const I=qc(u);return{extractConvParams:y,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function RD(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}=HQ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:p("conv8")}}else I={conv0:y("conv0"),conv1:y("conv1"),conv2:y("conv2"),conv3:y("conv3"),conv4:y("conv4"),conv5:y("conv5"),conv6:y("conv6"),conv7:y("conv7"),conv8:p("conv8")};return Yn(r,u),{params:I,paramMappings:u}}var dx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(dx||(dx={}));class vr{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=Je(Ze());class el extends Wn{constructor(r){super("TinyYolov2");hx(r),this._config=r}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(r,l){let u=Tr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=Tr(u,l.conv6),u=Tr(u,l.conv7),ua(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Qc(ua(r,l.conv0,"valid",!1)):Ar(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Ar(u,l.conv6):u,u=l.conv7?Ar(u,l.conv7):u,ua(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let p=Mt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?di(p,this.config.meanRgb):p,p=p.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Wt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new vr(l),y=await Wt(r),g=await this.forwardInput(y,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:y.getInputWidth(0),height:y.getInputHeight(0)},T=await this.extractBoxes(I,y.getReshapedInputDimensions(0),p);g.dispose(),I.dispose();const C=T.map(te=>te.box),D=T.map(te=>te.score),_=T.map(te=>te.classScore),A=T.map(te=>this.config.classes[te.label]),B=US(C.map(te=>te.rescale(u)),D,this.config.iouThreshold,!0),ne=B.map(te=>new Nc(D[te],_[te],A[te],C[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return RD(r,this.config)}extractParams(r){const l=this.config.filterSizes||el.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return CD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:y}=l,g=Math.max(p,y),I=g/p,S=g/y,T=r.shape[1],C=this.config.anchors.length,[D,_,A]=Mt.tidy(()=>{const P=r.reshape([T,T,C,this.boxEncodingSize]),ge=P.slice([0,0,0,0],[T,T,C,4]),ae=P.slice([0,0,0,4],[T,T,C,1]),Le=this.withClassScores?Mt.softmax(P.slice([0,0,0,5],[T,T,C,this.config.classes.length]),3):Mt.scalar(0);return[ge,ae,Le]}),B=[],ne=await _.array(),te=await D.array();for(let P=0;Pu){const ve=(ge+yu(te[P][ge][ae][0]))/T*I,Ve=(P+yu(te[P][ge][ae][1]))/T*S,at=Math.exp(te[P][ge][ae][2])*this.config.anchors[ae].x/T*I,pt=Math.exp(te[P][ge][ae][3])*this.config.anchors[ae].y/T*S,$t=ve-at/2,Vt=Ve-pt/2,qe={row:P,col:ge,anchor:ae},{classScore:ln,label:bt}=this.withClassScores?await this.extractPredictedClass(A,qe):{classScore:1,label:0};B.push({box:new gu($t,Vt,$t+at,Vt+pt),score:Le,classScore:Le*ln,label:bt,...qe})}}return D.dispose(),_.dispose(),A.dispose(),B}async extractPredictedClass(r,l){const{row:u,col:p,anchor:y}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][p][y][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}el.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Hu extends el{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:ID,classes:["face"]},r?{anchors:TD,meanRgb:AD}:{anchors:xD,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Jt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?ND:vD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function qQ(r,l=!0){const u=new Hu(l);return u.extractWeights(r),u}class px extends vr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Li{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const mx=Je(Ze());async function fa(r,l,u,p,y=({alignedRect:g})=>g){const g=r.map(T=>pa(T)?y(T):T.detection),I=p||(l instanceof mx.Tensor?await Vc(l,g):await zc(l,g)),S=await u(I);return I.forEach(T=>T instanceof mx.Tensor&&T.dispose()),S}async function tl(r,l,u,p,y){return fa([r],l,async g=>u(g[0]),p,y)}const OD=.4,ED=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],DD=[117.001,114.697,97.404];class qu extends el{constructor(){const r={withSeparableConvs:!0,iouThreshold:OD,classes:["face"],anchors:ED,meanRgb:DD,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Jt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const yt={ssdMobilenetv1:new Zc,tinyFaceDetector:new qu,tinyYolov2:new Hu,faceLandmark68Net:new Pu,faceLandmark68TinyNet:new ax,faceRecognitionNet:new Vu,faceExpressionNet:new nx,ageGenderNet:new ox},kD=(r,l)=>yt.ssdMobilenetv1.locateFaces(r,l),jQ=(r,l)=>yt.tinyFaceDetector.locateFaces(r,l),KQ=(r,l)=>yt.tinyYolov2.locateFaces(r,l),FD=r=>yt.faceLandmark68Net.detectLandmarks(r),XQ=r=>yt.faceLandmark68TinyNet.detectLandmarks(r),JQ=r=>yt.faceRecognitionNet.computeFaceDescriptor(r),ZQ=r=>yt.faceExpressionNet.predictExpressions(r),QQ=r=>yt.ageGenderNet.predictAgeAndGender(r),_D=r=>yt.ssdMobilenetv1.load(r),eee=r=>yt.tinyFaceDetector.load(r),tee=r=>yt.tinyYolov2.load(r),nee=r=>yt.faceLandmark68Net.load(r),see=r=>yt.faceLandmark68TinyNet.load(r),iee=r=>yt.faceRecognitionNet.load(r),ree=r=>yt.faceExpressionNet.load(r),oee=r=>yt.ageGenderNet.load(r),aee=_D,cee=kD,lee=FD;class WD extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Xu extends WD{async run(){const r=await this.parentTask,l=await fa(r,this.input,async u=>await Promise.all(u.map(p=>yt.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Rg(u,l[p]))}withAgeAndGender(){return new ju(this,this.input)}}class Ju extends WD{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>yt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Rg(r,l)}withAgeAndGender(){return new Ku(this,this.input)}}class il extends Xu{withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class rl extends Ju{withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class $D extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class ju extends $D{async run(){const r=await this.parentTask,l=await fa(r,this.input,async u=>await Promise.all(u.map(p=>yt.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:y,gender:g,genderProbability:I}=l[p];return Fg(_g(u,g,I),y)})}withFaceExpressions(){return new Xu(this,this.input)}}class Ku extends $D{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await tl(r,this.input,y=>yt.ageGenderNet.predictAgeAndGender(y),this.extractedFaces);return Fg(_g(r,u,p),l)}withFaceExpressions(){return new Ju(this,this.input)}}class nl extends ju{withFaceExpressions(){return new il(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class sl extends Ku{withFaceExpressions(){return new rl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class fx extends Li{constructor(r,l){super();this.parentTask=r;this.input=l}}class ga extends fx{async run(){const r=await this.parentTask,l=await fa(r,this.input,u=>Promise.all(u.map(p=>yt.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>kg(r[p],u))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}}class ya extends fx{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>yt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return kg(r,l)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}}const Zu=Je(Ze());class gx extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?yt.faceLandmark68TinyNet:yt.faceLandmark68Net}}class yx extends gx{async run(){const r=await this.parentTask,l=r.map(y=>y.detection),u=this.input instanceof Zu.Tensor?await Vc(this.input,l):await zc(this.input,l),p=await Promise.all(u.map(y=>this.landmarkNet.detectLandmarks(y)));return u.forEach(y=>y instanceof Zu.Tensor&&y.dispose()),r.map((y,g)=>Xc(y,p[g]))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class bx extends gx{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Zu.Tensor?await Vc(this.input,[l]):await zc(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(y=>y instanceof Zu.Tensor&&y.dispose()),Xc(r,p)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class wx extends Li{constructor(r,l=new bi){super();this.input=r;this.options=l}}class $g extends wx{async run(){const{input:r,options:l}=this,u=l instanceof px?p=>yt.tinyFaceDetector.locateFaces(p,l):l instanceof bi?p=>yt.ssdMobilenetv1.locateFaces(p,l):l instanceof vr?p=>yt.tinyYolov2.locateFaces(p,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>Zo({},u)))})}withFaceLandmarks(r=!1){return new yx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Xu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new ju(this.runAndExtendWithFaceDetections(),this.input)}}class Lx extends wx{async run(){const r=await new $g(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?Zo({},l):void 0)})}withFaceLandmarks(r=!1){return new bx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Ju(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ku(this.runAndExtendWithFaceDetection(),this.input)}}function hee(r,l=new bi){return new Lx(r,l)}function Ug(r,l=new bi){return new $g(r,l)}async function UD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Ug(r,new bi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function uee(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Ug(r,new vr(l)).withFaceLandmarks().withFaceDescriptors()}const dee=UD;function Sx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),p=Array.from(l);return Math.sqrt(u.map((y,g)=>y-p[g]).reduce((y,g)=>y+Math.pow(g,2),0))}class BD{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let p=1;const y=()=>`person ${p++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof Jo)return g;if(g instanceof Float32Array)return new Jo(y(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new Jo(y(),[g.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(r,l){return l.map(u=>Sx(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new Ym(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>Jo.fromJSON(u));return new BD(l,r.distanceThreshold)}}function pee(r){const l=new qu;return l.extractWeights(r),l}function MD(r,l){const{width:u,height:p}=new ms(l.width,l.height);if(u<=0||p<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:p})}`);if(Array.isArray(r))return r.map(y=>MD(y,{width:u,height:p}));if(pa(r)){const y=r.detection.forSize(u,p),g=r.unshiftedLandmarks.forSize(y.box.width,y.box.height);return Xc(Zo(r,y),g)}return $i(r)?Zo(r,r.detection.forSize(u,p)):r instanceof Gs||r instanceof Jt?r.forSize(u,p):r}var PD="0.8.5";const mee=Je(Ze()),fee=typeof process!="undefined",gee=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",yee={faceapi:PD,node:fee,browser:gee};export{ox as AgeGenderNet,gu as BoundingBox,_t as Box,Li as ComposableTask,ga as ComputeAllFaceDescriptorsTask,fx as ComputeFaceDescriptorsTaskBase,ya as ComputeSingleFaceDescriptorTask,yx as DetectAllFaceLandmarksTask,$g as DetectAllFacesTask,gx as DetectFaceLandmarksTaskBase,wx as DetectFacesTaskBase,bx as DetectSingleFaceLandmarksTask,Lx as DetectSingleFaceTask,ms as Dimensions,tx as FACE_EXPRESSION_LABELS,Jt as FaceDetection,GQ as FaceDetectionNet,nx as FaceExpressionNet,da as FaceExpressions,Pu as FaceLandmark68Net,ax as FaceLandmark68TinyNet,RQ as FaceLandmarkNet,Gs as FaceLandmarks,EJ as FaceLandmarks5,wu as FaceLandmarks68,Ym as FaceMatch,BD as FaceMatcher,Vu as FaceRecognitionNet,Ir as Gender,Hm as LabeledBox,Jo as LabeledFaceDescriptors,ho as NetInput,Wn as NeuralNetwork,Nc as ObjectDetection,Qe as Point,DJ as PredictedBox,bu as Rect,Zc as SsdMobilenetv1,bi as SsdMobilenetv1Options,qu as TinyFaceDetector,px as TinyFaceDetectorOptions,Hu as TinyYolov2,vr as TinyYolov2Options,dx as TinyYolov2SizeType,dee as allFaces,UD as allFacesSsdMobilenetv1,uee as allFacesTinyYolov2,qS as awaitMediaLoaded,jS as bufferToImage,JQ as computeFaceDescriptor,Rc as createCanvas,Su as createCanvasFromMedia,VQ as createFaceDetectionNet,DQ as createFaceRecognitionNet,SD as createSsdMobilenetv1,pee as createTinyFaceDetector,qQ as createTinyYolov2,Ug as detectAllFaces,FD as detectFaceLandmarks,XQ as detectFaceLandmarksTiny,lee as detectLandmarks,hee as detectSingleFace,ix as draw,St as env,Sx as euclideanDistance,Fg as extendWithAge,kg as extendWithFaceDescriptor,Zo as extendWithFaceDetection,Rg as extendWithFaceExpressions,Xc as extendWithFaceLandmarks,_g as extendWithGender,Vc as extractFaceTensors,zc as extractFaces,SQ as fetchImage,ZI as fetchJson,IQ as fetchNetWeights,ha as fetchOrThrow,is as getContext2dOrThrow,ea as getMediaDimensions,KS as imageTensorToCanvas,JI as imageToSquare,NJ as inverseSigmoid,WS as iou,Xm as isMediaElement,Lu as isMediaLoaded,kQ as isWithAge,$i as isWithFaceDetection,sx as isWithFaceExpressions,pa as isWithFaceLandmarks,FQ as isWithGender,oee as loadAgeGenderModel,aee as loadFaceDetectionModel,ree as loadFaceExpressionModel,nee as loadFaceLandmarkModel,see as loadFaceLandmarkTinyModel,iee as loadFaceRecognitionModel,_D as loadSsdMobilenetv1Model,eee as loadTinyFaceDetectorModel,tee as loadTinyYolov2Model,QI as loadWeightMap,cee as locateFaces,xQ as matchDimensions,$S as minBbox,yt as nets,US as nonMaxSuppression,di as normalize,BS as padToSquare,QQ as predictAgeAndGender,ZQ as recognizeFaceExpressions,MD as resizeResults,Qo as resolveInput,vJ as shuffleArray,yu as sigmoid,kD as ssdMobilenetv1,mee as tf,jQ as tinyFaceDetector,KQ as tinyYolov2,Wt as toNetInput,DS as utils,hx as validateConfig,yee as version}; + with dtype ${I.dtype}. `)});const p=(I,S)=>{const T=ft(l,u[0].shape)[0],C=fO(u.map(A=>A.shape),T);if(Zt(C)===0)return pI([],C);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const D=u.map(A=>A.shape);mO(D,T);const _=I.concat(u,T);return S(u),_},y=u,g={axis:l};return H.runKernelFunc(p,y,null,rf,g)}const Tn=V({concat_:I9});function x9(r){const l=M(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sigmoid(l);return y([g]),g},u,null,Uf)}const wI=V({sigmoid_:x9});function T9(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const y=(S,T)=>{const[C,D]=sg(p,l,u);return lO(p,C,D),T([p]),S.slice(p,C,D)},g={x:p},I={begin:l,size:u};return H.runKernelFunc(y,g,null,_f,I)}const Tt=V({slice_:T9});function A9(r,l,u){const p=M(r,"x","batchToSpaceND"),y=l.reduce((T,C)=>T*C);J(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(p.shape[0]%y===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${y}`);const g=T=>T.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,nf,S)}const LI=V({batchToSpaceND_:A9});function v9(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(D=>!(D>0)||D%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const D=u.shape.slice();for(;D.length=0;D--)if(y[D]===l[D])g[D]=1;else if(u.shape[D]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=g.map((D,_)=>D>1?_:-1).filter(D=>D>=0);if(I.length===0)return pi(u);const S=D=>D.tile(u,g),T={x:u},C={shape:l,inputShape:y};return H.runKernelFunc(S,T,null,sf,C)}const ag=V({broadcastTo_:v9});function N9(r,l,u,p,y="NHWC",g=[1,1],I){const S=M(r,"x","conv2d"),T=M(l,"filter","conv2d");let C=S,D=!1;S.rank===3&&(D=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(C.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${C.rank}.`),J(T.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${T.rank}.`),I!=null&&J(nn(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const _=y==="NHWC"?C.shape[3]:C.shape[1];J(_===T.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${T.shape[2]}.`),J(oo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(P,ge)=>{const ae=Uc(y),Le=mi(C.shape,T.shape,u,g,p,I,!1,ae),ve=P.conv2d(C,T,Le);return ge([C,T]),ve},B={x:C,filter:T},ne={strides:u,pad:p,dataFormat:y,dilations:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,of,ne);return D?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const SI=V({conv2d_:N9});function C9(r,l,u,p,y,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,T=l,C=!1;l.rank===3&&(C=!0,T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(T.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${T.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const D=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?T.shape[3]:T.shape[1];J(D===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${D}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(y),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const A=(P,ge)=>{const ae=1,Le=Uc(g),ve=mi(S,u.shape,p,ae,y,I,!1,Le),Ve=P.conv2dDerInput(T,u,ve);return ge([T,u]),Ve},B={dy:T,filter:u},ne={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,inputShape:S},te=H.runKernelFunc(A,B,null,af,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const gO=V({conv2DBackpropInput_:C9});function R9(r,l,u,p,y){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const T=g[4],C=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(T===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${T}) must match input depth for filter ${u.shape[3]}.`),J(C===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[4]}.`);const D=ne=>{const te=1,P=Eu(g,u.shape,p,te,y);return ne.conv3dDerInput(I,u,P)},_={dy:I,filter:u},A={pad:y,strides:p,inputShape:g},B=H.runKernelFunc(D,_,null,$2,A);return S?re(B,[B.shape[1],B.shape[2],B.shape[3],B.shape[4]]):B}const yO=V({conv3DBackpropInput_:R9});function O9(r){const l=M(r,"x","cos"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cos(l);return y([l]),g},u,null,cf)}const Du=V({cos_:O9});function E9(r){const l=M(r,"x","cosh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cosh(l);return y([l]),g},u,null,lf)}const II=V({cosh_:E9});function D9(r,l=0,u=!1,p=!1){const y=M(r,"x","cumsum"),g=(T,C)=>{const D=zi([l],y.rank);let _=y;D!=null&&(_=xn(y,D));const A=io(1,y.rank)[0];let B=T.cumsum(_,A,u,p);if(C([y]),D!=null){const ne=Wc(D);B=xn(B,ne)}return B},I={x:y},S={axis:l,exclusive:u,reverse:p};return H.runKernelFunc(g,I,null,hf,S)}const xI=V({cumsum_:D9});function Ot(r,l){const u=[];for(let p=0;p1)&&u.unshift(g)}return u}function ot(r,l){const u=[],p=Math.max(r.length,l.length);for(let y=0;yI.equal(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,j2)}const TI=V({equal_:k9});function F9(r,l,u){const p=M(l,"a","where"),y=M(u,"b","where"),g=M(r,"condition","where","bool"),I=ot(p.shape,y.shape),S=ag(p,I),T=ag(y,I);g.rank===1&&J(g.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,T.shape,"Error in where: ");const C=(_,A)=>{const B=_.select(g,S,T);return A([g]),B},D={condition:g,t:S,e:T};return H.runKernelFunc(C,D,null,Ff)}const Vn=V({where_:F9});function _9(r){const l=M(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(p=>p.zerosLike(l),u,null,Kf)}const Ke=V({zerosLike_:_9});function W9(r){const l=M(r,"x","exp"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.exp(l);return y([g]),g},u,null,df)}const Gn=V({exp_:W9});function $9(r,l=0){const u=null,p=M(r,"x","expandDims",u);J(l<=p.rank,()=>"Axis must be <= rank of the tensor");const y=p.shape.slice();return l<0&&(J(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),y.splice(l,0,1),re(p,y)}const Ds=V({expandDims_:$9});function U9(r,l){const u=null,p=M(r,"x","tile",u);J(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const y=(T,C)=>{const D=T.tile(p,l);return C([p]),D},g=[p],I={x:p},S={reps:l};return H.runKernelFunc(y,I,null,Yf,S,g)}const ia=V({tile_:U9});function B9(r,l,u,p="float32"){l==null&&(l=r);const y=Ou([r,l],p),g=r<=l?r:l;for(let S=0;Sy.fill(r,l,u),{},null,J2,p)}function M9(r){const l=M(r,"x","floor"),u={x:l};return H.runKernelFunc(p=>p.floor(l),u,null,pf)}const NI=V({floor_:M9});function bO(r,l,u){const p=r.shape[u],y=[];let g=1,I=1;for(let S=0;S{const D=ft(u,p.shape)[0],_=bO(p,y,D),A=T.gather(p,re(y,[y.size]),D);return C([p,y]),re(A,_.outputShape)};return H.runKernelFunc(S,g,null,ff,I)}const CI=V({gather_:P9});function z9(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.greater(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,eR)}const fi=V({greater_:z9});function V9(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.greaterEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,gf)}const wr=V({greaterEqual_:V9});function G9(r){const l=M(r,"input","imag"),u=y=>y.imag(l),p={input:l};return H.runKernelFunc(u,p,null,nR)}const ku=V({imag_:G9});function Y9(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=Lt(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.maximum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Sf)}const RI=V({maximum_:Y9});function Fe(r,l){if((Os(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&Os(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return Pi(r,u,p,l)}function H9(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.less(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,oR)}const OI=V({less_:H9});function q9(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.lessEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,aR)}const Lr=V({lessEqual_:q9});function j9(r){const l=M(r,"x","log"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log(l);return y([l]),g},u,null,bf)}const ao=V({log_:j9});function K9(r){const l=M(r,"x","log1p"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log1p(l);return y([l]),g},u,null,wf)}const EI=V({log1p_:K9});function cg(r){return H.customGrad(r)}function X9(r){const l=M(r,"x","neg"),u={x:l};return H.runKernelFunc(p=>p.neg(l),u,null,Af)}const It=V({neg_:X9});function J9(r,l=null,u=!1){const p=M(r,"x","max"),y=(S,T)=>{const C=ft(l,p.shape);let D=C;const _=zi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=io(D.length,A.rank));const B=S.max(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=rs(ne.shape,ft(l,p.shape));ne=re(ne,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(y,g,null,Lf,I)}const ra=V({max_:J9});function Z9(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=Lt(u,p);const y=(I,S)=>{const T=I.subtract(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Gf)}const Be=V({sub_:Z9});function Q9(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Ie(p,"int32"));const y=(S,T)=>{T([p]);const C=ft(l,p.shape),D=zi(C,p.rank);let _=C,A=p;D!=null&&(A=xn(p,D),_=io(_.length,p.rank));let B=S.sum(A,_);if(u){const ne=rs(B.shape,C);B=re(B,ne)}return B},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,Mf,I)}const _e=V({sum_:Q9});function eZ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),y=ft(l,p.shape),g=ra(p,y,!0),I=Be(p,g),S=Gn(I),T=_e(S,y),C=ao(T),D=vt(re(g,C.shape),C);if(u){const _=rs(D.shape,y);return re(D,_)}return D}const DI=V({logSumExp_:eZ});function tZ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");ot(u.shape,p.shape);const y={a:u,b:p};return H.runKernelFunc(g=>g.logicalAnd(u,p),y,null,cR)}const oa=V({logicalAnd_:tZ});function nZ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(p=>p.logicalNot(l),u,null,lR)}const kI=V({logicalNot_:nZ});function ks(r,l="float32"){if(l==="complex64"){const p=ks(r,"float32"),y=ks(r,"float32");return Mi(p,y)}const u=na(Zt(r),l);return H.makeTensor(u,r,l)}function Vi(r,l="float32"){if(l==="complex64"){const p=Vi(r,"float32"),y=ks(r,"float32");return Mi(p,y)}const u=Jm(Zt(r),l);return H.makeTensor(u,r,l)}function sZ(r,l=null,u=!1){const p=M(r,"x","mean"),y=ft(l,p.shape),g=dO(p.shape,y),I=g[1],S=Zt(I),T={x:p},C={axis:l,keepDims:u},D=()=>{const A=Fe(S),B=A.dtype===p.dtype?p:Ie(p,A.dtype),ne=Me(B,A);return _e(ne,l,u)},_=cg(A=>{const B=H.runKernelFunc(D,T,null,yR,C),ne=te=>{const P=A.shape.slice();y.forEach(Le=>{P[Le]=1});const ge=re(te,P),ae=Me(le(ge,Vi(A.shape,"float32")),S);return ae};return{value:B,gradFunc:ne}});return _(p)}const FI=V({mean_:sZ});function iZ(r,l=null,u=!1){const p=M(r,"x","min"),y=(S,T)=>{const C=ft(l,p.shape);let D=C;const _=zi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=io(D.length,p.rank));const B=S.min(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=rs(ne.shape,C);ne=re(B,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,If,I)}const lg=V({min_:iZ});function rZ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=Lt(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.minimum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,xf)}const _I=V({minimum_:rZ});function oZ(r){const l=M(r,"x","square"),u={},p=[l],y=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,p,y)}const gt=V({square_:oZ});function aZ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=I=>I.notEqual(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,LR)}const WI=V({notEqual_:aZ});function cZ(r){const l=M(r,"input","real"),u=y=>y.real(l),p={input:l};return H.runKernelFunc(u,p,null,CR)}const Bc=V({real_:cZ});function lZ(r,l,u=0){const p=M(r,"x","pad");if(p.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const y=(S,T)=>(T([p]),S.pad(p,l,u)),g={paddings:l,constantValue:u},I={x:p};return H.runKernelFunc(y,I,null,vf,g)}const $I=V({pad_:lZ});function hZ(r,l,u){const p=M(r,"x","spaceToBatchND");J(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(p.shape.reduce((S,T,C)=>C>0&&C<=l.length?S&&(T+u[C-1][0]+u[C-1][1])%l[C-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const y=S=>S.spaceToBatchND(p,l,u),g={x:p},I={blockShape:l,paddings:u};return H.runKernelFunc(y,g,null,Pf,I)}const UI=V({spaceToBatchND_:hZ});function uZ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=Lt(u,p);const y={a:u,b:p},g=(I,S)=>{const T=I.pow(u,p);return S([u,p,T]),T};return H.runKernelFunc(g,y,null,Nf)}const aa=V({pow_:uZ});function co(r,l){Oc(r);const u=br(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return Pi(r,p,u,l)}function hg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const y=()=>{const I=r===l,S=r1;if(I||S||T)return ks([0],p);const C=Math.abs(Math.ceil((l-r)/u)),D=na(C,p);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):y.relu(l)),p={x:l};return H.runKernelFunc(u,p,null,Cf)}const Fu=V({relu_:dZ});function pZ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ft(l,u.shape);if(u.rank===0)return pi(u);const T=I.reverse(u,S);return re(T,u.shape)},y={x:u},g={dims:l};return H.runKernelFunc(p,y,null,Df,g)}const Mc=V({reverse_:pZ});function mZ(r){const l=M(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.rsqrt(l);return y([l]),g},u,null,kf)}const BI=V({rsqrt_:mZ});function fZ(r){const l=M(r,"x","sin"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sin(l);return y([l]),g},u,null,Wf)}const MI=V({sin_:fZ});function gZ(r){const l=M(r,"x","sinh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sinh(l);return y([l]),g},u,null,$f)}const PI=V({sinh_:gZ});function yZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=r.as2D(y,p),I=u.fft(g);return I.reshape(r.shape)},l,null,X2)}const _u=V({fft_:yZ});function bZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=re(r,[y,p]),I=u.ifft(g);return re(I,r.shape)},l,null,tR)}const Pc=V({ifft_:bZ});function wZ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const y=re(r,[u,l]);p=Pc(y)}else{const y=[u,2*(l-1)],g=re(Bc(r),[u,l]),I=re(ku(r),[u,l]),S=Mc(Tt(g,[0,1],[u,l-2]),1),T=le(Mc(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),C=Tn([g,S],1),D=Tn([I,T],1),_=re(Mi(C,D),[y[0],y[1]]);p=Pc(_)}if(p=Bc(p),r.rank===3&&r.shape[0]!==0){const y=p,g=r.shape[0];p=re(p,[g,p.shape[0]/g,p.shape[1]]),y.dispose()}return p}const zI=V({irfft_:wZ});function wO(r,l,u=0){let p=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const y=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(y<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,T)=>T>0?S+T:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),p=l}return p}function LZ(r,l,u=0){const p=M(r,"x","split"),y=(S,T)=>{const C=ft(u,p.shape)[0],D=wO(p,l,C);return S.split(p,D,C)},g={x:p},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(y,g,null,zf,I)}const lo=V({split_:LZ});function SZ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const p=r.size/u;let y;if(l!=null&&l0),te=r.shape.map(P=>P);te[r.shape.length-1]=l,y=Tt(r,ne,te),u=l}else if(l!=null&&l>u){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-u,y=Tn([r,ks(ne)],r.shape.length-1),u=l}else y=r;const g=Ke(y),I=re(Mi(y,g),[p,u]),S=_u(I),T=Math.floor(u/2)+1,C=Bc(S),D=ku(S),_=lo(C,[T,u-T],C.shape.length-1),A=lo(D,[T,u-T],D.shape.length-1),B=y.shape.slice();return B[y.shape.length-1]=T,re(Mi(_[0],A[0]),B)}const Wu=V({rfft_:SZ});function IZ(r){const l=M(r,"x","sqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sqrt(l);return y([l]),g},u,null,Bf)}const fs=V({sqrt_:IZ});function xZ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=Lt(u,p),ot(u.shape,p.shape);const y=(S,T)=>{const C=S.squaredDifference(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,Vf,I)}const VI=V({squaredDifference_:xZ});function TZ(r,l){const u=M(r,"x","squeeze");return re(u,o2(u.shape,l).newShape)}const GI=V({squeeze_:TZ});function AZ(r,l=0){const u=ng(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Ds(u[0],l);const p=u[0].rank,y=u[0].shape,g=u[0].dtype;J(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(y,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Ds(S,l));return Tn(I,l)}const Ys=V({stack_:AZ});function vZ(r,l=0){const u=M(r,"x","step"),p={x:u},y={alpha:l};return H.runKernelFunc(g=>g.step(u,l),p,null,Xf,y)}const ca=V({step_:vZ});function la(r,l,u){if(Oc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=br(r,u);if(p.length!==2&&p.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Pi(r,l,p,u)}function NZ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),y=M(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:p,segmentIds:y},I={numSegments:u},S=(T,C)=>{const D=T.unsortedSegmentSum(p,y,u);return C([y]),D};return H.runKernelFunc(S,g,null,jf,I)}const YI=V({unsortedSegmentSum_:NZ});function CZ(r,l=0){const u=M(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const p={value:u},y={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,p,null,qf,y)}const $u=V({unstack_:CZ});function RZ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const y=LO(r,l,u);let g=y.shape;if(p){const I=ft(u,r.shape);g=rs(y.shape,I)}return re(y,g)}function LO(r,l,u=null){if(r.rank===0)return zn(r);if(r.rank!==1&&u===null)return LO(re(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(zn(r),u);if(l===Infinity)return ra(zn(r),u);if(l===-Infinity)return lg(zn(r),u);if(l==="euclidean"||l===2)return fs(_e(aa(zn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ra(_e(zn(r),u[0]),u[1]-1);if(l===Infinity)return ra(_e(zn(r),u[1]),u[0]);if(l===-Infinity)return lg(_e(zn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return fs(_e(gt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const ug=V({norm_:RZ});function SO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function dg(r,l,u){const p=1-r%2,y=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(T.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${T.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const C=g==="NHWC"?S.shape[3]:S.shape[1],D=g==="NHWC"?T.shape[3]:T.shape[1];J(C===u[2],()=>`Error in conv2dDerFilter: depth of input ${C}) must match input depth in filter (${u[2]}.`),J(D===u[3],()=>`Error in conv2dDerFilter: depth of dy (${D}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(y),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const _=ne=>{const te=1,P=Uc(g),ge=mi(S.shape,u,p,te,y,I,!1,P);return ne.conv2dDerFilter(S,T,ge)},A={x:S,dy:T},B={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,F2,B)}const pg=V({conv2DBackpropFilter_:OZ});function EZ(r,l,u,p,y,g=[1,1],I){let S=r;r.rank===3&&(S=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let T=l;T.rank===3&&(T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=A=>{const B=mi(r.shape,u,p,g,y,I,!0);return A.depthwiseConv2DDerFilter(S,T,B)},D={x:S,dy:T},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(C,D,null,M2,_)}const IO=V({depthwiseConv2dNativeBackpropFilter_:EZ});function DZ(r,l,u,p,y,g=[1,1],I){let S=l,T=!1;l.rank===3&&(T=!0,S=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=B=>{const ne=mi(r,u.shape,p,g,y,I,!0);return B.depthwiseConv2DDerInput(S,u,ne)},D={dy:S,filter:u},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(C,D,null,P2,_);return T?re(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const xO=V({depthwiseConv2dNativeBackpropInput_:DZ});function kZ(r){return dg(r,.54,.46)}const TO=V({hammingWindow_:kZ});function FZ(r){return dg(r,.5,.5)}const mg=V({hannWindow_:FZ});function _Z(r,l,u,p=!1,y=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(p)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${C},4] but had shape ${S.shape}.`),J(T.rank===1&&T.shape[0]===C,()=>`Error in cropAndResize: boxInd must be have size [${C}] but had shape ${S.shape}.`),J(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),J(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),J(y==="bilinear"||y==="nearest",()=>`method must be bilinear or nearest, but was ${y}`);const D=ne=>ne.cropAndResize(I,S,T,p,y,g),_={image:I,boxes:S,boxInd:T},A={method:y,extrapolationValue:g,cropSize:p},B=H.runKernelFunc(D,_,null,U2,A);return B}const vO=V({cropAndResize_:$Z});function UZ(r){const l=M(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=H.runKernel(Z2,u,{});return p}const NO=V({flipLeftRight_:UZ});function BZ(r,l,u=0,p=.5){const y=M(r,"image","rotateWithOffset","float32");J(y.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${y.rank}.`);const g={image:y},I={radians:l,fillValue:u,center:p},S=H.runKernel(PR,g,I);return S}const CO=V({rotateWithOffset_:BZ});function Hs(r,l,u,p,y,g){p==null&&(p=.5),y==null&&(y=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g}}function MZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Hs(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T={maxOutputSize:u,iouThreshold:p,scoreThreshold:y};return H.runKernelFunc(C=>C.nonMaxSuppression(g,I,u,p,y),{boxes:g,scores:I},null,SR,T)}const RO=V({nonMaxSuppression_:MZ});function OO(r,l,u){const p=PZ(r,l,u),y=p<0?-(p+1):p;r.splice(y,0,l)}function PZ(r,l,u){return VZ(r,l,u||zZ)}function zZ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?p=g+1:(y=g,I=!S)}return I?p:-p-1}function EO(r,l,u,p,y){return HI(r,l,u,p,y,0).selectedIndices}function DO(r,l,u,p,y,g){return HI(r,l,u,p,y,0,!1,g,!0)}function kO(r,l,u,p,y,g){return HI(r,l,u,p,y,g,!0)}function HI(r,l,u,p,y,g,I=!1,S=!1,T=!1){const C=[];for(let P=0;Py&&C.push({score:l[P],boxIndex:P,suppressBeginIndex:0});C.sort(FO);const D=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const P=C.pop(),{score:ge,boxIndex:ae,suppressBeginIndex:Le}=P;if(ge=Le;--Ve){const at=GZ(r,ae,_[Ve]);if(at>=p){ve=!0;break}if(P.score=P.score*YZ(p,D,at),P.score<=y)break}P.suppressBeginIndex=_.length,ve||(P.score===ge?(_.push(ae),A.push(P.score)):P.score>y&&OO(C,P,FO))}const B=_.length,ne=u-B;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const te={selectedIndices:co(_,"int32")};return I&&(te.selectedScores=co(A,"float32")),T&&(te.validOutputs=Fe(B,"int32")),te}function GZ(r,l,u){const p=r.subarray(l*4,l*4+4),y=r.subarray(u*4,u*4+4),g=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),T=Math.max(p[1],p[3]),C=Math.min(y[0],y[2]),D=Math.min(y[1],y[3]),_=Math.max(y[0],y[2]),A=Math.max(y[1],y[3]),B=(S-g)*(T-I),ne=(_-C)*(A-D);if(B<=0||ne<=0)return 0;const te=Math.max(g,C),P=Math.max(I,D),ge=Math.min(S,_),ae=Math.min(T,A),Le=Math.max(ge-te,0)*Math.max(ae-P,0);return Le/(B+ne-Le)}function YZ(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function FO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function HZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Hs(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T=await Promise.all([g.data(),I.data()]),C=T[0],D=T[1],_=EO(C,D,u,p,y);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const _O=HZ;function qZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Hs(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C={boxes:I,scores:S},D={maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g},_=H.runKernel(xR,C,D);return{selectedIndices:_[0],selectedScores:_[1]}}const WO=V({nonMaxSuppressionWithScore_:qZ});async function jZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Hs(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C=await Promise.all([I.data(),S.data()]),D=C[0],_=C[1],A=kO(D,_,u,p,y,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const $O=jZ;function KZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Hs(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,A={boxes:I,scores:S},B={maxOutputSize:C,iouThreshold:D,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(IR,A,B);return{selectedIndices:ne[0],validOutputs:ne[1]}}const UO=V({nonMaxSuppressionPadded_:KZ});async function XZ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Hs(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,[A,B]=await Promise.all([I.data(),S.data()]),ne=DO(A,B,C,D,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const BO=XZ;function JZ(r,l,u=!1){const p=M(r,"images","resizeBilinear");J(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T=(A,B)=>(B([y]),A.resizeBilinear(y,I,S,u)),C={images:y},D={alignCorners:u,size:l},_=H.runKernelFunc(T,C,null,Ef,D);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const MO=V({resizeBilinear_:JZ});function ZZ(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");J(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T={images:y},C={alignCorners:u,size:l},D=(A,B)=>(B([y]),A.resizeNearestNeighbor(y,I,S,u)),_=H.runKernelFunc(D,T,null,Of,C);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const PO=V({resizeNearestNeighbor_:ZZ});function QZ(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");J(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const y=p.shape,[g,I]=p.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=re(hg(0,g,1,"int32"),[-1,1]),T=hg(0,I,1,"int32"),C=Be(S,T),D=oa(Lr(C,Fe(+l,"int32")),wr(C,Fe(-u,"int32"))),_=ks([g,I],p.dtype);return re(Ys($u(re(p,[-1,g,I])).map(A=>Vn(D,A,_))),y)}const zO=V({bandPart_:QZ});function eQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const y=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${y})`)}else l=!0,r=lo(r,r.shape[0],0).map(y=>GI(y,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],p=r;for(let y=0;y{let g=p[y];if(y>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return GO(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((T,C)=>T*C),p=$u(re(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),y=[],g=[];p.forEach(T=>{const[C,D]=GO(T,l);y.push(C),g.push(D)});const I=re(Ys(y,0),r.shape),S=re(Ys(g,0),r.shape);return[I,S]}}function GO(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],p=r.shape[1];let y=AI(u),g=pi(r);const I=la([[1]],[1,1]);let S=pi(I);const T=u>=p?p:u;for(let C=0;C{const B=Tt(g,[C,C],[u-C,1]),ne=ug(B),te=Tt(g,[C,C],[1,1]),P=Vn(fi(te,0),la([[-1]]),la([[1]])),ge=Be(te,le(P,ne)),ae=Me(B,ge);ae.shape[0]===1?S=pi(I):S=Tn([I,Tt(ae,[1,0],[ae.shape[0]-1,ae.shape[1]])],0);const Le=It(Me(yn(P,ge),ne)),ve=Tt(g,[C,0],[u-C,p]),Ve=le(Le,S),at=xn(S);if(C===0)g=Be(ve,yn(Ve,yn(at,ve)));else{const Vt=Be(ve,yn(Ve,yn(at,ve)));g=Tn([Tt(g,[0,0],[C,p]),Vt],0)}const pt=xn(Ve),$t=Tt(y,[0,C],[u,y.shape[1]-C]);if(C===0)y=Be($t,yn(yn($t,S),pt));else{const Vt=Be($t,yn(yn($t,S),pt));y=Tn([Tt(y,[0,0],[u,C]),Vt],1)}return[S,g,y]}),uO([D,_,A])}return!l&&u>p&&(y=Tt(y,[0,0],[u,p]),g=Tt(g,[0,0],[p,p])),[y,g]})}const YO=V({qr_:tQ});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function nQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let y=null;l!=null&&(y=M(l,"weights","computeWeightedLoss"));const g=y==null?p:le(p,y);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(y==null)return FI(g);{const I=p.size/y.size,S=Me(_e(g),_e(y));return I>1?Me(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(y==null)return Me(_e(g),Fe(p.size));{const I=le(y,Vi(p.shape)),S=Ie(_e(WI(I,Fe(0))),"float32");return Me(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const Dn=V({computeWeightedLoss_:nQ});function sQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),tn(y.shape,g.shape,"Error in absoluteDifference: ");const S=zn(Be(y,g));return Dn(S,I,p)}const HO=V({absoluteDifference_:sQ});function iQ(r,l,u,p,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const T=Fe(1),C=Be(T,_e(le(g,I),u,!0));return Dn(C,S,y)}const qO=V({cosineDistance_:iQ});function rQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){let y=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),tn(y.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);y=Be(le(Fe(2),y),S);const T=Fu(Be(S,le(y,g)));return Dn(T,I,p)}const jO=V({hingeLoss_:rQ});function oQ(r,l,u,p=1,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const T=Fe(p),C=zn(Be(I,g)),D=_I(C,T),_=Be(C,D),A=vt(le(Fe(.5),gt(D)),le(T,_));return Dn(A,S,y)}const KO=V({huberLoss_:oQ});function aQ(r,l,u,p=1e-7,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const T=Fe(1),C=Fe(p),D=It(le(g,ao(vt(I,C)))),_=le(Be(T,g),ao(vt(Be(T,I),C))),A=Be(D,_);return Dn(A,S,y)}const XO=V({logLoss_:aQ});function cQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),tn(y.shape,g.shape,"Error in meanSquaredError: ");const S=VI(y,g);return Dn(S,I,p)}const JO=V({meanSquaredError_:cQ});function lQ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const y=Fu(p),g=le(p,u),I=EI(Gn(It(zn(p))));return vt(Be(y,g),I)}function hQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(.5);g=vt(le(g,Be(D,C)),le(_,C))}const T=lQ(g,I);return Dn(T,S,y)}const ZO=V({sigmoidCrossEntropy_:hQ});function uQ(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const p=cg((y,g,I)=>{const S=!0,T=DI(g,[u],S),C=Be(Ie(g,"float32"),T);I([y,C]);const D=It(le(C,y)),_=_e(D,[u]),A=(B,ne)=>{const[te,P]=ne,ge=rs(B.shape,[u]);return[le(re(B,ge),Be(Ie(te,"float32"),Gn(P))),le(re(B,ge),Be(Gn(P),Ie(te,"float32")))]};return{value:_,gradFunc:A}});return p(r,l)}function dQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(D,C)),Me(C,_))}const T=uQ(g,I);return Dn(T,S,y)}const QO=V({softmaxCrossEntropy_:dQ});const xve={fft:_u,ifft:Pc,rfft:Wu,irfft:zI},Cve={hammingWindow:TO,hannWindow:mg,frame:fg,stft:AO},e1={flipLeftRight:NO,resizeNearestNeighbor:PO,resizeBilinear:MO,rotateWithOffset:CO,cropAndResize:vO,nonMaxSuppression:RO,nonMaxSuppressionAsync:_O,nonMaxSuppressionWithScore:WO,nonMaxSuppressionWithScoreAsync:$O,nonMaxSuppressionPadded:UO,nonMaxSuppressionPaddedAsync:BO},Vve={bandPart:zO,gramSchmidt:VO,qr:YO},Qve={absoluteDifference:HO,computeWeightedLoss:Dn,cosineDistance:qO,hingeLoss:jO,huberLoss:KO,logLoss:XO,meanSquaredError:JO,sigmoidCrossEntropy:ZO,softmaxCrossEntropy:QO};const t1=1.7580993408473768,n1=1.0507009873554805;const s1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,ca(Ie(u,"float32"),-1))}}};const i1={kernelName:y2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=gt(Ie(u,"float32")),y=fs(Be(Fe(1),p));return It(Me(r,y))}}}};const r1={kernelName:b2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(Be(gt(Ie(u,"float32")),1));return Me(r,p)}}}};const o1={kernelName:Dc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Ot(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Ot(p.shape,y);return T.length>0&&(S=_e(S,T)),re(S,p.shape)};return{a:g,b:I}}};const a1={kernelName:w2,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,y)=>{u[y]=()=>r.clone()}),u}};const c1={kernelName:L2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Ke(u)}}};const l1={kernelName:S2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Ke(u)}}};const h1={kernelName:I2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,fs(Be(Fe(1),gt(Ie(u,"float32")))))}}};const u1={kernelName:x2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(vt(Fe(1),gt(Ie(u,"float32"))));return Me(r,p)}}}};const d1={kernelName:v2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=vt(gt(u),gt(p));let T=le(r,Me(p,S));const C=Ot(u.shape,y);return C.length>0&&(T=_e(T,C)),re(T,u.shape)},I=()=>{const S=vt(gt(u),gt(p));let T=It(le(r,Me(u,S)));const C=Ot(p.shape,y);return C.length>0&&(T=_e(T,C)),re(T,p.shape)};return{a:g,b:I}}};const p1={kernelName:T2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(gt(Ie(u,"float32")),1))}}};const m1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Be(Fe(1),gt(Ie(u,"float32"))))}}};function pQ(r,l,u,p,y=[1,1,1],g,I){const S=M(r,"dy","avgPool3dBackprop"),T=M(l,"input","avgPool3dBackprop");let C=S,D=T,_=!1;T.rank===4&&(_=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),D=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]])),J(C.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),J(D.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${D.rank}.`),J(oo(p,y),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${y}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=P=>{const ge=og(D.shape,u,p,y,g,I);return P.avgPool3dBackprop(C,D,ge)},B={dy:C,input:D},ne={filterSize:u,strides:p,dilations:y,pad:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,O2,ne);return _?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const f1=V({avgPool3dBackprop_:pQ});const g1={kernelName:R2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,dilations:I,pad:S,dimRoundingMode:T}=u,C=I==null?[1,1,1]:I;return{x:()=>f1(r,p,y,g,C,S,T)}}};function mQ(r,l,u,p,y){const g=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,T=g,C=!1;I.rank===3&&(C=!0,S=re(I,[1,I.shape[0],I.shape[1],I.shape[2]]),T=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(T.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${T.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const D=ne=>{const te=rg(S.shape,u,p,1,y);return ne.avgPoolBackprop(T,S,te)},_={dy:T,input:S},A={filterSize:u,strides:p,pad:y},B=H.runKernelFunc(D,_,null,C2,A);return C?re(B,[B.shape[1],B.shape[2],B.shape[3]]):B}const y1=V({avgPoolBackprop_:mQ});const b1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,pad:I}=u;return{x:()=>y1(r,p,y,g,I)}}};const w1={kernelName:tf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,y]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>yn(r,y,!1,!0),b:()=>yn(p,r,!0,!1)}:!g&&I?{a:()=>yn(r,y,!1,!1),b:()=>yn(r,p,!0,!1)}:g&&!I?{a:()=>yn(y,r,!1,!0),b:()=>yn(p,r,!1,!1)}:{a:()=>yn(y,r,!0,!0),b:()=>yn(r,p,!0,!0)}}};const L1={kernelName:nf,gradFunc:(r,l,u)=>{const{blockShape:p,crops:y}=u;return{x:()=>UI(r,p,y)}}};const S1={kernelName:sf,gradFunc:(r,l,u)=>{const p=u,y=p.inputShape,g=p.shape,I=Array.from(g);for(let T=y.length-1;T>=0;T--)if(y[T]===g[T])I[T]=1;else if(y[T]!==1)throw new Error(`broadcastTo(): [${y}] cannot be broadcast to [${g}].`);const S=[];for(let T=0;T1&&S.push(T);return{x:()=>_e(r,S,!0)}}};const I1={kernelName:kc,gradFunc:r=>({x:()=>r.clone()})};const x1={kernelName:E2,gradFunc:r=>({x:()=>Ke(r)})};const T1={kernelName:D2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:y,clipValueMax:g}=u;return{x:()=>Vn(oa(wr(p,y),Lr(p,g)),r,Ke(r))}}};const A1={kernelName:rf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(T=>T.shape),{axis:y}=u,g=ft(y,l[0].shape)[0],I=p.map(T=>T[g]),S=lo(r,I,g);return S.map(T=>()=>T)}};const v1={kernelName:of,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{dilations:g,strides:I,pad:S,dataFormat:T}=u;return J(ro(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>gO(p.shape,r,y,I,S,T),filter:()=>pg(p,r,y.shape,I,S,T)}}};const N1={kernelName:af,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:T}=u;return{dy:()=>SI(r,y,g,I,S,1,T),filter:()=>pg(r,p,y.shape,g,I,S,T)}}};function fQ(r,l,u,p,y){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=D=>{const _=1,A=Eu(g.shape,u,p,_,y);return D.conv3dDerFilter(g,I,A)},T={x:g,dy:I},C={strides:p,pad:y,filterShape:u};return H.runKernelFunc(S,T,null,W2,C)}const C1=V({conv3DBackpropFilter_:fQ});const R1={kernelName:_2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g}=u;J(ro(p),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${p}'`);const[I,S]=l;return{x:()=>yO(I.shape,r,S,y,g),filter:()=>C1(I,r,S.shape,y,g)}}};const O1={kernelName:cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(MI(Ie(u,"float32"))),r)}}};const E1={kernelName:lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(PI(Ie(u,"float32")),r)}}};const D1={kernelName:hf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:y,exclusive:g,reverse:I}=u;return{x:()=>{const S=zi([y],p.rank);let T=xI(r,y,g,!I);return S!=null&&(T=xn(T,S)),T}}}};const k1={kernelName:B2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g,dimRoundingMode:I}=u,S=p==null?[1,1]:p;J(ro(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[T,C]=l;return J(T.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${T.rank}.`),J(C.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${C.rank}.`),J(T.shape[3]===C.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${T.shape[3]}) must match the inChannels dimension in filter ${C.shape[2]}.`),J(oo(y,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${y} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>xO(T.shape,r,C,y,g,p,I),filter:()=>IO(T,r,C.shape,y,g,p,I)}}};const F1={kernelName:z2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,g={x:p,filter:y,dy:r},I={x:p,filter:y,dy:r};return{x:()=>H.runKernel(V2,g,u),filter:()=>H.runKernel(G2,I,u)}}};const _1={kernelName:uf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Ot(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=gt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const W1={kernelName:Y2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=g=>g.eluDer(r,u),y={dy:r,y:u};return{x:()=>H.runKernelFunc(p,y,null,H2)}}};const $1={kernelName:q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Gn(It(gt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,p)}}};const U1={kernelName:df,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const B1={kernelName:K2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Gn(u))}}};const M1={kernelName:pf,gradFunc:r=>({x:()=>Ke(r)})};const P1={kernelName:mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Ot(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=gt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const z1={kernelName:Q2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[y,g,I,S]=l,T=S==null?Fe(1):S,C=Ot(g.shape,y.shape),D=[];if(g.rank===1){for(let ve=0;veg.rank===1?re(le(le(r,ia(re(B,[1,1,1,g.shape[0]]),D)),T),y.shape):re(le(le(r,B),T),y.shape),P=()=>{let ve=le(le(B,Fe(-1)),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ge=()=>{let ve=le(le(ne,_),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ae=()=>{const ve=le(_,B);let Ve=le(r,ve);return g.rank===1&&(Ve=_e(Ve,C)),re(Ve,g.shape)},Le=()=>{let ve=r;return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)};return{x:te,mean:P,variance:ge,scale:ae,offset:Le}}};const Y1={kernelName:ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,y]=l,{axis:g}=u,I=ft(g,p.shape)[0],S=()=>{const T=p.shape,C=y.size,D=T.slice(0,I),_=D.length,A=T.slice(g,T.length).slice(1),B=A.length,ne=V1(0,_),te=V1(_+1,_+1+B),P=G1([D,[C],A]),ge=re(r,P),ae=re(y,[C]),Le=G1([[_],ne,te]),ve=xn(ge,Le);let Ve=YI(ve,ae,p.shape[I]);const at=Wc(Le);return Ve=xn(Ve,at),Ve};return{x:S,indices:()=>y}}};function V1(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>Ke(u),b:()=>Ke(p)}}};const q1={kernelName:yf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const j1={kernelName:sR,gradFunc:r=>({x:()=>Ke(r)})};const K1={kernelName:iR,gradFunc:r=>({x:()=>Ke(r)})};const X1={kernelName:rR,gradFunc:r=>({x:()=>Ke(r)})};const J1={kernelName:wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(u,1))}}};const Z1={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Ie(u,"float32"))}}};const Q1={kernelName:hR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:y}=u;return{logits:()=>{const g=!0,I=Gn(p);return Be(r,le(_e(r,y,g),I))}}}};function gQ(r,l,u,p=5,y=1,g=1,I=.5){const S=D=>D.LRNGrad(u,r,l,p,y,g,I),T={x:r,y:l,dy:u},C={depthRadius:p,bias:y,alpha:g,beta:I};return H.runKernelFunc(S,T,null,dR,C)}const eE=V({localResponseNormalizationBackprop_:gQ});const tE={kernelName:uR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{depthRadius:g,bias:I,alpha:S,beta:T}=u;return{x:()=>eE(p,y,r,g,I,S,T)}}};function gg(r,l,u,p){return l.rank{const y=le(r,Ie(TI(u,l),r.dtype));return y}}}const qI={kernelName:Lf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:y}=p,g=l[0],I=l[1],S=ft(y,g.shape),T=gg(r,I,g,S);return{x:()=>T.x()}}};const nE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(wr(u,p),"float32")),g=()=>le(r,Ie(OI(u,p),"float32"));return{a:y,b:g}}};function yQ(r,l,u,p,y,g=[1,1,1],I,S){const T=M(r,"dy","maxPool3dBackprop"),C=M(l,"input","maxPool3dBackprop"),D=M(u,"output","maxPool3dBackprop");let _=T,A=C,B=D,ne=!1;C.rank===4&&(ne=!0,_=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]]),A=re(C,[1,C.shape[0],C.shape[1],C.shape[2],C.shape[3]]),B=re(D,[1,D.shape[0],D.shape[1],D.shape[2],D.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(B.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${B.rank}.`),J(oo(y,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${y} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Le=>{const ve=og(A.shape,p,y,g,I,S);return Le.maxPool3dBackprop(_,A,B,ve)},P={dy:_,input:A,output:B},ge={filterSize:p,strides:y,dilations:g,pad:I,dimRoundingMode:S},ae=H.runKernelFunc(te,P,null,gR,ge);return ne?re(ae,[ae.shape[1],ae.shape[2],ae.shape[3],ae.shape[4]]):ae}const sE=V({maxPool3dBackprop_:yQ});const iE={kernelName:fR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,dilations:S,pad:T,dimRoundingMode:C}=u,D=S==null?[1,1,1]:S;return{x:()=>sE(r,p,y,g,I,D,T,C)}}};function bQ(r,l,u,p,y,g,I){const S=M(r,"dy","maxPoolBackprop"),T=M(l,"input","maxPoolBackprop"),C=M(u,"output","maxPoolBackprop");J(T.rank===S.rank,()=>`Rank of input (${T.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(T.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${T.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const D=B=>{const ne=rg(T.shape,p,y,1,g,I);return B.maxPoolBackprop(S,T,C,ne)},_={dy:S,input:T,output:C},A={filterSize:p,strides:y,pad:g,dimRoundingMode:I};return H.runKernelFunc(D,_,null,mR,A)}const rE=V({maxPoolBackprop_:bQ});const oE={kernelName:pR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>rE(r,p,y,g,I,S)}}};const aE={kernelName:If,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:y}=p,[g,I]=l,S=ft(y,g.shape),T=gg(r,I,g,S);return{x:()=>T.x()}}};const cE={kernelName:xf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(Lr(u,p),"float32")),g=()=>le(r,Ie(fi(u,p),"float32"));return{a:y,b:g}}};const lE={kernelName:bR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const hE={kernelName:wR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Ot(u.shape,y);return S.length>0?re(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(NI(Me(u,p)))),T=Ot(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const uE={kernelName:Tf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=le(r,Ie(p,"float32")),T=Ot(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),T=Ot(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const dE={kernelName:Af,gradFunc:r=>({x:()=>It(r)})};const pE={kernelName:AR,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>ks(u.shape,"float32")}}};const mE={kernelName:TR,gradFunc:r=>({x:()=>Ke(r)})};const jI={kernelName:vf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const fE={kernelName:Nf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,y]=l,g=u,I=p,S=ot(g.shape,I.shape),T=()=>{const D=Ie(I,"float32");let _=le(r,le(D,aa(g,Be(D,Fe(1)))));const A=Ot(g.shape,S);return A.length>0&&(_=_e(_,A)),re(_,g.shape)},C=()=>{const D=fi(g,0),_=Vn(D,ao(g),Ke(g));let A=le(r,le(y,_));const B=Ot(I.shape,S);return B.length>0&&(A=_e(A,B)),re(A,I.shape)};return{a:T,b:C}}};const gE={kernelName:vR,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,y=fi(u,0);return{x:()=>Vn(y,r,le(r,p)),alpha:()=>{let g=Vn(y,Ke(r),le(r,u));const I=Ot(p.shape,r.shape);return I.length>0&&(g=_e(g,I)),re(g,p.shape)}}}};const yE={kernelName:RR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,It(gt(u)))}}};const bE={kernelName:DR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Lr(u,6),ca(u));return{x:()=>le(r,Ie(p,"float32"))}}};const wE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(ca(u),"float32"))}}};const LE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>re(r,u.shape)}}};const SE={kernelName:Ef,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeBilinearBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,ER,u);return{images:I}}};const IE={kernelName:Of,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeNearestNeighborBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,OR,u);return{images:I}}};const xE={kernelName:Df,gradFunc:(r,l,u)=>{const{dims:p}=u,y=ft(p,r.shape);return{x:()=>Mc(r,y)}}};const TE={kernelName:kR,gradFunc:r=>({x:()=>Ke(r)})};const AE={kernelName:kf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Me(r,le(aa(u,1.5),2)))}}};const vE={kernelName:Ff,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Ke(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(kI(u),r.dtype))}}};const NE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fi(u,Fe(0)),y=Fe(t1),g=Fe(n1),I=le(r,g),S=le(le(r,y),Gn(Ie(u,"float32")));return Vn(p,I,S)}}}};const CE={kernelName:Uf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const RE={kernelName:_R,gradFunc:r=>({x:()=>Ke(r)})};const OE={kernelName:Wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Du(Ie(u,"float32")),r)}}};const EE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(II(Ie(u,"float32")),r)}}};const DE={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:y,size:g}=u,I=p.shape,[S,T]=sg(p,y,g),C=[];for(let D=0;D$I(r,C)}}};const kE={kernelName:$R,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:y}=u,g=!0,I=le(r,p);return{logits:()=>Be(I,le(_e(I,[y],g),p))}}};const FE={kernelName:WR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,wI(u))}}};const KI={kernelName:Pf,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:y}=u;return{x:()=>LI(r,p,y)}}};const XI={kernelName:zf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>Tn(r,p)}}};const _E={kernelName:Bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,le(fs(Ie(u,"float32")),2))}}};const WE={kernelName:UR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const $E={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=Fe(2),g=()=>le(r,le(y,Be(u,p))),I=()=>le(r,le(y,Be(p,u)));return{a:g,b:I}}};const UE={kernelName:Xf,gradFunc:r=>({x:()=>Ke(r)})};const BE={kernelName:Gf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Ot(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Ot(p.shape,y);return T.length>0&&(S=_e(S,T)),re(It(S),p.shape)};return{a:g,b:I}}};const ME={kernelName:Mf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,y=p.shape.slice(),{axis:g}=u,I=ft(g,p.shape);I.forEach(C=>{y[C]=1});const S=re(r,y),T=le(S,Vi(p.shape,"float32"));return{x:()=>T}}};const PE={kernelName:BR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,gt(Du(u)))}}};const zE={kernelName:MR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),gt(u)),r)}}};const VE={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:y}=u,g=()=>{let I=Ke(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:y}=p,g=Wc(y);return{x:()=>xn(r,g)}}};const YE={kernelName:qf,gradFunc:(r,l,u)=>{const p=u,{axis:y}=p;return{value:()=>Ys(r,y)}}};const HE={kernelName:jf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>wQ(r,u);return{x:p}}};function wQ(r,l){const u=RI(l,Ke(l)),p=CI(r,u);let y=wr(l,Fe(0,"int32"));const g=p.rank-y.rank;for(let S=0;S({x:()=>Ke(r)})};const LQ=[s1,i1,r1,o1,a1,c1,l1,h1,u1,d1,p1,m1,g1,b1,w1,L1,S1,I1,x1,T1,A1,N1,v1,R1,O1,E1,D1,k1,F1,_1,W1,$1,U1,B1,P1,M1,z1,Y1,H1,q1,j1,K1,X1,J1,Z1,Q1,tE,qI,qI,nE,iE,oE,aE,cE,lE,hE,uE,dE,pE,mE,jI,jI,fE,gE,yE,bE,wE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,EE,DE,kE,FE,KI,KI,XI,XI,_E,$E,WE,UE,BE,ME,PE,zE,VE,GE,YE,HE,qE];for(const r of LQ)VR(r);function JI(r,l,u=!1){const{Image:p,Canvas:y}=St.getEnv();if(!(r instanceof p||r instanceof y))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ea(r),I=l/Math.max(g.height,g.width),S=I*g.width,T=I*g.height,C=Rc({width:l,height:l}),D=r instanceof y?r:Su(r),_=Math.abs(S-T)/2,A=u&&S{if(gr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Rs(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const y=u instanceof St.getEnv().Canvas?u:Su(u);this._canvases[p]=y,this._inputDimensions[p]=[y.height,y.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 _i(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return _S({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,hO(()=>{const u=_i(this.batchSize,0,1).map(y=>{const g=this.getInput(y);if(g instanceof En){let I=Rs(g)?g:g.expandDims();return I=BS(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=e1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof St.getEnv().Canvas)return gI.fromPixels(JI(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${y}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),p=Ys(u.map(y=>Ie(y,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Wt(r){if(r instanceof ho)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=y=>Array.isArray(r)?` at input index ${y}:`:"",p=l.map(Qo);return p.forEach((y,g)=>{if(!Xm(y)&&!gr(y)&&!Rs(y))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Rs(y)){const I=y.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(y=>Xm(y)&&qS(y))),new ho(p,Array.isArray(r))}async function zc(r,l){const{Canvas:u}=St.getEnv();let p=r;if(!(r instanceof u)){const I=await Wt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await KS(S)}const y=is(p),g=l.map(I=>I instanceof Jt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return g.map(({x:I,y:S,width:T,height:C})=>{const D=Rc({width:T,height:C});return is(D).putImageData(y.getImageData(I,S,T,C),0,0),D})}const yg=Je(Ze());async function Vc(r,l){if(!gr(r)&&!Rs(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Rs(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return yg.tidy(()=>{const[u,p,y]=r.shape.slice(Rs(r)?1:0),g=l.map(S=>S instanceof Jt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=g.map(({x:S,y:T,width:C,height:D})=>yg.slice3d(r.as3D(u,p,y),[T,S,0],[D,C,y]));return I})}async function ha(r,l){const u=St.getEnv().fetch,p=await u(r,l);if(!(p.status<400))throw new Error(`failed to fetch: (${p.status}) ${p.statusText}, from url: ${p.url}`);return p}async function SQ(r){const l=await ha(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return jS(u)}async function ZI(r){return(await ha(r)).json()}async function IQ(r){return new Float32Array(await(await ha(r)).arrayBuffer())}function bg(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const p=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(p,"");const y=r.split("/").filter(S=>S),g=r.endsWith(".json")?y[y.length-1]:u;let I=p+(r.endsWith(".json")?y.slice(0,y.length-1):y).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const jE=Je(Ze());async function QI(r,l){const{manifestUri:u,modelBaseUri:p}=bg(r,l);let y=await ZI(u);return jE.io.loadWeights(y,p)}function xQ(r,l,u=!1){const{width:p,height:y}=u?ea(l):l;return r.width=p,r.height=y,{width:p,height:y}}const Sr=Je(Ze());class Wn{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:p}=this.traversePropertyPath(r);u[p].dispose(),u[p]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Sr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Sr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Sr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await QI(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=St.getEnv(),{manifestUri:u,modelBaseUri:p}=bg(r,this.getDefaultModelName()),y=T=>Promise.all(T.map(C=>l(C).then(D=>D.buffer))),g=Sr.io.weightsLoaderFactory(y),I=JSON.parse((await l(u)).toString()),S=await g(I,p);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((y,g)=>{if(!y.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:y.nextObj,objProp:g,nextObj:y.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof Sr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Gc=Je(Ze());function os(r,l,u){return Gc.tidy(()=>{let p=Gc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Gc.add(p,l.bias),p})}const Bt=Je(Ze());function wg(r,l,u=!1){return Bt.tidy(()=>{const p=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):os(r,l.conv0,[2,2])),y=os(p,l.conv1,[1,1]),g=Bt.relu(Bt.add(p,y)),I=os(g,l.conv2,[1,1]);return Bt.relu(Bt.add(p,Bt.add(y,I)))})}function Uu(r,l,u=!1,p=!0){return Bt.tidy(()=>{const y=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):os(r,l.conv0,p?[2,2]:[1,1])),g=os(y,l.conv1,[1,1]),I=Bt.relu(Bt.add(y,g)),S=os(I,l.conv2,[1,1]),T=Bt.relu(Bt.add(y,Bt.add(g,S))),C=os(T,l.conv3,[1,1]);return Bt.relu(Bt.add(y,Bt.add(g,Bt.add(S,C))))})}const uo=Je(Ze());function ua(r,l,u="same",p=!1){return uo.tidy(()=>{const y=uo.add(uo.conv2d(r,l.filters,[1,1],u),l.bias);return p?uo.relu(y):y})}function Yn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const Lg=Je(Ze());function Yc(r,l){return function(u,p,y,g){const I=Lg.tensor4d(r(u*p*y*y),[y,y,u,p]),S=Lg.tensor1d(r(p));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const Sg=Je(Ze());function Ig(r,l){return function(u,p,y){const g=Sg.tensor2d(r(u*p),[u,p]),I=Sg.tensor1d(r(p));return l.push({paramPath:`${y}/weights`},{paramPath:`${y}/bias`}),{weights:g,bias:I}}}class ex{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const Bu=Je(Ze());function Hc(r,l){return function(u,p,y){const g=Bu.tensor4d(r(3*3*u),[3,3,u,1]),I=Bu.tensor4d(r(u*p),[1,1,u,p]),S=Bu.tensor1d(r(p));return l.push({paramPath:`${y}/depthwise_filter`},{paramPath:`${y}/pointwise_filter`},{paramPath:`${y}/bias`}),new ex(g,I,S)}}function qc(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),y=r(`${l}/bias`,1);return new ex(u,p,y)}}function gs(r,l){return function(u,p,y){const g=r[u];if(!jo(g,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${g}`);return l.push({originalPath:u,paramPath:y||u}),g}}function Hn(r){let l=r;function u(y){const g=l.slice(0,y);return l=l.slice(y),g}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function xg(r,l){const u=Yc(r,l),p=Hc(r,l);function y(I,S,T,C=!1){const D=C?u(I,S,3,`${T}/conv0`):p(I,S,`${T}/conv0`),_=p(S,S,`${T}/conv1`),A=p(S,S,`${T}/conv2`);return{conv0:D,conv1:_,conv2:A}}function g(I,S,T,C=!1){const{conv0:D,conv1:_,conv2:A}=y(I,S,T,C),B=p(S,S,`${T}/conv3`);return{conv0:D,conv1:_,conv2:A,conv3:B}}return{extractDenseBlock3Params:y,extractDenseBlock4Params:g}}function KE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractDenseBlock4Params:y}=xg(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2"),T=y(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:T}}}function Tg(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function Ag(r,l){const u=gs(r,l),p=Tg(u),y=qc(u);function g(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`);return{conv0:C,conv1:D,conv2:_}}function I(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`),A=y(`${S}/conv3`);return{conv0:C,conv1:D,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function XE(r){const l=[],{extractDenseBlock4Params:u}=Ag(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Yn(r,l),{params:p,paramMappings:l}}const po=Je(Ze());class vg extends Wn{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return po.tidy(()=>{const u=po.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(po.scalar(255));let g=Uu(y,l.dense0,!0);return g=Uu(g,l.dense1),g=Uu(g,l.dense2),g=Uu(g,l.dense3),g=po.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return XE(r)}extractParams(r){return KE(r)}}const jc=Je(Ze());function Mu(r,l){return jc.tidy(()=>jc.add(jc.matMul(r,l.weights),l.bias))}function JE(r,l,u){const p=[],{extractWeights:y,getRemainingWeights:g}=Hn(r),I=Ig(y,p),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:p,params:{fc:S}}}function ZE(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:p("fc")};return Yn(r,l),{params:y,paramMappings:l}}function Ng(r){const l={},u={};return Object.keys(r).forEach(p=>{const y=p.startsWith("fc")?u:l;y[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const QE=Je(Ze());class Cg extends Wn{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return QE.tidy(()=>{const u=r instanceof ho?this.faceFeatureExtractor.forwardInput(r):r;return Mu(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return JE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Ng(r);return this.faceFeatureExtractor.loadFromWeightMap(l),ZE(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,y=r.slice(0,r.length-p),g=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(y),this.extractClassifierParams(g)}}const tx=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class da{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);tx.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return tx.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Kc=Je(Ze());class nx extends Cg{constructor(r=new vg){super("FaceExpressionNet",r)}forwardInput(r){return Kc.tidy(()=>Kc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Wt(r))}async predictExpressions(r){const l=await Wt(r),u=await this.forwardInput(l),p=await Promise.all(Kc.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const y=p.map(g=>new da(g));return l.isBatchInput?y:y[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function sx(r){return r.expressions instanceof da}function Rg(r,l){const u={expressions:l};return Object.assign({},r,u)}function TQ(r,l,u=.1,p){const y=Array.isArray(l)?l:[l];y.forEach(g=>{const I=g instanceof da?g:sx(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),T=S.filter(_=>_.probability>u),C=$i(g)?g.detection.box.bottomLeft:p||new Qe(0,0),D=new Cc(T.map(_=>`${_.expression} (${Ko(_.probability)})`),C);D.draw(r)})}function pa(r){return $i(r)&&r.landmarks instanceof Gs&&r.unshiftedLandmarks instanceof Gs&&r.alignedRect instanceof Jt}function Xc(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),y=p.align(),{imageDims:g}=r.detection,I=new Jt(r.detection.score,y.rescale(g.reverse()),g),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class eD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:y,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=g||2,this.lineColor=y||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class tD{constructor(r,l={}){this.faceLandmarks=r,this.options=new eD(l)}draw(r){const l=is(r),{drawLines:u,drawPoints:p,lineWidth:y,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof wu&&(l.strokeStyle=g,l.lineWidth=y,fr(l,this.faceLandmarks.getJawOutline()),fr(l,this.faceLandmarks.getLeftEyeBrow()),fr(l,this.faceLandmarks.getRightEyeBrow()),fr(l,this.faceLandmarks.getNose()),fr(l,this.faceLandmarks.getLeftEye(),!0),fr(l,this.faceLandmarks.getRightEye(),!0),fr(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const T=C=>{l.beginPath(),l.arc(C.x,C.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(T)}}}function AQ(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const y=p instanceof Gs?p:pa(p)?p.landmarks:void 0;if(!y)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new tD(y).draw(r)})}const ix={};Pm(ix,{AnchorPosition:()=>Ui,DrawBox:()=>HS,DrawBoxOptions:()=>s2,DrawFaceLandmarks:()=>tD,DrawFaceLandmarksOptions:()=>eD,DrawTextField:()=>Cc,DrawTextFieldOptions:()=>jm,drawContour:()=>fr,drawDetections:()=>_J,drawFaceExpressions:()=>TQ,drawFaceLandmarks:()=>AQ});function vQ(r,l){const u=Yc(r,l),p=Hc(r,l);function y(I,S,T){const C=p(I,S,`${T}/separable_conv0`),D=p(S,S,`${T}/separable_conv1`),_=u(I,S,1,`${T}/expansion_conv`);return{separable_conv0:C,separable_conv1:D,expansion_conv:_}}function g(I,S){const T=p(I,I,`${S}/separable_conv0`),C=p(I,I,`${S}/separable_conv1`),D=p(I,I,`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:y,extractMainBlockParams:g}}function nD(r,l){const u=[],{extractWeights:p,getRemainingWeights:y}=Hn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:T}=vQ(p,u),C=g(3,32,3,"entry_flow/conv_in"),D=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:C,reduction_block_0:D,reduction_block_1:_},B={};_i(l,0,1).forEach(ge=>{B[`main_block_${ge}`]=T(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),P={reduction_block:ne,separable_conv:te};if(y().length!==0)throw new Error(`weights remaing after extract: ${y().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:B,exit_flow:P}}}function NQ(r,l){const u=gs(r,l),p=Tg(u),y=qc(u);function g(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=p(`${S}/expansion_conv`);return{separable_conv0:T,separable_conv1:C,expansion_conv:D}}function I(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=y(`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}}function sD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}=NQ(r,u),S=p("entry_flow/conv_in"),T=g("entry_flow/reduction_block_0"),C=g("entry_flow/reduction_block_1"),D={conv_in:S,reduction_block_0:T,reduction_block_1:C},_={};_i(l,0,1).forEach(te=>{_[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const A=g("exit_flow/reduction_block"),B=y("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:B};return Yn(r,u),{params:{entry_flow:D,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=Je(Ze());function iD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function rx(r,l,u=!0){let p=u?on.relu(r):r;return p=os(p,l.separable_conv0,[1,1]),p=os(on.relu(p),l.separable_conv1,[1,1]),p=on.maxPool(p,[3,3],[2,2],"same"),p=on.add(p,iD(r,l.expansion_conv,[2,2])),p}function CQ(r,l){let u=os(on.relu(r),l.separable_conv0,[1,1]);return u=os(on.relu(u),l.separable_conv1,[1,1]),u=os(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class rD extends Wn{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(on.scalar(256));let g=on.relu(iD(y,l.entry_flow.conv_in,[2,2]));return g=rx(g,l.entry_flow.reduction_block_0,!1),g=rx(g,l.entry_flow.reduction_block_1),_i(this._numMainBlocks,0,1).forEach(I=>{g=CQ(g,l.middle_flow[`main_block_${I}`])}),g=rx(g,l.exit_flow.reduction_block),g=on.relu(os(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return sD(r,this._numMainBlocks)}extractParams(r){return nD(r,this._numMainBlocks)}}function oD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),y=Ig(u,l),g=y(512,1,"fc/age"),I=y(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function aD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Yn(r,l),{params:y,paramMappings:l}}var Ir;(function(r){r.FEMALE="female",r.MALE="male"})(Ir||(Ir={}));const Gi=Je(Ze());class ox extends Wn{constructor(r=new rD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Gi.tidy(()=>{const u=r instanceof ho?this.faceFeatureExtractor.forwardInput(r):r,p=Gi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),y=Mu(p,l.fc.age).as1D(),g=Mu(p,l.fc.gender);return{age:y,gender:g}})}forwardInput(r){return Gi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Gi.softmax(u)}})}async forward(r){return this.forwardInput(await Wt(r))}async predictAgeAndGender(r){const l=await Wt(r),u=await this.forwardInput(l),p=Gi.unstack(u.age),y=Gi.unstack(u.gender),g=p.map((S,T)=>({ageTensor:S,genderTensor:y[T]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:T})=>{const C=(await S.data())[0],D=(await T.data())[0],_=D>.5,A=_?Ir.MALE:Ir.FEMALE,B=_?D:1-D;return S.dispose(),T.dispose(),{age:C,gender:A,genderProbability:B}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return oD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Ng(r);return this.faceFeatureExtractor.loadFromWeightMap(l),aD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),p=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(p)}}const ys=Je(Ze());class Og extends Cg{postProcess(r,l,u){const p=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),y=p.length;return ys.tidy(()=>{const g=(D,_)=>ys.stack([ys.fill([68],D,"float32"),ys.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(D,_)=>{const{width:A,height:B}=p[D];return _(A,B)?Math.abs(A-B)/2:0},S=D=>I(D,(_,A)=>_I(D,(_,A)=>A<_),C=r.mul(ys.fill([y,136],l,"float32")).sub(ys.stack(Array.from(Array(y),(D,_)=>g(S(_),T(_))))).div(ys.stack(Array.from(Array(y),(D,_)=>g(p[_].width,p[_].height))));return C})}forwardInput(r){return ys.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,p])=>({height:u,width:p})))})}async forward(r){return this.forwardInput(await Wt(r))}async detectLandmarks(r){const l=await Wt(r),u=ys.tidy(()=>ys.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(y,g)=>{const I=Array.from(await y.data()),S=I.filter((C,D)=>Vm(D)),T=I.filter((C,D)=>!Vm(D));return new wu(Array(68).fill(0).map((C,D)=>new Qe(S[D],T[D])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Pu extends Og{constructor(r=new vg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function cD(r){const l=[],{extractDenseBlock3Params:u}=Ag(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Yn(r,l),{params:p,paramMappings:l}}function lD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractDenseBlock3Params:y}=xg(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const mo=Je(Ze());class hD extends Wn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return mo.tidy(()=>{const u=mo.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(mo.scalar(255));let g=wg(y,l.dense0,!0);return g=wg(g,l.dense1),g=wg(g,l.dense2),g=mo.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return cD(r)}extractParams(r){return lD(r)}}class ax extends Og{constructor(r=new hD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class RQ extends Pu{}const Eg=Je(Ze());function uD(r,l){return Eg.add(Eg.mul(r,l.weights),l.biases)}const Jc=Je(Ze());function cx(r,l,u,p,y="same"){const{filters:g,bias:I}=l.conv;let S=Jc.conv2d(r,g,u,y);return S=Jc.add(S,I),S=uD(S,l.scale),p?Jc.relu(S):S}function dD(r,l){return cx(r,l,[1,1],!0)}function lx(r,l){return cx(r,l,[1,1],!1)}function Dg(r,l){return cx(r,l,[2,2],!0,"valid")}const bs=Je(Ze());function OQ(r,l){function u(S,T,C){const D=r(S),_=D.length/(T*C*C);if(FS(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${D.length}, numFilters: ${T}, filterSize: ${C}`);return bs.tidy(()=>bs.transpose(bs.tensor4d(D,[T,_,C,C]),[2,3,1,0]))}function p(S,T,C,D){const _=u(S,T,C),A=bs.tensor1d(r(T));return l.push({paramPath:`${D}/filters`},{paramPath:`${D}/bias`}),{filters:_,bias:A}}function y(S,T){const C=bs.tensor1d(r(S)),D=bs.tensor1d(r(S));return l.push({paramPath:`${T}/weights`},{paramPath:`${T}/biases`}),{weights:C,biases:D}}function g(S,T,C,D){const _=p(S,T,C,`${D}/conv`),A=y(T,`${D}/scale`);return{conv:_,scale:A}}function I(S,T,C,D,_=!1){const A=g((_?.5:1)*S,T,C,`${D}/conv1`),B=g(S,T,C,`${D}/conv2`);return{conv1:A,conv2:B}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function pD(r){const{extractWeights:l,getRemainingWeights:u}=Hn(r),p=[],{extractConvLayerParams:y,extractResidualLayerParams:g}=OQ(l,p),I=y(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),T=g(9216,32,3,"conv32_2"),C=g(9216,32,3,"conv32_3"),D=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),B=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),P=g(147456,128,3,"conv128_2"),ge=g(589824,256,3,"conv256_down",!0),ae=g(589824,256,3,"conv256_1"),Le=g(589824,256,3,"conv256_2"),ve=g(589824,256,3,"conv256_down_out"),Ve=bs.tidy(()=>bs.transpose(bs.tensor2d(l(256*128),[128,256]),[1,0]));if(p.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const at={conv32_down:I,conv32_1:S,conv32_2:T,conv32_3:C,conv64_down:D,conv64_1:_,conv64_2:A,conv64_3:B,conv128_down:ne,conv128_1:te,conv128_2:P,conv256_down:ge,conv256_1:ae,conv256_2:Le,conv256_down_out:ve,fc:Ve};return{params:at,paramMappings:p}}function EQ(r,l){const u=gs(r,l);function p(I){const S=u(`${I}/scale/weights`,1),T=u(`${I}/scale/biases`,1);return{weights:S,biases:T}}function y(I){const S=u(`${I}/conv/filters`,4),T=u(`${I}/conv/bias`,1),C=p(I);return{conv:{filters:S,bias:T},scale:C}}function g(I){return{conv1:y(`${I}/conv1`),conv2:y(`${I}/conv2`)}}return{extractConvLayerParams:y,extractResidualLayerParams:g}}function mD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=EQ(r,l),y=u("conv32_down"),g=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),T=p("conv64_down"),C=p("conv64_1"),D=p("conv64_2"),_=p("conv64_3"),A=p("conv128_down"),B=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),P=p("conv256_1"),ge=p("conv256_2"),ae=p("conv256_down_out"),Le=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!kS(Le))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Le}`);const ve={conv32_down:y,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:T,conv64_1:C,conv64_2:D,conv64_3:_,conv128_down:A,conv128_1:B,conv128_2:ne,conv256_down:te,conv256_1:P,conv256_2:ge,conv256_down_out:ae,fc:Le};return Yn(r,l),{params:ve,paramMappings:l}}const qn=Je(Ze());function gi(r,l){let u=dD(r,l.conv1);return u=lx(u,l.conv2),u=qn.add(u,r),u=qn.relu(u),u}function zu(r,l){let u=Dg(r,l.conv1);u=lx(u,l.conv2);let p=qn.avgPool(r,2,2,"valid");const y=qn.zeros(p.shape),g=p.shape[3]!==u.shape[3],I=p.shape[1]!==u.shape[1]||p.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const T=qn.zeros(S);u=qn.concat([u,T],1);const C=[...u.shape];C[2]=1;const D=qn.zeros(C);u=qn.concat([u,D],2)}return p=g?qn.concat([p,y],3):p,u=qn.add(p,u),u=qn.relu(u),u}const Fs=Je(Ze());class Vu extends Wn{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return Fs.tidy(()=>{const u=Fs.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],y=di(u,p).div(Fs.scalar(256));let g=Dg(y,l.conv32_down);g=Fs.maxPool(g,3,2,"valid"),g=gi(g,l.conv32_1),g=gi(g,l.conv32_2),g=gi(g,l.conv32_3),g=zu(g,l.conv64_down),g=gi(g,l.conv64_1),g=gi(g,l.conv64_2),g=gi(g,l.conv64_3),g=zu(g,l.conv128_down),g=gi(g,l.conv128_1),g=gi(g,l.conv128_2),g=zu(g,l.conv256_down),g=gi(g,l.conv256_1),g=gi(g,l.conv256_2),g=zu(g,l.conv256_down_out);const I=g.mean([1,2]),S=Fs.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Wt(r))}async computeFaceDescriptor(r){const l=await Wt(r),u=Fs.tidy(()=>Fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(y=>y.data()));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return mD(r)}extractParams(r){return pD(r)}}function DQ(r){const l=new Vu;return l.extractWeights(r),l}function kg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function kQ(r){return typeof r.age=="number"}function Fg(r,l){const u={age:l};return Object.assign({},r,u)}function FQ(r){return(r.gender===Ir.MALE||r.gender===Ir.FEMALE)&&vc(r.genderProbability)}function _g(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const yi=Je(Ze());function _Q(r,l){function u(T,C){const D=yi.tensor4d(r(3*3*T),[3,3,T,1]),_=yi.tensor1d(r(T)),A=yi.tensor1d(r(T)),B=yi.tensor1d(r(T)),ne=yi.tensor1d(r(T));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/batch_norm_scale`},{paramPath:`${C}/batch_norm_offset`},{paramPath:`${C}/batch_norm_mean`},{paramPath:`${C}/batch_norm_variance`}),{filters:D,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:B,batch_norm_variance:ne}}function p(T,C,D,_,A){const B=yi.tensor4d(r(T*C*D*D),[D,D,T,C]),ne=yi.tensor1d(r(C));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:B,bias:ne}}function y(T,C,D,_){const{filters:A,bias:B}=p(T,C,D,_,!0);return{filters:A,batch_norm_offset:B}}function g(T,C,D){const _=u(T,`${D}/depthwise_conv`),A=y(T,C,1,`${D}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const T=y(3,32,3,"mobilenetv1/conv_0"),C=g(32,64,"mobilenetv1/conv_1"),D=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),B=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),P=g(512,512,"mobilenetv1/conv_8"),ge=g(512,512,"mobilenetv1/conv_9"),ae=g(512,512,"mobilenetv1/conv_10"),Le=g(512,512,"mobilenetv1/conv_11"),ve=g(512,1024,"mobilenetv1/conv_12"),Ve=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,conv_8:P,conv_9:ge,conv_10:ae,conv_11:Le,conv_12:ve,conv_13:Ve}}function S(){const T=y(1024,256,1,"prediction_layer/conv_0"),C=y(256,512,3,"prediction_layer/conv_1"),D=y(512,128,1,"prediction_layer/conv_2"),_=y(128,256,3,"prediction_layer/conv_3"),A=y(256,128,1,"prediction_layer/conv_4"),B=y(128,256,3,"prediction_layer/conv_5"),ne=y(256,64,1,"prediction_layer/conv_6"),te=y(64,128,3,"prediction_layer/conv_7"),P=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ae=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Le=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),ve=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),at=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),pt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Vt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),qe=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),ln=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:P,class_predictor:ge},ws={box_encoding_predictor:ae,class_predictor:Le},Nr={box_encoding_predictor:ve,class_predictor:Ve},Cr={box_encoding_predictor:at,class_predictor:pt},ba={box_encoding_predictor:$t,class_predictor:Vt},hn={box_encoding_predictor:qe,class_predictor:ln};return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,box_predictor_0:bt,box_predictor_1:ws,box_predictor_2:Nr,box_predictor_3:Cr,box_predictor_4:ba,box_predictor_5:hn}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function fD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Hn(r),{extractMobilenetV1Params:y,extractPredictionLayerParams:g}=_Q(u,l),I=y(),S=g(),T=yi.tensor3d(u(5118*4),[1,5118,4]),C={extra_dim:T};if(l.push({paramPath:"output_layer/extra_dim"}),p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:C},paramMappings:l}}function WQ(r,l){const u=gs(r,l);function p(C,D,_){const A=u(`${C}/Conv2d_${D}_pointwise/weights`,4,`${_}/filters`),B=u(`${C}/Conv2d_${D}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:B}}function y(C){const D=`mobilenetv1/conv_${C}`,_=`MobilenetV1/Conv2d_${C}_depthwise`,A=`${D}/depthwise_conv`,B=`${D}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),te=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),P=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),ge=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ae=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:P,batch_norm_mean:ge,batch_norm_variance:ae},pointwise_conv:p("MobilenetV1",C,B)}}function g(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:y(1),conv_2:y(2),conv_3:y(3),conv_4:y(4),conv_5:y(5),conv_6:y(6),conv_7:y(7),conv_8:y(8),conv_9:y(9),conv_10:y(10),conv_11:y(11),conv_12:y(12),conv_13:y(13)}}function I(C,D){const _=u(`${C}/weights`,4,`${D}/filters`),A=u(`${C}/biases`,1,`${D}/bias`);return{filters:_,bias:A}}function S(C){const D=I(`Prediction/BoxPredictor_${C}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${C}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${C}/ClassPredictor`,`prediction_layer/box_predictor_${C}/class_predictor`);return{box_encoding_predictor:D,class_predictor:_}}function T(){return{conv_0:p("Prediction",0,"prediction_layer/conv_0"),conv_1:p("Prediction",1,"prediction_layer/conv_1"),conv_2:p("Prediction",2,"prediction_layer/conv_2"),conv_3:p("Prediction",3,"prediction_layer/conv_3"),conv_4:p("Prediction",4,"prediction_layer/conv_4"),conv_5:p("Prediction",5,"prediction_layer/conv_5"),conv_6:p("Prediction",6,"prediction_layer/conv_6"),conv_7:p("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:g,extractPredictionLayerParams:T}}function gD(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=WQ(r,l),y=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!gr(y))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${y}`);const g={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:y}};return Yn(r,l),{params:g,paramMappings:l}}const fo=Je(Ze());function qs(r,l,u){return fo.tidy(()=>{let p=fo.conv2d(r,l.filters,u,"same");return p=fo.add(p,l.batch_norm_offset),fo.clipByValue(p,0,6)})}const xr=Je(Ze()),$Q=.0010000000474974513;function UQ(r,l,u){return xr.tidy(()=>{let p=xr.depthwiseConv2d(r,l.filters,u,"same");return p=xr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,$Q),xr.clipByValue(p,0,6)})}function BQ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function yD(r,l){return xr.tidy(()=>{let u,p=qs(r,l.conv_0,[2,2]);const y=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(y.forEach((g,I)=>{const S=I+1,T=BQ(S);p=UQ(p,g.depthwise_conv,T),p=qs(p,g.pointwise_conv,[1,1]),S===11&&(u=p)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:p,conv11:u}})}function bD(r,l,u,p,y){const g=r.shape[0],I=Math.min(u,g),S=l.map((D,_)=>({score:D,boxIndex:_})).filter(D=>D.score>y).sort((D,_)=>_.score-D.score),T=D=>D<=p?1:0,C=[];return S.forEach(D=>{if(C.length>=I)return;const _=D.score;for(let A=C.length-1;A>=0;--A){const B=MQ(r,D.boxIndex,C[A]);if(B===0)continue;if(D.score*=T(B),D.score<=y)break}_===D.score&&C.push(D.boxIndex)}),C}function MQ(r,l,u){const p=r.arraySync(),y=Math.min(p[l][0],p[l][2]),g=Math.min(p[l][1],p[l][3]),I=Math.max(p[l][0],p[l][2]),S=Math.max(p[l][1],p[l][3]),T=Math.min(p[u][0],p[u][2]),C=Math.min(p[u][1],p[u][3]),D=Math.max(p[u][0],p[u][2]),_=Math.max(p[u][1],p[u][3]),A=(I-y)*(S-g),B=(D-T)*(_-C);if(A<=0||B<=0)return 0;const ne=Math.max(y,T),te=Math.max(g,C),P=Math.min(I,D),ge=Math.min(S,_),ae=Math.max(P-ne,0)*Math.max(ge-te,0);return ae/(A+B-ae)}const ke=Je(Ze());function PQ(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],p=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:p}}function zQ(r,l){const{sizes:u,centers:p}=PQ(r),y=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(y[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(y[0],ke.scalar(10)),u[0]),p[0]),S=ke.div(ke.mul(ke.exp(ke.div(y[3],ke.scalar(5))),u[1]),ke.scalar(2)),T=ke.add(ke.mul(ke.div(y[1],ke.scalar(10)),u[1]),p[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(T,S),ke.add(I,g),ke.add(T,S)]),[1,0])}function wD(r,l,u){return ke.tidy(()=>{const p=r.shape[0];let y=zQ(ke.reshape(ke.tile(u.extra_dim,[p,1,1]),[-1,4]),ke.reshape(r,[-1,4]));y=ke.reshape(y,[p,y.shape[0]/p,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[p,I.shape[1]]);const S=ke.unstack(y),T=ke.unstack(I);return{boxes:S,scores:T}})}const Gu=Je(Ze());function ma(r,l){return Gu.tidy(()=>{const u=r.shape[0],p=Gu.reshape(ua(r,l.box_encoding_predictor),[u,-1,1,4]),y=Gu.reshape(ua(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:y}})}const Yu=Je(Ze());function LD(r,l,u){return Yu.tidy(()=>{const p=qs(r,u.conv_0,[1,1]),y=qs(p,u.conv_1,[2,2]),g=qs(y,u.conv_2,[1,1]),I=qs(g,u.conv_3,[2,2]),S=qs(I,u.conv_4,[1,1]),T=qs(S,u.conv_5,[2,2]),C=qs(T,u.conv_6,[1,1]),D=qs(C,u.conv_7,[2,2]),_=ma(l,u.box_predictor_0),A=ma(r,u.box_predictor_1),B=ma(y,u.box_predictor_2),ne=ma(I,u.box_predictor_3),te=ma(T,u.box_predictor_4),P=ma(D,u.box_predictor_5),ge=Yu.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,B.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,P.boxPredictionEncoding],1),ae=Yu.concat([_.classPrediction,A.classPrediction,B.classPrediction,ne.classPrediction,te.classPrediction,P.classPrediction],1);return{boxPredictions:ge,classPredictions:ae}})}class bi{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const wi=Je(Ze());class Zc extends Wn{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return wi.tidy(()=>{const u=wi.cast(r.toBatchTensor(512,!1),"float32"),p=wi.sub(wi.mul(u,wi.scalar(.007843137718737125)),wi.scalar(1)),y=yD(p,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=LD(y.out,y.conv11,l.prediction_layer);return wD(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Wt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new bi(l),y=await Wt(r),{boxes:g,scores:I}=this.forwardInput(y),S=g[0],T=I[0];for(let ae=1;ae{const[Le,ve]=[Math.max(0,P[ae][0]),Math.min(1,P[ae][2])].map(pt=>pt*te),[Ve,at]=[Math.max(0,P[ae][1]),Math.min(1,P[ae][3])].map(pt=>pt*ne);return new Jt(C[ae],new bu(Ve,Le,at-Ve,ve-Le),{height:y.getInputHeight(0),width:y.getInputWidth(0)})});return S.dispose(),T.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return gD(r)}extractParams(r){return fD(r)}}function SD(r){const l=new Zc;return l.extractWeights(r),l}function VQ(r){return SD(r)}class GQ extends Zc{}const ID=.4,xD=[new Qe(.738768,.874946),new Qe(2.42204,2.65704),new Qe(4.30971,7.04493),new Qe(10.246,4.59428),new Qe(12.6868,11.8741)],TD=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],AD=[117.001,114.697,97.404],vD="tiny_yolov2_model",ND="tiny_yolov2_separable_conv_model";const Wg=r=>typeof r=="number";function hx(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!Wg(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>Wg(l.x)&&Wg(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(Wg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const js=Je(Ze());function Qc(r){return js.tidy(()=>{const l=js.mul(r,js.scalar(.10000000149011612));return js.add(js.relu(js.sub(r,l)),l)})}const Ks=Je(Ze());function Tr(r,l){return Ks.tidy(()=>{let u=Ks.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Ks.conv2d(u,l.conv.filters,[1,1],"valid"),u=Ks.sub(u,l.bn.sub),u=Ks.mul(u,l.bn.truediv),u=Ks.add(u,l.conv.bias),Qc(u)})}const go=Je(Ze());function Ar(r,l){return go.tidy(()=>{let u=go.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=go.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=go.add(u,l.bias),Qc(u)})}const ux=Je(Ze());function YQ(r,l){const u=Yc(r,l);function p(I,S){const T=ux.tensor1d(r(I)),C=ux.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:T,truediv:C}}function y(I,S,T){const C=u(I,S,3,`${T}/conv`),D=p(S,`${T}/bn`);return{conv:C,bn:D}}const g=Hc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}}function CD(r,l,u,p){const{extractWeights:y,getRemainingWeights:g}=Hn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:T,extractSeparableConvParams:C}=YQ(y,I);let D;if(l.withSeparableConvs){const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=l.isFirstLayerConv2d?S(_,A,3,"conv0"):C(_,A,"conv0"),Ve=C(A,B,"conv1"),at=C(B,ne,"conv2"),pt=C(ne,te,"conv3"),$t=C(te,P,"conv4"),Vt=C(P,ge,"conv5"),qe=ae?C(ge,ae,"conv6"):void 0,ln=Le?C(ae,Le,"conv7"):void 0,bt=S(Le||ae||ge,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Vt,conv6:qe,conv7:ln,conv8:bt}}else{const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=T(_,A,"conv0"),Ve=T(A,B,"conv1"),at=T(B,ne,"conv2"),pt=T(ne,te,"conv3"),$t=T(te,P,"conv4"),Vt=T(P,ge,"conv5"),qe=T(ge,ae,"conv6"),ln=T(ae,Le,"conv7"),bt=S(Le,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Vt,conv6:qe,conv7:ln,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:D,paramMappings:I}}function HQ(r,l){const u=gs(r,l);function p(S){const T=u(`${S}/sub`,1),C=u(`${S}/truediv`,1);return{sub:T,truediv:C}}function y(S){const T=u(`${S}/filters`,4),C=u(`${S}/bias`,1);return{filters:T,bias:C}}function g(S){const T=y(`${S}/conv`),C=p(`${S}/bn`);return{conv:T,bn:C}}const I=qc(u);return{extractConvParams:y,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function RD(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}=HQ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:p("conv8")}}else I={conv0:y("conv0"),conv1:y("conv1"),conv2:y("conv2"),conv3:y("conv3"),conv4:y("conv4"),conv5:y("conv5"),conv6:y("conv6"),conv7:y("conv7"),conv8:p("conv8")};return Yn(r,u),{params:I,paramMappings:u}}var dx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(dx||(dx={}));class vr{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=Je(Ze());class el extends Wn{constructor(r){super("TinyYolov2");hx(r),this._config=r}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(r,l){let u=Tr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Tr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=Tr(u,l.conv6),u=Tr(u,l.conv7),ua(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Qc(ua(r,l.conv0,"valid",!1)):Ar(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Ar(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Ar(u,l.conv6):u,u=l.conv7?Ar(u,l.conv7):u,ua(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let p=Mt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?di(p,this.config.meanRgb):p,p=p.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Wt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new vr(l),y=await Wt(r),g=await this.forwardInput(y,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:y.getInputWidth(0),height:y.getInputHeight(0)},T=await this.extractBoxes(I,y.getReshapedInputDimensions(0),p);g.dispose(),I.dispose();const C=T.map(te=>te.box),D=T.map(te=>te.score),_=T.map(te=>te.classScore),A=T.map(te=>this.config.classes[te.label]),B=US(C.map(te=>te.rescale(u)),D,this.config.iouThreshold,!0),ne=B.map(te=>new Nc(D[te],_[te],A[te],C[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return RD(r,this.config)}extractParams(r){const l=this.config.filterSizes||el.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return CD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:y}=l,g=Math.max(p,y),I=g/p,S=g/y,T=r.shape[1],C=this.config.anchors.length,[D,_,A]=Mt.tidy(()=>{const P=r.reshape([T,T,C,this.boxEncodingSize]),ge=P.slice([0,0,0,0],[T,T,C,4]),ae=P.slice([0,0,0,4],[T,T,C,1]),Le=this.withClassScores?Mt.softmax(P.slice([0,0,0,5],[T,T,C,this.config.classes.length]),3):Mt.scalar(0);return[ge,ae,Le]}),B=[],ne=await _.array(),te=await D.array();for(let P=0;Pu){const ve=(ge+yu(te[P][ge][ae][0]))/T*I,Ve=(P+yu(te[P][ge][ae][1]))/T*S,at=Math.exp(te[P][ge][ae][2])*this.config.anchors[ae].x/T*I,pt=Math.exp(te[P][ge][ae][3])*this.config.anchors[ae].y/T*S,$t=ve-at/2,Vt=Ve-pt/2,qe={row:P,col:ge,anchor:ae},{classScore:ln,label:bt}=this.withClassScores?await this.extractPredictedClass(A,qe):{classScore:1,label:0};B.push({box:new gu($t,Vt,$t+at,Vt+pt),score:Le,classScore:Le*ln,label:bt,...qe})}}return D.dispose(),_.dispose(),A.dispose(),B}async extractPredictedClass(r,l){const{row:u,col:p,anchor:y}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][p][y][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}el.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Hu extends el{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:ID,classes:["face"]},r?{anchors:TD,meanRgb:AD}:{anchors:xD,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Jt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?ND:vD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function qQ(r,l=!0){const u=new Hu(l);return u.extractWeights(r),u}class px extends vr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Li{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const mx=Je(Ze());async function fa(r,l,u,p,y=({alignedRect:g})=>g){const g=r.map(T=>pa(T)?y(T):T.detection),I=p||(l instanceof mx.Tensor?await Vc(l,g):await zc(l,g)),S=await u(I);return I.forEach(T=>T instanceof mx.Tensor&&T.dispose()),S}async function tl(r,l,u,p,y){return fa([r],l,async g=>u(g[0]),p,y)}const OD=.4,ED=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],DD=[117.001,114.697,97.404];class qu extends el{constructor(){const r={withSeparableConvs:!0,iouThreshold:OD,classes:["face"],anchors:ED,meanRgb:DD,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Jt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const yt={ssdMobilenetv1:new Zc,tinyFaceDetector:new qu,tinyYolov2:new Hu,faceLandmark68Net:new Pu,faceLandmark68TinyNet:new ax,faceRecognitionNet:new Vu,faceExpressionNet:new nx,ageGenderNet:new ox},kD=(r,l)=>yt.ssdMobilenetv1.locateFaces(r,l),jQ=(r,l)=>yt.tinyFaceDetector.locateFaces(r,l),KQ=(r,l)=>yt.tinyYolov2.locateFaces(r,l),FD=r=>yt.faceLandmark68Net.detectLandmarks(r),XQ=r=>yt.faceLandmark68TinyNet.detectLandmarks(r),JQ=r=>yt.faceRecognitionNet.computeFaceDescriptor(r),ZQ=r=>yt.faceExpressionNet.predictExpressions(r),QQ=r=>yt.ageGenderNet.predictAgeAndGender(r),_D=r=>yt.ssdMobilenetv1.load(r),eee=r=>yt.tinyFaceDetector.load(r),tee=r=>yt.tinyYolov2.load(r),nee=r=>yt.faceLandmark68Net.load(r),see=r=>yt.faceLandmark68TinyNet.load(r),iee=r=>yt.faceRecognitionNet.load(r),ree=r=>yt.faceExpressionNet.load(r),oee=r=>yt.ageGenderNet.load(r),aee=_D,cee=kD,lee=FD;class WD extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Xu extends WD{async run(){const r=await this.parentTask,l=await fa(r,this.input,async u=>await Promise.all(u.map(p=>yt.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Rg(u,l[p]))}withAgeAndGender(){return new ju(this,this.input)}}class Ju extends WD{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>yt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Rg(r,l)}withAgeAndGender(){return new Ku(this,this.input)}}class il extends Xu{withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class rl extends Ju{withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class $D extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class ju extends $D{async run(){const r=await this.parentTask,l=await fa(r,this.input,async u=>await Promise.all(u.map(p=>yt.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:y,gender:g,genderProbability:I}=l[p];return Fg(_g(u,g,I),y)})}withFaceExpressions(){return new Xu(this,this.input)}}class Ku extends $D{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await tl(r,this.input,y=>yt.ageGenderNet.predictAgeAndGender(y),this.extractedFaces);return Fg(_g(r,u,p),l)}withFaceExpressions(){return new Ju(this,this.input)}}class nl extends ju{withFaceExpressions(){return new il(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class sl extends Ku{withFaceExpressions(){return new rl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class fx extends Li{constructor(r,l){super();this.parentTask=r;this.input=l}}class ga extends fx{async run(){const r=await this.parentTask,l=await fa(r,this.input,u=>Promise.all(u.map(p=>yt.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>kg(r[p],u))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}}class ya extends fx{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>yt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return kg(r,l)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}}const Zu=Je(Ze());class gx extends Li{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?yt.faceLandmark68TinyNet:yt.faceLandmark68Net}}class yx extends gx{async run(){const r=await this.parentTask,l=r.map(y=>y.detection),u=this.input instanceof Zu.Tensor?await Vc(this.input,l):await zc(this.input,l),p=await Promise.all(u.map(y=>this.landmarkNet.detectLandmarks(y)));return u.forEach(y=>y instanceof Zu.Tensor&&y.dispose()),r.map((y,g)=>Xc(y,p[g]))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new ga(this,this.input)}}class bx extends gx{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Zu.Tensor?await Vc(this.input,[l]):await zc(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(y=>y instanceof Zu.Tensor&&y.dispose()),Xc(r,p)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new ya(this,this.input)}}class wx extends Li{constructor(r,l=new bi){super();this.input=r;this.options=l}}class $g extends wx{async run(){const{input:r,options:l}=this,u=l instanceof px?p=>yt.tinyFaceDetector.locateFaces(p,l):l instanceof bi?p=>yt.ssdMobilenetv1.locateFaces(p,l):l instanceof vr?p=>yt.tinyYolov2.locateFaces(p,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>Zo({},u)))})}withFaceLandmarks(r=!1){return new yx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Xu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new ju(this.runAndExtendWithFaceDetections(),this.input)}}class Lx extends wx{async run(){const r=await new $g(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?Zo({},l):void 0)})}withFaceLandmarks(r=!1){return new bx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Ju(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ku(this.runAndExtendWithFaceDetection(),this.input)}}function hee(r,l=new bi){return new Lx(r,l)}function Ug(r,l=new bi){return new $g(r,l)}async function UD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Ug(r,new bi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function uee(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Ug(r,new vr(l)).withFaceLandmarks().withFaceDescriptors()}const dee=UD;function Sx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),p=Array.from(l);return Math.sqrt(u.map((y,g)=>y-p[g]).reduce((y,g)=>y+Math.pow(g,2),0))}class BD{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let p=1;const y=()=>`person ${p++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof Jo)return g;if(g instanceof Float32Array)return new Jo(y(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new Jo(y(),[g.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(r,l){return l.map(u=>Sx(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new Ym(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>Jo.fromJSON(u));return new BD(l,r.distanceThreshold)}}function pee(r){const l=new qu;return l.extractWeights(r),l}function MD(r,l){const{width:u,height:p}=new ms(l.width,l.height);if(u<=0||p<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:p})}`);if(Array.isArray(r))return r.map(y=>MD(y,{width:u,height:p}));if(pa(r)){const y=r.detection.forSize(u,p),g=r.unshiftedLandmarks.forSize(y.box.width,y.box.height);return Xc(Zo(r,y),g)}return $i(r)?Zo(r,r.detection.forSize(u,p)):r instanceof Gs||r instanceof Jt?r.forSize(u,p):r}var PD="0.8.6";const mee=Je(Ze()),fee=typeof process!="undefined",gee=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",yee={faceapi:PD,node:fee,browser:gee};export{ox as AgeGenderNet,gu as BoundingBox,_t as Box,Li as ComposableTask,ga as ComputeAllFaceDescriptorsTask,fx as ComputeFaceDescriptorsTaskBase,ya as ComputeSingleFaceDescriptorTask,yx as DetectAllFaceLandmarksTask,$g as DetectAllFacesTask,gx as DetectFaceLandmarksTaskBase,wx as DetectFacesTaskBase,bx as DetectSingleFaceLandmarksTask,Lx as DetectSingleFaceTask,ms as Dimensions,tx as FACE_EXPRESSION_LABELS,Jt as FaceDetection,GQ as FaceDetectionNet,nx as FaceExpressionNet,da as FaceExpressions,Pu as FaceLandmark68Net,ax as FaceLandmark68TinyNet,RQ as FaceLandmarkNet,Gs as FaceLandmarks,EJ as FaceLandmarks5,wu as FaceLandmarks68,Ym as FaceMatch,BD as FaceMatcher,Vu as FaceRecognitionNet,Ir as Gender,Hm as LabeledBox,Jo as LabeledFaceDescriptors,ho as NetInput,Wn as NeuralNetwork,Nc as ObjectDetection,Qe as Point,DJ as PredictedBox,bu as Rect,Zc as SsdMobilenetv1,bi as SsdMobilenetv1Options,qu as TinyFaceDetector,px as TinyFaceDetectorOptions,Hu as TinyYolov2,vr as TinyYolov2Options,dx as TinyYolov2SizeType,dee as allFaces,UD as allFacesSsdMobilenetv1,uee as allFacesTinyYolov2,qS as awaitMediaLoaded,jS as bufferToImage,JQ as computeFaceDescriptor,Rc as createCanvas,Su as createCanvasFromMedia,VQ as createFaceDetectionNet,DQ as createFaceRecognitionNet,SD as createSsdMobilenetv1,pee as createTinyFaceDetector,qQ as createTinyYolov2,Ug as detectAllFaces,FD as detectFaceLandmarks,XQ as detectFaceLandmarksTiny,lee as detectLandmarks,hee as detectSingleFace,ix as draw,St as env,Sx as euclideanDistance,Fg as extendWithAge,kg as extendWithFaceDescriptor,Zo as extendWithFaceDetection,Rg as extendWithFaceExpressions,Xc as extendWithFaceLandmarks,_g as extendWithGender,Vc as extractFaceTensors,zc as extractFaces,SQ as fetchImage,ZI as fetchJson,IQ as fetchNetWeights,ha as fetchOrThrow,is as getContext2dOrThrow,ea as getMediaDimensions,KS as imageTensorToCanvas,JI as imageToSquare,NJ as inverseSigmoid,WS as iou,Xm as isMediaElement,Lu as isMediaLoaded,kQ as isWithAge,$i as isWithFaceDetection,sx as isWithFaceExpressions,pa as isWithFaceLandmarks,FQ as isWithGender,oee as loadAgeGenderModel,aee as loadFaceDetectionModel,ree as loadFaceExpressionModel,nee as loadFaceLandmarkModel,see as loadFaceLandmarkTinyModel,iee as loadFaceRecognitionModel,_D as loadSsdMobilenetv1Model,eee as loadTinyFaceDetectorModel,tee as loadTinyYolov2Model,QI as loadWeightMap,cee as locateFaces,xQ as matchDimensions,$S as minBbox,yt as nets,US as nonMaxSuppression,di as normalize,BS as padToSquare,QQ as predictAgeAndGender,ZQ as recognizeFaceExpressions,MD as resizeResults,Qo as resolveInput,vJ as shuffleArray,yu as sigmoid,kD as ssdMobilenetv1,mee as tf,jQ as tinyFaceDetector,KQ as tinyYolov2,Wt as toNetInput,DS as utils,hx as validateConfig,yee as version}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.esm.nobundle.js b/dist/face-api.esm.nobundle.js index a88aa78..d1ade1b 100644 --- a/dist/face-api.esm.nobundle.js +++ b/dist/face-api.esm.nobundle.js @@ -4481,7 +4481,7 @@ function resizeResults(results, dimensions) { } // package.json -var version = "0.8.5"; +var version = "0.8.6"; // src/index.ts import * as tf42 from "@tensorflow/tfjs/dist/tf.es2017.js"; diff --git a/dist/face-api.js b/dist/face-api.js index 685d024..036a473 100644 --- a/dist/face-api.js +++ b/dist/face-api.js @@ -3959,7 +3959,7 @@ return a / b;`,K7=` `)}function O9(r,l,u,p){const y=Zt(l),g=p[p.length-1],I=new Array(g).fill(0),S=l.length,T=u==="complex64"?zu(r):r;if(S>1)for(let C=0;CBO){const P=Mu*I;let ge=Array.from(r.slice(0,P)),ae=Array.from(r.slice((S-Mu)*I,S*I));return u==="complex64"&&(ge=zu(ge),ae=zu(ae)),["["+ge.map((Le,ve)=>Pu(Le,y[ve],u)).join(", ")+", ..., "+ae.map((Le,ve)=>Pu(Le,y[S-Mu+ve],u)).join(", ")+"]"]}const te=u==="complex64"?zu(r):Array.from(r);return["["+te.map((P,ge)=>Pu(P,y[ge],u)).join(", ")+"]"]}const C=l.slice(1),D=p.slice(1),_=p[0]*I,A=[];if(S>BO){for(let te=0;te`Length of values '${p}' does not match the size inferred by the shape '${this.size}'.`)}if(l==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=u||Z2(l,this.size),this.strides=Bu(r)}set(r,...l){l.length===0&&(l=[0]),J(l.length===this.rank,()=>`The number of provided coordinates (${l.length}) must match the rank (${this.rank})`);const u=this.locToIndex(l);this.values[u]=r}get(...r){r.length===0&&(r=[0]);let l=0;for(const p of r){if(p<0||p>=this.shape[l]){const y=`Requested out of range element at ${r}. Buffer shape=${this.shape}`;throw new Error(y)}l++}let u=r[r.length-1];for(let p=0;pDI(u))}catch(u){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return r}dataSync(){this.throwIfDisposed();const r=Pi().readSync(this.dataId);if(this.dtype==="string")try{return r.map(l=>DI(l))}catch(l){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return r}async bytes(){this.throwIfDisposed();const r=await Pi().read(this.dataId);return this.dtype==="string"?r:new Uint8Array(r.buffer)}dispose(){if(this.isDisposed)return;Pi().disposeTensor(this),this.isDisposedInternal=!0}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(r=!1){return jc.print(this,r)}clone(){return this.throwIfDisposed(),jc.clone(this)}toString(r=!1){const l=this.dataSync();return MO(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),jc.cast(this,r)}variable(r=!0,l,u){return this.throwIfDisposed(),Pi().makeVariable(this,r,l,u)}}Object.defineProperty(Dn,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class Fg extends Dn{constructor(r,l,u,p){super(r.shape,r.dtype,r.dataId,p);this.trainable=l,this.name=u}assign(r){if(r.dtype!==this.dtype)throw new Error(`dtype of the new value (${r.dtype}) and previous value (${this.dtype}) must match`);if(!Wu(r.shape,this.shape))throw new Error(`shape of the new value (${r.shape}) and previous value (${this.shape}) must match`);Pi().disposeTensor(this),this.dataId=r.dataId,Pi().incRef(this,null)}dispose(){Pi().disposeVariable(this),this.isDisposedInternal=!0}}Object.defineProperty(Fg,Symbol.hasInstance,{value:r=>r instanceof Dn&&r.assign!=null&&r.assign instanceof Function});var HO;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(HO||(HO={}));var FI;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(FI||(FI={}));var _I;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(_I||(_I={}));var WI;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(WI||(WI={}));var $I;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})($I||($I={}));const D9={float32:WI,int32:FI,bool:_I,complex64:$I};function qO(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return D9[r][l]}function St(r,l){if(r.dtype===l.dtype)return[r,l];const u=qO(r.dtype,l.dtype);return[r.cast(u),l.cast(u)]}function _g(r){const l=[],u=new Set;return jO(r,l,u),l}function jO(r,l,u){if(r==null)return;if(r instanceof Dn){l.push(r);return}if(!k9(r))return;const p=r;for(const y in p){const g=p[y];u.has(g)||(u.add(g),jO(g,l,u))}}function k9(r){return Array.isArray(r)||typeof r=="object"}class KO{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null}}dispose(){for(const r in this.registeredVariables)this.registeredVariables[r].dispose()}}class Vu{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new KO}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;const r=this.getSortedBackends();for(let l=0;l{l.setupFunc!=null&&l.setupFunc(this.backendInstance)})}disposeRegisteredKernels(r){const l=OI(r);l.forEach(u=>{u.disposeFunc!=null&&u.disposeFunc(this.registry[r])})}initializeBackend(r){const l=this.registryFactory[r];if(l==null)throw new Error(`Cannot initialize backend ${r}, no registration found.`);try{const u=l.factory();if(u&&!(u instanceof K2)&&typeof u.then=="function"){const p=++this.pendingBackendInitId,y=u.then(g=>p(pthis.registryFactory[l].priority-this.registryFactory[r].priority)}initializeBackendsAndReturnBest(){const r=this.getSortedBackends();for(let l=0;lthis.startScope(u),()=>this.endScope(p),()=>(p=l(),p instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),p))}scopedRun(r,l,u){r();try{const p=u();return l(),p}catch(p){throw l(),p}}nextTensorId(){return Vu.nextTensorId++}nextVariableId(){return Vu.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),u={x:r},p=g=>({x:()=>{const I="float32",S={x:g},T={dtype:I};return H.runKernelFunc(C=>C.cast(g,I),S,null,qc,T)}}),y=[];return this.addTapeNode(this.state.activeScope.name,u,[l],p,y,{}),l}runKernel(r,l,u,p,y){const g=null,I=null;return this.runKernelFunc(g,l,I,r,u,p,y)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,u){const p=this.backend.numDataIds();let y=0;u.forEach(S=>{y+=S.dtype==="complex64"?3:1});const g=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],I=p-l-y-g;if(I>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${I} data ids) after running '${r}'`)}runKernelFunc(r,l,u,p,y,g,I){let S,T=[];const C=this.isTapeOn();p==null&&(p=this.state.activeScope!=null?this.state.activeScope.name:"");const D=this.state.numBytes,_=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let A;const B=Eg(p,this.backendName);let ne;if(B!=null)A=()=>{const P=this.backend.numDataIds();ne=B.kernelFunc({inputs:l,attrs:y,backend:this.backend});const ge=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,P,ge);const ae=ge.map(({dataId:Le,shape:ve,dtype:Ve})=>this.makeTensorFromDataId(Le,ve,Ve));if(C){let Le=this.getTensorsForGradient(p,l,ae);if(Le==null){I==null&&(I=[]);const ve=ae.filter((Ve,at)=>I[at]);Le=(g||[]).slice().concat(ve)}T=this.saveTensorsForBackwardMode(Le)}return ae};else{const P=ge=>{if(!C)return;T=ge.map(ae=>this.keep(this.clone(ae)))};A=()=>{const ge=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,P));const ae=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,ge,ae),ae}}let te;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?S=A():(te=this.profiler.profileKernel(p,l,()=>A()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(te),S=te.outputs)}),C&&this.addTapeNode(p,l,S,u,T,y),this.state.profiling&&this.state.activeProfile.kernels.push({name:p,bytesAdded:this.state.numBytes-D,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-_,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(P=>l[P]!=null?l[P].shape:null),outputShapes:S.map(P=>P.shape),kernelTimeMs:te.timeMs,extraInfo:te.extraInfo}),Array.isArray(ne)?S:S[0]}saveTensorsForBackwardMode(r){const l=r.map(u=>this.keep(this.clone(u)));return l}getTensorsForGradient(r,l,u){const p=RI(r);if(p!=null){const y=p.inputsToSave||[],g=p.outputsToSave||[];let I;p.saveAllInputs?(J(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),I=Object.keys(l).map(T=>l[T])):I=y.map(T=>l[T]);const S=u.filter((T,C)=>g[C]);return I.concat(S)}return null}makeTensor(r,l,u,p){if(r==null)throw new Error("Values passed to engine.makeTensor() are null");u=u||"float32",p=p||this.backend;let y=r;u==="string"&&$u(r[0])&&(y=r.map(S=>_O(S)));const g=p.write(y,l,u),I=new Dn(l,u,g,this.nextTensorId());if(this.incRef(I,p),u==="string"){const S=this.state.tensorInfo.get(g),T=nR(y);this.state.numBytes+=T-S.bytes,S.bytes=T}return I}makeTensorFromDataId(r,l,u,p){u=u||"float32";const y=new Dn(l,u,r,this.nextTensorId());return this.incRef(y,p),y}makeVariable(r,l=!0,u,p){u=u||this.nextVariableId().toString(),p!=null&&p!==r.dtype&&(r=r.cast(p));const y=new Fg(r,l,u,this.nextTensorId());if(this.state.registeredVariables[y.name]!=null)throw new Error(`Variable with name ${y.name} was already registered`);return this.state.registeredVariables[y.name]=y,this.incRef(y,this.backend),y}incRef(r,l){const u=this.state.tensorInfo.has(r.dataId)?this.state.tensorInfo.get(r.dataId).refCount:0;if(this.state.numTensors++,r.dtype==="string"&&this.state.numStringTensors++,u===0){this.state.numDataBuffers++;let p=0;r.dtype!=="complex64"&&r.dtype!=="string"&&(p=r.size*tR(r.dtype)),this.state.tensorInfo.set(r.dataId,{backend:l||this.backend,dtype:r.dtype,shape:r.shape,bytes:p,refCount:0}),this.state.numBytes+=p}this.state.tensorInfo.get(r.dataId).refCount++,r instanceof Fg||this.track(r)}disposeTensor(r){if(!this.state.tensorInfo.has(r.dataId))return;this.state.numTensors--,r.dtype==="string"&&this.state.numStringTensors--;const l=this.state.tensorInfo.get(r.dataId),u=l.refCount;u<=1?(r.dtype!=="complex64"&&(this.state.numBytes-=l.bytes),this.state.numDataBuffers--,l.backend.disposeData(r.dataId),this.state.tensorInfo.delete(r.dataId)):this.state.tensorInfo.get(r.dataId).refCount--}disposeVariables(){for(const r in this.state.registeredVariables){const l=this.state.registeredVariables[r];this.disposeVariable(l)}}disposeVariable(r){this.disposeTensor(r),this.state.registeredVariables[r.name]!=null&&delete this.state.registeredVariables[r.name]}memory(){const r=this.backend.memory();return r.numTensors=this.state.numTensors,r.numDataBuffers=this.state.numDataBuffers,r.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(r.unreliable=!0,r.reasons==null&&(r.reasons=[]),r.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),r}async profile(r){this.state.profiling=!0;const l=this.state.numBytes,u=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await r(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(p=>p.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-l,this.state.activeProfile.newTensors=this.state.numTensors-u;for(const p of this.state.activeProfile.kernels)p.kernelTimeMs=await p.kernelTimeMs,p.extraInfo=await p.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(r,l,u,p,y,g){const I={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:u,saved:y},S=RI(r);S!=null&&(p=S.gradFunc),p!=null&&(I.gradient=T=>(T=T.map((C,D)=>{if(C==null){const _=u[D],A=pa(_.size,_.dtype);return this.makeTensor(A,_.shape,_.dtype)}return C}),p(T.length>1?T:T[0],y,g))),this.state.activeTape.push(I)}keep(r){return r.kept=!0,r}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(r){const l={track:[],name:"unnamed scope",id:this.state.nextScopeId++};r&&(l.name=r),this.state.scopeStack.push(l),this.state.activeScope=l}endScope(r){const l=_g(r),u=new Set(l.map(y=>y.id));for(let y=0;y{!y.kept&&y.scopeId===p.id&&this.track(y)})}gradients(r,l,u,p=!1){if(J(l.length>0,()=>"gradients() received an empty list of xs."),u!=null&&u.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${u.dtype}'`);const y=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));J(y instanceof Dn,()=>"The result y returned by f() must be a tensor.");const g=$O(this.state.activeTape,l,y);if(!p&&g.length===0&&l.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{const I={};I[y.id]=u==null?F9(y.shape):u,UO(I,g,T=>this.tidy(T),_9);const S=l.map(T=>I[T.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(T=>{for(const C of T.saved)C.dispose()}),this.state.activeTape=null),{value:y,grads:S}})}customGrad(r){return J(II(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{J(l.every(y=>y instanceof Dn),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let u;const p={};return l.forEach((y,g)=>{p[g]=y}),this.runKernelFunc((y,g)=>(u=r(...l,g),J(u.value instanceof Dn,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),J(II(u.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),u.value),p,(y,g)=>{const I=u.gradFunc(y,g),S=Array.isArray(I)?I:[I];J(S.length===l.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),J(S.every(C=>C instanceof Dn),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");const T={};return S.forEach((C,D)=>{T[D]=()=>C}),T})}}readSync(r){const l=this.state.tensorInfo.get(r);return l.backend.readSync(r)}read(r){const l=this.state.tensorInfo.get(r);return l.backend.read(r)}async time(r){const l=EI(),u=await this.backend.time(r);return u.wallMs=EI()-l,u}track(r){return this.state.activeScope!=null&&(r.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(r)),r}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new KO;for(const r in this.registry)this.disposeRegisteredKernels(r),this.registry[r].dispose(),delete this.registry[r];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}}Vu.nextTensorId=0;Vu.nextVariableId=0;function F9(r){const l=Df(Zt(r),"float32");return H.makeTensor(l,r,"float32")}function UI(){const r=AI();if(r._tfengine==null){const l=new rR(r);r._tfengine=new Vu(l)}return aR(r._tfengine.ENV),VO(()=>r._tfengine),r._tfengine}const H=UI();function _9(r,l){const u={a:r,b:l};return H.runKernelFunc((p,y)=>{const g=p.add(r,l);return y([r,l]),g},u,null,Hc)}function XO(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const Lr=Ds();Lr.registerFlag("DEBUG",()=>!1,r=>{r&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Lr.registerFlag("IS_BROWSER",()=>XO());Lr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Lr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Lr.registerFlag("PROD",()=>!1);Lr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Lr.getBool("DEBUG"));Lr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Lr.registerFlag("IS_TEST",()=>!1);function Sr(r,l){let u=r;if(Es(r))return l==="string"?[]:[r.length];if(!Array.isArray(r))return[];const p=[];for(;Array.isArray(u)||Es(u)&&l!=="string";)p.push(u.length),u=u[0];return Array.isArray(r)&&Ds().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&JO(r,p,[]),p}function JO(r,l,u){if(u=u||[],!Array.isArray(r)&&!Es(r)){J(l.length===0,()=>`Element arr[${u.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}J(l.length>0,()=>`Element arr[${u.join("][")}] should be a primitive, but is an array of ${r.length} elements`),J(r.length===l[0],()=>`Element arr[${u.join("][")}] should have ${l[0]} elements, but has ${r.length} elements`);const p=l.slice(1);for(let y=0;y=0&&(y=p),ZO(p,y,l,u),r==null||!Es(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){const T=r==null?"null":r.constructor.name;throw new Error(`Argument '${l}' passed to '${u}' must be a Tensor or TensorLike, but got '${T}'`)}const g=Sr(r,y);!Es(r)&&!Array.isArray(r)&&(r=[r]);const I=!0,S=y!=="string"?Dg(r,y):da(r,[],I);return H.makeTensor(S,g,y)}function Wg(r,l,u,p="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${u} must be a \`Tensor[]\` or \`TensorLike[]\``);const y=r;return y.map((g,I)=>M(g,`${l}[${I}]`,u),p)}const QO="__op";function V(r){const l=Object.keys(r);if(l.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${l.length} keys.`);let u=l[0];const p=r[u];u.endsWith("_")&&(u=u.substring(0,u.length-1)),u=u+QO;const y=(...g)=>{H.startScope(u);try{const I=p(...g);return Ff(I)&&console.error("Cannot return a Promise inside of tidy."),H.endScope(I),I}catch(I){throw H.endScope(null),I}};return Object.defineProperty(y,"name",{value:u,configurable:!0}),y}function W9(r,l){const u=M(r,"real","complex"),p=M(l,"imag","complex");tn(u.shape,p.shape,`real and imag shapes, ${u.shape} and ${p.shape}, must match in call to tf.complex().`);const y=I=>I.complex(u,p),g={real:u,imag:p};return H.runKernelFunc(y,g,null,TR)}const zi=V({complex_:W9});function Vi(r,l,u,p){if(p==null&&(p=Uu(r)),p==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Es(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(l!=null){kf(l);const y=Zt(l),g=Zt(u);J(y===g,()=>`Based on the provided shape, [${l}], the tensor should have ${y} values but has ${g}`);for(let I=0;I`Error creating a new Tensor. Inferred shape (${u}) does not match the provided shape (${l}). `)}}return!Es(r)&&!Array.isArray(r)&&(r=[r]),l=l||u,r=p!=="string"?Dg(r,p):da(r,[],!0),H.makeTensor(r,l,p)}function BI(r,l,u){const p=Sr(r,u);return Vi(r,l,p,u)}function Gu(r,l="float32",u){return l=l||"float32",kf(r),new zO(r,l,u)}function $9(r,l){const u=M(r,"x","cast");if(!eR(l))throw new Error(`Failed to cast to unknown dtype ${l}`);if(l==="string"&&u.dtype!=="string"||l!=="string"&&u.dtype==="string")throw new Error("Only strings can be casted to strings");const p={x:u},y={dtype:l};return H.runKernelFunc(g=>g.cast(u,l),p,null,qc,y)}const Ie=V({cast_:$9});function U9(r){const l=M(r,"x","clone",null),u=()=>H.makeTensorFromDataId(l.dataId,l.shape,l.dtype),p={x:l};return H.runKernelFunc(u,p,null,Jf)}const gi=V({clone_:U9});function MI(r,l=!1){console.log(r.toString(l))}UI();const B9={buffer:Gu,cast:Ie,clone:gi,print:MI};GO(B9);function M9(r,l){const u=M(r,"x","reshape",null),p={x:u},y={shape:l},g=(I,S)=>(l=X2(l,u.size),J(u.size===Zt(l),()=>"new shape and old shape must have the same number of elements."),S([u]),I.reshape(u,l));return H.runKernelFunc(g,p,null,lg,y)}const re=V({reshape_:M9});function P9(r,l,u=!1,p=!1){let y=M(r,"a","matMul"),g=M(l,"b","matMul");[y,g]=St(y,g);const I=(C,D)=>{D([y,g]);const _=u?y.shape[y.rank-2]:y.shape[y.rank-1],A=p?g.shape[g.rank-1]:g.shape[g.rank-2],B=u?y.shape[y.rank-1]:y.shape[y.rank-2],ne=p?g.shape[g.rank-2]:g.shape[g.rank-1],te=y.shape.slice(0,-2),P=g.shape.slice(0,-2),ge=Zt(te),ae=Zt(P),Le=ge===ae||ge===1||ae===1;J(y.rank>=2&&g.rank>=2&&Le,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${te}) and (${P}).`),J(_===A,()=>`Error in matMul: inner shapes (${_}) and (${A}) of Tensors with shapes ${y.shape} and ${g.shape} and transposeA=${u} and transposeB=${p} must match.`);const ve=ge>ae?te:P,Ve=ve.concat([B,ne]),at=u?re(y,[ge,_,B]):re(y,[ge,B,_]),pt=p?re(g,[ae,ne,A]):re(g,[ae,A,ne]),$t=C.batchMatMul(at,pt,u,p);return re($t,Ve)},S={a:y,b:g},T={transposeA:u,transposeB:p};return H.runKernelFunc(I,S,null,Wf,T)}const yn=V({matMul_:P9});function z9(r,l){const u=M(r,"x","transpose");if(l==null&&(l=u.shape.map((g,I)=>I).reverse()),J(u.rank===l.length,()=>`Error in transpose: rank of input ${u.rank} must match length of perm ${l}.`),l.forEach(g=>{J(g>=0&&g`All entries in 'perm' must be between 0 and ${u.rank-1} but got ${l}`)}),u.rank<=1)return u.clone();const p={x:u},y={perm:l};return H.runKernelFunc(g=>g.transpose(u,l),p,null,vg,y)}const xn=V({transpose_:z9});function PI(r,l,u){if(Gc(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const p=Sr(r,u);if(p.length!==3&&p.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return Vi(r,l,p,u)}const zI={};vu(zI,{fromPixels:()=>Y9,toPixels:()=>G9});let Kc;function V9(r,l=3){if(l>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let u=!1,p=!1,y=!1,g=!1,I=!1;if(r.data instanceof Uint8Array)u=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)p=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)y=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)g=!0;else if(r.getContext!=null)I=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(y){const B=2;if(y&&r.readyState element.")}const S=Eg(NI,H.backendName);if(S!=null){const B={pixels:r},ne={numChannels:l};return H.runKernel(NI,B,ne)}const[T,C]=y?[r.videoWidth,r.videoHeight]:[r.width,r.height];let D;I?D=r.getContext("2d").getImageData(0,0,T,C).data:p||u?D=r.data:(g||y)&&(Kc==null&&(Kc=document.createElement("canvas").getContext("2d")),Kc.canvas.width=T,Kc.canvas.height=C,Kc.drawImage(r,0,0,T,C),D=Kc.getImageData(0,0,T,C).data);let _;if(l===4)_=new Int32Array(D);else{const B=T*C;_=new Int32Array(B*l);for(let ne=0;ne4||g===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${g}`);if(u.dtype!=="float32"&&u.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${u.dtype}. Please use float32 or int32 tensors.`);const I=await u.data(),S=u.dtype==="float32"?255:1,T=new Uint8ClampedArray(y*p*4);for(let C=0;C1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${B}.`)}else if(u.dtype==="int32"&&(B<0||B>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${B}.`);g===1?(D[0]=B*S,D[1]=B*S,D[2]=B*S):D[A]=B*S}const _=C*4;T[_+0]=Math.round(D[0]),T[_+1]=Math.round(D[1]),T[_+2]=Math.round(D[2]),T[_+3]=Math.round(D[3])}if(l!=null){l.width=y,l.height=p;const C=l.getContext("2d"),D=new ImageData(T,y,p);C.putImageData(D,0,0)}return u!==r&&u.dispose(),T}const Y9=V({fromPixels_:V9});function e1(r,l,u){const p=r.shape.length;J(p===l.length,()=>`Error in slice${p}D: Length of begin ${l} must match the rank of the array (${p}).`),J(p===u.length,()=>`Error in slice${p}D: Length of size ${u} must match the rank of the array (${p}).`);for(let y=0;y`Error in slice${p}D: begin[${y}] + size[${y}] (${l[y]+u[y]}) would overflow input.shape[${y}] (${r.shape[y]})`)}function $g(r,l,u){let p;const y=r.shape.length;typeof l=="number"?p=[l,...new Array(y-1).fill(0)]:l.length{J(I!==-1,()=>"slice() does not support negative begin indexing.")});let g;return u==null?g=new Array(y).fill(-1):typeof u=="number"?g=[u,...new Array(y-1).fill(-1)]:u.lengthI>=0?I:(J(I===-1,()=>`Negative size values should be exactly -1 but got ${I} for the slice() size at index ${S}.`),r.shape[S]-p[S])),[p,g]}function H9(r){Ds().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}YO(H9);function t1(r,l){return H.tidy(r,l)}function n1(r){const l=_g(r);l.forEach(u=>u.dispose())}function q9(r,l){let u=M(r,"a","add"),p=M(l,"b","add");[u,p]=St(u,p);const y=(I,S)=>{const T=I.add(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Hc)}const vt=V({add_:q9});function j9(r,l){let u=M(r,"a","floorDiv"),p=M(l,"b","floorDiv");[u,p]=St(u,p);const y=(I,S)=>{const T=I.floorDiv(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,jf)}const VI=V({floorDiv_:j9});function K9(r,l){let u=M(r,"a","div"),p=M(l,"b","div");if([u,p]=St(u,p),u.dtype==="int32"&&p.dtype==="int32")return VI(u,p);const y=(S,T)=>{const C=S.realDivide(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,Yf,I)}const Me=V({div_:K9});function X9(r,l){let u=M(r,"a","mul"),p=M(l,"b","mul");[u,p]=St(u,p);const y=(I,S)=>{const T=I.multiply(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,ig)}const le=V({mul_:X9});function J9(r){const l=M(r,"x","abs"),u={x:l};return H.runKernelFunc((p,y)=>(y([l]),l.dtype==="complex64"?p.complexAbs(l):p.abs(l)),u,null,_f)}const Vn=V({abs_:J9});function Z9(r,l){for(let u=0;ur[g]);return[u,y]}function os(r,l){const u=l.map(p=>1);return Q9(r,u,l)}function Gi(r,l){if(Z9(r,l))return null;const u=[];for(let p=0;pu.push(p)),u}function Xc(r){return r.map((l,u)=>[u,l]).sort((l,u)=>l[1]-u[1]).map(l=>l[0])}function fo(r,l){const u=[];for(let p=l-r;p`The output # of rows (${S}) must be an integer. Change the stride and/or zero pad parameters`);const T=ma((I-l+2*p)/u+1,y);return J(nn(T),()=>`The output # of columns (${T}) must be an integer. Change the stride and/or zero pad parameters`),[S,T]}function sZ(r,l,u,p,y,g){y==null&&(y=i1(r,l,p));const I=r[0],S=r[1],T=r[2],C=ma((I-l+2*y)/p+1,g);J(nn(C),()=>`The output # of depths (${C}) must be an integer. Change the stride and/or zero pad parameters`);const D=ma((S-l+2*y)/p+1,g);J(nn(D),()=>`The output # of rows (${D}) must be an integer. Change the stride and/or zero pad parameters`);const _=ma((T-l+2*y)/p+1,g);return J(nn(_),()=>`The output # of columns (${_}) must be an integer. Change the stride and/or zero pad parameters`),[C,D,_,u]}function i1(r,l,u,p=1){const y=Jc(l,p);return Math.floor((r[0]*(u-1)-u+y)/2)}function Ug(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function GI(r){return typeof r=="number"?[r,r,r]:r}function Jc(r,l){return l<=1?r:r+(r-1)*(l-1)}function eZ(r,l,u,p,y,g,I,S,T){let C,D,_;if(typeof r=="number"){const A=r===0?"VALID":"NUMBER";C={top:r,bottom:r,left:r,right:r,type:A};const B=nZ([l,u],g,p,r,S);D=B[0],_=B[1]}else if(r==="same"){D=Math.ceil(l/p),_=Math.ceil(u/y);const A=Math.max(0,(D-1)*p+g-l),B=Math.max(0,(_-1)*y+I-u),ne=Math.floor(A/2),te=A-ne,P=Math.floor(B/2),ge=B-P;C={top:ne,bottom:te,left:P,right:ge,type:"SAME"}}else if(r==="valid")C={top:0,bottom:0,left:0,right:0,type:"VALID"},D=Math.ceil((l-g+1)/p),_=Math.ceil((u-I+1)/y);else if(typeof r=="object"){const A=T==="channelsLast"?r[1][0]:r[2][0],B=T==="channelsLast"?r[1][1]:r[2][1],ne=T==="channelsLast"?r[2][0]:r[3][0],te=T==="channelsLast"?r[2][1]:r[3][1],P=A===0&&B===0&&ne===0&&te===0?"VALID":"EXPLICIT";C={top:A,bottom:B,left:ne,right:te,type:P},D=ma((l-g+A+B)/p+1,S),_=ma((u-I+ne+te)/y+1,S)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:C,outHeight:D,outWidth:_}}function tZ(r,l,u,p,y,g,I,S,T,C,D){let _,A,B,ne;if(typeof r=="number"){const te=r===0?"VALID":"NUMBER";_={top:r,bottom:r,left:r,right:r,front:r,back:r,type:te};const P=sZ([l,u,p,1],S,1,y,r,D);A=P[0],B=P[1],ne=P[2]}else if(r==="same"){A=Math.ceil(l/y),B=Math.ceil(u/g),ne=Math.ceil(p/I);const te=(A-1)*y+S-l,P=(B-1)*g+T-u,ge=(ne-1)*I+C-p,ae=Math.floor(te/2),Le=te-ae,ve=Math.floor(P/2),Ve=P-ve,at=Math.floor(ge/2),pt=ge-at;_={top:ve,bottom:Ve,left:at,right:pt,front:ae,back:Le,type:"SAME"}}else if(r==="valid")_={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},A=Math.ceil((l-S+1)/y),B=Math.ceil((u-T+1)/g),ne=Math.ceil((p-C+1)/I);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:_,outDepth:A,outHeight:B,outWidth:ne}}function ma(r,l){if(!l)return r;switch(l){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${l}`)}}function go(r){const[l,u,p]=Ug(r);return l===1&&u===1&&p===1}function yo(r,l){return go(r)||go(l)}function Zc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function r1(r,l){const u=r[0].length;r.forEach((y,g)=>{J(y.length===u,()=>`Error in concat${u}D: rank of tensors[${g}] must be the same as the rank of the rest (${u})`)}),J(l>=0&&l`Error in concat${u}D: axis must be between 0 and ${u-1}.`);const p=r[0];r.forEach((y,g)=>{for(let I=0;I`Error in concat${u}D: Shape of tensors[${g}] (${y}) does not match the shape of the rest (${p}) along the non-concatenated axis ${g}.`)})}function o1(r,l){const u=r[0].slice();for(let p=1;p=1,()=>"Pass at least one tensor to concat");let u=Wg(r,"tensors","concat");u[0].dtype==="complex64"&&u.forEach(I=>{if(I.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${I.dtype}. `)});const p=(I,S)=>{const T=gt(l,u[0].shape)[0],C=o1(u.map(A=>A.shape),T);if(Zt(C)===0)return BI([],C);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const D=u.map(A=>A.shape);r1(D,T);const _=I.concat(u,T);return S(u),_},y=u,g={axis:l};return H.runKernelFunc(p,y,null,Bf,g)}const Tn=V({concat_:iZ});function rZ(r){const l=M(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sigmoid(l);return y([g]),g},u,null,bg)}const YI=V({sigmoid_:rZ});function oZ(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const y=(S,T)=>{const[C,D]=$g(p,l,u);return e1(p,C,D),T([p]),S.slice(p,C,D)},g={x:p},I={begin:l,size:u};return H.runKernelFunc(y,g,null,fg,I)}const Tt=V({slice_:oZ});function aZ(r,l,u){const p=M(r,"x","batchToSpaceND"),y=l.reduce((T,C)=>T*C);J(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(p.shape[0]%y===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${y}`);const g=T=>T.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,$f,S)}const HI=V({batchToSpaceND_:aZ});function cZ(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(D=>!(D>0)||D%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const D=u.shape.slice();for(;D.length=0;D--)if(y[D]===l[D])g[D]=1;else if(u.shape[D]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=g.map((D,_)=>D>1?_:-1).filter(D=>D>=0);if(I.length===0)return gi(u);const S=D=>D.tile(u,g),T={x:u},C={shape:l,inputShape:y};return H.runKernelFunc(S,T,null,Uf,C)}const Pg=V({broadcastTo_:cZ});function lZ(r,l,u,p,y="NHWC",g=[1,1],I){const S=M(r,"x","conv2d"),T=M(l,"filter","conv2d");let C=S,D=!1;S.rank===3&&(D=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(C.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${C.rank}.`),J(T.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${T.rank}.`),I!=null&&J(nn(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const _=y==="NHWC"?C.shape[3]:C.shape[1];J(_===T.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${T.shape[2]}.`),J(yo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(P,ge)=>{const ae=Zc(y),Le=yi(C.shape,T.shape,u,g,p,I,!1,ae),ve=P.conv2d(C,T,Le);return ge([C,T]),ve},B={x:C,filter:T},ne={strides:u,pad:p,dataFormat:y,dilations:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,Mf,ne);return D?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const qI=V({conv2d_:lZ});function hZ(r,l,u,p,y,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,T=l,C=!1;l.rank===3&&(C=!0,T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(T.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${T.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const D=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?T.shape[3]:T.shape[1];J(D===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${D}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(y),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const A=(P,ge)=>{const ae=1,Le=Zc(g),ve=yi(S,u.shape,p,ae,y,I,!1,Le),Ve=P.conv2dDerInput(T,u,ve);return ge([T,u]),Ve},B={dy:T,filter:u},ne={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,inputShape:S},te=H.runKernelFunc(A,B,null,Pf,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const a1=V({conv2DBackpropInput_:hZ});function uZ(r,l,u,p,y){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const T=g[4],C=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(T===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${T}) must match input depth for filter ${u.shape[3]}.`),J(C===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[4]}.`);const D=ne=>{const te=1,P=Yu(g,u.shape,p,te,y);return ne.conv3dDerInput(I,u,P)},_={dy:I,filter:u},A={pad:y,strides:p,inputShape:g},B=H.runKernelFunc(D,_,null,CR,A);return S?re(B,[B.shape[1],B.shape[2],B.shape[3],B.shape[4]]):B}const c1=V({conv3DBackpropInput_:uZ});function dZ(r){const l=M(r,"x","cos"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cos(l);return y([l]),g},u,null,zf)}const Hu=V({cos_:dZ});function pZ(r){const l=M(r,"x","cosh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cosh(l);return y([l]),g},u,null,Vf)}const jI=V({cosh_:pZ});function mZ(r,l=0,u=!1,p=!1){const y=M(r,"x","cumsum"),g=(T,C)=>{const D=Gi([l],y.rank);let _=y;D!=null&&(_=xn(y,D));const A=fo(1,y.rank)[0];let B=T.cumsum(_,A,u,p);if(C([y]),D!=null){const ne=Xc(D);B=xn(B,ne)}return B},I={x:y},S={axis:l,exclusive:u,reverse:p};return H.runKernelFunc(g,I,null,Gf,S)}const KI=V({cumsum_:mZ});function Dt(r,l){const u=[];for(let p=0;p1)&&u.unshift(g)}return u}function ot(r,l){const u=[],p=Math.max(r.length,l.length);for(let y=0;yI.equal(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,BR)}const XI=V({equal_:fZ});function gZ(r,l,u){const p=M(l,"a","where"),y=M(u,"b","where"),g=M(r,"condition","where","bool"),I=ot(p.shape,y.shape),S=Pg(p,I),T=Pg(y,I);g.rank===1&&J(g.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,T.shape,"Error in where: ");const C=(_,A)=>{const B=_.select(g,S,T);return A([g]),B},D={condition:g,t:S,e:T};return H.runKernelFunc(C,D,null,mg)}const Gn=V({where_:gZ});function yZ(r){const l=M(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(p=>p.zerosLike(l),u,null,Rg)}const Xe=V({zerosLike_:yZ});function bZ(r){const l=M(r,"x","exp"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.exp(l);return y([g]),g},u,null,Hf)}const Yn=V({exp_:bZ});function wZ(r,l=0){const u=null,p=M(r,"x","expandDims",u);J(l<=p.rank,()=>"Axis must be <= rank of the tensor");const y=p.shape.slice();return l<0&&(J(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),y.splice(l,0,1),re(p,y)}const ks=V({expandDims_:wZ});function LZ(r,l){const u=null,p=M(r,"x","tile",u);J(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const y=(T,C)=>{const D=T.tile(p,l);return C([p]),D},g=[p],I={x:p},S={reps:l};return H.runKernelFunc(y,I,null,Ag,S,g)}const fa=V({tile_:LZ});function SZ(r,l,u,p="float32"){l==null&&(l=r);const y=Gu([r,l],p),g=r<=l?r:l;for(let S=0;Sy.fill(r,l,u),{},null,zR,p)}function IZ(r){const l=M(r,"x","floor"),u={x:l};return H.runKernelFunc(p=>p.floor(l),u,null,qf)}const QI=V({floor_:IZ});function l1(r,l,u){const p=r.shape[u],y=[];let g=1,I=1;for(let S=0;S{const D=gt(u,p.shape)[0],_=l1(p,y,D),A=T.gather(p,re(y,[y.size]),D);return C([p,y]),re(A,_.outputShape)};return H.runKernelFunc(S,g,null,Kf,I)}const ex=V({gather_:xZ});function TZ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.greater(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,YR)}const bi=V({greater_:TZ});function AZ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.greaterEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Xf)}const Ir=V({greaterEqual_:AZ});function vZ(r){const l=M(r,"input","imag"),u=y=>y.imag(l),p={input:l};return H.runKernelFunc(u,p,null,qR)}const qu=V({imag_:vZ});function NZ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=St(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.maximum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,tg)}const tx=V({maximum_:NZ});function Fe(r,l){if((Es(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&Es(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return Vi(r,u,p,l)}function CZ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.less(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,JR)}const nx=V({less_:CZ});function RZ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.lessEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,ZR)}const xr=V({lessEqual_:RZ});function OZ(r){const l=M(r,"x","log"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log(l);return y([l]),g},u,null,Zf)}const bo=V({log_:OZ});function EZ(r){const l=M(r,"x","log1p"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log1p(l);return y([l]),g},u,null,Qf)}const sx=V({log1p_:EZ});function zg(r){return H.customGrad(r)}function DZ(r){const l=M(r,"x","neg"),u={x:l};return H.runKernelFunc(p=>p.neg(l),u,null,rg)}const It=V({neg_:DZ});function kZ(r,l=null,u=!1){const p=M(r,"x","max"),y=(S,T)=>{const C=gt(l,p.shape);let D=C;const _=Gi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=fo(D.length,A.rank));const B=S.max(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=os(ne.shape,gt(l,p.shape));ne=re(ne,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(y,g,null,eg,I)}const ga=V({max_:kZ});function FZ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=St(u,p);const y=(I,S)=>{const T=I.subtract(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Tg)}const Be=V({sub_:FZ});function _Z(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Ie(p,"int32"));const y=(S,T)=>{T([p]);const C=gt(l,p.shape),D=Gi(C,p.rank);let _=C,A=p;D!=null&&(A=xn(p,D),_=fo(_.length,p.rank));let B=S.sum(A,_);if(u){const ne=os(B.shape,C);B=re(B,ne)}return B},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,Lg,I)}const _e=V({sum_:_Z});function WZ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),y=gt(l,p.shape),g=ga(p,y,!0),I=Be(p,g),S=Yn(I),T=_e(S,y),C=bo(T),D=vt(re(g,C.shape),C);if(u){const _=os(D.shape,y);return re(D,_)}return D}const ix=V({logSumExp_:WZ});function $Z(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");ot(u.shape,p.shape);const y={a:u,b:p};return H.runKernelFunc(g=>g.logicalAnd(u,p),y,null,QR)}const ya=V({logicalAnd_:$Z});function UZ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(p=>p.logicalNot(l),u,null,eO)}const rx=V({logicalNot_:UZ});function Fs(r,l="float32"){if(l==="complex64"){const p=Fs(r,"float32"),y=Fs(r,"float32");return zi(p,y)}const u=pa(Zt(r),l);return H.makeTensor(u,r,l)}function Yi(r,l="float32"){if(l==="complex64"){const p=Yi(r,"float32"),y=Fs(r,"float32");return zi(p,y)}const u=Df(Zt(r),l);return H.makeTensor(u,r,l)}function BZ(r,l=null,u=!1){const p=M(r,"x","mean"),y=gt(l,p.shape),g=s1(p.shape,y),I=g[1],S=Zt(I),T={x:p},C={axis:l,keepDims:u},D=()=>{const A=Fe(S),B=A.dtype===p.dtype?p:Ie(p,A.dtype),ne=Me(B,A);return _e(ne,l,u)},_=zg(A=>{const B=H.runKernelFunc(D,T,null,cO,C),ne=te=>{const P=A.shape.slice();y.forEach(Le=>{P[Le]=1});const ge=re(te,P),ae=Me(le(ge,Yi(A.shape,"float32")),S);return ae};return{value:B,gradFunc:ne}});return _(p)}const ox=V({mean_:BZ});function MZ(r,l=null,u=!1){const p=M(r,"x","min"),y=(S,T)=>{const C=gt(l,p.shape);let D=C;const _=Gi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=fo(D.length,p.rank));const B=S.min(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=os(ne.shape,C);ne=re(B,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,ng,I)}const Vg=V({min_:MZ});function PZ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=St(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.minimum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,sg)}const ax=V({minimum_:PZ});function zZ(r){const l=M(r,"x","square"),u={},p=[l],y=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,p,y)}const yt=V({square_:zZ});function VZ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.notEqual(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,uO)}const cx=V({notEqual_:VZ});function GZ(r){const l=M(r,"input","real"),u=y=>y.real(l),p={input:l};return H.runKernelFunc(u,p,null,wO)}const Qc=V({real_:GZ});function YZ(r,l,u=0){const p=M(r,"x","pad");if(p.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const y=(S,T)=>(T([p]),S.pad(p,l,u)),g={paddings:l,constantValue:u},I={x:p};return H.runKernelFunc(y,I,null,og,g)}const lx=V({pad_:YZ});function HZ(r,l,u){const p=M(r,"x","spaceToBatchND");J(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(p.shape.reduce((S,T,C)=>C>0&&C<=l.length?S&&(T+u[C-1][0]+u[C-1][1])%l[C-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const y=S=>S.spaceToBatchND(p,l,u),g={x:p},I={blockShape:l,paddings:u};return H.runKernelFunc(y,g,null,Sg,I)}const hx=V({spaceToBatchND_:HZ});function qZ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=St(u,p);const y={a:u,b:p},g=(I,S)=>{const T=I.pow(u,p);return S([u,p,T]),T};return H.runKernelFunc(g,y,null,ag)}const ba=V({pow_:qZ});function wo(r,l){Gc(r);const u=Sr(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return Vi(r,p,u,l)}function Gg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const y=()=>{const I=r===l,S=r1;if(I||S||T)return Fs([0],p);const C=Math.abs(Math.ceil((l-r)/u)),D=pa(C,p);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):y.relu(l)),p={x:l};return H.runKernelFunc(u,p,null,cg)}const ju=V({relu_:jZ});function KZ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=gt(l,u.shape);if(u.rank===0)return gi(u);const T=I.reverse(u,S);return re(T,u.shape)},y={x:u},g={dims:l};return H.runKernelFunc(p,y,null,dg,g)}const el=V({reverse_:KZ});function XZ(r){const l=M(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.rsqrt(l);return y([l]),g},u,null,pg)}const ux=V({rsqrt_:XZ});function JZ(r){const l=M(r,"x","sin"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sin(l);return y([l]),g},u,null,gg)}const dx=V({sin_:JZ});function ZZ(r){const l=M(r,"x","sinh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sinh(l);return y([l]),g},u,null,yg)}const px=V({sinh_:ZZ});function QZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=r.as2D(y,p),I=u.fft(g);return I.reshape(r.shape)},l,null,PR)}const Ku=V({fft_:QZ});function eQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=re(r,[y,p]),I=u.ifft(g);return re(I,r.shape)},l,null,HR)}const tl=V({ifft_:eQ});function tQ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const y=re(r,[u,l]);p=tl(y)}else{const y=[u,2*(l-1)],g=re(Qc(r),[u,l]),I=re(qu(r),[u,l]),S=el(Tt(g,[0,1],[u,l-2]),1),T=le(el(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),C=Tn([g,S],1),D=Tn([I,T],1),_=re(zi(C,D),[y[0],y[1]]);p=tl(_)}if(p=Qc(p),r.rank===3&&r.shape[0]!==0){const y=p,g=r.shape[0];p=re(p,[g,p.shape[0]/g,p.shape[1]]),y.dispose()}return p}const mx=V({irfft_:tQ});function h1(r,l,u=0){let p=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const y=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(y<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,T)=>T>0?S+T:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),p=l}return p}function nQ(r,l,u=0){const p=M(r,"x","split"),y=(S,T)=>{const C=gt(u,p.shape)[0],D=h1(p,l,C);return S.split(p,D,C)},g={x:p},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(y,g,null,Ig,I)}const Lo=V({split_:nQ});function sQ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const p=r.size/u;let y;if(l!=null&&l0),te=r.shape.map(P=>P);te[r.shape.length-1]=l,y=Tt(r,ne,te),u=l}else if(l!=null&&l>u){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-u,y=Tn([r,Fs(ne)],r.shape.length-1),u=l}else y=r;const g=Xe(y),I=re(zi(y,g),[p,u]),S=Ku(I),T=Math.floor(u/2)+1,C=Qc(S),D=qu(S),_=Lo(C,[T,u-T],C.shape.length-1),A=Lo(D,[T,u-T],D.shape.length-1),B=y.shape.slice();return B[y.shape.length-1]=T,re(zi(_[0],A[0]),B)}const Xu=V({rfft_:sQ});function iQ(r){const l=M(r,"x","sqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sqrt(l);return y([l]),g},u,null,wg)}const fs=V({sqrt_:iQ});function rQ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(S,T)=>{const C=S.squaredDifference(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,xg,I)}const fx=V({squaredDifference_:rQ});function oQ(r,l){const u=M(r,"x","squeeze");return re(u,J2(u.shape,l).newShape)}const gx=V({squeeze_:oQ});function aQ(r,l=0){const u=Wg(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return ks(u[0],l);const p=u[0].rank,y=u[0].shape,g=u[0].dtype;J(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(y,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>ks(S,l));return Tn(I,l)}const js=V({stack_:aQ});function cQ(r,l=0){const u=M(r,"x","step"),p={x:u},y={alpha:l};return H.runKernelFunc(g=>g.step(u,l),p,null,Og,y)}const wa=V({step_:cQ});function La(r,l,u){if(Gc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=Sr(r,u);if(p.length!==2&&p.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Vi(r,l,p,u)}function lQ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),y=M(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:p,segmentIds:y},I={numSegments:u},S=(T,C)=>{const D=T.unsortedSegmentSum(p,y,u);return C([y]),D};return H.runKernelFunc(S,g,null,Cg,I)}const yx=V({unsortedSegmentSum_:lQ});function hQ(r,l=0){const u=M(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const p={value:u},y={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,p,null,Ng,y)}const Ju=V({unstack_:hQ});function uQ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const y=u1(r,l,u);let g=y.shape;if(p){const I=gt(u,r.shape);g=os(y.shape,I)}return re(y,g)}function u1(r,l,u=null){if(r.rank===0)return Vn(r);if(r.rank!==1&&u===null)return u1(re(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(Vn(r),u);if(l===Infinity)return ga(Vn(r),u);if(l===-Infinity)return Vg(Vn(r),u);if(l==="euclidean"||l===2)return fs(_e(ba(Vn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ga(_e(Vn(r),u[0]),u[1]-1);if(l===Infinity)return ga(_e(Vn(r),u[1]),u[0]);if(l===-Infinity)return Vg(_e(Vn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return fs(_e(yt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const Yg=V({norm_:uQ});function d1(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Hg(r,l,u){const p=1-r%2,y=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(T.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${T.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const C=g==="NHWC"?S.shape[3]:S.shape[1],D=g==="NHWC"?T.shape[3]:T.shape[1];J(C===u[2],()=>`Error in conv2dDerFilter: depth of input ${C}) must match input depth in filter (${u[2]}.`),J(D===u[3],()=>`Error in conv2dDerFilter: depth of dy (${D}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(y),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const _=ne=>{const te=1,P=Zc(g),ge=yi(S.shape,u,p,te,y,I,!1,P);return ne.conv2dDerFilter(S,T,ge)},A={x:S,dy:T},B={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,AR,B)}const qg=V({conv2DBackpropFilter_:dQ});function pQ(r,l,u,p,y,g=[1,1],I){let S=r;r.rank===3&&(S=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let T=l;T.rank===3&&(T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=A=>{const B=yi(r.shape,u,p,g,y,I,!0);return A.depthwiseConv2DDerFilter(S,T,B)},D={x:S,dy:T},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(C,D,null,ER,_)}const p1=V({depthwiseConv2dNativeBackpropFilter_:pQ});function mQ(r,l,u,p,y,g=[1,1],I){let S=l,T=!1;l.rank===3&&(T=!0,S=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=B=>{const ne=yi(r,u.shape,p,g,y,I,!0);return B.depthwiseConv2DDerInput(S,u,ne)},D={dy:S,filter:u},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(C,D,null,DR,_);return T?re(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const m1=V({depthwiseConv2dNativeBackpropInput_:mQ});function fQ(r){return Hg(r,.54,.46)}const f1=V({hammingWindow_:fQ});function gQ(r){return Hg(r,.5,.5)}const jg=V({hannWindow_:gQ});function yQ(r,l,u,p=!1,y=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(p)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${C},4] but had shape ${S.shape}.`),J(T.rank===1&&T.shape[0]===C,()=>`Error in cropAndResize: boxInd must be have size [${C}] but had shape ${S.shape}.`),J(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),J(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),J(y==="bilinear"||y==="nearest",()=>`method must be bilinear or nearest, but was ${y}`);const D=ne=>ne.cropAndResize(I,S,T,p,y,g),_={image:I,boxes:S,boxInd:T},A={method:y,extrapolationValue:g,cropSize:p},B=H.runKernelFunc(D,_,null,RR,A);return B}const y1=V({cropAndResize_:wQ});function LQ(r){const l=M(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=H.runKernel(VR,u,{});return p}const b1=V({flipLeftRight_:LQ});function SQ(r,l,u=0,p=.5){const y=M(r,"image","rotateWithOffset","float32");J(y.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${y.rank}.`);const g={image:y},I={radians:l,fillValue:u,center:p},S=H.runKernel(DO,g,I);return S}const w1=V({rotateWithOffset_:SQ});function Ks(r,l,u,p,y,g){p==null&&(p=.5),y==null&&(y=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g}}function IQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Ks(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T={maxOutputSize:u,iouThreshold:p,scoreThreshold:y};return H.runKernelFunc(C=>C.nonMaxSuppression(g,I,u,p,y),{boxes:g,scores:I},null,dO,T)}const L1=V({nonMaxSuppression_:IQ});function S1(r,l,u){const p=xQ(r,l,u),y=p<0?-(p+1):p;r.splice(y,0,l)}function xQ(r,l,u){return AQ(r,l,u||TQ)}function TQ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?p=g+1:(y=g,I=!S)}return I?p:-p-1}function I1(r,l,u,p,y){return bx(r,l,u,p,y,0).selectedIndices}function x1(r,l,u,p,y,g){return bx(r,l,u,p,y,0,!1,g,!0)}function T1(r,l,u,p,y,g){return bx(r,l,u,p,y,g,!0)}function bx(r,l,u,p,y,g,I=!1,S=!1,T=!1){const C=[];for(let P=0;Py&&C.push({score:l[P],boxIndex:P,suppressBeginIndex:0});C.sort(A1);const D=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const P=C.pop(),{score:ge,boxIndex:ae,suppressBeginIndex:Le}=P;if(ge=Le;--Ve){const at=vQ(r,ae,_[Ve]);if(at>=p){ve=!0;break}if(P.score=P.score*NQ(p,D,at),P.score<=y)break}P.suppressBeginIndex=_.length,ve||(P.score===ge?(_.push(ae),A.push(P.score)):P.score>y&&S1(C,P,A1))}const B=_.length,ne=u-B;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const te={selectedIndices:wo(_,"int32")};return I&&(te.selectedScores=wo(A,"float32")),T&&(te.validOutputs=Fe(B,"int32")),te}function vQ(r,l,u){const p=r.subarray(l*4,l*4+4),y=r.subarray(u*4,u*4+4),g=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),T=Math.max(p[1],p[3]),C=Math.min(y[0],y[2]),D=Math.min(y[1],y[3]),_=Math.max(y[0],y[2]),A=Math.max(y[1],y[3]),B=(S-g)*(T-I),ne=(_-C)*(A-D);if(B<=0||ne<=0)return 0;const te=Math.max(g,C),P=Math.max(I,D),ge=Math.min(S,_),ae=Math.min(T,A),Le=Math.max(ge-te,0)*Math.max(ae-P,0);return Le/(B+ne-Le)}function NQ(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function A1(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function CQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Ks(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T=await Promise.all([g.data(),I.data()]),C=T[0],D=T[1],_=I1(C,D,u,p,y);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const v1=CQ;function RQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Ks(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C={boxes:I,scores:S},D={maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g},_=H.runKernel(mO,C,D);return{selectedIndices:_[0],selectedScores:_[1]}}const N1=V({nonMaxSuppressionWithScore_:RQ});async function OQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Ks(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C=await Promise.all([I.data(),S.data()]),D=C[0],_=C[1],A=T1(D,_,u,p,y,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const C1=OQ;function EQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Ks(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,A={boxes:I,scores:S},B={maxOutputSize:C,iouThreshold:D,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(pO,A,B);return{selectedIndices:ne[0],validOutputs:ne[1]}}const R1=V({nonMaxSuppressionPadded_:EQ});async function DQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Ks(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,[A,B]=await Promise.all([I.data(),S.data()]),ne=x1(A,B,C,D,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const O1=DQ;function kQ(r,l,u=!1){const p=M(r,"images","resizeBilinear");J(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T=(A,B)=>(B([y]),A.resizeBilinear(y,I,S,u)),C={images:y},D={alignCorners:u,size:l},_=H.runKernelFunc(T,C,null,ug,D);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const E1=V({resizeBilinear_:kQ});function FQ(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");J(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T={images:y},C={alignCorners:u,size:l},D=(A,B)=>(B([y]),A.resizeNearestNeighbor(y,I,S,u)),_=H.runKernelFunc(D,T,null,hg,C);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const D1=V({resizeNearestNeighbor_:FQ});function _Q(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");J(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const y=p.shape,[g,I]=p.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=re(Gg(0,g,1,"int32"),[-1,1]),T=Gg(0,I,1,"int32"),C=Be(S,T),D=ya(xr(C,Fe(+l,"int32")),Ir(C,Fe(-u,"int32"))),_=Fs([g,I],p.dtype);return re(js(Ju(re(p,[-1,g,I])).map(A=>Gn(D,A,_))),y)}const k1=V({bandPart_:_Q});function WQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const y=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${y})`)}else l=!0,r=Lo(r,r.shape[0],0).map(y=>gx(y,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],p=r;for(let y=0;y{let g=p[y];if(y>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return _1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((T,C)=>T*C),p=Ju(re(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),y=[],g=[];p.forEach(T=>{const[C,D]=_1(T,l);y.push(C),g.push(D)});const I=re(js(y,0),r.shape),S=re(js(g,0),r.shape);return[I,S]}}function _1(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],p=r.shape[1];let y=JI(u),g=gi(r);const I=La([[1]],[1,1]);let S=gi(I);const T=u>=p?p:u;for(let C=0;C{const B=Tt(g,[C,C],[u-C,1]),ne=Yg(B),te=Tt(g,[C,C],[1,1]),P=Gn(bi(te,0),La([[-1]]),La([[1]])),ge=Be(te,le(P,ne)),ae=Me(B,ge);ae.shape[0]===1?S=gi(I):S=Tn([I,Tt(ae,[1,0],[ae.shape[0]-1,ae.shape[1]])],0);const Le=It(Me(yn(P,ge),ne)),ve=Tt(g,[C,0],[u-C,p]),Ve=le(Le,S),at=xn(S);if(C===0)g=Be(ve,yn(Ve,yn(at,ve)));else{const Gt=Be(ve,yn(Ve,yn(at,ve)));g=Tn([Tt(g,[0,0],[C,p]),Gt],0)}const pt=xn(Ve),$t=Tt(y,[0,C],[u,y.shape[1]-C]);if(C===0)y=Be($t,yn(yn($t,S),pt));else{const Gt=Be($t,yn(yn($t,S),pt));y=Tn([Tt(y,[0,0],[u,C]),Gt],1)}return[S,g,y]}),n1([D,_,A])}return!l&&u>p&&(y=Tt(y,[0,0],[u,p]),g=Tt(g,[0,0],[p,p])),[y,g]})}const W1=V({qr_:$Q});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function UQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let y=null;l!=null&&(y=M(l,"weights","computeWeightedLoss"));const g=y==null?p:le(p,y);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(y==null)return ox(g);{const I=p.size/y.size,S=Me(_e(g),_e(y));return I>1?Me(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(y==null)return Me(_e(g),Fe(p.size));{const I=le(y,Yi(p.shape)),S=Ie(_e(cx(I,Fe(0))),"float32");return Me(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const kn=V({computeWeightedLoss_:UQ});function BQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),tn(y.shape,g.shape,"Error in absoluteDifference: ");const S=Vn(Be(y,g));return kn(S,I,p)}const $1=V({absoluteDifference_:BQ});function MQ(r,l,u,p,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const T=Fe(1),C=Be(T,_e(le(g,I),u,!0));return kn(C,S,y)}const U1=V({cosineDistance_:MQ});function PQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){let y=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),tn(y.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);y=Be(le(Fe(2),y),S);const T=ju(Be(S,le(y,g)));return kn(T,I,p)}const B1=V({hingeLoss_:PQ});function zQ(r,l,u,p=1,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const T=Fe(p),C=Vn(Be(I,g)),D=ax(C,T),_=Be(C,D),A=vt(le(Fe(.5),yt(D)),le(T,_));return kn(A,S,y)}const M1=V({huberLoss_:zQ});function VQ(r,l,u,p=1e-7,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const T=Fe(1),C=Fe(p),D=It(le(g,bo(vt(I,C)))),_=le(Be(T,g),bo(vt(Be(T,I),C))),A=Be(D,_);return kn(A,S,y)}const P1=V({logLoss_:VQ});function GQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),tn(y.shape,g.shape,"Error in meanSquaredError: ");const S=fx(y,g);return kn(S,I,p)}const z1=V({meanSquaredError_:GQ});function YQ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const y=ju(p),g=le(p,u),I=sx(Yn(It(Vn(p))));return vt(Be(y,g),I)}function HQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(.5);g=vt(le(g,Be(D,C)),le(_,C))}const T=YQ(g,I);return kn(T,S,y)}const V1=V({sigmoidCrossEntropy_:HQ});function qQ(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const p=zg((y,g,I)=>{const S=!0,T=ix(g,[u],S),C=Be(Ie(g,"float32"),T);I([y,C]);const D=It(le(C,y)),_=_e(D,[u]),A=(B,ne)=>{const[te,P]=ne,ge=os(B.shape,[u]);return[le(re(B,ge),Be(Ie(te,"float32"),Yn(P))),le(re(B,ge),Be(Yn(P),Ie(te,"float32")))]};return{value:_,gradFunc:A}});return p(r,l)}function jQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(D,C)),Me(C,_))}const T=qQ(g,I);return kn(T,S,y)}const G1=V({softmaxCrossEntropy_:jQ});const Vve={fft:Ku,ifft:tl,rfft:Xu,irfft:mx},jve={hammingWindow:f1,hannWindow:jg,frame:Kg,stft:g1},Y1={flipLeftRight:b1,resizeNearestNeighbor:D1,resizeBilinear:E1,rotateWithOffset:w1,cropAndResize:y1,nonMaxSuppression:L1,nonMaxSuppressionAsync:v1,nonMaxSuppressionWithScore:N1,nonMaxSuppressionWithScoreAsync:C1,nonMaxSuppressionPadded:R1,nonMaxSuppressionPaddedAsync:O1},lNe={bandPart:k1,gramSchmidt:F1,qr:W1},wNe={absoluteDifference:$1,computeWeightedLoss:kn,cosineDistance:U1,hingeLoss:B1,huberLoss:M1,logLoss:P1,meanSquaredError:z1,sigmoidCrossEntropy:V1,softmaxCrossEntropy:G1};const H1=1.7580993408473768,q1=1.0507009873554805;const j1={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,wa(Ie(u,"float32"),-1))}}};const K1={kernelName:cR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=yt(Ie(u,"float32")),y=fs(Be(Fe(1),p));return It(Me(r,y))}}}};const X1={kernelName:lR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(Be(yt(Ie(u,"float32")),1));return Me(r,p)}}}};const J1={kernelName:Hc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Dt(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Dt(p.shape,y);return T.length>0&&(S=_e(S,T)),re(S,p.shape)};return{a:g,b:I}}};const Z1={kernelName:hR,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,y)=>{u[y]=()=>r.clone()}),u}};const Q1={kernelName:uR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const eE={kernelName:dR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const tE={kernelName:pR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,fs(Be(Fe(1),yt(Ie(u,"float32")))))}}};const nE={kernelName:mR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(vt(Fe(1),yt(Ie(u,"float32"))));return Me(r,p)}}}};const sE={kernelName:yR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=vt(yt(u),yt(p));let T=le(r,Me(p,S));const C=Dt(u.shape,y);return C.length>0&&(T=_e(T,C)),re(T,u.shape)},I=()=>{const S=vt(yt(u),yt(p));let T=It(le(r,Me(u,S)));const C=Dt(p.shape,y);return C.length>0&&(T=_e(T,C)),re(T,p.shape)};return{a:g,b:I}}};const iE={kernelName:fR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(yt(Ie(u,"float32")),1))}}};const rE={kernelName:gR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Be(Fe(1),yt(Ie(u,"float32"))))}}};function KQ(r,l,u,p,y=[1,1,1],g,I){const S=M(r,"dy","avgPool3dBackprop"),T=M(l,"input","avgPool3dBackprop");let C=S,D=T,_=!1;T.rank===4&&(_=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),D=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]])),J(C.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),J(D.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${D.rank}.`),J(yo(p,y),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${y}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=P=>{const ge=Mg(D.shape,u,p,y,g,I);return P.avgPool3dBackprop(C,D,ge)},B={dy:C,input:D},ne={filterSize:u,strides:p,dilations:y,pad:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,SR,ne);return _?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const oE=V({avgPool3dBackprop_:KQ});const aE={kernelName:LR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,dilations:I,pad:S,dimRoundingMode:T}=u,C=I==null?[1,1,1]:I;return{x:()=>oE(r,p,y,g,C,S,T)}}};function XQ(r,l,u,p,y){const g=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,T=g,C=!1;I.rank===3&&(C=!0,S=re(I,[1,I.shape[0],I.shape[1],I.shape[2]]),T=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(T.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${T.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const D=ne=>{const te=Bg(S.shape,u,p,1,y);return ne.avgPoolBackprop(T,S,te)},_={dy:T,input:S},A={filterSize:u,strides:p,pad:y},B=H.runKernelFunc(D,_,null,wR,A);return C?re(B,[B.shape[1],B.shape[2],B.shape[3]]):B}const cE=V({avgPoolBackprop_:XQ});const lE={kernelName:bR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,pad:I}=u;return{x:()=>cE(r,p,y,g,I)}}};const hE={kernelName:Wf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,y]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>yn(r,y,!1,!0),b:()=>yn(p,r,!0,!1)}:!g&&I?{a:()=>yn(r,y,!1,!1),b:()=>yn(r,p,!0,!1)}:g&&!I?{a:()=>yn(y,r,!1,!0),b:()=>yn(p,r,!1,!1)}:{a:()=>yn(y,r,!0,!0),b:()=>yn(r,p,!0,!0)}}};const uE={kernelName:$f,gradFunc:(r,l,u)=>{const{blockShape:p,crops:y}=u;return{x:()=>hx(r,p,y)}}};const dE={kernelName:Uf,gradFunc:(r,l,u)=>{const p=u,y=p.inputShape,g=p.shape,I=Array.from(g);for(let T=y.length-1;T>=0;T--)if(y[T]===g[T])I[T]=1;else if(y[T]!==1)throw new Error(`broadcastTo(): [${y}] cannot be broadcast to [${g}].`);const S=[];for(let T=0;T1&&S.push(T);return{x:()=>_e(r,S,!0)}}};const pE={kernelName:qc,gradFunc:r=>({x:()=>r.clone()})};const mE={kernelName:IR,gradFunc:r=>({x:()=>Xe(r)})};const fE={kernelName:xR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:y,clipValueMax:g}=u;return{x:()=>Gn(ya(Ir(p,y),xr(p,g)),r,Xe(r))}}};const gE={kernelName:Bf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(T=>T.shape),{axis:y}=u,g=gt(y,l[0].shape)[0],I=p.map(T=>T[g]),S=Lo(r,I,g);return S.map(T=>()=>T)}};const yE={kernelName:Mf,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{dilations:g,strides:I,pad:S,dataFormat:T}=u;return J(go(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>a1(p.shape,r,y,I,S,T),filter:()=>qg(p,r,y.shape,I,S,T)}}};const bE={kernelName:Pf,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:T}=u;return{dy:()=>qI(r,y,g,I,S,1,T),filter:()=>qg(r,p,y.shape,g,I,S,T)}}};function JQ(r,l,u,p,y){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=D=>{const _=1,A=Yu(g.shape,u,p,_,y);return D.conv3dDerFilter(g,I,A)},T={x:g,dy:I},C={strides:p,pad:y,filterShape:u};return H.runKernelFunc(S,T,null,NR,C)}const wE=V({conv3DBackpropFilter_:JQ});const LE={kernelName:vR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g}=u;J(go(p),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${p}'`);const[I,S]=l;return{x:()=>c1(I.shape,r,S,y,g),filter:()=>wE(I,r,S.shape,y,g)}}};const SE={kernelName:zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(dx(Ie(u,"float32"))),r)}}};const IE={kernelName:Vf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(px(Ie(u,"float32")),r)}}};const xE={kernelName:Gf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:y,exclusive:g,reverse:I}=u;return{x:()=>{const S=Gi([y],p.rank);let T=KI(r,y,g,!I);return S!=null&&(T=xn(T,S)),T}}}};const TE={kernelName:OR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g,dimRoundingMode:I}=u,S=p==null?[1,1]:p;J(go(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[T,C]=l;return J(T.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${T.rank}.`),J(C.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${C.rank}.`),J(T.shape[3]===C.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${T.shape[3]}) must match the inChannels dimension in filter ${C.shape[2]}.`),J(yo(y,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${y} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>m1(T.shape,r,C,y,g,p,I),filter:()=>p1(T,r,C.shape,y,g,p,I)}}};const AE={kernelName:kR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,g={x:p,filter:y,dy:r},I={x:p,filter:y,dy:r};return{x:()=>H.runKernel(FR,g,u),filter:()=>H.runKernel(_R,I,u)}}};const vE={kernelName:Yf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Dt(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=yt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const NE={kernelName:WR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=g=>g.eluDer(r,u),y={dy:r,y:u};return{x:()=>H.runKernelFunc(p,y,null,$R)}}};const CE={kernelName:UR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Yn(It(yt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,p)}}};const RE={kernelName:Hf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const OE={kernelName:MR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Yn(u))}}};const EE={kernelName:qf,gradFunc:r=>({x:()=>Xe(r)})};const DE={kernelName:jf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Dt(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=yt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const kE={kernelName:GR,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[y,g,I,S]=l,T=S==null?Fe(1):S,C=Dt(g.shape,y.shape),D=[];if(g.rank===1){for(let ve=0;veg.rank===1?re(le(le(r,fa(re(B,[1,1,1,g.shape[0]]),D)),T),y.shape):re(le(le(r,B),T),y.shape),P=()=>{let ve=le(le(B,Fe(-1)),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ge=()=>{let ve=le(le(ne,_),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ae=()=>{const ve=le(_,B);let Ve=le(r,ve);return g.rank===1&&(Ve=_e(Ve,C)),re(Ve,g.shape)},Le=()=>{let ve=r;return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)};return{x:te,mean:P,variance:ge,scale:ae,offset:Le}}};const WE={kernelName:Kf,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,y]=l,{axis:g}=u,I=gt(g,p.shape)[0],S=()=>{const T=p.shape,C=y.size,D=T.slice(0,I),_=D.length,A=T.slice(g,T.length).slice(1),B=A.length,ne=FE(0,_),te=FE(_+1,_+1+B),P=_E([D,[C],A]),ge=re(r,P),ae=re(y,[C]),Le=_E([[_],ne,te]),ve=xn(ge,Le);let Ve=yx(ve,ae,p.shape[I]);const at=Xc(Le);return Ve=xn(Ve,at),Ve};return{x:S,indices:()=>y}}};function FE(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>Xe(u),b:()=>Xe(p)}}};const UE={kernelName:Jf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const BE={kernelName:jR,gradFunc:r=>({x:()=>Xe(r)})};const ME={kernelName:KR,gradFunc:r=>({x:()=>Xe(r)})};const PE={kernelName:XR,gradFunc:r=>({x:()=>Xe(r)})};const zE={kernelName:Qf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(u,1))}}};const VE={kernelName:Zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Ie(u,"float32"))}}};const GE={kernelName:tO,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:y}=u;return{logits:()=>{const g=!0,I=Yn(p);return Be(r,le(_e(r,y,g),I))}}}};function ZQ(r,l,u,p=5,y=1,g=1,I=.5){const S=D=>D.LRNGrad(u,r,l,p,y,g,I),T={x:r,y:l,dy:u},C={depthRadius:p,bias:y,alpha:g,beta:I};return H.runKernelFunc(S,T,null,sO,C)}const YE=V({localResponseNormalizationBackprop_:ZQ});const HE={kernelName:nO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{depthRadius:g,bias:I,alpha:S,beta:T}=u;return{x:()=>YE(p,y,r,g,I,S,T)}}};function Xg(r,l,u,p){return l.rank{const y=le(r,Ie(XI(u,l),r.dtype));return y}}}const wx={kernelName:eg,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:y}=p,g=l[0],I=l[1],S=gt(y,g.shape),T=Xg(r,I,g,S);return{x:()=>T.x()}}};const qE={kernelName:tg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(Ir(u,p),"float32")),g=()=>le(r,Ie(nx(u,p),"float32"));return{a:y,b:g}}};function QQ(r,l,u,p,y,g=[1,1,1],I,S){const T=M(r,"dy","maxPool3dBackprop"),C=M(l,"input","maxPool3dBackprop"),D=M(u,"output","maxPool3dBackprop");let _=T,A=C,B=D,ne=!1;C.rank===4&&(ne=!0,_=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]]),A=re(C,[1,C.shape[0],C.shape[1],C.shape[2],C.shape[3]]),B=re(D,[1,D.shape[0],D.shape[1],D.shape[2],D.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(B.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${B.rank}.`),J(yo(y,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${y} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Le=>{const ve=Mg(A.shape,p,y,g,I,S);return Le.maxPool3dBackprop(_,A,B,ve)},P={dy:_,input:A,output:B},ge={filterSize:p,strides:y,dilations:g,pad:I,dimRoundingMode:S},ae=H.runKernelFunc(te,P,null,aO,ge);return ne?re(ae,[ae.shape[1],ae.shape[2],ae.shape[3],ae.shape[4]]):ae}const jE=V({maxPool3dBackprop_:QQ});const KE={kernelName:oO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,dilations:S,pad:T,dimRoundingMode:C}=u,D=S==null?[1,1,1]:S;return{x:()=>jE(r,p,y,g,I,D,T,C)}}};function eee(r,l,u,p,y,g,I){const S=M(r,"dy","maxPoolBackprop"),T=M(l,"input","maxPoolBackprop"),C=M(u,"output","maxPoolBackprop");J(T.rank===S.rank,()=>`Rank of input (${T.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(T.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${T.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const D=B=>{const ne=Bg(T.shape,p,y,1,g,I);return B.maxPoolBackprop(S,T,C,ne)},_={dy:S,input:T,output:C},A={filterSize:p,strides:y,pad:g,dimRoundingMode:I};return H.runKernelFunc(D,_,null,rO,A)}const XE=V({maxPoolBackprop_:eee});const JE={kernelName:iO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>XE(r,p,y,g,I,S)}}};const ZE={kernelName:ng,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:y}=p,[g,I]=l,S=gt(y,g.shape),T=Xg(r,I,g,S);return{x:()=>T.x()}}};const QE={kernelName:sg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(xr(u,p),"float32")),g=()=>le(r,Ie(bi(u,p),"float32"));return{a:y,b:g}}};const eD={kernelName:lO,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const tD={kernelName:hO,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Dt(u.shape,y);return S.length>0?re(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(QI(Me(u,p)))),T=Dt(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const nD={kernelName:ig,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=le(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),T=Dt(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const sD={kernelName:rg,gradFunc:r=>({x:()=>It(r)})};const iD={kernelName:gO,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Fs(u.shape,"float32")}}};const rD={kernelName:fO,gradFunc:r=>({x:()=>Xe(r)})};const Lx={kernelName:og,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const oD={kernelName:ag,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,y]=l,g=u,I=p,S=ot(g.shape,I.shape),T=()=>{const D=Ie(I,"float32");let _=le(r,le(D,ba(g,Be(D,Fe(1)))));const A=Dt(g.shape,S);return A.length>0&&(_=_e(_,A)),re(_,g.shape)},C=()=>{const D=bi(g,0),_=Gn(D,bo(g),Xe(g));let A=le(r,le(y,_));const B=Dt(I.shape,S);return B.length>0&&(A=_e(A,B)),re(A,I.shape)};return{a:T,b:C}}};const aD={kernelName:yO,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,y=bi(u,0);return{x:()=>Gn(y,r,le(r,p)),alpha:()=>{let g=Gn(y,Xe(r),le(r,u));const I=Dt(p.shape,r.shape);return I.length>0&&(g=_e(g,I)),re(g,p.shape)}}}};const cD={kernelName:LO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,It(yt(u)))}}};const lD={kernelName:xO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(xr(u,6),wa(u));return{x:()=>le(r,Ie(p,"float32"))}}};const hD={kernelName:cg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(wa(u),"float32"))}}};const uD={kernelName:lg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>re(r,u.shape)}}};const dD={kernelName:ug,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeBilinearBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,IO,u);return{images:I}}};const pD={kernelName:hg,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeNearestNeighborBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,SO,u);return{images:I}}};const mD={kernelName:dg,gradFunc:(r,l,u)=>{const{dims:p}=u,y=gt(p,r.shape);return{x:()=>el(r,y)}}};const fD={kernelName:TO,gradFunc:r=>({x:()=>Xe(r)})};const gD={kernelName:pg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Me(r,le(ba(u,1.5),2)))}}};const yD={kernelName:mg,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Xe(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(rx(u),r.dtype))}}};const bD={kernelName:AO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=bi(u,Fe(0)),y=Fe(H1),g=Fe(q1),I=le(r,g),S=le(le(r,y),Yn(Ie(u,"float32")));return Gn(p,I,S)}}}};const wD={kernelName:bg,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const LD={kernelName:vO,gradFunc:r=>({x:()=>Xe(r)})};const SD={kernelName:gg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Hu(Ie(u,"float32")),r)}}};const ID={kernelName:yg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(jI(Ie(u,"float32")),r)}}};const xD={kernelName:fg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:y,size:g}=u,I=p.shape,[S,T]=$g(p,y,g),C=[];for(let D=0;Dlx(r,C)}}};const TD={kernelName:CO,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:y}=u,g=!0,I=le(r,p);return{logits:()=>Be(I,le(_e(I,[y],g),p))}}};const AD={kernelName:NO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,YI(u))}}};const Sx={kernelName:Sg,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:y}=u;return{x:()=>HI(r,p,y)}}};const Ix={kernelName:Ig,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>Tn(r,p)}}};const vD={kernelName:wg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,le(fs(Ie(u,"float32")),2))}}};const ND={kernelName:RO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const CD={kernelName:xg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=Fe(2),g=()=>le(r,le(y,Be(u,p))),I=()=>le(r,le(y,Be(p,u)));return{a:g,b:I}}};const RD={kernelName:Og,gradFunc:r=>({x:()=>Xe(r)})};const OD={kernelName:Tg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Dt(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Dt(p.shape,y);return T.length>0&&(S=_e(S,T)),re(It(S),p.shape)};return{a:g,b:I}}};const ED={kernelName:Lg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,y=p.shape.slice(),{axis:g}=u,I=gt(g,p.shape);I.forEach(C=>{y[C]=1});const S=re(r,y),T=le(S,Yi(p.shape,"float32"));return{x:()=>T}}};const DD={kernelName:OO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,yt(Hu(u)))}}};const kD={kernelName:EO,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),yt(u)),r)}}};const FD={kernelName:Ag,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:y}=u,g=()=>{let I=Xe(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:y}=p,g=Xc(y);return{x:()=>xn(r,g)}}};const WD={kernelName:Ng,gradFunc:(r,l,u)=>{const p=u,{axis:y}=p;return{value:()=>js(r,y)}}};const $D={kernelName:Cg,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>tee(r,u);return{x:p}}};function tee(r,l){const u=tx(l,Xe(l)),p=ex(r,u);let y=Ir(l,Fe(0,"int32"));const g=p.rank-y.rank;for(let S=0;S({x:()=>Xe(r)})};const nee=[j1,K1,X1,J1,Z1,Q1,eE,tE,nE,sE,iE,rE,aE,lE,hE,uE,dE,pE,mE,fE,gE,bE,yE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,DE,EE,kE,WE,$E,UE,BE,ME,PE,zE,VE,GE,HE,wx,wx,qE,KE,JE,ZE,QE,eD,tD,nD,sD,iD,rD,Lx,Lx,oD,aD,cD,lD,hD,uD,dD,pD,mD,fD,gD,yD,bD,wD,LD,SD,ID,xD,TD,AD,Sx,Sx,Ix,Ix,vD,CD,ND,RD,OD,ED,DD,kD,FD,_D,WD,$D,UD];for(const r of nee)FO(r);function Sf(r,l,u=!1){const{Image:p,Canvas:y}=Lt.getEnv();if(!(r instanceof p||r instanceof y))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ho(r),I=l/Math.max(g.height,g.width),S=I*g.width,T=I*g.height,C=aa({width:l,height:l}),D=r instanceof y?r:Uc(r),_=Math.abs(S-T)/2,A=u&&S{if(wr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Os(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const y=u instanceof Lt.getEnv().Canvas?u:Uc(u);this._canvases[p]=y,this._inputDimensions[p]=[y.height,y.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 Ui(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return mI({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,t1(()=>{const u=Ui(this.batchSize,0,1).map(y=>{const g=this.getInput(y);if(g instanceof Dn){let I=Os(g)?g:g.expandDims();return I=rf(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=Y1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof Lt.getEnv().Canvas)return zI.fromPixels(Sf(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${y}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),p=js(u.map(y=>Ie(y,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Ot(r){if(r instanceof yr)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=y=>Array.isArray(r)?` at input index ${y}:`:"",p=l.map(lo);return p.forEach((y,g)=>{if(!ku(y)&&!wr(y)&&!Os(y))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Os(y)){const I=y.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(y=>ku(y)&&Af(y))),new yr(p,Array.isArray(r))}async function ra(r,l){const{Canvas:u}=Lt.getEnv();let p=r;if(!(r instanceof u)){const I=await Ot(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await If(S)}const y=zn(p),g=l.map(I=>I instanceof Vt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return g.map(({x:I,y:S,width:T,height:C})=>{const D=aa({width:T,height:C});return zn(D).putImageData(y.getImageData(I,S,T,C),0,0),D})}const Jg=Ze(Qe());async function oa(r,l){if(!wr(r)&&!Os(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Os(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Jg.tidy(()=>{const[u,p,y]=r.shape.slice(Os(r)?1:0),g=l.map(S=>S instanceof Vt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=g.map(({x:S,y:T,width:C,height:D})=>Jg.slice3d(r.as3D(u,p,y),[T,S,0],[D,C,y]));return I})}async function uo(r,l){const u=Lt.getEnv().fetch,p=await u(r,l);if(!(p.status<400))throw new Error(`failed to fetch: (${p.status}) ${p.statusText}, from url: ${p.url}`);return p}async function V2(r){const l=await uo(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return Tf(u)}async function xf(r){return(await uo(r)).json()}async function z2(r){return new Float32Array(await(await uo(r)).arrayBuffer())}function Zg(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const p=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(p,"");const y=r.split("/").filter(S=>S),g=r.endsWith(".json")?y[y.length-1]:u;let I=p+(r.endsWith(".json")?y.slice(0,y.length-1):y).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const BD=Ze(Qe());async function Lf(r,l){const{manifestUri:u,modelBaseUri:p}=Zg(r,l);let y=await xf(u);return BD.io.loadWeights(y,p)}function P2(r,l,u=!1){const{width:p,height:y}=u?ho(l):l;return r.width=p,r.height=y,{width:p,height:y}}const Tr=Ze(Qe());class En{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:p}=this.traversePropertyPath(r);u[p].dispose(),u[p]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Tr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Tr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Tr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await Lf(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=Lt.getEnv(),{manifestUri:u,modelBaseUri:p}=Zg(r,this.getDefaultModelName()),y=T=>Promise.all(T.map(C=>l(C).then(D=>D.buffer))),g=Tr.io.weightsLoaderFactory(y),I=JSON.parse((await l(u)).toString()),S=await g(I,p);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((y,g)=>{if(!y.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:y.nextObj,objProp:g,nextObj:y.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof Tr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const nl=Ze(Qe());function as(r,l,u){return nl.tidy(()=>{let p=nl.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=nl.add(p,l.bias),p})}const Bt=Ze(Qe());function Qg(r,l,u=!1){return Bt.tidy(()=>{const p=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):as(r,l.conv0,[2,2])),y=as(p,l.conv1,[1,1]),g=Bt.relu(Bt.add(p,y)),I=as(g,l.conv2,[1,1]);return Bt.relu(Bt.add(p,Bt.add(y,I)))})}function Zu(r,l,u=!1,p=!0){return Bt.tidy(()=>{const y=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):as(r,l.conv0,p?[2,2]:[1,1])),g=as(y,l.conv1,[1,1]),I=Bt.relu(Bt.add(y,g)),S=as(I,l.conv2,[1,1]),T=Bt.relu(Bt.add(y,Bt.add(g,S))),C=as(T,l.conv3,[1,1]);return Bt.relu(Bt.add(y,Bt.add(g,Bt.add(S,C))))})}const So=Ze(Qe());function Sa(r,l,u="same",p=!1){return So.tidy(()=>{const y=So.add(So.conv2d(r,l.filters,[1,1],u),l.bias);return p?So.relu(y):y})}function Hn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const ey=Ze(Qe());function sl(r,l){return function(u,p,y,g){const I=ey.tensor4d(r(u*p*y*y),[y,y,u,p]),S=ey.tensor1d(r(p));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const ty=Ze(Qe());function ny(r,l){return function(u,p,y){const g=ty.tensor2d(r(u*p),[u,p]),I=ty.tensor1d(r(p));return l.push({paramPath:`${y}/weights`},{paramPath:`${y}/bias`}),{weights:g,bias:I}}}class xx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const Qu=Ze(Qe());function il(r,l){return function(u,p,y){const g=Qu.tensor4d(r(3*3*u),[3,3,u,1]),I=Qu.tensor4d(r(u*p),[1,1,u,p]),S=Qu.tensor1d(r(p));return l.push({paramPath:`${y}/depthwise_filter`},{paramPath:`${y}/pointwise_filter`},{paramPath:`${y}/bias`}),new xx(g,I,S)}}function rl(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),y=r(`${l}/bias`,1);return new xx(u,p,y)}}function gs(r,l){return function(u,p,y){const g=r[u];if(!la(g,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${g}`);return l.push({originalPath:u,paramPath:y||u}),g}}function qn(r){let l=r;function u(y){const g=l.slice(0,y);return l=l.slice(y),g}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function sy(r,l){const u=sl(r,l),p=il(r,l);function y(I,S,T,C=!1){const D=C?u(I,S,3,`${T}/conv0`):p(I,S,`${T}/conv0`),_=p(S,S,`${T}/conv1`),A=p(S,S,`${T}/conv2`);return{conv0:D,conv1:_,conv2:A}}function g(I,S,T,C=!1){const{conv0:D,conv1:_,conv2:A}=y(I,S,T,C),B=p(S,S,`${T}/conv3`);return{conv0:D,conv1:_,conv2:A,conv3:B}}return{extractDenseBlock3Params:y,extractDenseBlock4Params:g}}function MD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractDenseBlock4Params:y}=sy(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2"),T=y(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:T}}}function iy(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function ry(r,l){const u=gs(r,l),p=iy(u),y=rl(u);function g(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`);return{conv0:C,conv1:D,conv2:_}}function I(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`),A=y(`${S}/conv3`);return{conv0:C,conv1:D,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function PD(r){const l=[],{extractDenseBlock4Params:u}=ry(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Hn(r,l),{params:p,paramMappings:l}}const Io=Ze(Qe());class oy extends En{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return Io.tidy(()=>{const u=Io.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(Io.scalar(255));let g=Zu(y,l.dense0,!0);return g=Zu(g,l.dense1),g=Zu(g,l.dense2),g=Zu(g,l.dense3),g=Io.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return PD(r)}extractParams(r){return MD(r)}}const ol=Ze(Qe());function ed(r,l){return ol.tidy(()=>ol.add(ol.matMul(r,l.weights),l.bias))}function zD(r,l,u){const p=[],{extractWeights:y,getRemainingWeights:g}=qn(r),I=ny(y,p),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:p,params:{fc:S}}}function VD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:p("fc")};return Hn(r,l),{params:y,paramMappings:l}}function ay(r){const l={},u={};return Object.keys(r).forEach(p=>{const y=p.startsWith("fc")?u:l;y[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const GD=Ze(Qe());class cy extends En{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return GD.tidy(()=>{const u=r instanceof yr?this.faceFeatureExtractor.forwardInput(r):r;return ed(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return zD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=ay(r);return this.faceFeatureExtractor.loadFromWeightMap(l),VD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,y=r.slice(0,r.length-p),g=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(y),this.extractClassifierParams(g)}}const yf=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class co{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);yf.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return yf.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const al=Ze(Qe());class bf extends cy{constructor(r=new oy){super("FaceExpressionNet",r)}forwardInput(r){return al.tidy(()=>al.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Ot(r))}async predictExpressions(r){const l=await Ot(r),u=await this.forwardInput(l),p=await Promise.all(al.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const y=p.map(g=>new co(g));return l.isBatchInput?y:y[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function ff(r){return r.expressions instanceof co}function Ou(r,l){const u={expressions:l};return Object.assign({},r,u)}function see(r,l,u=.1,p){const y=Array.isArray(l)?l:[l];y.forEach(g=>{const I=g instanceof co?g:ff(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),T=S.filter(_=>_.probability>u),C=mi(g)?g.detection.box.bottomLeft:p||new Ke(0,0),D=new Vc(T.map(_=>`${_.expression} (${ha(_.probability)})`),C);D.draw(r)})}function oo(r){return mi(r)&&r.landmarks instanceof Rs&&r.unshiftedLandmarks instanceof Rs&&r.alignedRect instanceof Vt}function ia(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),y=p.align(),{imageDims:g}=r.detection,I=new Vt(r.detection.score,y.rescale(g.reverse()),g),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class YD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:y,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=g||2,this.lineColor=y||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class HD{constructor(r,l={}){this.faceLandmarks=r,this.options=new YD(l)}draw(r){const l=zn(r),{drawLines:u,drawPoints:p,lineWidth:y,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof Mc&&(l.strokeStyle=g,l.lineWidth=y,br(l,this.faceLandmarks.getJawOutline()),br(l,this.faceLandmarks.getLeftEyeBrow()),br(l,this.faceLandmarks.getRightEyeBrow()),br(l,this.faceLandmarks.getNose()),br(l,this.faceLandmarks.getLeftEye(),!0),br(l,this.faceLandmarks.getRightEye(),!0),br(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const T=C=>{l.beginPath(),l.arc(C.x,C.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(T)}}}function iee(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const y=p instanceof Rs?p:oo(p)?p.landmarks:void 0;if(!y)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new HD(y).draw(r)})}const Qm={};vu(Qm,{AnchorPosition:()=>Mi,DrawBox:()=>SI,DrawBoxOptions:()=>j2,DrawFaceLandmarks:()=>HD,DrawFaceLandmarksOptions:()=>YD,DrawTextField:()=>Vc,DrawTextFieldOptions:()=>Of,drawContour:()=>br,drawDetections:()=>y9,drawFaceExpressions:()=>see,drawFaceLandmarks:()=>iee});function ree(r,l){const u=sl(r,l),p=il(r,l);function y(I,S,T){const C=p(I,S,`${T}/separable_conv0`),D=p(S,S,`${T}/separable_conv1`),_=u(I,S,1,`${T}/expansion_conv`);return{separable_conv0:C,separable_conv1:D,expansion_conv:_}}function g(I,S){const T=p(I,I,`${S}/separable_conv0`),C=p(I,I,`${S}/separable_conv1`),D=p(I,I,`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:y,extractMainBlockParams:g}}function qD(r,l){const u=[],{extractWeights:p,getRemainingWeights:y}=qn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:T}=ree(p,u),C=g(3,32,3,"entry_flow/conv_in"),D=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:C,reduction_block_0:D,reduction_block_1:_},B={};Ui(l,0,1).forEach(ge=>{B[`main_block_${ge}`]=T(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),P={reduction_block:ne,separable_conv:te};if(y().length!==0)throw new Error(`weights remaing after extract: ${y().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:B,exit_flow:P}}}function oee(r,l){const u=gs(r,l),p=iy(u),y=rl(u);function g(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=p(`${S}/expansion_conv`);return{separable_conv0:T,separable_conv1:C,expansion_conv:D}}function I(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=y(`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}}function jD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}=oee(r,u),S=p("entry_flow/conv_in"),T=g("entry_flow/reduction_block_0"),C=g("entry_flow/reduction_block_1"),D={conv_in:S,reduction_block_0:T,reduction_block_1:C},_={};Ui(l,0,1).forEach(te=>{_[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const A=g("exit_flow/reduction_block"),B=y("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:B};return Hn(r,u),{params:{entry_flow:D,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=Ze(Qe());function KD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function Tx(r,l,u=!0){let p=u?on.relu(r):r;return p=as(p,l.separable_conv0,[1,1]),p=as(on.relu(p),l.separable_conv1,[1,1]),p=on.maxPool(p,[3,3],[2,2],"same"),p=on.add(p,KD(r,l.expansion_conv,[2,2])),p}function aee(r,l){let u=as(on.relu(r),l.separable_conv0,[1,1]);return u=as(on.relu(u),l.separable_conv1,[1,1]),u=as(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class XD extends En{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(on.scalar(256));let g=on.relu(KD(y,l.entry_flow.conv_in,[2,2]));return g=Tx(g,l.entry_flow.reduction_block_0,!1),g=Tx(g,l.entry_flow.reduction_block_1),Ui(this._numMainBlocks,0,1).forEach(I=>{g=aee(g,l.middle_flow[`main_block_${I}`])}),g=Tx(g,l.exit_flow.reduction_block),g=on.relu(as(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return jD(r,this._numMainBlocks)}extractParams(r){return qD(r,this._numMainBlocks)}}function JD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),y=ny(u,l),g=y(512,1,"fc/age"),I=y(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function ZD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Hn(r,l),{params:y,paramMappings:l}}var $i;(function(r){r.FEMALE="female",r.MALE="male"})($i||($i={}));const Hi=Ze(Qe());class vf extends En{constructor(r=new XD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Hi.tidy(()=>{const u=r instanceof yr?this.faceFeatureExtractor.forwardInput(r):r,p=Hi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),y=ed(p,l.fc.age).as1D(),g=ed(p,l.fc.gender);return{age:y,gender:g}})}forwardInput(r){return Hi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Hi.softmax(u)}})}async forward(r){return this.forwardInput(await Ot(r))}async predictAgeAndGender(r){const l=await Ot(r),u=await this.forwardInput(l),p=Hi.unstack(u.age),y=Hi.unstack(u.gender),g=p.map((S,T)=>({ageTensor:S,genderTensor:y[T]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:T})=>{const C=(await S.data())[0],D=(await T.data())[0],_=D>.5,A=_?$i.MALE:$i.FEMALE,B=_?D:1-D;return S.dispose(),T.dispose(),{age:C,gender:A,genderProbability:B}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return JD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=ay(r);return this.faceFeatureExtractor.loadFromWeightMap(l),ZD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),p=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(p)}}const ys=Ze(Qe());class ly extends cy{postProcess(r,l,u){const p=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),y=p.length;return ys.tidy(()=>{const g=(D,_)=>ys.stack([ys.fill([68],D,"float32"),ys.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(D,_)=>{const{width:A,height:B}=p[D];return _(A,B)?Math.abs(A-B)/2:0},S=D=>I(D,(_,A)=>_I(D,(_,A)=>A<_),C=r.mul(ys.fill([y,136],l,"float32")).sub(ys.stack(Array.from(Array(y),(D,_)=>g(S(_),T(_))))).div(ys.stack(Array.from(Array(y),(D,_)=>g(p[_].width,p[_].height))));return C})}forwardInput(r){return ys.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,p])=>({height:u,width:p})))})}async forward(r){return this.forwardInput(await Ot(r))}async detectLandmarks(r){const l=await Ot(r),u=ys.tidy(()=>ys.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(y,g)=>{const I=Array.from(await y.data()),S=I.filter((C,D)=>Nf(D)),T=I.filter((C,D)=>!Nf(D));return new Mc(Array(68).fill(0).map((C,D)=>new Ke(S[D],T[D])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Wc extends ly{constructor(r=new oy){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function QD(r){const l=[],{extractDenseBlock3Params:u}=ry(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Hn(r,l),{params:p,paramMappings:l}}function ek(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractDenseBlock3Params:y}=sy(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const xo=Ze(Qe());class tk extends En{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return xo.tidy(()=>{const u=xo.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(xo.scalar(255));let g=Qg(y,l.dense0,!0);return g=Qg(g,l.dense1),g=Qg(g,l.dense2),g=xo.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return QD(r)}extractParams(r){return ek(r)}}class gf extends ly{constructor(r=new tk){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class M2 extends Wc{}const hy=Ze(Qe());function nk(r,l){return hy.add(hy.mul(r,l.weights),l.biases)}const cl=Ze(Qe());function Ax(r,l,u,p,y="same"){const{filters:g,bias:I}=l.conv;let S=cl.conv2d(r,g,u,y);return S=cl.add(S,I),S=nk(S,l.scale),p?cl.relu(S):S}function sk(r,l){return Ax(r,l,[1,1],!0)}function vx(r,l){return Ax(r,l,[1,1],!1)}function uy(r,l){return Ax(r,l,[2,2],!0,"valid")}const bs=Ze(Qe());function cee(r,l){function u(S,T,C){const D=r(S),_=D.length/(T*C*C);if(pI(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${D.length}, numFilters: ${T}, filterSize: ${C}`);return bs.tidy(()=>bs.transpose(bs.tensor4d(D,[T,_,C,C]),[2,3,1,0]))}function p(S,T,C,D){const _=u(S,T,C),A=bs.tensor1d(r(T));return l.push({paramPath:`${D}/filters`},{paramPath:`${D}/bias`}),{filters:_,bias:A}}function y(S,T){const C=bs.tensor1d(r(S)),D=bs.tensor1d(r(S));return l.push({paramPath:`${T}/weights`},{paramPath:`${T}/biases`}),{weights:C,biases:D}}function g(S,T,C,D){const _=p(S,T,C,`${D}/conv`),A=y(T,`${D}/scale`);return{conv:_,scale:A}}function I(S,T,C,D,_=!1){const A=g((_?.5:1)*S,T,C,`${D}/conv1`),B=g(S,T,C,`${D}/conv2`);return{conv1:A,conv2:B}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function ik(r){const{extractWeights:l,getRemainingWeights:u}=qn(r),p=[],{extractConvLayerParams:y,extractResidualLayerParams:g}=cee(l,p),I=y(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),T=g(9216,32,3,"conv32_2"),C=g(9216,32,3,"conv32_3"),D=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),B=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),P=g(147456,128,3,"conv128_2"),ge=g(589824,256,3,"conv256_down",!0),ae=g(589824,256,3,"conv256_1"),Le=g(589824,256,3,"conv256_2"),ve=g(589824,256,3,"conv256_down_out"),Ve=bs.tidy(()=>bs.transpose(bs.tensor2d(l(256*128),[128,256]),[1,0]));if(p.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const at={conv32_down:I,conv32_1:S,conv32_2:T,conv32_3:C,conv64_down:D,conv64_1:_,conv64_2:A,conv64_3:B,conv128_down:ne,conv128_1:te,conv128_2:P,conv256_down:ge,conv256_1:ae,conv256_2:Le,conv256_down_out:ve,fc:Ve};return{params:at,paramMappings:p}}function lee(r,l){const u=gs(r,l);function p(I){const S=u(`${I}/scale/weights`,1),T=u(`${I}/scale/biases`,1);return{weights:S,biases:T}}function y(I){const S=u(`${I}/conv/filters`,4),T=u(`${I}/conv/bias`,1),C=p(I);return{conv:{filters:S,bias:T},scale:C}}function g(I){return{conv1:y(`${I}/conv1`),conv2:y(`${I}/conv2`)}}return{extractConvLayerParams:y,extractResidualLayerParams:g}}function rk(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=lee(r,l),y=u("conv32_down"),g=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),T=p("conv64_down"),C=p("conv64_1"),D=p("conv64_2"),_=p("conv64_3"),A=p("conv128_down"),B=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),P=p("conv256_1"),ge=p("conv256_2"),ae=p("conv256_down_out"),Le=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!dI(Le))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Le}`);const ve={conv32_down:y,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:T,conv64_1:C,conv64_2:D,conv64_3:_,conv128_down:A,conv128_1:B,conv128_2:ne,conv256_down:te,conv256_1:P,conv256_2:ge,conv256_down_out:ae,fc:Le};return Hn(r,l),{params:ve,paramMappings:l}}const jn=Ze(Qe());function wi(r,l){let u=sk(r,l.conv1);return u=vx(u,l.conv2),u=jn.add(u,r),u=jn.relu(u),u}function td(r,l){let u=uy(r,l.conv1);u=vx(u,l.conv2);let p=jn.avgPool(r,2,2,"valid");const y=jn.zeros(p.shape),g=p.shape[3]!==u.shape[3],I=p.shape[1]!==u.shape[1]||p.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const T=jn.zeros(S);u=jn.concat([u,T],1);const C=[...u.shape];C[2]=1;const D=jn.zeros(C);u=jn.concat([u,D],2)}return p=g?jn.concat([p,y],3):p,u=jn.add(p,u),u=jn.relu(u),u}const _s=Ze(Qe());class _c extends En{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return _s.tidy(()=>{const u=_s.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(_s.scalar(256));let g=uy(y,l.conv32_down);g=_s.maxPool(g,3,2,"valid"),g=wi(g,l.conv32_1),g=wi(g,l.conv32_2),g=wi(g,l.conv32_3),g=td(g,l.conv64_down),g=wi(g,l.conv64_1),g=wi(g,l.conv64_2),g=wi(g,l.conv64_3),g=td(g,l.conv128_down),g=wi(g,l.conv128_1),g=wi(g,l.conv128_2),g=td(g,l.conv256_down),g=wi(g,l.conv256_1),g=wi(g,l.conv256_2),g=td(g,l.conv256_down_out);const I=g.mean([1,2]),S=_s.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Ot(r))}async computeFaceDescriptor(r){const l=await Ot(r),u=_s.tidy(()=>_s.unstack(this.forwardInput(l))),p=await Promise.all(u.map(y=>y.data()));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return rk(r)}extractParams(r){return ik(r)}}function B2(r){const l=new _c;return l.extractWeights(r),l}function Eu(r,l){const u={descriptor:l};return Object.assign({},r,u)}function U2(r){return typeof r.age=="number"}function Du(r,l){const u={age:l};return Object.assign({},r,u)}function $2(r){return(r.gender===$i.MALE||r.gender===$i.FEMALE)&&zc(r.genderProbability)}function Ru(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const Li=Ze(Qe());function hee(r,l){function u(T,C){const D=Li.tensor4d(r(3*3*T),[3,3,T,1]),_=Li.tensor1d(r(T)),A=Li.tensor1d(r(T)),B=Li.tensor1d(r(T)),ne=Li.tensor1d(r(T));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/batch_norm_scale`},{paramPath:`${C}/batch_norm_offset`},{paramPath:`${C}/batch_norm_mean`},{paramPath:`${C}/batch_norm_variance`}),{filters:D,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:B,batch_norm_variance:ne}}function p(T,C,D,_,A){const B=Li.tensor4d(r(T*C*D*D),[D,D,T,C]),ne=Li.tensor1d(r(C));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:B,bias:ne}}function y(T,C,D,_){const{filters:A,bias:B}=p(T,C,D,_,!0);return{filters:A,batch_norm_offset:B}}function g(T,C,D){const _=u(T,`${D}/depthwise_conv`),A=y(T,C,1,`${D}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const T=y(3,32,3,"mobilenetv1/conv_0"),C=g(32,64,"mobilenetv1/conv_1"),D=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),B=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),P=g(512,512,"mobilenetv1/conv_8"),ge=g(512,512,"mobilenetv1/conv_9"),ae=g(512,512,"mobilenetv1/conv_10"),Le=g(512,512,"mobilenetv1/conv_11"),ve=g(512,1024,"mobilenetv1/conv_12"),Ve=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,conv_8:P,conv_9:ge,conv_10:ae,conv_11:Le,conv_12:ve,conv_13:Ve}}function S(){const T=y(1024,256,1,"prediction_layer/conv_0"),C=y(256,512,3,"prediction_layer/conv_1"),D=y(512,128,1,"prediction_layer/conv_2"),_=y(128,256,3,"prediction_layer/conv_3"),A=y(256,128,1,"prediction_layer/conv_4"),B=y(128,256,3,"prediction_layer/conv_5"),ne=y(256,64,1,"prediction_layer/conv_6"),te=y(64,128,3,"prediction_layer/conv_7"),P=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ae=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Le=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),ve=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),at=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),pt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Gt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),qe=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),ln=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:P,class_predictor:ge},ws={box_encoding_predictor:ae,class_predictor:Le},Cr={box_encoding_predictor:ve,class_predictor:Ve},Rr={box_encoding_predictor:at,class_predictor:pt},Ta={box_encoding_predictor:$t,class_predictor:Gt},hn={box_encoding_predictor:qe,class_predictor:ln};return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,box_predictor_0:bt,box_predictor_1:ws,box_predictor_2:Cr,box_predictor_3:Rr,box_predictor_4:Ta,box_predictor_5:hn}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function ok(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractMobilenetV1Params:y,extractPredictionLayerParams:g}=hee(u,l),I=y(),S=g(),T=Li.tensor3d(u(5118*4),[1,5118,4]),C={extra_dim:T};if(l.push({paramPath:"output_layer/extra_dim"}),p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:C},paramMappings:l}}function uee(r,l){const u=gs(r,l);function p(C,D,_){const A=u(`${C}/Conv2d_${D}_pointwise/weights`,4,`${_}/filters`),B=u(`${C}/Conv2d_${D}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:B}}function y(C){const D=`mobilenetv1/conv_${C}`,_=`MobilenetV1/Conv2d_${C}_depthwise`,A=`${D}/depthwise_conv`,B=`${D}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),te=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),P=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),ge=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ae=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:P,batch_norm_mean:ge,batch_norm_variance:ae},pointwise_conv:p("MobilenetV1",C,B)}}function g(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:y(1),conv_2:y(2),conv_3:y(3),conv_4:y(4),conv_5:y(5),conv_6:y(6),conv_7:y(7),conv_8:y(8),conv_9:y(9),conv_10:y(10),conv_11:y(11),conv_12:y(12),conv_13:y(13)}}function I(C,D){const _=u(`${C}/weights`,4,`${D}/filters`),A=u(`${C}/biases`,1,`${D}/bias`);return{filters:_,bias:A}}function S(C){const D=I(`Prediction/BoxPredictor_${C}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${C}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${C}/ClassPredictor`,`prediction_layer/box_predictor_${C}/class_predictor`);return{box_encoding_predictor:D,class_predictor:_}}function T(){return{conv_0:p("Prediction",0,"prediction_layer/conv_0"),conv_1:p("Prediction",1,"prediction_layer/conv_1"),conv_2:p("Prediction",2,"prediction_layer/conv_2"),conv_3:p("Prediction",3,"prediction_layer/conv_3"),conv_4:p("Prediction",4,"prediction_layer/conv_4"),conv_5:p("Prediction",5,"prediction_layer/conv_5"),conv_6:p("Prediction",6,"prediction_layer/conv_6"),conv_7:p("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:g,extractPredictionLayerParams:T}}function ak(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=uee(r,l),y=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!wr(y))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${y}`);const g={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:y}};return Hn(r,l),{params:g,paramMappings:l}}const To=Ze(Qe());function Xs(r,l,u){return To.tidy(()=>{let p=To.conv2d(r,l.filters,u,"same");return p=To.add(p,l.batch_norm_offset),To.clipByValue(p,0,6)})}const Ar=Ze(Qe()),dee=.0010000000474974513;function pee(r,l,u){return Ar.tidy(()=>{let p=Ar.depthwiseConv2d(r,l.filters,u,"same");return p=Ar.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,dee),Ar.clipByValue(p,0,6)})}function mee(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function ck(r,l){return Ar.tidy(()=>{let u,p=Xs(r,l.conv_0,[2,2]);const y=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(y.forEach((g,I)=>{const S=I+1,T=mee(S);p=pee(p,g.depthwise_conv,T),p=Xs(p,g.pointwise_conv,[1,1]),S===11&&(u=p)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:p,conv11:u}})}function lk(r,l,u,p,y){const g=r.shape[0],I=Math.min(u,g),S=l.map((D,_)=>({score:D,boxIndex:_})).filter(D=>D.score>y).sort((D,_)=>_.score-D.score),T=D=>D<=p?1:0,C=[];return S.forEach(D=>{if(C.length>=I)return;const _=D.score;for(let A=C.length-1;A>=0;--A){const B=fee(r,D.boxIndex,C[A]);if(B===0)continue;if(D.score*=T(B),D.score<=y)break}_===D.score&&C.push(D.boxIndex)}),C}function fee(r,l,u){const p=r.arraySync(),y=Math.min(p[l][0],p[l][2]),g=Math.min(p[l][1],p[l][3]),I=Math.max(p[l][0],p[l][2]),S=Math.max(p[l][1],p[l][3]),T=Math.min(p[u][0],p[u][2]),C=Math.min(p[u][1],p[u][3]),D=Math.max(p[u][0],p[u][2]),_=Math.max(p[u][1],p[u][3]),A=(I-y)*(S-g),B=(D-T)*(_-C);if(A<=0||B<=0)return 0;const ne=Math.max(y,T),te=Math.max(g,C),P=Math.min(I,D),ge=Math.min(S,_),ae=Math.max(P-ne,0)*Math.max(ge-te,0);return ae/(A+B-ae)}const ke=Ze(Qe());function gee(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],p=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:p}}function yee(r,l){const{sizes:u,centers:p}=gee(r),y=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(y[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(y[0],ke.scalar(10)),u[0]),p[0]),S=ke.div(ke.mul(ke.exp(ke.div(y[3],ke.scalar(5))),u[1]),ke.scalar(2)),T=ke.add(ke.mul(ke.div(y[1],ke.scalar(10)),u[1]),p[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(T,S),ke.add(I,g),ke.add(T,S)]),[1,0])}function hk(r,l,u){return ke.tidy(()=>{const p=r.shape[0];let y=yee(ke.reshape(ke.tile(u.extra_dim,[p,1,1]),[-1,4]),ke.reshape(r,[-1,4]));y=ke.reshape(y,[p,y.shape[0]/p,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[p,I.shape[1]]);const S=ke.unstack(y),T=ke.unstack(I);return{boxes:S,scores:T}})}const nd=Ze(Qe());function Ia(r,l){return nd.tidy(()=>{const u=r.shape[0],p=nd.reshape(Sa(r,l.box_encoding_predictor),[u,-1,1,4]),y=nd.reshape(Sa(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:y}})}const sd=Ze(Qe());function uk(r,l,u){return sd.tidy(()=>{const p=Xs(r,u.conv_0,[1,1]),y=Xs(p,u.conv_1,[2,2]),g=Xs(y,u.conv_2,[1,1]),I=Xs(g,u.conv_3,[2,2]),S=Xs(I,u.conv_4,[1,1]),T=Xs(S,u.conv_5,[2,2]),C=Xs(T,u.conv_6,[1,1]),D=Xs(C,u.conv_7,[2,2]),_=Ia(l,u.box_predictor_0),A=Ia(r,u.box_predictor_1),B=Ia(y,u.box_predictor_2),ne=Ia(I,u.box_predictor_3),te=Ia(T,u.box_predictor_4),P=Ia(D,u.box_predictor_5),ge=sd.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,B.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,P.boxPredictionEncoding],1),ae=sd.concat([_.classPrediction,A.classPrediction,B.classPrediction,ne.classPrediction,te.classPrediction,P.classPrediction],1);return{boxPredictions:ge,classPredictions:ae}})}class Ys{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const Si=Ze(Qe());class sa extends En{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Si.tidy(()=>{const u=Si.cast(r.toBatchTensor(512,!1),"float32"),p=Si.sub(Si.mul(u,Si.scalar(.007843137718737125)),Si.scalar(1)),y=ck(p,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=uk(y.out,y.conv11,l.prediction_layer);return hk(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Ot(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new Ys(l),y=await Ot(r),{boxes:g,scores:I}=this.forwardInput(y),S=g[0],T=I[0];for(let ae=1;ae{const[Le,ve]=[Math.max(0,P[ae][0]),Math.min(1,P[ae][2])].map(pt=>pt*te),[Ve,at]=[Math.max(0,P[ae][1]),Math.min(1,P[ae][3])].map(pt=>pt*ne);return new Vt(C[ae],new Bc(Ve,Le,at-Ve,ve-Le),{height:y.getInputHeight(0),width:y.getInputWidth(0)})});return S.dispose(),T.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ak(r)}extractParams(r){return ok(r)}}function rI(r){const l=new sa;return l.extractWeights(r),l}function m2(r){return rI(r)}class f2 extends sa{}const dk=.4,pk=[new Ke(.738768,.874946),new Ke(2.42204,2.65704),new Ke(4.30971,7.04493),new Ke(10.246,4.59428),new Ke(12.6868,11.8741)],mk=[new Ke(1.603231,2.094468),new Ke(6.041143,7.080126),new Ke(2.882459,3.518061),new Ke(4.266906,5.178857),new Ke(9.041765,10.66308)],fk=[117.001,114.697,97.404],gk="tiny_yolov2_model",yk="tiny_yolov2_separable_conv_model";const dy=r=>typeof r=="number";function tf(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!dy(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>dy(l.x)&&dy(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(dy)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Js=Ze(Qe());function ll(r){return Js.tidy(()=>{const l=Js.mul(r,Js.scalar(.10000000149011612));return Js.add(Js.relu(Js.sub(r,l)),l)})}const Zs=Ze(Qe());function vr(r,l){return Zs.tidy(()=>{let u=Zs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Zs.conv2d(u,l.conv.filters,[1,1],"valid"),u=Zs.sub(u,l.bn.sub),u=Zs.mul(u,l.bn.truediv),u=Zs.add(u,l.conv.bias),ll(u)})}const Ao=Ze(Qe());function Nr(r,l){return Ao.tidy(()=>{let u=Ao.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Ao.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=Ao.add(u,l.bias),ll(u)})}const Nx=Ze(Qe());function bee(r,l){const u=sl(r,l);function p(I,S){const T=Nx.tensor1d(r(I)),C=Nx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:T,truediv:C}}function y(I,S,T){const C=u(I,S,3,`${T}/conv`),D=p(S,`${T}/bn`);return{conv:C,bn:D}}const g=il(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}}function bk(r,l,u,p){const{extractWeights:y,getRemainingWeights:g}=qn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:T,extractSeparableConvParams:C}=bee(y,I);let D;if(l.withSeparableConvs){const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=l.isFirstLayerConv2d?S(_,A,3,"conv0"):C(_,A,"conv0"),Ve=C(A,B,"conv1"),at=C(B,ne,"conv2"),pt=C(ne,te,"conv3"),$t=C(te,P,"conv4"),Gt=C(P,ge,"conv5"),qe=ae?C(ge,ae,"conv6"):void 0,ln=Le?C(ae,Le,"conv7"):void 0,bt=S(Le||ae||ge,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Gt,conv6:qe,conv7:ln,conv8:bt}}else{const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=T(_,A,"conv0"),Ve=T(A,B,"conv1"),at=T(B,ne,"conv2"),pt=T(ne,te,"conv3"),$t=T(te,P,"conv4"),Gt=T(P,ge,"conv5"),qe=T(ge,ae,"conv6"),ln=T(ae,Le,"conv7"),bt=S(Le,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Gt,conv6:qe,conv7:ln,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:D,paramMappings:I}}function wee(r,l){const u=gs(r,l);function p(S){const T=u(`${S}/sub`,1),C=u(`${S}/truediv`,1);return{sub:T,truediv:C}}function y(S){const T=u(`${S}/filters`,4),C=u(`${S}/bias`,1);return{filters:T,bias:C}}function g(S){const T=y(`${S}/conv`),C=p(`${S}/bn`);return{conv:T,bn:C}}const I=rl(u);return{extractConvParams:y,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function wk(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}=wee(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:p("conv8")}}else I={conv0:y("conv0"),conv1:y("conv1"),conv2:y("conv2"),conv3:y("conv3"),conv4:y("conv4"),conv5:y("conv5"),conv6:y("conv6"),conv7:y("conv7"),conv8:p("conv8")};return Hn(r,u),{params:I,paramMappings:u}}var nf;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(nf||(nf={}));class Wi{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=Ze(Qe());class hl extends En{constructor(r){super("TinyYolov2");tf(r),this._config=r}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(r,l){let u=vr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=vr(u,l.conv6),u=vr(u,l.conv7),Sa(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?ll(Sa(r,l.conv0,"valid",!1)):Nr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Nr(u,l.conv6):u,u=l.conv7?Nr(u,l.conv7):u,Sa(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let p=Mt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?Hs(p,this.config.meanRgb):p,p=p.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Ot(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new Wi(l),y=await Ot(r),g=await this.forwardInput(y,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:y.getInputWidth(0),height:y.getInputHeight(0)},T=await this.extractBoxes(I,y.getReshapedInputDimensions(0),p);g.dispose(),I.dispose();const C=T.map(te=>te.box),D=T.map(te=>te.score),_=T.map(te=>te.classScore),A=T.map(te=>this.config.classes[te.label]),B=of(C.map(te=>te.rescale(u)),D,this.config.iouThreshold,!0),ne=B.map(te=>new ca(D[te],_[te],A[te],C[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return wk(r,this.config)}extractParams(r){const l=this.config.filterSizes||hl.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return bk(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:y}=l,g=Math.max(p,y),I=g/p,S=g/y,T=r.shape[1],C=this.config.anchors.length,[D,_,A]=Mt.tidy(()=>{const P=r.reshape([T,T,C,this.boxEncodingSize]),ge=P.slice([0,0,0,0],[T,T,C,4]),ae=P.slice([0,0,0,4],[T,T,C,1]),Le=this.withClassScores?Mt.softmax(P.slice([0,0,0,5],[T,T,C,this.config.classes.length]),3):Mt.scalar(0);return[ge,ae,Le]}),B=[],ne=await _.array(),te=await D.array();for(let P=0;Pu){const ve=(ge+Fc(te[P][ge][ae][0]))/T*I,Ve=(P+Fc(te[P][ge][ae][1]))/T*S,at=Math.exp(te[P][ge][ae][2])*this.config.anchors[ae].x/T*I,pt=Math.exp(te[P][ge][ae][3])*this.config.anchors[ae].y/T*S,$t=ve-at/2,Gt=Ve-pt/2,qe={row:P,col:ge,anchor:ae},{classScore:ln,label:bt}=this.withClassScores?await this.extractPredictedClass(A,qe):{classScore:1,label:0};B.push({box:new Pc($t,Gt,$t+at,Gt+pt),score:Le,classScore:Le*ln,label:bt,...qe})}}return D.dispose(),_.dispose(),A.dispose(),B}async extractPredictedClass(r,l){const{row:u,col:p,anchor:y}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][p][y][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}hl.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Dc extends hl{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:dk,classes:["face"]},r?{anchors:mk,meanRgb:fk}:{anchors:pk,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Vt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?yk:gk}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function d2(r,l=!0){const u=new Dc(l);return u.extractWeights(r),u}class sf extends Wi{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class qs{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const Cx=Ze(Qe());async function xa(r,l,u,p,y=({alignedRect:g})=>g){const g=r.map(T=>oo(T)?y(T):T.detection),I=p||(l instanceof Cx.Tensor?await oa(l,g):await ra(l,g)),S=await u(I);return I.forEach(T=>T instanceof Cx.Tensor&&T.dispose()),S}async function ul(r,l,u,p,y){return xa([r],l,async g=>u(g[0]),p,y)}const Lk=.4,Sk=[new Ke(1.603231,2.094468),new Ke(6.041143,7.080126),new Ke(2.882459,3.518061),new Ke(4.266906,5.178857),new Ke(9.041765,10.66308)],Ik=[117.001,114.697,97.404];class kc extends hl{constructor(){const r={withSeparableConvs:!0,iouThreshold:Lk,classes:["face"],anchors:Sk,meanRgb:Ik,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Vt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const ft={ssdMobilenetv1:new sa,tinyFaceDetector:new kc,tinyYolov2:new Dc,faceLandmark68Net:new Wc,faceLandmark68TinyNet:new gf,faceRecognitionNet:new _c,faceExpressionNet:new bf,ageGenderNet:new vf},aI=(r,l)=>ft.ssdMobilenetv1.locateFaces(r,l),b2=(r,l)=>ft.tinyFaceDetector.locateFaces(r,l),w2=(r,l)=>ft.tinyYolov2.locateFaces(r,l),cI=r=>ft.faceLandmark68Net.detectLandmarks(r),L2=r=>ft.faceLandmark68TinyNet.detectLandmarks(r),S2=r=>ft.faceRecognitionNet.computeFaceDescriptor(r),I2=r=>ft.faceExpressionNet.predictExpressions(r),x2=r=>ft.ageGenderNet.predictAgeAndGender(r),lI=r=>ft.ssdMobilenetv1.load(r),T2=r=>ft.tinyFaceDetector.load(r),A2=r=>ft.tinyYolov2.load(r),v2=r=>ft.faceLandmark68Net.load(r),N2=r=>ft.faceLandmark68TinyNet.load(r),C2=r=>ft.faceRecognitionNet.load(r),R2=r=>ft.faceExpressionNet.load(r),O2=r=>ft.ageGenderNet.load(r),E2=lI,D2=aI,k2=cI;class xk extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class od extends xk{async run(){const r=await this.parentTask,l=await xa(r,this.input,async u=>await Promise.all(u.map(p=>ft.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Ou(u,l[p]))}withAgeAndGender(){return new id(this,this.input)}}class ad extends xk{async run(){const r=await this.parentTask;if(!r)return;const l=await ul(r,this.input,u=>ft.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Ou(r,l)}withAgeAndGender(){return new rd(this,this.input)}}class ml extends od{withAgeAndGender(){return new dl(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class fl extends ad{withAgeAndGender(){return new pl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class Tk extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class id extends Tk{async run(){const r=await this.parentTask,l=await xa(r,this.input,async u=>await Promise.all(u.map(p=>ft.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:y,gender:g,genderProbability:I}=l[p];return Du(Ru(u,g,I),y)})}withFaceExpressions(){return new od(this,this.input)}}class rd extends Tk{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await ul(r,this.input,y=>ft.ageGenderNet.predictAgeAndGender(y),this.extractedFaces);return Du(Ru(r,u,p),l)}withFaceExpressions(){return new ad(this,this.input)}}class dl extends id{withFaceExpressions(){return new ml(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class pl extends rd{withFaceExpressions(){return new fl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class mf extends qs{constructor(r,l){super();this.parentTask=r;this.input=l}}class io extends mf{async run(){const r=await this.parentTask,l=await xa(r,this.input,u=>Promise.all(u.map(p=>ft.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>Eu(r[p],u))}withFaceExpressions(){return new ml(this,this.input)}withAgeAndGender(){return new dl(this,this.input)}}class ro extends mf{async run(){const r=await this.parentTask;if(!r)return;const l=await ul(r,this.input,u=>ft.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return Eu(r,l)}withFaceExpressions(){return new fl(this,this.input)}withAgeAndGender(){return new pl(this,this.input)}}const cd=Ze(Qe());class uf extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?ft.faceLandmark68TinyNet:ft.faceLandmark68Net}}class df extends uf{async run(){const r=await this.parentTask,l=r.map(y=>y.detection),u=this.input instanceof cd.Tensor?await oa(this.input,l):await ra(this.input,l),p=await Promise.all(u.map(y=>this.landmarkNet.detectLandmarks(y)));return u.forEach(y=>y instanceof cd.Tensor&&y.dispose()),r.map((y,g)=>ia(y,p[g]))}withFaceExpressions(){return new ml(this,this.input)}withAgeAndGender(){return new dl(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class pf extends uf{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof cd.Tensor?await oa(this.input,[l]):await ra(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(y=>y instanceof cd.Tensor&&y.dispose()),ia(r,p)}withFaceExpressions(){return new fl(this,this.input)}withAgeAndGender(){return new pl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class lf extends qs{constructor(r,l=new Ys){super();this.input=r;this.options=l}}class Cu extends lf{async run(){const{input:r,options:l}=this,u=l instanceof sf?p=>ft.tinyFaceDetector.locateFaces(p,l):l instanceof Ys?p=>ft.ssdMobilenetv1.locateFaces(p,l):l instanceof Wi?p=>ft.tinyYolov2.locateFaces(p,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>ao({},u)))})}withFaceLandmarks(r=!1){return new df(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new od(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new id(this.runAndExtendWithFaceDetections(),this.input)}}class hf extends lf{async run(){const r=await new Cu(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?ao({},l):void 0)})}withFaceLandmarks(r=!1){return new pf(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new ad(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new rd(this.runAndExtendWithFaceDetection(),this.input)}}function F2(r,l=new Ys){return new hf(r,l)}function Nu(r,l=new Ys){return new Cu(r,l)}async function hI(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Nu(r,new Ys(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function _2(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Nu(r,new Wi(l)).withFaceLandmarks().withFaceDescriptors()}const W2=hI;function wf(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),p=Array.from(l);return Math.sqrt(u.map((y,g)=>y-p[g]).reduce((y,g)=>y+Math.pow(g,2),0))}class uI{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let p=1;const y=()=>`person ${p++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof po)return g;if(g instanceof Float32Array)return new po(y(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new po(y(),[g.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(r,l){return l.map(u=>wf(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new _u(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>po.fromJSON(u));return new uI(l,r.distanceThreshold)}}function p2(r){const l=new kc;return l.extractWeights(r),l}function oI(r,l){const{width:u,height:p}=new rs(l.width,l.height);if(u<=0||p<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:p})}`);if(Array.isArray(r))return r.map(y=>oI(y,{width:u,height:p}));if(oo(r)){const y=r.detection.forSize(u,p),g=r.unshiftedLandmarks.forSize(y.box.width,y.box.height);return ia(ao(r,y),g)}return mi(r)?ao(r,r.detection.forSize(u,p)):r instanceof Rs||r instanceof Vt?r.forSize(u,p):r}var h2="0.8.5";return H2();})(); + with dtype ${I.dtype}. `)});const p=(I,S)=>{const T=gt(l,u[0].shape)[0],C=o1(u.map(A=>A.shape),T);if(Zt(C)===0)return BI([],C);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const D=u.map(A=>A.shape);r1(D,T);const _=I.concat(u,T);return S(u),_},y=u,g={axis:l};return H.runKernelFunc(p,y,null,Bf,g)}const Tn=V({concat_:iZ});function rZ(r){const l=M(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sigmoid(l);return y([g]),g},u,null,bg)}const YI=V({sigmoid_:rZ});function oZ(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const y=(S,T)=>{const[C,D]=$g(p,l,u);return e1(p,C,D),T([p]),S.slice(p,C,D)},g={x:p},I={begin:l,size:u};return H.runKernelFunc(y,g,null,fg,I)}const Tt=V({slice_:oZ});function aZ(r,l,u){const p=M(r,"x","batchToSpaceND"),y=l.reduce((T,C)=>T*C);J(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(p.shape[0]%y===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${y}`);const g=T=>T.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,$f,S)}const HI=V({batchToSpaceND_:aZ});function cZ(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(D=>!(D>0)||D%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const D=u.shape.slice();for(;D.length=0;D--)if(y[D]===l[D])g[D]=1;else if(u.shape[D]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=g.map((D,_)=>D>1?_:-1).filter(D=>D>=0);if(I.length===0)return gi(u);const S=D=>D.tile(u,g),T={x:u},C={shape:l,inputShape:y};return H.runKernelFunc(S,T,null,Uf,C)}const Pg=V({broadcastTo_:cZ});function lZ(r,l,u,p,y="NHWC",g=[1,1],I){const S=M(r,"x","conv2d"),T=M(l,"filter","conv2d");let C=S,D=!1;S.rank===3&&(D=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(C.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${C.rank}.`),J(T.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${T.rank}.`),I!=null&&J(nn(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const _=y==="NHWC"?C.shape[3]:C.shape[1];J(_===T.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${T.shape[2]}.`),J(yo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(P,ge)=>{const ae=Zc(y),Le=yi(C.shape,T.shape,u,g,p,I,!1,ae),ve=P.conv2d(C,T,Le);return ge([C,T]),ve},B={x:C,filter:T},ne={strides:u,pad:p,dataFormat:y,dilations:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,Mf,ne);return D?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const qI=V({conv2d_:lZ});function hZ(r,l,u,p,y,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,T=l,C=!1;l.rank===3&&(C=!0,T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(T.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${T.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const D=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?T.shape[3]:T.shape[1];J(D===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${D}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(y),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const A=(P,ge)=>{const ae=1,Le=Zc(g),ve=yi(S,u.shape,p,ae,y,I,!1,Le),Ve=P.conv2dDerInput(T,u,ve);return ge([T,u]),Ve},B={dy:T,filter:u},ne={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,inputShape:S},te=H.runKernelFunc(A,B,null,Pf,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const a1=V({conv2DBackpropInput_:hZ});function uZ(r,l,u,p,y){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const T=g[4],C=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(T===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${T}) must match input depth for filter ${u.shape[3]}.`),J(C===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[4]}.`);const D=ne=>{const te=1,P=Yu(g,u.shape,p,te,y);return ne.conv3dDerInput(I,u,P)},_={dy:I,filter:u},A={pad:y,strides:p,inputShape:g},B=H.runKernelFunc(D,_,null,CR,A);return S?re(B,[B.shape[1],B.shape[2],B.shape[3],B.shape[4]]):B}const c1=V({conv3DBackpropInput_:uZ});function dZ(r){const l=M(r,"x","cos"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cos(l);return y([l]),g},u,null,zf)}const Hu=V({cos_:dZ});function pZ(r){const l=M(r,"x","cosh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.cosh(l);return y([l]),g},u,null,Vf)}const jI=V({cosh_:pZ});function mZ(r,l=0,u=!1,p=!1){const y=M(r,"x","cumsum"),g=(T,C)=>{const D=Gi([l],y.rank);let _=y;D!=null&&(_=xn(y,D));const A=fo(1,y.rank)[0];let B=T.cumsum(_,A,u,p);if(C([y]),D!=null){const ne=Xc(D);B=xn(B,ne)}return B},I={x:y},S={axis:l,exclusive:u,reverse:p};return H.runKernelFunc(g,I,null,Gf,S)}const KI=V({cumsum_:mZ});function Dt(r,l){const u=[];for(let p=0;p1)&&u.unshift(g)}return u}function ot(r,l){const u=[],p=Math.max(r.length,l.length);for(let y=0;yI.equal(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,BR)}const XI=V({equal_:fZ});function gZ(r,l,u){const p=M(l,"a","where"),y=M(u,"b","where"),g=M(r,"condition","where","bool"),I=ot(p.shape,y.shape),S=Pg(p,I),T=Pg(y,I);g.rank===1&&J(g.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,T.shape,"Error in where: ");const C=(_,A)=>{const B=_.select(g,S,T);return A([g]),B},D={condition:g,t:S,e:T};return H.runKernelFunc(C,D,null,mg)}const Gn=V({where_:gZ});function yZ(r){const l=M(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(p=>p.zerosLike(l),u,null,Rg)}const Xe=V({zerosLike_:yZ});function bZ(r){const l=M(r,"x","exp"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.exp(l);return y([g]),g},u,null,Hf)}const Yn=V({exp_:bZ});function wZ(r,l=0){const u=null,p=M(r,"x","expandDims",u);J(l<=p.rank,()=>"Axis must be <= rank of the tensor");const y=p.shape.slice();return l<0&&(J(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),y.splice(l,0,1),re(p,y)}const ks=V({expandDims_:wZ});function LZ(r,l){const u=null,p=M(r,"x","tile",u);J(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const y=(T,C)=>{const D=T.tile(p,l);return C([p]),D},g=[p],I={x:p},S={reps:l};return H.runKernelFunc(y,I,null,Ag,S,g)}const fa=V({tile_:LZ});function SZ(r,l,u,p="float32"){l==null&&(l=r);const y=Gu([r,l],p),g=r<=l?r:l;for(let S=0;Sy.fill(r,l,u),{},null,zR,p)}function IZ(r){const l=M(r,"x","floor"),u={x:l};return H.runKernelFunc(p=>p.floor(l),u,null,qf)}const QI=V({floor_:IZ});function l1(r,l,u){const p=r.shape[u],y=[];let g=1,I=1;for(let S=0;S{const D=gt(u,p.shape)[0],_=l1(p,y,D),A=T.gather(p,re(y,[y.size]),D);return C([p,y]),re(A,_.outputShape)};return H.runKernelFunc(S,g,null,Kf,I)}const ex=V({gather_:xZ});function TZ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.greater(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,YR)}const bi=V({greater_:TZ});function AZ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.greaterEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Xf)}const Ir=V({greaterEqual_:AZ});function vZ(r){const l=M(r,"input","imag"),u=y=>y.imag(l),p={input:l};return H.runKernelFunc(u,p,null,qR)}const qu=V({imag_:vZ});function NZ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=St(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.maximum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,tg)}const tx=V({maximum_:NZ});function Fe(r,l){if((Es(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&Es(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return Vi(r,u,p,l)}function CZ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.less(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,JR)}const nx=V({less_:CZ});function RZ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.lessEqual(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,ZR)}const xr=V({lessEqual_:RZ});function OZ(r){const l=M(r,"x","log"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log(l);return y([l]),g},u,null,Zf)}const bo=V({log_:OZ});function EZ(r){const l=M(r,"x","log1p"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.log1p(l);return y([l]),g},u,null,Qf)}const sx=V({log1p_:EZ});function zg(r){return H.customGrad(r)}function DZ(r){const l=M(r,"x","neg"),u={x:l};return H.runKernelFunc(p=>p.neg(l),u,null,rg)}const It=V({neg_:DZ});function kZ(r,l=null,u=!1){const p=M(r,"x","max"),y=(S,T)=>{const C=gt(l,p.shape);let D=C;const _=Gi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=fo(D.length,A.rank));const B=S.max(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=os(ne.shape,gt(l,p.shape));ne=re(ne,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(y,g,null,eg,I)}const ga=V({max_:kZ});function FZ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=St(u,p);const y=(I,S)=>{const T=I.subtract(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,Tg)}const Be=V({sub_:FZ});function _Z(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Ie(p,"int32"));const y=(S,T)=>{T([p]);const C=gt(l,p.shape),D=Gi(C,p.rank);let _=C,A=p;D!=null&&(A=xn(p,D),_=fo(_.length,p.rank));let B=S.sum(A,_);if(u){const ne=os(B.shape,C);B=re(B,ne)}return B},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,Lg,I)}const _e=V({sum_:_Z});function WZ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),y=gt(l,p.shape),g=ga(p,y,!0),I=Be(p,g),S=Yn(I),T=_e(S,y),C=bo(T),D=vt(re(g,C.shape),C);if(u){const _=os(D.shape,y);return re(D,_)}return D}const ix=V({logSumExp_:WZ});function $Z(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");ot(u.shape,p.shape);const y={a:u,b:p};return H.runKernelFunc(g=>g.logicalAnd(u,p),y,null,QR)}const ya=V({logicalAnd_:$Z});function UZ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(p=>p.logicalNot(l),u,null,eO)}const rx=V({logicalNot_:UZ});function Fs(r,l="float32"){if(l==="complex64"){const p=Fs(r,"float32"),y=Fs(r,"float32");return zi(p,y)}const u=pa(Zt(r),l);return H.makeTensor(u,r,l)}function Yi(r,l="float32"){if(l==="complex64"){const p=Yi(r,"float32"),y=Fs(r,"float32");return zi(p,y)}const u=Df(Zt(r),l);return H.makeTensor(u,r,l)}function BZ(r,l=null,u=!1){const p=M(r,"x","mean"),y=gt(l,p.shape),g=s1(p.shape,y),I=g[1],S=Zt(I),T={x:p},C={axis:l,keepDims:u},D=()=>{const A=Fe(S),B=A.dtype===p.dtype?p:Ie(p,A.dtype),ne=Me(B,A);return _e(ne,l,u)},_=zg(A=>{const B=H.runKernelFunc(D,T,null,cO,C),ne=te=>{const P=A.shape.slice();y.forEach(Le=>{P[Le]=1});const ge=re(te,P),ae=Me(le(ge,Yi(A.shape,"float32")),S);return ae};return{value:B,gradFunc:ne}});return _(p)}const ox=V({mean_:BZ});function MZ(r,l=null,u=!1){const p=M(r,"x","min"),y=(S,T)=>{const C=gt(l,p.shape);let D=C;const _=Gi(D,p.rank);let A=p;_!=null&&(A=xn(p,_),D=fo(D.length,p.rank));const B=S.min(A,D);_!=null&&A.dispose();let ne=B;if(u){const te=os(ne.shape,C);ne=re(B,te),B.dispose()}return T([p,ne]),ne},g={x:p},I={axis:l,keepDims:u};return H.runKernelFunc(y,g,null,ng,I)}const Vg=V({min_:MZ});function PZ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=St(u,p),u.dtype==="bool"&&(u=Ie(u,"int32"),p=Ie(p,"int32")),ot(u.shape,p.shape);const y=(I,S)=>{const T=I.minimum(u,p);return S([u,p]),T},g={a:u,b:p};return H.runKernelFunc(y,g,null,sg)}const ax=V({minimum_:PZ});function zZ(r){const l=M(r,"x","square"),u={},p=[l],y=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,p,y)}const yt=V({square_:zZ});function VZ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=St(u,p),ot(u.shape,p.shape);const y=I=>I.notEqual(u,p),g={a:u,b:p};return H.runKernelFunc(y,g,null,uO)}const cx=V({notEqual_:VZ});function GZ(r){const l=M(r,"input","real"),u=y=>y.real(l),p={input:l};return H.runKernelFunc(u,p,null,wO)}const Qc=V({real_:GZ});function YZ(r,l,u=0){const p=M(r,"x","pad");if(p.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const y=(S,T)=>(T([p]),S.pad(p,l,u)),g={paddings:l,constantValue:u},I={x:p};return H.runKernelFunc(y,I,null,og,g)}const lx=V({pad_:YZ});function HZ(r,l,u){const p=M(r,"x","spaceToBatchND");J(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(p.shape.reduce((S,T,C)=>C>0&&C<=l.length?S&&(T+u[C-1][0]+u[C-1][1])%l[C-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const y=S=>S.spaceToBatchND(p,l,u),g={x:p},I={blockShape:l,paddings:u};return H.runKernelFunc(y,g,null,Sg,I)}const hx=V({spaceToBatchND_:HZ});function qZ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=St(u,p);const y={a:u,b:p},g=(I,S)=>{const T=I.pow(u,p);return S([u,p,T]),T};return H.runKernelFunc(g,y,null,ag)}const ba=V({pow_:qZ});function wo(r,l){Gc(r);const u=Sr(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return Vi(r,p,u,l)}function Gg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const y=()=>{const I=r===l,S=r1;if(I||S||T)return Fs([0],p);const C=Math.abs(Math.ceil((l-r)/u)),D=pa(C,p);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):y.relu(l)),p={x:l};return H.runKernelFunc(u,p,null,cg)}const ju=V({relu_:jZ});function KZ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=gt(l,u.shape);if(u.rank===0)return gi(u);const T=I.reverse(u,S);return re(T,u.shape)},y={x:u},g={dims:l};return H.runKernelFunc(p,y,null,dg,g)}const el=V({reverse_:KZ});function XZ(r){const l=M(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.rsqrt(l);return y([l]),g},u,null,pg)}const ux=V({rsqrt_:XZ});function JZ(r){const l=M(r,"x","sin"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sin(l);return y([l]),g},u,null,gg)}const dx=V({sin_:JZ});function ZZ(r){const l=M(r,"x","sinh"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sinh(l);return y([l]),g},u,null,yg)}const px=V({sinh_:ZZ});function QZ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=r.as2D(y,p),I=u.fft(g);return I.reshape(r.shape)},l,null,PR)}const Ku=V({fft_:QZ});function eQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],y=r.size/p,g=re(r,[y,p]),I=u.ifft(g);return re(I,r.shape)},l,null,HR)}const tl=V({ifft_:eQ});function tQ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const y=re(r,[u,l]);p=tl(y)}else{const y=[u,2*(l-1)],g=re(Qc(r),[u,l]),I=re(qu(r),[u,l]),S=el(Tt(g,[0,1],[u,l-2]),1),T=le(el(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),C=Tn([g,S],1),D=Tn([I,T],1),_=re(zi(C,D),[y[0],y[1]]);p=tl(_)}if(p=Qc(p),r.rank===3&&r.shape[0]!==0){const y=p,g=r.shape[0];p=re(p,[g,p.shape[0]/g,p.shape[1]]),y.dispose()}return p}const mx=V({irfft_:tQ});function h1(r,l,u=0){let p=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const y=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(y<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,T)=>T>0?S+T:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),p=l}return p}function nQ(r,l,u=0){const p=M(r,"x","split"),y=(S,T)=>{const C=gt(u,p.shape)[0],D=h1(p,l,C);return S.split(p,D,C)},g={x:p},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(y,g,null,Ig,I)}const Lo=V({split_:nQ});function sQ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const p=r.size/u;let y;if(l!=null&&l0),te=r.shape.map(P=>P);te[r.shape.length-1]=l,y=Tt(r,ne,te),u=l}else if(l!=null&&l>u){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-u,y=Tn([r,Fs(ne)],r.shape.length-1),u=l}else y=r;const g=Xe(y),I=re(zi(y,g),[p,u]),S=Ku(I),T=Math.floor(u/2)+1,C=Qc(S),D=qu(S),_=Lo(C,[T,u-T],C.shape.length-1),A=Lo(D,[T,u-T],D.shape.length-1),B=y.shape.slice();return B[y.shape.length-1]=T,re(zi(_[0],A[0]),B)}const Xu=V({rfft_:sQ});function iQ(r){const l=M(r,"x","sqrt"),u={x:l};return H.runKernelFunc((p,y)=>{const g=p.sqrt(l);return y([l]),g},u,null,wg)}const fs=V({sqrt_:iQ});function rQ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=St(u,p),ot(u.shape,p.shape);const y=(S,T)=>{const C=S.squaredDifference(u,p);return T([u,p]),C},g={a:u,b:p},I={};return H.runKernelFunc(y,g,null,xg,I)}const fx=V({squaredDifference_:rQ});function oQ(r,l){const u=M(r,"x","squeeze");return re(u,J2(u.shape,l).newShape)}const gx=V({squeeze_:oQ});function aQ(r,l=0){const u=Wg(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return ks(u[0],l);const p=u[0].rank,y=u[0].shape,g=u[0].dtype;J(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(y,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>ks(S,l));return Tn(I,l)}const js=V({stack_:aQ});function cQ(r,l=0){const u=M(r,"x","step"),p={x:u},y={alpha:l};return H.runKernelFunc(g=>g.step(u,l),p,null,Og,y)}const wa=V({step_:cQ});function La(r,l,u){if(Gc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=Sr(r,u);if(p.length!==2&&p.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(p.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return Vi(r,l,p,u)}function lQ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),y=M(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:p,segmentIds:y},I={numSegments:u},S=(T,C)=>{const D=T.unsortedSegmentSum(p,y,u);return C([y]),D};return H.runKernelFunc(S,g,null,Cg,I)}const yx=V({unsortedSegmentSum_:lQ});function hQ(r,l=0){const u=M(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const p={value:u},y={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,p,null,Ng,y)}const Ju=V({unstack_:hQ});function uQ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const y=u1(r,l,u);let g=y.shape;if(p){const I=gt(u,r.shape);g=os(y.shape,I)}return re(y,g)}function u1(r,l,u=null){if(r.rank===0)return Vn(r);if(r.rank!==1&&u===null)return u1(re(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(Vn(r),u);if(l===Infinity)return ga(Vn(r),u);if(l===-Infinity)return Vg(Vn(r),u);if(l==="euclidean"||l===2)return fs(_e(ba(Vn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ga(_e(Vn(r),u[0]),u[1]-1);if(l===Infinity)return ga(_e(Vn(r),u[1]),u[0]);if(l===-Infinity)return Vg(_e(Vn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return fs(_e(yt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const Yg=V({norm_:uQ});function d1(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Hg(r,l,u){const p=1-r%2,y=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(T.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${T.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const C=g==="NHWC"?S.shape[3]:S.shape[1],D=g==="NHWC"?T.shape[3]:T.shape[1];J(C===u[2],()=>`Error in conv2dDerFilter: depth of input ${C}) must match input depth in filter (${u[2]}.`),J(D===u[3],()=>`Error in conv2dDerFilter: depth of dy (${D}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(y),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${y}.`);const _=ne=>{const te=1,P=Zc(g),ge=yi(S.shape,u,p,te,y,I,!1,P);return ne.conv2dDerFilter(S,T,ge)},A={x:S,dy:T},B={strides:p,pad:y,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,AR,B)}const qg=V({conv2DBackpropFilter_:dQ});function pQ(r,l,u,p,y,g=[1,1],I){let S=r;r.rank===3&&(S=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let T=l;T.rank===3&&(T=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=A=>{const B=yi(r.shape,u,p,g,y,I,!0);return A.depthwiseConv2DDerFilter(S,T,B)},D={x:S,dy:T},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(C,D,null,ER,_)}const p1=V({depthwiseConv2dNativeBackpropFilter_:pQ});function mQ(r,l,u,p,y,g=[1,1],I){let S=l,T=!1;l.rank===3&&(T=!0,S=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const C=B=>{const ne=yi(r,u.shape,p,g,y,I,!0);return B.depthwiseConv2DDerInput(S,u,ne)},D={dy:S,filter:u},_={strides:p,pad:y,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(C,D,null,DR,_);return T?re(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const m1=V({depthwiseConv2dNativeBackpropInput_:mQ});function fQ(r){return Hg(r,.54,.46)}const f1=V({hammingWindow_:fQ});function gQ(r){return Hg(r,.5,.5)}const jg=V({hannWindow_:gQ});function yQ(r,l,u,p=!1,y=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(p)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${C},4] but had shape ${S.shape}.`),J(T.rank===1&&T.shape[0]===C,()=>`Error in cropAndResize: boxInd must be have size [${C}] but had shape ${S.shape}.`),J(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),J(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),J(y==="bilinear"||y==="nearest",()=>`method must be bilinear or nearest, but was ${y}`);const D=ne=>ne.cropAndResize(I,S,T,p,y,g),_={image:I,boxes:S,boxInd:T},A={method:y,extrapolationValue:g,cropSize:p},B=H.runKernelFunc(D,_,null,RR,A);return B}const y1=V({cropAndResize_:wQ});function LQ(r){const l=M(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=H.runKernel(VR,u,{});return p}const b1=V({flipLeftRight_:LQ});function SQ(r,l,u=0,p=.5){const y=M(r,"image","rotateWithOffset","float32");J(y.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${y.rank}.`);const g={image:y},I={radians:l,fillValue:u,center:p},S=H.runKernel(DO,g,I);return S}const w1=V({rotateWithOffset_:SQ});function Ks(r,l,u,p,y,g){p==null&&(p=.5),y==null&&(y=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g}}function IQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Ks(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T={maxOutputSize:u,iouThreshold:p,scoreThreshold:y};return H.runKernelFunc(C=>C.nonMaxSuppression(g,I,u,p,y),{boxes:g,scores:I},null,dO,T)}const L1=V({nonMaxSuppression_:IQ});function S1(r,l,u){const p=xQ(r,l,u),y=p<0?-(p+1):p;r.splice(y,0,l)}function xQ(r,l,u){return AQ(r,l,u||TQ)}function TQ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?p=g+1:(y=g,I=!S)}return I?p:-p-1}function I1(r,l,u,p,y){return bx(r,l,u,p,y,0).selectedIndices}function x1(r,l,u,p,y,g){return bx(r,l,u,p,y,0,!1,g,!0)}function T1(r,l,u,p,y,g){return bx(r,l,u,p,y,g,!0)}function bx(r,l,u,p,y,g,I=!1,S=!1,T=!1){const C=[];for(let P=0;Py&&C.push({score:l[P],boxIndex:P,suppressBeginIndex:0});C.sort(A1);const D=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const P=C.pop(),{score:ge,boxIndex:ae,suppressBeginIndex:Le}=P;if(ge=Le;--Ve){const at=vQ(r,ae,_[Ve]);if(at>=p){ve=!0;break}if(P.score=P.score*NQ(p,D,at),P.score<=y)break}P.suppressBeginIndex=_.length,ve||(P.score===ge?(_.push(ae),A.push(P.score)):P.score>y&&S1(C,P,A1))}const B=_.length,ne=u-B;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const te={selectedIndices:wo(_,"int32")};return I&&(te.selectedScores=wo(A,"float32")),T&&(te.validOutputs=Fe(B,"int32")),te}function vQ(r,l,u){const p=r.subarray(l*4,l*4+4),y=r.subarray(u*4,u*4+4),g=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),T=Math.max(p[1],p[3]),C=Math.min(y[0],y[2]),D=Math.min(y[1],y[3]),_=Math.max(y[0],y[2]),A=Math.max(y[1],y[3]),B=(S-g)*(T-I),ne=(_-C)*(A-D);if(B<=0||ne<=0)return 0;const te=Math.max(g,C),P=Math.max(I,D),ge=Math.min(S,_),ae=Math.min(T,A),Le=Math.max(ge-te,0)*Math.max(ae-P,0);return Le/(B+ne-Le)}function NQ(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function A1(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function CQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Ks(g,I,u,p,y);u=S.maxOutputSize,p=S.iouThreshold,y=S.scoreThreshold;const T=await Promise.all([g.data(),I.data()]),C=T[0],D=T[1],_=I1(C,D,u,p,y);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const v1=CQ;function RQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Ks(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C={boxes:I,scores:S},D={maxOutputSize:u,iouThreshold:p,scoreThreshold:y,softNmsSigma:g},_=H.runKernel(mO,C,D);return{selectedIndices:_[0],selectedScores:_[1]}}const N1=V({nonMaxSuppressionWithScore_:RQ});async function OQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Ks(I,S,u,p,y,g);u=T.maxOutputSize,p=T.iouThreshold,y=T.scoreThreshold,g=T.softNmsSigma;const C=await Promise.all([I.data(),S.data()]),D=C[0],_=C[1],A=T1(D,_,u,p,y,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const C1=OQ;function EQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),T=Ks(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,A={boxes:I,scores:S},B={maxOutputSize:C,iouThreshold:D,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(pO,A,B);return{selectedIndices:ne[0],validOutputs:ne[1]}}const R1=V({nonMaxSuppressionPadded_:EQ});async function DQ(r,l,u,p=.5,y=Number.NEGATIVE_INFINITY,g=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),T=Ks(I,S,u,p,y,null),C=T.maxOutputSize,D=T.iouThreshold,_=T.scoreThreshold,[A,B]=await Promise.all([I.data(),S.data()]),ne=x1(A,B,C,D,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const O1=DQ;function kQ(r,l,u=!1){const p=M(r,"images","resizeBilinear");J(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T=(A,B)=>(B([y]),A.resizeBilinear(y,I,S,u)),C={images:y},D={alignCorners:u,size:l},_=H.runKernelFunc(T,C,null,ug,D);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const E1=V({resizeBilinear_:kQ});function FQ(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");J(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let y=p,g=!1;p.rank===3&&(g=!0,y=re(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,T={images:y},C={alignCorners:u,size:l},D=(A,B)=>(B([y]),A.resizeNearestNeighbor(y,I,S,u)),_=H.runKernelFunc(D,T,null,hg,C);return g?re(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const D1=V({resizeNearestNeighbor_:FQ});function _Q(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");J(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const y=p.shape,[g,I]=p.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=re(Gg(0,g,1,"int32"),[-1,1]),T=Gg(0,I,1,"int32"),C=Be(S,T),D=ya(xr(C,Fe(+l,"int32")),Ir(C,Fe(-u,"int32"))),_=Fs([g,I],p.dtype);return re(js(Ju(re(p,[-1,g,I])).map(A=>Gn(D,A,_))),y)}const k1=V({bandPart_:_Q});function WQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const y=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${y})`)}else l=!0,r=Lo(r,r.shape[0],0).map(y=>gx(y,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],p=r;for(let y=0;y{let g=p[y];if(y>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return _1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((T,C)=>T*C),p=Ju(re(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),y=[],g=[];p.forEach(T=>{const[C,D]=_1(T,l);y.push(C),g.push(D)});const I=re(js(y,0),r.shape),S=re(js(g,0),r.shape);return[I,S]}}function _1(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],p=r.shape[1];let y=JI(u),g=gi(r);const I=La([[1]],[1,1]);let S=gi(I);const T=u>=p?p:u;for(let C=0;C{const B=Tt(g,[C,C],[u-C,1]),ne=Yg(B),te=Tt(g,[C,C],[1,1]),P=Gn(bi(te,0),La([[-1]]),La([[1]])),ge=Be(te,le(P,ne)),ae=Me(B,ge);ae.shape[0]===1?S=gi(I):S=Tn([I,Tt(ae,[1,0],[ae.shape[0]-1,ae.shape[1]])],0);const Le=It(Me(yn(P,ge),ne)),ve=Tt(g,[C,0],[u-C,p]),Ve=le(Le,S),at=xn(S);if(C===0)g=Be(ve,yn(Ve,yn(at,ve)));else{const Gt=Be(ve,yn(Ve,yn(at,ve)));g=Tn([Tt(g,[0,0],[C,p]),Gt],0)}const pt=xn(Ve),$t=Tt(y,[0,C],[u,y.shape[1]-C]);if(C===0)y=Be($t,yn(yn($t,S),pt));else{const Gt=Be($t,yn(yn($t,S),pt));y=Tn([Tt(y,[0,0],[u,C]),Gt],1)}return[S,g,y]}),n1([D,_,A])}return!l&&u>p&&(y=Tt(y,[0,0],[u,p]),g=Tt(g,[0,0],[p,p])),[y,g]})}const W1=V({qr_:$Q});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function UQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let y=null;l!=null&&(y=M(l,"weights","computeWeightedLoss"));const g=y==null?p:le(p,y);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(y==null)return ox(g);{const I=p.size/y.size,S=Me(_e(g),_e(y));return I>1?Me(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(y==null)return Me(_e(g),Fe(p.size));{const I=le(y,Yi(p.shape)),S=Ie(_e(cx(I,Fe(0))),"float32");return Me(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const kn=V({computeWeightedLoss_:UQ});function BQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),tn(y.shape,g.shape,"Error in absoluteDifference: ");const S=Vn(Be(y,g));return kn(S,I,p)}const $1=V({absoluteDifference_:BQ});function MQ(r,l,u,p,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const T=Fe(1),C=Be(T,_e(le(g,I),u,!0));return kn(C,S,y)}const U1=V({cosineDistance_:MQ});function PQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){let y=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),tn(y.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);y=Be(le(Fe(2),y),S);const T=ju(Be(S,le(y,g)));return kn(T,I,p)}const B1=V({hingeLoss_:PQ});function zQ(r,l,u,p=1,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const T=Fe(p),C=Vn(Be(I,g)),D=ax(C,T),_=Be(C,D),A=vt(le(Fe(.5),yt(D)),le(T,_));return kn(A,S,y)}const M1=V({huberLoss_:zQ});function VQ(r,l,u,p=1e-7,y=Qt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const T=Fe(1),C=Fe(p),D=It(le(g,bo(vt(I,C)))),_=le(Be(T,g),bo(vt(Be(T,I),C))),A=Be(D,_);return kn(A,S,y)}const P1=V({logLoss_:VQ});function GQ(r,l,u,p=Qt.SUM_BY_NONZERO_WEIGHTS){const y=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),tn(y.shape,g.shape,"Error in meanSquaredError: ");const S=fx(y,g);return kn(S,I,p)}const z1=V({meanSquaredError_:GQ});function YQ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const y=ju(p),g=le(p,u),I=sx(Yn(It(Vn(p))));return vt(Be(y,g),I)}function HQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(.5);g=vt(le(g,Be(D,C)),le(_,C))}const T=YQ(g,I);return kn(T,S,y)}const V1=V({sigmoidCrossEntropy_:HQ});function qQ(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const p=zg((y,g,I)=>{const S=!0,T=ix(g,[u],S),C=Be(Ie(g,"float32"),T);I([y,C]);const D=It(le(C,y)),_=_e(D,[u]),A=(B,ne)=>{const[te,P]=ne,ge=os(B.shape,[u]);return[le(re(B,ge),Be(Ie(te,"float32"),Yn(P))),le(re(B,ge),Be(Yn(P),Ie(te,"float32")))]};return{value:_,gradFunc:A}});return p(r,l)}function jQ(r,l,u,p=0,y=Qt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const C=Fe(p),D=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(D,C)),Me(C,_))}const T=qQ(g,I);return kn(T,S,y)}const G1=V({softmaxCrossEntropy_:jQ});const Vve={fft:Ku,ifft:tl,rfft:Xu,irfft:mx},jve={hammingWindow:f1,hannWindow:jg,frame:Kg,stft:g1},Y1={flipLeftRight:b1,resizeNearestNeighbor:D1,resizeBilinear:E1,rotateWithOffset:w1,cropAndResize:y1,nonMaxSuppression:L1,nonMaxSuppressionAsync:v1,nonMaxSuppressionWithScore:N1,nonMaxSuppressionWithScoreAsync:C1,nonMaxSuppressionPadded:R1,nonMaxSuppressionPaddedAsync:O1},lNe={bandPart:k1,gramSchmidt:F1,qr:W1},wNe={absoluteDifference:$1,computeWeightedLoss:kn,cosineDistance:U1,hingeLoss:B1,huberLoss:M1,logLoss:P1,meanSquaredError:z1,sigmoidCrossEntropy:V1,softmaxCrossEntropy:G1};const H1=1.7580993408473768,q1=1.0507009873554805;const j1={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,wa(Ie(u,"float32"),-1))}}};const K1={kernelName:cR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=yt(Ie(u,"float32")),y=fs(Be(Fe(1),p));return It(Me(r,y))}}}};const X1={kernelName:lR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(Be(yt(Ie(u,"float32")),1));return Me(r,p)}}}};const J1={kernelName:Hc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Dt(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Dt(p.shape,y);return T.length>0&&(S=_e(S,T)),re(S,p.shape)};return{a:g,b:I}}};const Z1={kernelName:hR,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,y)=>{u[y]=()=>r.clone()}),u}};const Q1={kernelName:uR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const eE={kernelName:dR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const tE={kernelName:pR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,fs(Be(Fe(1),yt(Ie(u,"float32")))))}}};const nE={kernelName:mR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=fs(vt(Fe(1),yt(Ie(u,"float32"))));return Me(r,p)}}}};const sE={kernelName:yR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=vt(yt(u),yt(p));let T=le(r,Me(p,S));const C=Dt(u.shape,y);return C.length>0&&(T=_e(T,C)),re(T,u.shape)},I=()=>{const S=vt(yt(u),yt(p));let T=It(le(r,Me(u,S)));const C=Dt(p.shape,y);return C.length>0&&(T=_e(T,C)),re(T,p.shape)};return{a:g,b:I}}};const iE={kernelName:fR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(yt(Ie(u,"float32")),1))}}};const rE={kernelName:gR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Be(Fe(1),yt(Ie(u,"float32"))))}}};function KQ(r,l,u,p,y=[1,1,1],g,I){const S=M(r,"dy","avgPool3dBackprop"),T=M(l,"input","avgPool3dBackprop");let C=S,D=T,_=!1;T.rank===4&&(_=!0,C=re(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),D=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]])),J(C.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),J(D.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${D.rank}.`),J(yo(p,y),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${y}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=P=>{const ge=Mg(D.shape,u,p,y,g,I);return P.avgPool3dBackprop(C,D,ge)},B={dy:C,input:D},ne={filterSize:u,strides:p,dilations:y,pad:g,dimRoundingMode:I},te=H.runKernelFunc(A,B,null,SR,ne);return _?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const oE=V({avgPool3dBackprop_:KQ});const aE={kernelName:LR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,dilations:I,pad:S,dimRoundingMode:T}=u,C=I==null?[1,1,1]:I;return{x:()=>oE(r,p,y,g,C,S,T)}}};function XQ(r,l,u,p,y){const g=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,T=g,C=!1;I.rank===3&&(C=!0,S=re(I,[1,I.shape[0],I.shape[1],I.shape[2]]),T=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(T.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${T.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const D=ne=>{const te=Bg(S.shape,u,p,1,y);return ne.avgPoolBackprop(T,S,te)},_={dy:T,input:S},A={filterSize:u,strides:p,pad:y},B=H.runKernelFunc(D,_,null,wR,A);return C?re(B,[B.shape[1],B.shape[2],B.shape[3]]):B}const cE=V({avgPoolBackprop_:XQ});const lE={kernelName:bR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:y,strides:g,pad:I}=u;return{x:()=>cE(r,p,y,g,I)}}};const hE={kernelName:Wf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,y]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>yn(r,y,!1,!0),b:()=>yn(p,r,!0,!1)}:!g&&I?{a:()=>yn(r,y,!1,!1),b:()=>yn(r,p,!0,!1)}:g&&!I?{a:()=>yn(y,r,!1,!0),b:()=>yn(p,r,!1,!1)}:{a:()=>yn(y,r,!0,!0),b:()=>yn(r,p,!0,!0)}}};const uE={kernelName:$f,gradFunc:(r,l,u)=>{const{blockShape:p,crops:y}=u;return{x:()=>hx(r,p,y)}}};const dE={kernelName:Uf,gradFunc:(r,l,u)=>{const p=u,y=p.inputShape,g=p.shape,I=Array.from(g);for(let T=y.length-1;T>=0;T--)if(y[T]===g[T])I[T]=1;else if(y[T]!==1)throw new Error(`broadcastTo(): [${y}] cannot be broadcast to [${g}].`);const S=[];for(let T=0;T1&&S.push(T);return{x:()=>_e(r,S,!0)}}};const pE={kernelName:qc,gradFunc:r=>({x:()=>r.clone()})};const mE={kernelName:IR,gradFunc:r=>({x:()=>Xe(r)})};const fE={kernelName:xR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:y,clipValueMax:g}=u;return{x:()=>Gn(ya(Ir(p,y),xr(p,g)),r,Xe(r))}}};const gE={kernelName:Bf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(T=>T.shape),{axis:y}=u,g=gt(y,l[0].shape)[0],I=p.map(T=>T[g]),S=Lo(r,I,g);return S.map(T=>()=>T)}};const yE={kernelName:Mf,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{dilations:g,strides:I,pad:S,dataFormat:T}=u;return J(go(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>a1(p.shape,r,y,I,S,T),filter:()=>qg(p,r,y.shape,I,S,T)}}};const bE={kernelName:Pf,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:T}=u;return{dy:()=>qI(r,y,g,I,S,1,T),filter:()=>qg(r,p,y.shape,g,I,S,T)}}};function JQ(r,l,u,p,y){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=D=>{const _=1,A=Yu(g.shape,u,p,_,y);return D.conv3dDerFilter(g,I,A)},T={x:g,dy:I},C={strides:p,pad:y,filterShape:u};return H.runKernelFunc(S,T,null,NR,C)}const wE=V({conv3DBackpropFilter_:JQ});const LE={kernelName:vR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g}=u;J(go(p),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${p}'`);const[I,S]=l;return{x:()=>c1(I.shape,r,S,y,g),filter:()=>wE(I,r,S.shape,y,g)}}};const SE={kernelName:zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(dx(Ie(u,"float32"))),r)}}};const IE={kernelName:Vf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(px(Ie(u,"float32")),r)}}};const xE={kernelName:Gf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:y,exclusive:g,reverse:I}=u;return{x:()=>{const S=Gi([y],p.rank);let T=KI(r,y,g,!I);return S!=null&&(T=xn(T,S)),T}}}};const TE={kernelName:OR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:y,pad:g,dimRoundingMode:I}=u,S=p==null?[1,1]:p;J(go(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[T,C]=l;return J(T.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${T.rank}.`),J(C.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${C.rank}.`),J(T.shape[3]===C.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${T.shape[3]}) must match the inChannels dimension in filter ${C.shape[2]}.`),J(yo(y,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${y} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>m1(T.shape,r,C,y,g,p,I),filter:()=>p1(T,r,C.shape,y,g,p,I)}}};const AE={kernelName:kR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,y]=l,g={x:p,filter:y,dy:r},I={x:p,filter:y,dy:r};return{x:()=>H.runKernel(FR,g,u),filter:()=>H.runKernel(_R,I,u)}}};const vE={kernelName:Yf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Dt(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=yt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const NE={kernelName:WR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=g=>g.eluDer(r,u),y={dy:r,y:u};return{x:()=>H.runKernelFunc(p,y,null,$R)}}};const CE={kernelName:UR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(Yn(It(yt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,p)}}};const RE={kernelName:Hf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const OE={kernelName:MR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Yn(u))}}};const EE={kernelName:qf,gradFunc:r=>({x:()=>Xe(r)})};const DE={kernelName:jf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Me(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const T=Dt(p.shape,y);T.length>0&&(S=re(_e(S,T),p.shape));const C=yt(p);return It(Me(S,Ie(C,"float32")))};return{a:g,b:I}}};const kE={kernelName:GR,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[y,g,I,S]=l,T=S==null?Fe(1):S,C=Dt(g.shape,y.shape),D=[];if(g.rank===1){for(let ve=0;veg.rank===1?re(le(le(r,fa(re(B,[1,1,1,g.shape[0]]),D)),T),y.shape):re(le(le(r,B),T),y.shape),P=()=>{let ve=le(le(B,Fe(-1)),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ge=()=>{let ve=le(le(ne,_),A);return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)},ae=()=>{const ve=le(_,B);let Ve=le(r,ve);return g.rank===1&&(Ve=_e(Ve,C)),re(Ve,g.shape)},Le=()=>{let ve=r;return g.rank===1&&(ve=_e(ve,C)),re(ve,g.shape)};return{x:te,mean:P,variance:ge,scale:ae,offset:Le}}};const WE={kernelName:Kf,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,y]=l,{axis:g}=u,I=gt(g,p.shape)[0],S=()=>{const T=p.shape,C=y.size,D=T.slice(0,I),_=D.length,A=T.slice(g,T.length).slice(1),B=A.length,ne=FE(0,_),te=FE(_+1,_+1+B),P=_E([D,[C],A]),ge=re(r,P),ae=re(y,[C]),Le=_E([[_],ne,te]),ve=xn(ge,Le);let Ve=yx(ve,ae,p.shape[I]);const at=Xc(Le);return Ve=xn(Ve,at),Ve};return{x:S,indices:()=>y}}};function FE(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>Xe(u),b:()=>Xe(p)}}};const UE={kernelName:Jf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const BE={kernelName:jR,gradFunc:r=>({x:()=>Xe(r)})};const ME={kernelName:KR,gradFunc:r=>({x:()=>Xe(r)})};const PE={kernelName:XR,gradFunc:r=>({x:()=>Xe(r)})};const zE={kernelName:Qf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,vt(u,1))}}};const VE={kernelName:Zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,Ie(u,"float32"))}}};const GE={kernelName:tO,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:y}=u;return{logits:()=>{const g=!0,I=Yn(p);return Be(r,le(_e(r,y,g),I))}}}};function ZQ(r,l,u,p=5,y=1,g=1,I=.5){const S=D=>D.LRNGrad(u,r,l,p,y,g,I),T={x:r,y:l,dy:u},C={depthRadius:p,bias:y,alpha:g,beta:I};return H.runKernelFunc(S,T,null,sO,C)}const YE=V({localResponseNormalizationBackprop_:ZQ});const HE={kernelName:nO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{depthRadius:g,bias:I,alpha:S,beta:T}=u;return{x:()=>YE(p,y,r,g,I,S,T)}}};function Xg(r,l,u,p){return l.rank{const y=le(r,Ie(XI(u,l),r.dtype));return y}}}const wx={kernelName:eg,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:y}=p,g=l[0],I=l[1],S=gt(y,g.shape),T=Xg(r,I,g,S);return{x:()=>T.x()}}};const qE={kernelName:tg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(Ir(u,p),"float32")),g=()=>le(r,Ie(nx(u,p),"float32"));return{a:y,b:g}}};function QQ(r,l,u,p,y,g=[1,1,1],I,S){const T=M(r,"dy","maxPool3dBackprop"),C=M(l,"input","maxPool3dBackprop"),D=M(u,"output","maxPool3dBackprop");let _=T,A=C,B=D,ne=!1;C.rank===4&&(ne=!0,_=re(T,[1,T.shape[0],T.shape[1],T.shape[2],T.shape[3]]),A=re(C,[1,C.shape[0],C.shape[1],C.shape[2],C.shape[3]]),B=re(D,[1,D.shape[0],D.shape[1],D.shape[2],D.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(B.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${B.rank}.`),J(yo(y,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${y} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Le=>{const ve=Mg(A.shape,p,y,g,I,S);return Le.maxPool3dBackprop(_,A,B,ve)},P={dy:_,input:A,output:B},ge={filterSize:p,strides:y,dilations:g,pad:I,dimRoundingMode:S},ae=H.runKernelFunc(te,P,null,aO,ge);return ne?re(ae,[ae.shape[1],ae.shape[2],ae.shape[3],ae.shape[4]]):ae}const jE=V({maxPool3dBackprop_:QQ});const KE={kernelName:oO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,dilations:S,pad:T,dimRoundingMode:C}=u,D=S==null?[1,1,1]:S;return{x:()=>jE(r,p,y,g,I,D,T,C)}}};function eee(r,l,u,p,y,g,I){const S=M(r,"dy","maxPoolBackprop"),T=M(l,"input","maxPoolBackprop"),C=M(u,"output","maxPoolBackprop");J(T.rank===S.rank,()=>`Rank of input (${T.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(T.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${T.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const D=B=>{const ne=Bg(T.shape,p,y,1,g,I);return B.maxPoolBackprop(S,T,C,ne)},_={dy:S,input:T,output:C},A={filterSize:p,strides:y,pad:g,dimRoundingMode:I};return H.runKernelFunc(D,_,null,rO,A)}const XE=V({maxPoolBackprop_:eee});const JE={kernelName:iO,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,y]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>XE(r,p,y,g,I,S)}}};const ZE={kernelName:ng,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:y}=p,[g,I]=l,S=gt(y,g.shape),T=Xg(r,I,g,S);return{x:()=>T.x()}}};const QE={kernelName:sg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=()=>le(r,Ie(xr(u,p),"float32")),g=()=>le(r,Ie(bi(u,p),"float32"));return{a:y,b:g}}};const eD={kernelName:lO,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const tD={kernelName:hO,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=Dt(u.shape,y);return S.length>0?re(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(QI(Me(u,p)))),T=Dt(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const nD={kernelName:ig,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{const S=le(r,Ie(p,"float32")),T=Dt(u.shape,y);return T.length>0?re(_e(S,T),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),T=Dt(p.shape,y);return T.length>0?re(_e(S,T),p.shape):S};return{a:g,b:I}}};const sD={kernelName:rg,gradFunc:r=>({x:()=>It(r)})};const iD={kernelName:gO,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Fs(u.shape,"float32")}}};const rD={kernelName:fO,gradFunc:r=>({x:()=>Xe(r)})};const Lx={kernelName:og,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:y}=u,g=y.map(I=>I[0]);return{x:()=>Tt(r,g,p.shape)}}};const oD={kernelName:ag,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,y]=l,g=u,I=p,S=ot(g.shape,I.shape),T=()=>{const D=Ie(I,"float32");let _=le(r,le(D,ba(g,Be(D,Fe(1)))));const A=Dt(g.shape,S);return A.length>0&&(_=_e(_,A)),re(_,g.shape)},C=()=>{const D=bi(g,0),_=Gn(D,bo(g),Xe(g));let A=le(r,le(y,_));const B=Dt(I.shape,S);return B.length>0&&(A=_e(A,B)),re(A,I.shape)};return{a:T,b:C}}};const aD={kernelName:yO,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,y=bi(u,0);return{x:()=>Gn(y,r,le(r,p)),alpha:()=>{let g=Gn(y,Xe(r),le(r,u));const I=Dt(p.shape,r.shape);return I.length>0&&(g=_e(g,I)),re(g,p.shape)}}}};const cD={kernelName:LO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,It(yt(u)))}}};const lD={kernelName:xO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=le(xr(u,6),wa(u));return{x:()=>le(r,Ie(p,"float32"))}}};const hD={kernelName:cg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(wa(u),"float32"))}}};const uD={kernelName:lg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>re(r,u.shape)}}};const dD={kernelName:ug,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeBilinearBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,IO,u);return{images:I}}};const pD={kernelName:hg,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,y=S=>{const{alignCorners:T}=u;return S.resizeNearestNeighborBackprop(r,p,T)},g={images:p},I=()=>H.runKernelFunc(y,g,null,SO,u);return{images:I}}};const mD={kernelName:dg,gradFunc:(r,l,u)=>{const{dims:p}=u,y=gt(p,r.shape);return{x:()=>el(r,y)}}};const fD={kernelName:TO,gradFunc:r=>({x:()=>Xe(r)})};const gD={kernelName:pg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Me(r,le(ba(u,1.5),2)))}}};const yD={kernelName:mg,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Xe(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(rx(u),r.dtype))}}};const bD={kernelName:AO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=bi(u,Fe(0)),y=Fe(H1),g=Fe(q1),I=le(r,g),S=le(le(r,y),Yn(Ie(u,"float32")));return Gn(p,I,S)}}}};const wD={kernelName:bg,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const LD={kernelName:vO,gradFunc:r=>({x:()=>Xe(r)})};const SD={kernelName:gg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Hu(Ie(u,"float32")),r)}}};const ID={kernelName:yg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(jI(Ie(u,"float32")),r)}}};const xD={kernelName:fg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:y,size:g}=u,I=p.shape,[S,T]=$g(p,y,g),C=[];for(let D=0;Dlx(r,C)}}};const TD={kernelName:CO,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:y}=u,g=!0,I=le(r,p);return{logits:()=>Be(I,le(_e(I,[y],g),p))}}};const AD={kernelName:NO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,YI(u))}}};const Sx={kernelName:Sg,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:y}=u;return{x:()=>HI(r,p,y)}}};const Ix={kernelName:Ig,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>Tn(r,p)}}};const vD={kernelName:wg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,le(fs(Ie(u,"float32")),2))}}};const ND={kernelName:RO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const CD={kernelName:xg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=Fe(2),g=()=>le(r,le(y,Be(u,p))),I=()=>le(r,le(y,Be(p,u)));return{a:g,b:I}}};const RD={kernelName:Og,gradFunc:r=>({x:()=>Xe(r)})};const OD={kernelName:Tg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,y=ot(u.shape,p.shape),g=()=>{let S=r;const T=Dt(u.shape,y);return T.length>0&&(S=_e(S,T)),re(S,u.shape)},I=()=>{let S=r;const T=Dt(p.shape,y);return T.length>0&&(S=_e(S,T)),re(It(S),p.shape)};return{a:g,b:I}}};const ED={kernelName:Lg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,y=p.shape.slice(),{axis:g}=u,I=gt(g,p.shape);I.forEach(C=>{y[C]=1});const S=re(r,y),T=le(S,Yi(p.shape,"float32"));return{x:()=>T}}};const DD={kernelName:OO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Me(r,yt(Hu(u)))}}};const kD={kernelName:EO,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),yt(u)),r)}}};const FD={kernelName:Ag,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:y}=u,g=()=>{let I=Xe(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:y}=p,g=Xc(y);return{x:()=>xn(r,g)}}};const WD={kernelName:Ng,gradFunc:(r,l,u)=>{const p=u,{axis:y}=p;return{value:()=>js(r,y)}}};const $D={kernelName:Cg,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>tee(r,u);return{x:p}}};function tee(r,l){const u=tx(l,Xe(l)),p=ex(r,u);let y=Ir(l,Fe(0,"int32"));const g=p.rank-y.rank;for(let S=0;S({x:()=>Xe(r)})};const nee=[j1,K1,X1,J1,Z1,Q1,eE,tE,nE,sE,iE,rE,aE,lE,hE,uE,dE,pE,mE,fE,gE,bE,yE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,DE,EE,kE,WE,$E,UE,BE,ME,PE,zE,VE,GE,HE,wx,wx,qE,KE,JE,ZE,QE,eD,tD,nD,sD,iD,rD,Lx,Lx,oD,aD,cD,lD,hD,uD,dD,pD,mD,fD,gD,yD,bD,wD,LD,SD,ID,xD,TD,AD,Sx,Sx,Ix,Ix,vD,CD,ND,RD,OD,ED,DD,kD,FD,_D,WD,$D,UD];for(const r of nee)FO(r);function Sf(r,l,u=!1){const{Image:p,Canvas:y}=Lt.getEnv();if(!(r instanceof p||r instanceof y))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ho(r),I=l/Math.max(g.height,g.width),S=I*g.width,T=I*g.height,C=aa({width:l,height:l}),D=r instanceof y?r:Uc(r),_=Math.abs(S-T)/2,A=u&&S{if(wr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Os(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const y=u instanceof Lt.getEnv().Canvas?u:Uc(u);this._canvases[p]=y,this._inputDimensions[p]=[y.height,y.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 Ui(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return mI({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,t1(()=>{const u=Ui(this.batchSize,0,1).map(y=>{const g=this.getInput(y);if(g instanceof Dn){let I=Os(g)?g:g.expandDims();return I=rf(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=Y1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof Lt.getEnv().Canvas)return zI.fromPixels(Sf(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${y}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),p=js(u.map(y=>Ie(y,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Ot(r){if(r instanceof yr)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=y=>Array.isArray(r)?` at input index ${y}:`:"",p=l.map(lo);return p.forEach((y,g)=>{if(!ku(y)&&!wr(y)&&!Os(y))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Os(y)){const I=y.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(y=>ku(y)&&Af(y))),new yr(p,Array.isArray(r))}async function ra(r,l){const{Canvas:u}=Lt.getEnv();let p=r;if(!(r instanceof u)){const I=await Ot(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await If(S)}const y=zn(p),g=l.map(I=>I instanceof Vt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return g.map(({x:I,y:S,width:T,height:C})=>{const D=aa({width:T,height:C});return zn(D).putImageData(y.getImageData(I,S,T,C),0,0),D})}const Jg=Ze(Qe());async function oa(r,l){if(!wr(r)&&!Os(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Os(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Jg.tidy(()=>{const[u,p,y]=r.shape.slice(Os(r)?1:0),g=l.map(S=>S instanceof Vt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=g.map(({x:S,y:T,width:C,height:D})=>Jg.slice3d(r.as3D(u,p,y),[T,S,0],[D,C,y]));return I})}async function uo(r,l){const u=Lt.getEnv().fetch,p=await u(r,l);if(!(p.status<400))throw new Error(`failed to fetch: (${p.status}) ${p.statusText}, from url: ${p.url}`);return p}async function V2(r){const l=await uo(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return Tf(u)}async function xf(r){return(await uo(r)).json()}async function z2(r){return new Float32Array(await(await uo(r)).arrayBuffer())}function Zg(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const p=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(p,"");const y=r.split("/").filter(S=>S),g=r.endsWith(".json")?y[y.length-1]:u;let I=p+(r.endsWith(".json")?y.slice(0,y.length-1):y).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const BD=Ze(Qe());async function Lf(r,l){const{manifestUri:u,modelBaseUri:p}=Zg(r,l);let y=await xf(u);return BD.io.loadWeights(y,p)}function P2(r,l,u=!1){const{width:p,height:y}=u?ho(l):l;return r.width=p,r.height=y,{width:p,height:y}}const Tr=Ze(Qe());class En{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:p}=this.traversePropertyPath(r);u[p].dispose(),u[p]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Tr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Tr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Tr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await Lf(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=Lt.getEnv(),{manifestUri:u,modelBaseUri:p}=Zg(r,this.getDefaultModelName()),y=T=>Promise.all(T.map(C=>l(C).then(D=>D.buffer))),g=Tr.io.weightsLoaderFactory(y),I=JSON.parse((await l(u)).toString()),S=await g(I,p);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((y,g)=>{if(!y.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:y.nextObj,objProp:g,nextObj:y.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof Tr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const nl=Ze(Qe());function as(r,l,u){return nl.tidy(()=>{let p=nl.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=nl.add(p,l.bias),p})}const Bt=Ze(Qe());function Qg(r,l,u=!1){return Bt.tidy(()=>{const p=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):as(r,l.conv0,[2,2])),y=as(p,l.conv1,[1,1]),g=Bt.relu(Bt.add(p,y)),I=as(g,l.conv2,[1,1]);return Bt.relu(Bt.add(p,Bt.add(y,I)))})}function Zu(r,l,u=!1,p=!0){return Bt.tidy(()=>{const y=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):as(r,l.conv0,p?[2,2]:[1,1])),g=as(y,l.conv1,[1,1]),I=Bt.relu(Bt.add(y,g)),S=as(I,l.conv2,[1,1]),T=Bt.relu(Bt.add(y,Bt.add(g,S))),C=as(T,l.conv3,[1,1]);return Bt.relu(Bt.add(y,Bt.add(g,Bt.add(S,C))))})}const So=Ze(Qe());function Sa(r,l,u="same",p=!1){return So.tidy(()=>{const y=So.add(So.conv2d(r,l.filters,[1,1],u),l.bias);return p?So.relu(y):y})}function Hn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const ey=Ze(Qe());function sl(r,l){return function(u,p,y,g){const I=ey.tensor4d(r(u*p*y*y),[y,y,u,p]),S=ey.tensor1d(r(p));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const ty=Ze(Qe());function ny(r,l){return function(u,p,y){const g=ty.tensor2d(r(u*p),[u,p]),I=ty.tensor1d(r(p));return l.push({paramPath:`${y}/weights`},{paramPath:`${y}/bias`}),{weights:g,bias:I}}}class xx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const Qu=Ze(Qe());function il(r,l){return function(u,p,y){const g=Qu.tensor4d(r(3*3*u),[3,3,u,1]),I=Qu.tensor4d(r(u*p),[1,1,u,p]),S=Qu.tensor1d(r(p));return l.push({paramPath:`${y}/depthwise_filter`},{paramPath:`${y}/pointwise_filter`},{paramPath:`${y}/bias`}),new xx(g,I,S)}}function rl(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),y=r(`${l}/bias`,1);return new xx(u,p,y)}}function gs(r,l){return function(u,p,y){const g=r[u];if(!la(g,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${g}`);return l.push({originalPath:u,paramPath:y||u}),g}}function qn(r){let l=r;function u(y){const g=l.slice(0,y);return l=l.slice(y),g}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function sy(r,l){const u=sl(r,l),p=il(r,l);function y(I,S,T,C=!1){const D=C?u(I,S,3,`${T}/conv0`):p(I,S,`${T}/conv0`),_=p(S,S,`${T}/conv1`),A=p(S,S,`${T}/conv2`);return{conv0:D,conv1:_,conv2:A}}function g(I,S,T,C=!1){const{conv0:D,conv1:_,conv2:A}=y(I,S,T,C),B=p(S,S,`${T}/conv3`);return{conv0:D,conv1:_,conv2:A,conv3:B}}return{extractDenseBlock3Params:y,extractDenseBlock4Params:g}}function MD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractDenseBlock4Params:y}=sy(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2"),T=y(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:T}}}function iy(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function ry(r,l){const u=gs(r,l),p=iy(u),y=rl(u);function g(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`);return{conv0:C,conv1:D,conv2:_}}function I(S,T=!1){const C=T?p(`${S}/conv0`):y(`${S}/conv0`),D=y(`${S}/conv1`),_=y(`${S}/conv2`),A=y(`${S}/conv3`);return{conv0:C,conv1:D,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function PD(r){const l=[],{extractDenseBlock4Params:u}=ry(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Hn(r,l),{params:p,paramMappings:l}}const Io=Ze(Qe());class oy extends En{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return Io.tidy(()=>{const u=Io.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(Io.scalar(255));let g=Zu(y,l.dense0,!0);return g=Zu(g,l.dense1),g=Zu(g,l.dense2),g=Zu(g,l.dense3),g=Io.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return PD(r)}extractParams(r){return MD(r)}}const ol=Ze(Qe());function ed(r,l){return ol.tidy(()=>ol.add(ol.matMul(r,l.weights),l.bias))}function zD(r,l,u){const p=[],{extractWeights:y,getRemainingWeights:g}=qn(r),I=ny(y,p),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:p,params:{fc:S}}}function VD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:p("fc")};return Hn(r,l),{params:y,paramMappings:l}}function ay(r){const l={},u={};return Object.keys(r).forEach(p=>{const y=p.startsWith("fc")?u:l;y[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const GD=Ze(Qe());class cy extends En{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return GD.tidy(()=>{const u=r instanceof yr?this.faceFeatureExtractor.forwardInput(r):r;return ed(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return zD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=ay(r);return this.faceFeatureExtractor.loadFromWeightMap(l),VD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,y=r.slice(0,r.length-p),g=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(y),this.extractClassifierParams(g)}}const yf=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class co{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);yf.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return yf.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const al=Ze(Qe());class bf extends cy{constructor(r=new oy){super("FaceExpressionNet",r)}forwardInput(r){return al.tidy(()=>al.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Ot(r))}async predictExpressions(r){const l=await Ot(r),u=await this.forwardInput(l),p=await Promise.all(al.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const y=p.map(g=>new co(g));return l.isBatchInput?y:y[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function ff(r){return r.expressions instanceof co}function Ou(r,l){const u={expressions:l};return Object.assign({},r,u)}function see(r,l,u=.1,p){const y=Array.isArray(l)?l:[l];y.forEach(g=>{const I=g instanceof co?g:ff(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),T=S.filter(_=>_.probability>u),C=mi(g)?g.detection.box.bottomLeft:p||new Ke(0,0),D=new Vc(T.map(_=>`${_.expression} (${ha(_.probability)})`),C);D.draw(r)})}function oo(r){return mi(r)&&r.landmarks instanceof Rs&&r.unshiftedLandmarks instanceof Rs&&r.alignedRect instanceof Vt}function ia(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),y=p.align(),{imageDims:g}=r.detection,I=new Vt(r.detection.score,y.rescale(g.reverse()),g),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class YD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:y,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=g||2,this.lineColor=y||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class HD{constructor(r,l={}){this.faceLandmarks=r,this.options=new YD(l)}draw(r){const l=zn(r),{drawLines:u,drawPoints:p,lineWidth:y,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof Mc&&(l.strokeStyle=g,l.lineWidth=y,br(l,this.faceLandmarks.getJawOutline()),br(l,this.faceLandmarks.getLeftEyeBrow()),br(l,this.faceLandmarks.getRightEyeBrow()),br(l,this.faceLandmarks.getNose()),br(l,this.faceLandmarks.getLeftEye(),!0),br(l,this.faceLandmarks.getRightEye(),!0),br(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const T=C=>{l.beginPath(),l.arc(C.x,C.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(T)}}}function iee(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const y=p instanceof Rs?p:oo(p)?p.landmarks:void 0;if(!y)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new HD(y).draw(r)})}const Qm={};vu(Qm,{AnchorPosition:()=>Mi,DrawBox:()=>SI,DrawBoxOptions:()=>j2,DrawFaceLandmarks:()=>HD,DrawFaceLandmarksOptions:()=>YD,DrawTextField:()=>Vc,DrawTextFieldOptions:()=>Of,drawContour:()=>br,drawDetections:()=>y9,drawFaceExpressions:()=>see,drawFaceLandmarks:()=>iee});function ree(r,l){const u=sl(r,l),p=il(r,l);function y(I,S,T){const C=p(I,S,`${T}/separable_conv0`),D=p(S,S,`${T}/separable_conv1`),_=u(I,S,1,`${T}/expansion_conv`);return{separable_conv0:C,separable_conv1:D,expansion_conv:_}}function g(I,S){const T=p(I,I,`${S}/separable_conv0`),C=p(I,I,`${S}/separable_conv1`),D=p(I,I,`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:y,extractMainBlockParams:g}}function qD(r,l){const u=[],{extractWeights:p,getRemainingWeights:y}=qn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:T}=ree(p,u),C=g(3,32,3,"entry_flow/conv_in"),D=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:C,reduction_block_0:D,reduction_block_1:_},B={};Ui(l,0,1).forEach(ge=>{B[`main_block_${ge}`]=T(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),P={reduction_block:ne,separable_conv:te};if(y().length!==0)throw new Error(`weights remaing after extract: ${y().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:B,exit_flow:P}}}function oee(r,l){const u=gs(r,l),p=iy(u),y=rl(u);function g(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=p(`${S}/expansion_conv`);return{separable_conv0:T,separable_conv1:C,expansion_conv:D}}function I(S){const T=y(`${S}/separable_conv0`),C=y(`${S}/separable_conv1`),D=y(`${S}/separable_conv2`);return{separable_conv0:T,separable_conv1:C,separable_conv2:D}}return{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}}function jD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:y,extractReductionBlockParams:g,extractMainBlockParams:I}=oee(r,u),S=p("entry_flow/conv_in"),T=g("entry_flow/reduction_block_0"),C=g("entry_flow/reduction_block_1"),D={conv_in:S,reduction_block_0:T,reduction_block_1:C},_={};Ui(l,0,1).forEach(te=>{_[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const A=g("exit_flow/reduction_block"),B=y("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:B};return Hn(r,u),{params:{entry_flow:D,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=Ze(Qe());function KD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function Tx(r,l,u=!0){let p=u?on.relu(r):r;return p=as(p,l.separable_conv0,[1,1]),p=as(on.relu(p),l.separable_conv1,[1,1]),p=on.maxPool(p,[3,3],[2,2],"same"),p=on.add(p,KD(r,l.expansion_conv,[2,2])),p}function aee(r,l){let u=as(on.relu(r),l.separable_conv0,[1,1]);return u=as(on.relu(u),l.separable_conv1,[1,1]),u=as(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class XD extends En{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(on.scalar(256));let g=on.relu(KD(y,l.entry_flow.conv_in,[2,2]));return g=Tx(g,l.entry_flow.reduction_block_0,!1),g=Tx(g,l.entry_flow.reduction_block_1),Ui(this._numMainBlocks,0,1).forEach(I=>{g=aee(g,l.middle_flow[`main_block_${I}`])}),g=Tx(g,l.exit_flow.reduction_block),g=on.relu(as(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return jD(r,this._numMainBlocks)}extractParams(r){return qD(r,this._numMainBlocks)}}function JD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),y=ny(u,l),g=y(512,1,"fc/age"),I=y(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function ZD(r){const l=[],u=gs(r,l);function p(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const y={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Hn(r,l),{params:y,paramMappings:l}}var $i;(function(r){r.FEMALE="female",r.MALE="male"})($i||($i={}));const Hi=Ze(Qe());class vf extends En{constructor(r=new XD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Hi.tidy(()=>{const u=r instanceof yr?this.faceFeatureExtractor.forwardInput(r):r,p=Hi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),y=ed(p,l.fc.age).as1D(),g=ed(p,l.fc.gender);return{age:y,gender:g}})}forwardInput(r){return Hi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Hi.softmax(u)}})}async forward(r){return this.forwardInput(await Ot(r))}async predictAgeAndGender(r){const l=await Ot(r),u=await this.forwardInput(l),p=Hi.unstack(u.age),y=Hi.unstack(u.gender),g=p.map((S,T)=>({ageTensor:S,genderTensor:y[T]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:T})=>{const C=(await S.data())[0],D=(await T.data())[0],_=D>.5,A=_?$i.MALE:$i.FEMALE,B=_?D:1-D;return S.dispose(),T.dispose(),{age:C,gender:A,genderProbability:B}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return JD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=ay(r);return this.faceFeatureExtractor.loadFromWeightMap(l),ZD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),p=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(p)}}const ys=Ze(Qe());class ly extends cy{postProcess(r,l,u){const p=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),y=p.length;return ys.tidy(()=>{const g=(D,_)=>ys.stack([ys.fill([68],D,"float32"),ys.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(D,_)=>{const{width:A,height:B}=p[D];return _(A,B)?Math.abs(A-B)/2:0},S=D=>I(D,(_,A)=>_I(D,(_,A)=>A<_),C=r.mul(ys.fill([y,136],l,"float32")).sub(ys.stack(Array.from(Array(y),(D,_)=>g(S(_),T(_))))).div(ys.stack(Array.from(Array(y),(D,_)=>g(p[_].width,p[_].height))));return C})}forwardInput(r){return ys.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,p])=>({height:u,width:p})))})}async forward(r){return this.forwardInput(await Ot(r))}async detectLandmarks(r){const l=await Ot(r),u=ys.tidy(()=>ys.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(y,g)=>{const I=Array.from(await y.data()),S=I.filter((C,D)=>Nf(D)),T=I.filter((C,D)=>!Nf(D));return new Mc(Array(68).fill(0).map((C,D)=>new Ke(S[D],T[D])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Wc extends ly{constructor(r=new oy){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function QD(r){const l=[],{extractDenseBlock3Params:u}=ry(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Hn(r,l),{params:p,paramMappings:l}}function ek(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractDenseBlock3Params:y}=sy(u,l),g=y(3,32,"dense0",!0),I=y(32,64,"dense1"),S=y(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const xo=Ze(Qe());class tk extends En{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return xo.tidy(()=>{const u=xo.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(xo.scalar(255));let g=Qg(y,l.dense0,!0);return g=Qg(g,l.dense1),g=Qg(g,l.dense2),g=xo.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Ot(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return QD(r)}extractParams(r){return ek(r)}}class gf extends ly{constructor(r=new tk){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class M2 extends Wc{}const hy=Ze(Qe());function nk(r,l){return hy.add(hy.mul(r,l.weights),l.biases)}const cl=Ze(Qe());function Ax(r,l,u,p,y="same"){const{filters:g,bias:I}=l.conv;let S=cl.conv2d(r,g,u,y);return S=cl.add(S,I),S=nk(S,l.scale),p?cl.relu(S):S}function sk(r,l){return Ax(r,l,[1,1],!0)}function vx(r,l){return Ax(r,l,[1,1],!1)}function uy(r,l){return Ax(r,l,[2,2],!0,"valid")}const bs=Ze(Qe());function cee(r,l){function u(S,T,C){const D=r(S),_=D.length/(T*C*C);if(pI(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${D.length}, numFilters: ${T}, filterSize: ${C}`);return bs.tidy(()=>bs.transpose(bs.tensor4d(D,[T,_,C,C]),[2,3,1,0]))}function p(S,T,C,D){const _=u(S,T,C),A=bs.tensor1d(r(T));return l.push({paramPath:`${D}/filters`},{paramPath:`${D}/bias`}),{filters:_,bias:A}}function y(S,T){const C=bs.tensor1d(r(S)),D=bs.tensor1d(r(S));return l.push({paramPath:`${T}/weights`},{paramPath:`${T}/biases`}),{weights:C,biases:D}}function g(S,T,C,D){const _=p(S,T,C,`${D}/conv`),A=y(T,`${D}/scale`);return{conv:_,scale:A}}function I(S,T,C,D,_=!1){const A=g((_?.5:1)*S,T,C,`${D}/conv1`),B=g(S,T,C,`${D}/conv2`);return{conv1:A,conv2:B}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function ik(r){const{extractWeights:l,getRemainingWeights:u}=qn(r),p=[],{extractConvLayerParams:y,extractResidualLayerParams:g}=cee(l,p),I=y(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),T=g(9216,32,3,"conv32_2"),C=g(9216,32,3,"conv32_3"),D=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),B=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),P=g(147456,128,3,"conv128_2"),ge=g(589824,256,3,"conv256_down",!0),ae=g(589824,256,3,"conv256_1"),Le=g(589824,256,3,"conv256_2"),ve=g(589824,256,3,"conv256_down_out"),Ve=bs.tidy(()=>bs.transpose(bs.tensor2d(l(256*128),[128,256]),[1,0]));if(p.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const at={conv32_down:I,conv32_1:S,conv32_2:T,conv32_3:C,conv64_down:D,conv64_1:_,conv64_2:A,conv64_3:B,conv128_down:ne,conv128_1:te,conv128_2:P,conv256_down:ge,conv256_1:ae,conv256_2:Le,conv256_down_out:ve,fc:Ve};return{params:at,paramMappings:p}}function lee(r,l){const u=gs(r,l);function p(I){const S=u(`${I}/scale/weights`,1),T=u(`${I}/scale/biases`,1);return{weights:S,biases:T}}function y(I){const S=u(`${I}/conv/filters`,4),T=u(`${I}/conv/bias`,1),C=p(I);return{conv:{filters:S,bias:T},scale:C}}function g(I){return{conv1:y(`${I}/conv1`),conv2:y(`${I}/conv2`)}}return{extractConvLayerParams:y,extractResidualLayerParams:g}}function rk(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=lee(r,l),y=u("conv32_down"),g=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),T=p("conv64_down"),C=p("conv64_1"),D=p("conv64_2"),_=p("conv64_3"),A=p("conv128_down"),B=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),P=p("conv256_1"),ge=p("conv256_2"),ae=p("conv256_down_out"),Le=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!dI(Le))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Le}`);const ve={conv32_down:y,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:T,conv64_1:C,conv64_2:D,conv64_3:_,conv128_down:A,conv128_1:B,conv128_2:ne,conv256_down:te,conv256_1:P,conv256_2:ge,conv256_down_out:ae,fc:Le};return Hn(r,l),{params:ve,paramMappings:l}}const jn=Ze(Qe());function wi(r,l){let u=sk(r,l.conv1);return u=vx(u,l.conv2),u=jn.add(u,r),u=jn.relu(u),u}function td(r,l){let u=uy(r,l.conv1);u=vx(u,l.conv2);let p=jn.avgPool(r,2,2,"valid");const y=jn.zeros(p.shape),g=p.shape[3]!==u.shape[3],I=p.shape[1]!==u.shape[1]||p.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const T=jn.zeros(S);u=jn.concat([u,T],1);const C=[...u.shape];C[2]=1;const D=jn.zeros(C);u=jn.concat([u,D],2)}return p=g?jn.concat([p,y],3):p,u=jn.add(p,u),u=jn.relu(u),u}const _s=Ze(Qe());class _c extends En{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return _s.tidy(()=>{const u=_s.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],y=Hs(u,p).div(_s.scalar(256));let g=uy(y,l.conv32_down);g=_s.maxPool(g,3,2,"valid"),g=wi(g,l.conv32_1),g=wi(g,l.conv32_2),g=wi(g,l.conv32_3),g=td(g,l.conv64_down),g=wi(g,l.conv64_1),g=wi(g,l.conv64_2),g=wi(g,l.conv64_3),g=td(g,l.conv128_down),g=wi(g,l.conv128_1),g=wi(g,l.conv128_2),g=td(g,l.conv256_down),g=wi(g,l.conv256_1),g=wi(g,l.conv256_2),g=td(g,l.conv256_down_out);const I=g.mean([1,2]),S=_s.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Ot(r))}async computeFaceDescriptor(r){const l=await Ot(r),u=_s.tidy(()=>_s.unstack(this.forwardInput(l))),p=await Promise.all(u.map(y=>y.data()));return u.forEach(y=>y.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return rk(r)}extractParams(r){return ik(r)}}function B2(r){const l=new _c;return l.extractWeights(r),l}function Eu(r,l){const u={descriptor:l};return Object.assign({},r,u)}function U2(r){return typeof r.age=="number"}function Du(r,l){const u={age:l};return Object.assign({},r,u)}function $2(r){return(r.gender===$i.MALE||r.gender===$i.FEMALE)&&zc(r.genderProbability)}function Ru(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const Li=Ze(Qe());function hee(r,l){function u(T,C){const D=Li.tensor4d(r(3*3*T),[3,3,T,1]),_=Li.tensor1d(r(T)),A=Li.tensor1d(r(T)),B=Li.tensor1d(r(T)),ne=Li.tensor1d(r(T));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/batch_norm_scale`},{paramPath:`${C}/batch_norm_offset`},{paramPath:`${C}/batch_norm_mean`},{paramPath:`${C}/batch_norm_variance`}),{filters:D,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:B,batch_norm_variance:ne}}function p(T,C,D,_,A){const B=Li.tensor4d(r(T*C*D*D),[D,D,T,C]),ne=Li.tensor1d(r(C));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:B,bias:ne}}function y(T,C,D,_){const{filters:A,bias:B}=p(T,C,D,_,!0);return{filters:A,batch_norm_offset:B}}function g(T,C,D){const _=u(T,`${D}/depthwise_conv`),A=y(T,C,1,`${D}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const T=y(3,32,3,"mobilenetv1/conv_0"),C=g(32,64,"mobilenetv1/conv_1"),D=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),B=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),P=g(512,512,"mobilenetv1/conv_8"),ge=g(512,512,"mobilenetv1/conv_9"),ae=g(512,512,"mobilenetv1/conv_10"),Le=g(512,512,"mobilenetv1/conv_11"),ve=g(512,1024,"mobilenetv1/conv_12"),Ve=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,conv_8:P,conv_9:ge,conv_10:ae,conv_11:Le,conv_12:ve,conv_13:Ve}}function S(){const T=y(1024,256,1,"prediction_layer/conv_0"),C=y(256,512,3,"prediction_layer/conv_1"),D=y(512,128,1,"prediction_layer/conv_2"),_=y(128,256,3,"prediction_layer/conv_3"),A=y(256,128,1,"prediction_layer/conv_4"),B=y(128,256,3,"prediction_layer/conv_5"),ne=y(256,64,1,"prediction_layer/conv_6"),te=y(64,128,3,"prediction_layer/conv_7"),P=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ae=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Le=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),ve=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),at=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),pt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Gt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),qe=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),ln=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:P,class_predictor:ge},ws={box_encoding_predictor:ae,class_predictor:Le},Cr={box_encoding_predictor:ve,class_predictor:Ve},Rr={box_encoding_predictor:at,class_predictor:pt},Ta={box_encoding_predictor:$t,class_predictor:Gt},hn={box_encoding_predictor:qe,class_predictor:ln};return{conv_0:T,conv_1:C,conv_2:D,conv_3:_,conv_4:A,conv_5:B,conv_6:ne,conv_7:te,box_predictor_0:bt,box_predictor_1:ws,box_predictor_2:Cr,box_predictor_3:Rr,box_predictor_4:Ta,box_predictor_5:hn}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function ok(r){const l=[],{extractWeights:u,getRemainingWeights:p}=qn(r),{extractMobilenetV1Params:y,extractPredictionLayerParams:g}=hee(u,l),I=y(),S=g(),T=Li.tensor3d(u(5118*4),[1,5118,4]),C={extra_dim:T};if(l.push({paramPath:"output_layer/extra_dim"}),p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:C},paramMappings:l}}function uee(r,l){const u=gs(r,l);function p(C,D,_){const A=u(`${C}/Conv2d_${D}_pointwise/weights`,4,`${_}/filters`),B=u(`${C}/Conv2d_${D}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:B}}function y(C){const D=`mobilenetv1/conv_${C}`,_=`MobilenetV1/Conv2d_${C}_depthwise`,A=`${D}/depthwise_conv`,B=`${D}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),te=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),P=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),ge=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ae=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:P,batch_norm_mean:ge,batch_norm_variance:ae},pointwise_conv:p("MobilenetV1",C,B)}}function g(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:y(1),conv_2:y(2),conv_3:y(3),conv_4:y(4),conv_5:y(5),conv_6:y(6),conv_7:y(7),conv_8:y(8),conv_9:y(9),conv_10:y(10),conv_11:y(11),conv_12:y(12),conv_13:y(13)}}function I(C,D){const _=u(`${C}/weights`,4,`${D}/filters`),A=u(`${C}/biases`,1,`${D}/bias`);return{filters:_,bias:A}}function S(C){const D=I(`Prediction/BoxPredictor_${C}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${C}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${C}/ClassPredictor`,`prediction_layer/box_predictor_${C}/class_predictor`);return{box_encoding_predictor:D,class_predictor:_}}function T(){return{conv_0:p("Prediction",0,"prediction_layer/conv_0"),conv_1:p("Prediction",1,"prediction_layer/conv_1"),conv_2:p("Prediction",2,"prediction_layer/conv_2"),conv_3:p("Prediction",3,"prediction_layer/conv_3"),conv_4:p("Prediction",4,"prediction_layer/conv_4"),conv_5:p("Prediction",5,"prediction_layer/conv_5"),conv_6:p("Prediction",6,"prediction_layer/conv_6"),conv_7:p("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:g,extractPredictionLayerParams:T}}function ak(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=uee(r,l),y=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!wr(y))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${y}`);const g={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:y}};return Hn(r,l),{params:g,paramMappings:l}}const To=Ze(Qe());function Xs(r,l,u){return To.tidy(()=>{let p=To.conv2d(r,l.filters,u,"same");return p=To.add(p,l.batch_norm_offset),To.clipByValue(p,0,6)})}const Ar=Ze(Qe()),dee=.0010000000474974513;function pee(r,l,u){return Ar.tidy(()=>{let p=Ar.depthwiseConv2d(r,l.filters,u,"same");return p=Ar.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,dee),Ar.clipByValue(p,0,6)})}function mee(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function ck(r,l){return Ar.tidy(()=>{let u,p=Xs(r,l.conv_0,[2,2]);const y=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(y.forEach((g,I)=>{const S=I+1,T=mee(S);p=pee(p,g.depthwise_conv,T),p=Xs(p,g.pointwise_conv,[1,1]),S===11&&(u=p)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:p,conv11:u}})}function lk(r,l,u,p,y){const g=r.shape[0],I=Math.min(u,g),S=l.map((D,_)=>({score:D,boxIndex:_})).filter(D=>D.score>y).sort((D,_)=>_.score-D.score),T=D=>D<=p?1:0,C=[];return S.forEach(D=>{if(C.length>=I)return;const _=D.score;for(let A=C.length-1;A>=0;--A){const B=fee(r,D.boxIndex,C[A]);if(B===0)continue;if(D.score*=T(B),D.score<=y)break}_===D.score&&C.push(D.boxIndex)}),C}function fee(r,l,u){const p=r.arraySync(),y=Math.min(p[l][0],p[l][2]),g=Math.min(p[l][1],p[l][3]),I=Math.max(p[l][0],p[l][2]),S=Math.max(p[l][1],p[l][3]),T=Math.min(p[u][0],p[u][2]),C=Math.min(p[u][1],p[u][3]),D=Math.max(p[u][0],p[u][2]),_=Math.max(p[u][1],p[u][3]),A=(I-y)*(S-g),B=(D-T)*(_-C);if(A<=0||B<=0)return 0;const ne=Math.max(y,T),te=Math.max(g,C),P=Math.min(I,D),ge=Math.min(S,_),ae=Math.max(P-ne,0)*Math.max(ge-te,0);return ae/(A+B-ae)}const ke=Ze(Qe());function gee(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],p=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:p}}function yee(r,l){const{sizes:u,centers:p}=gee(r),y=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(y[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(y[0],ke.scalar(10)),u[0]),p[0]),S=ke.div(ke.mul(ke.exp(ke.div(y[3],ke.scalar(5))),u[1]),ke.scalar(2)),T=ke.add(ke.mul(ke.div(y[1],ke.scalar(10)),u[1]),p[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(T,S),ke.add(I,g),ke.add(T,S)]),[1,0])}function hk(r,l,u){return ke.tidy(()=>{const p=r.shape[0];let y=yee(ke.reshape(ke.tile(u.extra_dim,[p,1,1]),[-1,4]),ke.reshape(r,[-1,4]));y=ke.reshape(y,[p,y.shape[0]/p,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[p,I.shape[1]]);const S=ke.unstack(y),T=ke.unstack(I);return{boxes:S,scores:T}})}const nd=Ze(Qe());function Ia(r,l){return nd.tidy(()=>{const u=r.shape[0],p=nd.reshape(Sa(r,l.box_encoding_predictor),[u,-1,1,4]),y=nd.reshape(Sa(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:y}})}const sd=Ze(Qe());function uk(r,l,u){return sd.tidy(()=>{const p=Xs(r,u.conv_0,[1,1]),y=Xs(p,u.conv_1,[2,2]),g=Xs(y,u.conv_2,[1,1]),I=Xs(g,u.conv_3,[2,2]),S=Xs(I,u.conv_4,[1,1]),T=Xs(S,u.conv_5,[2,2]),C=Xs(T,u.conv_6,[1,1]),D=Xs(C,u.conv_7,[2,2]),_=Ia(l,u.box_predictor_0),A=Ia(r,u.box_predictor_1),B=Ia(y,u.box_predictor_2),ne=Ia(I,u.box_predictor_3),te=Ia(T,u.box_predictor_4),P=Ia(D,u.box_predictor_5),ge=sd.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,B.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,P.boxPredictionEncoding],1),ae=sd.concat([_.classPrediction,A.classPrediction,B.classPrediction,ne.classPrediction,te.classPrediction,P.classPrediction],1);return{boxPredictions:ge,classPredictions:ae}})}class Ys{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const Si=Ze(Qe());class sa extends En{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Si.tidy(()=>{const u=Si.cast(r.toBatchTensor(512,!1),"float32"),p=Si.sub(Si.mul(u,Si.scalar(.007843137718737125)),Si.scalar(1)),y=ck(p,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=uk(y.out,y.conv11,l.prediction_layer);return hk(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Ot(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new Ys(l),y=await Ot(r),{boxes:g,scores:I}=this.forwardInput(y),S=g[0],T=I[0];for(let ae=1;ae{const[Le,ve]=[Math.max(0,P[ae][0]),Math.min(1,P[ae][2])].map(pt=>pt*te),[Ve,at]=[Math.max(0,P[ae][1]),Math.min(1,P[ae][3])].map(pt=>pt*ne);return new Vt(C[ae],new Bc(Ve,Le,at-Ve,ve-Le),{height:y.getInputHeight(0),width:y.getInputWidth(0)})});return S.dispose(),T.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ak(r)}extractParams(r){return ok(r)}}function rI(r){const l=new sa;return l.extractWeights(r),l}function m2(r){return rI(r)}class f2 extends sa{}const dk=.4,pk=[new Ke(.738768,.874946),new Ke(2.42204,2.65704),new Ke(4.30971,7.04493),new Ke(10.246,4.59428),new Ke(12.6868,11.8741)],mk=[new Ke(1.603231,2.094468),new Ke(6.041143,7.080126),new Ke(2.882459,3.518061),new Ke(4.266906,5.178857),new Ke(9.041765,10.66308)],fk=[117.001,114.697,97.404],gk="tiny_yolov2_model",yk="tiny_yolov2_separable_conv_model";const dy=r=>typeof r=="number";function tf(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!dy(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>dy(l.x)&&dy(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(dy)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Js=Ze(Qe());function ll(r){return Js.tidy(()=>{const l=Js.mul(r,Js.scalar(.10000000149011612));return Js.add(Js.relu(Js.sub(r,l)),l)})}const Zs=Ze(Qe());function vr(r,l){return Zs.tidy(()=>{let u=Zs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Zs.conv2d(u,l.conv.filters,[1,1],"valid"),u=Zs.sub(u,l.bn.sub),u=Zs.mul(u,l.bn.truediv),u=Zs.add(u,l.conv.bias),ll(u)})}const Ao=Ze(Qe());function Nr(r,l){return Ao.tidy(()=>{let u=Ao.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Ao.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=Ao.add(u,l.bias),ll(u)})}const Nx=Ze(Qe());function bee(r,l){const u=sl(r,l);function p(I,S){const T=Nx.tensor1d(r(I)),C=Nx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:T,truediv:C}}function y(I,S,T){const C=u(I,S,3,`${T}/conv`),D=p(S,`${T}/bn`);return{conv:C,bn:D}}const g=il(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}}function bk(r,l,u,p){const{extractWeights:y,getRemainingWeights:g}=qn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:T,extractSeparableConvParams:C}=bee(y,I);let D;if(l.withSeparableConvs){const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=l.isFirstLayerConv2d?S(_,A,3,"conv0"):C(_,A,"conv0"),Ve=C(A,B,"conv1"),at=C(B,ne,"conv2"),pt=C(ne,te,"conv3"),$t=C(te,P,"conv4"),Gt=C(P,ge,"conv5"),qe=ae?C(ge,ae,"conv6"):void 0,ln=Le?C(ae,Le,"conv7"):void 0,bt=S(Le||ae||ge,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Gt,conv6:qe,conv7:ln,conv8:bt}}else{const[_,A,B,ne,te,P,ge,ae,Le]=p,ve=T(_,A,"conv0"),Ve=T(A,B,"conv1"),at=T(B,ne,"conv2"),pt=T(ne,te,"conv3"),$t=T(te,P,"conv4"),Gt=T(P,ge,"conv5"),qe=T(ge,ae,"conv6"),ln=T(ae,Le,"conv7"),bt=S(Le,5*u,1,"conv8");D={conv0:ve,conv1:Ve,conv2:at,conv3:pt,conv4:$t,conv5:Gt,conv6:qe,conv7:ln,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:D,paramMappings:I}}function wee(r,l){const u=gs(r,l);function p(S){const T=u(`${S}/sub`,1),C=u(`${S}/truediv`,1);return{sub:T,truediv:C}}function y(S){const T=u(`${S}/filters`,4),C=u(`${S}/bias`,1);return{filters:T,bias:C}}function g(S){const T=y(`${S}/conv`),C=p(`${S}/bn`);return{conv:T,bn:C}}const I=rl(u);return{extractConvParams:y,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function wk(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:y,extractSeparableConvParams:g}=wee(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:p("conv8")}}else I={conv0:y("conv0"),conv1:y("conv1"),conv2:y("conv2"),conv3:y("conv3"),conv4:y("conv4"),conv5:y("conv5"),conv6:y("conv6"),conv7:y("conv7"),conv8:p("conv8")};return Hn(r,u),{params:I,paramMappings:u}}var nf;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(nf||(nf={}));class Wi{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=Ze(Qe());class hl extends En{constructor(r){super("TinyYolov2");tf(r),this._config=r}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(r,l){let u=vr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=vr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=vr(u,l.conv6),u=vr(u,l.conv7),Sa(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?ll(Sa(r,l.conv0,"valid",!1)):Nr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Nr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Nr(u,l.conv6):u,u=l.conv7?Nr(u,l.conv7):u,Sa(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let p=Mt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?Hs(p,this.config.meanRgb):p,p=p.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Ot(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new Wi(l),y=await Ot(r),g=await this.forwardInput(y,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:y.getInputWidth(0),height:y.getInputHeight(0)},T=await this.extractBoxes(I,y.getReshapedInputDimensions(0),p);g.dispose(),I.dispose();const C=T.map(te=>te.box),D=T.map(te=>te.score),_=T.map(te=>te.classScore),A=T.map(te=>this.config.classes[te.label]),B=of(C.map(te=>te.rescale(u)),D,this.config.iouThreshold,!0),ne=B.map(te=>new ca(D[te],_[te],A[te],C[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return wk(r,this.config)}extractParams(r){const l=this.config.filterSizes||hl.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return bk(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:y}=l,g=Math.max(p,y),I=g/p,S=g/y,T=r.shape[1],C=this.config.anchors.length,[D,_,A]=Mt.tidy(()=>{const P=r.reshape([T,T,C,this.boxEncodingSize]),ge=P.slice([0,0,0,0],[T,T,C,4]),ae=P.slice([0,0,0,4],[T,T,C,1]),Le=this.withClassScores?Mt.softmax(P.slice([0,0,0,5],[T,T,C,this.config.classes.length]),3):Mt.scalar(0);return[ge,ae,Le]}),B=[],ne=await _.array(),te=await D.array();for(let P=0;Pu){const ve=(ge+Fc(te[P][ge][ae][0]))/T*I,Ve=(P+Fc(te[P][ge][ae][1]))/T*S,at=Math.exp(te[P][ge][ae][2])*this.config.anchors[ae].x/T*I,pt=Math.exp(te[P][ge][ae][3])*this.config.anchors[ae].y/T*S,$t=ve-at/2,Gt=Ve-pt/2,qe={row:P,col:ge,anchor:ae},{classScore:ln,label:bt}=this.withClassScores?await this.extractPredictedClass(A,qe):{classScore:1,label:0};B.push({box:new Pc($t,Gt,$t+at,Gt+pt),score:Le,classScore:Le*ln,label:bt,...qe})}}return D.dispose(),_.dispose(),A.dispose(),B}async extractPredictedClass(r,l){const{row:u,col:p,anchor:y}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][p][y][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}hl.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Dc extends hl{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:dk,classes:["face"]},r?{anchors:mk,meanRgb:fk}:{anchors:pk,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Vt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?yk:gk}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function d2(r,l=!0){const u=new Dc(l);return u.extractWeights(r),u}class sf extends Wi{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class qs{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const Cx=Ze(Qe());async function xa(r,l,u,p,y=({alignedRect:g})=>g){const g=r.map(T=>oo(T)?y(T):T.detection),I=p||(l instanceof Cx.Tensor?await oa(l,g):await ra(l,g)),S=await u(I);return I.forEach(T=>T instanceof Cx.Tensor&&T.dispose()),S}async function ul(r,l,u,p,y){return xa([r],l,async g=>u(g[0]),p,y)}const Lk=.4,Sk=[new Ke(1.603231,2.094468),new Ke(6.041143,7.080126),new Ke(2.882459,3.518061),new Ke(4.266906,5.178857),new Ke(9.041765,10.66308)],Ik=[117.001,114.697,97.404];class kc extends hl{constructor(){const r={withSeparableConvs:!0,iouThreshold:Lk,classes:["face"],anchors:Sk,meanRgb:Ik,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(p=>new Vt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const ft={ssdMobilenetv1:new sa,tinyFaceDetector:new kc,tinyYolov2:new Dc,faceLandmark68Net:new Wc,faceLandmark68TinyNet:new gf,faceRecognitionNet:new _c,faceExpressionNet:new bf,ageGenderNet:new vf},aI=(r,l)=>ft.ssdMobilenetv1.locateFaces(r,l),b2=(r,l)=>ft.tinyFaceDetector.locateFaces(r,l),w2=(r,l)=>ft.tinyYolov2.locateFaces(r,l),cI=r=>ft.faceLandmark68Net.detectLandmarks(r),L2=r=>ft.faceLandmark68TinyNet.detectLandmarks(r),S2=r=>ft.faceRecognitionNet.computeFaceDescriptor(r),I2=r=>ft.faceExpressionNet.predictExpressions(r),x2=r=>ft.ageGenderNet.predictAgeAndGender(r),lI=r=>ft.ssdMobilenetv1.load(r),T2=r=>ft.tinyFaceDetector.load(r),A2=r=>ft.tinyYolov2.load(r),v2=r=>ft.faceLandmark68Net.load(r),N2=r=>ft.faceLandmark68TinyNet.load(r),C2=r=>ft.faceRecognitionNet.load(r),R2=r=>ft.faceExpressionNet.load(r),O2=r=>ft.ageGenderNet.load(r),E2=lI,D2=aI,k2=cI;class xk extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class od extends xk{async run(){const r=await this.parentTask,l=await xa(r,this.input,async u=>await Promise.all(u.map(p=>ft.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Ou(u,l[p]))}withAgeAndGender(){return new id(this,this.input)}}class ad extends xk{async run(){const r=await this.parentTask;if(!r)return;const l=await ul(r,this.input,u=>ft.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Ou(r,l)}withAgeAndGender(){return new rd(this,this.input)}}class ml extends od{withAgeAndGender(){return new dl(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class fl extends ad{withAgeAndGender(){return new pl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class Tk extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class id extends Tk{async run(){const r=await this.parentTask,l=await xa(r,this.input,async u=>await Promise.all(u.map(p=>ft.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:y,gender:g,genderProbability:I}=l[p];return Du(Ru(u,g,I),y)})}withFaceExpressions(){return new od(this,this.input)}}class rd extends Tk{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await ul(r,this.input,y=>ft.ageGenderNet.predictAgeAndGender(y),this.extractedFaces);return Du(Ru(r,u,p),l)}withFaceExpressions(){return new ad(this,this.input)}}class dl extends id{withFaceExpressions(){return new ml(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class pl extends rd{withFaceExpressions(){return new fl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class mf extends qs{constructor(r,l){super();this.parentTask=r;this.input=l}}class io extends mf{async run(){const r=await this.parentTask,l=await xa(r,this.input,u=>Promise.all(u.map(p=>ft.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>Eu(r[p],u))}withFaceExpressions(){return new ml(this,this.input)}withAgeAndGender(){return new dl(this,this.input)}}class ro extends mf{async run(){const r=await this.parentTask;if(!r)return;const l=await ul(r,this.input,u=>ft.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return Eu(r,l)}withFaceExpressions(){return new fl(this,this.input)}withAgeAndGender(){return new pl(this,this.input)}}const cd=Ze(Qe());class uf extends qs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?ft.faceLandmark68TinyNet:ft.faceLandmark68Net}}class df extends uf{async run(){const r=await this.parentTask,l=r.map(y=>y.detection),u=this.input instanceof cd.Tensor?await oa(this.input,l):await ra(this.input,l),p=await Promise.all(u.map(y=>this.landmarkNet.detectLandmarks(y)));return u.forEach(y=>y instanceof cd.Tensor&&y.dispose()),r.map((y,g)=>ia(y,p[g]))}withFaceExpressions(){return new ml(this,this.input)}withAgeAndGender(){return new dl(this,this.input)}withFaceDescriptors(){return new io(this,this.input)}}class pf extends uf{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof cd.Tensor?await oa(this.input,[l]):await ra(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(y=>y instanceof cd.Tensor&&y.dispose()),ia(r,p)}withFaceExpressions(){return new fl(this,this.input)}withAgeAndGender(){return new pl(this,this.input)}withFaceDescriptor(){return new ro(this,this.input)}}class lf extends qs{constructor(r,l=new Ys){super();this.input=r;this.options=l}}class Cu extends lf{async run(){const{input:r,options:l}=this,u=l instanceof sf?p=>ft.tinyFaceDetector.locateFaces(p,l):l instanceof Ys?p=>ft.ssdMobilenetv1.locateFaces(p,l):l instanceof Wi?p=>ft.tinyYolov2.locateFaces(p,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>ao({},u)))})}withFaceLandmarks(r=!1){return new df(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new od(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new id(this.runAndExtendWithFaceDetections(),this.input)}}class hf extends lf{async run(){const r=await new Cu(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?ao({},l):void 0)})}withFaceLandmarks(r=!1){return new pf(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new ad(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new rd(this.runAndExtendWithFaceDetection(),this.input)}}function F2(r,l=new Ys){return new hf(r,l)}function Nu(r,l=new Ys){return new Cu(r,l)}async function hI(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Nu(r,new Ys(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function _2(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Nu(r,new Wi(l)).withFaceLandmarks().withFaceDescriptors()}const W2=hI;function wf(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),p=Array.from(l);return Math.sqrt(u.map((y,g)=>y-p[g]).reduce((y,g)=>y+Math.pow(g,2),0))}class uI{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let p=1;const y=()=>`person ${p++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof po)return g;if(g instanceof Float32Array)return new po(y(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new po(y(),[g.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(r,l){return l.map(u=>wf(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new _u(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>po.fromJSON(u));return new uI(l,r.distanceThreshold)}}function p2(r){const l=new kc;return l.extractWeights(r),l}function oI(r,l){const{width:u,height:p}=new rs(l.width,l.height);if(u<=0||p<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:p})}`);if(Array.isArray(r))return r.map(y=>oI(y,{width:u,height:p}));if(oo(r)){const y=r.detection.forSize(u,p),g=r.unshiftedLandmarks.forSize(y.box.width,y.box.height);return ia(ao(r,y),g)}return mi(r)?ao(r,r.detection.forSize(u,p)):r instanceof Rs||r instanceof Vt?r.forSize(u,p):r}var h2="0.8.6";return H2();})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.node.js b/dist/face-api.node.js index b701409..26a7d6a 100644 --- a/dist/face-api.node.js +++ b/dist/face-api.node.js @@ -3959,7 +3959,7 @@ return a / b;`,jX=` `)}function z9(r,l,u,d){const f=Zt(l),g=d[d.length-1],I=new Array(g).fill(0),S=l.length,x=u==="complex64"?Hu(r):r;if(S>1)for(let N=0;NOO){const M=Gu*I;let fe=Array.from(r.slice(0,M)),ie=Array.from(r.slice((S-Gu)*I,S*I));return u==="complex64"&&(fe=Hu(fe),ie=Hu(ie)),["["+fe.map((we,Ae)=>Yu(we,f[Ae],u)).join(", ")+", ..., "+ie.map((we,Ae)=>Yu(we,f[S-Gu+Ae],u)).join(", ")+"]"]}const Q=u==="complex64"?Hu(r):Array.from(r);return["["+Q.map((M,fe)=>Yu(M,f[fe],u)).join(", ")+"]"]}const N=l.slice(1),E=d.slice(1),_=d[0]*I,A=[];if(S>OO){for(let Q=0;Q`Length of values '${d}' does not match the size inferred by the shape '${this.size}'.`)}if(l==="complex64")throw new Error("complex64 dtype TensorBuffers are not supported. Please create a TensorBuffer for the real and imaginary parts separately and call tf.complex(real, imag).");this.values=u||V2(l,this.size),this.strides=Vu(r)}set(r,...l){l.length===0&&(l=[0]),J(l.length===this.rank,()=>`The number of provided coordinates (${l.length}) must match the rank (${this.rank})`);const u=this.locToIndex(l);this.values[u]=r}get(...r){r.length===0&&(r=[0]);let l=0;for(const d of r){if(d<0||d>=this.shape[l]){const f=`Requested out of range element at ${r}. Buffer shape=${this.shape}`;throw new Error(f)}l++}let u=r[r.length-1];for(let d=0;dFI(u))}catch(u){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}}return r}dataSync(){this.throwIfDisposed();const r=Yi().readSync(this.dataId);if(this.dtype==="string")try{return r.map(l=>FI(l))}catch(l){throw new Error("Failed to decode the string bytes into utf-8. To get the original bytes, call tensor.bytes().")}return r}async bytes(){this.throwIfDisposed();const r=await Yi().read(this.dataId);return this.dtype==="string"?r:new Uint8Array(r.buffer)}dispose(){if(this.isDisposed)return;Yi().disposeTensor(this),this.isDisposedInternal=!0}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(r=!1){return jc.print(this,r)}clone(){return this.throwIfDisposed(),jc.clone(this)}toString(r=!1){const l=this.dataSync();return EO(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),jc.cast(this,r)}variable(r=!0,l,u){return this.throwIfDisposed(),Yi().makeVariable(this,r,l,u)}}Object.defineProperty(kn,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class wg extends kn{constructor(r,l,u,d){super(r.shape,r.dtype,r.dataId,d);this.trainable=l,this.name=u}assign(r){if(r.dtype!==this.dtype)throw new Error(`dtype of the new value (${r.dtype}) and previous value (${this.dtype}) must match`);if(!Mu(r.shape,this.shape))throw new Error(`shape of the new value (${r.shape}) and previous value (${this.shape}) must match`);Yi().disposeTensor(this),this.dataId=r.dataId,Yi().incRef(this,null)}dispose(){Yi().disposeVariable(this),this.isDisposedInternal=!0}}Object.defineProperty(wg,Symbol.hasInstance,{value:r=>r instanceof kn&&r.assign!=null&&r.assign instanceof Function});var $O;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})($O||($O={}));var WI;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(WI||(WI={}));var $I;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})($I||($I={}));var UI;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(UI||(UI={}));var BI;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(BI||(BI={}));const G9={float32:UI,int32:WI,bool:$I,complex64:BI};function UO(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return G9[r][l]}function Lt(r,l){if(r.dtype===l.dtype)return[r,l];const u=UO(r.dtype,l.dtype);return[r.cast(u),l.cast(u)]}function Lg(r){const l=[],u=new Set;return BO(r,l,u),l}function BO(r,l,u){if(r==null)return;if(r instanceof kn){l.push(r);return}if(!Y9(r))return;const d=r;for(const f in d){const g=d[f];u.has(g)||(u.add(g),BO(g,l,u))}}function Y9(r){return Array.isArray(r)||typeof r=="object"}class MO{constructor(){this.registeredVariables={},this.nextTapeNodeId=0,this.numBytes=0,this.numTensors=0,this.numStringTensors=0,this.numDataBuffers=0,this.gradientDepth=0,this.kernelDepth=0,this.scopeStack=[],this.numDataMovesStack=[],this.nextScopeId=0,this.tensorInfo=new WeakMap,this.profiling=!1,this.activeProfile={newBytes:0,newTensors:0,peakBytes:0,kernels:[],result:null}}dispose(){for(const r in this.registeredVariables)this.registeredVariables[r].dispose()}}class qu{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new MO}async ready(){if(this.pendingBackendInit!=null)return this.pendingBackendInit.then(()=>{});if(this.backendInstance!=null)return;const r=this.getSortedBackends();for(let l=0;l{l.setupFunc!=null&&l.setupFunc(this.backendInstance)})}disposeRegisteredKernels(r){const l=DI(r);l.forEach(u=>{u.disposeFunc!=null&&u.disposeFunc(this.registry[r])})}initializeBackend(r){const l=this.registryFactory[r];if(l==null)throw new Error(`Cannot initialize backend ${r}, no registration found.`);try{const u=l.factory();if(u&&!(u instanceof M2)&&typeof u.then=="function"){const d=++this.pendingBackendInitId,f=u.then(g=>d(dthis.registryFactory[l].priority-this.registryFactory[r].priority)}initializeBackendsAndReturnBest(){const r=this.getSortedBackends();for(let l=0;lthis.startScope(u),()=>this.endScope(d),()=>(d=l(),d instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),d))}scopedRun(r,l,u){r();try{const d=u();return l(),d}catch(d){throw l(),d}}nextTensorId(){return qu.nextTensorId++}nextVariableId(){return qu.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),u={x:r},d=g=>({x:()=>{const I="float32",S={x:g},x={dtype:I};return H.runKernelFunc(N=>N.cast(g,I),S,null,qc,x)}}),f=[];return this.addTapeNode(this.state.activeScope.name,u,[l],d,f,{}),l}runKernel(r,l,u,d,f){const g=null,I=null;return this.runKernelFunc(g,l,I,r,u,d,f)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,u){const d=this.backend.numDataIds();let f=0;u.forEach(S=>{f+=S.dtype==="complex64"?3:1});const g=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],I=d-l-f-g;if(I>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${I} data ids) after running '${r}'`)}runKernelFunc(r,l,u,d,f,g,I){let S,x=[];const N=this.isTapeOn();d==null&&(d=this.state.activeScope!=null?this.state.activeScope.name:"");const E=this.state.numBytes,_=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let A;const U=gg(d,this.backendName);let ne;if(U!=null)A=()=>{const M=this.backend.numDataIds();ne=U.kernelFunc({inputs:l,attrs:f,backend:this.backend});const fe=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,M,fe);const ie=fe.map(({dataId:we,shape:Ae,dtype:Me})=>this.makeTensorFromDataId(we,Ae,Me));if(N){let we=this.getTensorsForGradient(d,l,ie);if(we==null){I==null&&(I=[]);const Ae=ie.filter((Me,et)=>I[et]);we=(g||[]).slice().concat(Ae)}x=this.saveTensorsForBackwardMode(we)}return ie};else{const M=fe=>{if(!N)return;x=fe.map(ie=>this.keep(this.clone(ie)))};A=()=>{const fe=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,M));const ie=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,fe,ie),ie}}let Q;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?S=A():(Q=this.profiler.profileKernel(d,l,()=>A()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(Q),S=Q.outputs)}),N&&this.addTapeNode(d,l,S,u,x,f),this.state.profiling&&this.state.activeProfile.kernels.push({name:d,bytesAdded:this.state.numBytes-E,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-_,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(M=>l[M]!=null?l[M].shape:null),outputShapes:S.map(M=>M.shape),kernelTimeMs:Q.timeMs,extraInfo:Q.extraInfo}),Array.isArray(ne)?S:S[0]}saveTensorsForBackwardMode(r){const l=r.map(u=>this.keep(this.clone(u)));return l}getTensorsForGradient(r,l,u){const d=EI(r);if(d!=null){const f=d.inputsToSave||[],g=d.outputsToSave||[];let I;d.saveAllInputs?(J(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),I=Object.keys(l).map(x=>l[x])):I=f.map(x=>l[x]);const S=u.filter((x,N)=>g[N]);return I.concat(S)}return null}makeTensor(r,l,u,d){if(r==null)throw new Error("Values passed to engine.makeTensor() are null");u=u||"float32",d=d||this.backend;let f=r;u==="string"&&Pu(r[0])&&(f=r.map(S=>vO(S)));const g=d.write(f,l,u),I=new kn(l,u,g,this.nextTensorId());if(this.incRef(I,d),u==="string"){const S=this.state.tensorInfo.get(g),x=q2(f);this.state.numBytes+=x-S.bytes,S.bytes=x}return I}makeTensorFromDataId(r,l,u,d){u=u||"float32";const f=new kn(l,u,r,this.nextTensorId());return this.incRef(f,d),f}makeVariable(r,l=!0,u,d){u=u||this.nextVariableId().toString(),d!=null&&d!==r.dtype&&(r=r.cast(d));const f=new wg(r,l,u,this.nextTensorId());if(this.state.registeredVariables[f.name]!=null)throw new Error(`Variable with name ${f.name} was already registered`);return this.state.registeredVariables[f.name]=f,this.incRef(f,this.backend),f}incRef(r,l){const u=this.state.tensorInfo.has(r.dataId)?this.state.tensorInfo.get(r.dataId).refCount:0;if(this.state.numTensors++,r.dtype==="string"&&this.state.numStringTensors++,u===0){this.state.numDataBuffers++;let d=0;r.dtype!=="complex64"&&r.dtype!=="string"&&(d=r.size*H2(r.dtype)),this.state.tensorInfo.set(r.dataId,{backend:l||this.backend,dtype:r.dtype,shape:r.shape,bytes:d,refCount:0}),this.state.numBytes+=d}this.state.tensorInfo.get(r.dataId).refCount++,r instanceof wg||this.track(r)}disposeTensor(r){if(!this.state.tensorInfo.has(r.dataId))return;this.state.numTensors--,r.dtype==="string"&&this.state.numStringTensors--;const l=this.state.tensorInfo.get(r.dataId),u=l.refCount;u<=1?(r.dtype!=="complex64"&&(this.state.numBytes-=l.bytes),this.state.numDataBuffers--,l.backend.disposeData(r.dataId),this.state.tensorInfo.delete(r.dataId)):this.state.tensorInfo.get(r.dataId).refCount--}disposeVariables(){for(const r in this.state.registeredVariables){const l=this.state.registeredVariables[r];this.disposeVariable(l)}}disposeVariable(r){this.disposeTensor(r),this.state.registeredVariables[r.name]!=null&&delete this.state.registeredVariables[r.name]}memory(){const r=this.backend.memory();return r.numTensors=this.state.numTensors,r.numDataBuffers=this.state.numDataBuffers,r.numBytes=this.state.numBytes,this.state.numStringTensors>0&&(r.unreliable=!0,r.reasons==null&&(r.reasons=[]),r.reasons.push("Memory usage by string tensors is approximate (2 bytes per character)")),r}async profile(r){this.state.profiling=!0;const l=this.state.numBytes,u=this.state.numTensors;this.state.activeProfile.kernels=[],this.state.activeProfile.result=await r(),this.state.profiling=!1,this.state.activeProfile.peakBytes=Math.max(...this.state.activeProfile.kernels.map(d=>d.totalBytesSnapshot)),this.state.activeProfile.newBytes=this.state.numBytes-l,this.state.activeProfile.newTensors=this.state.numTensors-u;for(const d of this.state.activeProfile.kernels)d.kernelTimeMs=await d.kernelTimeMs,d.extraInfo=await d.extraInfo;return this.state.activeProfile}isTapeOn(){return this.state.gradientDepth>0&&this.state.kernelDepth===0}addTapeNode(r,l,u,d,f,g){const I={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:u,saved:f},S=EI(r);S!=null&&(d=S.gradFunc),d!=null&&(I.gradient=x=>(x=x.map((N,E)=>{if(N==null){const _=u[E],A=ma(_.size,_.dtype);return this.makeTensor(A,_.shape,_.dtype)}return N}),d(x.length>1?x:x[0],f,g))),this.state.activeTape.push(I)}keep(r){return r.kept=!0,r}startTape(){this.state.gradientDepth===0&&(this.state.activeTape=[]),this.state.gradientDepth++}endTape(){this.state.gradientDepth--}startScope(r){const l={track:[],name:"unnamed scope",id:this.state.nextScopeId++};r&&(l.name=r),this.state.scopeStack.push(l),this.state.activeScope=l}endScope(r){const l=Lg(r),u=new Set(l.map(f=>f.id));for(let f=0;f{!f.kept&&f.scopeId===d.id&&this.track(f)})}gradients(r,l,u,d=!1){if(J(l.length>0,()=>"gradients() received an empty list of xs."),u!=null&&u.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${u.dtype}'`);const f=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));J(f instanceof kn,()=>"The result y returned by f() must be a tensor.");const g=CO(this.state.activeTape,l,f);if(!d&&g.length===0&&l.length>0)throw new Error("Cannot compute gradient of y=f(x) with respect to x. Make sure that the f you passed encloses all operations that lead from x to y.");return this.tidy("backward",()=>{const I={};I[f.id]=u==null?H9(f.shape):u,RO(I,g,x=>this.tidy(x),q9);const S=l.map(x=>I[x.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(x=>{for(const N of x.saved)N.dispose()}),this.state.activeTape=null),{value:f,grads:S}})}customGrad(r){return J(TI(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{J(l.every(f=>f instanceof kn),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let u;const d={};return l.forEach((f,g)=>{d[g]=f}),this.runKernelFunc((f,g)=>(u=r(...l,g),J(u.value instanceof kn,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),J(TI(u.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),u.value),d,(f,g)=>{const I=u.gradFunc(f,g),S=Array.isArray(I)?I:[I];J(S.length===l.length,()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns the same number of tensors as inputs passed to f(...)."),J(S.every(N=>N instanceof kn),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function that returns a list of only tensors.");const x={};return S.forEach((N,E)=>{x[E]=()=>N}),x})}}readSync(r){const l=this.state.tensorInfo.get(r);return l.backend.readSync(r)}read(r){const l=this.state.tensorInfo.get(r);return l.backend.read(r)}async time(r){const l=kI(),u=await this.backend.time(r);return u.wallMs=kI()-l,u}track(r){return this.state.activeScope!=null&&(r.scopeId=this.state.activeScope.id,this.state.activeScope.track.push(r)),r}get registeredVariables(){return this.state.registeredVariables}reset(){this.pendingBackendInitId++,this.state.dispose(),this.ENV.reset(),this.state=new MO;for(const r in this.registry)this.disposeRegisteredKernels(r),this.registry[r].dispose(),delete this.registry[r];this.backendName=null,this.backendInstance=null,this.pendingBackendInit=null}}qu.nextTensorId=0;qu.nextVariableId=0;function H9(r){const l=yf(Zt(r),"float32");return H.makeTensor(l,r,"float32")}function MI(){const r=NI();if(r._tfengine==null){const l=new X2(r);r._tfengine=new qu(l)}return Z2(r._tfengine.ENV),FO(()=>r._tfengine),r._tfengine}const H=MI();function q9(r,l){const u={a:r,b:l};return H.runKernelFunc((d,f)=>{const g=d.add(r,l);return f([r,l]),g},u,null,Hc)}function PO(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const Ar=Fs();Ar.registerFlag("DEBUG",()=>!1,r=>{r&&console.warn("Debugging mode is ON. The output of every math call will be downloaded to CPU and checked for NaNs. This significantly impacts performance.")});Ar.registerFlag("IS_BROWSER",()=>PO());Ar.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");Ar.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));Ar.registerFlag("PROD",()=>!1);Ar.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>Ar.getBool("DEBUG"));Ar.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);Ar.registerFlag("IS_TEST",()=>!1);function vr(r,l){let u=r;if(ks(r))return l==="string"?[]:[r.length];if(!Array.isArray(r))return[];const d=[];for(;Array.isArray(u)||ks(u)&&l!=="string";)d.push(u.length),u=u[0];return Array.isArray(r)&&Fs().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&zO(r,d,[]),d}function zO(r,l,u){if(u=u||[],!Array.isArray(r)&&!ks(r)){J(l.length===0,()=>`Element arr[${u.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}J(l.length>0,()=>`Element arr[${u.join("][")}] should be a primitive, but is an array of ${r.length} elements`),J(r.length===l[0],()=>`Element arr[${u.join("][")}] should have ${l[0]} elements, but has ${r.length} elements`);const d=l.slice(1);for(let f=0;f=0&&(f=d),VO(d,f,l,u),r==null||!ks(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string"){const x=r==null?"null":r.constructor.name;throw new Error(`Argument '${l}' passed to '${u}' must be a Tensor or TensorLike, but got '${x}'`)}const g=vr(r,f);!ks(r)&&!Array.isArray(r)&&(r=[r]);const I=!0,S=f!=="string"?yg(r,f):pa(r,[],I);return H.makeTensor(S,g,f)}function Sg(r,l,u,d="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${u} must be a \`Tensor[]\` or \`TensorLike[]\``);const f=r;return f.map((g,I)=>P(g,`${l}[${I}]`,u),d)}const GO="__op";function V(r){const l=Object.keys(r);if(l.length!==1)throw new Error(`Please provide an object with a single key (operation name) mapping to a function. Got an object with ${l.length} keys.`);let u=l[0];const d=r[u];u.endsWith("_")&&(u=u.substring(0,u.length-1)),u=u+GO;const f=(...g)=>{H.startScope(u);try{const I=d(...g);return wf(I)&&console.error("Cannot return a Promise inside of tidy."),H.endScope(I),I}catch(I){throw H.endScope(null),I}};return Object.defineProperty(f,"name",{value:u,configurable:!0}),f}function j9(r,l){const u=P(r,"real","complex"),d=P(l,"imag","complex");tn(u.shape,d.shape,`real and imag shapes, ${u.shape} and ${d.shape}, must match in call to tf.complex().`);const f=I=>I.complex(u,d),g={real:u,imag:d};return H.runKernelFunc(f,g,null,fR)}const Hi=V({complex_:j9});function qi(r,l,u,d){if(d==null&&(d=zu(r)),d==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!ks(r)&&!Array.isArray(r)&&typeof r!="number"&&typeof r!="boolean"&&typeof r!="string")throw new Error("values passed to tensor(values) must be a number/boolean/string or an array of numbers/booleans/strings, or a TypedArray");if(l!=null){bf(l);const f=Zt(l),g=Zt(u);J(f===g,()=>`Based on the provided shape, [${l}], the tensor should have ${f} values but has ${g}`);for(let I=0;I`Error creating a new Tensor. Inferred shape (${u}) does not match the provided shape (${l}). `)}}return!ks(r)&&!Array.isArray(r)&&(r=[r]),l=l||u,r=d!=="string"?yg(r,d):pa(r,[],!0),H.makeTensor(r,l,d)}function PI(r,l,u){const d=vr(r,u);return qi(r,l,d,u)}function ju(r,l="float32",u){return l=l||"float32",bf(r),new kO(r,l,u)}function K9(r,l){const u=P(r,"x","cast");if(!Y2(l))throw new Error(`Failed to cast to unknown dtype ${l}`);if(l==="string"&&u.dtype!=="string"||l!=="string"&&u.dtype==="string")throw new Error("Only strings can be casted to strings");const d={x:u},f={dtype:l};return H.runKernelFunc(g=>g.cast(u,l),d,null,qc,f)}const Ie=V({cast_:K9});function X9(r){const l=P(r,"x","clone",null),u=()=>H.makeTensorFromDataId(l.dataId,l.shape,l.dtype),d={x:l};return H.runKernelFunc(u,d,null,Wf)}const bi=V({clone_:X9});function zI(r,l=!1){console.log(r.toString(l))}MI();const J9={buffer:ju,cast:Ie,clone:bi,print:zI};_O(J9);function Z9(r,l){const u=P(r,"x","reshape",null),d={x:u},f={shape:l},g=(I,S)=>(l=P2(l,u.size),J(u.size===Zt(l),()=>"new shape and old shape must have the same number of elements."),S([u]),I.reshape(u,l));return H.runKernelFunc(g,d,null,jf,f)}const oe=V({reshape_:Z9});function Q9(r,l,u=!1,d=!1){let f=P(r,"a","matMul"),g=P(l,"b","matMul");[f,g]=Lt(f,g);const I=(N,E)=>{E([f,g]);const _=u?f.shape[f.rank-2]:f.shape[f.rank-1],A=d?g.shape[g.rank-1]:g.shape[g.rank-2],U=u?f.shape[f.rank-1]:f.shape[f.rank-2],ne=d?g.shape[g.rank-2]:g.shape[g.rank-1],Q=f.shape.slice(0,-2),M=g.shape.slice(0,-2),fe=Zt(Q),ie=Zt(M),we=fe===ie||fe===1||ie===1;J(f.rank>=2&&g.rank>=2&&we,()=>`Error in matMul: the input batch dimensions must either be the same or at least one input batch dimension must be 1. Got input batch dimensions of (${Q}) and (${M}).`),J(_===A,()=>`Error in matMul: inner shapes (${_}) and (${A}) of Tensors with shapes ${f.shape} and ${g.shape} and transposeA=${u} and transposeB=${d} must match.`);const Ae=fe>ie?Q:M,Me=Ae.concat([U,ne]),et=u?oe(f,[fe,_,U]):oe(f,[fe,U,_]),ct=d?oe(g,[ie,ne,A]):oe(g,[ie,A,ne]),$t=N.batchMatMul(et,ct,u,d);return oe($t,Me)},S={a:f,b:g},x={transposeA:u,transposeB:d};return H.runKernelFunc(I,S,null,Sf,x)}const bn=V({matMul_:Q9});function eZ(r,l){const u=P(r,"x","transpose");if(l==null&&(l=u.shape.map((g,I)=>I).reverse()),J(u.rank===l.length,()=>`Error in transpose: rank of input ${u.rank} must match length of perm ${l}.`),l.forEach(g=>{J(g>=0&&g`All entries in 'perm' must be between 0 and ${u.rank-1} but got ${l}`)}),u.rank<=1)return u.clone();const d={x:u},f={perm:l};return H.runKernelFunc(g=>g.transpose(u,l),d,null,ug,f)}const Tn=V({transpose_:eZ});function VI(r,l,u){if(Gc(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const d=vr(r,u);if(d.length!==3&&d.length!==1)throw new Error("tensor3d() requires values to be number[][][] or flat/TypedArray");if(d.length===1&&l==null)throw new Error("tensor3d() requires shape to be provided when `values` are a flat array");return qi(r,l,d,u)}const GI={};$c(GI,{fromPixels:()=>sZ,toPixels:()=>nZ});let Kc;function tZ(r,l=3){if(l>4)throw new Error("Cannot construct Tensor with more than 4 channels from pixels.");if(r==null)throw new Error("pixels passed to tf.browser.fromPixels() can not be null");let u=!1,d=!1,f=!1,g=!1,I=!1;if(r.data instanceof Uint8Array)u=!0;else if(typeof ImageData!="undefined"&&r instanceof ImageData)d=!0;else if(typeof HTMLVideoElement!="undefined"&&r instanceof HTMLVideoElement)f=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)g=!0;else if(r.getContext!=null)I=!0;else throw new Error(`pixels passed to tf.browser.fromPixels() must be either an HTMLVideoElement, HTMLImageElement, HTMLCanvasElement, ImageData in browser, or OffscreenCanvas, ImageData in webworker or {data: Uint32Array, width: number, height: number}, but was ${r.constructor.name}`);if(f){const U=2;if(f&&r.readyState element.")}const S=gg(RI,H.backendName);if(S!=null){const U={pixels:r},ne={numChannels:l};return H.runKernel(RI,U,ne)}const[x,N]=f?[r.videoWidth,r.videoHeight]:[r.width,r.height];let E;I?E=r.getContext("2d").getImageData(0,0,x,N).data:d||u?E=r.data:(g||f)&&(Kc==null&&(Kc=document.createElement("canvas").getContext("2d")),Kc.canvas.width=x,Kc.canvas.height=N,Kc.drawImage(r,0,0,x,N),E=Kc.getImageData(0,0,x,N).data);let _;if(l===4)_=new Int32Array(E);else{const U=x*N;_=new Int32Array(U*l);for(let ne=0;ne4||g===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${g}`);if(u.dtype!=="float32"&&u.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${u.dtype}. Please use float32 or int32 tensors.`);const I=await u.data(),S=u.dtype==="float32"?255:1,x=new Uint8ClampedArray(f*d*4);for(let N=0;N1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${U}.`)}else if(u.dtype==="int32"&&(U<0||U>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${U}.`);g===1?(E[0]=U*S,E[1]=U*S,E[2]=U*S):E[A]=U*S}const _=N*4;x[_+0]=Math.round(E[0]),x[_+1]=Math.round(E[1]),x[_+2]=Math.round(E[2]),x[_+3]=Math.round(E[3])}if(l!=null){l.width=f,l.height=d;const N=l.getContext("2d"),E=new ImageData(x,f,d);N.putImageData(E,0,0)}return u!==r&&u.dispose(),x}const sZ=V({fromPixels_:tZ});function YO(r,l,u){const d=r.shape.length;J(d===l.length,()=>`Error in slice${d}D: Length of begin ${l} must match the rank of the array (${d}).`),J(d===u.length,()=>`Error in slice${d}D: Length of size ${u} must match the rank of the array (${d}).`);for(let f=0;f`Error in slice${d}D: begin[${f}] + size[${f}] (${l[f]+u[f]}) would overflow input.shape[${f}] (${r.shape[f]})`)}function Ig(r,l,u){let d;const f=r.shape.length;typeof l=="number"?d=[l,...new Array(f-1).fill(0)]:l.length{J(I!==-1,()=>"slice() does not support negative begin indexing.")});let g;return u==null?g=new Array(f).fill(-1):typeof u=="number"?g=[u,...new Array(f-1).fill(-1)]:u.lengthI>=0?I:(J(I===-1,()=>`Negative size values should be exactly -1 but got ${I} for the slice() size at index ${S}.`),r.shape[S]-d[S])),[d,g]}function iZ(r){Fs().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}WO(iZ);function HO(r,l){return H.tidy(r,l)}function qO(r){const l=Lg(r);l.forEach(u=>u.dispose())}function rZ(r,l){let u=P(r,"a","add"),d=P(l,"b","add");[u,d]=Lt(u,d);const f=(I,S)=>{const x=I.add(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,Hc)}const vt=V({add_:rZ});function oZ(r,l){let u=P(r,"a","floorDiv"),d=P(l,"b","floorDiv");[u,d]=Lt(u,d);const f=(I,S)=>{const x=I.floorDiv(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,kf)}const YI=V({floorDiv_:oZ});function aZ(r,l){let u=P(r,"a","div"),d=P(l,"b","div");if([u,d]=Lt(u,d),u.dtype==="int32"&&d.dtype==="int32")return YI(u,d);const f=(S,x)=>{const N=S.realDivide(u,d);return x([u,d]),N},g={a:u,b:d},I={};return H.runKernelFunc(f,g,null,Of,I)}const Pe=V({div_:aZ});function cZ(r,l){let u=P(r,"a","mul"),d=P(l,"b","mul");[u,d]=Lt(u,d);const f=(I,S)=>{const x=I.multiply(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,Vf)}const le=V({mul_:cZ});function lZ(r){const l=P(r,"x","abs"),u={x:l};return H.runKernelFunc((d,f)=>(f([l]),l.dtype==="complex64"?d.complexAbs(l):d.abs(l)),u,null,Lf)}const Yn=V({abs_:lZ});function hZ(r,l){for(let u=0;ur[g]);return[u,f]}function cs(r,l){const u=l.map(d=>1);return uZ(r,u,l)}function ji(r,l){if(hZ(r,l))return null;const u=[];for(let d=0;du.push(d)),u}function Xc(r){return r.map((l,u)=>[u,l]).sort((l,u)=>l[1]-u[1]).map(l=>l[0])}function go(r,l){const u=[];for(let d=l-r;d`The output # of rows (${S}) must be an integer. Change the stride and/or zero pad parameters`);const x=fa((I-l+2*d)/u+1,f);return J(nn(x),()=>`The output # of columns (${x}) must be an integer. Change the stride and/or zero pad parameters`),[S,x]}function fZ(r,l,u,d,f,g){f==null&&(f=KO(r,l,d));const I=r[0],S=r[1],x=r[2],N=fa((I-l+2*f)/d+1,g);J(nn(N),()=>`The output # of depths (${N}) must be an integer. Change the stride and/or zero pad parameters`);const E=fa((S-l+2*f)/d+1,g);J(nn(E),()=>`The output # of rows (${E}) must be an integer. Change the stride and/or zero pad parameters`);const _=fa((x-l+2*f)/d+1,g);return J(nn(_),()=>`The output # of columns (${_}) must be an integer. Change the stride and/or zero pad parameters`),[N,E,_,u]}function KO(r,l,u,d=1){const f=Jc(l,d);return Math.floor((r[0]*(u-1)-u+f)/2)}function xg(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function HI(r){return typeof r=="number"?[r,r,r]:r}function Jc(r,l){return l<=1?r:r+(r-1)*(l-1)}function dZ(r,l,u,d,f,g,I,S,x){let N,E,_;if(typeof r=="number"){const A=r===0?"VALID":"NUMBER";N={top:r,bottom:r,left:r,right:r,type:A};const U=mZ([l,u],g,d,r,S);E=U[0],_=U[1]}else if(r==="same"){E=Math.ceil(l/d),_=Math.ceil(u/f);const A=Math.max(0,(E-1)*d+g-l),U=Math.max(0,(_-1)*f+I-u),ne=Math.floor(A/2),Q=A-ne,M=Math.floor(U/2),fe=U-M;N={top:ne,bottom:Q,left:M,right:fe,type:"SAME"}}else if(r==="valid")N={top:0,bottom:0,left:0,right:0,type:"VALID"},E=Math.ceil((l-g+1)/d),_=Math.ceil((u-I+1)/f);else if(typeof r=="object"){const A=x==="channelsLast"?r[1][0]:r[2][0],U=x==="channelsLast"?r[1][1]:r[2][1],ne=x==="channelsLast"?r[2][0]:r[3][0],Q=x==="channelsLast"?r[2][1]:r[3][1],M=A===0&&U===0&&ne===0&&Q===0?"VALID":"EXPLICIT";N={top:A,bottom:U,left:ne,right:Q,type:M},E=fa((l-g+A+U)/d+1,S),_=fa((u-I+ne+Q)/f+1,S)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:N,outHeight:E,outWidth:_}}function pZ(r,l,u,d,f,g,I,S,x,N,E){let _,A,U,ne;if(typeof r=="number"){const Q=r===0?"VALID":"NUMBER";_={top:r,bottom:r,left:r,right:r,front:r,back:r,type:Q};const M=fZ([l,u,d,1],S,1,f,r,E);A=M[0],U=M[1],ne=M[2]}else if(r==="same"){A=Math.ceil(l/f),U=Math.ceil(u/g),ne=Math.ceil(d/I);const Q=(A-1)*f+S-l,M=(U-1)*g+x-u,fe=(ne-1)*I+N-d,ie=Math.floor(Q/2),we=Q-ie,Ae=Math.floor(M/2),Me=M-Ae,et=Math.floor(fe/2),ct=fe-et;_={top:Ae,bottom:Me,left:et,right:ct,front:ie,back:we,type:"SAME"}}else if(r==="valid")_={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},A=Math.ceil((l-S+1)/f),U=Math.ceil((u-x+1)/g),ne=Math.ceil((d-N+1)/I);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:_,outDepth:A,outHeight:U,outWidth:ne}}function fa(r,l){if(!l)return r;switch(l){case"round":return Math.round(r);case"ceil":return Math.ceil(r);case"floor":return Math.floor(r);default:throw new Error(`Unknown roundingMode ${l}`)}}function yo(r){const[l,u,d]=xg(r);return l===1&&u===1&&d===1}function bo(r,l){return yo(r)||yo(l)}function Zc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function XO(r,l){const u=r[0].length;r.forEach((f,g)=>{J(f.length===u,()=>`Error in concat${u}D: rank of tensors[${g}] must be the same as the rank of the rest (${u})`)}),J(l>=0&&l`Error in concat${u}D: axis must be between 0 and ${u-1}.`);const d=r[0];r.forEach((f,g)=>{for(let I=0;I`Error in concat${u}D: Shape of tensors[${g}] (${f}) does not match the shape of the rest (${d}) along the non-concatenated axis ${g}.`)})}function JO(r,l){const u=r[0].slice();for(let d=1;d=1,()=>"Pass at least one tensor to concat");let u=Sg(r,"tensors","concat");u[0].dtype==="complex64"&&u.forEach(I=>{if(I.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${I.dtype}. `)});const d=(I,S)=>{const x=ft(l,u[0].shape)[0],N=JO(u.map(A=>A.shape),x);if(Zt(N)===0)return PI([],N);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const E=u.map(A=>A.shape);XO(E,x);const _=I.concat(u,x);return S(u),_},f=u,g={axis:l};return H.runKernelFunc(d,f,null,Tf,g)}const An=V({concat_:gZ});function yZ(r){const l=P(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sigmoid(l);return f([g]),g},u,null,sg)}const qI=V({sigmoid_:yZ});function bZ(r,l,u){const d=P(r,"x","slice");if(d.rank===0)throw new Error("Slicing scalar is not possible");const f=(S,x)=>{const[N,E]=Ig(d,l,u);return YO(d,N,E),x([d]),S.slice(d,N,E)},g={x:d},I={begin:l,size:u};return H.runKernelFunc(f,g,null,eg,I)}const Tt=V({slice_:bZ});function wZ(r,l,u){const d=P(r,"x","batchToSpaceND"),f=l.reduce((x,N)=>x*N);J(d.rank>=1+l.length,()=>`input rank is ${d.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(d.shape[0]%f===0,()=>`input tensor batch is ${d.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${f}`);const g=x=>x.batchToSpaceND(d,l,u),I={x:d},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,If,S)}const jI=V({batchToSpaceND_:wZ});function LZ(r,l){let u=P(r,"broadcastTo","x");const d=u.shape;if(l.some(E=>!(E>0)||E%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const E=u.shape.slice();for(;E.length=0;E--)if(f[E]===l[E])g[E]=1;else if(u.shape[E]!==1)throw new Error(`broadcastTo(): [${d}] cannot be broadcast to [${l}].`);const I=g.map((E,_)=>E>1?_:-1).filter(E=>E>=0);if(I.length===0)return bi(u);const S=E=>E.tile(u,g),x={x:u},N={shape:l,inputShape:f};return H.runKernelFunc(S,x,null,xf,N)}const vg=V({broadcastTo_:LZ});function SZ(r,l,u,d,f="NHWC",g=[1,1],I){const S=P(r,"x","conv2d"),x=P(l,"filter","conv2d");let N=S,E=!1;S.rank===3&&(E=!0,N=oe(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(N.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${N.rank}.`),J(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&J(nn(d),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${d}.`);const _=f==="NHWC"?N.shape[3]:N.shape[1];J(_===x.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${x.shape[2]}.`),J(bo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(M,fe)=>{const ie=Zc(f),we=wi(N.shape,x.shape,u,g,d,I,!1,ie),Ae=M.conv2d(N,x,we);return fe([N,x]),Ae},U={x:N,filter:x},ne={strides:u,pad:d,dataFormat:f,dilations:g,dimRoundingMode:I},Q=H.runKernelFunc(A,U,null,Af,ne);return E?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3]]):Q}const KI=V({conv2d_:SZ});function IZ(r,l,u,d,f,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,N=!1;l.rank===3&&(N=!0,x=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const E=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?x.shape[3]:x.shape[1];J(E===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${E}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(f),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const A=(M,fe)=>{const ie=1,we=Zc(g),Ae=wi(S,u.shape,d,ie,f,I,!1,we),Me=M.conv2dDerInput(x,u,Ae);return fe([x,u]),Me},U={dy:x,filter:u},ne={strides:d,pad:f,dataFormat:g,dimRoundingMode:I,inputShape:S},Q=H.runKernelFunc(A,U,null,vf,ne);return N?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3]]):Q}const ZO=V({conv2DBackpropInput_:IZ});function xZ(r,l,u,d,f){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=oe(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const x=g[4],N=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),J(N===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${N}) must match output depth for filter ${u.shape[4]}.`);const E=ne=>{const Q=1,M=Ku(g,u.shape,d,Q,f);return ne.conv3dDerInput(I,u,M)},_={dy:I,filter:u},A={pad:f,strides:d,inputShape:g},U=H.runKernelFunc(E,_,null,wR,A);return S?oe(U,[U.shape[1],U.shape[2],U.shape[3],U.shape[4]]):U}const QO=V({conv3DBackpropInput_:xZ});function TZ(r){const l=P(r,"x","cos"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.cos(l);return f([l]),g},u,null,Nf)}const Xu=V({cos_:TZ});function AZ(r){const l=P(r,"x","cosh"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.cosh(l);return f([l]),g},u,null,Cf)}const XI=V({cosh_:AZ});function vZ(r,l=0,u=!1,d=!1){const f=P(r,"x","cumsum"),g=(x,N)=>{const E=ji([l],f.rank);let _=f;E!=null&&(_=Tn(f,E));const A=go(1,f.rank)[0];let U=x.cumsum(_,A,u,d);if(N([f]),E!=null){const ne=Xc(E);U=Tn(U,ne)}return U},I={x:f},S={axis:l,exclusive:u,reverse:d};return H.runKernelFunc(g,I,null,Rf,S)}const JI=V({cumsum_:vZ});function Ot(r,l){const u=[];for(let d=0;d1)&&u.unshift(g)}return u}function at(r,l){const u=[],d=Math.max(r.length,l.length);for(let f=0;fI.equal(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,OR)}const ZI=V({equal_:NZ});function CZ(r,l,u){const d=P(l,"a","where"),f=P(u,"b","where"),g=P(r,"condition","where","bool"),I=at(d.shape,f.shape),S=vg(d,I),x=vg(f,I);g.rank===1&&J(g.shape[0]===d.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,x.shape,"Error in where: ");const N=(_,A)=>{const U=_.select(g,S,x);return A([g]),U},E={condition:g,t:S,e:x};return H.runKernelFunc(N,E,null,Qf)}const Hn=V({where_:CZ});function RZ(r){const l=P(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(d=>d.zerosLike(l),u,null,mg)}const Xe=V({zerosLike_:RZ});function OZ(r){const l=P(r,"x","exp"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.exp(l);return f([g]),g},u,null,Ef)}const qn=V({exp_:OZ});function EZ(r,l=0){const u=null,d=P(r,"x","expandDims",u);J(l<=d.rank,()=>"Axis must be <= rank of the tensor");const f=d.shape.slice();return l<0&&(J(-(d.rank+1)<=l,()=>`Axis must be in the interval [${-(d.rank+1)}, ${d.rank}]`),l=d.rank+l+1),f.splice(l,0,1),oe(d,f)}const _s=V({expandDims_:EZ});function DZ(r,l){const u=null,d=P(r,"x","tile",u);J(d.rank===l.length,()=>`Error in transpose: rank of input ${d.rank} must match length of reps ${l}.`);const f=(x,N)=>{const E=x.tile(d,l);return N([d]),E},g=[d],I={x:d},S={reps:l};return H.runKernelFunc(f,I,null,hg,S,g)}const ga=V({tile_:DZ});function kZ(r,l,u,d="float32"){l==null&&(l=r);const f=ju([r,l],d),g=r<=l?r:l;for(let S=0;Sf.fill(r,l,u),{},null,kR,d)}function FZ(r){const l=P(r,"x","floor"),u={x:l};return H.runKernelFunc(d=>d.floor(l),u,null,Df)}const tx=V({floor_:FZ});function e1(r,l,u){const d=r.shape[u],f=[];let g=1,I=1;for(let S=0;S{const E=ft(u,d.shape)[0],_=e1(d,f,E),A=x.gather(d,oe(f,[f.size]),E);return N([d,f]),oe(A,_.outputShape)};return H.runKernelFunc(S,g,null,Ff,I)}const nx=V({gather_:_Z});function WZ(r,l){let u=P(r,"a","greater"),d=P(l,"b","greater");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.greater(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,WR)}const Li=V({greater_:WZ});function $Z(r,l){let u=P(r,"a","greaterEqual"),d=P(l,"b","greaterEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(I,S)=>{const x=I.greaterEqual(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,_f)}const Nr=V({greaterEqual_:$Z});function UZ(r){const l=P(r,"input","imag"),u=f=>f.imag(l),d={input:l};return H.runKernelFunc(u,d,null,UR)}const Ju=V({imag_:UZ});function BZ(r,l){let u=P(r,"a","maximum"),d=P(l,"b","maximum");[u,d]=Lt(u,d),u.dtype==="bool"&&(u=Ie(u,"int32"),d=Ie(d,"int32")),at(u.shape,d.shape);const f=(I,S)=>{const x=I.maximum(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,Mf)}const sx=V({maximum_:BZ});function Fe(r,l){if((ks(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&ks(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],d=[];return qi(r,u,d,l)}function MZ(r,l){let u=P(r,"a","less"),d=P(l,"b","less");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.less(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,zR)}const ix=V({less_:MZ});function PZ(r,l){let u=P(r,"a","lessEqual"),d=P(l,"b","lessEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(I,S)=>{const x=I.lessEqual(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,VR)}const Cr=V({lessEqual_:PZ});function zZ(r){const l=P(r,"x","log"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.log(l);return f([l]),g},u,null,$f)}const wo=V({log_:zZ});function VZ(r){const l=P(r,"x","log1p"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.log1p(l);return f([l]),g},u,null,Uf)}const rx=V({log1p_:VZ});function Ng(r){return H.customGrad(r)}function GZ(r){const l=P(r,"x","neg"),u={x:l};return H.runKernelFunc(d=>d.neg(l),u,null,Gf)}const It=V({neg_:GZ});function YZ(r,l=null,u=!1){const d=P(r,"x","max"),f=(S,x)=>{const N=ft(l,d.shape);let E=N;const _=ji(E,d.rank);let A=d;_!=null&&(A=Tn(d,_),E=go(E.length,A.rank));const U=S.max(A,E);_!=null&&A.dispose();let ne=U;if(u){const Q=cs(ne.shape,ft(l,d.shape));ne=oe(ne,Q),U.dispose()}return x([d,ne]),ne},g={x:d},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(f,g,null,Bf,I)}const ya=V({max_:YZ});function HZ(r,l){let u=P(r,"a","sub"),d=P(l,"b","sub");[u,d]=Lt(u,d);const f=(I,S)=>{const x=I.subtract(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,lg)}const Be=V({sub_:HZ});function qZ(r,l=null,u=!1){let d=P(r,"x","sum");d.dtype==="bool"&&(d=Ie(d,"int32"));const f=(S,x)=>{x([d]);const N=ft(l,d.shape),E=ji(N,d.rank);let _=N,A=d;E!=null&&(A=Tn(d,E),_=go(_.length,d.rank));let U=S.sum(A,_);if(u){const ne=cs(U.shape,N);U=oe(U,ne)}return U},g={x:d},I={axis:l,keepDims:u};return H.runKernelFunc(f,g,null,rg,I)}const _e=V({sum_:qZ});function jZ(r,l=null,u=!1){const d=P(r,"x","logSumExp"),f=ft(l,d.shape),g=ya(d,f,!0),I=Be(d,g),S=qn(I),x=_e(S,f),N=wo(x),E=vt(oe(g,N.shape),N);if(u){const _=cs(E.shape,f);return oe(E,_)}return E}const ox=V({logSumExp_:jZ});function KZ(r,l){const u=P(r,"a","logicalAnd","bool"),d=P(l,"b","logicalAnd","bool");at(u.shape,d.shape);const f={a:u,b:d};return H.runKernelFunc(g=>g.logicalAnd(u,d),f,null,GR)}const ba=V({logicalAnd_:KZ});function XZ(r){const l=P(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(d=>d.logicalNot(l),u,null,YR)}const ax=V({logicalNot_:XZ});function Ws(r,l="float32"){if(l==="complex64"){const d=Ws(r,"float32"),f=Ws(r,"float32");return Hi(d,f)}const u=ma(Zt(r),l);return H.makeTensor(u,r,l)}function Ki(r,l="float32"){if(l==="complex64"){const d=Ki(r,"float32"),f=Ws(r,"float32");return Hi(d,f)}const u=yf(Zt(r),l);return H.makeTensor(u,r,l)}function JZ(r,l=null,u=!1){const d=P(r,"x","mean"),f=ft(l,d.shape),g=jO(d.shape,f),I=g[1],S=Zt(I),x={x:d},N={axis:l,keepDims:u},E=()=>{const A=Fe(S),U=A.dtype===d.dtype?d:Ie(d,A.dtype),ne=Pe(U,A);return _e(ne,l,u)},_=Ng(A=>{const U=H.runKernelFunc(E,x,null,QR,N),ne=Q=>{const M=A.shape.slice();f.forEach(we=>{M[we]=1});const fe=oe(Q,M),ie=Pe(le(fe,Ki(A.shape,"float32")),S);return ie};return{value:U,gradFunc:ne}});return _(d)}const cx=V({mean_:JZ});function ZZ(r,l=null,u=!1){const d=P(r,"x","min"),f=(S,x)=>{const N=ft(l,d.shape);let E=N;const _=ji(E,d.rank);let A=d;_!=null&&(A=Tn(d,_),E=go(E.length,d.rank));const U=S.min(A,E);_!=null&&A.dispose();let ne=U;if(u){const Q=cs(ne.shape,N);ne=oe(U,Q),U.dispose()}return x([d,ne]),ne},g={x:d},I={axis:l,keepDims:u};return H.runKernelFunc(f,g,null,Pf,I)}const Cg=V({min_:ZZ});function QZ(r,l){let u=P(r,"a","minimum"),d=P(l,"b","minimum");[u,d]=Lt(u,d),u.dtype==="bool"&&(u=Ie(u,"int32"),d=Ie(d,"int32")),at(u.shape,d.shape);const f=(I,S)=>{const x=I.minimum(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,zf)}const lx=V({minimum_:QZ});function eQ(r){const l=P(r,"x","square"),u={},d=[l],f=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,d,f)}const gt=V({square_:eQ});function tQ(r,l){let u=P(r,"a","notEqual"),d=P(l,"b","notEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.notEqual(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,nO)}const hx=V({notEqual_:tQ});function nQ(r){const l=P(r,"input","real"),u=f=>f.real(l),d={input:l};return H.runKernelFunc(u,d,null,hO)}const Qc=V({real_:nQ});function sQ(r,l,u=0){const d=P(r,"x","pad");if(d.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const f=(S,x)=>(x([d]),S.pad(d,l,u)),g={paddings:l,constantValue:u},I={x:d};return H.runKernelFunc(f,I,null,Yf,g)}const ux=V({pad_:sQ});function iQ(r,l,u){const d=P(r,"x","spaceToBatchND");J(d.rank>=1+l.length,()=>`input rank ${d.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(d.shape.reduce((S,x,N)=>N>0&&N<=l.length?S&&(x+u[N-1][0]+u[N-1][1])%l[N-1]===0:S,!0),()=>`input spatial dimensions ${d.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const f=S=>S.spaceToBatchND(d,l,u),g={x:d},I={blockShape:l,paddings:u};return H.runKernelFunc(f,g,null,og,I)}const dx=V({spaceToBatchND_:iQ});function rQ(r,l){let u=P(r,"base","pow"),d=P(l,"exp","pow");[u,d]=Lt(u,d);const f={a:u,b:d},g=(I,S)=>{const x=I.pow(u,d);return S([u,d,x]),x};return H.runKernelFunc(g,f,null,Hf)}const wa=V({pow_:rQ});function Lo(r,l){Gc(r);const u=vr(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const d=null;return qi(r,d,u,l)}function Rg(r,l,u=1,d="float32"){if(u===0)throw new Error("Cannot have a step of zero");const f=()=>{const I=r===l,S=r1;if(I||S||x)return Ws([0],d);const N=Math.abs(Math.ceil((l-r)/u)),E=ma(N,d);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):f.relu(l)),d={x:l};return H.runKernelFunc(u,d,null,qf)}const Zu=V({relu_:oQ});function aQ(r,l){const u=P(r,"x","reverse"),d=I=>{const S=ft(l,u.shape);if(u.rank===0)return bi(u);const x=I.reverse(u,S);return oe(x,u.shape)},f={x:u},g={dims:l};return H.runKernelFunc(d,f,null,Jf,g)}const el=V({reverse_:aQ});function cQ(r){const l=P(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.rsqrt(l);return f([l]),g},u,null,Zf)}const px=V({rsqrt_:cQ});function lQ(r){const l=P(r,"x","sin"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sin(l);return f([l]),g},u,null,tg)}const mx=V({sin_:lQ});function hQ(r){const l=P(r,"x","sinh"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sinh(l);return f([l]),g},u,null,ng)}const fx=V({sinh_:hQ});function uQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=r.as2D(f,d),I=u.fft(g);return I.reshape(r.shape)},l,null,DR)}const Qu=V({fft_:uQ});function dQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=oe(r,[f,d]),I=u.ifft(g);return oe(I,r.shape)},l,null,$R)}const tl=V({ifft_:dQ});function pQ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let d;if(l<=2){const f=oe(r,[u,l]);d=tl(f)}else{const f=[u,2*(l-1)],g=oe(Qc(r),[u,l]),I=oe(Ju(r),[u,l]),S=el(Tt(g,[0,1],[u,l-2]),1),x=le(el(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),N=An([g,S],1),E=An([I,x],1),_=oe(Hi(N,E),[f[0],f[1]]);d=tl(_)}if(d=Qc(d),r.rank===3&&r.shape[0]!==0){const f=d,g=r.shape[0];d=oe(d,[g,d.shape[0]/g,d.shape[1]]),f.dispose()}return d}const gx=V({irfft_:pQ});function t1(r,l,u=0){let d=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),d=new Array(l).fill(r.shape[u]/l);else{const f=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(f<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),d=l}return d}function mQ(r,l,u=0){const d=P(r,"x","split"),f=(S,x)=>{const N=ft(u,d.shape)[0],E=t1(d,l,N);return S.split(d,E,N)},g={x:d},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(f,g,null,ag,I)}const So=V({split_:mQ});function fQ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const d=r.size/u;let f;if(l!=null&&l0),Q=r.shape.map(M=>M);Q[r.shape.length-1]=l,f=Tt(r,ne,Q),u=l}else if(l!=null&&l>u){const ne=r.shape.map(Q=>Q);ne[r.shape.length-1]=l-u,f=An([r,Ws(ne)],r.shape.length-1),u=l}else f=r;const g=Xe(f),I=oe(Hi(f,g),[d,u]),S=Qu(I),x=Math.floor(u/2)+1,N=Qc(S),E=Ju(S),_=So(N,[x,u-x],N.shape.length-1),A=So(E,[x,u-x],E.shape.length-1),U=f.shape.slice();return U[f.shape.length-1]=x,oe(Hi(_[0],A[0]),U)}const ed=V({rfft_:fQ});function gQ(r){const l=P(r,"x","sqrt"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sqrt(l);return f([l]),g},u,null,ig)}const bs=V({sqrt_:gQ});function yQ(r,l){let u=P(r,"a","squaredDifference"),d=P(l,"b","squaredDifference");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(S,x)=>{const N=S.squaredDifference(u,d);return x([u,d]),N},g={a:u,b:d},I={};return H.runKernelFunc(f,g,null,cg,I)}const yx=V({squaredDifference_:yQ});function bQ(r,l){const u=P(r,"x","squeeze");return oe(u,z2(u.shape,l).newShape)}const bx=V({squeeze_:bQ});function wQ(r,l=0){const u=Sg(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return _s(u[0],l);const d=u[0].rank,f=u[0].shape,g=u[0].dtype;J(l<=d,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(f,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>_s(S,l));return An(I,l)}const Ks=V({stack_:wQ});function LQ(r,l=0){const u=P(r,"x","step"),d={x:u},f={alpha:l};return H.runKernelFunc(g=>g.step(u,l),d,null,fg,f)}const La=V({step_:LQ});function Sa(r,l,u){if(Gc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const d=vr(r,u);if(d.length!==2&&d.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(d.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return qi(r,l,d,u)}function SQ(r,l,u){const d=P(r,"x","unsortedSegmentSum"),f=P(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:d,segmentIds:f},I={numSegments:u},S=(x,N)=>{const E=x.unsortedSegmentSum(d,f,u);return N([f]),E};return H.runKernelFunc(S,g,null,pg,I)}const wx=V({unsortedSegmentSum_:SQ});function IQ(r,l=0){const u=P(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const d={value:u},f={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,d,null,dg,f)}const td=V({unstack_:IQ});function xQ(r,l="euclidean",u=null,d=!1){r=P(r,"x","norm");const f=n1(r,l,u);let g=f.shape;if(d){const I=ft(u,r.shape);g=cs(f.shape,I)}return oe(f,g)}function n1(r,l,u=null){if(r.rank===0)return Yn(r);if(r.rank!==1&&u===null)return n1(oe(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(Yn(r),u);if(l===Infinity)return ya(Yn(r),u);if(l===-Infinity)return Cg(Yn(r),u);if(l==="euclidean"||l===2)return bs(_e(wa(Yn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ya(_e(Yn(r),u[0]),u[1]-1);if(l===Infinity)return ya(_e(Yn(r),u[1]),u[0]);if(l===-Infinity)return Cg(_e(Yn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return bs(_e(gt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const Og=V({norm_:xQ});function s1(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Eg(r,l,u){const d=1-r%2,f=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const N=g==="NHWC"?S.shape[3]:S.shape[1],E=g==="NHWC"?x.shape[3]:x.shape[1];J(N===u[2],()=>`Error in conv2dDerFilter: depth of input ${N}) must match input depth in filter (${u[2]}.`),J(E===u[3],()=>`Error in conv2dDerFilter: depth of dy (${E}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(f),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const _=ne=>{const Q=1,M=Zc(g),fe=wi(S.shape,u,d,Q,f,I,!1,M);return ne.conv2dDerFilter(S,x,fe)},A={x:S,dy:x},U={strides:d,pad:f,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,gR,U)}const Dg=V({conv2DBackpropFilter_:TQ});function AQ(r,l,u,d,f,g=[1,1],I){let S=r;r.rank===3&&(S=oe(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let x=l;x.rank===3&&(x=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const N=A=>{const U=wi(r.shape,u,d,g,f,I,!0);return A.depthwiseConv2DDerFilter(S,x,U)},E={x:S,dy:x},_={strides:d,pad:f,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(N,E,null,IR,_)}const i1=V({depthwiseConv2dNativeBackpropFilter_:AQ});function vQ(r,l,u,d,f,g=[1,1],I){let S=l,x=!1;l.rank===3&&(x=!0,S=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const N=U=>{const ne=wi(r,u.shape,d,g,f,I,!0);return U.depthwiseConv2DDerInput(S,u,ne)},E={dy:S,filter:u},_={strides:d,pad:f,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(N,E,null,xR,_);return x?oe(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const r1=V({depthwiseConv2dNativeBackpropInput_:vQ});function NQ(r){return Eg(r,.54,.46)}const o1=V({hammingWindow_:NQ});function CQ(r){return Eg(r,.5,.5)}const kg=V({hannWindow_:CQ});function RQ(r,l,u,d=!1,f=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(d)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${N},4] but had shape ${S.shape}.`),J(x.rank===1&&x.shape[0]===N,()=>`Error in cropAndResize: boxInd must be have size [${N}] but had shape ${S.shape}.`),J(d.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${d.length}.`),J(d[0]>=1&&d[1]>=1,()=>`cropSize must be atleast [1,1], but was ${d}`),J(f==="bilinear"||f==="nearest",()=>`method must be bilinear or nearest, but was ${f}`);const E=ne=>ne.cropAndResize(I,S,x,d,f,g),_={image:I,boxes:S,boxInd:x},A={method:f,extrapolationValue:g,cropSize:d},U=H.runKernelFunc(E,_,null,LR,A);return U}const c1=V({cropAndResize_:EQ});function DQ(r){const l=P(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},d=H.runKernel(FR,u,{});return d}const l1=V({flipLeftRight_:DQ});function kQ(r,l,u=0,d=.5){const f=P(r,"image","rotateWithOffset","float32");J(f.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${f.rank}.`);const g={image:f},I={radians:l,fillValue:u,center:d},S=H.runKernel(xO,g,I);return S}const h1=V({rotateWithOffset_:kQ});function Xs(r,l,u,d,f,g){d==null&&(d=.5),f==null&&(f=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=d&&d<=1,()=>`iouThreshold must be in [0, 1], but was '${d}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:d,scoreThreshold:f,softNmsSigma:g}}function FQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY){const g=P(r,"boxes","nonMaxSuppression"),I=P(l,"scores","nonMaxSuppression"),S=Xs(g,I,u,d,f);u=S.maxOutputSize,d=S.iouThreshold,f=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:d,scoreThreshold:f};return H.runKernelFunc(N=>N.nonMaxSuppression(g,I,u,d,f),{boxes:g,scores:I},null,sO,x)}const u1=V({nonMaxSuppression_:FQ});function d1(r,l,u){const d=_Q(r,l,u),f=d<0?-(d+1):d;r.splice(f,0,l)}function _Q(r,l,u){return $Q(r,l,u||WQ)}function WQ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?d=g+1:(f=g,I=!S)}return I?d:-d-1}function p1(r,l,u,d,f){return Lx(r,l,u,d,f,0).selectedIndices}function m1(r,l,u,d,f,g){return Lx(r,l,u,d,f,0,!1,g,!0)}function f1(r,l,u,d,f,g){return Lx(r,l,u,d,f,g,!0)}function Lx(r,l,u,d,f,g,I=!1,S=!1,x=!1){const N=[];for(let M=0;Mf&&N.push({score:l[M],boxIndex:M,suppressBeginIndex:0});N.sort(g1);const E=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const M=N.pop(),{score:fe,boxIndex:ie,suppressBeginIndex:we}=M;if(fe=we;--Me){const et=UQ(r,ie,_[Me]);if(et>=d){Ae=!0;break}if(M.score=M.score*BQ(d,E,et),M.score<=f)break}M.suppressBeginIndex=_.length,Ae||(M.score===fe?(_.push(ie),A.push(M.score)):M.score>f&&d1(N,M,g1))}const U=_.length,ne=u-U;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const Q={selectedIndices:Lo(_,"int32")};return I&&(Q.selectedScores=Lo(A,"float32")),x&&(Q.validOutputs=Fe(U,"int32")),Q}function UQ(r,l,u){const d=r.subarray(l*4,l*4+4),f=r.subarray(u*4,u*4+4),g=Math.min(d[0],d[2]),I=Math.min(d[1],d[3]),S=Math.max(d[0],d[2]),x=Math.max(d[1],d[3]),N=Math.min(f[0],f[2]),E=Math.min(f[1],f[3]),_=Math.max(f[0],f[2]),A=Math.max(f[1],f[3]),U=(S-g)*(x-I),ne=(_-N)*(A-E);if(U<=0||ne<=0)return 0;const Q=Math.max(g,N),M=Math.max(I,E),fe=Math.min(S,_),ie=Math.min(x,A),we=Math.max(fe-Q,0)*Math.max(ie-M,0);return we/(U+ne-we)}function BQ(r,l,u){const d=Math.exp(l*u*u);return u<=r?d:0}function g1(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function MQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY){const g=P(r,"boxes","nonMaxSuppressionAsync"),I=P(l,"scores","nonMaxSuppressionAsync"),S=Xs(g,I,u,d,f);u=S.maxOutputSize,d=S.iouThreshold,f=S.scoreThreshold;const x=await Promise.all([g.data(),I.data()]),N=x[0],E=x[1],_=p1(N,E,u,d,f);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const y1=MQ;function PQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const I=P(r,"boxes","nonMaxSuppression"),S=P(l,"scores","nonMaxSuppression"),x=Xs(I,S,u,d,f,g);u=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const N={boxes:I,scores:S},E={maxOutputSize:u,iouThreshold:d,scoreThreshold:f,softNmsSigma:g},_=H.runKernel(rO,N,E);return{selectedIndices:_[0],selectedScores:_[1]}}const b1=V({nonMaxSuppressionWithScore_:PQ});async function zQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const I=P(r,"boxes","nonMaxSuppressionAsync"),S=P(l,"scores","nonMaxSuppressionAsync"),x=Xs(I,S,u,d,f,g);u=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const N=await Promise.all([I.data(),S.data()]),E=N[0],_=N[1],A=f1(E,_,u,d,f,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const w1=zQ;function VQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const I=P(r,"boxes","nonMaxSuppression"),S=P(l,"scores","nonMaxSuppression"),x=Xs(I,S,u,d,f,null),N=x.maxOutputSize,E=x.iouThreshold,_=x.scoreThreshold,A={boxes:I,scores:S},U={maxOutputSize:N,iouThreshold:E,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(iO,A,U);return{selectedIndices:ne[0],validOutputs:ne[1]}}const L1=V({nonMaxSuppressionPadded_:VQ});async function GQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const I=P(r,"boxes","nonMaxSuppressionAsync"),S=P(l,"scores","nonMaxSuppressionAsync"),x=Xs(I,S,u,d,f,null),N=x.maxOutputSize,E=x.iouThreshold,_=x.scoreThreshold,[A,U]=await Promise.all([I.data(),S.data()]),ne=m1(A,U,N,E,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const S1=GQ;function YQ(r,l,u=!1){const d=P(r,"images","resizeBilinear");J(d.rank===3||d.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${d.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let f=d,g=!1;d.rank===3&&(g=!0,f=oe(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[I,S]=l,x=(A,U)=>(U([f]),A.resizeBilinear(f,I,S,u)),N={images:f},E={alignCorners:u,size:l},_=H.runKernelFunc(x,N,null,Xf,E);return g?oe(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const I1=V({resizeBilinear_:YQ});function HQ(r,l,u=!1){const d=P(r,"images","resizeNearestNeighbor");J(d.rank===3||d.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${d.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(d.dtype==="float32"||d.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let f=d,g=!1;d.rank===3&&(g=!0,f=oe(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[I,S]=l,x={images:f},N={alignCorners:u,size:l},E=(A,U)=>(U([f]),A.resizeNearestNeighbor(f,I,S,u)),_=H.runKernelFunc(E,x,null,Kf,N);return g?oe(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const x1=V({resizeNearestNeighbor_:HQ});function qQ(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const d=P(r,"a","bandPart");J(d.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${d.rank}.`);const f=d.shape,[g,I]=d.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=oe(Rg(0,g,1,"int32"),[-1,1]),x=Rg(0,I,1,"int32"),N=Be(S,x),E=ba(Cr(N,Fe(+l,"int32")),Nr(N,Fe(-u,"int32"))),_=Ws([g,I],d.dtype);return oe(Ks(td(oe(d,[-1,g,I])).map(A=>Hn(E,A,_))),f)}const T1=V({bandPart_:qQ});function jQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const f=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${f})`)}else l=!0,r=So(r,r.shape[0],0).map(f=>bx(f,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],d=r;for(let f=0;f{let g=d[f];if(f>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return v1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,N)=>x*N),d=td(oe(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),f=[],g=[];d.forEach(x=>{const[N,E]=v1(x,l);f.push(N),g.push(E)});const I=oe(Ks(f,0),r.shape),S=oe(Ks(g,0),r.shape);return[I,S]}}function v1(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],d=r.shape[1];let f=QI(u),g=bi(r);const I=Sa([[1]],[1,1]);let S=bi(I);const x=u>=d?d:u;for(let N=0;N{const U=Tt(g,[N,N],[u-N,1]),ne=Og(U),Q=Tt(g,[N,N],[1,1]),M=Hn(Li(Q,0),Sa([[-1]]),Sa([[1]])),fe=Be(Q,le(M,ne)),ie=Pe(U,fe);ie.shape[0]===1?S=bi(I):S=An([I,Tt(ie,[1,0],[ie.shape[0]-1,ie.shape[1]])],0);const we=It(Pe(bn(M,fe),ne)),Ae=Tt(g,[N,0],[u-N,d]),Me=le(we,S),et=Tn(S);if(N===0)g=Be(Ae,bn(Me,bn(et,Ae)));else{const Vt=Be(Ae,bn(Me,bn(et,Ae)));g=An([Tt(g,[0,0],[N,d]),Vt],0)}const ct=Tn(Me),$t=Tt(f,[0,N],[u,f.shape[1]-N]);if(N===0)f=Be($t,bn(bn($t,S),ct));else{const Vt=Be($t,bn(bn($t,S),ct));f=An([Tt(f,[0,0],[u,N]),Vt],1)}return[S,g,f]}),qO([E,_,A])}return!l&&u>d&&(f=Tt(f,[0,0],[u,d]),g=Tt(g,[0,0],[d,d])),[f,g]})}const N1=V({qr_:KQ});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function XQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const d=P(r,"losses","computeWeightedLoss");let f=null;l!=null&&(f=P(l,"weights","computeWeightedLoss"));const g=f==null?d:le(d,f);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(f==null)return cx(g);{const I=d.size/f.size,S=Pe(_e(g),_e(f));return I>1?Pe(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(f==null)return Pe(_e(g),Fe(d.size));{const I=le(f,Ki(d.shape)),S=Ie(_e(hx(I,Fe(0))),"float32");return Pe(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const Fn=V({computeWeightedLoss_:XQ});function JQ(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){const f=P(r,"labels","absoluteDifference"),g=P(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=P(u,"weights","absoluteDifference")),tn(f.shape,g.shape,"Error in absoluteDifference: ");const S=Yn(Be(f,g));return Fn(S,I,d)}const C1=V({absoluteDifference_:JQ});function ZQ(r,l,u,d,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","cosineDistance"),I=P(l,"predictions","cosineDistance");let S=null;d!=null&&(S=P(d,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const x=Fe(1),N=Be(x,_e(le(g,I),u,!0));return Fn(N,S,f)}const R1=V({cosineDistance_:ZQ});function QQ(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){let f=P(r,"labels","hingeLoss");const g=P(l,"predictions","hingeLoss");let I=null;u!=null&&(I=P(u,"weights","hingeLoss")),tn(f.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);f=Be(le(Fe(2),f),S);const x=Zu(Be(S,le(f,g)));return Fn(x,I,d)}const O1=V({hingeLoss_:QQ});function eee(r,l,u,d=1,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","huberLoss"),I=P(l,"predictions","huberLoss");let S=null;u!=null&&(S=P(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const x=Fe(d),N=Yn(Be(I,g)),E=lx(N,x),_=Be(N,E),A=vt(le(Fe(.5),gt(E)),le(x,_));return Fn(A,S,f)}const E1=V({huberLoss_:eee});function tee(r,l,u,d=1e-7,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","logLoss"),I=P(l,"predictions","logLoss");let S=null;u!=null&&(S=P(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const x=Fe(1),N=Fe(d),E=It(le(g,wo(vt(I,N)))),_=le(Be(x,g),wo(vt(Be(x,I),N))),A=Be(E,_);return Fn(A,S,f)}const D1=V({logLoss_:tee});function nee(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){const f=P(r,"labels","meanSquaredError"),g=P(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=P(u,"weights","meanSquaredError")),tn(f.shape,g.shape,"Error in meanSquaredError: ");const S=yx(f,g);return Fn(S,I,d)}const k1=V({meanSquaredError_:nee});function see(r,l){const u=P(r,"labels","sigmoidCrossEntropyWithLogits"),d=P(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,d.shape,"Error in sigmoidCrossEntropyWithLogits: ");const f=Zu(d),g=le(d,u),I=rx(qn(It(Yn(d))));return vt(Be(f,g),I)}function iee(r,l,u,d=0,f=Qt.SUM_BY_NONZERO_WEIGHTS){let g=P(r,"multiClassLabels","sigmoidCrossEntropy");const I=P(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=P(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),d>0){const N=Fe(d),E=Fe(1),_=Fe(.5);g=vt(le(g,Be(E,N)),le(_,N))}const x=see(g,I);return Fn(x,S,f)}const F1=V({sigmoidCrossEntropy_:iee});function ree(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const d=Ng((f,g,I)=>{const S=!0,x=ox(g,[u],S),N=Be(Ie(g,"float32"),x);I([f,N]);const E=It(le(N,f)),_=_e(E,[u]),A=(U,ne)=>{const[Q,M]=ne,fe=cs(U.shape,[u]);return[le(oe(U,fe),Be(Ie(Q,"float32"),qn(M))),le(oe(U,fe),Be(qn(M),Ie(Q,"float32")))]};return{value:_,gradFunc:A}});return d(r,l)}function oee(r,l,u,d=0,f=Qt.SUM_BY_NONZERO_WEIGHTS){let g=P(r,"onehotLabels","softmaxCrossEntropy");const I=P(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=P(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),d>0){const N=Fe(d),E=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(E,N)),Pe(N,_))}const x=ree(g,I);return Fn(x,S,f)}const _1=V({softmaxCrossEntropy_:oee});const bNe={fft:Qu,ifft:tl,rfft:ed,irfft:gx},xNe={hammingWindow:o1,hannWindow:kg,frame:Fg,stft:a1},W1={flipLeftRight:l1,resizeNearestNeighbor:x1,resizeBilinear:I1,rotateWithOffset:h1,cropAndResize:c1,nonMaxSuppression:u1,nonMaxSuppressionAsync:y1,nonMaxSuppressionWithScore:b1,nonMaxSuppressionWithScoreAsync:w1,nonMaxSuppressionPadded:L1,nonMaxSuppressionPaddedAsync:S1},UNe={bandPart:T1,gramSchmidt:A1,qr:N1},jNe={absoluteDifference:C1,computeWeightedLoss:Fn,cosineDistance:R1,hingeLoss:O1,huberLoss:E1,logLoss:D1,meanSquaredError:k1,sigmoidCrossEntropy:F1,softmaxCrossEntropy:_1};const $1=1.7580993408473768,U1=1.0507009873554805;const B1={kernelName:Lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,La(Ie(u,"float32"),-1))}}};const M1={kernelName:Q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=gt(Ie(u,"float32")),f=bs(Be(Fe(1),d));return It(Pe(r,f))}}}};const P1={kernelName:eR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=bs(Be(gt(Ie(u,"float32")),1));return Pe(r,d)}}}};const z1={kernelName:Hc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{let S=r;const x=Ot(u.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,u.shape)},I=()=>{let S=r;const x=Ot(d.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,d.shape)};return{a:g,b:I}}};const V1={kernelName:tR,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((d,f)=>{u[f]=()=>r.clone()}),u}};const G1={kernelName:nR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const Y1={kernelName:sR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const H1={kernelName:iR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,bs(Be(Fe(1),gt(Ie(u,"float32")))))}}};const q1={kernelName:rR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=bs(vt(Fe(1),gt(Ie(u,"float32"))));return Pe(r,d)}}}};const j1={kernelName:cR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=vt(gt(u),gt(d));let x=le(r,Pe(d,S));const N=Ot(u.shape,f);return N.length>0&&(x=_e(x,N)),oe(x,u.shape)},I=()=>{const S=vt(gt(u),gt(d));let x=It(le(r,Pe(u,S)));const N=Ot(d.shape,f);return N.length>0&&(x=_e(x,N)),oe(x,d.shape)};return{a:g,b:I}}};const K1={kernelName:oR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,vt(gt(Ie(u,"float32")),1))}}};const X1={kernelName:aR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(Fe(1),gt(Ie(u,"float32"))))}}};function aee(r,l,u,d,f=[1,1,1],g,I){const S=P(r,"dy","avgPool3dBackprop"),x=P(l,"input","avgPool3dBackprop");let N=S,E=x,_=!1;x.rank===4&&(_=!0,N=oe(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),E=oe(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),J(N.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${N.rank}.`),J(E.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${E.rank}.`),J(bo(d,f),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${d} and dilations '${f}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=M=>{const fe=Ag(E.shape,u,d,f,g,I);return M.avgPool3dBackprop(N,E,fe)},U={dy:N,input:E},ne={filterSize:u,strides:d,dilations:f,pad:g,dimRoundingMode:I},Q=H.runKernelFunc(A,U,null,dR,ne);return _?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3],Q.shape[4]]):Q}const J1=V({avgPool3dBackprop_:aee});const Z1={kernelName:uR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{filterSize:f,strides:g,dilations:I,pad:S,dimRoundingMode:x}=u,N=I==null?[1,1,1]:I;return{x:()=>J1(r,d,f,g,N,S,x)}}};function cee(r,l,u,d,f){const g=P(r,"dy","avgPoolBackprop"),I=P(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,x=g,N=!1;I.rank===3&&(N=!0,S=oe(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=oe(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const E=ne=>{const Q=Tg(S.shape,u,d,1,f);return ne.avgPoolBackprop(x,S,Q)},_={dy:x,input:S},A={filterSize:u,strides:d,pad:f},U=H.runKernelFunc(E,_,null,hR,A);return N?oe(U,[U.shape[1],U.shape[2],U.shape[3]]):U}const Q1=V({avgPoolBackprop_:cee});const eE={kernelName:lR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{filterSize:f,strides:g,pad:I}=u;return{x:()=>Q1(r,d,f,g,I)}}};const tE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[d,f]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>bn(r,f,!1,!0),b:()=>bn(d,r,!0,!1)}:!g&&I?{a:()=>bn(r,f,!1,!1),b:()=>bn(r,d,!0,!1)}:g&&!I?{a:()=>bn(f,r,!1,!0),b:()=>bn(d,r,!1,!1)}:{a:()=>bn(f,r,!0,!0),b:()=>bn(r,d,!0,!0)}}};const nE={kernelName:If,gradFunc:(r,l,u)=>{const{blockShape:d,crops:f}=u;return{x:()=>dx(r,d,f)}}};const sE={kernelName:xf,gradFunc:(r,l,u)=>{const d=u,f=d.inputShape,g=d.shape,I=Array.from(g);for(let x=f.length-1;x>=0;x--)if(f[x]===g[x])I[x]=1;else if(f[x]!==1)throw new Error(`broadcastTo(): [${f}] cannot be broadcast to [${g}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>_e(r,S,!0)}}};const iE={kernelName:qc,gradFunc:r=>({x:()=>r.clone()})};const rE={kernelName:pR,gradFunc:r=>({x:()=>Xe(r)})};const oE={kernelName:mR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{clipValueMin:f,clipValueMax:g}=u;return{x:()=>Hn(ba(Nr(d,f),Cr(d,g)),r,Xe(r))}}};const aE={kernelName:Tf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const d=l.map(x=>x.shape),{axis:f}=u,g=ft(f,l[0].shape)[0],I=d.map(x=>x[g]),S=So(r,I,g);return S.map(x=>()=>x)}};const cE={kernelName:Af,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,{dilations:g,strides:I,pad:S,dataFormat:x}=u;return J(yo(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>ZO(d.shape,r,f,I,S,x),filter:()=>Dg(d,r,f.shape,I,S,x)}}};const lE={kernelName:vf,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>KI(r,f,g,I,S,1,x),filter:()=>Dg(r,d,f.shape,g,I,S,x)}}};function lee(r,l,u,d,f){let g=r;r.rank===4&&(g=oe(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=oe(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=E=>{const _=1,A=Ku(g.shape,u,d,_,f);return E.conv3dDerFilter(g,I,A)},x={x:g,dy:I},N={strides:d,pad:f,filterShape:u};return H.runKernelFunc(S,x,null,bR,N)}const hE=V({conv3DBackpropFilter_:lee});const uE={kernelName:yR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:d,strides:f,pad:g}=u;J(yo(d),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${d}'`);const[I,S]=l;return{x:()=>QO(I.shape,r,S,f,g),filter:()=>hE(I,r,S.shape,f,g)}}};const dE={kernelName:Nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(mx(Ie(u,"float32"))),r)}}};const pE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(fx(Ie(u,"float32")),r)}}};const mE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{axis:f,exclusive:g,reverse:I}=u;return{x:()=>{const S=ji([f],d.rank);let x=JI(r,f,g,!I);return S!=null&&(x=Tn(x,S)),x}}}};const fE={kernelName:SR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:d,strides:f,pad:g,dimRoundingMode:I}=u,S=d==null?[1,1]:d;J(yo(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,N]=l;return J(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),J(N.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${N.rank}.`),J(x.shape[3]===N.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${N.shape[2]}.`),J(bo(f,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${f} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>r1(x.shape,r,N,f,g,d,I),filter:()=>i1(x,r,N.shape,f,g,d,I)}}};const gE={kernelName:TR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,g={x:d,filter:f,dy:r},I={x:d,filter:f,dy:r};return{x:()=>H.runKernel(AR,g,u),filter:()=>H.runKernel(vR,I,u)}}};const yE={kernelName:Of,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Pe(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const x=Ot(d.shape,f);x.length>0&&(S=oe(_e(S,x),d.shape));const N=gt(d);return It(Pe(S,Ie(N,"float32")))};return{a:g,b:I}}};const bE={kernelName:NR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,d=g=>g.eluDer(r,u),f={dy:r,y:u};return{x:()=>H.runKernelFunc(d,f,null,CR)}}};const wE={kernelName:RR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,d=le(qn(It(gt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,d)}}};const LE={kernelName:Ef,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const SE={kernelName:ER,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,qn(u))}}};const IE={kernelName:Df,gradFunc:r=>({x:()=>Xe(r)})};const xE={kernelName:kf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Pe(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const x=Ot(d.shape,f);x.length>0&&(S=oe(_e(S,x),d.shape));const N=gt(d);return It(Pe(S,Ie(N,"float32")))};return{a:g,b:I}}};const TE={kernelName:_R,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:d}=u,[f,g,I,S]=l,x=S==null?Fe(1):S,N=Ot(g.shape,f.shape),E=[];if(g.rank===1){for(let Ae=0;Aeg.rank===1?oe(le(le(r,ga(oe(U,[1,1,1,g.shape[0]]),E)),x),f.shape):oe(le(le(r,U),x),f.shape),M=()=>{let Ae=le(le(U,Fe(-1)),A);return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)},fe=()=>{let Ae=le(le(ne,_),A);return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)},ie=()=>{const Ae=le(_,U);let Me=le(r,Ae);return g.rank===1&&(Me=_e(Me,N)),oe(Me,g.shape)},we=()=>{let Ae=r;return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)};return{x:Q,mean:M,variance:fe,scale:ie,offset:we}}};const NE={kernelName:Ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[d,f]=l,{axis:g}=u,I=ft(g,d.shape)[0],S=()=>{const x=d.shape,N=f.size,E=x.slice(0,I),_=E.length,A=x.slice(g,x.length).slice(1),U=A.length,ne=AE(0,_),Q=AE(_+1,_+1+U),M=vE([E,[N],A]),fe=oe(r,M),ie=oe(f,[N]),we=vE([[_],ne,Q]),Ae=Tn(fe,we);let Me=wx(Ae,ie,d.shape[I]);const et=Xc(we);return Me=Tn(Me,et),Me};return{x:S,indices:()=>f}}};function AE(r,l){const u=[];for(let d=r;d{const[u,d]=l;return{a:()=>Xe(u),b:()=>Xe(d)}}};const RE={kernelName:Wf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const OE={kernelName:BR,gradFunc:r=>({x:()=>Xe(r)})};const EE={kernelName:MR,gradFunc:r=>({x:()=>Xe(r)})};const DE={kernelName:PR,gradFunc:r=>({x:()=>Xe(r)})};const kE={kernelName:Uf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,vt(u,1))}}};const FE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Ie(u,"float32"))}}};const _E={kernelName:HR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d]=l,{axis:f}=u;return{logits:()=>{const g=!0,I=qn(d);return Be(r,le(_e(r,f,g),I))}}}};function hee(r,l,u,d=5,f=1,g=1,I=.5){const S=E=>E.LRNGrad(u,r,l,d,f,g,I),x={x:r,y:l,dy:u},N={depthRadius:d,bias:f,alpha:g,beta:I};return H.runKernelFunc(S,x,null,jR,N)}const WE=V({localResponseNormalizationBackprop_:hee});const $E={kernelName:qR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{depthRadius:g,bias:I,alpha:S,beta:x}=u;return{x:()=>WE(d,f,r,g,I,S,x)}}};function _g(r,l,u,d){return l.rank{const f=le(r,Ie(ZI(u,l),r.dtype));return f}}}const Sx={kernelName:Bf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const d=u,{reductionIndices:f}=d,g=l[0],I=l[1],S=ft(f,g.shape),x=_g(r,I,g,S);return{x:()=>x.x()}}};const UE={kernelName:Mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=()=>le(r,Ie(Nr(u,d),"float32")),g=()=>le(r,Ie(ix(u,d),"float32"));return{a:f,b:g}}};function uee(r,l,u,d,f,g=[1,1,1],I,S){const x=P(r,"dy","maxPool3dBackprop"),N=P(l,"input","maxPool3dBackprop"),E=P(u,"output","maxPool3dBackprop");let _=x,A=N,U=E,ne=!1;N.rank===4&&(ne=!0,_=oe(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),A=oe(N,[1,N.shape[0],N.shape[1],N.shape[2],N.shape[3]]),U=oe(E,[1,E.shape[0],E.shape[1],E.shape[2],E.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(U.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${U.rank}.`),J(bo(f,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${f} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const Q=we=>{const Ae=Ag(A.shape,d,f,g,I,S);return we.maxPool3dBackprop(_,A,U,Ae)},M={dy:_,input:A,output:U},fe={filterSize:d,strides:f,dilations:g,pad:I,dimRoundingMode:S},ie=H.runKernelFunc(Q,M,null,ZR,fe);return ne?oe(ie,[ie.shape[1],ie.shape[2],ie.shape[3],ie.shape[4]]):ie}const BE=V({maxPool3dBackprop_:uee});const ME={kernelName:JR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{filterSize:g,strides:I,dilations:S,pad:x,dimRoundingMode:N}=u,E=S==null?[1,1,1]:S;return{x:()=>BE(r,d,f,g,I,E,x,N)}}};function dee(r,l,u,d,f,g,I){const S=P(r,"dy","maxPoolBackprop"),x=P(l,"input","maxPoolBackprop"),N=P(u,"output","maxPoolBackprop");J(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const E=U=>{const ne=Tg(x.shape,d,f,1,g,I);return U.maxPoolBackprop(S,x,N,ne)},_={dy:S,input:x,output:N},A={filterSize:d,strides:f,pad:g,dimRoundingMode:I};return H.runKernelFunc(E,_,null,XR,A)}const PE=V({maxPoolBackprop_:dee});const zE={kernelName:KR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>PE(r,d,f,g,I,S)}}};const VE={kernelName:Pf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const d=u,{axis:f}=d,[g,I]=l,S=ft(f,g.shape),x=_g(r,I,g,S);return{x:()=>x.x()}}};const GE={kernelName:zf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=()=>le(r,Ie(Cr(u,d),"float32")),g=()=>le(r,Ie(Li(u,d),"float32"));return{a:f,b:g}}};const YE={kernelName:eO,inputsToSave:["x"],gradFunc:(r,l,u)=>{const d=l[0],{paddings:f}=u,g=f.map(I=>I[0]);return{x:()=>Tt(r,g,d.shape)}}};const HE={kernelName:tO,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Ot(u.shape,f);return S.length>0?oe(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(tx(Pe(u,d)))),x=Ot(d.shape,f);return x.length>0?oe(_e(S,x),d.shape):S};return{a:g,b:I}}};const qE={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=le(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),x=Ot(d.shape,f);return x.length>0?oe(_e(S,x),d.shape):S};return{a:g,b:I}}};const jE={kernelName:Gf,gradFunc:r=>({x:()=>It(r)})};const KE={kernelName:aO,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Ws(u.shape,"float32")}}};const XE={kernelName:oO,gradFunc:r=>({x:()=>Xe(r)})};const Ix={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const d=l[0],{paddings:f}=u,g=f.map(I=>I[0]);return{x:()=>Tt(r,g,d.shape)}}};const JE={kernelName:Hf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,d,f]=l,g=u,I=d,S=at(g.shape,I.shape),x=()=>{const E=Ie(I,"float32");let _=le(r,le(E,wa(g,Be(E,Fe(1)))));const A=Ot(g.shape,S);return A.length>0&&(_=_e(_,A)),oe(_,g.shape)},N=()=>{const E=Li(g,0),_=Hn(E,wo(g),Xe(g));let A=le(r,le(f,_));const U=Ot(I.shape,S);return U.length>0&&(A=_e(A,U)),oe(A,I.shape)};return{a:x,b:N}}};const ZE={kernelName:cO,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,d]=l,f=Li(u,0);return{x:()=>Hn(f,r,le(r,d)),alpha:()=>{let g=Hn(f,Xe(r),le(r,u));const I=Ot(d.shape,r.shape);return I.length>0&&(g=_e(g,I)),oe(g,d.shape)}}}};const QE={kernelName:uO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,It(gt(u)))}}};const eD={kernelName:mO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,d=le(Cr(u,6),La(u));return{x:()=>le(r,Ie(d,"float32"))}}};const tD={kernelName:qf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(La(u),"float32"))}}};const nD={kernelName:jf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>oe(r,u.shape)}}};const sD={kernelName:Xf,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[d]=l,f=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,d,x)},g={images:d},I=()=>H.runKernelFunc(f,g,null,pO,u);return{images:I}}};const iD={kernelName:Kf,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[d]=l,f=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,d,x)},g={images:d},I=()=>H.runKernelFunc(f,g,null,dO,u);return{images:I}}};const rD={kernelName:Jf,gradFunc:(r,l,u)=>{const{dims:d}=u,f=ft(d,r.shape);return{x:()=>el(r,f)}}};const oD={kernelName:fO,gradFunc:r=>({x:()=>Xe(r)})};const aD={kernelName:Zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Pe(r,le(wa(u,1.5),2)))}}};const cD={kernelName:Qf,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Xe(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(ax(u),r.dtype))}}};const lD={kernelName:gO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=Li(u,Fe(0)),f=Fe($1),g=Fe(U1),I=le(r,g),S=le(le(r,f),qn(Ie(u,"float32")));return Hn(d,I,S)}}}};const hD={kernelName:sg,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const uD={kernelName:yO,gradFunc:r=>({x:()=>Xe(r)})};const dD={kernelName:tg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Xu(Ie(u,"float32")),r)}}};const pD={kernelName:ng,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(XI(Ie(u,"float32")),r)}}};const mD={kernelName:eg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{begin:f,size:g}=u,I=d.shape,[S,x]=Ig(d,f,g),N=[];for(let E=0;Eux(r,N)}}};const fD={kernelName:wO,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d]=l,{dim:f}=u,g=!0,I=le(r,d);return{logits:()=>Be(I,le(_e(I,[f],g),d))}}};const gD={kernelName:bO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,qI(u))}}};const xx={kernelName:og,gradFunc:(r,l,u)=>{const{blockShape:d,paddings:f}=u;return{x:()=>jI(r,d,f)}}};const Tx={kernelName:ag,gradFunc:(r,l,u)=>{const{axis:d}=u;return{x:()=>An(r,d)}}};const yD={kernelName:ig,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,le(bs(Ie(u,"float32")),2))}}};const bD={kernelName:LO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const wD={kernelName:cg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=Fe(2),g=()=>le(r,le(f,Be(u,d))),I=()=>le(r,le(f,Be(d,u)));return{a:g,b:I}}};const LD={kernelName:fg,gradFunc:r=>({x:()=>Xe(r)})};const SD={kernelName:lg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{let S=r;const x=Ot(u.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,u.shape)},I=()=>{let S=r;const x=Ot(d.shape,f);return x.length>0&&(S=_e(S,x)),oe(It(S),d.shape)};return{a:g,b:I}}};const ID={kernelName:rg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,f=d.shape.slice(),{axis:g}=u,I=ft(g,d.shape);I.forEach(N=>{f[N]=1});const S=oe(r,f),x=le(S,Ki(d.shape,"float32"));return{x:()=>x}}};const xD={kernelName:SO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,gt(Xu(u)))}}};const TD={kernelName:IO,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),gt(u)),r)}}};const AD={kernelName:hg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{reps:f}=u,g=()=>{let I=Xe(d);if(d.rank===1)for(let S=0;S{const d=u,{perm:f}=d,g=Xc(f);return{x:()=>Tn(r,g)}}};const ND={kernelName:dg,gradFunc:(r,l,u)=>{const d=u,{axis:f}=d;return{value:()=>Ks(r,f)}}};const CD={kernelName:pg,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,d=()=>pee(r,u);return{x:d}}};function pee(r,l){const u=sx(l,Xe(l)),d=nx(r,u);let f=Nr(l,Fe(0,"int32"));const g=d.rank-f.rank;for(let S=0;S({x:()=>Xe(r)})};const mee=[B1,M1,P1,z1,V1,G1,Y1,H1,q1,j1,K1,X1,Z1,eE,tE,nE,sE,iE,rE,oE,aE,lE,cE,uE,dE,pE,mE,fE,gE,yE,bE,wE,LE,SE,xE,IE,TE,NE,CE,RE,OE,EE,DE,kE,FE,_E,$E,Sx,Sx,UE,ME,zE,VE,GE,YE,HE,qE,jE,KE,XE,Ix,Ix,JE,ZE,QE,eD,tD,nD,sD,iD,rD,oD,aD,cD,lD,hD,uD,dD,pD,mD,fD,gD,xx,xx,Tx,Tx,yD,wD,bD,LD,SD,ID,xD,TD,AD,vD,ND,CD,RD];for(const r of mee)AO(r);function Ax(r,l,u=!1){const{Image:d,Canvas:f}=St.getEnv();if(!(r instanceof d||r instanceof f))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=da(r),I=l/Math.max(g.height,g.width),S=I*g.width,x=I*g.height,N=Vc({width:l,height:l}),E=r instanceof f?r:Bu(r),_=Math.abs(S-x)/2,A=u&&S{if(Tr(u)){this._imageTensors[d]=u,this._inputDimensions[d]=u.shape;return}if(Ds(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[d]=u,this._inputDimensions[d]=u.shape.slice(1);return}const f=u instanceof St.getEnv().Canvas?u:Bu(u);this._canvases[d]=f,this._inputDimensions[d]=[f.height,f.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 Pi(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return lI({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,HO(()=>{const u=Pi(this.batchSize,0,1).map(f=>{const g=this.getInput(f);if(g instanceof kn){let I=Ds(g)?g:g.expandDims();return I=pI(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=W1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof St.getEnv().Canvas)return GI.fromPixels(Ax(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${f}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),d=Ks(u.map(f=>Ie(f,"float32"))).as4D(this.batchSize,r,r,3);return d})}}async function Wt(r){if(r instanceof Io)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=f=>Array.isArray(r)?` at input index ${f}:`:"",d=l.map(ua);return d.forEach((f,g)=>{if(!gf(f)&&!Tr(f)&&!Ds(f))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Ds(f)){const I=f.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(d.map(f=>gf(f)&&SI(f))),new Io(d,Array.isArray(r))}async function nl(r,l){const{Canvas:u}=St.getEnv();let d=r;if(!(r instanceof u)){const I=await Wt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);d=S instanceof u?S:await xI(S)}const f=as(d),g=l.map(I=>I instanceof Jt?I.forSize(d.width,d.height).box.floor():I).map(I=>I.clipAtImageBorders(d.width,d.height));return g.map(({x:I,y:S,width:x,height:N})=>{const E=Vc({width:x,height:N});return as(E).putImageData(f.getImageData(I,S,x,N),0,0),E})}const Wg=He(Ze());async function sl(r,l){if(!Tr(r)&&!Ds(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Ds(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Wg.tidy(()=>{const[u,d,f]=r.shape.slice(Ds(r)?1:0),g=l.map(S=>S instanceof Jt?S.forSize(d,u).box:S).map(S=>S.clipAtImageBorders(d,u)),I=g.map(({x:S,y:x,width:N,height:E})=>Wg.slice3d(r.as3D(u,d,f),[x,S,0],[E,N,f]));return I})}async function Ia(r,l){const u=St.getEnv().fetch,d=await u(r,l);if(!(d.status<400))throw new Error(`failed to fetch: (${d.status}) ${d.statusText}, from url: ${d.url}`);return d}async function fee(r){const l=await Ia(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return II(u)}async function vx(r){return(await Ia(r)).json()}async function gee(r){return new Float32Array(await(await Ia(r)).arrayBuffer())}function $g(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const d=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(d,"");const f=r.split("/").filter(S=>S),g=r.endsWith(".json")?f[f.length-1]:u;let I=d+(r.endsWith(".json")?f.slice(0,f.length-1):f).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const OD=He(Ze());async function Nx(r,l){const{manifestUri:u,modelBaseUri:d}=$g(r,l);let f=await vx(u);return OD.io.loadWeights(f,d)}function yee(r,l,u=!1){const{width:d,height:f}=u?da(l):l;return r.width=d,r.height=f,{width:d,height:f}}const Rr=He(Ze());class Un{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:d}=this.traversePropertyPath(r);u[d].dispose(),u[d]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Rr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Rr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Rr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await Nx(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=St.getEnv(),{manifestUri:u,modelBaseUri:d}=$g(r,this.getDefaultModelName()),f=x=>Promise.all(x.map(N=>l(N).then(E=>E.buffer))),g=Rr.io.weightsLoaderFactory(f),I=JSON.parse((await l(u)).toString()),S=await g(I,d);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((f,g)=>{if(!f.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:f.nextObj,objProp:g,nextObj:f.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:d}=l;if(!u||!d||!(u[d]instanceof Rr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:d}}}const il=He(Ze());function ls(r,l,u){return il.tidy(()=>{let d=il.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return d=il.add(d,l.bias),d})}const Bt=He(Ze());function Ug(r,l,u=!1){return Bt.tidy(()=>{const d=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):ls(r,l.conv0,[2,2])),f=ls(d,l.conv1,[1,1]),g=Bt.relu(Bt.add(d,f)),I=ls(g,l.conv2,[1,1]);return Bt.relu(Bt.add(d,Bt.add(f,I)))})}function nd(r,l,u=!1,d=!0){return Bt.tidy(()=>{const f=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,d?[2,2]:[1,1],"same"),l.conv0.bias):ls(r,l.conv0,d?[2,2]:[1,1])),g=ls(f,l.conv1,[1,1]),I=Bt.relu(Bt.add(f,g)),S=ls(I,l.conv2,[1,1]),x=Bt.relu(Bt.add(f,Bt.add(g,S))),N=ls(x,l.conv3,[1,1]);return Bt.relu(Bt.add(f,Bt.add(g,Bt.add(S,N))))})}const xo=He(Ze());function xa(r,l,u="same",d=!1){return xo.tidy(()=>{const f=xo.add(xo.conv2d(r,l.filters,[1,1],u),l.bias);return d?xo.relu(f):f})}function jn(r,l){Object.keys(r).forEach(u=>{l.some(d=>d.originalPath===u)||r[u].dispose()})}const Bg=He(Ze());function rl(r,l){return function(u,d,f,g){const I=Bg.tensor4d(r(u*d*f*f),[f,f,u,d]),S=Bg.tensor1d(r(d));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const Mg=He(Ze());function Pg(r,l){return function(u,d,f){const g=Mg.tensor2d(r(u*d),[u,d]),I=Mg.tensor1d(r(d));return l.push({paramPath:`${f}/weights`},{paramPath:`${f}/bias`}),{weights:g,bias:I}}}class Cx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const sd=He(Ze());function ol(r,l){return function(u,d,f){const g=sd.tensor4d(r(3*3*u),[3,3,u,1]),I=sd.tensor4d(r(u*d),[1,1,u,d]),S=sd.tensor1d(r(d));return l.push({paramPath:`${f}/depthwise_filter`},{paramPath:`${f}/pointwise_filter`},{paramPath:`${f}/bias`}),new Cx(g,I,S)}}function al(r){return function(l){const u=r(`${l}/depthwise_filter`,4),d=r(`${l}/pointwise_filter`,4),f=r(`${l}/bias`,1);return new Cx(u,d,f)}}function ws(r,l){return function(u,d,f){const g=r[u];if(!oa(g,d))throw new Error(`expected weightMap[${u}] to be a Tensor${d}D, instead have ${g}`);return l.push({originalPath:u,paramPath:f||u}),g}}function Kn(r){let l=r;function u(f){const g=l.slice(0,f);return l=l.slice(f),g}function d(){return l}return{extractWeights:u,getRemainingWeights:d}}function zg(r,l){const u=rl(r,l),d=ol(r,l);function f(I,S,x,N=!1){const E=N?u(I,S,3,`${x}/conv0`):d(I,S,`${x}/conv0`),_=d(S,S,`${x}/conv1`),A=d(S,S,`${x}/conv2`);return{conv0:E,conv1:_,conv2:A}}function g(I,S,x,N=!1){const{conv0:E,conv1:_,conv2:A}=f(I,S,x,N),U=d(S,S,`${x}/conv3`);return{conv0:E,conv1:_,conv2:A,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:g}}function ED(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractDenseBlock4Params:f}=zg(u,l),g=f(3,32,"dense0",!0),I=f(32,64,"dense1"),S=f(64,128,"dense2"),x=f(128,256,"dense3");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:x}}}function Vg(r){return function(l){const u=r(`${l}/filters`,4),d=r(`${l}/bias`,1);return{filters:u,bias:d}}}function Gg(r,l){const u=ws(r,l),d=Vg(u),f=al(u);function g(S,x=!1){const N=x?d(`${S}/conv0`):f(`${S}/conv0`),E=f(`${S}/conv1`),_=f(`${S}/conv2`);return{conv0:N,conv1:E,conv2:_}}function I(S,x=!1){const N=x?d(`${S}/conv0`):f(`${S}/conv0`),E=f(`${S}/conv1`),_=f(`${S}/conv2`),A=f(`${S}/conv3`);return{conv0:N,conv1:E,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function DD(r){const l=[],{extractDenseBlock4Params:u}=Gg(r,l),d={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return jn(r,l),{params:d,paramMappings:l}}const To=He(Ze());class Yg extends Un{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return To.tidy(()=>{const u=To.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(To.scalar(255));let g=nd(f,l.dense0,!0);return g=nd(g,l.dense1),g=nd(g,l.dense2),g=nd(g,l.dense3),g=To.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return DD(r)}extractParams(r){return ED(r)}}const cl=He(Ze());function id(r,l){return cl.tidy(()=>cl.add(cl.matMul(r,l.weights),l.bias))}function kD(r,l,u){const d=[],{extractWeights:f,getRemainingWeights:g}=Kn(r),I=Pg(f,d),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:d,params:{fc:S}}}function FD(r){const l=[],u=ws(r,l);function d(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const f={fc:d("fc")};return jn(r,l),{params:f,paramMappings:l}}function Hg(r){const l={},u={};return Object.keys(r).forEach(d=>{const f=d.startsWith("fc")?u:l;f[d]=r[d]}),{featureExtractorMap:l,classifierMap:u}}const _D=He(Ze());class qg extends Un{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return _D.tidy(()=>{const u=r instanceof Io?this.faceFeatureExtractor.forwardInput(r):r;return id(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return kD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Hg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),FD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),d=u*l+u,f=r.slice(0,r.length-d),g=r.slice(r.length-d);return this.faceFeatureExtractor.extractWeights(f),this.extractClassifierParams(g)}}const Rx=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class Ta{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);Rx.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return Rx.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const ll=He(Ze());class Ox extends qg{constructor(r=new Yg){super("FaceExpressionNet",r)}forwardInput(r){return ll.tidy(()=>ll.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Wt(r))}async predictExpressions(r){const l=await Wt(r),u=await this.forwardInput(l),d=await Promise.all(ll.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const f=d.map(g=>new Ta(g));return l.isBatchInput?f:f[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function Ex(r){return r.expressions instanceof Ta}function jg(r,l){const u={expressions:l};return Object.assign({},r,u)}function bee(r,l,u=.1,d){const f=Array.isArray(l)?l:[l];f.forEach(g=>{const I=g instanceof Ta?g:Ex(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),x=S.filter(_=>_.probability>u),N=Vi(g)?g.detection.box.bottomLeft:d||new Qe(0,0),E=new zc(x.map(_=>`${_.expression} (${aa(_.probability)})`),N);E.draw(r)})}function Aa(r){return Vi(r)&&r.landmarks instanceof js&&r.unshiftedLandmarks instanceof js&&r.alignedRect instanceof Jt}function hl(r,l){const{box:u}=r.detection,d=l.shiftBy(u.x,u.y),f=d.align(),{imageDims:g}=r.detection,I=new Jt(r.detection.score,f.rescale(g.reverse()),g),S={landmarks:d,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class WD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:d,lineColor:f,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=d||1,this.pointSize=g||2,this.lineColor=f||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class $D{constructor(r,l={}){this.faceLandmarks=r,this.options=new WD(l)}draw(r){const l=as(r),{drawLines:u,drawPoints:d,lineWidth:f,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof $u&&(l.strokeStyle=g,l.lineWidth=f,xr(l,this.faceLandmarks.getJawOutline()),xr(l,this.faceLandmarks.getLeftEyeBrow()),xr(l,this.faceLandmarks.getRightEyeBrow()),xr(l,this.faceLandmarks.getNose()),xr(l,this.faceLandmarks.getLeftEye(),!0),xr(l,this.faceLandmarks.getRightEye(),!0),xr(l,this.faceLandmarks.getMouth(),!0)),d){l.strokeStyle=S,l.fillStyle=S;const x=N=>{l.beginPath(),l.arc(N.x,N.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function wee(r,l){const u=Array.isArray(l)?l:[l];u.forEach(d=>{const f=d instanceof js?d:Aa(d)?d.landmarks:void 0;if(!f)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new $D(f).draw(r)})}const Dx={};$c(Dx,{AnchorPosition:()=>Gi,DrawBox:()=>LI,DrawBoxOptions:()=>B2,DrawFaceLandmarks:()=>$D,DrawFaceLandmarksOptions:()=>WD,DrawTextField:()=>zc,DrawTextFieldOptions:()=>mf,drawContour:()=>xr,drawDetections:()=>R9,drawFaceExpressions:()=>bee,drawFaceLandmarks:()=>wee});function Lee(r,l){const u=rl(r,l),d=ol(r,l);function f(I,S,x){const N=d(I,S,`${x}/separable_conv0`),E=d(S,S,`${x}/separable_conv1`),_=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:N,separable_conv1:E,expansion_conv:_}}function g(I,S){const x=d(I,I,`${S}/separable_conv0`),N=d(I,I,`${S}/separable_conv1`),E=d(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:N,separable_conv2:E}}return{extractConvParams:u,extractSeparableConvParams:d,extractReductionBlockParams:f,extractMainBlockParams:g}}function UD(r,l){const u=[],{extractWeights:d,getRemainingWeights:f}=Kn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=Lee(d,u),N=g(3,32,3,"entry_flow/conv_in"),E=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:N,reduction_block_0:E,reduction_block_1:_},U={};Pi(l,0,1).forEach(fe=>{U[`main_block_${fe}`]=x(128,`middle_flow/main_block_${fe}`)});const ne=S(128,256,"exit_flow/reduction_block"),Q=I(256,512,"exit_flow/separable_conv"),M={reduction_block:ne,separable_conv:Q};if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:U,exit_flow:M}}}function See(r,l){const u=ws(r,l),d=Vg(u),f=al(u);function g(S){const x=f(`${S}/separable_conv0`),N=f(`${S}/separable_conv1`),E=d(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:N,expansion_conv:E}}function I(S){const x=f(`${S}/separable_conv0`),N=f(`${S}/separable_conv1`),E=f(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:N,separable_conv2:E}}return{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:I}}function BD(r,l){const u=[],{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:I}=See(r,u),S=d("entry_flow/conv_in"),x=g("entry_flow/reduction_block_0"),N=g("entry_flow/reduction_block_1"),E={conv_in:S,reduction_block_0:x,reduction_block_1:N},_={};Pi(l,0,1).forEach(Q=>{_[`main_block_${Q}`]=I(`middle_flow/main_block_${Q}`)});const A=g("exit_flow/reduction_block"),U=f("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:U};return jn(r,u),{params:{entry_flow:E,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=He(Ze());function MD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function kx(r,l,u=!0){let d=u?on.relu(r):r;return d=ls(d,l.separable_conv0,[1,1]),d=ls(on.relu(d),l.separable_conv1,[1,1]),d=on.maxPool(d,[3,3],[2,2],"same"),d=on.add(d,MD(r,l.expansion_conv,[2,2])),d}function Iee(r,l){let u=ls(on.relu(r),l.separable_conv0,[1,1]);return u=ls(on.relu(u),l.separable_conv1,[1,1]),u=ls(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class PD extends Un{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(on.scalar(256));let g=on.relu(MD(f,l.entry_flow.conv_in,[2,2]));return g=kx(g,l.entry_flow.reduction_block_0,!1),g=kx(g,l.entry_flow.reduction_block_1),Pi(this._numMainBlocks,0,1).forEach(I=>{g=Iee(g,l.middle_flow[`main_block_${I}`])}),g=kx(g,l.exit_flow.reduction_block),g=on.relu(ls(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return BD(r,this._numMainBlocks)}extractParams(r){return UD(r,this._numMainBlocks)}}function zD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),f=Pg(u,l),g=f(512,1,"fc/age"),I=f(512,2,"fc/gender");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function VD(r){const l=[],u=ws(r,l);function d(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const f={fc:{age:d("fc/age"),gender:d("fc/gender")}};return jn(r,l),{params:f,paramMappings:l}}var Or;(function(r){r.FEMALE="female",r.MALE="male"})(Or||(Or={}));const Xi=He(Ze());class Fx extends Un{constructor(r=new PD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Xi.tidy(()=>{const u=r instanceof Io?this.faceFeatureExtractor.forwardInput(r):r,d=Xi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),f=id(d,l.fc.age).as1D(),g=id(d,l.fc.gender);return{age:f,gender:g}})}forwardInput(r){return Xi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Xi.softmax(u)}})}async forward(r){return this.forwardInput(await Wt(r))}async predictAgeAndGender(r){const l=await Wt(r),u=await this.forwardInput(l),d=Xi.unstack(u.age),f=Xi.unstack(u.gender),g=d.map((S,x)=>({ageTensor:S,genderTensor:f[x]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:x})=>{const N=(await S.data())[0],E=(await x.data())[0],_=E>.5,A=_?Or.MALE:Or.FEMALE,U=_?E:1-E;return S.dispose(),x.dispose(),{age:N,gender:A,genderProbability:U}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return zD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Hg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),VD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),d=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(d)}}const Ls=He(Ze());class Kg extends qg{postProcess(r,l,u){const d=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),f=d.length;return Ls.tidy(()=>{const g=(E,_)=>Ls.stack([Ls.fill([68],E,"float32"),Ls.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(E,_)=>{const{width:A,height:U}=d[E];return _(A,U)?Math.abs(A-U)/2:0},S=E=>I(E,(_,A)=>_I(E,(_,A)=>A<_),N=r.mul(Ls.fill([f,136],l,"float32")).sub(Ls.stack(Array.from(Array(f),(E,_)=>g(S(_),x(_))))).div(Ls.stack(Array.from(Array(f),(E,_)=>g(d[_].width,d[_].height))));return N})}forwardInput(r){return Ls.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,d])=>({height:u,width:d})))})}async forward(r){return this.forwardInput(await Wt(r))}async detectLandmarks(r){const l=await Wt(r),u=Ls.tidy(()=>Ls.unstack(this.forwardInput(l))),d=await Promise.all(u.map(async(f,g)=>{const I=Array.from(await f.data()),S=I.filter((N,E)=>lf(E)),x=I.filter((N,E)=>!lf(E));return new $u(Array(68).fill(0).map((N,E)=>new Qe(S[E],x[E])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getClassifierChannelsOut(){return 136}}class rd extends Kg{constructor(r=new Yg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function GD(r){const l=[],{extractDenseBlock3Params:u}=Gg(r,l),d={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return jn(r,l),{params:d,paramMappings:l}}function YD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractDenseBlock3Params:f}=zg(u,l),g=f(3,32,"dense0",!0),I=f(32,64,"dense1"),S=f(64,128,"dense2");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const Ao=He(Ze());class HD extends Un{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return Ao.tidy(()=>{const u=Ao.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(Ao.scalar(255));let g=Ug(f,l.dense0,!0);return g=Ug(g,l.dense1),g=Ug(g,l.dense2),g=Ao.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return GD(r)}extractParams(r){return YD(r)}}class _x extends Kg{constructor(r=new HD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class xee extends rd{}const Xg=He(Ze());function qD(r,l){return Xg.add(Xg.mul(r,l.weights),l.biases)}const ul=He(Ze());function Wx(r,l,u,d,f="same"){const{filters:g,bias:I}=l.conv;let S=ul.conv2d(r,g,u,f);return S=ul.add(S,I),S=qD(S,l.scale),d?ul.relu(S):S}function jD(r,l){return Wx(r,l,[1,1],!0)}function $x(r,l){return Wx(r,l,[1,1],!1)}function Jg(r,l){return Wx(r,l,[2,2],!0,"valid")}const Ss=He(Ze());function Tee(r,l){function u(S,x,N){const E=r(S),_=E.length/(x*N*N);if(cI(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${E.length}, numFilters: ${x}, filterSize: ${N}`);return Ss.tidy(()=>Ss.transpose(Ss.tensor4d(E,[x,_,N,N]),[2,3,1,0]))}function d(S,x,N,E){const _=u(S,x,N),A=Ss.tensor1d(r(x));return l.push({paramPath:`${E}/filters`},{paramPath:`${E}/bias`}),{filters:_,bias:A}}function f(S,x){const N=Ss.tensor1d(r(S)),E=Ss.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:N,biases:E}}function g(S,x,N,E){const _=d(S,x,N,`${E}/conv`),A=f(x,`${E}/scale`);return{conv:_,scale:A}}function I(S,x,N,E,_=!1){const A=g((_?.5:1)*S,x,N,`${E}/conv1`),U=g(S,x,N,`${E}/conv2`);return{conv1:A,conv2:U}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function KD(r){const{extractWeights:l,getRemainingWeights:u}=Kn(r),d=[],{extractConvLayerParams:f,extractResidualLayerParams:g}=Tee(l,d),I=f(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),x=g(9216,32,3,"conv32_2"),N=g(9216,32,3,"conv32_3"),E=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),U=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),Q=g(147456,128,3,"conv128_1"),M=g(147456,128,3,"conv128_2"),fe=g(589824,256,3,"conv256_down",!0),ie=g(589824,256,3,"conv256_1"),we=g(589824,256,3,"conv256_2"),Ae=g(589824,256,3,"conv256_down_out"),Me=Ss.tidy(()=>Ss.transpose(Ss.tensor2d(l(256*128),[128,256]),[1,0]));if(d.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const et={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:N,conv64_down:E,conv64_1:_,conv64_2:A,conv64_3:U,conv128_down:ne,conv128_1:Q,conv128_2:M,conv256_down:fe,conv256_1:ie,conv256_2:we,conv256_down_out:Ae,fc:Me};return{params:et,paramMappings:d}}function Aee(r,l){const u=ws(r,l);function d(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function f(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),N=d(I);return{conv:{filters:S,bias:x},scale:N}}function g(I){return{conv1:f(`${I}/conv1`),conv2:f(`${I}/conv2`)}}return{extractConvLayerParams:f,extractResidualLayerParams:g}}function XD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:d}=Aee(r,l),f=u("conv32_down"),g=d("conv32_1"),I=d("conv32_2"),S=d("conv32_3"),x=d("conv64_down"),N=d("conv64_1"),E=d("conv64_2"),_=d("conv64_3"),A=d("conv128_down"),U=d("conv128_1"),ne=d("conv128_2"),Q=d("conv256_down"),M=d("conv256_1"),fe=d("conv256_2"),ie=d("conv256_down_out"),we=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!aI(we))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${we}`);const Ae={conv32_down:f,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:N,conv64_2:E,conv64_3:_,conv128_down:A,conv128_1:U,conv128_2:ne,conv256_down:Q,conv256_1:M,conv256_2:fe,conv256_down_out:ie,fc:we};return jn(r,l),{params:Ae,paramMappings:l}}const Xn=He(Ze());function Si(r,l){let u=jD(r,l.conv1);return u=$x(u,l.conv2),u=Xn.add(u,r),u=Xn.relu(u),u}function od(r,l){let u=Jg(r,l.conv1);u=$x(u,l.conv2);let d=Xn.avgPool(r,2,2,"valid");const f=Xn.zeros(d.shape),g=d.shape[3]!==u.shape[3],I=d.shape[1]!==u.shape[1]||d.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const x=Xn.zeros(S);u=Xn.concat([u,x],1);const N=[...u.shape];N[2]=1;const E=Xn.zeros(N);u=Xn.concat([u,E],2)}return d=g?Xn.concat([d,f],3):d,u=Xn.add(d,u),u=Xn.relu(u),u}const $s=He(Ze());class ad extends Un{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return $s.tidy(()=>{const u=$s.cast(r.toBatchTensor(150,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div($s.scalar(256));let g=Jg(f,l.conv32_down);g=$s.maxPool(g,3,2,"valid"),g=Si(g,l.conv32_1),g=Si(g,l.conv32_2),g=Si(g,l.conv32_3),g=od(g,l.conv64_down),g=Si(g,l.conv64_1),g=Si(g,l.conv64_2),g=Si(g,l.conv64_3),g=od(g,l.conv128_down),g=Si(g,l.conv128_1),g=Si(g,l.conv128_2),g=od(g,l.conv256_down),g=Si(g,l.conv256_1),g=Si(g,l.conv256_2),g=od(g,l.conv256_down_out);const I=g.mean([1,2]),S=$s.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Wt(r))}async computeFaceDescriptor(r){const l=await Wt(r),u=$s.tidy(()=>$s.unstack(this.forwardInput(l))),d=await Promise.all(u.map(f=>f.data()));return u.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return XD(r)}extractParams(r){return KD(r)}}function vee(r){const l=new ad;return l.extractWeights(r),l}function Zg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function Nee(r){return typeof r.age=="number"}function Qg(r,l){const u={age:l};return Object.assign({},r,u)}function Cee(r){return(r.gender===Or.MALE||r.gender===Or.FEMALE)&&Mc(r.genderProbability)}function ey(r,l,u){const d={gender:l,genderProbability:u};return Object.assign({},r,d)}const Ii=He(Ze());function Ree(r,l){function u(x,N){const E=Ii.tensor4d(r(3*3*x),[3,3,x,1]),_=Ii.tensor1d(r(x)),A=Ii.tensor1d(r(x)),U=Ii.tensor1d(r(x)),ne=Ii.tensor1d(r(x));return l.push({paramPath:`${N}/filters`},{paramPath:`${N}/batch_norm_scale`},{paramPath:`${N}/batch_norm_offset`},{paramPath:`${N}/batch_norm_mean`},{paramPath:`${N}/batch_norm_variance`}),{filters:E,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:U,batch_norm_variance:ne}}function d(x,N,E,_,A){const U=Ii.tensor4d(r(x*N*E*E),[E,E,x,N]),ne=Ii.tensor1d(r(N));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:U,bias:ne}}function f(x,N,E,_){const{filters:A,bias:U}=d(x,N,E,_,!0);return{filters:A,batch_norm_offset:U}}function g(x,N,E){const _=u(x,`${E}/depthwise_conv`),A=f(x,N,1,`${E}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const x=f(3,32,3,"mobilenetv1/conv_0"),N=g(32,64,"mobilenetv1/conv_1"),E=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),U=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),Q=g(512,512,"mobilenetv1/conv_7"),M=g(512,512,"mobilenetv1/conv_8"),fe=g(512,512,"mobilenetv1/conv_9"),ie=g(512,512,"mobilenetv1/conv_10"),we=g(512,512,"mobilenetv1/conv_11"),Ae=g(512,1024,"mobilenetv1/conv_12"),Me=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:N,conv_2:E,conv_3:_,conv_4:A,conv_5:U,conv_6:ne,conv_7:Q,conv_8:M,conv_9:fe,conv_10:ie,conv_11:we,conv_12:Ae,conv_13:Me}}function S(){const x=f(1024,256,1,"prediction_layer/conv_0"),N=f(256,512,3,"prediction_layer/conv_1"),E=f(512,128,1,"prediction_layer/conv_2"),_=f(128,256,3,"prediction_layer/conv_3"),A=f(256,128,1,"prediction_layer/conv_4"),U=f(128,256,3,"prediction_layer/conv_5"),ne=f(256,64,1,"prediction_layer/conv_6"),Q=f(64,128,3,"prediction_layer/conv_7"),M=d(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),fe=d(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ie=d(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),we=d(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Ae=d(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Me=d(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),et=d(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),ct=d(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=d(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Vt=d(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),je=d(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),hn=d(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:M,class_predictor:fe},Is={box_encoding_predictor:ie,class_predictor:we},_r={box_encoding_predictor:Ae,class_predictor:Me},Wr={box_encoding_predictor:et,class_predictor:ct},Oa={box_encoding_predictor:$t,class_predictor:Vt},un={box_encoding_predictor:je,class_predictor:hn};return{conv_0:x,conv_1:N,conv_2:E,conv_3:_,conv_4:A,conv_5:U,conv_6:ne,conv_7:Q,box_predictor_0:bt,box_predictor_1:Is,box_predictor_2:_r,box_predictor_3:Wr,box_predictor_4:Oa,box_predictor_5:un}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function JD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractMobilenetV1Params:f,extractPredictionLayerParams:g}=Ree(u,l),I=f(),S=g(),x=Ii.tensor3d(u(5118*4),[1,5118,4]),N={extra_dim:x};if(l.push({paramPath:"output_layer/extra_dim"}),d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:N},paramMappings:l}}function Oee(r,l){const u=ws(r,l);function d(N,E,_){const A=u(`${N}/Conv2d_${E}_pointwise/weights`,4,`${_}/filters`),U=u(`${N}/Conv2d_${E}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:U}}function f(N){const E=`mobilenetv1/conv_${N}`,_=`MobilenetV1/Conv2d_${N}_depthwise`,A=`${E}/depthwise_conv`,U=`${E}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),Q=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),M=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),fe=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ie=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:Q,batch_norm_offset:M,batch_norm_mean:fe,batch_norm_variance:ie},pointwise_conv:d("MobilenetV1",N,U)}}function g(){return{conv_0:d("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:f(1),conv_2:f(2),conv_3:f(3),conv_4:f(4),conv_5:f(5),conv_6:f(6),conv_7:f(7),conv_8:f(8),conv_9:f(9),conv_10:f(10),conv_11:f(11),conv_12:f(12),conv_13:f(13)}}function I(N,E){const _=u(`${N}/weights`,4,`${E}/filters`),A=u(`${N}/biases`,1,`${E}/bias`);return{filters:_,bias:A}}function S(N){const E=I(`Prediction/BoxPredictor_${N}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${N}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${N}/ClassPredictor`,`prediction_layer/box_predictor_${N}/class_predictor`);return{box_encoding_predictor:E,class_predictor:_}}function x(){return{conv_0:d("Prediction",0,"prediction_layer/conv_0"),conv_1:d("Prediction",1,"prediction_layer/conv_1"),conv_2:d("Prediction",2,"prediction_layer/conv_2"),conv_3:d("Prediction",3,"prediction_layer/conv_3"),conv_4:d("Prediction",4,"prediction_layer/conv_4"),conv_5:d("Prediction",5,"prediction_layer/conv_5"),conv_6:d("Prediction",6,"prediction_layer/conv_6"),conv_7:d("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:g,extractPredictionLayerParams:x}}function ZD(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:d}=Oee(r,l),f=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Tr(f))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${f}`);const g={mobilenetv1:u(),prediction_layer:d(),output_layer:{extra_dim:f}};return jn(r,l),{params:g,paramMappings:l}}const vo=He(Ze());function Js(r,l,u){return vo.tidy(()=>{let d=vo.conv2d(r,l.filters,u,"same");return d=vo.add(d,l.batch_norm_offset),vo.clipByValue(d,0,6)})}const Er=He(Ze()),Eee=.0010000000474974513;function Dee(r,l,u){return Er.tidy(()=>{let d=Er.depthwiseConv2d(r,l.filters,u,"same");return d=Er.batchNorm(d,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,Eee),Er.clipByValue(d,0,6)})}function kee(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function QD(r,l){return Er.tidy(()=>{let u,d=Js(r,l.conv_0,[2,2]);const f=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(f.forEach((g,I)=>{const S=I+1,x=kee(S);d=Dee(d,g.depthwise_conv,x),d=Js(d,g.pointwise_conv,[1,1]),S===11&&(u=d)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:d,conv11:u}})}function ek(r,l,u,d,f){const g=r.shape[0],I=Math.min(u,g),S=l.map((E,_)=>({score:E,boxIndex:_})).filter(E=>E.score>f).sort((E,_)=>_.score-E.score),x=E=>E<=d?1:0,N=[];return S.forEach(E=>{if(N.length>=I)return;const _=E.score;for(let A=N.length-1;A>=0;--A){const U=Fee(r,E.boxIndex,N[A]);if(U===0)continue;if(E.score*=x(U),E.score<=f)break}_===E.score&&N.push(E.boxIndex)}),N}function Fee(r,l,u){const d=r.arraySync(),f=Math.min(d[l][0],d[l][2]),g=Math.min(d[l][1],d[l][3]),I=Math.max(d[l][0],d[l][2]),S=Math.max(d[l][1],d[l][3]),x=Math.min(d[u][0],d[u][2]),N=Math.min(d[u][1],d[u][3]),E=Math.max(d[u][0],d[u][2]),_=Math.max(d[u][1],d[u][3]),A=(I-f)*(S-g),U=(E-x)*(_-N);if(A<=0||U<=0)return 0;const ne=Math.max(f,x),Q=Math.max(g,N),M=Math.min(I,E),fe=Math.min(S,_),ie=Math.max(M-ne,0)*Math.max(fe-Q,0);return ie/(A+U-ie)}const ke=He(Ze());function _ee(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],d=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:d}}function Wee(r,l){const{sizes:u,centers:d}=_ee(r),f=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(f[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(f[0],ke.scalar(10)),u[0]),d[0]),S=ke.div(ke.mul(ke.exp(ke.div(f[3],ke.scalar(5))),u[1]),ke.scalar(2)),x=ke.add(ke.mul(ke.div(f[1],ke.scalar(10)),u[1]),d[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(x,S),ke.add(I,g),ke.add(x,S)]),[1,0])}function tk(r,l,u){return ke.tidy(()=>{const d=r.shape[0];let f=Wee(ke.reshape(ke.tile(u.extra_dim,[d,1,1]),[-1,4]),ke.reshape(r,[-1,4]));f=ke.reshape(f,[d,f.shape[0]/d,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[d,I.shape[1]]);const S=ke.unstack(f),x=ke.unstack(I);return{boxes:S,scores:x}})}const cd=He(Ze());function va(r,l){return cd.tidy(()=>{const u=r.shape[0],d=cd.reshape(xa(r,l.box_encoding_predictor),[u,-1,1,4]),f=cd.reshape(xa(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:d,classPrediction:f}})}const ld=He(Ze());function nk(r,l,u){return ld.tidy(()=>{const d=Js(r,u.conv_0,[1,1]),f=Js(d,u.conv_1,[2,2]),g=Js(f,u.conv_2,[1,1]),I=Js(g,u.conv_3,[2,2]),S=Js(I,u.conv_4,[1,1]),x=Js(S,u.conv_5,[2,2]),N=Js(x,u.conv_6,[1,1]),E=Js(N,u.conv_7,[2,2]),_=va(l,u.box_predictor_0),A=va(r,u.box_predictor_1),U=va(f,u.box_predictor_2),ne=va(I,u.box_predictor_3),Q=va(x,u.box_predictor_4),M=va(E,u.box_predictor_5),fe=ld.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,U.boxPredictionEncoding,ne.boxPredictionEncoding,Q.boxPredictionEncoding,M.boxPredictionEncoding],1),ie=ld.concat([_.classPrediction,A.classPrediction,U.classPrediction,ne.classPrediction,Q.classPrediction,M.classPrediction],1);return{boxPredictions:fe,classPredictions:ie}})}class xi{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const Ti=He(Ze());class dl extends Un{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Ti.tidy(()=>{const u=Ti.cast(r.toBatchTensor(512,!1),"float32"),d=Ti.sub(Ti.mul(u,Ti.scalar(.007843137718737125)),Ti.scalar(1)),f=QD(d,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=nk(f.out,f.conv11,l.prediction_layer);return tk(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Wt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:d}=new xi(l),f=await Wt(r),{boxes:g,scores:I}=this.forwardInput(f),S=g[0],x=I[0];for(let ie=1;ie{const[we,Ae]=[Math.max(0,M[ie][0]),Math.min(1,M[ie][2])].map(ct=>ct*Q),[Me,et]=[Math.max(0,M[ie][1]),Math.min(1,M[ie][3])].map(ct=>ct*ne);return new Jt(N[ie],new Wu(Me,we,et-Me,Ae-we),{height:f.getInputHeight(0),width:f.getInputWidth(0)})});return S.dispose(),x.dispose(),fe}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ZD(r)}extractParams(r){return JD(r)}}function sk(r){const l=new dl;return l.extractWeights(r),l}function $ee(r){return sk(r)}class Uee extends dl{}const ik=.4,rk=[new Qe(.738768,.874946),new Qe(2.42204,2.65704),new Qe(4.30971,7.04493),new Qe(10.246,4.59428),new Qe(12.6868,11.8741)],ok=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],ak=[117.001,114.697,97.404],ck="tiny_yolov2_model",lk="tiny_yolov2_separable_conv_model";const ty=r=>typeof r=="number";function Ux(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!ty(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>ty(l.x)&&ty(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(ty)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Zs=He(Ze());function pl(r){return Zs.tidy(()=>{const l=Zs.mul(r,Zs.scalar(.10000000149011612));return Zs.add(Zs.relu(Zs.sub(r,l)),l)})}const Qs=He(Ze());function Dr(r,l){return Qs.tidy(()=>{let u=Qs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Qs.conv2d(u,l.conv.filters,[1,1],"valid"),u=Qs.sub(u,l.bn.sub),u=Qs.mul(u,l.bn.truediv),u=Qs.add(u,l.conv.bias),pl(u)})}const No=He(Ze());function kr(r,l){return No.tidy(()=>{let u=No.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=No.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=No.add(u,l.bias),pl(u)})}const Bx=He(Ze());function Bee(r,l){const u=rl(r,l);function d(I,S){const x=Bx.tensor1d(r(I)),N=Bx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:N}}function f(I,S,x){const N=u(I,S,3,`${x}/conv`),E=d(S,`${x}/bn`);return{conv:N,bn:E}}const g=ol(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}}function hk(r,l,u,d){const{extractWeights:f,getRemainingWeights:g}=Kn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:N}=Bee(f,I);let E;if(l.withSeparableConvs){const[_,A,U,ne,Q,M,fe,ie,we]=d,Ae=l.isFirstLayerConv2d?S(_,A,3,"conv0"):N(_,A,"conv0"),Me=N(A,U,"conv1"),et=N(U,ne,"conv2"),ct=N(ne,Q,"conv3"),$t=N(Q,M,"conv4"),Vt=N(M,fe,"conv5"),je=ie?N(fe,ie,"conv6"):void 0,hn=we?N(ie,we,"conv7"):void 0,bt=S(we||ie||fe,5*u,1,"conv8");E={conv0:Ae,conv1:Me,conv2:et,conv3:ct,conv4:$t,conv5:Vt,conv6:je,conv7:hn,conv8:bt}}else{const[_,A,U,ne,Q,M,fe,ie,we]=d,Ae=x(_,A,"conv0"),Me=x(A,U,"conv1"),et=x(U,ne,"conv2"),ct=x(ne,Q,"conv3"),$t=x(Q,M,"conv4"),Vt=x(M,fe,"conv5"),je=x(fe,ie,"conv6"),hn=x(ie,we,"conv7"),bt=S(we,5*u,1,"conv8");E={conv0:Ae,conv1:Me,conv2:et,conv3:ct,conv4:$t,conv5:Vt,conv6:je,conv7:hn,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:E,paramMappings:I}}function Mee(r,l){const u=ws(r,l);function d(S){const x=u(`${S}/sub`,1),N=u(`${S}/truediv`,1);return{sub:x,truediv:N}}function f(S){const x=u(`${S}/filters`,4),N=u(`${S}/bias`,1);return{filters:x,bias:N}}function g(S){const x=f(`${S}/conv`),N=d(`${S}/bn`);return{conv:x,bn:N}}const I=al(u);return{extractConvParams:f,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function uk(r,l){const u=[],{extractConvParams:d,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}=Mee(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?d("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:d("conv8")}}else I={conv0:f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:f("conv6"),conv7:f("conv7"),conv8:d("conv8")};return jn(r,u),{params:I,paramMappings:u}}var Mx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(Mx||(Mx={}));class Fr{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=He(Ze());class ml extends Un{constructor(r){super("TinyYolov2");Ux(r),this._config=r}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(r,l){let u=Dr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=Dr(u,l.conv6),u=Dr(u,l.conv7),xa(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?pl(xa(r,l.conv0,"valid",!1)):kr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?kr(u,l.conv6):u,u=l.conv7?kr(u,l.conv7):u,xa(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let d=Mt.cast(r.toBatchTensor(l,!1),"float32");return d=this.config.meanRgb?yi(d,this.config.meanRgb):d,d=d.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(d,u):this.runTinyYolov2(d,u)})}async forward(r,l){return await this.forwardInput(await Wt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:d}=new Fr(l),f=await Wt(r),g=await this.forwardInput(f,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:f.getInputWidth(0),height:f.getInputHeight(0)},x=await this.extractBoxes(I,f.getReshapedInputDimensions(0),d);g.dispose(),I.dispose();const N=x.map(Q=>Q.box),E=x.map(Q=>Q.score),_=x.map(Q=>Q.classScore),A=x.map(Q=>this.config.classes[Q.label]),U=dI(N.map(Q=>Q.rescale(u)),E,this.config.iouThreshold,!0),ne=U.map(Q=>new Pc(E[Q],_[Q],A[Q],N[Q],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return uk(r,this.config)}extractParams(r){const l=this.config.filterSizes||ml.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return hk(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:d,height:f}=l,g=Math.max(d,f),I=g/d,S=g/f,x=r.shape[1],N=this.config.anchors.length,[E,_,A]=Mt.tidy(()=>{const M=r.reshape([x,x,N,this.boxEncodingSize]),fe=M.slice([0,0,0,0],[x,x,N,4]),ie=M.slice([0,0,0,4],[x,x,N,1]),we=this.withClassScores?Mt.softmax(M.slice([0,0,0,5],[x,x,N,this.config.classes.length]),3):Mt.scalar(0);return[fe,ie,we]}),U=[],ne=await _.array(),Q=await E.array();for(let M=0;Mu){const Ae=(fe+_u(Q[M][fe][ie][0]))/x*I,Me=(M+_u(Q[M][fe][ie][1]))/x*S,et=Math.exp(Q[M][fe][ie][2])*this.config.anchors[ie].x/x*I,ct=Math.exp(Q[M][fe][ie][3])*this.config.anchors[ie].y/x*S,$t=Ae-et/2,Vt=Me-ct/2,je={row:M,col:fe,anchor:ie},{classScore:hn,label:bt}=this.withClassScores?await this.extractPredictedClass(A,je):{classScore:1,label:0};U.push({box:new Fu($t,Vt,$t+et,Vt+ct),score:we,classScore:we*hn,label:bt,...je})}}return E.dispose(),_.dispose(),A.dispose(),U}async extractPredictedClass(r,l){const{row:u,col:d,anchor:f}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][d][f][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}ml.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class hd extends ml{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:ik,classes:["face"]},r?{anchors:ok,meanRgb:ak}:{anchors:rk,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(d=>new Jt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?lk:ck}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function Pee(r,l=!0){const u=new hd(l);return u.extractWeights(r),u}class Px extends Fr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Ai{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const zx=He(Ze());async function Na(r,l,u,d,f=({alignedRect:g})=>g){const g=r.map(x=>Aa(x)?f(x):x.detection),I=d||(l instanceof zx.Tensor?await sl(l,g):await nl(l,g)),S=await u(I);return I.forEach(x=>x instanceof zx.Tensor&&x.dispose()),S}async function fl(r,l,u,d,f){return Na([r],l,async g=>u(g[0]),d,f)}const dk=.4,pk=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],mk=[117.001,114.697,97.404];class ud extends ml{constructor(){const r={withSeparableConvs:!0,iouThreshold:dk,classes:["face"],anchors:pk,meanRgb:mk,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(d=>new Jt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const yt={ssdMobilenetv1:new dl,tinyFaceDetector:new ud,tinyYolov2:new hd,faceLandmark68Net:new rd,faceLandmark68TinyNet:new _x,faceRecognitionNet:new ad,faceExpressionNet:new Ox,ageGenderNet:new Fx},fk=(r,l)=>yt.ssdMobilenetv1.locateFaces(r,l),zee=(r,l)=>yt.tinyFaceDetector.locateFaces(r,l),Vee=(r,l)=>yt.tinyYolov2.locateFaces(r,l),gk=r=>yt.faceLandmark68Net.detectLandmarks(r),Gee=r=>yt.faceLandmark68TinyNet.detectLandmarks(r),Yee=r=>yt.faceRecognitionNet.computeFaceDescriptor(r),Hee=r=>yt.faceExpressionNet.predictExpressions(r),qee=r=>yt.ageGenderNet.predictAgeAndGender(r),yk=r=>yt.ssdMobilenetv1.load(r),jee=r=>yt.tinyFaceDetector.load(r),Kee=r=>yt.tinyYolov2.load(r),Xee=r=>yt.faceLandmark68Net.load(r),Jee=r=>yt.faceLandmark68TinyNet.load(r),Zee=r=>yt.faceRecognitionNet.load(r),Qee=r=>yt.faceExpressionNet.load(r),ete=r=>yt.ageGenderNet.load(r),tte=yk,nte=fk,ste=gk;class bk extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class md extends bk{async run(){const r=await this.parentTask,l=await Na(r,this.input,async u=>await Promise.all(u.map(d=>yt.faceExpressionNet.predictExpressions(d))),this.extractedFaces);return r.map((u,d)=>jg(u,l[d]))}withAgeAndGender(){return new dd(this,this.input)}}class fd extends bk{async run(){const r=await this.parentTask;if(!r)return;const l=await fl(r,this.input,u=>yt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return jg(r,l)}withAgeAndGender(){return new pd(this,this.input)}}class bl extends md{withAgeAndGender(){return new gl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class wl extends fd{withAgeAndGender(){return new yl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class wk extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class dd extends wk{async run(){const r=await this.parentTask,l=await Na(r,this.input,async u=>await Promise.all(u.map(d=>yt.ageGenderNet.predictAgeAndGender(d))),this.extractedFaces);return r.map((u,d)=>{const{age:f,gender:g,genderProbability:I}=l[d];return Qg(ey(u,g,I),f)})}withFaceExpressions(){return new md(this,this.input)}}class pd extends wk{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:d}=await fl(r,this.input,f=>yt.ageGenderNet.predictAgeAndGender(f),this.extractedFaces);return Qg(ey(r,u,d),l)}withFaceExpressions(){return new fd(this,this.input)}}class gl extends dd{withFaceExpressions(){return new bl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class yl extends pd{withFaceExpressions(){return new wl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class Vx extends Ai{constructor(r,l){super();this.parentTask=r;this.input=l}}class Ca extends Vx{async run(){const r=await this.parentTask,l=await Na(r,this.input,u=>Promise.all(u.map(d=>yt.faceRecognitionNet.computeFaceDescriptor(d))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,d)=>Zg(r[d],u))}withFaceExpressions(){return new bl(this,this.input)}withAgeAndGender(){return new gl(this,this.input)}}class Ra extends Vx{async run(){const r=await this.parentTask;if(!r)return;const l=await fl(r,this.input,u=>yt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return Zg(r,l)}withFaceExpressions(){return new wl(this,this.input)}withAgeAndGender(){return new yl(this,this.input)}}const gd=He(Ze());class Gx extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?yt.faceLandmark68TinyNet:yt.faceLandmark68Net}}class Yx extends Gx{async run(){const r=await this.parentTask,l=r.map(f=>f.detection),u=this.input instanceof gd.Tensor?await sl(this.input,l):await nl(this.input,l),d=await Promise.all(u.map(f=>this.landmarkNet.detectLandmarks(f)));return u.forEach(f=>f instanceof gd.Tensor&&f.dispose()),r.map((f,g)=>hl(f,d[g]))}withFaceExpressions(){return new bl(this,this.input)}withAgeAndGender(){return new gl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class Hx extends Gx{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof gd.Tensor?await sl(this.input,[l]):await nl(this.input,[l]),d=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(f=>f instanceof gd.Tensor&&f.dispose()),hl(r,d)}withFaceExpressions(){return new wl(this,this.input)}withAgeAndGender(){return new yl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class qx extends Ai{constructor(r,l=new xi){super();this.input=r;this.options=l}}class ny extends qx{async run(){const{input:r,options:l}=this,u=l instanceof Px?d=>yt.tinyFaceDetector.locateFaces(d,l):l instanceof xi?d=>yt.ssdMobilenetv1.locateFaces(d,l):l instanceof Fr?d=>yt.tinyYolov2.locateFaces(d,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>ha({},u)))})}withFaceLandmarks(r=!1){return new Yx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new md(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new dd(this.runAndExtendWithFaceDetections(),this.input)}}class jx extends qx{async run(){const r=await new ny(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?ha({},l):void 0)})}withFaceLandmarks(r=!1){return new Hx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new fd(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new pd(this.runAndExtendWithFaceDetection(),this.input)}}function ite(r,l=new xi){return new jx(r,l)}function sy(r,l=new xi){return new ny(r,l)}async function Lk(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await sy(r,new xi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function rte(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await sy(r,new Fr(l)).withFaceLandmarks().withFaceDescriptors()}const ote=Lk;function Kx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),d=Array.from(l);return Math.sqrt(u.map((f,g)=>f-d[g]).reduce((f,g)=>f+Math.pow(g,2),0))}class Sk{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let d=1;const f=()=>`person ${d++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof la)return g;if(g instanceof Float32Array)return new la(f(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new la(f(),[g.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(r,l){return l.map(u=>Kx(u,r)).reduce((u,d)=>u+d,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new uf(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>la.fromJSON(u));return new Sk(l,r.distanceThreshold)}}function ate(r){const l=new ud;return l.extractWeights(r),l}function Ik(r,l){const{width:u,height:d}=new ys(l.width,l.height);if(u<=0||d<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:d})}`);if(Array.isArray(r))return r.map(f=>Ik(f,{width:u,height:d}));if(Aa(r)){const f=r.detection.forSize(u,d),g=r.unshiftedLandmarks.forSize(f.box.width,f.box.height);return hl(ha(r,f),g)}return Vi(r)?ha(r,r.detection.forSize(u,d)):r instanceof js||r instanceof Jt?r.forSize(u,d):r}var xk="0.8.5";$c(exports,{AgeGenderNet:()=>Fx,BoundingBox:()=>Fu,Box:()=>_t,ComposableTask:()=>Ai,ComputeAllFaceDescriptorsTask:()=>Ca,ComputeFaceDescriptorsTaskBase:()=>Vx,ComputeSingleFaceDescriptorTask:()=>Ra,DetectAllFaceLandmarksTask:()=>Yx,DetectAllFacesTask:()=>ny,DetectFaceLandmarksTaskBase:()=>Gx,DetectFacesTaskBase:()=>qx,DetectSingleFaceLandmarksTask:()=>Hx,DetectSingleFaceTask:()=>jx,Dimensions:()=>ys,FACE_EXPRESSION_LABELS:()=>Rx,FaceDetection:()=>Jt,FaceDetectionNet:()=>Uee,FaceExpressionNet:()=>Ox,FaceExpressions:()=>Ta,FaceLandmark68Net:()=>rd,FaceLandmark68TinyNet:()=>_x,FaceLandmarkNet:()=>xee,FaceLandmarks:()=>js,FaceLandmarks5:()=>A9,FaceLandmarks68:()=>$u,FaceMatch:()=>uf,FaceMatcher:()=>Sk,FaceRecognitionNet:()=>ad,Gender:()=>Or,LabeledBox:()=>df,LabeledFaceDescriptors:()=>la,NetInput:()=>Io,NeuralNetwork:()=>Un,ObjectDetection:()=>Pc,Point:()=>Qe,PredictedBox:()=>v9,Rect:()=>Wu,SsdMobilenetv1:()=>dl,SsdMobilenetv1Options:()=>xi,TinyFaceDetector:()=>ud,TinyFaceDetectorOptions:()=>Px,TinyYolov2:()=>hd,TinyYolov2Options:()=>Fr,TinyYolov2SizeType:()=>Mx,allFaces:()=>ote,allFacesSsdMobilenetv1:()=>Lk,allFacesTinyYolov2:()=>rte,awaitMediaLoaded:()=>SI,bufferToImage:()=>II,computeFaceDescriptor:()=>Yee,createCanvas:()=>Vc,createCanvasFromMedia:()=>Bu,createFaceDetectionNet:()=>$ee,createFaceRecognitionNet:()=>vee,createSsdMobilenetv1:()=>sk,createTinyFaceDetector:()=>ate,createTinyYolov2:()=>Pee,detectAllFaces:()=>sy,detectFaceLandmarks:()=>gk,detectFaceLandmarksTiny:()=>Gee,detectLandmarks:()=>ste,detectSingleFace:()=>ite,draw:()=>Dx,env:()=>St,euclideanDistance:()=>Kx,extendWithAge:()=>Qg,extendWithFaceDescriptor:()=>Zg,extendWithFaceDetection:()=>ha,extendWithFaceExpressions:()=>jg,extendWithFaceLandmarks:()=>hl,extendWithGender:()=>ey,extractFaceTensors:()=>sl,extractFaces:()=>nl,fetchImage:()=>fee,fetchJson:()=>vx,fetchNetWeights:()=>gee,fetchOrThrow:()=>Ia,getContext2dOrThrow:()=>as,getMediaDimensions:()=>da,imageTensorToCanvas:()=>xI,imageToSquare:()=>Ax,inverseSigmoid:()=>S9,iou:()=>hI,isMediaElement:()=>gf,isMediaLoaded:()=>Uu,isWithAge:()=>Nee,isWithFaceDetection:()=>Vi,isWithFaceExpressions:()=>Ex,isWithFaceLandmarks:()=>Aa,isWithGender:()=>Cee,loadAgeGenderModel:()=>ete,loadFaceDetectionModel:()=>tte,loadFaceExpressionModel:()=>Qee,loadFaceLandmarkModel:()=>Xee,loadFaceLandmarkTinyModel:()=>Jee,loadFaceRecognitionModel:()=>Zee,loadSsdMobilenetv1Model:()=>yk,loadTinyFaceDetectorModel:()=>jee,loadTinyYolov2Model:()=>Kee,loadWeightMap:()=>Nx,locateFaces:()=>nte,matchDimensions:()=>yee,minBbox:()=>uI,nets:()=>yt,nonMaxSuppression:()=>dI,normalize:()=>yi,padToSquare:()=>pI,predictAgeAndGender:()=>qee,recognizeFaceExpressions:()=>Hee,resizeResults:()=>Ik,resolveInput:()=>ua,shuffleArray:()=>L9,sigmoid:()=>_u,ssdMobilenetv1:()=>fk,tf:()=>cte,tinyFaceDetector:()=>zee,tinyYolov2:()=>Vee,toNetInput:()=>Wt,utils:()=>oI,validateConfig:()=>Ux,version:()=>ute});const cte=He(Ze()),lte=typeof process!="undefined",hte=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",ute={faceapi:xk,node:lte,browser:hte}; + with dtype ${I.dtype}. `)});const d=(I,S)=>{const x=ft(l,u[0].shape)[0],N=JO(u.map(A=>A.shape),x);if(Zt(N)===0)return PI([],N);if(u=u.filter(A=>A.size>0),u.length===1)return u[0];const E=u.map(A=>A.shape);XO(E,x);const _=I.concat(u,x);return S(u),_},f=u,g={axis:l};return H.runKernelFunc(d,f,null,Tf,g)}const An=V({concat_:gZ});function yZ(r){const l=P(r,"x","sigmoid"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sigmoid(l);return f([g]),g},u,null,sg)}const qI=V({sigmoid_:yZ});function bZ(r,l,u){const d=P(r,"x","slice");if(d.rank===0)throw new Error("Slicing scalar is not possible");const f=(S,x)=>{const[N,E]=Ig(d,l,u);return YO(d,N,E),x([d]),S.slice(d,N,E)},g={x:d},I={begin:l,size:u};return H.runKernelFunc(f,g,null,eg,I)}const Tt=V({slice_:bZ});function wZ(r,l,u){const d=P(r,"x","batchToSpaceND"),f=l.reduce((x,N)=>x*N);J(d.rank>=1+l.length,()=>`input rank is ${d.rank} but should be > than blockShape.length ${l.length}`),J(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),J(d.shape[0]%f===0,()=>`input tensor batch is ${d.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${f}`);const g=x=>x.batchToSpaceND(d,l,u),I={x:d},S={blockShape:l,crops:u};return H.runKernelFunc(g,I,null,If,S)}const jI=V({batchToSpaceND_:wZ});function LZ(r,l){let u=P(r,"broadcastTo","x");const d=u.shape;if(l.some(E=>!(E>0)||E%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const E=u.shape.slice();for(;E.length=0;E--)if(f[E]===l[E])g[E]=1;else if(u.shape[E]!==1)throw new Error(`broadcastTo(): [${d}] cannot be broadcast to [${l}].`);const I=g.map((E,_)=>E>1?_:-1).filter(E=>E>=0);if(I.length===0)return bi(u);const S=E=>E.tile(u,g),x={x:u},N={shape:l,inputShape:f};return H.runKernelFunc(S,x,null,xf,N)}const vg=V({broadcastTo_:LZ});function SZ(r,l,u,d,f="NHWC",g=[1,1],I){const S=P(r,"x","conv2d"),x=P(l,"filter","conv2d");let N=S,E=!1;S.rank===3&&(E=!0,N=oe(S,[1,S.shape[0],S.shape[1],S.shape[2]])),J(N.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${N.rank}.`),J(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&J(nn(d),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${d}.`);const _=f==="NHWC"?N.shape[3]:N.shape[1];J(_===x.shape[2],()=>`Error in conv2d: depth of input (${_}) must match input depth for filter ${x.shape[2]}.`),J(bo(u,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${g}'`);const A=(M,fe)=>{const ie=Zc(f),we=wi(N.shape,x.shape,u,g,d,I,!1,ie),Ae=M.conv2d(N,x,we);return fe([N,x]),Ae},U={x:N,filter:x},ne={strides:u,pad:d,dataFormat:f,dilations:g,dimRoundingMode:I},Q=H.runKernelFunc(A,U,null,Af,ne);return E?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3]]):Q}const KI=V({conv2d_:SZ});function IZ(r,l,u,d,f,g="NHWC",I){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,N=!1;l.rank===3&&(N=!0,x=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),J(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),J(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),J(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const E=g==="NHWC"?S[3]:S[1],_=g==="NHWC"?x.shape[3]:x.shape[1];J(E===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${E}) must match input depth for filter ${u.shape[2]}.`),J(_===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${_}) must match output depth for filter ${u.shape[3]}.`),I!=null&&J(nn(f),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const A=(M,fe)=>{const ie=1,we=Zc(g),Ae=wi(S,u.shape,d,ie,f,I,!1,we),Me=M.conv2dDerInput(x,u,Ae);return fe([x,u]),Me},U={dy:x,filter:u},ne={strides:d,pad:f,dataFormat:g,dimRoundingMode:I,inputShape:S},Q=H.runKernelFunc(A,U,null,vf,ne);return N?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3]]):Q}const ZO=V({conv2DBackpropInput_:IZ});function xZ(r,l,u,d,f){J(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,I=l,S=!1;l.rank===4&&(S=!0,I=oe(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),g=[1,r[0],r[1],r[2],r[3]]);const x=g[4],N=I.shape[4];J(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),J(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),J(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),J(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),J(N===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${N}) must match output depth for filter ${u.shape[4]}.`);const E=ne=>{const Q=1,M=Ku(g,u.shape,d,Q,f);return ne.conv3dDerInput(I,u,M)},_={dy:I,filter:u},A={pad:f,strides:d,inputShape:g},U=H.runKernelFunc(E,_,null,wR,A);return S?oe(U,[U.shape[1],U.shape[2],U.shape[3],U.shape[4]]):U}const QO=V({conv3DBackpropInput_:xZ});function TZ(r){const l=P(r,"x","cos"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.cos(l);return f([l]),g},u,null,Nf)}const Xu=V({cos_:TZ});function AZ(r){const l=P(r,"x","cosh"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.cosh(l);return f([l]),g},u,null,Cf)}const XI=V({cosh_:AZ});function vZ(r,l=0,u=!1,d=!1){const f=P(r,"x","cumsum"),g=(x,N)=>{const E=ji([l],f.rank);let _=f;E!=null&&(_=Tn(f,E));const A=go(1,f.rank)[0];let U=x.cumsum(_,A,u,d);if(N([f]),E!=null){const ne=Xc(E);U=Tn(U,ne)}return U},I={x:f},S={axis:l,exclusive:u,reverse:d};return H.runKernelFunc(g,I,null,Rf,S)}const JI=V({cumsum_:vZ});function Ot(r,l){const u=[];for(let d=0;d1)&&u.unshift(g)}return u}function at(r,l){const u=[],d=Math.max(r.length,l.length);for(let f=0;fI.equal(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,OR)}const ZI=V({equal_:NZ});function CZ(r,l,u){const d=P(l,"a","where"),f=P(u,"b","where"),g=P(r,"condition","where","bool"),I=at(d.shape,f.shape),S=vg(d,I),x=vg(f,I);g.rank===1&&J(g.shape[0]===d.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&tn(g.shape,x.shape,"Error in where: ");const N=(_,A)=>{const U=_.select(g,S,x);return A([g]),U},E={condition:g,t:S,e:x};return H.runKernelFunc(N,E,null,Qf)}const Hn=V({where_:CZ});function RZ(r){const l=P(r,"x","zerosLike"),u={x:l};return H.runKernelFunc(d=>d.zerosLike(l),u,null,mg)}const Xe=V({zerosLike_:RZ});function OZ(r){const l=P(r,"x","exp"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.exp(l);return f([g]),g},u,null,Ef)}const qn=V({exp_:OZ});function EZ(r,l=0){const u=null,d=P(r,"x","expandDims",u);J(l<=d.rank,()=>"Axis must be <= rank of the tensor");const f=d.shape.slice();return l<0&&(J(-(d.rank+1)<=l,()=>`Axis must be in the interval [${-(d.rank+1)}, ${d.rank}]`),l=d.rank+l+1),f.splice(l,0,1),oe(d,f)}const _s=V({expandDims_:EZ});function DZ(r,l){const u=null,d=P(r,"x","tile",u);J(d.rank===l.length,()=>`Error in transpose: rank of input ${d.rank} must match length of reps ${l}.`);const f=(x,N)=>{const E=x.tile(d,l);return N([d]),E},g=[d],I={x:d},S={reps:l};return H.runKernelFunc(f,I,null,hg,S,g)}const ga=V({tile_:DZ});function kZ(r,l,u,d="float32"){l==null&&(l=r);const f=ju([r,l],d),g=r<=l?r:l;for(let S=0;Sf.fill(r,l,u),{},null,kR,d)}function FZ(r){const l=P(r,"x","floor"),u={x:l};return H.runKernelFunc(d=>d.floor(l),u,null,Df)}const tx=V({floor_:FZ});function e1(r,l,u){const d=r.shape[u],f=[];let g=1,I=1;for(let S=0;S{const E=ft(u,d.shape)[0],_=e1(d,f,E),A=x.gather(d,oe(f,[f.size]),E);return N([d,f]),oe(A,_.outputShape)};return H.runKernelFunc(S,g,null,Ff,I)}const nx=V({gather_:_Z});function WZ(r,l){let u=P(r,"a","greater"),d=P(l,"b","greater");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.greater(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,WR)}const Li=V({greater_:WZ});function $Z(r,l){let u=P(r,"a","greaterEqual"),d=P(l,"b","greaterEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(I,S)=>{const x=I.greaterEqual(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,_f)}const Nr=V({greaterEqual_:$Z});function UZ(r){const l=P(r,"input","imag"),u=f=>f.imag(l),d={input:l};return H.runKernelFunc(u,d,null,UR)}const Ju=V({imag_:UZ});function BZ(r,l){let u=P(r,"a","maximum"),d=P(l,"b","maximum");[u,d]=Lt(u,d),u.dtype==="bool"&&(u=Ie(u,"int32"),d=Ie(d,"int32")),at(u.shape,d.shape);const f=(I,S)=>{const x=I.maximum(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,Mf)}const sx=V({maximum_:BZ});function Fe(r,l){if((ks(r)&&l!=="string"||Array.isArray(r))&&l!=="complex64")throw new Error("Error creating a new Scalar: value must be a primitive (number|boolean|string)");if(l==="string"&&ks(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],d=[];return qi(r,u,d,l)}function MZ(r,l){let u=P(r,"a","less"),d=P(l,"b","less");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.less(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,zR)}const ix=V({less_:MZ});function PZ(r,l){let u=P(r,"a","lessEqual"),d=P(l,"b","lessEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(I,S)=>{const x=I.lessEqual(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,VR)}const Cr=V({lessEqual_:PZ});function zZ(r){const l=P(r,"x","log"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.log(l);return f([l]),g},u,null,$f)}const wo=V({log_:zZ});function VZ(r){const l=P(r,"x","log1p"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.log1p(l);return f([l]),g},u,null,Uf)}const rx=V({log1p_:VZ});function Ng(r){return H.customGrad(r)}function GZ(r){const l=P(r,"x","neg"),u={x:l};return H.runKernelFunc(d=>d.neg(l),u,null,Gf)}const It=V({neg_:GZ});function YZ(r,l=null,u=!1){const d=P(r,"x","max"),f=(S,x)=>{const N=ft(l,d.shape);let E=N;const _=ji(E,d.rank);let A=d;_!=null&&(A=Tn(d,_),E=go(E.length,A.rank));const U=S.max(A,E);_!=null&&A.dispose();let ne=U;if(u){const Q=cs(ne.shape,ft(l,d.shape));ne=oe(ne,Q),U.dispose()}return x([d,ne]),ne},g={x:d},I={reductionIndices:l,keepDims:u};return H.runKernelFunc(f,g,null,Bf,I)}const ya=V({max_:YZ});function HZ(r,l){let u=P(r,"a","sub"),d=P(l,"b","sub");[u,d]=Lt(u,d);const f=(I,S)=>{const x=I.subtract(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,lg)}const Be=V({sub_:HZ});function qZ(r,l=null,u=!1){let d=P(r,"x","sum");d.dtype==="bool"&&(d=Ie(d,"int32"));const f=(S,x)=>{x([d]);const N=ft(l,d.shape),E=ji(N,d.rank);let _=N,A=d;E!=null&&(A=Tn(d,E),_=go(_.length,d.rank));let U=S.sum(A,_);if(u){const ne=cs(U.shape,N);U=oe(U,ne)}return U},g={x:d},I={axis:l,keepDims:u};return H.runKernelFunc(f,g,null,rg,I)}const _e=V({sum_:qZ});function jZ(r,l=null,u=!1){const d=P(r,"x","logSumExp"),f=ft(l,d.shape),g=ya(d,f,!0),I=Be(d,g),S=qn(I),x=_e(S,f),N=wo(x),E=vt(oe(g,N.shape),N);if(u){const _=cs(E.shape,f);return oe(E,_)}return E}const ox=V({logSumExp_:jZ});function KZ(r,l){const u=P(r,"a","logicalAnd","bool"),d=P(l,"b","logicalAnd","bool");at(u.shape,d.shape);const f={a:u,b:d};return H.runKernelFunc(g=>g.logicalAnd(u,d),f,null,GR)}const ba=V({logicalAnd_:KZ});function XZ(r){const l=P(r,"x","logicalNot","bool"),u={x:l};return H.runKernelFunc(d=>d.logicalNot(l),u,null,YR)}const ax=V({logicalNot_:XZ});function Ws(r,l="float32"){if(l==="complex64"){const d=Ws(r,"float32"),f=Ws(r,"float32");return Hi(d,f)}const u=ma(Zt(r),l);return H.makeTensor(u,r,l)}function Ki(r,l="float32"){if(l==="complex64"){const d=Ki(r,"float32"),f=Ws(r,"float32");return Hi(d,f)}const u=yf(Zt(r),l);return H.makeTensor(u,r,l)}function JZ(r,l=null,u=!1){const d=P(r,"x","mean"),f=ft(l,d.shape),g=jO(d.shape,f),I=g[1],S=Zt(I),x={x:d},N={axis:l,keepDims:u},E=()=>{const A=Fe(S),U=A.dtype===d.dtype?d:Ie(d,A.dtype),ne=Pe(U,A);return _e(ne,l,u)},_=Ng(A=>{const U=H.runKernelFunc(E,x,null,QR,N),ne=Q=>{const M=A.shape.slice();f.forEach(we=>{M[we]=1});const fe=oe(Q,M),ie=Pe(le(fe,Ki(A.shape,"float32")),S);return ie};return{value:U,gradFunc:ne}});return _(d)}const cx=V({mean_:JZ});function ZZ(r,l=null,u=!1){const d=P(r,"x","min"),f=(S,x)=>{const N=ft(l,d.shape);let E=N;const _=ji(E,d.rank);let A=d;_!=null&&(A=Tn(d,_),E=go(E.length,d.rank));const U=S.min(A,E);_!=null&&A.dispose();let ne=U;if(u){const Q=cs(ne.shape,N);ne=oe(U,Q),U.dispose()}return x([d,ne]),ne},g={x:d},I={axis:l,keepDims:u};return H.runKernelFunc(f,g,null,Pf,I)}const Cg=V({min_:ZZ});function QZ(r,l){let u=P(r,"a","minimum"),d=P(l,"b","minimum");[u,d]=Lt(u,d),u.dtype==="bool"&&(u=Ie(u,"int32"),d=Ie(d,"int32")),at(u.shape,d.shape);const f=(I,S)=>{const x=I.minimum(u,d);return S([u,d]),x},g={a:u,b:d};return H.runKernelFunc(f,g,null,zf)}const lx=V({minimum_:QZ});function eQ(r){const l=P(r,"x","square"),u={},d=[l],f=[];return H.runKernelFunc((g,I)=>(I([l]),g.square(l)),{x:l},null,"Square",u,d,f)}const gt=V({square_:eQ});function tQ(r,l){let u=P(r,"a","notEqual"),d=P(l,"b","notEqual");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=I=>I.notEqual(u,d),g={a:u,b:d};return H.runKernelFunc(f,g,null,nO)}const hx=V({notEqual_:tQ});function nQ(r){const l=P(r,"input","real"),u=f=>f.real(l),d={input:l};return H.runKernelFunc(u,d,null,hO)}const Qc=V({real_:nQ});function sQ(r,l,u=0){const d=P(r,"x","pad");if(d.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const f=(S,x)=>(x([d]),S.pad(d,l,u)),g={paddings:l,constantValue:u},I={x:d};return H.runKernelFunc(f,I,null,Yf,g)}const ux=V({pad_:sQ});function iQ(r,l,u){const d=P(r,"x","spaceToBatchND");J(d.rank>=1+l.length,()=>`input rank ${d.rank} should be > than [blockShape] ${l.length}`),J(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),J(d.shape.reduce((S,x,N)=>N>0&&N<=l.length?S&&(x+u[N-1][0]+u[N-1][1])%l[N-1]===0:S,!0),()=>`input spatial dimensions ${d.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const f=S=>S.spaceToBatchND(d,l,u),g={x:d},I={blockShape:l,paddings:u};return H.runKernelFunc(f,g,null,og,I)}const dx=V({spaceToBatchND_:iQ});function rQ(r,l){let u=P(r,"base","pow"),d=P(l,"exp","pow");[u,d]=Lt(u,d);const f={a:u,b:d},g=(I,S)=>{const x=I.pow(u,d);return S([u,d,x]),x};return H.runKernelFunc(g,f,null,Hf)}const wa=V({pow_:rQ});function Lo(r,l){Gc(r);const u=vr(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const d=null;return qi(r,d,u,l)}function Rg(r,l,u=1,d="float32"){if(u===0)throw new Error("Cannot have a step of zero");const f=()=>{const I=r===l,S=r1;if(I||S||x)return Ws([0],d);const N=Math.abs(Math.ceil((l-r)/u)),E=ma(N,d);l(g([l]),l.dtype==="bool"?Ie(l,"int32"):f.relu(l)),d={x:l};return H.runKernelFunc(u,d,null,qf)}const Zu=V({relu_:oQ});function aQ(r,l){const u=P(r,"x","reverse"),d=I=>{const S=ft(l,u.shape);if(u.rank===0)return bi(u);const x=I.reverse(u,S);return oe(x,u.shape)},f={x:u},g={dims:l};return H.runKernelFunc(d,f,null,Jf,g)}const el=V({reverse_:aQ});function cQ(r){const l=P(r,"x","rsqrt"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.rsqrt(l);return f([l]),g},u,null,Zf)}const px=V({rsqrt_:cQ});function lQ(r){const l=P(r,"x","sin"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sin(l);return f([l]),g},u,null,tg)}const mx=V({sin_:lQ});function hQ(r){const l=P(r,"x","sinh"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sinh(l);return f([l]),g},u,null,ng)}const fx=V({sinh_:hQ});function uQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=r.as2D(f,d),I=u.fft(g);return I.reshape(r.shape)},l,null,DR)}const Qu=V({fft_:uQ});function dQ(r){J(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(u=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=oe(r,[f,d]),I=u.ifft(g);return oe(I,r.shape)},l,null,$R)}const tl=V({ifft_:dQ});function pQ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let d;if(l<=2){const f=oe(r,[u,l]);d=tl(f)}else{const f=[u,2*(l-1)],g=oe(Qc(r),[u,l]),I=oe(Ju(r),[u,l]),S=el(Tt(g,[0,1],[u,l-2]),1),x=le(el(Tt(I,[0,1],[u,l-2]),1),Fe(-1)),N=An([g,S],1),E=An([I,x],1),_=oe(Hi(N,E),[f[0],f[1]]);d=tl(_)}if(d=Qc(d),r.rank===3&&r.shape[0]!==0){const f=d,g=r.shape[0];d=oe(d,[g,d.shape[0]/g,d.shape[1]]),f.dispose()}return d}const gx=V({irfft_:pQ});function t1(r,l,u=0){let d=[];if(typeof l=="number")J(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),d=new Array(l).fill(r.shape[u]/l);else{const f=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);J(f<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[g]=r.shape[u]-I}J(r.shape[u]===l.reduce((I,S)=>I+S),()=>"The sum of sizes must match the size of the axis dimension."),d=l}return d}function mQ(r,l,u=0){const d=P(r,"x","split"),f=(S,x)=>{const N=ft(u,d.shape)[0],E=t1(d,l,N);return S.split(d,E,N)},g={x:d},I={numOrSizeSplits:l,axis:u};return H.runKernelFunc(f,g,null,ag,I)}const So=V({split_:mQ});function fQ(r,l){J(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let u=r.shape[r.shape.length-1];const d=r.size/u;let f;if(l!=null&&l0),Q=r.shape.map(M=>M);Q[r.shape.length-1]=l,f=Tt(r,ne,Q),u=l}else if(l!=null&&l>u){const ne=r.shape.map(Q=>Q);ne[r.shape.length-1]=l-u,f=An([r,Ws(ne)],r.shape.length-1),u=l}else f=r;const g=Xe(f),I=oe(Hi(f,g),[d,u]),S=Qu(I),x=Math.floor(u/2)+1,N=Qc(S),E=Ju(S),_=So(N,[x,u-x],N.shape.length-1),A=So(E,[x,u-x],E.shape.length-1),U=f.shape.slice();return U[f.shape.length-1]=x,oe(Hi(_[0],A[0]),U)}const ed=V({rfft_:fQ});function gQ(r){const l=P(r,"x","sqrt"),u={x:l};return H.runKernelFunc((d,f)=>{const g=d.sqrt(l);return f([l]),g},u,null,ig)}const bs=V({sqrt_:gQ});function yQ(r,l){let u=P(r,"a","squaredDifference"),d=P(l,"b","squaredDifference");[u,d]=Lt(u,d),at(u.shape,d.shape);const f=(S,x)=>{const N=S.squaredDifference(u,d);return x([u,d]),N},g={a:u,b:d},I={};return H.runKernelFunc(f,g,null,cg,I)}const yx=V({squaredDifference_:yQ});function bQ(r,l){const u=P(r,"x","squeeze");return oe(u,z2(u.shape,l).newShape)}const bx=V({squeeze_:bQ});function wQ(r,l=0){const u=Sg(r,"tensors","stack");if(J(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return _s(u[0],l);const d=u[0].rank,f=u[0].shape,g=u[0].dtype;J(l<=d,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{tn(f,S.shape,"All tensors passed to stack must have matching shapes"),J(g===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>_s(S,l));return An(I,l)}const Ks=V({stack_:wQ});function LQ(r,l=0){const u=P(r,"x","step"),d={x:u},f={alpha:l};return H.runKernelFunc(g=>g.step(u,l),d,null,fg,f)}const La=V({step_:LQ});function Sa(r,l,u){if(Gc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const d=vr(r,u);if(d.length!==2&&d.length!==1)throw new Error("tensor2d() requires values to be number[][] or flat/TypedArray");if(d.length===1&&l==null)throw new Error("tensor2d() requires shape to be provided when `values` are a flat/TypedArray");return qi(r,l,d,u)}function SQ(r,l,u){const d=P(r,"x","unsortedSegmentSum"),f=P(l,"segmentIds","unsortedSegmentSum","int32");J(nn(u),()=>"numSegments must be of dtype int");const g={x:d,segmentIds:f},I={numSegments:u},S=(x,N)=>{const E=x.unsortedSegmentSum(d,f,u);return N([f]),E};return H.runKernelFunc(S,g,null,pg,I)}const wx=V({unsortedSegmentSum_:SQ});function IQ(r,l=0){const u=P(r,"x","unstack");J(l>=-u.shape.length&&l`Axis = ${l} is not in [-${u.shape.length}, ${u.shape.length})`),l<0&&(l+=u.shape.length);const d={value:u},f={axis:l},g=I=>I.unstack(u,l);return H.runKernelFunc(g,d,null,dg,f)}const td=V({unstack_:IQ});function xQ(r,l="euclidean",u=null,d=!1){r=P(r,"x","norm");const f=n1(r,l,u);let g=f.shape;if(d){const I=ft(u,r.shape);g=cs(f.shape,I)}return oe(f,g)}function n1(r,l,u=null){if(r.rank===0)return Yn(r);if(r.rank!==1&&u===null)return n1(oe(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return _e(Yn(r),u);if(l===Infinity)return ya(Yn(r),u);if(l===-Infinity)return Cg(Yn(r),u);if(l==="euclidean"||l===2)return bs(_e(wa(Yn(r),Fe(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return ya(_e(Yn(r),u[0]),u[1]-1);if(l===Infinity)return ya(_e(Yn(r),u[1]),u[0]);if(l===-Infinity)return Cg(_e(Yn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return bs(_e(gt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const Og=V({norm_:xQ});function s1(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Eg(r,l,u){const d=1-r%2,f=new Float32Array(r);for(let g=0;g`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),J(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),J(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const N=g==="NHWC"?S.shape[3]:S.shape[1],E=g==="NHWC"?x.shape[3]:x.shape[1];J(N===u[2],()=>`Error in conv2dDerFilter: depth of input ${N}) must match input depth in filter (${u[2]}.`),J(E===u[3],()=>`Error in conv2dDerFilter: depth of dy (${E}) must match output depth for filter (${u[3]}).`),I!=null&&J(nn(f),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const _=ne=>{const Q=1,M=Zc(g),fe=wi(S.shape,u,d,Q,f,I,!1,M);return ne.conv2dDerFilter(S,x,fe)},A={x:S,dy:x},U={strides:d,pad:f,dataFormat:g,dimRoundingMode:I,filterShape:u};return H.runKernelFunc(_,A,null,gR,U)}const Dg=V({conv2DBackpropFilter_:TQ});function AQ(r,l,u,d,f,g=[1,1],I){let S=r;r.rank===3&&(S=oe(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let x=l;x.rank===3&&(x=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const N=A=>{const U=wi(r.shape,u,d,g,f,I,!0);return A.depthwiseConv2DDerFilter(S,x,U)},E={x:S,dy:x},_={strides:d,pad:f,dimRoundingMode:I,dilations:g,filterShape:u};return H.runKernelFunc(N,E,null,IR,_)}const i1=V({depthwiseConv2dNativeBackpropFilter_:AQ});function vQ(r,l,u,d,f,g=[1,1],I){let S=l,x=!1;l.rank===3&&(x=!0,S=oe(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const N=U=>{const ne=wi(r,u.shape,d,g,f,I,!0);return U.depthwiseConv2DDerInput(S,u,ne)},E={dy:S,filter:u},_={strides:d,pad:f,dimRoundingMode:I,dilations:g,inputShape:r},A=H.runKernelFunc(N,E,null,xR,_);return x?oe(A,[A.shape[1],A.shape[2],A.shape[3]]):A}const r1=V({depthwiseConv2dNativeBackpropInput_:vQ});function NQ(r){return Eg(r,.54,.46)}const o1=V({hammingWindow_:NQ});function CQ(r){return Eg(r,.5,.5)}const kg=V({hannWindow_:CQ});function RQ(r,l,u,d=!1,f=0){let g=0;const I=[];for(;g+l<=r.size;)I.push(Tt(r,g,l)),g+=u;if(d)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),J(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${N},4] but had shape ${S.shape}.`),J(x.rank===1&&x.shape[0]===N,()=>`Error in cropAndResize: boxInd must be have size [${N}] but had shape ${S.shape}.`),J(d.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${d.length}.`),J(d[0]>=1&&d[1]>=1,()=>`cropSize must be atleast [1,1], but was ${d}`),J(f==="bilinear"||f==="nearest",()=>`method must be bilinear or nearest, but was ${f}`);const E=ne=>ne.cropAndResize(I,S,x,d,f,g),_={image:I,boxes:S,boxInd:x},A={method:f,extrapolationValue:g,cropSize:d},U=H.runKernelFunc(E,_,null,LR,A);return U}const c1=V({cropAndResize_:EQ});function DQ(r){const l=P(r,"image","flipLeftRight","float32");J(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},d=H.runKernel(FR,u,{});return d}const l1=V({flipLeftRight_:DQ});function kQ(r,l,u=0,d=.5){const f=P(r,"image","rotateWithOffset","float32");J(f.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${f.rank}.`);const g={image:f},I={radians:l,fillValue:u,center:d},S=H.runKernel(xO,g,I);return S}const h1=V({rotateWithOffset_:kQ});function Xs(r,l,u,d,f,g){d==null&&(d=.5),f==null&&(f=Number.NEGATIVE_INFINITY),g==null&&(g=0);const I=r.shape[0];return u=Math.min(u,I),J(0<=d&&d<=1,()=>`iouThreshold must be in [0, 1], but was '${d}'`),J(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),J(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),J(l.rank===1,()=>"scores must be a 1D tensor"),J(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),J(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:u,iouThreshold:d,scoreThreshold:f,softNmsSigma:g}}function FQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY){const g=P(r,"boxes","nonMaxSuppression"),I=P(l,"scores","nonMaxSuppression"),S=Xs(g,I,u,d,f);u=S.maxOutputSize,d=S.iouThreshold,f=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:d,scoreThreshold:f};return H.runKernelFunc(N=>N.nonMaxSuppression(g,I,u,d,f),{boxes:g,scores:I},null,sO,x)}const u1=V({nonMaxSuppression_:FQ});function d1(r,l,u){const d=_Q(r,l,u),f=d<0?-(d+1):d;r.splice(f,0,l)}function _Q(r,l,u){return $Q(r,l,u||WQ)}function WQ(r,l){return r>l?1:r>>1);const S=u(l,r[g]);S>0?d=g+1:(f=g,I=!S)}return I?d:-d-1}function p1(r,l,u,d,f){return Lx(r,l,u,d,f,0).selectedIndices}function m1(r,l,u,d,f,g){return Lx(r,l,u,d,f,0,!1,g,!0)}function f1(r,l,u,d,f,g){return Lx(r,l,u,d,f,g,!0)}function Lx(r,l,u,d,f,g,I=!1,S=!1,x=!1){const N=[];for(let M=0;Mf&&N.push({score:l[M],boxIndex:M,suppressBeginIndex:0});N.sort(g1);const E=g>0?-.5/g:0,_=[],A=[];for(;_.length0;){const M=N.pop(),{score:fe,boxIndex:ie,suppressBeginIndex:we}=M;if(fe=we;--Me){const et=UQ(r,ie,_[Me]);if(et>=d){Ae=!0;break}if(M.score=M.score*BQ(d,E,et),M.score<=f)break}M.suppressBeginIndex=_.length,Ae||(M.score===fe?(_.push(ie),A.push(M.score)):M.score>f&&d1(N,M,g1))}const U=_.length,ne=u-U;S&&ne>0&&(_.push(...new Array(ne).fill(0)),A.push(...new Array(ne).fill(0)));const Q={selectedIndices:Lo(_,"int32")};return I&&(Q.selectedScores=Lo(A,"float32")),x&&(Q.validOutputs=Fe(U,"int32")),Q}function UQ(r,l,u){const d=r.subarray(l*4,l*4+4),f=r.subarray(u*4,u*4+4),g=Math.min(d[0],d[2]),I=Math.min(d[1],d[3]),S=Math.max(d[0],d[2]),x=Math.max(d[1],d[3]),N=Math.min(f[0],f[2]),E=Math.min(f[1],f[3]),_=Math.max(f[0],f[2]),A=Math.max(f[1],f[3]),U=(S-g)*(x-I),ne=(_-N)*(A-E);if(U<=0||ne<=0)return 0;const Q=Math.max(g,N),M=Math.max(I,E),fe=Math.min(S,_),ie=Math.min(x,A),we=Math.max(fe-Q,0)*Math.max(ie-M,0);return we/(U+ne-we)}function BQ(r,l,u){const d=Math.exp(l*u*u);return u<=r?d:0}function g1(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function MQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY){const g=P(r,"boxes","nonMaxSuppressionAsync"),I=P(l,"scores","nonMaxSuppressionAsync"),S=Xs(g,I,u,d,f);u=S.maxOutputSize,d=S.iouThreshold,f=S.scoreThreshold;const x=await Promise.all([g.data(),I.data()]),N=x[0],E=x[1],_=p1(N,E,u,d,f);return g!==r&&g.dispose(),I!==l&&I.dispose(),_}const y1=MQ;function PQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const I=P(r,"boxes","nonMaxSuppression"),S=P(l,"scores","nonMaxSuppression"),x=Xs(I,S,u,d,f,g);u=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const N={boxes:I,scores:S},E={maxOutputSize:u,iouThreshold:d,scoreThreshold:f,softNmsSigma:g},_=H.runKernel(rO,N,E);return{selectedIndices:_[0],selectedScores:_[1]}}const b1=V({nonMaxSuppressionWithScore_:PQ});async function zQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const I=P(r,"boxes","nonMaxSuppressionAsync"),S=P(l,"scores","nonMaxSuppressionAsync"),x=Xs(I,S,u,d,f,g);u=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const N=await Promise.all([I.data(),S.data()]),E=N[0],_=N[1],A=f1(E,_,u,d,f,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),A}const w1=zQ;function VQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const I=P(r,"boxes","nonMaxSuppression"),S=P(l,"scores","nonMaxSuppression"),x=Xs(I,S,u,d,f,null),N=x.maxOutputSize,E=x.iouThreshold,_=x.scoreThreshold,A={boxes:I,scores:S},U={maxOutputSize:N,iouThreshold:E,scoreThreshold:_,padToMaxOutputSize:g},ne=H.runKernel(iO,A,U);return{selectedIndices:ne[0],validOutputs:ne[1]}}const L1=V({nonMaxSuppressionPadded_:VQ});async function GQ(r,l,u,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const I=P(r,"boxes","nonMaxSuppressionAsync"),S=P(l,"scores","nonMaxSuppressionAsync"),x=Xs(I,S,u,d,f,null),N=x.maxOutputSize,E=x.iouThreshold,_=x.scoreThreshold,[A,U]=await Promise.all([I.data(),S.data()]),ne=m1(A,U,N,E,_,g);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const S1=GQ;function YQ(r,l,u=!1){const d=P(r,"images","resizeBilinear");J(d.rank===3||d.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${d.rank}.`),J(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let f=d,g=!1;d.rank===3&&(g=!0,f=oe(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[I,S]=l,x=(A,U)=>(U([f]),A.resizeBilinear(f,I,S,u)),N={images:f},E={alignCorners:u,size:l},_=H.runKernelFunc(x,N,null,Xf,E);return g?oe(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const I1=V({resizeBilinear_:YQ});function HQ(r,l,u=!1){const d=P(r,"images","resizeNearestNeighbor");J(d.rank===3||d.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${d.rank}.`),J(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),J(d.dtype==="float32"||d.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let f=d,g=!1;d.rank===3&&(g=!0,f=oe(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[I,S]=l,x={images:f},N={alignCorners:u,size:l},E=(A,U)=>(U([f]),A.resizeNearestNeighbor(f,I,S,u)),_=H.runKernelFunc(E,x,null,Kf,N);return g?oe(_,[_.shape[1],_.shape[2],_.shape[3]]):_}const x1=V({resizeNearestNeighbor_:HQ});function qQ(r,l,u){J(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),J(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const d=P(r,"a","bandPart");J(d.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${d.rank}.`);const f=d.shape,[g,I]=d.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=g),u<0&&(u=I);const S=oe(Rg(0,g,1,"int32"),[-1,1]),x=Rg(0,I,1,"int32"),N=Be(S,x),E=ba(Cr(N,Fe(+l,"int32")),Nr(N,Fe(-u,"int32"))),_=Ws([g,I],d.dtype);return oe(Ks(td(oe(d,[-1,g,I])).map(A=>Hn(E,A,_))),f)}const T1=V({bandPart_:qQ});function jQ(r){let l;if(Array.isArray(r)){l=!1,J(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const f=r[0].shape[0];for(let g=1;g`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[g].shape[0]} vs. ${f})`)}else l=!0,r=So(r,r.shape[0],0).map(f=>bx(f,[0]));J(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const u=[],d=r;for(let f=0;f{let g=d[f];if(f>0)for(let I=0;I=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return v1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,N)=>x*N),d=td(oe(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),f=[],g=[];d.forEach(x=>{const[N,E]=v1(x,l);f.push(N),g.push(E)});const I=oe(Ks(f,0),r.shape),S=oe(Ks(g,0),r.shape);return[I,S]}}function v1(r,l=!1){return H.tidy(()=>{J(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const u=r.shape[0],d=r.shape[1];let f=QI(u),g=bi(r);const I=Sa([[1]],[1,1]);let S=bi(I);const x=u>=d?d:u;for(let N=0;N{const U=Tt(g,[N,N],[u-N,1]),ne=Og(U),Q=Tt(g,[N,N],[1,1]),M=Hn(Li(Q,0),Sa([[-1]]),Sa([[1]])),fe=Be(Q,le(M,ne)),ie=Pe(U,fe);ie.shape[0]===1?S=bi(I):S=An([I,Tt(ie,[1,0],[ie.shape[0]-1,ie.shape[1]])],0);const we=It(Pe(bn(M,fe),ne)),Ae=Tt(g,[N,0],[u-N,d]),Me=le(we,S),et=Tn(S);if(N===0)g=Be(Ae,bn(Me,bn(et,Ae)));else{const Vt=Be(Ae,bn(Me,bn(et,Ae)));g=An([Tt(g,[0,0],[N,d]),Vt],0)}const ct=Tn(Me),$t=Tt(f,[0,N],[u,f.shape[1]-N]);if(N===0)f=Be($t,bn(bn($t,S),ct));else{const Vt=Be($t,bn(bn($t,S),ct));f=An([Tt(f,[0,0],[u,N]),Vt],1)}return[S,g,f]}),qO([E,_,A])}return!l&&u>d&&(f=Tt(f,[0,0],[u,d]),g=Tt(g,[0,0],[d,d])),[f,g]})}const N1=V({qr_:KQ});var Qt;(function(r){r[r.NONE=0]="NONE",r[r.MEAN=1]="MEAN",r[r.SUM=2]="SUM",r[r.SUM_BY_NONZERO_WEIGHTS=3]="SUM_BY_NONZERO_WEIGHTS"})(Qt||(Qt={}));function XQ(r,l,u=Qt.SUM_BY_NONZERO_WEIGHTS){const d=P(r,"losses","computeWeightedLoss");let f=null;l!=null&&(f=P(l,"weights","computeWeightedLoss"));const g=f==null?d:le(d,f);if(u===Qt.NONE)return g;if(u===Qt.SUM)return _e(g);if(u===Qt.MEAN){if(f==null)return cx(g);{const I=d.size/f.size,S=Pe(_e(g),_e(f));return I>1?Pe(S,Fe(I)):S}}if(u===Qt.SUM_BY_NONZERO_WEIGHTS){if(f==null)return Pe(_e(g),Fe(d.size));{const I=le(f,Ki(d.shape)),S=Ie(_e(hx(I,Fe(0))),"float32");return Pe(_e(g),S)}}throw Error(`Unknown reduction: ${u}`)}const Fn=V({computeWeightedLoss_:XQ});function JQ(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){const f=P(r,"labels","absoluteDifference"),g=P(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=P(u,"weights","absoluteDifference")),tn(f.shape,g.shape,"Error in absoluteDifference: ");const S=Yn(Be(f,g));return Fn(S,I,d)}const C1=V({absoluteDifference_:JQ});function ZQ(r,l,u,d,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","cosineDistance"),I=P(l,"predictions","cosineDistance");let S=null;d!=null&&(S=P(d,"weights","cosineDistance")),tn(g.shape,I.shape,"Error in cosineDistance: ");const x=Fe(1),N=Be(x,_e(le(g,I),u,!0));return Fn(N,S,f)}const R1=V({cosineDistance_:ZQ});function QQ(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){let f=P(r,"labels","hingeLoss");const g=P(l,"predictions","hingeLoss");let I=null;u!=null&&(I=P(u,"weights","hingeLoss")),tn(f.shape,g.shape,"Error in hingeLoss: ");const S=Fe(1);f=Be(le(Fe(2),f),S);const x=Zu(Be(S,le(f,g)));return Fn(x,I,d)}const O1=V({hingeLoss_:QQ});function eee(r,l,u,d=1,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","huberLoss"),I=P(l,"predictions","huberLoss");let S=null;u!=null&&(S=P(u,"weights","huberLoss")),tn(g.shape,I.shape,"Error in huberLoss: ");const x=Fe(d),N=Yn(Be(I,g)),E=lx(N,x),_=Be(N,E),A=vt(le(Fe(.5),gt(E)),le(x,_));return Fn(A,S,f)}const E1=V({huberLoss_:eee});function tee(r,l,u,d=1e-7,f=Qt.SUM_BY_NONZERO_WEIGHTS){const g=P(r,"labels","logLoss"),I=P(l,"predictions","logLoss");let S=null;u!=null&&(S=P(u,"weights","logLoss")),tn(g.shape,I.shape,"Error in logLoss: ");const x=Fe(1),N=Fe(d),E=It(le(g,wo(vt(I,N)))),_=le(Be(x,g),wo(vt(Be(x,I),N))),A=Be(E,_);return Fn(A,S,f)}const D1=V({logLoss_:tee});function nee(r,l,u,d=Qt.SUM_BY_NONZERO_WEIGHTS){const f=P(r,"labels","meanSquaredError"),g=P(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=P(u,"weights","meanSquaredError")),tn(f.shape,g.shape,"Error in meanSquaredError: ");const S=yx(f,g);return Fn(S,I,d)}const k1=V({meanSquaredError_:nee});function see(r,l){const u=P(r,"labels","sigmoidCrossEntropyWithLogits"),d=P(l,"logits","sigmoidCrossEntropyWithLogits");tn(u.shape,d.shape,"Error in sigmoidCrossEntropyWithLogits: ");const f=Zu(d),g=le(d,u),I=rx(qn(It(Yn(d))));return vt(Be(f,g),I)}function iee(r,l,u,d=0,f=Qt.SUM_BY_NONZERO_WEIGHTS){let g=P(r,"multiClassLabels","sigmoidCrossEntropy");const I=P(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=P(u,"weights","sigmoidCrossEntropy")),tn(g.shape,I.shape,"Error in sigmoidCrossEntropy: "),d>0){const N=Fe(d),E=Fe(1),_=Fe(.5);g=vt(le(g,Be(E,N)),le(_,N))}const x=see(g,I);return Fn(x,S,f)}const F1=V({sigmoidCrossEntropy_:iee});function ree(r,l,u=-1){if(u===-1&&(u=l.rank-1),u!==l.rank-1)throw Error(`Softmax cross entropy along a non-last dimension is not yet supported. Labels / logits was rank ${l.rank} and dim was ${u}`);const d=Ng((f,g,I)=>{const S=!0,x=ox(g,[u],S),N=Be(Ie(g,"float32"),x);I([f,N]);const E=It(le(N,f)),_=_e(E,[u]),A=(U,ne)=>{const[Q,M]=ne,fe=cs(U.shape,[u]);return[le(oe(U,fe),Be(Ie(Q,"float32"),qn(M))),le(oe(U,fe),Be(qn(M),Ie(Q,"float32")))]};return{value:_,gradFunc:A}});return d(r,l)}function oee(r,l,u,d=0,f=Qt.SUM_BY_NONZERO_WEIGHTS){let g=P(r,"onehotLabels","softmaxCrossEntropy");const I=P(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=P(u,"weights","softmaxCrossEntropy")),tn(g.shape,I.shape,"Error in softmaxCrossEntropy: "),d>0){const N=Fe(d),E=Fe(1),_=Fe(g.shape[1]);g=vt(le(g,Be(E,N)),Pe(N,_))}const x=ree(g,I);return Fn(x,S,f)}const _1=V({softmaxCrossEntropy_:oee});const bNe={fft:Qu,ifft:tl,rfft:ed,irfft:gx},xNe={hammingWindow:o1,hannWindow:kg,frame:Fg,stft:a1},W1={flipLeftRight:l1,resizeNearestNeighbor:x1,resizeBilinear:I1,rotateWithOffset:h1,cropAndResize:c1,nonMaxSuppression:u1,nonMaxSuppressionAsync:y1,nonMaxSuppressionWithScore:b1,nonMaxSuppressionWithScoreAsync:w1,nonMaxSuppressionPadded:L1,nonMaxSuppressionPaddedAsync:S1},UNe={bandPart:T1,gramSchmidt:A1,qr:N1},jNe={absoluteDifference:C1,computeWeightedLoss:Fn,cosineDistance:R1,hingeLoss:O1,huberLoss:E1,logLoss:D1,meanSquaredError:k1,sigmoidCrossEntropy:F1,softmaxCrossEntropy:_1};const $1=1.7580993408473768,U1=1.0507009873554805;const B1={kernelName:Lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,La(Ie(u,"float32"),-1))}}};const M1={kernelName:Q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=gt(Ie(u,"float32")),f=bs(Be(Fe(1),d));return It(Pe(r,f))}}}};const P1={kernelName:eR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=bs(Be(gt(Ie(u,"float32")),1));return Pe(r,d)}}}};const z1={kernelName:Hc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{let S=r;const x=Ot(u.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,u.shape)},I=()=>{let S=r;const x=Ot(d.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,d.shape)};return{a:g,b:I}}};const V1={kernelName:tR,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((d,f)=>{u[f]=()=>r.clone()}),u}};const G1={kernelName:nR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const Y1={kernelName:sR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Xe(u)}}};const H1={kernelName:iR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,bs(Be(Fe(1),gt(Ie(u,"float32")))))}}};const q1={kernelName:rR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=bs(vt(Fe(1),gt(Ie(u,"float32"))));return Pe(r,d)}}}};const j1={kernelName:cR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=vt(gt(u),gt(d));let x=le(r,Pe(d,S));const N=Ot(u.shape,f);return N.length>0&&(x=_e(x,N)),oe(x,u.shape)},I=()=>{const S=vt(gt(u),gt(d));let x=It(le(r,Pe(u,S)));const N=Ot(d.shape,f);return N.length>0&&(x=_e(x,N)),oe(x,d.shape)};return{a:g,b:I}}};const K1={kernelName:oR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,vt(gt(Ie(u,"float32")),1))}}};const X1={kernelName:aR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(Fe(1),gt(Ie(u,"float32"))))}}};function aee(r,l,u,d,f=[1,1,1],g,I){const S=P(r,"dy","avgPool3dBackprop"),x=P(l,"input","avgPool3dBackprop");let N=S,E=x,_=!1;x.rank===4&&(_=!0,N=oe(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),E=oe(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),J(N.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${N.rank}.`),J(E.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${E.rank}.`),J(bo(d,f),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${d} and dilations '${f}'`),I!=null&&J(nn(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const A=M=>{const fe=Ag(E.shape,u,d,f,g,I);return M.avgPool3dBackprop(N,E,fe)},U={dy:N,input:E},ne={filterSize:u,strides:d,dilations:f,pad:g,dimRoundingMode:I},Q=H.runKernelFunc(A,U,null,dR,ne);return _?oe(Q,[Q.shape[1],Q.shape[2],Q.shape[3],Q.shape[4]]):Q}const J1=V({avgPool3dBackprop_:aee});const Z1={kernelName:uR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{filterSize:f,strides:g,dilations:I,pad:S,dimRoundingMode:x}=u,N=I==null?[1,1,1]:I;return{x:()=>J1(r,d,f,g,N,S,x)}}};function cee(r,l,u,d,f){const g=P(r,"dy","avgPoolBackprop"),I=P(l,"input","avgPoolBackprop");J(I.rank===g.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${g.rank})`);let S=I,x=g,N=!1;I.rank===3&&(N=!0,S=oe(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=oe(g,[1,g.shape[0],g.shape[1],g.shape[2]])),J(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),J(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const E=ne=>{const Q=Tg(S.shape,u,d,1,f);return ne.avgPoolBackprop(x,S,Q)},_={dy:x,input:S},A={filterSize:u,strides:d,pad:f},U=H.runKernelFunc(E,_,null,hR,A);return N?oe(U,[U.shape[1],U.shape[2],U.shape[3]]):U}const Q1=V({avgPoolBackprop_:cee});const eE={kernelName:lR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{filterSize:f,strides:g,pad:I}=u;return{x:()=>Q1(r,d,f,g,I)}}};const tE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[d,f]=l,{transposeA:g,transposeB:I}=u;return!g&&!I?{a:()=>bn(r,f,!1,!0),b:()=>bn(d,r,!0,!1)}:!g&&I?{a:()=>bn(r,f,!1,!1),b:()=>bn(r,d,!0,!1)}:g&&!I?{a:()=>bn(f,r,!1,!0),b:()=>bn(d,r,!1,!1)}:{a:()=>bn(f,r,!0,!0),b:()=>bn(r,d,!0,!0)}}};const nE={kernelName:If,gradFunc:(r,l,u)=>{const{blockShape:d,crops:f}=u;return{x:()=>dx(r,d,f)}}};const sE={kernelName:xf,gradFunc:(r,l,u)=>{const d=u,f=d.inputShape,g=d.shape,I=Array.from(g);for(let x=f.length-1;x>=0;x--)if(f[x]===g[x])I[x]=1;else if(f[x]!==1)throw new Error(`broadcastTo(): [${f}] cannot be broadcast to [${g}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>_e(r,S,!0)}}};const iE={kernelName:qc,gradFunc:r=>({x:()=>r.clone()})};const rE={kernelName:pR,gradFunc:r=>({x:()=>Xe(r)})};const oE={kernelName:mR,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{clipValueMin:f,clipValueMax:g}=u;return{x:()=>Hn(ba(Nr(d,f),Cr(d,g)),r,Xe(r))}}};const aE={kernelName:Tf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const d=l.map(x=>x.shape),{axis:f}=u,g=ft(f,l[0].shape)[0],I=d.map(x=>x[g]),S=So(r,I,g);return S.map(x=>()=>x)}};const cE={kernelName:Af,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,{dilations:g,strides:I,pad:S,dataFormat:x}=u;return J(yo(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>ZO(d.shape,r,f,I,S,x),filter:()=>Dg(d,r,f.shape,I,S,x)}}};const lE={kernelName:vf,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,{strides:g,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>KI(r,f,g,I,S,1,x),filter:()=>Dg(r,d,f.shape,g,I,S,x)}}};function lee(r,l,u,d,f){let g=r;r.rank===4&&(g=oe(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=oe(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),J(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),J(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),J(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),J(g.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${u[3]}.`),J(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=E=>{const _=1,A=Ku(g.shape,u,d,_,f);return E.conv3dDerFilter(g,I,A)},x={x:g,dy:I},N={strides:d,pad:f,filterShape:u};return H.runKernelFunc(S,x,null,bR,N)}const hE=V({conv3DBackpropFilter_:lee});const uE={kernelName:yR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:d,strides:f,pad:g}=u;J(yo(d),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${d}'`);const[I,S]=l;return{x:()=>QO(I.shape,r,S,f,g),filter:()=>hE(I,r,S.shape,f,g)}}};const dE={kernelName:Nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(It(mx(Ie(u,"float32"))),r)}}};const pE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(fx(Ie(u,"float32")),r)}}};const mE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{axis:f,exclusive:g,reverse:I}=u;return{x:()=>{const S=ji([f],d.rank);let x=JI(r,f,g,!I);return S!=null&&(x=Tn(x,S)),x}}}};const fE={kernelName:SR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:d,strides:f,pad:g,dimRoundingMode:I}=u,S=d==null?[1,1]:d;J(yo(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,N]=l;return J(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),J(N.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${N.rank}.`),J(x.shape[3]===N.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${N.shape[2]}.`),J(bo(f,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${f} and dilations '${S}'.`),I!=null&&J(nn(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`),{x:()=>r1(x.shape,r,N,f,g,d,I),filter:()=>i1(x,r,N.shape,f,g,d,I)}}};const gE={kernelName:TR,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[d,f]=l,g={x:d,filter:f,dy:r},I={x:d,filter:f,dy:r};return{x:()=>H.runKernel(AR,g,u),filter:()=>H.runKernel(vR,I,u)}}};const yE={kernelName:Of,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Pe(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const x=Ot(d.shape,f);x.length>0&&(S=oe(_e(S,x),d.shape));const N=gt(d);return It(Pe(S,Ie(N,"float32")))};return{a:g,b:I}}};const bE={kernelName:NR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,d=g=>g.eluDer(r,u),f={dy:r,y:u};return{x:()=>H.runKernelFunc(d,f,null,CR)}}};const wE={kernelName:RR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,d=le(qn(It(gt(u))),2/Math.sqrt(Math.PI));return{x:()=>le(r,d)}}};const LE={kernelName:Ef,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,u)}}};const SE={kernelName:ER,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,qn(u))}}};const IE={kernelName:Df,gradFunc:r=>({x:()=>Xe(r)})};const xE={kernelName:kf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Pe(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{let S=le(r,Ie(u,"float32"));const x=Ot(d.shape,f);x.length>0&&(S=oe(_e(S,x),d.shape));const N=gt(d);return It(Pe(S,Ie(N,"float32")))};return{a:g,b:I}}};const TE={kernelName:_R,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:d}=u,[f,g,I,S]=l,x=S==null?Fe(1):S,N=Ot(g.shape,f.shape),E=[];if(g.rank===1){for(let Ae=0;Aeg.rank===1?oe(le(le(r,ga(oe(U,[1,1,1,g.shape[0]]),E)),x),f.shape):oe(le(le(r,U),x),f.shape),M=()=>{let Ae=le(le(U,Fe(-1)),A);return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)},fe=()=>{let Ae=le(le(ne,_),A);return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)},ie=()=>{const Ae=le(_,U);let Me=le(r,Ae);return g.rank===1&&(Me=_e(Me,N)),oe(Me,g.shape)},we=()=>{let Ae=r;return g.rank===1&&(Ae=_e(Ae,N)),oe(Ae,g.shape)};return{x:Q,mean:M,variance:fe,scale:ie,offset:we}}};const NE={kernelName:Ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[d,f]=l,{axis:g}=u,I=ft(g,d.shape)[0],S=()=>{const x=d.shape,N=f.size,E=x.slice(0,I),_=E.length,A=x.slice(g,x.length).slice(1),U=A.length,ne=AE(0,_),Q=AE(_+1,_+1+U),M=vE([E,[N],A]),fe=oe(r,M),ie=oe(f,[N]),we=vE([[_],ne,Q]),Ae=Tn(fe,we);let Me=wx(Ae,ie,d.shape[I]);const et=Xc(we);return Me=Tn(Me,et),Me};return{x:S,indices:()=>f}}};function AE(r,l){const u=[];for(let d=r;d{const[u,d]=l;return{a:()=>Xe(u),b:()=>Xe(d)}}};const RE={kernelName:Wf,gradFunc:r=>({x:()=>Ie(r,"float32")})};const OE={kernelName:BR,gradFunc:r=>({x:()=>Xe(r)})};const EE={kernelName:MR,gradFunc:r=>({x:()=>Xe(r)})};const DE={kernelName:PR,gradFunc:r=>({x:()=>Xe(r)})};const kE={kernelName:Uf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,vt(u,1))}}};const FE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Ie(u,"float32"))}}};const _E={kernelName:HR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d]=l,{axis:f}=u;return{logits:()=>{const g=!0,I=qn(d);return Be(r,le(_e(r,f,g),I))}}}};function hee(r,l,u,d=5,f=1,g=1,I=.5){const S=E=>E.LRNGrad(u,r,l,d,f,g,I),x={x:r,y:l,dy:u},N={depthRadius:d,bias:f,alpha:g,beta:I};return H.runKernelFunc(S,x,null,jR,N)}const WE=V({localResponseNormalizationBackprop_:hee});const $E={kernelName:qR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{depthRadius:g,bias:I,alpha:S,beta:x}=u;return{x:()=>WE(d,f,r,g,I,S,x)}}};function _g(r,l,u,d){return l.rank{const f=le(r,Ie(ZI(u,l),r.dtype));return f}}}const Sx={kernelName:Bf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const d=u,{reductionIndices:f}=d,g=l[0],I=l[1],S=ft(f,g.shape),x=_g(r,I,g,S);return{x:()=>x.x()}}};const UE={kernelName:Mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=()=>le(r,Ie(Nr(u,d),"float32")),g=()=>le(r,Ie(ix(u,d),"float32"));return{a:f,b:g}}};function uee(r,l,u,d,f,g=[1,1,1],I,S){const x=P(r,"dy","maxPool3dBackprop"),N=P(l,"input","maxPool3dBackprop"),E=P(u,"output","maxPool3dBackprop");let _=x,A=N,U=E,ne=!1;N.rank===4&&(ne=!0,_=oe(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),A=oe(N,[1,N.shape[0],N.shape[1],N.shape[2],N.shape[3]]),U=oe(E,[1,E.shape[0],E.shape[1],E.shape[2],E.shape[3]])),J(_.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${_.rank}.`),J(A.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${A.rank}.`),J(U.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${U.rank}.`),J(bo(f,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${f} and dilations '${g}'`),S!=null&&J(nn(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const Q=we=>{const Ae=Ag(A.shape,d,f,g,I,S);return we.maxPool3dBackprop(_,A,U,Ae)},M={dy:_,input:A,output:U},fe={filterSize:d,strides:f,dilations:g,pad:I,dimRoundingMode:S},ie=H.runKernelFunc(Q,M,null,ZR,fe);return ne?oe(ie,[ie.shape[1],ie.shape[2],ie.shape[3],ie.shape[4]]):ie}const BE=V({maxPool3dBackprop_:uee});const ME={kernelName:JR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{filterSize:g,strides:I,dilations:S,pad:x,dimRoundingMode:N}=u,E=S==null?[1,1,1]:S;return{x:()=>BE(r,d,f,g,I,E,x,N)}}};function dee(r,l,u,d,f,g,I){const S=P(r,"dy","maxPoolBackprop"),x=P(l,"input","maxPoolBackprop"),N=P(u,"output","maxPoolBackprop");J(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),J(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),J(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&J(nn(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const E=U=>{const ne=Tg(x.shape,d,f,1,g,I);return U.maxPoolBackprop(S,x,N,ne)},_={dy:S,input:x,output:N},A={filterSize:d,strides:f,pad:g,dimRoundingMode:I};return H.runKernelFunc(E,_,null,XR,A)}const PE=V({maxPoolBackprop_:dee});const zE={kernelName:KR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d,f]=l,{filterSize:g,strides:I,pad:S}=u;return{x:()=>PE(r,d,f,g,I,S)}}};const VE={kernelName:Pf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const d=u,{axis:f}=d,[g,I]=l,S=ft(f,g.shape),x=_g(r,I,g,S);return{x:()=>x.x()}}};const GE={kernelName:zf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=()=>le(r,Ie(Cr(u,d),"float32")),g=()=>le(r,Ie(Li(u,d),"float32"));return{a:f,b:g}}};const YE={kernelName:eO,inputsToSave:["x"],gradFunc:(r,l,u)=>{const d=l[0],{paddings:f}=u,g=f.map(I=>I[0]);return{x:()=>Tt(r,g,d.shape)}}};const HE={kernelName:tO,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=Ot(u.shape,f);return S.length>0?oe(_e(r,S),u.shape):r},I=()=>{const S=le(r,It(tx(Pe(u,d)))),x=Ot(d.shape,f);return x.length>0?oe(_e(S,x),d.shape):S};return{a:g,b:I}}};const qE={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{const S=le(r,Ie(d,"float32")),x=Ot(u.shape,f);return x.length>0?oe(_e(S,x),u.shape):S},I=()=>{const S=le(r,Ie(u,"float32")),x=Ot(d.shape,f);return x.length>0?oe(_e(S,x),d.shape):S};return{a:g,b:I}}};const jE={kernelName:Gf,gradFunc:r=>({x:()=>It(r)})};const KE={kernelName:aO,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Ws(u.shape,"float32")}}};const XE={kernelName:oO,gradFunc:r=>({x:()=>Xe(r)})};const Ix={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const d=l[0],{paddings:f}=u,g=f.map(I=>I[0]);return{x:()=>Tt(r,g,d.shape)}}};const JE={kernelName:Hf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,d,f]=l,g=u,I=d,S=at(g.shape,I.shape),x=()=>{const E=Ie(I,"float32");let _=le(r,le(E,wa(g,Be(E,Fe(1)))));const A=Ot(g.shape,S);return A.length>0&&(_=_e(_,A)),oe(_,g.shape)},N=()=>{const E=Li(g,0),_=Hn(E,wo(g),Xe(g));let A=le(r,le(f,_));const U=Ot(I.shape,S);return U.length>0&&(A=_e(A,U)),oe(A,I.shape)};return{a:x,b:N}}};const ZE={kernelName:cO,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,d]=l,f=Li(u,0);return{x:()=>Hn(f,r,le(r,d)),alpha:()=>{let g=Hn(f,Xe(r),le(r,u));const I=Ot(d.shape,r.shape);return I.length>0&&(g=_e(g,I)),oe(g,d.shape)}}}};const QE={kernelName:uO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,It(gt(u)))}}};const eD={kernelName:mO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,d=le(Cr(u,6),La(u));return{x:()=>le(r,Ie(d,"float32"))}}};const tD={kernelName:qf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,Ie(La(u),"float32"))}}};const nD={kernelName:jf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>oe(r,u.shape)}}};const sD={kernelName:Xf,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[d]=l,f=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,d,x)},g={images:d},I=()=>H.runKernelFunc(f,g,null,pO,u);return{images:I}}};const iD={kernelName:Kf,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[d]=l,f=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,d,x)},g={images:d},I=()=>H.runKernelFunc(f,g,null,dO,u);return{images:I}}};const rD={kernelName:Jf,gradFunc:(r,l,u)=>{const{dims:d}=u,f=ft(d,r.shape);return{x:()=>el(r,f)}}};const oD={kernelName:fO,gradFunc:r=>({x:()=>Xe(r)})};const aD={kernelName:Zf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>It(Pe(r,le(wa(u,1.5),2)))}}};const cD={kernelName:Qf,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Ie(Xe(u),"float32"),t:()=>le(r,Ie(u,r.dtype)),e:()=>le(r,Ie(ax(u),r.dtype))}}};const lD={kernelName:gO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const d=Li(u,Fe(0)),f=Fe($1),g=Fe(U1),I=le(r,g),S=le(le(r,f),qn(Ie(u,"float32")));return Hn(d,I,S)}}}};const hD={kernelName:sg,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(u,Be(Fe(1),u)))}}};const uD={kernelName:yO,gradFunc:r=>({x:()=>Xe(r)})};const dD={kernelName:tg,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Xu(Ie(u,"float32")),r)}}};const pD={kernelName:ng,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(XI(Ie(u,"float32")),r)}}};const mD={kernelName:eg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{begin:f,size:g}=u,I=d.shape,[S,x]=Ig(d,f,g),N=[];for(let E=0;Eux(r,N)}}};const fD={kernelName:wO,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[d]=l,{dim:f}=u,g=!0,I=le(r,d);return{logits:()=>Be(I,le(_e(I,[f],g),d))}}};const gD={kernelName:bO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,qI(u))}}};const xx={kernelName:og,gradFunc:(r,l,u)=>{const{blockShape:d,paddings:f}=u;return{x:()=>jI(r,d,f)}}};const Tx={kernelName:ag,gradFunc:(r,l,u)=>{const{axis:d}=u;return{x:()=>An(r,d)}}};const yD={kernelName:ig,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,le(bs(Ie(u,"float32")),2))}}};const bD={kernelName:LO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(r,le(Ie(u,"float32"),2))}}};const wD={kernelName:cg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=Fe(2),g=()=>le(r,le(f,Be(u,d))),I=()=>le(r,le(f,Be(d,u)));return{a:g,b:I}}};const LD={kernelName:fg,gradFunc:r=>({x:()=>Xe(r)})};const SD={kernelName:lg,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,d]=l,f=at(u.shape,d.shape),g=()=>{let S=r;const x=Ot(u.shape,f);return x.length>0&&(S=_e(S,x)),oe(S,u.shape)},I=()=>{let S=r;const x=Ot(d.shape,f);return x.length>0&&(S=_e(S,x)),oe(It(S),d.shape)};return{a:g,b:I}}};const ID={kernelName:rg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,f=d.shape.slice(),{axis:g}=u,I=ft(g,d.shape);I.forEach(N=>{f[N]=1});const S=oe(r,f),x=le(S,Ki(d.shape,"float32"));return{x:()=>x}}};const xD={kernelName:SO,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,gt(Xu(u)))}}};const TD={kernelName:IO,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>le(Be(Fe(1),gt(u)),r)}}};const AD={kernelName:hg,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[d]=l,{reps:f}=u,g=()=>{let I=Xe(d);if(d.rank===1)for(let S=0;S{const d=u,{perm:f}=d,g=Xc(f);return{x:()=>Tn(r,g)}}};const ND={kernelName:dg,gradFunc:(r,l,u)=>{const d=u,{axis:f}=d;return{value:()=>Ks(r,f)}}};const CD={kernelName:pg,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,d=()=>pee(r,u);return{x:d}}};function pee(r,l){const u=sx(l,Xe(l)),d=nx(r,u);let f=Nr(l,Fe(0,"int32"));const g=d.rank-f.rank;for(let S=0;S({x:()=>Xe(r)})};const mee=[B1,M1,P1,z1,V1,G1,Y1,H1,q1,j1,K1,X1,Z1,eE,tE,nE,sE,iE,rE,oE,aE,lE,cE,uE,dE,pE,mE,fE,gE,yE,bE,wE,LE,SE,xE,IE,TE,NE,CE,RE,OE,EE,DE,kE,FE,_E,$E,Sx,Sx,UE,ME,zE,VE,GE,YE,HE,qE,jE,KE,XE,Ix,Ix,JE,ZE,QE,eD,tD,nD,sD,iD,rD,oD,aD,cD,lD,hD,uD,dD,pD,mD,fD,gD,xx,xx,Tx,Tx,yD,wD,bD,LD,SD,ID,xD,TD,AD,vD,ND,CD,RD];for(const r of mee)AO(r);function Ax(r,l,u=!1){const{Image:d,Canvas:f}=St.getEnv();if(!(r instanceof d||r instanceof f))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=da(r),I=l/Math.max(g.height,g.width),S=I*g.width,x=I*g.height,N=Vc({width:l,height:l}),E=r instanceof f?r:Bu(r),_=Math.abs(S-x)/2,A=u&&S{if(Tr(u)){this._imageTensors[d]=u,this._inputDimensions[d]=u.shape;return}if(Ds(u)){const g=u.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[d]=u,this._inputDimensions[d]=u.shape.slice(1);return}const f=u instanceof St.getEnv().Canvas?u:Bu(u);this._canvases[d]=f,this._inputDimensions[d]=[f.height,f.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 Pi(this.batchSize,0,1).map((r,l)=>this.getReshapedInputDimensions(l))}getInput(r){return this.canvases[r]||this.imageTensors[r]}getInputDimensions(r){return this._inputDimensions[r]}getInputHeight(r){return this._inputDimensions[r][0]}getInputWidth(r){return this._inputDimensions[r][1]}getReshapedInputDimensions(r){if(typeof this.inputSize!="number")throw new Error("getReshapedInputDimensions - inputSize not set, toBatchTensor has not been called yet");const l=this.getInputWidth(r),u=this.getInputHeight(r);return lI({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,HO(()=>{const u=Pi(this.batchSize,0,1).map(f=>{const g=this.getInput(f);if(g instanceof kn){let I=Ds(g)?g:g.expandDims();return I=pI(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=W1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(g instanceof St.getEnv().Canvas)return GI.fromPixels(Ax(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${f}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),d=Ks(u.map(f=>Ie(f,"float32"))).as4D(this.batchSize,r,r,3);return d})}}async function Wt(r){if(r instanceof Io)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=f=>Array.isArray(r)?` at input index ${f}:`:"",d=l.map(ua);return d.forEach((f,g)=>{if(!gf(f)&&!Tr(f)&&!Ds(f))throw typeof l[g]=="string"?new Error(`toNetInput -${u(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${u(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Ds(f)){const I=f.shape[0];if(I!==1)throw new Error(`toNetInput -${u(g)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(d.map(f=>gf(f)&&SI(f))),new Io(d,Array.isArray(r))}async function nl(r,l){const{Canvas:u}=St.getEnv();let d=r;if(!(r instanceof u)){const I=await Wt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);d=S instanceof u?S:await xI(S)}const f=as(d),g=l.map(I=>I instanceof Jt?I.forSize(d.width,d.height).box.floor():I).map(I=>I.clipAtImageBorders(d.width,d.height));return g.map(({x:I,y:S,width:x,height:N})=>{const E=Vc({width:x,height:N});return as(E).putImageData(f.getImageData(I,S,x,N),0,0),E})}const Wg=He(Ze());async function sl(r,l){if(!Tr(r)&&!Ds(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Ds(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Wg.tidy(()=>{const[u,d,f]=r.shape.slice(Ds(r)?1:0),g=l.map(S=>S instanceof Jt?S.forSize(d,u).box:S).map(S=>S.clipAtImageBorders(d,u)),I=g.map(({x:S,y:x,width:N,height:E})=>Wg.slice3d(r.as3D(u,d,f),[x,S,0],[E,N,f]));return I})}async function Ia(r,l){const u=St.getEnv().fetch,d=await u(r,l);if(!(d.status<400))throw new Error(`failed to fetch: (${d.status}) ${d.statusText}, from url: ${d.url}`);return d}async function fee(r){const l=await Ia(r),u=await l.blob();if(!u.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${u.type}, for url: ${l.url}`);return II(u)}async function vx(r){return(await Ia(r)).json()}async function gee(r){return new Float32Array(await(await Ia(r)).arrayBuffer())}function $g(r,l){const u=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:u};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${u}`};const d=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(d,"");const f=r.split("/").filter(S=>S),g=r.endsWith(".json")?f[f.length-1]:u;let I=d+(r.endsWith(".json")?f.slice(0,f.length-1):f).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${g}`:`${I}/${g}`}}const OD=He(Ze());async function Nx(r,l){const{manifestUri:u,modelBaseUri:d}=$g(r,l);let f=await vx(u);return OD.io.loadWeights(f,d)}function yee(r,l,u=!1){const{width:d,height:f}=u?da(l):l;return r.width=d,r.height=f,{width:d,height:f}}const Rr=He(Ze());class Un{constructor(r){this._name=r;this._params=void 0;this._paramMappings=[]}get params(){return this._params}get paramMappings(){return this._paramMappings}get isLoaded(){return!!this.params}getParamFromPath(r){const{obj:l,objProp:u}=this.traversePropertyPath(r);return l[u]}reassignParamFromPath(r,l){const{obj:u,objProp:d}=this.traversePropertyPath(r);u[d].dispose(),u[d]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof Rr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof Rr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=Rr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,u)})}dispose(r=!0){this.getParamList().forEach(l=>{if(r&&l.tensor.isDisposed)throw new Error(`param tensor has already been disposed for path ${l.path}`);l.tensor.dispose()}),this._params=void 0}serializeParams(){return new Float32Array(this.getParamList().map(({tensor:r})=>Array.from(r.dataSync())).reduce((r,l)=>r.concat(l)))}async load(r){if(r instanceof Float32Array){this.extractWeights(r);return}await this.loadFromUri(r)}async loadFromUri(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromUri - expected model uri`);const l=await Nx(r,this.getDefaultModelName());this.loadFromWeightMap(l)}async loadFromDisk(r){if(r&&typeof r!="string")throw new Error(`${this._name}.loadFromDisk - expected model file path`);const{readFile:l}=St.getEnv(),{manifestUri:u,modelBaseUri:d}=$g(r,this.getDefaultModelName()),f=x=>Promise.all(x.map(N=>l(N).then(E=>E.buffer))),g=Rr.io.weightsLoaderFactory(f),I=JSON.parse((await l(u)).toString()),S=await g(I,d);this.loadFromWeightMap(S)}loadFromWeightMap(r){const{paramMappings:l,params:u}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=u}extractWeights(r){const{paramMappings:l,params:u}=this.extractParams(r);this._paramMappings=l,this._params=u}traversePropertyPath(r){if(!this.params)throw new Error("traversePropertyPath - model has no loaded params");const l=r.split("/").reduce((f,g)=>{if(!f.nextObj.hasOwnProperty(g))throw new Error(`traversePropertyPath - object does not have property ${g}, for path ${r}`);return{obj:f.nextObj,objProp:g,nextObj:f.nextObj[g]}},{nextObj:this.params}),{obj:u,objProp:d}=l;if(!u||!d||!(u[d]instanceof Rr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:d}}}const il=He(Ze());function ls(r,l,u){return il.tidy(()=>{let d=il.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return d=il.add(d,l.bias),d})}const Bt=He(Ze());function Ug(r,l,u=!1){return Bt.tidy(()=>{const d=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):ls(r,l.conv0,[2,2])),f=ls(d,l.conv1,[1,1]),g=Bt.relu(Bt.add(d,f)),I=ls(g,l.conv2,[1,1]);return Bt.relu(Bt.add(d,Bt.add(f,I)))})}function nd(r,l,u=!1,d=!0){return Bt.tidy(()=>{const f=Bt.relu(u?Bt.add(Bt.conv2d(r,l.conv0.filters,d?[2,2]:[1,1],"same"),l.conv0.bias):ls(r,l.conv0,d?[2,2]:[1,1])),g=ls(f,l.conv1,[1,1]),I=Bt.relu(Bt.add(f,g)),S=ls(I,l.conv2,[1,1]),x=Bt.relu(Bt.add(f,Bt.add(g,S))),N=ls(x,l.conv3,[1,1]);return Bt.relu(Bt.add(f,Bt.add(g,Bt.add(S,N))))})}const xo=He(Ze());function xa(r,l,u="same",d=!1){return xo.tidy(()=>{const f=xo.add(xo.conv2d(r,l.filters,[1,1],u),l.bias);return d?xo.relu(f):f})}function jn(r,l){Object.keys(r).forEach(u=>{l.some(d=>d.originalPath===u)||r[u].dispose()})}const Bg=He(Ze());function rl(r,l){return function(u,d,f,g){const I=Bg.tensor4d(r(u*d*f*f),[f,f,u,d]),S=Bg.tensor1d(r(d));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:I,bias:S}}}const Mg=He(Ze());function Pg(r,l){return function(u,d,f){const g=Mg.tensor2d(r(u*d),[u,d]),I=Mg.tensor1d(r(d));return l.push({paramPath:`${f}/weights`},{paramPath:`${f}/bias`}),{weights:g,bias:I}}}class Cx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const sd=He(Ze());function ol(r,l){return function(u,d,f){const g=sd.tensor4d(r(3*3*u),[3,3,u,1]),I=sd.tensor4d(r(u*d),[1,1,u,d]),S=sd.tensor1d(r(d));return l.push({paramPath:`${f}/depthwise_filter`},{paramPath:`${f}/pointwise_filter`},{paramPath:`${f}/bias`}),new Cx(g,I,S)}}function al(r){return function(l){const u=r(`${l}/depthwise_filter`,4),d=r(`${l}/pointwise_filter`,4),f=r(`${l}/bias`,1);return new Cx(u,d,f)}}function ws(r,l){return function(u,d,f){const g=r[u];if(!oa(g,d))throw new Error(`expected weightMap[${u}] to be a Tensor${d}D, instead have ${g}`);return l.push({originalPath:u,paramPath:f||u}),g}}function Kn(r){let l=r;function u(f){const g=l.slice(0,f);return l=l.slice(f),g}function d(){return l}return{extractWeights:u,getRemainingWeights:d}}function zg(r,l){const u=rl(r,l),d=ol(r,l);function f(I,S,x,N=!1){const E=N?u(I,S,3,`${x}/conv0`):d(I,S,`${x}/conv0`),_=d(S,S,`${x}/conv1`),A=d(S,S,`${x}/conv2`);return{conv0:E,conv1:_,conv2:A}}function g(I,S,x,N=!1){const{conv0:E,conv1:_,conv2:A}=f(I,S,x,N),U=d(S,S,`${x}/conv3`);return{conv0:E,conv1:_,conv2:A,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:g}}function ED(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractDenseBlock4Params:f}=zg(u,l),g=f(3,32,"dense0",!0),I=f(32,64,"dense1"),S=f(64,128,"dense2"),x=f(128,256,"dense3");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S,dense3:x}}}function Vg(r){return function(l){const u=r(`${l}/filters`,4),d=r(`${l}/bias`,1);return{filters:u,bias:d}}}function Gg(r,l){const u=ws(r,l),d=Vg(u),f=al(u);function g(S,x=!1){const N=x?d(`${S}/conv0`):f(`${S}/conv0`),E=f(`${S}/conv1`),_=f(`${S}/conv2`);return{conv0:N,conv1:E,conv2:_}}function I(S,x=!1){const N=x?d(`${S}/conv0`):f(`${S}/conv0`),E=f(`${S}/conv1`),_=f(`${S}/conv2`),A=f(`${S}/conv3`);return{conv0:N,conv1:E,conv2:_,conv3:A}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:I}}function DD(r){const l=[],{extractDenseBlock4Params:u}=Gg(r,l),d={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return jn(r,l),{params:d,paramMappings:l}}const To=He(Ze());class Yg extends Un{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return To.tidy(()=>{const u=To.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(To.scalar(255));let g=nd(f,l.dense0,!0);return g=nd(g,l.dense1),g=nd(g,l.dense2),g=nd(g,l.dense3),g=To.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return DD(r)}extractParams(r){return ED(r)}}const cl=He(Ze());function id(r,l){return cl.tidy(()=>cl.add(cl.matMul(r,l.weights),l.bias))}function kD(r,l,u){const d=[],{extractWeights:f,getRemainingWeights:g}=Kn(r),I=Pg(f,d),S=I(l,u,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:d,params:{fc:S}}}function FD(r){const l=[],u=ws(r,l);function d(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const f={fc:d("fc")};return jn(r,l),{params:f,paramMappings:l}}function Hg(r){const l={},u={};return Object.keys(r).forEach(d=>{const f=d.startsWith("fc")?u:l;f[d]=r[d]}),{featureExtractorMap:l,classifierMap:u}}const _D=He(Ze());class qg extends Un{constructor(r,l){super(r);this._faceFeatureExtractor=l}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return _D.tidy(()=>{const u=r instanceof Io?this.faceFeatureExtractor.forwardInput(r):r;return id(u.as2D(u.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return kD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Hg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),FD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),d=u*l+u,f=r.slice(0,r.length-d),g=r.slice(r.length-d);return this.faceFeatureExtractor.extractWeights(f),this.extractClassifierParams(g)}}const Rx=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class Ta{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);Rx.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return Rx.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const ll=He(Ze());class Ox extends qg{constructor(r=new Yg){super("FaceExpressionNet",r)}forwardInput(r){return ll.tidy(()=>ll.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Wt(r))}async predictExpressions(r){const l=await Wt(r),u=await this.forwardInput(l),d=await Promise.all(ll.unstack(u).map(async g=>{const I=await g.data();return g.dispose(),I}));u.dispose();const f=d.map(g=>new Ta(g));return l.isBatchInput?f:f[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function Ex(r){return r.expressions instanceof Ta}function jg(r,l){const u={expressions:l};return Object.assign({},r,u)}function bee(r,l,u=.1,d){const f=Array.isArray(l)?l:[l];f.forEach(g=>{const I=g instanceof Ta?g:Ex(g)?g.expressions:void 0;if(!I)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const S=I.asSortedArray(),x=S.filter(_=>_.probability>u),N=Vi(g)?g.detection.box.bottomLeft:d||new Qe(0,0),E=new zc(x.map(_=>`${_.expression} (${aa(_.probability)})`),N);E.draw(r)})}function Aa(r){return Vi(r)&&r.landmarks instanceof js&&r.unshiftedLandmarks instanceof js&&r.alignedRect instanceof Jt}function hl(r,l){const{box:u}=r.detection,d=l.shiftBy(u.x,u.y),f=d.align(),{imageDims:g}=r.detection,I=new Jt(r.detection.score,f.rescale(g.reverse()),g),S={landmarks:d,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class WD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:d,lineColor:f,pointSize:g,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=d||1,this.pointSize=g||2,this.lineColor=f||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class $D{constructor(r,l={}){this.faceLandmarks=r,this.options=new WD(l)}draw(r){const l=as(r),{drawLines:u,drawPoints:d,lineWidth:f,lineColor:g,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof $u&&(l.strokeStyle=g,l.lineWidth=f,xr(l,this.faceLandmarks.getJawOutline()),xr(l,this.faceLandmarks.getLeftEyeBrow()),xr(l,this.faceLandmarks.getRightEyeBrow()),xr(l,this.faceLandmarks.getNose()),xr(l,this.faceLandmarks.getLeftEye(),!0),xr(l,this.faceLandmarks.getRightEye(),!0),xr(l,this.faceLandmarks.getMouth(),!0)),d){l.strokeStyle=S,l.fillStyle=S;const x=N=>{l.beginPath(),l.arc(N.x,N.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function wee(r,l){const u=Array.isArray(l)?l:[l];u.forEach(d=>{const f=d instanceof js?d:Aa(d)?d.landmarks:void 0;if(!f)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new $D(f).draw(r)})}const Dx={};$c(Dx,{AnchorPosition:()=>Gi,DrawBox:()=>LI,DrawBoxOptions:()=>B2,DrawFaceLandmarks:()=>$D,DrawFaceLandmarksOptions:()=>WD,DrawTextField:()=>zc,DrawTextFieldOptions:()=>mf,drawContour:()=>xr,drawDetections:()=>R9,drawFaceExpressions:()=>bee,drawFaceLandmarks:()=>wee});function Lee(r,l){const u=rl(r,l),d=ol(r,l);function f(I,S,x){const N=d(I,S,`${x}/separable_conv0`),E=d(S,S,`${x}/separable_conv1`),_=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:N,separable_conv1:E,expansion_conv:_}}function g(I,S){const x=d(I,I,`${S}/separable_conv0`),N=d(I,I,`${S}/separable_conv1`),E=d(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:N,separable_conv2:E}}return{extractConvParams:u,extractSeparableConvParams:d,extractReductionBlockParams:f,extractMainBlockParams:g}}function UD(r,l){const u=[],{extractWeights:d,getRemainingWeights:f}=Kn(r),{extractConvParams:g,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=Lee(d,u),N=g(3,32,3,"entry_flow/conv_in"),E=S(32,64,"entry_flow/reduction_block_0"),_=S(64,128,"entry_flow/reduction_block_1"),A={conv_in:N,reduction_block_0:E,reduction_block_1:_},U={};Pi(l,0,1).forEach(fe=>{U[`main_block_${fe}`]=x(128,`middle_flow/main_block_${fe}`)});const ne=S(128,256,"exit_flow/reduction_block"),Q=I(256,512,"exit_flow/separable_conv"),M={reduction_block:ne,separable_conv:Q};if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:u,params:{entry_flow:A,middle_flow:U,exit_flow:M}}}function See(r,l){const u=ws(r,l),d=Vg(u),f=al(u);function g(S){const x=f(`${S}/separable_conv0`),N=f(`${S}/separable_conv1`),E=d(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:N,expansion_conv:E}}function I(S){const x=f(`${S}/separable_conv0`),N=f(`${S}/separable_conv1`),E=f(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:N,separable_conv2:E}}return{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:I}}function BD(r,l){const u=[],{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:I}=See(r,u),S=d("entry_flow/conv_in"),x=g("entry_flow/reduction_block_0"),N=g("entry_flow/reduction_block_1"),E={conv_in:S,reduction_block_0:x,reduction_block_1:N},_={};Pi(l,0,1).forEach(Q=>{_[`main_block_${Q}`]=I(`middle_flow/main_block_${Q}`)});const A=g("exit_flow/reduction_block"),U=f("exit_flow/separable_conv"),ne={reduction_block:A,separable_conv:U};return jn(r,u),{params:{entry_flow:E,middle_flow:_,exit_flow:ne},paramMappings:u}}const on=He(Ze());function MD(r,l,u){return on.add(on.conv2d(r,l.filters,u,"same"),l.bias)}function kx(r,l,u=!0){let d=u?on.relu(r):r;return d=ls(d,l.separable_conv0,[1,1]),d=ls(on.relu(d),l.separable_conv1,[1,1]),d=on.maxPool(d,[3,3],[2,2],"same"),d=on.add(d,MD(r,l.expansion_conv,[2,2])),d}function Iee(r,l){let u=ls(on.relu(r),l.separable_conv0,[1,1]);return u=ls(on.relu(u),l.separable_conv1,[1,1]),u=ls(on.relu(u),l.separable_conv2,[1,1]),u=on.add(u,r),u}class PD extends Un{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return on.tidy(()=>{const u=on.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(on.scalar(256));let g=on.relu(MD(f,l.entry_flow.conv_in,[2,2]));return g=kx(g,l.entry_flow.reduction_block_0,!1),g=kx(g,l.entry_flow.reduction_block_1),Pi(this._numMainBlocks,0,1).forEach(I=>{g=Iee(g,l.middle_flow[`main_block_${I}`])}),g=kx(g,l.exit_flow.reduction_block),g=on.relu(ls(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return BD(r,this._numMainBlocks)}extractParams(r){return UD(r,this._numMainBlocks)}}function zD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),f=Pg(u,l),g=f(512,1,"fc/age"),I=f(512,2,"fc/gender");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{fc:{age:g,gender:I}}}}function VD(r){const l=[],u=ws(r,l);function d(g){const I=u(`${g}/weights`,2),S=u(`${g}/bias`,1);return{weights:I,bias:S}}const f={fc:{age:d("fc/age"),gender:d("fc/gender")}};return jn(r,l),{params:f,paramMappings:l}}var Or;(function(r){r.FEMALE="female",r.MALE="male"})(Or||(Or={}));const Xi=He(Ze());class Fx extends Un{constructor(r=new PD(2)){super("AgeGenderNet");this._faceFeatureExtractor=r}get faceFeatureExtractor(){return this._faceFeatureExtractor}runNet(r){const{params:l}=this;if(!l)throw new Error(`${this._name} - load model before inference`);return Xi.tidy(()=>{const u=r instanceof Io?this.faceFeatureExtractor.forwardInput(r):r,d=Xi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),f=id(d,l.fc.age).as1D(),g=id(d,l.fc.gender);return{age:f,gender:g}})}forwardInput(r){return Xi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Xi.softmax(u)}})}async forward(r){return this.forwardInput(await Wt(r))}async predictAgeAndGender(r){const l=await Wt(r),u=await this.forwardInput(l),d=Xi.unstack(u.age),f=Xi.unstack(u.gender),g=d.map((S,x)=>({ageTensor:S,genderTensor:f[x]})),I=await Promise.all(g.map(async({ageTensor:S,genderTensor:x})=>{const N=(await S.data())[0],E=(await x.data())[0],_=E>.5,A=_?Or.MALE:Or.FEMALE,U=_?E:1-E;return S.dispose(),x.dispose(),{age:N,gender:A,genderProbability:U}}));return u.age.dispose(),u.gender.dispose(),l.isBatchInput?I:I[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:u}=this.extractClassifierParams(r);this._params=l,this._paramMappings=u}extractClassifierParams(r){return zD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Hg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),VD(u)}extractParams(r){const l=512*1+1+(512*2+2),u=r.slice(0,r.length-l),d=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(u),this.extractClassifierParams(d)}}const Ls=He(Ze());class Kg extends qg{postProcess(r,l,u){const d=u.map(({width:g,height:I})=>{const S=l/Math.max(I,g);return{width:g*S,height:I*S}}),f=d.length;return Ls.tidy(()=>{const g=(E,_)=>Ls.stack([Ls.fill([68],E,"float32"),Ls.fill([68],_,"float32")],1).as2D(1,136).as1D(),I=(E,_)=>{const{width:A,height:U}=d[E];return _(A,U)?Math.abs(A-U)/2:0},S=E=>I(E,(_,A)=>_I(E,(_,A)=>A<_),N=r.mul(Ls.fill([f,136],l,"float32")).sub(Ls.stack(Array.from(Array(f),(E,_)=>g(S(_),x(_))))).div(Ls.stack(Array.from(Array(f),(E,_)=>g(d[_].width,d[_].height))));return N})}forwardInput(r){return Ls.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([u,d])=>({height:u,width:d})))})}async forward(r){return this.forwardInput(await Wt(r))}async detectLandmarks(r){const l=await Wt(r),u=Ls.tidy(()=>Ls.unstack(this.forwardInput(l))),d=await Promise.all(u.map(async(f,g)=>{const I=Array.from(await f.data()),S=I.filter((N,E)=>lf(E)),x=I.filter((N,E)=>!lf(E));return new $u(Array(68).fill(0).map((N,E)=>new Qe(S[E],x[E])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return u.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getClassifierChannelsOut(){return 136}}class rd extends Kg{constructor(r=new Yg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function GD(r){const l=[],{extractDenseBlock3Params:u}=Gg(r,l),d={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return jn(r,l),{params:d,paramMappings:l}}function YD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractDenseBlock3Params:f}=zg(u,l),g=f(3,32,"dense0",!0),I=f(32,64,"dense1"),S=f(64,128,"dense2");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:I,dense2:S}}}const Ao=He(Ze());class HD extends Un{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return Ao.tidy(()=>{const u=Ao.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div(Ao.scalar(255));let g=Ug(f,l.dense0,!0);return g=Ug(g,l.dense1),g=Ug(g,l.dense2),g=Ao.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Wt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return GD(r)}extractParams(r){return YD(r)}}class _x extends Kg{constructor(r=new HD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class xee extends rd{}const Xg=He(Ze());function qD(r,l){return Xg.add(Xg.mul(r,l.weights),l.biases)}const ul=He(Ze());function Wx(r,l,u,d,f="same"){const{filters:g,bias:I}=l.conv;let S=ul.conv2d(r,g,u,f);return S=ul.add(S,I),S=qD(S,l.scale),d?ul.relu(S):S}function jD(r,l){return Wx(r,l,[1,1],!0)}function $x(r,l){return Wx(r,l,[1,1],!1)}function Jg(r,l){return Wx(r,l,[2,2],!0,"valid")}const Ss=He(Ze());function Tee(r,l){function u(S,x,N){const E=r(S),_=E.length/(x*N*N);if(cI(_))throw new Error(`depth has to be an integer: ${_}, weights.length: ${E.length}, numFilters: ${x}, filterSize: ${N}`);return Ss.tidy(()=>Ss.transpose(Ss.tensor4d(E,[x,_,N,N]),[2,3,1,0]))}function d(S,x,N,E){const _=u(S,x,N),A=Ss.tensor1d(r(x));return l.push({paramPath:`${E}/filters`},{paramPath:`${E}/bias`}),{filters:_,bias:A}}function f(S,x){const N=Ss.tensor1d(r(S)),E=Ss.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:N,biases:E}}function g(S,x,N,E){const _=d(S,x,N,`${E}/conv`),A=f(x,`${E}/scale`);return{conv:_,scale:A}}function I(S,x,N,E,_=!1){const A=g((_?.5:1)*S,x,N,`${E}/conv1`),U=g(S,x,N,`${E}/conv2`);return{conv1:A,conv2:U}}return{extractConvLayerParams:g,extractResidualLayerParams:I}}function KD(r){const{extractWeights:l,getRemainingWeights:u}=Kn(r),d=[],{extractConvLayerParams:f,extractResidualLayerParams:g}=Tee(l,d),I=f(4704,32,7,"conv32_down"),S=g(9216,32,3,"conv32_1"),x=g(9216,32,3,"conv32_2"),N=g(9216,32,3,"conv32_3"),E=g(36864,64,3,"conv64_down",!0),_=g(36864,64,3,"conv64_1"),A=g(36864,64,3,"conv64_2"),U=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),Q=g(147456,128,3,"conv128_1"),M=g(147456,128,3,"conv128_2"),fe=g(589824,256,3,"conv256_down",!0),ie=g(589824,256,3,"conv256_1"),we=g(589824,256,3,"conv256_2"),Ae=g(589824,256,3,"conv256_down_out"),Me=Ss.tidy(()=>Ss.transpose(Ss.tensor2d(l(256*128),[128,256]),[1,0]));if(d.push({paramPath:"fc"}),u().length!==0)throw new Error(`weights remaing after extract: ${u().length}`);const et={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:N,conv64_down:E,conv64_1:_,conv64_2:A,conv64_3:U,conv128_down:ne,conv128_1:Q,conv128_2:M,conv256_down:fe,conv256_1:ie,conv256_2:we,conv256_down_out:Ae,fc:Me};return{params:et,paramMappings:d}}function Aee(r,l){const u=ws(r,l);function d(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function f(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),N=d(I);return{conv:{filters:S,bias:x},scale:N}}function g(I){return{conv1:f(`${I}/conv1`),conv2:f(`${I}/conv2`)}}return{extractConvLayerParams:f,extractResidualLayerParams:g}}function XD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:d}=Aee(r,l),f=u("conv32_down"),g=d("conv32_1"),I=d("conv32_2"),S=d("conv32_3"),x=d("conv64_down"),N=d("conv64_1"),E=d("conv64_2"),_=d("conv64_3"),A=d("conv128_down"),U=d("conv128_1"),ne=d("conv128_2"),Q=d("conv256_down"),M=d("conv256_1"),fe=d("conv256_2"),ie=d("conv256_down_out"),we=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!aI(we))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${we}`);const Ae={conv32_down:f,conv32_1:g,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:N,conv64_2:E,conv64_3:_,conv128_down:A,conv128_1:U,conv128_2:ne,conv256_down:Q,conv256_1:M,conv256_2:fe,conv256_down_out:ie,fc:we};return jn(r,l),{params:Ae,paramMappings:l}}const Xn=He(Ze());function Si(r,l){let u=jD(r,l.conv1);return u=$x(u,l.conv2),u=Xn.add(u,r),u=Xn.relu(u),u}function od(r,l){let u=Jg(r,l.conv1);u=$x(u,l.conv2);let d=Xn.avgPool(r,2,2,"valid");const f=Xn.zeros(d.shape),g=d.shape[3]!==u.shape[3],I=d.shape[1]!==u.shape[1]||d.shape[2]!==u.shape[2];if(I){const S=[...u.shape];S[1]=1;const x=Xn.zeros(S);u=Xn.concat([u,x],1);const N=[...u.shape];N[2]=1;const E=Xn.zeros(N);u=Xn.concat([u,E],2)}return d=g?Xn.concat([d,f],3):d,u=Xn.add(d,u),u=Xn.relu(u),u}const $s=He(Ze());class ad extends Un{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return $s.tidy(()=>{const u=$s.cast(r.toBatchTensor(150,!0),"float32"),d=[122.782,117.001,104.298],f=yi(u,d).div($s.scalar(256));let g=Jg(f,l.conv32_down);g=$s.maxPool(g,3,2,"valid"),g=Si(g,l.conv32_1),g=Si(g,l.conv32_2),g=Si(g,l.conv32_3),g=od(g,l.conv64_down),g=Si(g,l.conv64_1),g=Si(g,l.conv64_2),g=Si(g,l.conv64_3),g=od(g,l.conv128_down),g=Si(g,l.conv128_1),g=Si(g,l.conv128_2),g=od(g,l.conv256_down),g=Si(g,l.conv256_1),g=Si(g,l.conv256_2),g=od(g,l.conv256_down_out);const I=g.mean([1,2]),S=$s.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Wt(r))}async computeFaceDescriptor(r){const l=await Wt(r),u=$s.tidy(()=>$s.unstack(this.forwardInput(l))),d=await Promise.all(u.map(f=>f.data()));return u.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return XD(r)}extractParams(r){return KD(r)}}function vee(r){const l=new ad;return l.extractWeights(r),l}function Zg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function Nee(r){return typeof r.age=="number"}function Qg(r,l){const u={age:l};return Object.assign({},r,u)}function Cee(r){return(r.gender===Or.MALE||r.gender===Or.FEMALE)&&Mc(r.genderProbability)}function ey(r,l,u){const d={gender:l,genderProbability:u};return Object.assign({},r,d)}const Ii=He(Ze());function Ree(r,l){function u(x,N){const E=Ii.tensor4d(r(3*3*x),[3,3,x,1]),_=Ii.tensor1d(r(x)),A=Ii.tensor1d(r(x)),U=Ii.tensor1d(r(x)),ne=Ii.tensor1d(r(x));return l.push({paramPath:`${N}/filters`},{paramPath:`${N}/batch_norm_scale`},{paramPath:`${N}/batch_norm_offset`},{paramPath:`${N}/batch_norm_mean`},{paramPath:`${N}/batch_norm_variance`}),{filters:E,batch_norm_scale:_,batch_norm_offset:A,batch_norm_mean:U,batch_norm_variance:ne}}function d(x,N,E,_,A){const U=Ii.tensor4d(r(x*N*E*E),[E,E,x,N]),ne=Ii.tensor1d(r(N));return l.push({paramPath:`${_}/filters`},{paramPath:`${_}/${A?"batch_norm_offset":"bias"}`}),{filters:U,bias:ne}}function f(x,N,E,_){const{filters:A,bias:U}=d(x,N,E,_,!0);return{filters:A,batch_norm_offset:U}}function g(x,N,E){const _=u(x,`${E}/depthwise_conv`),A=f(x,N,1,`${E}/pointwise_conv`);return{depthwise_conv:_,pointwise_conv:A}}function I(){const x=f(3,32,3,"mobilenetv1/conv_0"),N=g(32,64,"mobilenetv1/conv_1"),E=g(64,128,"mobilenetv1/conv_2"),_=g(128,128,"mobilenetv1/conv_3"),A=g(128,256,"mobilenetv1/conv_4"),U=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),Q=g(512,512,"mobilenetv1/conv_7"),M=g(512,512,"mobilenetv1/conv_8"),fe=g(512,512,"mobilenetv1/conv_9"),ie=g(512,512,"mobilenetv1/conv_10"),we=g(512,512,"mobilenetv1/conv_11"),Ae=g(512,1024,"mobilenetv1/conv_12"),Me=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:N,conv_2:E,conv_3:_,conv_4:A,conv_5:U,conv_6:ne,conv_7:Q,conv_8:M,conv_9:fe,conv_10:ie,conv_11:we,conv_12:Ae,conv_13:Me}}function S(){const x=f(1024,256,1,"prediction_layer/conv_0"),N=f(256,512,3,"prediction_layer/conv_1"),E=f(512,128,1,"prediction_layer/conv_2"),_=f(128,256,3,"prediction_layer/conv_3"),A=f(256,128,1,"prediction_layer/conv_4"),U=f(128,256,3,"prediction_layer/conv_5"),ne=f(256,64,1,"prediction_layer/conv_6"),Q=f(64,128,3,"prediction_layer/conv_7"),M=d(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),fe=d(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),ie=d(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),we=d(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Ae=d(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Me=d(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),et=d(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),ct=d(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=d(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Vt=d(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),je=d(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),hn=d(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),bt={box_encoding_predictor:M,class_predictor:fe},Is={box_encoding_predictor:ie,class_predictor:we},_r={box_encoding_predictor:Ae,class_predictor:Me},Wr={box_encoding_predictor:et,class_predictor:ct},Oa={box_encoding_predictor:$t,class_predictor:Vt},un={box_encoding_predictor:je,class_predictor:hn};return{conv_0:x,conv_1:N,conv_2:E,conv_3:_,conv_4:A,conv_5:U,conv_6:ne,conv_7:Q,box_predictor_0:bt,box_predictor_1:Is,box_predictor_2:_r,box_predictor_3:Wr,box_predictor_4:Oa,box_predictor_5:un}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function JD(r){const l=[],{extractWeights:u,getRemainingWeights:d}=Kn(r),{extractMobilenetV1Params:f,extractPredictionLayerParams:g}=Ree(u,l),I=f(),S=g(),x=Ii.tensor3d(u(5118*4),[1,5118,4]),N={extra_dim:x};if(l.push({paramPath:"output_layer/extra_dim"}),d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{params:{mobilenetv1:I,prediction_layer:S,output_layer:N},paramMappings:l}}function Oee(r,l){const u=ws(r,l);function d(N,E,_){const A=u(`${N}/Conv2d_${E}_pointwise/weights`,4,`${_}/filters`),U=u(`${N}/Conv2d_${E}_pointwise/convolution_bn_offset`,1,`${_}/batch_norm_offset`);return{filters:A,batch_norm_offset:U}}function f(N){const E=`mobilenetv1/conv_${N}`,_=`MobilenetV1/Conv2d_${N}_depthwise`,A=`${E}/depthwise_conv`,U=`${E}/pointwise_conv`,ne=u(`${_}/depthwise_weights`,4,`${A}/filters`),Q=u(`${_}/BatchNorm/gamma`,1,`${A}/batch_norm_scale`),M=u(`${_}/BatchNorm/beta`,1,`${A}/batch_norm_offset`),fe=u(`${_}/BatchNorm/moving_mean`,1,`${A}/batch_norm_mean`),ie=u(`${_}/BatchNorm/moving_variance`,1,`${A}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:Q,batch_norm_offset:M,batch_norm_mean:fe,batch_norm_variance:ie},pointwise_conv:d("MobilenetV1",N,U)}}function g(){return{conv_0:d("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:f(1),conv_2:f(2),conv_3:f(3),conv_4:f(4),conv_5:f(5),conv_6:f(6),conv_7:f(7),conv_8:f(8),conv_9:f(9),conv_10:f(10),conv_11:f(11),conv_12:f(12),conv_13:f(13)}}function I(N,E){const _=u(`${N}/weights`,4,`${E}/filters`),A=u(`${N}/biases`,1,`${E}/bias`);return{filters:_,bias:A}}function S(N){const E=I(`Prediction/BoxPredictor_${N}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${N}/box_encoding_predictor`),_=I(`Prediction/BoxPredictor_${N}/ClassPredictor`,`prediction_layer/box_predictor_${N}/class_predictor`);return{box_encoding_predictor:E,class_predictor:_}}function x(){return{conv_0:d("Prediction",0,"prediction_layer/conv_0"),conv_1:d("Prediction",1,"prediction_layer/conv_1"),conv_2:d("Prediction",2,"prediction_layer/conv_2"),conv_3:d("Prediction",3,"prediction_layer/conv_3"),conv_4:d("Prediction",4,"prediction_layer/conv_4"),conv_5:d("Prediction",5,"prediction_layer/conv_5"),conv_6:d("Prediction",6,"prediction_layer/conv_6"),conv_7:d("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:g,extractPredictionLayerParams:x}}function ZD(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:d}=Oee(r,l),f=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!Tr(f))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${f}`);const g={mobilenetv1:u(),prediction_layer:d(),output_layer:{extra_dim:f}};return jn(r,l),{params:g,paramMappings:l}}const vo=He(Ze());function Js(r,l,u){return vo.tidy(()=>{let d=vo.conv2d(r,l.filters,u,"same");return d=vo.add(d,l.batch_norm_offset),vo.clipByValue(d,0,6)})}const Er=He(Ze()),Eee=.0010000000474974513;function Dee(r,l,u){return Er.tidy(()=>{let d=Er.depthwiseConv2d(r,l.filters,u,"same");return d=Er.batchNorm(d,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,Eee),Er.clipByValue(d,0,6)})}function kee(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function QD(r,l){return Er.tidy(()=>{let u,d=Js(r,l.conv_0,[2,2]);const f=[l.conv_1,l.conv_2,l.conv_3,l.conv_4,l.conv_5,l.conv_6,l.conv_7,l.conv_8,l.conv_9,l.conv_10,l.conv_11,l.conv_12,l.conv_13];if(f.forEach((g,I)=>{const S=I+1,x=kee(S);d=Dee(d,g.depthwise_conv,x),d=Js(d,g.pointwise_conv,[1,1]),S===11&&(u=d)}),u===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:d,conv11:u}})}function ek(r,l,u,d,f){const g=r.shape[0],I=Math.min(u,g),S=l.map((E,_)=>({score:E,boxIndex:_})).filter(E=>E.score>f).sort((E,_)=>_.score-E.score),x=E=>E<=d?1:0,N=[];return S.forEach(E=>{if(N.length>=I)return;const _=E.score;for(let A=N.length-1;A>=0;--A){const U=Fee(r,E.boxIndex,N[A]);if(U===0)continue;if(E.score*=x(U),E.score<=f)break}_===E.score&&N.push(E.boxIndex)}),N}function Fee(r,l,u){const d=r.arraySync(),f=Math.min(d[l][0],d[l][2]),g=Math.min(d[l][1],d[l][3]),I=Math.max(d[l][0],d[l][2]),S=Math.max(d[l][1],d[l][3]),x=Math.min(d[u][0],d[u][2]),N=Math.min(d[u][1],d[u][3]),E=Math.max(d[u][0],d[u][2]),_=Math.max(d[u][1],d[u][3]),A=(I-f)*(S-g),U=(E-x)*(_-N);if(A<=0||U<=0)return 0;const ne=Math.max(f,x),Q=Math.max(g,N),M=Math.min(I,E),fe=Math.min(S,_),ie=Math.max(M-ne,0)*Math.max(fe-Q,0);return ie/(A+U-ie)}const ke=He(Ze());function _ee(r){const l=ke.unstack(ke.transpose(r,[1,0])),u=[ke.sub(l[2],l[0]),ke.sub(l[3],l[1])],d=[ke.add(l[0],ke.div(u[0],ke.scalar(2))),ke.add(l[1],ke.div(u[1],ke.scalar(2)))];return{sizes:u,centers:d}}function Wee(r,l){const{sizes:u,centers:d}=_ee(r),f=ke.unstack(ke.transpose(l,[1,0])),g=ke.div(ke.mul(ke.exp(ke.div(f[2],ke.scalar(5))),u[0]),ke.scalar(2)),I=ke.add(ke.mul(ke.div(f[0],ke.scalar(10)),u[0]),d[0]),S=ke.div(ke.mul(ke.exp(ke.div(f[3],ke.scalar(5))),u[1]),ke.scalar(2)),x=ke.add(ke.mul(ke.div(f[1],ke.scalar(10)),u[1]),d[1]);return ke.transpose(ke.stack([ke.sub(I,g),ke.sub(x,S),ke.add(I,g),ke.add(x,S)]),[1,0])}function tk(r,l,u){return ke.tidy(()=>{const d=r.shape[0];let f=Wee(ke.reshape(ke.tile(u.extra_dim,[d,1,1]),[-1,4]),ke.reshape(r,[-1,4]));f=ke.reshape(f,[d,f.shape[0]/d,4]);const g=ke.sigmoid(ke.slice(l,[0,0,1],[-1,-1,-1]));let I=ke.slice(g,[0,0,0],[-1,-1,1]);I=ke.reshape(I,[d,I.shape[1]]);const S=ke.unstack(f),x=ke.unstack(I);return{boxes:S,scores:x}})}const cd=He(Ze());function va(r,l){return cd.tidy(()=>{const u=r.shape[0],d=cd.reshape(xa(r,l.box_encoding_predictor),[u,-1,1,4]),f=cd.reshape(xa(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:d,classPrediction:f}})}const ld=He(Ze());function nk(r,l,u){return ld.tidy(()=>{const d=Js(r,u.conv_0,[1,1]),f=Js(d,u.conv_1,[2,2]),g=Js(f,u.conv_2,[1,1]),I=Js(g,u.conv_3,[2,2]),S=Js(I,u.conv_4,[1,1]),x=Js(S,u.conv_5,[2,2]),N=Js(x,u.conv_6,[1,1]),E=Js(N,u.conv_7,[2,2]),_=va(l,u.box_predictor_0),A=va(r,u.box_predictor_1),U=va(f,u.box_predictor_2),ne=va(I,u.box_predictor_3),Q=va(x,u.box_predictor_4),M=va(E,u.box_predictor_5),fe=ld.concat([_.boxPredictionEncoding,A.boxPredictionEncoding,U.boxPredictionEncoding,ne.boxPredictionEncoding,Q.boxPredictionEncoding,M.boxPredictionEncoding],1),ie=ld.concat([_.classPrediction,A.classPrediction,U.classPrediction,ne.classPrediction,Q.classPrediction,M.classPrediction],1);return{boxPredictions:fe,classPredictions:ie}})}class xi{constructor({minConfidence:r,maxResults:l}={}){this._name="SsdMobilenetv1Options";if(this._minConfidence=r||.5,this._maxResults=l||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}}const Ti=He(Ze());class dl extends Un{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Ti.tidy(()=>{const u=Ti.cast(r.toBatchTensor(512,!1),"float32"),d=Ti.sub(Ti.mul(u,Ti.scalar(.007843137718737125)),Ti.scalar(1)),f=QD(d,l.mobilenetv1),{boxPredictions:g,classPredictions:I}=nk(f.out,f.conv11,l.prediction_layer);return tk(g,I,l.output_layer)})}async forward(r){return this.forwardInput(await Wt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:d}=new xi(l),f=await Wt(r),{boxes:g,scores:I}=this.forwardInput(f),S=g[0],x=I[0];for(let ie=1;ie{const[we,Ae]=[Math.max(0,M[ie][0]),Math.min(1,M[ie][2])].map(ct=>ct*Q),[Me,et]=[Math.max(0,M[ie][1]),Math.min(1,M[ie][3])].map(ct=>ct*ne);return new Jt(N[ie],new Wu(Me,we,et-Me,Ae-we),{height:f.getInputHeight(0),width:f.getInputWidth(0)})});return S.dispose(),x.dispose(),fe}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ZD(r)}extractParams(r){return JD(r)}}function sk(r){const l=new dl;return l.extractWeights(r),l}function $ee(r){return sk(r)}class Uee extends dl{}const ik=.4,rk=[new Qe(.738768,.874946),new Qe(2.42204,2.65704),new Qe(4.30971,7.04493),new Qe(10.246,4.59428),new Qe(12.6868,11.8741)],ok=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],ak=[117.001,114.697,97.404],ck="tiny_yolov2_model",lk="tiny_yolov2_separable_conv_model";const ty=r=>typeof r=="number";function Ux(r){if(!r)throw new Error(`invalid config: ${r}`);if(typeof r.withSeparableConvs!="boolean")throw new Error(`config.withSeparableConvs has to be a boolean, have: ${r.withSeparableConvs}`);if(!ty(r.iouThreshold)||r.iouThreshold<0||r.iouThreshold>1)throw new Error(`config.iouThreshold has to be a number between [0, 1], have: ${r.iouThreshold}`);if(!Array.isArray(r.classes)||!r.classes.length||!r.classes.every(l=>typeof l=="string"))throw new Error(`config.classes has to be an array class names: string[], have: ${JSON.stringify(r.classes)}`);if(!Array.isArray(r.anchors)||!r.anchors.length||!r.anchors.map(l=>l||{}).every(l=>ty(l.x)&&ty(l.y)))throw new Error(`config.anchors has to be an array of { x: number, y: number }, have: ${JSON.stringify(r.anchors)}`);if(r.meanRgb&&(!Array.isArray(r.meanRgb)||r.meanRgb.length!==3||!r.meanRgb.every(ty)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Zs=He(Ze());function pl(r){return Zs.tidy(()=>{const l=Zs.mul(r,Zs.scalar(.10000000149011612));return Zs.add(Zs.relu(Zs.sub(r,l)),l)})}const Qs=He(Ze());function Dr(r,l){return Qs.tidy(()=>{let u=Qs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Qs.conv2d(u,l.conv.filters,[1,1],"valid"),u=Qs.sub(u,l.bn.sub),u=Qs.mul(u,l.bn.truediv),u=Qs.add(u,l.conv.bias),pl(u)})}const No=He(Ze());function kr(r,l){return No.tidy(()=>{let u=No.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=No.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=No.add(u,l.bias),pl(u)})}const Bx=He(Ze());function Bee(r,l){const u=rl(r,l);function d(I,S){const x=Bx.tensor1d(r(I)),N=Bx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:N}}function f(I,S,x){const N=u(I,S,3,`${x}/conv`),E=d(S,`${x}/bn`);return{conv:N,bn:E}}const g=ol(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}}function hk(r,l,u,d){const{extractWeights:f,getRemainingWeights:g}=Kn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:N}=Bee(f,I);let E;if(l.withSeparableConvs){const[_,A,U,ne,Q,M,fe,ie,we]=d,Ae=l.isFirstLayerConv2d?S(_,A,3,"conv0"):N(_,A,"conv0"),Me=N(A,U,"conv1"),et=N(U,ne,"conv2"),ct=N(ne,Q,"conv3"),$t=N(Q,M,"conv4"),Vt=N(M,fe,"conv5"),je=ie?N(fe,ie,"conv6"):void 0,hn=we?N(ie,we,"conv7"):void 0,bt=S(we||ie||fe,5*u,1,"conv8");E={conv0:Ae,conv1:Me,conv2:et,conv3:ct,conv4:$t,conv5:Vt,conv6:je,conv7:hn,conv8:bt}}else{const[_,A,U,ne,Q,M,fe,ie,we]=d,Ae=x(_,A,"conv0"),Me=x(A,U,"conv1"),et=x(U,ne,"conv2"),ct=x(ne,Q,"conv3"),$t=x(Q,M,"conv4"),Vt=x(M,fe,"conv5"),je=x(fe,ie,"conv6"),hn=x(ie,we,"conv7"),bt=S(we,5*u,1,"conv8");E={conv0:Ae,conv1:Me,conv2:et,conv3:ct,conv4:$t,conv5:Vt,conv6:je,conv7:hn,conv8:bt}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:E,paramMappings:I}}function Mee(r,l){const u=ws(r,l);function d(S){const x=u(`${S}/sub`,1),N=u(`${S}/truediv`,1);return{sub:x,truediv:N}}function f(S){const x=u(`${S}/filters`,4),N=u(`${S}/bias`,1);return{filters:x,bias:N}}function g(S){const x=f(`${S}/conv`),N=d(`${S}/bn`);return{conv:x,bn:N}}const I=al(u);return{extractConvParams:f,extractConvWithBatchNormParams:g,extractSeparableConvParams:I}}function uk(r,l){const u=[],{extractConvParams:d,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}=Mee(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?d("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:S>7?g("conv6"):void 0,conv7:S>8?g("conv7"):void 0,conv8:d("conv8")}}else I={conv0:f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:f("conv6"),conv7:f("conv7"),conv8:d("conv8")};return jn(r,u),{params:I,paramMappings:u}}var Mx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(Mx||(Mx={}));class Fr{constructor({inputSize:r,scoreThreshold:l}={}){this._name="TinyYolov2Options";if(this._inputSize=r||416,this._scoreThreshold=l||.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}}const Mt=He(Ze());class ml extends Un{constructor(r){super("TinyYolov2");Ux(r),this._config=r}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(r,l){let u=Dr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=Dr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=Dr(u,l.conv6),u=Dr(u,l.conv7),xa(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?pl(xa(r,l.conv0,"valid",!1)):kr(r,l.conv0);return u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv1),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv2),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv3),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv4),u=Mt.maxPool(u,[2,2],[2,2],"same"),u=kr(u,l.conv5),u=Mt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?kr(u,l.conv6):u,u=l.conv7?kr(u,l.conv7):u,xa(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return Mt.tidy(()=>{let d=Mt.cast(r.toBatchTensor(l,!1),"float32");return d=this.config.meanRgb?yi(d,this.config.meanRgb):d,d=d.div(Mt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(d,u):this.runTinyYolov2(d,u)})}async forward(r,l){return await this.forwardInput(await Wt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:d}=new Fr(l),f=await Wt(r),g=await this.forwardInput(f,u),I=Mt.tidy(()=>Mt.unstack(g)[0].expandDims()),S={width:f.getInputWidth(0),height:f.getInputHeight(0)},x=await this.extractBoxes(I,f.getReshapedInputDimensions(0),d);g.dispose(),I.dispose();const N=x.map(Q=>Q.box),E=x.map(Q=>Q.score),_=x.map(Q=>Q.classScore),A=x.map(Q=>this.config.classes[Q.label]),U=dI(N.map(Q=>Q.rescale(u)),E,this.config.iouThreshold,!0),ne=U.map(Q=>new Pc(E[Q],_[Q],A[Q],N[Q],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return uk(r,this.config)}extractParams(r){const l=this.config.filterSizes||ml.DEFAULT_FILTER_SIZES,u=l?l.length:void 0;if(u!==7&&u!==8&&u!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${u} filterSizes in config`);return hk(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:d,height:f}=l,g=Math.max(d,f),I=g/d,S=g/f,x=r.shape[1],N=this.config.anchors.length,[E,_,A]=Mt.tidy(()=>{const M=r.reshape([x,x,N,this.boxEncodingSize]),fe=M.slice([0,0,0,0],[x,x,N,4]),ie=M.slice([0,0,0,4],[x,x,N,1]),we=this.withClassScores?Mt.softmax(M.slice([0,0,0,5],[x,x,N,this.config.classes.length]),3):Mt.scalar(0);return[fe,ie,we]}),U=[],ne=await _.array(),Q=await E.array();for(let M=0;Mu){const Ae=(fe+_u(Q[M][fe][ie][0]))/x*I,Me=(M+_u(Q[M][fe][ie][1]))/x*S,et=Math.exp(Q[M][fe][ie][2])*this.config.anchors[ie].x/x*I,ct=Math.exp(Q[M][fe][ie][3])*this.config.anchors[ie].y/x*S,$t=Ae-et/2,Vt=Me-ct/2,je={row:M,col:fe,anchor:ie},{classScore:hn,label:bt}=this.withClassScores?await this.extractPredictedClass(A,je):{classScore:1,label:0};U.push({box:new Fu($t,Vt,$t+et,Vt+ct),score:we,classScore:we*hn,label:bt,...je})}}return E.dispose(),_.dispose(),A.dispose(),U}async extractPredictedClass(r,l){const{row:u,col:d,anchor:f}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>g[u][d][f][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}ml.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class hd extends ml{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:ik,classes:["face"]},r?{anchors:ok,meanRgb:ak}:{anchors:rk,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(d=>new Jt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?lk:ck}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function Pee(r,l=!0){const u=new hd(l);return u.extractWeights(r),u}class Px extends Fr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Ai{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const zx=He(Ze());async function Na(r,l,u,d,f=({alignedRect:g})=>g){const g=r.map(x=>Aa(x)?f(x):x.detection),I=d||(l instanceof zx.Tensor?await sl(l,g):await nl(l,g)),S=await u(I);return I.forEach(x=>x instanceof zx.Tensor&&x.dispose()),S}async function fl(r,l,u,d,f){return Na([r],l,async g=>u(g[0]),d,f)}const dk=.4,pk=[new Qe(1.603231,2.094468),new Qe(6.041143,7.080126),new Qe(2.882459,3.518061),new Qe(4.266906,5.178857),new Qe(9.041765,10.66308)],mk=[117.001,114.697,97.404];class ud extends ml{constructor(){const r={withSeparableConvs:!0,iouThreshold:dk,classes:["face"],anchors:pk,meanRgb:mk,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const u=await this.detect(r,l);return u.map(d=>new Jt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const yt={ssdMobilenetv1:new dl,tinyFaceDetector:new ud,tinyYolov2:new hd,faceLandmark68Net:new rd,faceLandmark68TinyNet:new _x,faceRecognitionNet:new ad,faceExpressionNet:new Ox,ageGenderNet:new Fx},fk=(r,l)=>yt.ssdMobilenetv1.locateFaces(r,l),zee=(r,l)=>yt.tinyFaceDetector.locateFaces(r,l),Vee=(r,l)=>yt.tinyYolov2.locateFaces(r,l),gk=r=>yt.faceLandmark68Net.detectLandmarks(r),Gee=r=>yt.faceLandmark68TinyNet.detectLandmarks(r),Yee=r=>yt.faceRecognitionNet.computeFaceDescriptor(r),Hee=r=>yt.faceExpressionNet.predictExpressions(r),qee=r=>yt.ageGenderNet.predictAgeAndGender(r),yk=r=>yt.ssdMobilenetv1.load(r),jee=r=>yt.tinyFaceDetector.load(r),Kee=r=>yt.tinyYolov2.load(r),Xee=r=>yt.faceLandmark68Net.load(r),Jee=r=>yt.faceLandmark68TinyNet.load(r),Zee=r=>yt.faceRecognitionNet.load(r),Qee=r=>yt.faceExpressionNet.load(r),ete=r=>yt.ageGenderNet.load(r),tte=yk,nte=fk,ste=gk;class bk extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class md extends bk{async run(){const r=await this.parentTask,l=await Na(r,this.input,async u=>await Promise.all(u.map(d=>yt.faceExpressionNet.predictExpressions(d))),this.extractedFaces);return r.map((u,d)=>jg(u,l[d]))}withAgeAndGender(){return new dd(this,this.input)}}class fd extends bk{async run(){const r=await this.parentTask;if(!r)return;const l=await fl(r,this.input,u=>yt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return jg(r,l)}withAgeAndGender(){return new pd(this,this.input)}}class bl extends md{withAgeAndGender(){return new gl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class wl extends fd{withAgeAndGender(){return new yl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class wk extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class dd extends wk{async run(){const r=await this.parentTask,l=await Na(r,this.input,async u=>await Promise.all(u.map(d=>yt.ageGenderNet.predictAgeAndGender(d))),this.extractedFaces);return r.map((u,d)=>{const{age:f,gender:g,genderProbability:I}=l[d];return Qg(ey(u,g,I),f)})}withFaceExpressions(){return new md(this,this.input)}}class pd extends wk{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:d}=await fl(r,this.input,f=>yt.ageGenderNet.predictAgeAndGender(f),this.extractedFaces);return Qg(ey(r,u,d),l)}withFaceExpressions(){return new fd(this,this.input)}}class gl extends dd{withFaceExpressions(){return new bl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class yl extends pd{withFaceExpressions(){return new wl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class Vx extends Ai{constructor(r,l){super();this.parentTask=r;this.input=l}}class Ca extends Vx{async run(){const r=await this.parentTask,l=await Na(r,this.input,u=>Promise.all(u.map(d=>yt.faceRecognitionNet.computeFaceDescriptor(d))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,d)=>Zg(r[d],u))}withFaceExpressions(){return new bl(this,this.input)}withAgeAndGender(){return new gl(this,this.input)}}class Ra extends Vx{async run(){const r=await this.parentTask;if(!r)return;const l=await fl(r,this.input,u=>yt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return Zg(r,l)}withFaceExpressions(){return new wl(this,this.input)}withAgeAndGender(){return new yl(this,this.input)}}const gd=He(Ze());class Gx extends Ai{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?yt.faceLandmark68TinyNet:yt.faceLandmark68Net}}class Yx extends Gx{async run(){const r=await this.parentTask,l=r.map(f=>f.detection),u=this.input instanceof gd.Tensor?await sl(this.input,l):await nl(this.input,l),d=await Promise.all(u.map(f=>this.landmarkNet.detectLandmarks(f)));return u.forEach(f=>f instanceof gd.Tensor&&f.dispose()),r.map((f,g)=>hl(f,d[g]))}withFaceExpressions(){return new bl(this,this.input)}withAgeAndGender(){return new gl(this,this.input)}withFaceDescriptors(){return new Ca(this,this.input)}}class Hx extends Gx{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof gd.Tensor?await sl(this.input,[l]):await nl(this.input,[l]),d=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(f=>f instanceof gd.Tensor&&f.dispose()),hl(r,d)}withFaceExpressions(){return new wl(this,this.input)}withAgeAndGender(){return new yl(this,this.input)}withFaceDescriptor(){return new Ra(this,this.input)}}class qx extends Ai{constructor(r,l=new xi){super();this.input=r;this.options=l}}class ny extends qx{async run(){const{input:r,options:l}=this,u=l instanceof Px?d=>yt.tinyFaceDetector.locateFaces(d,l):l instanceof xi?d=>yt.ssdMobilenetv1.locateFaces(d,l):l instanceof Fr?d=>yt.tinyYolov2.locateFaces(d,l):null;if(!u)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return u(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(u=>ha({},u)))})}withFaceLandmarks(r=!1){return new Yx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new md(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new dd(this.runAndExtendWithFaceDetections(),this.input)}}class jx extends qx{async run(){const r=await new ny(this.input,this.options);let l=r[0];return r.forEach(u=>{u.score>l.score&&(l=u)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?ha({},l):void 0)})}withFaceLandmarks(r=!1){return new Hx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new fd(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new pd(this.runAndExtendWithFaceDetection(),this.input)}}function ite(r,l=new xi){return new jx(r,l)}function sy(r,l=new xi){return new ny(r,l)}async function Lk(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await sy(r,new xi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function rte(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await sy(r,new Fr(l)).withFaceLandmarks().withFaceDescriptors()}const ote=Lk;function Kx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const u=Array.from(r),d=Array.from(l);return Math.sqrt(u.map((f,g)=>f-d[g]).reduce((f,g)=>f+Math.pow(g,2),0))}class Sk{constructor(r,l=.6){this._distanceThreshold=l;const u=Array.isArray(r)?r:[r];if(!u.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let d=1;const f=()=>`person ${d++}`;this._labeledDescriptors=u.map(g=>{if(g instanceof la)return g;if(g instanceof Float32Array)return new la(f(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new la(f(),[g.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(r,l){return l.map(u=>Kx(u,r)).reduce((u,d)=>u+d,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new uf(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>la.fromJSON(u));return new Sk(l,r.distanceThreshold)}}function ate(r){const l=new ud;return l.extractWeights(r),l}function Ik(r,l){const{width:u,height:d}=new ys(l.width,l.height);if(u<=0||d<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:u,height:d})}`);if(Array.isArray(r))return r.map(f=>Ik(f,{width:u,height:d}));if(Aa(r)){const f=r.detection.forSize(u,d),g=r.unshiftedLandmarks.forSize(f.box.width,f.box.height);return hl(ha(r,f),g)}return Vi(r)?ha(r,r.detection.forSize(u,d)):r instanceof js||r instanceof Jt?r.forSize(u,d):r}var xk="0.8.6";$c(exports,{AgeGenderNet:()=>Fx,BoundingBox:()=>Fu,Box:()=>_t,ComposableTask:()=>Ai,ComputeAllFaceDescriptorsTask:()=>Ca,ComputeFaceDescriptorsTaskBase:()=>Vx,ComputeSingleFaceDescriptorTask:()=>Ra,DetectAllFaceLandmarksTask:()=>Yx,DetectAllFacesTask:()=>ny,DetectFaceLandmarksTaskBase:()=>Gx,DetectFacesTaskBase:()=>qx,DetectSingleFaceLandmarksTask:()=>Hx,DetectSingleFaceTask:()=>jx,Dimensions:()=>ys,FACE_EXPRESSION_LABELS:()=>Rx,FaceDetection:()=>Jt,FaceDetectionNet:()=>Uee,FaceExpressionNet:()=>Ox,FaceExpressions:()=>Ta,FaceLandmark68Net:()=>rd,FaceLandmark68TinyNet:()=>_x,FaceLandmarkNet:()=>xee,FaceLandmarks:()=>js,FaceLandmarks5:()=>A9,FaceLandmarks68:()=>$u,FaceMatch:()=>uf,FaceMatcher:()=>Sk,FaceRecognitionNet:()=>ad,Gender:()=>Or,LabeledBox:()=>df,LabeledFaceDescriptors:()=>la,NetInput:()=>Io,NeuralNetwork:()=>Un,ObjectDetection:()=>Pc,Point:()=>Qe,PredictedBox:()=>v9,Rect:()=>Wu,SsdMobilenetv1:()=>dl,SsdMobilenetv1Options:()=>xi,TinyFaceDetector:()=>ud,TinyFaceDetectorOptions:()=>Px,TinyYolov2:()=>hd,TinyYolov2Options:()=>Fr,TinyYolov2SizeType:()=>Mx,allFaces:()=>ote,allFacesSsdMobilenetv1:()=>Lk,allFacesTinyYolov2:()=>rte,awaitMediaLoaded:()=>SI,bufferToImage:()=>II,computeFaceDescriptor:()=>Yee,createCanvas:()=>Vc,createCanvasFromMedia:()=>Bu,createFaceDetectionNet:()=>$ee,createFaceRecognitionNet:()=>vee,createSsdMobilenetv1:()=>sk,createTinyFaceDetector:()=>ate,createTinyYolov2:()=>Pee,detectAllFaces:()=>sy,detectFaceLandmarks:()=>gk,detectFaceLandmarksTiny:()=>Gee,detectLandmarks:()=>ste,detectSingleFace:()=>ite,draw:()=>Dx,env:()=>St,euclideanDistance:()=>Kx,extendWithAge:()=>Qg,extendWithFaceDescriptor:()=>Zg,extendWithFaceDetection:()=>ha,extendWithFaceExpressions:()=>jg,extendWithFaceLandmarks:()=>hl,extendWithGender:()=>ey,extractFaceTensors:()=>sl,extractFaces:()=>nl,fetchImage:()=>fee,fetchJson:()=>vx,fetchNetWeights:()=>gee,fetchOrThrow:()=>Ia,getContext2dOrThrow:()=>as,getMediaDimensions:()=>da,imageTensorToCanvas:()=>xI,imageToSquare:()=>Ax,inverseSigmoid:()=>S9,iou:()=>hI,isMediaElement:()=>gf,isMediaLoaded:()=>Uu,isWithAge:()=>Nee,isWithFaceDetection:()=>Vi,isWithFaceExpressions:()=>Ex,isWithFaceLandmarks:()=>Aa,isWithGender:()=>Cee,loadAgeGenderModel:()=>ete,loadFaceDetectionModel:()=>tte,loadFaceExpressionModel:()=>Qee,loadFaceLandmarkModel:()=>Xee,loadFaceLandmarkTinyModel:()=>Jee,loadFaceRecognitionModel:()=>Zee,loadSsdMobilenetv1Model:()=>yk,loadTinyFaceDetectorModel:()=>jee,loadTinyYolov2Model:()=>Kee,loadWeightMap:()=>Nx,locateFaces:()=>nte,matchDimensions:()=>yee,minBbox:()=>uI,nets:()=>yt,nonMaxSuppression:()=>dI,normalize:()=>yi,padToSquare:()=>pI,predictAgeAndGender:()=>qee,recognizeFaceExpressions:()=>Hee,resizeResults:()=>Ik,resolveInput:()=>ua,shuffleArray:()=>L9,sigmoid:()=>_u,ssdMobilenetv1:()=>fk,tf:()=>cte,tinyFaceDetector:()=>zee,tinyYolov2:()=>Vee,toNetInput:()=>Wt,utils:()=>oI,validateConfig:()=>Ux,version:()=>ute});const cte=He(Ze()),lte=typeof process!="undefined",hte=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",ute={faceapi:xk,node:lte,browser:hte}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.node.nobundle.js b/dist/face-api.node.nobundle.js index bb7a914..578561f 100644 --- a/dist/face-api.node.nobundle.js +++ b/dist/face-api.node.nobundle.js @@ -4289,7 +4289,7 @@ function resizeResults(results, dimensions) { } // package.json -var version = "0.8.5"; +var version = "0.8.6"; // src/index.ts __export(exports, { diff --git a/example/node.js b/example/node.js new file mode 100644 index 0000000..dfd9828 --- /dev/null +++ b/example/node.js @@ -0,0 +1,88 @@ +process.stderr.write = null; // silly hack to stock tfjs logging too much to stderr + +const fs = require('fs'); +const path = require('path'); +const fetch = require('node-fetch'); +const tf = require('@tensorflow/tfjs-node'); +const faceapi = require('../dist/face-api.node.js'); +// if you heve module installed, this would be +// const faceapi = require('@vladmandic/face-api'); + +// configuration options +const modelPathRoot = '../model/'; // path to model folder that will be loaded using http +const imgSize = 512; // maximum image size in pixels +const minScore = 0.1; // minimum score +const maxResults = 5; // maximum number of results to return +const samples = ['sample (1).jpg', 'sample (2).jpg', 'sample (3).jpg', 'sample (4).jpg', 'sample (5).jpg', 'sample (6).jpg']; // sample images to be loaded using http + +// helper function to pretty-print json object to string +function str(json) { + const text = json ? JSON.stringify(json).replace(/{|}|"|\[|\]/g, '').replace(/,/g, ', ') : ''; + return text; +} + +// helper function to print strings to html document as a log +function log(...txt) { + // eslint-disable-next-line no-console + console.log(...txt); +} + +async function image(img) { + const buffer = fs.readFileSync(img); + const decoded = tf.node.decodeImage(buffer); + const casted = decoded.toFloat(); + const image = casted.expandDims(0); + decoded.dispose(); + casted.dispose(); + return image; +} + +async function main() { + // initialize tfjs + log('FaceAPI Test'); + await faceapi.tf.setBackend('tensorflow'); + await faceapi.tf.enableProdMode(); + await faceapi.tf.ENV.set('DEBUG', false); + await faceapi.tf.ready(); + faceapi.env.monkeyPatch({ fetch: fetch }); + + // check version + log(`Version: TensorFlow/JS ${str(faceapi.tf?.version_core || '(not loaded)')} FaceAPI ${str(faceapi?.version || '(not loaded)')} Backend: ${str(faceapi.tf?.getBackend() || '(not loaded)')}`); + log(`Flags: ${JSON.stringify(faceapi.tf.ENV.flags)}`); + + // load face-api models + log('Loading FaceAPI models'); + const modelPath = path.join(__dirname, modelPathRoot); + await faceapi.nets.tinyFaceDetector.loadFromDisk(modelPath); + await faceapi.nets.ssdMobilenetv1.loadFromDisk(modelPath); + await faceapi.nets.ageGenderNet.loadFromDisk(modelPath); + await faceapi.nets.faceLandmark68Net.loadFromDisk(modelPath); + await faceapi.nets.faceRecognitionNet.loadFromDisk(modelPath); + await faceapi.nets.faceExpressionNet.loadFromDisk(modelPath); + const optionsTinyFace = new faceapi.TinyFaceDetectorOptions({ inputSize: imgSize, scoreThreshold: minScore }); + const optionsSSDMobileNet = new faceapi.SsdMobilenetv1Options({ minConfidence: minScore, maxResults }); + + // check tf engine state + const engine = await faceapi.tf.engine(); + log(`TF Engine State: ${str(engine.state)}`); + + const dir = fs.readdirSync(__dirname); + for (const img of dir) { + if (!img.toLocaleLowerCase().endsWith('.jpg')) continue; + // load image + const tensor = await image(path.join(__dirname, img)); + // actual model execution + const result = await faceapi + .detectAllFaces(tensor, optionsSSDMobileNet) + .withFaceLandmarks() + .withFaceExpressions() + .withFaceDescriptors() + .withAgeAndGender(); + log('Image:', img, 'faces:', result.length); + // you can access entire result object + // console.log(result); + tensor.dispose(); + } +} + +main(); diff --git a/package-lock.json b/package-lock.json index a9a32f1..0047aae 100644 --- a/package-lock.json +++ b/package-lock.json @@ -8,6 +8,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs/-/tfjs-2.7.0.tgz", "integrity": "sha512-LTYK6+emFweYa3zn/o511JUR6s14/yGZpoXvFSUtdwolYHI+J50r/CyYeFpvtoTD7uwcNFQhbBAtp4L4e3Hsaw==", + "dev": true, "requires": { "@tensorflow/tfjs-backend-cpu": "2.7.0", "@tensorflow/tfjs-backend-webgl": "2.7.0", @@ -26,6 +27,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-cpu/-/tfjs-backend-cpu-2.7.0.tgz", "integrity": "sha512-R6ORcWq3ub81ABvBZEZ8Ok5OOT59B4AsRe66ds7B/NK0nN+k6y37bR3ZDVjgkEKNWNvzB7ydODikge3GNmgQIQ==", + "dev": true, "requires": { "@types/seedrandom": "2.4.27", "seedrandom": "2.4.3" @@ -35,6 +37,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-backend-webgl/-/tfjs-backend-webgl-2.7.0.tgz", "integrity": "sha512-K7Rk5YTSWOZ969EZvh3w786daPn2ub4mA2JsX7mXKhBPUaOP9dKbBdLj9buCuMcu4zVq2pAp0QwpHSa4PHm3xg==", + "dev": true, "requires": { "@tensorflow/tfjs-backend-cpu": "2.7.0", "@types/offscreencanvas": "~2019.3.0", @@ -47,12 +50,14 @@ "@tensorflow/tfjs-converter": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-converter/-/tfjs-converter-2.7.0.tgz", - "integrity": "sha512-SBpKYn/MkN8US7DeTcnvqHpvp/WKcwzpdgkQF+eHMHEbS1lXSlt4BHhOFgRdLPzy1gEC9+6P0VdTE8NQ737t/Q==" + "integrity": "sha512-SBpKYn/MkN8US7DeTcnvqHpvp/WKcwzpdgkQF+eHMHEbS1lXSlt4BHhOFgRdLPzy1gEC9+6P0VdTE8NQ737t/Q==", + "dev": true }, "@tensorflow/tfjs-core": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-core/-/tfjs-core-2.7.0.tgz", "integrity": "sha512-4w5zjK6C5nkLatHpzARVQNd5QKtIocJRwjZIwWcScT9z2z1dX4rVmDoUpYg1cdD4H+yRRdI0awRaI3SL34yy8Q==", + "dev": true, "requires": { "@types/offscreencanvas": "~2019.3.0", "@types/seedrandom": "2.4.27", @@ -65,6 +70,7 @@ "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-data/-/tfjs-data-2.7.0.tgz", "integrity": "sha512-gsVklCwqqlxhykI7U2Uy5c2hjommQCAi+3y2/LER4TNtzQTzWaGKyIXvuLuL0tE896yuzXILIMZhkUjDmUiGxA==", + "dev": true, "requires": { "@types/node-fetch": "^2.1.2", "node-fetch": "~2.6.1" @@ -73,17 +79,48 @@ "@tensorflow/tfjs-layers": { "version": "2.7.0", "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-layers/-/tfjs-layers-2.7.0.tgz", - "integrity": "sha512-78zsD2LLrHQuDYv0EeV83LiF0M69lKsBfuTB3FIBgS85gapZPyHh4wooKda2Y4H9EtLogU+C6bArZuDo8PaX+g==" + "integrity": "sha512-78zsD2LLrHQuDYv0EeV83LiF0M69lKsBfuTB3FIBgS85gapZPyHh4wooKda2Y4H9EtLogU+C6bArZuDo8PaX+g==", + "dev": true + }, + "@tensorflow/tfjs-node": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/@tensorflow/tfjs-node/-/tfjs-node-2.7.0.tgz", + "integrity": "sha512-0cWplm7AE40gi2llqoAp+lD/0X3dVJ8kb7Arrqb5lMhShRWUFZpULH+F0fJI6Yax4LBTzBi2SZKGL/O8krZsxg==", + "dev": true, + "requires": { + "@tensorflow/tfjs": "2.7.0", + "@tensorflow/tfjs-core": "2.7.0", + "adm-zip": "^0.4.11", + "google-protobuf": "^3.9.2", + "https-proxy-agent": "^2.2.1", + "node-pre-gyp": "0.14.0", + "progress": "^2.0.0", + "rimraf": "^2.6.2", + "tar": "^4.4.6" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } }, "@types/node": { "version": "14.14.3", "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.3.tgz", - "integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==" + "integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==", + "dev": true }, "@types/node-fetch": { "version": "2.5.7", "resolved": "https://registry.npmjs.org/@types/node-fetch/-/node-fetch-2.5.7.tgz", "integrity": "sha512-o2WVNf5UhWRkxlf6eq+jMZDu7kjgpgJfl4xVNlvryc95O/6F2ld8ztKX+qu+Rjyet93WAWm5LjeX9H5FGkODvw==", + "dev": true, "requires": { "@types/node": "*", "form-data": "^3.0.0" @@ -92,36 +129,79 @@ "@types/offscreencanvas": { "version": "2019.3.0", "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.3.0.tgz", - "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==" + "integrity": "sha512-esIJx9bQg+QYF0ra8GnvfianIY8qWB0GBx54PK5Eps6m+xTj86KLavHv6qDhzKcu5UUOgNfJ2pWaIIV7TRUd9Q==", + "dev": true }, "@types/seedrandom": { "version": "2.4.27", "resolved": "https://registry.npmjs.org/@types/seedrandom/-/seedrandom-2.4.27.tgz", - "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=" + "integrity": "sha1-nbVjk33YaRX2kJK8QyWdL0hXjkE=", + "dev": true }, "@types/webgl-ext": { "version": "0.0.30", "resolved": "https://registry.npmjs.org/@types/webgl-ext/-/webgl-ext-0.0.30.tgz", - "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==" + "integrity": "sha512-LKVgNmBxN0BbljJrVUwkxwRYqzsAEPcZOe6S2T6ZaBDIrFp0qu4FNlpc5sM1tGbXUYFgdVQIoeLk1Y1UoblyEg==", + "dev": true }, "@types/webgl2": { "version": "0.0.5", "resolved": "https://registry.npmjs.org/@types/webgl2/-/webgl2-0.0.5.tgz", - "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==" + "integrity": "sha512-oGaKsBbxQOY5+aJFV3KECDhGaXt+yZJt2y/OZsnQGLRkH6Fvr7rv4pCt3SRH1somIHfej/c4u7NSpCyd9x+1Ow==", + "dev": true + }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, + "adm-zip": { + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/adm-zip/-/adm-zip-0.4.16.tgz", + "integrity": "sha512-TFi4HBKSGfIKsK5YCkKaaFG2m4PEDyViZmEwof3MTIgzimHLto6muaHVpbrljdIvIrFZzEq/p4nafOeLcYegrg==", + "dev": true + }, + "agent-base": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-4.3.0.tgz", + "integrity": "sha512-salcGninV0nPrwpGNn4VTXBb1SOuXQBiqbrNXoeizJsHrsL6ERFM2Ne3JUSBWRE6aeNJI2ROP/WEEIDUiDe3cg==", + "dev": true, + "requires": { + "es6-promisify": "^5.0.0" + } }, "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", + "dev": true }, "ansi-styles": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, "requires": { "color-convert": "^2.0.1" } }, + "aproba": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz", + "integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==", + "dev": true + }, + "are-we-there-yet": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz", + "integrity": "sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w==", + "dev": true, + "requires": { + "delegates": "^1.0.0", + "readable-stream": "^2.0.6" + } + }, "arg": { "version": "4.1.3", "resolved": "https://registry.npmjs.org/arg/-/arg-4.1.3.tgz", @@ -132,6 +212,7 @@ "version": "1.0.10", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", + "dev": true, "requires": { "sprintf-js": "~1.0.2" } @@ -139,7 +220,8 @@ "asynckit": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=" + "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", + "dev": true }, "balanced-match": { "version": "1.0.0", @@ -167,25 +249,40 @@ "version": "4.1.0", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", + "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "chownr": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", + "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", + "dev": true + }, "cliui": { "version": "7.0.3", "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", + "dev": true, "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", "wrap-ansi": "^7.0.0" } }, + "code-point-at": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", + "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", + "dev": true + }, "color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, "requires": { "color-name": "~1.1.4" } @@ -193,12 +290,14 @@ "color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true }, "combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -209,15 +308,56 @@ "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", "dev": true }, + "console-control-strings": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", + "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", + "dev": true + }, "core-js": { "version": "3.6.5", "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.6.5.tgz", - "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==" + "integrity": "sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA==", + "dev": true + }, + "core-util-is": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", + "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", + "dev": true + }, + "debug": { + "version": "3.2.6", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.6.tgz", + "integrity": "sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ==", + "dev": true, + "requires": { + "ms": "^2.1.1" + } + }, + "deep-extend": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", + "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", + "dev": true }, "delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=" + "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", + "dev": true + }, + "delegates": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", + "integrity": "sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o=", + "dev": true + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha1-+hN8S9aY7fVc1c0CrFWfkaTEups=", + "dev": true }, "diff": { "version": "4.0.2", @@ -228,7 +368,23 @@ "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "es6-promise": { + "version": "4.2.8", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-4.2.8.tgz", + "integrity": "sha512-HJDGx5daxeIvxdBxvG2cb9g4tEvwIk3i8+nhX0yGrYmZUzbkdg8QbDevheDB8gd0//uPj4c1EQua8Q+MViT0/w==", + "dev": true + }, + "es6-promisify": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/es6-promisify/-/es6-promisify-5.0.0.tgz", + "integrity": "sha1-UQnWLz5W6pZ8S2NQWu8IKRyKUgM=", + "dev": true, + "requires": { + "es6-promise": "^4.0.3" + } }, "esbuild": { "version": "0.6.34", @@ -239,28 +395,93 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true }, "form-data": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.0.tgz", "integrity": "sha512-CKMFDglpbMi6PyN+brwB9Q/GOw0eAnsrEZDgcsH5Krhz5Od/haKHAX0NmQfha2zPPz0JpWzA7GJHGSnvCRLWsg==", + "dev": true, "requires": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, + "fs-minipass": { + "version": "1.2.7", + "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-1.2.7.tgz", + "integrity": "sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA==", + "dev": true, + "requires": { + "minipass": "^2.6.0" + } + }, "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", "dev": true }, + "gauge": { + "version": "2.7.4", + "resolved": "https://registry.npmjs.org/gauge/-/gauge-2.7.4.tgz", + "integrity": "sha1-LANAXHU4w51+s3sxcCLjJfsBi/c=", + "dev": true, + "requires": { + "aproba": "^1.0.3", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.0", + "object-assign": "^4.1.0", + "signal-exit": "^3.0.0", + "string-width": "^1.0.1", + "strip-ansi": "^3.0.1", + "wide-align": "^1.1.0" + }, + "dependencies": { + "ansi-regex": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-2.1.1.tgz", + "integrity": "sha1-w7M6te42DYbg5ijwRorn7yfWVN8=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", + "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", + "dev": true, + "requires": { + "number-is-nan": "^1.0.0" + } + }, + "string-width": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", + "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "dev": true, + "requires": { + "code-point-at": "^1.0.0", + "is-fullwidth-code-point": "^1.0.0", + "strip-ansi": "^3.0.0" + } + }, + "strip-ansi": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", + "integrity": "sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8=", + "dev": true, + "requires": { + "ansi-regex": "^2.0.0" + } + } + } + }, "get-caller-file": { "version": "2.0.5", "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", - "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true }, "glob": { "version": "7.1.6", @@ -276,10 +497,51 @@ "path-is-absolute": "^1.0.0" } }, + "google-protobuf": { + "version": "3.13.0", + "resolved": "https://registry.npmjs.org/google-protobuf/-/google-protobuf-3.13.0.tgz", + "integrity": "sha512-ZIf3qfLFayVrPvAjeKKxO5FRF1/NwRxt6Dko+fWEMuHwHbZx8/fcaAao9b0wCM6kr8qeg2te8XTpyuvKuD9aKw==", + "dev": true + }, "has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==" + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "has-unicode": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/has-unicode/-/has-unicode-2.0.1.tgz", + "integrity": "sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk=", + "dev": true + }, + "https-proxy-agent": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-2.2.4.tgz", + "integrity": "sha512-OmvfoQ53WLjtA9HeYP9RNrWMJzzAz1JGaSFr1nijg0PVR1JaD/xbJq1mdEIIlxGpXp9eSe/O2LgU9DJmTPd0Eg==", + "dev": true, + "requires": { + "agent-base": "^4.3.0", + "debug": "^3.1.0" + } + }, + "iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dev": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3" + } + }, + "ignore-walk": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/ignore-walk/-/ignore-walk-3.0.3.tgz", + "integrity": "sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw==", + "dev": true, + "requires": { + "minimatch": "^3.0.4" + } }, "inflight": { "version": "1.0.6", @@ -297,10 +559,23 @@ "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", "dev": true }, + "ini": { + "version": "1.3.5", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.5.tgz", + "integrity": "sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw==", + "dev": true + }, "is-fullwidth-code-point": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE=", + "dev": true }, "make-error": { "version": "1.3.6", @@ -311,12 +586,14 @@ "mime-db": { "version": "1.44.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.44.0.tgz", - "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==" + "integrity": "sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg==", + "dev": true }, "mime-types": { "version": "2.1.27", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.27.tgz", "integrity": "sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w==", + "dev": true, "requires": { "mime-db": "1.44.0" } @@ -330,10 +607,151 @@ "brace-expansion": "^1.1.7" } }, + "minimist": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.5.tgz", + "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==", + "dev": true + }, + "minipass": { + "version": "2.9.0", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-2.9.0.tgz", + "integrity": "sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg==", + "dev": true, + "requires": { + "safe-buffer": "^5.1.2", + "yallist": "^3.0.0" + } + }, + "minizlib": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-1.3.3.tgz", + "integrity": "sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q==", + "dev": true, + "requires": { + "minipass": "^2.9.0" + } + }, + "mkdirp": { + "version": "0.5.5", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.5.tgz", + "integrity": "sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==", + "dev": true, + "requires": { + "minimist": "^1.2.5" + } + }, + "ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "needle": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/needle/-/needle-2.5.2.tgz", + "integrity": "sha512-LbRIwS9BfkPvNwNHlsA41Q29kL2L/6VaOJ0qisM5lLWsTV3nP15abO5ITL6L81zqFhzjRKDAYjpcBcwM0AVvLQ==", + "dev": true, + "requires": { + "debug": "^3.2.6", + "iconv-lite": "^0.4.4", + "sax": "^1.2.4" + } + }, "node-fetch": { "version": "2.6.1", "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.1.tgz", - "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==" + "integrity": "sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw==", + "dev": true + }, + "node-pre-gyp": { + "version": "0.14.0", + "resolved": "https://registry.npmjs.org/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz", + "integrity": "sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA==", + "dev": true, + "requires": { + "detect-libc": "^1.0.2", + "mkdirp": "^0.5.1", + "needle": "^2.2.1", + "nopt": "^4.0.1", + "npm-packlist": "^1.1.6", + "npmlog": "^4.0.2", + "rc": "^1.2.7", + "rimraf": "^2.6.1", + "semver": "^5.3.0", + "tar": "^4.4.2" + }, + "dependencies": { + "rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "requires": { + "glob": "^7.1.3" + } + } + } + }, + "nopt": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-4.0.3.tgz", + "integrity": "sha512-CvaGwVMztSMJLOeXPrez7fyfObdZqNUK1cPAEzLHrTybIua9pMdmmPR5YwtfNftIOMv3DPUhFaxsZMNTQO20Kg==", + "dev": true, + "requires": { + "abbrev": "1", + "osenv": "^0.1.4" + } + }, + "npm-bundled": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/npm-bundled/-/npm-bundled-1.1.1.tgz", + "integrity": "sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA==", + "dev": true, + "requires": { + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npm-normalize-package-bin": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz", + "integrity": "sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA==", + "dev": true + }, + "npm-packlist": { + "version": "1.4.8", + "resolved": "https://registry.npmjs.org/npm-packlist/-/npm-packlist-1.4.8.tgz", + "integrity": "sha512-5+AZgwru5IevF5ZdnFglB5wNlHG1AOOuw28WhUq8/8emhBmLv6jX5by4WJCh7lW0uSYZYS6DXqIsyZVIXRZU9A==", + "dev": true, + "requires": { + "ignore-walk": "^3.0.1", + "npm-bundled": "^1.0.1", + "npm-normalize-package-bin": "^1.0.1" + } + }, + "npmlog": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-4.1.2.tgz", + "integrity": "sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg==", + "dev": true, + "requires": { + "are-we-there-yet": "~1.1.2", + "console-control-strings": "~1.1.0", + "gauge": "~2.7.3", + "set-blocking": "~2.0.0" + } + }, + "number-is-nan": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/number-is-nan/-/number-is-nan-1.0.1.tgz", + "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", + "dev": true + }, + "object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", + "dev": true }, "once": { "version": "1.4.0", @@ -344,21 +762,84 @@ "wrappy": "1" } }, + "os-homedir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-homedir/-/os-homedir-1.0.2.tgz", + "integrity": "sha1-/7xJiDNuDoM94MFox+8VISGqf7M=", + "dev": true + }, + "os-tmpdir": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", + "integrity": "sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ=", + "dev": true + }, + "osenv": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/osenv/-/osenv-0.1.5.tgz", + "integrity": "sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g==", + "dev": true, + "requires": { + "os-homedir": "^1.0.0", + "os-tmpdir": "^1.0.0" + } + }, "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", "dev": true }, + "process-nextick-args": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-2.0.1.tgz", + "integrity": "sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==", + "dev": true + }, + "progress": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/progress/-/progress-2.0.3.tgz", + "integrity": "sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==", + "dev": true + }, + "rc": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", + "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", + "dev": true, + "requires": { + "deep-extend": "^0.6.0", + "ini": "~1.3.0", + "minimist": "^1.2.0", + "strip-json-comments": "~2.0.1" + } + }, + "readable-stream": { + "version": "2.3.7", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.7.tgz", + "integrity": "sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==", + "dev": true, + "requires": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" + } + }, "regenerator-runtime": { "version": "0.13.7", "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz", - "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==" + "integrity": "sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew==", + "dev": true }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", + "dev": true }, "rimraf": { "version": "3.0.2", @@ -369,10 +850,47 @@ "glob": "^7.1.3" } }, + "safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", + "dev": true + }, + "sax": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.2.4.tgz", + "integrity": "sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw==", + "dev": true + }, "seedrandom": { "version": "2.4.3", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-2.4.3.tgz", - "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=" + "integrity": "sha1-JDhQTa0zkXMUv/GKxNeU8W1qrsw=", + "dev": true + }, + "semver": { + "version": "5.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", + "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", + "dev": true + }, + "set-blocking": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/set-blocking/-/set-blocking-2.0.0.tgz", + "integrity": "sha1-BF+XgtARrppoA93TgrJDkrPYkPc=", + "dev": true + }, + "signal-exit": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.3.tgz", + "integrity": "sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA==", + "dev": true }, "source-map": { "version": "0.6.1", @@ -393,34 +911,68 @@ "sprintf-js": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.0.3.tgz", - "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=" + "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", + "dev": true }, "string-width": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.0.tgz", "integrity": "sha512-zUz5JD+tgqtuDjMhwIg5uFVV3dtqZ9yQJlZVfq4I01/K5Paj5UHj7VyrQOJvzawSVlKpObApbfD0Ed6yJc+1eg==", + "dev": true, "requires": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", "strip-ansi": "^6.0.0" } }, + "string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "requires": { + "safe-buffer": "~5.1.0" + } + }, "strip-ansi": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.0.tgz", "integrity": "sha512-AuvKTrTfQNYNIctbR1K/YGTR1756GycPsg7b9bdV9Duqur4gv6aKqHXah67Z8ImS7WEz5QVcOtlfW2rZEugt6w==", + "dev": true, "requires": { "ansi-regex": "^5.0.0" } }, + "strip-json-comments": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", + "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", + "dev": true + }, "supports-color": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, "requires": { "has-flag": "^4.0.0" } }, + "tar": { + "version": "4.4.13", + "resolved": "https://registry.npmjs.org/tar/-/tar-4.4.13.tgz", + "integrity": "sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA==", + "dev": true, + "requires": { + "chownr": "^1.1.1", + "fs-minipass": "^1.2.5", + "minipass": "^2.8.6", + "minizlib": "^1.2.1", + "mkdirp": "^0.5.0", + "safe-buffer": "^5.1.2", + "yallist": "^3.0.3" + } + }, "ts-node": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-9.0.0.tgz", @@ -446,10 +998,59 @@ "integrity": "sha512-wM4uCHgnK3SWW3a655een4MF9cDmsUsENRj55foBpt1mRxFjd1OniePSDBvOqdgEncSpAJfVMnB7hyHPhB0Qog==", "dev": true }, + "util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", + "dev": true + }, + "wide-align": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/wide-align/-/wide-align-1.1.3.tgz", + "integrity": "sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA==", + "dev": true, + "requires": { + "string-width": "^1.0.2 || 2" + }, + "dependencies": { + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "string-width": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-2.1.1.tgz", + "integrity": "sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw==", + "dev": true, + "requires": { + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^4.0.0" + } + }, + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", + "dev": true, + "requires": { + "ansi-regex": "^3.0.0" + } + } + } + }, "wrap-ansi": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, "requires": { "ansi-styles": "^4.0.0", "string-width": "^4.1.0", @@ -465,12 +1066,20 @@ "y18n": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", - "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==", + "dev": true + }, + "yallist": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", + "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", + "dev": true }, "yargs": { "version": "16.1.0", "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", + "dev": true, "requires": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -484,7 +1093,8 @@ "yargs-parser": { "version": "20.2.3", "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", - "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==" + "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==", + "dev": true }, "yn": { "version": "3.1.1", diff --git a/package.json b/package.json index ba4606c..6379e04 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,6 @@ "engines": { "node": ">=12.0.0" }, - "type": "module", "scripts": { "build-esm": "esbuild --bundle --format=esm --target=es2018 --platform=browser --minify --sourcemap --outfile=./dist/face-api.esm.js --log-level=error --tsconfig=./tsconfig.json --external:util --external:string_decoder --external:fs src/index.ts", "build-esm-nobundle": "esbuild --bundle --format=esm --target=es2018 --platform=browser --sourcemap --outfile=./dist/face-api.esm.nobundle.js --log-level=error --tsconfig=./tsconfig.json --external:@tensorflow --external:util --external:string_decoder --external:fs --global-name=faceapi src/index.ts", @@ -42,6 +41,8 @@ "homepage": "https://github.com/vladmandic/face-api#readme", "Dependencies": {}, "devDependencies": { + "@tensorflow/tfjs": "^2.7.0", + "@tensorflow/tfjs-node": "^2.7.0", "@types/node": "^14.11.8", "esbuild": "^0.6.34", "rimraf": "^3.0.2", @@ -49,7 +50,5 @@ "tslib": "^2.0.3", "typescript": "^4.1.0-dev.20201013" }, - "dependencies": { - "@tensorflow/tfjs": "^2.7.0" - } + "dependencies": {} }