From 492c761042eb679e697f45b445b5fe14e5c7cfcd Mon Sep 17 00:00:00 2001 From: Vladimir Mandic Date: Sun, 25 Oct 2020 20:17:15 -0400 Subject: [PATCH] updated dependencies --- README.md | 1 + build/package.json | 2 +- dist/face-api.cjs | 2 +- dist/face-api.esm.js | 2 +- dist/face-api.js | 2 +- dist/face-api.nobundle.cjs | 2 +- dist/face-api.nobundle.js | 2 +- package-lock.json | 68 +++++++++++++++----------------------- 8 files changed, 33 insertions(+), 48 deletions(-) diff --git a/README.md b/README.md index 4cf328b..31cc17c 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,7 @@ Unfortunately, changes ended up being too large for a simple pull request on ori ### Differences - Compatible with `TensorFlow/JS 2.0+` +- Compatible with `WebGL`, `CPU` and `WASM` TFJS backends - Updated all type castings for TypeScript type checking to `TypeScript 4.1` - Switched bundling from `UMD` to `ESM` + `CommonJS` This does require separate process for usage in NodeJS vs Browser, but resulting code is much lighter diff --git a/build/package.json b/build/package.json index 73ebb2f..c11435c 100644 --- a/build/package.json +++ b/build/package.json @@ -1,6 +1,6 @@ { "name": "@vladmandic/face-api", - "version": "0.8.1", + "version": "0.8.2", "description": "JavaScript module for Face Detection and Face Recognition Using Tensorflow/JS", "main": "dist/face-api.cjs", "module": "dist/face-api.esm.js", diff --git a/dist/face-api.cjs b/dist/face-api.cjs index 2043fa4..9863764 100644 --- a/dist/face-api.cjs +++ b/dist/face-api.cjs @@ -3819,7 +3819,7 @@ return a / b;`,w7=` `)}function sJ(r,l,h,d){const f=qt(l),g=d[d.length-1],S=new Array(g).fill(0),L=l.length,x=h==="complex64"?Ou(r):r;if(L>1)for(let A=0;AJR){const se=Cu*S;let fe=Array.from(r.slice(0,se)),de=Array.from(r.slice((L-Cu)*S,L*S));return h==="complex64"&&(fe=Ou(fe),de=Ou(de)),["["+fe.map((Ae,xe)=>Ru(Ae,f[xe],h)).join(", ")+", ..., "+de.map((Ae,xe)=>Ru(Ae,f[L-Cu+xe],h)).join(", ")+"]"]}const te=h==="complex64"?Ou(r):Array.from(r);return["["+te.map((se,fe)=>Ru(se,f[fe],h)).join(", ")+"]"]}const A=l.slice(1),O=d.slice(1),C=d[0]*S,$=[];if(L>JR){for(let te=0;te`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=h||zR(l,this.size),this.strides=Nu(r)}set(r,...l){l.length===0&&(l=[0]),Z(l.length===this.rank,()=>`The number of provided coordinates (${l.length}) must match the rank (${this.rank})`);const h=this.locToIndex(l);this.values[h]=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 h=r[r.length-1];for(let d=0;ddI(h))}catch(h){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=>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 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 Uc.print(this,r)}clone(){return this.throwIfDisposed(),Uc.clone(this)}toString(r=!1){const l=this.dataSync();return ZR(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),Uc.cast(this,r)}variable(r=!0,l,h){return this.throwIfDisposed(),Yi().makeVariable(this,r,l,h)}}Object.defineProperty(Tn,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class Pf extends Tn{constructor(r,l,h,d){super(r.shape,r.dtype,r.dataId,d);this.trainable=l,this.name=h}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(!oa(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(Pf,Symbol.hasInstance,{value:r=>r instanceof Tn&&r.assign!=null&&r.assign instanceof Function});var iO;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(iO||(iO={}));var mI;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(mI||(mI={}));var fI;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(fI||(fI={}));var gI;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(gI||(gI={}));var yI;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(yI||(yI={}));const rJ={float32:gI,int32:mI,bool:fI,complex64:yI};function rO(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return rJ[r][l]}function mt(r,l){if(r.dtype===l.dtype)return[r,l];const h=rO(r.dtype,l.dtype);return[r.cast(h),l.cast(h)]}function zf(r){const l=[],h=new Set;return oO(r,l,h),l}function oO(r,l,h){if(r==null)return;if(r instanceof Tn){l.push(r);return}if(!oJ(r))return;const d=r;for(const f in d){const g=d[f];h.has(g)||(h.add(g),oO(g,l,h))}}function oJ(r){return Array.isArray(r)||typeof r=="object"}class aO{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 Eu{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new aO}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=cI(r);l.forEach(h=>{h.disposeFunc!=null&&h.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 h=l.factory();if(h&&!(h instanceof h2)&&typeof h.then=="function"){const d=++this.pendingBackendInitId,f=h.then(g=>d(dthis.registryFactory[l].priority-this.registryFactory[r].priority)}initializeBackendsAndReturnBest(){const r=this.getSortedBackends();for(let l=0;lthis.startScope(h),()=>this.endScope(d),()=>(d=l(),d instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),d))}scopedRun(r,l,h){r();try{const d=h();return l(),d}catch(d){throw l(),d}}nextTensorId(){return Eu.nextTensorId++}nextVariableId(){return Eu.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),h={x:r},d=g=>({x:()=>{const S="float32",L={x:g},x={dtype:S};return H.runKernelFunc(A=>A.cast(g,S),L,null,Fc,x)}}),f=[];return this.addTapeNode(this.state.activeScope.name,h,[l],d,f,{}),l}runKernel(r,l,h,d,f){const g=null,S=null;return this.runKernelFunc(g,l,S,r,h,d,f)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,h){const d=this.backend.numDataIds();let f=0;h.forEach(L=>{f+=L.dtype==="complex64"?3:1});const g=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],S=d-l-f-g;if(S>0)throw new Error(`Backend '${this.backendName}' has an internal memory leak (${S} data ids) after running '${r}'`)}runKernelFunc(r,l,h,d,f,g,S){let L,x=[];const A=this.isTapeOn();d==null&&(d=this.state.activeScope!=null?this.state.activeScope.name:"");const O=this.state.numBytes,C=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let $;const z=Wf(d,this.backendName);let ne;if(z!=null)$=()=>{const se=this.backend.numDataIds();ne=z.kernelFunc({inputs:l,attrs:f,backend:this.backend});const fe=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,se,fe);const de=fe.map(({dataId:Ae,shape:xe,dtype:Me})=>this.makeTensorFromDataId(Ae,xe,Me));if(A){let Ae=this.getTensorsForGradient(d,l,de);if(Ae==null){S==null&&(S=[]);const xe=de.filter((Me,Ke)=>S[Ke]);Ae=(g||[]).slice().concat(xe)}x=this.saveTensorsForBackwardMode(Ae)}return de};else{const se=fe=>{if(!A)return;x=fe.map(de=>this.keep(this.clone(de)))};$=()=>{const fe=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,se));const de=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(d,fe,de),de}}let te;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?L=$():(te=this.profiler.profileKernel(d,l,()=>$()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(te),L=te.outputs)}),A&&this.addTapeNode(d,l,L,h,x,f),this.state.profiling&&this.state.activeProfile.kernels.push({name:d,bytesAdded:this.state.numBytes-O,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-C,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(se=>l[se]!=null?l[se].shape:null),outputShapes:L.map(se=>se.shape),kernelTimeMs:te.timeMs,extraInfo:te.extraInfo}),Array.isArray(ne)?L:L[0]}saveTensorsForBackwardMode(r){const l=r.map(h=>this.keep(this.clone(h)));return l}getTensorsForGradient(r,l,h){const d=aI(r);if(d!=null){const f=d.inputsToSave||[],g=d.outputsToSave||[];let S;d.saveAllInputs?(Z(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),S=Object.keys(l).map(x=>l[x])):S=f.map(x=>l[x]);const L=h.filter((x,A)=>g[A]);return S.concat(L)}return null}makeTensor(r,l,h,d){if(r==null)throw new Error("Values passed to engine.makeTensor() are null");h=h||"float32",d=d||this.backend;let f=r;h==="string"&&Au(r[0])&&(f=r.map(L=>qR(L)));const g=d.write(f,l,h),S=new Tn(l,h,g,this.nextTensorId());if(this.incRef(S,d),h==="string"){const L=this.state.tensorInfo.get(g),x=HR(f);this.state.numBytes+=x-L.bytes,L.bytes=x}return S}makeTensorFromDataId(r,l,h,d){h=h||"float32";const f=new Tn(l,h,r,this.nextTensorId());return this.incRef(f,d),f}makeVariable(r,l=!0,h,d){h=h||this.nextVariableId().toString(),d!=null&&d!==r.dtype&&(r=r.cast(d));const f=new Pf(r,l,h,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 h=this.state.tensorInfo.has(r.dataId)?this.state.tensorInfo.get(r.dataId).refCount:0;if(this.state.numTensors++,r.dtype==="string"&&this.state.numStringTensors++,h===0){this.state.numDataBuffers++;let d=0;r.dtype!=="complex64"&&r.dtype!=="string"&&(d=r.size*VR(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 Pf||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),h=l.refCount;h<=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,h=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-h;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,h,d,f,g){const S={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:h,saved:f},L=aI(r);L!=null&&(d=L.gradFunc),d!=null&&(S.gradient=x=>(x=x.map((A,O)=>{if(A==null){const C=h[O],$=aa(C.size,C.dtype);return this.makeTensor($,C.shape,C.dtype)}return A}),d(x.length>1?x:x[0],f,g))),this.state.activeTape.push(S)}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=zf(r),h=new Set(l.map(f=>f.id));for(let f=0;f{!f.kept&&f.scopeId===d.id&&this.track(f)})}gradients(r,l,h,d=!1){if(Z(l.length>0,()=>"gradients() received an empty list of xs."),h!=null&&h.dtype!=="float32")throw new Error(`dy must have 'float32' dtype, but has '${h.dtype}'`);const f=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));Z(f instanceof Tn,()=>"The result y returned by f() must be a tensor.");const g=KR(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 S={};S[f.id]=h==null?aJ(f.shape):h,XR(S,g,x=>this.tidy(x),cJ);const L=l.map(x=>S[x.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(x=>{for(const A of x.saved)A.dispose()}),this.state.activeTape=null),{value:f,grads:L}})}customGrad(r){return Z(lI(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{Z(l.every(f=>f instanceof Tn),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let h;const d={};return l.forEach((f,g)=>{d[g]=f}),this.runKernelFunc((f,g)=>(h=r(...l,g),Z(h.value instanceof Tn,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),Z(lI(h.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),h.value),d,(f,g)=>{const S=h.gradFunc(f,g),L=Array.isArray(S)?S:[S];Z(L.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(...)."),Z(L.every(A=>A instanceof Tn),()=>"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 L.forEach((A,O)=>{x[O]=()=>A}),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=uI(),h=await this.backend.time(r);return h.wallMs=uI()-l,h}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 aO;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}}Eu.nextTensorId=0;Eu.nextVariableId=0;function aJ(r){const l=Uf(qt(r),"float32");return H.makeTensor(l,r,"float32")}function bI(){const r=sI();if(r._tfengine==null){const l=new d2(r);r._tfengine=new Eu(l)}return m2(r._tfengine.ENV),tO(()=>r._tfengine),r._tfengine}const H=bI();function cJ(r,l){const h={a:r,b:l};return H.runKernelFunc((d,f)=>{const g=d.add(r,l);return f([r,l]),g},h,null,kc)}function cO(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const br=Es();br.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.")});br.registerFlag("IS_BROWSER",()=>cO());br.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");br.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));br.registerFlag("PROD",()=>!1);br.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>br.getBool("DEBUG"));br.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);br.registerFlag("IS_TEST",()=>!1);function wr(r,l){let h=r;if(Ds(r))return l==="string"?[]:[r.length];if(!Array.isArray(r))return[];const d=[];for(;Array.isArray(h)||Ds(h)&&l!=="string";)d.push(h.length),h=h[0];return Array.isArray(r)&&Es().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&lO(r,d,[]),d}function lO(r,l,h){if(h=h||[],!Array.isArray(r)&&!Ds(r)){Z(l.length===0,()=>`Element arr[${h.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}Z(l.length>0,()=>`Element arr[${h.join("][")}] should be a primitive, but is an array of ${r.length} elements`),Z(r.length===l[0],()=>`Element arr[${h.join("][")}] should have ${l[0]} elements, but has ${r.length} elements`);const d=l.slice(1);for(let f=0;f=0&&(f=d),hO(d,f,l,h),r==null||!Ds(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 '${h}' must be a Tensor or TensorLike, but got '${x}'`)}const g=wr(r,f);!Ds(r)&&!Array.isArray(r)&&(r=[r]);const S=!0,L=f!=="string"?$f(r,f):Wc(r,[],S);return H.makeTensor(L,g,f)}function Gf(r,l,h,d="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${h} must be a \`Tensor[]\` or \`TensorLike[]\``);const f=r;return f.map((g,S)=>M(g,`${l}[${S}]`,h),d)}const uO="__op";function G(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 h=l[0];const d=r[h];h.endsWith("_")&&(h=h.substring(0,h.length-1)),h=h+uO;const f=(...g)=>{H.startScope(h);try{const S=d(...g);return S instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),H.endScope(S),S}catch(S){throw H.endScope(null),S}};return Object.defineProperty(f,"name",{value:h,configurable:!0}),f}function lJ(r,l){const h=M(r,"real","complex"),d=M(l,"imag","complex");Zt(h.shape,d.shape,`real and imag shapes, ${h.shape} and ${d.shape}, must match in call to tf.complex().`);const f=S=>S.complex(h,d),g={real:h,imag:d};return H.runKernelFunc(f,g,null,E2)}const qi=G({complex_:lJ});function ji(r,l,h,d){if(d==null&&(d=vu(r)),d==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Ds(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=qt(l),g=qt(h);Z(f===g,()=>`Based on the provided shape, [${l}], the tensor should have ${f} values but has ${g}`);for(let S=0;S`Error creating a new Tensor. Inferred shape (${h}) does not match the provided shape (${l}). `)}}return!Ds(r)&&!Array.isArray(r)&&(r=[r]),l=l||h,r=d!=="string"?$f(r,d):Wc(r,[],!0),H.makeTensor(r,l,d)}function wI(r,l,h){const d=wr(r,h);return ji(r,l,d,h)}function Du(r,l="float32",h){return l=l||"float32",Bf(r),new eO(r,l,h)}function hJ(r,l){const h=M(r,"x","cast");if(!GR(l))throw new Error(`Failed to cast to unknown dtype ${l}`);if(l==="string"&&h.dtype!=="string"||l!=="string"&&h.dtype==="string")throw new Error("Only strings can be casted to strings");const d={x:h},f={dtype:l};return H.runKernelFunc(g=>g.cast(h,l),d,null,Fc,f)}const Le=G({cast_:hJ});function uJ(r){const l=M(r,"x","clone",null),h=()=>H.makeTensorFromDataId(l.dataId,l.shape,l.dtype),d={x:l};return H.runKernelFunc(h,d,null,tf)}const bi=G({clone_:uJ});function LI(r,l=!1){console.log(r.toString(l))}bI();const dJ={buffer:Du,cast:Le,clone:bi,print:LI};nO(dJ);function pJ(r,l){const h=M(r,"x","reshape",null),d={x:h},f={shape:l},g=(S,L)=>(l=MR(l,h.size),Z(h.size===qt(l),()=>"new shape and old shape must have the same number of elements."),L([h]),S.reshape(h,l));return H.runKernelFunc(g,d,null,mf,f)}const re=G({reshape_:pJ});function mJ(r,l,h=!1,d=!1){let f=M(r,"a","matMul"),g=M(l,"b","matMul");[f,g]=mt(f,g),Z(f.rank>=2&&g.rank>=2&&f.rank===g.rank,()=>`Error in matMul: inputs must have the same rank of at least 2, got ranks ${f.rank} and ${g.rank}.`);const S=h?f.shape[f.rank-2]:f.shape[f.rank-1],L=d?g.shape[g.rank-1]:g.shape[g.rank-2],x=h?f.shape[f.rank-1]:f.shape[f.rank-2],A=d?g.shape[g.rank-2]:g.shape[g.rank-1],O=f.shape.slice(0,-2),C=g.shape.slice(0,-2),$=qt(O),z=qt(C);Z(oa(O,C),()=>`Error in matMul: outer dimensions (${O}) and (${C}) of Tensors with shapes ${f.shape} and ${g.shape} must match.`),Z(S===L,()=>`Error in matMul: inner shapes (${S}) and (${L}) of Tensors with shapes ${f.shape} and ${g.shape} and transposeA=${h} and transposeB=${d} must match.`);const ne=f.shape.slice(0,-2).concat([x,A]),te=h?re(f,[$,S,x]):re(f,[$,x,S]),se=d?re(g,[z,A,L]):re(g,[z,L,A]),fe=(Me,Ke)=>(Ke([te,se]),Me.batchMatMul(te,se,h,d)),de={a:te,b:se},Ae={transposeA:h,transposeB:d},xe=H.runKernelFunc(fe,de,null,Mm,Ae);return re(xe,ne)}const pn=G({matMul_:mJ});function fJ(r,l){const h=M(r,"x","transpose");if(l==null&&(l=h.shape.map((g,S)=>S).reverse()),Z(h.rank===l.length,()=>`Error in transpose: rank of input ${h.rank} must match length of perm ${l}.`),l.forEach(g=>{Z(g>=0&&g`All entries in 'perm' must be between 0 and ${h.rank-1} but got ${l}`)}),h.rank<=1)return h.clone();const d={x:h},f={perm:l};return H.runKernelFunc(g=>g.transpose(h,l),d,null,Ef,f)}const Wt=G({transpose_:fJ});function SI(r,l,h){if(_c(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const d=wr(r,h);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 ji(r,l,d,h)}const II={};vc(II,{fromPixels:()=>bJ,toPixels:()=>yJ});let Bc;function gJ(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 h=!1,d=!1,f=!1,g=!1,S=!1;if(r.data instanceof Uint8Array)h=!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)S=!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 z=2;if(f&&r.readyState element.")}const L=Wf(rI,H.backendName);if(L!=null){const z={pixels:r},ne={numChannels:l};return H.runKernel(rI,z,ne)}const[x,A]=f?[r.videoWidth,r.videoHeight]:[r.width,r.height];let O;S?O=r.getContext("2d").getImageData(0,0,x,A).data:d||h?O=r.data:(g||f)&&(Bc==null&&(Bc=document.createElement("canvas").getContext("2d")),Bc.canvas.width=x,Bc.canvas.height=A,Bc.drawImage(r,0,0,x,A),O=Bc.getImageData(0,0,x,A).data);let C;if(l===4)C=new Int32Array(O);else{const z=x*A;C=new Int32Array(z*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(h.dtype!=="float32"&&h.dtype!=="int32")throw new Error(`Unsupported type for toPixels: ${h.dtype}. Please use float32 or int32 tensors.`);const S=await h.data(),L=h.dtype==="float32"?255:1,x=new Uint8ClampedArray(f*d*4);for(let A=0;A1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${z}.`)}else if(h.dtype==="int32"&&(z<0||z>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${z}.`);g===1?(O[0]=z*L,O[1]=z*L,O[2]=z*L):O[$]=z*L}const C=A*4;x[C+0]=Math.round(O[0]),x[C+1]=Math.round(O[1]),x[C+2]=Math.round(O[2]),x[C+3]=Math.round(O[3])}if(l!=null){l.width=f,l.height=d;const A=l.getContext("2d"),O=new ImageData(x,f,d);A.putImageData(O,0,0)}return h!==r&&h.dispose(),x}const bJ=G({fromPixels_:gJ});function dO(r,l,h){const d=r.shape.length;Z(d===l.length,()=>`Error in slice${d}D: Length of begin ${l} must match the rank of the array (${d}).`),Z(d===h.length,()=>`Error in slice${d}D: Length of size ${h} must match the rank of the array (${d}).`);for(let f=0;f`Error in slice${d}D: begin[${f}] + size[${f}] (${l[f]+h[f]}) would overflow input.shape[${f}] (${r.shape[f]})`)}function Vf(r,l,h){let d;const f=r.shape.length;typeof l=="number"?d=[l,...new Array(f-1).fill(0)]:l.length{Z(S!==-1,()=>"slice() does not support negative begin indexing.")});let g;return h==null?g=new Array(f).fill(-1):typeof h=="number"?g=[h,...new Array(f-1).fill(-1)]:h.lengthS>=0?S:(Z(S===-1,()=>`Negative size values should be exactly -1 but got ${S} for the slice() size at index ${L}.`),r.shape[L]-d[L])),[d,g]}function wJ(r){Es().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}sO(wJ);function pO(r,l){return H.tidy(r,l)}function mO(r){const l=zf(r);l.forEach(h=>h.dispose())}function LJ(r,l){let h=M(r,"a","add"),d=M(l,"b","add");[h,d]=mt(h,d);const f=(S,L)=>{const x=S.add(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,kc)}const St=G({add_:LJ});function SJ(r,l){let h=M(r,"a","floorDiv"),d=M(l,"b","floorDiv");[h,d]=mt(h,d);const f=(S,L)=>{const x=S.floorDiv(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,Zm)}const xI=G({floorDiv_:SJ});function IJ(r,l){let h=M(r,"a","div"),d=M(l,"b","div");if([h,d]=mt(h,d),h.dtype==="int32"&&d.dtype==="int32")return xI(h,d);const f=(L,x)=>{const A=L.realDivide(h,d);return x([h,d]),A},g={a:h,b:d},S={};return H.runKernelFunc(f,g,null,Km,S)}const ze=G({div_:IJ});function xJ(r,l){let h=M(r,"a","mul"),d=M(l,"b","mul");[h,d]=mt(h,d);const f=(S,L)=>{const x=S.multiply(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,lf)}const ae=G({mul_:xJ});function TJ(r){const l=M(r,"x","abs"),h={x:l};return H.runKernelFunc((d,f)=>(f([l]),l.dtype==="complex64"?d.complexAbs(l):d.abs(l)),h,null,Bm)}const Pn=G({abs_:TJ});function AJ(r,l){for(let h=0;hr[g]);return[h,f]}function ts(r,l){const h=l.map(d=>1);return vJ(r,h,l)}function fs(r,l){if(AJ(r,l))return null;const h=[];for(let d=0;dh.push(d)),h}function Mc(r){return r.map((l,h)=>[h,l]).sort((l,h)=>l[1]-h[1]).map(l=>l[0])}function oo(r,l){const h=[];for(let d=l-r;d`The output # of rows (${L}) must be an integer. Change the stride and/or zero pad parameters`);const x=ca((S-l+2*d)/h+1,f);return Z(Qt(x),()=>`The output # of columns (${x}) must be an integer. Change the stride and/or zero pad parameters`),[L,x]}function OJ(r,l,h,d,f,g){f==null&&(f=gO(r,l,d));const S=r[0],L=r[1],x=r[2],A=ca((S-l+2*f)/d+1,g);Z(Qt(A),()=>`The output # of depths (${A}) must be an integer. Change the stride and/or zero pad parameters`);const O=ca((L-l+2*f)/d+1,g);Z(Qt(O),()=>`The output # of rows (${O}) must be an integer. Change the stride and/or zero pad parameters`);const C=ca((x-l+2*f)/d+1,g);return Z(Qt(C),()=>`The output # of columns (${C}) must be an integer. Change the stride and/or zero pad parameters`),[A,O,C,h]}function gO(r,l,h,d=1){const f=Pc(l,d);return Math.floor((r[0]*(h-1)-h+f)/2)}function Hf(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function TI(r){return typeof r=="number"?[r,r,r]:r}function Pc(r,l){return l<=1?r:r+(r-1)*(l-1)}function NJ(r,l,h,d,f,g,S,L,x){let A,O,C;if(typeof r=="number"){const $=r===0?"VALID":"NUMBER";A={top:r,bottom:r,left:r,right:r,type:$};const z=RJ([l,h],g,d,r,L);O=z[0],C=z[1]}else if(r==="same"){O=Math.ceil(l/d),C=Math.ceil(h/f);const $=Math.max(0,(O-1)*d+g-l),z=Math.max(0,(C-1)*f+S-h),ne=Math.floor($/2),te=$-ne,se=Math.floor(z/2),fe=z-se;A={top:ne,bottom:te,left:se,right:fe,type:"SAME"}}else if(r==="valid")A={top:0,bottom:0,left:0,right:0,type:"VALID"},O=Math.ceil((l-g+1)/d),C=Math.ceil((h-S+1)/f);else if(typeof r=="object"){const $=x==="channelsLast"?r[1][0]:r[2][0],z=x==="channelsLast"?r[1][1]:r[2][1],ne=x==="channelsLast"?r[2][0]:r[3][0],te=x==="channelsLast"?r[2][1]:r[3][1],se=$===0&&z===0&&ne===0&&te===0?"VALID":"EXPLICIT";A={top:$,bottom:z,left:ne,right:te,type:se},O=ca((l-g+$+z)/d+1,L),C=ca((h-S+ne+te)/f+1,L)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:A,outHeight:O,outWidth:C}}function CJ(r,l,h,d,f,g,S,L,x,A,O){let C,$,z,ne;if(typeof r=="number"){const te=r===0?"VALID":"NUMBER";C={top:r,bottom:r,left:r,right:r,front:r,back:r,type:te};const se=OJ([l,h,d,1],L,1,f,r,O);$=se[0],z=se[1],ne=se[2]}else if(r==="same"){$=Math.ceil(l/f),z=Math.ceil(h/g),ne=Math.ceil(d/S);const te=($-1)*f+L-l,se=(z-1)*g+x-h,fe=(ne-1)*S+A-d,de=Math.floor(te/2),Ae=te-de,xe=Math.floor(se/2),Me=se-xe,Ke=Math.floor(fe/2),wt=fe-Ke;C={top:xe,bottom:Me,left:Ke,right:wt,front:de,back:Ae,type:"SAME"}}else if(r==="valid")C={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},$=Math.ceil((l-L+1)/f),z=Math.ceil((h-x+1)/g),ne=Math.ceil((d-A+1)/S);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:C,outDepth:$,outHeight:z,outWidth:ne}}function ca(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 ao(r){const[l,h,d]=Hf(r);return l===1&&h===1&&d===1}function co(r,l){return ao(r)||ao(l)}function zc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function yO(r,l){const h=r[0].length;r.forEach((f,g)=>{Z(f.length===h,()=>`Error in concat${h}D: rank of tensors[${g}] must be the same as the rank of the rest (${h})`)}),Z(l>=0&&l`Error in concat${h}D: axis must be between 0 and ${h-1}.`);const d=r[0];r.forEach((f,g)=>{for(let S=0;S`Error in concat${h}D: Shape of tensors[${g}] (${f}) does not match the shape of the rest (${d}) along the non-concatenated axis ${g}.`)})}function bO(r,l){const h=r[0].slice();for(let d=1;d=1,()=>"Pass at least one tensor to concat");let h=Gf(r,"tensors","concat");h[0].dtype==="complex64"&&h.forEach(S=>{if(S.dtype!=="complex64")throw new Error(`Cannot concatenate complex64 tensors with a tensor - with dtype ${S.dtype}. `)});const d=(S,L)=>{const x=ht(l,h[0].shape)[0],A=bO(h.map($=>$.shape),x);if(qt(A)===0)return wI([],A);if(h=h.filter($=>$.size>0),h.length===1)return h[0];const O=h.map($=>$.shape);yO(O,x);const C=S.concat(h,x);return L(h),C},f=h,g={axis:l};return H.runKernelFunc(d,f,null,Gm,g)}const bn=G({concat_:EJ});function DJ(r){const l=M(r,"x","sigmoid"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sigmoid(l);return f([g]),g},h,null,xf)}const AI=G({sigmoid_:DJ});function kJ(r,l,h){const d=M(r,"x","slice");if(d.rank===0)throw new Error("Slicing scalar is not possible");const f=(L,x)=>{const[A,O]=Vf(d,l,h);return dO(d,A,O),x([d]),L.slice(d,A,O)},g={x:d},S={begin:l,size:h};return H.runKernelFunc(f,g,null,Lf,S)}const At=G({slice_:kJ});function FJ(r,l,h){const d=M(r,"x","batchToSpaceND"),f=l.reduce((x,A)=>x*A);Z(d.rank>=1+l.length,()=>`input rank is ${d.rank} but should be > than blockShape.length ${l.length}`),Z(h.length===l.length,()=>`crops.length is ${h.length} but should be equal to blockShape.length ${l.length}`),Z(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,h),S={x:d},L={blockShape:l,crops:h};return H.runKernelFunc(g,S,null,Pm,L)}const vI=G({batchToSpaceND_:FJ});function _J(r,l){let h=M(r,"broadcastTo","x");const d=h.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthh.rank){const O=h.shape.slice();for(;O.length=0;O--)if(f[O]===l[O])g[O]=1;else if(h.shape[O]!==1)throw new Error(`broadcastTo(): [${d}] cannot be broadcast to [${l}].`);const S=g.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(S.length===0)return bi(h);const L=O=>O.tile(h,g),x={x:h},A={shape:l,inputShape:f};return H.runKernelFunc(L,x,null,zm,A)}const jf=G({broadcastTo_:_J});function WJ(r,l,h,d,f="NHWC",g=[1,1],S){const L=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let A=L,O=!1;L.rank===3&&(O=!0,A=re(L,[1,L.shape[0],L.shape[1],L.shape[2]])),Z(A.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${A.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),S!=null&&Z(Qt(d),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${S} but got pad ${d}.`);const C=f==="NHWC"?A.shape[3]:A.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(co(h,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${h} and dilations '${g}'`);const $=(se,fe)=>{const de=zc(f),Ae=Lr(A.shape,x.shape,h,g,d,S,!1,de),xe=se.conv2d(A,x,Ae);return fe([A,x]),xe},z={x:A,filter:x},ne={strides:h,pad:d,dataFormat:f,dilations:g,dimRoundingMode:S},te=H.runKernelFunc($,z,null,Vm,ne);return O?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const NI=G({conv2d_:WJ});function $J(r,l,h,d,f,g="NHWC",S){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let L=r,x=l,A=!1;l.rank===3&&(A=!0,x=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),L=[1,r[0],r[1],r[2]]),Z(L.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${L.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(h.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${h.rank}`);const O=g==="NHWC"?L[3]:L[1],C=g==="NHWC"?x.shape[3]:x.shape[1];Z(O===h.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${h.shape[2]}.`),Z(C===h.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${h.shape[3]}.`),S!=null&&Z(Qt(f),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${S} but got pad ${f}.`);const $=(se,fe)=>{const de=1,Ae=zc(g),xe=Lr(L,h.shape,d,de,f,S,!1,Ae),Me=se.conv2dDerInput(x,h,xe);return fe([x,h]),Me},z={dy:x,filter:h},ne={strides:d,pad:f,dataFormat:g,dimRoundingMode:S,inputShape:L},te=H.runKernelFunc($,z,null,Hm,ne);return A?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const wO=G({conv2DBackpropInput_:$J});function UJ(r,l,h,d,f){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,S=l,L=!1;l.rank===4&&(L=!0,S=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 x=g[4],A=S.shape[4];Z(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),Z(S.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${S.rank}`),Z(h.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${h.rank}`),Z(x===h.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${h.shape[3]}.`),Z(A===h.shape[4],()=>`Error in conv3dDerInput: depth of output (${A}) must match output depth for filter ${h.shape[4]}.`);const O=ne=>{const te=1,se=ku(g,h.shape,d,te,f);return ne.conv3dDerInput(S,h,se)},C={dy:S},$={pad:f},z=H.runKernelFunc(O,C,null,_2,$);return L?re(z,[z.shape[1],z.shape[2],z.shape[3],z.shape[4]]):z}const LO=G({conv3DBackpropInput_:UJ});function BJ(r){const l=M(r,"x","cos"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.cos(l);return f([l]),g},h,null,Ym)}const Fu=G({cos_:BJ});function MJ(r){const l=M(r,"x","cosh"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.cosh(l);return f([l]),g},h,null,qm)}const CI=G({cosh_:MJ});function PJ(r,l=0,h=!1,d=!1){const f=M(r,"x","cumsum"),g=(x,A)=>{const O=fs([l],f.rank);let C=f;O!=null&&(C=Wt(f,O));const $=oo(1,f.rank)[0];let z=x.cumsum(C,$,h,d);if(A([f]),O!=null){const ne=Mc(O);z=Wt(z,ne)}return z},S={x:f},L={axis:l,exclusive:h,reverse:d};return H.runKernelFunc(g,S,null,jm,L)}const RI=G({cumsum_:PJ});function vt(r,l){const h=[];for(let d=0;d1)&&h.unshift(g)}return h}function rt(r,l){const h=[],d=Math.max(r.length,l.length);for(let f=0;fS.equal(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,Y2)}const OI=G({equal_:zJ});function GJ(r,l,h){const d=M(l,"a","where"),f=M(h,"b","where"),g=M(r,"condition","where","bool"),S=rt(d.shape,f.shape),L=jf(d,S),x=jf(f,S);g.rank===1&&Z(g.shape[0]===d.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&Zt(g.shape,x.shape,"Error in where: ");const A=(C,$)=>{const z=C.select(g,L,x);return $([g]),z},O={condition:g,t:L,e:x};return H.runKernelFunc(A,O,null,wf)}const zn=G({where_:GJ});function VJ(r){const l=M(r,"x","zerosLike"),h={x:l};return H.runKernelFunc(d=>d.zerosLike(l),h,null,Ff)}const je=G({zerosLike_:VJ});function HJ(r){const l=M(r,"x","exp"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.exp(l);return f([g]),g},h,null,Xm)}const Gn=G({exp_:HJ});function YJ(r,l=0){const h=null,d=M(r,"x","expandDims",h);Z(l<=d.rank,()=>"Axis must be <= rank of the tensor");const f=d.shape.slice();return l<0&&(Z(-(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),re(d,f)}const ks=G({expandDims_:YJ});function qJ(r,l){const h=null,d=M(r,"x","tile",h);Z(d.rank===l.length,()=>`Error in transpose: rank of input ${d.rank} must match length of reps ${l}.`);const f=(x,A)=>{const O=x.tile(d,l);return A([d]),O},g=[d],S={x:d},L={reps:l};return H.runKernelFunc(f,S,null,Of,L,g)}const la=G({tile_:qJ});function jJ(r,l,h,d="float32"){l==null&&(l=r);const f=Du([r,l],d),g=r<=l?r:l;for(let L=0;Lf.fill(r,l,h),{},null,K2,d)}function KJ(r){const l=M(r,"x","floor"),h={x:l};return H.runKernelFunc(d=>d.floor(l),h,null,Jm)}const kI=G({floor_:KJ});function SO(r,l,h){const d=r.shape[h],f=[];let g=1,S=1;for(let L=0;L{const O=ht(h,d.shape)[0],C=SO(d,f,O),$=x.gather(d,re(f,[f.size]),O);return A([d,f]),re($,C.outputShape)};return H.runKernelFunc(L,g,null,Qm,S)}const FI=G({gather_:XJ});function JJ(r,l){let h=M(r,"a","greater"),d=M(l,"b","greater");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.greater(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,Z2)}const wi=G({greater_:JJ});function ZJ(r,l){let h=M(r,"a","greaterEqual"),d=M(l,"b","greaterEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.greaterEqual(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,ef)}const Sr=G({greaterEqual_:ZJ});function QJ(r){const l=M(r,"input","imag"),h=f=>f.imag(l),d={input:l};return H.runKernelFunc(h,d,null,eR)}const _u=G({imag_:QJ});function e9(r,l){let h=M(r,"a","maximum"),d=M(l,"b","maximum");[h,d]=mt(h,d),h.dtype==="bool"&&(h=Le(h,"int32"),d=Le(d,"int32")),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.maximum(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,of)}const _I=G({maximum_:e9});function ke(r,l){if((Ds(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"&&Ds(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const h=[],d=[];return ji(r,h,d,l)}function t9(r,l){let h=M(r,"a","less"),d=M(l,"b","less");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.less(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,iR)}const WI=G({less_:t9});function n9(r,l){let h=M(r,"a","lessEqual"),d=M(l,"b","lessEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.lessEqual(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,rR)}const Ir=G({lessEqual_:n9});function s9(r){const l=M(r,"x","log"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.log(l);return f([l]),g},h,null,nf)}const lo=G({log_:s9});function i9(r){const l=M(r,"x","log1p"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.log1p(l);return f([l]),g},h,null,sf)}const $I=G({log1p_:i9});function Kf(r){return H.customGrad(r)}function r9(r){const l=M(r,"x","neg"),h={x:l};return H.runKernelFunc(d=>d.neg(l),h,null,hf)}const yt=G({neg_:r9});function o9(r,l=null,h=!1){const d=M(r,"x","max"),f=(L,x)=>{const A=ht(l,d.shape);let O=A;const C=fs(O,d.rank);let $=d;C!=null&&($=Wt(d,C),O=oo(O.length,$.rank));const z=L.max($,O);C!=null&&$.dispose();let ne=z;if(h){const te=ts(ne.shape,ht(l,d.shape));ne=re(ne,te),z.dispose()}return x([d,ne]),ne},g={x:d},S={reductionIndices:l,keepDims:h};return H.runKernelFunc(f,g,null,rf,S)}const ha=G({max_:o9});function a9(r,l){let h=M(r,"a","sub"),d=M(l,"b","sub");[h,d]=mt(h,d);const f=(S,L)=>{const x=S.subtract(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,Rf)}const Be=G({sub_:a9});function c9(r,l=null,h=!1){let d=M(r,"x","sum");d.dtype==="bool"&&(d=Le(d,"int32"));const f=(L,x)=>{x([d]);const A=ht(l,d.shape),O=fs(A,d.rank);let C=A,$=d;O!=null&&($=Wt(d,O),C=oo(C.length,d.rank));let z=L.sum($,C);if(h){const ne=ts(z.shape,A);z=re(z,ne)}return z},g={x:d},S={axis:l,keepDims:h};return H.runKernelFunc(f,g,null,Af,S)}const Fe=G({sum_:c9});function l9(r,l=null,h=!1){const d=M(r,"x","logSumExp"),f=ht(l,d.shape),g=ha(d,f,!0),S=Be(d,g),L=Gn(S),x=Fe(L,f),A=lo(x),O=St(re(g,A.shape),A);if(h){const C=ts(O.shape,f);return re(O,C)}return O}const UI=G({logSumExp_:l9});function h9(r,l){const h=M(r,"a","logicalAnd","bool"),d=M(l,"b","logicalAnd","bool");rt(h.shape,d.shape);const f={a:h,b:d};return H.runKernelFunc(g=>g.logicalAnd(h,d),f,null,oR)}const ua=G({logicalAnd_:h9});function u9(r){const l=M(r,"x","logicalNot","bool"),h={x:l};return H.runKernelFunc(d=>d.logicalNot(l),h,null,aR)}const BI=G({logicalNot_:u9});function Fs(r,l="float32"){if(l==="complex64"){const d=Fs(r,"float32"),f=Fs(r,"float32");return qi(d,f)}const h=aa(qt(r),l);return H.makeTensor(h,r,l)}function Ki(r,l="float32"){if(l==="complex64"){const d=Ki(r,"float32"),f=Fs(r,"float32");return qi(d,f)}const h=Uf(qt(r),l);return H.makeTensor(h,r,l)}function d9(r,l=null,h=!1){const d=M(r,"x","mean"),f=ht(l,d.shape),g=fO(d.shape,f),S=g[1],L=qt(S),x=Kf(A=>{const O=ke(L),C=O.dtype===A.dtype?A:Le(A,O.dtype),$=ze(C,O),z=Fe($,l,h),ne=te=>{const se=A.shape.slice();f.forEach(Ae=>{se[Ae]=1});const fe=re(te,se),de=ze(ae(fe,Ki(A.shape,"float32")),L);return de};return{value:z,gradFunc:ne}});return x(d)}const MI=G({mean_:d9});function p9(r,l=null,h=!1){const d=M(r,"x","min"),f=(L,x)=>{const A=ht(l,d.shape);let O=A;const C=fs(O,d.rank);let $=d;C!=null&&($=Wt(d,C),O=oo(O.length,d.rank));const z=L.min($,O);C!=null&&$.dispose();let ne=z;if(h){const te=ts(ne.shape,A);ne=re(z,te),z.dispose()}return x([d,ne]),ne},g={x:d},S={axis:l,keepDims:h};return H.runKernelFunc(f,g,null,af,S)}const Xf=G({min_:p9});function m9(r,l){let h=M(r,"a","minimum"),d=M(l,"b","minimum");[h,d]=mt(h,d),h.dtype==="bool"&&(h=Le(h,"int32"),d=Le(d,"int32")),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.minimum(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,cf)}const PI=G({minimum_:m9});function f9(r){const l=M(r,"x","square"),h={},d=[l],f=[];return H.runKernelFunc((g,S)=>(S([l]),g.square(l)),{x:l},null,"Square",h,d,f)}const ut=G({square_:f9});function g9(r,l){let h=M(r,"a","notEqual"),d=M(l,"b","notEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.notEqual(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,gR)}const zI=G({notEqual_:g9});function y9(r){const l=M(r,"input","real"),h=f=>f.real(l),d={input:l};return H.runKernelFunc(h,d,null,TR)}const Gc=G({real_:y9});function b9(r,l,h=0){const d=M(r,"x","pad");if(d.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const f=(L,x)=>(x([d]),L.pad(d,l,h)),g={paddings:l,constantValue:h},S={x:d};return H.runKernelFunc(f,S,null,uf,g)}const GI=G({pad_:b9});function w9(r,l,h){const d=M(r,"x","spaceToBatchND");Z(d.rank>=1+l.length,()=>`input rank ${d.rank} should be > than [blockShape] ${l.length}`),Z(h.length===l.length,()=>`paddings.shape[0] ${h.length} must be equal to [blockShape] ${l.length}`),Z(d.shape.reduce((L,x,A)=>A>0&&A<=l.length?L&&(x+h[A-1][0]+h[A-1][1])%l[A-1]===0:L,!0),()=>`input spatial dimensions ${d.shape.slice(1)} with paddings ${h.toString()} must be divisible by blockShapes ${l.toString()}`);const f=L=>L.spaceToBatchND(d,l,h),g={x:d},S={blockShape:l,paddings:h};return H.runKernelFunc(f,g,null,vf,S)}const VI=G({spaceToBatchND_:w9});function L9(r,l){let h=M(r,"base","pow"),d=M(l,"exp","pow");[h,d]=mt(h,d);const f={a:h,b:d},g=(S,L)=>{const x=S.pow(h,d);return L([h,d,x]),x};return H.runKernelFunc(g,f,null,df)}const da=G({pow_:L9});function ho(r,l){_c(r);const h=wr(r,l);if(h.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const d=null;return ji(r,d,h,l)}function Jf(r,l,h=1,d="float32"){if(h===0)throw new Error("Cannot have a step of zero");const f=()=>{const S=r===l,L=r1;if(S||L||x)return Fs([0],d);const A=Math.abs(Math.ceil((l-r)/h)),O=aa(A,d);l(g([l]),l.dtype==="bool"?Le(l,"int32"):f.relu(l)),d={x:l};return H.runKernelFunc(h,d,null,pf)}const Wu=G({relu_:S9});function I9(r,l){const h=M(r,"x","reverse"),d=S=>{const L=ht(l,h.shape);if(h.rank===0)return bi(h);const x=S.reverse(h,L);return re(x,h.shape)},f={x:h},g={dims:l};return H.runKernelFunc(d,f,null,yf,g)}const Vc=G({reverse_:I9});function x9(r){const l=M(r,"x","rsqrt"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.rsqrt(l);return f([l]),g},h,null,bf)}const HI=G({rsqrt_:x9});function T9(r){const l=M(r,"x","sin"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sin(l);return f([l]),g},h,null,Sf)}const YI=G({sin_:T9});function A9(r){const l=M(r,"x","sinh"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sinh(l);return f([l]),g},h,null,If)}const qI=G({sinh_:A9});function v9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(h=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=r.as2D(f,d),S=h.fft(g);return S.reshape(r.shape)},l,null,j2)}const $u=G({fft_:v9});function N9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(h=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=re(r,[f,d]),S=h.ifft(g);return re(S,r.shape)},l,null,Q2)}const Hc=G({ifft_:N9});function C9(r){const l=r.shape[r.shape.length-1],h=r.size/l;let d;if(l<=2){const f=re(r,[h,l]);d=Hc(f)}else{const f=[h,2*(l-1)],g=re(Gc(r),[h,l]),S=re(_u(r),[h,l]),L=Vc(At(g,[0,1],[h,l-2]),1),x=ae(Vc(At(S,[0,1],[h,l-2]),1),ke(-1)),A=bn([g,L],1),O=bn([S,x],1),C=re(qi(A,O),[f[0],f[1]]);d=Hc(C)}if(d=Gc(d),r.rank===3&&r.shape[0]!==0){const f=d,g=r.shape[0];d=re(d,[g,d.shape[0]/g,d.shape[1]]),f.dispose()}return d}const jI=G({irfft_:C9});function IO(r,l,h=0){let d=[];if(typeof l=="number")Z(r.shape[h]%l===0,()=>"Number of splits must evenly divide the axis."),d=new Array(l).fill(r.shape[h]/l);else{const f=l.reduce((S,L)=>(L===-1&&(S+=1),S),0);Z(f<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const S=l.reduce((L,x)=>x>0?L+x:L);l[g]=r.shape[h]-S}Z(r.shape[h]===l.reduce((S,L)=>S+L),()=>"The sum of sizes must match the size of the axis dimension."),d=l}return d}function R9(r,l,h=0){const d=M(r,"x","split"),f=(L,x)=>{const A=ht(h,d.shape)[0],O=IO(d,l,A);return L.split(d,O,A)},g={x:d},S={numOrSizeSplits:l,axis:h};return H.runKernelFunc(f,g,null,Nf,S)}const uo=G({split_:R9});function O9(r,l){Z(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let h=r.shape[r.shape.length-1];const d=r.size/h;let f;if(l!=null&&l0),te=r.shape.map(se=>se);te[r.shape.length-1]=l,f=At(r,ne,te),h=l}else if(l!=null&&l>h){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-h,f=bn([r,Fs(ne)],r.shape.length-1),h=l}else f=r;const g=je(f),S=re(qi(f,g),[d,h]),L=$u(S),x=Math.floor(h/2)+1,A=Gc(L),O=_u(L),C=uo(A,[x,h-x],A.shape.length-1),$=uo(O,[x,h-x],O.shape.length-1),z=f.shape.slice();return z[f.shape.length-1]=x,re(qi(C[0],$[0]),z)}const Uu=G({rfft_:O9});function E9(r){const l=M(r,"x","sqrt"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sqrt(l);return f([l]),g},h,null,Tf)}const gs=G({sqrt_:E9});function D9(r,l){let h=M(r,"a","squaredDifference"),d=M(l,"b","squaredDifference");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(L,x)=>{const A=L.squaredDifference(h,d);return x([h,d]),A},g={a:h,b:d},S={};return H.runKernelFunc(f,g,null,Cf,S)}const KI=G({squaredDifference_:D9});function k9(r,l){const h=M(r,"x","squeeze");return re(h,PR(h.shape,l).newShape)}const XI=G({squeeze_:k9});function F9(r,l=0){const h=Gf(r,"tensors","stack");if(Z(h.length>=1,()=>"Pass at least one tensor to tf.stack"),h.length===1)return ks(h[0],l);const d=h[0].rank,f=h[0].shape,g=h[0].dtype;Z(l<=d,()=>"Axis must be <= rank of the tensor"),h.forEach(L=>{Zt(f,L.shape,"All tensors passed to stack must have matching shapes"),Z(g===L.dtype,()=>"All tensors passed to stack must have matching dtypes")});const S=h.map(L=>ks(L,l));return bn(S,l)}const js=G({stack_:F9});function _9(r,l=0){const h=M(r,"x","step"),d={x:h},f={alpha:l};return H.runKernelFunc(g=>g.step(h,l),d,null,_f,f)}const pa=G({step_:_9});function ma(r,l,h){if(_c(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const d=wr(r,h);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 ji(r,l,d,h)}function W9(r,l,h){const d=M(r,"x","unsortedSegmentSum"),f=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(h),()=>"numSegments must be of dtype int");const g={x:d,segmentIds:f},S={numSegments:h},L=(x,A)=>{const O=x.unsortedSegmentSum(d,f,h);return A([f]),O};return H.runKernelFunc(L,g,null,kf,S)}const JI=G({unsortedSegmentSum_:W9});function $9(r,l=0){const h=M(r,"x","unstack");Z(l>=-h.shape.length&&l`Axis = ${l} is not in [-${h.shape.length}, ${h.shape.length})`),l<0&&(l+=h.shape.length);const d={value:h},f={axis:l},g=S=>S.unstack(h,l);return H.runKernelFunc(g,d,null,Df,f)}const Bu=G({unstack_:$9});function U9(r,l="euclidean",h=null,d=!1){r=M(r,"x","norm");const f=xO(r,l,h);let g=f.shape;if(d){const S=ht(h,r.shape);g=ts(f.shape,S)}return re(f,g)}function xO(r,l,h=null){if(r.rank===0)return Pn(r);if(r.rank!==1&&h===null)return xO(re(r,[-1]),l,h);if(r.rank===1||typeof h=="number"||Array.isArray(h)&&h.length===1){if(l===1)return Fe(Pn(r),h);if(l===Infinity)return ha(Pn(r),h);if(l===-Infinity)return Xf(Pn(r),h);if(l==="euclidean"||l===2)return gs(Fe(da(Pn(r),ke(2,"int32")),h));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(h)&&h.length===2){if(l===1)return ha(Fe(Pn(r),h[0]),h[1]-1);if(l===Infinity)return ha(Fe(Pn(r),h[1]),h[0]);if(l===-Infinity)return Xf(Fe(Pn(r),h[1]),h[0]);if(l==="fro"||l==="euclidean")return gs(Fe(ut(r),h));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${h}`)}const Zf=G({norm_:U9});function TO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Qf(r,l,h){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 ${L.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(h.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${h}.`);const A=g==="NHWC"?L.shape[3]:L.shape[1],O=g==="NHWC"?x.shape[3]:x.shape[1];Z(A===h[2],()=>`Error in conv2dDerFilter: depth of input ${A}) must match input depth in filter (${h[2]}.`),Z(O===h[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${h[3]}).`),S!=null&&Z(Qt(f),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${S} but got pad ${f}.`);const C=ne=>{const te=1,se=zc(g),fe=Lr(L.shape,h,d,te,f,S,!1,se);return ne.conv2dDerFilter(L,x,fe)},$={x:L,dy:x},z={strides:d,pad:f,dataFormat:g,dimRoundingMode:S};return H.runKernelFunc(C,$,null,D2,z)}const eg=G({conv2DBackpropFilter_:B9});function M9(r,l,h,d){let f=r;r.rank===3&&(f=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let g=l;g.rank===3&&(g=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const S=x=>x.depthwiseConv2DDerFilter(f,g,d),L={x:f,dy:g};return H.runKernelFunc(S,L,null,U2)}const AO=G({depthwiseConv2dNativeBackpropFilter_:M9});function P9(r,l,h,d){let f=l,g=!1;l.rank===3&&(g=!0,f=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const S=A=>A.depthwiseConv2DDerInput(f,h,d),L={dy:f},x=H.runKernelFunc(S,L,null,B2);return g?re(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const vO=G({depthwiseConv2dNativeBackpropInput_:P9});function z9(r){return Qf(r,.54,.46)}const NO=G({hammingWindow_:z9});function G9(r){return Qf(r,.5,.5)}const tg=G({hannWindow_:G9});function V9(r,l,h,d=!1,f=0){let g=0;const S=[];for(;g+l<=r.size;)S.push(At(r,g,l)),g+=h;if(d)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${S.rank}.`),Z(L.rank===2&&L.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${A},4] but had shape ${L.shape}.`),Z(x.rank===1&&x.shape[0]===A,()=>`Error in cropAndResize: boxInd must be have size [${A}] but had shape ${L.shape}.`),Z(d.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${d.length}.`),Z(d[0]>=1&&d[1]>=1,()=>`cropSize must be atleast [1,1], but was ${d}`),Z(f==="bilinear"||f==="nearest",()=>`method must be bilinear or nearest, but was ${f}`);const O=ne=>ne.cropAndResize(S,L,x,d,f,g),C={image:S,boxes:L,boxInd:x},$={method:f,extrapolationValue:g,cropSize:d},z=H.runKernelFunc(O,C,null,W2,$);return z}const RO=G({cropAndResize_:Y9});function q9(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const h={image:l},d=H.runKernel(X2,h,{});return d}const OO=G({flipLeftRight_:q9});function j9(r,l,h=0,d=.5){const f=M(r,"image","rotateWithOffset","float32");Z(f.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${f.rank}.`);const g={image:f},S={radians:l,fillValue:h,center:d},L=H.runKernel($R,g,S);return L}const EO=G({rotateWithOffset_:j9});function Ks(r,l,h,d,f,g){d==null&&(d=.5),f==null&&(f=Number.NEGATIVE_INFINITY),g==null&&(g=0);const S=r.shape[0];return h=Math.min(h,S),Z(0<=d&&d<=1,()=>`iouThreshold must be in [0, 1], but was '${d}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===S,()=>`scores has incompatible shape with boxes. Expected ${S}, but was ${l.shape[0]}`),Z(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:h,iouThreshold:d,scoreThreshold:f,softNmsSigma:g}}function K9(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),L=Ks(g,S,h,d,f);h=L.maxOutputSize,d=L.iouThreshold,f=L.scoreThreshold;const x={maxOutputSize:h,iouThreshold:d,scoreThreshold:f};return H.runKernelFunc(A=>A.nonMaxSuppression(g,S,h,d,f),{boxes:g,scores:S},null,yR,x)}const DO=G({nonMaxSuppression_:K9});function kO(r,l,h){const d=X9(r,l,h),f=d<0?-(d+1):d;r.splice(f,0,l)}function X9(r,l,h){return Z9(r,l,h||J9)}function J9(r,l){return r>l?1:r>>1);const L=h(l,r[g]);L>0?d=g+1:(f=g,S=!L)}return S?d:-d-1}function FO(r,l,h,d,f){return ZI(r,l,h,d,f,0).selectedIndices}function _O(r,l,h,d,f,g){return ZI(r,l,h,d,f,0,!1,g,!0)}function WO(r,l,h,d,f,g){return ZI(r,l,h,d,f,g,!0)}function ZI(r,l,h,d,f,g,S=!1,L=!1,x=!1){const A=[];for(let se=0;sef&&A.push({score:l[se],boxIndex:se,suppressBeginIndex:0});A.sort($O);const O=g>0?-.5/g:0,C=[],$=[];for(;C.length0;){const se=A.pop(),{score:fe,boxIndex:de,suppressBeginIndex:Ae}=se;if(fe=Ae;--Me){const Ke=Q9(r,de,C[Me]);if(Ke>=d){xe=!0;break}if(se.score=se.score*eZ(d,O,Ke),se.score<=f)break}se.suppressBeginIndex=C.length,xe||(se.score===fe?(C.push(de),$.push(se.score)):se.score>f&&kO(A,se,$O))}const z=C.length,ne=h-z;L&&ne>0&&(C.push(...new Array(ne).fill(0)),$.push(...new Array(ne).fill(0)));const te={selectedIndices:ho(C,"int32")};return S&&(te.selectedScores=ho($,"float32")),x&&(te.validOutputs=ke(z,"int32")),te}function Q9(r,l,h){const d=r.subarray(l*4,l*4+4),f=r.subarray(h*4,h*4+4),g=Math.min(d[0],d[2]),S=Math.min(d[1],d[3]),L=Math.max(d[0],d[2]),x=Math.max(d[1],d[3]),A=Math.min(f[0],f[2]),O=Math.min(f[1],f[3]),C=Math.max(f[0],f[2]),$=Math.max(f[1],f[3]),z=(L-g)*(x-S),ne=(C-A)*($-O);if(z<=0||ne<=0)return 0;const te=Math.max(g,A),se=Math.max(S,O),fe=Math.min(L,C),de=Math.min(x,$),Ae=Math.max(fe-te,0)*Math.max(de-se,0);return Ae/(z+ne-Ae)}function eZ(r,l,h){const d=Math.exp(l*h*h);return h<=r?d:0}function $O(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function tZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),L=Ks(g,S,h,d,f);h=L.maxOutputSize,d=L.iouThreshold,f=L.scoreThreshold;const x=await Promise.all([g.data(),S.data()]),A=x[0],O=x[1],C=FO(A,O,h,d,f);return g!==r&&g.dispose(),S!==l&&S.dispose(),C}const UO=tZ;function nZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const S=M(r,"boxes","nonMaxSuppression"),L=M(l,"scores","nonMaxSuppression"),x=Ks(S,L,h,d,f,g);h=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const A={boxes:S,scores:L},O={maxOutputSize:h,iouThreshold:d,scoreThreshold:f,softNmsSigma:g},C=H.runKernel(wR,A,O);return{selectedIndices:C[0],selectedScores:C[1]}}const BO=G({nonMaxSuppressionWithScore_:nZ});async function sZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const S=M(r,"boxes","nonMaxSuppressionAsync"),L=M(l,"scores","nonMaxSuppressionAsync"),x=Ks(S,L,h,d,f,g);h=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const A=await Promise.all([S.data(),L.data()]),O=A[0],C=A[1],$=WO(O,C,h,d,f,g);return S!==r&&S.dispose(),L!==l&&L.dispose(),$}const MO=sZ;function iZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const S=M(r,"boxes","nonMaxSuppression"),L=M(l,"scores","nonMaxSuppression"),x=Ks(S,L,h,d,f,null),A=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,$={boxes:S,scores:L},z={maxOutputSize:A,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:g},ne=H.runKernel(bR,$,z);return{selectedIndices:ne[0],validOutputs:ne[1]}}const PO=G({nonMaxSuppressionPadded_:iZ});async function rZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const S=M(r,"boxes","nonMaxSuppressionAsync"),L=M(l,"scores","nonMaxSuppressionAsync"),x=Ks(S,L,h,d,f,null),A=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[$,z]=await Promise.all([S.data(),L.data()]),ne=_O($,z,A,O,C,g);return S!==r&&S.dispose(),L!==l&&L.dispose(),ne}const zO=rZ;function oZ(r,l,h=!1){const d=M(r,"images","resizeBilinear");Z(d.rank===3||d.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${d.rank}.`),Z(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=re(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[S,L]=l,x=($,z)=>(z([f]),$.resizeBilinear(f,S,L,h)),A={images:f},O={alignCorners:h,size:l},C=H.runKernelFunc(x,A,null,gf,O);return g?re(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const GO=G({resizeBilinear_:oZ});function aZ(r,l,h=!1){const d=M(r,"images","resizeNearestNeighbor");Z(d.rank===3||d.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${d.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(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=re(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[S,L]=l,x={images:f},A={alignCorners:h,size:l},O=($,z)=>(z([f]),$.resizeNearestNeighbor(f,S,L,h)),C=H.runKernelFunc(O,x,null,ff,A);return g?re(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const VO=G({resizeNearestNeighbor_:aZ});function cZ(r,l,h){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(h%1===0,()=>`bandPart(): numUpper must be an integer, got ${h}.`);const d=M(r,"a","bandPart");Z(d.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${d.rank}.`);const f=d.shape,[g,S]=d.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(h<=S))throw new Error(`bandPart(): numUpper (${h}) must not be greater than the number of columns (${S}).`);l<0&&(l=g),h<0&&(h=S);const L=re(Jf(0,g,1,"int32"),[-1,1]),x=Jf(0,S,1,"int32"),A=Be(L,x),O=ua(Ir(A,ke(+l,"int32")),Sr(A,ke(-h,"int32"))),C=Fs([g,S],d.dtype);return re(js(Bu(re(d,[-1,g,S])).map($=>zn(O,$,C))),f)}const HO=G({bandPart_:cZ});function lZ(r){let l;if(Array.isArray(r)){l=!1,Z(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=uo(r,r.shape[0],0).map(f=>XI(f,[0]));Z(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const h=[],d=r;for(let f=0;f{let g=d[f];if(f>0)for(let S=0;S=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return qO(r,l);{const h=r.shape.slice(0,r.shape.length-2).reduce((x,A)=>x*A),d=Bu(re(r,[h,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),f=[],g=[];d.forEach(x=>{const[A,O]=qO(x,l);f.push(A),g.push(O)});const S=re(js(f,0),r.shape),L=re(js(g,0),r.shape);return[S,L]}}function qO(r,l=!1){return H.tidy(()=>{Z(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const h=r.shape[0],d=r.shape[1];let f=EI(h),g=bi(r);const S=ma([[1]],[1,1]);let L=bi(S);const x=h>=d?d:h;for(let A=0;A{const z=At(g,[A,A],[h-A,1]),ne=Zf(z),te=At(g,[A,A],[1,1]),se=zn(wi(te,0),ma([[-1]]),ma([[1]])),fe=Be(te,ae(se,ne)),de=ze(z,fe);de.shape[0]===1?L=bi(S):L=bn([S,At(de,[1,0],[de.shape[0]-1,de.shape[1]])],0);const Ae=yt(ze(pn(se,fe),ne)),xe=At(g,[A,0],[h-A,d]),Me=ae(Ae,L),Ke=Wt(L);if(A===0)g=Be(xe,pn(Me,pn(Ke,xe)));else{const Kt=Be(xe,pn(Me,pn(Ke,xe)));g=bn([At(g,[0,0],[A,d]),Kt],0)}const wt=Wt(Me),$t=At(f,[0,A],[h,f.shape[1]-A]);if(A===0)f=Be($t,pn(pn($t,L),wt));else{const Kt=Be($t,pn(pn($t,L),wt));f=bn([At(f,[0,0],[h,A]),Kt],1)}return[L,g,f]}),mO([O,C,$])}return!l&&h>d&&(f=At(f,[0,0],[h,d]),g=At(g,[0,0],[d,d])),[f,g]})}const jO=G({qr_:hZ});var jt;(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"})(jt||(jt={}));function uZ(r,l,h=jt.SUM_BY_NONZERO_WEIGHTS){const d=M(r,"losses","computeWeightedLoss");let f=null;l!=null&&(f=M(l,"weights","computeWeightedLoss"));const g=f==null?d:ae(d,f);if(h===jt.NONE)return g;if(h===jt.SUM)return Fe(g);if(h===jt.MEAN){if(f==null)return MI(g);{const S=d.size/f.size,L=ze(Fe(g),Fe(f));return S>1?ze(L,ke(S)):L}}if(h===jt.SUM_BY_NONZERO_WEIGHTS){if(f==null)return ze(Fe(g),ke(d.size));{const S=ae(f,Ki(d.shape)),L=Le(Fe(zI(S,ke(0))),"float32");return ze(Fe(g),L)}}throw Error(`Unknown reduction: ${h}`)}const An=G({computeWeightedLoss_:uZ});function dZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let S=null;h!=null&&(S=M(h,"weights","absoluteDifference")),Zt(f.shape,g.shape,"Error in absoluteDifference: ");const L=Pn(Be(f,g));return An(L,S,d)}const KO=G({absoluteDifference_:dZ});function pZ(r,l,h,d,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),S=M(l,"predictions","cosineDistance");let L=null;d!=null&&(L=M(d,"weights","cosineDistance")),Zt(g.shape,S.shape,"Error in cosineDistance: ");const x=ke(1),A=Be(x,Fe(ae(g,S),h,!0));return An(A,L,f)}const XO=G({cosineDistance_:pZ});function mZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let S=null;h!=null&&(S=M(h,"weights","hingeLoss")),Zt(f.shape,g.shape,"Error in hingeLoss: ");const L=ke(1);f=Be(ae(ke(2),f),L);const x=Wu(Be(L,ae(f,g)));return An(x,S,d)}const JO=G({hingeLoss_:mZ});function fZ(r,l,h,d=1,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),S=M(l,"predictions","huberLoss");let L=null;h!=null&&(L=M(h,"weights","huberLoss")),Zt(g.shape,S.shape,"Error in huberLoss: ");const x=ke(d),A=Pn(Be(S,g)),O=PI(A,x),C=Be(A,O),$=St(ae(ke(.5),ut(O)),ae(x,C));return An($,L,f)}const ZO=G({huberLoss_:fZ});function gZ(r,l,h,d=1e-7,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),S=M(l,"predictions","logLoss");let L=null;h!=null&&(L=M(h,"weights","logLoss")),Zt(g.shape,S.shape,"Error in logLoss: ");const x=ke(1),A=ke(d),O=yt(ae(g,lo(St(S,A)))),C=ae(Be(x,g),lo(St(Be(x,S),A))),$=Be(O,C);return An($,L,f)}const QO=G({logLoss_:gZ});function yZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let S=null;h!=null&&(S=M(h,"weights","meanSquaredError")),Zt(f.shape,g.shape,"Error in meanSquaredError: ");const L=KI(f,g);return An(L,S,d)}const e1=G({meanSquaredError_:yZ});function bZ(r,l){const h=M(r,"labels","sigmoidCrossEntropyWithLogits"),d=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(h.shape,d.shape,"Error in sigmoidCrossEntropyWithLogits: ");const f=Wu(d),g=ae(d,h),S=$I(Gn(yt(Pn(d))));return St(Be(f,g),S)}function wZ(r,l,h,d=0,f=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const S=M(l,"logits","sigmoidCrossEntropy");let L=null;if(h!=null&&(L=M(h,"weights","sigmoidCrossEntropy")),Zt(g.shape,S.shape,"Error in sigmoidCrossEntropy: "),d>0){const A=ke(d),O=ke(1),C=ke(.5);g=St(ae(g,Be(O,A)),ae(C,A))}const x=bZ(g,S);return An(x,L,f)}const t1=G({sigmoidCrossEntropy_:wZ});function LZ(r,l,h=-1){if(h===-1&&(h=l.rank-1),h!==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 ${h}`);const d=Kf((f,g,S)=>{const L=!0,x=UI(g,[h],L),A=Be(Le(g,"float32"),x);S([f,A]);const O=yt(ae(A,f)),C=Fe(O,[h]),$=(z,ne)=>{const[te,se]=ne,fe=ts(z.shape,[h]);return[ae(re(z,fe),Be(Le(te,"float32"),Gn(se))),ae(re(z,fe),Be(Gn(se),Le(te,"float32")))]};return{value:C,gradFunc:$}});return d(r,l)}function SZ(r,l,h,d=0,f=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const S=M(l,"logits","softmaxCrossEntropy");let L=null;if(h!=null&&(L=M(h,"weights","softmaxCrossEntropy")),Zt(g.shape,S.shape,"Error in softmaxCrossEntropy: "),d>0){const A=ke(d),O=ke(1),C=ke(g.shape[1]);g=St(ae(g,Be(O,A)),ze(A,C))}const x=LZ(g,S);return An(x,L,f)}const n1=G({softmaxCrossEntropy_:SZ});const wAe={fft:$u,ifft:Hc,rfft:Uu,irfft:jI},TAe={hammingWindow:NO,hannWindow:tg,frame:ng,stft:CO},s1={flipLeftRight:OO,resizeNearestNeighbor:VO,resizeBilinear:GO,rotateWithOffset:EO,cropAndResize:RO,nonMaxSuppression:DO,nonMaxSuppressionAsync:UO,nonMaxSuppressionWithScore:BO,nonMaxSuppressionWithScoreAsync:MO,nonMaxSuppressionPadded:PO,nonMaxSuppressionPaddedAsync:zO},BAe={bandPart:HO,gramSchmidt:YO,qr:jO},KAe={absoluteDifference:KO,computeWeightedLoss:An,cosineDistance:XO,hingeLoss:JO,huberLoss:ZO,logLoss:QO,meanSquaredError:e1,sigmoidCrossEntropy:t1,softmaxCrossEntropy:n1};const i1=1.7580993408473768,r1=1.0507009873554805;const o1={kernelName:Bm,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,pa(Le(h,"float32"),-1))}}};const a1={kernelName:f2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=ut(Le(h,"float32")),f=gs(Be(ke(1),d));return yt(ze(r,f))}}}};const c1={kernelName:g2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=gs(Be(ut(Le(h,"float32")),1));return ze(r,d)}}}};const l1={kernelName:kc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{let L=r;const x=vt(h.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,h.shape)},S=()=>{let L=r;const x=vt(d.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,d.shape)};return{a:g,b:S}}};const h1={kernelName:y2,saveAllInputs:!0,gradFunc:(r,l)=>{const h={};return l.forEach((d,f)=>{h[f]=()=>r.clone()}),h}};const u1={kernelName:b2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>je(h)}}};const d1={kernelName:w2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>je(h)}}};const p1={kernelName:L2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,gs(Be(ke(1),ut(Le(h,"float32")))))}}};const m1={kernelName:S2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=gs(St(ke(1),ut(Le(h,"float32"))));return ze(r,d)}}}};const f1={kernelName:T2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=St(ut(h),ut(d));let x=ae(r,ze(d,L));const A=vt(h.shape,f);return A.length>0&&(x=Fe(x,A)),re(x,h.shape)},S=()=>{const L=St(ut(h),ut(d));let x=yt(ae(r,ze(h,L)));const A=vt(d.shape,f);return A.length>0&&(x=Fe(x,A)),re(x,d.shape)};return{a:g,b:S}}};const g1={kernelName:I2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,St(ut(Le(h,"float32")),1))}}};const y1={kernelName:x2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,Be(ke(1),ut(Le(h,"float32"))))}}};function IZ(r,l,h,d,f=[1,1,1],g,S){const L=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let A=L,O=x,C=!1;x.rank===4&&(C=!0,A=re(L,[1,L.shape[0],L.shape[1],L.shape[2],L.shape[3]]),O=re(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(A.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${A.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(co(d,f),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${d} and dilations '${f}'`),S!=null&&Z(Qt(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const $=se=>{const fe=qf(O.shape,h,d,f,g,S);return se.avgPool3dBackprop(A,O,fe)},z={dy:A,input:O},ne={filterSize:h,strides:d,dilations:f,pad:g,dimRoundingMode:S},te=H.runKernelFunc($,z,null,C2,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const b1=G({avgPool3dBackprop_:IZ});const w1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{filterSize:f,strides:g,dilations:S,pad:L,dimRoundingMode:x}=h,A=S==null?[1,1,1]:S;return{x:()=>b1(r,d,f,g,A,L,x)}}};function xZ(r,l,h,d,f){const g=M(r,"dy","avgPoolBackprop"),S=M(l,"input","avgPoolBackprop");Z(S.rank===g.rank,()=>`Rank of input (${S.rank}) does not match rank of dy (${g.rank})`);let L=S,x=g,A=!1;S.rank===3&&(A=!0,L=re(S,[1,S.shape[0],S.shape[1],S.shape[2]]),x=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(L.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${L.rank}.`);const O=ne=>{const te=Yf(L.shape,h,d,1,f);return ne.avgPoolBackprop(x,L,te)},C={dy:x,input:L},$={filterSize:h,strides:d,pad:f},z=H.runKernelFunc(O,C,null,v2,$);return A?re(z,[z.shape[1],z.shape[2],z.shape[3]]):z}const L1=G({avgPoolBackprop_:xZ});const S1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{filterSize:f,strides:g,pad:S}=h;return{x:()=>L1(r,d,f,g,S)}}};const I1={kernelName:Mm,inputsToSave:["a","b"],gradFunc:(r,l,h)=>{const[d,f]=l,{transposeA:g,transposeB:S}=h;return!g&&!S?{a:()=>pn(r,f,!1,!0),b:()=>pn(d,r,!0,!1)}:!g&&S?{a:()=>pn(r,f,!1,!1),b:()=>pn(r,d,!0,!1)}:g&&!S?{a:()=>pn(f,r,!1,!0),b:()=>pn(d,r,!1,!1)}:{a:()=>pn(f,r,!0,!0),b:()=>pn(r,d,!0,!0)}}};const x1={kernelName:Pm,gradFunc:(r,l,h)=>{const{blockShape:d,crops:f}=h;return{x:()=>VI(r,d,f)}}};const T1={kernelName:zm,gradFunc:(r,l,h)=>{const d=h,f=d.inputShape,g=d.shape,S=Array.from(g);for(let x=f.length-1;x>=0;x--)if(f[x]===g[x])S[x]=1;else if(f[x]!==1)throw new Error(`broadcastTo(): [${f}] cannot be broadcast to [${g}].`);const L=[];for(let x=0;x1&&L.push(x);return{x:()=>Fe(r,L,!0)}}};const A1={kernelName:Fc,gradFunc:r=>({x:()=>r.clone()})};const v1={kernelName:R2,gradFunc:r=>({x:()=>je(r)})};const N1={kernelName:O2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{clipValueMin:f,clipValueMax:g}=h;return{x:()=>zn(ua(Sr(d,f),Ir(d,g)),r,je(r))}}};const C1={kernelName:Gm,saveAllInputs:!0,gradFunc:(r,l,h)=>{const d=l.map(x=>x.shape),{axis:f}=h,g=ht(f,l[0].shape)[0],S=d.map(x=>x[g]),L=uo(r,S,g);return L.map(x=>()=>x)}};const R1={kernelName:Vm,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,{dilations:g,strides:S,pad:L,dataFormat:x}=h;return Z(ao(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>wO(d.shape,r,f,S,L,x),filter:()=>eg(d,r,f.shape,S,L,x)}}};const O1={kernelName:Hm,inputsToSave:["dy","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,{strides:g,pad:S,dataFormat:L,dimRoundingMode:x}=h;return{dy:()=>NI(r,f,g,S,L,1,x),filter:()=>eg(r,d,f.shape,g,S,L,x)}}};function TZ(r,l,h,d,f){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let S=l;S.rank===4&&(S=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),Z(S.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${S.shape}.`),Z(h.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${h}.`),Z(g.shape[4]===h[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${h[3]}.`),Z(S.shape[4]===h[4],()=>`Error in conv3dDerFilter: depth of dy (${S.shape[4]}) must match output depth for filter (${h[4]}).`);const L=O=>{const C=1,$=ku(g.shape,h,d,C,f);return O.conv3dDerFilter(g,S,$)},x={x:g,y:S},A={strides:d,pad:f};return H.runKernelFunc(L,x,null,F2,A)}const E1=G({conv3DBackpropFilter_:TZ});const D1={kernelName:k2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const{dilations:d,strides:f,pad:g}=h;Z(ao(d),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${d}'`);const[S,L]=l;return{x:()=>LO(S.shape,r,L,f,g),filter:()=>E1(S,r,L.shape,f,g)}}};const k1={kernelName:Ym,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(yt(YI(Le(h,"float32"))),r)}}};const F1={kernelName:qm,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(qI(Le(h,"float32")),r)}}};const _1={kernelName:jm,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{axis:f,exclusive:g,reverse:S}=h;return{x:()=>{const L=fs([f],d.rank);let x=RI(r,f,g,!S);return L!=null&&(x=Wt(x,L)),x}}}};const W1={kernelName:$2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const{dilations:d,strides:f,pad:g,dimRoundingMode:S}=h,L=d==null?[1,1]:d;Z(ao(L),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${L}'`);const[x,A]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(A.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${A.rank}.`),Z(x.shape[3]===A.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${A.shape[2]}.`),Z(co(f,L),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${f} and dilations '${L}'.`),S!=null&&Z(Qt(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const O=Lr(x.shape,A.shape,f,L,g,S,!0);return{x:()=>vO(x.shape,r,A,O),filter:()=>AO(x,r,A.shape,O)}}};const $1={kernelName:M2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,g={x:d,filter:f,dy:r},S={x:d,filter:f,dy:r};return{x:()=>H.runKernel(P2,g,h),filter:()=>H.runKernel(z2,S,h)}}};const U1={kernelName:Km,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ze(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{let L=ae(r,Le(h,"float32"));const x=vt(d.shape,f);x.length>0&&(L=re(Fe(L,x),d.shape));const A=ut(d);return yt(ze(L,Le(A,"float32")))};return{a:g,b:S}}};const B1={kernelName:G2,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l,d=g=>g.eluDer(r,h),f={dy:r,y:h};return{x:()=>H.runKernelFunc(d,f,null,V2)}}};const M1={kernelName:H2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l,d=ae(Gn(yt(ut(h))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,d)}}};const P1={kernelName:Xm,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,h)}}};const z1={kernelName:q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,Gn(h))}}};const G1={kernelName:Jm,gradFunc:r=>({x:()=>je(r)})};const V1={kernelName:Zm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ze(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{let L=ae(r,Le(h,"float32"));const x=vt(d.shape,f);x.length>0&&(L=re(Fe(L,x),d.shape));const A=ut(d);return yt(ze(L,Le(A,"float32")))};return{a:g,b:S}}};const H1={kernelName:J2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,h)=>{const{varianceEpsilon:d}=h,[f,g,S,L]=l,x=L==null?ke(1):L,A=vt(g.shape,f.shape),O=[];if(g.rank===1){for(let xe=0;xeg.rank===1?re(ae(ae(r,la(re(z,[1,1,1,g.shape[0]]),O)),x),f.shape):re(ae(ae(r,z),x),f.shape),se=()=>{let xe=ae(ae(z,ke(-1)),$);return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)},fe=()=>{let xe=ae(ae(ne,C),$);return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)},de=()=>{const xe=ae(C,z);let Me=ae(r,xe);return g.rank===1&&(Me=Fe(Me,A)),re(Me,g.shape)},Ae=()=>{let xe=r;return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)};return{x:te,mean:se,variance:fe,scale:de,offset:Ae}}};const j1={kernelName:Qm,inputsToSave:["x","indices"],gradFunc:(r,l,h)=>{const[d,f]=l,{axis:g}=h,S=ht(g,d.shape)[0],L=()=>{const x=d.shape,A=f.size,O=x.slice(0,S),C=O.length,$=x.slice(g,x.length).slice(1),z=$.length,ne=Y1(0,C),te=Y1(C+1,C+1+z),se=q1([O,[A],$]),fe=re(r,se),de=re(f,[A]),Ae=q1([[C],ne,te]),xe=Wt(fe,Ae);let Me=JI(xe,de,d.shape[S]);const Ke=Mc(Ae);return Me=Wt(Me,Ke),Me};return{x:L,indices:()=>f}}};function Y1(r,l){const h=[];for(let d=r;d{const[h,d]=l;return{a:()=>je(h),b:()=>je(d)}}};const X1={kernelName:tf,gradFunc:r=>({x:()=>Le(r,"float32")})};const J1={kernelName:tR,gradFunc:r=>({x:()=>je(r)})};const Z1={kernelName:nR,gradFunc:r=>({x:()=>je(r)})};const Q1={kernelName:sR,gradFunc:r=>({x:()=>je(r)})};const eE={kernelName:sf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,St(h,1))}}};const tE={kernelName:nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,Le(h,"float32"))}}};const nE={kernelName:cR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d]=l,{axis:f}=h;return{logits:()=>{const g=!0,S=Gn(d);return Be(r,ae(Fe(r,f,g),S))}}}};function AZ(r,l,h,d=5,f=1,g=1,S=.5){const L=O=>O.LRNGrad(h,r,l,d,f,g,S),x={x:r,y:l,dy:h},A={depthRadius:d,bias:f,alpha:g,beta:S};return H.runKernelFunc(L,x,null,hR,A)}const sE=G({localResponseNormalizationBackprop_:AZ});const iE={kernelName:lR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{depthRadius:g,bias:S,alpha:L,beta:x}=h;return{x:()=>sE(d,f,r,g,S,L,x)}}};function sg(r,l,h,d,f){return l.rank{const g=ae(r,Le(OI(h,l),r.dtype));return f==null?g:Wt(g,f)}}}const QI={kernelName:rf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const d=h,{reductionIndices:f}=d,[g,S]=l,L=ht(f,g.shape),x=fs(L,g.rank),A=sg(r,S,g,L,x);return{x:()=>{let O=A.x();return x!=null&&(O=Wt(O)),O}}}};const rE={kernelName:of,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=()=>ae(r,Le(Sr(h,d),"float32")),g=()=>ae(r,Le(WI(h,d),"float32"));return{a:f,b:g}}};function vZ(r,l,h,d,f,g=[1,1,1],S,L){const x=M(r,"dy","maxPool3dBackprop"),A=M(l,"input","maxPool3dBackprop"),O=M(h,"output","maxPool3dBackprop");let C=x,$=A,z=O,ne=!1;A.rank===4&&(ne=!0,C=re(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),$=re(A,[1,A.shape[0],A.shape[1],A.shape[2],A.shape[3]]),z=re(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z($.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${$.rank}.`),Z(z.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${z.rank}.`),Z(co(f,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${f} and dilations '${g}'`),L!=null&&Z(Qt(S),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${L} but got pad ${S}.`);const te=Ae=>{const xe=qf($.shape,d,f,g,S,L);return Ae.maxPool3dBackprop(C,$,z,xe)},se={dy:C,input:$,output:z},fe={filterSize:d,strides:f,dilations:g,pad:S,dimRoundingMode:L},de=H.runKernelFunc(te,se,null,mR,fe);return ne?re(de,[de.shape[1],de.shape[2],de.shape[3],de.shape[4]]):de}const oE=G({maxPool3dBackprop_:vZ});const aE={kernelName:pR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{filterSize:g,strides:S,dilations:L,pad:x,dimRoundingMode:A}=h,O=L==null?[1,1,1]:L;return{x:()=>oE(r,d,f,g,S,O,x,A)}}};function NZ(r,l,h,d,f,g,S){const L=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),A=M(h,"output","maxPoolBackprop");Z(x.rank===L.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${L.rank})`),Z(L.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${L.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),S!=null&&Z(Qt(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const O=z=>{const ne=Yf(x.shape,d,f,1,g,S);return z.maxPoolBackprop(L,x,A,ne)},C={dy:L,input:x,output:A},$={filterSize:d,strides:f,pad:g,dimRoundingMode:S};return H.runKernelFunc(O,C,null,dR,$)}const cE=G({maxPoolBackprop_:NZ});const lE={kernelName:uR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{filterSize:g,strides:S,pad:L}=h;return{x:()=>cE(r,d,f,g,S,L)}}};const hE={kernelName:af,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const d=h,{axis:f}=d,[g,S]=l,L=ht(f,g.shape),x=fs(L,g.rank),A=sg(r,S,g,L,x);return{x:()=>{let O=A.x();return x!=null&&(O=Wt(O)),O}}}};const uE={kernelName:cf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=()=>ae(r,Le(Ir(h,d),"float32")),g=()=>ae(r,Le(wi(h,d),"float32"));return{a:f,b:g}}};const dE={kernelName:fR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=vt(h.shape,f);return L.length>0?re(Fe(r,L),h.shape):r},S=()=>{const L=ae(r,yt(kI(ze(h,d)))),x=vt(d.shape,f);return x.length>0?re(Fe(L,x),d.shape):L};return{a:g,b:S}}};const pE={kernelName:lf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ae(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{const L=ae(r,Le(h,"float32")),x=vt(d.shape,f);return x.length>0?re(Fe(L,x),d.shape):L};return{a:g,b:S}}};const mE={kernelName:hf,gradFunc:r=>({x:()=>yt(r)})};const fE={kernelName:SR,inputsToSave:["indices"],gradFunc:(r,l)=>{const h=l[0];return{indices:()=>Fs(h.shape,"float32")}}};const gE={kernelName:LR,gradFunc:r=>({x:()=>je(r)})};const ex={kernelName:uf,inputsToSave:["x"],gradFunc:(r,l,h)=>{const d=l[0],{paddings:f}=h,g=f.map(S=>S[0]);return{x:()=>At(r,g,d.shape)}}};const yE={kernelName:df,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[h,d,f]=l,g=h,S=d,L=rt(g.shape,S.shape),x=()=>{const O=Le(S,"float32");let C=ae(r,ae(O,da(g,Be(O,ke(1)))));const $=vt(g.shape,L);return $.length>0&&(C=Fe(C,$)),re(C,g.shape)},A=()=>{const O=wi(g,0),C=zn(O,lo(g),je(g));let $=ae(r,ae(f,C));const z=vt(S.shape,L);return z.length>0&&($=Fe($,z)),re($,S.shape)};return{a:x,b:A}}};const bE={kernelName:IR,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[h,d]=l,f=wi(h,0);return{x:()=>zn(f,r,ae(r,d)),alpha:()=>{let g=zn(f,je(r),ae(r,h));const S=vt(d.shape,r.shape);return S.length>0&&(g=Fe(g,S)),re(g,d.shape)}}}};const wE={kernelName:AR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,yt(ut(h)))}}};const LE={kernelName:CR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l,d=ae(Ir(h,6),pa(h));return{x:()=>ae(r,Le(d,"float32"))}}};const SE={kernelName:pf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,Le(pa(h),"float32"))}}};const IE={kernelName:mf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>re(r,h.shape)}}};const xE={kernelName:gf,inputsToSave:["images"],gradFunc:(r,l,h)=>{const[d]=l,f=L=>{const{alignCorners:x}=h;return L.resizeBilinearBackprop(r,d,x)},g={images:d},S=()=>H.runKernelFunc(f,g,null,NR,h);return{images:S}}};const TE={kernelName:ff,inputsToSave:["images"],gradFunc:(r,l,h)=>{const[d]=l,f=L=>{const{alignCorners:x}=h;return L.resizeNearestNeighborBackprop(r,d,x)},g={images:d},S=()=>H.runKernelFunc(f,g,null,vR,h);return{images:S}}};const AE={kernelName:yf,gradFunc:(r,l,h)=>{const{dims:d}=h,f=ht(d,r.shape);return{x:()=>Vc(r,f)}}};const vE={kernelName:RR,gradFunc:r=>({x:()=>je(r)})};const NE={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>yt(ze(r,ae(da(h,1.5),2)))}}};const CE={kernelName:wf,inputsToSave:["condition"],gradFunc:(r,l)=>{const[h]=l;return{condition:()=>Le(je(h),"float32"),t:()=>ae(r,Le(h,r.dtype)),e:()=>ae(r,Le(BI(h),r.dtype))}}};const RE={kernelName:OR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=wi(h,ke(0)),f=ke(i1),g=ke(r1),S=ae(r,g),L=ae(ae(r,f),Gn(Le(h,"float32")));return zn(d,S,L)}}}};const OE={kernelName:xf,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,ae(h,Be(ke(1),h)))}}};const EE={kernelName:ER,gradFunc:r=>({x:()=>je(r)})};const DE={kernelName:Sf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(Fu(Le(h,"float32")),r)}}};const kE={kernelName:If,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(CI(Le(h,"float32")),r)}}};const FE={kernelName:Lf,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{begin:f,size:g}=h,S=d.shape,[L,x]=Vf(d,f,g),A=[];for(let O=0;OGI(r,A)}}};const _E={kernelName:kR,outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d]=l,{dim:f}=h,g=!0,S=ae(r,d);return{logits:()=>Be(S,ae(Fe(S,[f],g),d))}}};const WE={kernelName:DR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,AI(h))}}};const tx={kernelName:vf,gradFunc:(r,l,h)=>{const{blockShape:d,paddings:f}=h;return{x:()=>vI(r,d,f)}}};const nx={kernelName:Nf,gradFunc:(r,l,h)=>{const{axis:d}=h;return{x:()=>bn(r,d)}}};const $E={kernelName:Tf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,ae(gs(Le(h,"float32")),2))}}};const UE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,ae(Le(h,"float32"),2))}}};const BE={kernelName:Cf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=ke(2),g=()=>ae(r,ae(f,Be(h,d))),S=()=>ae(r,ae(f,Be(d,h)));return{a:g,b:S}}};const ME={kernelName:_f,gradFunc:r=>({x:()=>je(r)})};const PE={kernelName:Rf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{let L=r;const x=vt(h.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,h.shape)},S=()=>{let L=r;const x=vt(d.shape,f);return x.length>0&&(L=Fe(L,x)),re(yt(L),d.shape)};return{a:g,b:S}}};const zE={kernelName:Af,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,f=d.shape.slice(),{axis:g}=h,S=ht(g,d.shape);S.forEach(A=>{f[A]=1});const L=re(r,f),x=ae(L,Ki(d.shape,"float32"));return{x:()=>x}}};const GE={kernelName:_R,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,ut(Fu(h)))}}};const VE={kernelName:WR,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(Be(ke(1),ut(h)),r)}}};const HE={kernelName:Of,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{reps:f}=h,g=()=>{let S=je(d);if(d.rank===1)for(let L=0;L{const d=h,{perm:f}=d,g=Mc(f);return{x:()=>Wt(r,g)}}};const qE={kernelName:Df,gradFunc:(r,l,h)=>{const d=h,{axis:f}=d;return{value:()=>js(r,f)}}};const jE={kernelName:kf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[h]=l,d=()=>CZ(r,h);return{x:d}}};function CZ(r,l){const h=_I(l,je(l)),d=FI(r,h);let f=Sr(l,ke(0,"int32"));const g=d.rank-f.rank;for(let L=0;L({x:()=>je(r)})};const RZ=[o1,a1,c1,l1,h1,u1,d1,p1,m1,f1,g1,y1,w1,S1,I1,x1,T1,A1,v1,N1,C1,O1,R1,D1,k1,F1,_1,W1,$1,U1,B1,M1,P1,z1,V1,G1,H1,j1,K1,X1,J1,Z1,Q1,eE,tE,nE,iE,QI,QI,rE,aE,lE,hE,uE,dE,pE,mE,fE,gE,ex,ex,yE,bE,wE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,EE,DE,kE,FE,_E,WE,tx,tx,nx,nx,$E,BE,UE,ME,PE,zE,GE,VE,HE,YE,qE,jE,KE];for(const r of RZ)BR(r);function sx(r,l,h=!1){const{Image:d,Canvas:f}=gt.getEnv();if(!(r instanceof d||r instanceof f))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ra(r),S=l/Math.max(g.height,g.width),L=S*g.width,x=S*g.height,A=Dc({width:l,height:l}),O=r instanceof f?r:Tu(r),C=Math.abs(L-x)/2,$=h&&L{if(yr(h)){this._imageTensors[d]=h,this._inputDimensions[d]=h.shape;return}if(Os(h)){const g=h.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[d]=h,this._inputDimensions[d]=h.shape.slice(1);return}const f=h instanceof gt.getEnv().Canvas?h:Tu(h);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 zi(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),h=this.getInputHeight(r);return PS({width:l,height:h},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,pO(()=>{const h=zi(this.batchSize,0,1).map(f=>{const g=this.getInput(f);if(g instanceof Tn){let S=Os(g)?g:g.expandDims();return S=HS(S,l),(S.shape[1]!==r||S.shape[2]!==r)&&(S=s1.resizeBilinear(S,[r,r])),S.as3D(r,r,3)}if(g instanceof gt.getEnv().Canvas)return II.fromPixels(sx(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${f}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),d=js(h.map(f=>Le(f,"float32"))).as4D(this.batchSize,r,r,3);return d})}}async function Rt(r){if(r instanceof po)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const h=f=>Array.isArray(r)?` at input index ${f}:`:"",d=l.map(ia);return d.forEach((f,g)=>{if(!Um(f)&&!yr(f)&&!Os(f))throw typeof l[g]=="string"?new Error(`toNetInput -${h(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${h(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Os(f)){const S=f.shape[0];if(S!==1)throw new Error(`toNetInput -${h(g)} tf.Tensor4D with batchSize ${S} passed, but not supported in input array`)}}),await Promise.all(d.map(f=>Um(f)&&QS(f))),new po(d,Array.isArray(r))}async function Yc(r,l){const{Canvas:h}=gt.getEnv();let d=r;if(!(r instanceof h)){const S=await Rt(r);if(S.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const L=S.getInput(0);d=L instanceof h?L:await tI(L)}const f=es(d),g=l.map(S=>S instanceof Yt?S.forSize(d.width,d.height).box.floor():S).map(S=>S.clipAtImageBorders(d.width,d.height));return g.map(({x:S,y:L,width:x,height:A})=>{const O=Dc({width:x,height:A});return es(O).putImageData(f.getImageData(S,L,x,A),0,0),O})}const ig=Ye(Je());async function qc(r,l){if(!yr(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 ig.tidy(()=>{const[h,d,f]=r.shape.slice(Os(r)?1:0),g=l.map(L=>L instanceof Yt?L.forSize(d,h).box:L).map(L=>L.clipAtImageBorders(d,h)),S=g.map(({x:L,y:x,width:A,height:O})=>ig.slice3d(r.as3D(h,d,f),[x,L,0],[O,A,f]));return S})}async function fa(r,l){const h=gt.getEnv().fetch,d=await h(r,l);if(!(d.status<400))throw new Error(`failed to fetch: (${d.status}) ${d.statusText}, from url: ${d.url}`);return d}async function OZ(r){const l=await fa(r),h=await l.blob();if(!h.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${h.type}, for url: ${l.url}`);return eI(h)}async function ix(r){return(await fa(r)).json()}async function EZ(r){return new Float32Array(await(await fa(r)).arrayBuffer())}function rg(r,l){const h=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:h};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${h}`};const d=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(d,"");const f=r.split("/").filter(L=>L),g=r.endsWith(".json")?f[f.length-1]:h;let S=d+(r.endsWith(".json")?f.slice(0,f.length-1):f).join("/");return S=r.startsWith("/")?`/${S}`:S,{modelBaseUri:S,manifestUri:S==="/"?`/${g}`:`${S}/${g}`}}const XE=Ye(Je());async function rx(r,l){const{manifestUri:h,modelBaseUri:d}=rg(r,l);let f=await ix(h);return XE.io.loadWeights(f,d)}function DZ(r,l,h=!1){const{width:d,height:f}=h?ra(l):l;return r.width=d,r.height=f,{width:d,height:f}}const xr=Ye(Je());class kn{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:h}=this.traversePropertyPath(r);return l[h]}reassignParamFromPath(r,l){const{obj:h,objProp:d}=this.traversePropertyPath(r);h[d].dispose(),h[d]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof xr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof xr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const h=xr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,h)})}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 rx(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}=gt.getEnv(),{manifestUri:h,modelBaseUri:d}=rg(r,this.getDefaultModelName()),f=x=>Promise.all(x.map(A=>l(A).then(O=>O.buffer))),g=xr.io.weightsLoaderFactory(f),S=JSON.parse((await l(h)).toString()),L=await g(S,d);this.loadFromWeightMap(L)}loadFromWeightMap(r){const{paramMappings:l,params:h}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=h}extractWeights(r){const{paramMappings:l,params:h}=this.extractParams(r);this._paramMappings=l,this._params=h}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:h,objProp:d}=l;if(!h||!d||!(h[d]instanceof xr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:h,objProp:d}}}const jc=Ye(Je());function ns(r,l,h){return jc.tidy(()=>{let d=jc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,h,"same");return d=jc.add(d,l.bias),d})}const Dt=Ye(Je());function og(r,l,h=!1){return Dt.tidy(()=>{const d=Dt.relu(h?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):ns(r,l.conv0,[2,2])),f=ns(d,l.conv1,[1,1]),g=Dt.relu(Dt.add(d,f)),S=ns(g,l.conv2,[1,1]);return Dt.relu(Dt.add(d,Dt.add(f,S)))})}function Mu(r,l,h=!1,d=!0){return Dt.tidy(()=>{const f=Dt.relu(h?Dt.add(Dt.conv2d(r,l.conv0.filters,d?[2,2]:[1,1],"same"),l.conv0.bias):ns(r,l.conv0,d?[2,2]:[1,1])),g=ns(f,l.conv1,[1,1]),S=Dt.relu(Dt.add(f,g)),L=ns(S,l.conv2,[1,1]),x=Dt.relu(Dt.add(f,Dt.add(g,L))),A=ns(x,l.conv3,[1,1]);return Dt.relu(Dt.add(f,Dt.add(g,Dt.add(L,A))))})}const mo=Ye(Je());function ga(r,l,h="same",d=!1){return mo.tidy(()=>{const f=mo.add(mo.conv2d(r,l.filters,[1,1],h),l.bias);return d?mo.relu(f):f})}function Vn(r,l){Object.keys(r).forEach(h=>{l.some(d=>d.originalPath===h)||r[h].dispose()})}const ag=Ye(Je());function Kc(r,l){return function(h,d,f,g){const S=ag.tensor4d(r(h*d*f*f),[f,f,h,d]),L=ag.tensor1d(r(d));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:S,bias:L}}}const cg=Ye(Je());function lg(r,l){return function(h,d,f){const g=cg.tensor2d(r(h*d),[h,d]),S=cg.tensor1d(r(d));return l.push({paramPath:`${f}/weights`},{paramPath:`${f}/bias`}),{weights:g,bias:S}}}class ox{constructor(r,l,h){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=h}}const Pu=Ye(Je());function Xc(r,l){return function(h,d,f){const g=Pu.tensor4d(r(3*3*h),[3,3,h,1]),S=Pu.tensor4d(r(h*d),[1,1,h,d]),L=Pu.tensor1d(r(d));return l.push({paramPath:`${f}/depthwise_filter`},{paramPath:`${f}/pointwise_filter`},{paramPath:`${f}/bias`}),new ox(g,S,L)}}function Jc(r){return function(l){const h=r(`${l}/depthwise_filter`,4),d=r(`${l}/pointwise_filter`,4),f=r(`${l}/bias`,1);return new ox(h,d,f)}}function ys(r,l){return function(h,d,f){const g=r[h];if(!Qo(g,d))throw new Error(`expected weightMap[${h}] to be a Tensor${d}D, instead have ${g}`);return l.push({originalPath:h,paramPath:f||h}),g}}function Hn(r){let l=r;function h(f){const g=l.slice(0,f);return l=l.slice(f),g}function d(){return l}return{extractWeights:h,getRemainingWeights:d}}function hg(r,l){const h=Kc(r,l),d=Xc(r,l);function f(S,L,x,A=!1){const O=A?h(S,L,3,`${x}/conv0`):d(S,L,`${x}/conv0`),C=d(L,L,`${x}/conv1`),$=d(L,L,`${x}/conv2`);return{conv0:O,conv1:C,conv2:$}}function g(S,L,x,A=!1){const{conv0:O,conv1:C,conv2:$}=f(S,L,x,A),z=d(L,L,`${x}/conv3`);return{conv0:O,conv1:C,conv2:$,conv3:z}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:g}}function JE(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractDenseBlock4Params:f}=hg(h,l),g=f(3,32,"dense0",!0),S=f(32,64,"dense1"),L=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:S,dense2:L,dense3:x}}}function ug(r){return function(l){const h=r(`${l}/filters`,4),d=r(`${l}/bias`,1);return{filters:h,bias:d}}}function dg(r,l){const h=ys(r,l),d=ug(h),f=Jc(h);function g(L,x=!1){const A=x?d(`${L}/conv0`):f(`${L}/conv0`),O=f(`${L}/conv1`),C=f(`${L}/conv2`);return{conv0:A,conv1:O,conv2:C}}function S(L,x=!1){const A=x?d(`${L}/conv0`):f(`${L}/conv0`),O=f(`${L}/conv1`),C=f(`${L}/conv2`),$=f(`${L}/conv3`);return{conv0:A,conv1:O,conv2:C,conv3:$}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:S}}function ZE(r){const l=[],{extractDenseBlock4Params:h}=dg(r,l),d={dense0:h("dense0",!0),dense1:h("dense1"),dense2:h("dense2"),dense3:h("dense3")};return Vn(r,l),{params:d,paramMappings:l}}const fo=Ye(Je());class pg extends kn{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return fo.tidy(()=>{const h=fo.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(fo.scalar(255));let g=Mu(f,l.dense0,!0);return g=Mu(g,l.dense1),g=Mu(g,l.dense2),g=Mu(g,l.dense3),g=fo.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return ZE(r)}extractParams(r){return JE(r)}}const Zc=Ye(Je());function zu(r,l){return Zc.tidy(()=>Zc.add(Zc.matMul(r,l.weights),l.bias))}function QE(r,l,h){const d=[],{extractWeights:f,getRemainingWeights:g}=Hn(r),S=lg(f,d),L=S(l,h,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:d,params:{fc:L}}}function eD(r){const l=[],h=ys(r,l);function d(g){const S=h(`${g}/weights`,2),L=h(`${g}/bias`,1);return{weights:S,bias:L}}const f={fc:d("fc")};return Vn(r,l),{params:f,paramMappings:l}}function mg(r){const l={},h={};return Object.keys(r).forEach(d=>{const f=d.startsWith("fc")?h:l;f[d]=r[d]}),{featureExtractorMap:l,classifierMap:h}}const tD=Ye(Je());class fg extends kn{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 tD.tidy(()=>{const h=r instanceof po?this.faceFeatureExtractor.forwardInput(r):r;return zu(h.as2D(h.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:h}=this.extractClassifierParams(r);this._params=l,this._paramMappings=h}extractClassifierParams(r){return QE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:h}=mg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),eD(h)}extractParams(r){const l=this.getClassifierChannelsIn(),h=this.getClassifierChannelsOut(),d=h*l+h,f=r.slice(0,r.length-d),g=r.slice(r.length-d);return this.faceFeatureExtractor.extractWeights(f),this.extractClassifierParams(g)}}const ax=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class ya{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);ax.forEach((l,h)=>{this[l]=r[h]})}asSortedArray(){return ax.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Qc=Ye(Je());class cx extends fg{constructor(r=new pg){super("FaceExpressionNet",r)}forwardInput(r){return Qc.tidy(()=>Qc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Rt(r))}async predictExpressions(r){const l=await Rt(r),h=await this.forwardInput(l),d=await Promise.all(Qc.unstack(h).map(async g=>{const S=await g.data();return g.dispose(),S}));h.dispose();const f=d.map(g=>new ya(g));return l.isBatchInput?f:f[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function lx(r){return r.expressions instanceof ya}function gg(r,l){const h={expressions:l};return Object.assign({},r,h)}function kZ(r,l,h=.1,d){const f=Array.isArray(l)?l:[l];f.forEach(g=>{const S=g instanceof ya?g:lx(g)?g.expressions:void 0;if(!S)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const L=S.asSortedArray(),x=L.filter(C=>C.probability>h),A=Vi(g)?g.detection.box.bottomLeft:d||new Ze(0,0),O=new Ec(x.map(C=>`${C.expression} (${ea(C.probability)})`),A);O.draw(r)})}function ba(r){return Vi(r)&&r.landmarks instanceof qs&&r.unshiftedLandmarks instanceof qs&&r.alignedRect instanceof Yt}function el(r,l){const{box:h}=r.detection,d=l.shiftBy(h.x,h.y),f=d.align(),{imageDims:g}=r.detection,S=new Yt(r.detection.score,f.rescale(g.reverse()),g),L={landmarks:d,unshiftedLandmarks:l,alignedRect:S};return Object.assign({},r,L)}class nD{constructor(r={}){const{drawLines:l=!0,drawPoints:h=!0,lineWidth:d,lineColor:f,pointSize:g,pointColor:S}=r;this.drawLines=l,this.drawPoints=h,this.lineWidth=d||1,this.pointSize=g||2,this.lineColor=f||"rgba(0, 255, 255, 1)",this.pointColor=S||"rgba(255, 0, 255, 1)"}}class sD{constructor(r,l={}){this.faceLandmarks=r,this.options=new nD(l)}draw(r){const l=es(r),{drawLines:h,drawPoints:d,lineWidth:f,lineColor:g,pointSize:S,pointColor:L}=this.options;if(h&&this.faceLandmarks instanceof Iu&&(l.strokeStyle=g,l.lineWidth=f,gr(l,this.faceLandmarks.getJawOutline()),gr(l,this.faceLandmarks.getLeftEyeBrow()),gr(l,this.faceLandmarks.getRightEyeBrow()),gr(l,this.faceLandmarks.getNose()),gr(l,this.faceLandmarks.getLeftEye(),!0),gr(l,this.faceLandmarks.getRightEye(),!0),gr(l,this.faceLandmarks.getMouth(),!0)),d){l.strokeStyle=L,l.fillStyle=L;const x=A=>{l.beginPath(),l.arc(A.x,A.y,S,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function FZ(r,l){const h=Array.isArray(l)?l:[l];h.forEach(d=>{const f=d instanceof qs?d:ba(d)?d.landmarks:void 0;if(!f)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new sD(f).draw(r)})}const hx={};vc(hx,{AnchorPosition:()=>Hi,DrawBox:()=>ZS,DrawBoxOptions:()=>l2,DrawFaceLandmarks:()=>sD,DrawFaceLandmarksOptions:()=>nD,DrawTextField:()=>Ec,DrawTextFieldOptions:()=>Wm,drawContour:()=>gr,drawDetections:()=>GX,drawFaceExpressions:()=>kZ,drawFaceLandmarks:()=>FZ});function _Z(r,l){const h=Kc(r,l),d=Xc(r,l);function f(S,L,x){const A=d(S,L,`${x}/separable_conv0`),O=d(L,L,`${x}/separable_conv1`),C=h(S,L,1,`${x}/expansion_conv`);return{separable_conv0:A,separable_conv1:O,expansion_conv:C}}function g(S,L){const x=d(S,S,`${L}/separable_conv0`),A=d(S,S,`${L}/separable_conv1`),O=d(S,S,`${L}/separable_conv2`);return{separable_conv0:x,separable_conv1:A,separable_conv2:O}}return{extractConvParams:h,extractSeparableConvParams:d,extractReductionBlockParams:f,extractMainBlockParams:g}}function iD(r,l){const h=[],{extractWeights:d,getRemainingWeights:f}=Hn(r),{extractConvParams:g,extractSeparableConvParams:S,extractReductionBlockParams:L,extractMainBlockParams:x}=_Z(d,h),A=g(3,32,3,"entry_flow/conv_in"),O=L(32,64,"entry_flow/reduction_block_0"),C=L(64,128,"entry_flow/reduction_block_1"),$={conv_in:A,reduction_block_0:O,reduction_block_1:C},z={};zi(l,0,1).forEach(fe=>{z[`main_block_${fe}`]=x(128,`middle_flow/main_block_${fe}`)});const ne=L(128,256,"exit_flow/reduction_block"),te=S(256,512,"exit_flow/separable_conv"),se={reduction_block:ne,separable_conv:te};if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:h,params:{entry_flow:$,middle_flow:z,exit_flow:se}}}function WZ(r,l){const h=ys(r,l),d=ug(h),f=Jc(h);function g(L){const x=f(`${L}/separable_conv0`),A=f(`${L}/separable_conv1`),O=d(`${L}/expansion_conv`);return{separable_conv0:x,separable_conv1:A,expansion_conv:O}}function S(L){const x=f(`${L}/separable_conv0`),A=f(`${L}/separable_conv1`),O=f(`${L}/separable_conv2`);return{separable_conv0:x,separable_conv1:A,separable_conv2:O}}return{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:S}}function rD(r,l){const h=[],{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:S}=WZ(r,h),L=d("entry_flow/conv_in"),x=g("entry_flow/reduction_block_0"),A=g("entry_flow/reduction_block_1"),O={conv_in:L,reduction_block_0:x,reduction_block_1:A},C={};zi(l,0,1).forEach(te=>{C[`main_block_${te}`]=S(`middle_flow/main_block_${te}`)});const $=g("exit_flow/reduction_block"),z=f("exit_flow/separable_conv"),ne={reduction_block:$,separable_conv:z};return Vn(r,h),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:h}}const tn=Ye(Je());function oD(r,l,h){return tn.add(tn.conv2d(r,l.filters,h,"same"),l.bias)}function ux(r,l,h=!0){let d=h?tn.relu(r):r;return d=ns(d,l.separable_conv0,[1,1]),d=ns(tn.relu(d),l.separable_conv1,[1,1]),d=tn.maxPool(d,[3,3],[2,2],"same"),d=tn.add(d,oD(r,l.expansion_conv,[2,2])),d}function $Z(r,l){let h=ns(tn.relu(r),l.separable_conv0,[1,1]);return h=ns(tn.relu(h),l.separable_conv1,[1,1]),h=ns(tn.relu(h),l.separable_conv2,[1,1]),h=tn.add(h,r),h}class aD extends kn{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return tn.tidy(()=>{const h=tn.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(tn.scalar(256));let g=tn.relu(oD(f,l.entry_flow.conv_in,[2,2]));return g=ux(g,l.entry_flow.reduction_block_0,!1),g=ux(g,l.entry_flow.reduction_block_1),zi(this._numMainBlocks,0,1).forEach(S=>{g=$Z(g,l.middle_flow[`main_block_${S}`])}),g=ux(g,l.exit_flow.reduction_block),g=tn.relu(ns(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return rD(r,this._numMainBlocks)}extractParams(r){return iD(r,this._numMainBlocks)}}function cD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),f=lg(h,l),g=f(512,1,"fc/age"),S=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:S}}}}function lD(r){const l=[],h=ys(r,l);function d(g){const S=h(`${g}/weights`,2),L=h(`${g}/bias`,1);return{weights:S,bias:L}}const f={fc:{age:d("fc/age"),gender:d("fc/gender")}};return Vn(r,l),{params:f,paramMappings:l}}var Tr;(function(r){r.FEMALE="female",r.MALE="male"})(Tr||(Tr={}));const Xi=Ye(Je());class dx extends kn{constructor(r=new aD(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 h=r instanceof po?this.faceFeatureExtractor.forwardInput(r):r,d=Xi.avgPool(h,[7,7],[2,2],"valid").as2D(h.shape[0],-1),f=zu(d,l.fc.age).as1D(),g=zu(d,l.fc.gender);return{age:f,gender:g}})}forwardInput(r){return Xi.tidy(()=>{const{age:l,gender:h}=this.runNet(r);return{age:l,gender:Xi.softmax(h)}})}async forward(r){return this.forwardInput(await Rt(r))}async predictAgeAndGender(r){const l=await Rt(r),h=await this.forwardInput(l),d=Xi.unstack(h.age),f=Xi.unstack(h.gender),g=d.map((L,x)=>({ageTensor:L,genderTensor:f[x]})),S=await Promise.all(g.map(async({ageTensor:L,genderTensor:x})=>{const A=(await L.data())[0],O=(await x.data())[0],C=O>.5,$=C?Tr.MALE:Tr.FEMALE,z=C?O:1-O;return L.dispose(),x.dispose(),{age:A,gender:$,genderProbability:z}}));return h.age.dispose(),h.gender.dispose(),l.isBatchInput?S:S[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:h}=this.extractClassifierParams(r);this._params=l,this._paramMappings=h}extractClassifierParams(r){return cD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:h}=mg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),lD(h)}extractParams(r){const l=512*1+1+(512*2+2),h=r.slice(0,r.length-l),d=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(h),this.extractClassifierParams(d)}}const bs=Ye(Je());class yg extends fg{postProcess(r,l,h){const d=h.map(({width:g,height:S})=>{const L=l/Math.max(S,g);return{width:g*L,height:S*L}}),f=d.length;return bs.tidy(()=>{const g=(O,C)=>bs.stack([bs.fill([68],O,"float32"),bs.fill([68],C,"float32")],1).as2D(1,136).as1D(),S=(O,C)=>{const{width:$,height:z}=d[O];return C($,z)?Math.abs($-z)/2:0},L=O=>S(O,(C,$)=>C<$),x=O=>S(O,(C,$)=>$g(L(C),x(C))))).div(bs.stack(Array.from(Array(f),(O,C)=>g(d[C].width,d[C].height))));return A})}forwardInput(r){return bs.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([h,d])=>({height:h,width:d})))})}async forward(r){return this.forwardInput(await Rt(r))}async detectLandmarks(r){const l=await Rt(r),h=bs.tidy(()=>bs.unstack(this.forwardInput(l))),d=await Promise.all(h.map(async(f,g)=>{const S=Array.from(await f.data()),L=S.filter((A,O)=>Em(O)),x=S.filter((A,O)=>!Em(O));return new Iu(Array(68).fill(0).map((A,O)=>new Ze(L[O],x[O])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return h.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getClassifierChannelsOut(){return 136}}class Gu extends yg{constructor(r=new pg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function hD(r){const l=[],{extractDenseBlock3Params:h}=dg(r,l),d={dense0:h("dense0",!0),dense1:h("dense1"),dense2:h("dense2")};return Vn(r,l),{params:d,paramMappings:l}}function uD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractDenseBlock3Params:f}=hg(h,l),g=f(3,32,"dense0",!0),S=f(32,64,"dense1"),L=f(64,128,"dense2");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:S,dense2:L}}}const go=Ye(Je());class dD extends kn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return go.tidy(()=>{const h=go.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(go.scalar(255));let g=og(f,l.dense0,!0);return g=og(g,l.dense1),g=og(g,l.dense2),g=go.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return hD(r)}extractParams(r){return uD(r)}}class px extends yg{constructor(r=new dD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class UZ extends Gu{}const bg=Ye(Je());function pD(r,l){return bg.add(bg.mul(r,l.weights),l.biases)}const tl=Ye(Je());function mx(r,l,h,d,f="same"){const{filters:g,bias:S}=l.conv;let L=tl.conv2d(r,g,h,f);return L=tl.add(L,S),L=pD(L,l.scale),d?tl.relu(L):L}function mD(r,l){return mx(r,l,[1,1],!0)}function fx(r,l){return mx(r,l,[1,1],!1)}function wg(r,l){return mx(r,l,[2,2],!0,"valid")}const ws=Ye(Je());function BZ(r,l){function h(L,x,A){const O=r(L),C=O.length/(x*A*A);if(MS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${A}`);return ws.tidy(()=>ws.transpose(ws.tensor4d(O,[x,C,A,A]),[2,3,1,0]))}function d(L,x,A,O){const C=h(L,x,A),$=ws.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:$}}function f(L,x){const A=ws.tensor1d(r(L)),O=ws.tensor1d(r(L));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:A,biases:O}}function g(L,x,A,O){const C=d(L,x,A,`${O}/conv`),$=f(x,`${O}/scale`);return{conv:C,scale:$}}function S(L,x,A,O,C=!1){const $=g((C?.5:1)*L,x,A,`${O}/conv1`),z=g(L,x,A,`${O}/conv2`);return{conv1:$,conv2:z}}return{extractConvLayerParams:g,extractResidualLayerParams:S}}function fD(r){const{extractWeights:l,getRemainingWeights:h}=Hn(r),d=[],{extractConvLayerParams:f,extractResidualLayerParams:g}=BZ(l,d),S=f(4704,32,7,"conv32_down"),L=g(9216,32,3,"conv32_1"),x=g(9216,32,3,"conv32_2"),A=g(9216,32,3,"conv32_3"),O=g(36864,64,3,"conv64_down",!0),C=g(36864,64,3,"conv64_1"),$=g(36864,64,3,"conv64_2"),z=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),se=g(147456,128,3,"conv128_2"),fe=g(589824,256,3,"conv256_down",!0),de=g(589824,256,3,"conv256_1"),Ae=g(589824,256,3,"conv256_2"),xe=g(589824,256,3,"conv256_down_out"),Me=ws.tidy(()=>ws.transpose(ws.tensor2d(l(256*128),[128,256]),[1,0]));if(d.push({paramPath:"fc"}),h().length!==0)throw new Error(`weights remaing after extract: ${h().length}`);const Ke={conv32_down:S,conv32_1:L,conv32_2:x,conv32_3:A,conv64_down:O,conv64_1:C,conv64_2:$,conv64_3:z,conv128_down:ne,conv128_1:te,conv128_2:se,conv256_down:fe,conv256_1:de,conv256_2:Ae,conv256_down_out:xe,fc:Me};return{params:Ke,paramMappings:d}}function MZ(r,l){const h=ys(r,l);function d(S){const L=h(`${S}/scale/weights`,1),x=h(`${S}/scale/biases`,1);return{weights:L,biases:x}}function f(S){const L=h(`${S}/conv/filters`,4),x=h(`${S}/conv/bias`,1),A=d(S);return{conv:{filters:L,bias:x},scale:A}}function g(S){return{conv1:f(`${S}/conv1`),conv2:f(`${S}/conv2`)}}return{extractConvLayerParams:f,extractResidualLayerParams:g}}function gD(r){const l=[],{extractConvLayerParams:h,extractResidualLayerParams:d}=MZ(r,l),f=h("conv32_down"),g=d("conv32_1"),S=d("conv32_2"),L=d("conv32_3"),x=d("conv64_down"),A=d("conv64_1"),O=d("conv64_2"),C=d("conv64_3"),$=d("conv128_down"),z=d("conv128_1"),ne=d("conv128_2"),te=d("conv256_down"),se=d("conv256_1"),fe=d("conv256_2"),de=d("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!BS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const xe={conv32_down:f,conv32_1:g,conv32_2:S,conv32_3:L,conv64_down:x,conv64_1:A,conv64_2:O,conv64_3:C,conv128_down:$,conv128_1:z,conv128_2:ne,conv256_down:te,conv256_1:se,conv256_2:fe,conv256_down_out:de,fc:Ae};return Vn(r,l),{params:xe,paramMappings:l}}const Yn=Ye(Je());function Li(r,l){let h=mD(r,l.conv1);return h=fx(h,l.conv2),h=Yn.add(h,r),h=Yn.relu(h),h}function Vu(r,l){let h=wg(r,l.conv1);h=fx(h,l.conv2);let d=Yn.avgPool(r,2,2,"valid");const f=Yn.zeros(d.shape),g=d.shape[3]!==h.shape[3],S=d.shape[1]!==h.shape[1]||d.shape[2]!==h.shape[2];if(S){const L=[...h.shape];L[1]=1;const x=Yn.zeros(L);h=Yn.concat([h,x],1);const A=[...h.shape];A[2]=1;const O=Yn.zeros(A);h=Yn.concat([h,O],2)}return d=g?Yn.concat([d,f],3):d,h=Yn.add(d,h),h=Yn.relu(h),h}const _s=Ye(Je());class Hu extends kn{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return _s.tidy(()=>{const h=_s.cast(r.toBatchTensor(150,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(_s.scalar(256));let g=wg(f,l.conv32_down);g=_s.maxPool(g,3,2,"valid"),g=Li(g,l.conv32_1),g=Li(g,l.conv32_2),g=Li(g,l.conv32_3),g=Vu(g,l.conv64_down),g=Li(g,l.conv64_1),g=Li(g,l.conv64_2),g=Li(g,l.conv64_3),g=Vu(g,l.conv128_down),g=Li(g,l.conv128_1),g=Li(g,l.conv128_2),g=Vu(g,l.conv256_down),g=Li(g,l.conv256_1),g=Li(g,l.conv256_2),g=Vu(g,l.conv256_down_out);const S=g.mean([1,2]),L=_s.matMul(S,l.fc);return L})}async forward(r){return this.forwardInput(await Rt(r))}async computeFaceDescriptor(r){const l=await Rt(r),h=_s.tidy(()=>_s.unstack(this.forwardInput(l))),d=await Promise.all(h.map(f=>f.data()));return h.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return gD(r)}extractParams(r){return fD(r)}}function PZ(r){const l=new Hu;return l.extractWeights(r),l}function Lg(r,l){const h={descriptor:l};return Object.assign({},r,h)}function zZ(r){return typeof r.age=="number"}function Sg(r,l){const h={age:l};return Object.assign({},r,h)}function GZ(r){return(r.gender===Tr.MALE||r.gender===Tr.FEMALE)&&Rc(r.genderProbability)}function Ig(r,l,h){const d={gender:l,genderProbability:h};return Object.assign({},r,d)}const Si=Ye(Je());function VZ(r,l){function h(x,A){const O=Si.tensor4d(r(3*3*x),[3,3,x,1]),C=Si.tensor1d(r(x)),$=Si.tensor1d(r(x)),z=Si.tensor1d(r(x)),ne=Si.tensor1d(r(x));return l.push({paramPath:`${A}/filters`},{paramPath:`${A}/batch_norm_scale`},{paramPath:`${A}/batch_norm_offset`},{paramPath:`${A}/batch_norm_mean`},{paramPath:`${A}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:$,batch_norm_mean:z,batch_norm_variance:ne}}function d(x,A,O,C,$){const z=Si.tensor4d(r(x*A*O*O),[O,O,x,A]),ne=Si.tensor1d(r(A));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${$?"batch_norm_offset":"bias"}`}),{filters:z,bias:ne}}function f(x,A,O,C){const{filters:$,bias:z}=d(x,A,O,C,!0);return{filters:$,batch_norm_offset:z}}function g(x,A,O){const C=h(x,`${O}/depthwise_conv`),$=f(x,A,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:$}}function S(){const x=f(3,32,3,"mobilenetv1/conv_0"),A=g(32,64,"mobilenetv1/conv_1"),O=g(64,128,"mobilenetv1/conv_2"),C=g(128,128,"mobilenetv1/conv_3"),$=g(128,256,"mobilenetv1/conv_4"),z=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),se=g(512,512,"mobilenetv1/conv_8"),fe=g(512,512,"mobilenetv1/conv_9"),de=g(512,512,"mobilenetv1/conv_10"),Ae=g(512,512,"mobilenetv1/conv_11"),xe=g(512,1024,"mobilenetv1/conv_12"),Me=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:A,conv_2:O,conv_3:C,conv_4:$,conv_5:z,conv_6:ne,conv_7:te,conv_8:se,conv_9:fe,conv_10:de,conv_11:Ae,conv_12:xe,conv_13:Me}}function L(){const x=f(1024,256,1,"prediction_layer/conv_0"),A=f(256,512,3,"prediction_layer/conv_1"),O=f(512,128,1,"prediction_layer/conv_2"),C=f(128,256,3,"prediction_layer/conv_3"),$=f(256,128,1,"prediction_layer/conv_4"),z=f(128,256,3,"prediction_layer/conv_5"),ne=f(256,64,1,"prediction_layer/conv_6"),te=f(64,128,3,"prediction_layer/conv_7"),se=d(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),fe=d(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),de=d(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=d(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),xe=d(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Me=d(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),Ke=d(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),wt=d(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=d(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=d(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Fn=d(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),vn=d(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),Nn={box_encoding_predictor:se,class_predictor:fe},Qs={box_encoding_predictor:de,class_predictor:Ae},Ai={box_encoding_predictor:xe,class_predictor:Me},ei={box_encoding_predictor:Ke,class_predictor:wt},xa={box_encoding_predictor:$t,class_predictor:Kt},hl={box_encoding_predictor:Fn,class_predictor:vn};return{conv_0:x,conv_1:A,conv_2:O,conv_3:C,conv_4:$,conv_5:z,conv_6:ne,conv_7:te,box_predictor_0:Nn,box_predictor_1:Qs,box_predictor_2:Ai,box_predictor_3:ei,box_predictor_4:xa,box_predictor_5:hl}}return{extractMobilenetV1Params:S,extractPredictionLayerParams:L}}function yD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractMobilenetV1Params:f,extractPredictionLayerParams:g}=VZ(h,l),S=f(),L=g(),x=Si.tensor3d(h(5118*4),[1,5118,4]),A={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:S,prediction_layer:L,output_layer:A},paramMappings:l}}function HZ(r,l){const h=ys(r,l);function d(A,O,C){const $=h(`${A}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),z=h(`${A}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:$,batch_norm_offset:z}}function f(A){const O=`mobilenetv1/conv_${A}`,C=`MobilenetV1/Conv2d_${A}_depthwise`,$=`${O}/depthwise_conv`,z=`${O}/pointwise_conv`,ne=h(`${C}/depthwise_weights`,4,`${$}/filters`),te=h(`${C}/BatchNorm/gamma`,1,`${$}/batch_norm_scale`),se=h(`${C}/BatchNorm/beta`,1,`${$}/batch_norm_offset`),fe=h(`${C}/BatchNorm/moving_mean`,1,`${$}/batch_norm_mean`),de=h(`${C}/BatchNorm/moving_variance`,1,`${$}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:se,batch_norm_mean:fe,batch_norm_variance:de},pointwise_conv:d("MobilenetV1",A,z)}}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 S(A,O){const C=h(`${A}/weights`,4,`${O}/filters`),$=h(`${A}/biases`,1,`${O}/bias`);return{filters:C,bias:$}}function L(A){const O=S(`Prediction/BoxPredictor_${A}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${A}/box_encoding_predictor`),C=S(`Prediction/BoxPredictor_${A}/ClassPredictor`,`prediction_layer/box_predictor_${A}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}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:L(0),box_predictor_1:L(1),box_predictor_2:L(2),box_predictor_3:L(3),box_predictor_4:L(4),box_predictor_5:L(5)}}return{extractMobilenetV1Params:g,extractPredictionLayerParams:x}}function bD(r){const l=[],{extractMobilenetV1Params:h,extractPredictionLayerParams:d}=HZ(r,l),f=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!yr(f))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${f}`);const g={mobilenetv1:h(),prediction_layer:d(),output_layer:{extra_dim:f}};return Vn(r,l),{params:g,paramMappings:l}}const yo=Ye(Je());function Xs(r,l,h){return yo.tidy(()=>{let d=yo.conv2d(r,l.filters,h,"same");return d=yo.add(d,l.batch_norm_offset),yo.clipByValue(d,0,6)})}const Ar=Ye(Je()),YZ=.0010000000474974513;function qZ(r,l,h){return Ar.tidy(()=>{let d=Ar.depthwiseConv2d(r,l.filters,h,"same");return d=Ar.batchNorm(d,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,YZ),Ar.clipByValue(d,0,6)})}function jZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function wD(r,l){return Ar.tidy(()=>{let h,d=Xs(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,S)=>{const L=S+1,x=jZ(L);d=qZ(d,g.depthwise_conv,x),d=Xs(d,g.pointwise_conv,[1,1]),L===11&&(h=d)}),h===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:d,conv11:h}})}function LD(r,l,h,d,f){const g=r.shape[0],S=Math.min(h,g),L=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>f).sort((O,C)=>C.score-O.score),x=O=>O<=d?1:0,A=[];return L.forEach(O=>{if(A.length>=S)return;const C=O.score;for(let $=A.length-1;$>=0;--$){const z=KZ(r,O.boxIndex,A[$]);if(z===0)continue;if(O.score*=x(z),O.score<=f)break}C===O.score&&A.push(O.boxIndex)}),A}function KZ(r,l,h){const d=r.arraySync(),f=Math.min(d[l][0],d[l][2]),g=Math.min(d[l][1],d[l][3]),S=Math.max(d[l][0],d[l][2]),L=Math.max(d[l][1],d[l][3]),x=Math.min(d[h][0],d[h][2]),A=Math.min(d[h][1],d[h][3]),O=Math.max(d[h][0],d[h][2]),C=Math.max(d[h][1],d[h][3]),$=(S-f)*(L-g),z=(O-x)*(C-A);if($<=0||z<=0)return 0;const ne=Math.max(f,x),te=Math.max(g,A),se=Math.min(S,O),fe=Math.min(L,C),de=Math.max(se-ne,0)*Math.max(fe-te,0);return de/($+z-de)}const De=Ye(Je());function XZ(r){const l=De.unstack(De.transpose(r,[1,0])),h=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],d=[De.add(l[0],De.div(h[0],De.scalar(2))),De.add(l[1],De.div(h[1],De.scalar(2)))];return{sizes:h,centers:d}}function JZ(r,l){const{sizes:h,centers:d}=XZ(r),f=De.unstack(De.transpose(l,[1,0])),g=De.div(De.mul(De.exp(De.div(f[2],De.scalar(5))),h[0]),De.scalar(2)),S=De.add(De.mul(De.div(f[0],De.scalar(10)),h[0]),d[0]),L=De.div(De.mul(De.exp(De.div(f[3],De.scalar(5))),h[1]),De.scalar(2)),x=De.add(De.mul(De.div(f[1],De.scalar(10)),h[1]),d[1]);return De.transpose(De.stack([De.sub(S,g),De.sub(x,L),De.add(S,g),De.add(x,L)]),[1,0])}function SD(r,l,h){return De.tidy(()=>{const d=r.shape[0];let f=JZ(De.reshape(De.tile(h.extra_dim,[d,1,1]),[-1,4]),De.reshape(r,[-1,4]));f=De.reshape(f,[d,f.shape[0]/d,4]);const g=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let S=De.slice(g,[0,0,0],[-1,-1,1]);S=De.reshape(S,[d,S.shape[1]]);const L=De.unstack(f),x=De.unstack(S);return{boxes:L,scores:x}})}const Yu=Ye(Je());function wa(r,l){return Yu.tidy(()=>{const h=r.shape[0],d=Yu.reshape(ga(r,l.box_encoding_predictor),[h,-1,1,4]),f=Yu.reshape(ga(r,l.class_predictor),[h,-1,3]);return{boxPredictionEncoding:d,classPrediction:f}})}const qu=Ye(Je());function ID(r,l,h){return qu.tidy(()=>{const d=Xs(r,h.conv_0,[1,1]),f=Xs(d,h.conv_1,[2,2]),g=Xs(f,h.conv_2,[1,1]),S=Xs(g,h.conv_3,[2,2]),L=Xs(S,h.conv_4,[1,1]),x=Xs(L,h.conv_5,[2,2]),A=Xs(x,h.conv_6,[1,1]),O=Xs(A,h.conv_7,[2,2]),C=wa(l,h.box_predictor_0),$=wa(r,h.box_predictor_1),z=wa(f,h.box_predictor_2),ne=wa(S,h.box_predictor_3),te=wa(x,h.box_predictor_4),se=wa(O,h.box_predictor_5),fe=qu.concat([C.boxPredictionEncoding,$.boxPredictionEncoding,z.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,se.boxPredictionEncoding],1),de=qu.concat([C.classPrediction,$.classPrediction,z.classPrediction,ne.classPrediction,te.classPrediction,se.classPrediction],1);return{boxPredictions:fe,classPredictions:de}})}class Ii{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 xi=Ye(Je());class nl extends kn{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return xi.tidy(()=>{const h=xi.cast(r.toBatchTensor(512,!1),"float32"),d=xi.sub(xi.mul(h,xi.scalar(.007843137718737125)),xi.scalar(1)),f=wD(d,l.mobilenetv1),{boxPredictions:g,classPredictions:S}=ID(f.out,f.conv11,l.prediction_layer);return SD(g,S,l.output_layer)})}async forward(r){return this.forwardInput(await Rt(r))}async locateFaces(r,l={}){const{maxResults:h,minConfidence:d}=new Ii(l),f=await Rt(r),{boxes:g,scores:S}=this.forwardInput(f),L=g[0],x=S[0];for(let de=1;de{const[Ae,xe]=[Math.max(0,se[de][0]),Math.min(1,se[de][2])].map(wt=>wt*te),[Me,Ke]=[Math.max(0,se[de][1]),Math.min(1,se[de][3])].map(wt=>wt*ne);return new Yt(A[de],new Su(Me,Ae,Ke-Me,xe-Ae),{height:f.getInputHeight(0),width:f.getInputWidth(0)})});return L.dispose(),x.dispose(),fe}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return bD(r)}extractParams(r){return yD(r)}}function xD(r){const l=new nl;return l.extractWeights(r),l}function ZZ(r){return xD(r)}class QZ extends nl{}const TD=.4,AD=[new Ze(.738768,.874946),new Ze(2.42204,2.65704),new Ze(4.30971,7.04493),new Ze(10.246,4.59428),new Ze(12.6868,11.8741)],vD=[new Ze(1.603231,2.094468),new Ze(6.041143,7.080126),new Ze(2.882459,3.518061),new Ze(4.266906,5.178857),new Ze(9.041765,10.66308)],ND=[117.001,114.697,97.404],CD="tiny_yolov2_model",RD="tiny_yolov2_separable_conv_model";const xg=r=>typeof r=="number";function gx(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(!xg(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=>xg(l.x)&&xg(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(xg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Js=Ye(Je());function sl(r){return Js.tidy(()=>{const l=Js.mul(r,Js.scalar(.10000000149011612));return Js.add(Js.relu(Js.sub(r,l)),l)})}const Zs=Ye(Je());function vr(r,l){return Zs.tidy(()=>{let h=Zs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return h=Zs.conv2d(h,l.conv.filters,[1,1],"valid"),h=Zs.sub(h,l.bn.sub),h=Zs.mul(h,l.bn.truediv),h=Zs.add(h,l.conv.bias),sl(h)})}const bo=Ye(Je());function Nr(r,l){return bo.tidy(()=>{let h=bo.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return h=bo.separableConv2d(h,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),h=bo.add(h,l.bias),sl(h)})}const yx=Ye(Je());function eQ(r,l){const h=Kc(r,l);function d(S,L){const x=yx.tensor1d(r(S)),A=yx.tensor1d(r(S));return l.push({paramPath:`${L}/sub`},{paramPath:`${L}/truediv`}),{sub:x,truediv:A}}function f(S,L,x){const A=h(S,L,3,`${x}/conv`),O=d(L,`${x}/bn`);return{conv:A,bn:O}}const g=Xc(r,l);return{extractConvParams:h,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}}function OD(r,l,h,d){const{extractWeights:f,getRemainingWeights:g}=Hn(r),S=[],{extractConvParams:L,extractConvWithBatchNormParams:x,extractSeparableConvParams:A}=eQ(f,S);let O;if(l.withSeparableConvs){const[C,$,z,ne,te,se,fe,de,Ae]=d,xe=l.isFirstLayerConv2d?L(C,$,3,"conv0"):A(C,$,"conv0"),Me=A($,z,"conv1"),Ke=A(z,ne,"conv2"),wt=A(ne,te,"conv3"),$t=A(te,se,"conv4"),Kt=A(se,fe,"conv5"),Fn=de?A(fe,de,"conv6"):void 0,vn=Ae?A(de,Ae,"conv7"):void 0,Nn=L(Ae||de||fe,5*h,1,"conv8");O={conv0:xe,conv1:Me,conv2:Ke,conv3:wt,conv4:$t,conv5:Kt,conv6:Fn,conv7:vn,conv8:Nn}}else{const[C,$,z,ne,te,se,fe,de,Ae]=d,xe=x(C,$,"conv0"),Me=x($,z,"conv1"),Ke=x(z,ne,"conv2"),wt=x(ne,te,"conv3"),$t=x(te,se,"conv4"),Kt=x(se,fe,"conv5"),Fn=x(fe,de,"conv6"),vn=x(de,Ae,"conv7"),Nn=L(Ae,5*h,1,"conv8");O={conv0:xe,conv1:Me,conv2:Ke,conv3:wt,conv4:$t,conv5:Kt,conv6:Fn,conv7:vn,conv8:Nn}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:O,paramMappings:S}}function tQ(r,l){const h=ys(r,l);function d(L){const x=h(`${L}/sub`,1),A=h(`${L}/truediv`,1);return{sub:x,truediv:A}}function f(L){const x=h(`${L}/filters`,4),A=h(`${L}/bias`,1);return{filters:x,bias:A}}function g(L){const x=f(`${L}/conv`),A=d(`${L}/bn`);return{conv:x,bn:A}}const S=Jc(h);return{extractConvParams:f,extractConvWithBatchNormParams:g,extractSeparableConvParams:S}}function ED(r,l){const h=[],{extractConvParams:d,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}=tQ(r,h);let S;if(l.withSeparableConvs){const L=l.filterSizes&&l.filterSizes.length||9;S={conv0:l.isFirstLayerConv2d?d("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:L>7?g("conv6"):void 0,conv7:L>8?g("conv7"):void 0,conv8:d("conv8")}}else S={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 Vn(r,h),{params:S,paramMappings:h}}var bx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(bx||(bx={}));class Cr{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 kt=Ye(Je());class il extends kn{constructor(r){super("TinyYolov2");gx(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 h=vr(r,l.conv0);return h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv1),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv2),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv3),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv4),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv5),h=kt.maxPool(h,[2,2],[1,1],"same"),h=vr(h,l.conv6),h=vr(h,l.conv7),ga(h,l.conv8,"valid",!1)}runMobilenet(r,l){let h=this.config.isFirstLayerConv2d?sl(ga(r,l.conv0,"valid",!1)):Nr(r,l.conv0);return h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv1),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv2),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv3),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv4),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv5),h=kt.maxPool(h,[2,2],[1,1],"same"),h=l.conv6?Nr(h,l.conv6):h,h=l.conv7?Nr(h,l.conv7):h,ga(h,l.conv8,"valid",!1)}forwardInput(r,l){const{params:h}=this;if(!h)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let d=kt.cast(r.toBatchTensor(l,!1),"float32");return d=this.config.meanRgb?yi(d,this.config.meanRgb):d,d=d.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(d,h):this.runTinyYolov2(d,h)})}async forward(r,l){return await this.forwardInput(await Rt(r),l)}async detect(r,l={}){const{inputSize:h,scoreThreshold:d}=new Cr(l),f=await Rt(r),g=await this.forwardInput(f,h),S=kt.tidy(()=>kt.unstack(g)[0].expandDims()),L={width:f.getInputWidth(0),height:f.getInputHeight(0)},x=await this.extractBoxes(S,f.getReshapedInputDimensions(0),d);g.dispose(),S.dispose();const A=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),$=x.map(te=>this.config.classes[te.label]),z=VS(A.map(te=>te.rescale(h)),O,this.config.iouThreshold,!0),ne=z.map(te=>new Oc(O[te],C[te],$[te],A[te],L));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return ED(r,this.config)}extractParams(r){const l=this.config.filterSizes||il.DEFAULT_FILTER_SIZES,h=l?l.length:void 0;if(h!==7&&h!==8&&h!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${h} filterSizes in config`);return OD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,h){const{width:d,height:f}=l,g=Math.max(d,f),S=g/d,L=g/f,x=r.shape[1],A=this.config.anchors.length,[O,C,$]=kt.tidy(()=>{const se=r.reshape([x,x,A,this.boxEncodingSize]),fe=se.slice([0,0,0,0],[x,x,A,4]),de=se.slice([0,0,0,4],[x,x,A,1]),Ae=this.withClassScores?kt.softmax(se.slice([0,0,0,5],[x,x,A,this.config.classes.length]),3):kt.scalar(0);return[fe,de,Ae]}),z=[],ne=await C.array(),te=await O.array();for(let se=0;seh){const xe=(fe+Lu(te[se][fe][de][0]))/x*S,Me=(se+Lu(te[se][fe][de][1]))/x*L,Ke=Math.exp(te[se][fe][de][2])*this.config.anchors[de].x/x*S,wt=Math.exp(te[se][fe][de][3])*this.config.anchors[de].y/x*L,$t=xe-Ke/2,Kt=Me-wt/2,Fn={row:se,col:fe,anchor:de},{classScore:vn,label:Nn}=this.withClassScores?await this.extractPredictedClass($,Fn):{classScore:1,label:0};z.push({box:new wu($t,Kt,$t+Ke,Kt+wt),score:Ae,classScore:Ae*vn,label:Nn,...Fn})}}return O.dispose(),C.dispose(),$.dispose(),z}async extractPredictedClass(r,l){const{row:h,col:d,anchor:f}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((S,L)=>g[h][d][f][L]).map((S,L)=>({classScore:S,label:L})).reduce((S,L)=>S.classScore>L.classScore?S:L)}}il.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class ju extends il{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:TD,classes:["face"]},r?{anchors:vD,meanRgb:ND}:{anchors:AD,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const h=await this.detect(r,l);return h.map(d=>new Yt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?RD:CD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function nQ(r,l=!0){const h=new ju(l);return h.extractWeights(r),h}class wx extends Cr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Ti{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const Lx=Ye(Je());async function La(r,l,h,d,f=({alignedRect:g})=>g){const g=r.map(x=>ba(x)?f(x):x.detection),S=d||(l instanceof Lx.Tensor?await qc(l,g):await Yc(l,g)),L=await h(S);return S.forEach(x=>x instanceof Lx.Tensor&&x.dispose()),L}async function rl(r,l,h,d,f){return La([r],l,async g=>h(g[0]),d,f)}const DD=.4,kD=[new Ze(1.603231,2.094468),new Ze(6.041143,7.080126),new Ze(2.882459,3.518061),new Ze(4.266906,5.178857),new Ze(9.041765,10.66308)],FD=[117.001,114.697,97.404];class Ku extends il{constructor(){const r={withSeparableConvs:!0,iouThreshold:DD,classes:["face"],anchors:kD,meanRgb:FD,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const h=await this.detect(r,l);return h.map(d=>new Yt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const pt={ssdMobilenetv1:new nl,tinyFaceDetector:new Ku,tinyYolov2:new ju,faceLandmark68Net:new Gu,faceLandmark68TinyNet:new px,faceRecognitionNet:new Hu,faceExpressionNet:new cx,ageGenderNet:new dx},_D=(r,l)=>pt.ssdMobilenetv1.locateFaces(r,l),sQ=(r,l)=>pt.tinyFaceDetector.locateFaces(r,l),iQ=(r,l)=>pt.tinyYolov2.locateFaces(r,l),WD=r=>pt.faceLandmark68Net.detectLandmarks(r),rQ=r=>pt.faceLandmark68TinyNet.detectLandmarks(r),oQ=r=>pt.faceRecognitionNet.computeFaceDescriptor(r),aQ=r=>pt.faceExpressionNet.predictExpressions(r),cQ=r=>pt.ageGenderNet.predictAgeAndGender(r),$D=r=>pt.ssdMobilenetv1.load(r),lQ=r=>pt.tinyFaceDetector.load(r),hQ=r=>pt.tinyYolov2.load(r),uQ=r=>pt.faceLandmark68Net.load(r),dQ=r=>pt.faceLandmark68TinyNet.load(r),pQ=r=>pt.faceRecognitionNet.load(r),mQ=r=>pt.faceExpressionNet.load(r),fQ=r=>pt.ageGenderNet.load(r),gQ=$D,yQ=_D,bQ=WD;class UD extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.extractedFaces=h}}class Zu extends UD{async run(){const r=await this.parentTask,l=await La(r,this.input,async h=>await Promise.all(h.map(d=>pt.faceExpressionNet.predictExpressions(d))),this.extractedFaces);return r.map((h,d)=>gg(h,l[d]))}withAgeAndGender(){return new Xu(this,this.input)}}class Qu extends UD{async run(){const r=await this.parentTask;if(!r)return;const l=await rl(r,this.input,h=>pt.faceExpressionNet.predictExpressions(h),this.extractedFaces);return gg(r,l)}withAgeAndGender(){return new Ju(this,this.input)}}class cl extends Zu{withAgeAndGender(){return new ol(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class ll extends Qu{withAgeAndGender(){return new al(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class BD extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.extractedFaces=h}}class Xu extends BD{async run(){const r=await this.parentTask,l=await La(r,this.input,async h=>await Promise.all(h.map(d=>pt.ageGenderNet.predictAgeAndGender(d))),this.extractedFaces);return r.map((h,d)=>{const{age:f,gender:g,genderProbability:S}=l[d];return Sg(Ig(h,g,S),f)})}withFaceExpressions(){return new Zu(this,this.input)}}class Ju extends BD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:h,genderProbability:d}=await rl(r,this.input,f=>pt.ageGenderNet.predictAgeAndGender(f),this.extractedFaces);return Sg(Ig(r,h,d),l)}withFaceExpressions(){return new Qu(this,this.input)}}class ol extends Xu{withFaceExpressions(){return new cl(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class al extends Ju{withFaceExpressions(){return new ll(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class Sx extends Ti{constructor(r,l){super();this.parentTask=r;this.input=l}}class Sa extends Sx{async run(){const r=await this.parentTask,l=await La(r,this.input,h=>Promise.all(h.map(d=>pt.faceRecognitionNet.computeFaceDescriptor(d))),null,h=>h.landmarks.align(null,{useDlibAlignment:!0}));return l.map((h,d)=>Lg(r[d],h))}withFaceExpressions(){return new cl(this,this.input)}withAgeAndGender(){return new ol(this,this.input)}}class Ia extends Sx{async run(){const r=await this.parentTask;if(!r)return;const l=await rl(r,this.input,h=>pt.faceRecognitionNet.computeFaceDescriptor(h),null,h=>h.landmarks.align(null,{useDlibAlignment:!0}));return Lg(r,l)}withFaceExpressions(){return new ll(this,this.input)}withAgeAndGender(){return new al(this,this.input)}}const ed=Ye(Je());class Ix extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=h}get landmarkNet(){return this.useTinyLandmarkNet?pt.faceLandmark68TinyNet:pt.faceLandmark68Net}}class xx extends Ix{async run(){const r=await this.parentTask,l=r.map(f=>f.detection),h=this.input instanceof ed.Tensor?await qc(this.input,l):await Yc(this.input,l),d=await Promise.all(h.map(f=>this.landmarkNet.detectLandmarks(f)));return h.forEach(f=>f instanceof ed.Tensor&&f.dispose()),r.map((f,g)=>el(f,d[g]))}withFaceExpressions(){return new cl(this,this.input)}withAgeAndGender(){return new ol(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class Tx extends Ix{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,h=this.input instanceof ed.Tensor?await qc(this.input,[l]):await Yc(this.input,[l]),d=await this.landmarkNet.detectLandmarks(h[0]);return h.forEach(f=>f instanceof ed.Tensor&&f.dispose()),el(r,d)}withFaceExpressions(){return new ll(this,this.input)}withAgeAndGender(){return new al(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class Ax extends Ti{constructor(r,l=new Ii){super();this.input=r;this.options=l}}class Tg extends Ax{async run(){const{input:r,options:l}=this,h=l instanceof wx?d=>pt.tinyFaceDetector.locateFaces(d,l):l instanceof Ii?d=>pt.ssdMobilenetv1.locateFaces(d,l):l instanceof Cr?d=>pt.tinyYolov2.locateFaces(d,l):null;if(!h)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return h(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(h=>sa({},h)))})}withFaceLandmarks(r=!1){return new xx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Zu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Xu(this.runAndExtendWithFaceDetections(),this.input)}}class vx extends Ax{async run(){const r=await new Tg(this.input,this.options);let l=r[0];return r.forEach(h=>{h.score>l.score&&(l=h)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?sa({},l):void 0)})}withFaceLandmarks(r=!1){return new Tx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Qu(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ju(this.runAndExtendWithFaceDetection(),this.input)}}function wQ(r,l=new Ii){return new vx(r,l)}function Ag(r,l=new Ii){return new Tg(r,l)}async function MD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Ag(r,new Ii(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function LQ(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Ag(r,new Cr(l)).withFaceLandmarks().withFaceDescriptors()}const SQ=MD;function Nx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const h=Array.from(r),d=Array.from(l);return Math.sqrt(h.map((f,g)=>f-d[g]).reduce((f,g)=>f+Math.pow(g,2),0))}class PD{constructor(r,l=.6){this._distanceThreshold=l;const h=Array.isArray(r)?r:[r];if(!h.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let d=1;const f=()=>`person ${d++}`;this._labeledDescriptors=h.map(g=>{if(g instanceof na)return g;if(g instanceof Float32Array)return new na(f(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new na(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(h=>Nx(h,r)).reduce((h,d)=>h+d,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:h})=>new km(h,this.computeMeanDistance(r,l))).reduce((l,h)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(h=>na.fromJSON(h));return new PD(l,r.distanceThreshold)}}function IQ(r){const l=new Ku;return l.extractWeights(r),l}function zD(r,l){const{width:h,height:d}=new ms(l.width,l.height);if(h<=0||d<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:h,height:d})}`);if(Array.isArray(r))return r.map(f=>zD(f,{width:h,height:d}));if(ba(r)){const f=r.detection.forSize(h,d),g=r.unshiftedLandmarks.forSize(f.box.width,f.box.height);return el(sa(r,f),g)}return Vi(r)?sa(r,r.detection.forSize(h,d)):r instanceof qs||r instanceof Yt?r.forSize(h,d):r}var GD="0.8.1";vc(exports,{AgeGenderNet:()=>dx,BoundingBox:()=>wu,Box:()=>Ct,ComposableTask:()=>Ti,ComputeAllFaceDescriptorsTask:()=>Sa,ComputeFaceDescriptorsTaskBase:()=>Sx,ComputeSingleFaceDescriptorTask:()=>Ia,DetectAllFaceLandmarksTask:()=>xx,DetectAllFacesTask:()=>Tg,DetectFaceLandmarksTaskBase:()=>Ix,DetectFacesTaskBase:()=>Ax,DetectSingleFaceLandmarksTask:()=>Tx,DetectSingleFaceTask:()=>vx,Dimensions:()=>ms,FACE_EXPRESSION_LABELS:()=>ax,FaceDetection:()=>Yt,FaceDetectionNet:()=>QZ,FaceExpressionNet:()=>cx,FaceExpressions:()=>ya,FaceLandmark68Net:()=>Gu,FaceLandmark68TinyNet:()=>px,FaceLandmarkNet:()=>UZ,FaceLandmarks:()=>qs,FaceLandmarks5:()=>BX,FaceLandmarks68:()=>Iu,FaceMatch:()=>km,FaceMatcher:()=>PD,FaceRecognitionNet:()=>Hu,Gender:()=>Tr,LabeledBox:()=>Fm,LabeledFaceDescriptors:()=>na,NetInput:()=>po,NeuralNetwork:()=>kn,ObjectDetection:()=>Oc,Point:()=>Ze,PredictedBox:()=>MX,Rect:()=>Su,SsdMobilenetv1:()=>nl,SsdMobilenetv1Options:()=>Ii,TinyFaceDetector:()=>Ku,TinyFaceDetectorOptions:()=>wx,TinyYolov2:()=>ju,TinyYolov2Options:()=>Cr,TinyYolov2SizeType:()=>bx,allFaces:()=>SQ,allFacesSsdMobilenetv1:()=>MD,allFacesTinyYolov2:()=>LQ,awaitMediaLoaded:()=>QS,bufferToImage:()=>eI,computeFaceDescriptor:()=>oQ,createCanvas:()=>Dc,createCanvasFromMedia:()=>Tu,createFaceDetectionNet:()=>ZZ,createFaceRecognitionNet:()=>PZ,createSsdMobilenetv1:()=>xD,createTinyFaceDetector:()=>IQ,createTinyYolov2:()=>nQ,detectAllFaces:()=>Ag,detectFaceLandmarks:()=>WD,detectFaceLandmarksTiny:()=>rQ,detectLandmarks:()=>bQ,detectSingleFace:()=>wQ,draw:()=>hx,env:()=>gt,euclideanDistance:()=>Nx,extendWithAge:()=>Sg,extendWithFaceDescriptor:()=>Lg,extendWithFaceDetection:()=>sa,extendWithFaceExpressions:()=>gg,extendWithFaceLandmarks:()=>el,extendWithGender:()=>Ig,extractFaceTensors:()=>qc,extractFaces:()=>Yc,fetchImage:()=>OZ,fetchJson:()=>ix,fetchNetWeights:()=>EZ,fetchOrThrow:()=>fa,getContext2dOrThrow:()=>es,getMediaDimensions:()=>ra,imageTensorToCanvas:()=>tI,imageToSquare:()=>sx,inverseSigmoid:()=>_X,iou:()=>zS,isMediaElement:()=>Um,isMediaLoaded:()=>xu,isWithAge:()=>zZ,isWithFaceDetection:()=>Vi,isWithFaceExpressions:()=>lx,isWithFaceLandmarks:()=>ba,isWithGender:()=>GZ,loadAgeGenderModel:()=>fQ,loadFaceDetectionModel:()=>gQ,loadFaceExpressionModel:()=>mQ,loadFaceLandmarkModel:()=>uQ,loadFaceLandmarkTinyModel:()=>dQ,loadFaceRecognitionModel:()=>pQ,loadSsdMobilenetv1Model:()=>$D,loadTinyFaceDetectorModel:()=>lQ,loadTinyYolov2Model:()=>hQ,loadWeightMap:()=>rx,locateFaces:()=>yQ,matchDimensions:()=>DZ,minBbox:()=>GS,nets:()=>pt,nonMaxSuppression:()=>VS,normalize:()=>yi,padToSquare:()=>HS,predictAgeAndGender:()=>cQ,recognizeFaceExpressions:()=>aQ,resizeResults:()=>zD,resolveInput:()=>ia,shuffleArray:()=>FX,sigmoid:()=>Lu,ssdMobilenetv1:()=>_D,tf:()=>xQ,tinyFaceDetector:()=>sQ,tinyYolov2:()=>iQ,toNetInput:()=>Rt,utils:()=>US,validateConfig:()=>gx,version:()=>vQ});const xQ=Ye(Je()),TQ=typeof process!="undefined",AQ=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",vQ={faceapi:GD,node:TQ,browser:AQ}; + with dtype ${S.dtype}. `)});const d=(S,L)=>{const x=ht(l,h[0].shape)[0],A=bO(h.map($=>$.shape),x);if(qt(A)===0)return wI([],A);if(h=h.filter($=>$.size>0),h.length===1)return h[0];const O=h.map($=>$.shape);yO(O,x);const C=S.concat(h,x);return L(h),C},f=h,g={axis:l};return H.runKernelFunc(d,f,null,Gm,g)}const bn=G({concat_:EJ});function DJ(r){const l=M(r,"x","sigmoid"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sigmoid(l);return f([g]),g},h,null,xf)}const AI=G({sigmoid_:DJ});function kJ(r,l,h){const d=M(r,"x","slice");if(d.rank===0)throw new Error("Slicing scalar is not possible");const f=(L,x)=>{const[A,O]=Vf(d,l,h);return dO(d,A,O),x([d]),L.slice(d,A,O)},g={x:d},S={begin:l,size:h};return H.runKernelFunc(f,g,null,Lf,S)}const At=G({slice_:kJ});function FJ(r,l,h){const d=M(r,"x","batchToSpaceND"),f=l.reduce((x,A)=>x*A);Z(d.rank>=1+l.length,()=>`input rank is ${d.rank} but should be > than blockShape.length ${l.length}`),Z(h.length===l.length,()=>`crops.length is ${h.length} but should be equal to blockShape.length ${l.length}`),Z(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,h),S={x:d},L={blockShape:l,crops:h};return H.runKernelFunc(g,S,null,Pm,L)}const vI=G({batchToSpaceND_:FJ});function _J(r,l){let h=M(r,"broadcastTo","x");const d=h.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthh.rank){const O=h.shape.slice();for(;O.length=0;O--)if(f[O]===l[O])g[O]=1;else if(h.shape[O]!==1)throw new Error(`broadcastTo(): [${d}] cannot be broadcast to [${l}].`);const S=g.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(S.length===0)return bi(h);const L=O=>O.tile(h,g),x={x:h},A={shape:l,inputShape:f};return H.runKernelFunc(L,x,null,zm,A)}const jf=G({broadcastTo_:_J});function WJ(r,l,h,d,f="NHWC",g=[1,1],S){const L=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let A=L,O=!1;L.rank===3&&(O=!0,A=re(L,[1,L.shape[0],L.shape[1],L.shape[2]])),Z(A.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${A.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),S!=null&&Z(Qt(d),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${S} but got pad ${d}.`);const C=f==="NHWC"?A.shape[3]:A.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(co(h,g),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${h} and dilations '${g}'`);const $=(se,fe)=>{const de=zc(f),Ae=Lr(A.shape,x.shape,h,g,d,S,!1,de),xe=se.conv2d(A,x,Ae);return fe([A,x]),xe},z={x:A,filter:x},ne={strides:h,pad:d,dataFormat:f,dilations:g,dimRoundingMode:S},te=H.runKernelFunc($,z,null,Vm,ne);return O?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const NI=G({conv2d_:WJ});function $J(r,l,h,d,f,g="NHWC",S){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let L=r,x=l,A=!1;l.rank===3&&(A=!0,x=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]),L=[1,r[0],r[1],r[2]]),Z(L.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${L.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(h.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${h.rank}`);const O=g==="NHWC"?L[3]:L[1],C=g==="NHWC"?x.shape[3]:x.shape[1];Z(O===h.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${h.shape[2]}.`),Z(C===h.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${h.shape[3]}.`),S!=null&&Z(Qt(f),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${S} but got pad ${f}.`);const $=(se,fe)=>{const de=1,Ae=zc(g),xe=Lr(L,h.shape,d,de,f,S,!1,Ae),Me=se.conv2dDerInput(x,h,xe);return fe([x,h]),Me},z={dy:x,filter:h},ne={strides:d,pad:f,dataFormat:g,dimRoundingMode:S,inputShape:L},te=H.runKernelFunc($,z,null,Hm,ne);return A?re(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const wO=G({conv2DBackpropInput_:$J});function UJ(r,l,h,d,f){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let g=r,S=l,L=!1;l.rank===4&&(L=!0,S=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 x=g[4],A=S.shape[4];Z(g.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${g.length}.`),Z(S.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${S.rank}`),Z(h.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${h.rank}`),Z(x===h.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${h.shape[3]}.`),Z(A===h.shape[4],()=>`Error in conv3dDerInput: depth of output (${A}) must match output depth for filter ${h.shape[4]}.`);const O=ne=>{const te=1,se=ku(g,h.shape,d,te,f);return ne.conv3dDerInput(S,h,se)},C={dy:S},$={pad:f},z=H.runKernelFunc(O,C,null,_2,$);return L?re(z,[z.shape[1],z.shape[2],z.shape[3],z.shape[4]]):z}const LO=G({conv3DBackpropInput_:UJ});function BJ(r){const l=M(r,"x","cos"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.cos(l);return f([l]),g},h,null,Ym)}const Fu=G({cos_:BJ});function MJ(r){const l=M(r,"x","cosh"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.cosh(l);return f([l]),g},h,null,qm)}const CI=G({cosh_:MJ});function PJ(r,l=0,h=!1,d=!1){const f=M(r,"x","cumsum"),g=(x,A)=>{const O=fs([l],f.rank);let C=f;O!=null&&(C=Wt(f,O));const $=oo(1,f.rank)[0];let z=x.cumsum(C,$,h,d);if(A([f]),O!=null){const ne=Mc(O);z=Wt(z,ne)}return z},S={x:f},L={axis:l,exclusive:h,reverse:d};return H.runKernelFunc(g,S,null,jm,L)}const RI=G({cumsum_:PJ});function vt(r,l){const h=[];for(let d=0;d1)&&h.unshift(g)}return h}function rt(r,l){const h=[],d=Math.max(r.length,l.length);for(let f=0;fS.equal(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,Y2)}const OI=G({equal_:zJ});function GJ(r,l,h){const d=M(l,"a","where"),f=M(h,"b","where"),g=M(r,"condition","where","bool"),S=rt(d.shape,f.shape),L=jf(d,S),x=jf(f,S);g.rank===1&&Z(g.shape[0]===d.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),g.rank!==1&&Zt(g.shape,x.shape,"Error in where: ");const A=(C,$)=>{const z=C.select(g,L,x);return $([g]),z},O={condition:g,t:L,e:x};return H.runKernelFunc(A,O,null,wf)}const zn=G({where_:GJ});function VJ(r){const l=M(r,"x","zerosLike"),h={x:l};return H.runKernelFunc(d=>d.zerosLike(l),h,null,Ff)}const je=G({zerosLike_:VJ});function HJ(r){const l=M(r,"x","exp"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.exp(l);return f([g]),g},h,null,Xm)}const Gn=G({exp_:HJ});function YJ(r,l=0){const h=null,d=M(r,"x","expandDims",h);Z(l<=d.rank,()=>"Axis must be <= rank of the tensor");const f=d.shape.slice();return l<0&&(Z(-(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),re(d,f)}const ks=G({expandDims_:YJ});function qJ(r,l){const h=null,d=M(r,"x","tile",h);Z(d.rank===l.length,()=>`Error in transpose: rank of input ${d.rank} must match length of reps ${l}.`);const f=(x,A)=>{const O=x.tile(d,l);return A([d]),O},g=[d],S={x:d},L={reps:l};return H.runKernelFunc(f,S,null,Of,L,g)}const la=G({tile_:qJ});function jJ(r,l,h,d="float32"){l==null&&(l=r);const f=Du([r,l],d),g=r<=l?r:l;for(let L=0;Lf.fill(r,l,h),{},null,K2,d)}function KJ(r){const l=M(r,"x","floor"),h={x:l};return H.runKernelFunc(d=>d.floor(l),h,null,Jm)}const kI=G({floor_:KJ});function SO(r,l,h){const d=r.shape[h],f=[];let g=1,S=1;for(let L=0;L{const O=ht(h,d.shape)[0],C=SO(d,f,O),$=x.gather(d,re(f,[f.size]),O);return A([d,f]),re($,C.outputShape)};return H.runKernelFunc(L,g,null,Qm,S)}const FI=G({gather_:XJ});function JJ(r,l){let h=M(r,"a","greater"),d=M(l,"b","greater");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.greater(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,Z2)}const wi=G({greater_:JJ});function ZJ(r,l){let h=M(r,"a","greaterEqual"),d=M(l,"b","greaterEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.greaterEqual(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,ef)}const Sr=G({greaterEqual_:ZJ});function QJ(r){const l=M(r,"input","imag"),h=f=>f.imag(l),d={input:l};return H.runKernelFunc(h,d,null,eR)}const _u=G({imag_:QJ});function e9(r,l){let h=M(r,"a","maximum"),d=M(l,"b","maximum");[h,d]=mt(h,d),h.dtype==="bool"&&(h=Le(h,"int32"),d=Le(d,"int32")),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.maximum(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,of)}const _I=G({maximum_:e9});function ke(r,l){if((Ds(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"&&Ds(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const h=[],d=[];return ji(r,h,d,l)}function t9(r,l){let h=M(r,"a","less"),d=M(l,"b","less");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.less(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,iR)}const WI=G({less_:t9});function n9(r,l){let h=M(r,"a","lessEqual"),d=M(l,"b","lessEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.lessEqual(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,rR)}const Ir=G({lessEqual_:n9});function s9(r){const l=M(r,"x","log"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.log(l);return f([l]),g},h,null,nf)}const lo=G({log_:s9});function i9(r){const l=M(r,"x","log1p"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.log1p(l);return f([l]),g},h,null,sf)}const $I=G({log1p_:i9});function Kf(r){return H.customGrad(r)}function r9(r){const l=M(r,"x","neg"),h={x:l};return H.runKernelFunc(d=>d.neg(l),h,null,hf)}const yt=G({neg_:r9});function o9(r,l=null,h=!1){const d=M(r,"x","max"),f=(L,x)=>{const A=ht(l,d.shape);let O=A;const C=fs(O,d.rank);let $=d;C!=null&&($=Wt(d,C),O=oo(O.length,$.rank));const z=L.max($,O);C!=null&&$.dispose();let ne=z;if(h){const te=ts(ne.shape,ht(l,d.shape));ne=re(ne,te),z.dispose()}return x([d,ne]),ne},g={x:d},S={reductionIndices:l,keepDims:h};return H.runKernelFunc(f,g,null,rf,S)}const ha=G({max_:o9});function a9(r,l){let h=M(r,"a","sub"),d=M(l,"b","sub");[h,d]=mt(h,d);const f=(S,L)=>{const x=S.subtract(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,Rf)}const Be=G({sub_:a9});function c9(r,l=null,h=!1){let d=M(r,"x","sum");d.dtype==="bool"&&(d=Le(d,"int32"));const f=(L,x)=>{x([d]);const A=ht(l,d.shape),O=fs(A,d.rank);let C=A,$=d;O!=null&&($=Wt(d,O),C=oo(C.length,d.rank));let z=L.sum($,C);if(h){const ne=ts(z.shape,A);z=re(z,ne)}return z},g={x:d},S={axis:l,keepDims:h};return H.runKernelFunc(f,g,null,Af,S)}const Fe=G({sum_:c9});function l9(r,l=null,h=!1){const d=M(r,"x","logSumExp"),f=ht(l,d.shape),g=ha(d,f,!0),S=Be(d,g),L=Gn(S),x=Fe(L,f),A=lo(x),O=St(re(g,A.shape),A);if(h){const C=ts(O.shape,f);return re(O,C)}return O}const UI=G({logSumExp_:l9});function h9(r,l){const h=M(r,"a","logicalAnd","bool"),d=M(l,"b","logicalAnd","bool");rt(h.shape,d.shape);const f={a:h,b:d};return H.runKernelFunc(g=>g.logicalAnd(h,d),f,null,oR)}const ua=G({logicalAnd_:h9});function u9(r){const l=M(r,"x","logicalNot","bool"),h={x:l};return H.runKernelFunc(d=>d.logicalNot(l),h,null,aR)}const BI=G({logicalNot_:u9});function Fs(r,l="float32"){if(l==="complex64"){const d=Fs(r,"float32"),f=Fs(r,"float32");return qi(d,f)}const h=aa(qt(r),l);return H.makeTensor(h,r,l)}function Ki(r,l="float32"){if(l==="complex64"){const d=Ki(r,"float32"),f=Fs(r,"float32");return qi(d,f)}const h=Uf(qt(r),l);return H.makeTensor(h,r,l)}function d9(r,l=null,h=!1){const d=M(r,"x","mean"),f=ht(l,d.shape),g=fO(d.shape,f),S=g[1],L=qt(S),x=Kf(A=>{const O=ke(L),C=O.dtype===A.dtype?A:Le(A,O.dtype),$=ze(C,O),z=Fe($,l,h),ne=te=>{const se=A.shape.slice();f.forEach(Ae=>{se[Ae]=1});const fe=re(te,se),de=ze(ae(fe,Ki(A.shape,"float32")),L);return de};return{value:z,gradFunc:ne}});return x(d)}const MI=G({mean_:d9});function p9(r,l=null,h=!1){const d=M(r,"x","min"),f=(L,x)=>{const A=ht(l,d.shape);let O=A;const C=fs(O,d.rank);let $=d;C!=null&&($=Wt(d,C),O=oo(O.length,d.rank));const z=L.min($,O);C!=null&&$.dispose();let ne=z;if(h){const te=ts(ne.shape,A);ne=re(z,te),z.dispose()}return x([d,ne]),ne},g={x:d},S={axis:l,keepDims:h};return H.runKernelFunc(f,g,null,af,S)}const Xf=G({min_:p9});function m9(r,l){let h=M(r,"a","minimum"),d=M(l,"b","minimum");[h,d]=mt(h,d),h.dtype==="bool"&&(h=Le(h,"int32"),d=Le(d,"int32")),rt(h.shape,d.shape);const f=(S,L)=>{const x=S.minimum(h,d);return L([h,d]),x},g={a:h,b:d};return H.runKernelFunc(f,g,null,cf)}const PI=G({minimum_:m9});function f9(r){const l=M(r,"x","square"),h={},d=[l],f=[];return H.runKernelFunc((g,S)=>(S([l]),g.square(l)),{x:l},null,"Square",h,d,f)}const ut=G({square_:f9});function g9(r,l){let h=M(r,"a","notEqual"),d=M(l,"b","notEqual");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=S=>S.notEqual(h,d),g={a:h,b:d};return H.runKernelFunc(f,g,null,gR)}const zI=G({notEqual_:g9});function y9(r){const l=M(r,"input","real"),h=f=>f.real(l),d={input:l};return H.runKernelFunc(h,d,null,TR)}const Gc=G({real_:y9});function b9(r,l,h=0){const d=M(r,"x","pad");if(d.rank===0)throw new Error("pad(scalar) is not defined. Pass non-scalar to pad");const f=(L,x)=>(x([d]),L.pad(d,l,h)),g={paddings:l,constantValue:h},S={x:d};return H.runKernelFunc(f,S,null,uf,g)}const GI=G({pad_:b9});function w9(r,l,h){const d=M(r,"x","spaceToBatchND");Z(d.rank>=1+l.length,()=>`input rank ${d.rank} should be > than [blockShape] ${l.length}`),Z(h.length===l.length,()=>`paddings.shape[0] ${h.length} must be equal to [blockShape] ${l.length}`),Z(d.shape.reduce((L,x,A)=>A>0&&A<=l.length?L&&(x+h[A-1][0]+h[A-1][1])%l[A-1]===0:L,!0),()=>`input spatial dimensions ${d.shape.slice(1)} with paddings ${h.toString()} must be divisible by blockShapes ${l.toString()}`);const f=L=>L.spaceToBatchND(d,l,h),g={x:d},S={blockShape:l,paddings:h};return H.runKernelFunc(f,g,null,vf,S)}const VI=G({spaceToBatchND_:w9});function L9(r,l){let h=M(r,"base","pow"),d=M(l,"exp","pow");[h,d]=mt(h,d);const f={a:h,b:d},g=(S,L)=>{const x=S.pow(h,d);return L([h,d,x]),x};return H.runKernelFunc(g,f,null,df)}const da=G({pow_:L9});function ho(r,l){_c(r);const h=wr(r,l);if(h.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const d=null;return ji(r,d,h,l)}function Jf(r,l,h=1,d="float32"){if(h===0)throw new Error("Cannot have a step of zero");const f=()=>{const S=r===l,L=r1;if(S||L||x)return Fs([0],d);const A=Math.abs(Math.ceil((l-r)/h)),O=aa(A,d);l(g([l]),l.dtype==="bool"?Le(l,"int32"):f.relu(l)),d={x:l};return H.runKernelFunc(h,d,null,pf)}const Wu=G({relu_:S9});function I9(r,l){const h=M(r,"x","reverse"),d=S=>{const L=ht(l,h.shape);if(h.rank===0)return bi(h);const x=S.reverse(h,L);return re(x,h.shape)},f={x:h},g={dims:l};return H.runKernelFunc(d,f,null,yf,g)}const Vc=G({reverse_:I9});function x9(r){const l=M(r,"x","rsqrt"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.rsqrt(l);return f([l]),g},h,null,bf)}const HI=G({rsqrt_:x9});function T9(r){const l=M(r,"x","sin"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sin(l);return f([l]),g},h,null,Sf)}const YI=G({sin_:T9});function A9(r){const l=M(r,"x","sinh"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sinh(l);return f([l]),g},h,null,If)}const qI=G({sinh_:A9});function v9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(h=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=r.as2D(f,d),S=h.fft(g);return S.reshape(r.shape)},l,null,j2)}const $u=G({fft_:v9});function N9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return H.runKernelFunc(h=>{const d=r.shape[r.shape.length-1],f=r.size/d,g=re(r,[f,d]),S=h.ifft(g);return re(S,r.shape)},l,null,Q2)}const Hc=G({ifft_:N9});function C9(r){const l=r.shape[r.shape.length-1],h=r.size/l;let d;if(l<=2){const f=re(r,[h,l]);d=Hc(f)}else{const f=[h,2*(l-1)],g=re(Gc(r),[h,l]),S=re(_u(r),[h,l]),L=Vc(At(g,[0,1],[h,l-2]),1),x=ae(Vc(At(S,[0,1],[h,l-2]),1),ke(-1)),A=bn([g,L],1),O=bn([S,x],1),C=re(qi(A,O),[f[0],f[1]]);d=Hc(C)}if(d=Gc(d),r.rank===3&&r.shape[0]!==0){const f=d,g=r.shape[0];d=re(d,[g,d.shape[0]/g,d.shape[1]]),f.dispose()}return d}const jI=G({irfft_:C9});function IO(r,l,h=0){let d=[];if(typeof l=="number")Z(r.shape[h]%l===0,()=>"Number of splits must evenly divide the axis."),d=new Array(l).fill(r.shape[h]/l);else{const f=l.reduce((S,L)=>(L===-1&&(S+=1),S),0);Z(f<=1,()=>"There should be only one negative value in split array.");const g=l.indexOf(-1);if(g!==-1){const S=l.reduce((L,x)=>x>0?L+x:L);l[g]=r.shape[h]-S}Z(r.shape[h]===l.reduce((S,L)=>S+L),()=>"The sum of sizes must match the size of the axis dimension."),d=l}return d}function R9(r,l,h=0){const d=M(r,"x","split"),f=(L,x)=>{const A=ht(h,d.shape)[0],O=IO(d,l,A);return L.split(d,O,A)},g={x:d},S={numOrSizeSplits:l,axis:h};return H.runKernelFunc(f,g,null,Nf,S)}const uo=G({split_:R9});function O9(r,l){Z(r.dtype==="float32",()=>`The dtype for rfft() must be real value but got ${r.dtype}`);let h=r.shape[r.shape.length-1];const d=r.size/h;let f;if(l!=null&&l0),te=r.shape.map(se=>se);te[r.shape.length-1]=l,f=At(r,ne,te),h=l}else if(l!=null&&l>h){const ne=r.shape.map(te=>te);ne[r.shape.length-1]=l-h,f=bn([r,Fs(ne)],r.shape.length-1),h=l}else f=r;const g=je(f),S=re(qi(f,g),[d,h]),L=$u(S),x=Math.floor(h/2)+1,A=Gc(L),O=_u(L),C=uo(A,[x,h-x],A.shape.length-1),$=uo(O,[x,h-x],O.shape.length-1),z=f.shape.slice();return z[f.shape.length-1]=x,re(qi(C[0],$[0]),z)}const Uu=G({rfft_:O9});function E9(r){const l=M(r,"x","sqrt"),h={x:l};return H.runKernelFunc((d,f)=>{const g=d.sqrt(l);return f([l]),g},h,null,Tf)}const gs=G({sqrt_:E9});function D9(r,l){let h=M(r,"a","squaredDifference"),d=M(l,"b","squaredDifference");[h,d]=mt(h,d),rt(h.shape,d.shape);const f=(L,x)=>{const A=L.squaredDifference(h,d);return x([h,d]),A},g={a:h,b:d},S={};return H.runKernelFunc(f,g,null,Cf,S)}const KI=G({squaredDifference_:D9});function k9(r,l){const h=M(r,"x","squeeze");return re(h,PR(h.shape,l).newShape)}const XI=G({squeeze_:k9});function F9(r,l=0){const h=Gf(r,"tensors","stack");if(Z(h.length>=1,()=>"Pass at least one tensor to tf.stack"),h.length===1)return ks(h[0],l);const d=h[0].rank,f=h[0].shape,g=h[0].dtype;Z(l<=d,()=>"Axis must be <= rank of the tensor"),h.forEach(L=>{Zt(f,L.shape,"All tensors passed to stack must have matching shapes"),Z(g===L.dtype,()=>"All tensors passed to stack must have matching dtypes")});const S=h.map(L=>ks(L,l));return bn(S,l)}const js=G({stack_:F9});function _9(r,l=0){const h=M(r,"x","step"),d={x:h},f={alpha:l};return H.runKernelFunc(g=>g.step(h,l),d,null,_f,f)}const pa=G({step_:_9});function ma(r,l,h){if(_c(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const d=wr(r,h);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 ji(r,l,d,h)}function W9(r,l,h){const d=M(r,"x","unsortedSegmentSum"),f=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(h),()=>"numSegments must be of dtype int");const g={x:d,segmentIds:f},S={numSegments:h},L=(x,A)=>{const O=x.unsortedSegmentSum(d,f,h);return A([f]),O};return H.runKernelFunc(L,g,null,kf,S)}const JI=G({unsortedSegmentSum_:W9});function $9(r,l=0){const h=M(r,"x","unstack");Z(l>=-h.shape.length&&l`Axis = ${l} is not in [-${h.shape.length}, ${h.shape.length})`),l<0&&(l+=h.shape.length);const d={value:h},f={axis:l},g=S=>S.unstack(h,l);return H.runKernelFunc(g,d,null,Df,f)}const Bu=G({unstack_:$9});function U9(r,l="euclidean",h=null,d=!1){r=M(r,"x","norm");const f=xO(r,l,h);let g=f.shape;if(d){const S=ht(h,r.shape);g=ts(f.shape,S)}return re(f,g)}function xO(r,l,h=null){if(r.rank===0)return Pn(r);if(r.rank!==1&&h===null)return xO(re(r,[-1]),l,h);if(r.rank===1||typeof h=="number"||Array.isArray(h)&&h.length===1){if(l===1)return Fe(Pn(r),h);if(l===Infinity)return ha(Pn(r),h);if(l===-Infinity)return Xf(Pn(r),h);if(l==="euclidean"||l===2)return gs(Fe(da(Pn(r),ke(2,"int32")),h));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(h)&&h.length===2){if(l===1)return ha(Fe(Pn(r),h[0]),h[1]-1);if(l===Infinity)return ha(Fe(Pn(r),h[1]),h[0]);if(l===-Infinity)return Xf(Fe(Pn(r),h[1]),h[0]);if(l==="fro"||l==="euclidean")return gs(Fe(ut(r),h));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${h}`)}const Zf=G({norm_:U9});function TO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Qf(r,l,h){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 ${L.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(h.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${h}.`);const A=g==="NHWC"?L.shape[3]:L.shape[1],O=g==="NHWC"?x.shape[3]:x.shape[1];Z(A===h[2],()=>`Error in conv2dDerFilter: depth of input ${A}) must match input depth in filter (${h[2]}.`),Z(O===h[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${h[3]}).`),S!=null&&Z(Qt(f),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${S} but got pad ${f}.`);const C=ne=>{const te=1,se=zc(g),fe=Lr(L.shape,h,d,te,f,S,!1,se);return ne.conv2dDerFilter(L,x,fe)},$={x:L,dy:x},z={strides:d,pad:f,dataFormat:g,dimRoundingMode:S};return H.runKernelFunc(C,$,null,D2,z)}const eg=G({conv2DBackpropFilter_:B9});function M9(r,l,h,d){let f=r;r.rank===3&&(f=re(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let g=l;g.rank===3&&(g=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const S=x=>x.depthwiseConv2DDerFilter(f,g,d),L={x:f,dy:g};return H.runKernelFunc(S,L,null,U2)}const AO=G({depthwiseConv2dNativeBackpropFilter_:M9});function P9(r,l,h,d){let f=l,g=!1;l.rank===3&&(g=!0,f=re(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const S=A=>A.depthwiseConv2DDerInput(f,h,d),L={dy:f},x=H.runKernelFunc(S,L,null,B2);return g?re(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const vO=G({depthwiseConv2dNativeBackpropInput_:P9});function z9(r){return Qf(r,.54,.46)}const NO=G({hammingWindow_:z9});function G9(r){return Qf(r,.5,.5)}const tg=G({hannWindow_:G9});function V9(r,l,h,d=!1,f=0){let g=0;const S=[];for(;g+l<=r.size;)S.push(At(r,g,l)),g+=h;if(d)for(;g`Error in cropAndResize: image must be rank 4,but got rank ${S.rank}.`),Z(L.rank===2&&L.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${A},4] but had shape ${L.shape}.`),Z(x.rank===1&&x.shape[0]===A,()=>`Error in cropAndResize: boxInd must be have size [${A}] but had shape ${L.shape}.`),Z(d.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${d.length}.`),Z(d[0]>=1&&d[1]>=1,()=>`cropSize must be atleast [1,1], but was ${d}`),Z(f==="bilinear"||f==="nearest",()=>`method must be bilinear or nearest, but was ${f}`);const O=ne=>ne.cropAndResize(S,L,x,d,f,g),C={image:S,boxes:L,boxInd:x},$={method:f,extrapolationValue:g,cropSize:d},z=H.runKernelFunc(O,C,null,W2,$);return z}const RO=G({cropAndResize_:Y9});function q9(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const h={image:l},d=H.runKernel(X2,h,{});return d}const OO=G({flipLeftRight_:q9});function j9(r,l,h=0,d=.5){const f=M(r,"image","rotateWithOffset","float32");Z(f.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${f.rank}.`);const g={image:f},S={radians:l,fillValue:h,center:d},L=H.runKernel($R,g,S);return L}const EO=G({rotateWithOffset_:j9});function Ks(r,l,h,d,f,g){d==null&&(d=.5),f==null&&(f=Number.NEGATIVE_INFINITY),g==null&&(g=0);const S=r.shape[0];return h=Math.min(h,S),Z(0<=d&&d<=1,()=>`iouThreshold must be in [0, 1], but was '${d}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===S,()=>`scores has incompatible shape with boxes. Expected ${S}, but was ${l.shape[0]}`),Z(0<=g&&g<=1,()=>`softNmsSigma must be in [0, 1], but was '${g}'`),{maxOutputSize:h,iouThreshold:d,scoreThreshold:f,softNmsSigma:g}}function K9(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),L=Ks(g,S,h,d,f);h=L.maxOutputSize,d=L.iouThreshold,f=L.scoreThreshold;const x={maxOutputSize:h,iouThreshold:d,scoreThreshold:f};return H.runKernelFunc(A=>A.nonMaxSuppression(g,S,h,d,f),{boxes:g,scores:S},null,yR,x)}const DO=G({nonMaxSuppression_:K9});function kO(r,l,h){const d=X9(r,l,h),f=d<0?-(d+1):d;r.splice(f,0,l)}function X9(r,l,h){return Z9(r,l,h||J9)}function J9(r,l){return r>l?1:r>>1);const L=h(l,r[g]);L>0?d=g+1:(f=g,S=!L)}return S?d:-d-1}function FO(r,l,h,d,f){return ZI(r,l,h,d,f,0).selectedIndices}function _O(r,l,h,d,f,g){return ZI(r,l,h,d,f,0,!1,g,!0)}function WO(r,l,h,d,f,g){return ZI(r,l,h,d,f,g,!0)}function ZI(r,l,h,d,f,g,S=!1,L=!1,x=!1){const A=[];for(let se=0;sef&&A.push({score:l[se],boxIndex:se,suppressBeginIndex:0});A.sort($O);const O=g>0?-.5/g:0,C=[],$=[];for(;C.length0;){const se=A.pop(),{score:fe,boxIndex:de,suppressBeginIndex:Ae}=se;if(fe=Ae;--Me){const Ke=Q9(r,de,C[Me]);if(Ke>=d){xe=!0;break}if(se.score=se.score*eZ(d,O,Ke),se.score<=f)break}se.suppressBeginIndex=C.length,xe||(se.score===fe?(C.push(de),$.push(se.score)):se.score>f&&kO(A,se,$O))}const z=C.length,ne=h-z;L&&ne>0&&(C.push(...new Array(ne).fill(0)),$.push(...new Array(ne).fill(0)));const te={selectedIndices:ho(C,"int32")};return S&&(te.selectedScores=ho($,"float32")),x&&(te.validOutputs=ke(z,"int32")),te}function Q9(r,l,h){const d=r.subarray(l*4,l*4+4),f=r.subarray(h*4,h*4+4),g=Math.min(d[0],d[2]),S=Math.min(d[1],d[3]),L=Math.max(d[0],d[2]),x=Math.max(d[1],d[3]),A=Math.min(f[0],f[2]),O=Math.min(f[1],f[3]),C=Math.max(f[0],f[2]),$=Math.max(f[1],f[3]),z=(L-g)*(x-S),ne=(C-A)*($-O);if(z<=0||ne<=0)return 0;const te=Math.max(g,A),se=Math.max(S,O),fe=Math.min(L,C),de=Math.min(x,$),Ae=Math.max(fe-te,0)*Math.max(de-se,0);return Ae/(z+ne-Ae)}function eZ(r,l,h){const d=Math.exp(l*h*h);return h<=r?d:0}function $O(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function tZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY){const g=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),L=Ks(g,S,h,d,f);h=L.maxOutputSize,d=L.iouThreshold,f=L.scoreThreshold;const x=await Promise.all([g.data(),S.data()]),A=x[0],O=x[1],C=FO(A,O,h,d,f);return g!==r&&g.dispose(),S!==l&&S.dispose(),C}const UO=tZ;function nZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const S=M(r,"boxes","nonMaxSuppression"),L=M(l,"scores","nonMaxSuppression"),x=Ks(S,L,h,d,f,g);h=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const A={boxes:S,scores:L},O={maxOutputSize:h,iouThreshold:d,scoreThreshold:f,softNmsSigma:g},C=H.runKernel(wR,A,O);return{selectedIndices:C[0],selectedScores:C[1]}}const BO=G({nonMaxSuppressionWithScore_:nZ});async function sZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=0){const S=M(r,"boxes","nonMaxSuppressionAsync"),L=M(l,"scores","nonMaxSuppressionAsync"),x=Ks(S,L,h,d,f,g);h=x.maxOutputSize,d=x.iouThreshold,f=x.scoreThreshold,g=x.softNmsSigma;const A=await Promise.all([S.data(),L.data()]),O=A[0],C=A[1],$=WO(O,C,h,d,f,g);return S!==r&&S.dispose(),L!==l&&L.dispose(),$}const MO=sZ;function iZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const S=M(r,"boxes","nonMaxSuppression"),L=M(l,"scores","nonMaxSuppression"),x=Ks(S,L,h,d,f,null),A=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,$={boxes:S,scores:L},z={maxOutputSize:A,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:g},ne=H.runKernel(bR,$,z);return{selectedIndices:ne[0],validOutputs:ne[1]}}const PO=G({nonMaxSuppressionPadded_:iZ});async function rZ(r,l,h,d=.5,f=Number.NEGATIVE_INFINITY,g=!1){const S=M(r,"boxes","nonMaxSuppressionAsync"),L=M(l,"scores","nonMaxSuppressionAsync"),x=Ks(S,L,h,d,f,null),A=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[$,z]=await Promise.all([S.data(),L.data()]),ne=_O($,z,A,O,C,g);return S!==r&&S.dispose(),L!==l&&L.dispose(),ne}const zO=rZ;function oZ(r,l,h=!1){const d=M(r,"images","resizeBilinear");Z(d.rank===3||d.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${d.rank}.`),Z(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=re(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[S,L]=l,x=($,z)=>(z([f]),$.resizeBilinear(f,S,L,h)),A={images:f},O={alignCorners:h,size:l},C=H.runKernelFunc(x,A,null,gf,O);return g?re(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const GO=G({resizeBilinear_:oZ});function aZ(r,l,h=!1){const d=M(r,"images","resizeNearestNeighbor");Z(d.rank===3||d.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${d.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(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=re(d,[1,d.shape[0],d.shape[1],d.shape[2]]));const[S,L]=l,x={images:f},A={alignCorners:h,size:l},O=($,z)=>(z([f]),$.resizeNearestNeighbor(f,S,L,h)),C=H.runKernelFunc(O,x,null,ff,A);return g?re(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const VO=G({resizeNearestNeighbor_:aZ});function cZ(r,l,h){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(h%1===0,()=>`bandPart(): numUpper must be an integer, got ${h}.`);const d=M(r,"a","bandPart");Z(d.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${d.rank}.`);const f=d.shape,[g,S]=d.shape.slice(-2);if(!(l<=g))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${g}).`);if(!(h<=S))throw new Error(`bandPart(): numUpper (${h}) must not be greater than the number of columns (${S}).`);l<0&&(l=g),h<0&&(h=S);const L=re(Jf(0,g,1,"int32"),[-1,1]),x=Jf(0,S,1,"int32"),A=Be(L,x),O=ua(Ir(A,ke(+l,"int32")),Sr(A,ke(-h,"int32"))),C=Fs([g,S],d.dtype);return re(js(Bu(re(d,[-1,g,S])).map($=>zn(O,$,C))),f)}const HO=G({bandPart_:cZ});function lZ(r){let l;if(Array.isArray(r)){l=!1,Z(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=uo(r,r.shape[0],0).map(f=>XI(f,[0]));Z(r.length<=r[0].shape[0],()=>`Gram-Schmidt: Number of vectors (${r.length}) exceeds number of dimensions (${r[0].shape[0]}).`);const h=[],d=r;for(let f=0;f{let g=d[f];if(f>0)for(let S=0;S=2,()=>`qr() requires input tensor to have a rank >= 2, but got rank ${r.rank}`),r.rank===2)return qO(r,l);{const h=r.shape.slice(0,r.shape.length-2).reduce((x,A)=>x*A),d=Bu(re(r,[h,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),f=[],g=[];d.forEach(x=>{const[A,O]=qO(x,l);f.push(A),g.push(O)});const S=re(js(f,0),r.shape),L=re(js(g,0),r.shape);return[S,L]}}function qO(r,l=!1){return H.tidy(()=>{Z(r.shape.length===2,()=>`qr2d() requires a 2D Tensor, but got a ${r.shape.length}D Tensor.`);const h=r.shape[0],d=r.shape[1];let f=EI(h),g=bi(r);const S=ma([[1]],[1,1]);let L=bi(S);const x=h>=d?d:h;for(let A=0;A{const z=At(g,[A,A],[h-A,1]),ne=Zf(z),te=At(g,[A,A],[1,1]),se=zn(wi(te,0),ma([[-1]]),ma([[1]])),fe=Be(te,ae(se,ne)),de=ze(z,fe);de.shape[0]===1?L=bi(S):L=bn([S,At(de,[1,0],[de.shape[0]-1,de.shape[1]])],0);const Ae=yt(ze(pn(se,fe),ne)),xe=At(g,[A,0],[h-A,d]),Me=ae(Ae,L),Ke=Wt(L);if(A===0)g=Be(xe,pn(Me,pn(Ke,xe)));else{const Kt=Be(xe,pn(Me,pn(Ke,xe)));g=bn([At(g,[0,0],[A,d]),Kt],0)}const wt=Wt(Me),$t=At(f,[0,A],[h,f.shape[1]-A]);if(A===0)f=Be($t,pn(pn($t,L),wt));else{const Kt=Be($t,pn(pn($t,L),wt));f=bn([At(f,[0,0],[h,A]),Kt],1)}return[L,g,f]}),mO([O,C,$])}return!l&&h>d&&(f=At(f,[0,0],[h,d]),g=At(g,[0,0],[d,d])),[f,g]})}const jO=G({qr_:hZ});var jt;(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"})(jt||(jt={}));function uZ(r,l,h=jt.SUM_BY_NONZERO_WEIGHTS){const d=M(r,"losses","computeWeightedLoss");let f=null;l!=null&&(f=M(l,"weights","computeWeightedLoss"));const g=f==null?d:ae(d,f);if(h===jt.NONE)return g;if(h===jt.SUM)return Fe(g);if(h===jt.MEAN){if(f==null)return MI(g);{const S=d.size/f.size,L=ze(Fe(g),Fe(f));return S>1?ze(L,ke(S)):L}}if(h===jt.SUM_BY_NONZERO_WEIGHTS){if(f==null)return ze(Fe(g),ke(d.size));{const S=ae(f,Ki(d.shape)),L=Le(Fe(zI(S,ke(0))),"float32");return ze(Fe(g),L)}}throw Error(`Unknown reduction: ${h}`)}const An=G({computeWeightedLoss_:uZ});function dZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","absoluteDifference"),g=M(l,"predictions","absoluteDifference");let S=null;h!=null&&(S=M(h,"weights","absoluteDifference")),Zt(f.shape,g.shape,"Error in absoluteDifference: ");const L=Pn(Be(f,g));return An(L,S,d)}const KO=G({absoluteDifference_:dZ});function pZ(r,l,h,d,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","cosineDistance"),S=M(l,"predictions","cosineDistance");let L=null;d!=null&&(L=M(d,"weights","cosineDistance")),Zt(g.shape,S.shape,"Error in cosineDistance: ");const x=ke(1),A=Be(x,Fe(ae(g,S),h,!0));return An(A,L,f)}const XO=G({cosineDistance_:pZ});function mZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"labels","hingeLoss");const g=M(l,"predictions","hingeLoss");let S=null;h!=null&&(S=M(h,"weights","hingeLoss")),Zt(f.shape,g.shape,"Error in hingeLoss: ");const L=ke(1);f=Be(ae(ke(2),f),L);const x=Wu(Be(L,ae(f,g)));return An(x,S,d)}const JO=G({hingeLoss_:mZ});function fZ(r,l,h,d=1,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","huberLoss"),S=M(l,"predictions","huberLoss");let L=null;h!=null&&(L=M(h,"weights","huberLoss")),Zt(g.shape,S.shape,"Error in huberLoss: ");const x=ke(d),A=Pn(Be(S,g)),O=PI(A,x),C=Be(A,O),$=St(ae(ke(.5),ut(O)),ae(x,C));return An($,L,f)}const ZO=G({huberLoss_:fZ});function gZ(r,l,h,d=1e-7,f=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","logLoss"),S=M(l,"predictions","logLoss");let L=null;h!=null&&(L=M(h,"weights","logLoss")),Zt(g.shape,S.shape,"Error in logLoss: ");const x=ke(1),A=ke(d),O=yt(ae(g,lo(St(S,A)))),C=ae(Be(x,g),lo(St(Be(x,S),A))),$=Be(O,C);return An($,L,f)}const QO=G({logLoss_:gZ});function yZ(r,l,h,d=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","meanSquaredError"),g=M(l,"predictions","meanSquaredError");let S=null;h!=null&&(S=M(h,"weights","meanSquaredError")),Zt(f.shape,g.shape,"Error in meanSquaredError: ");const L=KI(f,g);return An(L,S,d)}const e1=G({meanSquaredError_:yZ});function bZ(r,l){const h=M(r,"labels","sigmoidCrossEntropyWithLogits"),d=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(h.shape,d.shape,"Error in sigmoidCrossEntropyWithLogits: ");const f=Wu(d),g=ae(d,h),S=$I(Gn(yt(Pn(d))));return St(Be(f,g),S)}function wZ(r,l,h,d=0,f=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"multiClassLabels","sigmoidCrossEntropy");const S=M(l,"logits","sigmoidCrossEntropy");let L=null;if(h!=null&&(L=M(h,"weights","sigmoidCrossEntropy")),Zt(g.shape,S.shape,"Error in sigmoidCrossEntropy: "),d>0){const A=ke(d),O=ke(1),C=ke(.5);g=St(ae(g,Be(O,A)),ae(C,A))}const x=bZ(g,S);return An(x,L,f)}const t1=G({sigmoidCrossEntropy_:wZ});function LZ(r,l,h=-1){if(h===-1&&(h=l.rank-1),h!==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 ${h}`);const d=Kf((f,g,S)=>{const L=!0,x=UI(g,[h],L),A=Be(Le(g,"float32"),x);S([f,A]);const O=yt(ae(A,f)),C=Fe(O,[h]),$=(z,ne)=>{const[te,se]=ne,fe=ts(z.shape,[h]);return[ae(re(z,fe),Be(Le(te,"float32"),Gn(se))),ae(re(z,fe),Be(Gn(se),Le(te,"float32")))]};return{value:C,gradFunc:$}});return d(r,l)}function SZ(r,l,h,d=0,f=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"onehotLabels","softmaxCrossEntropy");const S=M(l,"logits","softmaxCrossEntropy");let L=null;if(h!=null&&(L=M(h,"weights","softmaxCrossEntropy")),Zt(g.shape,S.shape,"Error in softmaxCrossEntropy: "),d>0){const A=ke(d),O=ke(1),C=ke(g.shape[1]);g=St(ae(g,Be(O,A)),ze(A,C))}const x=LZ(g,S);return An(x,L,f)}const n1=G({softmaxCrossEntropy_:SZ});const wAe={fft:$u,ifft:Hc,rfft:Uu,irfft:jI},TAe={hammingWindow:NO,hannWindow:tg,frame:ng,stft:CO},s1={flipLeftRight:OO,resizeNearestNeighbor:VO,resizeBilinear:GO,rotateWithOffset:EO,cropAndResize:RO,nonMaxSuppression:DO,nonMaxSuppressionAsync:UO,nonMaxSuppressionWithScore:BO,nonMaxSuppressionWithScoreAsync:MO,nonMaxSuppressionPadded:PO,nonMaxSuppressionPaddedAsync:zO},BAe={bandPart:HO,gramSchmidt:YO,qr:jO},KAe={absoluteDifference:KO,computeWeightedLoss:An,cosineDistance:XO,hingeLoss:JO,huberLoss:ZO,logLoss:QO,meanSquaredError:e1,sigmoidCrossEntropy:t1,softmaxCrossEntropy:n1};const i1=1.7580993408473768,r1=1.0507009873554805;const o1={kernelName:Bm,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,pa(Le(h,"float32"),-1))}}};const a1={kernelName:f2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=ut(Le(h,"float32")),f=gs(Be(ke(1),d));return yt(ze(r,f))}}}};const c1={kernelName:g2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=gs(Be(ut(Le(h,"float32")),1));return ze(r,d)}}}};const l1={kernelName:kc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{let L=r;const x=vt(h.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,h.shape)},S=()=>{let L=r;const x=vt(d.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,d.shape)};return{a:g,b:S}}};const h1={kernelName:y2,saveAllInputs:!0,gradFunc:(r,l)=>{const h={};return l.forEach((d,f)=>{h[f]=()=>r.clone()}),h}};const u1={kernelName:b2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>je(h)}}};const d1={kernelName:w2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>je(h)}}};const p1={kernelName:L2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,gs(Be(ke(1),ut(Le(h,"float32")))))}}};const m1={kernelName:S2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=gs(St(ke(1),ut(Le(h,"float32"))));return ze(r,d)}}}};const f1={kernelName:T2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=St(ut(h),ut(d));let x=ae(r,ze(d,L));const A=vt(h.shape,f);return A.length>0&&(x=Fe(x,A)),re(x,h.shape)},S=()=>{const L=St(ut(h),ut(d));let x=yt(ae(r,ze(h,L)));const A=vt(d.shape,f);return A.length>0&&(x=Fe(x,A)),re(x,d.shape)};return{a:g,b:S}}};const g1={kernelName:I2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,St(ut(Le(h,"float32")),1))}}};const y1={kernelName:x2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,Be(ke(1),ut(Le(h,"float32"))))}}};function IZ(r,l,h,d,f=[1,1,1],g,S){const L=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let A=L,O=x,C=!1;x.rank===4&&(C=!0,A=re(L,[1,L.shape[0],L.shape[1],L.shape[2],L.shape[3]]),O=re(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(A.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${A.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(co(d,f),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${d} and dilations '${f}'`),S!=null&&Z(Qt(g),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const $=se=>{const fe=qf(O.shape,h,d,f,g,S);return se.avgPool3dBackprop(A,O,fe)},z={dy:A,input:O},ne={filterSize:h,strides:d,dilations:f,pad:g,dimRoundingMode:S},te=H.runKernelFunc($,z,null,C2,ne);return C?re(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const b1=G({avgPool3dBackprop_:IZ});const w1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{filterSize:f,strides:g,dilations:S,pad:L,dimRoundingMode:x}=h,A=S==null?[1,1,1]:S;return{x:()=>b1(r,d,f,g,A,L,x)}}};function xZ(r,l,h,d,f){const g=M(r,"dy","avgPoolBackprop"),S=M(l,"input","avgPoolBackprop");Z(S.rank===g.rank,()=>`Rank of input (${S.rank}) does not match rank of dy (${g.rank})`);let L=S,x=g,A=!1;S.rank===3&&(A=!0,L=re(S,[1,S.shape[0],S.shape[1],S.shape[2]]),x=re(g,[1,g.shape[0],g.shape[1],g.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(L.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${L.rank}.`);const O=ne=>{const te=Yf(L.shape,h,d,1,f);return ne.avgPoolBackprop(x,L,te)},C={dy:x,input:L},$={filterSize:h,strides:d,pad:f},z=H.runKernelFunc(O,C,null,v2,$);return A?re(z,[z.shape[1],z.shape[2],z.shape[3]]):z}const L1=G({avgPoolBackprop_:xZ});const S1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{filterSize:f,strides:g,pad:S}=h;return{x:()=>L1(r,d,f,g,S)}}};const I1={kernelName:Mm,inputsToSave:["a","b"],gradFunc:(r,l,h)=>{const[d,f]=l,{transposeA:g,transposeB:S}=h;return!g&&!S?{a:()=>pn(r,f,!1,!0),b:()=>pn(d,r,!0,!1)}:!g&&S?{a:()=>pn(r,f,!1,!1),b:()=>pn(r,d,!0,!1)}:g&&!S?{a:()=>pn(f,r,!1,!0),b:()=>pn(d,r,!1,!1)}:{a:()=>pn(f,r,!0,!0),b:()=>pn(r,d,!0,!0)}}};const x1={kernelName:Pm,gradFunc:(r,l,h)=>{const{blockShape:d,crops:f}=h;return{x:()=>VI(r,d,f)}}};const T1={kernelName:zm,gradFunc:(r,l,h)=>{const d=h,f=d.inputShape,g=d.shape,S=Array.from(g);for(let x=f.length-1;x>=0;x--)if(f[x]===g[x])S[x]=1;else if(f[x]!==1)throw new Error(`broadcastTo(): [${f}] cannot be broadcast to [${g}].`);const L=[];for(let x=0;x1&&L.push(x);return{x:()=>Fe(r,L,!0)}}};const A1={kernelName:Fc,gradFunc:r=>({x:()=>r.clone()})};const v1={kernelName:R2,gradFunc:r=>({x:()=>je(r)})};const N1={kernelName:O2,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{clipValueMin:f,clipValueMax:g}=h;return{x:()=>zn(ua(Sr(d,f),Ir(d,g)),r,je(r))}}};const C1={kernelName:Gm,saveAllInputs:!0,gradFunc:(r,l,h)=>{const d=l.map(x=>x.shape),{axis:f}=h,g=ht(f,l[0].shape)[0],S=d.map(x=>x[g]),L=uo(r,S,g);return L.map(x=>()=>x)}};const R1={kernelName:Vm,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,{dilations:g,strides:S,pad:L,dataFormat:x}=h;return Z(ao(g),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${g}'`),{x:()=>wO(d.shape,r,f,S,L,x),filter:()=>eg(d,r,f.shape,S,L,x)}}};const O1={kernelName:Hm,inputsToSave:["dy","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,{strides:g,pad:S,dataFormat:L,dimRoundingMode:x}=h;return{dy:()=>NI(r,f,g,S,L,1,x),filter:()=>eg(r,d,f.shape,g,S,L,x)}}};function TZ(r,l,h,d,f){let g=r;r.rank===4&&(g=re(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let S=l;S.rank===4&&(S=re(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(g.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${g.shape}.`),Z(S.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${S.shape}.`),Z(h.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${h}.`),Z(g.shape[4]===h[3],()=>`Error in conv3dDerFilter: depth of input ${g.shape[4]}) must match input depth in filter (${h[3]}.`),Z(S.shape[4]===h[4],()=>`Error in conv3dDerFilter: depth of dy (${S.shape[4]}) must match output depth for filter (${h[4]}).`);const L=O=>{const C=1,$=ku(g.shape,h,d,C,f);return O.conv3dDerFilter(g,S,$)},x={x:g,y:S},A={strides:d,pad:f};return H.runKernelFunc(L,x,null,F2,A)}const E1=G({conv3DBackpropFilter_:TZ});const D1={kernelName:k2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const{dilations:d,strides:f,pad:g}=h;Z(ao(d),()=>`Error in gradient of conv3D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${d}'`);const[S,L]=l;return{x:()=>LO(S.shape,r,L,f,g),filter:()=>E1(S,r,L.shape,f,g)}}};const k1={kernelName:Ym,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(yt(YI(Le(h,"float32"))),r)}}};const F1={kernelName:qm,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(qI(Le(h,"float32")),r)}}};const _1={kernelName:jm,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{axis:f,exclusive:g,reverse:S}=h;return{x:()=>{const L=fs([f],d.rank);let x=RI(r,f,g,!S);return L!=null&&(x=Wt(x,L)),x}}}};const W1={kernelName:$2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const{dilations:d,strides:f,pad:g,dimRoundingMode:S}=h,L=d==null?[1,1]:d;Z(ao(L),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${L}'`);const[x,A]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(A.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${A.rank}.`),Z(x.shape[3]===A.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${A.shape[2]}.`),Z(co(f,L),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${f} and dilations '${L}'.`),S!=null&&Z(Qt(g),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const O=Lr(x.shape,A.shape,f,L,g,S,!0);return{x:()=>vO(x.shape,r,A,O),filter:()=>AO(x,r,A.shape,O)}}};const $1={kernelName:M2,inputsToSave:["x","filter"],gradFunc:(r,l,h)=>{const[d,f]=l,g={x:d,filter:f,dy:r},S={x:d,filter:f,dy:r};return{x:()=>H.runKernel(P2,g,h),filter:()=>H.runKernel(z2,S,h)}}};const U1={kernelName:Km,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ze(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{let L=ae(r,Le(h,"float32"));const x=vt(d.shape,f);x.length>0&&(L=re(Fe(L,x),d.shape));const A=ut(d);return yt(ze(L,Le(A,"float32")))};return{a:g,b:S}}};const B1={kernelName:G2,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l,d=g=>g.eluDer(r,h),f={dy:r,y:h};return{x:()=>H.runKernelFunc(d,f,null,V2)}}};const M1={kernelName:H2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l,d=ae(Gn(yt(ut(h))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,d)}}};const P1={kernelName:Xm,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,h)}}};const z1={kernelName:q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,Gn(h))}}};const G1={kernelName:Jm,gradFunc:r=>({x:()=>je(r)})};const V1={kernelName:Zm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ze(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{let L=ae(r,Le(h,"float32"));const x=vt(d.shape,f);x.length>0&&(L=re(Fe(L,x),d.shape));const A=ut(d);return yt(ze(L,Le(A,"float32")))};return{a:g,b:S}}};const H1={kernelName:J2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,h)=>{const{varianceEpsilon:d}=h,[f,g,S,L]=l,x=L==null?ke(1):L,A=vt(g.shape,f.shape),O=[];if(g.rank===1){for(let xe=0;xeg.rank===1?re(ae(ae(r,la(re(z,[1,1,1,g.shape[0]]),O)),x),f.shape):re(ae(ae(r,z),x),f.shape),se=()=>{let xe=ae(ae(z,ke(-1)),$);return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)},fe=()=>{let xe=ae(ae(ne,C),$);return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)},de=()=>{const xe=ae(C,z);let Me=ae(r,xe);return g.rank===1&&(Me=Fe(Me,A)),re(Me,g.shape)},Ae=()=>{let xe=r;return g.rank===1&&(xe=Fe(xe,A)),re(xe,g.shape)};return{x:te,mean:se,variance:fe,scale:de,offset:Ae}}};const j1={kernelName:Qm,inputsToSave:["x","indices"],gradFunc:(r,l,h)=>{const[d,f]=l,{axis:g}=h,S=ht(g,d.shape)[0],L=()=>{const x=d.shape,A=f.size,O=x.slice(0,S),C=O.length,$=x.slice(g,x.length).slice(1),z=$.length,ne=Y1(0,C),te=Y1(C+1,C+1+z),se=q1([O,[A],$]),fe=re(r,se),de=re(f,[A]),Ae=q1([[C],ne,te]),xe=Wt(fe,Ae);let Me=JI(xe,de,d.shape[S]);const Ke=Mc(Ae);return Me=Wt(Me,Ke),Me};return{x:L,indices:()=>f}}};function Y1(r,l){const h=[];for(let d=r;d{const[h,d]=l;return{a:()=>je(h),b:()=>je(d)}}};const X1={kernelName:tf,gradFunc:r=>({x:()=>Le(r,"float32")})};const J1={kernelName:tR,gradFunc:r=>({x:()=>je(r)})};const Z1={kernelName:nR,gradFunc:r=>({x:()=>je(r)})};const Q1={kernelName:sR,gradFunc:r=>({x:()=>je(r)})};const eE={kernelName:sf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,St(h,1))}}};const tE={kernelName:nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,Le(h,"float32"))}}};const nE={kernelName:cR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d]=l,{axis:f}=h;return{logits:()=>{const g=!0,S=Gn(d);return Be(r,ae(Fe(r,f,g),S))}}}};function AZ(r,l,h,d=5,f=1,g=1,S=.5){const L=O=>O.LRNGrad(h,r,l,d,f,g,S),x={x:r,y:l,dy:h},A={depthRadius:d,bias:f,alpha:g,beta:S};return H.runKernelFunc(L,x,null,hR,A)}const sE=G({localResponseNormalizationBackprop_:AZ});const iE={kernelName:lR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{depthRadius:g,bias:S,alpha:L,beta:x}=h;return{x:()=>sE(d,f,r,g,S,L,x)}}};function sg(r,l,h,d,f){return l.rank{const g=ae(r,Le(OI(h,l),r.dtype));return f==null?g:Wt(g,f)}}}const QI={kernelName:rf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const d=h,{reductionIndices:f}=d,[g,S]=l,L=ht(f,g.shape),x=fs(L,g.rank),A=sg(r,S,g,L,x);return{x:()=>{let O=A.x();return x!=null&&(O=Wt(O)),O}}}};const rE={kernelName:of,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=()=>ae(r,Le(Sr(h,d),"float32")),g=()=>ae(r,Le(WI(h,d),"float32"));return{a:f,b:g}}};function vZ(r,l,h,d,f,g=[1,1,1],S,L){const x=M(r,"dy","maxPool3dBackprop"),A=M(l,"input","maxPool3dBackprop"),O=M(h,"output","maxPool3dBackprop");let C=x,$=A,z=O,ne=!1;A.rank===4&&(ne=!0,C=re(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),$=re(A,[1,A.shape[0],A.shape[1],A.shape[2],A.shape[3]]),z=re(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z($.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${$.rank}.`),Z(z.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${z.rank}.`),Z(co(f,g),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${f} and dilations '${g}'`),L!=null&&Z(Qt(S),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${L} but got pad ${S}.`);const te=Ae=>{const xe=qf($.shape,d,f,g,S,L);return Ae.maxPool3dBackprop(C,$,z,xe)},se={dy:C,input:$,output:z},fe={filterSize:d,strides:f,dilations:g,pad:S,dimRoundingMode:L},de=H.runKernelFunc(te,se,null,mR,fe);return ne?re(de,[de.shape[1],de.shape[2],de.shape[3],de.shape[4]]):de}const oE=G({maxPool3dBackprop_:vZ});const aE={kernelName:pR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{filterSize:g,strides:S,dilations:L,pad:x,dimRoundingMode:A}=h,O=L==null?[1,1,1]:L;return{x:()=>oE(r,d,f,g,S,O,x,A)}}};function NZ(r,l,h,d,f,g,S){const L=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),A=M(h,"output","maxPoolBackprop");Z(x.rank===L.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${L.rank})`),Z(L.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${L.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),S!=null&&Z(Qt(g),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${g}.`);const O=z=>{const ne=Yf(x.shape,d,f,1,g,S);return z.maxPoolBackprop(L,x,A,ne)},C={dy:L,input:x,output:A},$={filterSize:d,strides:f,pad:g,dimRoundingMode:S};return H.runKernelFunc(O,C,null,dR,$)}const cE=G({maxPoolBackprop_:NZ});const lE={kernelName:uR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d,f]=l,{filterSize:g,strides:S,pad:L}=h;return{x:()=>cE(r,d,f,g,S,L)}}};const hE={kernelName:af,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,h)=>{const d=h,{axis:f}=d,[g,S]=l,L=ht(f,g.shape),x=fs(L,g.rank),A=sg(r,S,g,L,x);return{x:()=>{let O=A.x();return x!=null&&(O=Wt(O)),O}}}};const uE={kernelName:cf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=()=>ae(r,Le(Ir(h,d),"float32")),g=()=>ae(r,Le(wi(h,d),"float32"));return{a:f,b:g}}};const dE={kernelName:fR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=vt(h.shape,f);return L.length>0?re(Fe(r,L),h.shape):r},S=()=>{const L=ae(r,yt(kI(ze(h,d)))),x=vt(d.shape,f);return x.length>0?re(Fe(L,x),d.shape):L};return{a:g,b:S}}};const pE={kernelName:lf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{const L=ae(r,Le(d,"float32")),x=vt(h.shape,f);return x.length>0?re(Fe(L,x),h.shape):L},S=()=>{const L=ae(r,Le(h,"float32")),x=vt(d.shape,f);return x.length>0?re(Fe(L,x),d.shape):L};return{a:g,b:S}}};const mE={kernelName:hf,gradFunc:r=>({x:()=>yt(r)})};const fE={kernelName:SR,inputsToSave:["indices"],gradFunc:(r,l)=>{const h=l[0];return{indices:()=>Fs(h.shape,"float32")}}};const gE={kernelName:LR,gradFunc:r=>({x:()=>je(r)})};const ex={kernelName:uf,inputsToSave:["x"],gradFunc:(r,l,h)=>{const d=l[0],{paddings:f}=h,g=f.map(S=>S[0]);return{x:()=>At(r,g,d.shape)}}};const yE={kernelName:df,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[h,d,f]=l,g=h,S=d,L=rt(g.shape,S.shape),x=()=>{const O=Le(S,"float32");let C=ae(r,ae(O,da(g,Be(O,ke(1)))));const $=vt(g.shape,L);return $.length>0&&(C=Fe(C,$)),re(C,g.shape)},A=()=>{const O=wi(g,0),C=zn(O,lo(g),je(g));let $=ae(r,ae(f,C));const z=vt(S.shape,L);return z.length>0&&($=Fe($,z)),re($,S.shape)};return{a:x,b:A}}};const bE={kernelName:IR,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[h,d]=l,f=wi(h,0);return{x:()=>zn(f,r,ae(r,d)),alpha:()=>{let g=zn(f,je(r),ae(r,h));const S=vt(d.shape,r.shape);return S.length>0&&(g=Fe(g,S)),re(g,d.shape)}}}};const wE={kernelName:AR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,yt(ut(h)))}}};const LE={kernelName:CR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l,d=ae(Ir(h,6),pa(h));return{x:()=>ae(r,Le(d,"float32"))}}};const SE={kernelName:pf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,Le(pa(h),"float32"))}}};const IE={kernelName:mf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>re(r,h.shape)}}};const xE={kernelName:gf,inputsToSave:["images"],gradFunc:(r,l,h)=>{const[d]=l,f=L=>{const{alignCorners:x}=h;return L.resizeBilinearBackprop(r,d,x)},g={images:d},S=()=>H.runKernelFunc(f,g,null,NR,h);return{images:S}}};const TE={kernelName:ff,inputsToSave:["images"],gradFunc:(r,l,h)=>{const[d]=l,f=L=>{const{alignCorners:x}=h;return L.resizeNearestNeighborBackprop(r,d,x)},g={images:d},S=()=>H.runKernelFunc(f,g,null,vR,h);return{images:S}}};const AE={kernelName:yf,gradFunc:(r,l,h)=>{const{dims:d}=h,f=ht(d,r.shape);return{x:()=>Vc(r,f)}}};const vE={kernelName:RR,gradFunc:r=>({x:()=>je(r)})};const NE={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>yt(ze(r,ae(da(h,1.5),2)))}}};const CE={kernelName:wf,inputsToSave:["condition"],gradFunc:(r,l)=>{const[h]=l;return{condition:()=>Le(je(h),"float32"),t:()=>ae(r,Le(h,r.dtype)),e:()=>ae(r,Le(BI(h),r.dtype))}}};const RE={kernelName:OR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>{const d=wi(h,ke(0)),f=ke(i1),g=ke(r1),S=ae(r,g),L=ae(ae(r,f),Gn(Le(h,"float32")));return zn(d,S,L)}}}};const OE={kernelName:xf,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,ae(h,Be(ke(1),h)))}}};const EE={kernelName:ER,gradFunc:r=>({x:()=>je(r)})};const DE={kernelName:Sf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(Fu(Le(h,"float32")),r)}}};const kE={kernelName:If,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(CI(Le(h,"float32")),r)}}};const FE={kernelName:Lf,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{begin:f,size:g}=h,S=d.shape,[L,x]=Vf(d,f,g),A=[];for(let O=0;OGI(r,A)}}};const _E={kernelName:kR,outputsToSave:[!0],gradFunc:(r,l,h)=>{const[d]=l,{dim:f}=h,g=!0,S=ae(r,d);return{logits:()=>Be(S,ae(Fe(S,[f],g),d))}}};const WE={kernelName:DR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,AI(h))}}};const tx={kernelName:vf,gradFunc:(r,l,h)=>{const{blockShape:d,paddings:f}=h;return{x:()=>vI(r,d,f)}}};const nx={kernelName:Nf,gradFunc:(r,l,h)=>{const{axis:d}=h;return{x:()=>bn(r,d)}}};const $E={kernelName:Tf,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,ae(gs(Le(h,"float32")),2))}}};const UE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(r,ae(Le(h,"float32"),2))}}};const BE={kernelName:Cf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=ke(2),g=()=>ae(r,ae(f,Be(h,d))),S=()=>ae(r,ae(f,Be(d,h)));return{a:g,b:S}}};const ME={kernelName:_f,gradFunc:r=>({x:()=>je(r)})};const PE={kernelName:Rf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[h,d]=l,f=rt(h.shape,d.shape),g=()=>{let L=r;const x=vt(h.shape,f);return x.length>0&&(L=Fe(L,x)),re(L,h.shape)},S=()=>{let L=r;const x=vt(d.shape,f);return x.length>0&&(L=Fe(L,x)),re(yt(L),d.shape)};return{a:g,b:S}}};const zE={kernelName:Af,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,f=d.shape.slice(),{axis:g}=h,S=ht(g,d.shape);S.forEach(A=>{f[A]=1});const L=re(r,f),x=ae(L,Ki(d.shape,"float32"));return{x:()=>x}}};const GE={kernelName:_R,inputsToSave:["x"],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ze(r,ut(Fu(h)))}}};const VE={kernelName:WR,outputsToSave:[!0],gradFunc:(r,l)=>{const[h]=l;return{x:()=>ae(Be(ke(1),ut(h)),r)}}};const HE={kernelName:Of,inputsToSave:["x"],gradFunc:(r,l,h)=>{const[d]=l,{reps:f}=h,g=()=>{let S=je(d);if(d.rank===1)for(let L=0;L{const d=h,{perm:f}=d,g=Mc(f);return{x:()=>Wt(r,g)}}};const qE={kernelName:Df,gradFunc:(r,l,h)=>{const d=h,{axis:f}=d;return{value:()=>js(r,f)}}};const jE={kernelName:kf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[h]=l,d=()=>CZ(r,h);return{x:d}}};function CZ(r,l){const h=_I(l,je(l)),d=FI(r,h);let f=Sr(l,ke(0,"int32"));const g=d.rank-f.rank;for(let L=0;L({x:()=>je(r)})};const RZ=[o1,a1,c1,l1,h1,u1,d1,p1,m1,f1,g1,y1,w1,S1,I1,x1,T1,A1,v1,N1,C1,O1,R1,D1,k1,F1,_1,W1,$1,U1,B1,M1,P1,z1,V1,G1,H1,j1,K1,X1,J1,Z1,Q1,eE,tE,nE,iE,QI,QI,rE,aE,lE,hE,uE,dE,pE,mE,fE,gE,ex,ex,yE,bE,wE,LE,SE,IE,xE,TE,AE,vE,NE,CE,RE,OE,EE,DE,kE,FE,_E,WE,tx,tx,nx,nx,$E,BE,UE,ME,PE,zE,GE,VE,HE,YE,qE,jE,KE];for(const r of RZ)BR(r);function sx(r,l,h=!1){const{Image:d,Canvas:f}=gt.getEnv();if(!(r instanceof d||r instanceof f))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const g=ra(r),S=l/Math.max(g.height,g.width),L=S*g.width,x=S*g.height,A=Dc({width:l,height:l}),O=r instanceof f?r:Tu(r),C=Math.abs(L-x)/2,$=h&&L{if(yr(h)){this._imageTensors[d]=h,this._inputDimensions[d]=h.shape;return}if(Os(h)){const g=h.shape[0];if(g!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${g} passed, but not supported in input array`);this._imageTensors[d]=h,this._inputDimensions[d]=h.shape.slice(1);return}const f=h instanceof gt.getEnv().Canvas?h:Tu(h);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 zi(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),h=this.getInputHeight(r);return PS({width:l,height:h},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,pO(()=>{const h=zi(this.batchSize,0,1).map(f=>{const g=this.getInput(f);if(g instanceof Tn){let S=Os(g)?g:g.expandDims();return S=HS(S,l),(S.shape[1]!==r||S.shape[2]!==r)&&(S=s1.resizeBilinear(S,[r,r])),S.as3D(r,r,3)}if(g instanceof gt.getEnv().Canvas)return II.fromPixels(sx(g,r,l));throw new Error(`toBatchTensor - at batchIdx ${f}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${g}`)}),d=js(h.map(f=>Le(f,"float32"))).as4D(this.batchSize,r,r,3);return d})}}async function Rt(r){if(r instanceof po)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const h=f=>Array.isArray(r)?` at input index ${f}:`:"",d=l.map(ia);return d.forEach((f,g)=>{if(!Um(f)&&!yr(f)&&!Os(f))throw typeof l[g]=="string"?new Error(`toNetInput -${h(g)} string passed, but could not resolve HTMLElement for element id ${l[g]}`):new Error(`toNetInput -${h(g)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Os(f)){const S=f.shape[0];if(S!==1)throw new Error(`toNetInput -${h(g)} tf.Tensor4D with batchSize ${S} passed, but not supported in input array`)}}),await Promise.all(d.map(f=>Um(f)&&QS(f))),new po(d,Array.isArray(r))}async function Yc(r,l){const{Canvas:h}=gt.getEnv();let d=r;if(!(r instanceof h)){const S=await Rt(r);if(S.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const L=S.getInput(0);d=L instanceof h?L:await tI(L)}const f=es(d),g=l.map(S=>S instanceof Yt?S.forSize(d.width,d.height).box.floor():S).map(S=>S.clipAtImageBorders(d.width,d.height));return g.map(({x:S,y:L,width:x,height:A})=>{const O=Dc({width:x,height:A});return es(O).putImageData(f.getImageData(S,L,x,A),0,0),O})}const ig=Ye(Je());async function qc(r,l){if(!yr(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 ig.tidy(()=>{const[h,d,f]=r.shape.slice(Os(r)?1:0),g=l.map(L=>L instanceof Yt?L.forSize(d,h).box:L).map(L=>L.clipAtImageBorders(d,h)),S=g.map(({x:L,y:x,width:A,height:O})=>ig.slice3d(r.as3D(h,d,f),[x,L,0],[O,A,f]));return S})}async function fa(r,l){const h=gt.getEnv().fetch,d=await h(r,l);if(!(d.status<400))throw new Error(`failed to fetch: (${d.status}) ${d.statusText}, from url: ${d.url}`);return d}async function OZ(r){const l=await fa(r),h=await l.blob();if(!h.type.startsWith("image/"))throw new Error(`fetchImage - expected blob type to be of type image/*, instead have: ${h.type}, for url: ${l.url}`);return eI(h)}async function ix(r){return(await fa(r)).json()}async function EZ(r){return new Float32Array(await(await fa(r)).arrayBuffer())}function rg(r,l){const h=`${l}-weights_manifest.json`;if(!r)return{modelBaseUri:"",manifestUri:h};if(r==="/")return{modelBaseUri:"/",manifestUri:`/${h}`};const d=r.startsWith("http://")?"http://":r.startsWith("https://")?"https://":"";r=r.replace(d,"");const f=r.split("/").filter(L=>L),g=r.endsWith(".json")?f[f.length-1]:h;let S=d+(r.endsWith(".json")?f.slice(0,f.length-1):f).join("/");return S=r.startsWith("/")?`/${S}`:S,{modelBaseUri:S,manifestUri:S==="/"?`/${g}`:`${S}/${g}`}}const XE=Ye(Je());async function rx(r,l){const{manifestUri:h,modelBaseUri:d}=rg(r,l);let f=await ix(h);return XE.io.loadWeights(f,d)}function DZ(r,l,h=!1){const{width:d,height:f}=h?ra(l):l;return r.width=d,r.height=f,{width:d,height:f}}const xr=Ye(Je());class kn{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:h}=this.traversePropertyPath(r);return l[h]}reassignParamFromPath(r,l){const{obj:h,objProp:d}=this.traversePropertyPath(r);h[d].dispose(),h[d]=l}getParamList(){return this._paramMappings.map(({paramPath:r})=>({path:r,tensor:this.getParamFromPath(r)}))}getTrainableParams(){return this.getParamList().filter(r=>r.tensor instanceof xr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof xr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const h=xr.tensor(l.dataSync());l.dispose(),this.reassignParamFromPath(r,h)})}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 rx(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}=gt.getEnv(),{manifestUri:h,modelBaseUri:d}=rg(r,this.getDefaultModelName()),f=x=>Promise.all(x.map(A=>l(A).then(O=>O.buffer))),g=xr.io.weightsLoaderFactory(f),S=JSON.parse((await l(h)).toString()),L=await g(S,d);this.loadFromWeightMap(L)}loadFromWeightMap(r){const{paramMappings:l,params:h}=this.extractParamsFromWeigthMap(r);this._paramMappings=l,this._params=h}extractWeights(r){const{paramMappings:l,params:h}=this.extractParams(r);this._paramMappings=l,this._params=h}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:h,objProp:d}=l;if(!h||!d||!(h[d]instanceof xr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:h,objProp:d}}}const jc=Ye(Je());function ns(r,l,h){return jc.tidy(()=>{let d=jc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,h,"same");return d=jc.add(d,l.bias),d})}const Dt=Ye(Je());function og(r,l,h=!1){return Dt.tidy(()=>{const d=Dt.relu(h?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):ns(r,l.conv0,[2,2])),f=ns(d,l.conv1,[1,1]),g=Dt.relu(Dt.add(d,f)),S=ns(g,l.conv2,[1,1]);return Dt.relu(Dt.add(d,Dt.add(f,S)))})}function Mu(r,l,h=!1,d=!0){return Dt.tidy(()=>{const f=Dt.relu(h?Dt.add(Dt.conv2d(r,l.conv0.filters,d?[2,2]:[1,1],"same"),l.conv0.bias):ns(r,l.conv0,d?[2,2]:[1,1])),g=ns(f,l.conv1,[1,1]),S=Dt.relu(Dt.add(f,g)),L=ns(S,l.conv2,[1,1]),x=Dt.relu(Dt.add(f,Dt.add(g,L))),A=ns(x,l.conv3,[1,1]);return Dt.relu(Dt.add(f,Dt.add(g,Dt.add(L,A))))})}const mo=Ye(Je());function ga(r,l,h="same",d=!1){return mo.tidy(()=>{const f=mo.add(mo.conv2d(r,l.filters,[1,1],h),l.bias);return d?mo.relu(f):f})}function Vn(r,l){Object.keys(r).forEach(h=>{l.some(d=>d.originalPath===h)||r[h].dispose()})}const ag=Ye(Je());function Kc(r,l){return function(h,d,f,g){const S=ag.tensor4d(r(h*d*f*f),[f,f,h,d]),L=ag.tensor1d(r(d));return l.push({paramPath:`${g}/filters`},{paramPath:`${g}/bias`}),{filters:S,bias:L}}}const cg=Ye(Je());function lg(r,l){return function(h,d,f){const g=cg.tensor2d(r(h*d),[h,d]),S=cg.tensor1d(r(d));return l.push({paramPath:`${f}/weights`},{paramPath:`${f}/bias`}),{weights:g,bias:S}}}class ox{constructor(r,l,h){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=h}}const Pu=Ye(Je());function Xc(r,l){return function(h,d,f){const g=Pu.tensor4d(r(3*3*h),[3,3,h,1]),S=Pu.tensor4d(r(h*d),[1,1,h,d]),L=Pu.tensor1d(r(d));return l.push({paramPath:`${f}/depthwise_filter`},{paramPath:`${f}/pointwise_filter`},{paramPath:`${f}/bias`}),new ox(g,S,L)}}function Jc(r){return function(l){const h=r(`${l}/depthwise_filter`,4),d=r(`${l}/pointwise_filter`,4),f=r(`${l}/bias`,1);return new ox(h,d,f)}}function ys(r,l){return function(h,d,f){const g=r[h];if(!Qo(g,d))throw new Error(`expected weightMap[${h}] to be a Tensor${d}D, instead have ${g}`);return l.push({originalPath:h,paramPath:f||h}),g}}function Hn(r){let l=r;function h(f){const g=l.slice(0,f);return l=l.slice(f),g}function d(){return l}return{extractWeights:h,getRemainingWeights:d}}function hg(r,l){const h=Kc(r,l),d=Xc(r,l);function f(S,L,x,A=!1){const O=A?h(S,L,3,`${x}/conv0`):d(S,L,`${x}/conv0`),C=d(L,L,`${x}/conv1`),$=d(L,L,`${x}/conv2`);return{conv0:O,conv1:C,conv2:$}}function g(S,L,x,A=!1){const{conv0:O,conv1:C,conv2:$}=f(S,L,x,A),z=d(L,L,`${x}/conv3`);return{conv0:O,conv1:C,conv2:$,conv3:z}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:g}}function JE(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractDenseBlock4Params:f}=hg(h,l),g=f(3,32,"dense0",!0),S=f(32,64,"dense1"),L=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:S,dense2:L,dense3:x}}}function ug(r){return function(l){const h=r(`${l}/filters`,4),d=r(`${l}/bias`,1);return{filters:h,bias:d}}}function dg(r,l){const h=ys(r,l),d=ug(h),f=Jc(h);function g(L,x=!1){const A=x?d(`${L}/conv0`):f(`${L}/conv0`),O=f(`${L}/conv1`),C=f(`${L}/conv2`);return{conv0:A,conv1:O,conv2:C}}function S(L,x=!1){const A=x?d(`${L}/conv0`):f(`${L}/conv0`),O=f(`${L}/conv1`),C=f(`${L}/conv2`),$=f(`${L}/conv3`);return{conv0:A,conv1:O,conv2:C,conv3:$}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:S}}function ZE(r){const l=[],{extractDenseBlock4Params:h}=dg(r,l),d={dense0:h("dense0",!0),dense1:h("dense1"),dense2:h("dense2"),dense3:h("dense3")};return Vn(r,l),{params:d,paramMappings:l}}const fo=Ye(Je());class pg extends kn{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return fo.tidy(()=>{const h=fo.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(fo.scalar(255));let g=Mu(f,l.dense0,!0);return g=Mu(g,l.dense1),g=Mu(g,l.dense2),g=Mu(g,l.dense3),g=fo.avgPool(g,[7,7],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return ZE(r)}extractParams(r){return JE(r)}}const Zc=Ye(Je());function zu(r,l){return Zc.tidy(()=>Zc.add(Zc.matMul(r,l.weights),l.bias))}function QE(r,l,h){const d=[],{extractWeights:f,getRemainingWeights:g}=Hn(r),S=lg(f,d),L=S(l,h,"fc");if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:d,params:{fc:L}}}function eD(r){const l=[],h=ys(r,l);function d(g){const S=h(`${g}/weights`,2),L=h(`${g}/bias`,1);return{weights:S,bias:L}}const f={fc:d("fc")};return Vn(r,l),{params:f,paramMappings:l}}function mg(r){const l={},h={};return Object.keys(r).forEach(d=>{const f=d.startsWith("fc")?h:l;f[d]=r[d]}),{featureExtractorMap:l,classifierMap:h}}const tD=Ye(Je());class fg extends kn{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 tD.tidy(()=>{const h=r instanceof po?this.faceFeatureExtractor.forwardInput(r):r;return zu(h.as2D(h.shape[0],-1),l.fc)})}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:h}=this.extractClassifierParams(r);this._params=l,this._paramMappings=h}extractClassifierParams(r){return QE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:h}=mg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),eD(h)}extractParams(r){const l=this.getClassifierChannelsIn(),h=this.getClassifierChannelsOut(),d=h*l+h,f=r.slice(0,r.length-d),g=r.slice(r.length-d);return this.faceFeatureExtractor.extractWeights(f),this.extractClassifierParams(g)}}const ax=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class ya{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);ax.forEach((l,h)=>{this[l]=r[h]})}asSortedArray(){return ax.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Qc=Ye(Je());class cx extends fg{constructor(r=new pg){super("FaceExpressionNet",r)}forwardInput(r){return Qc.tidy(()=>Qc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Rt(r))}async predictExpressions(r){const l=await Rt(r),h=await this.forwardInput(l),d=await Promise.all(Qc.unstack(h).map(async g=>{const S=await g.data();return g.dispose(),S}));h.dispose();const f=d.map(g=>new ya(g));return l.isBatchInput?f:f[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function lx(r){return r.expressions instanceof ya}function gg(r,l){const h={expressions:l};return Object.assign({},r,h)}function kZ(r,l,h=.1,d){const f=Array.isArray(l)?l:[l];f.forEach(g=>{const S=g instanceof ya?g:lx(g)?g.expressions:void 0;if(!S)throw new Error("drawFaceExpressions - expected faceExpressions to be FaceExpressions | WithFaceExpressions<{}> or array thereof");const L=S.asSortedArray(),x=L.filter(C=>C.probability>h),A=Vi(g)?g.detection.box.bottomLeft:d||new Ze(0,0),O=new Ec(x.map(C=>`${C.expression} (${ea(C.probability)})`),A);O.draw(r)})}function ba(r){return Vi(r)&&r.landmarks instanceof qs&&r.unshiftedLandmarks instanceof qs&&r.alignedRect instanceof Yt}function el(r,l){const{box:h}=r.detection,d=l.shiftBy(h.x,h.y),f=d.align(),{imageDims:g}=r.detection,S=new Yt(r.detection.score,f.rescale(g.reverse()),g),L={landmarks:d,unshiftedLandmarks:l,alignedRect:S};return Object.assign({},r,L)}class nD{constructor(r={}){const{drawLines:l=!0,drawPoints:h=!0,lineWidth:d,lineColor:f,pointSize:g,pointColor:S}=r;this.drawLines=l,this.drawPoints=h,this.lineWidth=d||1,this.pointSize=g||2,this.lineColor=f||"rgba(0, 255, 255, 1)",this.pointColor=S||"rgba(255, 0, 255, 1)"}}class sD{constructor(r,l={}){this.faceLandmarks=r,this.options=new nD(l)}draw(r){const l=es(r),{drawLines:h,drawPoints:d,lineWidth:f,lineColor:g,pointSize:S,pointColor:L}=this.options;if(h&&this.faceLandmarks instanceof Iu&&(l.strokeStyle=g,l.lineWidth=f,gr(l,this.faceLandmarks.getJawOutline()),gr(l,this.faceLandmarks.getLeftEyeBrow()),gr(l,this.faceLandmarks.getRightEyeBrow()),gr(l,this.faceLandmarks.getNose()),gr(l,this.faceLandmarks.getLeftEye(),!0),gr(l,this.faceLandmarks.getRightEye(),!0),gr(l,this.faceLandmarks.getMouth(),!0)),d){l.strokeStyle=L,l.fillStyle=L;const x=A=>{l.beginPath(),l.arc(A.x,A.y,S,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function FZ(r,l){const h=Array.isArray(l)?l:[l];h.forEach(d=>{const f=d instanceof qs?d:ba(d)?d.landmarks:void 0;if(!f)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new sD(f).draw(r)})}const hx={};vc(hx,{AnchorPosition:()=>Hi,DrawBox:()=>ZS,DrawBoxOptions:()=>l2,DrawFaceLandmarks:()=>sD,DrawFaceLandmarksOptions:()=>nD,DrawTextField:()=>Ec,DrawTextFieldOptions:()=>Wm,drawContour:()=>gr,drawDetections:()=>GX,drawFaceExpressions:()=>kZ,drawFaceLandmarks:()=>FZ});function _Z(r,l){const h=Kc(r,l),d=Xc(r,l);function f(S,L,x){const A=d(S,L,`${x}/separable_conv0`),O=d(L,L,`${x}/separable_conv1`),C=h(S,L,1,`${x}/expansion_conv`);return{separable_conv0:A,separable_conv1:O,expansion_conv:C}}function g(S,L){const x=d(S,S,`${L}/separable_conv0`),A=d(S,S,`${L}/separable_conv1`),O=d(S,S,`${L}/separable_conv2`);return{separable_conv0:x,separable_conv1:A,separable_conv2:O}}return{extractConvParams:h,extractSeparableConvParams:d,extractReductionBlockParams:f,extractMainBlockParams:g}}function iD(r,l){const h=[],{extractWeights:d,getRemainingWeights:f}=Hn(r),{extractConvParams:g,extractSeparableConvParams:S,extractReductionBlockParams:L,extractMainBlockParams:x}=_Z(d,h),A=g(3,32,3,"entry_flow/conv_in"),O=L(32,64,"entry_flow/reduction_block_0"),C=L(64,128,"entry_flow/reduction_block_1"),$={conv_in:A,reduction_block_0:O,reduction_block_1:C},z={};zi(l,0,1).forEach(fe=>{z[`main_block_${fe}`]=x(128,`middle_flow/main_block_${fe}`)});const ne=L(128,256,"exit_flow/reduction_block"),te=S(256,512,"exit_flow/separable_conv"),se={reduction_block:ne,separable_conv:te};if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:h,params:{entry_flow:$,middle_flow:z,exit_flow:se}}}function WZ(r,l){const h=ys(r,l),d=ug(h),f=Jc(h);function g(L){const x=f(`${L}/separable_conv0`),A=f(`${L}/separable_conv1`),O=d(`${L}/expansion_conv`);return{separable_conv0:x,separable_conv1:A,expansion_conv:O}}function S(L){const x=f(`${L}/separable_conv0`),A=f(`${L}/separable_conv1`),O=f(`${L}/separable_conv2`);return{separable_conv0:x,separable_conv1:A,separable_conv2:O}}return{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:S}}function rD(r,l){const h=[],{extractConvParams:d,extractSeparableConvParams:f,extractReductionBlockParams:g,extractMainBlockParams:S}=WZ(r,h),L=d("entry_flow/conv_in"),x=g("entry_flow/reduction_block_0"),A=g("entry_flow/reduction_block_1"),O={conv_in:L,reduction_block_0:x,reduction_block_1:A},C={};zi(l,0,1).forEach(te=>{C[`main_block_${te}`]=S(`middle_flow/main_block_${te}`)});const $=g("exit_flow/reduction_block"),z=f("exit_flow/separable_conv"),ne={reduction_block:$,separable_conv:z};return Vn(r,h),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:h}}const tn=Ye(Je());function oD(r,l,h){return tn.add(tn.conv2d(r,l.filters,h,"same"),l.bias)}function ux(r,l,h=!0){let d=h?tn.relu(r):r;return d=ns(d,l.separable_conv0,[1,1]),d=ns(tn.relu(d),l.separable_conv1,[1,1]),d=tn.maxPool(d,[3,3],[2,2],"same"),d=tn.add(d,oD(r,l.expansion_conv,[2,2])),d}function $Z(r,l){let h=ns(tn.relu(r),l.separable_conv0,[1,1]);return h=ns(tn.relu(h),l.separable_conv1,[1,1]),h=ns(tn.relu(h),l.separable_conv2,[1,1]),h=tn.add(h,r),h}class aD extends kn{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return tn.tidy(()=>{const h=tn.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(tn.scalar(256));let g=tn.relu(oD(f,l.entry_flow.conv_in,[2,2]));return g=ux(g,l.entry_flow.reduction_block_0,!1),g=ux(g,l.entry_flow.reduction_block_1),zi(this._numMainBlocks,0,1).forEach(S=>{g=$Z(g,l.middle_flow[`main_block_${S}`])}),g=ux(g,l.exit_flow.reduction_block),g=tn.relu(ns(g,l.exit_flow.separable_conv,[1,1])),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return rD(r,this._numMainBlocks)}extractParams(r){return iD(r,this._numMainBlocks)}}function cD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),f=lg(h,l),g=f(512,1,"fc/age"),S=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:S}}}}function lD(r){const l=[],h=ys(r,l);function d(g){const S=h(`${g}/weights`,2),L=h(`${g}/bias`,1);return{weights:S,bias:L}}const f={fc:{age:d("fc/age"),gender:d("fc/gender")}};return Vn(r,l),{params:f,paramMappings:l}}var Tr;(function(r){r.FEMALE="female",r.MALE="male"})(Tr||(Tr={}));const Xi=Ye(Je());class dx extends kn{constructor(r=new aD(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 h=r instanceof po?this.faceFeatureExtractor.forwardInput(r):r,d=Xi.avgPool(h,[7,7],[2,2],"valid").as2D(h.shape[0],-1),f=zu(d,l.fc.age).as1D(),g=zu(d,l.fc.gender);return{age:f,gender:g}})}forwardInput(r){return Xi.tidy(()=>{const{age:l,gender:h}=this.runNet(r);return{age:l,gender:Xi.softmax(h)}})}async forward(r){return this.forwardInput(await Rt(r))}async predictAgeAndGender(r){const l=await Rt(r),h=await this.forwardInput(l),d=Xi.unstack(h.age),f=Xi.unstack(h.gender),g=d.map((L,x)=>({ageTensor:L,genderTensor:f[x]})),S=await Promise.all(g.map(async({ageTensor:L,genderTensor:x})=>{const A=(await L.data())[0],O=(await x.data())[0],C=O>.5,$=C?Tr.MALE:Tr.FEMALE,z=C?O:1-O;return L.dispose(),x.dispose(),{age:A,gender:$,genderProbability:z}}));return h.age.dispose(),h.gender.dispose(),l.isBatchInput?S:S[0]}getDefaultModelName(){return"age_gender_model"}dispose(r=!0){this.faceFeatureExtractor.dispose(r),super.dispose(r)}loadClassifierParams(r){const{params:l,paramMappings:h}=this.extractClassifierParams(r);this._params=l,this._paramMappings=h}extractClassifierParams(r){return cD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:h}=mg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),lD(h)}extractParams(r){const l=512*1+1+(512*2+2),h=r.slice(0,r.length-l),d=r.slice(r.length-l);return this.faceFeatureExtractor.extractWeights(h),this.extractClassifierParams(d)}}const bs=Ye(Je());class yg extends fg{postProcess(r,l,h){const d=h.map(({width:g,height:S})=>{const L=l/Math.max(S,g);return{width:g*L,height:S*L}}),f=d.length;return bs.tidy(()=>{const g=(O,C)=>bs.stack([bs.fill([68],O,"float32"),bs.fill([68],C,"float32")],1).as2D(1,136).as1D(),S=(O,C)=>{const{width:$,height:z}=d[O];return C($,z)?Math.abs($-z)/2:0},L=O=>S(O,(C,$)=>C<$),x=O=>S(O,(C,$)=>$g(L(C),x(C))))).div(bs.stack(Array.from(Array(f),(O,C)=>g(d[C].width,d[C].height))));return A})}forwardInput(r){return bs.tidy(()=>{const l=this.runNet(r);return this.postProcess(l,r.inputSize,r.inputDimensions.map(([h,d])=>({height:h,width:d})))})}async forward(r){return this.forwardInput(await Rt(r))}async detectLandmarks(r){const l=await Rt(r),h=bs.tidy(()=>bs.unstack(this.forwardInput(l))),d=await Promise.all(h.map(async(f,g)=>{const S=Array.from(await f.data()),L=S.filter((A,O)=>Em(O)),x=S.filter((A,O)=>!Em(O));return new Iu(Array(68).fill(0).map((A,O)=>new Ze(L[O],x[O])),{height:l.getInputHeight(g),width:l.getInputWidth(g)})}));return h.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getClassifierChannelsOut(){return 136}}class Gu extends yg{constructor(r=new pg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function hD(r){const l=[],{extractDenseBlock3Params:h}=dg(r,l),d={dense0:h("dense0",!0),dense1:h("dense1"),dense2:h("dense2")};return Vn(r,l),{params:d,paramMappings:l}}function uD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractDenseBlock3Params:f}=hg(h,l),g=f(3,32,"dense0",!0),S=f(32,64,"dense1"),L=f(64,128,"dense2");if(d().length!==0)throw new Error(`weights remaing after extract: ${d().length}`);return{paramMappings:l,params:{dense0:g,dense1:S,dense2:L}}}const go=Ye(Je());class dD extends kn{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return go.tidy(()=>{const h=go.cast(r.toBatchTensor(112,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(go.scalar(255));let g=og(f,l.dense0,!0);return g=og(g,l.dense1),g=og(g,l.dense2),g=go.avgPool(g,[14,14],[2,2],"valid"),g})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return hD(r)}extractParams(r){return uD(r)}}class px extends yg{constructor(r=new dD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class UZ extends Gu{}const bg=Ye(Je());function pD(r,l){return bg.add(bg.mul(r,l.weights),l.biases)}const tl=Ye(Je());function mx(r,l,h,d,f="same"){const{filters:g,bias:S}=l.conv;let L=tl.conv2d(r,g,h,f);return L=tl.add(L,S),L=pD(L,l.scale),d?tl.relu(L):L}function mD(r,l){return mx(r,l,[1,1],!0)}function fx(r,l){return mx(r,l,[1,1],!1)}function wg(r,l){return mx(r,l,[2,2],!0,"valid")}const ws=Ye(Je());function BZ(r,l){function h(L,x,A){const O=r(L),C=O.length/(x*A*A);if(MS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${A}`);return ws.tidy(()=>ws.transpose(ws.tensor4d(O,[x,C,A,A]),[2,3,1,0]))}function d(L,x,A,O){const C=h(L,x,A),$=ws.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:$}}function f(L,x){const A=ws.tensor1d(r(L)),O=ws.tensor1d(r(L));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:A,biases:O}}function g(L,x,A,O){const C=d(L,x,A,`${O}/conv`),$=f(x,`${O}/scale`);return{conv:C,scale:$}}function S(L,x,A,O,C=!1){const $=g((C?.5:1)*L,x,A,`${O}/conv1`),z=g(L,x,A,`${O}/conv2`);return{conv1:$,conv2:z}}return{extractConvLayerParams:g,extractResidualLayerParams:S}}function fD(r){const{extractWeights:l,getRemainingWeights:h}=Hn(r),d=[],{extractConvLayerParams:f,extractResidualLayerParams:g}=BZ(l,d),S=f(4704,32,7,"conv32_down"),L=g(9216,32,3,"conv32_1"),x=g(9216,32,3,"conv32_2"),A=g(9216,32,3,"conv32_3"),O=g(36864,64,3,"conv64_down",!0),C=g(36864,64,3,"conv64_1"),$=g(36864,64,3,"conv64_2"),z=g(36864,64,3,"conv64_3"),ne=g(147456,128,3,"conv128_down",!0),te=g(147456,128,3,"conv128_1"),se=g(147456,128,3,"conv128_2"),fe=g(589824,256,3,"conv256_down",!0),de=g(589824,256,3,"conv256_1"),Ae=g(589824,256,3,"conv256_2"),xe=g(589824,256,3,"conv256_down_out"),Me=ws.tidy(()=>ws.transpose(ws.tensor2d(l(256*128),[128,256]),[1,0]));if(d.push({paramPath:"fc"}),h().length!==0)throw new Error(`weights remaing after extract: ${h().length}`);const Ke={conv32_down:S,conv32_1:L,conv32_2:x,conv32_3:A,conv64_down:O,conv64_1:C,conv64_2:$,conv64_3:z,conv128_down:ne,conv128_1:te,conv128_2:se,conv256_down:fe,conv256_1:de,conv256_2:Ae,conv256_down_out:xe,fc:Me};return{params:Ke,paramMappings:d}}function MZ(r,l){const h=ys(r,l);function d(S){const L=h(`${S}/scale/weights`,1),x=h(`${S}/scale/biases`,1);return{weights:L,biases:x}}function f(S){const L=h(`${S}/conv/filters`,4),x=h(`${S}/conv/bias`,1),A=d(S);return{conv:{filters:L,bias:x},scale:A}}function g(S){return{conv1:f(`${S}/conv1`),conv2:f(`${S}/conv2`)}}return{extractConvLayerParams:f,extractResidualLayerParams:g}}function gD(r){const l=[],{extractConvLayerParams:h,extractResidualLayerParams:d}=MZ(r,l),f=h("conv32_down"),g=d("conv32_1"),S=d("conv32_2"),L=d("conv32_3"),x=d("conv64_down"),A=d("conv64_1"),O=d("conv64_2"),C=d("conv64_3"),$=d("conv128_down"),z=d("conv128_1"),ne=d("conv128_2"),te=d("conv256_down"),se=d("conv256_1"),fe=d("conv256_2"),de=d("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!BS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const xe={conv32_down:f,conv32_1:g,conv32_2:S,conv32_3:L,conv64_down:x,conv64_1:A,conv64_2:O,conv64_3:C,conv128_down:$,conv128_1:z,conv128_2:ne,conv256_down:te,conv256_1:se,conv256_2:fe,conv256_down_out:de,fc:Ae};return Vn(r,l),{params:xe,paramMappings:l}}const Yn=Ye(Je());function Li(r,l){let h=mD(r,l.conv1);return h=fx(h,l.conv2),h=Yn.add(h,r),h=Yn.relu(h),h}function Vu(r,l){let h=wg(r,l.conv1);h=fx(h,l.conv2);let d=Yn.avgPool(r,2,2,"valid");const f=Yn.zeros(d.shape),g=d.shape[3]!==h.shape[3],S=d.shape[1]!==h.shape[1]||d.shape[2]!==h.shape[2];if(S){const L=[...h.shape];L[1]=1;const x=Yn.zeros(L);h=Yn.concat([h,x],1);const A=[...h.shape];A[2]=1;const O=Yn.zeros(A);h=Yn.concat([h,O],2)}return d=g?Yn.concat([d,f],3):d,h=Yn.add(d,h),h=Yn.relu(h),h}const _s=Ye(Je());class Hu extends kn{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return _s.tidy(()=>{const h=_s.cast(r.toBatchTensor(150,!0),"float32"),d=[122.782,117.001,104.298],f=yi(h,d).div(_s.scalar(256));let g=wg(f,l.conv32_down);g=_s.maxPool(g,3,2,"valid"),g=Li(g,l.conv32_1),g=Li(g,l.conv32_2),g=Li(g,l.conv32_3),g=Vu(g,l.conv64_down),g=Li(g,l.conv64_1),g=Li(g,l.conv64_2),g=Li(g,l.conv64_3),g=Vu(g,l.conv128_down),g=Li(g,l.conv128_1),g=Li(g,l.conv128_2),g=Vu(g,l.conv256_down),g=Li(g,l.conv256_1),g=Li(g,l.conv256_2),g=Vu(g,l.conv256_down_out);const S=g.mean([1,2]),L=_s.matMul(S,l.fc);return L})}async forward(r){return this.forwardInput(await Rt(r))}async computeFaceDescriptor(r){const l=await Rt(r),h=_s.tidy(()=>_s.unstack(this.forwardInput(l))),d=await Promise.all(h.map(f=>f.data()));return h.forEach(f=>f.dispose()),l.isBatchInput?d:d[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return gD(r)}extractParams(r){return fD(r)}}function PZ(r){const l=new Hu;return l.extractWeights(r),l}function Lg(r,l){const h={descriptor:l};return Object.assign({},r,h)}function zZ(r){return typeof r.age=="number"}function Sg(r,l){const h={age:l};return Object.assign({},r,h)}function GZ(r){return(r.gender===Tr.MALE||r.gender===Tr.FEMALE)&&Rc(r.genderProbability)}function Ig(r,l,h){const d={gender:l,genderProbability:h};return Object.assign({},r,d)}const Si=Ye(Je());function VZ(r,l){function h(x,A){const O=Si.tensor4d(r(3*3*x),[3,3,x,1]),C=Si.tensor1d(r(x)),$=Si.tensor1d(r(x)),z=Si.tensor1d(r(x)),ne=Si.tensor1d(r(x));return l.push({paramPath:`${A}/filters`},{paramPath:`${A}/batch_norm_scale`},{paramPath:`${A}/batch_norm_offset`},{paramPath:`${A}/batch_norm_mean`},{paramPath:`${A}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:$,batch_norm_mean:z,batch_norm_variance:ne}}function d(x,A,O,C,$){const z=Si.tensor4d(r(x*A*O*O),[O,O,x,A]),ne=Si.tensor1d(r(A));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${$?"batch_norm_offset":"bias"}`}),{filters:z,bias:ne}}function f(x,A,O,C){const{filters:$,bias:z}=d(x,A,O,C,!0);return{filters:$,batch_norm_offset:z}}function g(x,A,O){const C=h(x,`${O}/depthwise_conv`),$=f(x,A,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:$}}function S(){const x=f(3,32,3,"mobilenetv1/conv_0"),A=g(32,64,"mobilenetv1/conv_1"),O=g(64,128,"mobilenetv1/conv_2"),C=g(128,128,"mobilenetv1/conv_3"),$=g(128,256,"mobilenetv1/conv_4"),z=g(256,256,"mobilenetv1/conv_5"),ne=g(256,512,"mobilenetv1/conv_6"),te=g(512,512,"mobilenetv1/conv_7"),se=g(512,512,"mobilenetv1/conv_8"),fe=g(512,512,"mobilenetv1/conv_9"),de=g(512,512,"mobilenetv1/conv_10"),Ae=g(512,512,"mobilenetv1/conv_11"),xe=g(512,1024,"mobilenetv1/conv_12"),Me=g(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:A,conv_2:O,conv_3:C,conv_4:$,conv_5:z,conv_6:ne,conv_7:te,conv_8:se,conv_9:fe,conv_10:de,conv_11:Ae,conv_12:xe,conv_13:Me}}function L(){const x=f(1024,256,1,"prediction_layer/conv_0"),A=f(256,512,3,"prediction_layer/conv_1"),O=f(512,128,1,"prediction_layer/conv_2"),C=f(128,256,3,"prediction_layer/conv_3"),$=f(256,128,1,"prediction_layer/conv_4"),z=f(128,256,3,"prediction_layer/conv_5"),ne=f(256,64,1,"prediction_layer/conv_6"),te=f(64,128,3,"prediction_layer/conv_7"),se=d(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),fe=d(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),de=d(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=d(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),xe=d(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Me=d(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),Ke=d(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),wt=d(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=d(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=d(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Fn=d(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),vn=d(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),Nn={box_encoding_predictor:se,class_predictor:fe},Qs={box_encoding_predictor:de,class_predictor:Ae},Ai={box_encoding_predictor:xe,class_predictor:Me},ei={box_encoding_predictor:Ke,class_predictor:wt},xa={box_encoding_predictor:$t,class_predictor:Kt},hl={box_encoding_predictor:Fn,class_predictor:vn};return{conv_0:x,conv_1:A,conv_2:O,conv_3:C,conv_4:$,conv_5:z,conv_6:ne,conv_7:te,box_predictor_0:Nn,box_predictor_1:Qs,box_predictor_2:Ai,box_predictor_3:ei,box_predictor_4:xa,box_predictor_5:hl}}return{extractMobilenetV1Params:S,extractPredictionLayerParams:L}}function yD(r){const l=[],{extractWeights:h,getRemainingWeights:d}=Hn(r),{extractMobilenetV1Params:f,extractPredictionLayerParams:g}=VZ(h,l),S=f(),L=g(),x=Si.tensor3d(h(5118*4),[1,5118,4]),A={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:S,prediction_layer:L,output_layer:A},paramMappings:l}}function HZ(r,l){const h=ys(r,l);function d(A,O,C){const $=h(`${A}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),z=h(`${A}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:$,batch_norm_offset:z}}function f(A){const O=`mobilenetv1/conv_${A}`,C=`MobilenetV1/Conv2d_${A}_depthwise`,$=`${O}/depthwise_conv`,z=`${O}/pointwise_conv`,ne=h(`${C}/depthwise_weights`,4,`${$}/filters`),te=h(`${C}/BatchNorm/gamma`,1,`${$}/batch_norm_scale`),se=h(`${C}/BatchNorm/beta`,1,`${$}/batch_norm_offset`),fe=h(`${C}/BatchNorm/moving_mean`,1,`${$}/batch_norm_mean`),de=h(`${C}/BatchNorm/moving_variance`,1,`${$}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:se,batch_norm_mean:fe,batch_norm_variance:de},pointwise_conv:d("MobilenetV1",A,z)}}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 S(A,O){const C=h(`${A}/weights`,4,`${O}/filters`),$=h(`${A}/biases`,1,`${O}/bias`);return{filters:C,bias:$}}function L(A){const O=S(`Prediction/BoxPredictor_${A}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${A}/box_encoding_predictor`),C=S(`Prediction/BoxPredictor_${A}/ClassPredictor`,`prediction_layer/box_predictor_${A}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}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:L(0),box_predictor_1:L(1),box_predictor_2:L(2),box_predictor_3:L(3),box_predictor_4:L(4),box_predictor_5:L(5)}}return{extractMobilenetV1Params:g,extractPredictionLayerParams:x}}function bD(r){const l=[],{extractMobilenetV1Params:h,extractPredictionLayerParams:d}=HZ(r,l),f=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!yr(f))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${f}`);const g={mobilenetv1:h(),prediction_layer:d(),output_layer:{extra_dim:f}};return Vn(r,l),{params:g,paramMappings:l}}const yo=Ye(Je());function Xs(r,l,h){return yo.tidy(()=>{let d=yo.conv2d(r,l.filters,h,"same");return d=yo.add(d,l.batch_norm_offset),yo.clipByValue(d,0,6)})}const Ar=Ye(Je()),YZ=.0010000000474974513;function qZ(r,l,h){return Ar.tidy(()=>{let d=Ar.depthwiseConv2d(r,l.filters,h,"same");return d=Ar.batchNorm(d,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,YZ),Ar.clipByValue(d,0,6)})}function jZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function wD(r,l){return Ar.tidy(()=>{let h,d=Xs(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,S)=>{const L=S+1,x=jZ(L);d=qZ(d,g.depthwise_conv,x),d=Xs(d,g.pointwise_conv,[1,1]),L===11&&(h=d)}),h===null)throw new Error("mobileNetV1 - output of conv layer 11 is null");return{out:d,conv11:h}})}function LD(r,l,h,d,f){const g=r.shape[0],S=Math.min(h,g),L=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>f).sort((O,C)=>C.score-O.score),x=O=>O<=d?1:0,A=[];return L.forEach(O=>{if(A.length>=S)return;const C=O.score;for(let $=A.length-1;$>=0;--$){const z=KZ(r,O.boxIndex,A[$]);if(z===0)continue;if(O.score*=x(z),O.score<=f)break}C===O.score&&A.push(O.boxIndex)}),A}function KZ(r,l,h){const d=r.arraySync(),f=Math.min(d[l][0],d[l][2]),g=Math.min(d[l][1],d[l][3]),S=Math.max(d[l][0],d[l][2]),L=Math.max(d[l][1],d[l][3]),x=Math.min(d[h][0],d[h][2]),A=Math.min(d[h][1],d[h][3]),O=Math.max(d[h][0],d[h][2]),C=Math.max(d[h][1],d[h][3]),$=(S-f)*(L-g),z=(O-x)*(C-A);if($<=0||z<=0)return 0;const ne=Math.max(f,x),te=Math.max(g,A),se=Math.min(S,O),fe=Math.min(L,C),de=Math.max(se-ne,0)*Math.max(fe-te,0);return de/($+z-de)}const De=Ye(Je());function XZ(r){const l=De.unstack(De.transpose(r,[1,0])),h=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],d=[De.add(l[0],De.div(h[0],De.scalar(2))),De.add(l[1],De.div(h[1],De.scalar(2)))];return{sizes:h,centers:d}}function JZ(r,l){const{sizes:h,centers:d}=XZ(r),f=De.unstack(De.transpose(l,[1,0])),g=De.div(De.mul(De.exp(De.div(f[2],De.scalar(5))),h[0]),De.scalar(2)),S=De.add(De.mul(De.div(f[0],De.scalar(10)),h[0]),d[0]),L=De.div(De.mul(De.exp(De.div(f[3],De.scalar(5))),h[1]),De.scalar(2)),x=De.add(De.mul(De.div(f[1],De.scalar(10)),h[1]),d[1]);return De.transpose(De.stack([De.sub(S,g),De.sub(x,L),De.add(S,g),De.add(x,L)]),[1,0])}function SD(r,l,h){return De.tidy(()=>{const d=r.shape[0];let f=JZ(De.reshape(De.tile(h.extra_dim,[d,1,1]),[-1,4]),De.reshape(r,[-1,4]));f=De.reshape(f,[d,f.shape[0]/d,4]);const g=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let S=De.slice(g,[0,0,0],[-1,-1,1]);S=De.reshape(S,[d,S.shape[1]]);const L=De.unstack(f),x=De.unstack(S);return{boxes:L,scores:x}})}const Yu=Ye(Je());function wa(r,l){return Yu.tidy(()=>{const h=r.shape[0],d=Yu.reshape(ga(r,l.box_encoding_predictor),[h,-1,1,4]),f=Yu.reshape(ga(r,l.class_predictor),[h,-1,3]);return{boxPredictionEncoding:d,classPrediction:f}})}const qu=Ye(Je());function ID(r,l,h){return qu.tidy(()=>{const d=Xs(r,h.conv_0,[1,1]),f=Xs(d,h.conv_1,[2,2]),g=Xs(f,h.conv_2,[1,1]),S=Xs(g,h.conv_3,[2,2]),L=Xs(S,h.conv_4,[1,1]),x=Xs(L,h.conv_5,[2,2]),A=Xs(x,h.conv_6,[1,1]),O=Xs(A,h.conv_7,[2,2]),C=wa(l,h.box_predictor_0),$=wa(r,h.box_predictor_1),z=wa(f,h.box_predictor_2),ne=wa(S,h.box_predictor_3),te=wa(x,h.box_predictor_4),se=wa(O,h.box_predictor_5),fe=qu.concat([C.boxPredictionEncoding,$.boxPredictionEncoding,z.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,se.boxPredictionEncoding],1),de=qu.concat([C.classPrediction,$.classPrediction,z.classPrediction,ne.classPrediction,te.classPrediction,se.classPrediction],1);return{boxPredictions:fe,classPredictions:de}})}class Ii{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 xi=Ye(Je());class nl extends kn{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return xi.tidy(()=>{const h=xi.cast(r.toBatchTensor(512,!1),"float32"),d=xi.sub(xi.mul(h,xi.scalar(.007843137718737125)),xi.scalar(1)),f=wD(d,l.mobilenetv1),{boxPredictions:g,classPredictions:S}=ID(f.out,f.conv11,l.prediction_layer);return SD(g,S,l.output_layer)})}async forward(r){return this.forwardInput(await Rt(r))}async locateFaces(r,l={}){const{maxResults:h,minConfidence:d}=new Ii(l),f=await Rt(r),{boxes:g,scores:S}=this.forwardInput(f),L=g[0],x=S[0];for(let de=1;de{const[Ae,xe]=[Math.max(0,se[de][0]),Math.min(1,se[de][2])].map(wt=>wt*te),[Me,Ke]=[Math.max(0,se[de][1]),Math.min(1,se[de][3])].map(wt=>wt*ne);return new Yt(A[de],new Su(Me,Ae,Ke-Me,xe-Ae),{height:f.getInputHeight(0),width:f.getInputWidth(0)})});return L.dispose(),x.dispose(),fe}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return bD(r)}extractParams(r){return yD(r)}}function xD(r){const l=new nl;return l.extractWeights(r),l}function ZZ(r){return xD(r)}class QZ extends nl{}const TD=.4,AD=[new Ze(.738768,.874946),new Ze(2.42204,2.65704),new Ze(4.30971,7.04493),new Ze(10.246,4.59428),new Ze(12.6868,11.8741)],vD=[new Ze(1.603231,2.094468),new Ze(6.041143,7.080126),new Ze(2.882459,3.518061),new Ze(4.266906,5.178857),new Ze(9.041765,10.66308)],ND=[117.001,114.697,97.404],CD="tiny_yolov2_model",RD="tiny_yolov2_separable_conv_model";const xg=r=>typeof r=="number";function gx(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(!xg(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=>xg(l.x)&&xg(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(xg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Js=Ye(Je());function sl(r){return Js.tidy(()=>{const l=Js.mul(r,Js.scalar(.10000000149011612));return Js.add(Js.relu(Js.sub(r,l)),l)})}const Zs=Ye(Je());function vr(r,l){return Zs.tidy(()=>{let h=Zs.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return h=Zs.conv2d(h,l.conv.filters,[1,1],"valid"),h=Zs.sub(h,l.bn.sub),h=Zs.mul(h,l.bn.truediv),h=Zs.add(h,l.conv.bias),sl(h)})}const bo=Ye(Je());function Nr(r,l){return bo.tidy(()=>{let h=bo.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return h=bo.separableConv2d(h,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),h=bo.add(h,l.bias),sl(h)})}const yx=Ye(Je());function eQ(r,l){const h=Kc(r,l);function d(S,L){const x=yx.tensor1d(r(S)),A=yx.tensor1d(r(S));return l.push({paramPath:`${L}/sub`},{paramPath:`${L}/truediv`}),{sub:x,truediv:A}}function f(S,L,x){const A=h(S,L,3,`${x}/conv`),O=d(L,`${x}/bn`);return{conv:A,bn:O}}const g=Xc(r,l);return{extractConvParams:h,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}}function OD(r,l,h,d){const{extractWeights:f,getRemainingWeights:g}=Hn(r),S=[],{extractConvParams:L,extractConvWithBatchNormParams:x,extractSeparableConvParams:A}=eQ(f,S);let O;if(l.withSeparableConvs){const[C,$,z,ne,te,se,fe,de,Ae]=d,xe=l.isFirstLayerConv2d?L(C,$,3,"conv0"):A(C,$,"conv0"),Me=A($,z,"conv1"),Ke=A(z,ne,"conv2"),wt=A(ne,te,"conv3"),$t=A(te,se,"conv4"),Kt=A(se,fe,"conv5"),Fn=de?A(fe,de,"conv6"):void 0,vn=Ae?A(de,Ae,"conv7"):void 0,Nn=L(Ae||de||fe,5*h,1,"conv8");O={conv0:xe,conv1:Me,conv2:Ke,conv3:wt,conv4:$t,conv5:Kt,conv6:Fn,conv7:vn,conv8:Nn}}else{const[C,$,z,ne,te,se,fe,de,Ae]=d,xe=x(C,$,"conv0"),Me=x($,z,"conv1"),Ke=x(z,ne,"conv2"),wt=x(ne,te,"conv3"),$t=x(te,se,"conv4"),Kt=x(se,fe,"conv5"),Fn=x(fe,de,"conv6"),vn=x(de,Ae,"conv7"),Nn=L(Ae,5*h,1,"conv8");O={conv0:xe,conv1:Me,conv2:Ke,conv3:wt,conv4:$t,conv5:Kt,conv6:Fn,conv7:vn,conv8:Nn}}if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{params:O,paramMappings:S}}function tQ(r,l){const h=ys(r,l);function d(L){const x=h(`${L}/sub`,1),A=h(`${L}/truediv`,1);return{sub:x,truediv:A}}function f(L){const x=h(`${L}/filters`,4),A=h(`${L}/bias`,1);return{filters:x,bias:A}}function g(L){const x=f(`${L}/conv`),A=d(`${L}/bn`);return{conv:x,bn:A}}const S=Jc(h);return{extractConvParams:f,extractConvWithBatchNormParams:g,extractSeparableConvParams:S}}function ED(r,l){const h=[],{extractConvParams:d,extractConvWithBatchNormParams:f,extractSeparableConvParams:g}=tQ(r,h);let S;if(l.withSeparableConvs){const L=l.filterSizes&&l.filterSizes.length||9;S={conv0:l.isFirstLayerConv2d?d("conv0"):g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:L>7?g("conv6"):void 0,conv7:L>8?g("conv7"):void 0,conv8:d("conv8")}}else S={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 Vn(r,h),{params:S,paramMappings:h}}var bx;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(bx||(bx={}));class Cr{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 kt=Ye(Je());class il extends kn{constructor(r){super("TinyYolov2");gx(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 h=vr(r,l.conv0);return h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv1),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv2),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv3),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv4),h=kt.maxPool(h,[2,2],[2,2],"same"),h=vr(h,l.conv5),h=kt.maxPool(h,[2,2],[1,1],"same"),h=vr(h,l.conv6),h=vr(h,l.conv7),ga(h,l.conv8,"valid",!1)}runMobilenet(r,l){let h=this.config.isFirstLayerConv2d?sl(ga(r,l.conv0,"valid",!1)):Nr(r,l.conv0);return h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv1),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv2),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv3),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv4),h=kt.maxPool(h,[2,2],[2,2],"same"),h=Nr(h,l.conv5),h=kt.maxPool(h,[2,2],[1,1],"same"),h=l.conv6?Nr(h,l.conv6):h,h=l.conv7?Nr(h,l.conv7):h,ga(h,l.conv8,"valid",!1)}forwardInput(r,l){const{params:h}=this;if(!h)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let d=kt.cast(r.toBatchTensor(l,!1),"float32");return d=this.config.meanRgb?yi(d,this.config.meanRgb):d,d=d.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(d,h):this.runTinyYolov2(d,h)})}async forward(r,l){return await this.forwardInput(await Rt(r),l)}async detect(r,l={}){const{inputSize:h,scoreThreshold:d}=new Cr(l),f=await Rt(r),g=await this.forwardInput(f,h),S=kt.tidy(()=>kt.unstack(g)[0].expandDims()),L={width:f.getInputWidth(0),height:f.getInputHeight(0)},x=await this.extractBoxes(S,f.getReshapedInputDimensions(0),d);g.dispose(),S.dispose();const A=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),$=x.map(te=>this.config.classes[te.label]),z=VS(A.map(te=>te.rescale(h)),O,this.config.iouThreshold,!0),ne=z.map(te=>new Oc(O[te],C[te],$[te],A[te],L));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return ED(r,this.config)}extractParams(r){const l=this.config.filterSizes||il.DEFAULT_FILTER_SIZES,h=l?l.length:void 0;if(h!==7&&h!==8&&h!==9)throw new Error(`TinyYolov2 - expected 7 | 8 | 9 convolutional filters, but found ${h} filterSizes in config`);return OD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,h){const{width:d,height:f}=l,g=Math.max(d,f),S=g/d,L=g/f,x=r.shape[1],A=this.config.anchors.length,[O,C,$]=kt.tidy(()=>{const se=r.reshape([x,x,A,this.boxEncodingSize]),fe=se.slice([0,0,0,0],[x,x,A,4]),de=se.slice([0,0,0,4],[x,x,A,1]),Ae=this.withClassScores?kt.softmax(se.slice([0,0,0,5],[x,x,A,this.config.classes.length]),3):kt.scalar(0);return[fe,de,Ae]}),z=[],ne=await C.array(),te=await O.array();for(let se=0;seh){const xe=(fe+Lu(te[se][fe][de][0]))/x*S,Me=(se+Lu(te[se][fe][de][1]))/x*L,Ke=Math.exp(te[se][fe][de][2])*this.config.anchors[de].x/x*S,wt=Math.exp(te[se][fe][de][3])*this.config.anchors[de].y/x*L,$t=xe-Ke/2,Kt=Me-wt/2,Fn={row:se,col:fe,anchor:de},{classScore:vn,label:Nn}=this.withClassScores?await this.extractPredictedClass($,Fn):{classScore:1,label:0};z.push({box:new wu($t,Kt,$t+Ke,Kt+wt),score:Ae,classScore:Ae*vn,label:Nn,...Fn})}}return O.dispose(),C.dispose(),$.dispose(),z}async extractPredictedClass(r,l){const{row:h,col:d,anchor:f}=l,g=await r.array();return Array(this.config.classes.length).fill(0).map((S,L)=>g[h][d][f][L]).map((S,L)=>({classScore:S,label:L})).reduce((S,L)=>S.classScore>L.classScore?S:L)}}il.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class ju extends il{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:TD,classes:["face"]},r?{anchors:vD,meanRgb:ND}:{anchors:AD,withClassScores:!0});super(l)}get withSeparableConvs(){return this.config.withSeparableConvs}get anchors(){return this.config.anchors}async locateFaces(r,l){const h=await this.detect(r,l);return h.map(d=>new Yt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?RD:CD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function nQ(r,l=!0){const h=new ju(l);return h.extractWeights(r),h}class wx extends Cr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Ti{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const Lx=Ye(Je());async function La(r,l,h,d,f=({alignedRect:g})=>g){const g=r.map(x=>ba(x)?f(x):x.detection),S=d||(l instanceof Lx.Tensor?await qc(l,g):await Yc(l,g)),L=await h(S);return S.forEach(x=>x instanceof Lx.Tensor&&x.dispose()),L}async function rl(r,l,h,d,f){return La([r],l,async g=>h(g[0]),d,f)}const DD=.4,kD=[new Ze(1.603231,2.094468),new Ze(6.041143,7.080126),new Ze(2.882459,3.518061),new Ze(4.266906,5.178857),new Ze(9.041765,10.66308)],FD=[117.001,114.697,97.404];class Ku extends il{constructor(){const r={withSeparableConvs:!0,iouThreshold:DD,classes:["face"],anchors:kD,meanRgb:FD,isFirstLayerConv2d:!0,filterSizes:[3,16,32,64,128,256,512]};super(r)}get anchors(){return this.config.anchors}async locateFaces(r,l){const h=await this.detect(r,l);return h.map(d=>new Yt(d.score,d.relativeBox,{width:d.imageWidth,height:d.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const pt={ssdMobilenetv1:new nl,tinyFaceDetector:new Ku,tinyYolov2:new ju,faceLandmark68Net:new Gu,faceLandmark68TinyNet:new px,faceRecognitionNet:new Hu,faceExpressionNet:new cx,ageGenderNet:new dx},_D=(r,l)=>pt.ssdMobilenetv1.locateFaces(r,l),sQ=(r,l)=>pt.tinyFaceDetector.locateFaces(r,l),iQ=(r,l)=>pt.tinyYolov2.locateFaces(r,l),WD=r=>pt.faceLandmark68Net.detectLandmarks(r),rQ=r=>pt.faceLandmark68TinyNet.detectLandmarks(r),oQ=r=>pt.faceRecognitionNet.computeFaceDescriptor(r),aQ=r=>pt.faceExpressionNet.predictExpressions(r),cQ=r=>pt.ageGenderNet.predictAgeAndGender(r),$D=r=>pt.ssdMobilenetv1.load(r),lQ=r=>pt.tinyFaceDetector.load(r),hQ=r=>pt.tinyYolov2.load(r),uQ=r=>pt.faceLandmark68Net.load(r),dQ=r=>pt.faceLandmark68TinyNet.load(r),pQ=r=>pt.faceRecognitionNet.load(r),mQ=r=>pt.faceExpressionNet.load(r),fQ=r=>pt.ageGenderNet.load(r),gQ=$D,yQ=_D,bQ=WD;class UD extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.extractedFaces=h}}class Zu extends UD{async run(){const r=await this.parentTask,l=await La(r,this.input,async h=>await Promise.all(h.map(d=>pt.faceExpressionNet.predictExpressions(d))),this.extractedFaces);return r.map((h,d)=>gg(h,l[d]))}withAgeAndGender(){return new Xu(this,this.input)}}class Qu extends UD{async run(){const r=await this.parentTask;if(!r)return;const l=await rl(r,this.input,h=>pt.faceExpressionNet.predictExpressions(h),this.extractedFaces);return gg(r,l)}withAgeAndGender(){return new Ju(this,this.input)}}class cl extends Zu{withAgeAndGender(){return new ol(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class ll extends Qu{withAgeAndGender(){return new al(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class BD extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.extractedFaces=h}}class Xu extends BD{async run(){const r=await this.parentTask,l=await La(r,this.input,async h=>await Promise.all(h.map(d=>pt.ageGenderNet.predictAgeAndGender(d))),this.extractedFaces);return r.map((h,d)=>{const{age:f,gender:g,genderProbability:S}=l[d];return Sg(Ig(h,g,S),f)})}withFaceExpressions(){return new Zu(this,this.input)}}class Ju extends BD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:h,genderProbability:d}=await rl(r,this.input,f=>pt.ageGenderNet.predictAgeAndGender(f),this.extractedFaces);return Sg(Ig(r,h,d),l)}withFaceExpressions(){return new Qu(this,this.input)}}class ol extends Xu{withFaceExpressions(){return new cl(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class al extends Ju{withFaceExpressions(){return new ll(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class Sx extends Ti{constructor(r,l){super();this.parentTask=r;this.input=l}}class Sa extends Sx{async run(){const r=await this.parentTask,l=await La(r,this.input,h=>Promise.all(h.map(d=>pt.faceRecognitionNet.computeFaceDescriptor(d))),null,h=>h.landmarks.align(null,{useDlibAlignment:!0}));return l.map((h,d)=>Lg(r[d],h))}withFaceExpressions(){return new cl(this,this.input)}withAgeAndGender(){return new ol(this,this.input)}}class Ia extends Sx{async run(){const r=await this.parentTask;if(!r)return;const l=await rl(r,this.input,h=>pt.faceRecognitionNet.computeFaceDescriptor(h),null,h=>h.landmarks.align(null,{useDlibAlignment:!0}));return Lg(r,l)}withFaceExpressions(){return new ll(this,this.input)}withAgeAndGender(){return new al(this,this.input)}}const ed=Ye(Je());class Ix extends Ti{constructor(r,l,h){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=h}get landmarkNet(){return this.useTinyLandmarkNet?pt.faceLandmark68TinyNet:pt.faceLandmark68Net}}class xx extends Ix{async run(){const r=await this.parentTask,l=r.map(f=>f.detection),h=this.input instanceof ed.Tensor?await qc(this.input,l):await Yc(this.input,l),d=await Promise.all(h.map(f=>this.landmarkNet.detectLandmarks(f)));return h.forEach(f=>f instanceof ed.Tensor&&f.dispose()),r.map((f,g)=>el(f,d[g]))}withFaceExpressions(){return new cl(this,this.input)}withAgeAndGender(){return new ol(this,this.input)}withFaceDescriptors(){return new Sa(this,this.input)}}class Tx extends Ix{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,h=this.input instanceof ed.Tensor?await qc(this.input,[l]):await Yc(this.input,[l]),d=await this.landmarkNet.detectLandmarks(h[0]);return h.forEach(f=>f instanceof ed.Tensor&&f.dispose()),el(r,d)}withFaceExpressions(){return new ll(this,this.input)}withAgeAndGender(){return new al(this,this.input)}withFaceDescriptor(){return new Ia(this,this.input)}}class Ax extends Ti{constructor(r,l=new Ii){super();this.input=r;this.options=l}}class Tg extends Ax{async run(){const{input:r,options:l}=this,h=l instanceof wx?d=>pt.tinyFaceDetector.locateFaces(d,l):l instanceof Ii?d=>pt.ssdMobilenetv1.locateFaces(d,l):l instanceof Cr?d=>pt.tinyYolov2.locateFaces(d,l):null;if(!h)throw new Error("detectFaces - expected options to be instance of TinyFaceDetectorOptions | SsdMobilenetv1Options | MtcnnOptions | TinyYolov2Options");return h(r)}runAndExtendWithFaceDetections(){return new Promise(async r=>{const l=await this.run();return r(l.map(h=>sa({},h)))})}withFaceLandmarks(r=!1){return new xx(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Zu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Xu(this.runAndExtendWithFaceDetections(),this.input)}}class vx extends Ax{async run(){const r=await new Tg(this.input,this.options);let l=r[0];return r.forEach(h=>{h.score>l.score&&(l=h)}),l}runAndExtendWithFaceDetection(){return new Promise(async r=>{const l=await this.run();return r(l?sa({},l):void 0)})}withFaceLandmarks(r=!1){return new Tx(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Qu(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Ju(this.runAndExtendWithFaceDetection(),this.input)}}function wQ(r,l=new Ii){return new vx(r,l)}function Ag(r,l=new Ii){return new Tg(r,l)}async function MD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await Ag(r,new Ii(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function LQ(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await Ag(r,new Cr(l)).withFaceLandmarks().withFaceDescriptors()}const SQ=MD;function Nx(r,l){if(r.length!==l.length)throw new Error("euclideanDistance: arr1.length !== arr2.length");const h=Array.from(r),d=Array.from(l);return Math.sqrt(h.map((f,g)=>f-d[g]).reduce((f,g)=>f+Math.pow(g,2),0))}class PD{constructor(r,l=.6){this._distanceThreshold=l;const h=Array.isArray(r)?r:[r];if(!h.length)throw new Error("FaceRecognizer.constructor - expected atleast one input");let d=1;const f=()=>`person ${d++}`;this._labeledDescriptors=h.map(g=>{if(g instanceof na)return g;if(g instanceof Float32Array)return new na(f(),[g]);if(g.descriptor&&g.descriptor instanceof Float32Array)return new na(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(h=>Nx(h,r)).reduce((h,d)=>h+d,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:h})=>new km(h,this.computeMeanDistance(r,l))).reduce((l,h)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(h=>na.fromJSON(h));return new PD(l,r.distanceThreshold)}}function IQ(r){const l=new Ku;return l.extractWeights(r),l}function zD(r,l){const{width:h,height:d}=new ms(l.width,l.height);if(h<=0||d<=0)throw new Error(`resizeResults - invalid dimensions: ${JSON.stringify({width:h,height:d})}`);if(Array.isArray(r))return r.map(f=>zD(f,{width:h,height:d}));if(ba(r)){const f=r.detection.forSize(h,d),g=r.unshiftedLandmarks.forSize(f.box.width,f.box.height);return el(sa(r,f),g)}return Vi(r)?sa(r,r.detection.forSize(h,d)):r instanceof qs||r instanceof Yt?r.forSize(h,d):r}var GD="0.8.2";vc(exports,{AgeGenderNet:()=>dx,BoundingBox:()=>wu,Box:()=>Ct,ComposableTask:()=>Ti,ComputeAllFaceDescriptorsTask:()=>Sa,ComputeFaceDescriptorsTaskBase:()=>Sx,ComputeSingleFaceDescriptorTask:()=>Ia,DetectAllFaceLandmarksTask:()=>xx,DetectAllFacesTask:()=>Tg,DetectFaceLandmarksTaskBase:()=>Ix,DetectFacesTaskBase:()=>Ax,DetectSingleFaceLandmarksTask:()=>Tx,DetectSingleFaceTask:()=>vx,Dimensions:()=>ms,FACE_EXPRESSION_LABELS:()=>ax,FaceDetection:()=>Yt,FaceDetectionNet:()=>QZ,FaceExpressionNet:()=>cx,FaceExpressions:()=>ya,FaceLandmark68Net:()=>Gu,FaceLandmark68TinyNet:()=>px,FaceLandmarkNet:()=>UZ,FaceLandmarks:()=>qs,FaceLandmarks5:()=>BX,FaceLandmarks68:()=>Iu,FaceMatch:()=>km,FaceMatcher:()=>PD,FaceRecognitionNet:()=>Hu,Gender:()=>Tr,LabeledBox:()=>Fm,LabeledFaceDescriptors:()=>na,NetInput:()=>po,NeuralNetwork:()=>kn,ObjectDetection:()=>Oc,Point:()=>Ze,PredictedBox:()=>MX,Rect:()=>Su,SsdMobilenetv1:()=>nl,SsdMobilenetv1Options:()=>Ii,TinyFaceDetector:()=>Ku,TinyFaceDetectorOptions:()=>wx,TinyYolov2:()=>ju,TinyYolov2Options:()=>Cr,TinyYolov2SizeType:()=>bx,allFaces:()=>SQ,allFacesSsdMobilenetv1:()=>MD,allFacesTinyYolov2:()=>LQ,awaitMediaLoaded:()=>QS,bufferToImage:()=>eI,computeFaceDescriptor:()=>oQ,createCanvas:()=>Dc,createCanvasFromMedia:()=>Tu,createFaceDetectionNet:()=>ZZ,createFaceRecognitionNet:()=>PZ,createSsdMobilenetv1:()=>xD,createTinyFaceDetector:()=>IQ,createTinyYolov2:()=>nQ,detectAllFaces:()=>Ag,detectFaceLandmarks:()=>WD,detectFaceLandmarksTiny:()=>rQ,detectLandmarks:()=>bQ,detectSingleFace:()=>wQ,draw:()=>hx,env:()=>gt,euclideanDistance:()=>Nx,extendWithAge:()=>Sg,extendWithFaceDescriptor:()=>Lg,extendWithFaceDetection:()=>sa,extendWithFaceExpressions:()=>gg,extendWithFaceLandmarks:()=>el,extendWithGender:()=>Ig,extractFaceTensors:()=>qc,extractFaces:()=>Yc,fetchImage:()=>OZ,fetchJson:()=>ix,fetchNetWeights:()=>EZ,fetchOrThrow:()=>fa,getContext2dOrThrow:()=>es,getMediaDimensions:()=>ra,imageTensorToCanvas:()=>tI,imageToSquare:()=>sx,inverseSigmoid:()=>_X,iou:()=>zS,isMediaElement:()=>Um,isMediaLoaded:()=>xu,isWithAge:()=>zZ,isWithFaceDetection:()=>Vi,isWithFaceExpressions:()=>lx,isWithFaceLandmarks:()=>ba,isWithGender:()=>GZ,loadAgeGenderModel:()=>fQ,loadFaceDetectionModel:()=>gQ,loadFaceExpressionModel:()=>mQ,loadFaceLandmarkModel:()=>uQ,loadFaceLandmarkTinyModel:()=>dQ,loadFaceRecognitionModel:()=>pQ,loadSsdMobilenetv1Model:()=>$D,loadTinyFaceDetectorModel:()=>lQ,loadTinyYolov2Model:()=>hQ,loadWeightMap:()=>rx,locateFaces:()=>yQ,matchDimensions:()=>DZ,minBbox:()=>GS,nets:()=>pt,nonMaxSuppression:()=>VS,normalize:()=>yi,padToSquare:()=>HS,predictAgeAndGender:()=>cQ,recognizeFaceExpressions:()=>aQ,resizeResults:()=>zD,resolveInput:()=>ia,shuffleArray:()=>FX,sigmoid:()=>Lu,ssdMobilenetv1:()=>_D,tf:()=>xQ,tinyFaceDetector:()=>sQ,tinyYolov2:()=>iQ,toNetInput:()=>Rt,utils:()=>US,validateConfig:()=>gx,version:()=>vQ});const xQ=Ye(Je()),TQ=typeof process!="undefined",AQ=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",vQ={faceapi:GD,node:TQ,browser:AQ}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.esm.js b/dist/face-api.esm.js index 986e254..06e69dc 100644 --- a/dist/face-api.esm.js +++ b/dist/face-api.esm.js @@ -3819,7 +3819,7 @@ return a / b;`,$6=` `)}function l7(r,l,u,p){const g=qt(l),f=p[p.length-1],I=new Array(f).fill(0),S=l.length,x=u==="complex64"?du(r):r;if(S>1)for(let v=0;vfR){const oe=hu*I;let ge=Array.from(r.slice(0,oe)),fe=Array.from(r.slice((S-hu)*I,S*I));return u==="complex64"&&(ge=du(ge),fe=du(fe)),["["+ge.map((Ae,Te)=>uu(Ae,g[Te],u)).join(", ")+", ..., "+fe.map((Ae,Te)=>uu(Ae,g[S-hu+Te],u)).join(", ")+"]"]}const te=u==="complex64"?du(r):Array.from(r);return["["+te.map((oe,ge)=>uu(oe,g[ge],u)).join(", ")+"]"]}const v=l.slice(1),O=p.slice(1),C=p[0]*I,U=[];if(S>fR){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||oR(l,this.size),this.strides=lu(r)}set(r,...l){l.length===0&&(l=[0]),Z(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 g=`Requested out of range element at ${r}. Buffer shape=${this.shape}`;throw new Error(g)}l++}let u=r[r.length-1];for(let p=0;pUS(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=Mi().readSync(this.dataId);if(this.dtype==="string")try{return r.map(l=>US(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 Mi().read(this.dataId);return this.dtype==="string"?r:new Uint8Array(r.buffer)}dispose(){if(this.isDisposed)return;Mi().disposeTensor(this),this.isDisposedInternal=!0}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(r=!1){return Tc.print(this,r)}clone(){return this.throwIfDisposed(),Tc.clone(this)}toString(r=!1){const l=this.dataSync();return gR(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),Tc.cast(this,r)}variable(r=!0,l,u){return this.throwIfDisposed(),Mi().makeVariable(this,r,l,u)}}Object.defineProperty(In,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class If extends In{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(!jo(r.shape,this.shape))throw new Error(`shape of the new value (${r.shape}) and previous value (${this.shape}) must match`);Mi().disposeTensor(this),this.dataId=r.dataId,Mi().incRef(this,null)}dispose(){Mi().disposeVariable(this),this.isDisposedInternal=!0}}Object.defineProperty(If,Symbol.hasInstance,{value:r=>r instanceof In&&r.assign!=null&&r.assign instanceof Function});var IR;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(IR||(IR={}));var MS;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(MS||(MS={}));var PS;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(PS||(PS={}));var zS;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(zS||(zS={}));var GS;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(GS||(GS={}));const u7={float32:zS,int32:MS,bool:PS,complex64:GS};function xR(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return u7[r][l]}function mt(r,l){if(r.dtype===l.dtype)return[r,l];const u=xR(r.dtype,l.dtype);return[r.cast(u),l.cast(u)]}function xf(r){const l=[],u=new Set;return TR(r,l,u),l}function TR(r,l,u){if(r==null)return;if(r instanceof In){l.push(r);return}if(!d7(r))return;const p=r;for(const g in p){const f=p[g];u.has(f)||(u.add(f),TR(f,l,u))}}function d7(r){return Array.isArray(r)||typeof r=="object"}class AR{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 pu{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new AR}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=FS(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 CC)&&typeof u.then=="function"){const p=++this.pendingBackendInitId,g=u.then(f=>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 pu.nextTensorId++}nextVariableId(){return pu.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),u={x:r},p=f=>({x:()=>{const I="float32",S={x:f},x={dtype:I};return Y.runKernelFunc(v=>v.cast(f,I),S,null,Lc,x)}}),g=[];return this.addTapeNode(this.state.activeScope.name,u,[l],p,g,{}),l}runKernel(r,l,u,p,g){const f=null,I=null;return this.runKernelFunc(f,l,I,r,u,p,g)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,u){const p=this.backend.numDataIds();let g=0;u.forEach(S=>{g+=S.dtype==="complex64"?3:1});const f=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],I=p-l-g-f;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,g,f,I){let S,x=[];const v=this.isTapeOn();p==null&&(p=this.state.activeScope!=null?this.state.activeScope.name:"");const O=this.state.numBytes,C=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let U;const G=yf(p,this.backendName);let ne;if(G!=null)U=()=>{const oe=this.backend.numDataIds();ne=G.kernelFunc({inputs:l,attrs:g,backend:this.backend});const ge=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,oe,ge);const fe=ge.map(({dataId:Ae,shape:Te,dtype:Ve})=>this.makeTensorFromDataId(Ae,Te,Ve));if(v){let Ae=this.getTensorsForGradient(p,l,fe);if(Ae==null){I==null&&(I=[]);const Te=fe.filter((Ve,rt)=>I[rt]);Ae=(f||[]).slice().concat(Te)}x=this.saveTensorsForBackwardMode(Ae)}return fe};else{const oe=ge=>{if(!v)return;x=ge.map(fe=>this.keep(this.clone(fe)))};U=()=>{const ge=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,oe));const fe=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,ge,fe),fe}}let te;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?S=U():(te=this.profiler.profileKernel(p,l,()=>U()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(te),S=te.outputs)}),v&&this.addTapeNode(p,l,S,u,x,g),this.state.profiling&&this.state.activeProfile.kernels.push({name:p,bytesAdded:this.state.numBytes-O,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-C,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(oe=>l[oe]!=null?l[oe].shape:null),outputShapes:S.map(oe=>oe.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=kS(r);if(p!=null){const g=p.inputsToSave||[],f=p.outputsToSave||[];let I;p.saveAllInputs?(Z(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),I=Object.keys(l).map(x=>l[x])):I=g.map(x=>l[x]);const S=u.filter((x,v)=>f[v]);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 g=r;u==="string"&&au(r[0])&&(g=r.map(S=>uR(S)));const f=p.write(g,l,u),I=new In(l,u,f,this.nextTensorId());if(this.incRef(I,p),u==="string"){const S=this.state.tensorInfo.get(f),x=lR(g);this.state.numBytes+=x-S.bytes,S.bytes=x}return I}makeTensorFromDataId(r,l,u,p){u=u||"float32";const g=new In(l,u,r,this.nextTensorId());return this.incRef(g,p),g}makeVariable(r,l=!0,u,p){u=u||this.nextVariableId().toString(),p!=null&&p!==r.dtype&&(r=r.cast(p));const g=new If(r,l,u,this.nextTensorId());if(this.state.registeredVariables[g.name]!=null)throw new Error(`Variable with name ${g.name} was already registered`);return this.state.registeredVariables[g.name]=g,this.incRef(g,this.backend),g}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*cR(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 If||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,g,f){const I={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:u,saved:g},S=kS(r);S!=null&&(p=S.gradFunc),p!=null&&(I.gradient=x=>(x=x.map((v,O)=>{if(v==null){const C=u[O],U=Ko(C.size,C.dtype);return this.makeTensor(U,C.shape,C.dtype)}return v}),p(x.length>1?x:x[0],g,f))),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=xf(r),u=new Set(l.map(g=>g.id));for(let g=0;g{!g.kept&&g.scopeId===p.id&&this.track(g)})}gradients(r,l,u,p=!1){if(Z(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 g=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));Z(g instanceof In,()=>"The result y returned by f() must be a tensor.");const f=pR(this.state.activeTape,l,g);if(!p&&f.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[g.id]=u==null?p7(g.shape):u,mR(I,f,x=>this.tidy(x),m7);const S=l.map(x=>I[x.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(x=>{for(const v of x.saved)v.dispose()}),this.state.activeTape=null),{value:g,grads:S}})}customGrad(r){return Z(_S(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{Z(l.every(g=>g instanceof In),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let u;const p={};return l.forEach((g,f)=>{p[f]=g}),this.runKernelFunc((g,f)=>(u=r(...l,f),Z(u.value instanceof In,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),Z(_S(u.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),u.value),p,(g,f)=>{const I=u.gradFunc(g,f),S=Array.isArray(I)?I:[I];Z(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(...)."),Z(S.every(v=>v instanceof In),()=>"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((v,O)=>{x[O]=()=>v}),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=$S(),u=await this.backend.time(r);return u.wallMs=$S()-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 AR;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}}pu.nextTensorId=0;pu.nextVariableId=0;function p7(r){const l=wf(qt(r),"float32");return Y.makeTensor(l,r,"float32")}function VS(){const r=RS();if(r._tfengine==null){const l=new OC(r);r._tfengine=new pu(l)}return DC(r._tfengine.ENV),wR(()=>r._tfengine),r._tfengine}const Y=VS();function m7(r,l){const u={a:r,b:l};return Y.runKernelFunc((p,g)=>{const f=p.add(r,l);return g([r,l]),f},u,null,wc)}function vR(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const hr=Cs();hr.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.")});hr.registerFlag("IS_BROWSER",()=>vR());hr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");hr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));hr.registerFlag("PROD",()=>!1);hr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>hr.getBool("DEBUG"));hr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);hr.registerFlag("IS_TEST",()=>!1);function ur(r,l){let u=r;if(Rs(r))return l==="string"?[]:[r.length];if(!Array.isArray(r))return[];const p=[];for(;Array.isArray(u)||Rs(u)&&l!=="string";)p.push(u.length),u=u[0];return Array.isArray(r)&&Cs().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&NR(r,p,[]),p}function NR(r,l,u){if(u=u||[],!Array.isArray(r)&&!Rs(r)){Z(l.length===0,()=>`Element arr[${u.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}Z(l.length>0,()=>`Element arr[${u.join("][")}] should be a primitive, but is an array of ${r.length} elements`),Z(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 g=0;g=0&&(g=p),CR(p,g,l,u),r==null||!Rs(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 f=ur(r,g);!Rs(r)&&!Array.isArray(r)&&(r=[r]);const I=!0,S=g!=="string"?bf(r,g):Ic(r,[],I);return Y.makeTensor(S,f,g)}function Tf(r,l,u,p="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${u} must be a \`Tensor[]\` or \`TensorLike[]\``);const g=r;return g.map((f,I)=>M(f,`${l}[${I}]`,u),p)}const RR="__op";function z(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+RR;const g=(...f)=>{Y.startScope(u);try{const I=p(...f);return I instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),Y.endScope(I),I}catch(I){throw Y.endScope(null),I}};return Object.defineProperty(g,"name",{value:u,configurable:!0}),g}function f7(r,l){const u=M(r,"real","complex"),p=M(l,"imag","complex");Zt(u.shape,p.shape,`real and imag shapes, ${u.shape} and ${p.shape}, must match in call to tf.complex().`);const g=I=>I.complex(u,p),f={real:u,imag:p};return Y.runKernelFunc(g,f,null,KC)}const Pi=z({complex_:f7});function zi(r,l,u,p){if(p==null&&(p=cu(r)),p==="complex64")throw new Error("Cannot construct a complex64 tensor directly. Please use tf.complex(real, imag).");if(!Rs(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){Lf(l);const g=qt(l),f=qt(u);Z(g===f,()=>`Based on the provided shape, [${l}], the tensor should have ${g} values but has ${f}`);for(let I=0;I`Error creating a new Tensor. Inferred shape (${u}) does not match the provided shape (${l}). `)}}return!Rs(r)&&!Array.isArray(r)&&(r=[r]),l=l||u,r=p!=="string"?bf(r,p):Ic(r,[],!0),Y.makeTensor(r,l,p)}function YS(r,l,u){const p=ur(r,u);return zi(r,l,p,u)}function mu(r,l="float32",u){return l=l||"float32",Lf(r),new bR(r,l,u)}function g7(r,l){const u=M(r,"x","cast");if(!aR(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},g={dtype:l};return Y.runKernelFunc(f=>f.cast(u,l),p,null,Lc,g)}const Le=z({cast_:g7});function y7(r){const l=M(r,"x","clone",null),u=()=>Y.makeTensorFromDataId(l.dataId,l.shape,l.dtype),p={x:l};return Y.runKernelFunc(u,p,null,Wm)}const pi=z({clone_:y7});function HS(r,l=!1){console.log(r.toString(l))}VS();const b7={buffer:mu,cast:Le,clone:pi,print:HS};LR(b7);function w7(r,l){const u=M(r,"x","reshape",null),p={x:u},g={shape:l},f=(I,S)=>(l=iR(l,u.size),Z(u.size===qt(l),()=>"new shape and old shape must have the same number of elements."),S([u]),I.reshape(u,l));return Y.runKernelFunc(f,p,null,jm,g)}const ie=z({reshape_:w7});function L7(r,l,u=!1,p=!1){let g=M(r,"a","matMul"),f=M(l,"b","matMul");[g,f]=mt(g,f),Z(g.rank>=2&&f.rank>=2&&g.rank===f.rank,()=>`Error in matMul: inputs must have the same rank of at least 2, got ranks ${g.rank} and ${f.rank}.`);const I=u?g.shape[g.rank-2]:g.shape[g.rank-1],S=p?f.shape[f.rank-1]:f.shape[f.rank-2],x=u?g.shape[g.rank-1]:g.shape[g.rank-2],v=p?f.shape[f.rank-2]:f.shape[f.rank-1],O=g.shape.slice(0,-2),C=f.shape.slice(0,-2),U=qt(O),G=qt(C);Z(jo(O,C),()=>`Error in matMul: outer dimensions (${O}) and (${C}) of Tensors with shapes ${g.shape} and ${f.shape} must match.`),Z(I===S,()=>`Error in matMul: inner shapes (${I}) and (${S}) of Tensors with shapes ${g.shape} and ${f.shape} and transposeA=${u} and transposeB=${p} must match.`);const ne=g.shape.slice(0,-2).concat([x,v]),te=u?ie(g,[U,I,x]):ie(g,[U,x,I]),oe=p?ie(f,[G,v,S]):ie(f,[G,S,v]),ge=(Ve,rt)=>(rt([te,oe]),Ve.batchMatMul(te,oe,u,p)),fe={a:te,b:oe},Ae={transposeA:u,transposeB:p},Te=Y.runKernelFunc(ge,fe,null,Sm,Ae);return ie(Te,ne)}const dn=z({matMul_:L7});function S7(r,l){const u=M(r,"x","transpose");if(l==null&&(l=u.shape.map((f,I)=>I).reverse()),Z(u.rank===l.length,()=>`Error in transpose: rank of input ${u.rank} must match length of perm ${l}.`),l.forEach(f=>{Z(f>=0&&f`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},g={perm:l};return Y.runKernelFunc(f=>f.transpose(u,l),p,null,df,g)}const Wt=z({transpose_:S7});function qS(r,l,u){if(Sc(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const p=ur(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 zi(r,l,p,u)}const jS={};hm(jS,{fromPixels:()=>T7,toPixels:()=>x7});let Ac;function I7(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,g=!1,f=!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)g=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)f=!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(g){const G=2;if(g&&r.readyState element.")}const S=yf(ES,Y.backendName);if(S!=null){const G={pixels:r},ne={numChannels:l};return Y.runKernel(ES,G,ne)}const[x,v]=g?[r.videoWidth,r.videoHeight]:[r.width,r.height];let O;I?O=r.getContext("2d").getImageData(0,0,x,v).data:p||u?O=r.data:(f||g)&&(Ac==null&&(Ac=document.createElement("canvas").getContext("2d")),Ac.canvas.width=x,Ac.canvas.height=v,Ac.drawImage(r,0,0,x,v),O=Ac.getImageData(0,0,x,v).data);let C;if(l===4)C=new Int32Array(O);else{const G=x*v;C=new Int32Array(G*l);for(let ne=0;ne4||f===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${f}`);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(g*p*4);for(let v=0;v1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${G}.`)}else if(u.dtype==="int32"&&(G<0||G>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${G}.`);f===1?(O[0]=G*S,O[1]=G*S,O[2]=G*S):O[U]=G*S}const C=v*4;x[C+0]=Math.round(O[0]),x[C+1]=Math.round(O[1]),x[C+2]=Math.round(O[2]),x[C+3]=Math.round(O[3])}if(l!=null){l.width=g,l.height=p;const v=l.getContext("2d"),O=new ImageData(x,g,p);v.putImageData(O,0,0)}return u!==r&&u.dispose(),x}const T7=z({fromPixels_:I7});function OR(r,l,u){const p=r.shape.length;Z(p===l.length,()=>`Error in slice${p}D: Length of begin ${l} must match the rank of the array (${p}).`),Z(p===u.length,()=>`Error in slice${p}D: Length of size ${u} must match the rank of the array (${p}).`);for(let g=0;g`Error in slice${p}D: begin[${g}] + size[${g}] (${l[g]+u[g]}) would overflow input.shape[${g}] (${r.shape[g]})`)}function Af(r,l,u){let p;const g=r.shape.length;typeof l=="number"?p=[l,...new Array(g-1).fill(0)]:l.length{Z(I!==-1,()=>"slice() does not support negative begin indexing.")});let f;return u==null?f=new Array(g).fill(-1):typeof u=="number"?f=[u,...new Array(g-1).fill(-1)]:u.lengthI>=0?I:(Z(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,f]}function A7(r){Cs().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}SR(A7);function ER(r,l){return Y.tidy(r,l)}function DR(r){const l=xf(r);l.forEach(u=>u.dispose())}function v7(r,l){let u=M(r,"a","add"),p=M(l,"b","add");[u,p]=mt(u,p);const g=(I,S)=>{const x=I.add(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,wc)}const Lt=z({add_:v7});function N7(r,l){let u=M(r,"a","floorDiv"),p=M(l,"b","floorDiv");[u,p]=mt(u,p);const g=(I,S)=>{const x=I.floorDiv(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,km)}const KS=z({floorDiv_:N7});function C7(r,l){let u=M(r,"a","div"),p=M(l,"b","div");if([u,p]=mt(u,p),u.dtype==="int32"&&p.dtype==="int32")return KS(u,p);const g=(S,x)=>{const v=S.realDivide(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,Om,I)}const Pe=z({div_:C7});function R7(r,l){let u=M(r,"a","mul"),p=M(l,"b","mul");[u,p]=mt(u,p);const g=(I,S)=>{const x=I.multiply(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Gm)}const ae=z({mul_:R7});function O7(r){const l=M(r,"x","abs"),u={x:l};return Y.runKernelFunc((p,g)=>(g([l]),l.dtype==="complex64"?p.complexAbs(l):p.abs(l)),u,null,Lm)}const Un=z({abs_:O7});function E7(r,l){for(let u=0;ur[f]);return[u,g]}function Zn(r,l){const u=l.map(p=>1);return D7(r,u,l)}function ds(r,l){if(E7(r,l))return null;const u=[];for(let p=0;pu.push(p)),u}function vc(r){return r.map((l,u)=>[u,l]).sort((l,u)=>l[1]-u[1]).map(l=>l[0])}function Kr(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 x=Xo((I-l+2*p)/u+1,g);return Z(Qt(x),()=>`The output # of columns (${x}) must be an integer. Change the stride and/or zero pad parameters`),[S,x]}function W7(r,l,u,p,g,f){g==null&&(g=FR(r,l,p));const I=r[0],S=r[1],x=r[2],v=Xo((I-l+2*g)/p+1,f);Z(Qt(v),()=>`The output # of depths (${v}) must be an integer. Change the stride and/or zero pad parameters`);const O=Xo((S-l+2*g)/p+1,f);Z(Qt(O),()=>`The output # of rows (${O}) must be an integer. Change the stride and/or zero pad parameters`);const C=Xo((x-l+2*g)/p+1,f);return Z(Qt(C),()=>`The output # of columns (${C}) must be an integer. Change the stride and/or zero pad parameters`),[v,O,C,u]}function FR(r,l,u,p=1){const g=Nc(l,p);return Math.floor((r[0]*(u-1)-u+g)/2)}function vf(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function XS(r){return typeof r=="number"?[r,r,r]:r}function Nc(r,l){return l<=1?r:r+(r-1)*(l-1)}function k7(r,l,u,p,g,f,I,S,x){let v,O,C;if(typeof r=="number"){const U=r===0?"VALID":"NUMBER";v={top:r,bottom:r,left:r,right:r,type:U};const G=_7([l,u],f,p,r,S);O=G[0],C=G[1]}else if(r==="same"){O=Math.ceil(l/p),C=Math.ceil(u/g);const U=Math.max(0,(O-1)*p+f-l),G=Math.max(0,(C-1)*g+I-u),ne=Math.floor(U/2),te=U-ne,oe=Math.floor(G/2),ge=G-oe;v={top:ne,bottom:te,left:oe,right:ge,type:"SAME"}}else if(r==="valid")v={top:0,bottom:0,left:0,right:0,type:"VALID"},O=Math.ceil((l-f+1)/p),C=Math.ceil((u-I+1)/g);else if(typeof r=="object"){const U=x==="channelsLast"?r[1][0]:r[2][0],G=x==="channelsLast"?r[1][1]:r[2][1],ne=x==="channelsLast"?r[2][0]:r[3][0],te=x==="channelsLast"?r[2][1]:r[3][1],oe=U===0&&G===0&&ne===0&&te===0?"VALID":"EXPLICIT";v={top:U,bottom:G,left:ne,right:te,type:oe},O=Xo((l-f+U+G)/p+1,S),C=Xo((u-I+ne+te)/g+1,S)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:v,outHeight:O,outWidth:C}}function F7(r,l,u,p,g,f,I,S,x,v,O){let C,U,G,ne;if(typeof r=="number"){const te=r===0?"VALID":"NUMBER";C={top:r,bottom:r,left:r,right:r,front:r,back:r,type:te};const oe=W7([l,u,p,1],S,1,g,r,O);U=oe[0],G=oe[1],ne=oe[2]}else if(r==="same"){U=Math.ceil(l/g),G=Math.ceil(u/f),ne=Math.ceil(p/I);const te=(U-1)*g+S-l,oe=(G-1)*f+x-u,ge=(ne-1)*I+v-p,fe=Math.floor(te/2),Ae=te-fe,Te=Math.floor(oe/2),Ve=oe-Te,rt=Math.floor(ge/2),vt=ge-rt;C={top:Te,bottom:Ve,left:rt,right:vt,front:fe,back:Ae,type:"SAME"}}else if(r==="valid")C={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},U=Math.ceil((l-S+1)/g),G=Math.ceil((u-x+1)/f),ne=Math.ceil((p-v+1)/I);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:C,outDepth:U,outHeight:G,outWidth:ne}}function Xo(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 Xr(r){const[l,u,p]=vf(r);return l===1&&u===1&&p===1}function Jr(r,l){return Xr(r)||Xr(l)}function Cc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function _R(r,l){const u=r[0].length;r.forEach((g,f)=>{Z(g.length===u,()=>`Error in concat${u}D: rank of tensors[${f}] must be the same as the rank of the rest (${u})`)}),Z(l>=0&&l`Error in concat${u}D: axis must be between 0 and ${u-1}.`);const p=r[0];r.forEach((g,f)=>{for(let I=0;I`Error in concat${u}D: Shape of tensors[${f}] (${g}) does not match the shape of the rest (${p}) along the non-concatenated axis ${f}.`)})}function WR(r,l){const u=r[0].slice();for(let p=1;p=1,()=>"Pass at least one tensor to concat");let u=Tf(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 x=ht(l,u[0].shape)[0],v=WR(u.map(U=>U.shape),x);if(qt(v)===0)return YS([],v);if(u=u.filter(U=>U.size>0),u.length===1)return u[0];const O=u.map(U=>U.shape);_R(O,x);const C=I.concat(u,x);return S(u),C},g=u,f={axis:l};return Y.runKernelFunc(p,g,null,Tm,f)}const yn=z({concat_:$7});function U7(r){const l=M(r,"x","sigmoid"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sigmoid(l);return g([f]),f},u,null,sf)}const JS=z({sigmoid_:U7});function B7(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const g=(S,x)=>{const[v,O]=Af(p,l,u);return OR(p,v,O),x([p]),S.slice(p,v,O)},f={x:p},I={begin:l,size:u};return Y.runKernelFunc(g,f,null,ef,I)}const Tt=z({slice_:B7});function M7(r,l,u){const p=M(r,"x","batchToSpaceND"),g=l.reduce((x,v)=>x*v);Z(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),Z(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),Z(p.shape[0]%g===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${g}`);const f=x=>x.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return Y.runKernelFunc(f,I,null,Im,S)}const ZS=z({batchToSpaceND_:M7});function P7(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const O=u.shape.slice();for(;O.length=0;O--)if(g[O]===l[O])f[O]=1;else if(u.shape[O]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=f.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(I.length===0)return pi(u);const S=O=>O.tile(u,f),x={x:u},v={shape:l,inputShape:g};return Y.runKernelFunc(S,x,null,xm,v)}const Rf=z({broadcastTo_:P7});function z7(r,l,u,p,g="NHWC",f=[1,1],I){const S=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let v=S,O=!1;S.rank===3&&(O=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2]])),Z(v.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${v.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&Z(Qt(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const C=g==="NHWC"?v.shape[3]:v.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(Jr(u,f),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${f}'`);const U=(oe,ge)=>{const fe=Cc(g),Ae=dr(v.shape,x.shape,u,f,p,I,!1,fe),Te=oe.conv2d(v,x,Ae);return ge([v,x]),Te},G={x:v,filter:x},ne={strides:u,pad:p,dataFormat:g,dilations:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,Am,ne);return O?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const QS=z({conv2d_:z7});function G7(r,l,u,p,g,f="NHWC",I){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,v=!1;l.rank===3&&(v=!0,x=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),Z(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const O=f==="NHWC"?S[3]:S[1],C=f==="NHWC"?x.shape[3]:x.shape[1];Z(O===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${u.shape[2]}.`),Z(C===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[3]}.`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const U=(oe,ge)=>{const fe=1,Ae=Cc(f),Te=dr(S,u.shape,p,fe,g,I,!1,Ae),Ve=oe.conv2dDerInput(x,u,Te);return ge([x,u]),Ve},G={dy:x,filter:u},ne={strides:p,pad:g,dataFormat:f,dimRoundingMode:I,inputShape:S},te=Y.runKernelFunc(U,G,null,vm,ne);return v?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const $R=z({conv2DBackpropInput_:G7});function V7(r,l,u,p,g){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let f=r,I=l,S=!1;l.rank===4&&(S=!0,I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),f=[1,r[0],r[1],r[2],r[3]]);const x=f[4],v=I.shape[4];Z(f.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${f.length}.`),Z(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),Z(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),Z(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),Z(v===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${v}) must match output depth for filter ${u.shape[4]}.`);const O=ne=>{const te=1,oe=fu(f,u.shape,p,te,g);return ne.conv3dDerInput(I,u,oe)},C={dy:I},U={pad:g},G=Y.runKernelFunc(O,C,null,QC,U);return S?ie(G,[G.shape[1],G.shape[2],G.shape[3],G.shape[4]]):G}const UR=z({conv3DBackpropInput_:V7});function Y7(r){const l=M(r,"x","cos"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cos(l);return g([l]),f},u,null,Nm)}const gu=z({cos_:Y7});function H7(r){const l=M(r,"x","cosh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cosh(l);return g([l]),f},u,null,Cm)}const eI=z({cosh_:H7});function q7(r,l=0,u=!1,p=!1){const g=M(r,"x","cumsum"),f=(x,v)=>{const O=ds([l],g.rank);let C=g;O!=null&&(C=Wt(g,O));const U=Kr(1,g.rank)[0];let G=x.cumsum(C,U,u,p);if(v([g]),O!=null){const ne=vc(O);G=Wt(G,ne)}return G},I={x:g},S={axis:l,exclusive:u,reverse:p};return Y.runKernelFunc(f,I,null,Rm,S)}const tI=z({cumsum_:q7});function At(r,l){const u=[];for(let p=0;p1)&&u.unshift(f)}return u}function it(r,l){const u=[],p=Math.max(r.length,l.length);for(let g=0;gI.equal(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,h2)}const nI=z({equal_:j7});function K7(r,l,u){const p=M(l,"a","where"),g=M(u,"b","where"),f=M(r,"condition","where","bool"),I=it(p.shape,g.shape),S=Rf(p,I),x=Rf(g,I);f.rank===1&&Z(f.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),f.rank!==1&&Zt(f.shape,x.shape,"Error in where: ");const v=(C,U)=>{const G=C.select(f,S,x);return U([f]),G},O={condition:f,t:S,e:x};return Y.runKernelFunc(v,O,null,Qm)}const Bn=z({where_:K7});function X7(r){const l=M(r,"x","zerosLike"),u={x:l};return Y.runKernelFunc(p=>p.zerosLike(l),u,null,ff)}const qe=z({zerosLike_:X7});function J7(r){const l=M(r,"x","exp"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.exp(l);return g([f]),f},u,null,Em)}const Mn=z({exp_:J7});function Z7(r,l=0){const u=null,p=M(r,"x","expandDims",u);Z(l<=p.rank,()=>"Axis must be <= rank of the tensor");const g=p.shape.slice();return l<0&&(Z(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),g.splice(l,0,1),ie(p,g)}const Os=z({expandDims_:Z7});function Q7(r,l){const u=null,p=M(r,"x","tile",u);Z(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const g=(x,v)=>{const O=x.tile(p,l);return v([p]),O},f=[p],I={x:p},S={reps:l};return Y.runKernelFunc(g,I,null,uf,S,f)}const Jo=z({tile_:Q7});function eJ(r,l,u,p="float32"){l==null&&(l=r);const g=mu([r,l],p),f=r<=l?r:l;for(let S=0;Sg.fill(r,l,u),{},null,p2,p)}function tJ(r){const l=M(r,"x","floor"),u={x:l};return Y.runKernelFunc(p=>p.floor(l),u,null,Dm)}const rI=z({floor_:tJ});function BR(r,l,u){const p=r.shape[u],g=[];let f=1,I=1;for(let S=0;S{const O=ht(u,p.shape)[0],C=BR(p,g,O),U=x.gather(p,ie(g,[g.size]),O);return v([p,g]),ie(U,C.outputShape)};return Y.runKernelFunc(S,f,null,Fm,I)}const oI=z({gather_:nJ});function sJ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.greater(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,g2)}const mi=z({greater_:sJ});function iJ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.greaterEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,_m)}const pr=z({greaterEqual_:iJ});function rJ(r){const l=M(r,"input","imag"),u=g=>g.imag(l),p={input:l};return Y.runKernelFunc(u,p,null,b2)}const yu=z({imag_:rJ});function oJ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=mt(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.maximum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Mm)}const aI=z({maximum_:oJ});function ke(r,l){if((Rs(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"&&Rs(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return zi(r,u,p,l)}function aJ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.less(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,I2)}const cI=z({less_:aJ});function cJ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.lessEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,x2)}const mr=z({lessEqual_:cJ});function lJ(r){const l=M(r,"x","log"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log(l);return g([l]),f},u,null,$m)}const Zr=z({log_:lJ});function hJ(r){const l=M(r,"x","log1p"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log1p(l);return g([l]),f},u,null,Um)}const lI=z({log1p_:hJ});function Of(r){return Y.customGrad(r)}function uJ(r){const l=M(r,"x","neg"),u={x:l};return Y.runKernelFunc(p=>p.neg(l),u,null,Vm)}const yt=z({neg_:uJ});function dJ(r,l=null,u=!1){const p=M(r,"x","max"),g=(S,x)=>{const v=ht(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=Wt(p,C),O=Kr(O.length,U.rank));const G=S.max(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Zn(ne.shape,ht(l,p.shape));ne=ie(ne,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={reductionIndices:l,keepDims:u};return Y.runKernelFunc(g,f,null,Bm,I)}const Zo=z({max_:dJ});function pJ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=mt(u,p);const g=(I,S)=>{const x=I.subtract(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,hf)}const Be=z({sub_:pJ});function mJ(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Le(p,"int32"));const g=(S,x)=>{x([p]);const v=ht(l,p.shape),O=ds(v,p.rank);let C=v,U=p;O!=null&&(U=Wt(p,O),C=Kr(C.length,p.rank));let G=S.sum(U,C);if(u){const ne=Zn(G.shape,v);G=ie(G,ne)}return G},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,of,I)}const Fe=z({sum_:mJ});function fJ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),g=ht(l,p.shape),f=Zo(p,g,!0),I=Be(p,f),S=Mn(I),x=Fe(S,g),v=Zr(x),O=Lt(ie(f,v.shape),v);if(u){const C=Zn(O.shape,g);return ie(O,C)}return O}const hI=z({logSumExp_:fJ});function gJ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");it(u.shape,p.shape);const g={a:u,b:p};return Y.runKernelFunc(f=>f.logicalAnd(u,p),g,null,T2)}const Qo=z({logicalAnd_:gJ});function yJ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return Y.runKernelFunc(p=>p.logicalNot(l),u,null,A2)}const uI=z({logicalNot_:yJ});function Es(r,l="float32"){if(l==="complex64"){const p=Es(r,"float32"),g=Es(r,"float32");return Pi(p,g)}const u=Ko(qt(r),l);return Y.makeTensor(u,r,l)}function Gi(r,l="float32"){if(l==="complex64"){const p=Gi(r,"float32"),g=Es(r,"float32");return Pi(p,g)}const u=wf(qt(r),l);return Y.makeTensor(u,r,l)}function bJ(r,l=null,u=!1){const p=M(r,"x","mean"),g=ht(l,p.shape),f=kR(p.shape,g),I=f[1],S=qt(I),x=Of(v=>{const O=ke(S),C=O.dtype===v.dtype?v:Le(v,O.dtype),U=Pe(C,O),G=Fe(U,l,u),ne=te=>{const oe=v.shape.slice();g.forEach(Ae=>{oe[Ae]=1});const ge=ie(te,oe),fe=Pe(ae(ge,Gi(v.shape,"float32")),S);return fe};return{value:G,gradFunc:ne}});return x(p)}const dI=z({mean_:bJ});function wJ(r,l=null,u=!1){const p=M(r,"x","min"),g=(S,x)=>{const v=ht(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=Wt(p,C),O=Kr(O.length,p.rank));const G=S.min(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Zn(ne.shape,v);ne=ie(G,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,Pm,I)}const Ef=z({min_:wJ});function LJ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=mt(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.minimum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,zm)}const pI=z({minimum_:LJ});function SJ(r){const l=M(r,"x","square"),u={},p=[l],g=[];return Y.runKernelFunc((f,I)=>(I([l]),f.square(l)),{x:l},null,"Square",u,p,g)}const ut=z({square_:SJ});function IJ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.notEqual(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,F2)}const mI=z({notEqual_:IJ});function xJ(r){const l=M(r,"input","real"),u=g=>g.real(l),p={input:l};return Y.runKernelFunc(u,p,null,z2)}const Rc=z({real_:xJ});function TJ(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 g=(S,x)=>(x([p]),S.pad(p,l,u)),f={paddings:l,constantValue:u},I={x:p};return Y.runKernelFunc(g,I,null,Ym,f)}const fI=z({pad_:TJ});function AJ(r,l,u){const p=M(r,"x","spaceToBatchND");Z(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),Z(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),Z(p.shape.reduce((S,x,v)=>v>0&&v<=l.length?S&&(x+u[v-1][0]+u[v-1][1])%l[v-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const g=S=>S.spaceToBatchND(p,l,u),f={x:p},I={blockShape:l,paddings:u};return Y.runKernelFunc(g,f,null,af,I)}const gI=z({spaceToBatchND_:AJ});function vJ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=mt(u,p);const g={a:u,b:p},f=(I,S)=>{const x=I.pow(u,p);return S([u,p,x]),x};return Y.runKernelFunc(f,g,null,Hm)}const ea=z({pow_:vJ});function Qr(r,l){Sc(r);const u=ur(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return zi(r,p,u,l)}function Df(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const g=()=>{const I=r===l,S=r1;if(I||S||x)return Es([0],p);const v=Math.abs(Math.ceil((l-r)/u)),O=Ko(v,p);l(f([l]),l.dtype==="bool"?Le(l,"int32"):g.relu(l)),p={x:l};return Y.runKernelFunc(u,p,null,qm)}const bu=z({relu_:NJ});function CJ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ht(l,u.shape);if(u.rank===0)return pi(u);const x=I.reverse(u,S);return ie(x,u.shape)},g={x:u},f={dims:l};return Y.runKernelFunc(p,g,null,Jm,f)}const Oc=z({reverse_:CJ});function RJ(r){const l=M(r,"x","rsqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.rsqrt(l);return g([l]),f},u,null,Zm)}const yI=z({rsqrt_:RJ});function OJ(r){const l=M(r,"x","sin"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sin(l);return g([l]),f},u,null,tf)}const bI=z({sin_:OJ});function EJ(r){const l=M(r,"x","sinh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sinh(l);return g([l]),f},u,null,nf)}const wI=z({sinh_:EJ});function DJ(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=r.as2D(g,p),I=u.fft(f);return I.reshape(r.shape)},l,null,d2)}const wu=z({fft_:DJ});function kJ(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=ie(r,[g,p]),I=u.ifft(f);return ie(I,r.shape)},l,null,y2)}const Ec=z({ifft_:kJ});function FJ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const g=ie(r,[u,l]);p=Ec(g)}else{const g=[u,2*(l-1)],f=ie(Rc(r),[u,l]),I=ie(yu(r),[u,l]),S=Oc(Tt(f,[0,1],[u,l-2]),1),x=ae(Oc(Tt(I,[0,1],[u,l-2]),1),ke(-1)),v=yn([f,S],1),O=yn([I,x],1),C=ie(Pi(v,O),[g[0],g[1]]);p=Ec(C)}if(p=Rc(p),r.rank===3&&r.shape[0]!==0){const g=p,f=r.shape[0];p=ie(p,[f,p.shape[0]/f,p.shape[1]]),g.dispose()}return p}const LI=z({irfft_:FJ});function MR(r,l,u=0){let p=[];if(typeof l=="number")Z(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const g=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);Z(g<=1,()=>"There should be only one negative value in split array.");const f=l.indexOf(-1);if(f!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[f]=r.shape[u]-I}Z(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 _J(r,l,u=0){const p=M(r,"x","split"),g=(S,x)=>{const v=ht(u,p.shape)[0],O=MR(p,l,v);return S.split(p,O,v)},f={x:p},I={numOrSizeSplits:l,axis:u};return Y.runKernelFunc(g,f,null,cf,I)}const eo=z({split_:_J});function WJ(r,l){Z(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 g;if(l!=null&&l0),te=r.shape.map(oe=>oe);te[r.shape.length-1]=l,g=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,g=yn([r,Es(ne)],r.shape.length-1),u=l}else g=r;const f=qe(g),I=ie(Pi(g,f),[p,u]),S=wu(I),x=Math.floor(u/2)+1,v=Rc(S),O=yu(S),C=eo(v,[x,u-x],v.shape.length-1),U=eo(O,[x,u-x],O.shape.length-1),G=g.shape.slice();return G[g.shape.length-1]=x,ie(Pi(C[0],U[0]),G)}const Lu=z({rfft_:WJ});function $J(r){const l=M(r,"x","sqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sqrt(l);return g([l]),f},u,null,rf)}const ps=z({sqrt_:$J});function UJ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(S,x)=>{const v=S.squaredDifference(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,lf,I)}const SI=z({squaredDifference_:UJ});function BJ(r,l){const u=M(r,"x","squeeze");return ie(u,rR(u.shape,l).newShape)}const II=z({squeeze_:BJ});function MJ(r,l=0){const u=Tf(r,"tensors","stack");if(Z(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Os(u[0],l);const p=u[0].rank,g=u[0].shape,f=u[0].dtype;Z(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{Zt(g,S.shape,"All tensors passed to stack must have matching shapes"),Z(f===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Os(S,l));return yn(I,l)}const Vs=z({stack_:MJ});function PJ(r,l=0){const u=M(r,"x","step"),p={x:u},g={alpha:l};return Y.runKernelFunc(f=>f.step(u,l),p,null,gf,g)}const ta=z({step_:PJ});function na(r,l,u){if(Sc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=ur(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 zi(r,l,p,u)}function zJ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),g=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(u),()=>"numSegments must be of dtype int");const f={x:p,segmentIds:g},I={numSegments:u},S=(x,v)=>{const O=x.unsortedSegmentSum(p,g,u);return v([g]),O};return Y.runKernelFunc(S,f,null,mf,I)}const xI=z({unsortedSegmentSum_:zJ});function GJ(r,l=0){const u=M(r,"x","unstack");Z(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},g={axis:l},f=I=>I.unstack(u,l);return Y.runKernelFunc(f,p,null,pf,g)}const Su=z({unstack_:GJ});function VJ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const g=PR(r,l,u);let f=g.shape;if(p){const I=ht(u,r.shape);f=Zn(g.shape,I)}return ie(g,f)}function PR(r,l,u=null){if(r.rank===0)return Un(r);if(r.rank!==1&&u===null)return PR(ie(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return Fe(Un(r),u);if(l===Infinity)return Zo(Un(r),u);if(l===-Infinity)return Ef(Un(r),u);if(l==="euclidean"||l===2)return ps(Fe(ea(Un(r),ke(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return Zo(Fe(Un(r),u[0]),u[1]-1);if(l===Infinity)return Zo(Fe(Un(r),u[1]),u[0]);if(l===-Infinity)return Ef(Fe(Un(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return ps(Fe(ut(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const kf=z({norm_:VJ});function zR(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Ff(r,l,u){const p=1-r%2,g=new Float32Array(r);for(let f=0;f`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const v=f==="NHWC"?S.shape[3]:S.shape[1],O=f==="NHWC"?x.shape[3]:x.shape[1];Z(v===u[2],()=>`Error in conv2dDerFilter: depth of input ${v}) must match input depth in filter (${u[2]}.`),Z(O===u[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${u[3]}).`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const C=ne=>{const te=1,oe=Cc(f),ge=dr(S.shape,u,p,te,g,I,!1,oe);return ne.conv2dDerFilter(S,x,ge)},U={x:S,dy:x},G={strides:p,pad:g,dataFormat:f,dimRoundingMode:I};return Y.runKernelFunc(C,U,null,XC,G)}const _f=z({conv2DBackpropFilter_:YJ});function HJ(r,l,u,p){let g=r;r.rank===3&&(g=ie(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let f=l;f.rank===3&&(f=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=x=>x.depthwiseConv2DDerFilter(g,f,p),S={x:g,dy:f};return Y.runKernelFunc(I,S,null,n2)}const GR=z({depthwiseConv2dNativeBackpropFilter_:HJ});function qJ(r,l,u,p){let g=l,f=!1;l.rank===3&&(f=!0,g=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=v=>v.depthwiseConv2DDerInput(g,u,p),S={dy:g},x=Y.runKernelFunc(I,S,null,s2);return f?ie(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const VR=z({depthwiseConv2dNativeBackpropInput_:qJ});function jJ(r){return Ff(r,.54,.46)}const YR=z({hammingWindow_:jJ});function KJ(r){return Ff(r,.5,.5)}const Wf=z({hannWindow_:KJ});function XJ(r,l,u,p=!1,g=0){let f=0;const I=[];for(;f+l<=r.size;)I.push(Tt(r,f,l)),f+=u;if(p)for(;f`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),Z(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${v},4] but had shape ${S.shape}.`),Z(x.rank===1&&x.shape[0]===v,()=>`Error in cropAndResize: boxInd must be have size [${v}] but had shape ${S.shape}.`),Z(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),Z(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),Z(g==="bilinear"||g==="nearest",()=>`method must be bilinear or nearest, but was ${g}`);const O=ne=>ne.cropAndResize(I,S,x,p,g,f),C={image:I,boxes:S,boxInd:x},U={method:g,extrapolationValue:f,cropSize:p},G=Y.runKernelFunc(O,C,null,e2,U);return G}const qR=z({cropAndResize_:ZJ});function QJ(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=Y.runKernel(m2,u,{});return p}const jR=z({flipLeftRight_:QJ});function e9(r,l,u=0,p=.5){const g=M(r,"image","rotateWithOffset","float32");Z(g.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${g.rank}.`);const f={image:g},I={radians:l,fillValue:u,center:p},S=Y.runKernel(tR,f,I);return S}const KR=z({rotateWithOffset_:e9});function Ys(r,l,u,p,g,f){p==null&&(p=.5),g==null&&(g=Number.NEGATIVE_INFINITY),f==null&&(f=0);const I=r.shape[0];return u=Math.min(u,I),Z(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),Z(0<=f&&f<=1,()=>`softNmsSigma must be in [0, 1], but was '${f}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f}}function t9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Ys(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:p,scoreThreshold:g};return Y.runKernelFunc(v=>v.nonMaxSuppression(f,I,u,p,g),{boxes:f,scores:I},null,_2,x)}const XR=z({nonMaxSuppression_:t9});function JR(r,l,u){const p=n9(r,l,u),g=p<0?-(p+1):p;r.splice(g,0,l)}function n9(r,l,u){return i9(r,l,u||s9)}function s9(r,l){return r>l?1:r>>1);const S=u(l,r[f]);S>0?p=f+1:(g=f,I=!S)}return I?p:-p-1}function ZR(r,l,u,p,g){return TI(r,l,u,p,g,0).selectedIndices}function QR(r,l,u,p,g,f){return TI(r,l,u,p,g,0,!1,f,!0)}function eO(r,l,u,p,g,f){return TI(r,l,u,p,g,f,!0)}function TI(r,l,u,p,g,f,I=!1,S=!1,x=!1){const v=[];for(let oe=0;oeg&&v.push({score:l[oe],boxIndex:oe,suppressBeginIndex:0});v.sort(tO);const O=f>0?-.5/f:0,C=[],U=[];for(;C.length0;){const oe=v.pop(),{score:ge,boxIndex:fe,suppressBeginIndex:Ae}=oe;if(ge=Ae;--Ve){const rt=r9(r,fe,C[Ve]);if(rt>=p){Te=!0;break}if(oe.score=oe.score*o9(p,O,rt),oe.score<=g)break}oe.suppressBeginIndex=C.length,Te||(oe.score===ge?(C.push(fe),U.push(oe.score)):oe.score>g&&JR(v,oe,tO))}const G=C.length,ne=u-G;S&&ne>0&&(C.push(...new Array(ne).fill(0)),U.push(...new Array(ne).fill(0)));const te={selectedIndices:Qr(C,"int32")};return I&&(te.selectedScores=Qr(U,"float32")),x&&(te.validOutputs=ke(G,"int32")),te}function r9(r,l,u){const p=r.subarray(l*4,l*4+4),g=r.subarray(u*4,u*4+4),f=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),x=Math.max(p[1],p[3]),v=Math.min(g[0],g[2]),O=Math.min(g[1],g[3]),C=Math.max(g[0],g[2]),U=Math.max(g[1],g[3]),G=(S-f)*(x-I),ne=(C-v)*(U-O);if(G<=0||ne<=0)return 0;const te=Math.max(f,v),oe=Math.max(I,O),ge=Math.min(S,C),fe=Math.min(x,U),Ae=Math.max(ge-te,0)*Math.max(fe-oe,0);return Ae/(G+ne-Ae)}function o9(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function tO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function a9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Ys(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x=await Promise.all([f.data(),I.data()]),v=x[0],O=x[1],C=ZR(v,O,u,p,g);return f!==r&&f.dispose(),I!==l&&I.dispose(),C}const nO=a9;function c9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=Ys(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v={boxes:I,scores:S},O={maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f},C=Y.runKernel($2,v,O);return{selectedIndices:C[0],selectedScores:C[1]}}const sO=z({nonMaxSuppressionWithScore_:c9});async function l9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=Ys(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v=await Promise.all([I.data(),S.data()]),O=v[0],C=v[1],U=eO(O,C,u,p,g,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),U}const iO=l9;function h9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=Ys(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,U={boxes:I,scores:S},G={maxOutputSize:v,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:f},ne=Y.runKernel(W2,U,G);return{selectedIndices:ne[0],validOutputs:ne[1]}}const rO=z({nonMaxSuppressionPadded_:h9});async function u9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=Ys(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[U,G]=await Promise.all([I.data(),S.data()]),ne=QR(U,G,v,O,C,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const oO=u9;function d9(r,l,u=!1){const p=M(r,"images","resizeBilinear");Z(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x=(U,G)=>(G([g]),U.resizeBilinear(g,I,S,u)),v={images:g},O={alignCorners:u,size:l},C=Y.runKernelFunc(x,v,null,Xm,O);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const aO=z({resizeBilinear_:d9});function p9(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");Z(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x={images:g},v={alignCorners:u,size:l},O=(U,G)=>(G([g]),U.resizeNearestNeighbor(g,I,S,u)),C=Y.runKernelFunc(O,x,null,Km,v);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const cO=z({resizeNearestNeighbor_:p9});function m9(r,l,u){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");Z(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const g=p.shape,[f,I]=p.shape.slice(-2);if(!(l<=f))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${f}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=f),u<0&&(u=I);const S=ie(Df(0,f,1,"int32"),[-1,1]),x=Df(0,I,1,"int32"),v=Be(S,x),O=Qo(mr(v,ke(+l,"int32")),pr(v,ke(-u,"int32"))),C=Es([f,I],p.dtype);return ie(Vs(Su(ie(p,[-1,f,I])).map(U=>Bn(O,U,C))),g)}const lO=z({bandPart_:m9});function f9(r){let l;if(Array.isArray(r)){l=!1,Z(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const g=r[0].shape[0];for(let f=1;f`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[f].shape[0]} vs. ${g})`)}else l=!0,r=eo(r,r.shape[0],0).map(g=>II(g,[0]));Z(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 g=0;g{let f=p[g];if(g>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 uO(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,v)=>x*v),p=Su(ie(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),g=[],f=[];p.forEach(x=>{const[v,O]=uO(x,l);g.push(v),f.push(O)});const I=ie(Vs(g,0),r.shape),S=ie(Vs(f,0),r.shape);return[I,S]}}function uO(r,l=!1){return Y.tidy(()=>{Z(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 g=sI(u),f=pi(r);const I=na([[1]],[1,1]);let S=pi(I);const x=u>=p?p:u;for(let v=0;v{const G=Tt(f,[v,v],[u-v,1]),ne=kf(G),te=Tt(f,[v,v],[1,1]),oe=Bn(mi(te,0),na([[-1]]),na([[1]])),ge=Be(te,ae(oe,ne)),fe=Pe(G,ge);fe.shape[0]===1?S=pi(I):S=yn([I,Tt(fe,[1,0],[fe.shape[0]-1,fe.shape[1]])],0);const Ae=yt(Pe(dn(oe,ge),ne)),Te=Tt(f,[v,0],[u-v,p]),Ve=ae(Ae,S),rt=Wt(S);if(v===0)f=Be(Te,dn(Ve,dn(rt,Te)));else{const Kt=Be(Te,dn(Ve,dn(rt,Te)));f=yn([Tt(f,[0,0],[v,p]),Kt],0)}const vt=Wt(Ve),$t=Tt(g,[0,v],[u,g.shape[1]-v]);if(v===0)g=Be($t,dn(dn($t,S),vt));else{const Kt=Be($t,dn(dn($t,S),vt));g=yn([Tt(g,[0,0],[u,v]),Kt],1)}return[S,f,g]}),DR([O,C,U])}return!l&&u>p&&(g=Tt(g,[0,0],[u,p]),f=Tt(f,[0,0],[p,p])),[g,f]})}const dO=z({qr_:g9});var jt;(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"})(jt||(jt={}));function y9(r,l,u=jt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let g=null;l!=null&&(g=M(l,"weights","computeWeightedLoss"));const f=g==null?p:ae(p,g);if(u===jt.NONE)return f;if(u===jt.SUM)return Fe(f);if(u===jt.MEAN){if(g==null)return dI(f);{const I=p.size/g.size,S=Pe(Fe(f),Fe(g));return I>1?Pe(S,ke(I)):S}}if(u===jt.SUM_BY_NONZERO_WEIGHTS){if(g==null)return Pe(Fe(f),ke(p.size));{const I=ae(g,Gi(p.shape)),S=Le(Fe(mI(I,ke(0))),"float32");return Pe(Fe(f),S)}}throw Error(`Unknown reduction: ${u}`)}const xn=z({computeWeightedLoss_:y9});function b9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","absoluteDifference"),f=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),Zt(g.shape,f.shape,"Error in absoluteDifference: ");const S=Un(Be(g,f));return xn(S,I,p)}const pO=z({absoluteDifference_:b9});function w9(r,l,u,p,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),Zt(f.shape,I.shape,"Error in cosineDistance: ");const x=ke(1),v=Be(x,Fe(ae(f,I),u,!0));return xn(v,S,g)}const mO=z({cosineDistance_:w9});function L9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"labels","hingeLoss");const f=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),Zt(g.shape,f.shape,"Error in hingeLoss: ");const S=ke(1);g=Be(ae(ke(2),g),S);const x=bu(Be(S,ae(g,f)));return xn(x,I,p)}const fO=z({hingeLoss_:L9});function S9(r,l,u,p=1,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),Zt(f.shape,I.shape,"Error in huberLoss: ");const x=ke(p),v=Un(Be(I,f)),O=pI(v,x),C=Be(v,O),U=Lt(ae(ke(.5),ut(O)),ae(x,C));return xn(U,S,g)}const gO=z({huberLoss_:S9});function I9(r,l,u,p=1e-7,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),Zt(f.shape,I.shape,"Error in logLoss: ");const x=ke(1),v=ke(p),O=yt(ae(f,Zr(Lt(I,v)))),C=ae(Be(x,f),Zr(Lt(Be(x,I),v))),U=Be(O,C);return xn(U,S,g)}const yO=z({logLoss_:I9});function x9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","meanSquaredError"),f=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),Zt(g.shape,f.shape,"Error in meanSquaredError: ");const S=SI(g,f);return xn(S,I,p)}const bO=z({meanSquaredError_:x9});function T9(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const g=bu(p),f=ae(p,u),I=lI(Mn(yt(Un(p))));return Lt(Be(g,f),I)}function A9(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),Zt(f.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(.5);f=Lt(ae(f,Be(O,v)),ae(C,v))}const x=T9(f,I);return xn(x,S,g)}const wO=z({sigmoidCrossEntropy_:A9});function v9(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=Of((g,f,I)=>{const S=!0,x=hI(f,[u],S),v=Be(Le(f,"float32"),x);I([g,v]);const O=yt(ae(v,g)),C=Fe(O,[u]),U=(G,ne)=>{const[te,oe]=ne,ge=Zn(G.shape,[u]);return[ae(ie(G,ge),Be(Le(te,"float32"),Mn(oe))),ae(ie(G,ge),Be(Mn(oe),Le(te,"float32")))]};return{value:C,gradFunc:U}});return p(r,l)}function N9(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),Zt(f.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(f.shape[1]);f=Lt(ae(f,Be(O,v)),Pe(v,C))}const x=v9(f,I);return xn(x,S,g)}const LO=z({softmaxCrossEntropy_:N9});const TTe={fft:wu,ifft:Ec,rfft:Lu,irfft:LI},RTe={hammingWindow:YR,hannWindow:Wf,frame:$f,stft:HR},SO={flipLeftRight:jR,resizeNearestNeighbor:cO,resizeBilinear:aO,rotateWithOffset:KR,cropAndResize:qR,nonMaxSuppression:XR,nonMaxSuppressionAsync:nO,nonMaxSuppressionWithScore:sO,nonMaxSuppressionWithScoreAsync:iO,nonMaxSuppressionPadded:rO,nonMaxSuppressionPaddedAsync:oO},VTe={bandPart:lO,gramSchmidt:hO,qr:dO},eAe={absoluteDifference:pO,computeWeightedLoss:xn,cosineDistance:mO,hingeLoss:fO,huberLoss:gO,logLoss:yO,meanSquaredError:bO,sigmoidCrossEntropy:wO,softmaxCrossEntropy:LO};const IO=1.7580993408473768,xO=1.0507009873554805;const TO={kernelName:Lm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ta(Le(u,"float32"),-1))}}};const AO={kernelName:kC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ut(Le(u,"float32")),g=ps(Be(ke(1),p));return yt(Pe(r,g))}}}};const vO={kernelName:FC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Be(ut(Le(u,"float32")),1));return Pe(r,p)}}}};const NO={kernelName:wc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=At(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=At(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,p.shape)};return{a:f,b:I}}};const CO={kernelName:_C,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,g)=>{u[g]=()=>r.clone()}),u}};const RO={kernelName:WC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>qe(u)}}};const OO={kernelName:$C,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>qe(u)}}};const EO={kernelName:UC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ps(Be(ke(1),ut(Le(u,"float32")))))}}};const DO={kernelName:BC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Lt(ke(1),ut(Le(u,"float32"))));return Pe(r,p)}}}};const kO={kernelName:zC,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Lt(ut(u),ut(p));let x=ae(r,Pe(p,S));const v=At(u.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,u.shape)},I=()=>{const S=Lt(ut(u),ut(p));let x=yt(ae(r,Pe(u,S)));const v=At(p.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,p.shape)};return{a:f,b:I}}};const FO={kernelName:MC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(ut(Le(u,"float32")),1))}}};const _O={kernelName:PC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(ke(1),ut(Le(u,"float32"))))}}};function C9(r,l,u,p,g=[1,1,1],f,I){const S=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let v=S,O=x,C=!1;x.rank===4&&(C=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),O=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(v.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${v.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(Jr(p,g),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${g}'`),I!=null&&Z(Qt(f),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const U=oe=>{const ge=Cf(O.shape,u,p,g,f,I);return oe.avgPool3dBackprop(v,O,ge)},G={dy:v,input:O},ne={filterSize:u,strides:p,dilations:g,pad:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,HC,ne);return C?ie(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const WO=z({avgPool3dBackprop_:C9});const $O={kernelName:YC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,dilations:I,pad:S,dimRoundingMode:x}=u,v=I==null?[1,1,1]:I;return{x:()=>WO(r,p,g,f,v,S,x)}}};function R9(r,l,u,p,g){const f=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");Z(I.rank===f.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${f.rank})`);let S=I,x=f,v=!1;I.rank===3&&(v=!0,S=ie(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=ie(f,[1,f.shape[0],f.shape[1],f.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const O=ne=>{const te=Nf(S.shape,u,p,1,g);return ne.avgPoolBackprop(x,S,te)},C={dy:x,input:S},U={filterSize:u,strides:p,pad:g},G=Y.runKernelFunc(O,C,null,VC,U);return v?ie(G,[G.shape[1],G.shape[2],G.shape[3]]):G}const UO=z({avgPoolBackprop_:R9});const BO={kernelName:GC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,pad:I}=u;return{x:()=>UO(r,p,g,f,I)}}};const MO={kernelName:Sm,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,g]=l,{transposeA:f,transposeB:I}=u;return!f&&!I?{a:()=>dn(r,g,!1,!0),b:()=>dn(p,r,!0,!1)}:!f&&I?{a:()=>dn(r,g,!1,!1),b:()=>dn(r,p,!0,!1)}:f&&!I?{a:()=>dn(g,r,!1,!0),b:()=>dn(p,r,!1,!1)}:{a:()=>dn(g,r,!0,!0),b:()=>dn(r,p,!0,!0)}}};const PO={kernelName:Im,gradFunc:(r,l,u)=>{const{blockShape:p,crops:g}=u;return{x:()=>gI(r,p,g)}}};const zO={kernelName:xm,gradFunc:(r,l,u)=>{const p=u,g=p.inputShape,f=p.shape,I=Array.from(f);for(let x=g.length-1;x>=0;x--)if(g[x]===f[x])I[x]=1;else if(g[x]!==1)throw new Error(`broadcastTo(): [${g}] cannot be broadcast to [${f}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>Fe(r,S,!0)}}};const GO={kernelName:Lc,gradFunc:r=>({x:()=>r.clone()})};const VO={kernelName:qC,gradFunc:r=>({x:()=>qe(r)})};const YO={kernelName:jC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:g,clipValueMax:f}=u;return{x:()=>Bn(Qo(pr(p,g),mr(p,f)),r,qe(r))}}};const HO={kernelName:Tm,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(x=>x.shape),{axis:g}=u,f=ht(g,l[0].shape)[0],I=p.map(x=>x[f]),S=eo(r,I,f);return S.map(x=>()=>x)}};const qO={kernelName:Am,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{dilations:f,strides:I,pad:S,dataFormat:x}=u;return Z(Xr(f),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${f}'`),{x:()=>$R(p.shape,r,g,I,S,x),filter:()=>_f(p,r,g.shape,I,S,x)}}};const jO={kernelName:vm,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{strides:f,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>QS(r,g,f,I,S,1,x),filter:()=>_f(r,p,g.shape,f,I,S,x)}}};function O9(r,l,u,p,g){let f=r;r.rank===4&&(f=ie(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(f.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${f.shape}.`),Z(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),Z(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),Z(f.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${f.shape[4]}) must match input depth in filter (${u[3]}.`),Z(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=O=>{const C=1,U=fu(f.shape,u,p,C,g);return O.conv3dDerFilter(f,I,U)},x={x:f,y:I},v={strides:p,pad:g};return Y.runKernelFunc(S,x,null,ZC,v)}const KO=z({conv3DBackpropFilter_:O9});const XO={kernelName:JC,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f}=u;Z(Xr(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:()=>UR(I.shape,r,S,g,f),filter:()=>KO(I,r,S.shape,g,f)}}};const JO={kernelName:Nm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(yt(bI(Le(u,"float32"))),r)}}};const ZO={kernelName:Cm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(wI(Le(u,"float32")),r)}}};const QO={kernelName:Rm,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:g,exclusive:f,reverse:I}=u;return{x:()=>{const S=ds([g],p.rank);let x=tI(r,g,f,!I);return S!=null&&(x=Wt(x,S)),x}}}};const e1={kernelName:t2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f,dimRoundingMode:I}=u,S=p==null?[1,1]:p;Z(Xr(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,v]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(v.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${v.rank}.`),Z(x.shape[3]===v.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${v.shape[2]}.`),Z(Jr(g,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${g} and dilations '${S}'.`),I!=null&&Z(Qt(f),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=dr(x.shape,v.shape,g,S,f,I,!0);return{x:()=>VR(x.shape,r,v,O),filter:()=>GR(x,r,v.shape,O)}}};const t1={kernelName:i2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,f={x:p,filter:g,dy:r},I={x:p,filter:g,dy:r};return{x:()=>Y.runKernel(r2,f,u),filter:()=>Y.runKernel(o2,I,u)}}};const n1={kernelName:Om,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=At(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=ut(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const s1={kernelName:a2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=f=>f.eluDer(r,u),g={dy:r,y:u};return{x:()=>Y.runKernelFunc(p,g,null,c2)}}};const i1={kernelName:l2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(Mn(yt(ut(u))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,p)}}};const r1={kernelName:Em,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,u)}}};const o1={kernelName:u2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Mn(u))}}};const a1={kernelName:Dm,gradFunc:r=>({x:()=>qe(r)})};const c1={kernelName:km,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=At(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=ut(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const l1={kernelName:f2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[g,f,I,S]=l,x=S==null?ke(1):S,v=At(f.shape,g.shape),O=[];if(f.rank===1){for(let Te=0;Tef.rank===1?ie(ae(ae(r,Jo(ie(G,[1,1,1,f.shape[0]]),O)),x),g.shape):ie(ae(ae(r,G),x),g.shape),oe=()=>{let Te=ae(ae(G,ke(-1)),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},ge=()=>{let Te=ae(ae(ne,C),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},fe=()=>{const Te=ae(C,G);let Ve=ae(r,Te);return f.rank===1&&(Ve=Fe(Ve,v)),ie(Ve,f.shape)},Ae=()=>{let Te=r;return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)};return{x:te,mean:oe,variance:ge,scale:fe,offset:Ae}}};const d1={kernelName:Fm,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,g]=l,{axis:f}=u,I=ht(f,p.shape)[0],S=()=>{const x=p.shape,v=g.size,O=x.slice(0,I),C=O.length,U=x.slice(f,x.length).slice(1),G=U.length,ne=h1(0,C),te=h1(C+1,C+1+G),oe=u1([O,[v],U]),ge=ie(r,oe),fe=ie(g,[v]),Ae=u1([[C],ne,te]),Te=Wt(ge,Ae);let Ve=xI(Te,fe,p.shape[I]);const rt=vc(Ae);return Ve=Wt(Ve,rt),Ve};return{x:S,indices:()=>g}}};function h1(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>qe(u),b:()=>qe(p)}}};const m1={kernelName:Wm,gradFunc:r=>({x:()=>Le(r,"float32")})};const f1={kernelName:w2,gradFunc:r=>({x:()=>qe(r)})};const g1={kernelName:L2,gradFunc:r=>({x:()=>qe(r)})};const y1={kernelName:S2,gradFunc:r=>({x:()=>qe(r)})};const b1={kernelName:Um,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(u,1))}}};const w1={kernelName:$m,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Le(u,"float32"))}}};const L1={kernelName:v2,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:g}=u;return{logits:()=>{const f=!0,I=Mn(p);return Be(r,ae(Fe(r,g,f),I))}}}};function E9(r,l,u,p=5,g=1,f=1,I=.5){const S=O=>O.LRNGrad(u,r,l,p,g,f,I),x={x:r,y:l,dy:u},v={depthRadius:p,bias:g,alpha:f,beta:I};return Y.runKernelFunc(S,x,null,C2,v)}const S1=z({localResponseNormalizationBackprop_:E9});const I1={kernelName:N2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{depthRadius:f,bias:I,alpha:S,beta:x}=u;return{x:()=>S1(p,g,r,f,I,S,x)}}};function Uf(r,l,u,p,g){return l.rank{const f=ae(r,Le(nI(u,l),r.dtype));return g==null?f:Wt(f,g)}}}const AI={kernelName:Bm,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:g}=p,[f,I]=l,S=ht(g,f.shape),x=ds(S,f.rank),v=Uf(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=Wt(O)),O}}}};const x1={kernelName:Mm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(pr(u,p),"float32")),f=()=>ae(r,Le(cI(u,p),"float32"));return{a:g,b:f}}};function D9(r,l,u,p,g,f=[1,1,1],I,S){const x=M(r,"dy","maxPool3dBackprop"),v=M(l,"input","maxPool3dBackprop"),O=M(u,"output","maxPool3dBackprop");let C=x,U=v,G=O,ne=!1;v.rank===4&&(ne=!0,C=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),U=ie(v,[1,v.shape[0],v.shape[1],v.shape[2],v.shape[3]]),G=ie(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z(U.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${U.rank}.`),Z(G.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${G.rank}.`),Z(Jr(g,f),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${g} and dilations '${f}'`),S!=null&&Z(Qt(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Ae=>{const Te=Cf(U.shape,p,g,f,I,S);return Ae.maxPool3dBackprop(C,U,G,Te)},oe={dy:C,input:U,output:G},ge={filterSize:p,strides:g,dilations:f,pad:I,dimRoundingMode:S},fe=Y.runKernelFunc(te,oe,null,D2,ge);return ne?ie(fe,[fe.shape[1],fe.shape[2],fe.shape[3],fe.shape[4]]):fe}const T1=z({maxPool3dBackprop_:D9});const A1={kernelName:E2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,dilations:S,pad:x,dimRoundingMode:v}=u,O=S==null?[1,1,1]:S;return{x:()=>T1(r,p,g,f,I,O,x,v)}}};function k9(r,l,u,p,g,f,I){const S=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),v=M(u,"output","maxPoolBackprop");Z(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),Z(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&Z(Qt(f),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=G=>{const ne=Nf(x.shape,p,g,1,f,I);return G.maxPoolBackprop(S,x,v,ne)},C={dy:S,input:x,output:v},U={filterSize:p,strides:g,pad:f,dimRoundingMode:I};return Y.runKernelFunc(O,C,null,O2,U)}const v1=z({maxPoolBackprop_:k9});const N1={kernelName:R2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,pad:S}=u;return{x:()=>v1(r,p,g,f,I,S)}}};const C1={kernelName:Pm,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:g}=p,[f,I]=l,S=ht(g,f.shape),x=ds(S,f.rank),v=Uf(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=Wt(O)),O}}}};const R1={kernelName:zm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(mr(u,p),"float32")),f=()=>ae(r,Le(mi(u,p),"float32"));return{a:g,b:f}}};const O1={kernelName:k2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=At(u.shape,g);return S.length>0?ie(Fe(r,S),u.shape):r},I=()=>{const S=ae(r,yt(rI(Pe(u,p)))),x=At(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const E1={kernelName:Gm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=ae(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{const S=ae(r,Le(u,"float32")),x=At(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const D1={kernelName:Vm,gradFunc:r=>({x:()=>yt(r)})};const k1={kernelName:B2,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Es(u.shape,"float32")}}};const F1={kernelName:U2,gradFunc:r=>({x:()=>qe(r)})};const vI={kernelName:Ym,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:g}=u,f=g.map(I=>I[0]);return{x:()=>Tt(r,f,p.shape)}}};const _1={kernelName:Hm,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,g]=l,f=u,I=p,S=it(f.shape,I.shape),x=()=>{const O=Le(I,"float32");let C=ae(r,ae(O,ea(f,Be(O,ke(1)))));const U=At(f.shape,S);return U.length>0&&(C=Fe(C,U)),ie(C,f.shape)},v=()=>{const O=mi(f,0),C=Bn(O,Zr(f),qe(f));let U=ae(r,ae(g,C));const G=At(I.shape,S);return G.length>0&&(U=Fe(U,G)),ie(U,I.shape)};return{a:x,b:v}}};const W1={kernelName:M2,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,g=mi(u,0);return{x:()=>Bn(g,r,ae(r,p)),alpha:()=>{let f=Bn(g,qe(r),ae(r,u));const I=At(p.shape,r.shape);return I.length>0&&(f=Fe(f,I)),ie(f,p.shape)}}}};const $1={kernelName:G2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,yt(ut(u)))}}};const U1={kernelName:H2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(mr(u,6),ta(u));return{x:()=>ae(r,Le(p,"float32"))}}};const B1={kernelName:qm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Le(ta(u),"float32"))}}};const M1={kernelName:jm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ie(r,u.shape)}}};const P1={kernelName:Xm,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,Y2,u);return{images:I}}};const z1={kernelName:Km,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,V2,u);return{images:I}}};const G1={kernelName:Jm,gradFunc:(r,l,u)=>{const{dims:p}=u,g=ht(p,r.shape);return{x:()=>Oc(r,g)}}};const V1={kernelName:q2,gradFunc:r=>({x:()=>qe(r)})};const Y1={kernelName:Zm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>yt(Pe(r,ae(ea(u,1.5),2)))}}};const H1={kernelName:Qm,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Le(qe(u),"float32"),t:()=>ae(r,Le(u,r.dtype)),e:()=>ae(r,Le(uI(u),r.dtype))}}};const q1={kernelName:j2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=mi(u,ke(0)),g=ke(IO),f=ke(xO),I=ae(r,f),S=ae(ae(r,g),Mn(Le(u,"float32")));return Bn(p,I,S)}}}};const j1={kernelName:sf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(u,Be(ke(1),u)))}}};const K1={kernelName:K2,gradFunc:r=>({x:()=>qe(r)})};const X1={kernelName:tf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(gu(Le(u,"float32")),r)}}};const J1={kernelName:nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(eI(Le(u,"float32")),r)}}};const Z1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:g,size:f}=u,I=p.shape,[S,x]=Af(p,g,f),v=[];for(let O=0;OfI(r,v)}}};const Q1={kernelName:J2,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:g}=u,f=!0,I=ae(r,p);return{logits:()=>Be(I,ae(Fe(I,[g],f),p))}}};const eE={kernelName:X2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,JS(u))}}};const NI={kernelName:af,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:g}=u;return{x:()=>ZS(r,p,g)}}};const CI={kernelName:cf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>yn(r,p)}}};const tE={kernelName:rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ae(ps(Le(u,"float32")),2))}}};const nE={kernelName:Z2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(Le(u,"float32"),2))}}};const sE={kernelName:lf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=ke(2),f=()=>ae(r,ae(g,Be(u,p))),I=()=>ae(r,ae(g,Be(p,u)));return{a:f,b:I}}};const iE={kernelName:gf,gradFunc:r=>({x:()=>qe(r)})};const rE={kernelName:hf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=At(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=At(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(yt(S),p.shape)};return{a:f,b:I}}};const oE={kernelName:of,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,g=p.shape.slice(),{axis:f}=u,I=ht(f,p.shape);I.forEach(v=>{g[v]=1});const S=ie(r,g),x=ae(S,Gi(p.shape,"float32"));return{x:()=>x}}};const aE={kernelName:Q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ut(gu(u)))}}};const cE={kernelName:eR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Be(ke(1),ut(u)),r)}}};const lE={kernelName:uf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:g}=u,f=()=>{let I=qe(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:g}=p,f=vc(g);return{x:()=>Wt(r,f)}}};const uE={kernelName:pf,gradFunc:(r,l,u)=>{const p=u,{axis:g}=p;return{value:()=>Vs(r,g)}}};const dE={kernelName:mf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>F9(r,u);return{x:p}}};function F9(r,l){const u=aI(l,qe(l)),p=oI(r,u);let g=pr(l,ke(0,"int32"));const f=p.rank-g.rank;for(let S=0;S({x:()=>qe(r)})};const _9=[TO,AO,vO,NO,CO,RO,OO,EO,DO,kO,FO,_O,$O,BO,MO,PO,zO,GO,VO,YO,HO,jO,qO,XO,JO,ZO,QO,e1,t1,n1,s1,i1,r1,o1,c1,a1,l1,d1,p1,m1,f1,g1,y1,b1,w1,L1,I1,AI,AI,x1,A1,N1,C1,R1,O1,E1,D1,k1,F1,vI,vI,_1,W1,$1,U1,B1,M1,P1,z1,G1,V1,Y1,H1,q1,j1,K1,X1,J1,Z1,Q1,eE,NI,NI,CI,CI,tE,sE,nE,iE,rE,oE,aE,cE,lE,hE,uE,dE,pE];for(const r of _9)sR(r);function RI(r,l,u=!1){const{Image:p,Canvas:g}=gt.getEnv();if(!(r instanceof p||r instanceof g))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const f=qo(r),I=l/Math.max(f.height,f.width),S=I*f.width,x=I*f.height,v=bc({width:l,height:l}),O=r instanceof g?r:ou(r),C=Math.abs(S-x)/2,U=u&&S{if(lr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Ns(u)){const f=u.shape[0];if(f!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${f} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const g=u instanceof gt.getEnv().Canvas?u:ou(u);this._canvases[p]=g,this._inputDimensions[p]=[g.height,g.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 Wi(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 pS({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,ER(()=>{const u=Wi(this.batchSize,0,1).map(g=>{const f=this.getInput(g);if(f instanceof In){let I=Ns(f)?f:f.expandDims();return I=yS(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=SO.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(f instanceof gt.getEnv().Canvas)return jS.fromPixels(RI(f,r,l));throw new Error(`toBatchTensor - at batchIdx ${g}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${f}`)}),p=Vs(u.map(g=>Le(g,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Rt(r){if(r instanceof to)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=g=>Array.isArray(r)?` at input index ${g}:`:"",p=l.map(Ho);return p.forEach((g,f)=>{if(!wm(g)&&!lr(g)&&!Ns(g))throw typeof l[f]=="string"?new Error(`toNetInput -${u(f)} string passed, but could not resolve HTMLElement for element id ${l[f]}`):new Error(`toNetInput -${u(f)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Ns(g)){const I=g.shape[0];if(I!==1)throw new Error(`toNetInput -${u(f)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(g=>wm(g)&&AS(g))),new to(p,Array.isArray(r))}async function Dc(r,l){const{Canvas:u}=gt.getEnv();let p=r;if(!(r instanceof u)){const I=await Rt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await NS(S)}const g=Jn(p),f=l.map(I=>I instanceof Ht?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return f.map(({x:I,y:S,width:x,height:v})=>{const O=bc({width:x,height:v});return Jn(O).putImageData(g.getImageData(I,S,x,v),0,0),O})}const Bf=Ke(Xe());async function kc(r,l){if(!lr(r)&&!Ns(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Ns(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Bf.tidy(()=>{const[u,p,g]=r.shape.slice(Ns(r)?1:0),f=l.map(S=>S instanceof Ht?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=f.map(({x:S,y:x,width:v,height:O})=>Bf.slice3d(r.as3D(u,p,g),[x,S,0],[O,v,g]));return I})}async function sa(r,l){const u=gt.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 W9(r){const l=await sa(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 vS(u)}async function OI(r){return(await sa(r)).json()}async function $9(r){return new Float32Array(await(await sa(r)).arrayBuffer())}function Mf(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 g=r.split("/").filter(S=>S),f=r.endsWith(".json")?g[g.length-1]:u;let I=p+(r.endsWith(".json")?g.slice(0,g.length-1):g).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${f}`:`${I}/${f}`}}const mE=Ke(Xe());async function EI(r,l){const{manifestUri:u,modelBaseUri:p}=Mf(r,l);let g=await OI(u);return mE.io.loadWeights(g,p)}function U9(r,l,u=!1){const{width:p,height:g}=u?qo(l):l;return r.width=p,r.height=g,{width:p,height:g}}const fr=Ke(Xe());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 fr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof fr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=fr.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 EI(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}=gt.getEnv(),{manifestUri:u,modelBaseUri:p}=Mf(r,this.getDefaultModelName()),g=x=>Promise.all(x.map(v=>l(v).then(O=>O.buffer))),f=fr.io.weightsLoaderFactory(g),I=JSON.parse((await l(u)).toString()),S=await f(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((g,f)=>{if(!g.nextObj.hasOwnProperty(f))throw new Error(`traversePropertyPath - object does not have property ${f}, for path ${r}`);return{obj:g.nextObj,objProp:f,nextObj:g.nextObj[f]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof fr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Fc=Ke(Xe());function Qn(r,l,u){return Fc.tidy(()=>{let p=Fc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Fc.add(p,l.bias),p})}const Dt=Ke(Xe());function Pf(r,l,u=!1){return Dt.tidy(()=>{const p=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):Qn(r,l.conv0,[2,2])),g=Qn(p,l.conv1,[1,1]),f=Dt.relu(Dt.add(p,g)),I=Qn(f,l.conv2,[1,1]);return Dt.relu(Dt.add(p,Dt.add(g,I)))})}function Iu(r,l,u=!1,p=!0){return Dt.tidy(()=>{const g=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):Qn(r,l.conv0,p?[2,2]:[1,1])),f=Qn(g,l.conv1,[1,1]),I=Dt.relu(Dt.add(g,f)),S=Qn(I,l.conv2,[1,1]),x=Dt.relu(Dt.add(g,Dt.add(f,S))),v=Qn(x,l.conv3,[1,1]);return Dt.relu(Dt.add(g,Dt.add(f,Dt.add(S,v))))})}const no=Ke(Xe());function ia(r,l,u="same",p=!1){return no.tidy(()=>{const g=no.add(no.conv2d(r,l.filters,[1,1],u),l.bias);return p?no.relu(g):g})}function Pn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const zf=Ke(Xe());function _c(r,l){return function(u,p,g,f){const I=zf.tensor4d(r(u*p*g*g),[g,g,u,p]),S=zf.tensor1d(r(p));return l.push({paramPath:`${f}/filters`},{paramPath:`${f}/bias`}),{filters:I,bias:S}}}const Gf=Ke(Xe());function Vf(r,l){return function(u,p,g){const f=Gf.tensor2d(r(u*p),[u,p]),I=Gf.tensor1d(r(p));return l.push({paramPath:`${g}/weights`},{paramPath:`${g}/bias`}),{weights:f,bias:I}}}class DI{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const xu=Ke(Xe());function Wc(r,l){return function(u,p,g){const f=xu.tensor4d(r(3*3*u),[3,3,u,1]),I=xu.tensor4d(r(u*p),[1,1,u,p]),S=xu.tensor1d(r(p));return l.push({paramPath:`${g}/depthwise_filter`},{paramPath:`${g}/pointwise_filter`},{paramPath:`${g}/bias`}),new DI(f,I,S)}}function $c(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),g=r(`${l}/bias`,1);return new DI(u,p,g)}}function ms(r,l){return function(u,p,g){const f=r[u];if(!Po(f,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${f}`);return l.push({originalPath:u,paramPath:g||u}),f}}function zn(r){let l=r;function u(g){const f=l.slice(0,g);return l=l.slice(g),f}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function Yf(r,l){const u=_c(r,l),p=Wc(r,l);function g(I,S,x,v=!1){const O=v?u(I,S,3,`${x}/conv0`):p(I,S,`${x}/conv0`),C=p(S,S,`${x}/conv1`),U=p(S,S,`${x}/conv2`);return{conv0:O,conv1:C,conv2:U}}function f(I,S,x,v=!1){const{conv0:O,conv1:C,conv2:U}=g(I,S,x,v),G=p(S,S,`${x}/conv3`);return{conv0:O,conv1:C,conv2:U,conv3:G}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:f}}function fE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractDenseBlock4Params:g}=Yf(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2"),x=g(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S,dense3:x}}}function Hf(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function qf(r,l){const u=ms(r,l),p=Hf(u),g=$c(u);function f(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`);return{conv0:v,conv1:O,conv2:C}}function I(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`),U=g(`${S}/conv3`);return{conv0:v,conv1:O,conv2:C,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:I}}function gE(r){const l=[],{extractDenseBlock4Params:u}=qf(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Pn(r,l),{params:p,paramMappings:l}}const so=Ke(Xe());class jf extends En{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return so.tidy(()=>{const u=so.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(so.scalar(255));let f=Iu(g,l.dense0,!0);return f=Iu(f,l.dense1),f=Iu(f,l.dense2),f=Iu(f,l.dense3),f=so.avgPool(f,[7,7],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return gE(r)}extractParams(r){return fE(r)}}const Uc=Ke(Xe());function Tu(r,l){return Uc.tidy(()=>Uc.add(Uc.matMul(r,l.weights),l.bias))}function yE(r,l,u){const p=[],{extractWeights:g,getRemainingWeights:f}=zn(r),I=Vf(g,p),S=I(l,u,"fc");if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:p,params:{fc:S}}}function bE(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:p("fc")};return Pn(r,l),{params:g,paramMappings:l}}function Kf(r){const l={},u={};return Object.keys(r).forEach(p=>{const g=p.startsWith("fc")?u:l;g[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const wE=Ke(Xe());class Xf 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 wE.tidy(()=>{const u=r instanceof to?this.faceFeatureExtractor.forwardInput(r):r;return Tu(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 yE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Kf(r);return this.faceFeatureExtractor.loadFromWeightMap(l),bE(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,g=r.slice(0,r.length-p),f=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(g),this.extractClassifierParams(f)}}const kI=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class ra{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);kI.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return kI.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Bc=Ke(Xe());class FI extends Xf{constructor(r=new jf){super("FaceExpressionNet",r)}forwardInput(r){return Bc.tidy(()=>Bc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Rt(r))}async predictExpressions(r){const l=await Rt(r),u=await this.forwardInput(l),p=await Promise.all(Bc.unstack(u).map(async f=>{const I=await f.data();return f.dispose(),I}));u.dispose();const g=p.map(f=>new ra(f));return l.isBatchInput?g:g[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function _I(r){return r.expressions instanceof ra}function Jf(r,l){const u={expressions:l};return Object.assign({},r,u)}function B9(r,l,u=.1,p){const g=Array.isArray(l)?l:[l];g.forEach(f=>{const I=f instanceof ra?f:_I(f)?f.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(C=>C.probability>u),v=Ui(f)?f.detection.box.bottomLeft:p||new Je(0,0),O=new yc(x.map(C=>`${C.expression} (${zo(C.probability)})`),v);O.draw(r)})}function oa(r){return Ui(r)&&r.landmarks instanceof Gs&&r.unshiftedLandmarks instanceof Gs&&r.alignedRect instanceof Ht}function Mc(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),g=p.align(),{imageDims:f}=r.detection,I=new Ht(r.detection.score,g.rescale(f.reverse()),f),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class LE{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:g,pointSize:f,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=f||2,this.lineColor=g||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class SE{constructor(r,l={}){this.faceLandmarks=r,this.options=new LE(l)}draw(r){const l=Jn(r),{drawLines:u,drawPoints:p,lineWidth:g,lineColor:f,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof iu&&(l.strokeStyle=f,l.lineWidth=g,cr(l,this.faceLandmarks.getJawOutline()),cr(l,this.faceLandmarks.getLeftEyeBrow()),cr(l,this.faceLandmarks.getRightEyeBrow()),cr(l,this.faceLandmarks.getNose()),cr(l,this.faceLandmarks.getLeftEye(),!0),cr(l,this.faceLandmarks.getRightEye(),!0),cr(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const x=v=>{l.beginPath(),l.arc(v.x,v.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function M9(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const g=p instanceof Gs?p:oa(p)?p.landmarks:void 0;if(!g)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new SE(g).draw(r)})}const WI={};hm(WI,{AnchorPosition:()=>Bi,DrawBox:()=>TS,DrawBoxOptions:()=>NC,DrawFaceLandmarks:()=>SE,DrawFaceLandmarksOptions:()=>LE,DrawTextField:()=>yc,DrawTextFieldOptions:()=>ym,drawContour:()=>cr,drawDetections:()=>KX,drawFaceExpressions:()=>B9,drawFaceLandmarks:()=>M9});function P9(r,l){const u=_c(r,l),p=Wc(r,l);function g(I,S,x){const v=p(I,S,`${x}/separable_conv0`),O=p(S,S,`${x}/separable_conv1`),C=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:v,separable_conv1:O,expansion_conv:C}}function f(I,S){const x=p(I,I,`${S}/separable_conv0`),v=p(I,I,`${S}/separable_conv1`),O=p(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:g,extractMainBlockParams:f}}function IE(r,l){const u=[],{extractWeights:p,getRemainingWeights:g}=zn(r),{extractConvParams:f,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=P9(p,u),v=f(3,32,3,"entry_flow/conv_in"),O=S(32,64,"entry_flow/reduction_block_0"),C=S(64,128,"entry_flow/reduction_block_1"),U={conv_in:v,reduction_block_0:O,reduction_block_1:C},G={};Wi(l,0,1).forEach(ge=>{G[`main_block_${ge}`]=x(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),oe={reduction_block:ne,separable_conv:te};if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:u,params:{entry_flow:U,middle_flow:G,exit_flow:oe}}}function z9(r,l){const u=ms(r,l),p=Hf(u),g=$c(u);function f(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=p(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:v,expansion_conv:O}}function I(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=g(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}}function xE(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}=z9(r,u),S=p("entry_flow/conv_in"),x=f("entry_flow/reduction_block_0"),v=f("entry_flow/reduction_block_1"),O={conv_in:S,reduction_block_0:x,reduction_block_1:v},C={};Wi(l,0,1).forEach(te=>{C[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const U=f("exit_flow/reduction_block"),G=g("exit_flow/separable_conv"),ne={reduction_block:U,separable_conv:G};return Pn(r,u),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:u}}const tn=Ke(Xe());function TE(r,l,u){return tn.add(tn.conv2d(r,l.filters,u,"same"),l.bias)}function $I(r,l,u=!0){let p=u?tn.relu(r):r;return p=Qn(p,l.separable_conv0,[1,1]),p=Qn(tn.relu(p),l.separable_conv1,[1,1]),p=tn.maxPool(p,[3,3],[2,2],"same"),p=tn.add(p,TE(r,l.expansion_conv,[2,2])),p}function G9(r,l){let u=Qn(tn.relu(r),l.separable_conv0,[1,1]);return u=Qn(tn.relu(u),l.separable_conv1,[1,1]),u=Qn(tn.relu(u),l.separable_conv2,[1,1]),u=tn.add(u,r),u}class AE 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 tn.tidy(()=>{const u=tn.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(tn.scalar(256));let f=tn.relu(TE(g,l.entry_flow.conv_in,[2,2]));return f=$I(f,l.entry_flow.reduction_block_0,!1),f=$I(f,l.entry_flow.reduction_block_1),Wi(this._numMainBlocks,0,1).forEach(I=>{f=G9(f,l.middle_flow[`main_block_${I}`])}),f=$I(f,l.exit_flow.reduction_block),f=tn.relu(Qn(f,l.exit_flow.separable_conv,[1,1])),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return xE(r,this._numMainBlocks)}extractParams(r){return IE(r,this._numMainBlocks)}}function vE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),g=Vf(u,l),f=g(512,1,"fc/age"),I=g(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:f,gender:I}}}}function NE(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Pn(r,l),{params:g,paramMappings:l}}var gr;(function(r){r.FEMALE="female",r.MALE="male"})(gr||(gr={}));const Vi=Ke(Xe());class UI extends En{constructor(r=new AE(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 Vi.tidy(()=>{const u=r instanceof to?this.faceFeatureExtractor.forwardInput(r):r,p=Vi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),g=Tu(p,l.fc.age).as1D(),f=Tu(p,l.fc.gender);return{age:g,gender:f}})}forwardInput(r){return Vi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Vi.softmax(u)}})}async forward(r){return this.forwardInput(await Rt(r))}async predictAgeAndGender(r){const l=await Rt(r),u=await this.forwardInput(l),p=Vi.unstack(u.age),g=Vi.unstack(u.gender),f=p.map((S,x)=>({ageTensor:S,genderTensor:g[x]})),I=await Promise.all(f.map(async({ageTensor:S,genderTensor:x})=>{const v=(await S.data())[0],O=(await x.data())[0],C=O>.5,U=C?gr.MALE:gr.FEMALE,G=C?O:1-O;return S.dispose(),x.dispose(),{age:v,gender:U,genderProbability:G}}));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 vE(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Kf(r);return this.faceFeatureExtractor.loadFromWeightMap(l),NE(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 fs=Ke(Xe());class Zf extends Xf{postProcess(r,l,u){const p=u.map(({width:f,height:I})=>{const S=l/Math.max(I,f);return{width:f*S,height:I*S}}),g=p.length;return fs.tidy(()=>{const f=(O,C)=>fs.stack([fs.fill([68],O,"float32"),fs.fill([68],C,"float32")],1).as2D(1,136).as1D(),I=(O,C)=>{const{width:U,height:G}=p[O];return C(U,G)?Math.abs(U-G)/2:0},S=O=>I(O,(C,U)=>CI(O,(C,U)=>Uf(S(C),x(C))))).div(fs.stack(Array.from(Array(g),(O,C)=>f(p[C].width,p[C].height))));return v})}forwardInput(r){return fs.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 Rt(r))}async detectLandmarks(r){const l=await Rt(r),u=fs.tidy(()=>fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(g,f)=>{const I=Array.from(await g.data()),S=I.filter((v,O)=>dm(O)),x=I.filter((v,O)=>!dm(O));return new iu(Array(68).fill(0).map((v,O)=>new Je(S[O],x[O])),{height:l.getInputHeight(f),width:l.getInputWidth(f)})}));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Au extends Zf{constructor(r=new jf){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function CE(r){const l=[],{extractDenseBlock3Params:u}=qf(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Pn(r,l),{params:p,paramMappings:l}}function RE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractDenseBlock3Params:g}=Yf(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S}}}const io=Ke(Xe());class OE extends En{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return io.tidy(()=>{const u=io.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(io.scalar(255));let f=Pf(g,l.dense0,!0);return f=Pf(f,l.dense1),f=Pf(f,l.dense2),f=io.avgPool(f,[14,14],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return CE(r)}extractParams(r){return RE(r)}}class BI extends Zf{constructor(r=new OE){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class V9 extends Au{}const Qf=Ke(Xe());function EE(r,l){return Qf.add(Qf.mul(r,l.weights),l.biases)}const Pc=Ke(Xe());function MI(r,l,u,p,g="same"){const{filters:f,bias:I}=l.conv;let S=Pc.conv2d(r,f,u,g);return S=Pc.add(S,I),S=EE(S,l.scale),p?Pc.relu(S):S}function DE(r,l){return MI(r,l,[1,1],!0)}function PI(r,l){return MI(r,l,[1,1],!1)}function eg(r,l){return MI(r,l,[2,2],!0,"valid")}const gs=Ke(Xe());function Y9(r,l){function u(S,x,v){const O=r(S),C=O.length/(x*v*v);if(dS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${v}`);return gs.tidy(()=>gs.transpose(gs.tensor4d(O,[x,C,v,v]),[2,3,1,0]))}function p(S,x,v,O){const C=u(S,x,v),U=gs.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:U}}function g(S,x){const v=gs.tensor1d(r(S)),O=gs.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:v,biases:O}}function f(S,x,v,O){const C=p(S,x,v,`${O}/conv`),U=g(x,`${O}/scale`);return{conv:C,scale:U}}function I(S,x,v,O,C=!1){const U=f((C?.5:1)*S,x,v,`${O}/conv1`),G=f(S,x,v,`${O}/conv2`);return{conv1:U,conv2:G}}return{extractConvLayerParams:f,extractResidualLayerParams:I}}function kE(r){const{extractWeights:l,getRemainingWeights:u}=zn(r),p=[],{extractConvLayerParams:g,extractResidualLayerParams:f}=Y9(l,p),I=g(4704,32,7,"conv32_down"),S=f(9216,32,3,"conv32_1"),x=f(9216,32,3,"conv32_2"),v=f(9216,32,3,"conv32_3"),O=f(36864,64,3,"conv64_down",!0),C=f(36864,64,3,"conv64_1"),U=f(36864,64,3,"conv64_2"),G=f(36864,64,3,"conv64_3"),ne=f(147456,128,3,"conv128_down",!0),te=f(147456,128,3,"conv128_1"),oe=f(147456,128,3,"conv128_2"),ge=f(589824,256,3,"conv256_down",!0),fe=f(589824,256,3,"conv256_1"),Ae=f(589824,256,3,"conv256_2"),Te=f(589824,256,3,"conv256_down_out"),Ve=gs.tidy(()=>gs.transpose(gs.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 rt={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:v,conv64_down:O,conv64_1:C,conv64_2:U,conv64_3:G,conv128_down:ne,conv128_1:te,conv128_2:oe,conv256_down:ge,conv256_1:fe,conv256_2:Ae,conv256_down_out:Te,fc:Ve};return{params:rt,paramMappings:p}}function H9(r,l){const u=ms(r,l);function p(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function g(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),v=p(I);return{conv:{filters:S,bias:x},scale:v}}function f(I){return{conv1:g(`${I}/conv1`),conv2:g(`${I}/conv2`)}}return{extractConvLayerParams:g,extractResidualLayerParams:f}}function FE(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=H9(r,l),g=u("conv32_down"),f=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),x=p("conv64_down"),v=p("conv64_1"),O=p("conv64_2"),C=p("conv64_3"),U=p("conv128_down"),G=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),oe=p("conv256_1"),ge=p("conv256_2"),fe=p("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!uS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const Te={conv32_down:g,conv32_1:f,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:v,conv64_2:O,conv64_3:C,conv128_down:U,conv128_1:G,conv128_2:ne,conv256_down:te,conv256_1:oe,conv256_2:ge,conv256_down_out:fe,fc:Ae};return Pn(r,l),{params:Te,paramMappings:l}}const Gn=Ke(Xe());function fi(r,l){let u=DE(r,l.conv1);return u=PI(u,l.conv2),u=Gn.add(u,r),u=Gn.relu(u),u}function vu(r,l){let u=eg(r,l.conv1);u=PI(u,l.conv2);let p=Gn.avgPool(r,2,2,"valid");const g=Gn.zeros(p.shape),f=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 x=Gn.zeros(S);u=Gn.concat([u,x],1);const v=[...u.shape];v[2]=1;const O=Gn.zeros(v);u=Gn.concat([u,O],2)}return p=f?Gn.concat([p,g],3):p,u=Gn.add(p,u),u=Gn.relu(u),u}const Ds=Ke(Xe());class Nu extends En{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return Ds.tidy(()=>{const u=Ds.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(Ds.scalar(256));let f=eg(g,l.conv32_down);f=Ds.maxPool(f,3,2,"valid"),f=fi(f,l.conv32_1),f=fi(f,l.conv32_2),f=fi(f,l.conv32_3),f=vu(f,l.conv64_down),f=fi(f,l.conv64_1),f=fi(f,l.conv64_2),f=fi(f,l.conv64_3),f=vu(f,l.conv128_down),f=fi(f,l.conv128_1),f=fi(f,l.conv128_2),f=vu(f,l.conv256_down),f=fi(f,l.conv256_1),f=fi(f,l.conv256_2),f=vu(f,l.conv256_down_out);const I=f.mean([1,2]),S=Ds.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Rt(r))}async computeFaceDescriptor(r){const l=await Rt(r),u=Ds.tidy(()=>Ds.unstack(this.forwardInput(l))),p=await Promise.all(u.map(g=>g.data()));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return FE(r)}extractParams(r){return kE(r)}}function q9(r){const l=new Nu;return l.extractWeights(r),l}function tg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function j9(r){return typeof r.age=="number"}function ng(r,l){const u={age:l};return Object.assign({},r,u)}function K9(r){return(r.gender===gr.MALE||r.gender===gr.FEMALE)&&fc(r.genderProbability)}function sg(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const gi=Ke(Xe());function X9(r,l){function u(x,v){const O=gi.tensor4d(r(3*3*x),[3,3,x,1]),C=gi.tensor1d(r(x)),U=gi.tensor1d(r(x)),G=gi.tensor1d(r(x)),ne=gi.tensor1d(r(x));return l.push({paramPath:`${v}/filters`},{paramPath:`${v}/batch_norm_scale`},{paramPath:`${v}/batch_norm_offset`},{paramPath:`${v}/batch_norm_mean`},{paramPath:`${v}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:U,batch_norm_mean:G,batch_norm_variance:ne}}function p(x,v,O,C,U){const G=gi.tensor4d(r(x*v*O*O),[O,O,x,v]),ne=gi.tensor1d(r(v));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${U?"batch_norm_offset":"bias"}`}),{filters:G,bias:ne}}function g(x,v,O,C){const{filters:U,bias:G}=p(x,v,O,C,!0);return{filters:U,batch_norm_offset:G}}function f(x,v,O){const C=u(x,`${O}/depthwise_conv`),U=g(x,v,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:U}}function I(){const x=g(3,32,3,"mobilenetv1/conv_0"),v=f(32,64,"mobilenetv1/conv_1"),O=f(64,128,"mobilenetv1/conv_2"),C=f(128,128,"mobilenetv1/conv_3"),U=f(128,256,"mobilenetv1/conv_4"),G=f(256,256,"mobilenetv1/conv_5"),ne=f(256,512,"mobilenetv1/conv_6"),te=f(512,512,"mobilenetv1/conv_7"),oe=f(512,512,"mobilenetv1/conv_8"),ge=f(512,512,"mobilenetv1/conv_9"),fe=f(512,512,"mobilenetv1/conv_10"),Ae=f(512,512,"mobilenetv1/conv_11"),Te=f(512,1024,"mobilenetv1/conv_12"),Ve=f(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,conv_8:oe,conv_9:ge,conv_10:fe,conv_11:Ae,conv_12:Te,conv_13:Ve}}function S(){const x=g(1024,256,1,"prediction_layer/conv_0"),v=g(256,512,3,"prediction_layer/conv_1"),O=g(512,128,1,"prediction_layer/conv_2"),C=g(128,256,3,"prediction_layer/conv_3"),U=g(256,128,1,"prediction_layer/conv_4"),G=g(128,256,3,"prediction_layer/conv_5"),ne=g(256,64,1,"prediction_layer/conv_6"),te=g(64,128,3,"prediction_layer/conv_7"),oe=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),fe=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Te=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),rt=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),vt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Dn=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),Tn=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),An={box_encoding_predictor:oe,class_predictor:ge},Ks={box_encoding_predictor:fe,class_predictor:Ae},Li={box_encoding_predictor:Te,class_predictor:Ve},Xs={box_encoding_predictor:rt,class_predictor:vt},ua={box_encoding_predictor:$t,class_predictor:Kt},Xc={box_encoding_predictor:Dn,class_predictor:Tn};return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,box_predictor_0:An,box_predictor_1:Ks,box_predictor_2:Li,box_predictor_3:Xs,box_predictor_4:ua,box_predictor_5:Xc}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function _E(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractMobilenetV1Params:g,extractPredictionLayerParams:f}=X9(u,l),I=g(),S=f(),x=gi.tensor3d(u(5118*4),[1,5118,4]),v={extra_dim:x};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:v},paramMappings:l}}function J9(r,l){const u=ms(r,l);function p(v,O,C){const U=u(`${v}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),G=u(`${v}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:U,batch_norm_offset:G}}function g(v){const O=`mobilenetv1/conv_${v}`,C=`MobilenetV1/Conv2d_${v}_depthwise`,U=`${O}/depthwise_conv`,G=`${O}/pointwise_conv`,ne=u(`${C}/depthwise_weights`,4,`${U}/filters`),te=u(`${C}/BatchNorm/gamma`,1,`${U}/batch_norm_scale`),oe=u(`${C}/BatchNorm/beta`,1,`${U}/batch_norm_offset`),ge=u(`${C}/BatchNorm/moving_mean`,1,`${U}/batch_norm_mean`),fe=u(`${C}/BatchNorm/moving_variance`,1,`${U}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:oe,batch_norm_mean:ge,batch_norm_variance:fe},pointwise_conv:p("MobilenetV1",v,G)}}function f(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:g(1),conv_2:g(2),conv_3:g(3),conv_4:g(4),conv_5:g(5),conv_6:g(6),conv_7:g(7),conv_8:g(8),conv_9:g(9),conv_10:g(10),conv_11:g(11),conv_12:g(12),conv_13:g(13)}}function I(v,O){const C=u(`${v}/weights`,4,`${O}/filters`),U=u(`${v}/biases`,1,`${O}/bias`);return{filters:C,bias:U}}function S(v){const O=I(`Prediction/BoxPredictor_${v}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${v}/box_encoding_predictor`),C=I(`Prediction/BoxPredictor_${v}/ClassPredictor`,`prediction_layer/box_predictor_${v}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}function x(){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:f,extractPredictionLayerParams:x}}function WE(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=J9(r,l),g=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!lr(g))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${g}`);const f={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:g}};return Pn(r,l),{params:f,paramMappings:l}}const ro=Ke(Xe());function Hs(r,l,u){return ro.tidy(()=>{let p=ro.conv2d(r,l.filters,u,"same");return p=ro.add(p,l.batch_norm_offset),ro.clipByValue(p,0,6)})}const yr=Ke(Xe()),Z9=.0010000000474974513;function Q9(r,l,u){return yr.tidy(()=>{let p=yr.depthwiseConv2d(r,l.filters,u,"same");return p=yr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,Z9),yr.clipByValue(p,0,6)})}function eZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function $E(r,l){return yr.tidy(()=>{let u,p=Hs(r,l.conv_0,[2,2]);const g=[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(g.forEach((f,I)=>{const S=I+1,x=eZ(S);p=Q9(p,f.depthwise_conv,x),p=Hs(p,f.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 UE(r,l,u,p,g){const f=r.shape[0],I=Math.min(u,f),S=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>g).sort((O,C)=>C.score-O.score),x=O=>O<=p?1:0,v=[];return S.forEach(O=>{if(v.length>=I)return;const C=O.score;for(let U=v.length-1;U>=0;--U){const G=tZ(r,O.boxIndex,v[U]);if(G===0)continue;if(O.score*=x(G),O.score<=g)break}C===O.score&&v.push(O.boxIndex)}),v}function tZ(r,l,u){const p=r.arraySync(),g=Math.min(p[l][0],p[l][2]),f=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]),x=Math.min(p[u][0],p[u][2]),v=Math.min(p[u][1],p[u][3]),O=Math.max(p[u][0],p[u][2]),C=Math.max(p[u][1],p[u][3]),U=(I-g)*(S-f),G=(O-x)*(C-v);if(U<=0||G<=0)return 0;const ne=Math.max(g,x),te=Math.max(f,v),oe=Math.min(I,O),ge=Math.min(S,C),fe=Math.max(oe-ne,0)*Math.max(ge-te,0);return fe/(U+G-fe)}const De=Ke(Xe());function nZ(r){const l=De.unstack(De.transpose(r,[1,0])),u=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],p=[De.add(l[0],De.div(u[0],De.scalar(2))),De.add(l[1],De.div(u[1],De.scalar(2)))];return{sizes:u,centers:p}}function sZ(r,l){const{sizes:u,centers:p}=nZ(r),g=De.unstack(De.transpose(l,[1,0])),f=De.div(De.mul(De.exp(De.div(g[2],De.scalar(5))),u[0]),De.scalar(2)),I=De.add(De.mul(De.div(g[0],De.scalar(10)),u[0]),p[0]),S=De.div(De.mul(De.exp(De.div(g[3],De.scalar(5))),u[1]),De.scalar(2)),x=De.add(De.mul(De.div(g[1],De.scalar(10)),u[1]),p[1]);return De.transpose(De.stack([De.sub(I,f),De.sub(x,S),De.add(I,f),De.add(x,S)]),[1,0])}function BE(r,l,u){return De.tidy(()=>{const p=r.shape[0];let g=sZ(De.reshape(De.tile(u.extra_dim,[p,1,1]),[-1,4]),De.reshape(r,[-1,4]));g=De.reshape(g,[p,g.shape[0]/p,4]);const f=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let I=De.slice(f,[0,0,0],[-1,-1,1]);I=De.reshape(I,[p,I.shape[1]]);const S=De.unstack(g),x=De.unstack(I);return{boxes:S,scores:x}})}const Cu=Ke(Xe());function aa(r,l){return Cu.tidy(()=>{const u=r.shape[0],p=Cu.reshape(ia(r,l.box_encoding_predictor),[u,-1,1,4]),g=Cu.reshape(ia(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:g}})}const Ru=Ke(Xe());function ME(r,l,u){return Ru.tidy(()=>{const p=Hs(r,u.conv_0,[1,1]),g=Hs(p,u.conv_1,[2,2]),f=Hs(g,u.conv_2,[1,1]),I=Hs(f,u.conv_3,[2,2]),S=Hs(I,u.conv_4,[1,1]),x=Hs(S,u.conv_5,[2,2]),v=Hs(x,u.conv_6,[1,1]),O=Hs(v,u.conv_7,[2,2]),C=aa(l,u.box_predictor_0),U=aa(r,u.box_predictor_1),G=aa(g,u.box_predictor_2),ne=aa(I,u.box_predictor_3),te=aa(x,u.box_predictor_4),oe=aa(O,u.box_predictor_5),ge=Ru.concat([C.boxPredictionEncoding,U.boxPredictionEncoding,G.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,oe.boxPredictionEncoding],1),fe=Ru.concat([C.classPrediction,U.classPrediction,G.classPrediction,ne.classPrediction,te.classPrediction,oe.classPrediction],1);return{boxPredictions:ge,classPredictions:fe}})}class yi{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 bi=Ke(Xe());class zc extends En{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return bi.tidy(()=>{const u=bi.cast(r.toBatchTensor(512,!1),"float32"),p=bi.sub(bi.mul(u,bi.scalar(.007843137718737125)),bi.scalar(1)),g=$E(p,l.mobilenetv1),{boxPredictions:f,classPredictions:I}=ME(g.out,g.conv11,l.prediction_layer);return BE(f,I,l.output_layer)})}async forward(r){return this.forwardInput(await Rt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new yi(l),g=await Rt(r),{boxes:f,scores:I}=this.forwardInput(g),S=f[0],x=I[0];for(let fe=1;fe{const[Ae,Te]=[Math.max(0,oe[fe][0]),Math.min(1,oe[fe][2])].map(vt=>vt*te),[Ve,rt]=[Math.max(0,oe[fe][1]),Math.min(1,oe[fe][3])].map(vt=>vt*ne);return new Ht(v[fe],new su(Ve,Ae,rt-Ve,Te-Ae),{height:g.getInputHeight(0),width:g.getInputWidth(0)})});return S.dispose(),x.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return WE(r)}extractParams(r){return _E(r)}}function PE(r){const l=new zc;return l.extractWeights(r),l}function iZ(r){return PE(r)}class rZ extends zc{}const zE=.4,GE=[new Je(.738768,.874946),new Je(2.42204,2.65704),new Je(4.30971,7.04493),new Je(10.246,4.59428),new Je(12.6868,11.8741)],VE=[new Je(1.603231,2.094468),new Je(6.041143,7.080126),new Je(2.882459,3.518061),new Je(4.266906,5.178857),new Je(9.041765,10.66308)],YE=[117.001,114.697,97.404],HE="tiny_yolov2_model",qE="tiny_yolov2_separable_conv_model";const ig=r=>typeof r=="number";function zI(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(!ig(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=>ig(l.x)&&ig(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(ig)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const qs=Ke(Xe());function Gc(r){return qs.tidy(()=>{const l=qs.mul(r,qs.scalar(.10000000149011612));return qs.add(qs.relu(qs.sub(r,l)),l)})}const js=Ke(Xe());function br(r,l){return js.tidy(()=>{let u=js.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=js.conv2d(u,l.conv.filters,[1,1],"valid"),u=js.sub(u,l.bn.sub),u=js.mul(u,l.bn.truediv),u=js.add(u,l.conv.bias),Gc(u)})}const oo=Ke(Xe());function wr(r,l){return oo.tidy(()=>{let u=oo.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=oo.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=oo.add(u,l.bias),Gc(u)})}const GI=Ke(Xe());function oZ(r,l){const u=_c(r,l);function p(I,S){const x=GI.tensor1d(r(I)),v=GI.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:v}}function g(I,S,x){const v=u(I,S,3,`${x}/conv`),O=p(S,`${x}/bn`);return{conv:v,bn:O}}const f=Wc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}}function jE(r,l,u,p){const{extractWeights:g,getRemainingWeights:f}=zn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:v}=oZ(g,I);let O;if(l.withSeparableConvs){const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=l.isFirstLayerConv2d?S(C,U,3,"conv0"):v(C,U,"conv0"),Ve=v(U,G,"conv1"),rt=v(G,ne,"conv2"),vt=v(ne,te,"conv3"),$t=v(te,oe,"conv4"),Kt=v(oe,ge,"conv5"),Dn=fe?v(ge,fe,"conv6"):void 0,Tn=Ae?v(fe,Ae,"conv7"):void 0,An=S(Ae||fe||ge,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:vt,conv4:$t,conv5:Kt,conv6:Dn,conv7:Tn,conv8:An}}else{const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=x(C,U,"conv0"),Ve=x(U,G,"conv1"),rt=x(G,ne,"conv2"),vt=x(ne,te,"conv3"),$t=x(te,oe,"conv4"),Kt=x(oe,ge,"conv5"),Dn=x(ge,fe,"conv6"),Tn=x(fe,Ae,"conv7"),An=S(Ae,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:vt,conv4:$t,conv5:Kt,conv6:Dn,conv7:Tn,conv8:An}}if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{params:O,paramMappings:I}}function aZ(r,l){const u=ms(r,l);function p(S){const x=u(`${S}/sub`,1),v=u(`${S}/truediv`,1);return{sub:x,truediv:v}}function g(S){const x=u(`${S}/filters`,4),v=u(`${S}/bias`,1);return{filters:x,bias:v}}function f(S){const x=g(`${S}/conv`),v=p(`${S}/bn`);return{conv:x,bn:v}}const I=$c(u);return{extractConvParams:g,extractConvWithBatchNormParams:f,extractSeparableConvParams:I}}function KE(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}=aZ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:S>7?f("conv6"):void 0,conv7:S>8?f("conv7"):void 0,conv8:p("conv8")}}else I={conv0:g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:g("conv6"),conv7:g("conv7"),conv8:p("conv8")};return Pn(r,u),{params:I,paramMappings:u}}var VI;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(VI||(VI={}));class Lr{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 kt=Ke(Xe());class Vc extends En{constructor(r){super("TinyYolov2");zI(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=br(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=br(u,l.conv6),u=br(u,l.conv7),ia(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Gc(ia(r,l.conv0,"valid",!1)):wr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?wr(u,l.conv6):u,u=l.conv7?wr(u,l.conv7):u,ia(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let p=kt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?di(p,this.config.meanRgb):p,p=p.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Rt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new Lr(l),g=await Rt(r),f=await this.forwardInput(g,u),I=kt.tidy(()=>kt.unstack(f)[0].expandDims()),S={width:g.getInputWidth(0),height:g.getInputHeight(0)},x=await this.extractBoxes(I,g.getReshapedInputDimensions(0),p);f.dispose(),I.dispose();const v=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),U=x.map(te=>this.config.classes[te.label]),G=gS(v.map(te=>te.rescale(u)),O,this.config.iouThreshold,!0),ne=G.map(te=>new gc(O[te],C[te],U[te],v[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return KE(r,this.config)}extractParams(r){const l=this.config.filterSizes||Vc.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 jE(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:g}=l,f=Math.max(p,g),I=f/p,S=f/g,x=r.shape[1],v=this.config.anchors.length,[O,C,U]=kt.tidy(()=>{const oe=r.reshape([x,x,v,this.boxEncodingSize]),ge=oe.slice([0,0,0,0],[x,x,v,4]),fe=oe.slice([0,0,0,4],[x,x,v,1]),Ae=this.withClassScores?kt.softmax(oe.slice([0,0,0,5],[x,x,v,this.config.classes.length]),3):kt.scalar(0);return[ge,fe,Ae]}),G=[],ne=await C.array(),te=await O.array();for(let oe=0;oeu){const Te=(ge+nu(te[oe][ge][fe][0]))/x*I,Ve=(oe+nu(te[oe][ge][fe][1]))/x*S,rt=Math.exp(te[oe][ge][fe][2])*this.config.anchors[fe].x/x*I,vt=Math.exp(te[oe][ge][fe][3])*this.config.anchors[fe].y/x*S,$t=Te-rt/2,Kt=Ve-vt/2,Dn={row:oe,col:ge,anchor:fe},{classScore:Tn,label:An}=this.withClassScores?await this.extractPredictedClass(U,Dn):{classScore:1,label:0};G.push({box:new tu($t,Kt,$t+rt,Kt+vt),score:Ae,classScore:Ae*Tn,label:An,...Dn})}}return O.dispose(),C.dispose(),U.dispose(),G}async extractPredictedClass(r,l){const{row:u,col:p,anchor:g}=l,f=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>f[u][p][g][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}Vc.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Ou extends Vc{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:zE,classes:["face"]},r?{anchors:VE,meanRgb:YE}:{anchors:GE,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 Ht(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?qE:HE}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function cZ(r,l=!0){const u=new Ou(l);return u.extractWeights(r),u}class YI extends Lr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class wi{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const HI=Ke(Xe());async function ca(r,l,u,p,g=({alignedRect:f})=>f){const f=r.map(x=>oa(x)?g(x):x.detection),I=p||(l instanceof HI.Tensor?await kc(l,f):await Dc(l,f)),S=await u(I);return I.forEach(x=>x instanceof HI.Tensor&&x.dispose()),S}async function Yc(r,l,u,p,g){return ca([r],l,async f=>u(f[0]),p,g)}const XE=.4,JE=[new Je(1.603231,2.094468),new Je(6.041143,7.080126),new Je(2.882459,3.518061),new Je(4.266906,5.178857),new Je(9.041765,10.66308)],ZE=[117.001,114.697,97.404];class Eu extends Vc{constructor(){const r={withSeparableConvs:!0,iouThreshold:XE,classes:["face"],anchors:JE,meanRgb:ZE,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 Ht(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const pt={ssdMobilenetv1:new zc,tinyFaceDetector:new Eu,tinyYolov2:new Ou,faceLandmark68Net:new Au,faceLandmark68TinyNet:new BI,faceRecognitionNet:new Nu,faceExpressionNet:new FI,ageGenderNet:new UI},QE=(r,l)=>pt.ssdMobilenetv1.locateFaces(r,l),lZ=(r,l)=>pt.tinyFaceDetector.locateFaces(r,l),hZ=(r,l)=>pt.tinyYolov2.locateFaces(r,l),eD=r=>pt.faceLandmark68Net.detectLandmarks(r),uZ=r=>pt.faceLandmark68TinyNet.detectLandmarks(r),dZ=r=>pt.faceRecognitionNet.computeFaceDescriptor(r),pZ=r=>pt.faceExpressionNet.predictExpressions(r),mZ=r=>pt.ageGenderNet.predictAgeAndGender(r),tD=r=>pt.ssdMobilenetv1.load(r),fZ=r=>pt.tinyFaceDetector.load(r),gZ=r=>pt.tinyYolov2.load(r),yZ=r=>pt.faceLandmark68Net.load(r),bZ=r=>pt.faceLandmark68TinyNet.load(r),wZ=r=>pt.faceRecognitionNet.load(r),LZ=r=>pt.faceExpressionNet.load(r),SZ=r=>pt.ageGenderNet.load(r),IZ=tD,xZ=QE,TZ=eD;class nD extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Fu extends nD{async run(){const r=await this.parentTask,l=await ca(r,this.input,async u=>await Promise.all(u.map(p=>pt.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Jf(u,l[p]))}withAgeAndGender(){return new Du(this,this.input)}}class _u extends nD{async run(){const r=await this.parentTask;if(!r)return;const l=await Yc(r,this.input,u=>pt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Jf(r,l)}withAgeAndGender(){return new ku(this,this.input)}}class jc extends Fu{withAgeAndGender(){return new Hc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class Kc extends _u{withAgeAndGender(){return new qc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class sD extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Du extends sD{async run(){const r=await this.parentTask,l=await ca(r,this.input,async u=>await Promise.all(u.map(p=>pt.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:g,gender:f,genderProbability:I}=l[p];return ng(sg(u,f,I),g)})}withFaceExpressions(){return new Fu(this,this.input)}}class ku extends sD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await Yc(r,this.input,g=>pt.ageGenderNet.predictAgeAndGender(g),this.extractedFaces);return ng(sg(r,u,p),l)}withFaceExpressions(){return new _u(this,this.input)}}class Hc extends Du{withFaceExpressions(){return new jc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class qc extends ku{withFaceExpressions(){return new Kc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class qI extends wi{constructor(r,l){super();this.parentTask=r;this.input=l}}class la extends qI{async run(){const r=await this.parentTask,l=await ca(r,this.input,u=>Promise.all(u.map(p=>pt.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>tg(r[p],u))}withFaceExpressions(){return new jc(this,this.input)}withAgeAndGender(){return new Hc(this,this.input)}}class ha extends qI{async run(){const r=await this.parentTask;if(!r)return;const l=await Yc(r,this.input,u=>pt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return tg(r,l)}withFaceExpressions(){return new Kc(this,this.input)}withAgeAndGender(){return new qc(this,this.input)}}const Wu=Ke(Xe());class jI extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?pt.faceLandmark68TinyNet:pt.faceLandmark68Net}}class KI extends jI{async run(){const r=await this.parentTask,l=r.map(g=>g.detection),u=this.input instanceof Wu.Tensor?await kc(this.input,l):await Dc(this.input,l),p=await Promise.all(u.map(g=>this.landmarkNet.detectLandmarks(g)));return u.forEach(g=>g instanceof Wu.Tensor&&g.dispose()),r.map((g,f)=>Mc(g,p[f]))}withFaceExpressions(){return new jc(this,this.input)}withAgeAndGender(){return new Hc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class XI extends jI{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Wu.Tensor?await kc(this.input,[l]):await Dc(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(g=>g instanceof Wu.Tensor&&g.dispose()),Mc(r,p)}withFaceExpressions(){return new Kc(this,this.input)}withAgeAndGender(){return new qc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class JI extends wi{constructor(r,l=new yi){super();this.input=r;this.options=l}}class rg extends JI{async run(){const{input:r,options:l}=this,u=l instanceof YI?p=>pt.tinyFaceDetector.locateFaces(p,l):l instanceof yi?p=>pt.ssdMobilenetv1.locateFaces(p,l):l instanceof Lr?p=>pt.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=>Yo({},u)))})}withFaceLandmarks(r=!1){return new KI(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Fu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Du(this.runAndExtendWithFaceDetections(),this.input)}}class ZI extends JI{async run(){const r=await new rg(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?Yo({},l):void 0)})}withFaceLandmarks(r=!1){return new XI(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new _u(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new ku(this.runAndExtendWithFaceDetection(),this.input)}}function AZ(r,l=new yi){return new ZI(r,l)}function og(r,l=new yi){return new rg(r,l)}async function iD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await og(r,new yi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function vZ(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await og(r,new Lr(l)).withFaceLandmarks().withFaceDescriptors()}const NZ=iD;function QI(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((g,f)=>g-p[f]).reduce((g,f)=>g+Math.pow(f,2),0))}class rD{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 g=()=>`person ${p++}`;this._labeledDescriptors=u.map(f=>{if(f instanceof Vo)return f;if(f instanceof Float32Array)return new Vo(g(),[f]);if(f.descriptor&&f.descriptor instanceof Float32Array)return new Vo(g(),[f.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=>QI(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new mm(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>Vo.fromJSON(u));return new rD(l,r.distanceThreshold)}}function CZ(r){const l=new Eu;return l.extractWeights(r),l}function oD(r,l){const{width:u,height:p}=new us(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(g=>oD(g,{width:u,height:p}));if(oa(r)){const g=r.detection.forSize(u,p),f=r.unshiftedLandmarks.forSize(g.box.width,g.box.height);return Mc(Yo(r,g),f)}return Ui(r)?Yo(r,r.detection.forSize(u,p)):r instanceof Gs||r instanceof Ht?r.forSize(u,p):r}var aD="0.8.1";const RZ=Ke(Xe()),OZ=typeof process!="undefined",EZ=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",DZ={faceapi:aD,node:OZ,browser:EZ};export{UI as AgeGenderNet,tu as BoundingBox,Ct as Box,wi as ComposableTask,la as ComputeAllFaceDescriptorsTask,qI as ComputeFaceDescriptorsTaskBase,ha as ComputeSingleFaceDescriptorTask,KI as DetectAllFaceLandmarksTask,rg as DetectAllFacesTask,jI as DetectFaceLandmarksTaskBase,JI as DetectFacesTaskBase,XI as DetectSingleFaceLandmarksTask,ZI as DetectSingleFaceTask,us as Dimensions,kI as FACE_EXPRESSION_LABELS,Ht as FaceDetection,rZ as FaceDetectionNet,FI as FaceExpressionNet,ra as FaceExpressions,Au as FaceLandmark68Net,BI as FaceLandmark68TinyNet,V9 as FaceLandmarkNet,Gs as FaceLandmarks,YX as FaceLandmarks5,iu as FaceLandmarks68,mm as FaceMatch,rD as FaceMatcher,Nu as FaceRecognitionNet,gr as Gender,fm as LabeledBox,Vo as LabeledFaceDescriptors,to as NetInput,En as NeuralNetwork,gc as ObjectDetection,Je as Point,HX as PredictedBox,su as Rect,zc as SsdMobilenetv1,yi as SsdMobilenetv1Options,Eu as TinyFaceDetector,YI as TinyFaceDetectorOptions,Ou as TinyYolov2,Lr as TinyYolov2Options,VI as TinyYolov2SizeType,NZ as allFaces,iD as allFacesSsdMobilenetv1,vZ as allFacesTinyYolov2,AS as awaitMediaLoaded,vS as bufferToImage,dZ as computeFaceDescriptor,bc as createCanvas,ou as createCanvasFromMedia,iZ as createFaceDetectionNet,q9 as createFaceRecognitionNet,PE as createSsdMobilenetv1,CZ as createTinyFaceDetector,cZ as createTinyYolov2,og as detectAllFaces,eD as detectFaceLandmarks,uZ as detectFaceLandmarksTiny,TZ as detectLandmarks,AZ as detectSingleFace,WI as draw,gt as env,QI as euclideanDistance,ng as extendWithAge,tg as extendWithFaceDescriptor,Yo as extendWithFaceDetection,Jf as extendWithFaceExpressions,Mc as extendWithFaceLandmarks,sg as extendWithGender,kc as extractFaceTensors,Dc as extractFaces,W9 as fetchImage,OI as fetchJson,$9 as fetchNetWeights,sa as fetchOrThrow,Jn as getContext2dOrThrow,qo as getMediaDimensions,NS as imageTensorToCanvas,RI as imageToSquare,PX as inverseSigmoid,mS as iou,wm as isMediaElement,ru as isMediaLoaded,j9 as isWithAge,Ui as isWithFaceDetection,_I as isWithFaceExpressions,oa as isWithFaceLandmarks,K9 as isWithGender,SZ as loadAgeGenderModel,IZ as loadFaceDetectionModel,LZ as loadFaceExpressionModel,yZ as loadFaceLandmarkModel,bZ as loadFaceLandmarkTinyModel,wZ as loadFaceRecognitionModel,tD as loadSsdMobilenetv1Model,fZ as loadTinyFaceDetectorModel,gZ as loadTinyYolov2Model,EI as loadWeightMap,xZ as locateFaces,U9 as matchDimensions,fS as minBbox,pt as nets,gS as nonMaxSuppression,di as normalize,yS as padToSquare,mZ as predictAgeAndGender,pZ as recognizeFaceExpressions,oD as resizeResults,Ho as resolveInput,MX as shuffleArray,nu as sigmoid,QE as ssdMobilenetv1,RZ as tf,lZ as tinyFaceDetector,hZ as tinyYolov2,Rt as toNetInput,hS as utils,zI as validateConfig,DZ as version}; + with dtype ${I.dtype}. `)});const p=(I,S)=>{const x=ht(l,u[0].shape)[0],v=WR(u.map(U=>U.shape),x);if(qt(v)===0)return YS([],v);if(u=u.filter(U=>U.size>0),u.length===1)return u[0];const O=u.map(U=>U.shape);_R(O,x);const C=I.concat(u,x);return S(u),C},g=u,f={axis:l};return Y.runKernelFunc(p,g,null,Tm,f)}const yn=z({concat_:$7});function U7(r){const l=M(r,"x","sigmoid"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sigmoid(l);return g([f]),f},u,null,sf)}const JS=z({sigmoid_:U7});function B7(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const g=(S,x)=>{const[v,O]=Af(p,l,u);return OR(p,v,O),x([p]),S.slice(p,v,O)},f={x:p},I={begin:l,size:u};return Y.runKernelFunc(g,f,null,ef,I)}const Tt=z({slice_:B7});function M7(r,l,u){const p=M(r,"x","batchToSpaceND"),g=l.reduce((x,v)=>x*v);Z(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),Z(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),Z(p.shape[0]%g===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${g}`);const f=x=>x.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return Y.runKernelFunc(f,I,null,Im,S)}const ZS=z({batchToSpaceND_:M7});function P7(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const O=u.shape.slice();for(;O.length=0;O--)if(g[O]===l[O])f[O]=1;else if(u.shape[O]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=f.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(I.length===0)return pi(u);const S=O=>O.tile(u,f),x={x:u},v={shape:l,inputShape:g};return Y.runKernelFunc(S,x,null,xm,v)}const Rf=z({broadcastTo_:P7});function z7(r,l,u,p,g="NHWC",f=[1,1],I){const S=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let v=S,O=!1;S.rank===3&&(O=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2]])),Z(v.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${v.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&Z(Qt(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const C=g==="NHWC"?v.shape[3]:v.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(Jr(u,f),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${f}'`);const U=(oe,ge)=>{const fe=Cc(g),Ae=dr(v.shape,x.shape,u,f,p,I,!1,fe),Te=oe.conv2d(v,x,Ae);return ge([v,x]),Te},G={x:v,filter:x},ne={strides:u,pad:p,dataFormat:g,dilations:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,Am,ne);return O?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const QS=z({conv2d_:z7});function G7(r,l,u,p,g,f="NHWC",I){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,v=!1;l.rank===3&&(v=!0,x=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),Z(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const O=f==="NHWC"?S[3]:S[1],C=f==="NHWC"?x.shape[3]:x.shape[1];Z(O===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${u.shape[2]}.`),Z(C===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[3]}.`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const U=(oe,ge)=>{const fe=1,Ae=Cc(f),Te=dr(S,u.shape,p,fe,g,I,!1,Ae),Ve=oe.conv2dDerInput(x,u,Te);return ge([x,u]),Ve},G={dy:x,filter:u},ne={strides:p,pad:g,dataFormat:f,dimRoundingMode:I,inputShape:S},te=Y.runKernelFunc(U,G,null,vm,ne);return v?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const $R=z({conv2DBackpropInput_:G7});function V7(r,l,u,p,g){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let f=r,I=l,S=!1;l.rank===4&&(S=!0,I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),f=[1,r[0],r[1],r[2],r[3]]);const x=f[4],v=I.shape[4];Z(f.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${f.length}.`),Z(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),Z(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),Z(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),Z(v===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${v}) must match output depth for filter ${u.shape[4]}.`);const O=ne=>{const te=1,oe=fu(f,u.shape,p,te,g);return ne.conv3dDerInput(I,u,oe)},C={dy:I},U={pad:g},G=Y.runKernelFunc(O,C,null,QC,U);return S?ie(G,[G.shape[1],G.shape[2],G.shape[3],G.shape[4]]):G}const UR=z({conv3DBackpropInput_:V7});function Y7(r){const l=M(r,"x","cos"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cos(l);return g([l]),f},u,null,Nm)}const gu=z({cos_:Y7});function H7(r){const l=M(r,"x","cosh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cosh(l);return g([l]),f},u,null,Cm)}const eI=z({cosh_:H7});function q7(r,l=0,u=!1,p=!1){const g=M(r,"x","cumsum"),f=(x,v)=>{const O=ds([l],g.rank);let C=g;O!=null&&(C=Wt(g,O));const U=Kr(1,g.rank)[0];let G=x.cumsum(C,U,u,p);if(v([g]),O!=null){const ne=vc(O);G=Wt(G,ne)}return G},I={x:g},S={axis:l,exclusive:u,reverse:p};return Y.runKernelFunc(f,I,null,Rm,S)}const tI=z({cumsum_:q7});function At(r,l){const u=[];for(let p=0;p1)&&u.unshift(f)}return u}function it(r,l){const u=[],p=Math.max(r.length,l.length);for(let g=0;gI.equal(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,h2)}const nI=z({equal_:j7});function K7(r,l,u){const p=M(l,"a","where"),g=M(u,"b","where"),f=M(r,"condition","where","bool"),I=it(p.shape,g.shape),S=Rf(p,I),x=Rf(g,I);f.rank===1&&Z(f.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),f.rank!==1&&Zt(f.shape,x.shape,"Error in where: ");const v=(C,U)=>{const G=C.select(f,S,x);return U([f]),G},O={condition:f,t:S,e:x};return Y.runKernelFunc(v,O,null,Qm)}const Bn=z({where_:K7});function X7(r){const l=M(r,"x","zerosLike"),u={x:l};return Y.runKernelFunc(p=>p.zerosLike(l),u,null,ff)}const qe=z({zerosLike_:X7});function J7(r){const l=M(r,"x","exp"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.exp(l);return g([f]),f},u,null,Em)}const Mn=z({exp_:J7});function Z7(r,l=0){const u=null,p=M(r,"x","expandDims",u);Z(l<=p.rank,()=>"Axis must be <= rank of the tensor");const g=p.shape.slice();return l<0&&(Z(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),g.splice(l,0,1),ie(p,g)}const Os=z({expandDims_:Z7});function Q7(r,l){const u=null,p=M(r,"x","tile",u);Z(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const g=(x,v)=>{const O=x.tile(p,l);return v([p]),O},f=[p],I={x:p},S={reps:l};return Y.runKernelFunc(g,I,null,uf,S,f)}const Jo=z({tile_:Q7});function eJ(r,l,u,p="float32"){l==null&&(l=r);const g=mu([r,l],p),f=r<=l?r:l;for(let S=0;Sg.fill(r,l,u),{},null,p2,p)}function tJ(r){const l=M(r,"x","floor"),u={x:l};return Y.runKernelFunc(p=>p.floor(l),u,null,Dm)}const rI=z({floor_:tJ});function BR(r,l,u){const p=r.shape[u],g=[];let f=1,I=1;for(let S=0;S{const O=ht(u,p.shape)[0],C=BR(p,g,O),U=x.gather(p,ie(g,[g.size]),O);return v([p,g]),ie(U,C.outputShape)};return Y.runKernelFunc(S,f,null,Fm,I)}const oI=z({gather_:nJ});function sJ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.greater(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,g2)}const mi=z({greater_:sJ});function iJ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.greaterEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,_m)}const pr=z({greaterEqual_:iJ});function rJ(r){const l=M(r,"input","imag"),u=g=>g.imag(l),p={input:l};return Y.runKernelFunc(u,p,null,b2)}const yu=z({imag_:rJ});function oJ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=mt(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.maximum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Mm)}const aI=z({maximum_:oJ});function ke(r,l){if((Rs(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"&&Rs(r)&&!(r instanceof Uint8Array))throw new Error("When making a scalar from encoded string, the value must be `Uint8Array`.");const u=[],p=[];return zi(r,u,p,l)}function aJ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.less(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,I2)}const cI=z({less_:aJ});function cJ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.lessEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,x2)}const mr=z({lessEqual_:cJ});function lJ(r){const l=M(r,"x","log"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log(l);return g([l]),f},u,null,$m)}const Zr=z({log_:lJ});function hJ(r){const l=M(r,"x","log1p"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log1p(l);return g([l]),f},u,null,Um)}const lI=z({log1p_:hJ});function Of(r){return Y.customGrad(r)}function uJ(r){const l=M(r,"x","neg"),u={x:l};return Y.runKernelFunc(p=>p.neg(l),u,null,Vm)}const yt=z({neg_:uJ});function dJ(r,l=null,u=!1){const p=M(r,"x","max"),g=(S,x)=>{const v=ht(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=Wt(p,C),O=Kr(O.length,U.rank));const G=S.max(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Zn(ne.shape,ht(l,p.shape));ne=ie(ne,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={reductionIndices:l,keepDims:u};return Y.runKernelFunc(g,f,null,Bm,I)}const Zo=z({max_:dJ});function pJ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=mt(u,p);const g=(I,S)=>{const x=I.subtract(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,hf)}const Be=z({sub_:pJ});function mJ(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Le(p,"int32"));const g=(S,x)=>{x([p]);const v=ht(l,p.shape),O=ds(v,p.rank);let C=v,U=p;O!=null&&(U=Wt(p,O),C=Kr(C.length,p.rank));let G=S.sum(U,C);if(u){const ne=Zn(G.shape,v);G=ie(G,ne)}return G},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,of,I)}const Fe=z({sum_:mJ});function fJ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),g=ht(l,p.shape),f=Zo(p,g,!0),I=Be(p,f),S=Mn(I),x=Fe(S,g),v=Zr(x),O=Lt(ie(f,v.shape),v);if(u){const C=Zn(O.shape,g);return ie(O,C)}return O}const hI=z({logSumExp_:fJ});function gJ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");it(u.shape,p.shape);const g={a:u,b:p};return Y.runKernelFunc(f=>f.logicalAnd(u,p),g,null,T2)}const Qo=z({logicalAnd_:gJ});function yJ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return Y.runKernelFunc(p=>p.logicalNot(l),u,null,A2)}const uI=z({logicalNot_:yJ});function Es(r,l="float32"){if(l==="complex64"){const p=Es(r,"float32"),g=Es(r,"float32");return Pi(p,g)}const u=Ko(qt(r),l);return Y.makeTensor(u,r,l)}function Gi(r,l="float32"){if(l==="complex64"){const p=Gi(r,"float32"),g=Es(r,"float32");return Pi(p,g)}const u=wf(qt(r),l);return Y.makeTensor(u,r,l)}function bJ(r,l=null,u=!1){const p=M(r,"x","mean"),g=ht(l,p.shape),f=kR(p.shape,g),I=f[1],S=qt(I),x=Of(v=>{const O=ke(S),C=O.dtype===v.dtype?v:Le(v,O.dtype),U=Pe(C,O),G=Fe(U,l,u),ne=te=>{const oe=v.shape.slice();g.forEach(Ae=>{oe[Ae]=1});const ge=ie(te,oe),fe=Pe(ae(ge,Gi(v.shape,"float32")),S);return fe};return{value:G,gradFunc:ne}});return x(p)}const dI=z({mean_:bJ});function wJ(r,l=null,u=!1){const p=M(r,"x","min"),g=(S,x)=>{const v=ht(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=Wt(p,C),O=Kr(O.length,p.rank));const G=S.min(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Zn(ne.shape,v);ne=ie(G,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,Pm,I)}const Ef=z({min_:wJ});function LJ(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=mt(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.minimum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,zm)}const pI=z({minimum_:LJ});function SJ(r){const l=M(r,"x","square"),u={},p=[l],g=[];return Y.runKernelFunc((f,I)=>(I([l]),f.square(l)),{x:l},null,"Square",u,p,g)}const ut=z({square_:SJ});function IJ(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=mt(u,p),it(u.shape,p.shape);const g=I=>I.notEqual(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,F2)}const mI=z({notEqual_:IJ});function xJ(r){const l=M(r,"input","real"),u=g=>g.real(l),p={input:l};return Y.runKernelFunc(u,p,null,z2)}const Rc=z({real_:xJ});function TJ(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 g=(S,x)=>(x([p]),S.pad(p,l,u)),f={paddings:l,constantValue:u},I={x:p};return Y.runKernelFunc(g,I,null,Ym,f)}const fI=z({pad_:TJ});function AJ(r,l,u){const p=M(r,"x","spaceToBatchND");Z(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),Z(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),Z(p.shape.reduce((S,x,v)=>v>0&&v<=l.length?S&&(x+u[v-1][0]+u[v-1][1])%l[v-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const g=S=>S.spaceToBatchND(p,l,u),f={x:p},I={blockShape:l,paddings:u};return Y.runKernelFunc(g,f,null,af,I)}const gI=z({spaceToBatchND_:AJ});function vJ(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=mt(u,p);const g={a:u,b:p},f=(I,S)=>{const x=I.pow(u,p);return S([u,p,x]),x};return Y.runKernelFunc(f,g,null,Hm)}const ea=z({pow_:vJ});function Qr(r,l){Sc(r);const u=ur(r,l);if(u.length!==1)throw new Error("tensor1d() requires values to be a flat/TypedArray");const p=null;return zi(r,p,u,l)}function Df(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const g=()=>{const I=r===l,S=r1;if(I||S||x)return Es([0],p);const v=Math.abs(Math.ceil((l-r)/u)),O=Ko(v,p);l(f([l]),l.dtype==="bool"?Le(l,"int32"):g.relu(l)),p={x:l};return Y.runKernelFunc(u,p,null,qm)}const bu=z({relu_:NJ});function CJ(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ht(l,u.shape);if(u.rank===0)return pi(u);const x=I.reverse(u,S);return ie(x,u.shape)},g={x:u},f={dims:l};return Y.runKernelFunc(p,g,null,Jm,f)}const Oc=z({reverse_:CJ});function RJ(r){const l=M(r,"x","rsqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.rsqrt(l);return g([l]),f},u,null,Zm)}const yI=z({rsqrt_:RJ});function OJ(r){const l=M(r,"x","sin"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sin(l);return g([l]),f},u,null,tf)}const bI=z({sin_:OJ});function EJ(r){const l=M(r,"x","sinh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sinh(l);return g([l]),f},u,null,nf)}const wI=z({sinh_:EJ});function DJ(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=r.as2D(g,p),I=u.fft(f);return I.reshape(r.shape)},l,null,d2)}const wu=z({fft_:DJ});function kJ(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=ie(r,[g,p]),I=u.ifft(f);return ie(I,r.shape)},l,null,y2)}const Ec=z({ifft_:kJ});function FJ(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const g=ie(r,[u,l]);p=Ec(g)}else{const g=[u,2*(l-1)],f=ie(Rc(r),[u,l]),I=ie(yu(r),[u,l]),S=Oc(Tt(f,[0,1],[u,l-2]),1),x=ae(Oc(Tt(I,[0,1],[u,l-2]),1),ke(-1)),v=yn([f,S],1),O=yn([I,x],1),C=ie(Pi(v,O),[g[0],g[1]]);p=Ec(C)}if(p=Rc(p),r.rank===3&&r.shape[0]!==0){const g=p,f=r.shape[0];p=ie(p,[f,p.shape[0]/f,p.shape[1]]),g.dispose()}return p}const LI=z({irfft_:FJ});function MR(r,l,u=0){let p=[];if(typeof l=="number")Z(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const g=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);Z(g<=1,()=>"There should be only one negative value in split array.");const f=l.indexOf(-1);if(f!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[f]=r.shape[u]-I}Z(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 _J(r,l,u=0){const p=M(r,"x","split"),g=(S,x)=>{const v=ht(u,p.shape)[0],O=MR(p,l,v);return S.split(p,O,v)},f={x:p},I={numOrSizeSplits:l,axis:u};return Y.runKernelFunc(g,f,null,cf,I)}const eo=z({split_:_J});function WJ(r,l){Z(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 g;if(l!=null&&l0),te=r.shape.map(oe=>oe);te[r.shape.length-1]=l,g=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,g=yn([r,Es(ne)],r.shape.length-1),u=l}else g=r;const f=qe(g),I=ie(Pi(g,f),[p,u]),S=wu(I),x=Math.floor(u/2)+1,v=Rc(S),O=yu(S),C=eo(v,[x,u-x],v.shape.length-1),U=eo(O,[x,u-x],O.shape.length-1),G=g.shape.slice();return G[g.shape.length-1]=x,ie(Pi(C[0],U[0]),G)}const Lu=z({rfft_:WJ});function $J(r){const l=M(r,"x","sqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sqrt(l);return g([l]),f},u,null,rf)}const ps=z({sqrt_:$J});function UJ(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=mt(u,p),it(u.shape,p.shape);const g=(S,x)=>{const v=S.squaredDifference(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,lf,I)}const SI=z({squaredDifference_:UJ});function BJ(r,l){const u=M(r,"x","squeeze");return ie(u,rR(u.shape,l).newShape)}const II=z({squeeze_:BJ});function MJ(r,l=0){const u=Tf(r,"tensors","stack");if(Z(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Os(u[0],l);const p=u[0].rank,g=u[0].shape,f=u[0].dtype;Z(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{Zt(g,S.shape,"All tensors passed to stack must have matching shapes"),Z(f===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Os(S,l));return yn(I,l)}const Vs=z({stack_:MJ});function PJ(r,l=0){const u=M(r,"x","step"),p={x:u},g={alpha:l};return Y.runKernelFunc(f=>f.step(u,l),p,null,gf,g)}const ta=z({step_:PJ});function na(r,l,u){if(Sc(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=ur(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 zi(r,l,p,u)}function zJ(r,l,u){const p=M(r,"x","unsortedSegmentSum"),g=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(u),()=>"numSegments must be of dtype int");const f={x:p,segmentIds:g},I={numSegments:u},S=(x,v)=>{const O=x.unsortedSegmentSum(p,g,u);return v([g]),O};return Y.runKernelFunc(S,f,null,mf,I)}const xI=z({unsortedSegmentSum_:zJ});function GJ(r,l=0){const u=M(r,"x","unstack");Z(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},g={axis:l},f=I=>I.unstack(u,l);return Y.runKernelFunc(f,p,null,pf,g)}const Su=z({unstack_:GJ});function VJ(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const g=PR(r,l,u);let f=g.shape;if(p){const I=ht(u,r.shape);f=Zn(g.shape,I)}return ie(g,f)}function PR(r,l,u=null){if(r.rank===0)return Un(r);if(r.rank!==1&&u===null)return PR(ie(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return Fe(Un(r),u);if(l===Infinity)return Zo(Un(r),u);if(l===-Infinity)return Ef(Un(r),u);if(l==="euclidean"||l===2)return ps(Fe(ea(Un(r),ke(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return Zo(Fe(Un(r),u[0]),u[1]-1);if(l===Infinity)return Zo(Fe(Un(r),u[1]),u[0]);if(l===-Infinity)return Ef(Fe(Un(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return ps(Fe(ut(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const kf=z({norm_:VJ});function zR(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function Ff(r,l,u){const p=1-r%2,g=new Float32Array(r);for(let f=0;f`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const v=f==="NHWC"?S.shape[3]:S.shape[1],O=f==="NHWC"?x.shape[3]:x.shape[1];Z(v===u[2],()=>`Error in conv2dDerFilter: depth of input ${v}) must match input depth in filter (${u[2]}.`),Z(O===u[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${u[3]}).`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const C=ne=>{const te=1,oe=Cc(f),ge=dr(S.shape,u,p,te,g,I,!1,oe);return ne.conv2dDerFilter(S,x,ge)},U={x:S,dy:x},G={strides:p,pad:g,dataFormat:f,dimRoundingMode:I};return Y.runKernelFunc(C,U,null,XC,G)}const _f=z({conv2DBackpropFilter_:YJ});function HJ(r,l,u,p){let g=r;r.rank===3&&(g=ie(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let f=l;f.rank===3&&(f=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=x=>x.depthwiseConv2DDerFilter(g,f,p),S={x:g,dy:f};return Y.runKernelFunc(I,S,null,n2)}const GR=z({depthwiseConv2dNativeBackpropFilter_:HJ});function qJ(r,l,u,p){let g=l,f=!1;l.rank===3&&(f=!0,g=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=v=>v.depthwiseConv2DDerInput(g,u,p),S={dy:g},x=Y.runKernelFunc(I,S,null,s2);return f?ie(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const VR=z({depthwiseConv2dNativeBackpropInput_:qJ});function jJ(r){return Ff(r,.54,.46)}const YR=z({hammingWindow_:jJ});function KJ(r){return Ff(r,.5,.5)}const Wf=z({hannWindow_:KJ});function XJ(r,l,u,p=!1,g=0){let f=0;const I=[];for(;f+l<=r.size;)I.push(Tt(r,f,l)),f+=u;if(p)for(;f`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),Z(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${v},4] but had shape ${S.shape}.`),Z(x.rank===1&&x.shape[0]===v,()=>`Error in cropAndResize: boxInd must be have size [${v}] but had shape ${S.shape}.`),Z(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),Z(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),Z(g==="bilinear"||g==="nearest",()=>`method must be bilinear or nearest, but was ${g}`);const O=ne=>ne.cropAndResize(I,S,x,p,g,f),C={image:I,boxes:S,boxInd:x},U={method:g,extrapolationValue:f,cropSize:p},G=Y.runKernelFunc(O,C,null,e2,U);return G}const qR=z({cropAndResize_:ZJ});function QJ(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=Y.runKernel(m2,u,{});return p}const jR=z({flipLeftRight_:QJ});function e9(r,l,u=0,p=.5){const g=M(r,"image","rotateWithOffset","float32");Z(g.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${g.rank}.`);const f={image:g},I={radians:l,fillValue:u,center:p},S=Y.runKernel(tR,f,I);return S}const KR=z({rotateWithOffset_:e9});function Ys(r,l,u,p,g,f){p==null&&(p=.5),g==null&&(g=Number.NEGATIVE_INFINITY),f==null&&(f=0);const I=r.shape[0];return u=Math.min(u,I),Z(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),Z(0<=f&&f<=1,()=>`softNmsSigma must be in [0, 1], but was '${f}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f}}function t9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=Ys(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:p,scoreThreshold:g};return Y.runKernelFunc(v=>v.nonMaxSuppression(f,I,u,p,g),{boxes:f,scores:I},null,_2,x)}const XR=z({nonMaxSuppression_:t9});function JR(r,l,u){const p=n9(r,l,u),g=p<0?-(p+1):p;r.splice(g,0,l)}function n9(r,l,u){return i9(r,l,u||s9)}function s9(r,l){return r>l?1:r>>1);const S=u(l,r[f]);S>0?p=f+1:(g=f,I=!S)}return I?p:-p-1}function ZR(r,l,u,p,g){return TI(r,l,u,p,g,0).selectedIndices}function QR(r,l,u,p,g,f){return TI(r,l,u,p,g,0,!1,f,!0)}function eO(r,l,u,p,g,f){return TI(r,l,u,p,g,f,!0)}function TI(r,l,u,p,g,f,I=!1,S=!1,x=!1){const v=[];for(let oe=0;oeg&&v.push({score:l[oe],boxIndex:oe,suppressBeginIndex:0});v.sort(tO);const O=f>0?-.5/f:0,C=[],U=[];for(;C.length0;){const oe=v.pop(),{score:ge,boxIndex:fe,suppressBeginIndex:Ae}=oe;if(ge=Ae;--Ve){const rt=r9(r,fe,C[Ve]);if(rt>=p){Te=!0;break}if(oe.score=oe.score*o9(p,O,rt),oe.score<=g)break}oe.suppressBeginIndex=C.length,Te||(oe.score===ge?(C.push(fe),U.push(oe.score)):oe.score>g&&JR(v,oe,tO))}const G=C.length,ne=u-G;S&&ne>0&&(C.push(...new Array(ne).fill(0)),U.push(...new Array(ne).fill(0)));const te={selectedIndices:Qr(C,"int32")};return I&&(te.selectedScores=Qr(U,"float32")),x&&(te.validOutputs=ke(G,"int32")),te}function r9(r,l,u){const p=r.subarray(l*4,l*4+4),g=r.subarray(u*4,u*4+4),f=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),x=Math.max(p[1],p[3]),v=Math.min(g[0],g[2]),O=Math.min(g[1],g[3]),C=Math.max(g[0],g[2]),U=Math.max(g[1],g[3]),G=(S-f)*(x-I),ne=(C-v)*(U-O);if(G<=0||ne<=0)return 0;const te=Math.max(f,v),oe=Math.max(I,O),ge=Math.min(S,C),fe=Math.min(x,U),Ae=Math.max(ge-te,0)*Math.max(fe-oe,0);return Ae/(G+ne-Ae)}function o9(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function tO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function a9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=Ys(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x=await Promise.all([f.data(),I.data()]),v=x[0],O=x[1],C=ZR(v,O,u,p,g);return f!==r&&f.dispose(),I!==l&&I.dispose(),C}const nO=a9;function c9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=Ys(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v={boxes:I,scores:S},O={maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f},C=Y.runKernel($2,v,O);return{selectedIndices:C[0],selectedScores:C[1]}}const sO=z({nonMaxSuppressionWithScore_:c9});async function l9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=Ys(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v=await Promise.all([I.data(),S.data()]),O=v[0],C=v[1],U=eO(O,C,u,p,g,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),U}const iO=l9;function h9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=Ys(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,U={boxes:I,scores:S},G={maxOutputSize:v,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:f},ne=Y.runKernel(W2,U,G);return{selectedIndices:ne[0],validOutputs:ne[1]}}const rO=z({nonMaxSuppressionPadded_:h9});async function u9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=Ys(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[U,G]=await Promise.all([I.data(),S.data()]),ne=QR(U,G,v,O,C,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const oO=u9;function d9(r,l,u=!1){const p=M(r,"images","resizeBilinear");Z(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x=(U,G)=>(G([g]),U.resizeBilinear(g,I,S,u)),v={images:g},O={alignCorners:u,size:l},C=Y.runKernelFunc(x,v,null,Xm,O);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const aO=z({resizeBilinear_:d9});function p9(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");Z(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x={images:g},v={alignCorners:u,size:l},O=(U,G)=>(G([g]),U.resizeNearestNeighbor(g,I,S,u)),C=Y.runKernelFunc(O,x,null,Km,v);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const cO=z({resizeNearestNeighbor_:p9});function m9(r,l,u){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");Z(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const g=p.shape,[f,I]=p.shape.slice(-2);if(!(l<=f))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${f}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=f),u<0&&(u=I);const S=ie(Df(0,f,1,"int32"),[-1,1]),x=Df(0,I,1,"int32"),v=Be(S,x),O=Qo(mr(v,ke(+l,"int32")),pr(v,ke(-u,"int32"))),C=Es([f,I],p.dtype);return ie(Vs(Su(ie(p,[-1,f,I])).map(U=>Bn(O,U,C))),g)}const lO=z({bandPart_:m9});function f9(r){let l;if(Array.isArray(r)){l=!1,Z(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const g=r[0].shape[0];for(let f=1;f`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[f].shape[0]} vs. ${g})`)}else l=!0,r=eo(r,r.shape[0],0).map(g=>II(g,[0]));Z(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 g=0;g{let f=p[g];if(g>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 uO(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,v)=>x*v),p=Su(ie(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),g=[],f=[];p.forEach(x=>{const[v,O]=uO(x,l);g.push(v),f.push(O)});const I=ie(Vs(g,0),r.shape),S=ie(Vs(f,0),r.shape);return[I,S]}}function uO(r,l=!1){return Y.tidy(()=>{Z(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 g=sI(u),f=pi(r);const I=na([[1]],[1,1]);let S=pi(I);const x=u>=p?p:u;for(let v=0;v{const G=Tt(f,[v,v],[u-v,1]),ne=kf(G),te=Tt(f,[v,v],[1,1]),oe=Bn(mi(te,0),na([[-1]]),na([[1]])),ge=Be(te,ae(oe,ne)),fe=Pe(G,ge);fe.shape[0]===1?S=pi(I):S=yn([I,Tt(fe,[1,0],[fe.shape[0]-1,fe.shape[1]])],0);const Ae=yt(Pe(dn(oe,ge),ne)),Te=Tt(f,[v,0],[u-v,p]),Ve=ae(Ae,S),rt=Wt(S);if(v===0)f=Be(Te,dn(Ve,dn(rt,Te)));else{const Kt=Be(Te,dn(Ve,dn(rt,Te)));f=yn([Tt(f,[0,0],[v,p]),Kt],0)}const vt=Wt(Ve),$t=Tt(g,[0,v],[u,g.shape[1]-v]);if(v===0)g=Be($t,dn(dn($t,S),vt));else{const Kt=Be($t,dn(dn($t,S),vt));g=yn([Tt(g,[0,0],[u,v]),Kt],1)}return[S,f,g]}),DR([O,C,U])}return!l&&u>p&&(g=Tt(g,[0,0],[u,p]),f=Tt(f,[0,0],[p,p])),[g,f]})}const dO=z({qr_:g9});var jt;(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"})(jt||(jt={}));function y9(r,l,u=jt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let g=null;l!=null&&(g=M(l,"weights","computeWeightedLoss"));const f=g==null?p:ae(p,g);if(u===jt.NONE)return f;if(u===jt.SUM)return Fe(f);if(u===jt.MEAN){if(g==null)return dI(f);{const I=p.size/g.size,S=Pe(Fe(f),Fe(g));return I>1?Pe(S,ke(I)):S}}if(u===jt.SUM_BY_NONZERO_WEIGHTS){if(g==null)return Pe(Fe(f),ke(p.size));{const I=ae(g,Gi(p.shape)),S=Le(Fe(mI(I,ke(0))),"float32");return Pe(Fe(f),S)}}throw Error(`Unknown reduction: ${u}`)}const xn=z({computeWeightedLoss_:y9});function b9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","absoluteDifference"),f=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),Zt(g.shape,f.shape,"Error in absoluteDifference: ");const S=Un(Be(g,f));return xn(S,I,p)}const pO=z({absoluteDifference_:b9});function w9(r,l,u,p,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),Zt(f.shape,I.shape,"Error in cosineDistance: ");const x=ke(1),v=Be(x,Fe(ae(f,I),u,!0));return xn(v,S,g)}const mO=z({cosineDistance_:w9});function L9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"labels","hingeLoss");const f=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),Zt(g.shape,f.shape,"Error in hingeLoss: ");const S=ke(1);g=Be(ae(ke(2),g),S);const x=bu(Be(S,ae(g,f)));return xn(x,I,p)}const fO=z({hingeLoss_:L9});function S9(r,l,u,p=1,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),Zt(f.shape,I.shape,"Error in huberLoss: ");const x=ke(p),v=Un(Be(I,f)),O=pI(v,x),C=Be(v,O),U=Lt(ae(ke(.5),ut(O)),ae(x,C));return xn(U,S,g)}const gO=z({huberLoss_:S9});function I9(r,l,u,p=1e-7,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),Zt(f.shape,I.shape,"Error in logLoss: ");const x=ke(1),v=ke(p),O=yt(ae(f,Zr(Lt(I,v)))),C=ae(Be(x,f),Zr(Lt(Be(x,I),v))),U=Be(O,C);return xn(U,S,g)}const yO=z({logLoss_:I9});function x9(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","meanSquaredError"),f=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),Zt(g.shape,f.shape,"Error in meanSquaredError: ");const S=SI(g,f);return xn(S,I,p)}const bO=z({meanSquaredError_:x9});function T9(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const g=bu(p),f=ae(p,u),I=lI(Mn(yt(Un(p))));return Lt(Be(g,f),I)}function A9(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),Zt(f.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(.5);f=Lt(ae(f,Be(O,v)),ae(C,v))}const x=T9(f,I);return xn(x,S,g)}const wO=z({sigmoidCrossEntropy_:A9});function v9(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=Of((g,f,I)=>{const S=!0,x=hI(f,[u],S),v=Be(Le(f,"float32"),x);I([g,v]);const O=yt(ae(v,g)),C=Fe(O,[u]),U=(G,ne)=>{const[te,oe]=ne,ge=Zn(G.shape,[u]);return[ae(ie(G,ge),Be(Le(te,"float32"),Mn(oe))),ae(ie(G,ge),Be(Mn(oe),Le(te,"float32")))]};return{value:C,gradFunc:U}});return p(r,l)}function N9(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),Zt(f.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(f.shape[1]);f=Lt(ae(f,Be(O,v)),Pe(v,C))}const x=v9(f,I);return xn(x,S,g)}const LO=z({softmaxCrossEntropy_:N9});const TTe={fft:wu,ifft:Ec,rfft:Lu,irfft:LI},RTe={hammingWindow:YR,hannWindow:Wf,frame:$f,stft:HR},SO={flipLeftRight:jR,resizeNearestNeighbor:cO,resizeBilinear:aO,rotateWithOffset:KR,cropAndResize:qR,nonMaxSuppression:XR,nonMaxSuppressionAsync:nO,nonMaxSuppressionWithScore:sO,nonMaxSuppressionWithScoreAsync:iO,nonMaxSuppressionPadded:rO,nonMaxSuppressionPaddedAsync:oO},VTe={bandPart:lO,gramSchmidt:hO,qr:dO},eAe={absoluteDifference:pO,computeWeightedLoss:xn,cosineDistance:mO,hingeLoss:fO,huberLoss:gO,logLoss:yO,meanSquaredError:bO,sigmoidCrossEntropy:wO,softmaxCrossEntropy:LO};const IO=1.7580993408473768,xO=1.0507009873554805;const TO={kernelName:Lm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ta(Le(u,"float32"),-1))}}};const AO={kernelName:kC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ut(Le(u,"float32")),g=ps(Be(ke(1),p));return yt(Pe(r,g))}}}};const vO={kernelName:FC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Be(ut(Le(u,"float32")),1));return Pe(r,p)}}}};const NO={kernelName:wc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=At(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=At(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,p.shape)};return{a:f,b:I}}};const CO={kernelName:_C,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,g)=>{u[g]=()=>r.clone()}),u}};const RO={kernelName:WC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>qe(u)}}};const OO={kernelName:$C,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>qe(u)}}};const EO={kernelName:UC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ps(Be(ke(1),ut(Le(u,"float32")))))}}};const DO={kernelName:BC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Lt(ke(1),ut(Le(u,"float32"))));return Pe(r,p)}}}};const kO={kernelName:zC,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Lt(ut(u),ut(p));let x=ae(r,Pe(p,S));const v=At(u.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,u.shape)},I=()=>{const S=Lt(ut(u),ut(p));let x=yt(ae(r,Pe(u,S)));const v=At(p.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,p.shape)};return{a:f,b:I}}};const FO={kernelName:MC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(ut(Le(u,"float32")),1))}}};const _O={kernelName:PC,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(ke(1),ut(Le(u,"float32"))))}}};function C9(r,l,u,p,g=[1,1,1],f,I){const S=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let v=S,O=x,C=!1;x.rank===4&&(C=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),O=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(v.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${v.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(Jr(p,g),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${g}'`),I!=null&&Z(Qt(f),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const U=oe=>{const ge=Cf(O.shape,u,p,g,f,I);return oe.avgPool3dBackprop(v,O,ge)},G={dy:v,input:O},ne={filterSize:u,strides:p,dilations:g,pad:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,HC,ne);return C?ie(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const WO=z({avgPool3dBackprop_:C9});const $O={kernelName:YC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,dilations:I,pad:S,dimRoundingMode:x}=u,v=I==null?[1,1,1]:I;return{x:()=>WO(r,p,g,f,v,S,x)}}};function R9(r,l,u,p,g){const f=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");Z(I.rank===f.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${f.rank})`);let S=I,x=f,v=!1;I.rank===3&&(v=!0,S=ie(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=ie(f,[1,f.shape[0],f.shape[1],f.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const O=ne=>{const te=Nf(S.shape,u,p,1,g);return ne.avgPoolBackprop(x,S,te)},C={dy:x,input:S},U={filterSize:u,strides:p,pad:g},G=Y.runKernelFunc(O,C,null,VC,U);return v?ie(G,[G.shape[1],G.shape[2],G.shape[3]]):G}const UO=z({avgPoolBackprop_:R9});const BO={kernelName:GC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,pad:I}=u;return{x:()=>UO(r,p,g,f,I)}}};const MO={kernelName:Sm,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,g]=l,{transposeA:f,transposeB:I}=u;return!f&&!I?{a:()=>dn(r,g,!1,!0),b:()=>dn(p,r,!0,!1)}:!f&&I?{a:()=>dn(r,g,!1,!1),b:()=>dn(r,p,!0,!1)}:f&&!I?{a:()=>dn(g,r,!1,!0),b:()=>dn(p,r,!1,!1)}:{a:()=>dn(g,r,!0,!0),b:()=>dn(r,p,!0,!0)}}};const PO={kernelName:Im,gradFunc:(r,l,u)=>{const{blockShape:p,crops:g}=u;return{x:()=>gI(r,p,g)}}};const zO={kernelName:xm,gradFunc:(r,l,u)=>{const p=u,g=p.inputShape,f=p.shape,I=Array.from(f);for(let x=g.length-1;x>=0;x--)if(g[x]===f[x])I[x]=1;else if(g[x]!==1)throw new Error(`broadcastTo(): [${g}] cannot be broadcast to [${f}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>Fe(r,S,!0)}}};const GO={kernelName:Lc,gradFunc:r=>({x:()=>r.clone()})};const VO={kernelName:qC,gradFunc:r=>({x:()=>qe(r)})};const YO={kernelName:jC,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:g,clipValueMax:f}=u;return{x:()=>Bn(Qo(pr(p,g),mr(p,f)),r,qe(r))}}};const HO={kernelName:Tm,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(x=>x.shape),{axis:g}=u,f=ht(g,l[0].shape)[0],I=p.map(x=>x[f]),S=eo(r,I,f);return S.map(x=>()=>x)}};const qO={kernelName:Am,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{dilations:f,strides:I,pad:S,dataFormat:x}=u;return Z(Xr(f),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${f}'`),{x:()=>$R(p.shape,r,g,I,S,x),filter:()=>_f(p,r,g.shape,I,S,x)}}};const jO={kernelName:vm,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{strides:f,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>QS(r,g,f,I,S,1,x),filter:()=>_f(r,p,g.shape,f,I,S,x)}}};function O9(r,l,u,p,g){let f=r;r.rank===4&&(f=ie(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(f.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${f.shape}.`),Z(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),Z(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),Z(f.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${f.shape[4]}) must match input depth in filter (${u[3]}.`),Z(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=O=>{const C=1,U=fu(f.shape,u,p,C,g);return O.conv3dDerFilter(f,I,U)},x={x:f,y:I},v={strides:p,pad:g};return Y.runKernelFunc(S,x,null,ZC,v)}const KO=z({conv3DBackpropFilter_:O9});const XO={kernelName:JC,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f}=u;Z(Xr(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:()=>UR(I.shape,r,S,g,f),filter:()=>KO(I,r,S.shape,g,f)}}};const JO={kernelName:Nm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(yt(bI(Le(u,"float32"))),r)}}};const ZO={kernelName:Cm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(wI(Le(u,"float32")),r)}}};const QO={kernelName:Rm,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:g,exclusive:f,reverse:I}=u;return{x:()=>{const S=ds([g],p.rank);let x=tI(r,g,f,!I);return S!=null&&(x=Wt(x,S)),x}}}};const e1={kernelName:t2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f,dimRoundingMode:I}=u,S=p==null?[1,1]:p;Z(Xr(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,v]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(v.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${v.rank}.`),Z(x.shape[3]===v.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${v.shape[2]}.`),Z(Jr(g,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${g} and dilations '${S}'.`),I!=null&&Z(Qt(f),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=dr(x.shape,v.shape,g,S,f,I,!0);return{x:()=>VR(x.shape,r,v,O),filter:()=>GR(x,r,v.shape,O)}}};const t1={kernelName:i2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,f={x:p,filter:g,dy:r},I={x:p,filter:g,dy:r};return{x:()=>Y.runKernel(r2,f,u),filter:()=>Y.runKernel(o2,I,u)}}};const n1={kernelName:Om,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=At(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=ut(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const s1={kernelName:a2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=f=>f.eluDer(r,u),g={dy:r,y:u};return{x:()=>Y.runKernelFunc(p,g,null,c2)}}};const i1={kernelName:l2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(Mn(yt(ut(u))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,p)}}};const r1={kernelName:Em,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,u)}}};const o1={kernelName:u2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Mn(u))}}};const a1={kernelName:Dm,gradFunc:r=>({x:()=>qe(r)})};const c1={kernelName:km,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=At(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=ut(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const l1={kernelName:f2,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[g,f,I,S]=l,x=S==null?ke(1):S,v=At(f.shape,g.shape),O=[];if(f.rank===1){for(let Te=0;Tef.rank===1?ie(ae(ae(r,Jo(ie(G,[1,1,1,f.shape[0]]),O)),x),g.shape):ie(ae(ae(r,G),x),g.shape),oe=()=>{let Te=ae(ae(G,ke(-1)),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},ge=()=>{let Te=ae(ae(ne,C),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},fe=()=>{const Te=ae(C,G);let Ve=ae(r,Te);return f.rank===1&&(Ve=Fe(Ve,v)),ie(Ve,f.shape)},Ae=()=>{let Te=r;return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)};return{x:te,mean:oe,variance:ge,scale:fe,offset:Ae}}};const d1={kernelName:Fm,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,g]=l,{axis:f}=u,I=ht(f,p.shape)[0],S=()=>{const x=p.shape,v=g.size,O=x.slice(0,I),C=O.length,U=x.slice(f,x.length).slice(1),G=U.length,ne=h1(0,C),te=h1(C+1,C+1+G),oe=u1([O,[v],U]),ge=ie(r,oe),fe=ie(g,[v]),Ae=u1([[C],ne,te]),Te=Wt(ge,Ae);let Ve=xI(Te,fe,p.shape[I]);const rt=vc(Ae);return Ve=Wt(Ve,rt),Ve};return{x:S,indices:()=>g}}};function h1(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>qe(u),b:()=>qe(p)}}};const m1={kernelName:Wm,gradFunc:r=>({x:()=>Le(r,"float32")})};const f1={kernelName:w2,gradFunc:r=>({x:()=>qe(r)})};const g1={kernelName:L2,gradFunc:r=>({x:()=>qe(r)})};const y1={kernelName:S2,gradFunc:r=>({x:()=>qe(r)})};const b1={kernelName:Um,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(u,1))}}};const w1={kernelName:$m,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Le(u,"float32"))}}};const L1={kernelName:v2,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:g}=u;return{logits:()=>{const f=!0,I=Mn(p);return Be(r,ae(Fe(r,g,f),I))}}}};function E9(r,l,u,p=5,g=1,f=1,I=.5){const S=O=>O.LRNGrad(u,r,l,p,g,f,I),x={x:r,y:l,dy:u},v={depthRadius:p,bias:g,alpha:f,beta:I};return Y.runKernelFunc(S,x,null,C2,v)}const S1=z({localResponseNormalizationBackprop_:E9});const I1={kernelName:N2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{depthRadius:f,bias:I,alpha:S,beta:x}=u;return{x:()=>S1(p,g,r,f,I,S,x)}}};function Uf(r,l,u,p,g){return l.rank{const f=ae(r,Le(nI(u,l),r.dtype));return g==null?f:Wt(f,g)}}}const AI={kernelName:Bm,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:g}=p,[f,I]=l,S=ht(g,f.shape),x=ds(S,f.rank),v=Uf(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=Wt(O)),O}}}};const x1={kernelName:Mm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(pr(u,p),"float32")),f=()=>ae(r,Le(cI(u,p),"float32"));return{a:g,b:f}}};function D9(r,l,u,p,g,f=[1,1,1],I,S){const x=M(r,"dy","maxPool3dBackprop"),v=M(l,"input","maxPool3dBackprop"),O=M(u,"output","maxPool3dBackprop");let C=x,U=v,G=O,ne=!1;v.rank===4&&(ne=!0,C=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),U=ie(v,[1,v.shape[0],v.shape[1],v.shape[2],v.shape[3]]),G=ie(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z(U.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${U.rank}.`),Z(G.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${G.rank}.`),Z(Jr(g,f),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${g} and dilations '${f}'`),S!=null&&Z(Qt(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Ae=>{const Te=Cf(U.shape,p,g,f,I,S);return Ae.maxPool3dBackprop(C,U,G,Te)},oe={dy:C,input:U,output:G},ge={filterSize:p,strides:g,dilations:f,pad:I,dimRoundingMode:S},fe=Y.runKernelFunc(te,oe,null,D2,ge);return ne?ie(fe,[fe.shape[1],fe.shape[2],fe.shape[3],fe.shape[4]]):fe}const T1=z({maxPool3dBackprop_:D9});const A1={kernelName:E2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,dilations:S,pad:x,dimRoundingMode:v}=u,O=S==null?[1,1,1]:S;return{x:()=>T1(r,p,g,f,I,O,x,v)}}};function k9(r,l,u,p,g,f,I){const S=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),v=M(u,"output","maxPoolBackprop");Z(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),Z(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&Z(Qt(f),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=G=>{const ne=Nf(x.shape,p,g,1,f,I);return G.maxPoolBackprop(S,x,v,ne)},C={dy:S,input:x,output:v},U={filterSize:p,strides:g,pad:f,dimRoundingMode:I};return Y.runKernelFunc(O,C,null,O2,U)}const v1=z({maxPoolBackprop_:k9});const N1={kernelName:R2,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,pad:S}=u;return{x:()=>v1(r,p,g,f,I,S)}}};const C1={kernelName:Pm,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:g}=p,[f,I]=l,S=ht(g,f.shape),x=ds(S,f.rank),v=Uf(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=Wt(O)),O}}}};const R1={kernelName:zm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(mr(u,p),"float32")),f=()=>ae(r,Le(mi(u,p),"float32"));return{a:g,b:f}}};const O1={kernelName:k2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=At(u.shape,g);return S.length>0?ie(Fe(r,S),u.shape):r},I=()=>{const S=ae(r,yt(rI(Pe(u,p)))),x=At(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const E1={kernelName:Gm,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=ae(r,Le(p,"float32")),x=At(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{const S=ae(r,Le(u,"float32")),x=At(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const D1={kernelName:Vm,gradFunc:r=>({x:()=>yt(r)})};const k1={kernelName:B2,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Es(u.shape,"float32")}}};const F1={kernelName:U2,gradFunc:r=>({x:()=>qe(r)})};const vI={kernelName:Ym,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:g}=u,f=g.map(I=>I[0]);return{x:()=>Tt(r,f,p.shape)}}};const _1={kernelName:Hm,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,g]=l,f=u,I=p,S=it(f.shape,I.shape),x=()=>{const O=Le(I,"float32");let C=ae(r,ae(O,ea(f,Be(O,ke(1)))));const U=At(f.shape,S);return U.length>0&&(C=Fe(C,U)),ie(C,f.shape)},v=()=>{const O=mi(f,0),C=Bn(O,Zr(f),qe(f));let U=ae(r,ae(g,C));const G=At(I.shape,S);return G.length>0&&(U=Fe(U,G)),ie(U,I.shape)};return{a:x,b:v}}};const W1={kernelName:M2,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,g=mi(u,0);return{x:()=>Bn(g,r,ae(r,p)),alpha:()=>{let f=Bn(g,qe(r),ae(r,u));const I=At(p.shape,r.shape);return I.length>0&&(f=Fe(f,I)),ie(f,p.shape)}}}};const $1={kernelName:G2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,yt(ut(u)))}}};const U1={kernelName:H2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(mr(u,6),ta(u));return{x:()=>ae(r,Le(p,"float32"))}}};const B1={kernelName:qm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Le(ta(u),"float32"))}}};const M1={kernelName:jm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ie(r,u.shape)}}};const P1={kernelName:Xm,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,Y2,u);return{images:I}}};const z1={kernelName:Km,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,V2,u);return{images:I}}};const G1={kernelName:Jm,gradFunc:(r,l,u)=>{const{dims:p}=u,g=ht(p,r.shape);return{x:()=>Oc(r,g)}}};const V1={kernelName:q2,gradFunc:r=>({x:()=>qe(r)})};const Y1={kernelName:Zm,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>yt(Pe(r,ae(ea(u,1.5),2)))}}};const H1={kernelName:Qm,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Le(qe(u),"float32"),t:()=>ae(r,Le(u,r.dtype)),e:()=>ae(r,Le(uI(u),r.dtype))}}};const q1={kernelName:j2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=mi(u,ke(0)),g=ke(IO),f=ke(xO),I=ae(r,f),S=ae(ae(r,g),Mn(Le(u,"float32")));return Bn(p,I,S)}}}};const j1={kernelName:sf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(u,Be(ke(1),u)))}}};const K1={kernelName:K2,gradFunc:r=>({x:()=>qe(r)})};const X1={kernelName:tf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(gu(Le(u,"float32")),r)}}};const J1={kernelName:nf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(eI(Le(u,"float32")),r)}}};const Z1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:g,size:f}=u,I=p.shape,[S,x]=Af(p,g,f),v=[];for(let O=0;OfI(r,v)}}};const Q1={kernelName:J2,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:g}=u,f=!0,I=ae(r,p);return{logits:()=>Be(I,ae(Fe(I,[g],f),p))}}};const eE={kernelName:X2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,JS(u))}}};const NI={kernelName:af,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:g}=u;return{x:()=>ZS(r,p,g)}}};const CI={kernelName:cf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>yn(r,p)}}};const tE={kernelName:rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ae(ps(Le(u,"float32")),2))}}};const nE={kernelName:Z2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(Le(u,"float32"),2))}}};const sE={kernelName:lf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=ke(2),f=()=>ae(r,ae(g,Be(u,p))),I=()=>ae(r,ae(g,Be(p,u)));return{a:f,b:I}}};const iE={kernelName:gf,gradFunc:r=>({x:()=>qe(r)})};const rE={kernelName:hf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=At(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=At(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(yt(S),p.shape)};return{a:f,b:I}}};const oE={kernelName:of,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,g=p.shape.slice(),{axis:f}=u,I=ht(f,p.shape);I.forEach(v=>{g[v]=1});const S=ie(r,g),x=ae(S,Gi(p.shape,"float32"));return{x:()=>x}}};const aE={kernelName:Q2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ut(gu(u)))}}};const cE={kernelName:eR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Be(ke(1),ut(u)),r)}}};const lE={kernelName:uf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:g}=u,f=()=>{let I=qe(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:g}=p,f=vc(g);return{x:()=>Wt(r,f)}}};const uE={kernelName:pf,gradFunc:(r,l,u)=>{const p=u,{axis:g}=p;return{value:()=>Vs(r,g)}}};const dE={kernelName:mf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>F9(r,u);return{x:p}}};function F9(r,l){const u=aI(l,qe(l)),p=oI(r,u);let g=pr(l,ke(0,"int32"));const f=p.rank-g.rank;for(let S=0;S({x:()=>qe(r)})};const _9=[TO,AO,vO,NO,CO,RO,OO,EO,DO,kO,FO,_O,$O,BO,MO,PO,zO,GO,VO,YO,HO,jO,qO,XO,JO,ZO,QO,e1,t1,n1,s1,i1,r1,o1,c1,a1,l1,d1,p1,m1,f1,g1,y1,b1,w1,L1,I1,AI,AI,x1,A1,N1,C1,R1,O1,E1,D1,k1,F1,vI,vI,_1,W1,$1,U1,B1,M1,P1,z1,G1,V1,Y1,H1,q1,j1,K1,X1,J1,Z1,Q1,eE,NI,NI,CI,CI,tE,sE,nE,iE,rE,oE,aE,cE,lE,hE,uE,dE,pE];for(const r of _9)sR(r);function RI(r,l,u=!1){const{Image:p,Canvas:g}=gt.getEnv();if(!(r instanceof p||r instanceof g))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const f=qo(r),I=l/Math.max(f.height,f.width),S=I*f.width,x=I*f.height,v=bc({width:l,height:l}),O=r instanceof g?r:ou(r),C=Math.abs(S-x)/2,U=u&&S{if(lr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Ns(u)){const f=u.shape[0];if(f!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${f} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const g=u instanceof gt.getEnv().Canvas?u:ou(u);this._canvases[p]=g,this._inputDimensions[p]=[g.height,g.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 Wi(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 pS({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,ER(()=>{const u=Wi(this.batchSize,0,1).map(g=>{const f=this.getInput(g);if(f instanceof In){let I=Ns(f)?f:f.expandDims();return I=yS(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=SO.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(f instanceof gt.getEnv().Canvas)return jS.fromPixels(RI(f,r,l));throw new Error(`toBatchTensor - at batchIdx ${g}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${f}`)}),p=Vs(u.map(g=>Le(g,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Rt(r){if(r instanceof to)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=g=>Array.isArray(r)?` at input index ${g}:`:"",p=l.map(Ho);return p.forEach((g,f)=>{if(!wm(g)&&!lr(g)&&!Ns(g))throw typeof l[f]=="string"?new Error(`toNetInput -${u(f)} string passed, but could not resolve HTMLElement for element id ${l[f]}`):new Error(`toNetInput -${u(f)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Ns(g)){const I=g.shape[0];if(I!==1)throw new Error(`toNetInput -${u(f)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(g=>wm(g)&&AS(g))),new to(p,Array.isArray(r))}async function Dc(r,l){const{Canvas:u}=gt.getEnv();let p=r;if(!(r instanceof u)){const I=await Rt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await NS(S)}const g=Jn(p),f=l.map(I=>I instanceof Ht?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return f.map(({x:I,y:S,width:x,height:v})=>{const O=bc({width:x,height:v});return Jn(O).putImageData(g.getImageData(I,S,x,v),0,0),O})}const Bf=Ke(Xe());async function kc(r,l){if(!lr(r)&&!Ns(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Ns(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return Bf.tidy(()=>{const[u,p,g]=r.shape.slice(Ns(r)?1:0),f=l.map(S=>S instanceof Ht?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=f.map(({x:S,y:x,width:v,height:O})=>Bf.slice3d(r.as3D(u,p,g),[x,S,0],[O,v,g]));return I})}async function sa(r,l){const u=gt.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 W9(r){const l=await sa(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 vS(u)}async function OI(r){return(await sa(r)).json()}async function $9(r){return new Float32Array(await(await sa(r)).arrayBuffer())}function Mf(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 g=r.split("/").filter(S=>S),f=r.endsWith(".json")?g[g.length-1]:u;let I=p+(r.endsWith(".json")?g.slice(0,g.length-1):g).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${f}`:`${I}/${f}`}}const mE=Ke(Xe());async function EI(r,l){const{manifestUri:u,modelBaseUri:p}=Mf(r,l);let g=await OI(u);return mE.io.loadWeights(g,p)}function U9(r,l,u=!1){const{width:p,height:g}=u?qo(l):l;return r.width=p,r.height=g,{width:p,height:g}}const fr=Ke(Xe());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 fr.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof fr.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=fr.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 EI(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}=gt.getEnv(),{manifestUri:u,modelBaseUri:p}=Mf(r,this.getDefaultModelName()),g=x=>Promise.all(x.map(v=>l(v).then(O=>O.buffer))),f=fr.io.weightsLoaderFactory(g),I=JSON.parse((await l(u)).toString()),S=await f(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((g,f)=>{if(!g.nextObj.hasOwnProperty(f))throw new Error(`traversePropertyPath - object does not have property ${f}, for path ${r}`);return{obj:g.nextObj,objProp:f,nextObj:g.nextObj[f]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof fr.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Fc=Ke(Xe());function Qn(r,l,u){return Fc.tidy(()=>{let p=Fc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Fc.add(p,l.bias),p})}const Dt=Ke(Xe());function Pf(r,l,u=!1){return Dt.tidy(()=>{const p=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):Qn(r,l.conv0,[2,2])),g=Qn(p,l.conv1,[1,1]),f=Dt.relu(Dt.add(p,g)),I=Qn(f,l.conv2,[1,1]);return Dt.relu(Dt.add(p,Dt.add(g,I)))})}function Iu(r,l,u=!1,p=!0){return Dt.tidy(()=>{const g=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):Qn(r,l.conv0,p?[2,2]:[1,1])),f=Qn(g,l.conv1,[1,1]),I=Dt.relu(Dt.add(g,f)),S=Qn(I,l.conv2,[1,1]),x=Dt.relu(Dt.add(g,Dt.add(f,S))),v=Qn(x,l.conv3,[1,1]);return Dt.relu(Dt.add(g,Dt.add(f,Dt.add(S,v))))})}const no=Ke(Xe());function ia(r,l,u="same",p=!1){return no.tidy(()=>{const g=no.add(no.conv2d(r,l.filters,[1,1],u),l.bias);return p?no.relu(g):g})}function Pn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const zf=Ke(Xe());function _c(r,l){return function(u,p,g,f){const I=zf.tensor4d(r(u*p*g*g),[g,g,u,p]),S=zf.tensor1d(r(p));return l.push({paramPath:`${f}/filters`},{paramPath:`${f}/bias`}),{filters:I,bias:S}}}const Gf=Ke(Xe());function Vf(r,l){return function(u,p,g){const f=Gf.tensor2d(r(u*p),[u,p]),I=Gf.tensor1d(r(p));return l.push({paramPath:`${g}/weights`},{paramPath:`${g}/bias`}),{weights:f,bias:I}}}class DI{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const xu=Ke(Xe());function Wc(r,l){return function(u,p,g){const f=xu.tensor4d(r(3*3*u),[3,3,u,1]),I=xu.tensor4d(r(u*p),[1,1,u,p]),S=xu.tensor1d(r(p));return l.push({paramPath:`${g}/depthwise_filter`},{paramPath:`${g}/pointwise_filter`},{paramPath:`${g}/bias`}),new DI(f,I,S)}}function $c(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),g=r(`${l}/bias`,1);return new DI(u,p,g)}}function ms(r,l){return function(u,p,g){const f=r[u];if(!Po(f,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${f}`);return l.push({originalPath:u,paramPath:g||u}),f}}function zn(r){let l=r;function u(g){const f=l.slice(0,g);return l=l.slice(g),f}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function Yf(r,l){const u=_c(r,l),p=Wc(r,l);function g(I,S,x,v=!1){const O=v?u(I,S,3,`${x}/conv0`):p(I,S,`${x}/conv0`),C=p(S,S,`${x}/conv1`),U=p(S,S,`${x}/conv2`);return{conv0:O,conv1:C,conv2:U}}function f(I,S,x,v=!1){const{conv0:O,conv1:C,conv2:U}=g(I,S,x,v),G=p(S,S,`${x}/conv3`);return{conv0:O,conv1:C,conv2:U,conv3:G}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:f}}function fE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractDenseBlock4Params:g}=Yf(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2"),x=g(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S,dense3:x}}}function Hf(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function qf(r,l){const u=ms(r,l),p=Hf(u),g=$c(u);function f(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`);return{conv0:v,conv1:O,conv2:C}}function I(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`),U=g(`${S}/conv3`);return{conv0:v,conv1:O,conv2:C,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:I}}function gE(r){const l=[],{extractDenseBlock4Params:u}=qf(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return Pn(r,l),{params:p,paramMappings:l}}const so=Ke(Xe());class jf extends En{constructor(){super("FaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceFeatureExtractor - load model before inference");return so.tidy(()=>{const u=so.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(so.scalar(255));let f=Iu(g,l.dense0,!0);return f=Iu(f,l.dense1),f=Iu(f,l.dense2),f=Iu(f,l.dense3),f=so.avgPool(f,[7,7],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return gE(r)}extractParams(r){return fE(r)}}const Uc=Ke(Xe());function Tu(r,l){return Uc.tidy(()=>Uc.add(Uc.matMul(r,l.weights),l.bias))}function yE(r,l,u){const p=[],{extractWeights:g,getRemainingWeights:f}=zn(r),I=Vf(g,p),S=I(l,u,"fc");if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:p,params:{fc:S}}}function bE(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:p("fc")};return Pn(r,l),{params:g,paramMappings:l}}function Kf(r){const l={},u={};return Object.keys(r).forEach(p=>{const g=p.startsWith("fc")?u:l;g[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const wE=Ke(Xe());class Xf 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 wE.tidy(()=>{const u=r instanceof to?this.faceFeatureExtractor.forwardInput(r):r;return Tu(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 yE(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Kf(r);return this.faceFeatureExtractor.loadFromWeightMap(l),bE(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,g=r.slice(0,r.length-p),f=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(g),this.extractClassifierParams(f)}}const kI=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class ra{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);kI.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return kI.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Bc=Ke(Xe());class FI extends Xf{constructor(r=new jf){super("FaceExpressionNet",r)}forwardInput(r){return Bc.tidy(()=>Bc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Rt(r))}async predictExpressions(r){const l=await Rt(r),u=await this.forwardInput(l),p=await Promise.all(Bc.unstack(u).map(async f=>{const I=await f.data();return f.dispose(),I}));u.dispose();const g=p.map(f=>new ra(f));return l.isBatchInput?g:g[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function _I(r){return r.expressions instanceof ra}function Jf(r,l){const u={expressions:l};return Object.assign({},r,u)}function B9(r,l,u=.1,p){const g=Array.isArray(l)?l:[l];g.forEach(f=>{const I=f instanceof ra?f:_I(f)?f.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(C=>C.probability>u),v=Ui(f)?f.detection.box.bottomLeft:p||new Je(0,0),O=new yc(x.map(C=>`${C.expression} (${zo(C.probability)})`),v);O.draw(r)})}function oa(r){return Ui(r)&&r.landmarks instanceof Gs&&r.unshiftedLandmarks instanceof Gs&&r.alignedRect instanceof Ht}function Mc(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),g=p.align(),{imageDims:f}=r.detection,I=new Ht(r.detection.score,g.rescale(f.reverse()),f),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class LE{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:g,pointSize:f,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=f||2,this.lineColor=g||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class SE{constructor(r,l={}){this.faceLandmarks=r,this.options=new LE(l)}draw(r){const l=Jn(r),{drawLines:u,drawPoints:p,lineWidth:g,lineColor:f,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof iu&&(l.strokeStyle=f,l.lineWidth=g,cr(l,this.faceLandmarks.getJawOutline()),cr(l,this.faceLandmarks.getLeftEyeBrow()),cr(l,this.faceLandmarks.getRightEyeBrow()),cr(l,this.faceLandmarks.getNose()),cr(l,this.faceLandmarks.getLeftEye(),!0),cr(l,this.faceLandmarks.getRightEye(),!0),cr(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const x=v=>{l.beginPath(),l.arc(v.x,v.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function M9(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const g=p instanceof Gs?p:oa(p)?p.landmarks:void 0;if(!g)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new SE(g).draw(r)})}const WI={};hm(WI,{AnchorPosition:()=>Bi,DrawBox:()=>TS,DrawBoxOptions:()=>NC,DrawFaceLandmarks:()=>SE,DrawFaceLandmarksOptions:()=>LE,DrawTextField:()=>yc,DrawTextFieldOptions:()=>ym,drawContour:()=>cr,drawDetections:()=>KX,drawFaceExpressions:()=>B9,drawFaceLandmarks:()=>M9});function P9(r,l){const u=_c(r,l),p=Wc(r,l);function g(I,S,x){const v=p(I,S,`${x}/separable_conv0`),O=p(S,S,`${x}/separable_conv1`),C=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:v,separable_conv1:O,expansion_conv:C}}function f(I,S){const x=p(I,I,`${S}/separable_conv0`),v=p(I,I,`${S}/separable_conv1`),O=p(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:g,extractMainBlockParams:f}}function IE(r,l){const u=[],{extractWeights:p,getRemainingWeights:g}=zn(r),{extractConvParams:f,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=P9(p,u),v=f(3,32,3,"entry_flow/conv_in"),O=S(32,64,"entry_flow/reduction_block_0"),C=S(64,128,"entry_flow/reduction_block_1"),U={conv_in:v,reduction_block_0:O,reduction_block_1:C},G={};Wi(l,0,1).forEach(ge=>{G[`main_block_${ge}`]=x(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),oe={reduction_block:ne,separable_conv:te};if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:u,params:{entry_flow:U,middle_flow:G,exit_flow:oe}}}function z9(r,l){const u=ms(r,l),p=Hf(u),g=$c(u);function f(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=p(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:v,expansion_conv:O}}function I(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=g(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}}function xE(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}=z9(r,u),S=p("entry_flow/conv_in"),x=f("entry_flow/reduction_block_0"),v=f("entry_flow/reduction_block_1"),O={conv_in:S,reduction_block_0:x,reduction_block_1:v},C={};Wi(l,0,1).forEach(te=>{C[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const U=f("exit_flow/reduction_block"),G=g("exit_flow/separable_conv"),ne={reduction_block:U,separable_conv:G};return Pn(r,u),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:u}}const tn=Ke(Xe());function TE(r,l,u){return tn.add(tn.conv2d(r,l.filters,u,"same"),l.bias)}function $I(r,l,u=!0){let p=u?tn.relu(r):r;return p=Qn(p,l.separable_conv0,[1,1]),p=Qn(tn.relu(p),l.separable_conv1,[1,1]),p=tn.maxPool(p,[3,3],[2,2],"same"),p=tn.add(p,TE(r,l.expansion_conv,[2,2])),p}function G9(r,l){let u=Qn(tn.relu(r),l.separable_conv0,[1,1]);return u=Qn(tn.relu(u),l.separable_conv1,[1,1]),u=Qn(tn.relu(u),l.separable_conv2,[1,1]),u=tn.add(u,r),u}class AE 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 tn.tidy(()=>{const u=tn.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(tn.scalar(256));let f=tn.relu(TE(g,l.entry_flow.conv_in,[2,2]));return f=$I(f,l.entry_flow.reduction_block_0,!1),f=$I(f,l.entry_flow.reduction_block_1),Wi(this._numMainBlocks,0,1).forEach(I=>{f=G9(f,l.middle_flow[`main_block_${I}`])}),f=$I(f,l.exit_flow.reduction_block),f=tn.relu(Qn(f,l.exit_flow.separable_conv,[1,1])),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return xE(r,this._numMainBlocks)}extractParams(r){return IE(r,this._numMainBlocks)}}function vE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),g=Vf(u,l),f=g(512,1,"fc/age"),I=g(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:f,gender:I}}}}function NE(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:{age:p("fc/age"),gender:p("fc/gender")}};return Pn(r,l),{params:g,paramMappings:l}}var gr;(function(r){r.FEMALE="female",r.MALE="male"})(gr||(gr={}));const Vi=Ke(Xe());class UI extends En{constructor(r=new AE(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 Vi.tidy(()=>{const u=r instanceof to?this.faceFeatureExtractor.forwardInput(r):r,p=Vi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),g=Tu(p,l.fc.age).as1D(),f=Tu(p,l.fc.gender);return{age:g,gender:f}})}forwardInput(r){return Vi.tidy(()=>{const{age:l,gender:u}=this.runNet(r);return{age:l,gender:Vi.softmax(u)}})}async forward(r){return this.forwardInput(await Rt(r))}async predictAgeAndGender(r){const l=await Rt(r),u=await this.forwardInput(l),p=Vi.unstack(u.age),g=Vi.unstack(u.gender),f=p.map((S,x)=>({ageTensor:S,genderTensor:g[x]})),I=await Promise.all(f.map(async({ageTensor:S,genderTensor:x})=>{const v=(await S.data())[0],O=(await x.data())[0],C=O>.5,U=C?gr.MALE:gr.FEMALE,G=C?O:1-O;return S.dispose(),x.dispose(),{age:v,gender:U,genderProbability:G}}));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 vE(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Kf(r);return this.faceFeatureExtractor.loadFromWeightMap(l),NE(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 fs=Ke(Xe());class Zf extends Xf{postProcess(r,l,u){const p=u.map(({width:f,height:I})=>{const S=l/Math.max(I,f);return{width:f*S,height:I*S}}),g=p.length;return fs.tidy(()=>{const f=(O,C)=>fs.stack([fs.fill([68],O,"float32"),fs.fill([68],C,"float32")],1).as2D(1,136).as1D(),I=(O,C)=>{const{width:U,height:G}=p[O];return C(U,G)?Math.abs(U-G)/2:0},S=O=>I(O,(C,U)=>CI(O,(C,U)=>Uf(S(C),x(C))))).div(fs.stack(Array.from(Array(g),(O,C)=>f(p[C].width,p[C].height))));return v})}forwardInput(r){return fs.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 Rt(r))}async detectLandmarks(r){const l=await Rt(r),u=fs.tidy(()=>fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(g,f)=>{const I=Array.from(await g.data()),S=I.filter((v,O)=>dm(O)),x=I.filter((v,O)=>!dm(O));return new iu(Array(68).fill(0).map((v,O)=>new Je(S[O],x[O])),{height:l.getInputHeight(f),width:l.getInputWidth(f)})}));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Au extends Zf{constructor(r=new jf){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function CE(r){const l=[],{extractDenseBlock3Params:u}=qf(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return Pn(r,l),{params:p,paramMappings:l}}function RE(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractDenseBlock3Params:g}=Yf(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S}}}const io=Ke(Xe());class OE extends En{constructor(){super("TinyFaceFeatureExtractor")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyFaceFeatureExtractor - load model before inference");return io.tidy(()=>{const u=io.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(io.scalar(255));let f=Pf(g,l.dense0,!0);return f=Pf(f,l.dense1),f=Pf(f,l.dense2),f=io.avgPool(f,[14,14],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Rt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return CE(r)}extractParams(r){return RE(r)}}class BI extends Zf{constructor(r=new OE){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class V9 extends Au{}const Qf=Ke(Xe());function EE(r,l){return Qf.add(Qf.mul(r,l.weights),l.biases)}const Pc=Ke(Xe());function MI(r,l,u,p,g="same"){const{filters:f,bias:I}=l.conv;let S=Pc.conv2d(r,f,u,g);return S=Pc.add(S,I),S=EE(S,l.scale),p?Pc.relu(S):S}function DE(r,l){return MI(r,l,[1,1],!0)}function PI(r,l){return MI(r,l,[1,1],!1)}function eg(r,l){return MI(r,l,[2,2],!0,"valid")}const gs=Ke(Xe());function Y9(r,l){function u(S,x,v){const O=r(S),C=O.length/(x*v*v);if(dS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${v}`);return gs.tidy(()=>gs.transpose(gs.tensor4d(O,[x,C,v,v]),[2,3,1,0]))}function p(S,x,v,O){const C=u(S,x,v),U=gs.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:U}}function g(S,x){const v=gs.tensor1d(r(S)),O=gs.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:v,biases:O}}function f(S,x,v,O){const C=p(S,x,v,`${O}/conv`),U=g(x,`${O}/scale`);return{conv:C,scale:U}}function I(S,x,v,O,C=!1){const U=f((C?.5:1)*S,x,v,`${O}/conv1`),G=f(S,x,v,`${O}/conv2`);return{conv1:U,conv2:G}}return{extractConvLayerParams:f,extractResidualLayerParams:I}}function kE(r){const{extractWeights:l,getRemainingWeights:u}=zn(r),p=[],{extractConvLayerParams:g,extractResidualLayerParams:f}=Y9(l,p),I=g(4704,32,7,"conv32_down"),S=f(9216,32,3,"conv32_1"),x=f(9216,32,3,"conv32_2"),v=f(9216,32,3,"conv32_3"),O=f(36864,64,3,"conv64_down",!0),C=f(36864,64,3,"conv64_1"),U=f(36864,64,3,"conv64_2"),G=f(36864,64,3,"conv64_3"),ne=f(147456,128,3,"conv128_down",!0),te=f(147456,128,3,"conv128_1"),oe=f(147456,128,3,"conv128_2"),ge=f(589824,256,3,"conv256_down",!0),fe=f(589824,256,3,"conv256_1"),Ae=f(589824,256,3,"conv256_2"),Te=f(589824,256,3,"conv256_down_out"),Ve=gs.tidy(()=>gs.transpose(gs.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 rt={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:v,conv64_down:O,conv64_1:C,conv64_2:U,conv64_3:G,conv128_down:ne,conv128_1:te,conv128_2:oe,conv256_down:ge,conv256_1:fe,conv256_2:Ae,conv256_down_out:Te,fc:Ve};return{params:rt,paramMappings:p}}function H9(r,l){const u=ms(r,l);function p(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function g(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),v=p(I);return{conv:{filters:S,bias:x},scale:v}}function f(I){return{conv1:g(`${I}/conv1`),conv2:g(`${I}/conv2`)}}return{extractConvLayerParams:g,extractResidualLayerParams:f}}function FE(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=H9(r,l),g=u("conv32_down"),f=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),x=p("conv64_down"),v=p("conv64_1"),O=p("conv64_2"),C=p("conv64_3"),U=p("conv128_down"),G=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),oe=p("conv256_1"),ge=p("conv256_2"),fe=p("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!uS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const Te={conv32_down:g,conv32_1:f,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:v,conv64_2:O,conv64_3:C,conv128_down:U,conv128_1:G,conv128_2:ne,conv256_down:te,conv256_1:oe,conv256_2:ge,conv256_down_out:fe,fc:Ae};return Pn(r,l),{params:Te,paramMappings:l}}const Gn=Ke(Xe());function fi(r,l){let u=DE(r,l.conv1);return u=PI(u,l.conv2),u=Gn.add(u,r),u=Gn.relu(u),u}function vu(r,l){let u=eg(r,l.conv1);u=PI(u,l.conv2);let p=Gn.avgPool(r,2,2,"valid");const g=Gn.zeros(p.shape),f=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 x=Gn.zeros(S);u=Gn.concat([u,x],1);const v=[...u.shape];v[2]=1;const O=Gn.zeros(v);u=Gn.concat([u,O],2)}return p=f?Gn.concat([p,g],3):p,u=Gn.add(p,u),u=Gn.relu(u),u}const Ds=Ke(Xe());class Nu extends En{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return Ds.tidy(()=>{const u=Ds.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],g=di(u,p).div(Ds.scalar(256));let f=eg(g,l.conv32_down);f=Ds.maxPool(f,3,2,"valid"),f=fi(f,l.conv32_1),f=fi(f,l.conv32_2),f=fi(f,l.conv32_3),f=vu(f,l.conv64_down),f=fi(f,l.conv64_1),f=fi(f,l.conv64_2),f=fi(f,l.conv64_3),f=vu(f,l.conv128_down),f=fi(f,l.conv128_1),f=fi(f,l.conv128_2),f=vu(f,l.conv256_down),f=fi(f,l.conv256_1),f=fi(f,l.conv256_2),f=vu(f,l.conv256_down_out);const I=f.mean([1,2]),S=Ds.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Rt(r))}async computeFaceDescriptor(r){const l=await Rt(r),u=Ds.tidy(()=>Ds.unstack(this.forwardInput(l))),p=await Promise.all(u.map(g=>g.data()));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return FE(r)}extractParams(r){return kE(r)}}function q9(r){const l=new Nu;return l.extractWeights(r),l}function tg(r,l){const u={descriptor:l};return Object.assign({},r,u)}function j9(r){return typeof r.age=="number"}function ng(r,l){const u={age:l};return Object.assign({},r,u)}function K9(r){return(r.gender===gr.MALE||r.gender===gr.FEMALE)&&fc(r.genderProbability)}function sg(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const gi=Ke(Xe());function X9(r,l){function u(x,v){const O=gi.tensor4d(r(3*3*x),[3,3,x,1]),C=gi.tensor1d(r(x)),U=gi.tensor1d(r(x)),G=gi.tensor1d(r(x)),ne=gi.tensor1d(r(x));return l.push({paramPath:`${v}/filters`},{paramPath:`${v}/batch_norm_scale`},{paramPath:`${v}/batch_norm_offset`},{paramPath:`${v}/batch_norm_mean`},{paramPath:`${v}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:U,batch_norm_mean:G,batch_norm_variance:ne}}function p(x,v,O,C,U){const G=gi.tensor4d(r(x*v*O*O),[O,O,x,v]),ne=gi.tensor1d(r(v));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${U?"batch_norm_offset":"bias"}`}),{filters:G,bias:ne}}function g(x,v,O,C){const{filters:U,bias:G}=p(x,v,O,C,!0);return{filters:U,batch_norm_offset:G}}function f(x,v,O){const C=u(x,`${O}/depthwise_conv`),U=g(x,v,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:U}}function I(){const x=g(3,32,3,"mobilenetv1/conv_0"),v=f(32,64,"mobilenetv1/conv_1"),O=f(64,128,"mobilenetv1/conv_2"),C=f(128,128,"mobilenetv1/conv_3"),U=f(128,256,"mobilenetv1/conv_4"),G=f(256,256,"mobilenetv1/conv_5"),ne=f(256,512,"mobilenetv1/conv_6"),te=f(512,512,"mobilenetv1/conv_7"),oe=f(512,512,"mobilenetv1/conv_8"),ge=f(512,512,"mobilenetv1/conv_9"),fe=f(512,512,"mobilenetv1/conv_10"),Ae=f(512,512,"mobilenetv1/conv_11"),Te=f(512,1024,"mobilenetv1/conv_12"),Ve=f(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,conv_8:oe,conv_9:ge,conv_10:fe,conv_11:Ae,conv_12:Te,conv_13:Ve}}function S(){const x=g(1024,256,1,"prediction_layer/conv_0"),v=g(256,512,3,"prediction_layer/conv_1"),O=g(512,128,1,"prediction_layer/conv_2"),C=g(128,256,3,"prediction_layer/conv_3"),U=g(256,128,1,"prediction_layer/conv_4"),G=g(128,256,3,"prediction_layer/conv_5"),ne=g(256,64,1,"prediction_layer/conv_6"),te=g(64,128,3,"prediction_layer/conv_7"),oe=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),fe=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Te=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),rt=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),vt=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),$t=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Dn=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),Tn=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),An={box_encoding_predictor:oe,class_predictor:ge},Ks={box_encoding_predictor:fe,class_predictor:Ae},Li={box_encoding_predictor:Te,class_predictor:Ve},Xs={box_encoding_predictor:rt,class_predictor:vt},ua={box_encoding_predictor:$t,class_predictor:Kt},Xc={box_encoding_predictor:Dn,class_predictor:Tn};return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,box_predictor_0:An,box_predictor_1:Ks,box_predictor_2:Li,box_predictor_3:Xs,box_predictor_4:ua,box_predictor_5:Xc}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function _E(r){const l=[],{extractWeights:u,getRemainingWeights:p}=zn(r),{extractMobilenetV1Params:g,extractPredictionLayerParams:f}=X9(u,l),I=g(),S=f(),x=gi.tensor3d(u(5118*4),[1,5118,4]),v={extra_dim:x};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:v},paramMappings:l}}function J9(r,l){const u=ms(r,l);function p(v,O,C){const U=u(`${v}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),G=u(`${v}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:U,batch_norm_offset:G}}function g(v){const O=`mobilenetv1/conv_${v}`,C=`MobilenetV1/Conv2d_${v}_depthwise`,U=`${O}/depthwise_conv`,G=`${O}/pointwise_conv`,ne=u(`${C}/depthwise_weights`,4,`${U}/filters`),te=u(`${C}/BatchNorm/gamma`,1,`${U}/batch_norm_scale`),oe=u(`${C}/BatchNorm/beta`,1,`${U}/batch_norm_offset`),ge=u(`${C}/BatchNorm/moving_mean`,1,`${U}/batch_norm_mean`),fe=u(`${C}/BatchNorm/moving_variance`,1,`${U}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:oe,batch_norm_mean:ge,batch_norm_variance:fe},pointwise_conv:p("MobilenetV1",v,G)}}function f(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:g(1),conv_2:g(2),conv_3:g(3),conv_4:g(4),conv_5:g(5),conv_6:g(6),conv_7:g(7),conv_8:g(8),conv_9:g(9),conv_10:g(10),conv_11:g(11),conv_12:g(12),conv_13:g(13)}}function I(v,O){const C=u(`${v}/weights`,4,`${O}/filters`),U=u(`${v}/biases`,1,`${O}/bias`);return{filters:C,bias:U}}function S(v){const O=I(`Prediction/BoxPredictor_${v}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${v}/box_encoding_predictor`),C=I(`Prediction/BoxPredictor_${v}/ClassPredictor`,`prediction_layer/box_predictor_${v}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}function x(){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:f,extractPredictionLayerParams:x}}function WE(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=J9(r,l),g=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!lr(g))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${g}`);const f={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:g}};return Pn(r,l),{params:f,paramMappings:l}}const ro=Ke(Xe());function Hs(r,l,u){return ro.tidy(()=>{let p=ro.conv2d(r,l.filters,u,"same");return p=ro.add(p,l.batch_norm_offset),ro.clipByValue(p,0,6)})}const yr=Ke(Xe()),Z9=.0010000000474974513;function Q9(r,l,u){return yr.tidy(()=>{let p=yr.depthwiseConv2d(r,l.filters,u,"same");return p=yr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,Z9),yr.clipByValue(p,0,6)})}function eZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function $E(r,l){return yr.tidy(()=>{let u,p=Hs(r,l.conv_0,[2,2]);const g=[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(g.forEach((f,I)=>{const S=I+1,x=eZ(S);p=Q9(p,f.depthwise_conv,x),p=Hs(p,f.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 UE(r,l,u,p,g){const f=r.shape[0],I=Math.min(u,f),S=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>g).sort((O,C)=>C.score-O.score),x=O=>O<=p?1:0,v=[];return S.forEach(O=>{if(v.length>=I)return;const C=O.score;for(let U=v.length-1;U>=0;--U){const G=tZ(r,O.boxIndex,v[U]);if(G===0)continue;if(O.score*=x(G),O.score<=g)break}C===O.score&&v.push(O.boxIndex)}),v}function tZ(r,l,u){const p=r.arraySync(),g=Math.min(p[l][0],p[l][2]),f=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]),x=Math.min(p[u][0],p[u][2]),v=Math.min(p[u][1],p[u][3]),O=Math.max(p[u][0],p[u][2]),C=Math.max(p[u][1],p[u][3]),U=(I-g)*(S-f),G=(O-x)*(C-v);if(U<=0||G<=0)return 0;const ne=Math.max(g,x),te=Math.max(f,v),oe=Math.min(I,O),ge=Math.min(S,C),fe=Math.max(oe-ne,0)*Math.max(ge-te,0);return fe/(U+G-fe)}const De=Ke(Xe());function nZ(r){const l=De.unstack(De.transpose(r,[1,0])),u=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],p=[De.add(l[0],De.div(u[0],De.scalar(2))),De.add(l[1],De.div(u[1],De.scalar(2)))];return{sizes:u,centers:p}}function sZ(r,l){const{sizes:u,centers:p}=nZ(r),g=De.unstack(De.transpose(l,[1,0])),f=De.div(De.mul(De.exp(De.div(g[2],De.scalar(5))),u[0]),De.scalar(2)),I=De.add(De.mul(De.div(g[0],De.scalar(10)),u[0]),p[0]),S=De.div(De.mul(De.exp(De.div(g[3],De.scalar(5))),u[1]),De.scalar(2)),x=De.add(De.mul(De.div(g[1],De.scalar(10)),u[1]),p[1]);return De.transpose(De.stack([De.sub(I,f),De.sub(x,S),De.add(I,f),De.add(x,S)]),[1,0])}function BE(r,l,u){return De.tidy(()=>{const p=r.shape[0];let g=sZ(De.reshape(De.tile(u.extra_dim,[p,1,1]),[-1,4]),De.reshape(r,[-1,4]));g=De.reshape(g,[p,g.shape[0]/p,4]);const f=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let I=De.slice(f,[0,0,0],[-1,-1,1]);I=De.reshape(I,[p,I.shape[1]]);const S=De.unstack(g),x=De.unstack(I);return{boxes:S,scores:x}})}const Cu=Ke(Xe());function aa(r,l){return Cu.tidy(()=>{const u=r.shape[0],p=Cu.reshape(ia(r,l.box_encoding_predictor),[u,-1,1,4]),g=Cu.reshape(ia(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:g}})}const Ru=Ke(Xe());function ME(r,l,u){return Ru.tidy(()=>{const p=Hs(r,u.conv_0,[1,1]),g=Hs(p,u.conv_1,[2,2]),f=Hs(g,u.conv_2,[1,1]),I=Hs(f,u.conv_3,[2,2]),S=Hs(I,u.conv_4,[1,1]),x=Hs(S,u.conv_5,[2,2]),v=Hs(x,u.conv_6,[1,1]),O=Hs(v,u.conv_7,[2,2]),C=aa(l,u.box_predictor_0),U=aa(r,u.box_predictor_1),G=aa(g,u.box_predictor_2),ne=aa(I,u.box_predictor_3),te=aa(x,u.box_predictor_4),oe=aa(O,u.box_predictor_5),ge=Ru.concat([C.boxPredictionEncoding,U.boxPredictionEncoding,G.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,oe.boxPredictionEncoding],1),fe=Ru.concat([C.classPrediction,U.classPrediction,G.classPrediction,ne.classPrediction,te.classPrediction,oe.classPrediction],1);return{boxPredictions:ge,classPredictions:fe}})}class yi{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 bi=Ke(Xe());class zc extends En{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return bi.tidy(()=>{const u=bi.cast(r.toBatchTensor(512,!1),"float32"),p=bi.sub(bi.mul(u,bi.scalar(.007843137718737125)),bi.scalar(1)),g=$E(p,l.mobilenetv1),{boxPredictions:f,classPredictions:I}=ME(g.out,g.conv11,l.prediction_layer);return BE(f,I,l.output_layer)})}async forward(r){return this.forwardInput(await Rt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new yi(l),g=await Rt(r),{boxes:f,scores:I}=this.forwardInput(g),S=f[0],x=I[0];for(let fe=1;fe{const[Ae,Te]=[Math.max(0,oe[fe][0]),Math.min(1,oe[fe][2])].map(vt=>vt*te),[Ve,rt]=[Math.max(0,oe[fe][1]),Math.min(1,oe[fe][3])].map(vt=>vt*ne);return new Ht(v[fe],new su(Ve,Ae,rt-Ve,Te-Ae),{height:g.getInputHeight(0),width:g.getInputWidth(0)})});return S.dispose(),x.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return WE(r)}extractParams(r){return _E(r)}}function PE(r){const l=new zc;return l.extractWeights(r),l}function iZ(r){return PE(r)}class rZ extends zc{}const zE=.4,GE=[new Je(.738768,.874946),new Je(2.42204,2.65704),new Je(4.30971,7.04493),new Je(10.246,4.59428),new Je(12.6868,11.8741)],VE=[new Je(1.603231,2.094468),new Je(6.041143,7.080126),new Je(2.882459,3.518061),new Je(4.266906,5.178857),new Je(9.041765,10.66308)],YE=[117.001,114.697,97.404],HE="tiny_yolov2_model",qE="tiny_yolov2_separable_conv_model";const ig=r=>typeof r=="number";function zI(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(!ig(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=>ig(l.x)&&ig(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(ig)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const qs=Ke(Xe());function Gc(r){return qs.tidy(()=>{const l=qs.mul(r,qs.scalar(.10000000149011612));return qs.add(qs.relu(qs.sub(r,l)),l)})}const js=Ke(Xe());function br(r,l){return js.tidy(()=>{let u=js.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=js.conv2d(u,l.conv.filters,[1,1],"valid"),u=js.sub(u,l.bn.sub),u=js.mul(u,l.bn.truediv),u=js.add(u,l.conv.bias),Gc(u)})}const oo=Ke(Xe());function wr(r,l){return oo.tidy(()=>{let u=oo.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=oo.separableConv2d(u,l.depthwise_filter,l.pointwise_filter,[1,1],"valid"),u=oo.add(u,l.bias),Gc(u)})}const GI=Ke(Xe());function oZ(r,l){const u=_c(r,l);function p(I,S){const x=GI.tensor1d(r(I)),v=GI.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:v}}function g(I,S,x){const v=u(I,S,3,`${x}/conv`),O=p(S,`${x}/bn`);return{conv:v,bn:O}}const f=Wc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}}function jE(r,l,u,p){const{extractWeights:g,getRemainingWeights:f}=zn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:v}=oZ(g,I);let O;if(l.withSeparableConvs){const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=l.isFirstLayerConv2d?S(C,U,3,"conv0"):v(C,U,"conv0"),Ve=v(U,G,"conv1"),rt=v(G,ne,"conv2"),vt=v(ne,te,"conv3"),$t=v(te,oe,"conv4"),Kt=v(oe,ge,"conv5"),Dn=fe?v(ge,fe,"conv6"):void 0,Tn=Ae?v(fe,Ae,"conv7"):void 0,An=S(Ae||fe||ge,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:vt,conv4:$t,conv5:Kt,conv6:Dn,conv7:Tn,conv8:An}}else{const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=x(C,U,"conv0"),Ve=x(U,G,"conv1"),rt=x(G,ne,"conv2"),vt=x(ne,te,"conv3"),$t=x(te,oe,"conv4"),Kt=x(oe,ge,"conv5"),Dn=x(ge,fe,"conv6"),Tn=x(fe,Ae,"conv7"),An=S(Ae,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:vt,conv4:$t,conv5:Kt,conv6:Dn,conv7:Tn,conv8:An}}if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{params:O,paramMappings:I}}function aZ(r,l){const u=ms(r,l);function p(S){const x=u(`${S}/sub`,1),v=u(`${S}/truediv`,1);return{sub:x,truediv:v}}function g(S){const x=u(`${S}/filters`,4),v=u(`${S}/bias`,1);return{filters:x,bias:v}}function f(S){const x=g(`${S}/conv`),v=p(`${S}/bn`);return{conv:x,bn:v}}const I=$c(u);return{extractConvParams:g,extractConvWithBatchNormParams:f,extractSeparableConvParams:I}}function KE(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}=aZ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:S>7?f("conv6"):void 0,conv7:S>8?f("conv7"):void 0,conv8:p("conv8")}}else I={conv0:g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:g("conv6"),conv7:g("conv7"),conv8:p("conv8")};return Pn(r,u),{params:I,paramMappings:u}}var VI;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(VI||(VI={}));class Lr{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 kt=Ke(Xe());class Vc extends En{constructor(r){super("TinyYolov2");zI(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=br(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=br(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=br(u,l.conv6),u=br(u,l.conv7),ia(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Gc(ia(r,l.conv0,"valid",!1)):wr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=wr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?wr(u,l.conv6):u,u=l.conv7?wr(u,l.conv7):u,ia(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let p=kt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?di(p,this.config.meanRgb):p,p=p.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Rt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new Lr(l),g=await Rt(r),f=await this.forwardInput(g,u),I=kt.tidy(()=>kt.unstack(f)[0].expandDims()),S={width:g.getInputWidth(0),height:g.getInputHeight(0)},x=await this.extractBoxes(I,g.getReshapedInputDimensions(0),p);f.dispose(),I.dispose();const v=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),U=x.map(te=>this.config.classes[te.label]),G=gS(v.map(te=>te.rescale(u)),O,this.config.iouThreshold,!0),ne=G.map(te=>new gc(O[te],C[te],U[te],v[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return KE(r,this.config)}extractParams(r){const l=this.config.filterSizes||Vc.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 jE(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:g}=l,f=Math.max(p,g),I=f/p,S=f/g,x=r.shape[1],v=this.config.anchors.length,[O,C,U]=kt.tidy(()=>{const oe=r.reshape([x,x,v,this.boxEncodingSize]),ge=oe.slice([0,0,0,0],[x,x,v,4]),fe=oe.slice([0,0,0,4],[x,x,v,1]),Ae=this.withClassScores?kt.softmax(oe.slice([0,0,0,5],[x,x,v,this.config.classes.length]),3):kt.scalar(0);return[ge,fe,Ae]}),G=[],ne=await C.array(),te=await O.array();for(let oe=0;oeu){const Te=(ge+nu(te[oe][ge][fe][0]))/x*I,Ve=(oe+nu(te[oe][ge][fe][1]))/x*S,rt=Math.exp(te[oe][ge][fe][2])*this.config.anchors[fe].x/x*I,vt=Math.exp(te[oe][ge][fe][3])*this.config.anchors[fe].y/x*S,$t=Te-rt/2,Kt=Ve-vt/2,Dn={row:oe,col:ge,anchor:fe},{classScore:Tn,label:An}=this.withClassScores?await this.extractPredictedClass(U,Dn):{classScore:1,label:0};G.push({box:new tu($t,Kt,$t+rt,Kt+vt),score:Ae,classScore:Ae*Tn,label:An,...Dn})}}return O.dispose(),C.dispose(),U.dispose(),G}async extractPredictedClass(r,l){const{row:u,col:p,anchor:g}=l,f=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>f[u][p][g][S]).map((I,S)=>({classScore:I,label:S})).reduce((I,S)=>I.classScore>S.classScore?I:S)}}Vc.DEFAULT_FILTER_SIZES=[3,16,32,64,128,256,512,1024,1024];class Ou extends Vc{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:zE,classes:["face"]},r?{anchors:VE,meanRgb:YE}:{anchors:GE,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 Ht(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?qE:HE}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function cZ(r,l=!0){const u=new Ou(l);return u.extractWeights(r),u}class YI extends Lr{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class wi{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const HI=Ke(Xe());async function ca(r,l,u,p,g=({alignedRect:f})=>f){const f=r.map(x=>oa(x)?g(x):x.detection),I=p||(l instanceof HI.Tensor?await kc(l,f):await Dc(l,f)),S=await u(I);return I.forEach(x=>x instanceof HI.Tensor&&x.dispose()),S}async function Yc(r,l,u,p,g){return ca([r],l,async f=>u(f[0]),p,g)}const XE=.4,JE=[new Je(1.603231,2.094468),new Je(6.041143,7.080126),new Je(2.882459,3.518061),new Je(4.266906,5.178857),new Je(9.041765,10.66308)],ZE=[117.001,114.697,97.404];class Eu extends Vc{constructor(){const r={withSeparableConvs:!0,iouThreshold:XE,classes:["face"],anchors:JE,meanRgb:ZE,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 Ht(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const pt={ssdMobilenetv1:new zc,tinyFaceDetector:new Eu,tinyYolov2:new Ou,faceLandmark68Net:new Au,faceLandmark68TinyNet:new BI,faceRecognitionNet:new Nu,faceExpressionNet:new FI,ageGenderNet:new UI},QE=(r,l)=>pt.ssdMobilenetv1.locateFaces(r,l),lZ=(r,l)=>pt.tinyFaceDetector.locateFaces(r,l),hZ=(r,l)=>pt.tinyYolov2.locateFaces(r,l),eD=r=>pt.faceLandmark68Net.detectLandmarks(r),uZ=r=>pt.faceLandmark68TinyNet.detectLandmarks(r),dZ=r=>pt.faceRecognitionNet.computeFaceDescriptor(r),pZ=r=>pt.faceExpressionNet.predictExpressions(r),mZ=r=>pt.ageGenderNet.predictAgeAndGender(r),tD=r=>pt.ssdMobilenetv1.load(r),fZ=r=>pt.tinyFaceDetector.load(r),gZ=r=>pt.tinyYolov2.load(r),yZ=r=>pt.faceLandmark68Net.load(r),bZ=r=>pt.faceLandmark68TinyNet.load(r),wZ=r=>pt.faceRecognitionNet.load(r),LZ=r=>pt.faceExpressionNet.load(r),SZ=r=>pt.ageGenderNet.load(r),IZ=tD,xZ=QE,TZ=eD;class nD extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Fu extends nD{async run(){const r=await this.parentTask,l=await ca(r,this.input,async u=>await Promise.all(u.map(p=>pt.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>Jf(u,l[p]))}withAgeAndGender(){return new Du(this,this.input)}}class _u extends nD{async run(){const r=await this.parentTask;if(!r)return;const l=await Yc(r,this.input,u=>pt.faceExpressionNet.predictExpressions(u),this.extractedFaces);return Jf(r,l)}withAgeAndGender(){return new ku(this,this.input)}}class jc extends Fu{withAgeAndGender(){return new Hc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class Kc extends _u{withAgeAndGender(){return new qc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class sD extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Du extends sD{async run(){const r=await this.parentTask,l=await ca(r,this.input,async u=>await Promise.all(u.map(p=>pt.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:g,gender:f,genderProbability:I}=l[p];return ng(sg(u,f,I),g)})}withFaceExpressions(){return new Fu(this,this.input)}}class ku extends sD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await Yc(r,this.input,g=>pt.ageGenderNet.predictAgeAndGender(g),this.extractedFaces);return ng(sg(r,u,p),l)}withFaceExpressions(){return new _u(this,this.input)}}class Hc extends Du{withFaceExpressions(){return new jc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class qc extends ku{withFaceExpressions(){return new Kc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class qI extends wi{constructor(r,l){super();this.parentTask=r;this.input=l}}class la extends qI{async run(){const r=await this.parentTask,l=await ca(r,this.input,u=>Promise.all(u.map(p=>pt.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>tg(r[p],u))}withFaceExpressions(){return new jc(this,this.input)}withAgeAndGender(){return new Hc(this,this.input)}}class ha extends qI{async run(){const r=await this.parentTask;if(!r)return;const l=await Yc(r,this.input,u=>pt.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return tg(r,l)}withFaceExpressions(){return new Kc(this,this.input)}withAgeAndGender(){return new qc(this,this.input)}}const Wu=Ke(Xe());class jI extends wi{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?pt.faceLandmark68TinyNet:pt.faceLandmark68Net}}class KI extends jI{async run(){const r=await this.parentTask,l=r.map(g=>g.detection),u=this.input instanceof Wu.Tensor?await kc(this.input,l):await Dc(this.input,l),p=await Promise.all(u.map(g=>this.landmarkNet.detectLandmarks(g)));return u.forEach(g=>g instanceof Wu.Tensor&&g.dispose()),r.map((g,f)=>Mc(g,p[f]))}withFaceExpressions(){return new jc(this,this.input)}withAgeAndGender(){return new Hc(this,this.input)}withFaceDescriptors(){return new la(this,this.input)}}class XI extends jI{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Wu.Tensor?await kc(this.input,[l]):await Dc(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(g=>g instanceof Wu.Tensor&&g.dispose()),Mc(r,p)}withFaceExpressions(){return new Kc(this,this.input)}withAgeAndGender(){return new qc(this,this.input)}withFaceDescriptor(){return new ha(this,this.input)}}class JI extends wi{constructor(r,l=new yi){super();this.input=r;this.options=l}}class rg extends JI{async run(){const{input:r,options:l}=this,u=l instanceof YI?p=>pt.tinyFaceDetector.locateFaces(p,l):l instanceof yi?p=>pt.ssdMobilenetv1.locateFaces(p,l):l instanceof Lr?p=>pt.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=>Yo({},u)))})}withFaceLandmarks(r=!1){return new KI(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Fu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new Du(this.runAndExtendWithFaceDetections(),this.input)}}class ZI extends JI{async run(){const r=await new rg(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?Yo({},l):void 0)})}withFaceLandmarks(r=!1){return new XI(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new _u(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new ku(this.runAndExtendWithFaceDetection(),this.input)}}function AZ(r,l=new yi){return new ZI(r,l)}function og(r,l=new yi){return new rg(r,l)}async function iD(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await og(r,new yi(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function vZ(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await og(r,new Lr(l)).withFaceLandmarks().withFaceDescriptors()}const NZ=iD;function QI(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((g,f)=>g-p[f]).reduce((g,f)=>g+Math.pow(f,2),0))}class rD{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 g=()=>`person ${p++}`;this._labeledDescriptors=u.map(f=>{if(f instanceof Vo)return f;if(f instanceof Float32Array)return new Vo(g(),[f]);if(f.descriptor&&f.descriptor instanceof Float32Array)return new Vo(g(),[f.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=>QI(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new mm(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>Vo.fromJSON(u));return new rD(l,r.distanceThreshold)}}function CZ(r){const l=new Eu;return l.extractWeights(r),l}function oD(r,l){const{width:u,height:p}=new us(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(g=>oD(g,{width:u,height:p}));if(oa(r)){const g=r.detection.forSize(u,p),f=r.unshiftedLandmarks.forSize(g.box.width,g.box.height);return Mc(Yo(r,g),f)}return Ui(r)?Yo(r,r.detection.forSize(u,p)):r instanceof Gs||r instanceof Ht?r.forSize(u,p):r}var aD="0.8.2";const RZ=Ke(Xe()),OZ=typeof process!="undefined",EZ=typeof navigator!="undefined"&&typeof navigator.userAgent!="undefined",DZ={faceapi:aD,node:OZ,browser:EZ};export{UI as AgeGenderNet,tu as BoundingBox,Ct as Box,wi as ComposableTask,la as ComputeAllFaceDescriptorsTask,qI as ComputeFaceDescriptorsTaskBase,ha as ComputeSingleFaceDescriptorTask,KI as DetectAllFaceLandmarksTask,rg as DetectAllFacesTask,jI as DetectFaceLandmarksTaskBase,JI as DetectFacesTaskBase,XI as DetectSingleFaceLandmarksTask,ZI as DetectSingleFaceTask,us as Dimensions,kI as FACE_EXPRESSION_LABELS,Ht as FaceDetection,rZ as FaceDetectionNet,FI as FaceExpressionNet,ra as FaceExpressions,Au as FaceLandmark68Net,BI as FaceLandmark68TinyNet,V9 as FaceLandmarkNet,Gs as FaceLandmarks,YX as FaceLandmarks5,iu as FaceLandmarks68,mm as FaceMatch,rD as FaceMatcher,Nu as FaceRecognitionNet,gr as Gender,fm as LabeledBox,Vo as LabeledFaceDescriptors,to as NetInput,En as NeuralNetwork,gc as ObjectDetection,Je as Point,HX as PredictedBox,su as Rect,zc as SsdMobilenetv1,yi as SsdMobilenetv1Options,Eu as TinyFaceDetector,YI as TinyFaceDetectorOptions,Ou as TinyYolov2,Lr as TinyYolov2Options,VI as TinyYolov2SizeType,NZ as allFaces,iD as allFacesSsdMobilenetv1,vZ as allFacesTinyYolov2,AS as awaitMediaLoaded,vS as bufferToImage,dZ as computeFaceDescriptor,bc as createCanvas,ou as createCanvasFromMedia,iZ as createFaceDetectionNet,q9 as createFaceRecognitionNet,PE as createSsdMobilenetv1,CZ as createTinyFaceDetector,cZ as createTinyYolov2,og as detectAllFaces,eD as detectFaceLandmarks,uZ as detectFaceLandmarksTiny,TZ as detectLandmarks,AZ as detectSingleFace,WI as draw,gt as env,QI as euclideanDistance,ng as extendWithAge,tg as extendWithFaceDescriptor,Yo as extendWithFaceDetection,Jf as extendWithFaceExpressions,Mc as extendWithFaceLandmarks,sg as extendWithGender,kc as extractFaceTensors,Dc as extractFaces,W9 as fetchImage,OI as fetchJson,$9 as fetchNetWeights,sa as fetchOrThrow,Jn as getContext2dOrThrow,qo as getMediaDimensions,NS as imageTensorToCanvas,RI as imageToSquare,PX as inverseSigmoid,mS as iou,wm as isMediaElement,ru as isMediaLoaded,j9 as isWithAge,Ui as isWithFaceDetection,_I as isWithFaceExpressions,oa as isWithFaceLandmarks,K9 as isWithGender,SZ as loadAgeGenderModel,IZ as loadFaceDetectionModel,LZ as loadFaceExpressionModel,yZ as loadFaceLandmarkModel,bZ as loadFaceLandmarkTinyModel,wZ as loadFaceRecognitionModel,tD as loadSsdMobilenetv1Model,fZ as loadTinyFaceDetectorModel,gZ as loadTinyYolov2Model,EI as loadWeightMap,xZ as locateFaces,U9 as matchDimensions,fS as minBbox,pt as nets,gS as nonMaxSuppression,di as normalize,yS as padToSquare,mZ as predictAgeAndGender,pZ as recognizeFaceExpressions,oD as resizeResults,Ho as resolveInput,MX as shuffleArray,nu as sigmoid,QE as ssdMobilenetv1,RZ as tf,lZ as tinyFaceDetector,hZ as tinyYolov2,Rt as toNetInput,hS as utils,zI as validateConfig,DZ as version}; /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.js b/dist/face-api.js index 6db2ddc..69608a2 100644 --- a/dist/face-api.js +++ b/dist/face-api.js @@ -3819,7 +3819,7 @@ return a / b;`,LX=` `)}function Y7(r,l,u,p){const g=qt(l),f=p[p.length-1],I=new Array(f).fill(0),S=l.length,x=u==="complex64"?vu(r):r;if(S>1)for(let v=0;voO){const oe=Tu*I;let ge=Array.from(r.slice(0,oe)),fe=Array.from(r.slice((S-Tu)*I,S*I));return u==="complex64"&&(ge=vu(ge),fe=vu(fe)),["["+ge.map((Ae,Te)=>Au(Ae,g[Te],u)).join(", ")+", ..., "+fe.map((Ae,Te)=>Au(Ae,g[S-Tu+Te],u)).join(", ")+"]"]}const te=u==="complex64"?vu(r):Array.from(r);return["["+te.map((oe,ge)=>Au(oe,g[ge],u)).join(", ")+"]"]}const v=l.slice(1),O=p.slice(1),C=p[0]*I,U=[];if(S>oO){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||JR(l,this.size),this.strides=xu(r)}set(r,...l){l.length===0&&(l=[0]),Z(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 g=`Requested out of range element at ${r}. Buffer shape=${this.shape}`;throw new Error(g)}l++}let u=r[r.length-1];for(let p=0;phI(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=zi().readSync(this.dataId);if(this.dtype==="string")try{return r.map(l=>hI(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 zi().read(this.dataId);return this.dtype==="string"?r:new Uint8Array(r.buffer)}dispose(){if(this.isDisposed)return;zi().disposeTensor(this),this.isDisposedInternal=!0}get isDisposed(){return this.isDisposedInternal}throwIfDisposed(){if(this.isDisposed)throw new Error("Tensor is disposed.")}print(r=!1){return Uc.print(this,r)}clone(){return this.throwIfDisposed(),Uc.clone(this)}toString(r=!1){const l=this.dataSync();return aO(l,this.shape,this.dtype,r)}cast(r){return this.throwIfDisposed(),Uc.cast(this,r)}variable(r=!0,l,u){return this.throwIfDisposed(),zi().makeVariable(this,r,l,u)}}Object.defineProperty(xn,Symbol.hasInstance,{value:r=>!!r&&r.data!=null&&r.dataSync!=null&&r.throwIfDisposed!=null});class ng extends xn{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(!ra(r.shape,this.shape))throw new Error(`shape of the new value (${r.shape}) and previous value (${this.shape}) must match`);zi().disposeTensor(this),this.dataId=r.dataId,zi().incRef(this,null)}dispose(){zi().disposeVariable(this),this.isDisposedInternal=!0}}Object.defineProperty(ng,Symbol.hasInstance,{value:r=>r instanceof xn&&r.assign!=null&&r.assign instanceof Function});var pO;(function(r){r.R0="R0",r.R1="R1",r.R2="R2",r.R3="R3",r.R4="R4",r.R5="R5",r.R6="R6"})(pO||(pO={}));var dI;(function(r){r.float32="float32",r.int32="int32",r.bool="int32",r.complex64="complex64"})(dI||(dI={}));var pI;(function(r){r.float32="float32",r.int32="int32",r.bool="bool",r.complex64="complex64"})(pI||(pI={}));var mI;(function(r){r.float32="float32",r.int32="float32",r.bool="float32",r.complex64="complex64"})(mI||(mI={}));var fI;(function(r){r.float32="complex64",r.int32="complex64",r.bool="complex64",r.complex64="complex64"})(fI||(fI={}));const q7={float32:mI,int32:dI,bool:pI,complex64:fI};function mO(r,l){if(r==="string"||l==="string"){if(r==="string"&&l==="string")return"string";throw new Error(`Can not upcast ${r} with ${l}`)}return q7[r][l]}function ft(r,l){if(r.dtype===l.dtype)return[r,l];const u=mO(r.dtype,l.dtype);return[r.cast(u),l.cast(u)]}function sg(r){const l=[],u=new Set;return fO(r,l,u),l}function fO(r,l,u){if(r==null)return;if(r instanceof xn){l.push(r);return}if(!j7(r))return;const p=r;for(const g in p){const f=p[g];u.has(f)||(u.add(f),fO(f,l,u))}}function j7(r){return Array.isArray(r)||typeof r=="object"}class gO{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 Nu{constructor(r){this.ENV=r,this.registry={},this.registryFactory={},this.pendingBackendInitId=0,this.state=new gO}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 w2)&&typeof u.then=="function"){const p=++this.pendingBackendInitId,g=u.then(f=>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 Nu.nextTensorId++}nextVariableId(){return Nu.nextVariableId++}clone(r){const l=this.makeTensorFromDataId(r.dataId,r.shape,r.dtype),u={x:r},p=f=>({x:()=>{const I="float32",S={x:f},x={dtype:I};return Y.runKernelFunc(v=>v.cast(f,I),S,null,Fc,x)}}),g=[];return this.addTapeNode(this.state.activeScope.name,u,[l],p,g,{}),l}runKernel(r,l,u,p,g){const f=null,I=null;return this.runKernelFunc(f,l,I,r,u,p,g)}shouldCheckForMemLeaks(){return this.ENV.getBool("IS_TEST")}checkKernelForMemLeak(r,l,u){const p=this.backend.numDataIds();let g=0;u.forEach(S=>{g+=S.dtype==="complex64"?3:1});const f=this.state.numDataMovesStack[this.state.numDataMovesStack.length-1],I=p-l-g-f;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,g,f,I){let S,x=[];const v=this.isTapeOn();p==null&&(p=this.state.activeScope!=null?this.state.activeScope.name:"");const O=this.state.numBytes,C=this.state.numTensors;this.shouldCheckForMemLeaks()&&this.state.numDataMovesStack.push(0);let U;const G=Jf(p,this.backendName);let ne;if(G!=null)U=()=>{const oe=this.backend.numDataIds();ne=G.kernelFunc({inputs:l,attrs:g,backend:this.backend});const ge=Array.isArray(ne)?ne:[ne];this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,oe,ge);const fe=ge.map(({dataId:Ae,shape:Te,dtype:Ve})=>this.makeTensorFromDataId(Ae,Te,Ve));if(v){let Ae=this.getTensorsForGradient(p,l,fe);if(Ae==null){I==null&&(I=[]);const Te=fe.filter((Ve,rt)=>I[rt]);Ae=(f||[]).slice().concat(Te)}x=this.saveTensorsForBackwardMode(Ae)}return fe};else{const oe=ge=>{if(!v)return;x=ge.map(fe=>this.keep(this.clone(fe)))};U=()=>{const ge=this.backend.numDataIds();ne=this.tidy(()=>r(this.backend,oe));const fe=Array.isArray(ne)?ne:[ne];return this.shouldCheckForMemLeaks()&&this.checkKernelForMemLeak(p,ge,fe),fe}}let te;return this.scopedRun(()=>this.state.kernelDepth++,()=>this.state.kernelDepth--,()=>{!this.ENV.getBool("DEBUG")&&!this.state.profiling?S=U():(te=this.profiler.profileKernel(p,l,()=>U()),this.ENV.getBool("DEBUG")&&this.profiler.logKernelProfile(te),S=te.outputs)}),v&&this.addTapeNode(p,l,S,u,x,g),this.state.profiling&&this.state.activeProfile.kernels.push({name:p,bytesAdded:this.state.numBytes-O,totalBytesSnapshot:this.state.numBytes,tensorsAdded:this.state.numTensors-C,totalTensorsSnapshot:this.state.numTensors,inputShapes:Object.keys(l).map(oe=>l[oe]!=null?l[oe].shape:null),outputShapes:S.map(oe=>oe.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 g=p.inputsToSave||[],f=p.outputsToSave||[];let I;p.saveAllInputs?(Z(Array.isArray(l),()=>"saveAllInputs is true, expected inputs to be an array."),I=Object.keys(l).map(x=>l[x])):I=g.map(x=>l[x]);const S=u.filter((x,v)=>f[v]);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 g=r;u==="string"&&Su(r[0])&&(g=r.map(S=>nO(S)));const f=p.write(g,l,u),I=new xn(l,u,f,this.nextTensorId());if(this.incRef(I,p),u==="string"){const S=this.state.tensorInfo.get(f),x=eO(g);this.state.numBytes+=x-S.bytes,S.bytes=x}return I}makeTensorFromDataId(r,l,u,p){u=u||"float32";const g=new xn(l,u,r,this.nextTensorId());return this.incRef(g,p),g}makeVariable(r,l=!0,u,p){u=u||this.nextVariableId().toString(),p!=null&&p!==r.dtype&&(r=r.cast(p));const g=new ng(r,l,u,this.nextTensorId());if(this.state.registeredVariables[g.name]!=null)throw new Error(`Variable with name ${g.name} was already registered`);return this.state.registeredVariables[g.name]=g,this.incRef(g,this.backend),g}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*QR(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 ng||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,g,f){const I={id:this.state.nextTapeNodeId++,kernelName:r,inputs:l,outputs:u,saved:g},S=rI(r);S!=null&&(p=S.gradFunc),p!=null&&(I.gradient=x=>(x=x.map((v,O)=>{if(v==null){const C=u[O],U=oa(C.size,C.dtype);return this.makeTensor(U,C.shape,C.dtype)}return v}),p(x.length>1?x:x[0],g,f))),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=sg(r),u=new Set(l.map(g=>g.id));for(let g=0;g{!g.kept&&g.scopeId===p.id&&this.track(g)})}gradients(r,l,u,p=!1){if(Z(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 g=this.scopedRun(()=>this.startTape(),()=>this.endTape(),()=>this.tidy("forward",r));Z(g instanceof xn,()=>"The result y returned by f() must be a tensor.");const f=iO(this.state.activeTape,l,g);if(!p&&f.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[g.id]=u==null?K7(g.shape):u,rO(I,f,x=>this.tidy(x),X7);const S=l.map(x=>I[x.id]);return this.state.gradientDepth===0&&(this.state.activeTape.forEach(x=>{for(const v of x.saved)v.dispose()}),this.state.activeTape=null),{value:g,grads:S}})}customGrad(r){return Z(aI(r),()=>"The f passed in customGrad(f) must be a function."),(...l)=>{Z(l.every(g=>g instanceof xn),()=>"The args passed in customGrad(f)(x1, x2,...) must all be tensors");let u;const p={};return l.forEach((g,f)=>{p[f]=g}),this.runKernelFunc((g,f)=>(u=r(...l,f),Z(u.value instanceof xn,()=>"The function f passed in customGrad(f) must return an object where `obj.value` is a tensor"),Z(aI(u.gradFunc),()=>"The function f passed in customGrad(f) must return an object where `obj.gradFunc` is a function."),u.value),p,(g,f)=>{const I=u.gradFunc(g,f),S=Array.isArray(I)?I:[I];Z(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(...)."),Z(S.every(v=>v instanceof xn),()=>"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((v,O)=>{x[O]=()=>v}),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=lI(),u=await this.backend.time(r);return u.wallMs=lI()-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 gO;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}}Nu.nextTensorId=0;Nu.nextVariableId=0;function K7(r){const l=Qf(qt(r),"float32");return Y.makeTensor(l,r,"float32")}function gI(){const r=tI();if(r._tfengine==null){const l=new S2(r);r._tfengine=new Nu(l)}return x2(r._tfengine.ENV),hO(()=>r._tfengine),r._tfengine}const Y=gI();function X7(r,l){const u={a:r,b:l};return Y.runKernelFunc((p,g)=>{const f=p.add(r,l);return g([r,l]),f},u,null,kc)}function yO(){return typeof window!="undefined"&&window.document!=null||typeof WorkerGlobalScope!="undefined"}const pr=Rs();pr.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.")});pr.registerFlag("IS_BROWSER",()=>yO());pr.registerFlag("IS_NODE",()=>typeof process!="undefined"&&typeof process.versions!="undefined"&&typeof process.versions.node!="undefined");pr.registerFlag("IS_CHROME",()=>typeof navigator!="undefined"&&navigator!=null&&navigator.userAgent!=null&&/Chrome/.test(navigator.userAgent)&&/Google Inc/.test(navigator.vendor));pr.registerFlag("PROD",()=>!1);pr.registerFlag("TENSORLIKE_CHECK_SHAPE_CONSISTENCY",()=>pr.getBool("DEBUG"));pr.registerFlag("DEPRECATION_WARNINGS_ENABLED",()=>!0);pr.registerFlag("IS_TEST",()=>!1);function mr(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)&&Rs().getBool("TENSORLIKE_CHECK_SHAPE_CONSISTENCY")&&bO(r,p,[]),p}function bO(r,l,u){if(u=u||[],!Array.isArray(r)&&!Os(r)){Z(l.length===0,()=>`Element arr[${u.join("][")}] is a primitive, but should be an array/TypedArray of ${l[0]} elements`);return}Z(l.length>0,()=>`Element arr[${u.join("][")}] should be a primitive, but is an array of ${r.length} elements`),Z(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 g=0;g=0&&(g=p),wO(p,g,l,u),r==null||!Os(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 f=mr(r,g);!Os(r)&&!Array.isArray(r)&&(r=[r]);const I=!0,S=g!=="string"?Zf(r,g):Wc(r,[],I);return Y.makeTensor(S,f,g)}function ig(r,l,u,p="numeric"){if(!Array.isArray(r))throw new Error(`Argument ${l} passed to ${u} must be a \`Tensor[]\` or \`TensorLike[]\``);const g=r;return g.map((f,I)=>M(f,`${l}[${I}]`,u),p)}const LO="__op";function z(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+LO;const g=(...f)=>{Y.startScope(u);try{const I=p(...f);return I instanceof Promise&&console.error("Cannot return a Promise inside of tidy."),Y.endScope(I),I}catch(I){throw Y.endScope(null),I}};return Object.defineProperty(g,"name",{value:u,configurable:!0}),g}function J7(r,l){const u=M(r,"real","complex"),p=M(l,"imag","complex");Zt(u.shape,p.shape,`real and imag shapes, ${u.shape} and ${p.shape}, must match in call to tf.complex().`);const g=I=>I.complex(u,p),f={real:u,imag:p};return Y.runKernelFunc(g,f,null,M2)}const Gi=z({complex_:J7});function Vi(r,l,u,p){if(p==null&&(p=Iu(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){eg(l);const g=qt(l),f=qt(u);Z(g===f,()=>`Based on the provided shape, [${l}], the tensor should have ${g} values but has ${f}`);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):Wc(r,[],!0),Y.makeTensor(r,l,p)}function yI(r,l,u){const p=mr(r,u);return Vi(r,l,p,u)}function Cu(r,l="float32",u){return l=l||"float32",eg(r),new lO(r,l,u)}function Z7(r,l){const u=M(r,"x","cast");if(!ZR(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},g={dtype:l};return Y.runKernelFunc(f=>f.cast(u,l),p,null,Fc,g)}const Le=z({cast_:Z7});function Q7(r){const l=M(r,"x","clone",null),u=()=>Y.makeTensorFromDataId(l.dataId,l.shape,l.dtype),p={x:l};return Y.runKernelFunc(u,p,null,yf)}const gi=z({clone_:Q7});function bI(r,l=!1){console.log(r.toString(l))}gI();const eJ={buffer:Cu,cast:Le,clone:gi,print:bI};uO(eJ);function tJ(r,l){const u=M(r,"x","reshape",null),p={x:u},g={shape:l},f=(I,S)=>(l=KR(l,u.size),Z(u.size===qt(l),()=>"new shape and old shape must have the same number of elements."),S([u]),I.reshape(u,l));return Y.runKernelFunc(f,p,null,Rf,g)}const ie=z({reshape_:tJ});function nJ(r,l,u=!1,p=!1){let g=M(r,"a","matMul"),f=M(l,"b","matMul");[g,f]=ft(g,f),Z(g.rank>=2&&f.rank>=2&&g.rank===f.rank,()=>`Error in matMul: inputs must have the same rank of at least 2, got ranks ${g.rank} and ${f.rank}.`);const I=u?g.shape[g.rank-2]:g.shape[g.rank-1],S=p?f.shape[f.rank-1]:f.shape[f.rank-2],x=u?g.shape[g.rank-1]:g.shape[g.rank-2],v=p?f.shape[f.rank-2]:f.shape[f.rank-1],O=g.shape.slice(0,-2),C=f.shape.slice(0,-2),U=qt(O),G=qt(C);Z(ra(O,C),()=>`Error in matMul: outer dimensions (${O}) and (${C}) of Tensors with shapes ${g.shape} and ${f.shape} must match.`),Z(I===S,()=>`Error in matMul: inner shapes (${I}) and (${S}) of Tensors with shapes ${g.shape} and ${f.shape} and transposeA=${u} and transposeB=${p} must match.`);const ne=g.shape.slice(0,-2).concat([x,v]),te=u?ie(g,[U,I,x]):ie(g,[U,x,I]),oe=p?ie(f,[G,v,S]):ie(f,[G,S,v]),ge=(Ve,rt)=>(rt([te,oe]),Ve.batchMatMul(te,oe,u,p)),fe={a:te,b:oe},Ae={transposeA:u,transposeB:p},Te=Y.runKernelFunc(ge,fe,null,tf,Ae);return ie(Te,ne)}const dn=z({matMul_:nJ});function sJ(r,l){const u=M(r,"x","transpose");if(l==null&&(l=u.shape.map((f,I)=>I).reverse()),Z(u.rank===l.length,()=>`Error in transpose: rank of input ${u.rank} must match length of perm ${l}.`),l.forEach(f=>{Z(f>=0&&f`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},g={perm:l};return Y.runKernelFunc(f=>f.transpose(u,l),p,null,Hf,g)}const $t=z({transpose_:sJ});function wI(r,l,u){if(_c(r),l!=null&&l.length!==3)throw new Error("tensor3d() requires shape to have three numbers");const p=mr(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 LI={};uu(LI,{fromPixels:()=>oJ,toPixels:()=>rJ});let Bc;function iJ(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,g=!1,f=!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)g=!0;else if(typeof HTMLImageElement!="undefined"&&r instanceof HTMLImageElement)f=!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(g){const G=2;if(g&&r.readyState element.")}const S=Jf(sI,Y.backendName);if(S!=null){const G={pixels:r},ne={numChannels:l};return Y.runKernel(sI,G,ne)}const[x,v]=g?[r.videoWidth,r.videoHeight]:[r.width,r.height];let O;I?O=r.getContext("2d").getImageData(0,0,x,v).data:p||u?O=r.data:(f||g)&&(Bc==null&&(Bc=document.createElement("canvas").getContext("2d")),Bc.canvas.width=x,Bc.canvas.height=v,Bc.drawImage(r,0,0,x,v),O=Bc.getImageData(0,0,x,v).data);let C;if(l===4)C=new Int32Array(O);else{const G=x*v;C=new Int32Array(G*l);for(let ne=0;ne4||f===2)throw new Error(`toPixels only supports depth of size 1, 3 or 4 but got ${f}`);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(g*p*4);for(let v=0;v1)throw new Error(`Tensor values for a float32 Tensor must be in the range [0 - 1] but encountered ${G}.`)}else if(u.dtype==="int32"&&(G<0||G>255))throw new Error(`Tensor values for a int32 Tensor must be in the range [0 - 255] but encountered ${G}.`);f===1?(O[0]=G*S,O[1]=G*S,O[2]=G*S):O[U]=G*S}const C=v*4;x[C+0]=Math.round(O[0]),x[C+1]=Math.round(O[1]),x[C+2]=Math.round(O[2]),x[C+3]=Math.round(O[3])}if(l!=null){l.width=g,l.height=p;const v=l.getContext("2d"),O=new ImageData(x,g,p);v.putImageData(O,0,0)}return u!==r&&u.dispose(),x}const oJ=z({fromPixels_:iJ});function SO(r,l,u){const p=r.shape.length;Z(p===l.length,()=>`Error in slice${p}D: Length of begin ${l} must match the rank of the array (${p}).`),Z(p===u.length,()=>`Error in slice${p}D: Length of size ${u} must match the rank of the array (${p}).`);for(let g=0;g`Error in slice${p}D: begin[${g}] + size[${g}] (${l[g]+u[g]}) would overflow input.shape[${g}] (${r.shape[g]})`)}function rg(r,l,u){let p;const g=r.shape.length;typeof l=="number"?p=[l,...new Array(g-1).fill(0)]:l.length{Z(I!==-1,()=>"slice() does not support negative begin indexing.")});let f;return u==null?f=new Array(g).fill(-1):typeof u=="number"?f=[u,...new Array(g-1).fill(-1)]:u.lengthI>=0?I:(Z(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,f]}function aJ(r){Rs().getBool("DEPRECATION_WARNINGS_ENABLED")&&console.warn(r+" You can disable deprecation warnings with tf.disableDeprecationWarnings().")}dO(aJ);function IO(r,l){return Y.tidy(r,l)}function xO(r){const l=sg(r);l.forEach(u=>u.dispose())}function cJ(r,l){let u=M(r,"a","add"),p=M(l,"b","add");[u,p]=ft(u,p);const g=(I,S)=>{const x=I.add(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,kc)}const Lt=z({add_:cJ});function lJ(r,l){let u=M(r,"a","floorDiv"),p=M(l,"b","floorDiv");[u,p]=ft(u,p);const g=(I,S)=>{const x=I.floorDiv(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,mf)}const SI=z({floorDiv_:lJ});function hJ(r,l){let u=M(r,"a","div"),p=M(l,"b","div");if([u,p]=ft(u,p),u.dtype==="int32"&&p.dtype==="int32")return SI(u,p);const g=(S,x)=>{const v=S.realDivide(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,uf,I)}const Pe=z({div_:hJ});function uJ(r,l){let u=M(r,"a","mul"),p=M(l,"b","mul");[u,p]=ft(u,p);const g=(I,S)=>{const x=I.multiply(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Tf)}const ae=z({mul_:uJ});function dJ(r){const l=M(r,"x","abs"),u={x:l};return Y.runKernelFunc((p,g)=>(g([l]),l.dtype==="complex64"?p.complexAbs(l):p.abs(l)),u,null,ef)}const Bn=z({abs_:dJ});function pJ(r,l){for(let u=0;ur[f]);return[u,g]}function Qn(r,l){const u=l.map(p=>1);return mJ(r,u,l)}function ds(r,l){if(pJ(r,l))return null;const u=[];for(let p=0;pu.push(p)),u}function Mc(r){return r.map((l,u)=>[u,l]).sort((l,u)=>l[1]-u[1]).map(l=>l[0])}function ro(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 x=aa((I-l+2*p)/u+1,g);return Z(Qt(x),()=>`The output # of columns (${x}) must be an integer. Change the stride and/or zero pad parameters`),[S,x]}function bJ(r,l,u,p,g,f){g==null&&(g=AO(r,l,p));const I=r[0],S=r[1],x=r[2],v=aa((I-l+2*g)/p+1,f);Z(Qt(v),()=>`The output # of depths (${v}) must be an integer. Change the stride and/or zero pad parameters`);const O=aa((S-l+2*g)/p+1,f);Z(Qt(O),()=>`The output # of rows (${O}) must be an integer. Change the stride and/or zero pad parameters`);const C=aa((x-l+2*g)/p+1,f);return Z(Qt(C),()=>`The output # of columns (${C}) must be an integer. Change the stride and/or zero pad parameters`),[v,O,C,u]}function AO(r,l,u,p=1){const g=Pc(l,p);return Math.floor((r[0]*(u-1)-u+g)/2)}function og(r){return typeof r=="number"?[r,r,r]:r.length===2?[r[0],r[1],1]:r}function II(r){return typeof r=="number"?[r,r,r]:r}function Pc(r,l){return l<=1?r:r+(r-1)*(l-1)}function fJ(r,l,u,p,g,f,I,S,x){let v,O,C;if(typeof r=="number"){const U=r===0?"VALID":"NUMBER";v={top:r,bottom:r,left:r,right:r,type:U};const G=yJ([l,u],f,p,r,S);O=G[0],C=G[1]}else if(r==="same"){O=Math.ceil(l/p),C=Math.ceil(u/g);const U=Math.max(0,(O-1)*p+f-l),G=Math.max(0,(C-1)*g+I-u),ne=Math.floor(U/2),te=U-ne,oe=Math.floor(G/2),ge=G-oe;v={top:ne,bottom:te,left:oe,right:ge,type:"SAME"}}else if(r==="valid")v={top:0,bottom:0,left:0,right:0,type:"VALID"},O=Math.ceil((l-f+1)/p),C=Math.ceil((u-I+1)/g);else if(typeof r=="object"){const U=x==="channelsLast"?r[1][0]:r[2][0],G=x==="channelsLast"?r[1][1]:r[2][1],ne=x==="channelsLast"?r[2][0]:r[3][0],te=x==="channelsLast"?r[2][1]:r[3][1],oe=U===0&&G===0&&ne===0&&te===0?"VALID":"EXPLICIT";v={top:U,bottom:G,left:ne,right:te,type:oe},O=aa((l-f+U+G)/p+1,S),C=aa((u-I+ne+te)/g+1,S)}else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:v,outHeight:O,outWidth:C}}function gJ(r,l,u,p,g,f,I,S,x,v,O){let C,U,G,ne;if(typeof r=="number"){const te=r===0?"VALID":"NUMBER";C={top:r,bottom:r,left:r,right:r,front:r,back:r,type:te};const oe=bJ([l,u,p,1],S,1,g,r,O);U=oe[0],G=oe[1],ne=oe[2]}else if(r==="same"){U=Math.ceil(l/g),G=Math.ceil(u/f),ne=Math.ceil(p/I);const te=(U-1)*g+S-l,oe=(G-1)*f+x-u,ge=(ne-1)*I+v-p,fe=Math.floor(te/2),Ae=te-fe,Te=Math.floor(oe/2),Ve=oe-Te,rt=Math.floor(ge/2),Ct=ge-rt;C={top:Te,bottom:Ve,left:rt,right:Ct,front:fe,back:Ae,type:"SAME"}}else if(r==="valid")C={top:0,bottom:0,left:0,right:0,front:0,back:0,type:"VALID"},U=Math.ceil((l-S+1)/g),G=Math.ceil((u-x+1)/f),ne=Math.ceil((p-v+1)/I);else throw Error(`Unknown padding parameter: ${r}`);return{padInfo:C,outDepth:U,outHeight:G,outWidth:ne}}function aa(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 oo(r){const[l,u,p]=og(r);return l===1&&u===1&&p===1}function ao(r,l){return oo(r)||oo(l)}function zc(r){if(r==="NHWC")return"channelsLast";if(r==="NCHW")return"channelsFirst";throw new Error(`Unknown dataFormat ${r}`)}function vO(r,l){const u=r[0].length;r.forEach((g,f)=>{Z(g.length===u,()=>`Error in concat${u}D: rank of tensors[${f}] must be the same as the rank of the rest (${u})`)}),Z(l>=0&&l`Error in concat${u}D: axis must be between 0 and ${u-1}.`);const p=r[0];r.forEach((g,f)=>{for(let I=0;I`Error in concat${u}D: Shape of tensors[${f}] (${g}) does not match the shape of the rest (${p}) along the non-concatenated axis ${f}.`)})}function NO(r,l){const u=r[0].slice();for(let p=1;p=1,()=>"Pass at least one tensor to concat");let u=ig(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 x=ut(l,u[0].shape)[0],v=NO(u.map(U=>U.shape),x);if(qt(v)===0)return yI([],v);if(u=u.filter(U=>U.size>0),u.length===1)return u[0];const O=u.map(U=>U.shape);vO(O,x);const C=I.concat(u,x);return S(u),C},g=u,f={axis:l};return Y.runKernelFunc(p,g,null,rf,f)}const yn=z({concat_:wJ});function LJ(r){const l=M(r,"x","sigmoid"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sigmoid(l);return g([f]),f},u,null,Uf)}const xI=z({sigmoid_:LJ});function SJ(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const g=(S,x)=>{const[v,O]=rg(p,l,u);return SO(p,v,O),x([p]),S.slice(p,v,O)},f={x:p},I={begin:l,size:u};return Y.runKernelFunc(g,f,null,_f,I)}const vt=z({slice_:SJ});function IJ(r,l,u){const p=M(r,"x","batchToSpaceND"),g=l.reduce((x,v)=>x*v);Z(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),Z(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),Z(p.shape[0]%g===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${g}`);const f=x=>x.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return Y.runKernelFunc(f,I,null,nf,S)}const TI=z({batchToSpaceND_:IJ});function xJ(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const O=u.shape.slice();for(;O.length=0;O--)if(g[O]===l[O])f[O]=1;else if(u.shape[O]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=f.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(I.length===0)return gi(u);const S=O=>O.tile(u,f),x={x:u},v={shape:l,inputShape:g};return Y.runKernelFunc(S,x,null,sf,v)}const lg=z({broadcastTo_:xJ});function TJ(r,l,u,p,g="NHWC",f=[1,1],I){const S=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let v=S,O=!1;S.rank===3&&(O=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2]])),Z(v.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${v.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&Z(Qt(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const C=g==="NHWC"?v.shape[3]:v.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(ao(u,f),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${f}'`);const U=(oe,ge)=>{const fe=zc(g),Ae=fr(v.shape,x.shape,u,f,p,I,!1,fe),Te=oe.conv2d(v,x,Ae);return ge([v,x]),Te},G={x:v,filter:x},ne={strides:u,pad:p,dataFormat:g,dilations:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,of,ne);return O?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const AI=z({conv2d_:TJ});function AJ(r,l,u,p,g,f="NHWC",I){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,v=!1;l.rank===3&&(v=!0,x=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),Z(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const O=f==="NHWC"?S[3]:S[1],C=f==="NHWC"?x.shape[3]:x.shape[1];Z(O===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${u.shape[2]}.`),Z(C===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[3]}.`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const U=(oe,ge)=>{const fe=1,Ae=zc(f),Te=fr(S,u.shape,p,fe,g,I,!1,Ae),Ve=oe.conv2dDerInput(x,u,Te);return ge([x,u]),Ve},G={dy:x,filter:u},ne={strides:p,pad:g,dataFormat:f,dimRoundingMode:I,inputShape:S},te=Y.runKernelFunc(U,G,null,af,ne);return v?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const CO=z({conv2DBackpropInput_:AJ});function vJ(r,l,u,p,g){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let f=r,I=l,S=!1;l.rank===4&&(S=!0,I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),f=[1,r[0],r[1],r[2],r[3]]);const x=f[4],v=I.shape[4];Z(f.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${f.length}.`),Z(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),Z(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),Z(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),Z(v===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${v}) must match output depth for filter ${u.shape[4]}.`);const O=ne=>{const te=1,oe=Ru(f,u.shape,p,te,g);return ne.conv3dDerInput(I,u,oe)},C={dy:I},U={pad:g},G=Y.runKernelFunc(O,C,null,V2,U);return S?ie(G,[G.shape[1],G.shape[2],G.shape[3],G.shape[4]]):G}const RO=z({conv3DBackpropInput_:vJ});function NJ(r){const l=M(r,"x","cos"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cos(l);return g([l]),f},u,null,cf)}const Ou=z({cos_:NJ});function CJ(r){const l=M(r,"x","cosh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cosh(l);return g([l]),f},u,null,lf)}const vI=z({cosh_:CJ});function RJ(r,l=0,u=!1,p=!1){const g=M(r,"x","cumsum"),f=(x,v)=>{const O=ds([l],g.rank);let C=g;O!=null&&(C=$t(g,O));const U=ro(1,g.rank)[0];let G=x.cumsum(C,U,u,p);if(v([g]),O!=null){const ne=Mc(O);G=$t(G,ne)}return G},I={x:g},S={axis:l,exclusive:u,reverse:p};return Y.runKernelFunc(f,I,null,hf,S)}const NI=z({cumsum_:RJ});function Nt(r,l){const u=[];for(let p=0;p1)&&u.unshift(f)}return u}function it(r,l){const u=[],p=Math.max(r.length,l.length);for(let g=0;gI.equal(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,tR)}const CI=z({equal_:OJ});function EJ(r,l,u){const p=M(l,"a","where"),g=M(u,"b","where"),f=M(r,"condition","where","bool"),I=it(p.shape,g.shape),S=lg(p,I),x=lg(g,I);f.rank===1&&Z(f.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),f.rank!==1&&Zt(f.shape,x.shape,"Error in where: ");const v=(C,U)=>{const G=C.select(f,S,x);return U([f]),G},O={condition:f,t:S,e:x};return Y.runKernelFunc(v,O,null,Ff)}const Mn=z({where_:EJ});function DJ(r){const l=M(r,"x","zerosLike"),u={x:l};return Y.runKernelFunc(p=>p.zerosLike(l),u,null,Kf)}const je=z({zerosLike_:DJ});function kJ(r){const l=M(r,"x","exp"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.exp(l);return g([f]),f},u,null,df)}const Pn=z({exp_:kJ});function FJ(r,l=0){const u=null,p=M(r,"x","expandDims",u);Z(l<=p.rank,()=>"Axis must be <= rank of the tensor");const g=p.shape.slice();return l<0&&(Z(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),g.splice(l,0,1),ie(p,g)}const Es=z({expandDims_:FJ});function _J(r,l){const u=null,p=M(r,"x","tile",u);Z(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const g=(x,v)=>{const O=x.tile(p,l);return v([p]),O},f=[p],I={x:p},S={reps:l};return Y.runKernelFunc(g,I,null,Yf,S,f)}const ca=z({tile_:_J});function WJ(r,l,u,p="float32"){l==null&&(l=r);const g=Cu([r,l],p),f=r<=l?r:l;for(let S=0;Sg.fill(r,l,u),{},null,iR,p)}function $J(r){const l=M(r,"x","floor"),u={x:l};return Y.runKernelFunc(p=>p.floor(l),u,null,pf)}const EI=z({floor_:$J});function OO(r,l,u){const p=r.shape[u],g=[];let f=1,I=1;for(let S=0;S{const O=ut(u,p.shape)[0],C=OO(p,g,O),U=x.gather(p,ie(g,[g.size]),O);return v([p,g]),ie(U,C.outputShape)};return Y.runKernelFunc(S,f,null,ff,I)}const DI=z({gather_:UJ});function BJ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.greater(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,aR)}const yi=z({greater_:BJ});function MJ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.greaterEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,gf)}const gr=z({greaterEqual_:MJ});function PJ(r){const l=M(r,"input","imag"),u=g=>g.imag(l),p={input:l};return Y.runKernelFunc(u,p,null,lR)}const Eu=z({imag_:PJ});function zJ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=ft(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.maximum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Sf)}const kI=z({maximum_:zJ});function ke(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 Vi(r,u,p,l)}function GJ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.less(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,pR)}const FI=z({less_:GJ});function VJ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.lessEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,mR)}const yr=z({lessEqual_:VJ});function YJ(r){const l=M(r,"x","log"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log(l);return g([l]),f},u,null,bf)}const co=z({log_:YJ});function HJ(r){const l=M(r,"x","log1p"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log1p(l);return g([l]),f},u,null,wf)}const _I=z({log1p_:HJ});function hg(r){return Y.customGrad(r)}function qJ(r){const l=M(r,"x","neg"),u={x:l};return Y.runKernelFunc(p=>p.neg(l),u,null,Af)}const yt=z({neg_:qJ});function jJ(r,l=null,u=!1){const p=M(r,"x","max"),g=(S,x)=>{const v=ut(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=$t(p,C),O=ro(O.length,U.rank));const G=S.max(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Qn(ne.shape,ut(l,p.shape));ne=ie(ne,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={reductionIndices:l,keepDims:u};return Y.runKernelFunc(g,f,null,Lf,I)}const la=z({max_:jJ});function KJ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=ft(u,p);const g=(I,S)=>{const x=I.subtract(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Vf)}const Be=z({sub_:KJ});function XJ(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Le(p,"int32"));const g=(S,x)=>{x([p]);const v=ut(l,p.shape),O=ds(v,p.rank);let C=v,U=p;O!=null&&(U=$t(p,O),C=ro(C.length,p.rank));let G=S.sum(U,C);if(u){const ne=Qn(G.shape,v);G=ie(G,ne)}return G},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,Mf,I)}const Fe=z({sum_:XJ});function JJ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),g=ut(l,p.shape),f=la(p,g,!0),I=Be(p,f),S=Pn(I),x=Fe(S,g),v=co(x),O=Lt(ie(f,v.shape),v);if(u){const C=Qn(O.shape,g);return ie(O,C)}return O}const WI=z({logSumExp_:JJ});function ZJ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");it(u.shape,p.shape);const g={a:u,b:p};return Y.runKernelFunc(f=>f.logicalAnd(u,p),g,null,fR)}const ha=z({logicalAnd_:ZJ});function QJ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return Y.runKernelFunc(p=>p.logicalNot(l),u,null,gR)}const $I=z({logicalNot_:QJ});function Ds(r,l="float32"){if(l==="complex64"){const p=Ds(r,"float32"),g=Ds(r,"float32");return Gi(p,g)}const u=oa(qt(r),l);return Y.makeTensor(u,r,l)}function Yi(r,l="float32"){if(l==="complex64"){const p=Yi(r,"float32"),g=Ds(r,"float32");return Gi(p,g)}const u=Qf(qt(r),l);return Y.makeTensor(u,r,l)}function e9(r,l=null,u=!1){const p=M(r,"x","mean"),g=ut(l,p.shape),f=TO(p.shape,g),I=f[1],S=qt(I),x=hg(v=>{const O=ke(S),C=O.dtype===v.dtype?v:Le(v,O.dtype),U=Pe(C,O),G=Fe(U,l,u),ne=te=>{const oe=v.shape.slice();g.forEach(Ae=>{oe[Ae]=1});const ge=ie(te,oe),fe=Pe(ae(ge,Yi(v.shape,"float32")),S);return fe};return{value:G,gradFunc:ne}});return x(p)}const UI=z({mean_:e9});function t9(r,l=null,u=!1){const p=M(r,"x","min"),g=(S,x)=>{const v=ut(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=$t(p,C),O=ro(O.length,p.rank));const G=S.min(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Qn(ne.shape,v);ne=ie(G,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,If,I)}const ug=z({min_:t9});function n9(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=ft(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.minimum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,xf)}const BI=z({minimum_:n9});function s9(r){const l=M(r,"x","square"),u={},p=[l],g=[];return Y.runKernelFunc((f,I)=>(I([l]),f.square(l)),{x:l},null,"Square",u,p,g)}const dt=z({square_:s9});function i9(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.notEqual(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,AR)}const MI=z({notEqual_:i9});function r9(r){const l=M(r,"input","real"),u=g=>g.real(l),p={input:l};return Y.runKernelFunc(u,p,null,kR)}const Gc=z({real_:r9});function o9(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 g=(S,x)=>(x([p]),S.pad(p,l,u)),f={paddings:l,constantValue:u},I={x:p};return Y.runKernelFunc(g,I,null,vf,f)}const PI=z({pad_:o9});function a9(r,l,u){const p=M(r,"x","spaceToBatchND");Z(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),Z(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),Z(p.shape.reduce((S,x,v)=>v>0&&v<=l.length?S&&(x+u[v-1][0]+u[v-1][1])%l[v-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const g=S=>S.spaceToBatchND(p,l,u),f={x:p},I={blockShape:l,paddings:u};return Y.runKernelFunc(g,f,null,Pf,I)}const zI=z({spaceToBatchND_:a9});function c9(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=ft(u,p);const g={a:u,b:p},f=(I,S)=>{const x=I.pow(u,p);return S([u,p,x]),x};return Y.runKernelFunc(f,g,null,Nf)}const ua=z({pow_:c9});function lo(r,l){_c(r);const u=mr(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 dg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const g=()=>{const I=r===l,S=r1;if(I||S||x)return Ds([0],p);const v=Math.abs(Math.ceil((l-r)/u)),O=oa(v,p);l(f([l]),l.dtype==="bool"?Le(l,"int32"):g.relu(l)),p={x:l};return Y.runKernelFunc(u,p,null,Cf)}const Du=z({relu_:l9});function h9(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ut(l,u.shape);if(u.rank===0)return gi(u);const x=I.reverse(u,S);return ie(x,u.shape)},g={x:u},f={dims:l};return Y.runKernelFunc(p,g,null,Df,f)}const Vc=z({reverse_:h9});function u9(r){const l=M(r,"x","rsqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.rsqrt(l);return g([l]),f},u,null,kf)}const GI=z({rsqrt_:u9});function d9(r){const l=M(r,"x","sin"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sin(l);return g([l]),f},u,null,Wf)}const VI=z({sin_:d9});function p9(r){const l=M(r,"x","sinh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sinh(l);return g([l]),f},u,null,$f)}const YI=z({sinh_:p9});function m9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=r.as2D(g,p),I=u.fft(f);return I.reshape(r.shape)},l,null,sR)}const ku=z({fft_:m9});function f9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=ie(r,[g,p]),I=u.ifft(f);return ie(I,r.shape)},l,null,cR)}const Yc=z({ifft_:f9});function g9(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const g=ie(r,[u,l]);p=Yc(g)}else{const g=[u,2*(l-1)],f=ie(Gc(r),[u,l]),I=ie(Eu(r),[u,l]),S=Vc(vt(f,[0,1],[u,l-2]),1),x=ae(Vc(vt(I,[0,1],[u,l-2]),1),ke(-1)),v=yn([f,S],1),O=yn([I,x],1),C=ie(Gi(v,O),[g[0],g[1]]);p=Yc(C)}if(p=Gc(p),r.rank===3&&r.shape[0]!==0){const g=p,f=r.shape[0];p=ie(p,[f,p.shape[0]/f,p.shape[1]]),g.dispose()}return p}const HI=z({irfft_:g9});function EO(r,l,u=0){let p=[];if(typeof l=="number")Z(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const g=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);Z(g<=1,()=>"There should be only one negative value in split array.");const f=l.indexOf(-1);if(f!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[f]=r.shape[u]-I}Z(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 y9(r,l,u=0){const p=M(r,"x","split"),g=(S,x)=>{const v=ut(u,p.shape)[0],O=EO(p,l,v);return S.split(p,O,v)},f={x:p},I={numOrSizeSplits:l,axis:u};return Y.runKernelFunc(g,f,null,zf,I)}const ho=z({split_:y9});function b9(r,l){Z(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 g;if(l!=null&&l0),te=r.shape.map(oe=>oe);te[r.shape.length-1]=l,g=vt(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,g=yn([r,Ds(ne)],r.shape.length-1),u=l}else g=r;const f=je(g),I=ie(Gi(g,f),[p,u]),S=ku(I),x=Math.floor(u/2)+1,v=Gc(S),O=Eu(S),C=ho(v,[x,u-x],v.shape.length-1),U=ho(O,[x,u-x],O.shape.length-1),G=g.shape.slice();return G[g.shape.length-1]=x,ie(Gi(C[0],U[0]),G)}const Fu=z({rfft_:b9});function w9(r){const l=M(r,"x","sqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sqrt(l);return g([l]),f},u,null,Bf)}const ps=z({sqrt_:w9});function L9(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(S,x)=>{const v=S.squaredDifference(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,Gf,I)}const qI=z({squaredDifference_:L9});function S9(r,l){const u=M(r,"x","squeeze");return ie(u,XR(u.shape,l).newShape)}const jI=z({squeeze_:S9});function I9(r,l=0){const u=ig(r,"tensors","stack");if(Z(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Es(u[0],l);const p=u[0].rank,g=u[0].shape,f=u[0].dtype;Z(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{Zt(g,S.shape,"All tensors passed to stack must have matching shapes"),Z(f===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Es(S,l));return yn(I,l)}const qs=z({stack_:I9});function x9(r,l=0){const u=M(r,"x","step"),p={x:u},g={alpha:l};return Y.runKernelFunc(f=>f.step(u,l),p,null,Xf,g)}const da=z({step_:x9});function pa(r,l,u){if(_c(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=mr(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 T9(r,l,u){const p=M(r,"x","unsortedSegmentSum"),g=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(u),()=>"numSegments must be of dtype int");const f={x:p,segmentIds:g},I={numSegments:u},S=(x,v)=>{const O=x.unsortedSegmentSum(p,g,u);return v([g]),O};return Y.runKernelFunc(S,f,null,jf,I)}const KI=z({unsortedSegmentSum_:T9});function A9(r,l=0){const u=M(r,"x","unstack");Z(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},g={axis:l},f=I=>I.unstack(u,l);return Y.runKernelFunc(f,p,null,qf,g)}const _u=z({unstack_:A9});function v9(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const g=DO(r,l,u);let f=g.shape;if(p){const I=ut(u,r.shape);f=Qn(g.shape,I)}return ie(g,f)}function DO(r,l,u=null){if(r.rank===0)return Bn(r);if(r.rank!==1&&u===null)return DO(ie(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return Fe(Bn(r),u);if(l===Infinity)return la(Bn(r),u);if(l===-Infinity)return ug(Bn(r),u);if(l==="euclidean"||l===2)return ps(Fe(ua(Bn(r),ke(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return la(Fe(Bn(r),u[0]),u[1]-1);if(l===Infinity)return la(Fe(Bn(r),u[1]),u[0]);if(l===-Infinity)return ug(Fe(Bn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return ps(Fe(dt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const pg=z({norm_:v9});function kO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function mg(r,l,u){const p=1-r%2,g=new Float32Array(r);for(let f=0;f`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const v=f==="NHWC"?S.shape[3]:S.shape[1],O=f==="NHWC"?x.shape[3]:x.shape[1];Z(v===u[2],()=>`Error in conv2dDerFilter: depth of input ${v}) must match input depth in filter (${u[2]}.`),Z(O===u[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${u[3]}).`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const C=ne=>{const te=1,oe=zc(f),ge=fr(S.shape,u,p,te,g,I,!1,oe);return ne.conv2dDerFilter(S,x,ge)},U={x:S,dy:x},G={strides:p,pad:g,dataFormat:f,dimRoundingMode:I};return Y.runKernelFunc(C,U,null,P2,G)}const fg=z({conv2DBackpropFilter_:N9});function C9(r,l,u,p){let g=r;r.rank===3&&(g=ie(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let f=l;f.rank===3&&(f=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=x=>x.depthwiseConv2DDerFilter(g,f,p),S={x:g,dy:f};return Y.runKernelFunc(I,S,null,q2)}const FO=z({depthwiseConv2dNativeBackpropFilter_:C9});function R9(r,l,u,p){let g=l,f=!1;l.rank===3&&(f=!0,g=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=v=>v.depthwiseConv2DDerInput(g,u,p),S={dy:g},x=Y.runKernelFunc(I,S,null,j2);return f?ie(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const _O=z({depthwiseConv2dNativeBackpropInput_:R9});function O9(r){return mg(r,.54,.46)}const WO=z({hammingWindow_:O9});function E9(r){return mg(r,.5,.5)}const gg=z({hannWindow_:E9});function D9(r,l,u,p=!1,g=0){let f=0;const I=[];for(;f+l<=r.size;)I.push(vt(r,f,l)),f+=u;if(p)for(;f`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),Z(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${v},4] but had shape ${S.shape}.`),Z(x.rank===1&&x.shape[0]===v,()=>`Error in cropAndResize: boxInd must be have size [${v}] but had shape ${S.shape}.`),Z(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),Z(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),Z(g==="bilinear"||g==="nearest",()=>`method must be bilinear or nearest, but was ${g}`);const O=ne=>ne.cropAndResize(I,S,x,p,g,f),C={image:I,boxes:S,boxInd:x},U={method:g,extrapolationValue:f,cropSize:p},G=Y.runKernelFunc(O,C,null,Y2,U);return G}const UO=z({cropAndResize_:F9});function _9(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=Y.runKernel(rR,u,{});return p}const BO=z({flipLeftRight_:_9});function W9(r,l,u=0,p=.5){const g=M(r,"image","rotateWithOffset","float32");Z(g.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${g.rank}.`);const f={image:g},I={radians:l,fillValue:u,center:p},S=Y.runKernel(HR,f,I);return S}const MO=z({rotateWithOffset_:W9});function js(r,l,u,p,g,f){p==null&&(p=.5),g==null&&(g=Number.NEGATIVE_INFINITY),f==null&&(f=0);const I=r.shape[0];return u=Math.min(u,I),Z(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),Z(0<=f&&f<=1,()=>`softNmsSigma must be in [0, 1], but was '${f}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f}}function $9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=js(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:p,scoreThreshold:g};return Y.runKernelFunc(v=>v.nonMaxSuppression(f,I,u,p,g),{boxes:f,scores:I},null,vR,x)}const PO=z({nonMaxSuppression_:$9});function zO(r,l,u){const p=U9(r,l,u),g=p<0?-(p+1):p;r.splice(g,0,l)}function U9(r,l,u){return M9(r,l,u||B9)}function B9(r,l){return r>l?1:r>>1);const S=u(l,r[f]);S>0?p=f+1:(g=f,I=!S)}return I?p:-p-1}function GO(r,l,u,p,g){return XI(r,l,u,p,g,0).selectedIndices}function VO(r,l,u,p,g,f){return XI(r,l,u,p,g,0,!1,f,!0)}function YO(r,l,u,p,g,f){return XI(r,l,u,p,g,f,!0)}function XI(r,l,u,p,g,f,I=!1,S=!1,x=!1){const v=[];for(let oe=0;oeg&&v.push({score:l[oe],boxIndex:oe,suppressBeginIndex:0});v.sort(HO);const O=f>0?-.5/f:0,C=[],U=[];for(;C.length0;){const oe=v.pop(),{score:ge,boxIndex:fe,suppressBeginIndex:Ae}=oe;if(ge=Ae;--Ve){const rt=P9(r,fe,C[Ve]);if(rt>=p){Te=!0;break}if(oe.score=oe.score*z9(p,O,rt),oe.score<=g)break}oe.suppressBeginIndex=C.length,Te||(oe.score===ge?(C.push(fe),U.push(oe.score)):oe.score>g&&zO(v,oe,HO))}const G=C.length,ne=u-G;S&&ne>0&&(C.push(...new Array(ne).fill(0)),U.push(...new Array(ne).fill(0)));const te={selectedIndices:lo(C,"int32")};return I&&(te.selectedScores=lo(U,"float32")),x&&(te.validOutputs=ke(G,"int32")),te}function P9(r,l,u){const p=r.subarray(l*4,l*4+4),g=r.subarray(u*4,u*4+4),f=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),x=Math.max(p[1],p[3]),v=Math.min(g[0],g[2]),O=Math.min(g[1],g[3]),C=Math.max(g[0],g[2]),U=Math.max(g[1],g[3]),G=(S-f)*(x-I),ne=(C-v)*(U-O);if(G<=0||ne<=0)return 0;const te=Math.max(f,v),oe=Math.max(I,O),ge=Math.min(S,C),fe=Math.min(x,U),Ae=Math.max(ge-te,0)*Math.max(fe-oe,0);return Ae/(G+ne-Ae)}function z9(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function HO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function G9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=js(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x=await Promise.all([f.data(),I.data()]),v=x[0],O=x[1],C=GO(v,O,u,p,g);return f!==r&&f.dispose(),I!==l&&I.dispose(),C}const qO=G9;function V9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=js(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v={boxes:I,scores:S},O={maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f},C=Y.runKernel(CR,v,O);return{selectedIndices:C[0],selectedScores:C[1]}}const jO=z({nonMaxSuppressionWithScore_:V9});async function Y9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=js(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v=await Promise.all([I.data(),S.data()]),O=v[0],C=v[1],U=YO(O,C,u,p,g,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),U}const KO=Y9;function H9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=js(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,U={boxes:I,scores:S},G={maxOutputSize:v,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:f},ne=Y.runKernel(NR,U,G);return{selectedIndices:ne[0],validOutputs:ne[1]}}const XO=z({nonMaxSuppressionPadded_:H9});async function q9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=js(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[U,G]=await Promise.all([I.data(),S.data()]),ne=VO(U,G,v,O,C,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const JO=q9;function j9(r,l,u=!1){const p=M(r,"images","resizeBilinear");Z(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x=(U,G)=>(G([g]),U.resizeBilinear(g,I,S,u)),v={images:g},O={alignCorners:u,size:l},C=Y.runKernelFunc(x,v,null,Ef,O);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const ZO=z({resizeBilinear_:j9});function K9(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");Z(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x={images:g},v={alignCorners:u,size:l},O=(U,G)=>(G([g]),U.resizeNearestNeighbor(g,I,S,u)),C=Y.runKernelFunc(O,x,null,Of,v);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const QO=z({resizeNearestNeighbor_:K9});function X9(r,l,u){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");Z(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const g=p.shape,[f,I]=p.shape.slice(-2);if(!(l<=f))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${f}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=f),u<0&&(u=I);const S=ie(dg(0,f,1,"int32"),[-1,1]),x=dg(0,I,1,"int32"),v=Be(S,x),O=ha(yr(v,ke(+l,"int32")),gr(v,ke(-u,"int32"))),C=Ds([f,I],p.dtype);return ie(qs(_u(ie(p,[-1,f,I])).map(U=>Mn(O,U,C))),g)}const e1=z({bandPart_:X9});function J9(r){let l;if(Array.isArray(r)){l=!1,Z(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const g=r[0].shape[0];for(let f=1;f`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[f].shape[0]} vs. ${g})`)}else l=!0,r=ho(r,r.shape[0],0).map(g=>jI(g,[0]));Z(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 g=0;g{let f=p[g];if(g>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 n1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,v)=>x*v),p=_u(ie(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),g=[],f=[];p.forEach(x=>{const[v,O]=n1(x,l);g.push(v),f.push(O)});const I=ie(qs(g,0),r.shape),S=ie(qs(f,0),r.shape);return[I,S]}}function n1(r,l=!1){return Y.tidy(()=>{Z(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 g=RI(u),f=gi(r);const I=pa([[1]],[1,1]);let S=gi(I);const x=u>=p?p:u;for(let v=0;v{const G=vt(f,[v,v],[u-v,1]),ne=pg(G),te=vt(f,[v,v],[1,1]),oe=Mn(yi(te,0),pa([[-1]]),pa([[1]])),ge=Be(te,ae(oe,ne)),fe=Pe(G,ge);fe.shape[0]===1?S=gi(I):S=yn([I,vt(fe,[1,0],[fe.shape[0]-1,fe.shape[1]])],0);const Ae=yt(Pe(dn(oe,ge),ne)),Te=vt(f,[v,0],[u-v,p]),Ve=ae(Ae,S),rt=$t(S);if(v===0)f=Be(Te,dn(Ve,dn(rt,Te)));else{const Kt=Be(Te,dn(Ve,dn(rt,Te)));f=yn([vt(f,[0,0],[v,p]),Kt],0)}const Ct=$t(Ve),Ut=vt(g,[0,v],[u,g.shape[1]-v]);if(v===0)g=Be(Ut,dn(dn(Ut,S),Ct));else{const Kt=Be(Ut,dn(dn(Ut,S),Ct));g=yn([vt(g,[0,0],[u,v]),Kt],1)}return[S,f,g]}),xO([O,C,U])}return!l&&u>p&&(g=vt(g,[0,0],[u,p]),f=vt(f,[0,0],[p,p])),[g,f]})}const s1=z({qr_:Z9});var jt;(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"})(jt||(jt={}));function Q9(r,l,u=jt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let g=null;l!=null&&(g=M(l,"weights","computeWeightedLoss"));const f=g==null?p:ae(p,g);if(u===jt.NONE)return f;if(u===jt.SUM)return Fe(f);if(u===jt.MEAN){if(g==null)return UI(f);{const I=p.size/g.size,S=Pe(Fe(f),Fe(g));return I>1?Pe(S,ke(I)):S}}if(u===jt.SUM_BY_NONZERO_WEIGHTS){if(g==null)return Pe(Fe(f),ke(p.size));{const I=ae(g,Yi(p.shape)),S=Le(Fe(MI(I,ke(0))),"float32");return Pe(Fe(f),S)}}throw Error(`Unknown reduction: ${u}`)}const Tn=z({computeWeightedLoss_:Q9});function eZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","absoluteDifference"),f=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),Zt(g.shape,f.shape,"Error in absoluteDifference: ");const S=Bn(Be(g,f));return Tn(S,I,p)}const i1=z({absoluteDifference_:eZ});function tZ(r,l,u,p,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),Zt(f.shape,I.shape,"Error in cosineDistance: ");const x=ke(1),v=Be(x,Fe(ae(f,I),u,!0));return Tn(v,S,g)}const r1=z({cosineDistance_:tZ});function nZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"labels","hingeLoss");const f=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),Zt(g.shape,f.shape,"Error in hingeLoss: ");const S=ke(1);g=Be(ae(ke(2),g),S);const x=Du(Be(S,ae(g,f)));return Tn(x,I,p)}const o1=z({hingeLoss_:nZ});function sZ(r,l,u,p=1,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),Zt(f.shape,I.shape,"Error in huberLoss: ");const x=ke(p),v=Bn(Be(I,f)),O=BI(v,x),C=Be(v,O),U=Lt(ae(ke(.5),dt(O)),ae(x,C));return Tn(U,S,g)}const a1=z({huberLoss_:sZ});function iZ(r,l,u,p=1e-7,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),Zt(f.shape,I.shape,"Error in logLoss: ");const x=ke(1),v=ke(p),O=yt(ae(f,co(Lt(I,v)))),C=ae(Be(x,f),co(Lt(Be(x,I),v))),U=Be(O,C);return Tn(U,S,g)}const c1=z({logLoss_:iZ});function rZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","meanSquaredError"),f=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),Zt(g.shape,f.shape,"Error in meanSquaredError: ");const S=qI(g,f);return Tn(S,I,p)}const l1=z({meanSquaredError_:rZ});function oZ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const g=Du(p),f=ae(p,u),I=_I(Pn(yt(Bn(p))));return Lt(Be(g,f),I)}function aZ(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),Zt(f.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(.5);f=Lt(ae(f,Be(O,v)),ae(C,v))}const x=oZ(f,I);return Tn(x,S,g)}const h1=z({sigmoidCrossEntropy_:aZ});function cZ(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=hg((g,f,I)=>{const S=!0,x=WI(f,[u],S),v=Be(Le(f,"float32"),x);I([g,v]);const O=yt(ae(v,g)),C=Fe(O,[u]),U=(G,ne)=>{const[te,oe]=ne,ge=Qn(G.shape,[u]);return[ae(ie(G,ge),Be(Le(te,"float32"),Pn(oe))),ae(ie(G,ge),Be(Pn(oe),Le(te,"float32")))]};return{value:C,gradFunc:U}});return p(r,l)}function lZ(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),Zt(f.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(f.shape[1]);f=Lt(ae(f,Be(O,v)),Pe(v,C))}const x=cZ(f,I);return Tn(x,S,g)}const u1=z({softmaxCrossEntropy_:lZ});const VTe={fft:ku,ifft:Yc,rfft:Fu,irfft:HI},KTe={hammingWindow:WO,hannWindow:gg,frame:yg,stft:$O},d1={flipLeftRight:BO,resizeNearestNeighbor:QO,resizeBilinear:ZO,rotateWithOffset:MO,cropAndResize:UO,nonMaxSuppression:PO,nonMaxSuppressionAsync:qO,nonMaxSuppressionWithScore:jO,nonMaxSuppressionWithScoreAsync:KO,nonMaxSuppressionPadded:XO,nonMaxSuppressionPaddedAsync:JO},hAe={bandPart:e1,gramSchmidt:t1,qr:s1},LAe={absoluteDifference:i1,computeWeightedLoss:Tn,cosineDistance:r1,hingeLoss:o1,huberLoss:a1,logLoss:c1,meanSquaredError:l1,sigmoidCrossEntropy:h1,softmaxCrossEntropy:u1};const p1=1.7580993408473768,m1=1.0507009873554805;const f1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,da(Le(u,"float32"),-1))}}};const g1={kernelName:T2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=dt(Le(u,"float32")),g=ps(Be(ke(1),p));return yt(Pe(r,g))}}}};const y1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Be(dt(Le(u,"float32")),1));return Pe(r,p)}}}};const b1={kernelName:kc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=Nt(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=Nt(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,p.shape)};return{a:f,b:I}}};const w1={kernelName:v2,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,g)=>{u[g]=()=>r.clone()}),u}};const L1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>je(u)}}};const S1={kernelName:C2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>je(u)}}};const I1={kernelName:R2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ps(Be(ke(1),dt(Le(u,"float32")))))}}};const x1={kernelName:O2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Lt(ke(1),dt(Le(u,"float32"))));return Pe(r,p)}}}};const T1={kernelName:k2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Lt(dt(u),dt(p));let x=ae(r,Pe(p,S));const v=Nt(u.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,u.shape)},I=()=>{const S=Lt(dt(u),dt(p));let x=yt(ae(r,Pe(u,S)));const v=Nt(p.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,p.shape)};return{a:f,b:I}}};const A1={kernelName:E2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(dt(Le(u,"float32")),1))}}};const v1={kernelName:D2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(ke(1),dt(Le(u,"float32"))))}}};function hZ(r,l,u,p,g=[1,1,1],f,I){const S=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let v=S,O=x,C=!1;x.rank===4&&(C=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),O=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(v.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${v.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(ao(p,g),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${g}'`),I!=null&&Z(Qt(f),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const U=oe=>{const ge=cg(O.shape,u,p,g,f,I);return oe.avgPool3dBackprop(v,O,ge)},G={dy:v,input:O},ne={filterSize:u,strides:p,dilations:g,pad:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,$2,ne);return C?ie(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const N1=z({avgPool3dBackprop_:hZ});const C1={kernelName:W2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,dilations:I,pad:S,dimRoundingMode:x}=u,v=I==null?[1,1,1]:I;return{x:()=>N1(r,p,g,f,v,S,x)}}};function uZ(r,l,u,p,g){const f=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");Z(I.rank===f.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${f.rank})`);let S=I,x=f,v=!1;I.rank===3&&(v=!0,S=ie(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=ie(f,[1,f.shape[0],f.shape[1],f.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const O=ne=>{const te=ag(S.shape,u,p,1,g);return ne.avgPoolBackprop(x,S,te)},C={dy:x,input:S},U={filterSize:u,strides:p,pad:g},G=Y.runKernelFunc(O,C,null,_2,U);return v?ie(G,[G.shape[1],G.shape[2],G.shape[3]]):G}const R1=z({avgPoolBackprop_:uZ});const O1={kernelName:F2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,pad:I}=u;return{x:()=>R1(r,p,g,f,I)}}};const E1={kernelName:tf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,g]=l,{transposeA:f,transposeB:I}=u;return!f&&!I?{a:()=>dn(r,g,!1,!0),b:()=>dn(p,r,!0,!1)}:!f&&I?{a:()=>dn(r,g,!1,!1),b:()=>dn(r,p,!0,!1)}:f&&!I?{a:()=>dn(g,r,!1,!0),b:()=>dn(p,r,!1,!1)}:{a:()=>dn(g,r,!0,!0),b:()=>dn(r,p,!0,!0)}}};const D1={kernelName:nf,gradFunc:(r,l,u)=>{const{blockShape:p,crops:g}=u;return{x:()=>zI(r,p,g)}}};const k1={kernelName:sf,gradFunc:(r,l,u)=>{const p=u,g=p.inputShape,f=p.shape,I=Array.from(f);for(let x=g.length-1;x>=0;x--)if(g[x]===f[x])I[x]=1;else if(g[x]!==1)throw new Error(`broadcastTo(): [${g}] cannot be broadcast to [${f}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>Fe(r,S,!0)}}};const F1={kernelName:Fc,gradFunc:r=>({x:()=>r.clone()})};const _1={kernelName:U2,gradFunc:r=>({x:()=>je(r)})};const W1={kernelName:B2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:g,clipValueMax:f}=u;return{x:()=>Mn(ha(gr(p,g),yr(p,f)),r,je(r))}}};const $1={kernelName:rf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(x=>x.shape),{axis:g}=u,f=ut(g,l[0].shape)[0],I=p.map(x=>x[f]),S=ho(r,I,f);return S.map(x=>()=>x)}};const U1={kernelName:of,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{dilations:f,strides:I,pad:S,dataFormat:x}=u;return Z(oo(f),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${f}'`),{x:()=>CO(p.shape,r,g,I,S,x),filter:()=>fg(p,r,g.shape,I,S,x)}}};const B1={kernelName:af,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{strides:f,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>AI(r,g,f,I,S,1,x),filter:()=>fg(r,p,g.shape,f,I,S,x)}}};function dZ(r,l,u,p,g){let f=r;r.rank===4&&(f=ie(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(f.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${f.shape}.`),Z(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),Z(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),Z(f.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${f.shape[4]}) must match input depth in filter (${u[3]}.`),Z(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=O=>{const C=1,U=Ru(f.shape,u,p,C,g);return O.conv3dDerFilter(f,I,U)},x={x:f,y:I},v={strides:p,pad:g};return Y.runKernelFunc(S,x,null,G2,v)}const M1=z({conv3DBackpropFilter_:dZ});const P1={kernelName:z2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f}=u;Z(oo(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:()=>RO(I.shape,r,S,g,f),filter:()=>M1(I,r,S.shape,g,f)}}};const z1={kernelName:cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(yt(VI(Le(u,"float32"))),r)}}};const G1={kernelName:lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(YI(Le(u,"float32")),r)}}};const V1={kernelName:hf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:g,exclusive:f,reverse:I}=u;return{x:()=>{const S=ds([g],p.rank);let x=NI(r,g,f,!I);return S!=null&&(x=$t(x,S)),x}}}};const Y1={kernelName:H2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f,dimRoundingMode:I}=u,S=p==null?[1,1]:p;Z(oo(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,v]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(v.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${v.rank}.`),Z(x.shape[3]===v.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${v.shape[2]}.`),Z(ao(g,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${g} and dilations '${S}'.`),I!=null&&Z(Qt(f),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=fr(x.shape,v.shape,g,S,f,I,!0);return{x:()=>_O(x.shape,r,v,O),filter:()=>FO(x,r,v.shape,O)}}};const H1={kernelName:K2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,f={x:p,filter:g,dy:r},I={x:p,filter:g,dy:r};return{x:()=>Y.runKernel(X2,f,u),filter:()=>Y.runKernel(J2,I,u)}}};const q1={kernelName:uf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=Nt(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=dt(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const j1={kernelName:Z2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=f=>f.eluDer(r,u),g={dy:r,y:u};return{x:()=>Y.runKernelFunc(p,g,null,Q2)}}};const K1={kernelName:eR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(Pn(yt(dt(u))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,p)}}};const X1={kernelName:df,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,u)}}};const J1={kernelName:nR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Pn(u))}}};const Z1={kernelName:pf,gradFunc:r=>({x:()=>je(r)})};const Q1={kernelName:mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=Nt(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=dt(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const eE={kernelName:oR,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[g,f,I,S]=l,x=S==null?ke(1):S,v=Nt(f.shape,g.shape),O=[];if(f.rank===1){for(let Te=0;Tef.rank===1?ie(ae(ae(r,ca(ie(G,[1,1,1,f.shape[0]]),O)),x),g.shape):ie(ae(ae(r,G),x),g.shape),oe=()=>{let Te=ae(ae(G,ke(-1)),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},ge=()=>{let Te=ae(ae(ne,C),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},fe=()=>{const Te=ae(C,G);let Ve=ae(r,Te);return f.rank===1&&(Ve=Fe(Ve,v)),ie(Ve,f.shape)},Ae=()=>{let Te=r;return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)};return{x:te,mean:oe,variance:ge,scale:fe,offset:Ae}}};const sE={kernelName:ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,g]=l,{axis:f}=u,I=ut(f,p.shape)[0],S=()=>{const x=p.shape,v=g.size,O=x.slice(0,I),C=O.length,U=x.slice(f,x.length).slice(1),G=U.length,ne=tE(0,C),te=tE(C+1,C+1+G),oe=nE([O,[v],U]),ge=ie(r,oe),fe=ie(g,[v]),Ae=nE([[C],ne,te]),Te=$t(ge,Ae);let Ve=KI(Te,fe,p.shape[I]);const rt=Mc(Ae);return Ve=$t(Ve,rt),Ve};return{x:S,indices:()=>g}}};function tE(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>je(u),b:()=>je(p)}}};const rE={kernelName:yf,gradFunc:r=>({x:()=>Le(r,"float32")})};const oE={kernelName:hR,gradFunc:r=>({x:()=>je(r)})};const aE={kernelName:uR,gradFunc:r=>({x:()=>je(r)})};const cE={kernelName:dR,gradFunc:r=>({x:()=>je(r)})};const lE={kernelName:wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(u,1))}}};const hE={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Le(u,"float32"))}}};const uE={kernelName:yR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:g}=u;return{logits:()=>{const f=!0,I=Pn(p);return Be(r,ae(Fe(r,g,f),I))}}}};function pZ(r,l,u,p=5,g=1,f=1,I=.5){const S=O=>O.LRNGrad(u,r,l,p,g,f,I),x={x:r,y:l,dy:u},v={depthRadius:p,bias:g,alpha:f,beta:I};return Y.runKernelFunc(S,x,null,wR,v)}const dE=z({localResponseNormalizationBackprop_:pZ});const pE={kernelName:bR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{depthRadius:f,bias:I,alpha:S,beta:x}=u;return{x:()=>dE(p,g,r,f,I,S,x)}}};function bg(r,l,u,p,g){return l.rank{const f=ae(r,Le(CI(u,l),r.dtype));return g==null?f:$t(f,g)}}}const JI={kernelName:Lf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:g}=p,[f,I]=l,S=ut(g,f.shape),x=ds(S,f.rank),v=bg(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=$t(O)),O}}}};const mE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(gr(u,p),"float32")),f=()=>ae(r,Le(FI(u,p),"float32"));return{a:g,b:f}}};function mZ(r,l,u,p,g,f=[1,1,1],I,S){const x=M(r,"dy","maxPool3dBackprop"),v=M(l,"input","maxPool3dBackprop"),O=M(u,"output","maxPool3dBackprop");let C=x,U=v,G=O,ne=!1;v.rank===4&&(ne=!0,C=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),U=ie(v,[1,v.shape[0],v.shape[1],v.shape[2],v.shape[3]]),G=ie(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z(U.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${U.rank}.`),Z(G.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${G.rank}.`),Z(ao(g,f),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${g} and dilations '${f}'`),S!=null&&Z(Qt(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Ae=>{const Te=cg(U.shape,p,g,f,I,S);return Ae.maxPool3dBackprop(C,U,G,Te)},oe={dy:C,input:U,output:G},ge={filterSize:p,strides:g,dilations:f,pad:I,dimRoundingMode:S},fe=Y.runKernelFunc(te,oe,null,xR,ge);return ne?ie(fe,[fe.shape[1],fe.shape[2],fe.shape[3],fe.shape[4]]):fe}const fE=z({maxPool3dBackprop_:mZ});const gE={kernelName:IR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,dilations:S,pad:x,dimRoundingMode:v}=u,O=S==null?[1,1,1]:S;return{x:()=>fE(r,p,g,f,I,O,x,v)}}};function fZ(r,l,u,p,g,f,I){const S=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),v=M(u,"output","maxPoolBackprop");Z(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),Z(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&Z(Qt(f),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=G=>{const ne=ag(x.shape,p,g,1,f,I);return G.maxPoolBackprop(S,x,v,ne)},C={dy:S,input:x,output:v},U={filterSize:p,strides:g,pad:f,dimRoundingMode:I};return Y.runKernelFunc(O,C,null,SR,U)}const yE=z({maxPoolBackprop_:fZ});const bE={kernelName:LR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,pad:S}=u;return{x:()=>yE(r,p,g,f,I,S)}}};const wE={kernelName:If,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:g}=p,[f,I]=l,S=ut(g,f.shape),x=ds(S,f.rank),v=bg(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=$t(O)),O}}}};const LE={kernelName:xf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(yr(u,p),"float32")),f=()=>ae(r,Le(yi(u,p),"float32"));return{a:g,b:f}}};const SE={kernelName:TR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Nt(u.shape,g);return S.length>0?ie(Fe(r,S),u.shape):r},I=()=>{const S=ae(r,yt(EI(Pe(u,p)))),x=Nt(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const IE={kernelName:Tf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=ae(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{const S=ae(r,Le(u,"float32")),x=Nt(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const xE={kernelName:Af,gradFunc:r=>({x:()=>yt(r)})};const TE={kernelName:OR,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Ds(u.shape,"float32")}}};const AE={kernelName:RR,gradFunc:r=>({x:()=>je(r)})};const ZI={kernelName:vf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:g}=u,f=g.map(I=>I[0]);return{x:()=>vt(r,f,p.shape)}}};const vE={kernelName:Nf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,g]=l,f=u,I=p,S=it(f.shape,I.shape),x=()=>{const O=Le(I,"float32");let C=ae(r,ae(O,ua(f,Be(O,ke(1)))));const U=Nt(f.shape,S);return U.length>0&&(C=Fe(C,U)),ie(C,f.shape)},v=()=>{const O=yi(f,0),C=Mn(O,co(f),je(f));let U=ae(r,ae(g,C));const G=Nt(I.shape,S);return G.length>0&&(U=Fe(U,G)),ie(U,I.shape)};return{a:x,b:v}}};const NE={kernelName:ER,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,g=yi(u,0);return{x:()=>Mn(g,r,ae(r,p)),alpha:()=>{let f=Mn(g,je(r),ae(r,u));const I=Nt(p.shape,r.shape);return I.length>0&&(f=Fe(f,I)),ie(f,p.shape)}}}};const CE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,yt(dt(u)))}}};const RE={kernelName:$R,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(yr(u,6),da(u));return{x:()=>ae(r,Le(p,"float32"))}}};const OE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Le(da(u),"float32"))}}};const EE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ie(r,u.shape)}}};const DE={kernelName:Ef,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,WR,u);return{images:I}}};const kE={kernelName:Of,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,_R,u);return{images:I}}};const FE={kernelName:Df,gradFunc:(r,l,u)=>{const{dims:p}=u,g=ut(p,r.shape);return{x:()=>Vc(r,g)}}};const _E={kernelName:UR,gradFunc:r=>({x:()=>je(r)})};const WE={kernelName:kf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>yt(Pe(r,ae(ua(u,1.5),2)))}}};const $E={kernelName:Ff,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Le(je(u),"float32"),t:()=>ae(r,Le(u,r.dtype)),e:()=>ae(r,Le($I(u),r.dtype))}}};const UE={kernelName:BR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=yi(u,ke(0)),g=ke(p1),f=ke(m1),I=ae(r,f),S=ae(ae(r,g),Pn(Le(u,"float32")));return Mn(p,I,S)}}}};const BE={kernelName:Uf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(u,Be(ke(1),u)))}}};const ME={kernelName:MR,gradFunc:r=>({x:()=>je(r)})};const PE={kernelName:Wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Ou(Le(u,"float32")),r)}}};const zE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(vI(Le(u,"float32")),r)}}};const GE={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:g,size:f}=u,I=p.shape,[S,x]=rg(p,g,f),v=[];for(let O=0;OPI(r,v)}}};const VE={kernelName:zR,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:g}=u,f=!0,I=ae(r,p);return{logits:()=>Be(I,ae(Fe(I,[g],f),p))}}};const YE={kernelName:PR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,xI(u))}}};const QI={kernelName:Pf,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:g}=u;return{x:()=>TI(r,p,g)}}};const ex={kernelName:zf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>yn(r,p)}}};const HE={kernelName:Bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ae(ps(Le(u,"float32")),2))}}};const qE={kernelName:GR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(Le(u,"float32"),2))}}};const jE={kernelName:Gf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=ke(2),f=()=>ae(r,ae(g,Be(u,p))),I=()=>ae(r,ae(g,Be(p,u)));return{a:f,b:I}}};const KE={kernelName:Xf,gradFunc:r=>({x:()=>je(r)})};const XE={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=Nt(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=Nt(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(yt(S),p.shape)};return{a:f,b:I}}};const JE={kernelName:Mf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,g=p.shape.slice(),{axis:f}=u,I=ut(f,p.shape);I.forEach(v=>{g[v]=1});const S=ie(r,g),x=ae(S,Yi(p.shape,"float32"));return{x:()=>x}}};const ZE={kernelName:VR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,dt(Ou(u)))}}};const QE={kernelName:YR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Be(ke(1),dt(u)),r)}}};const eD={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:g}=u,f=()=>{let I=je(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:g}=p,f=Mc(g);return{x:()=>$t(r,f)}}};const nD={kernelName:qf,gradFunc:(r,l,u)=>{const p=u,{axis:g}=p;return{value:()=>qs(r,g)}}};const sD={kernelName:jf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>gZ(r,u);return{x:p}}};function gZ(r,l){const u=kI(l,je(l)),p=DI(r,u);let g=gr(l,ke(0,"int32"));const f=p.rank-g.rank;for(let S=0;S({x:()=>je(r)})};const yZ=[f1,g1,y1,b1,w1,L1,S1,I1,x1,T1,A1,v1,C1,O1,E1,D1,k1,F1,_1,W1,$1,B1,U1,P1,z1,G1,V1,Y1,H1,q1,j1,K1,X1,J1,Q1,Z1,eE,sE,iE,rE,oE,aE,cE,lE,hE,uE,pE,JI,JI,mE,gE,bE,wE,LE,SE,IE,xE,TE,AE,ZI,ZI,vE,NE,CE,RE,OE,EE,DE,kE,FE,_E,WE,$E,UE,BE,ME,PE,zE,GE,VE,YE,QI,QI,ex,ex,HE,jE,qE,KE,XE,JE,ZE,QE,eD,tD,nD,sD,iD];for(const r of yZ)jR(r);function Gm(r,l,u=!1){const{Image:p,Canvas:g}=mt.getEnv();if(!(r instanceof p||r instanceof g))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const f=to(r),I=l/Math.max(f.height,f.width),S=I*f.width,x=I*f.height,v=ea({width:l,height:l}),O=r instanceof g?r:Nc(r),C=Math.abs(S-x)/2,U=u&&S{if(dr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Cs(u)){const f=u.shape[0];if(f!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${f} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const g=u instanceof mt.getEnv().Canvas?u:Nc(u);this._canvases[p]=g,this._inputDimensions[p]=[g.height,g.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 Bi(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 HS({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,IO(()=>{const u=Bi(this.batchSize,0,1).map(g=>{const f=this.getInput(g);if(f instanceof xn){let I=Cs(f)?f:f.expandDims();return I=Nm(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=d1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(f instanceof mt.getEnv().Canvas)return LI.fromPixels(Gm(f,r,l));throw new Error(`toBatchTensor - at batchIdx ${g}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${f}`)}),p=qs(u.map(g=>Le(g,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Tt(r){if(r instanceof hr)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=g=>Array.isArray(r)?` at input index ${g}:`:"",p=l.map(eo);return p.forEach((g,f)=>{if(!bu(g)&&!dr(g)&&!Cs(g))throw typeof l[f]=="string"?new Error(`toNetInput -${u(f)} string passed, but could not resolve HTMLElement for element id ${l[f]}`):new Error(`toNetInput -${u(f)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Cs(g)){const I=g.shape[0];if(I!==1)throw new Error(`toNetInput -${u(f)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(g=>bu(g)&&qm(g))),new hr(p,Array.isArray(r))}async function Zo(r,l){const{Canvas:u}=mt.getEnv();let p=r;if(!(r instanceof u)){const I=await Tt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await Vm(S)}const g=Un(p),f=l.map(I=>I instanceof Wt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return f.map(({x:I,y:S,width:x,height:v})=>{const O=ea({width:x,height:v});return Un(O).putImageData(g.getImageData(I,S,x,v),0,0),O})}const wg=Xe(Je());async function Qo(r,l){if(!dr(r)&&!Cs(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Cs(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return wg.tidy(()=>{const[u,p,g]=r.shape.slice(Cs(r)?1:0),f=l.map(S=>S instanceof Wt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=f.map(({x:S,y:x,width:v,height:O})=>wg.slice3d(r.as3D(u,p,g),[x,S,0],[O,v,g]));return I})}async function no(r,l){const u=mt.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 p2(r){const l=await no(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 Hm(u)}async function Ym(r){return(await no(r)).json()}async function d2(r){return new Float32Array(await(await no(r)).arrayBuffer())}function Lg(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 g=r.split("/").filter(S=>S),f=r.endsWith(".json")?g[g.length-1]:u;let I=p+(r.endsWith(".json")?g.slice(0,g.length-1):g).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${f}`:`${I}/${f}`}}const rD=Xe(Je());async function zm(r,l){const{manifestUri:u,modelBaseUri:p}=Lg(r,l);let g=await Ym(u);return rD.io.loadWeights(g,p)}function u2(r,l,u=!1){const{width:p,height:g}=u?to(l):l;return r.width=p,r.height=g,{width:p,height:g}}const br=Xe(Je());class In{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 br.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof br.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=br.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 zm(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}=mt.getEnv(),{manifestUri:u,modelBaseUri:p}=Lg(r,this.getDefaultModelName()),g=x=>Promise.all(x.map(v=>l(v).then(O=>O.buffer))),f=br.io.weightsLoaderFactory(g),I=JSON.parse((await l(u)).toString()),S=await f(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((g,f)=>{if(!g.nextObj.hasOwnProperty(f))throw new Error(`traversePropertyPath - object does not have property ${f}, for path ${r}`);return{obj:g.nextObj,objProp:f,nextObj:g.nextObj[f]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof br.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Hc=Xe(Je());function es(r,l,u){return Hc.tidy(()=>{let p=Hc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Hc.add(p,l.bias),p})}const Dt=Xe(Je());function Sg(r,l,u=!1){return Dt.tidy(()=>{const p=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):es(r,l.conv0,[2,2])),g=es(p,l.conv1,[1,1]),f=Dt.relu(Dt.add(p,g)),I=es(f,l.conv2,[1,1]);return Dt.relu(Dt.add(p,Dt.add(g,I)))})}function Wu(r,l,u=!1,p=!0){return Dt.tidy(()=>{const g=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):es(r,l.conv0,p?[2,2]:[1,1])),f=es(g,l.conv1,[1,1]),I=Dt.relu(Dt.add(g,f)),S=es(I,l.conv2,[1,1]),x=Dt.relu(Dt.add(g,Dt.add(f,S))),v=es(x,l.conv3,[1,1]);return Dt.relu(Dt.add(g,Dt.add(f,Dt.add(S,v))))})}const uo=Xe(Je());function ma(r,l,u="same",p=!1){return uo.tidy(()=>{const g=uo.add(uo.conv2d(r,l.filters,[1,1],u),l.bias);return p?uo.relu(g):g})}function zn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const Ig=Xe(Je());function qc(r,l){return function(u,p,g,f){const I=Ig.tensor4d(r(u*p*g*g),[g,g,u,p]),S=Ig.tensor1d(r(p));return l.push({paramPath:`${f}/filters`},{paramPath:`${f}/bias`}),{filters:I,bias:S}}}const xg=Xe(Je());function Tg(r,l){return function(u,p,g){const f=xg.tensor2d(r(u*p),[u,p]),I=xg.tensor1d(r(p));return l.push({paramPath:`${g}/weights`},{paramPath:`${g}/bias`}),{weights:f,bias:I}}}class tx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const $u=Xe(Je());function jc(r,l){return function(u,p,g){const f=$u.tensor4d(r(3*3*u),[3,3,u,1]),I=$u.tensor4d(r(u*p),[1,1,u,p]),S=$u.tensor1d(r(p));return l.push({paramPath:`${g}/depthwise_filter`},{paramPath:`${g}/pointwise_filter`},{paramPath:`${g}/bias`}),new tx(f,I,S)}}function Kc(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),g=r(`${l}/bias`,1);return new tx(u,p,g)}}function ms(r,l){return function(u,p,g){const f=r[u];if(!na(f,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${f}`);return l.push({originalPath:u,paramPath:g||u}),f}}function Gn(r){let l=r;function u(g){const f=l.slice(0,g);return l=l.slice(g),f}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function Ag(r,l){const u=qc(r,l),p=jc(r,l);function g(I,S,x,v=!1){const O=v?u(I,S,3,`${x}/conv0`):p(I,S,`${x}/conv0`),C=p(S,S,`${x}/conv1`),U=p(S,S,`${x}/conv2`);return{conv0:O,conv1:C,conv2:U}}function f(I,S,x,v=!1){const{conv0:O,conv1:C,conv2:U}=g(I,S,x,v),G=p(S,S,`${x}/conv3`);return{conv0:O,conv1:C,conv2:U,conv3:G}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:f}}function oD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractDenseBlock4Params:g}=Ag(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2"),x=g(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S,dense3:x}}}function vg(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function Ng(r,l){const u=ms(r,l),p=vg(u),g=Kc(u);function f(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`);return{conv0:v,conv1:O,conv2:C}}function I(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`),U=g(`${S}/conv3`);return{conv0:v,conv1:O,conv2:C,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:I}}function aD(r){const l=[],{extractDenseBlock4Params:u}=Ng(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return zn(r,l),{params:p,paramMappings:l}}const po=Xe(Je());class Cg extends In{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],g=Ys(u,p).div(po.scalar(255));let f=Wu(g,l.dense0,!0);return f=Wu(f,l.dense1),f=Wu(f,l.dense2),f=Wu(f,l.dense3),f=po.avgPool(f,[7,7],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return aD(r)}extractParams(r){return oD(r)}}const Xc=Xe(Je());function Uu(r,l){return Xc.tidy(()=>Xc.add(Xc.matMul(r,l.weights),l.bias))}function cD(r,l,u){const p=[],{extractWeights:g,getRemainingWeights:f}=Gn(r),I=Tg(g,p),S=I(l,u,"fc");if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:p,params:{fc:S}}}function lD(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:p("fc")};return zn(r,l),{params:g,paramMappings:l}}function Rg(r){const l={},u={};return Object.keys(r).forEach(p=>{const g=p.startsWith("fc")?u:l;g[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const hD=Xe(Je());class Og extends In{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 hD.tidy(()=>{const u=r instanceof hr?this.faceFeatureExtractor.forwardInput(r):r;return Uu(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 cD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Rg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),lD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,g=r.slice(0,r.length-p),f=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(g),this.extractClassifierParams(f)}}const Bm=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class Qr{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);Bm.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return Bm.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Jc=Xe(Je());class Mm extends Og{constructor(r=new Cg){super("FaceExpressionNet",r)}forwardInput(r){return Jc.tidy(()=>Jc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Tt(r))}async predictExpressions(r){const l=await Tt(r),u=await this.forwardInput(l),p=await Promise.all(Jc.unstack(u).map(async f=>{const I=await f.data();return f.dispose(),I}));u.dispose();const g=p.map(f=>new Qr(f));return l.isBatchInput?g:g[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function $m(r){return r.expressions instanceof Qr}function fu(r,l){const u={expressions:l};return Object.assign({},r,u)}function bZ(r,l,u=.1,p){const g=Array.isArray(l)?l:[l];g.forEach(f=>{const I=f instanceof Qr?f:$m(f)?f.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(C=>C.probability>u),v=mi(f)?f.detection.box.bottomLeft:p||new qe(0,0),O=new Dc(x.map(C=>`${C.expression} (${sa(C.probability)})`),v);O.draw(r)})}function Jr(r){return mi(r)&&r.landmarks instanceof Ns&&r.unshiftedLandmarks instanceof Ns&&r.alignedRect instanceof Wt}function Jo(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),g=p.align(),{imageDims:f}=r.detection,I=new Wt(r.detection.score,g.rescale(f.reverse()),f),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class uD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:g,pointSize:f,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=f||2,this.lineColor=g||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class dD{constructor(r,l={}){this.faceLandmarks=r,this.options=new uD(l)}draw(r){const l=Un(r),{drawLines:u,drawPoints:p,lineWidth:g,lineColor:f,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof Rc&&(l.strokeStyle=f,l.lineWidth=g,ur(l,this.faceLandmarks.getJawOutline()),ur(l,this.faceLandmarks.getLeftEyeBrow()),ur(l,this.faceLandmarks.getRightEyeBrow()),ur(l,this.faceLandmarks.getNose()),ur(l,this.faceLandmarks.getLeftEye(),!0),ur(l,this.faceLandmarks.getRightEye(),!0),ur(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const x=v=>{l.beginPath(),l.arc(v.x,v.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function wZ(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const g=p instanceof Ns?p:Jr(p)?p.landmarks:void 0;if(!g)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new dD(g).draw(r)})}const Im={};uu(Im,{AnchorPosition:()=>Pi,DrawBox:()=>QS,DrawBoxOptions:()=>b2,DrawFaceLandmarks:()=>dD,DrawFaceLandmarksOptions:()=>uD,DrawTextField:()=>Dc,DrawTextFieldOptions:()=>Zm,drawContour:()=>ur,drawDetections:()=>E7,drawFaceExpressions:()=>bZ,drawFaceLandmarks:()=>wZ});function LZ(r,l){const u=qc(r,l),p=jc(r,l);function g(I,S,x){const v=p(I,S,`${x}/separable_conv0`),O=p(S,S,`${x}/separable_conv1`),C=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:v,separable_conv1:O,expansion_conv:C}}function f(I,S){const x=p(I,I,`${S}/separable_conv0`),v=p(I,I,`${S}/separable_conv1`),O=p(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:g,extractMainBlockParams:f}}function pD(r,l){const u=[],{extractWeights:p,getRemainingWeights:g}=Gn(r),{extractConvParams:f,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=LZ(p,u),v=f(3,32,3,"entry_flow/conv_in"),O=S(32,64,"entry_flow/reduction_block_0"),C=S(64,128,"entry_flow/reduction_block_1"),U={conv_in:v,reduction_block_0:O,reduction_block_1:C},G={};Bi(l,0,1).forEach(ge=>{G[`main_block_${ge}`]=x(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),oe={reduction_block:ne,separable_conv:te};if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:u,params:{entry_flow:U,middle_flow:G,exit_flow:oe}}}function SZ(r,l){const u=ms(r,l),p=vg(u),g=Kc(u);function f(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=p(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:v,expansion_conv:O}}function I(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=g(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}}function mD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}=SZ(r,u),S=p("entry_flow/conv_in"),x=f("entry_flow/reduction_block_0"),v=f("entry_flow/reduction_block_1"),O={conv_in:S,reduction_block_0:x,reduction_block_1:v},C={};Bi(l,0,1).forEach(te=>{C[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const U=f("exit_flow/reduction_block"),G=g("exit_flow/separable_conv"),ne={reduction_block:U,separable_conv:G};return zn(r,u),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:u}}const tn=Xe(Je());function fD(r,l,u){return tn.add(tn.conv2d(r,l.filters,u,"same"),l.bias)}function nx(r,l,u=!0){let p=u?tn.relu(r):r;return p=es(p,l.separable_conv0,[1,1]),p=es(tn.relu(p),l.separable_conv1,[1,1]),p=tn.maxPool(p,[3,3],[2,2],"same"),p=tn.add(p,fD(r,l.expansion_conv,[2,2])),p}function IZ(r,l){let u=es(tn.relu(r),l.separable_conv0,[1,1]);return u=es(tn.relu(u),l.separable_conv1,[1,1]),u=es(tn.relu(u),l.separable_conv2,[1,1]),u=tn.add(u,r),u}class gD extends In{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return tn.tidy(()=>{const u=tn.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=Ys(u,p).div(tn.scalar(256));let f=tn.relu(fD(g,l.entry_flow.conv_in,[2,2]));return f=nx(f,l.entry_flow.reduction_block_0,!1),f=nx(f,l.entry_flow.reduction_block_1),Bi(this._numMainBlocks,0,1).forEach(I=>{f=IZ(f,l.middle_flow[`main_block_${I}`])}),f=nx(f,l.exit_flow.reduction_block),f=tn.relu(es(f,l.exit_flow.separable_conv,[1,1])),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return mD(r,this._numMainBlocks)}extractParams(r){return pD(r,this._numMainBlocks)}}function yD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),g=Tg(u,l),f=g(512,1,"fc/age"),I=g(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:f,gender:I}}}}function bD(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:{age:p("fc/age"),gender:p("fc/gender")}};return zn(r,l),{params:g,paramMappings:l}}var Ui;(function(r){r.FEMALE="female",r.MALE="male"})(Ui||(Ui={}));const Hi=Xe(Je());class jm extends In{constructor(r=new gD(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 hr?this.faceFeatureExtractor.forwardInput(r):r,p=Hi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),g=Uu(p,l.fc.age).as1D(),f=Uu(p,l.fc.gender);return{age:g,gender:f}})}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 Tt(r))}async predictAgeAndGender(r){const l=await Tt(r),u=await this.forwardInput(l),p=Hi.unstack(u.age),g=Hi.unstack(u.gender),f=p.map((S,x)=>({ageTensor:S,genderTensor:g[x]})),I=await Promise.all(f.map(async({ageTensor:S,genderTensor:x})=>{const v=(await S.data())[0],O=(await x.data())[0],C=O>.5,U=C?Ui.MALE:Ui.FEMALE,G=C?O:1-O;return S.dispose(),x.dispose(),{age:v,gender:U,genderProbability:G}}));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 yD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Rg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),bD(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 fs=Xe(Je());class Eg extends Og{postProcess(r,l,u){const p=u.map(({width:f,height:I})=>{const S=l/Math.max(I,f);return{width:f*S,height:I*S}}),g=p.length;return fs.tidy(()=>{const f=(O,C)=>fs.stack([fs.fill([68],O,"float32"),fs.fill([68],C,"float32")],1).as2D(1,136).as1D(),I=(O,C)=>{const{width:U,height:G}=p[O];return C(U,G)?Math.abs(U-G)/2:0},S=O=>I(O,(C,U)=>CI(O,(C,U)=>Uf(S(C),x(C))))).div(fs.stack(Array.from(Array(g),(O,C)=>f(p[C].width,p[C].height))));return v})}forwardInput(r){return fs.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 Tt(r))}async detectLandmarks(r){const l=await Tt(r),u=fs.tidy(()=>fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(g,f)=>{const I=Array.from(await g.data()),S=I.filter((v,O)=>Km(O)),x=I.filter((v,O)=>!Km(O));return new Rc(Array(68).fill(0).map((v,O)=>new qe(S[O],x[O])),{height:l.getInputHeight(f),width:l.getInputWidth(f)})}));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Ac extends Eg{constructor(r=new Cg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function wD(r){const l=[],{extractDenseBlock3Params:u}=Ng(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return zn(r,l),{params:p,paramMappings:l}}function LD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractDenseBlock3Params:g}=Ag(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S}}}const mo=Xe(Je());class SD extends In{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],g=Ys(u,p).div(mo.scalar(255));let f=Sg(g,l.dense0,!0);return f=Sg(f,l.dense1),f=Sg(f,l.dense2),f=mo.avgPool(f,[14,14],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return wD(r)}extractParams(r){return LD(r)}}class Um extends Eg{constructor(r=new SD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class h2 extends Ac{}const Dg=Xe(Je());function ID(r,l){return Dg.add(Dg.mul(r,l.weights),l.biases)}const Zc=Xe(Je());function sx(r,l,u,p,g="same"){const{filters:f,bias:I}=l.conv;let S=Zc.conv2d(r,f,u,g);return S=Zc.add(S,I),S=ID(S,l.scale),p?Zc.relu(S):S}function xD(r,l){return sx(r,l,[1,1],!0)}function ix(r,l){return sx(r,l,[1,1],!1)}function kg(r,l){return sx(r,l,[2,2],!0,"valid")}const gs=Xe(Je());function xZ(r,l){function u(S,x,v){const O=r(S),C=O.length/(x*v*v);if(YS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${v}`);return gs.tidy(()=>gs.transpose(gs.tensor4d(O,[x,C,v,v]),[2,3,1,0]))}function p(S,x,v,O){const C=u(S,x,v),U=gs.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:U}}function g(S,x){const v=gs.tensor1d(r(S)),O=gs.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:v,biases:O}}function f(S,x,v,O){const C=p(S,x,v,`${O}/conv`),U=g(x,`${O}/scale`);return{conv:C,scale:U}}function I(S,x,v,O,C=!1){const U=f((C?.5:1)*S,x,v,`${O}/conv1`),G=f(S,x,v,`${O}/conv2`);return{conv1:U,conv2:G}}return{extractConvLayerParams:f,extractResidualLayerParams:I}}function TD(r){const{extractWeights:l,getRemainingWeights:u}=Gn(r),p=[],{extractConvLayerParams:g,extractResidualLayerParams:f}=xZ(l,p),I=g(4704,32,7,"conv32_down"),S=f(9216,32,3,"conv32_1"),x=f(9216,32,3,"conv32_2"),v=f(9216,32,3,"conv32_3"),O=f(36864,64,3,"conv64_down",!0),C=f(36864,64,3,"conv64_1"),U=f(36864,64,3,"conv64_2"),G=f(36864,64,3,"conv64_3"),ne=f(147456,128,3,"conv128_down",!0),te=f(147456,128,3,"conv128_1"),oe=f(147456,128,3,"conv128_2"),ge=f(589824,256,3,"conv256_down",!0),fe=f(589824,256,3,"conv256_1"),Ae=f(589824,256,3,"conv256_2"),Te=f(589824,256,3,"conv256_down_out"),Ve=gs.tidy(()=>gs.transpose(gs.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 rt={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:v,conv64_down:O,conv64_1:C,conv64_2:U,conv64_3:G,conv128_down:ne,conv128_1:te,conv128_2:oe,conv256_down:ge,conv256_1:fe,conv256_2:Ae,conv256_down_out:Te,fc:Ve};return{params:rt,paramMappings:p}}function TZ(r,l){const u=ms(r,l);function p(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function g(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),v=p(I);return{conv:{filters:S,bias:x},scale:v}}function f(I){return{conv1:g(`${I}/conv1`),conv2:g(`${I}/conv2`)}}return{extractConvLayerParams:g,extractResidualLayerParams:f}}function AD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=TZ(r,l),g=u("conv32_down"),f=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),x=p("conv64_down"),v=p("conv64_1"),O=p("conv64_2"),C=p("conv64_3"),U=p("conv128_down"),G=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),oe=p("conv256_1"),ge=p("conv256_2"),fe=p("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!VS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const Te={conv32_down:g,conv32_1:f,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:v,conv64_2:O,conv64_3:C,conv128_down:U,conv128_1:G,conv128_2:ne,conv256_down:te,conv256_1:oe,conv256_2:ge,conv256_down_out:fe,fc:Ae};return zn(r,l),{params:Te,paramMappings:l}}const Vn=Xe(Je());function bi(r,l){let u=xD(r,l.conv1);return u=ix(u,l.conv2),u=Vn.add(u,r),u=Vn.relu(u),u}function Bu(r,l){let u=kg(r,l.conv1);u=ix(u,l.conv2);let p=Vn.avgPool(r,2,2,"valid");const g=Vn.zeros(p.shape),f=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 x=Vn.zeros(S);u=Vn.concat([u,x],1);const v=[...u.shape];v[2]=1;const O=Vn.zeros(v);u=Vn.concat([u,O],2)}return p=f?Vn.concat([p,g],3):p,u=Vn.add(p,u),u=Vn.relu(u),u}const ks=Xe(Je());class Tc extends In{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return ks.tidy(()=>{const u=ks.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],g=Ys(u,p).div(ks.scalar(256));let f=kg(g,l.conv32_down);f=ks.maxPool(f,3,2,"valid"),f=bi(f,l.conv32_1),f=bi(f,l.conv32_2),f=bi(f,l.conv32_3),f=Bu(f,l.conv64_down),f=bi(f,l.conv64_1),f=bi(f,l.conv64_2),f=bi(f,l.conv64_3),f=Bu(f,l.conv128_down),f=bi(f,l.conv128_1),f=bi(f,l.conv128_2),f=Bu(f,l.conv256_down),f=bi(f,l.conv256_1),f=bi(f,l.conv256_2),f=Bu(f,l.conv256_down_out);const I=f.mean([1,2]),S=ks.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Tt(r))}async computeFaceDescriptor(r){const l=await Tt(r),u=ks.tidy(()=>ks.unstack(this.forwardInput(l))),p=await Promise.all(u.map(g=>g.data()));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return AD(r)}extractParams(r){return TD(r)}}function l2(r){const l=new Tc;return l.extractWeights(r),l}function gu(r,l){const u={descriptor:l};return Object.assign({},r,u)}function c2(r){return typeof r.age=="number"}function yu(r,l){const u={age:l};return Object.assign({},r,u)}function a2(r){return(r.gender===Ui.MALE||r.gender===Ui.FEMALE)&&Ec(r.genderProbability)}function mu(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const wi=Xe(Je());function AZ(r,l){function u(x,v){const O=wi.tensor4d(r(3*3*x),[3,3,x,1]),C=wi.tensor1d(r(x)),U=wi.tensor1d(r(x)),G=wi.tensor1d(r(x)),ne=wi.tensor1d(r(x));return l.push({paramPath:`${v}/filters`},{paramPath:`${v}/batch_norm_scale`},{paramPath:`${v}/batch_norm_offset`},{paramPath:`${v}/batch_norm_mean`},{paramPath:`${v}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:U,batch_norm_mean:G,batch_norm_variance:ne}}function p(x,v,O,C,U){const G=wi.tensor4d(r(x*v*O*O),[O,O,x,v]),ne=wi.tensor1d(r(v));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${U?"batch_norm_offset":"bias"}`}),{filters:G,bias:ne}}function g(x,v,O,C){const{filters:U,bias:G}=p(x,v,O,C,!0);return{filters:U,batch_norm_offset:G}}function f(x,v,O){const C=u(x,`${O}/depthwise_conv`),U=g(x,v,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:U}}function I(){const x=g(3,32,3,"mobilenetv1/conv_0"),v=f(32,64,"mobilenetv1/conv_1"),O=f(64,128,"mobilenetv1/conv_2"),C=f(128,128,"mobilenetv1/conv_3"),U=f(128,256,"mobilenetv1/conv_4"),G=f(256,256,"mobilenetv1/conv_5"),ne=f(256,512,"mobilenetv1/conv_6"),te=f(512,512,"mobilenetv1/conv_7"),oe=f(512,512,"mobilenetv1/conv_8"),ge=f(512,512,"mobilenetv1/conv_9"),fe=f(512,512,"mobilenetv1/conv_10"),Ae=f(512,512,"mobilenetv1/conv_11"),Te=f(512,1024,"mobilenetv1/conv_12"),Ve=f(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,conv_8:oe,conv_9:ge,conv_10:fe,conv_11:Ae,conv_12:Te,conv_13:Ve}}function S(){const x=g(1024,256,1,"prediction_layer/conv_0"),v=g(256,512,3,"prediction_layer/conv_1"),O=g(512,128,1,"prediction_layer/conv_2"),C=g(128,256,3,"prediction_layer/conv_3"),U=g(256,128,1,"prediction_layer/conv_4"),G=g(128,256,3,"prediction_layer/conv_5"),ne=g(256,64,1,"prediction_layer/conv_6"),te=g(64,128,3,"prediction_layer/conv_7"),oe=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),fe=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Te=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),rt=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),Ct=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),Ut=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Dn=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),An=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),vn={box_encoding_predictor:oe,class_predictor:ge},Zs={box_encoding_predictor:fe,class_predictor:Ae},Si={box_encoding_predictor:Te,class_predictor:Ve},Qs={box_encoding_predictor:rt,class_predictor:Ct},ya={box_encoding_predictor:Ut,class_predictor:Kt},ol={box_encoding_predictor:Dn,class_predictor:An};return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,box_predictor_0:vn,box_predictor_1:Zs,box_predictor_2:Si,box_predictor_3:Qs,box_predictor_4:ya,box_predictor_5:ol}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function vD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractMobilenetV1Params:g,extractPredictionLayerParams:f}=AZ(u,l),I=g(),S=f(),x=wi.tensor3d(u(5118*4),[1,5118,4]),v={extra_dim:x};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:v},paramMappings:l}}function vZ(r,l){const u=ms(r,l);function p(v,O,C){const U=u(`${v}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),G=u(`${v}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:U,batch_norm_offset:G}}function g(v){const O=`mobilenetv1/conv_${v}`,C=`MobilenetV1/Conv2d_${v}_depthwise`,U=`${O}/depthwise_conv`,G=`${O}/pointwise_conv`,ne=u(`${C}/depthwise_weights`,4,`${U}/filters`),te=u(`${C}/BatchNorm/gamma`,1,`${U}/batch_norm_scale`),oe=u(`${C}/BatchNorm/beta`,1,`${U}/batch_norm_offset`),ge=u(`${C}/BatchNorm/moving_mean`,1,`${U}/batch_norm_mean`),fe=u(`${C}/BatchNorm/moving_variance`,1,`${U}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:oe,batch_norm_mean:ge,batch_norm_variance:fe},pointwise_conv:p("MobilenetV1",v,G)}}function f(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:g(1),conv_2:g(2),conv_3:g(3),conv_4:g(4),conv_5:g(5),conv_6:g(6),conv_7:g(7),conv_8:g(8),conv_9:g(9),conv_10:g(10),conv_11:g(11),conv_12:g(12),conv_13:g(13)}}function I(v,O){const C=u(`${v}/weights`,4,`${O}/filters`),U=u(`${v}/biases`,1,`${O}/bias`);return{filters:C,bias:U}}function S(v){const O=I(`Prediction/BoxPredictor_${v}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${v}/box_encoding_predictor`),C=I(`Prediction/BoxPredictor_${v}/ClassPredictor`,`prediction_layer/box_predictor_${v}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}function x(){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:f,extractPredictionLayerParams:x}}function ND(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=vZ(r,l),g=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!dr(g))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${g}`);const f={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:g}};return zn(r,l),{params:f,paramMappings:l}}const fo=Xe(Je());function Ks(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 wr=Xe(Je()),NZ=.0010000000474974513;function CZ(r,l,u){return wr.tidy(()=>{let p=wr.depthwiseConv2d(r,l.filters,u,"same");return p=wr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,NZ),wr.clipByValue(p,0,6)})}function RZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function CD(r,l){return wr.tidy(()=>{let u,p=Ks(r,l.conv_0,[2,2]);const g=[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(g.forEach((f,I)=>{const S=I+1,x=RZ(S);p=CZ(p,f.depthwise_conv,x),p=Ks(p,f.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 RD(r,l,u,p,g){const f=r.shape[0],I=Math.min(u,f),S=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>g).sort((O,C)=>C.score-O.score),x=O=>O<=p?1:0,v=[];return S.forEach(O=>{if(v.length>=I)return;const C=O.score;for(let U=v.length-1;U>=0;--U){const G=OZ(r,O.boxIndex,v[U]);if(G===0)continue;if(O.score*=x(G),O.score<=g)break}C===O.score&&v.push(O.boxIndex)}),v}function OZ(r,l,u){const p=r.arraySync(),g=Math.min(p[l][0],p[l][2]),f=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]),x=Math.min(p[u][0],p[u][2]),v=Math.min(p[u][1],p[u][3]),O=Math.max(p[u][0],p[u][2]),C=Math.max(p[u][1],p[u][3]),U=(I-g)*(S-f),G=(O-x)*(C-v);if(U<=0||G<=0)return 0;const ne=Math.max(g,x),te=Math.max(f,v),oe=Math.min(I,O),ge=Math.min(S,C),fe=Math.max(oe-ne,0)*Math.max(ge-te,0);return fe/(U+G-fe)}const De=Xe(Je());function EZ(r){const l=De.unstack(De.transpose(r,[1,0])),u=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],p=[De.add(l[0],De.div(u[0],De.scalar(2))),De.add(l[1],De.div(u[1],De.scalar(2)))];return{sizes:u,centers:p}}function DZ(r,l){const{sizes:u,centers:p}=EZ(r),g=De.unstack(De.transpose(l,[1,0])),f=De.div(De.mul(De.exp(De.div(g[2],De.scalar(5))),u[0]),De.scalar(2)),I=De.add(De.mul(De.div(g[0],De.scalar(10)),u[0]),p[0]),S=De.div(De.mul(De.exp(De.div(g[3],De.scalar(5))),u[1]),De.scalar(2)),x=De.add(De.mul(De.div(g[1],De.scalar(10)),u[1]),p[1]);return De.transpose(De.stack([De.sub(I,f),De.sub(x,S),De.add(I,f),De.add(x,S)]),[1,0])}function OD(r,l,u){return De.tidy(()=>{const p=r.shape[0];let g=DZ(De.reshape(De.tile(u.extra_dim,[p,1,1]),[-1,4]),De.reshape(r,[-1,4]));g=De.reshape(g,[p,g.shape[0]/p,4]);const f=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let I=De.slice(f,[0,0,0],[-1,-1,1]);I=De.reshape(I,[p,I.shape[1]]);const S=De.unstack(g),x=De.unstack(I);return{boxes:S,scores:x}})}const Mu=Xe(Je());function fa(r,l){return Mu.tidy(()=>{const u=r.shape[0],p=Mu.reshape(ma(r,l.box_encoding_predictor),[u,-1,1,4]),g=Mu.reshape(ma(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:g}})}const Pu=Xe(Je());function ED(r,l,u){return Pu.tidy(()=>{const p=Ks(r,u.conv_0,[1,1]),g=Ks(p,u.conv_1,[2,2]),f=Ks(g,u.conv_2,[1,1]),I=Ks(f,u.conv_3,[2,2]),S=Ks(I,u.conv_4,[1,1]),x=Ks(S,u.conv_5,[2,2]),v=Ks(x,u.conv_6,[1,1]),O=Ks(v,u.conv_7,[2,2]),C=fa(l,u.box_predictor_0),U=fa(r,u.box_predictor_1),G=fa(g,u.box_predictor_2),ne=fa(I,u.box_predictor_3),te=fa(x,u.box_predictor_4),oe=fa(O,u.box_predictor_5),ge=Pu.concat([C.boxPredictionEncoding,U.boxPredictionEncoding,G.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,oe.boxPredictionEncoding],1),fe=Pu.concat([C.classPrediction,U.classPrediction,G.classPrediction,ne.classPrediction,te.classPrediction,oe.classPrediction],1);return{boxPredictions:ge,classPredictions:fe}})}class Vs{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 Li=Xe(Je());class Xo extends In{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Li.tidy(()=>{const u=Li.cast(r.toBatchTensor(512,!1),"float32"),p=Li.sub(Li.mul(u,Li.scalar(.007843137718737125)),Li.scalar(1)),g=CD(p,l.mobilenetv1),{boxPredictions:f,classPredictions:I}=ED(g.out,g.conv11,l.prediction_layer);return OD(f,I,l.output_layer)})}async forward(r){return this.forwardInput(await Tt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new Vs(l),g=await Tt(r),{boxes:f,scores:I}=this.forwardInput(g),S=f[0],x=I[0];for(let fe=1;fe{const[Ae,Te]=[Math.max(0,oe[fe][0]),Math.min(1,oe[fe][2])].map(Ct=>Ct*te),[Ve,rt]=[Math.max(0,oe[fe][1]),Math.min(1,oe[fe][3])].map(Ct=>Ct*ne);return new Wt(v[fe],new Cc(Ve,Ae,rt-Ve,Te-Ae),{height:g.getInputHeight(0),width:g.getInputWidth(0)})});return S.dispose(),x.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ND(r)}extractParams(r){return vD(r)}}function $S(r){const l=new Xo;return l.extractWeights(r),l}function UC(r){return $S(r)}class BC extends Xo{}const DD=.4,kD=[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)],FD=[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)],_D=[117.001,114.697,97.404],WD="tiny_yolov2_model",$D="tiny_yolov2_separable_conv_model";const Fg=r=>typeof r=="number";function Tm(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(!Fg(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=>Fg(l.x)&&Fg(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(Fg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Xs=Xe(Je());function Qc(r){return Xs.tidy(()=>{const l=Xs.mul(r,Xs.scalar(.10000000149011612));return Xs.add(Xs.relu(Xs.sub(r,l)),l)})}const Js=Xe(Je());function Lr(r,l){return Js.tidy(()=>{let u=Js.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Js.conv2d(u,l.conv.filters,[1,1],"valid"),u=Js.sub(u,l.bn.sub),u=Js.mul(u,l.bn.truediv),u=Js.add(u,l.conv.bias),Qc(u)})}const go=Xe(Je());function Sr(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 rx=Xe(Je());function kZ(r,l){const u=qc(r,l);function p(I,S){const x=rx.tensor1d(r(I)),v=rx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:v}}function g(I,S,x){const v=u(I,S,3,`${x}/conv`),O=p(S,`${x}/bn`);return{conv:v,bn:O}}const f=jc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}}function UD(r,l,u,p){const{extractWeights:g,getRemainingWeights:f}=Gn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:v}=kZ(g,I);let O;if(l.withSeparableConvs){const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=l.isFirstLayerConv2d?S(C,U,3,"conv0"):v(C,U,"conv0"),Ve=v(U,G,"conv1"),rt=v(G,ne,"conv2"),Ct=v(ne,te,"conv3"),Ut=v(te,oe,"conv4"),Kt=v(oe,ge,"conv5"),Dn=fe?v(ge,fe,"conv6"):void 0,An=Ae?v(fe,Ae,"conv7"):void 0,vn=S(Ae||fe||ge,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:Ct,conv4:Ut,conv5:Kt,conv6:Dn,conv7:An,conv8:vn}}else{const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=x(C,U,"conv0"),Ve=x(U,G,"conv1"),rt=x(G,ne,"conv2"),Ct=x(ne,te,"conv3"),Ut=x(te,oe,"conv4"),Kt=x(oe,ge,"conv5"),Dn=x(ge,fe,"conv6"),An=x(fe,Ae,"conv7"),vn=S(Ae,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:Ct,conv4:Ut,conv5:Kt,conv6:Dn,conv7:An,conv8:vn}}if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{params:O,paramMappings:I}}function FZ(r,l){const u=ms(r,l);function p(S){const x=u(`${S}/sub`,1),v=u(`${S}/truediv`,1);return{sub:x,truediv:v}}function g(S){const x=u(`${S}/filters`,4),v=u(`${S}/bias`,1);return{filters:x,bias:v}}function f(S){const x=g(`${S}/conv`),v=p(`${S}/bn`);return{conv:x,bn:v}}const I=Kc(u);return{extractConvParams:g,extractConvWithBatchNormParams:f,extractSeparableConvParams:I}}function BD(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}=FZ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:S>7?f("conv6"):void 0,conv7:S>8?f("conv7"):void 0,conv8:p("conv8")}}else I={conv0:g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:g("conv6"),conv7:g("conv7"),conv8:p("conv8")};return zn(r,u),{params:I,paramMappings:u}}var Am;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(Am||(Am={}));class $i{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 kt=Xe(Je());class el extends In{constructor(r){super("TinyYolov2");Tm(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=Lr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=Lr(u,l.conv6),u=Lr(u,l.conv7),ma(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Qc(ma(r,l.conv0,"valid",!1)):Sr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Sr(u,l.conv6):u,u=l.conv7?Sr(u,l.conv7):u,ma(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let p=kt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?Ys(p,this.config.meanRgb):p,p=p.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Tt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new $i(l),g=await Tt(r),f=await this.forwardInput(g,u),I=kt.tidy(()=>kt.unstack(f)[0].expandDims()),S={width:g.getInputWidth(0),height:g.getInputHeight(0)},x=await this.extractBoxes(I,g.getReshapedInputDimensions(0),p);f.dispose(),I.dispose();const v=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),U=x.map(te=>this.config.classes[te.label]),G=Cm(v.map(te=>te.rescale(u)),O,this.config.iouThreshold,!0),ne=G.map(te=>new ta(O[te],C[te],U[te],v[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return BD(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 UD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:g}=l,f=Math.max(p,g),I=f/p,S=f/g,x=r.shape[1],v=this.config.anchors.length,[O,C,U]=kt.tidy(()=>{const oe=r.reshape([x,x,v,this.boxEncodingSize]),ge=oe.slice([0,0,0,0],[x,x,v,4]),fe=oe.slice([0,0,0,4],[x,x,v,1]),Ae=this.withClassScores?kt.softmax(oe.slice([0,0,0,5],[x,x,v,this.config.classes.length]),3):kt.scalar(0);return[ge,fe,Ae]}),G=[],ne=await C.array(),te=await O.array();for(let oe=0;oeu){const Te=(ge+xc(te[oe][ge][fe][0]))/x*I,Ve=(oe+xc(te[oe][ge][fe][1]))/x*S,rt=Math.exp(te[oe][ge][fe][2])*this.config.anchors[fe].x/x*I,Ct=Math.exp(te[oe][ge][fe][3])*this.config.anchors[fe].y/x*S,Ut=Te-rt/2,Kt=Ve-Ct/2,Dn={row:oe,col:ge,anchor:fe},{classScore:An,label:vn}=this.withClassScores?await this.extractPredictedClass(U,Dn):{classScore:1,label:0};G.push({box:new Oc(Ut,Kt,Ut+rt,Kt+Ct),score:Ae,classScore:Ae*An,label:vn,...Dn})}}return O.dispose(),C.dispose(),U.dispose(),G}async extractPredictedClass(r,l){const{row:u,col:p,anchor:g}=l,f=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>f[u][p][g][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 Sc extends el{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:DD,classes:["face"]},r?{anchors:FD,meanRgb:_D}:{anchors:kD,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 Wt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?$D:WD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function WC(r,l=!0){const u=new Sc(l);return u.extractWeights(r),u}class vm extends $i{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Hs{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const ox=Xe(Je());async function ga(r,l,u,p,g=({alignedRect:f})=>f){const f=r.map(x=>Jr(x)?g(x):x.detection),I=p||(l instanceof ox.Tensor?await Qo(l,f):await Zo(l,f)),S=await u(I);return I.forEach(x=>x instanceof ox.Tensor&&x.dispose()),S}async function tl(r,l,u,p,g){return ga([r],l,async f=>u(f[0]),p,g)}const MD=.4,PD=[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)],zD=[117.001,114.697,97.404];class Ic extends el{constructor(){const r={withSeparableConvs:!0,iouThreshold:MD,classes:["face"],anchors:PD,meanRgb:zD,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 Wt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const ht={ssdMobilenetv1:new Xo,tinyFaceDetector:new Ic,tinyYolov2:new Sc,faceLandmark68Net:new Ac,faceLandmark68TinyNet:new Um,faceRecognitionNet:new Tc,faceExpressionNet:new Mm,ageGenderNet:new jm},BS=(r,l)=>ht.ssdMobilenetv1.locateFaces(r,l),zC=(r,l)=>ht.tinyFaceDetector.locateFaces(r,l),GC=(r,l)=>ht.tinyYolov2.locateFaces(r,l),MS=r=>ht.faceLandmark68Net.detectLandmarks(r),VC=r=>ht.faceLandmark68TinyNet.detectLandmarks(r),YC=r=>ht.faceRecognitionNet.computeFaceDescriptor(r),HC=r=>ht.faceExpressionNet.predictExpressions(r),qC=r=>ht.ageGenderNet.predictAgeAndGender(r),PS=r=>ht.ssdMobilenetv1.load(r),jC=r=>ht.tinyFaceDetector.load(r),KC=r=>ht.tinyYolov2.load(r),XC=r=>ht.faceLandmark68Net.load(r),JC=r=>ht.faceLandmark68TinyNet.load(r),ZC=r=>ht.faceRecognitionNet.load(r),QC=r=>ht.faceExpressionNet.load(r),e2=r=>ht.ageGenderNet.load(r),t2=PS,n2=BS,s2=MS;class GD extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Vu extends GD{async run(){const r=await this.parentTask,l=await ga(r,this.input,async u=>await Promise.all(u.map(p=>ht.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>fu(u,l[p]))}withAgeAndGender(){return new zu(this,this.input)}}class Yu extends GD{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>ht.faceExpressionNet.predictExpressions(u),this.extractedFaces);return fu(r,l)}withAgeAndGender(){return new Gu(this,this.input)}}class il extends Vu{withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class rl extends Yu{withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class VD extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class zu extends VD{async run(){const r=await this.parentTask,l=await ga(r,this.input,async u=>await Promise.all(u.map(p=>ht.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:g,gender:f,genderProbability:I}=l[p];return yu(mu(u,f,I),g)})}withFaceExpressions(){return new Vu(this,this.input)}}class Gu extends VD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await tl(r,this.input,g=>ht.ageGenderNet.predictAgeAndGender(g),this.extractedFaces);return yu(mu(r,u,p),l)}withFaceExpressions(){return new Yu(this,this.input)}}class nl extends zu{withFaceExpressions(){return new il(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class sl extends Gu{withFaceExpressions(){return new rl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class Wm extends Hs{constructor(r,l){super();this.parentTask=r;this.input=l}}class Kr extends Wm{async run(){const r=await this.parentTask,l=await ga(r,this.input,u=>Promise.all(u.map(p=>ht.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>gu(r[p],u))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}}class Xr extends Wm{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>ht.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return gu(r,l)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}}const Hu=Xe(Je());class km extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?ht.faceLandmark68TinyNet:ht.faceLandmark68Net}}class Fm extends km{async run(){const r=await this.parentTask,l=r.map(g=>g.detection),u=this.input instanceof Hu.Tensor?await Qo(this.input,l):await Zo(this.input,l),p=await Promise.all(u.map(g=>this.landmarkNet.detectLandmarks(g)));return u.forEach(g=>g instanceof Hu.Tensor&&g.dispose()),r.map((g,f)=>Jo(g,p[f]))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class _m extends km{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Hu.Tensor?await Qo(this.input,[l]):await Zo(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(g=>g instanceof Hu.Tensor&&g.dispose()),Jo(r,p)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class Em extends Hs{constructor(r,l=new Vs){super();this.input=r;this.options=l}}class pu extends Em{async run(){const{input:r,options:l}=this,u=l instanceof vm?p=>ht.tinyFaceDetector.locateFaces(p,l):l instanceof Vs?p=>ht.ssdMobilenetv1.locateFaces(p,l):l instanceof $i?p=>ht.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=>Zr({},u)))})}withFaceLandmarks(r=!1){return new Fm(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Vu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new zu(this.runAndExtendWithFaceDetections(),this.input)}}class Dm extends Em{async run(){const r=await new pu(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?Zr({},l):void 0)})}withFaceLandmarks(r=!1){return new _m(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Yu(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Gu(this.runAndExtendWithFaceDetection(),this.input)}}function i2(r,l=new Vs){return new Dm(r,l)}function du(r,l=new Vs){return new pu(r,l)}async function zS(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await du(r,new Vs(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function r2(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await du(r,new $i(l)).withFaceLandmarks().withFaceDescriptors()}const o2=zS;function Pm(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((g,f)=>g-p[f]).reduce((g,f)=>g+Math.pow(f,2),0))}class GS{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 g=()=>`person ${p++}`;this._labeledDescriptors=u.map(f=>{if(f instanceof so)return f;if(f instanceof Float32Array)return new so(g(),[f]);if(f.descriptor&&f.descriptor instanceof Float32Array)return new so(g(),[f.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=>Pm(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new Lu(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>so.fromJSON(u));return new GS(l,r.distanceThreshold)}}function $C(r){const l=new Ic;return l.extractWeights(r),l}function US(r,l){const{width:u,height:p}=new Zn(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(g=>US(g,{width:u,height:p}));if(Jr(r)){const g=r.detection.forSize(u,p),f=r.unshiftedLandmarks.forSize(g.box.width,g.box.height);return Jo(Zr(r,g),f)}return mi(r)?Zr(r,r.detection.forSize(u,p)):r instanceof Ns||r instanceof Wt?r.forSize(u,p):r}var FC="0.8.1";return g2();})(); + with dtype ${I.dtype}. `)});const p=(I,S)=>{const x=ut(l,u[0].shape)[0],v=NO(u.map(U=>U.shape),x);if(qt(v)===0)return yI([],v);if(u=u.filter(U=>U.size>0),u.length===1)return u[0];const O=u.map(U=>U.shape);vO(O,x);const C=I.concat(u,x);return S(u),C},g=u,f={axis:l};return Y.runKernelFunc(p,g,null,rf,f)}const yn=z({concat_:wJ});function LJ(r){const l=M(r,"x","sigmoid"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sigmoid(l);return g([f]),f},u,null,Uf)}const xI=z({sigmoid_:LJ});function SJ(r,l,u){const p=M(r,"x","slice");if(p.rank===0)throw new Error("Slicing scalar is not possible");const g=(S,x)=>{const[v,O]=rg(p,l,u);return SO(p,v,O),x([p]),S.slice(p,v,O)},f={x:p},I={begin:l,size:u};return Y.runKernelFunc(g,f,null,_f,I)}const vt=z({slice_:SJ});function IJ(r,l,u){const p=M(r,"x","batchToSpaceND"),g=l.reduce((x,v)=>x*v);Z(p.rank>=1+l.length,()=>`input rank is ${p.rank} but should be > than blockShape.length ${l.length}`),Z(u.length===l.length,()=>`crops.length is ${u.length} but should be equal to blockShape.length ${l.length}`),Z(p.shape[0]%g===0,()=>`input tensor batch is ${p.shape[0]} but is not divisible by the product of the elements of blockShape ${l.join(" * ")} === ${g}`);const f=x=>x.batchToSpaceND(p,l,u),I={x:p},S={blockShape:l,crops:u};return Y.runKernelFunc(f,I,null,nf,S)}const TI=z({batchToSpaceND_:IJ});function xJ(r,l){let u=M(r,"broadcastTo","x");const p=u.shape;if(l.some(O=>!(O>0)||O%1!==0))throw new Error(`broadcastTo(): Invalid broadcast shape [${l}].`);if(l.lengthu.rank){const O=u.shape.slice();for(;O.length=0;O--)if(g[O]===l[O])f[O]=1;else if(u.shape[O]!==1)throw new Error(`broadcastTo(): [${p}] cannot be broadcast to [${l}].`);const I=f.map((O,C)=>O>1?C:-1).filter(O=>O>=0);if(I.length===0)return gi(u);const S=O=>O.tile(u,f),x={x:u},v={shape:l,inputShape:g};return Y.runKernelFunc(S,x,null,sf,v)}const lg=z({broadcastTo_:xJ});function TJ(r,l,u,p,g="NHWC",f=[1,1],I){const S=M(r,"x","conv2d"),x=M(l,"filter","conv2d");let v=S,O=!1;S.rank===3&&(O=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2]])),Z(v.rank===4,()=>`Error in conv2d: input must be rank 4, but got rank ${v.rank}.`),Z(x.rank===4,()=>`Error in conv2d: filter must be rank 4, but got rank ${x.rank}.`),I!=null&&Z(Qt(p),()=>`Error in conv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${p}.`);const C=g==="NHWC"?v.shape[3]:v.shape[1];Z(C===x.shape[2],()=>`Error in conv2d: depth of input (${C}) must match input depth for filter ${x.shape[2]}.`),Z(ao(u,f),()=>`Error in conv2D: Either strides or dilations must be 1. Got strides ${u} and dilations '${f}'`);const U=(oe,ge)=>{const fe=zc(g),Ae=fr(v.shape,x.shape,u,f,p,I,!1,fe),Te=oe.conv2d(v,x,Ae);return ge([v,x]),Te},G={x:v,filter:x},ne={strides:u,pad:p,dataFormat:g,dilations:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,of,ne);return O?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const AI=z({conv2d_:TJ});function AJ(r,l,u,p,g,f="NHWC",I){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let S=r,x=l,v=!1;l.rank===3&&(v=!0,x=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]),S=[1,r[0],r[1],r[2]]),Z(S.length===4,()=>`Error in conv2dDerInput: inShape must be length 4, but got length ${S.length}.`),Z(x.rank===4,()=>`Error in conv2dDerInput: dy must be rank 4, but got rank ${x.rank}`),Z(u.rank===4,()=>`Error in conv2dDerInput: filter must be rank 4, but got rank ${u.rank}`);const O=f==="NHWC"?S[3]:S[1],C=f==="NHWC"?x.shape[3]:x.shape[1];Z(O===u.shape[2],()=>`Error in conv2dDerInput: depth of input (${O}) must match input depth for filter ${u.shape[2]}.`),Z(C===u.shape[3],()=>`Error in conv2dDerInput: depth of output (${C}) must match output depth for filter ${u.shape[3]}.`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerInput: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const U=(oe,ge)=>{const fe=1,Ae=zc(f),Te=fr(S,u.shape,p,fe,g,I,!1,Ae),Ve=oe.conv2dDerInput(x,u,Te);return ge([x,u]),Ve},G={dy:x,filter:u},ne={strides:p,pad:g,dataFormat:f,dimRoundingMode:I,inputShape:S},te=Y.runKernelFunc(U,G,null,af,ne);return v?ie(te,[te.shape[1],te.shape[2],te.shape[3]]):te}const CO=z({conv2DBackpropInput_:AJ});function vJ(r,l,u,p,g){Z(r.length===l.rank,()=>`Length of inShape (${r.length}) and rank of dy (${l.rank}) must match`);let f=r,I=l,S=!1;l.rank===4&&(S=!0,I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]]),f=[1,r[0],r[1],r[2],r[3]]);const x=f[4],v=I.shape[4];Z(f.length===5,()=>`Error in conv3dDerInput: inShape must be length 5, but got length ${f.length}.`),Z(I.rank===5,()=>`Error in conv3dDerInput: dy must be rank 5, but got rank ${I.rank}`),Z(u.rank===5,()=>`Error in conv3dDerInput: filter must be rank 5, but got rank ${u.rank}`),Z(x===u.shape[3],()=>`Error in conv3dDerInput: depth of input (${x}) must match input depth for filter ${u.shape[3]}.`),Z(v===u.shape[4],()=>`Error in conv3dDerInput: depth of output (${v}) must match output depth for filter ${u.shape[4]}.`);const O=ne=>{const te=1,oe=Ru(f,u.shape,p,te,g);return ne.conv3dDerInput(I,u,oe)},C={dy:I},U={pad:g},G=Y.runKernelFunc(O,C,null,V2,U);return S?ie(G,[G.shape[1],G.shape[2],G.shape[3],G.shape[4]]):G}const RO=z({conv3DBackpropInput_:vJ});function NJ(r){const l=M(r,"x","cos"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cos(l);return g([l]),f},u,null,cf)}const Ou=z({cos_:NJ});function CJ(r){const l=M(r,"x","cosh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.cosh(l);return g([l]),f},u,null,lf)}const vI=z({cosh_:CJ});function RJ(r,l=0,u=!1,p=!1){const g=M(r,"x","cumsum"),f=(x,v)=>{const O=ds([l],g.rank);let C=g;O!=null&&(C=$t(g,O));const U=ro(1,g.rank)[0];let G=x.cumsum(C,U,u,p);if(v([g]),O!=null){const ne=Mc(O);G=$t(G,ne)}return G},I={x:g},S={axis:l,exclusive:u,reverse:p};return Y.runKernelFunc(f,I,null,hf,S)}const NI=z({cumsum_:RJ});function Nt(r,l){const u=[];for(let p=0;p1)&&u.unshift(f)}return u}function it(r,l){const u=[],p=Math.max(r.length,l.length);for(let g=0;gI.equal(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,tR)}const CI=z({equal_:OJ});function EJ(r,l,u){const p=M(l,"a","where"),g=M(u,"b","where"),f=M(r,"condition","where","bool"),I=it(p.shape,g.shape),S=lg(p,I),x=lg(g,I);f.rank===1&&Z(f.shape[0]===p.shape[0],()=>"The first dimension of `a` must match the size of `condition`."),f.rank!==1&&Zt(f.shape,x.shape,"Error in where: ");const v=(C,U)=>{const G=C.select(f,S,x);return U([f]),G},O={condition:f,t:S,e:x};return Y.runKernelFunc(v,O,null,Ff)}const Mn=z({where_:EJ});function DJ(r){const l=M(r,"x","zerosLike"),u={x:l};return Y.runKernelFunc(p=>p.zerosLike(l),u,null,Kf)}const je=z({zerosLike_:DJ});function kJ(r){const l=M(r,"x","exp"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.exp(l);return g([f]),f},u,null,df)}const Pn=z({exp_:kJ});function FJ(r,l=0){const u=null,p=M(r,"x","expandDims",u);Z(l<=p.rank,()=>"Axis must be <= rank of the tensor");const g=p.shape.slice();return l<0&&(Z(-(p.rank+1)<=l,()=>`Axis must be in the interval [${-(p.rank+1)}, ${p.rank}]`),l=p.rank+l+1),g.splice(l,0,1),ie(p,g)}const Es=z({expandDims_:FJ});function _J(r,l){const u=null,p=M(r,"x","tile",u);Z(p.rank===l.length,()=>`Error in transpose: rank of input ${p.rank} must match length of reps ${l}.`);const g=(x,v)=>{const O=x.tile(p,l);return v([p]),O},f=[p],I={x:p},S={reps:l};return Y.runKernelFunc(g,I,null,Yf,S,f)}const ca=z({tile_:_J});function WJ(r,l,u,p="float32"){l==null&&(l=r);const g=Cu([r,l],p),f=r<=l?r:l;for(let S=0;Sg.fill(r,l,u),{},null,iR,p)}function $J(r){const l=M(r,"x","floor"),u={x:l};return Y.runKernelFunc(p=>p.floor(l),u,null,pf)}const EI=z({floor_:$J});function OO(r,l,u){const p=r.shape[u],g=[];let f=1,I=1;for(let S=0;S{const O=ut(u,p.shape)[0],C=OO(p,g,O),U=x.gather(p,ie(g,[g.size]),O);return v([p,g]),ie(U,C.outputShape)};return Y.runKernelFunc(S,f,null,ff,I)}const DI=z({gather_:UJ});function BJ(r,l){let u=M(r,"a","greater"),p=M(l,"b","greater");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.greater(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,aR)}const yi=z({greater_:BJ});function MJ(r,l){let u=M(r,"a","greaterEqual"),p=M(l,"b","greaterEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.greaterEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,gf)}const gr=z({greaterEqual_:MJ});function PJ(r){const l=M(r,"input","imag"),u=g=>g.imag(l),p={input:l};return Y.runKernelFunc(u,p,null,lR)}const Eu=z({imag_:PJ});function zJ(r,l){let u=M(r,"a","maximum"),p=M(l,"b","maximum");[u,p]=ft(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.maximum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Sf)}const kI=z({maximum_:zJ});function ke(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 Vi(r,u,p,l)}function GJ(r,l){let u=M(r,"a","less"),p=M(l,"b","less");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.less(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,pR)}const FI=z({less_:GJ});function VJ(r,l){let u=M(r,"a","lessEqual"),p=M(l,"b","lessEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(I,S)=>{const x=I.lessEqual(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,mR)}const yr=z({lessEqual_:VJ});function YJ(r){const l=M(r,"x","log"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log(l);return g([l]),f},u,null,bf)}const co=z({log_:YJ});function HJ(r){const l=M(r,"x","log1p"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.log1p(l);return g([l]),f},u,null,wf)}const _I=z({log1p_:HJ});function hg(r){return Y.customGrad(r)}function qJ(r){const l=M(r,"x","neg"),u={x:l};return Y.runKernelFunc(p=>p.neg(l),u,null,Af)}const yt=z({neg_:qJ});function jJ(r,l=null,u=!1){const p=M(r,"x","max"),g=(S,x)=>{const v=ut(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=$t(p,C),O=ro(O.length,U.rank));const G=S.max(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Qn(ne.shape,ut(l,p.shape));ne=ie(ne,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={reductionIndices:l,keepDims:u};return Y.runKernelFunc(g,f,null,Lf,I)}const la=z({max_:jJ});function KJ(r,l){let u=M(r,"a","sub"),p=M(l,"b","sub");[u,p]=ft(u,p);const g=(I,S)=>{const x=I.subtract(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,Vf)}const Be=z({sub_:KJ});function XJ(r,l=null,u=!1){let p=M(r,"x","sum");p.dtype==="bool"&&(p=Le(p,"int32"));const g=(S,x)=>{x([p]);const v=ut(l,p.shape),O=ds(v,p.rank);let C=v,U=p;O!=null&&(U=$t(p,O),C=ro(C.length,p.rank));let G=S.sum(U,C);if(u){const ne=Qn(G.shape,v);G=ie(G,ne)}return G},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,Mf,I)}const Fe=z({sum_:XJ});function JJ(r,l=null,u=!1){const p=M(r,"x","logSumExp"),g=ut(l,p.shape),f=la(p,g,!0),I=Be(p,f),S=Pn(I),x=Fe(S,g),v=co(x),O=Lt(ie(f,v.shape),v);if(u){const C=Qn(O.shape,g);return ie(O,C)}return O}const WI=z({logSumExp_:JJ});function ZJ(r,l){const u=M(r,"a","logicalAnd","bool"),p=M(l,"b","logicalAnd","bool");it(u.shape,p.shape);const g={a:u,b:p};return Y.runKernelFunc(f=>f.logicalAnd(u,p),g,null,fR)}const ha=z({logicalAnd_:ZJ});function QJ(r){const l=M(r,"x","logicalNot","bool"),u={x:l};return Y.runKernelFunc(p=>p.logicalNot(l),u,null,gR)}const $I=z({logicalNot_:QJ});function Ds(r,l="float32"){if(l==="complex64"){const p=Ds(r,"float32"),g=Ds(r,"float32");return Gi(p,g)}const u=oa(qt(r),l);return Y.makeTensor(u,r,l)}function Yi(r,l="float32"){if(l==="complex64"){const p=Yi(r,"float32"),g=Ds(r,"float32");return Gi(p,g)}const u=Qf(qt(r),l);return Y.makeTensor(u,r,l)}function e9(r,l=null,u=!1){const p=M(r,"x","mean"),g=ut(l,p.shape),f=TO(p.shape,g),I=f[1],S=qt(I),x=hg(v=>{const O=ke(S),C=O.dtype===v.dtype?v:Le(v,O.dtype),U=Pe(C,O),G=Fe(U,l,u),ne=te=>{const oe=v.shape.slice();g.forEach(Ae=>{oe[Ae]=1});const ge=ie(te,oe),fe=Pe(ae(ge,Yi(v.shape,"float32")),S);return fe};return{value:G,gradFunc:ne}});return x(p)}const UI=z({mean_:e9});function t9(r,l=null,u=!1){const p=M(r,"x","min"),g=(S,x)=>{const v=ut(l,p.shape);let O=v;const C=ds(O,p.rank);let U=p;C!=null&&(U=$t(p,C),O=ro(O.length,p.rank));const G=S.min(U,O);C!=null&&U.dispose();let ne=G;if(u){const te=Qn(ne.shape,v);ne=ie(G,te),G.dispose()}return x([p,ne]),ne},f={x:p},I={axis:l,keepDims:u};return Y.runKernelFunc(g,f,null,If,I)}const ug=z({min_:t9});function n9(r,l){let u=M(r,"a","minimum"),p=M(l,"b","minimum");[u,p]=ft(u,p),u.dtype==="bool"&&(u=Le(u,"int32"),p=Le(p,"int32")),it(u.shape,p.shape);const g=(I,S)=>{const x=I.minimum(u,p);return S([u,p]),x},f={a:u,b:p};return Y.runKernelFunc(g,f,null,xf)}const BI=z({minimum_:n9});function s9(r){const l=M(r,"x","square"),u={},p=[l],g=[];return Y.runKernelFunc((f,I)=>(I([l]),f.square(l)),{x:l},null,"Square",u,p,g)}const dt=z({square_:s9});function i9(r,l){let u=M(r,"a","notEqual"),p=M(l,"b","notEqual");[u,p]=ft(u,p),it(u.shape,p.shape);const g=I=>I.notEqual(u,p),f={a:u,b:p};return Y.runKernelFunc(g,f,null,AR)}const MI=z({notEqual_:i9});function r9(r){const l=M(r,"input","real"),u=g=>g.real(l),p={input:l};return Y.runKernelFunc(u,p,null,kR)}const Gc=z({real_:r9});function o9(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 g=(S,x)=>(x([p]),S.pad(p,l,u)),f={paddings:l,constantValue:u},I={x:p};return Y.runKernelFunc(g,I,null,vf,f)}const PI=z({pad_:o9});function a9(r,l,u){const p=M(r,"x","spaceToBatchND");Z(p.rank>=1+l.length,()=>`input rank ${p.rank} should be > than [blockShape] ${l.length}`),Z(u.length===l.length,()=>`paddings.shape[0] ${u.length} must be equal to [blockShape] ${l.length}`),Z(p.shape.reduce((S,x,v)=>v>0&&v<=l.length?S&&(x+u[v-1][0]+u[v-1][1])%l[v-1]===0:S,!0),()=>`input spatial dimensions ${p.shape.slice(1)} with paddings ${u.toString()} must be divisible by blockShapes ${l.toString()}`);const g=S=>S.spaceToBatchND(p,l,u),f={x:p},I={blockShape:l,paddings:u};return Y.runKernelFunc(g,f,null,Pf,I)}const zI=z({spaceToBatchND_:a9});function c9(r,l){let u=M(r,"base","pow"),p=M(l,"exp","pow");[u,p]=ft(u,p);const g={a:u,b:p},f=(I,S)=>{const x=I.pow(u,p);return S([u,p,x]),x};return Y.runKernelFunc(f,g,null,Nf)}const ua=z({pow_:c9});function lo(r,l){_c(r);const u=mr(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 dg(r,l,u=1,p="float32"){if(u===0)throw new Error("Cannot have a step of zero");const g=()=>{const I=r===l,S=r1;if(I||S||x)return Ds([0],p);const v=Math.abs(Math.ceil((l-r)/u)),O=oa(v,p);l(f([l]),l.dtype==="bool"?Le(l,"int32"):g.relu(l)),p={x:l};return Y.runKernelFunc(u,p,null,Cf)}const Du=z({relu_:l9});function h9(r,l){const u=M(r,"x","reverse"),p=I=>{const S=ut(l,u.shape);if(u.rank===0)return gi(u);const x=I.reverse(u,S);return ie(x,u.shape)},g={x:u},f={dims:l};return Y.runKernelFunc(p,g,null,Df,f)}const Vc=z({reverse_:h9});function u9(r){const l=M(r,"x","rsqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.rsqrt(l);return g([l]),f},u,null,kf)}const GI=z({rsqrt_:u9});function d9(r){const l=M(r,"x","sin"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sin(l);return g([l]),f},u,null,Wf)}const VI=z({sin_:d9});function p9(r){const l=M(r,"x","sinh"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sinh(l);return g([l]),f},u,null,$f)}const YI=z({sinh_:p9});function m9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.fft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=r.as2D(g,p),I=u.fft(f);return I.reshape(r.shape)},l,null,sR)}const ku=z({fft_:m9});function f9(r){Z(r.dtype==="complex64",()=>`The dtype for tf.spectral.ifft() must be complex64 but got ${r.dtype}.`);const l={input:r};return Y.runKernelFunc(u=>{const p=r.shape[r.shape.length-1],g=r.size/p,f=ie(r,[g,p]),I=u.ifft(f);return ie(I,r.shape)},l,null,cR)}const Yc=z({ifft_:f9});function g9(r){const l=r.shape[r.shape.length-1],u=r.size/l;let p;if(l<=2){const g=ie(r,[u,l]);p=Yc(g)}else{const g=[u,2*(l-1)],f=ie(Gc(r),[u,l]),I=ie(Eu(r),[u,l]),S=Vc(vt(f,[0,1],[u,l-2]),1),x=ae(Vc(vt(I,[0,1],[u,l-2]),1),ke(-1)),v=yn([f,S],1),O=yn([I,x],1),C=ie(Gi(v,O),[g[0],g[1]]);p=Yc(C)}if(p=Gc(p),r.rank===3&&r.shape[0]!==0){const g=p,f=r.shape[0];p=ie(p,[f,p.shape[0]/f,p.shape[1]]),g.dispose()}return p}const HI=z({irfft_:g9});function EO(r,l,u=0){let p=[];if(typeof l=="number")Z(r.shape[u]%l===0,()=>"Number of splits must evenly divide the axis."),p=new Array(l).fill(r.shape[u]/l);else{const g=l.reduce((I,S)=>(S===-1&&(I+=1),I),0);Z(g<=1,()=>"There should be only one negative value in split array.");const f=l.indexOf(-1);if(f!==-1){const I=l.reduce((S,x)=>x>0?S+x:S);l[f]=r.shape[u]-I}Z(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 y9(r,l,u=0){const p=M(r,"x","split"),g=(S,x)=>{const v=ut(u,p.shape)[0],O=EO(p,l,v);return S.split(p,O,v)},f={x:p},I={numOrSizeSplits:l,axis:u};return Y.runKernelFunc(g,f,null,zf,I)}const ho=z({split_:y9});function b9(r,l){Z(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 g;if(l!=null&&l0),te=r.shape.map(oe=>oe);te[r.shape.length-1]=l,g=vt(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,g=yn([r,Ds(ne)],r.shape.length-1),u=l}else g=r;const f=je(g),I=ie(Gi(g,f),[p,u]),S=ku(I),x=Math.floor(u/2)+1,v=Gc(S),O=Eu(S),C=ho(v,[x,u-x],v.shape.length-1),U=ho(O,[x,u-x],O.shape.length-1),G=g.shape.slice();return G[g.shape.length-1]=x,ie(Gi(C[0],U[0]),G)}const Fu=z({rfft_:b9});function w9(r){const l=M(r,"x","sqrt"),u={x:l};return Y.runKernelFunc((p,g)=>{const f=p.sqrt(l);return g([l]),f},u,null,Bf)}const ps=z({sqrt_:w9});function L9(r,l){let u=M(r,"a","squaredDifference"),p=M(l,"b","squaredDifference");[u,p]=ft(u,p),it(u.shape,p.shape);const g=(S,x)=>{const v=S.squaredDifference(u,p);return x([u,p]),v},f={a:u,b:p},I={};return Y.runKernelFunc(g,f,null,Gf,I)}const qI=z({squaredDifference_:L9});function S9(r,l){const u=M(r,"x","squeeze");return ie(u,XR(u.shape,l).newShape)}const jI=z({squeeze_:S9});function I9(r,l=0){const u=ig(r,"tensors","stack");if(Z(u.length>=1,()=>"Pass at least one tensor to tf.stack"),u.length===1)return Es(u[0],l);const p=u[0].rank,g=u[0].shape,f=u[0].dtype;Z(l<=p,()=>"Axis must be <= rank of the tensor"),u.forEach(S=>{Zt(g,S.shape,"All tensors passed to stack must have matching shapes"),Z(f===S.dtype,()=>"All tensors passed to stack must have matching dtypes")});const I=u.map(S=>Es(S,l));return yn(I,l)}const qs=z({stack_:I9});function x9(r,l=0){const u=M(r,"x","step"),p={x:u},g={alpha:l};return Y.runKernelFunc(f=>f.step(u,l),p,null,Xf,g)}const da=z({step_:x9});function pa(r,l,u){if(_c(r),l!=null&&l.length!==2)throw new Error("tensor2d() requires shape to have two numbers");const p=mr(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 T9(r,l,u){const p=M(r,"x","unsortedSegmentSum"),g=M(l,"segmentIds","unsortedSegmentSum","int32");Z(Qt(u),()=>"numSegments must be of dtype int");const f={x:p,segmentIds:g},I={numSegments:u},S=(x,v)=>{const O=x.unsortedSegmentSum(p,g,u);return v([g]),O};return Y.runKernelFunc(S,f,null,jf,I)}const KI=z({unsortedSegmentSum_:T9});function A9(r,l=0){const u=M(r,"x","unstack");Z(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},g={axis:l},f=I=>I.unstack(u,l);return Y.runKernelFunc(f,p,null,qf,g)}const _u=z({unstack_:A9});function v9(r,l="euclidean",u=null,p=!1){r=M(r,"x","norm");const g=DO(r,l,u);let f=g.shape;if(p){const I=ut(u,r.shape);f=Qn(g.shape,I)}return ie(g,f)}function DO(r,l,u=null){if(r.rank===0)return Bn(r);if(r.rank!==1&&u===null)return DO(ie(r,[-1]),l,u);if(r.rank===1||typeof u=="number"||Array.isArray(u)&&u.length===1){if(l===1)return Fe(Bn(r),u);if(l===Infinity)return la(Bn(r),u);if(l===-Infinity)return ug(Bn(r),u);if(l==="euclidean"||l===2)return ps(Fe(ua(Bn(r),ke(2,"int32")),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}if(Array.isArray(u)&&u.length===2){if(l===1)return la(Fe(Bn(r),u[0]),u[1]-1);if(l===Infinity)return la(Fe(Bn(r),u[1]),u[0]);if(l===-Infinity)return ug(Fe(Bn(r),u[1]),u[0]);if(l==="fro"||l==="euclidean")return ps(Fe(dt(r),u));throw new Error(`Error in norm: invalid ord value: ${l}`)}throw new Error(`Error in norm: invalid axis: ${u}`)}const pg=z({norm_:v9});function kO(r){return Math.floor(Math.pow(2,Math.ceil(Math.log(r)/Math.log(2))))}function mg(r,l,u){const p=1-r%2,g=new Float32Array(r);for(let f=0;f`Error in conv2dDerFilter: input must be rank 4, but got shape ${S.shape}.`),Z(x.rank===4,()=>`Error in conv2dDerFilter: dy must be rank 4, but got shape ${x.shape}.`),Z(u.length===4,()=>`Error in conv2dDerFilter: filterShape must be length 4, but got ${u}.`);const v=f==="NHWC"?S.shape[3]:S.shape[1],O=f==="NHWC"?x.shape[3]:x.shape[1];Z(v===u[2],()=>`Error in conv2dDerFilter: depth of input ${v}) must match input depth in filter (${u[2]}.`),Z(O===u[3],()=>`Error in conv2dDerFilter: depth of dy (${O}) must match output depth for filter (${u[3]}).`),I!=null&&Z(Qt(g),()=>`Error in conv2dDerFilter: pad must be an integer when using, dimRoundingMode ${I} but got pad ${g}.`);const C=ne=>{const te=1,oe=zc(f),ge=fr(S.shape,u,p,te,g,I,!1,oe);return ne.conv2dDerFilter(S,x,ge)},U={x:S,dy:x},G={strides:p,pad:g,dataFormat:f,dimRoundingMode:I};return Y.runKernelFunc(C,U,null,P2,G)}const fg=z({conv2DBackpropFilter_:N9});function C9(r,l,u,p){let g=r;r.rank===3&&(g=ie(r,[1,r.shape[0],r.shape[1],r.shape[2]]));let f=l;f.rank===3&&(f=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=x=>x.depthwiseConv2DDerFilter(g,f,p),S={x:g,dy:f};return Y.runKernelFunc(I,S,null,q2)}const FO=z({depthwiseConv2dNativeBackpropFilter_:C9});function R9(r,l,u,p){let g=l,f=!1;l.rank===3&&(f=!0,g=ie(l,[1,l.shape[0],l.shape[1],l.shape[2]]));const I=v=>v.depthwiseConv2DDerInput(g,u,p),S={dy:g},x=Y.runKernelFunc(I,S,null,j2);return f?ie(x,[x.shape[1],x.shape[2],x.shape[3]]):x}const _O=z({depthwiseConv2dNativeBackpropInput_:R9});function O9(r){return mg(r,.54,.46)}const WO=z({hammingWindow_:O9});function E9(r){return mg(r,.5,.5)}const gg=z({hannWindow_:E9});function D9(r,l,u,p=!1,g=0){let f=0;const I=[];for(;f+l<=r.size;)I.push(vt(r,f,l)),f+=u;if(p)for(;f`Error in cropAndResize: image must be rank 4,but got rank ${I.rank}.`),Z(S.rank===2&&S.shape[1]===4,()=>`Error in cropAndResize: boxes must be have size [${v},4] but had shape ${S.shape}.`),Z(x.rank===1&&x.shape[0]===v,()=>`Error in cropAndResize: boxInd must be have size [${v}] but had shape ${S.shape}.`),Z(p.length===2,()=>`Error in cropAndResize: cropSize must be of length 2, but got length ${p.length}.`),Z(p[0]>=1&&p[1]>=1,()=>`cropSize must be atleast [1,1], but was ${p}`),Z(g==="bilinear"||g==="nearest",()=>`method must be bilinear or nearest, but was ${g}`);const O=ne=>ne.cropAndResize(I,S,x,p,g,f),C={image:I,boxes:S,boxInd:x},U={method:g,extrapolationValue:f,cropSize:p},G=Y.runKernelFunc(O,C,null,Y2,U);return G}const UO=z({cropAndResize_:F9});function _9(r){const l=M(r,"image","flipLeftRight","float32");Z(l.rank===4,()=>`Error in flipLeftRight: image must be rank 4,but got rank ${l.rank}.`);const u={image:l},p=Y.runKernel(rR,u,{});return p}const BO=z({flipLeftRight_:_9});function W9(r,l,u=0,p=.5){const g=M(r,"image","rotateWithOffset","float32");Z(g.rank===4,()=>`Error in rotateWithOffset: image must be rank 4,but got rank ${g.rank}.`);const f={image:g},I={radians:l,fillValue:u,center:p},S=Y.runKernel(HR,f,I);return S}const MO=z({rotateWithOffset_:W9});function js(r,l,u,p,g,f){p==null&&(p=.5),g==null&&(g=Number.NEGATIVE_INFINITY),f==null&&(f=0);const I=r.shape[0];return u=Math.min(u,I),Z(0<=p&&p<=1,()=>`iouThreshold must be in [0, 1], but was '${p}'`),Z(r.rank===2,()=>`boxes must be a 2D tensor, but was of rank '${r.rank}'`),Z(r.shape[1]===4,()=>`boxes must have 4 columns, but 2nd dimension was ${r.shape[1]}`),Z(l.rank===1,()=>"scores must be a 1D tensor"),Z(l.shape[0]===I,()=>`scores has incompatible shape with boxes. Expected ${I}, but was ${l.shape[0]}`),Z(0<=f&&f<=1,()=>`softNmsSigma must be in [0, 1], but was '${f}'`),{maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f}}function $9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppression"),I=M(l,"scores","nonMaxSuppression"),S=js(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x={maxOutputSize:u,iouThreshold:p,scoreThreshold:g};return Y.runKernelFunc(v=>v.nonMaxSuppression(f,I,u,p,g),{boxes:f,scores:I},null,vR,x)}const PO=z({nonMaxSuppression_:$9});function zO(r,l,u){const p=U9(r,l,u),g=p<0?-(p+1):p;r.splice(g,0,l)}function U9(r,l,u){return M9(r,l,u||B9)}function B9(r,l){return r>l?1:r>>1);const S=u(l,r[f]);S>0?p=f+1:(g=f,I=!S)}return I?p:-p-1}function GO(r,l,u,p,g){return XI(r,l,u,p,g,0).selectedIndices}function VO(r,l,u,p,g,f){return XI(r,l,u,p,g,0,!1,f,!0)}function YO(r,l,u,p,g,f){return XI(r,l,u,p,g,f,!0)}function XI(r,l,u,p,g,f,I=!1,S=!1,x=!1){const v=[];for(let oe=0;oeg&&v.push({score:l[oe],boxIndex:oe,suppressBeginIndex:0});v.sort(HO);const O=f>0?-.5/f:0,C=[],U=[];for(;C.length0;){const oe=v.pop(),{score:ge,boxIndex:fe,suppressBeginIndex:Ae}=oe;if(ge=Ae;--Ve){const rt=P9(r,fe,C[Ve]);if(rt>=p){Te=!0;break}if(oe.score=oe.score*z9(p,O,rt),oe.score<=g)break}oe.suppressBeginIndex=C.length,Te||(oe.score===ge?(C.push(fe),U.push(oe.score)):oe.score>g&&zO(v,oe,HO))}const G=C.length,ne=u-G;S&&ne>0&&(C.push(...new Array(ne).fill(0)),U.push(...new Array(ne).fill(0)));const te={selectedIndices:lo(C,"int32")};return I&&(te.selectedScores=lo(U,"float32")),x&&(te.validOutputs=ke(G,"int32")),te}function P9(r,l,u){const p=r.subarray(l*4,l*4+4),g=r.subarray(u*4,u*4+4),f=Math.min(p[0],p[2]),I=Math.min(p[1],p[3]),S=Math.max(p[0],p[2]),x=Math.max(p[1],p[3]),v=Math.min(g[0],g[2]),O=Math.min(g[1],g[3]),C=Math.max(g[0],g[2]),U=Math.max(g[1],g[3]),G=(S-f)*(x-I),ne=(C-v)*(U-O);if(G<=0||ne<=0)return 0;const te=Math.max(f,v),oe=Math.max(I,O),ge=Math.min(S,C),fe=Math.min(x,U),Ae=Math.max(ge-te,0)*Math.max(fe-oe,0);return Ae/(G+ne-Ae)}function z9(r,l,u){const p=Math.exp(l*u*u);return u<=r?p:0}function HO(r,l){return r.score-l.score||r.score===l.score&&l.boxIndex-r.boxIndex}async function G9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY){const f=M(r,"boxes","nonMaxSuppressionAsync"),I=M(l,"scores","nonMaxSuppressionAsync"),S=js(f,I,u,p,g);u=S.maxOutputSize,p=S.iouThreshold,g=S.scoreThreshold;const x=await Promise.all([f.data(),I.data()]),v=x[0],O=x[1],C=GO(v,O,u,p,g);return f!==r&&f.dispose(),I!==l&&I.dispose(),C}const qO=G9;function V9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=js(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v={boxes:I,scores:S},O={maxOutputSize:u,iouThreshold:p,scoreThreshold:g,softNmsSigma:f},C=Y.runKernel(CR,v,O);return{selectedIndices:C[0],selectedScores:C[1]}}const jO=z({nonMaxSuppressionWithScore_:V9});async function Y9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=0){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=js(I,S,u,p,g,f);u=x.maxOutputSize,p=x.iouThreshold,g=x.scoreThreshold,f=x.softNmsSigma;const v=await Promise.all([I.data(),S.data()]),O=v[0],C=v[1],U=YO(O,C,u,p,g,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),U}const KO=Y9;function H9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppression"),S=M(l,"scores","nonMaxSuppression"),x=js(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,U={boxes:I,scores:S},G={maxOutputSize:v,iouThreshold:O,scoreThreshold:C,padToMaxOutputSize:f},ne=Y.runKernel(NR,U,G);return{selectedIndices:ne[0],validOutputs:ne[1]}}const XO=z({nonMaxSuppressionPadded_:H9});async function q9(r,l,u,p=.5,g=Number.NEGATIVE_INFINITY,f=!1){const I=M(r,"boxes","nonMaxSuppressionAsync"),S=M(l,"scores","nonMaxSuppressionAsync"),x=js(I,S,u,p,g,null),v=x.maxOutputSize,O=x.iouThreshold,C=x.scoreThreshold,[U,G]=await Promise.all([I.data(),S.data()]),ne=VO(U,G,v,O,C,f);return I!==r&&I.dispose(),S!==l&&S.dispose(),ne}const JO=q9;function j9(r,l,u=!1){const p=M(r,"images","resizeBilinear");Z(p.rank===3||p.rank===4,()=>`Error in resizeBilinear: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeBilinear: new shape must 2D, but got shape ${l}.`);let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x=(U,G)=>(G([g]),U.resizeBilinear(g,I,S,u)),v={images:g},O={alignCorners:u,size:l},C=Y.runKernelFunc(x,v,null,Ef,O);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const ZO=z({resizeBilinear_:j9});function K9(r,l,u=!1){const p=M(r,"images","resizeNearestNeighbor");Z(p.rank===3||p.rank===4,()=>`Error in resizeNearestNeighbor: x must be rank 3 or 4, but got rank ${p.rank}.`),Z(l.length===2,()=>`Error in resizeNearestNeighbor: new shape must 2D, but got shape ${l}.`),Z(p.dtype==="float32"||p.dtype==="int32",()=>"`images` must have `int32` or `float32` as dtype");let g=p,f=!1;p.rank===3&&(f=!0,g=ie(p,[1,p.shape[0],p.shape[1],p.shape[2]]));const[I,S]=l,x={images:g},v={alignCorners:u,size:l},O=(U,G)=>(G([g]),U.resizeNearestNeighbor(g,I,S,u)),C=Y.runKernelFunc(O,x,null,Of,v);return f?ie(C,[C.shape[1],C.shape[2],C.shape[3]]):C}const QO=z({resizeNearestNeighbor_:K9});function X9(r,l,u){Z(l%1===0,()=>`bandPart(): numLower must be an integer, got ${l}.`),Z(u%1===0,()=>`bandPart(): numUpper must be an integer, got ${u}.`);const p=M(r,"a","bandPart");Z(p.rank>=2,()=>`bandPart(): Rank must be at least 2, got ${p.rank}.`);const g=p.shape,[f,I]=p.shape.slice(-2);if(!(l<=f))throw new Error(`bandPart(): numLower (${l}) must not be greater than the number of rows (${f}).`);if(!(u<=I))throw new Error(`bandPart(): numUpper (${u}) must not be greater than the number of columns (${I}).`);l<0&&(l=f),u<0&&(u=I);const S=ie(dg(0,f,1,"int32"),[-1,1]),x=dg(0,I,1,"int32"),v=Be(S,x),O=ha(yr(v,ke(+l,"int32")),gr(v,ke(-u,"int32"))),C=Ds([f,I],p.dtype);return ie(qs(_u(ie(p,[-1,f,I])).map(U=>Mn(O,U,C))),g)}const e1=z({bandPart_:X9});function J9(r){let l;if(Array.isArray(r)){l=!1,Z(r!=null&&r.length>0,()=>"Gram-Schmidt process: input must not be null, undefined, or empty");const g=r[0].shape[0];for(let f=1;f`Gram-Schmidt: Non-unique lengths found in the input vectors: (${r[f].shape[0]} vs. ${g})`)}else l=!0,r=ho(r,r.shape[0],0).map(g=>jI(g,[0]));Z(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 g=0;g{let f=p[g];if(g>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 n1(r,l);{const u=r.shape.slice(0,r.shape.length-2).reduce((x,v)=>x*v),p=_u(ie(r,[u,r.shape[r.shape.length-2],r.shape[r.shape.length-1]]),0),g=[],f=[];p.forEach(x=>{const[v,O]=n1(x,l);g.push(v),f.push(O)});const I=ie(qs(g,0),r.shape),S=ie(qs(f,0),r.shape);return[I,S]}}function n1(r,l=!1){return Y.tidy(()=>{Z(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 g=RI(u),f=gi(r);const I=pa([[1]],[1,1]);let S=gi(I);const x=u>=p?p:u;for(let v=0;v{const G=vt(f,[v,v],[u-v,1]),ne=pg(G),te=vt(f,[v,v],[1,1]),oe=Mn(yi(te,0),pa([[-1]]),pa([[1]])),ge=Be(te,ae(oe,ne)),fe=Pe(G,ge);fe.shape[0]===1?S=gi(I):S=yn([I,vt(fe,[1,0],[fe.shape[0]-1,fe.shape[1]])],0);const Ae=yt(Pe(dn(oe,ge),ne)),Te=vt(f,[v,0],[u-v,p]),Ve=ae(Ae,S),rt=$t(S);if(v===0)f=Be(Te,dn(Ve,dn(rt,Te)));else{const Kt=Be(Te,dn(Ve,dn(rt,Te)));f=yn([vt(f,[0,0],[v,p]),Kt],0)}const Ct=$t(Ve),Ut=vt(g,[0,v],[u,g.shape[1]-v]);if(v===0)g=Be(Ut,dn(dn(Ut,S),Ct));else{const Kt=Be(Ut,dn(dn(Ut,S),Ct));g=yn([vt(g,[0,0],[u,v]),Kt],1)}return[S,f,g]}),xO([O,C,U])}return!l&&u>p&&(g=vt(g,[0,0],[u,p]),f=vt(f,[0,0],[p,p])),[g,f]})}const s1=z({qr_:Z9});var jt;(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"})(jt||(jt={}));function Q9(r,l,u=jt.SUM_BY_NONZERO_WEIGHTS){const p=M(r,"losses","computeWeightedLoss");let g=null;l!=null&&(g=M(l,"weights","computeWeightedLoss"));const f=g==null?p:ae(p,g);if(u===jt.NONE)return f;if(u===jt.SUM)return Fe(f);if(u===jt.MEAN){if(g==null)return UI(f);{const I=p.size/g.size,S=Pe(Fe(f),Fe(g));return I>1?Pe(S,ke(I)):S}}if(u===jt.SUM_BY_NONZERO_WEIGHTS){if(g==null)return Pe(Fe(f),ke(p.size));{const I=ae(g,Yi(p.shape)),S=Le(Fe(MI(I,ke(0))),"float32");return Pe(Fe(f),S)}}throw Error(`Unknown reduction: ${u}`)}const Tn=z({computeWeightedLoss_:Q9});function eZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","absoluteDifference"),f=M(l,"predictions","absoluteDifference");let I=null;u!=null&&(I=M(u,"weights","absoluteDifference")),Zt(g.shape,f.shape,"Error in absoluteDifference: ");const S=Bn(Be(g,f));return Tn(S,I,p)}const i1=z({absoluteDifference_:eZ});function tZ(r,l,u,p,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","cosineDistance"),I=M(l,"predictions","cosineDistance");let S=null;p!=null&&(S=M(p,"weights","cosineDistance")),Zt(f.shape,I.shape,"Error in cosineDistance: ");const x=ke(1),v=Be(x,Fe(ae(f,I),u,!0));return Tn(v,S,g)}const r1=z({cosineDistance_:tZ});function nZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){let g=M(r,"labels","hingeLoss");const f=M(l,"predictions","hingeLoss");let I=null;u!=null&&(I=M(u,"weights","hingeLoss")),Zt(g.shape,f.shape,"Error in hingeLoss: ");const S=ke(1);g=Be(ae(ke(2),g),S);const x=Du(Be(S,ae(g,f)));return Tn(x,I,p)}const o1=z({hingeLoss_:nZ});function sZ(r,l,u,p=1,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","huberLoss"),I=M(l,"predictions","huberLoss");let S=null;u!=null&&(S=M(u,"weights","huberLoss")),Zt(f.shape,I.shape,"Error in huberLoss: ");const x=ke(p),v=Bn(Be(I,f)),O=BI(v,x),C=Be(v,O),U=Lt(ae(ke(.5),dt(O)),ae(x,C));return Tn(U,S,g)}const a1=z({huberLoss_:sZ});function iZ(r,l,u,p=1e-7,g=jt.SUM_BY_NONZERO_WEIGHTS){const f=M(r,"labels","logLoss"),I=M(l,"predictions","logLoss");let S=null;u!=null&&(S=M(u,"weights","logLoss")),Zt(f.shape,I.shape,"Error in logLoss: ");const x=ke(1),v=ke(p),O=yt(ae(f,co(Lt(I,v)))),C=ae(Be(x,f),co(Lt(Be(x,I),v))),U=Be(O,C);return Tn(U,S,g)}const c1=z({logLoss_:iZ});function rZ(r,l,u,p=jt.SUM_BY_NONZERO_WEIGHTS){const g=M(r,"labels","meanSquaredError"),f=M(l,"predictions","meanSquaredError");let I=null;u!=null&&(I=M(u,"weights","meanSquaredError")),Zt(g.shape,f.shape,"Error in meanSquaredError: ");const S=qI(g,f);return Tn(S,I,p)}const l1=z({meanSquaredError_:rZ});function oZ(r,l){const u=M(r,"labels","sigmoidCrossEntropyWithLogits"),p=M(l,"logits","sigmoidCrossEntropyWithLogits");Zt(u.shape,p.shape,"Error in sigmoidCrossEntropyWithLogits: ");const g=Du(p),f=ae(p,u),I=_I(Pn(yt(Bn(p))));return Lt(Be(g,f),I)}function aZ(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"multiClassLabels","sigmoidCrossEntropy");const I=M(l,"logits","sigmoidCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","sigmoidCrossEntropy")),Zt(f.shape,I.shape,"Error in sigmoidCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(.5);f=Lt(ae(f,Be(O,v)),ae(C,v))}const x=oZ(f,I);return Tn(x,S,g)}const h1=z({sigmoidCrossEntropy_:aZ});function cZ(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=hg((g,f,I)=>{const S=!0,x=WI(f,[u],S),v=Be(Le(f,"float32"),x);I([g,v]);const O=yt(ae(v,g)),C=Fe(O,[u]),U=(G,ne)=>{const[te,oe]=ne,ge=Qn(G.shape,[u]);return[ae(ie(G,ge),Be(Le(te,"float32"),Pn(oe))),ae(ie(G,ge),Be(Pn(oe),Le(te,"float32")))]};return{value:C,gradFunc:U}});return p(r,l)}function lZ(r,l,u,p=0,g=jt.SUM_BY_NONZERO_WEIGHTS){let f=M(r,"onehotLabels","softmaxCrossEntropy");const I=M(l,"logits","softmaxCrossEntropy");let S=null;if(u!=null&&(S=M(u,"weights","softmaxCrossEntropy")),Zt(f.shape,I.shape,"Error in softmaxCrossEntropy: "),p>0){const v=ke(p),O=ke(1),C=ke(f.shape[1]);f=Lt(ae(f,Be(O,v)),Pe(v,C))}const x=cZ(f,I);return Tn(x,S,g)}const u1=z({softmaxCrossEntropy_:lZ});const VTe={fft:ku,ifft:Yc,rfft:Fu,irfft:HI},KTe={hammingWindow:WO,hannWindow:gg,frame:yg,stft:$O},d1={flipLeftRight:BO,resizeNearestNeighbor:QO,resizeBilinear:ZO,rotateWithOffset:MO,cropAndResize:UO,nonMaxSuppression:PO,nonMaxSuppressionAsync:qO,nonMaxSuppressionWithScore:jO,nonMaxSuppressionWithScoreAsync:KO,nonMaxSuppressionPadded:XO,nonMaxSuppressionPaddedAsync:JO},hAe={bandPart:e1,gramSchmidt:t1,qr:s1},LAe={absoluteDifference:i1,computeWeightedLoss:Tn,cosineDistance:r1,hingeLoss:o1,huberLoss:a1,logLoss:c1,meanSquaredError:l1,sigmoidCrossEntropy:h1,softmaxCrossEntropy:u1};const p1=1.7580993408473768,m1=1.0507009873554805;const f1={kernelName:ef,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,da(Le(u,"float32"),-1))}}};const g1={kernelName:T2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=dt(Le(u,"float32")),g=ps(Be(ke(1),p));return yt(Pe(r,g))}}}};const y1={kernelName:A2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Be(dt(Le(u,"float32")),1));return Pe(r,p)}}}};const b1={kernelName:kc,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=Nt(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=Nt(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,p.shape)};return{a:f,b:I}}};const w1={kernelName:v2,saveAllInputs:!0,gradFunc:(r,l)=>{const u={};return l.forEach((p,g)=>{u[g]=()=>r.clone()}),u}};const L1={kernelName:N2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>je(u)}}};const S1={kernelName:C2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>je(u)}}};const I1={kernelName:R2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ps(Be(ke(1),dt(Le(u,"float32")))))}}};const x1={kernelName:O2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=ps(Lt(ke(1),dt(Le(u,"float32"))));return Pe(r,p)}}}};const T1={kernelName:k2,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Lt(dt(u),dt(p));let x=ae(r,Pe(p,S));const v=Nt(u.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,u.shape)},I=()=>{const S=Lt(dt(u),dt(p));let x=yt(ae(r,Pe(u,S)));const v=Nt(p.shape,g);return v.length>0&&(x=Fe(x,v)),ie(x,p.shape)};return{a:f,b:I}}};const A1={kernelName:E2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(dt(Le(u,"float32")),1))}}};const v1={kernelName:D2,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Be(ke(1),dt(Le(u,"float32"))))}}};function hZ(r,l,u,p,g=[1,1,1],f,I){const S=M(r,"dy","avgPool3dBackprop"),x=M(l,"input","avgPool3dBackprop");let v=S,O=x,C=!1;x.rank===4&&(C=!0,v=ie(S,[1,S.shape[0],S.shape[1],S.shape[2],S.shape[3]]),O=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]])),Z(v.rank===5,()=>`Error in avgPool3dBackprop: dy must be rank 5 but got rank ${v.rank}.`),Z(O.rank===5,()=>`Error in avgPool3dBackprop: input must be rank 5 but got rank ${O.rank}.`),Z(ao(p,g),()=>`Error in avgPool3dBackprop: Either strides or dilations must be 1. Got strides ${p} and dilations '${g}'`),I!=null&&Z(Qt(f),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const U=oe=>{const ge=cg(O.shape,u,p,g,f,I);return oe.avgPool3dBackprop(v,O,ge)},G={dy:v,input:O},ne={filterSize:u,strides:p,dilations:g,pad:f,dimRoundingMode:I},te=Y.runKernelFunc(U,G,null,$2,ne);return C?ie(te,[te.shape[1],te.shape[2],te.shape[3],te.shape[4]]):te}const N1=z({avgPool3dBackprop_:hZ});const C1={kernelName:W2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,dilations:I,pad:S,dimRoundingMode:x}=u,v=I==null?[1,1,1]:I;return{x:()=>N1(r,p,g,f,v,S,x)}}};function uZ(r,l,u,p,g){const f=M(r,"dy","avgPoolBackprop"),I=M(l,"input","avgPoolBackprop");Z(I.rank===f.rank,()=>`Rank of input (${I.rank}) does not match rank of dy (${f.rank})`);let S=I,x=f,v=!1;I.rank===3&&(v=!0,S=ie(I,[1,I.shape[0],I.shape[1],I.shape[2]]),x=ie(f,[1,f.shape[0],f.shape[1],f.shape[2]])),Z(x.rank===4,()=>`Error in avgPoolBackprop: dy must be rank 4 but got rank ${x.rank}.`),Z(S.rank===4,()=>`Error in avgPoolBackprop: input must be rank 4 but got rank ${S.rank}.`);const O=ne=>{const te=ag(S.shape,u,p,1,g);return ne.avgPoolBackprop(x,S,te)},C={dy:x,input:S},U={filterSize:u,strides:p,pad:g},G=Y.runKernelFunc(O,C,null,_2,U);return v?ie(G,[G.shape[1],G.shape[2],G.shape[3]]):G}const R1=z({avgPoolBackprop_:uZ});const O1={kernelName:F2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{filterSize:g,strides:f,pad:I}=u;return{x:()=>R1(r,p,g,f,I)}}};const E1={kernelName:tf,inputsToSave:["a","b"],gradFunc:(r,l,u)=>{const[p,g]=l,{transposeA:f,transposeB:I}=u;return!f&&!I?{a:()=>dn(r,g,!1,!0),b:()=>dn(p,r,!0,!1)}:!f&&I?{a:()=>dn(r,g,!1,!1),b:()=>dn(r,p,!0,!1)}:f&&!I?{a:()=>dn(g,r,!1,!0),b:()=>dn(p,r,!1,!1)}:{a:()=>dn(g,r,!0,!0),b:()=>dn(r,p,!0,!0)}}};const D1={kernelName:nf,gradFunc:(r,l,u)=>{const{blockShape:p,crops:g}=u;return{x:()=>zI(r,p,g)}}};const k1={kernelName:sf,gradFunc:(r,l,u)=>{const p=u,g=p.inputShape,f=p.shape,I=Array.from(f);for(let x=g.length-1;x>=0;x--)if(g[x]===f[x])I[x]=1;else if(g[x]!==1)throw new Error(`broadcastTo(): [${g}] cannot be broadcast to [${f}].`);const S=[];for(let x=0;x1&&S.push(x);return{x:()=>Fe(r,S,!0)}}};const F1={kernelName:Fc,gradFunc:r=>({x:()=>r.clone()})};const _1={kernelName:U2,gradFunc:r=>({x:()=>je(r)})};const W1={kernelName:B2,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{clipValueMin:g,clipValueMax:f}=u;return{x:()=>Mn(ha(gr(p,g),yr(p,f)),r,je(r))}}};const $1={kernelName:rf,saveAllInputs:!0,gradFunc:(r,l,u)=>{const p=l.map(x=>x.shape),{axis:g}=u,f=ut(g,l[0].shape)[0],I=p.map(x=>x[f]),S=ho(r,I,f);return S.map(x=>()=>x)}};const U1={kernelName:of,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{dilations:f,strides:I,pad:S,dataFormat:x}=u;return Z(oo(f),()=>`Error in gradient of conv2D: dilation rates greater than 1 are not yet supported in gradients. Got dilations '${f}'`),{x:()=>CO(p.shape,r,g,I,S,x),filter:()=>fg(p,r,g.shape,I,S,x)}}};const B1={kernelName:af,inputsToSave:["dy","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,{strides:f,pad:I,dataFormat:S,dimRoundingMode:x}=u;return{dy:()=>AI(r,g,f,I,S,1,x),filter:()=>fg(r,p,g.shape,f,I,S,x)}}};function dZ(r,l,u,p,g){let f=r;r.rank===4&&(f=ie(r,[1,r.shape[0],r.shape[1],r.shape[2],r.shape[3]]));let I=l;I.rank===4&&(I=ie(l,[1,l.shape[0],l.shape[1],l.shape[2],l.shape[3]])),Z(f.rank===5,()=>`Error in conv3dDerFilter: input must be rank 5, but got shape ${f.shape}.`),Z(I.rank===5,()=>`Error in conv3dDerFilter: dy must be rank 5, but got shape ${I.shape}.`),Z(u.length===5,()=>`Error in conv3dDerFilter: filterShape must be length 5, but got ${u}.`),Z(f.shape[4]===u[3],()=>`Error in conv3dDerFilter: depth of input ${f.shape[4]}) must match input depth in filter (${u[3]}.`),Z(I.shape[4]===u[4],()=>`Error in conv3dDerFilter: depth of dy (${I.shape[4]}) must match output depth for filter (${u[4]}).`);const S=O=>{const C=1,U=Ru(f.shape,u,p,C,g);return O.conv3dDerFilter(f,I,U)},x={x:f,y:I},v={strides:p,pad:g};return Y.runKernelFunc(S,x,null,G2,v)}const M1=z({conv3DBackpropFilter_:dZ});const P1={kernelName:z2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f}=u;Z(oo(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:()=>RO(I.shape,r,S,g,f),filter:()=>M1(I,r,S.shape,g,f)}}};const z1={kernelName:cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(yt(VI(Le(u,"float32"))),r)}}};const G1={kernelName:lf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(YI(Le(u,"float32")),r)}}};const V1={kernelName:hf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{axis:g,exclusive:f,reverse:I}=u;return{x:()=>{const S=ds([g],p.rank);let x=NI(r,g,f,!I);return S!=null&&(x=$t(x,S)),x}}}};const Y1={kernelName:H2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const{dilations:p,strides:g,pad:f,dimRoundingMode:I}=u,S=p==null?[1,1]:p;Z(oo(S),()=>`Error in gradient of depthwiseConv2dNative: dilation rates greater than 1 are not yet supported. Got dilations '${S}'`);const[x,v]=l;Z(x.rank===4,()=>`Error in gradient of depthwiseConv2dNative: input must be rank 4, but got rank ${x.rank}.`),Z(v.rank===4,()=>`Error in gradient of depthwiseConv2dNative: filter must be rank 4, but got rank ${v.rank}.`),Z(x.shape[3]===v.shape[2],()=>`Error in gradient of depthwiseConv2d: number of input channels (${x.shape[3]}) must match the inChannels dimension in filter ${v.shape[2]}.`),Z(ao(g,S),()=>`Error in gradient of depthwiseConv2d: Either strides or dilations must be 1. Got strides ${g} and dilations '${S}'.`),I!=null&&Z(Qt(f),()=>`Error in depthwiseConv2d: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=fr(x.shape,v.shape,g,S,f,I,!0);return{x:()=>_O(x.shape,r,v,O),filter:()=>FO(x,r,v.shape,O)}}};const H1={kernelName:K2,inputsToSave:["x","filter"],gradFunc:(r,l,u)=>{const[p,g]=l,f={x:p,filter:g,dy:r},I={x:p,filter:g,dy:r};return{x:()=>Y.runKernel(X2,f,u),filter:()=>Y.runKernel(J2,I,u)}}};const q1={kernelName:uf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=Nt(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=dt(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const j1={kernelName:Z2,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l,p=f=>f.eluDer(r,u),g={dy:r,y:u};return{x:()=>Y.runKernelFunc(p,g,null,Q2)}}};const K1={kernelName:eR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(Pn(yt(dt(u))),2/Math.sqrt(Math.PI));return{x:()=>ae(r,p)}}};const X1={kernelName:df,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,u)}}};const J1={kernelName:nR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Pn(u))}}};const Z1={kernelName:pf,gradFunc:r=>({x:()=>je(r)})};const Q1={kernelName:mf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Pe(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{let S=ae(r,Le(u,"float32"));const x=Nt(p.shape,g);x.length>0&&(S=ie(Fe(S,x),p.shape));const v=dt(p);return yt(Pe(S,Le(v,"float32")))};return{a:f,b:I}}};const eE={kernelName:oR,inputsToSave:["x","mean","variance","scale"],gradFunc:(r,l,u)=>{const{varianceEpsilon:p}=u,[g,f,I,S]=l,x=S==null?ke(1):S,v=Nt(f.shape,g.shape),O=[];if(f.rank===1){for(let Te=0;Tef.rank===1?ie(ae(ae(r,ca(ie(G,[1,1,1,f.shape[0]]),O)),x),g.shape):ie(ae(ae(r,G),x),g.shape),oe=()=>{let Te=ae(ae(G,ke(-1)),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},ge=()=>{let Te=ae(ae(ne,C),U);return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)},fe=()=>{const Te=ae(C,G);let Ve=ae(r,Te);return f.rank===1&&(Ve=Fe(Ve,v)),ie(Ve,f.shape)},Ae=()=>{let Te=r;return f.rank===1&&(Te=Fe(Te,v)),ie(Te,f.shape)};return{x:te,mean:oe,variance:ge,scale:fe,offset:Ae}}};const sE={kernelName:ff,inputsToSave:["x","indices"],gradFunc:(r,l,u)=>{const[p,g]=l,{axis:f}=u,I=ut(f,p.shape)[0],S=()=>{const x=p.shape,v=g.size,O=x.slice(0,I),C=O.length,U=x.slice(f,x.length).slice(1),G=U.length,ne=tE(0,C),te=tE(C+1,C+1+G),oe=nE([O,[v],U]),ge=ie(r,oe),fe=ie(g,[v]),Ae=nE([[C],ne,te]),Te=$t(ge,Ae);let Ve=KI(Te,fe,p.shape[I]);const rt=Mc(Ae);return Ve=$t(Ve,rt),Ve};return{x:S,indices:()=>g}}};function tE(r,l){const u=[];for(let p=r;p{const[u,p]=l;return{a:()=>je(u),b:()=>je(p)}}};const rE={kernelName:yf,gradFunc:r=>({x:()=>Le(r,"float32")})};const oE={kernelName:hR,gradFunc:r=>({x:()=>je(r)})};const aE={kernelName:uR,gradFunc:r=>({x:()=>je(r)})};const cE={kernelName:dR,gradFunc:r=>({x:()=>je(r)})};const lE={kernelName:wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Lt(u,1))}}};const hE={kernelName:bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,Le(u,"float32"))}}};const uE={kernelName:yR,inputsToSave:[],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{axis:g}=u;return{logits:()=>{const f=!0,I=Pn(p);return Be(r,ae(Fe(r,g,f),I))}}}};function pZ(r,l,u,p=5,g=1,f=1,I=.5){const S=O=>O.LRNGrad(u,r,l,p,g,f,I),x={x:r,y:l,dy:u},v={depthRadius:p,bias:g,alpha:f,beta:I};return Y.runKernelFunc(S,x,null,wR,v)}const dE=z({localResponseNormalizationBackprop_:pZ});const pE={kernelName:bR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{depthRadius:f,bias:I,alpha:S,beta:x}=u;return{x:()=>dE(p,g,r,f,I,S,x)}}};function bg(r,l,u,p,g){return l.rank{const f=ae(r,Le(CI(u,l),r.dtype));return g==null?f:$t(f,g)}}}const JI={kernelName:Lf,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{reductionIndices:g}=p,[f,I]=l,S=ut(g,f.shape),x=ds(S,f.rank),v=bg(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=$t(O)),O}}}};const mE={kernelName:Sf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(gr(u,p),"float32")),f=()=>ae(r,Le(FI(u,p),"float32"));return{a:g,b:f}}};function mZ(r,l,u,p,g,f=[1,1,1],I,S){const x=M(r,"dy","maxPool3dBackprop"),v=M(l,"input","maxPool3dBackprop"),O=M(u,"output","maxPool3dBackprop");let C=x,U=v,G=O,ne=!1;v.rank===4&&(ne=!0,C=ie(x,[1,x.shape[0],x.shape[1],x.shape[2],x.shape[3]]),U=ie(v,[1,v.shape[0],v.shape[1],v.shape[2],v.shape[3]]),G=ie(O,[1,O.shape[0],O.shape[1],O.shape[2],O.shape[3]])),Z(C.rank===5,()=>`Error in maxPool3dBackprop: dy must be rank 5 but got rank ${C.rank}.`),Z(U.rank===5,()=>`Error in maxPool3dBackprop: input must be rank 5 but got rank ${U.rank}.`),Z(G.rank===5,()=>`Error in maxPool3dBackprop: output must be rank 5 but got rank ${G.rank}.`),Z(ao(g,f),()=>`Error in maxPool3dBackprop: Either strides or dilations must be 1. Got strides ${g} and dilations '${f}'`),S!=null&&Z(Qt(I),()=>`Error in maxPool3dBackprop: pad must be an integer when using, dimRoundingMode ${S} but got pad ${I}.`);const te=Ae=>{const Te=cg(U.shape,p,g,f,I,S);return Ae.maxPool3dBackprop(C,U,G,Te)},oe={dy:C,input:U,output:G},ge={filterSize:p,strides:g,dilations:f,pad:I,dimRoundingMode:S},fe=Y.runKernelFunc(te,oe,null,xR,ge);return ne?ie(fe,[fe.shape[1],fe.shape[2],fe.shape[3],fe.shape[4]]):fe}const fE=z({maxPool3dBackprop_:mZ});const gE={kernelName:IR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,dilations:S,pad:x,dimRoundingMode:v}=u,O=S==null?[1,1,1]:S;return{x:()=>fE(r,p,g,f,I,O,x,v)}}};function fZ(r,l,u,p,g,f,I){const S=M(r,"dy","maxPoolBackprop"),x=M(l,"input","maxPoolBackprop"),v=M(u,"output","maxPoolBackprop");Z(x.rank===S.rank,()=>`Rank of input (${x.rank}) does not match rank of dy (${S.rank})`),Z(S.rank===4,()=>`Error in maxPoolBackprop: dy must be rank 4 but got rank ${S.rank}.`),Z(x.rank===4,()=>`Error in maxPoolBackprop: input must be rank 4 but got rank ${x.rank}.`),I!=null&&Z(Qt(f),()=>`Error in maxPoolBackprop: pad must be an integer when using, dimRoundingMode ${I} but got pad ${f}.`);const O=G=>{const ne=ag(x.shape,p,g,1,f,I);return G.maxPoolBackprop(S,x,v,ne)},C={dy:S,input:x,output:v},U={filterSize:p,strides:g,pad:f,dimRoundingMode:I};return Y.runKernelFunc(O,C,null,SR,U)}const yE=z({maxPoolBackprop_:fZ});const bE={kernelName:LR,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p,g]=l,{filterSize:f,strides:I,pad:S}=u;return{x:()=>yE(r,p,g,f,I,S)}}};const wE={kernelName:If,inputsToSave:["x"],outputsToSave:[!0],gradFunc:(r,l,u)=>{const p=u,{axis:g}=p,[f,I]=l,S=ut(g,f.shape),x=ds(S,f.rank),v=bg(r,I,f,S,x);return{x:()=>{let O=v.x();return x!=null&&(O=$t(O)),O}}}};const LE={kernelName:xf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=()=>ae(r,Le(yr(u,p),"float32")),f=()=>ae(r,Le(yi(u,p),"float32"));return{a:g,b:f}}};const SE={kernelName:TR,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=Nt(u.shape,g);return S.length>0?ie(Fe(r,S),u.shape):r},I=()=>{const S=ae(r,yt(EI(Pe(u,p)))),x=Nt(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const IE={kernelName:Tf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{const S=ae(r,Le(p,"float32")),x=Nt(u.shape,g);return x.length>0?ie(Fe(S,x),u.shape):S},I=()=>{const S=ae(r,Le(u,"float32")),x=Nt(p.shape,g);return x.length>0?ie(Fe(S,x),p.shape):S};return{a:f,b:I}}};const xE={kernelName:Af,gradFunc:r=>({x:()=>yt(r)})};const TE={kernelName:OR,inputsToSave:["indices"],gradFunc:(r,l)=>{const u=l[0];return{indices:()=>Ds(u.shape,"float32")}}};const AE={kernelName:RR,gradFunc:r=>({x:()=>je(r)})};const ZI={kernelName:vf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const p=l[0],{paddings:g}=u,f=g.map(I=>I[0]);return{x:()=>vt(r,f,p.shape)}}};const vE={kernelName:Nf,inputsToSave:["a","b"],outputsToSave:[!0],gradFunc:(r,l)=>{const[u,p,g]=l,f=u,I=p,S=it(f.shape,I.shape),x=()=>{const O=Le(I,"float32");let C=ae(r,ae(O,ua(f,Be(O,ke(1)))));const U=Nt(f.shape,S);return U.length>0&&(C=Fe(C,U)),ie(C,f.shape)},v=()=>{const O=yi(f,0),C=Mn(O,co(f),je(f));let U=ae(r,ae(g,C));const G=Nt(I.shape,S);return G.length>0&&(U=Fe(U,G)),ie(U,I.shape)};return{a:x,b:v}}};const NE={kernelName:ER,inputsToSave:["x","alpha"],gradFunc:(r,l)=>{const[u,p]=l,g=yi(u,0);return{x:()=>Mn(g,r,ae(r,p)),alpha:()=>{let f=Mn(g,je(r),ae(r,u));const I=Nt(p.shape,r.shape);return I.length>0&&(f=Fe(f,I)),ie(f,p.shape)}}}};const CE={kernelName:FR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,yt(dt(u)))}}};const RE={kernelName:$R,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l,p=ae(yr(u,6),da(u));return{x:()=>ae(r,Le(p,"float32"))}}};const OE={kernelName:Cf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,Le(da(u),"float32"))}}};const EE={kernelName:Rf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ie(r,u.shape)}}};const DE={kernelName:Ef,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeBilinearBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,WR,u);return{images:I}}};const kE={kernelName:Of,inputsToSave:["images"],gradFunc:(r,l,u)=>{const[p]=l,g=S=>{const{alignCorners:x}=u;return S.resizeNearestNeighborBackprop(r,p,x)},f={images:p},I=()=>Y.runKernelFunc(g,f,null,_R,u);return{images:I}}};const FE={kernelName:Df,gradFunc:(r,l,u)=>{const{dims:p}=u,g=ut(p,r.shape);return{x:()=>Vc(r,g)}}};const _E={kernelName:UR,gradFunc:r=>({x:()=>je(r)})};const WE={kernelName:kf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>yt(Pe(r,ae(ua(u,1.5),2)))}}};const $E={kernelName:Ff,inputsToSave:["condition"],gradFunc:(r,l)=>{const[u]=l;return{condition:()=>Le(je(u),"float32"),t:()=>ae(r,Le(u,r.dtype)),e:()=>ae(r,Le($I(u),r.dtype))}}};const UE={kernelName:BR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>{const p=yi(u,ke(0)),g=ke(p1),f=ke(m1),I=ae(r,f),S=ae(ae(r,g),Pn(Le(u,"float32")));return Mn(p,I,S)}}}};const BE={kernelName:Uf,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(u,Be(ke(1),u)))}}};const ME={kernelName:MR,gradFunc:r=>({x:()=>je(r)})};const PE={kernelName:Wf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Ou(Le(u,"float32")),r)}}};const zE={kernelName:$f,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(vI(Le(u,"float32")),r)}}};const GE={kernelName:_f,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{begin:g,size:f}=u,I=p.shape,[S,x]=rg(p,g,f),v=[];for(let O=0;OPI(r,v)}}};const VE={kernelName:zR,outputsToSave:[!0],gradFunc:(r,l,u)=>{const[p]=l,{dim:g}=u,f=!0,I=ae(r,p);return{logits:()=>Be(I,ae(Fe(I,[g],f),p))}}};const YE={kernelName:PR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,xI(u))}}};const QI={kernelName:Pf,gradFunc:(r,l,u)=>{const{blockShape:p,paddings:g}=u;return{x:()=>TI(r,p,g)}}};const ex={kernelName:zf,gradFunc:(r,l,u)=>{const{axis:p}=u;return{x:()=>yn(r,p)}}};const HE={kernelName:Bf,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,ae(ps(Le(u,"float32")),2))}}};const qE={kernelName:GR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(r,ae(Le(u,"float32"),2))}}};const jE={kernelName:Gf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=ke(2),f=()=>ae(r,ae(g,Be(u,p))),I=()=>ae(r,ae(g,Be(p,u)));return{a:f,b:I}}};const KE={kernelName:Xf,gradFunc:r=>({x:()=>je(r)})};const XE={kernelName:Vf,inputsToSave:["a","b"],gradFunc:(r,l)=>{const[u,p]=l,g=it(u.shape,p.shape),f=()=>{let S=r;const x=Nt(u.shape,g);return x.length>0&&(S=Fe(S,x)),ie(S,u.shape)},I=()=>{let S=r;const x=Nt(p.shape,g);return x.length>0&&(S=Fe(S,x)),ie(yt(S),p.shape)};return{a:f,b:I}}};const JE={kernelName:Mf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,g=p.shape.slice(),{axis:f}=u,I=ut(f,p.shape);I.forEach(v=>{g[v]=1});const S=ie(r,g),x=ae(S,Yi(p.shape,"float32"));return{x:()=>x}}};const ZE={kernelName:VR,inputsToSave:["x"],gradFunc:(r,l)=>{const[u]=l;return{x:()=>Pe(r,dt(Ou(u)))}}};const QE={kernelName:YR,outputsToSave:[!0],gradFunc:(r,l)=>{const[u]=l;return{x:()=>ae(Be(ke(1),dt(u)),r)}}};const eD={kernelName:Yf,inputsToSave:["x"],gradFunc:(r,l,u)=>{const[p]=l,{reps:g}=u,f=()=>{let I=je(p);if(p.rank===1)for(let S=0;S{const p=u,{perm:g}=p,f=Mc(g);return{x:()=>$t(r,f)}}};const nD={kernelName:qf,gradFunc:(r,l,u)=>{const p=u,{axis:g}=p;return{value:()=>qs(r,g)}}};const sD={kernelName:jf,inputsToSave:["segmentIds"],gradFunc:(r,l)=>{const[u]=l,p=()=>gZ(r,u);return{x:p}}};function gZ(r,l){const u=kI(l,je(l)),p=DI(r,u);let g=gr(l,ke(0,"int32"));const f=p.rank-g.rank;for(let S=0;S({x:()=>je(r)})};const yZ=[f1,g1,y1,b1,w1,L1,S1,I1,x1,T1,A1,v1,C1,O1,E1,D1,k1,F1,_1,W1,$1,B1,U1,P1,z1,G1,V1,Y1,H1,q1,j1,K1,X1,J1,Q1,Z1,eE,sE,iE,rE,oE,aE,cE,lE,hE,uE,pE,JI,JI,mE,gE,bE,wE,LE,SE,IE,xE,TE,AE,ZI,ZI,vE,NE,CE,RE,OE,EE,DE,kE,FE,_E,WE,$E,UE,BE,ME,PE,zE,GE,VE,YE,QI,QI,ex,ex,HE,jE,qE,KE,XE,JE,ZE,QE,eD,tD,nD,sD,iD];for(const r of yZ)jR(r);function Gm(r,l,u=!1){const{Image:p,Canvas:g}=mt.getEnv();if(!(r instanceof p||r instanceof g))throw new Error("imageToSquare - expected arg0 to be HTMLImageElement | HTMLCanvasElement");const f=to(r),I=l/Math.max(f.height,f.width),S=I*f.width,x=I*f.height,v=ea({width:l,height:l}),O=r instanceof g?r:Nc(r),C=Math.abs(S-x)/2,U=u&&S{if(dr(u)){this._imageTensors[p]=u,this._inputDimensions[p]=u.shape;return}if(Cs(u)){const f=u.shape[0];if(f!==1)throw new Error(`NetInput - tf.Tensor4D with batchSize ${f} passed, but not supported in input array`);this._imageTensors[p]=u,this._inputDimensions[p]=u.shape.slice(1);return}const g=u instanceof mt.getEnv().Canvas?u:Nc(u);this._canvases[p]=g,this._inputDimensions[p]=[g.height,g.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 Bi(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 HS({width:l,height:u},this.inputSize)}toBatchTensor(r,l=!0){return this._inputSize=r,IO(()=>{const u=Bi(this.batchSize,0,1).map(g=>{const f=this.getInput(g);if(f instanceof xn){let I=Cs(f)?f:f.expandDims();return I=Nm(I,l),(I.shape[1]!==r||I.shape[2]!==r)&&(I=d1.resizeBilinear(I,[r,r])),I.as3D(r,r,3)}if(f instanceof mt.getEnv().Canvas)return LI.fromPixels(Gm(f,r,l));throw new Error(`toBatchTensor - at batchIdx ${g}, expected input to be instanceof tf.Tensor or instanceof HTMLCanvasElement, instead have ${f}`)}),p=qs(u.map(g=>Le(g,"float32"))).as4D(this.batchSize,r,r,3);return p})}}async function Tt(r){if(r instanceof hr)return r;let l=Array.isArray(r)?r:[r];if(!l.length)throw new Error("toNetInput - empty array passed as input");const u=g=>Array.isArray(r)?` at input index ${g}:`:"",p=l.map(eo);return p.forEach((g,f)=>{if(!bu(g)&&!dr(g)&&!Cs(g))throw typeof l[f]=="string"?new Error(`toNetInput -${u(f)} string passed, but could not resolve HTMLElement for element id ${l[f]}`):new Error(`toNetInput -${u(f)} expected media to be of type HTMLImageElement | HTMLVideoElement | HTMLCanvasElement | tf.Tensor3D, or to be an element id`);if(Cs(g)){const I=g.shape[0];if(I!==1)throw new Error(`toNetInput -${u(f)} tf.Tensor4D with batchSize ${I} passed, but not supported in input array`)}}),await Promise.all(p.map(g=>bu(g)&&qm(g))),new hr(p,Array.isArray(r))}async function Zo(r,l){const{Canvas:u}=mt.getEnv();let p=r;if(!(r instanceof u)){const I=await Tt(r);if(I.batchSize>1)throw new Error("extractFaces - batchSize > 1 not supported");const S=I.getInput(0);p=S instanceof u?S:await Vm(S)}const g=Un(p),f=l.map(I=>I instanceof Wt?I.forSize(p.width,p.height).box.floor():I).map(I=>I.clipAtImageBorders(p.width,p.height));return f.map(({x:I,y:S,width:x,height:v})=>{const O=ea({width:x,height:v});return Un(O).putImageData(g.getImageData(I,S,x,v),0,0),O})}const wg=Xe(Je());async function Qo(r,l){if(!dr(r)&&!Cs(r))throw new Error("extractFaceTensors - expected image tensor to be 3D or 4D");if(Cs(r)&&r.shape[0]>1)throw new Error("extractFaceTensors - batchSize > 1 not supported");return wg.tidy(()=>{const[u,p,g]=r.shape.slice(Cs(r)?1:0),f=l.map(S=>S instanceof Wt?S.forSize(p,u).box:S).map(S=>S.clipAtImageBorders(p,u)),I=f.map(({x:S,y:x,width:v,height:O})=>wg.slice3d(r.as3D(u,p,g),[x,S,0],[O,v,g]));return I})}async function no(r,l){const u=mt.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 p2(r){const l=await no(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 Hm(u)}async function Ym(r){return(await no(r)).json()}async function d2(r){return new Float32Array(await(await no(r)).arrayBuffer())}function Lg(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 g=r.split("/").filter(S=>S),f=r.endsWith(".json")?g[g.length-1]:u;let I=p+(r.endsWith(".json")?g.slice(0,g.length-1):g).join("/");return I=r.startsWith("/")?`/${I}`:I,{modelBaseUri:I,manifestUri:I==="/"?`/${f}`:`${I}/${f}`}}const rD=Xe(Je());async function zm(r,l){const{manifestUri:u,modelBaseUri:p}=Lg(r,l);let g=await Ym(u);return rD.io.loadWeights(g,p)}function u2(r,l,u=!1){const{width:p,height:g}=u?to(l):l;return r.width=p,r.height=g,{width:p,height:g}}const br=Xe(Je());class In{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 br.Variable)}getFrozenParams(){return this.getParamList().filter(r=>!(r.tensor instanceof br.Variable))}variable(){this.getFrozenParams().forEach(({path:r,tensor:l})=>{this.reassignParamFromPath(r,l.variable())})}freeze(){this.getTrainableParams().forEach(({path:r,tensor:l})=>{const u=br.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 zm(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}=mt.getEnv(),{manifestUri:u,modelBaseUri:p}=Lg(r,this.getDefaultModelName()),g=x=>Promise.all(x.map(v=>l(v).then(O=>O.buffer))),f=br.io.weightsLoaderFactory(g),I=JSON.parse((await l(u)).toString()),S=await f(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((g,f)=>{if(!g.nextObj.hasOwnProperty(f))throw new Error(`traversePropertyPath - object does not have property ${f}, for path ${r}`);return{obj:g.nextObj,objProp:f,nextObj:g.nextObj[f]}},{nextObj:this.params}),{obj:u,objProp:p}=l;if(!u||!p||!(u[p]instanceof br.Tensor))throw new Error(`traversePropertyPath - parameter is not a tensor, for path ${r}`);return{obj:u,objProp:p}}}const Hc=Xe(Je());function es(r,l,u){return Hc.tidy(()=>{let p=Hc.separableConv2d(r,l.depthwise_filter,l.pointwise_filter,u,"same");return p=Hc.add(p,l.bias),p})}const Dt=Xe(Je());function Sg(r,l,u=!1){return Dt.tidy(()=>{const p=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,[2,2],"same"),l.conv0.bias):es(r,l.conv0,[2,2])),g=es(p,l.conv1,[1,1]),f=Dt.relu(Dt.add(p,g)),I=es(f,l.conv2,[1,1]);return Dt.relu(Dt.add(p,Dt.add(g,I)))})}function Wu(r,l,u=!1,p=!0){return Dt.tidy(()=>{const g=Dt.relu(u?Dt.add(Dt.conv2d(r,l.conv0.filters,p?[2,2]:[1,1],"same"),l.conv0.bias):es(r,l.conv0,p?[2,2]:[1,1])),f=es(g,l.conv1,[1,1]),I=Dt.relu(Dt.add(g,f)),S=es(I,l.conv2,[1,1]),x=Dt.relu(Dt.add(g,Dt.add(f,S))),v=es(x,l.conv3,[1,1]);return Dt.relu(Dt.add(g,Dt.add(f,Dt.add(S,v))))})}const uo=Xe(Je());function ma(r,l,u="same",p=!1){return uo.tidy(()=>{const g=uo.add(uo.conv2d(r,l.filters,[1,1],u),l.bias);return p?uo.relu(g):g})}function zn(r,l){Object.keys(r).forEach(u=>{l.some(p=>p.originalPath===u)||r[u].dispose()})}const Ig=Xe(Je());function qc(r,l){return function(u,p,g,f){const I=Ig.tensor4d(r(u*p*g*g),[g,g,u,p]),S=Ig.tensor1d(r(p));return l.push({paramPath:`${f}/filters`},{paramPath:`${f}/bias`}),{filters:I,bias:S}}}const xg=Xe(Je());function Tg(r,l){return function(u,p,g){const f=xg.tensor2d(r(u*p),[u,p]),I=xg.tensor1d(r(p));return l.push({paramPath:`${g}/weights`},{paramPath:`${g}/bias`}),{weights:f,bias:I}}}class tx{constructor(r,l,u){this.depthwise_filter=r;this.pointwise_filter=l;this.bias=u}}const $u=Xe(Je());function jc(r,l){return function(u,p,g){const f=$u.tensor4d(r(3*3*u),[3,3,u,1]),I=$u.tensor4d(r(u*p),[1,1,u,p]),S=$u.tensor1d(r(p));return l.push({paramPath:`${g}/depthwise_filter`},{paramPath:`${g}/pointwise_filter`},{paramPath:`${g}/bias`}),new tx(f,I,S)}}function Kc(r){return function(l){const u=r(`${l}/depthwise_filter`,4),p=r(`${l}/pointwise_filter`,4),g=r(`${l}/bias`,1);return new tx(u,p,g)}}function ms(r,l){return function(u,p,g){const f=r[u];if(!na(f,p))throw new Error(`expected weightMap[${u}] to be a Tensor${p}D, instead have ${f}`);return l.push({originalPath:u,paramPath:g||u}),f}}function Gn(r){let l=r;function u(g){const f=l.slice(0,g);return l=l.slice(g),f}function p(){return l}return{extractWeights:u,getRemainingWeights:p}}function Ag(r,l){const u=qc(r,l),p=jc(r,l);function g(I,S,x,v=!1){const O=v?u(I,S,3,`${x}/conv0`):p(I,S,`${x}/conv0`),C=p(S,S,`${x}/conv1`),U=p(S,S,`${x}/conv2`);return{conv0:O,conv1:C,conv2:U}}function f(I,S,x,v=!1){const{conv0:O,conv1:C,conv2:U}=g(I,S,x,v),G=p(S,S,`${x}/conv3`);return{conv0:O,conv1:C,conv2:U,conv3:G}}return{extractDenseBlock3Params:g,extractDenseBlock4Params:f}}function oD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractDenseBlock4Params:g}=Ag(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2"),x=g(128,256,"dense3");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S,dense3:x}}}function vg(r){return function(l){const u=r(`${l}/filters`,4),p=r(`${l}/bias`,1);return{filters:u,bias:p}}}function Ng(r,l){const u=ms(r,l),p=vg(u),g=Kc(u);function f(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`);return{conv0:v,conv1:O,conv2:C}}function I(S,x=!1){const v=x?p(`${S}/conv0`):g(`${S}/conv0`),O=g(`${S}/conv1`),C=g(`${S}/conv2`),U=g(`${S}/conv3`);return{conv0:v,conv1:O,conv2:C,conv3:U}}return{extractDenseBlock3Params:f,extractDenseBlock4Params:I}}function aD(r){const l=[],{extractDenseBlock4Params:u}=Ng(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2"),dense3:u("dense3")};return zn(r,l),{params:p,paramMappings:l}}const po=Xe(Je());class Cg extends In{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],g=Ys(u,p).div(po.scalar(255));let f=Wu(g,l.dense0,!0);return f=Wu(f,l.dense1),f=Wu(f,l.dense2),f=Wu(f,l.dense3),f=po.avgPool(f,[7,7],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"face_feature_extractor_model"}extractParamsFromWeigthMap(r){return aD(r)}extractParams(r){return oD(r)}}const Xc=Xe(Je());function Uu(r,l){return Xc.tidy(()=>Xc.add(Xc.matMul(r,l.weights),l.bias))}function cD(r,l,u){const p=[],{extractWeights:g,getRemainingWeights:f}=Gn(r),I=Tg(g,p),S=I(l,u,"fc");if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{paramMappings:p,params:{fc:S}}}function lD(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:p("fc")};return zn(r,l),{params:g,paramMappings:l}}function Rg(r){const l={},u={};return Object.keys(r).forEach(p=>{const g=p.startsWith("fc")?u:l;g[p]=r[p]}),{featureExtractorMap:l,classifierMap:u}}const hD=Xe(Je());class Og extends In{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 hD.tidy(()=>{const u=r instanceof hr?this.faceFeatureExtractor.forwardInput(r):r;return Uu(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 cD(r,this.getClassifierChannelsIn(),this.getClassifierChannelsOut())}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Rg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),lD(u)}extractParams(r){const l=this.getClassifierChannelsIn(),u=this.getClassifierChannelsOut(),p=u*l+u,g=r.slice(0,r.length-p),f=r.slice(r.length-p);return this.faceFeatureExtractor.extractWeights(g),this.extractClassifierParams(f)}}const Bm=["neutral","happy","sad","angry","fearful","disgusted","surprised"];class Qr{constructor(r){if(r.length!==7)throw new Error(`FaceExpressions.constructor - expected probabilities.length to be 7, have: ${r.length}`);Bm.forEach((l,u)=>{this[l]=r[u]})}asSortedArray(){return Bm.map(r=>({expression:r,probability:this[r]})).sort((r,l)=>l.probability-r.probability)}}const Jc=Xe(Je());class Mm extends Og{constructor(r=new Cg){super("FaceExpressionNet",r)}forwardInput(r){return Jc.tidy(()=>Jc.softmax(this.runNet(r)))}async forward(r){return this.forwardInput(await Tt(r))}async predictExpressions(r){const l=await Tt(r),u=await this.forwardInput(l),p=await Promise.all(Jc.unstack(u).map(async f=>{const I=await f.data();return f.dispose(),I}));u.dispose();const g=p.map(f=>new Qr(f));return l.isBatchInput?g:g[0]}getDefaultModelName(){return"face_expression_model"}getClassifierChannelsIn(){return 256}getClassifierChannelsOut(){return 7}}function $m(r){return r.expressions instanceof Qr}function fu(r,l){const u={expressions:l};return Object.assign({},r,u)}function bZ(r,l,u=.1,p){const g=Array.isArray(l)?l:[l];g.forEach(f=>{const I=f instanceof Qr?f:$m(f)?f.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(C=>C.probability>u),v=mi(f)?f.detection.box.bottomLeft:p||new qe(0,0),O=new Dc(x.map(C=>`${C.expression} (${sa(C.probability)})`),v);O.draw(r)})}function Jr(r){return mi(r)&&r.landmarks instanceof Ns&&r.unshiftedLandmarks instanceof Ns&&r.alignedRect instanceof Wt}function Jo(r,l){const{box:u}=r.detection,p=l.shiftBy(u.x,u.y),g=p.align(),{imageDims:f}=r.detection,I=new Wt(r.detection.score,g.rescale(f.reverse()),f),S={landmarks:p,unshiftedLandmarks:l,alignedRect:I};return Object.assign({},r,S)}class uD{constructor(r={}){const{drawLines:l=!0,drawPoints:u=!0,lineWidth:p,lineColor:g,pointSize:f,pointColor:I}=r;this.drawLines=l,this.drawPoints=u,this.lineWidth=p||1,this.pointSize=f||2,this.lineColor=g||"rgba(0, 255, 255, 1)",this.pointColor=I||"rgba(255, 0, 255, 1)"}}class dD{constructor(r,l={}){this.faceLandmarks=r,this.options=new uD(l)}draw(r){const l=Un(r),{drawLines:u,drawPoints:p,lineWidth:g,lineColor:f,pointSize:I,pointColor:S}=this.options;if(u&&this.faceLandmarks instanceof Rc&&(l.strokeStyle=f,l.lineWidth=g,ur(l,this.faceLandmarks.getJawOutline()),ur(l,this.faceLandmarks.getLeftEyeBrow()),ur(l,this.faceLandmarks.getRightEyeBrow()),ur(l,this.faceLandmarks.getNose()),ur(l,this.faceLandmarks.getLeftEye(),!0),ur(l,this.faceLandmarks.getRightEye(),!0),ur(l,this.faceLandmarks.getMouth(),!0)),p){l.strokeStyle=S,l.fillStyle=S;const x=v=>{l.beginPath(),l.arc(v.x,v.y,I,0,2*Math.PI),l.fill()};this.faceLandmarks.positions.forEach(x)}}}function wZ(r,l){const u=Array.isArray(l)?l:[l];u.forEach(p=>{const g=p instanceof Ns?p:Jr(p)?p.landmarks:void 0;if(!g)throw new Error("drawFaceLandmarks - expected faceExpressions to be FaceLandmarks | WithFaceLandmarks> or array thereof");new dD(g).draw(r)})}const Im={};uu(Im,{AnchorPosition:()=>Pi,DrawBox:()=>QS,DrawBoxOptions:()=>b2,DrawFaceLandmarks:()=>dD,DrawFaceLandmarksOptions:()=>uD,DrawTextField:()=>Dc,DrawTextFieldOptions:()=>Zm,drawContour:()=>ur,drawDetections:()=>E7,drawFaceExpressions:()=>bZ,drawFaceLandmarks:()=>wZ});function LZ(r,l){const u=qc(r,l),p=jc(r,l);function g(I,S,x){const v=p(I,S,`${x}/separable_conv0`),O=p(S,S,`${x}/separable_conv1`),C=u(I,S,1,`${x}/expansion_conv`);return{separable_conv0:v,separable_conv1:O,expansion_conv:C}}function f(I,S){const x=p(I,I,`${S}/separable_conv0`),v=p(I,I,`${S}/separable_conv1`),O=p(I,I,`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:u,extractSeparableConvParams:p,extractReductionBlockParams:g,extractMainBlockParams:f}}function pD(r,l){const u=[],{extractWeights:p,getRemainingWeights:g}=Gn(r),{extractConvParams:f,extractSeparableConvParams:I,extractReductionBlockParams:S,extractMainBlockParams:x}=LZ(p,u),v=f(3,32,3,"entry_flow/conv_in"),O=S(32,64,"entry_flow/reduction_block_0"),C=S(64,128,"entry_flow/reduction_block_1"),U={conv_in:v,reduction_block_0:O,reduction_block_1:C},G={};Bi(l,0,1).forEach(ge=>{G[`main_block_${ge}`]=x(128,`middle_flow/main_block_${ge}`)});const ne=S(128,256,"exit_flow/reduction_block"),te=I(256,512,"exit_flow/separable_conv"),oe={reduction_block:ne,separable_conv:te};if(g().length!==0)throw new Error(`weights remaing after extract: ${g().length}`);return{paramMappings:u,params:{entry_flow:U,middle_flow:G,exit_flow:oe}}}function SZ(r,l){const u=ms(r,l),p=vg(u),g=Kc(u);function f(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=p(`${S}/expansion_conv`);return{separable_conv0:x,separable_conv1:v,expansion_conv:O}}function I(S){const x=g(`${S}/separable_conv0`),v=g(`${S}/separable_conv1`),O=g(`${S}/separable_conv2`);return{separable_conv0:x,separable_conv1:v,separable_conv2:O}}return{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}}function mD(r,l){const u=[],{extractConvParams:p,extractSeparableConvParams:g,extractReductionBlockParams:f,extractMainBlockParams:I}=SZ(r,u),S=p("entry_flow/conv_in"),x=f("entry_flow/reduction_block_0"),v=f("entry_flow/reduction_block_1"),O={conv_in:S,reduction_block_0:x,reduction_block_1:v},C={};Bi(l,0,1).forEach(te=>{C[`main_block_${te}`]=I(`middle_flow/main_block_${te}`)});const U=f("exit_flow/reduction_block"),G=g("exit_flow/separable_conv"),ne={reduction_block:U,separable_conv:G};return zn(r,u),{params:{entry_flow:O,middle_flow:C,exit_flow:ne},paramMappings:u}}const tn=Xe(Je());function fD(r,l,u){return tn.add(tn.conv2d(r,l.filters,u,"same"),l.bias)}function nx(r,l,u=!0){let p=u?tn.relu(r):r;return p=es(p,l.separable_conv0,[1,1]),p=es(tn.relu(p),l.separable_conv1,[1,1]),p=tn.maxPool(p,[3,3],[2,2],"same"),p=tn.add(p,fD(r,l.expansion_conv,[2,2])),p}function IZ(r,l){let u=es(tn.relu(r),l.separable_conv0,[1,1]);return u=es(tn.relu(u),l.separable_conv1,[1,1]),u=es(tn.relu(u),l.separable_conv2,[1,1]),u=tn.add(u,r),u}class gD extends In{constructor(r){super("TinyXception");this._numMainBlocks=r}forwardInput(r){const{params:l}=this;if(!l)throw new Error("TinyXception - load model before inference");return tn.tidy(()=>{const u=tn.cast(r.toBatchTensor(112,!0),"float32"),p=[122.782,117.001,104.298],g=Ys(u,p).div(tn.scalar(256));let f=tn.relu(fD(g,l.entry_flow.conv_in,[2,2]));return f=nx(f,l.entry_flow.reduction_block_0,!1),f=nx(f,l.entry_flow.reduction_block_1),Bi(this._numMainBlocks,0,1).forEach(I=>{f=IZ(f,l.middle_flow[`main_block_${I}`])}),f=nx(f,l.exit_flow.reduction_block),f=tn.relu(es(f,l.exit_flow.separable_conv,[1,1])),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"tiny_xception_model"}extractParamsFromWeigthMap(r){return mD(r,this._numMainBlocks)}extractParams(r){return pD(r,this._numMainBlocks)}}function yD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),g=Tg(u,l),f=g(512,1,"fc/age"),I=g(512,2,"fc/gender");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{fc:{age:f,gender:I}}}}function bD(r){const l=[],u=ms(r,l);function p(f){const I=u(`${f}/weights`,2),S=u(`${f}/bias`,1);return{weights:I,bias:S}}const g={fc:{age:p("fc/age"),gender:p("fc/gender")}};return zn(r,l),{params:g,paramMappings:l}}var Ui;(function(r){r.FEMALE="female",r.MALE="male"})(Ui||(Ui={}));const Hi=Xe(Je());class jm extends In{constructor(r=new gD(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 hr?this.faceFeatureExtractor.forwardInput(r):r,p=Hi.avgPool(u,[7,7],[2,2],"valid").as2D(u.shape[0],-1),g=Uu(p,l.fc.age).as1D(),f=Uu(p,l.fc.gender);return{age:g,gender:f}})}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 Tt(r))}async predictAgeAndGender(r){const l=await Tt(r),u=await this.forwardInput(l),p=Hi.unstack(u.age),g=Hi.unstack(u.gender),f=p.map((S,x)=>({ageTensor:S,genderTensor:g[x]})),I=await Promise.all(f.map(async({ageTensor:S,genderTensor:x})=>{const v=(await S.data())[0],O=(await x.data())[0],C=O>.5,U=C?Ui.MALE:Ui.FEMALE,G=C?O:1-O;return S.dispose(),x.dispose(),{age:v,gender:U,genderProbability:G}}));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 yD(r)}extractParamsFromWeigthMap(r){const{featureExtractorMap:l,classifierMap:u}=Rg(r);return this.faceFeatureExtractor.loadFromWeightMap(l),bD(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 fs=Xe(Je());class Eg extends Og{postProcess(r,l,u){const p=u.map(({width:f,height:I})=>{const S=l/Math.max(I,f);return{width:f*S,height:I*S}}),g=p.length;return fs.tidy(()=>{const f=(O,C)=>fs.stack([fs.fill([68],O,"float32"),fs.fill([68],C,"float32")],1).as2D(1,136).as1D(),I=(O,C)=>{const{width:U,height:G}=p[O];return C(U,G)?Math.abs(U-G)/2:0},S=O=>I(O,(C,U)=>CI(O,(C,U)=>Uf(S(C),x(C))))).div(fs.stack(Array.from(Array(g),(O,C)=>f(p[C].width,p[C].height))));return v})}forwardInput(r){return fs.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 Tt(r))}async detectLandmarks(r){const l=await Tt(r),u=fs.tidy(()=>fs.unstack(this.forwardInput(l))),p=await Promise.all(u.map(async(g,f)=>{const I=Array.from(await g.data()),S=I.filter((v,O)=>Km(O)),x=I.filter((v,O)=>!Km(O));return new Rc(Array(68).fill(0).map((v,O)=>new qe(S[O],x[O])),{height:l.getInputHeight(f),width:l.getInputWidth(f)})}));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getClassifierChannelsOut(){return 136}}class Ac extends Eg{constructor(r=new Cg){super("FaceLandmark68Net",r)}getDefaultModelName(){return"face_landmark_68_model"}getClassifierChannelsIn(){return 256}}function wD(r){const l=[],{extractDenseBlock3Params:u}=Ng(r,l),p={dense0:u("dense0",!0),dense1:u("dense1"),dense2:u("dense2")};return zn(r,l),{params:p,paramMappings:l}}function LD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractDenseBlock3Params:g}=Ag(u,l),f=g(3,32,"dense0",!0),I=g(32,64,"dense1"),S=g(64,128,"dense2");if(p().length!==0)throw new Error(`weights remaing after extract: ${p().length}`);return{paramMappings:l,params:{dense0:f,dense1:I,dense2:S}}}const mo=Xe(Je());class SD extends In{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],g=Ys(u,p).div(mo.scalar(255));let f=Sg(g,l.dense0,!0);return f=Sg(f,l.dense1),f=Sg(f,l.dense2),f=mo.avgPool(f,[14,14],[2,2],"valid"),f})}async forward(r){return this.forwardInput(await Tt(r))}getDefaultModelName(){return"face_feature_extractor_tiny_model"}extractParamsFromWeigthMap(r){return wD(r)}extractParams(r){return LD(r)}}class Um extends Eg{constructor(r=new SD){super("FaceLandmark68TinyNet",r)}getDefaultModelName(){return"face_landmark_68_tiny_model"}getClassifierChannelsIn(){return 128}}class h2 extends Ac{}const Dg=Xe(Je());function ID(r,l){return Dg.add(Dg.mul(r,l.weights),l.biases)}const Zc=Xe(Je());function sx(r,l,u,p,g="same"){const{filters:f,bias:I}=l.conv;let S=Zc.conv2d(r,f,u,g);return S=Zc.add(S,I),S=ID(S,l.scale),p?Zc.relu(S):S}function xD(r,l){return sx(r,l,[1,1],!0)}function ix(r,l){return sx(r,l,[1,1],!1)}function kg(r,l){return sx(r,l,[2,2],!0,"valid")}const gs=Xe(Je());function xZ(r,l){function u(S,x,v){const O=r(S),C=O.length/(x*v*v);if(YS(C))throw new Error(`depth has to be an integer: ${C}, weights.length: ${O.length}, numFilters: ${x}, filterSize: ${v}`);return gs.tidy(()=>gs.transpose(gs.tensor4d(O,[x,C,v,v]),[2,3,1,0]))}function p(S,x,v,O){const C=u(S,x,v),U=gs.tensor1d(r(x));return l.push({paramPath:`${O}/filters`},{paramPath:`${O}/bias`}),{filters:C,bias:U}}function g(S,x){const v=gs.tensor1d(r(S)),O=gs.tensor1d(r(S));return l.push({paramPath:`${x}/weights`},{paramPath:`${x}/biases`}),{weights:v,biases:O}}function f(S,x,v,O){const C=p(S,x,v,`${O}/conv`),U=g(x,`${O}/scale`);return{conv:C,scale:U}}function I(S,x,v,O,C=!1){const U=f((C?.5:1)*S,x,v,`${O}/conv1`),G=f(S,x,v,`${O}/conv2`);return{conv1:U,conv2:G}}return{extractConvLayerParams:f,extractResidualLayerParams:I}}function TD(r){const{extractWeights:l,getRemainingWeights:u}=Gn(r),p=[],{extractConvLayerParams:g,extractResidualLayerParams:f}=xZ(l,p),I=g(4704,32,7,"conv32_down"),S=f(9216,32,3,"conv32_1"),x=f(9216,32,3,"conv32_2"),v=f(9216,32,3,"conv32_3"),O=f(36864,64,3,"conv64_down",!0),C=f(36864,64,3,"conv64_1"),U=f(36864,64,3,"conv64_2"),G=f(36864,64,3,"conv64_3"),ne=f(147456,128,3,"conv128_down",!0),te=f(147456,128,3,"conv128_1"),oe=f(147456,128,3,"conv128_2"),ge=f(589824,256,3,"conv256_down",!0),fe=f(589824,256,3,"conv256_1"),Ae=f(589824,256,3,"conv256_2"),Te=f(589824,256,3,"conv256_down_out"),Ve=gs.tidy(()=>gs.transpose(gs.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 rt={conv32_down:I,conv32_1:S,conv32_2:x,conv32_3:v,conv64_down:O,conv64_1:C,conv64_2:U,conv64_3:G,conv128_down:ne,conv128_1:te,conv128_2:oe,conv256_down:ge,conv256_1:fe,conv256_2:Ae,conv256_down_out:Te,fc:Ve};return{params:rt,paramMappings:p}}function TZ(r,l){const u=ms(r,l);function p(I){const S=u(`${I}/scale/weights`,1),x=u(`${I}/scale/biases`,1);return{weights:S,biases:x}}function g(I){const S=u(`${I}/conv/filters`,4),x=u(`${I}/conv/bias`,1),v=p(I);return{conv:{filters:S,bias:x},scale:v}}function f(I){return{conv1:g(`${I}/conv1`),conv2:g(`${I}/conv2`)}}return{extractConvLayerParams:g,extractResidualLayerParams:f}}function AD(r){const l=[],{extractConvLayerParams:u,extractResidualLayerParams:p}=TZ(r,l),g=u("conv32_down"),f=p("conv32_1"),I=p("conv32_2"),S=p("conv32_3"),x=p("conv64_down"),v=p("conv64_1"),O=p("conv64_2"),C=p("conv64_3"),U=p("conv128_down"),G=p("conv128_1"),ne=p("conv128_2"),te=p("conv256_down"),oe=p("conv256_1"),ge=p("conv256_2"),fe=p("conv256_down_out"),Ae=r.fc;if(l.push({originalPath:"fc",paramPath:"fc"}),!VS(Ae))throw new Error(`expected weightMap[fc] to be a Tensor2D, instead have ${Ae}`);const Te={conv32_down:g,conv32_1:f,conv32_2:I,conv32_3:S,conv64_down:x,conv64_1:v,conv64_2:O,conv64_3:C,conv128_down:U,conv128_1:G,conv128_2:ne,conv256_down:te,conv256_1:oe,conv256_2:ge,conv256_down_out:fe,fc:Ae};return zn(r,l),{params:Te,paramMappings:l}}const Vn=Xe(Je());function bi(r,l){let u=xD(r,l.conv1);return u=ix(u,l.conv2),u=Vn.add(u,r),u=Vn.relu(u),u}function Bu(r,l){let u=kg(r,l.conv1);u=ix(u,l.conv2);let p=Vn.avgPool(r,2,2,"valid");const g=Vn.zeros(p.shape),f=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 x=Vn.zeros(S);u=Vn.concat([u,x],1);const v=[...u.shape];v[2]=1;const O=Vn.zeros(v);u=Vn.concat([u,O],2)}return p=f?Vn.concat([p,g],3):p,u=Vn.add(p,u),u=Vn.relu(u),u}const ks=Xe(Je());class Tc extends In{constructor(){super("FaceRecognitionNet")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("FaceRecognitionNet - load model before inference");return ks.tidy(()=>{const u=ks.cast(r.toBatchTensor(150,!0),"float32"),p=[122.782,117.001,104.298],g=Ys(u,p).div(ks.scalar(256));let f=kg(g,l.conv32_down);f=ks.maxPool(f,3,2,"valid"),f=bi(f,l.conv32_1),f=bi(f,l.conv32_2),f=bi(f,l.conv32_3),f=Bu(f,l.conv64_down),f=bi(f,l.conv64_1),f=bi(f,l.conv64_2),f=bi(f,l.conv64_3),f=Bu(f,l.conv128_down),f=bi(f,l.conv128_1),f=bi(f,l.conv128_2),f=Bu(f,l.conv256_down),f=bi(f,l.conv256_1),f=bi(f,l.conv256_2),f=Bu(f,l.conv256_down_out);const I=f.mean([1,2]),S=ks.matMul(I,l.fc);return S})}async forward(r){return this.forwardInput(await Tt(r))}async computeFaceDescriptor(r){const l=await Tt(r),u=ks.tidy(()=>ks.unstack(this.forwardInput(l))),p=await Promise.all(u.map(g=>g.data()));return u.forEach(g=>g.dispose()),l.isBatchInput?p:p[0]}getDefaultModelName(){return"face_recognition_model"}extractParamsFromWeigthMap(r){return AD(r)}extractParams(r){return TD(r)}}function l2(r){const l=new Tc;return l.extractWeights(r),l}function gu(r,l){const u={descriptor:l};return Object.assign({},r,u)}function c2(r){return typeof r.age=="number"}function yu(r,l){const u={age:l};return Object.assign({},r,u)}function a2(r){return(r.gender===Ui.MALE||r.gender===Ui.FEMALE)&&Ec(r.genderProbability)}function mu(r,l,u){const p={gender:l,genderProbability:u};return Object.assign({},r,p)}const wi=Xe(Je());function AZ(r,l){function u(x,v){const O=wi.tensor4d(r(3*3*x),[3,3,x,1]),C=wi.tensor1d(r(x)),U=wi.tensor1d(r(x)),G=wi.tensor1d(r(x)),ne=wi.tensor1d(r(x));return l.push({paramPath:`${v}/filters`},{paramPath:`${v}/batch_norm_scale`},{paramPath:`${v}/batch_norm_offset`},{paramPath:`${v}/batch_norm_mean`},{paramPath:`${v}/batch_norm_variance`}),{filters:O,batch_norm_scale:C,batch_norm_offset:U,batch_norm_mean:G,batch_norm_variance:ne}}function p(x,v,O,C,U){const G=wi.tensor4d(r(x*v*O*O),[O,O,x,v]),ne=wi.tensor1d(r(v));return l.push({paramPath:`${C}/filters`},{paramPath:`${C}/${U?"batch_norm_offset":"bias"}`}),{filters:G,bias:ne}}function g(x,v,O,C){const{filters:U,bias:G}=p(x,v,O,C,!0);return{filters:U,batch_norm_offset:G}}function f(x,v,O){const C=u(x,`${O}/depthwise_conv`),U=g(x,v,1,`${O}/pointwise_conv`);return{depthwise_conv:C,pointwise_conv:U}}function I(){const x=g(3,32,3,"mobilenetv1/conv_0"),v=f(32,64,"mobilenetv1/conv_1"),O=f(64,128,"mobilenetv1/conv_2"),C=f(128,128,"mobilenetv1/conv_3"),U=f(128,256,"mobilenetv1/conv_4"),G=f(256,256,"mobilenetv1/conv_5"),ne=f(256,512,"mobilenetv1/conv_6"),te=f(512,512,"mobilenetv1/conv_7"),oe=f(512,512,"mobilenetv1/conv_8"),ge=f(512,512,"mobilenetv1/conv_9"),fe=f(512,512,"mobilenetv1/conv_10"),Ae=f(512,512,"mobilenetv1/conv_11"),Te=f(512,1024,"mobilenetv1/conv_12"),Ve=f(1024,1024,"mobilenetv1/conv_13");return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,conv_8:oe,conv_9:ge,conv_10:fe,conv_11:Ae,conv_12:Te,conv_13:Ve}}function S(){const x=g(1024,256,1,"prediction_layer/conv_0"),v=g(256,512,3,"prediction_layer/conv_1"),O=g(512,128,1,"prediction_layer/conv_2"),C=g(128,256,3,"prediction_layer/conv_3"),U=g(256,128,1,"prediction_layer/conv_4"),G=g(128,256,3,"prediction_layer/conv_5"),ne=g(256,64,1,"prediction_layer/conv_6"),te=g(64,128,3,"prediction_layer/conv_7"),oe=p(512,12,1,"prediction_layer/box_predictor_0/box_encoding_predictor"),ge=p(512,9,1,"prediction_layer/box_predictor_0/class_predictor"),fe=p(1024,24,1,"prediction_layer/box_predictor_1/box_encoding_predictor"),Ae=p(1024,18,1,"prediction_layer/box_predictor_1/class_predictor"),Te=p(512,24,1,"prediction_layer/box_predictor_2/box_encoding_predictor"),Ve=p(512,18,1,"prediction_layer/box_predictor_2/class_predictor"),rt=p(256,24,1,"prediction_layer/box_predictor_3/box_encoding_predictor"),Ct=p(256,18,1,"prediction_layer/box_predictor_3/class_predictor"),Ut=p(256,24,1,"prediction_layer/box_predictor_4/box_encoding_predictor"),Kt=p(256,18,1,"prediction_layer/box_predictor_4/class_predictor"),Dn=p(128,24,1,"prediction_layer/box_predictor_5/box_encoding_predictor"),An=p(128,18,1,"prediction_layer/box_predictor_5/class_predictor"),vn={box_encoding_predictor:oe,class_predictor:ge},Zs={box_encoding_predictor:fe,class_predictor:Ae},Si={box_encoding_predictor:Te,class_predictor:Ve},Qs={box_encoding_predictor:rt,class_predictor:Ct},ya={box_encoding_predictor:Ut,class_predictor:Kt},ol={box_encoding_predictor:Dn,class_predictor:An};return{conv_0:x,conv_1:v,conv_2:O,conv_3:C,conv_4:U,conv_5:G,conv_6:ne,conv_7:te,box_predictor_0:vn,box_predictor_1:Zs,box_predictor_2:Si,box_predictor_3:Qs,box_predictor_4:ya,box_predictor_5:ol}}return{extractMobilenetV1Params:I,extractPredictionLayerParams:S}}function vD(r){const l=[],{extractWeights:u,getRemainingWeights:p}=Gn(r),{extractMobilenetV1Params:g,extractPredictionLayerParams:f}=AZ(u,l),I=g(),S=f(),x=wi.tensor3d(u(5118*4),[1,5118,4]),v={extra_dim:x};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:v},paramMappings:l}}function vZ(r,l){const u=ms(r,l);function p(v,O,C){const U=u(`${v}/Conv2d_${O}_pointwise/weights`,4,`${C}/filters`),G=u(`${v}/Conv2d_${O}_pointwise/convolution_bn_offset`,1,`${C}/batch_norm_offset`);return{filters:U,batch_norm_offset:G}}function g(v){const O=`mobilenetv1/conv_${v}`,C=`MobilenetV1/Conv2d_${v}_depthwise`,U=`${O}/depthwise_conv`,G=`${O}/pointwise_conv`,ne=u(`${C}/depthwise_weights`,4,`${U}/filters`),te=u(`${C}/BatchNorm/gamma`,1,`${U}/batch_norm_scale`),oe=u(`${C}/BatchNorm/beta`,1,`${U}/batch_norm_offset`),ge=u(`${C}/BatchNorm/moving_mean`,1,`${U}/batch_norm_mean`),fe=u(`${C}/BatchNorm/moving_variance`,1,`${U}/batch_norm_variance`);return{depthwise_conv:{filters:ne,batch_norm_scale:te,batch_norm_offset:oe,batch_norm_mean:ge,batch_norm_variance:fe},pointwise_conv:p("MobilenetV1",v,G)}}function f(){return{conv_0:p("MobilenetV1",0,"mobilenetv1/conv_0"),conv_1:g(1),conv_2:g(2),conv_3:g(3),conv_4:g(4),conv_5:g(5),conv_6:g(6),conv_7:g(7),conv_8:g(8),conv_9:g(9),conv_10:g(10),conv_11:g(11),conv_12:g(12),conv_13:g(13)}}function I(v,O){const C=u(`${v}/weights`,4,`${O}/filters`),U=u(`${v}/biases`,1,`${O}/bias`);return{filters:C,bias:U}}function S(v){const O=I(`Prediction/BoxPredictor_${v}/BoxEncodingPredictor`,`prediction_layer/box_predictor_${v}/box_encoding_predictor`),C=I(`Prediction/BoxPredictor_${v}/ClassPredictor`,`prediction_layer/box_predictor_${v}/class_predictor`);return{box_encoding_predictor:O,class_predictor:C}}function x(){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:f,extractPredictionLayerParams:x}}function ND(r){const l=[],{extractMobilenetV1Params:u,extractPredictionLayerParams:p}=vZ(r,l),g=r["Output/extra_dim"];if(l.push({originalPath:"Output/extra_dim",paramPath:"output_layer/extra_dim"}),!dr(g))throw new Error(`expected weightMap['Output/extra_dim'] to be a Tensor3D, instead have ${g}`);const f={mobilenetv1:u(),prediction_layer:p(),output_layer:{extra_dim:g}};return zn(r,l),{params:f,paramMappings:l}}const fo=Xe(Je());function Ks(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 wr=Xe(Je()),NZ=.0010000000474974513;function CZ(r,l,u){return wr.tidy(()=>{let p=wr.depthwiseConv2d(r,l.filters,u,"same");return p=wr.batchNorm(p,l.batch_norm_mean,l.batch_norm_variance,l.batch_norm_offset,l.batch_norm_scale,NZ),wr.clipByValue(p,0,6)})}function RZ(r){return[2,4,6,12].some(l=>l===r)?[2,2]:[1,1]}function CD(r,l){return wr.tidy(()=>{let u,p=Ks(r,l.conv_0,[2,2]);const g=[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(g.forEach((f,I)=>{const S=I+1,x=RZ(S);p=CZ(p,f.depthwise_conv,x),p=Ks(p,f.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 RD(r,l,u,p,g){const f=r.shape[0],I=Math.min(u,f),S=l.map((O,C)=>({score:O,boxIndex:C})).filter(O=>O.score>g).sort((O,C)=>C.score-O.score),x=O=>O<=p?1:0,v=[];return S.forEach(O=>{if(v.length>=I)return;const C=O.score;for(let U=v.length-1;U>=0;--U){const G=OZ(r,O.boxIndex,v[U]);if(G===0)continue;if(O.score*=x(G),O.score<=g)break}C===O.score&&v.push(O.boxIndex)}),v}function OZ(r,l,u){const p=r.arraySync(),g=Math.min(p[l][0],p[l][2]),f=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]),x=Math.min(p[u][0],p[u][2]),v=Math.min(p[u][1],p[u][3]),O=Math.max(p[u][0],p[u][2]),C=Math.max(p[u][1],p[u][3]),U=(I-g)*(S-f),G=(O-x)*(C-v);if(U<=0||G<=0)return 0;const ne=Math.max(g,x),te=Math.max(f,v),oe=Math.min(I,O),ge=Math.min(S,C),fe=Math.max(oe-ne,0)*Math.max(ge-te,0);return fe/(U+G-fe)}const De=Xe(Je());function EZ(r){const l=De.unstack(De.transpose(r,[1,0])),u=[De.sub(l[2],l[0]),De.sub(l[3],l[1])],p=[De.add(l[0],De.div(u[0],De.scalar(2))),De.add(l[1],De.div(u[1],De.scalar(2)))];return{sizes:u,centers:p}}function DZ(r,l){const{sizes:u,centers:p}=EZ(r),g=De.unstack(De.transpose(l,[1,0])),f=De.div(De.mul(De.exp(De.div(g[2],De.scalar(5))),u[0]),De.scalar(2)),I=De.add(De.mul(De.div(g[0],De.scalar(10)),u[0]),p[0]),S=De.div(De.mul(De.exp(De.div(g[3],De.scalar(5))),u[1]),De.scalar(2)),x=De.add(De.mul(De.div(g[1],De.scalar(10)),u[1]),p[1]);return De.transpose(De.stack([De.sub(I,f),De.sub(x,S),De.add(I,f),De.add(x,S)]),[1,0])}function OD(r,l,u){return De.tidy(()=>{const p=r.shape[0];let g=DZ(De.reshape(De.tile(u.extra_dim,[p,1,1]),[-1,4]),De.reshape(r,[-1,4]));g=De.reshape(g,[p,g.shape[0]/p,4]);const f=De.sigmoid(De.slice(l,[0,0,1],[-1,-1,-1]));let I=De.slice(f,[0,0,0],[-1,-1,1]);I=De.reshape(I,[p,I.shape[1]]);const S=De.unstack(g),x=De.unstack(I);return{boxes:S,scores:x}})}const Mu=Xe(Je());function fa(r,l){return Mu.tidy(()=>{const u=r.shape[0],p=Mu.reshape(ma(r,l.box_encoding_predictor),[u,-1,1,4]),g=Mu.reshape(ma(r,l.class_predictor),[u,-1,3]);return{boxPredictionEncoding:p,classPrediction:g}})}const Pu=Xe(Je());function ED(r,l,u){return Pu.tidy(()=>{const p=Ks(r,u.conv_0,[1,1]),g=Ks(p,u.conv_1,[2,2]),f=Ks(g,u.conv_2,[1,1]),I=Ks(f,u.conv_3,[2,2]),S=Ks(I,u.conv_4,[1,1]),x=Ks(S,u.conv_5,[2,2]),v=Ks(x,u.conv_6,[1,1]),O=Ks(v,u.conv_7,[2,2]),C=fa(l,u.box_predictor_0),U=fa(r,u.box_predictor_1),G=fa(g,u.box_predictor_2),ne=fa(I,u.box_predictor_3),te=fa(x,u.box_predictor_4),oe=fa(O,u.box_predictor_5),ge=Pu.concat([C.boxPredictionEncoding,U.boxPredictionEncoding,G.boxPredictionEncoding,ne.boxPredictionEncoding,te.boxPredictionEncoding,oe.boxPredictionEncoding],1),fe=Pu.concat([C.classPrediction,U.classPrediction,G.classPrediction,ne.classPrediction,te.classPrediction,oe.classPrediction],1);return{boxPredictions:ge,classPredictions:fe}})}class Vs{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 Li=Xe(Je());class Xo extends In{constructor(){super("SsdMobilenetv1")}forwardInput(r){const{params:l}=this;if(!l)throw new Error("SsdMobilenetv1 - load model before inference");return Li.tidy(()=>{const u=Li.cast(r.toBatchTensor(512,!1),"float32"),p=Li.sub(Li.mul(u,Li.scalar(.007843137718737125)),Li.scalar(1)),g=CD(p,l.mobilenetv1),{boxPredictions:f,classPredictions:I}=ED(g.out,g.conv11,l.prediction_layer);return OD(f,I,l.output_layer)})}async forward(r){return this.forwardInput(await Tt(r))}async locateFaces(r,l={}){const{maxResults:u,minConfidence:p}=new Vs(l),g=await Tt(r),{boxes:f,scores:I}=this.forwardInput(g),S=f[0],x=I[0];for(let fe=1;fe{const[Ae,Te]=[Math.max(0,oe[fe][0]),Math.min(1,oe[fe][2])].map(Ct=>Ct*te),[Ve,rt]=[Math.max(0,oe[fe][1]),Math.min(1,oe[fe][3])].map(Ct=>Ct*ne);return new Wt(v[fe],new Cc(Ve,Ae,rt-Ve,Te-Ae),{height:g.getInputHeight(0),width:g.getInputWidth(0)})});return S.dispose(),x.dispose(),ge}getDefaultModelName(){return"ssd_mobilenetv1_model"}extractParamsFromWeigthMap(r){return ND(r)}extractParams(r){return vD(r)}}function $S(r){const l=new Xo;return l.extractWeights(r),l}function UC(r){return $S(r)}class BC extends Xo{}const DD=.4,kD=[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)],FD=[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)],_D=[117.001,114.697,97.404],WD="tiny_yolov2_model",$D="tiny_yolov2_separable_conv_model";const Fg=r=>typeof r=="number";function Tm(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(!Fg(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=>Fg(l.x)&&Fg(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(Fg)))throw new Error(`config.meanRgb has to be an array of shape [number, number, number], have: ${JSON.stringify(r.meanRgb)}`)}const Xs=Xe(Je());function Qc(r){return Xs.tidy(()=>{const l=Xs.mul(r,Xs.scalar(.10000000149011612));return Xs.add(Xs.relu(Xs.sub(r,l)),l)})}const Js=Xe(Je());function Lr(r,l){return Js.tidy(()=>{let u=Js.pad(r,[[0,0],[1,1],[1,1],[0,0]]);return u=Js.conv2d(u,l.conv.filters,[1,1],"valid"),u=Js.sub(u,l.bn.sub),u=Js.mul(u,l.bn.truediv),u=Js.add(u,l.conv.bias),Qc(u)})}const go=Xe(Je());function Sr(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 rx=Xe(Je());function kZ(r,l){const u=qc(r,l);function p(I,S){const x=rx.tensor1d(r(I)),v=rx.tensor1d(r(I));return l.push({paramPath:`${S}/sub`},{paramPath:`${S}/truediv`}),{sub:x,truediv:v}}function g(I,S,x){const v=u(I,S,3,`${x}/conv`),O=p(S,`${x}/bn`);return{conv:v,bn:O}}const f=jc(r,l);return{extractConvParams:u,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}}function UD(r,l,u,p){const{extractWeights:g,getRemainingWeights:f}=Gn(r),I=[],{extractConvParams:S,extractConvWithBatchNormParams:x,extractSeparableConvParams:v}=kZ(g,I);let O;if(l.withSeparableConvs){const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=l.isFirstLayerConv2d?S(C,U,3,"conv0"):v(C,U,"conv0"),Ve=v(U,G,"conv1"),rt=v(G,ne,"conv2"),Ct=v(ne,te,"conv3"),Ut=v(te,oe,"conv4"),Kt=v(oe,ge,"conv5"),Dn=fe?v(ge,fe,"conv6"):void 0,An=Ae?v(fe,Ae,"conv7"):void 0,vn=S(Ae||fe||ge,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:Ct,conv4:Ut,conv5:Kt,conv6:Dn,conv7:An,conv8:vn}}else{const[C,U,G,ne,te,oe,ge,fe,Ae]=p,Te=x(C,U,"conv0"),Ve=x(U,G,"conv1"),rt=x(G,ne,"conv2"),Ct=x(ne,te,"conv3"),Ut=x(te,oe,"conv4"),Kt=x(oe,ge,"conv5"),Dn=x(ge,fe,"conv6"),An=x(fe,Ae,"conv7"),vn=S(Ae,5*u,1,"conv8");O={conv0:Te,conv1:Ve,conv2:rt,conv3:Ct,conv4:Ut,conv5:Kt,conv6:Dn,conv7:An,conv8:vn}}if(f().length!==0)throw new Error(`weights remaing after extract: ${f().length}`);return{params:O,paramMappings:I}}function FZ(r,l){const u=ms(r,l);function p(S){const x=u(`${S}/sub`,1),v=u(`${S}/truediv`,1);return{sub:x,truediv:v}}function g(S){const x=u(`${S}/filters`,4),v=u(`${S}/bias`,1);return{filters:x,bias:v}}function f(S){const x=g(`${S}/conv`),v=p(`${S}/bn`);return{conv:x,bn:v}}const I=Kc(u);return{extractConvParams:g,extractConvWithBatchNormParams:f,extractSeparableConvParams:I}}function BD(r,l){const u=[],{extractConvParams:p,extractConvWithBatchNormParams:g,extractSeparableConvParams:f}=FZ(r,u);let I;if(l.withSeparableConvs){const S=l.filterSizes&&l.filterSizes.length||9;I={conv0:l.isFirstLayerConv2d?p("conv0"):f("conv0"),conv1:f("conv1"),conv2:f("conv2"),conv3:f("conv3"),conv4:f("conv4"),conv5:f("conv5"),conv6:S>7?f("conv6"):void 0,conv7:S>8?f("conv7"):void 0,conv8:p("conv8")}}else I={conv0:g("conv0"),conv1:g("conv1"),conv2:g("conv2"),conv3:g("conv3"),conv4:g("conv4"),conv5:g("conv5"),conv6:g("conv6"),conv7:g("conv7"),conv8:p("conv8")};return zn(r,u),{params:I,paramMappings:u}}var Am;(function(r){r[r.XS=224]="XS",r[r.SM=320]="SM",r[r.MD=416]="MD",r[r.LG=608]="LG"})(Am||(Am={}));class $i{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 kt=Xe(Je());class el extends In{constructor(r){super("TinyYolov2");Tm(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=Lr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Lr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=Lr(u,l.conv6),u=Lr(u,l.conv7),ma(u,l.conv8,"valid",!1)}runMobilenet(r,l){let u=this.config.isFirstLayerConv2d?Qc(ma(r,l.conv0,"valid",!1)):Sr(r,l.conv0);return u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv1),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv2),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv3),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv4),u=kt.maxPool(u,[2,2],[2,2],"same"),u=Sr(u,l.conv5),u=kt.maxPool(u,[2,2],[1,1],"same"),u=l.conv6?Sr(u,l.conv6):u,u=l.conv7?Sr(u,l.conv7):u,ma(u,l.conv8,"valid",!1)}forwardInput(r,l){const{params:u}=this;if(!u)throw new Error("TinyYolov2 - load model before inference");return kt.tidy(()=>{let p=kt.cast(r.toBatchTensor(l,!1),"float32");return p=this.config.meanRgb?Ys(p,this.config.meanRgb):p,p=p.div(kt.scalar(256)),this.config.withSeparableConvs?this.runMobilenet(p,u):this.runTinyYolov2(p,u)})}async forward(r,l){return await this.forwardInput(await Tt(r),l)}async detect(r,l={}){const{inputSize:u,scoreThreshold:p}=new $i(l),g=await Tt(r),f=await this.forwardInput(g,u),I=kt.tidy(()=>kt.unstack(f)[0].expandDims()),S={width:g.getInputWidth(0),height:g.getInputHeight(0)},x=await this.extractBoxes(I,g.getReshapedInputDimensions(0),p);f.dispose(),I.dispose();const v=x.map(te=>te.box),O=x.map(te=>te.score),C=x.map(te=>te.classScore),U=x.map(te=>this.config.classes[te.label]),G=Cm(v.map(te=>te.rescale(u)),O,this.config.iouThreshold,!0),ne=G.map(te=>new ta(O[te],C[te],U[te],v[te],S));return ne}getDefaultModelName(){return""}extractParamsFromWeigthMap(r){return BD(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 UD(r,this.config,this.boxEncodingSize,l)}async extractBoxes(r,l,u){const{width:p,height:g}=l,f=Math.max(p,g),I=f/p,S=f/g,x=r.shape[1],v=this.config.anchors.length,[O,C,U]=kt.tidy(()=>{const oe=r.reshape([x,x,v,this.boxEncodingSize]),ge=oe.slice([0,0,0,0],[x,x,v,4]),fe=oe.slice([0,0,0,4],[x,x,v,1]),Ae=this.withClassScores?kt.softmax(oe.slice([0,0,0,5],[x,x,v,this.config.classes.length]),3):kt.scalar(0);return[ge,fe,Ae]}),G=[],ne=await C.array(),te=await O.array();for(let oe=0;oeu){const Te=(ge+xc(te[oe][ge][fe][0]))/x*I,Ve=(oe+xc(te[oe][ge][fe][1]))/x*S,rt=Math.exp(te[oe][ge][fe][2])*this.config.anchors[fe].x/x*I,Ct=Math.exp(te[oe][ge][fe][3])*this.config.anchors[fe].y/x*S,Ut=Te-rt/2,Kt=Ve-Ct/2,Dn={row:oe,col:ge,anchor:fe},{classScore:An,label:vn}=this.withClassScores?await this.extractPredictedClass(U,Dn):{classScore:1,label:0};G.push({box:new Oc(Ut,Kt,Ut+rt,Kt+Ct),score:Ae,classScore:Ae*An,label:vn,...Dn})}}return O.dispose(),C.dispose(),U.dispose(),G}async extractPredictedClass(r,l){const{row:u,col:p,anchor:g}=l,f=await r.array();return Array(this.config.classes.length).fill(0).map((I,S)=>f[u][p][g][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 Sc extends el{constructor(r=!0){const l=Object.assign({},{withSeparableConvs:r,iouThreshold:DD,classes:["face"]},r?{anchors:FD,meanRgb:_D}:{anchors:kD,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 Wt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return this.withSeparableConvs?$D:WD}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}function WC(r,l=!0){const u=new Sc(l);return u.extractWeights(r),u}class vm extends $i{constructor(){super(...arguments);this._name="TinyFaceDetectorOptions"}}class Hs{async then(r){return r(await this.run())}async run(){throw new Error("ComposableTask - run is not implemented")}}const ox=Xe(Je());async function ga(r,l,u,p,g=({alignedRect:f})=>f){const f=r.map(x=>Jr(x)?g(x):x.detection),I=p||(l instanceof ox.Tensor?await Qo(l,f):await Zo(l,f)),S=await u(I);return I.forEach(x=>x instanceof ox.Tensor&&x.dispose()),S}async function tl(r,l,u,p,g){return ga([r],l,async f=>u(f[0]),p,g)}const MD=.4,PD=[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)],zD=[117.001,114.697,97.404];class Ic extends el{constructor(){const r={withSeparableConvs:!0,iouThreshold:MD,classes:["face"],anchors:PD,meanRgb:zD,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 Wt(p.score,p.relativeBox,{width:p.imageWidth,height:p.imageHeight}))}getDefaultModelName(){return"tiny_face_detector_model"}extractParamsFromWeigthMap(r){return super.extractParamsFromWeigthMap(r)}}const ht={ssdMobilenetv1:new Xo,tinyFaceDetector:new Ic,tinyYolov2:new Sc,faceLandmark68Net:new Ac,faceLandmark68TinyNet:new Um,faceRecognitionNet:new Tc,faceExpressionNet:new Mm,ageGenderNet:new jm},BS=(r,l)=>ht.ssdMobilenetv1.locateFaces(r,l),zC=(r,l)=>ht.tinyFaceDetector.locateFaces(r,l),GC=(r,l)=>ht.tinyYolov2.locateFaces(r,l),MS=r=>ht.faceLandmark68Net.detectLandmarks(r),VC=r=>ht.faceLandmark68TinyNet.detectLandmarks(r),YC=r=>ht.faceRecognitionNet.computeFaceDescriptor(r),HC=r=>ht.faceExpressionNet.predictExpressions(r),qC=r=>ht.ageGenderNet.predictAgeAndGender(r),PS=r=>ht.ssdMobilenetv1.load(r),jC=r=>ht.tinyFaceDetector.load(r),KC=r=>ht.tinyYolov2.load(r),XC=r=>ht.faceLandmark68Net.load(r),JC=r=>ht.faceLandmark68TinyNet.load(r),ZC=r=>ht.faceRecognitionNet.load(r),QC=r=>ht.faceExpressionNet.load(r),e2=r=>ht.ageGenderNet.load(r),t2=PS,n2=BS,s2=MS;class GD extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class Vu extends GD{async run(){const r=await this.parentTask,l=await ga(r,this.input,async u=>await Promise.all(u.map(p=>ht.faceExpressionNet.predictExpressions(p))),this.extractedFaces);return r.map((u,p)=>fu(u,l[p]))}withAgeAndGender(){return new zu(this,this.input)}}class Yu extends GD{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>ht.faceExpressionNet.predictExpressions(u),this.extractedFaces);return fu(r,l)}withAgeAndGender(){return new Gu(this,this.input)}}class il extends Vu{withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class rl extends Yu{withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class VD extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.extractedFaces=u}}class zu extends VD{async run(){const r=await this.parentTask,l=await ga(r,this.input,async u=>await Promise.all(u.map(p=>ht.ageGenderNet.predictAgeAndGender(p))),this.extractedFaces);return r.map((u,p)=>{const{age:g,gender:f,genderProbability:I}=l[p];return yu(mu(u,f,I),g)})}withFaceExpressions(){return new Vu(this,this.input)}}class Gu extends VD{async run(){const r=await this.parentTask;if(!r)return;const{age:l,gender:u,genderProbability:p}=await tl(r,this.input,g=>ht.ageGenderNet.predictAgeAndGender(g),this.extractedFaces);return yu(mu(r,u,p),l)}withFaceExpressions(){return new Yu(this,this.input)}}class nl extends zu{withFaceExpressions(){return new il(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class sl extends Gu{withFaceExpressions(){return new rl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class Wm extends Hs{constructor(r,l){super();this.parentTask=r;this.input=l}}class Kr extends Wm{async run(){const r=await this.parentTask,l=await ga(r,this.input,u=>Promise.all(u.map(p=>ht.faceRecognitionNet.computeFaceDescriptor(p))),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return l.map((u,p)=>gu(r[p],u))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}}class Xr extends Wm{async run(){const r=await this.parentTask;if(!r)return;const l=await tl(r,this.input,u=>ht.faceRecognitionNet.computeFaceDescriptor(u),null,u=>u.landmarks.align(null,{useDlibAlignment:!0}));return gu(r,l)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}}const Hu=Xe(Je());class km extends Hs{constructor(r,l,u){super();this.parentTask=r;this.input=l;this.useTinyLandmarkNet=u}get landmarkNet(){return this.useTinyLandmarkNet?ht.faceLandmark68TinyNet:ht.faceLandmark68Net}}class Fm extends km{async run(){const r=await this.parentTask,l=r.map(g=>g.detection),u=this.input instanceof Hu.Tensor?await Qo(this.input,l):await Zo(this.input,l),p=await Promise.all(u.map(g=>this.landmarkNet.detectLandmarks(g)));return u.forEach(g=>g instanceof Hu.Tensor&&g.dispose()),r.map((g,f)=>Jo(g,p[f]))}withFaceExpressions(){return new il(this,this.input)}withAgeAndGender(){return new nl(this,this.input)}withFaceDescriptors(){return new Kr(this,this.input)}}class _m extends km{async run(){const r=await this.parentTask;if(!r)return;const{detection:l}=r,u=this.input instanceof Hu.Tensor?await Qo(this.input,[l]):await Zo(this.input,[l]),p=await this.landmarkNet.detectLandmarks(u[0]);return u.forEach(g=>g instanceof Hu.Tensor&&g.dispose()),Jo(r,p)}withFaceExpressions(){return new rl(this,this.input)}withAgeAndGender(){return new sl(this,this.input)}withFaceDescriptor(){return new Xr(this,this.input)}}class Em extends Hs{constructor(r,l=new Vs){super();this.input=r;this.options=l}}class pu extends Em{async run(){const{input:r,options:l}=this,u=l instanceof vm?p=>ht.tinyFaceDetector.locateFaces(p,l):l instanceof Vs?p=>ht.ssdMobilenetv1.locateFaces(p,l):l instanceof $i?p=>ht.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=>Zr({},u)))})}withFaceLandmarks(r=!1){return new Fm(this.runAndExtendWithFaceDetections(),this.input,r)}withFaceExpressions(){return new Vu(this.runAndExtendWithFaceDetections(),this.input)}withAgeAndGender(){return new zu(this.runAndExtendWithFaceDetections(),this.input)}}class Dm extends Em{async run(){const r=await new pu(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?Zr({},l):void 0)})}withFaceLandmarks(r=!1){return new _m(this.runAndExtendWithFaceDetection(),this.input,r)}withFaceExpressions(){return new Yu(this.runAndExtendWithFaceDetection(),this.input)}withAgeAndGender(){return new Gu(this.runAndExtendWithFaceDetection(),this.input)}}function i2(r,l=new Vs){return new Dm(r,l)}function du(r,l=new Vs){return new pu(r,l)}async function zS(r,l){return console.warn("allFacesSsdMobilenetv1 is deprecated and will be removed soon, use the high level api instead"),await du(r,new Vs(l?{minConfidence:l}:{})).withFaceLandmarks().withFaceDescriptors()}async function r2(r,l={}){return console.warn("allFacesTinyYolov2 is deprecated and will be removed soon, use the high level api instead"),await du(r,new $i(l)).withFaceLandmarks().withFaceDescriptors()}const o2=zS;function Pm(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((g,f)=>g-p[f]).reduce((g,f)=>g+Math.pow(f,2),0))}class GS{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 g=()=>`person ${p++}`;this._labeledDescriptors=u.map(f=>{if(f instanceof so)return f;if(f instanceof Float32Array)return new so(g(),[f]);if(f.descriptor&&f.descriptor instanceof Float32Array)return new so(g(),[f.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=>Pm(u,r)).reduce((u,p)=>u+p,0)/(l.length||1)}matchDescriptor(r){return this.labeledDescriptors.map(({descriptors:l,label:u})=>new Lu(u,this.computeMeanDistance(r,l))).reduce((l,u)=>l.distancer.toJSON())}}static fromJSON(r){const l=r.labeledDescriptors.map(u=>so.fromJSON(u));return new GS(l,r.distanceThreshold)}}function $C(r){const l=new Ic;return l.extractWeights(r),l}function US(r,l){const{width:u,height:p}=new Zn(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(g=>US(g,{width:u,height:p}));if(Jr(r)){const g=r.detection.forSize(u,p),f=r.unshiftedLandmarks.forSize(g.box.width,g.box.height);return Jo(Zr(r,g),f)}return mi(r)?Zr(r,r.detection.forSize(u,p)):r instanceof Ns||r instanceof Wt?r.forSize(u,p):r}var FC="0.8.2";return g2();})(); /** * @license * Copyright 2017 Google LLC. All Rights Reserved. diff --git a/dist/face-api.nobundle.cjs b/dist/face-api.nobundle.cjs index 8fb7874..e4164b0 100644 --- a/dist/face-api.nobundle.cjs +++ b/dist/face-api.nobundle.cjs @@ -4289,7 +4289,7 @@ function resizeResults(results, dimensions) { } // package.json -var version = "0.8.1"; +var version = "0.8.2"; // src/index.ts __export(exports, { diff --git a/dist/face-api.nobundle.js b/dist/face-api.nobundle.js index c61921c..6595c2d 100644 --- a/dist/face-api.nobundle.js +++ b/dist/face-api.nobundle.js @@ -4481,7 +4481,7 @@ function resizeResults(results, dimensions) { } // package.json -var version = "0.8.1"; +var version = "0.8.2"; // src/index.ts import * as tf42 from "@tensorflow/tfjs/dist/tf.es2017.js"; diff --git a/package-lock.json b/package-lock.json index f70285d..87e7735 100644 --- a/package-lock.json +++ b/package-lock.json @@ -84,9 +84,9 @@ "dev": true }, "@types/node": { - "version": "14.11.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-14.11.8.tgz", - "integrity": "sha512-KPcKqKm5UKDkaYPTuXSx8wEP7vE9GnuaXIZKijwRYcePpZFDVuy2a57LarFKiORbHOuTOOwYzxVxcUzsh2P2Pw==", + "version": "14.14.3", + "resolved": "https://registry.npmjs.org/@types/node/-/node-14.14.3.tgz", + "integrity": "sha512-33/L34xS7HVUx23e0wOT2V1qPF1IrHgQccdJVm9uXGTB9vFBrrzBtkQymT8VskeKOxjz55MSqMv0xuLq+u98WQ==", "dev": true }, "@types/node-fetch": { @@ -126,14 +126,12 @@ "ansi-regex": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.0.tgz", - "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==", - "dev": true + "integrity": "sha512-bY6fj56OUQ0hU1KjFNDQuJFezqKdrAyFdIevADiqrWHwSlbmBNMHp5ak2f40Pm8JTFyM2mqxkG6ngkHO11f/lg==" }, "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" } @@ -192,10 +190,9 @@ } }, "cliui": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.1.tgz", - "integrity": "sha512-rcvHOWyGyid6I1WjT/3NatKj2kDt9OdSHSXpyLXaMWFbKpGACNW8pRhhdPUq9MWUOdwn8Rz9AVETjF4105rZZQ==", - "dev": true, + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.3.tgz", + "integrity": "sha512-Gj3QHTkVMPKqwP3f7B4KPkBZRMR9r4rfi5bXFpg1a+Svvj8l7q5CnkBkVQzfxT5DFSsGk2+PascOgL0JYkL2kw==", "requires": { "string-width": "^4.2.0", "strip-ansi": "^6.0.0", @@ -206,7 +203,6 @@ "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" } @@ -214,8 +210,7 @@ "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==", - "dev": true + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" }, "combined-stream": { "version": "1.0.8", @@ -253,8 +248,7 @@ "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==", - "dev": true + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" }, "esbuild": { "version": "0.6.34", @@ -265,8 +259,7 @@ "escalade": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==" }, "form-data": { "version": "3.0.0", @@ -288,8 +281,7 @@ "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==", - "dev": true + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==" }, "glob": { "version": "7.1.6", @@ -330,8 +322,7 @@ "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==", - "dev": true + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" }, "make-error": { "version": "1.3.6", @@ -393,8 +384,7 @@ "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", - "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=", - "dev": true + "integrity": "sha1-jGStX9MNqxyXbiNE/+f3kqam30I=" }, "rimraf": { "version": "3.0.2", @@ -437,7 +427,6 @@ "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", @@ -448,7 +437,6 @@ "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" } @@ -491,7 +479,6 @@ "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", @@ -505,31 +492,28 @@ "dev": true }, "y18n": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.2.tgz", - "integrity": "sha512-CkwaeZw6dQgqgPGeTWKMXCRmMcBgETFlTml1+ZOO+q7kGst8NREJ+eWwFNPVUQ4QGdAaklbqCZHH6Zuep1RjiA==", - "dev": true + "version": "5.0.5", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.5.tgz", + "integrity": "sha512-hsRUr4FFrvhhRH12wOdfs38Gy7k2FFzB9qgN9v3aLykRq0dRcdcpz5C9FxdS2NuhOrI/628b/KSTJ3rwHysYSg==" }, "yargs": { - "version": "16.0.3", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.0.3.tgz", - "integrity": "sha512-6+nLw8xa9uK1BOEOykaiYAJVh6/CjxWXK/q9b5FpRgNslt8s22F2xMBqVIKgCRjNgGvGPBy8Vog7WN7yh4amtA==", - "dev": true, + "version": "16.1.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.1.0.tgz", + "integrity": "sha512-upWFJOmDdHN0syLuESuvXDmrRcWd1QafJolHskzaw79uZa7/x53gxQKiR07W59GWY1tFhhU/Th9DrtSfpS782g==", "requires": { - "cliui": "^7.0.0", - "escalade": "^3.0.2", + "cliui": "^7.0.2", + "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", "string-width": "^4.2.0", - "y18n": "^5.0.1", - "yargs-parser": "^20.0.0" + "y18n": "^5.0.2", + "yargs-parser": "^20.2.2" } }, "yargs-parser": { - "version": "20.2.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.1.tgz", - "integrity": "sha512-yYsjuSkjbLMBp16eaOt7/siKTjNVjMm3SoJnIg3sEh/JsvqVVDyjRKmaJV4cl+lNIgq6QEco2i3gDebJl7/vLA==", - "dev": true + "version": "20.2.3", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.3.tgz", + "integrity": "sha512-emOFRT9WVHw03QSvN5qor9QQT9+sw5vwxfYweivSMHTcAXPefwVae2FjO7JJjj8hCE4CzPOPeFM83VwT29HCww==" }, "yn": { "version": "3.1.1",